如DGN里面的物体所示,横截面和loft body的端面不是重合的。
用的方法是SolidUtil::Create::BodyFromLoft(out, cveVecArr, 2, NULL, 0, *ACTIVEMODEL)。其中传入cveVecArr的是两个横截面,横截面是由线段串起来的,上下一共做了两次loft,生成两个loft体。
我试了一下,这个函数结果跟手动工具结果是不一样的。手动工具给出的是正确的结果。
改用这个函数:mdlBspline_loftingSurface,如下是测试代码:
MSBsplineCurve* msBspCve = new MSBsplineCurve[selectset.GetCount()]; for (size_t i = 0; i < selectset.GetCount(); i++) { cveVecArr[i] = ICurvePathQuery::ElementToCurveVector(selectset[i]); cveVecArr[i]->ToBsplineCurve(msBspCve[i]); } StatusInt status = ERROR; if (SUCCESS == (status = mdlBspline_loftingSurface(&crossSurface, msBspCve, NULL, NULL, static_cast<int>(selectset.GetCount()), false, true, true, true, false, true, 0.0))) { if (crossSurface.uParams.numRules > 20) crossSurface.uParams.numRules = 20; if (crossSurface.vParams.numRules > 20) crossSurface.vParams.numRules = 20; } EditElementHandle eehLoft; DraftingElementSchema::ToElement(eehLoft, crossSurface, NULL, *ACTIVEMODEL); eehLoft.AddToModel();
谢谢老师,请问是否有办法形成实体(solid body)?因为结果是BSplineSurface。
尝试:我觉得是 segment 为false 导致的,但是设为true导致函数失败,而这可能是因为两个横截面存在不共面情况吧?因为横截面是来自于采样生成的。但是手动工具是怎么解决的呢?
工具生成的也是BSplineSurface,没办法直接形成实体,只能是将生成的BSplineSurface跟上下两个面再通过SolidUtil::Modify::SewBodies函数风合成体。
Answer Verified By: amender carapace