如何解决如何将 2DPoints 列表挤出到网格并在 C# 中减去这些挤出? [构造实体几何]
我已经为构造实体几何的问题苦苦挣扎了几天。实际上,我从必须在 3D 空间中挤出的 2DLines(带有 2DPoints)列表开始。这是我设法用三角剖分算法完成的事情,我可以使用 Helix Toolkit 进行可视化。比我尝试了几个开源库来执行布尔运算“减法”,我得到最好结果的一个是 this library (但我当然对其他库开放)。我将给出的示例与此问题中的以下几点有关。
我用来做减法的代码是一个挤压,我已经过期了很多以逆时针改变顶点的方向以获得正确的法线,但它仍然不起作用。
CSCSG_Solid lovToolSolid = Extrude_Element_List_To_Solid(ElementList,70);
CSCSG_Matrix4x4 lovTransform = CSCSG_Matrix4x4.RotationY(270) * CSCSG_Matrix4x4.Translation(new CSCSG_Vector3D(0.01,0.01,-0.01));
var lovHornSolid = Extrude_Element_List_To_Solid(HornList,-200,200);
var lovHorn_Transformed = lovHornSolid.Transform(lovTransform);
modelGroup.Children.Add(Convert_Solid_To_GeometryModel3D(Colors.Gray,lovToolSolid.Substract(lovHorn_Transformed)));
你看到我得到的三角形并不完全正确,这有点令人沮丧。
我已经尝试了多个库(例如 this 一个:来自 Sebastian Loncar 又名“arakis”的 Net3dBool)并尝试使用实体多边形的顶点、多种算法来确定它是逆时针还是逆时针顺时针……无解。
是否有人做过类似的事情并想分享他是如何解决问题的?你用的是哪个库,你是怎么挤出2DPoints的列表的?
来自比利时的问候, 约阿希姆
HornList
Count = 26
[0]: {[X=-10][Y=37] [X=0][Y=37]}
[1]: {[X=0][Y=37] [X=0][Y=14,000000000089]}
[2]: {[X=0][Y=14,000000000089] [X=0,01][Y=13,997320508164]}
[3]: {[X=0,997320508164] [X=15,82][Y=9,761043775828]}
[4]: {[X=15,761043775828] [X=15,84][Y=9,75568479198]}
[5]: {[X=15,75568479198] [X=15,97][Y=9,720851396963]}
[6]: {[X=15,720851396963] [X=15,99][Y=9,715492413115]}
[7]: {[X=15,715492413115] [X=19,25][Y=8,841978045789]}
[8]: {[X=19,841978045789] [X=19,27][Y=8,836619061941]}
[9]: {[X=19,836619061941] [X=27,04][Y=6,754653836751]}
[10]: {[X=27,754653836751] [X=27,06][Y=6,749294852902]}
[11]: {[X=27,749294852902] [X=34,99][Y=4,624457756924]}
[12]: {[X=34,624457756924] [X=34,99][Y=-163,798514080966]}
[13]: {[X=34,798514080966] [X=27,06][Y=-168,37690171564]}
[14]: {[X=27,37690171564] [X=27,04][Y=-168,388448721024]}
[15]: {[X=27,388448721024] [X=19,27][Y=-172,874460312627]}
[16]: {[X=19,874460312627] [X=19,25][Y=-172,886007318011]}
[17]: {[X=19,886007318011] [X=15,99][Y=-174,768169195569]}
[18]: {[X=15,768169195569] [X=15,97][Y=-174,779716200953]}
[19]: {[X=15,779716200953] [X=15,84][Y=-174,854771735948]}
[20]: {[X=15,854771735948] [X=15,82][Y=-174,866318741332]}
[21]: {[X=15,866318741332] [X=0,01][Y=-183,99422649722]}
[22]: {[X=0,99422649722] [X=0][Y=-183,999999999911]}
[23]: {[X=0][Y=-183,999999999911] [X=0][Y=-193,999999999911]}
[24]: {[X=0][Y=-193,999999999911] [X=-10][Y=-193,999999999911]}
[25]: {[X=-10][Y=-193,999999999911] [X=-10][Y=37]}
ElementList
Count = 26
[0]: {[X=3,48943396645][Y=-185,7764239243] [X=1,94874012955][Y=-192,4499021086]}
[1]: {[X=1,4499021086] [X=-0][Y=-193,999999999911] [X=-1,4499021086] [X=-0][Y=-191,999999999937]}
[2]: {[X=-1,4499021086] [X=-6,00939006965][Y=-174,8612948592]}
[3]: {[X=-6,8612948592] [X=-5,61964204375][Y=-174,7713144375]}
[4]: {[X=-5,7713144375] [X=-14,00000000005][Y=-138,4719961321]}
[5]: {[X=-14,4719961321] [X=-14,00000000005][Y=-3]}
[6]: {[X=-14,00000000005][Y=-3] [X=-13,00000000005][Y=-2]}
[7]: {[X=-13,00000000005][Y=-2] [X=-10,00000000005][Y=-2]}
[8]: {[X=-10,00000000005][Y=16,5]}
[9]: {[X=-10,5] [X=-6,50000000005][Y=20]}
[10]: {[X=-6,50000000005][Y=20] [X=-6,50000000005][Y=21,5]}
[11]: {[X=-6,5] [X=-10,00000000005][Y=25]}
[12]: {[X=-10,00000000005][Y=25] [X=-10,00000000005][Y=36]}
[13]: {[X=-10,00000000005][Y=36] [X=-9,00000000005][Y=37]}
[14]: {[X=-9,00000000005][Y=37] [X=8,99999999995][Y=37]}
[15]: {[X=8,99999999995][Y=37] [X=9,99999999995][Y=36]}
[16]: {[X=9,99999999995][Y=36] [X=9,99999999995][Y=25]}
[17]: {[X=9,99999999995][Y=25] [X=6,49999999995][Y=21,5]}
[18]: {[X=6,5] [X=6,49999999995][Y=20]}
[19]: {[X=6,49999999995][Y=20] [X=9,99999999995][Y=16,5]}
[20]: {[X=9,5] [X=9,99999999995][Y=-18]}
[21]: {[X=9,99999999995][Y=-18] [X=5,85786437625][Y=-22,1421356237]}
[22]: {[X=5,1421356237] [X=1,522409349763][Y=-28,630602600119] [X=-5E-11][Y=-36,2842712474] [X=20,000000000194][Y=-36,284271247563]}
[23]: {[X=-5E-11][Y=-36,2842712474] [X=-5E-11][Y=-168,3833127175]}
[24]: {[X=-5E-11][Y=-168,3833127175] [X=0,12856288642][Y=-170,64737699287] [X=0,51259870425][Y=-172,8823338044] [X=20][Y=-168,383312717497]}
[25]: {[X=0,8823338044] [X=3,7764239243]}
解决方法
c++中有几个库,可以使用c++库,从c#调用来处理mesh,然后用helix toolkit进行展示。出于性能和跨平台的原因,这些库通常是用 C++ 编写的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。