[MSCE U13 c++] 根据横截面loft之后生成的物体不保持原有横截面?

如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