实例:NX二次开发批量判断相连曲线是否封闭(方法二)

一、概述

        最近学习曲线命令,前几天看到,在NX二次开发群里有人推了一篇关于写求取封闭曲线面积的文章。之前我已经写过一篇博客了,今天讲这些函数进行封装到自己的NX二次开发库中,方便今后调用,由于自身不是计算机科本出身,基础较差,先基本的封装一下,最后有时间,或者学到新的方法再次封装,目前自己的函数运行基本没什么问题。半年前自己还是不会安装VS软件的人,利用打游戏时间学习,现在已经可以开发出简单的NX小插件了(下图显示的是包含界面的,还有好多练习的功能没有放),废话不说了进入正题。

上一篇已经实现了该功能,本次采用另一种方法思路进行编写。

实例:NX二次开发批量判断相连曲线是否封闭-CSDN博客

二、功能解析

1、NX二次开发批量判断相连曲线是否封闭

2、批量获得相连曲线是否封闭及其相连曲线的tag值

三、代码解析

                自己封装的函数如下:GetLinkOrTangencyEdge2()

/***************************************************************************************************
**Function:				GetLinkOrTangencyEdge2	批量获取相连曲线是否封闭及TAG值
**input:				vecLinkOrTangencyEdge2	存放相连曲线的tag值;vecEdge对象选择器选中对象的tag值
**output:				vector<int>				判断各相连曲线是否封闭:1,封闭;0,不封闭
****************************************************************************************************/


vector<int> GetLinkOrTangencyEdge2(vector<vector<tag_t>>& vecLinkOrTangencyEdge2, vector<tag_t> vecEdge2)
{
	std::vector<CurveData> allCurveVec;
	for (int k = 0; k < vecEdge2.size(); k++)
	{
		//这里是基于NX的获取曲线端点的方法,其他环境下相应更换
		CurveData data = UserUFBaseFun::getVerOfCurve(vecEdge2[k]);
		allCurveVec.push_back(data);
	}

	//查找相连曲线的tag
	vector<int> CurveIsClose;
	std::vector<tag_t> currentCurveTag;
	std::vector<bool> used(allCurveVec.size(), false);
	for (size_t i = 0; i < allCurveVec.size(); ++i)
	{
		if (used[i]) continue;  // 跳过已经处理过的线段
		std::vector<CurveData> currentCurve;

		currentCurve.push_back(allCurveVec[i]);
		currentCurveTag.push_back(currentCurve.back().curve_tag);//得到相连曲线的tag值
		used[i] = true;
		bool curveClosed = false;
		while (!curveClosed) 
		{
			curveClosed = true;
			for (size_t j = 0; j < allCurveVec.size(); ++j) 
			{
				。。。。。。。
			}

		}
		vecLinkOrTangencyEdge2.push_back(currentCurveTag);
		currentCurveTag.clear();
		// 检查闭环是否完整(起点等于终点)
		if (currentCurve.size()>2 && UserUFBaseFun::IsSamePoint(currentCurve.back().end, currentCurve.front().start))
		{
			CurveIsClose.push_back(1);
		}
		else if (currentCurve.size() == 1 && UF_MODL_ask_curve_closed(currentCurve.back().curve_tag) == 1)
		{
			CurveIsClose.push_back(1);
		}
		else
		{
			CurveIsClose.push_back(0);
		}
	}	
	return CurveIsClose;
}
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::GetLinkOrTangencyEdge2(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;
}

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

白雪公主的后妈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值