【NX】NX二次开发中判断曲线是否重合

在NX二次开发中,并没有直接的函数判断两条曲线是否重合,那么我们自己有没有办法判断两条曲线是否重合呢,自然是有的,那么首先我们得定义一下什么叫做重合,几乎重合的曲线算重合吗,这里就涉及到一个容忍度的问题。

我这里采用一个并不是严格判断重合的办法,但是日常用问题不大。

 

思路就是对两条曲线分别采样,当采样点的距离接近的时候认为两条曲线重合,否则认为不重合,注意因为曲线的方向可能不同,所以要正反两个方向采样,只要有一个方向满足条件,则认为两条曲线重合,具体代码如下,仅供参考。

//author:autumoon
//邮箱:9506@163.com
//日期:2023-07-06 
bool IsTwoCurvesCoincide(Curve *ipCurveF, Curve *ipCurveS, int inSamplePtCount /*= 5*/, double dTolerance /*= 0.001*/)
{
	if (ipCurveF == nullptr || ipCurveS == nullptr || inSamplePtCount < 2 || dTolerance < 0.0)
	{
		return false;
	}

	double dSampleProp = 1.0 / (inSamplePtCount - 1);

	AUTUMOONMathPoint3d ptF1, ptS1;
	AUTUMOONMathVector3d vecF1, vecS1;


	bool bPosTest = true;
	for (double dSamplePos = 0.0; dSamplePos < 1.0; dSamplePos += dSampleProp)
	{
		AUTUMOONNXCurve::AskCurveProps(ipCurveF->Tag(), dSamplePos, &ptF1, &vecF1);
		AUTUMOONNXCurve::AskCurveProps(ipCurveS->Tag(), dSamplePos, &ptS1, &vecS1);

		if (ptF1.Distance(ptS1) > dTolerance || !vecF1.IsParallel(vecS1, dTolerance))
		{
			bPosTest = false;
			break;
		}
	}


	bool bNegTest = true;
	if (!bPosTest)
	{
		for (double dSamplePos = 0.0; dSamplePos < 1.0; dSamplePos += dSampleProp)
		{
			AUTUMOONNXCurve::AskCurveProps(ipCurveF->Tag(), 1.0 - dSamplePos, &ptF1, &vecF1);
			AUTUMOONNXCurve::AskCurveProps(ipCurveS->Tag(), dSamplePos, &ptS1, &vecS1);

			if (ptF1.Distance(ptS1) > dTolerance || !vecF1.IsParallel(vecS1, dTolerance))
			{
				bNegTest = false;
				break;
			}
		}
	}

	return bPosTest || bNegTest;
}

项目原因部分不重要的代码实现无法公开,可以自己考虑实现,或者查阅资料,调用UG自带的函数。

欢迎交流与讨论。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值