请问下图中的工具,底层逻辑是不是和BooleanCut方法一样
我发现这个工具有些线能切,有些不能切,就和我用BooleanCut方法一样
而且这样一切也不会报错失败,而是会切出两个一模一样的元素来,工具和方法都是一样,都会切出两个一模一样的元素
这是我的测试文件,能帮我看下是什么原因吗?3D模型.dgn
BooleanCut底层调用的是西门子的P按让俺Solid内核,该内核有个要求就是每个参与的实体(线也会被转为体)不能超过1km。在CE版软件中甚至不能超过500m。所以,太长的线就会导致失败
Answer Verified By: lai xingguang
好的,那我还有两个问题
1.那被切割的实体也是有这个要求吗?就比如说一个很长的隧洞模型,我好像之间手动在顶视图用短线切也切不动,不过我用代码创建的竖线往y轴方向切又切开了。
2.如果像下图一样的视图,用线切球的话,结果会成功并返给我两个球,这个是正常的吗?
使用ParaSolid计算时,参与运算的元素都要满足上面符老师说的要求。
那还有别的剪切大体积的方法吗?如果我要剪切个一千米的隧洞模型,那应该怎么切
这种大范围建模最好选择Mesh来实现。Mesh范围不受限制,但是精度有所牺牲。
这个精度具体是指什么啊,是实际100米的隧洞,会有±1米的误差这种吗?
C#有剪切mesh的方法吗?
例如二维的一条自由曲线,可以以直代曲通过一小段一小段直线段代替,这样的话长度就比真实曲线的长度会小一点了。对比三维的话,就是体积或者面积会比真实值有所损失了。
那c#有剪切mesh的方法吗?我用PolyfaceHeader.ComputeCutAndFill切了后好像有点问题,下面是我的测试代码,用法有问题吗
我用一个mesh面切隧洞结果出来的add到模型中就是两个很奇怪的mesh,好像不完整样的
ElementAgenda eleAgen = new ElementAgenda(); SelectionSetManager.BuildAgenda(ref eleAgen); if (eleAgen.GetCount() < 2) return; Element ele1 = eleAgen.GetEntry(0); Element ele2 = eleAgen.GetEntry(1); MeshHeaderElement mesh = (MeshHeaderElement)ele1; PolyfaceHeader polyface = mesh.GetMeshData(); MeshHeaderElement mesh2 = (MeshHeaderElement)ele2; PolyfaceHeader polyfaceCut = mesh2.GetMeshData(); List<PolyfaceHeader> resA = new List<PolyfaceHeader>(); List<PolyfaceHeader> resB = new List<PolyfaceHeader>(); PolyfaceHeader.ComputeCutAndFill(polyfaceCut, polyface, resA, resB); if (resA.Count > 0 && resB.Count > 0) { foreach (var item in resA) { MeshHeaderElement e = new MeshHeaderElement(Session.Instance.GetActiveDgnModel(), null, item); if (StatusInt.Success == e.AddToModel()) ; } foreach (var item in resB) { MeshHeaderElement e = new MeshHeaderElement(Session.Instance.GetActiveDgnModel(), null, item); if (StatusInt.Success == e.AddToModel()) ; } }
我刚刚又检查了一下您的模型,您最开始剪切失败其实不是因为圆柱超范围造成的,而是那根线太长了超处范围造成的,您把用来剪切的线缩短一点就可以了。
可是我后面要剪切的是很长的隧洞,把线缩短并不能解决体大小的问题,而且我发现好像你们的接口是能剪切很长的隧洞solid的,不过要在特点位置剪切好像
下面是我的测试模型,分别在顶视图和前视图我都绘制了一根线来剪切这个隧洞,但是只有前视图的能剪切成功(用你们的剪切工具和接口代码都是一样),这是为什么啊?
麻烦您帮我看下这个模型,你们用工具能剪切顶视图和前视图的吗?为什么我这边顶视图的剪切不了
测试图纸002.dgn
体超出范围就会出现这种不确定的情况,您可以在切之前获取一下体的范围,如果超出500m的范围了,就把体缩小个10倍(Modify.TransformBody),做完切之后再放大回去即可。不想用这种方式,而用Mesh的话,目前c#操作Mesh的接口不太全,得想办法调用c/c++的接口了。
感谢 我用缩小的方案实现了