libreCAD源码阅读笔记3

1 前言

打开RS_Document源码后,又出现了RS_EntityContainer、RS_Entity等一系列类,这好像就是libreCAD的数据模型,有具体的实体类,也有实体类所关联的数据。

2 相关类

2.1 RS_EntityContainer类

RS_EntityContainer类是一个Composite模式的类,主要是各种点、线、面等具体要素的集合。

2.2 RS_Entity类

RS_Entity是点、线、弧线等绘制对象的基类,属性有该绘制对象所属的对象容器、图层;对象的最小外包矩形;绘制自己时用的RS_Pen;对象ID等内容。对象的draw函数为纯虚函数,子类需要实现该类实现绘制自身的功能,该函数接受RS_Painter、RS_GrahpicView作为绘制环境和绘制窗体。

2.2.1 RS_Entity子类示例:RS_Point


不论是RS_Point、RS_Line、RS_Polyline,甚至是RS_Layer都对应一个RS_XXXData结构体与绘制对象组合负责存储对象的具体数据。RS_PointData结构体里面维护一个RS_Vector类,该类是一个空间三维向量,存储着(x,y,z)。下面是RS_Point的draw函数完成自身绘制,也就是通过传入的RS_Painter、RS_GraphicView,用RS_Painter将自身的数据绘制到RS_GraphicView面板上。

void RS_Point::draw(RS_Painter* painter,RS_GraphicView* view, double& /*patternOffset*/) {if (painter==NULL || view==NULL) {return;}painter->drawPoint(view->toGui(getPos()));
}

2.3 RS_Document类

RS_Document类本身就是一个RS_EntityContainer容器,存储着各种各样的绘制实体和他们的数据,因此RS_Document就是一个数据集合。同时,RS_Document可以看成一个数据文件里面的数据,如DWG、DXF文件等。

3 结束

学到这里大体明白了libreCAD的数据组织情况。下一步将继续阅读XX_GraphicView相关类,分析画一个实体的具体实现过程。

libreCAD源码阅读笔记3相关推荐

  1. libreCAD源码阅读笔记1

    libreCAD源码阅读笔记1 一 前言: 正如官网(https://www.librecad.org)所说,libreCAD是一个开源的CAD制图软件,可以运行在Windows.Apple.Linu ...

  2. libreCAD源码阅读笔记4

    libreCAD源码阅读笔记4 前言 总的来说,程序主窗口QC_ApplicationWindow使用QMdiArea作为多文档主界面,每个文档QC_MDIWindow使用RS_Document作为数 ...

  3. libreCAD源码阅读笔记2

    libreCAD源码阅读笔记2 1. 前言 继续学习QC_MDIWindow类.QG_ActionHandler类相关代码 2. QC_MDIWindow类 QC_MDIWindow类继承QT QMd ...

  4. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  5. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  6. 代码分析:NASM源码阅读笔记

    NASM源码阅读笔记 NASM(Netwide Assembler)的使用文档和代码间的注释相当齐全,这给阅读源码 提供了很大的方便.按作者的说法,这是一个模块化的,可重用的x86汇编器, 而且能够被 ...

  7. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是"引导"文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http:// ...

  8. Yii源码阅读笔记 - 日志组件

    2015-03-09 一 By youngsterxyf 使用 Yii框架为开发者提供两个静态方法进行日志记录: Yii::log($message, $level, $category); Yii: ...

  9. AQS源码阅读笔记(一)

    AQS源码阅读笔记 先看下这个类张非常重要的一个静态内部类Node.如下: static final class Node {//表示当前节点以共享模式等待锁static final Node SHA ...

最新文章

  1. Android开发之策略模式初探
  2. VS2010 SQL Server 2005 Database Project 使用笔记(二)
  3. Tomcat下载步骤
  4. 桩筏有限元中的弹性板计算_永清县打桩机租赁钢板桩租赁怎么联系?
  5. cursor 过滤 android,Android cursor query方法详解
  6. java crud_Java 8流中的数据库CRUD操作
  7. 3级调度 fpga_Vivado HLS学习笔记——1.了解FPGA架构
  8. opencv:畸变矫正:透视变换算法的思想与实现
  9. html跑马灯_用Excel居然能做“跑马灯”,而且还这么简单!
  10. linux之chsh命令
  11. Android万能使用WebServices(不用引入外部包)
  12. 2016-6-3Ajax异步复习
  13. java的connect和http_【JAVA】通过URLConnection/HttpURLConnection发送HTTP请求的方法
  14. 处理顶点——自动计算顶点缓冲中所有顶点的法线
  15. ActiveMQ学习笔记之异常
  16. mysql 字节 字符_字符与字节 | 字痕随行
  17. java速成书_java速成----一篇博文搞定基础
  18. 安装中文版MSDN方法
  19. Android平台语音交友软件源码开发,语音通话的实现
  20. 微软Win8Server2012各版本安装密匙序列号

热门文章

  1. send/sendto和recv/recvfrom各自的区别
  2. NC91 最长递增子序列
  3. F2. Promising String (hard version)(cf)树状数组
  4. 韦东山嵌入式第一期学习笔记DAY_4——8_3编写第1个程序点亮LED
  5. 均值已知检验方差_χ2检验教案:独立性检验的z统计量
  6. oracle 用impdp 导入dmp文件
  7. 什么是overlay?如何定制overlay?
  8. 层(Overlays)
  9. windows MNN 的使用流程(Python版)
  10. linux-查看cpu核数