老师,你好!
请问一下我用CreateDgnRuledSweep与DraftingElementSchema.ToElement为什么创建不出来实体?程序会报错,请帮忙看看怎么回事?
程序代码:
public static void HelloWorld(string unparsed) { Bentley.DgnPlatformNET.DgnModel dgnModel = Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel(); ComplexShapeElement shapeElement2 = dgnModel.FindElementById((Bentley.DgnPlatformNET.ElementId)1435L) as Bentley.DgnPlatformNET.Elements.ComplexShapeElement; ComplexShapeElement shapeElement3 = dgnModel.FindElementById((Bentley.DgnPlatformNET.ElementId)1471L) as Bentley.DgnPlatformNET.Elements.ComplexShapeElement; List<CurveVector> curveVectors = new List<Bentley.GeometryNET.CurveVector>(); curveVectors.Add(shapeElement2.GetCurveVector()); curveVectors.Add(shapeElement3.GetCurveVector()); DgnRuledSweepDetail sweepDetail = new DgnRuledSweepDetail(curveVectors, true); var solidPrimitive = SolidPrimitive.CreateDgnRuledSweep(sweepDetail); DisplayableElement element = (DisplayableElement)DraftingElementSchema.ToElement(dgnModel, solidPrimitive, null); element.AddToModel(); }
测试文件:
扫略模型-问题.dgn
主要与您的数据有关。SmartSolid是基于西门子的ParaSolid内核开发的,这种BRep(边界表达)几何表达对数据的要求非常严格。比如:每个边长不能大于1km,整个体不能距离全局原点太远,体本身不能有自交,边是由相邻的两个面相交构成,点是由三个相邻的面相交构成等等。凡是不满足这些条件的都无法生成SmartSolid。
我把这两个横截面的距离放近一点,大概20米的时候可以生成。25米就生成不了。
测了一下确实如您所说,可能是作者考虑了一些其他特殊情况导致不能正确生成吧,不过您当前的情况建议您用拉伸体DgnExtrusionDetail去创建这个模型
因为这个是一个简单的例子,因为我还涉及到其他线型的问题。但是我不太清楚,这个是Bentley的一个Bug还是本来就不支持这样的模型创建?
如果我想用多个曲面过渡成圆形的扫略实体应该如何处理这个问题?请问能否提供一些思路?
应该不是Bug吧,可能是作者有其他考虑,您可以试试Bentley.DgnPlatformNET.Create.BodyFromLoft,对应于下图所示的Loft工具: