//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();
NXopen C++ 艺术样条曲线功能构造渐开线 studioSplineBuilderEx
于 2024-04-05 15:31:09 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)