前言第一章 BIMHome基础1.1 专业(插件)开发环境搭建1.1.1 安装BIMHome1.1.2 下载API库1.1.3 CMake创建插件工程及其配置1.2 工作台创建1.3 命令创建1.4 IDocument含义及其创建1.5 IDocumentObject含义及其创建1.6 Hello World示例第二章 算法2.1 构造算法2.1.1 基础图形2.1.2 几何元素2.1.2.1 曲线2.1.2.2 组合体2.1.2.3 面2.1.2.4 壳2.1.2.5 实体2.1.2.6 基础拓扑元素助手2.1.3 几何特征算法2.1.4 专业构件2.2 修复2.3 几何关系算法2.3.1 极值2.3.2 投影2.4 操作编辑算法2.4.1 布尔运算2.4.2 离散运算2.4.2 倒直角操作2.4.3 倒圆角操作2.4.4 抽壳操作2.4.5 裁剪操作2.4.6 偏移操作2.4.7 变换2.5 工具2.6 地质专业2.6.1 地质第三章 二维出图3.1 IDrawPage3.1.1 IDrawPage介绍3.1.2 DXF模板加载(此模块有问题,待修改)3.1.2.1节点树查找与更新3.1.2.2 加载DXF文件3.2 IDrawView3.2.1 绘制基础图形3.2.1.1 非填充几何绘制3.2.1.2 填充几何3.2.2 标注(此模块有问题,待改进)3.2.2.1 尺寸标注3.2.2.2 引线标注3.2.2.3 图注3.2.3 文本绘制3.2.4 表格绘制3.2.4.1 表格的基本操作3.2.4.2 绘制表格3.2.5 投影3.2.5.1 投影3.2.5.1 剖面投影3.2.6 填充3.3 IDrawPage参数定义3.3.1 结构体类型3.4 IDrawView参数定义3.4.1 结构体类型3.4.2 枚举类类型第四章 视图4.1 IViewProvider4.2 主窗口视图4.2.1 IMainWindow4.3 多文档视图4.3.1 IMDIView 4.4 菜单视图4.4.1 IMenuItem4.5 对话框视图4.5.1 ITaskDialog4.6 标签视图4.6.1 IQRibbon4.7 树状视图4.7.1 ITreeWidgetObservationDelegate4.7.2 ITreeItem4.7.3 ITreeWidget4.7.4 ITreePanel4.8 IWorkBench第五章 事件交互5.1 选择事件5.1.1 ISelection5.1.2 ISelectionChanges5.1.3 ISelectionFilterGate5.1.4 ISelectionObserver5.2 控制事件5.2.1 IControl5.3 捕捉事件5.3.1 ISnapProcessedBase5.3.2 ISnapper5.3.3 SnapHandle5.4 命令事件5.4.1 ICommand第六章 常见问题

前言

image-20250718152738415

 

第一章 BIMHome基础

1.1 专业(插件)开发环境搭建

1.1.1 安装BIMHome

1.1.2 下载API库

1.1.3 CMake创建插件工程及其配置

 

  1. 在开始构建之前,确保已经安装了CMake软件和QT软件。

    • 本次所演示的CMake版本为3.15.4,推荐从 官方地址 获取CMake软件。

    • 本次所演示的QT版本为5.14.2,推荐从 官方网址 获取QT软件。

  2. 本次以BIMHomeTestDemo作为演示,来构建一个.dll动态链接库。

    • 项目概述:

      • BIMHomeTestDemo 是一个基于 QtBIMHomeSDK 的动态链接库(DLL)项目,主要用于 BIM相关的功能扩展和测试。该项目包含多个功能模块,如型钢建模、基础图形创建、管道设计等,并提供界面的支持。

         

      • CMake基础配置部分

        • 声明CMake版本和项目声明:这里指定CMake最低版本为3.15.4和项目名称为BIMHomeTestDemo,并允许使用C和C++语言。

        • 设置库路径

          • BIMHomeSDK和QT库如下图所示

          BIMHomeSDK库

          QT库

        • 启用QT 的AUTOMOC

        • 添加子目录:这里为了将源码子目录添加进来。

           

        • 基础配置部分完整CMakeLists.txt文件

           

      • 子目录部分:源代码和资源管理部分

        • 定义头文件搜索路径

        • 定义库搜索路径

        • 定义依赖库:这里debug xxx.lib指仅在Debug配置下生效;optimized xxx.lib仅在Release配置下生效。

           

        • 定义QT资源处理和UI文件处理

        • 定义将源码进行逻辑分组,并将相应的源码加入到目录中。

          • 分组后的效果

            分组目录

        • 创建共享库目标

        • 定义输出配置

        • 完整的CMakeLists.txt文件

      • 定义好CMakeLists.txt文件后,这里使用可视化cmake-gui构建项目

        1. 打开cmake-gui:

        2. 设置源码路径

        3. 设置输出路径并点击Configure

        4. 选择x64并点击Finish:

        5. 这里在LIBRARY_DIR处添加库路径P:\code\BIMHomeTestDemo\lib(该路径应是你的库路径的位置)

        6. 点击Generate,生成成功

        7. 打卡Visual studio,打开这个项目,点击生成解决方案,生成成功

      • 最终构建.dll动态链接库如下所示:

        • debug模式下:

        • Release模式下:(选择release,重复步骤7)

1.2 工作台创建

  1. 首先,我们创建一个工作台类MyWorkBench,该类继承自Gui::IWorkbench,由于Gui ::IWorkbench是抽象类,我们需在我们子类MyWorkBench中重写该类的所有纯虚函数。

    • MyWorkBench.h的示例代码如下所示:

    • MyWorkBench.cpp示例代码如下所示:

  2. 效果展示

 

1.3 命令创建

  1. 首先,我们创建一个命令类MyCommand,该类继承自Gui::ICommand,由于Gui ::ICommand是抽象类,我们需在我们子类MyCommand中重写该类的所有纯虚函数。

    • MyCommand.h的示例代码如下所示:

    • MyCommand.cpp的示例代码如下所示:

    • getCommandID

  2. 效果展示:

1.4 IDocument含义及其创建

  1. 定义

    • IDocument 是BIMHome 数据结构的顶层容器,代表一个 BIMHome 项目或文件(通常以 .BIMPart 格式保存)。它是一个逻辑上的工作空间,包含了所有的建模对象、参数、视图信息等。

  2. 功能

    • 管理文档中的对象、属性和依赖关系。

    • 提供对象的创建、访问、修改和删除接口。

    • 支持多文档管理,允许同时打开多个文档。

    • 保存和恢复文档状态,支持事务处理

  1. 组成

    • 包含多个 IDocumentObject,这些对象是文档中的实际建模元素

1.5 IDocumentObject含义及其创建

  1. 定义:

    • IDocumentObject IDocument 中包含的实际对象,每个对象代表具体的建模元素或功能,例如一个立方体、草图、约束、几何体等。它是 BIMHome 的核心建模单位所有的几何体、关系和属性都存储在这些对象中

  2. 功能

    • 表示文档中的单个对象,包含属性和依赖关系。

    • 提供对象的属性管理,支持持久化存储。

    • 支持对象的重新计算和状态管理。

  1. 组成

    • 包含对象的构造参数(如几何形状、尺寸等)。

 

1.6 Hello World示例

  1. 修改MyCommand文件里面的activated函数。点击My Command按钮,屏幕中出现Hello World。其效果展示如下:

 

第二章 算法

2.1 构造算法

2.1.1 基础图形

1.BaseFigureFactory

 

2.1.2 几何元素

2.1.2.1 曲线

  1. CurveFactory

  1. CurveHelper

 

  1. IGeometryCircle

 

  1. IGeometryCurve

2.1.2.2 组合体

  1. CpmpoundFactory

2.1.2.3 面

  1. SurfaceFactory

  1. SurfaceHelper

2.1.2.4 壳

  1. ShellFactory

2.1.2.5 实体

  1. SolidFactory

2.1.2.6 基础拓扑元素助手

  1. BaseTopoElementHelper

2.1.3 几何特征算法

  1. ExtrusionFactory

  1. LoftFactory

 

  1. RevolutionFactory

  1. SweepFactory

2.1.4 专业构件

  1. ProfileSteelFactory

 

  1. TransmissionFactory

 

2.2 修复

  1. FixShapeTool

2.3 几何关系算法

2.3.1 极值

  1. IExtremaCurveCurve

2.3.2 投影

  1. ProjectHelper

2.4 操作编辑算法

2.4.1 布尔运算

  1. BooleanFactory

2.4.2 离散运算

  1. IDispersionCurve

2.4.2 倒直角操作

  1. ChamferFactory

2.4.3 倒圆角操作

  1. FilletFactory

2.4.4 抽壳操作

  1. ThicknessFactory

 

2.4.5 裁剪操作

  1. ClippingCurveFactory

  1. SplitShapeFactory

2.4.6 偏移操作

  1. OffsetFactory

  1. OffsetHelper

2.4.7 变换

  1. TransformFactory

  1. TransformHelper

 

2.5 工具

  1. DocumentObjectTool

  1. MeasurementTool

  1. VectorTool

2.6 地质专业

2.6.1 地质

  1. GeologyFactory

 

第三章 二维出图

3.1 IDrawPage

3.1.1 IDrawPage介绍

3.1.2 DXF模板加载(此模块有问题,待修改)

 

3.1.2.1节点树查找与更新

  1. 通过App::GetApplication().getActiveDocument()先获得当前活动界面的节点树,然后再利用getClassTypeId在节点树上查找是否已经添加过某一类型的节点,避免重复添加相同节点。在节点树中利用getObjectsOfType进行节点搜索,并通过pPages返回搜索到的所有结果。

  2. 相关示例代码如下所示:

    • 注意:当前活动页面的结点树数量是唯一的,所以一次只能拿到一颗树;在节点树上的搜索节点是不唯一的,可能同时拿到多个节点。

  3. 二维出图和详图都是DrawPage的类型,所以在使用getObjectsOfType搜索DrawPage时,就可能出现多个返回值。在DrawPage中有一个Label属性,这个Label标签可以认为是DrawPage在节点树中的展现的名称,在同类型中具有唯一性(人为控制其唯一性)。

    • 上图中可以发现子节点和父节点的名称相同,但其父节点的类型为BimProduct,在getObjectsOfType搜索DrawPage时,会将父节点的BimProduct排除。

  4. 如果当前已经加载了其目标节点,可直接拿到该节点进行一些的操作:

    • 关于类型转化那一步,其实可以理解为在最开始的getObjectsOfType查找中,存在将子类DrawPage转化为基类DocumentObject的过程,然后在此只是再将基类还原为子类。关于dynamic_cast的特性可自行上网检索。

 

3.1.2.2 加载DXF文件

  1. 如果在节点树中没有发现其目标节点对象,则还需要往树节点中添加其节点。

  2. 我们通过defaultTemplate 接口函数来进行文件路径拼接;通过getUniqueObjectName 接口函数确保名称具有唯一性。通过addObject 添加对象。

  3. 加载DXF文件的示例代码如下所示:

    • 注意:接口defaultTemplate只能拼接固定的文件路径,如果需要使用defaultTemplate接口的话,那么目标文件必须放在指定的目录\data\Mod\TechDraw\Templates\中;接口getUniqueObjectName能确保名称具有唯一性,因为如果存在冲突,它将自动在字符串后面添加字符。

  4. 示意图如下所示:

3.2 IDrawView

3.2.1 绘制基础图形

3.2.1.1 非填充几何绘制

  1. 在计算机图形学、CAD(计算机辅助设计)及相关领域中,非填充几何(Non-filled Geometry) 是指仅绘制图形的轮廓边界(如线条、曲线、边缘),而不对图形内部区域进行颜色、图案或纹理填充的几何图形。

  2. 我们通过调用loadDrawviewGeometryList 来加载几何图形列表视图。该接口函数共有1个类型为DrawViewGeometryListParam的参数,从而生成一个可显示的视图对象,以便在绘图界面中展示这些几何数据。其绘制图形的坐标系原点在图纸模板的中心,X轴和Y轴的正方向朝向和图纸模板的坐标系一致。

  3. 绘制几何图形的示例代码如下:

  4. 其绘制的示意图如下所示:

    • 直线示意图:

    • 圆弧示意图:

    • 圆的示意图

    • 椭圆弧示意图

    • 椭圆示意图

    • 打组示意图

    • 多线段示意图

3.2.1.2 填充几何

  1. 在计算机图形学和 CAD(计算机辅助设计)领域,填充几何(Filled Geometry) 指的是具有封闭边界且内部被填充特定颜色、图案或材质的二维几何图形。它与仅由线条构成的 “轮廓几何” 不同,填充几何强调边界内部的区域渲染,常用于表达实体区域、截面、标注等。

  2. 我们通过调用loadDrawviewGeometryList l来加载几何图形列表视图,首先需准备好待加载的几何对象列表,将直线、圆、椭圆等各类图形实例(需继承自 Base::Geometry 基类)通过智能指针存入 std::vector 容器,并确保已为每个对象设置好颜色、线宽等属性;接着配置 DrawViewGeometryListParam 类型的视图参数,可根据需求指定视图背景、缩放比例等全局属性;随后调用函数时,第一个参数传入父视图指针(为 nullptr 时创建新视图),第二个参数传入几何对象列表,第三个参数传入配置好的视图参数;函数执行后会返回一个 TechDraw::IDrawView*类型的视图指针,通过该指针可进一步调整视图位置、大小等属性,最终实现多个几何图形在同一视图中的统一显示与管理,适用于工程图纸绘制、复杂模型可视化等场景。

  3. 绘制填充几何的示例代码如下:

  4. 绘制填充几何的示意图如下所示:

3.2.2 标注(此模块有问题,待改进)

3.2.2.1 尺寸标注

  1. 线性标注

    • 线性标注是工程图中用于表示两个点之间直线距离的尺寸标注方式,可用于水平、垂直。下述是以垂直方向为例,编写的示例代码,如果需要计算水平方向距离,将initDimension(dimensionParam, "DistanceY")这个代码中的DistanceY改为DistanceX,以及调整一些相关的偏移属性。

    • 我们通过调用loadIDimension 接口函数来加载线性标注,该接口函数主要功能是从模板或标注库中读取线性标注的样式(如箭头类型、文本格式、线宽等)和规则;

    • 绘制线性标注的示例代码如下所示:

  2. 对齐标注

    • 对齐标注和线性标注没有太大的区别,对齐标注也是用于表示两个点之间直线距离的尺寸标注方式,但是,对齐标注可以标注任意方向。

    • 对齐标注和线性标注及其相识,唯一的不同就是initDimension(dimensionParam, "Distance")这行代码,线性标注为DistanceX或者DistanceY,对齐标注为Distance。所以其示例代码可参考线性标注的代码。

    • 对齐标注示意图如下所示:

       

  3. 直径、半径标注

    • 直径标注和半径标注一般应用于圆,用于标识圆的直径和半径。

    • 我们通过调用loadIRadiusOrDiameterDimension 来加载直径、半径标注。

    • 绘制直径标注的示例代码如下:

    • 直径标注示意图如下所示:

    • 半径标注示意图如下所示:

  1. 角度标注一般应用在圆弧的角度和线之间的夹角。

    • 我们通过调用loadIAngleDimension 加载角度标注。

    • 其示例代码如下所示:

    • 角度标注的示意图如下所示:

       

3.2.2.2 引线标注

 

3.2.2.3 图注

 

3.2.3 文本绘制

  1. 单行文本的绘制

    • 在绘制单行文本的时候,通过调用IDrawPage里面loadIText接口函数来加载文本视图,该接口函数共4个参数,参数parentObj为跟随移动的视图对象;参数text为文本内容;参数type为绘制单行/多行文本;参数attr为结构体变量BaseAttribute,用于设置基础属性;

    • 绘制一个单行文本的示例代码如下所示:

    • 绘制单行文本的示意图如下所示:

  2. 多行文本的绘制

    • 在绘制多行文本的时候,也通过调用IDrawPage里面loadIText接口函数来加载文本视图,只不过和单行文本绘制的区别是,在传入参数type,需要设置为false,来表示进行绘制多行文本;通过检测文本中\n换行符来一行的结束,同时,要注意的是,只有多行文本对象才能正常响应\n换行符号。

    • 绘制多行文本的示例代码如下所示:

    • 绘制多行文本的示意图如下所示:

3.2.4 表格绘制

 

3.2.4.1 表格的基本操作

  1. 单元格合并及其文本信息设置

    • 我们首先绘制一个3行6列的表格,我们用map<int, map<int, string>>来存储单元格文字,然后我们TableSpanInfo结构体来存储单元格的信息。需要注意的是,单元格行列的起始编号从0开始。

    • 进行单元格合并的示例代码如下所示:

    • 这里理想的实现效果如下所示:

  2. 单元格行列宽度、高度设置

    • 在设置单元格的行列宽度、高度时,我们用map<std::string, std::string> 类型来存储行/列对应的高度/宽度。通过调用Base::FileInfo::getFontWidth来获取字体宽度,该接口函数有4个参数,参数fontFamily为字体名称,参数text为文本内容,参数fontheight为字体高度,参数widthFactor为宽度因子;通过调用getITextFontFamily接口函数来获得文字的字体名称;通过调用getITextWidthFactor接口函数来获得宽度因子。

    • 设置行高或列宽的示例代码如下所示:

     

  3. 单元格的边框线显隐设置

    • 在进行单元格的边框设置时,我们可以对每个单元格独立设置边框线的显隐,对于合并的单元格,则可以认为是一个比较大的单元格。边框线的显隐可通过TableCellFrameShowInfo结构体中的sFrameShowFlag枚举类来进行设置,具体的界面展示可以参考Excel的边框设置。

    • 设置单元格的边框线显隐的示例代码如下所示:

      • 需要注意的是,边框显示逻辑流程是先选中frameInfo中的单元格,如果是合并的单元格,则选中的是合并后的那个大单元格,然后显示单元格的所有框线,最后,再按照frameInfo.sFrameShowFlag的进行显示。

  4. 单元格对齐方式设置

    • 除了可以对每个单元格内设置边框,也可以对每个单元格的文字设置对齐方式,对于合并的单元格,则可以认为是一个比较大的单元格,具体的界面展示操作可以参考Excel的单元格对齐方式。

    • 对齐方式一般分为水平垂直对齐,水平对齐方式又分为对齐、对齐、左右居中对齐,垂直对齐方式又分为顶端对齐、底部对齐、上下居中对齐。BIMHome中利用CellAlignType的枚举方式来确定水平和垂直对齐方式。

    • 设置单元格的对齐方式的示例代码如下所示:

3.2.4.2 绘制表格

  1. 经过以上的步骤,我们可以通过调用IDrawPage提供的loadIOptimizeTable接口函数用于加载表格视图,该接口函数有1个类型为TabelParam的参数,用于设置表格数据。

    • 绘制表格的示例代码如下所示:

    • 绘制的表格示意图如下所示:

3.2.5 投影

3.2.5.1 投影

  1. 投影是指将三维物体按照一定的规则投射到二维平面上,从而形成物体在特定方向上的视图。

  2. 在创建投影视图的时候,我们通过调用IDrawpage里面的loadIDrawViewPart接口函数来完成投影视图的创建投影,该接口函数共有1个参数为param,类型为DrawViewSectionParam结构体变量。

    • 其中,需要注意的是结构体DrawViewSectionParam的参数mDirection为投影方向,Base::Vector3d(0, 1, 0)的意思为向Y轴正方向投影;

    • 而结构体DrawViewSectionParam的参数mXDirection可以理解为投影旋转控制,通过设置旋转的方向向量来旋转投影。 例如,Base::Vector3d(-1, 0, 0)改为Base::Vector3d(1,0, 0),其意思为X轴旋转180°,投影也旋转180°,其示意图如下所示:

  3. 创建投影的示例代码如下所示:

  1. 投影的示意图如下所示:

 

3.2.5.1 剖面投影

  1. 剖面投影是通过一个假想的剖切平面将一个三维物体切开,然后将切开后剩余部分按照一定的规则投射到二维平面上,所得到的二维视图。通过调用IDrawPage里提供的loadIDrawViewSection接口函数来绘制剖面投影,该接口函数共有1个参数param,类型为DrawViewSectionParam结构体变量。

    • 其中mXDirectionmDirection可参考3.2.5.1里面的解释。

  2. 绘制剖面投影的示例代码如下所示:

  3. 其实意图如下所示:

3.2.6 填充

 

3.3 IDrawPage参数定义

3.3.1 结构体类型

  1. struct Boundary

    • 该结构体主要用来设置边界属性,该结构体包含的变量如下所示:

      类型变量名描述
      doublesLeft左边界值
      doublesRight右边界值
      doublesTop上边界值
      doublesBottom下边界值

 

3.4 IDrawView参数定义

3.4.1 结构体类型

  1. struct FontAttribute

    • 该结构体主要用于存储图纸中字体的相关信息,其所包含的变量如下所示:

      类型变量名描述
      Base::ColormTextColor文本颜色
      doublemFontSize文本字体大小
      FontFamilymFontFamily文本字体
      doublemFontWidthFactor字体宽度因子
      boolmFixedfontSize字体大小固定标志
  2. struct LineAttribute

    • 该结构体主要用于存储线的相关信息,其所包含的变量如下所示:

      类型变量名描述
      Base::DefineLineTypemLineType线型
      Base::ColormLineColor线颜色
      boolmLineWidthShow线宽显示标志位
      doublemLineWidth线宽
  3. struct DrawViewBallonParam

    • 该结构体用于设置气球标注的基本属性,其所包含的变量如下所示:

      类型变量名描述
      stringmLabel气球标注文字主文字
      DefineLeaderTypemLeaderType引线方向
      DefineBubbleTypemBubbleShape气泡形状
      Base::Vector3dmBasePt定点
      doublemRotation旋转角度
      vector<std::string>mAttachedLabel线上附加文字
      doublemLeaderLineOffsetX引线x偏移量
      doublemLeaderLineOffsetY引线y偏移量
      vector<Base::Vector3d>mIntervals多引线间隔
      FontAttributemLeaderFontAttr引线文本属性
      LineAttributemLeaderLineAttr引线属性
      FontAttributemIndexFontAttr索引文本属性
      LineAttributemIndexLineAttr索引线属性
      doublemShapeIndexLength标注形状大小,圆形时代表半径、菱形时代表高度、矩形时代表边长
      boolmScenePoint气泡标注的起点是否基于场景坐标
      boolisInkLengthZero气球标注没有附加文字时,引线上面一段的长度是否为0
  4. struct DrawViewDimensionParam

    • 该结构体主要用于设置标注的基本属性,其所包含的变量如下所示:

      类型变量名描述
      DimensionTypemDimType标注类型
      vector<Base::Vector3d>mLinelist距离标注
      Base::Vector3dmStartPotoffset标注起点偏移量(x左负右正 y上负下正)
      Base::Vector3dmEntityOffset标注整体偏移量(平移)
      doublemDistance标注文本label与标注起点终点线间距
      doublemLabelOffset标注写文本的横线与标注位置连线之间的距离
      doublemTextToLineDistance标注文本与文本线距离
      doublemAngle标注旋转角度
      doublemCustormDistance标注线文本内容(-1为默认的计算值,非-1为传入的自定义值)
      Base::ColormDimHorizonLineColor水平标注线颜色
      Base::ColormDimVerticalLineColor垂直标注线颜色
      FontAttributemFontAttr标注文本属性
      LineAttributemLineAttr引线属性
      doublemLeadLineAngle引线角度(角度值)
  5. struct SectionHatchInfo

    • 该结构体主要用来设置填充的相关属性,其所包含的变量如下所示:

      类型变量名描述
      map<std::string, std::string>sSectionFaceHatch填充区域名称和填充类型对应map
      boolsfillIfSectionSourceIsEmpty是否填充标记
      boolsDrawSectionEdge填充区域外边框是否显示
      boolsFuseBeforeCut传入填充区域是否融合
      doublesDefaultScaleInViewqt填充比例
      doublesDefaultScaleInDxf导出dxf填充比例
      char*sHatchType填充类型是pat还是svg
  6. struct SectionAreaInfo

    • 该结构体主要用于存储工程图纸的剖面区域的相关信息,其所包含的变量如下所示:

      类型变量名描述
      boolsFlag是否是区域
      Base::Vector3dsSectionOrigin区域Origin
  7. struct SectionExtraInfo

    • 该结构体主要用来存储工程图纸中剖面视图的额外信息,其所包含的变量如下所示:

      类型变量名描述
      boolsFlag是否有额外的shape
      stringsLabelshape对应documentObject的Label
      intsLineType线型
  8. struct DrawViewSectionParam

    • 该结构体主要用来设置剖面图的相关属性,该结构体所包含的变量如下所示:

      类型变量名描述
      stringmName视图名称
      vector<App::IDocumentObject*>mPartShape剖切或投影对象
      Base::Vector3dmDirection面向剖切或投影方向的反方向
      Base::Vector3dmXDirection面向剖切或投影方向,右手指向
      LineAttributemAttribute基础属性
      Base::Vector3dmSectionNormal剖切方向
      Base::Vector3dmSectionOrigin剖切位置
      vector<App::IDocumentObject*>mSectionShape填充对象
      SectionHatchInfomHatchInfo填充数据
      SectionAreaInfomAreaInfo剖切区域数据
      SectionExtraInfomExtraInfo独立需要绘制的对象
      boolmCustomcutflag自定义剖切标志位
      vector<App::IDocumentObject*>mCustomCutObjecVec自定义剖切对象列表
  9. struct DrawViewSketchTemplateParam

    • 该结构体主要用于存储和配置工程图纸中草图模板视图的相关参数,其所包含的变量如下所示:

      类型变量名描述
      floatmAmplify放大倍数
      intmLoadTextFlag文本解析方式(0-不加载text 1-加载text 2-只加载text编号
      map<std::string, std::string>mBalloonIndexMap模版中气球标注索引修改对应map
      stringname模版显示名称
      stringclassName模版类名,支持草图模版及其子类
  10. struct DrawViewGeometryListParam

    • 该结构体主要用于存储和管理与工程图纸视图几何列表的相关信息,其所包含的变量如下所示:

      类型变量名描述
      doublemAmplify放大倍数
      stringmName几何列表的名称
  1. struct TableSpanInfo

    • 该结构体主要用来存储表格中合并单元格的信息,其所包含的示例代码如下所示:

      类型变量名描述
      introw哪一行
      intcol哪一列
      introwcount合并的行数
      intcolcount合并的列数
      doublecolwidth合并后的单元格宽度
      doublerowheight合并之后的单元格高度
      stringSpanbstr合并单元格中显示的文本内容(默认是空格)
  2. struct TableCellFrameShowInfo

    • 该结构体主要用于存储所选中表格区域的信息,其所包含的变量如下所示:

      类型变量名描述
      intsRow起始行
      intsCol起始列
      intsRowCount所选中行数
      intsColCount所选中列数
      FrameShowFlagsFrameShowFlag边框样式
  3. struct TabelParam

    • 该结构体主要用于设置表格参数,其所包含的变量如下所示:

      类型变量名描述
      intmRowCount行数
      intmColCount列数
      std::map<int, std::map<int, std::string>>mTableData文字数据
      std::map<std::string, std::string>mRowHeight行高
      std::map<std::string, std::string>mColWidth列宽
      std::vector<TechDraw::TableSpanInfo>mSpanData单元格属性
      std::vector<TableCellFrameShowInfo>mFrameShow单元格边框设置
      std::map<int, std::map<int, TechDraw::CellAlignType>>mHorAlign水平对齐方式
      std::map<int, std::map<int, TechDraw::CellAlignType>>mVerAlign垂直对齐方式
      FontAttributemFontAttr文本属性
      LineAttributemLineAttr线条属性
  4. struct LabelParam

    • 该结构体主要用来存储工程图纸中 标注文本的相关信息,其所包含的变量如下所示:

      类型变量名描述
      stringmText文本
      LineFlagmLineFlag下划线显示标志位
      boolmTypetrue:比例图注 false:普通文本图注
      doublemTextToFirstLineDistance文本与第一条下划线的距离
      doublemTwoLineDistance两条下划线间距
      stringmExpress与父节点相对位置表达式(coe1a+coe2b+coe3)
      FontAttributemFontAttr文本属性
      LineAttributemFirstLineAttr第一条下划线的属性
      LineAttributemSecondLineAttr第二条下划线的属性

     

3.4.2 枚举类类型

  1. enum class FontFamily

    • 该枚举主要定义的是字体族,其所包含的枚举常量如下所示:

      枚举常量描述
      TSSDENGCAD显示钢筋符号字体
  2. enum class DefineLineType

    • 该枚举类主要定义线的类型,其所包含的的枚举常量如下所示:

      枚举常量描述
      CONTINUOUS实线
      CENTER长空短相间隔
      ACAD_ISO02W100虚短线
      ACAD_ISO04W100点划线
      ACAD_ISO05W100点点划线
      ACAD_ISO07W100虚点线
      DOUBLE_BROKEN双折线
      ZIGZAGLINE波浪线

       

  3. enum class DefineLeaderType

    • 该枚举类主要定义标注引线与文本的相对位置关系,其所包含的枚举常量如下所示:

      枚举常量描述
      TextInRightTopOfArrow右上
      TextInRightBottomOfArrow右下
      TextInLeftTopOfArrow左上
      TextInLeftBottomOfArrow左下
  4. enum class DefineBubbleType

    • 该枚举类主要定义气球标注类型,其所包含的枚举常量如下所示:

      枚举常量描述
      Circular圆圈
      Line直线
      Diamond菱形
      Rectangle矩形
      Triangle三角形
  5. enum class DimensionType

    • 该枚举类主要定义尺寸标注类型,其所包含的枚举常量如下所示:

      枚举常量描述
      DISTANCEX水平长度标注
      DISTANCEY垂直长度标注
      DISTANCE对齐长度标注
      RADIUS半径标注
      DIAMETER直径标注
      ANGLEDIMENSION角度标注
  6. enum class FrameShowFlag

    • 该枚举主要定义边框的显示区域,其所包含的枚举常量如下所示:

      枚举常量描述
      NO_FRAME无边框
      ALL_FRAME所有边框
      OUT_FRAME外围边框
      LEFT_FRAME左侧边框
      RIGHT_FRAME右侧边框
      TOP_FRAME顶部边框
      BOTTOM_FRAME底部边框
  7. enum class LineFlag

    • 该枚举类主要定义图注的相关参数,其所包含的枚举常量如下所示:

      枚举常量描述
      NONE没有下划线
      ONE一条下划线,单线段
      TWO两条下划线,第一条是多段线,第二条是单线段
  8. enum class CellAlignType

    • 该枚举类主要定义对齐方式的相关参数,其所包含的枚举常量如下所示:

      枚举常量描述
      TOP顶端对齐
      BOTTOM底部对齐
      LEFT左对齐
      RIGHT右对齐
      LRCENTER左右居中
      TBCENTER上下居中

       

第四章 视图

4.1 IViewProvider

  1. 该类IViewProvider是一个抽象接口类,提供了视图相关功能的接口,主要用于管理视图提供者的属性和行为,包括属性访问、可见性控制、颜色和纹理设置等。

  2. 该类提供的接口函数有getPropertyAccessor(获取属性访问器)getAttachObject(void)(获取附加对象)setPointColor(设置点颜色)setFaceTextures(设置面纹理)等等。获得所有的接口信息请参见API接口文档,点击获取更多跳转到API 文档。

     

4.2 主窗口视图

4.2.1 IMainWindow

  1. 该类IMainWindow是主窗口类,通过该类提供的接口函数可以将MDIView对象添加/删除到主窗口,同时,还可以获取/设置当前活动的MDIView对象等等。

  2. 该类提供的接口函数有addWindow(添加IMIDView对象)removeWindow(移除IMIDView对象)activeIWindow(获取当前活动 MDIView 对象)setActiveWindow(设置当前活动 MDIView 对象)等等。获得所有的接口信息请参见API接口文档,点击获取更多跳转到API 文档。

  3. 将MIDView对象添加到主窗口中的示例代码可以参考4.3节:

  4. 主窗口的示意图如下所示:

 

4.3 多文档视图

4.3.1 IMDIView

  1. 该类IMDIView是多文档视图类。通过该类提供的接口函数可以创建多文档视图以及可以设置多文档视图的属性。

  2. 该类提供的接口函数有create(创建一个新的多文档界面视图)getDocument(获取当前视图所关联的文档)widget(获取MDIView的窗口对象)getIGuiDocument(获取MDIView的文档对象)等等。获得所有的接口信息请参见API接口文档,点击获取更多跳转到API 文档。

  3. 创建一个IMDIView对象并将该对象添加到主窗口的示例代码如下所示:

  4. 创建一个IMDIView并将该对象添加到主窗口的示意图

 

4.4 菜单视图

4.4.1 IMenuItem

  1. 该类IMenuItem是创建菜单类。通过该类提供的接口函数可以创建菜单按钮对象、获取菜单项命令名称、查找具体指定名称的菜单项等。

  2. 该类提供的接口函数有create(创建一个新的菜单按钮对象)setCommand(设置菜单项的命令名称)findItem(查找具有指定名称的菜单项)等等。获得所有的接口信息请参见API接口文档,点击获取更多跳转到API 文档。

  3. 创建一个菜单按钮对象的示例代码如下:

  4. 创建的按钮示意图如下所示:

 

4.5 对话框视图

4.5.1 ITaskDialog

  1. 该类ITaskDialog是对话框基类,继承自QObject类。通过该类提供的接口函数,可以设置对话框的属性,包括设置/获取对话框中按钮位置、获取对话框的内容等等。

  2. 该类提供的接口函数有setButtonPosition(设置对话框中按钮位置)buttonPosition(获取对话框中按钮的位置)canClose(检查对话框是否可以关闭)等等。获得所有的接口信息请参见API接口文档,点击获取更多跳转到API 文档。

  3. 创建一个ITaskDialog的示例代码如下所示:

 

4.6 标签视图

4.6.1 IQRibbon

  1. 该类IQRibbon是创建标签类,目前该类只有一个接口函数setTabIndexForWorkbench,通过该接口函数可以设置工作台的选项卡索引。如果想了解该接口的详细信息,点击获取更多跳转到API文档。

  2. 设置工作台的选项卡索引的示例代码如下所示:

     

4.7 树状视图

4.7.1 ITreeWidgetObservationDelegate

4.7.2 ITreeItem

4.7.3 ITreeWidget

4.7.4 ITreePanel

4.8 IWorkBench

  1. 该类IWorkBench是抽象类,子类需重写该类的方法。通过该类,可以去创建一个工作台。

  2. 该类提供的接口函数有getName(获取工作台名称)getMenuText(获取按钮的文本)setupMenuBar(设置工作台的工作栏)setupContextMenu(设置右键菜单)等等。获得所有的接口信息请参见API接口文档,点击获取更多跳转到API 文档。

  3. 创建工作台的示例代码和示意图可以参考 第一章 1.2 工作台的创建

 

第五章 事件交互

5.1 选择事件

5.1.1 ISelection

5.1.2 ISelectionChanges

5.1.3 ISelectionFilterGate

5.1.4 ISelectionObserver

5.2 控制事件

5.2.1 IControl

 

5.3 捕捉事件

5.3.1 ISnapProcessedBase

5.3.2 ISnapper

5.3.3 SnapHandle

5.4 命令事件

5.4.1 ICommand

 

第六章 常见问题

? 布尔运算失效

A : 布尔运算要使用实体Solid;

 

? 二维曲线求交点失败

A: 二维曲线相交必须要转成三维曲线(必须确定所在平面)才可以相交;