線分に沿い、GroupHoldを掃引すると、厚みのあるソリッドが作成できます。
BodyFromSweepの二番目のパラメータにより、CurveVectorCRのパラメータが必要のため、事前にそのCurveVectorCRを用意する必要があります。
unionCurveを定義するとき、CurveVector::BOUNDARY_TYPE_ParityRegionを渡します。
次にouterEllipseCurveとinnerEllipseCurveを作成し、それぞれのBOUNDARY_TYPEを指定します。outerEllipseCurveとinnerEllipseCurveの半径と開始点はouterEllipseとinnerEllipseを経由し設定できます。
最後にBodyFromSweepを使い、ソリッドが作成できます。
void BodyFromSweepTest3(WCharCP unparsed) { ElementId id = 9119; ElementHandle myLine(id, ACTIVEMODEL); CurveVectorPtr path = ICurvePathQuery::ElementToCurveVector(myLine); DPoint3d startPnt, endPnt; DVec3d startTangent, endTangent; path->at(0)->GetStartEnd(startPnt, endPnt, startTangent, endTangent); RotMatrix rMatrix = RotMatrix::From1Vector(startTangent, 2, true); double innerRadius = 2.0 * uorPerMeter, outterRadius = 3.0 * uorPerMeter; CurveVectorPtr unionCurve = CurveVector::Create(CurveVector::BOUNDARY_TYPE_ParityRegion); DEllipse3d outerEllipse = DEllipse3d::FromCenterNormalRadius(startPnt, startTangent, outterRadius); CurveVectorPtr outerEllipseCurve = CurveVector::CreateDisk(outerEllipse, CurveVector::BOUNDARY_TYPE_Outer); unionCurve->Add(outerEllipseCurve); DEllipse3d innerEllipse = DEllipse3d::FromCenterNormalRadius(startPnt, startTangent, innerRadius); CurveVectorPtr innerEllipseCurve = CurveVector::CreateDisk(innerEllipse, CurveVector::BOUNDARY_TYPE_Inner); unionCurve->Add(innerEllipseCurve); ISolidKernelEntityPtr solid; EditElementHandle sweepSolid; SolidUtil::Create::BodyFromSweep(solid, *unionCurve, *path, *ACTIVEMODEL, false, true, false); DraftingElementSchema::ToElement(sweepSolid, *solid, nullptr, *ACTIVEMODEL); sweepSolid.AddToModel(); }