一、概述
最近在NX二次开发群里有人推了一篇关于写求取封闭曲线面积的文章。针对小白的我决定试着做一做,期间遇到了很多问题,全部用NXOpenC++通过录制代码进行修改,最后发现老是有问题,后来通过ufun转化解决了问题,个人人为只要问题解决就行,没有必要纠结是用NXOpenC++还是ufun。感谢交流中大佬们的解答,目前功能已经实现代码可能局部又累赘。初步进行封装。
二、实现的功能
1、判断所选曲线是否封闭,不封闭打印曲线的tag值退出,封闭进行第2步;
2、若是围成的曲线封闭,创建有界平面,进行第3步;
3、使用测量面的功能进行测量,最后打印封闭曲线的tag值以及计算的面积。
三、关键代码
int NXopenC_Ask_CloseCurveArea::update_cb(NXOpen::BlockStyler::UIBlock* block)
{
try
{
if(block == selection0)
{
//---------Enter your code here-----------
NXOpen::Session *theSession = NXOpen::Session::GetSession();
NXOpen::Part *workPart(theSession->Parts()->Work());
NXOpen::Part *displayPart(theSession->Parts()->Display());
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++)
{
UserUFBaseFun::PrintMessage("由曲线", false);
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("围成的图形封闭");
//创建有界平面
double boundedPlaneArea = UserUFBaseFun::Get_CurveClosedArea_FromCurves(theSession, workPart, vecLinkOrTangencyEdge[j]);
char msg1[256];
sprintf(msg1, "面积大小为:%f", boundedPlaneArea);
UserUFBaseFun::PrintMessage(msg1);
}
else
{
UserUFBaseFun::PrintMessage("围成的图形不封闭");
}
}
}
}
catch(exception& ex)
{
//---- Enter your exception handling code here -----
NXopenC_Ask_CloseCurveArea::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
}
return 0;
}