微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 2DPoints 列表挤出到网格并在 C# 中减去这些挤出? [构造实体几何]

如何解决如何将 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 举报,一经查实,本站将立刻删除。