CREO Toolkit二次开发-工程图插入注释
本文介绍如何使用Toolkit在工程图插入注释。在工程图插入注释功能是一个很好的二次开发进阶起点,涉及到多个函数的调用和数据的关联。
1.注释在Toolkit中数据表达方式
注释在Toolkit中设计到的数据重点包含ProDtlnote
、ProDtlnotedata
、ProDtlnoteline
、ProDtlnotetext
、ProDtlattach
等类型。
ProDtlnote
是一个结构体,记录了注释的类型、唯一标识等信息,其类型与ProModelitem
一样,为pro_model_item
结构体:
1 | typedef struct pro_model_item |
ProDtlnotedata
记录了注释的各种属性,包括文本、摆放方式等内容,在ProDtlnote.h
中给出了定义:
1 | typedef struct pro_notedata *ProDtlnotedata; |
ProDtlnoteline
则记录了注释中文本的信息。一个ProDtlnoteline
包含多行文字,每行对应一个ProDtlnotetext
对象,ProDtlnoteline
使用ProArray
保存多行文字信息。
1 | typedef struct prodtl_text *ProDtlnotetext; |
ProDtlattach
则记录了ProDtlnotedata
的摆放方式,包括自由、垂直与表面等各种Creo的选项。
1 | typedef struct prodtl_attach_new *ProDtlattach; |
上述五种数据的关系如下图所示。
图 插入注释主要涉及对象及其关系
2.代码和流程
如之前文章所述,Toolkit使用C语言采用面向过程的方式进行编程,所以按照面向对象的思想可以把上面各种数据结构的数据看成各个对象的属性形成树状结构,但具体操作起来还是采用面向过程的方式进行设置,插入注释主要涉及的函数和对象如下图所示。
图 插入注释主要涉及的函数和对象
2.1 申请和释放内存
ProDtlnotedata
、ProDtlnoteline
、ProDtlnotetext
、ProDtlattach
四个对象在使用前均需要申请内存,同时在使用完成后释放,示例代码如下:
1 | // 一个notedata有多个line,每个line对应多个text(行),每个都要先申请内存,函数结束后释放 |
之后采用倒推的方式, 一步一步设置好ProDtlnotetext
、ProDtlnoteline
、ProDtlattach
,再设置ProDtlnotedata
,最后生成ProDtlnote
。
2.2 设置ProDtlnotetext
ProDtlnotetext
记录了每一行的文字包括了文字内容、宽度、高度等信息,可以使用ProDtlnotetextHeightSet
等相关函数对上一步申请过内存的ProDtlnotetext
对象进行设定,示例代码如下:
1 | ProError ProUsrSetDtlText(ProMdl mdl, ProDtlnotetext *text, double height, double width, double slant, double thickness, wchar_t *wtext) |
2.3 设置ProDtlnoteline
ProDtlnoteline
中只要添加对应的ProDtlnotetext
即可,如果有多行,可重复上面的操作并添加。ProDtlnoteline
添加ProDtlnotetext
通过ProDtlnotelineTextAdd
函数完成,代码如下:
1 | // line加一行,可以加多次代表多行 |
2.4 设置ProDtlattach
本例采用自由摆放的方式,通过鼠标点选屏幕坐标确定坐标位置。ProDtlattach
可以通过ProDtlattachAlloc
函数完成,注意函数参数需要提前准备好即可:
1 | ProMouseButton mouse_button; |
2.5 设置ProDtlnotedata
ProDtlnotedata
的操作主要是加入对应的ProDtlnoteline
和ProDtlattach
,同时如文字颜色等属性也可以在此设置。
添加ProDtlnoteline
由ProDtlnotedataLineAdd
函数完成:
1 | // line加入notedata |
添加ProDtlattach
由ProDtlnotedataAttachmentSet
函数完成:
1 | status = ProDtlnotedataAttachmentSet(*notedata, *attachment); |
设定文字颜色则由ProDtlnotedataColorSet
函数完成:
1 | status = ProDtlnotedataColorSet(*notedata, &color); |
2.6 生成ProDtlnote
最终通过ProDtlnoteCreate
创建ProDtlnotedata
确定的注释对象,再使用ProDtlnoteShow
显示注释对象ProDtlnote
即可:
1 | status = ProDtlnoteCreate(mdl, NULL, notedata, ¬e); |
完整代码可在Github.com下载。代码在VS2010,Creo 2.0 M060 X64下编译通过。