EditElementHandle eehFloor; if (SUCCESS == SolidHandler::CreateProjectionElement(eehFloor, NULL, eeh, ptA, dVecNormal, NULL, true, *ACTIVEMODEL)) {
eehFloor.AddToModel();}
eeh是生成的闭合复杂链句柄,dvecNormal是闭合复杂链的平面法向量,ptA是闭合复杂链的任意一个顶点
问题:
1.现在使用该函数返回值为SUCCESS,但eehFloor是空的,然后崩溃了,这是什么原因呢?
2.该函数第4个参数是锚点,是不是任意指定闭合图形上的任意一点就好了?
可能是您闭合复杂链内各个段之间不是首尾相连,Mstn中的线性元素都是有方向的,从起点到终点,这种复杂链用来拉伸构造体的时候,内部的各个链之间虽然看起来是头尾相连,但有可能是相邻两端连接点处的切向量是相反的。第四个参数的点不一定非得是闭合图形上的点。
是闭合的 ,我用mdlSurface_project(&pDescrFloor,pDescrChain, &ptA, &ptEnd, NULL);成功生成了,但是我想用CreateProjectionElement 却一直生成不了。我这已知的是闭合复杂链,和每个顶点坐标,外加一个厚度。。我的这个ptEnd,是我强行把ptA的z坐标加上了这个厚度。
图里是mdlElmdscr_extractNormal获取的值
我后边根据这个法向量+厚度计算出一个新的向量,去拉伸的,拉伸不了。
能不能麻烦老师把extrudeVector的值改成平面的法向量加个厚度试一下能不能绘制出来。
请测试如下代码:
void solidCreateTest3() { ElementHandle profileEH(743781L, ACTIVEMODEL); DPoint3d origin, normal, defaultNormal = DPoint3d::From(0, 0, 1); mdlElmdscr_extractNormal(&normal, &origin, profileEH.GetElementDescrCP(), &defaultNormal); DVec3d extrudeVec = DVec3d::From(normal.x, normal.y, normal.z); extrudeVec.ScaleToLength(10000); EditElementHandle eeh; if (SUCCESS == SolidHandler::CreateProjectionElement(eeh, nullptr, profileEH, origin, extrudeVec, NULL, true, *ACTIVEMODEL)) eeh.AddToModel(); }
沿着你平面的法线方向(Z的负方向)往下延伸了10000个UOR单位。
Answer Verified By: Xiang Liu
好了,谢谢两位老师,谢谢俩位老师的解答。祝两位老师新年快乐,家庭幸福。我自己这边代码也有点小问题,刚调试也发现了。后边测试的时候我把GetElementDescrP与ExtractElementDescr混淆了,导致后边eeh句柄变成空的了。。
ExtractElementDescr调用后eeh中就没有ElementDescr了。这个一定要注意。