本文介绍使用Toolkit对于球标的相关函数。Toolkit提供了ProBomballoonAllCreate
等六个函数用于球标操作,每个函数与Creo球标工具栏里面的操作基本是对应的关系。
1.创建球标 | 主视图
ProBomballoonAllCreate
函数可以实现在主视图生成所有球标。该函数的参数相对简单,需要对应drawing
、包含BOM信息的table
格对象以及表格中重复区域的IDregion_id
。重复区域IDregion_id
可由ProDwgtableCellRegionGet
函数获得。所以在主视图创建所有球标首先遍历所有绘图中的表格,之后调用ProDwgtableCellRegionGet
函数判断表格中是否包含重复区域,如果存在则调用ProBomballoonAllCreate
函数即可。本文为做示例,没有使用ProDwgtableCellRegionGet
函数获取重复区域ID,强制遍历表格使用默认值-1尝试生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| status = ProMdlCurrentGet(&drawing); status = ProArrayAlloc(0, sizeof(ProDwgtable), 1, &tables); status = ProDrawingTableVisit((ProDrawing)drawing, (ProDwgtableVisitAction)UserTableVisitAct, NULL, (ProAppData)&tables); ProArraySizeGet(tables, &n_size); if (n_size > 0) { for (i = 0; i < n_size; i++) { ProDwgtable table; table = ((ProDwgtable *)tables)[i]; status = ProBomballoonAllCreate(drawing, &table, -1); if (status == PRO_TK_NO_ERROR) break; } } status = ProArrayFree(&tables);
|
图 主视图创建全部球标
2.创建球标 | 按视图
按视图创建球标由ProBomballoonCreate
函数完成。ProBomballoonCreate
函数相较ProBomballoonAllCreate
函数参数多了一个对应的View
句柄,可以通过遍历或者鼠标选择等方式获取。按视图生成球标的操作相对按主视图生产多了一个选择对应的View
句柄的过程,本文为做示例,采用交互式选择的方式确定view
,同样没有使用ProDwgtableCellRegionGet
函数获取重复区域ID,强制遍历使用默认值-1尝试生成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| status = ProMdlCurrentGet(&drawing); status = ProArrayAlloc(0, sizeof(ProDwgtable), 1, &tables); status = ProDrawingTableVisit((ProDrawing)drawing, (ProDwgtableVisitAction)UserTableVisitAct, NULL, (ProAppData)&tables); ProArraySizeGet(tables, &n_size); if (n_size > 0) { for (i = 0; i < n_size; i++) { ProDwgtable table; table = ((ProDwgtable *)tables)[i]; status = ProBomballoonAllCreate(drawing, &table, -1); if (status == PRO_TK_NO_ERROR) break; } } status = ProArrayFree(&tables);
|
图 按视图创建全部球标
3.清理球标
ProBomballoonClean
实现清理球标的功能,与Creo自带的清理图标按钮功能一样。虽然函数参数很多,但是参数与Creo自带清理图标功能弹出对话框的选项一一对应,了解起来并不复杂,在此不在赘述。直接给出示例代码:
1 2 3 4 5 6 7 8 9
| status = ProMdlCurrentGet(&drawing); status = ProMessageDisplay(MSGFILE, "IMI_PrompSelectView"); status = ProSelect((char *)"dwg_view", 1, NULL, NULL, NULL, NULL, &selBuffer, &n_size); if (status != PRO_TK_NO_ERROR || n_size < 1) { return; } status = ProSelectionViewGet(selBuffer[0], &view); status = ProBomballoonClean(drawing, view, PRO_B_TRUE, PRO_B_TRUE, 0, PRO_B_TRUE, 0, PRO_B_TRUE, 0, PRO_B_TRUE);
|
图 清理图标
代码公开,需要的人可以随便根据自己的环境修改编译。完整代码可在Github.com下载。代码在VS2010,Creo 2.0 M060 X64下编译通过。