Skip to content

ProjectAC/OOPCAD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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下建工程

开发

  • 设计类结构
  • *实现类

测试

  • *完成测试

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •