# CAD2 **Repository Path**: ProjectAC/CAD2 ## Basic Information - **Project Name**: CAD2 - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2018-06-10 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OOP的神奇 CAD ## 目标 本项目是一个功能简单的CAD,需要支持以下功能: (详细的列表放在文件尾部,当完工的时候就请在前面加一个标记(或者加粗什么的)) - 绘制像素和几何图案 - 对几何图案进行修改 - 擦除素和几何图案 - 保存绘制结果(为自定义格式或者传统图像格式) - 撤销(Undo)或者恢复(Redo)操作 其中,**几何图形**是指简单多边形或者椭圆形,暂时不支持其他图形。 ## 细节 - 像素绘制可以参考简单的画图工具(如MSPaint)。 - 几何图形绘制方式有待商榷。 - 被填充的几何图形视为边与内容的整体。未被填充的几何图形只考虑边。 - 图片有深度(但是摄像机是正交的不考虑透视只考虑遮挡)。没有图层的概念。 ## 类结构 在简要分析了我们的任务之后,基本划定类结构如下。 还没有确定类的接口。**可以再作讨论**。 ### Canvas 像素的画布。 弄成一个二维数组,不要过度封装。 ### IFigure 几何图形虚基类。所有的几何图形派生自它。 ### Polygon 多边形类。派生自IFigure。 ### Ellipse 椭圆类。派生自IFigure。 ### IOperation 操作虚基类。所有的操作派生自它。这个类存在的意义是为了实现撤销堆栈。 ### Stroke 笔画类。当使用像素绘画功能将会产生一个笔画对象。 存储这一比所画下的所有像素的位置。 派生自IOperation。 ### Creation 创建一个Figure的时候会产生一个此类对象加入堆栈。 派生自IOperation。 ### Alteration 修改。这里指的是操作几何图形。 操作椭圆和操作多边形应该并不太一样。似乎第一次开会的时候并没有讨论清楚。**可以再作讨论**。 补充: 我思考了一下认为操作只有两种: - 对整个图形的(移动/缩放,旋转) - 对单个锚点的(多边形的拖动一个顶点,或者椭圆的单独修改长或者宽) 不过基本上是一样的,所以不要再派生类了,继承树决不能太深 ### Image 整个图像视作一个Image。 一个完整的Image应该包含这几个部分: - 一张Canvas - 一个IFigure的列表(大概应该是Vector) ### Renderer 渲染器,把画好的东西显示出来。相当于就是OpenGL接口。 这个类等处理用户界面的同学写好之后才能尝试编写。 ### Loader 读写器。用来保存文件或者加载文件。 它会逐个调用每一个对象的save方法。 ### Editor 每一个Editor对应对一个Image的编辑。 一个完整的Editor应该包含这几个部分: - 一个Image实例 - 一个IOperation的堆栈 - 一个Renderer对应一个编辑窗口 ## 进度 以加粗表示已经完成项,以星号\*表示还未确定具体计划,需要讨论的项。 在讨论完成之后,就将\*号标注的内容展开为各个子任务,例如实现类展开为各个类的类名。 ### 开始 - **初始化Repo和ReadMe** - 配置图形处理库环境(推荐OpenGL + OpenCV) - 在Windows下建工程 ### 开发 - **设计类结构** - *实现类 ### 测试 - *完成测试