可以使用DgnExtrusion类。如下是一个简单的示例:
DgnExtrusionDetail data = new DgnExtrusionDetail(profileIn, extrusionVec, true); SolidPrimitive solid = SolidPrimitive.CreateDgnExtrusion(data); Element outElem = DraftingElementSchema.ToElement(dgnModel, solid, null); outElem.AddToModel();
其中的profileIn是一个CurveVector,可从你的ComplexShapeElement中获得,extrusionVec是一个矢量,表示拉伸的长度和方向。
【另外】:请阅读置顶的【发帖指南】,在得到正确答案后协助我们确认答案——在正确答案下点Verify Answer,该答案就会被绿色框框住。
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
老师,我本来是用的这个方法的,但是现在发现问题不在拉伸步骤上,而是我在创建ComplexShapeElement对象时就似乎没成功,我创建ComplexShapeElement对象是用的如下代码:
Element element = ElementAgenda.GetEntry(i); ComplexShapeElement complexShapeElement = new ComplexShapeElement(element.DgnModel, null); switch (element.ElementType.ToString()) { case "LineString": complexShapeElement.AddComponentElement(element); complexShapeElement.AddToModel(); break; case "ComplexString": ChildElementCollection children = element.GetChildren(); foreach (Element child in children) { complexShapeElement.AddComponentElement(child); } complexShapeElement.AddToModel(); break; case "Ellipse": EllipseElement ellipse = element as EllipseElement; CurvePrimitive curvePrimitive = ellipse.GetCurveVector().GetAt(0); ArcElement arcElement = DraftingElementSchema.ToElement(element.DgnModel, curvePrimitive, null) as ArcElement ; arcElement.AddToModel(); complexShapeElement.AddComponentElement(arcElement); arcElement.DeleteFromModel(); complexShapeElement.AddToModel(); break; default: continue; }
但是这种方式创建出来的ComplexShapeElement再调用GetCurveVector方法,得到的是null,我不知道为什么?
刚才又检查了结果,发现我上面的代码是可以正常创建圆和线串的ComplexShapeElement的,但是复杂线串的没有创建成功。
通过AddComponentElement添加完所有元素以后,最好是再调用一下AddComponentComplete函数结束一下。
加了AddComponentElement还是不行啊……
这个是我要操作的文件,里面有一个圆和一个复杂线串,圆是可以创建成复杂形状的,但是复杂线串就不行了。
1401.temp.dgn
所以查找问题要一步步来,你以为是拉伸出了问题,原来是profile就没有创建对。不过好在这类图形编程比较好验证每一步的结果,那就是将每一步的结果都写入模型(model)中查看,这样一目了然。