NXopen C++ 艺术样条曲线功能构造渐开线 studioSplineBuilderEx

文章详细描述了如何使用NXOpen库在SolidWorks中创建一个渐开线齿形轮廓,通过添加头文件和构建样条曲线,实现几何约束来生成精确的齿形特征。
摘要由CSDN通过智能技术生成
//1、模板文件添加头文件*
#include <NXOpen/PointCollection.hxx>
#include <NXOpen/Features_StudioSplineBuilderEx.hxx>
#include <NXOpen/Features_StudioSpline.hxx>
#include <NXOpen/Features_FeatureCollection.hxx>
//**2、主程序**
	NXOpen::Session* theSession = NXOpen::Session::GetSession();
	NXOpen::Part* workPart(theSession->Parts()->Work());
	NXOpen::Part* displayPart(theSession->Parts()->Display());
	
	double mn = 6;//模数
	double z = 20;//齿数
	double ha = 1;
	double alphan = PI / 9;//压力角
	double theten = tan(alphan) - alphan;//压力角对应展角
	double d = mn * z;//分度圆直径
	double r = d / 2;
	double db = d * cos(alphan);//基圆直径
	double rb = db / 2;
	double da = d + 2 * ha * mn;//齿顶圆直径
	double ra = da / 2;
	double S = (1 / (2 * rb)) * (pow(ra, 2) - pow(rb, 2));//从齿顶圆到基圆渐开线长度
	double deltaS = 0.5;//渐开线等长度离散
	std::vector<NXOpen::Point* > InvolutePoint;
	for (int i = 1; i < 100; i++)
	{
		double Si = (i - 1) * deltaS;
		if (Si < S)
		{
			double alphai = acos(rb / sqrt(2 * rb * (S - Si) + pow(rb, 2)));
			double thetai = tan(alphai) - alphai;
			double ri = rb / cos(alphai);
			double xi = -ri * sin(thetai);
			double yi = ri * cos(thetai);
			NXOpen::Point3d coordinatesi(xi, yi, 0.0);
			NXOpen::Point* pointi;
			pointi = workPart->Points()->CreatePoint(coordinatesi);
			InvolutePoint.push_back(pointi);
		}
		else
		{
			double xi =0.0;
			double yi = rb;
			NXOpen::Point3d coordinatesi(xi, yi, 0.0);
			NXOpen::Point* pointi;
			pointi = workPart->Points()->CreatePoint(coordinatesi);
			InvolutePoint.push_back(pointi);
			break;
		}
	}
	NXOpen::NXObject* nullNXOpen_NXObject(NULL);
	NXOpen::Features::StudioSplineBuilderEx* studioSplineBuilderEx;//样条曲线构造器
	studioSplineBuilderEx = workPart->Features()->CreateStudioSplineBuilderEx(nullNXOpen_NXObject);
	studioSplineBuilderEx->SetDegree(3);//样条曲线自由度
	NXOpen::Features::GeometricConstraintData* geometricConstraintData;
	std::vector<Features::GeometricConstraintData*> constraints(InvolutePoint.size());
	for (int gg = 0; gg < InvolutePoint.size(); gg++)
	{
		geometricConstraintData = studioSplineBuilderEx->ConstraintManager()->CreateGeometricConstraintData();
		geometricConstraintData->SetPoint(InvolutePoint[gg]);
		constraints[gg] = geometricConstraintData;
	}
	studioSplineBuilderEx->ConstraintManager()->SetContents(constraints);
	NXOpen::NXObject* nXObject;
	nXObject = studioSplineBuilderEx->Commit();
	Spline* returnSpline = studioSplineBuilderEx->Curve();

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值