一、概述
最近学习曲线命令,前几天看到,在NX二次开发群里有人推了一篇关于写求取封闭曲线面积的文章。之前我已经写过一篇博客了,今天讲这些函数进行封装到自己的NX二次开发库中,方便今后调用,由于自身不是计算机科本出身,基础较差,先基本的封装一下,最后有时间,或者学到新的方法再次封装,目前自己的函数运行基本没什么问题。半年前自己还是不会安装VS软件的人,利用打游戏时间学习,现在已经可以开发出简单的NX小插件了(下图显示的是包含界面的,还有好多练习的功能没有放),废话不说了进入正题。
二、功能解析
1、NX二次开发批量判断相连曲线是否封闭
2、批量获得相连曲线是否封闭及其相连曲线的tag值
三、代码解析
自己封装的函数如下:GetLinkOrTangencyEdge()
/***************************************************************************************************
**Function: GetLinkOrTangencyEdge 批量获取相连曲线是否封闭及TAG值
**input: vecLinkOrTangencyEdge 存放相连曲线的tag值;vecEdge对象选择器选中对象的tag值
**output: vector<int> 判断各相连曲线是否封闭:1,封闭;2,不封闭
****************************************************************************************************/
int NXopenC_Ask_CloseCurveArea::update_cb(NXOpen::BlockStyler::UIBlock* block)
{try{if(block == selection0){//---------Enter your code here-----------std::vector<NXOpen::TaggedObject*> Object = selection0->GetSelectedObjects();vector<tag_t> curveTag;for (int i = 0; i < (int)Object.size(); i++){curveTag.push_back(Object[i]->Tag());}vector<vector<tag_t>> vecLinkOrTangencyEdge;vector<int> CurveIsClose = UserUFBaseFun::GetLinkOrTangencyEdge(vecLinkOrTangencyEdge, curveTag);for (int j = 0; j < (int)vecLinkOrTangencyEdge.size(); j++){for (int m = 0; m < (int)vecLinkOrTangencyEdge[j].size(); m++){char msg[256];sprintf(msg, "%d", (vecLinkOrTangencyEdge[j])[m]);UserUFBaseFun::PrintMessage(msg, false);}if (CurveIsClose[j] == 1){UserUFBaseFun::PrintMessage("曲线围成的图形封闭");}else{UserUFBaseFun::PrintMessage("曲线围成的图形不封闭");}UserUFBaseFun::PrintMessage("\n");}}}catch(exception& ex){//---- Enter your exception handling code here -----NXopenC_Ask_CloseCurveArea::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());}return 0;
}