自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(5)
  • 收藏
  • 关注

原创 LibreCAD源码阅读:撤销和重做

在LibreCAD中,撤销和重做的功能的实现方式是通过设置实体的显示或隐藏来实现的。这种方式在二维CAD中尚且可以使用,在复杂一点的三维CAD中基本上不可用的。例如最常见的三维实体的布尔运算,实体A与实体B相加得到实体C,但是实体C减去实体A通常并不等于实体B。另外LibreCAD不支持非原子实体的修剪,比如不支持直线段与矩形的修剪功能。所以LibreCAD的功能也只是很基础的。

2024-04-22 01:06:58 647

原创 LibreCAD源码阅读:实体捕捉与选择

特征类继承于捕捉类,表明在执行任意一个特征时,都可以使用捕捉和选择的功能。而创建特征类时,传入了当前工作文档中的实体容器给特征类对象了,然后进一步传递给捕捉类,所以捕捉类能够利用这些数据和当前鼠标点来判断是否有实体被选中了。

2024-04-09 21:48:27 369

原创 LibreCAD源码阅读:特征执行流程

按下界面的一个按钮,启用一个特征(功能),后续鼠标、键盘的操作都是在逐步确定特征的参数。界面交互采用MVC设计模式,鼠标在视图中的点击事件会先传递给事件处理类,由事件处理类分发给活动的特征。在特征内部,记录了特征当前执行到了哪一步。特征执行完成后,就会生成一个与该特征对应的实体对象,并添加到实体容器中,然后重绘视图,即可显示所绘制的特征。

2024-04-04 20:24:40 593

原创 LibreCAD源码阅读:实体绘制流程

在LibreCAD中,绘图的画布是QWidget的派生类,绘图设备是QPainter的派生类,利用Qt提供的事件机制进行重绘事件通知。有一点需要吐槽一下,容器类继承于实体类RS_Entity,而直线类RS_Line、圆类RS_Circle等绘图实体类型也是继承于RS_Entity,然后可以包含若干RS_Entity对象。这种奇怪的设计不符合一般认知,造成了源码阅读困难,应予以修正。

2024-03-30 17:07:35 479

原创 实现简易的C++ RTTI

一种RTTI的C++简单实现

2023-12-09 13:53:47 22

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除