当前位置: 首页 > article >正文

FLTK - FLTK1.4.1 - demo - arc

文章目录

    • FLTK - FLTK1.4.1 - demo - arc
    • 概述
    • 笔记
    • END

FLTK - FLTK1.4.1 - demo - arc

概述

// FLTK - FLTK1.4.1 - demo - arc
// 功能 : 通过滑杆来控制 圆形的移动,旋转,改变角度
// 新增知识点
// 控件自画要从Fl_Widget继承一个子类出来,覆盖虚函数draw(), 构造函数调用父类的构造函数
// 自画时,要保存和恢复剪裁区
// 自画时,要保存和恢复转换矩阵
// 设置颜色 (画东西之前)
// 设置平移因子 (画东西之前)
// 画填充的多边形
// 在画完一个填充的多边形后,需要开始新路径,才能画另外的填充多边形
// 画非填充的多边形
// 滑杆的建立和回调设置

笔记

// FLTK - FLTK1.4.1 - demo - arc
// 功能 : 通过滑杆来控制 圆形的移动,旋转,改变角度
// 新增知识点
// 控件自画要从Fl_Widget继承一个子类出来,覆盖虚函数draw(), 构造函数调用父类的构造函数
// 自画时,要保存和恢复剪裁区
// 自画时,要保存和恢复转换矩阵
// 设置颜色 (画东西之前)
// 设置平移因子 (画东西之前)
// 画填充的多边形
// 在画完一个填充的多边形后,需要开始新路径,才能画另外的填充多边形
// 画非填充的多边形
// 滑杆的建立和回调设置

#include "fltk_test.h"

// 如果要将fl demo的实现搬过来测试,就注释掉下面的宏
// #define DONT_USE_FL_DEMO

#ifdef DONT_USE_FL_DEMO
int fl_demo_main(int argc, char** argv)
{
	return 0;
}

#else

#endif // TEST_FL_DEMO

//
// Arc drawing test program for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2015 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file.  If this
// file is missing or damaged, see the license at:
//
//     https://www.fltk.org/COPYING.php
//
// Please see the following page on how to report bugs and issues:
//
//     https://www.fltk.org/bugs.php
//

#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Hor_Value_Slider.H>
#include <FL/fl_draw.H>

double args[6] = { 140, 140, 50, 0, 360, 0 };
const char* name[6] = { "X", "Y", "R", "start", "end", "rotate" };

// 控件自画要从Fl_Widget继承一个子类出来,覆盖虚函数draw(), 构造函数调用父类的构造函数
class Drawing : public Fl_Widget {
    void draw() FL_OVERRIDE {
        // 自画时,要保存和恢复剪裁区
        fl_push_clip(x(), y(), w(), h()); 
        fl_color(FL_DARK3); // 设置背景色
        fl_rectf(x(), y(), w(), h());
        // 自画时,要保存和恢复转换矩阵
        fl_push_matrix();
        if (args[5]) {
            fl_translate(x() + w() / 2.0, y() + h() / 2.0);
            fl_rotate(args[5]);
            fl_translate(-(x() + w() / 2.0), -(y() + h() / 2.0));
        }
        
        fl_color(FL_WHITE); // 设置颜色 (画东西之前)
        fl_translate(x(), y()); // 设置平移因子 (画东西之前)

        fl_begin_complex_polygon(); // 画填充的多边形
        fl_arc(args[0], args[1], args[2], args[3], args[4]);
        fl_gap(); // 在画完一个多边形后,开始新路径
        fl_arc(140, 140, 20, 0, -360);
        fl_end_complex_polygon();

        fl_color(FL_RED);
        fl_begin_line(); // 画非填充的多边形
        fl_arc(args[0], args[1], args[2], args[3], args[4]);
        fl_end_line();

        fl_pop_matrix();
        fl_pop_clip();
    }
public:
    Drawing(int X, int Y, int W, int H) : Fl_Widget(X, Y, W, H) {}
};

Drawing* d;

void slider_cb(Fl_Widget* o, void* v) {
    Fl_Slider* s = (Fl_Slider*)o;
    args[fl_intptr_t(v)] = s->value();
    d->redraw();
}

int fl_demo_main(int argc, char** argv) {
    Fl_Double_Window window(300, 500);
    Drawing drawing(10, 10, 280, 280);
    d = &drawing;

    int y = 300;
    for (int n = 0; n < 6; n++) {
        Fl_Slider* s = new Fl_Hor_Value_Slider(50, y, 240, 25, name[n]); y += 25;
        if (n < 3) { s->minimum(0); s->maximum(300); }
        else if (n == 5) { s->minimum(0); s->maximum(360); }
        else { s->minimum(-360); s->maximum(360); }
        s->step(1);
        s->value(args[n]);
        s->align(FL_ALIGN_LEFT);
        s->callback(slider_cb, (void*)(fl_intptr_t)n);
    }

    window.end();
    window.show(argc, argv);
    return Fl::run();
}

END


http://www.kler.cn/a/529128.html

相关文章:

  • 2025 年,链上固定收益领域迈向新时代
  • pytorch实现循环神经网络
  • OVS-DPDK
  • Android --- CameraX讲解
  • TCL C++开发面试题及参考答案
  • Attention--人工智能领域的核心技术
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》042-Vite工具入门
  • Python之Excel操作 - 读取数据
  • neo4j初识
  • ASP.NET Core自定义 MIME 类型配置
  • 415.字符串相加
  • [SAP ABAP] ALV报表练习3
  • 跨组织环境下 MQTT 桥接架构的评估
  • mac安装wireshark
  • 图书管理系统 Axios 源码__新增图书
  • K近邻算法
  • OSCP - Proving Grounds - Jordak
  • GenAI 在金融服务领域的应用:2025 年的重点是什么
  • conda配置channel
  • Automatic Prefix Caching
  • 【数据结构】(3)包装类和泛型
  • 关于DNN检测中替换caff用Tensorflow的注意事项
  • 7.攻防世界fileclude
  • Qt Creator 中使用 vcpkg
  • Doki Doki Mods Maker小指南
  • 网络原理(3)—— 传输层详解