图形数据编辑应用JGraphics
来源:互联网 发布:linux查看mysql数据库 编辑:程序博客网 时间:2024/06/08 19:54
- 前言
- 技术概要
- 技术方案
- 关键设计
- 全局变量
- 绘制策略
- 存储策略
前言
JGraphics是我为图形学这门课做的大作业,一款图形数据编辑软件。功能包括图形数据的输入、编辑、裁剪、变换、显示 、存储功能。用win32+OpenGL做的。
github-JGraphics
代码放这儿了。这篇博客不打算讲太多细节,主要算是随笔吧。并且一开始技术方案选得不好,Win32做实在是过时了,封装程度很低,用MFC会更合适一些,所以没有太多参考价值。
写这个玩意儿的过程中倒是有一些比较特殊的感受。软件不大,写了4天。不过因为是接近期末才开始写的,因此这4天的编码强度很高。并且从头到尾都是目标驱动。不像平时写点东西,看到什么感兴趣的都可以去研究一番。这种时间不太够的情况下,基本上就是能怎么快怎么写了。涉及到的很多原理都不求甚解。
再提一句,良好的设计是很重要的。这个项目没有什么时间进行前期准备,只是心里有个大概的感觉就开始写了。而且开始的时候我对Win32和OpenGL都不了解,写得更是磕磕绊绊。后面虽然没有打破原有的框架,但是还是经历了几次大的改动。
写完的时候可以感觉到,没有好好进行前期准备,大概也就只能驾驭这个规模的东西了,再大一些恐怕就要一定程度上重构了。
技术概要
技术方案
本项目没有直接采用更为方便的glut,原因是glut框架不方便提供人性化的用户界面。我使用了win32应用程序框架,以标准windows应用程序界面展现给用户,并由Windows API管理所有的交互事件。
同时,将主面板与OpenGL绑定,让OpenGL在主面板进行绘制。
关键设计
全局变量
vector<PicElem*> vec
- PicElem是所有形状的父类,同时也是裁剪、填充操作的父类。
- vec中按顺序存储了每次绘制的图形
Mode mode
- 用户在绘制不同图形时,处在不同的模式下,变量mode与之关联
Color** pixels
- 一个动态二维数组,保存了每个像素点的颜色
绘制策略
多数情况下,直接将pixels存储的点阵绘制到屏幕。这样做可以保证复杂度比较低(绘制窗口的长*宽),且复杂度与绘制图形的数量无关。否则,如果仅存储图形,使用OpenGL直接绘制线段、多边形等,随着绘制的图形增加,复杂度会变得很高,将会产生明显延迟。
特殊情况说明:
用户在绘制线段时,拖动选择端点,此线段是一直移动的(类似’画图’中的线段绘制)。此时刷新频率很高,如果将这些点同步到pixels再绘制点阵,每次刷新时先擦除再更新再绘制,会造成明显延迟。因此,这些时候调用OpenGL的绘制线段的功能进行绘制。当鼠标停下时再同步到pixels数组中。
存储策略
每种形状的类都重写output()函数,返回一个float output[]数组。output数组的第一个成员是数组长度,第二个成员是形状类型,后面是这个形状的相关数据。
每种形状的类都重写input()函数,可以解析自己生成的output[]数组。
存储时,首先写入一个Int类型的magic number来确定文件类型,然后按vec中的图形顺序,依次调用vec[i]->output(),存储得到的数组。
读取时,首先读取magic number,如果不是设定的magic number,报告错误。如果是,则进行解析。
- 图形数据编辑应用JGraphics
- 【oracle应用技巧】数据的编辑
- 图形编辑类设计方案
- 编辑图形源码
- 图形编辑软件
- VC++下图形编辑
- openlayer 图形样式编辑
- openlayer 图形交互编辑
- 【UWP通用应用开发】编辑文本、绘制图形、3D透视效果及绘制时钟实战
- MapObejcts组件应用设计(地图数据的创建与编辑)
- MapObejcts组件应用设计(地图数据的创建与编辑)
- 数据可视化(Matlab)丨绘制绘制二维、三维和四维图形以及图形编辑与函数图形的绘制
- GEF图形编辑学习笔记
- 图形建模, 矢量图编辑, 科学分析VC++源代码, 数据采集与显示组件库, 软件, VC++源代码
- 函数应用:打印图形
- SVG图形web应用
- textarea支持图形编辑的实现方法
- 二维图形编辑中点选取策略研究
- 欢迎使用CSDN-markdown编辑器
- Java的Integer与int互转
- 文章索引~基于QT
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
- Linux 下安装 Blackfin 交叉编译工具链
- 图形数据编辑应用JGraphics
- Ryan的OC学习总结-----1 第一个OC程序
- I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之网卡驱动移植
- Windows X64下安装xgboost
- Qt下载地址
- Ubuntu下的文件比较工具--meld
- git版本管理
- mysql忘记密码怎么办
- codesmith连接Mysql提示“找不到请求的 .Net Framework Data Provider。可能没有安装。"