本人想通过使用mdlBspline_oneRailTwoSectionSweep函数使用沿一轨迹两轮廓延展曲面,但测试时一直出现内存相关问题,因此想询问一下该函数的具体使用细节,以下是测试该函数时代码片段:
//测试函数mdlBspline_oneRailTwoSectionSweep MSElement path, section0, section1; MSBsplineCurve pathC, section0C, section1C; MSElementDescrP edP(0);
//path取直线(0,0,0),(0,0,1000) DPoint3d pts[2]; pts[0].x = pts[0].y = pts[0].z = pts[1].x = pts[1].y = 0; pts[1].z = 1000; mdlLine_create(&path, NULL, pts); mdlElmdscr_new(&edP, NULL, &path); mdlBspline_convertToCurve(&pathC, edP); mdlElmdscr_add(edP); mdlElmdscr_freeAll(&edP);
//根据放样轨迹求出起点&终点的切线向量 DVec3d vec0, vec1; DPoint3d tmpPt[2]; //起点 mdlBspline_evaluateCurvePoint(&tmpPt[0], &tmpPt[1], &pathC, 0); mdlVec_computeNormal(&vec0, &tmpPt[1], &tmpPt[0]); //终点mdlBspline_evaluateCurvePoint(&tmpPt[0], &tmpPt[1], &pathC, 1); mdlVec_computeNormal(&vec1, &tmpPt[1], &tmpPt[0]);
//分别画两个圆经过起终点 DPoint3d ptc1[3] = {{0,0,0},{1000,1000,0},{2000,0,0}}; DPoint3d ptc2[3] = {{0,0,1000},{1000,1000,1000},{2000,0,1000}};
mdlCircle_createBy3Pts(§ion0, NULL, ptc1, 0); mdlElmdscr_new(&edP, NULL, §ion0); mdlBspline_convertToCurve(§ion0C, edP); mdlElmdscr_add(edP); mdlElmdscr_freeAll(&edP);
mdlCircle_createBy3Pts(§ion1, NULL, ptc2, 0); mdlElmdscr_new(&edP, NULL, §ion1); mdlBspline_convertToCurve(§ion1C, edP); mdlElmdscr_add(edP); mdlElmdscr_freeAll(&edP);
//调用mdlBspline_oneRailTwoSectionSweep函数
MSBsplineSurface surfaceLoft; mdlBspline_oneRailTwoSectionSweep(&surfaceLoft, &pathC, §ion0C, §ion1C, &vec0, &vec1, 0.01);
mdlBspline_createSurface (&edP, NULL, &surfaceLoft);mdlElmdscr_add(edP);mdlElmdscr_freeAll(&edP);
请问需要哪个头文件,谢谢
已经在另外一个帖子中答复您了。
xiexie