实例:NX二次开发求取封闭曲线的面积(多个封闭曲线)

本文介绍了作者在NX二次开发过程中,如何使用NXOpenC++和ufun解决求取封闭曲线面积的问题,包括判断曲线封闭性、创建有界平面并测量面积的过程,以及关键代码片段。
摘要由CSDN通过智能技术生成

一、概述

        最近在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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白雪公主的后妈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值