1.OpenS-CAD是一个不错的小巧的开源程序,以图层方式组织图形,可以绘制基本的线段、弧段、圆,可以进行节点对象捕捉,可以选择几何对象、对图幅进行平移、放大、缩小。可以将结果序列化保存为xml格式。其中的图形数据绘制组织方式和局部刷新知识点值得学习。

http://www.codeproject.com/Articles/22549/OpenS-CAD-a-simple-2D-CAD-application

2.基本架构

  多文档/视图结构。

  将活动的DocumentForm的菜单作为主窗体的菜单。

3.绘制的一点分析

  将绘制成功的对象加入集合,在OnPaint中统一进行绘制(绘制在位图上),新增加对象m_newObject等临时对象绘制在控件上。编辑的过程中通过局部刷新技术减少闪烁,主要是在是MouseMove事件中。移动、选择、绘制、编辑、漫游等命令类型在三个鼠标事件中用于区别不同的操作对应不同的代码。

  绘制线段:MouseDown后,如果新建对象m_newObject为null,构造线段;再次单击m_newObject!=null,添加到m_data中。同时初始化新的m_newObject,线段是两点相同的线段。

程序入口:

 public MainWin()
{
UnitPoint p = HitUtil.CenterPointFrom3Points(new UnitPoint(,), new UnitPoint(1.4142136f, 1.4142136f), new UnitPoint(,)); InitializeComponent();
Text = Program.AppName;
string[] args = Environment.GetCommandLineArgs();
if (args.Length == ) // assume it points to a file
OpenDocument(args[]);
else
OpenDocument(string.Empty); m_menuItems = new MenuItemManager(this);
m_menuItems.SetupStripPanels();
SetupToolbars(); Application.Idle += new EventHandler(OnIdle);
}

MainWin构造函数

文档窗体:DocumentForm

文档窗体中的绘图画布:CanvasCtrl m_canvas;        存储绘制图形数据的集合:DataModel m_data;

最新文章

  1. C#定时任务组件之FluentScheduler
  2. 怎样获取Windows平台下SQL server性能计数器值
  3. python成长之路【第十篇】:浅析python select模块
  4. 使用bokeh-scala进行数据可视化(2)
  5. timus 1022 Genealogical Tree(拓扑排序)
  6. git 和 svn的区别(转)
  7. PHP学习笔记九【数组二】
  8. git bash 出现vim的时候怎么退出
  9. harris 算法python实现
  10. Convex Hull 实现理论+自制Python代码
  11. 求N个元素的子集合个数
  12. h5样式初始化
  13. react+react-router+react-redux+nodejs+mongodb项目
  14. [ExtJS5学习笔记]第二十九节 sencha ext js 5.1.0中动态更换皮肤主题
  15. Linux 监控CPU、内存、IO
  16. VS2013 Winform程序打包部署 InstallShield2015LimitedEdition
  17. 重写comparater比较器
  18. vi命令详解2
  19. Vue2 实例中的 data 属性三种写法与作用:
  20. [Umbraco] 开篇

热门文章

  1. R-CNN目标检测的selective search(SS算法)
  2. error C2065: “m_Pic”: 未声明的标识符
  3. weblogic安装部署war包——windows
  4. TFS对签入文件忽略设置,解决pdb弹出警告
  5. Java精选笔记_面向对象(包、访问控制、内存机制、垃圾回收机制)
  6. css图片宽高相等设置
  7. swift学习笔记之---数组、字典、枚举、结构体
  8. ionic 页面加载事件及loading动画
  9. [转载]会引起全表扫描的几种SQL
  10. MITE