# CAD **Repository Path**: ProjectAC/CAD ## Basic Information - **Project Name**: CAD - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2018-06-25 - **Last Updated**: 2025-10-21 ## Categories & Tags **Categories**: cad **Tags**: None ## README # ProjectAC::CAD ## 目标 本项目(ACCAD)是一个功能简单的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接口。 这个类等处理用户界面的同学写好之后才能尝试编写。 ### Editor 每一个Editor对应对一个Image的编辑。 一个完整的Editor应该包含这几个部分: - 一个Image实例 - 一个IOperation的堆栈 - 一个Renderer对应一个编辑窗口 ## 进度 4.30 第一次开会,确定选题——图形编辑器 确定了需要完成的基本工作 确定了基本的分工 建立工作群和git repo 5.7 完成架构设计 由贺思睿基本确定了至今使用的类架构,绘制类图并编写.h头文件 编写了如Vec2(二维点)等常用类 5.14 实现Polygon,Ellipse等矢量图有关的类 由贺思睿编写,廖梓良调试 5.21 实现Render,用MFC制作了一个基本的图形界面用于调试 此时已经可以渲染硬编码的几何图形,但暂时不能交互 基本实现了ACCAD格式的矢量图存取,但是暂未提供接口 5.28 整合已有的功能,实现一个简单的demo,完成任务情况说明.md, 准备中期检查 编写了自动拖曳顶点的测试代码以测试图形修改功能 6.8 图形界面转到QT,创建新工程 由徐博文负责 注意到输入为以像素为单位的整数坐标。为方便处理并提高精度,抽象了Vec2i(二维整点)类。 6.15 初步实现Editor类,并与图形界面对接 主要由廖梓良编写,与徐博文协商对接 由于对QT的了解较少,进展略有些缓慢 考虑到操作过程过于繁琐,额外抽象了AlterManager和StrokeManager两个工厂类,用于创建Alteration和Stroke对象,加入Editor类中。 6.22 联合测试,将已有功能在图形界面中实现 三人协同完成 实现图片存取的功能 6.29 发布前最终测试,细节修改,文档和日志的撰写 6.30 最终发布