设计一个柱面中心线工具,可以实现选择对象,画出圆柱的中心线,可以更改中心的线的颜色、线型、线宽和图层,是否延长,是否关联。
先在NX上进行界面设计
添加选择对象,并设置标题,选择设置为多选
添加组,在组里添加线条颜色/线型/线宽,设置颜色ColorValue和线型Value
这里的线宽没有办法获取,因此把线宽隐藏HideSubBlocks选择Width
在添加一个线宽
添加图层
添加切换开关和表达式,设置标题,表示式的单位Dimensionality为长度,值为TRUE
添加组,在组里添加切换开关,设置名称值为TRUE
生成C++代码,保存
在VS上进行代码添加
第一步参考http://t.csdnimg.cn/lgech
在initialize_cb()里添加过滤,选择圆柱面
//设置过滤
Selection::SelectionAction action = Selection::SelectionActionClearAndEnableSpecific;
std::vector<Selection::MaskTriple>maskArray(1);
maskArray[0] = Selection::MaskTriple(UF_solid_type, UF_all_subtype, UF_UI_SEL_FEATURE_CYLINDRICAL_FACE);//CYLINDRICAL_FACE选择圆柱面
selection0->GetProperties()->SetSelectionFilter("SelectionFilter", action, maskArray);
画中心线的思路:找到顶面和底面,然后找到两个圆的圆心,进行连线,在进行其它操作
添加一个函数creatcenterline(),在apply_cb()里调用
void lesson12_cyl_center::creatcenterline()
{
UF_initialize();
//得到UI里面相关的值
std::vector<TaggedObject *>faces = selection0->GetSelectedObjects();//得到所有圆柱面
//面找边
uf_list_p_t list;
tag_t edge1TAG = NULL_TAG;
tag_t edge2TAG = NULL_TAG;
UF_CURVE_line_t line1;
tag_t lineTAG = NULL_TAG;
double centroid1[3], centroid2[3];
for (int i = 0; i < faces.size(); i++)
{
UF_MODL_ask_face_edges(faces[i]->Tag(), &list);//得到面的边
UF_MODL_ask_list_item(list, 0, &edge1TAG);//得到第一个