试着写了个简单的代码,就是根据两个圆界面和一根导向线用 BodyFromLoft放样生成实体,总是不成功。
麻烦老师帮忙看一下错在哪里?代码如下:
void createLoftSolid(WCharCP /*unparsed*/) { DPoint3d basePt1, basePt2; basePt1 = basePt1.From(0, 0, 0); basePt2 = basePt2.From(0, 0, 500); //构建要放样的两个圆截面 DPoint3d normal; normal = normal.From(0.0, 0.0, 1.0); DEllipse3d circle1, circle2; circle1.InitFromCenterNormalRadius(basePt1, (DVec3dCR)normal, 500); circle2.InitFromCenterNormalRadius(basePt2, (DVec3dCR)normal, 300); //构建放样的导向线 DPoint3d Pts[2]; Pts[0].x = 500; Pts[0].y = 0; Pts[0].z = 0; Pts[1].x = 300; Pts[1].y = 0; Pts[1].z = 500; bvector<DPoint3d> LinePts; LinePts.push_back(Pts[0]); LinePts.push_back(Pts[1]); ICurvePrimitivePtr GuideLinePtr = ICurvePrimitive::CreateLineString(LinePts); CurveVectorPtr GuideLineVectorPtr = CurveVector::Create(CurveVector::BOUNDARY_TYPE_Open); GuideLineVectorPtr->push_back(GuideLinePtr); ICurvePrimitivePtr pCirclePtr1 = ICurvePrimitive::CreateArc(circle1); ICurvePrimitivePtr pCirclePtr2 = ICurvePrimitive::CreateArc(circle2); CurveVectorPtr ArcVectorPtr = CurveVector::Create(CurveVector::BOUNDARY_TYPE_None); ArcVectorPtr->Add(pCirclePtr1); ArcVectorPtr->Add(pCirclePtr2); ISolidKernelEntityPtr loftSolid; EditElementHandle loftSolidEEh; //根据两个圆截面及导向线进行放样生成实体 if (SUCCESS == SolidUtil::Create::BodyFromLoft(loftSolid, &ArcVectorPtr, ArcVectorPtr->size(), &GuideLineVectorPtr, GuideLineVectorPtr->size(), *ACTIVEMODEL,true, false)) { Bentley::DgnPlatform::DraftingElementSchema::ToElement(loftSolidEEh, *loftSolid, nullptr, *ACTIVEMODEL); loftSolidEEh.AddToModel(); } }
① 先把你创建的两个Profile和一个GuideLine添加到模型中查看一下是否创建正确;
②BodyFromLoft的倒二参数periodic应该设置为false吧?该参数的意思是你是否要创建一个封闭的(循环的)Loft?即首截面也是尾截面这样的一个封闭体。
(1) 两个Profile圆弧线和一个GuideLine在图中画出来都没问题.
(2) 倒数第二个参数改为false还是创建不成功。
另外,在ce里用自带的loft工具对这两个圆弧线和导向线创建放样曲面倒是能成功.
这是扫略成体,如果想要扫略成面,上面的demo如何修改?
源代码中关于这一点已经有注释了呀。请看
//BOUNDARY_TYPE_Outer is important, it can create a closed profile that further makes a solid instead of a sheet
请问一下老师我按照您的代码报这种错,这是怎么回事啊
mke文件里边指定的连接库缺少了PSolidCore.lib,
可以了谢谢老师!