我使用代码创建的linestring curvevector没法拉伸成体,发现MS里面操作也是同样的问题。
5861.ItemTypeExperiment.dgn
因为LineString是一个Open开放类型的元素,拉伸成体的轮廓必须是一个Closed闭合的Shape才行。
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
这个本身是一个封闭的shape,因为它是由提取了另一个linestring的点通过Boundary为Outer构造出来的。
void TestFunction() { EditElementHandle eeh(75149, ACTIVEMODEL); { wprintf(L"<0>got red line type, element ID is %d \n", eeh.GetElementId()); auto RedPlacementLine = ICurvePathQuery::ElementToCurveVector(eeh); DVec3d extrudeDir = DVec3d::From(0, 0, 3000); CurveVectorPtr pCurveVec1 = CurveVector::Create(RedPlacementLine->front(), CurveVector::BOUNDARY_TYPE_Outer); pCurveVec1->SimplifyLinestrings(1, true, false); DgnExtrusionDetail dgnExtruDeta(pCurveVec1, extrudeDir, false); ISolidPrimitivePtr solidPrimitive1 = ISolidPrimitive::CreateDgnExtrusion(dgnExtruDeta); ISolidKernelEntityPtr entityOut1, entityOut2; SolidUtil::Create::BodyFromSolidPrimitive(entityOut1, *solidPrimitive1, *ACTIVEMODEL); EditElementHandle eef1_, eef2_; DraftingElementSchema::ToElement(eef1_, *entityOut1, NULL, *ACTIVEMODEL); //////DraftingElementSchema::ToElement(eef2, *entityOut2, NULL, *ACTIVEMODEL); eef1_.AddToModel(); } }
7128.ItemTypeExperiment.dgn
可以看到这个Shape的4,5段之间明显数据有问题: