【问题标题】:Sketchup triangles connect at point on edge rather than at vertexSketchup 三角形在边上的点而不是顶点处连接
【发布时间】:2017-10-31 07:48:14
【问题描述】:

我试图找到一组三角形的边界。我的问题是我将 Sketchup 中的三角形保存为 collada .dae 文件,然后将它们读入我的程序。 Sketchup 会创建类似于此图像的三角形:

.

我认为这被称为三角形“汤”,因为它们在顶点处未连接 - 三角形可以沿着其边缘之一连接到另一个三角形。这意味着我无法通过测试三角形的每一边以查看它是否连接到另一个三角形来找到集合的边界,因为三角形 1(绿色)连接到三角形 (2) '什么都没有'。

  1. 这是一个三角形“汤”,我需要一个三角形“网格”(术语问题)吗?
  2. sketchup 能否保存它的 .dae 文件,每个三角形顶点都连接到另一个三角形顶点,如下图所示?

  3. 有没有更好的方法找到这组三角形的边界?

【问题讨论】:

  • 你想要一个矩形边界吗?如果是这样,您甚至不需要将它们作为形状处理,只需点...(最少 h 点、最多 h 点、最少 v 点、最多 v 点)...
  • 不,我想要实际的多边形边界(本例中为 6 边)
  • 我猜你可以找到边界框的中心......然后计算从那里的距离,最远的点将是边界凸多边形的一些顶点......至于其他点。 ..您可能需要计算器上的按钮,我不知道如何使用...
  • 我们称这些为“T 型路口”,但我更喜欢“三角汤”这个词 :-)
  • SketchUp 将始终尝试合并几何图形,您在第一个示例中看到的内容在 SU 中应该是不可能的。你应该得到的是你在第二张图片中看到的。您的问题似乎表明您有第一个场景,这将是一个 SU 错误。能否在创建两个三角形的过程中添加代码 sn-p?

标签: algorithm mesh triangulation sketchup


【解决方案1】:

针对@thomthom 关于在 Sketchup 中重现此内容的问题进行编辑: 作为“答案”,因为我没有代表添加两个以上原始帖子的链接。 -对不起

感谢@thomthom 的提示,我在这里为您重现了这个问题。我的 Sketchup 文件看起来像 this:

我正在运行 Sketchup 版本 17.2.2554。

然后我去文件->导出->3D模型 选择格式“COLLADA 文件 (*.dae)” 单击“选项”并选中“导出两侧面”和“三角化所有面” 选择保存文件的位置

这会写入一个 collada .dae 文件。它只有 8 个面孔,所以我将在此处发布 .dae,以便您自己查看:

    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
    <asset>
        <contributor>
            <authoring_tool>SketchUp 17.2.2554</authoring_tool>
        </contributor>
        <created>2017-05-31T19:42:02Z</created>
        <modified>2017-05-31T19:42:02Z</modified>
        <unit meter="0.0254000" name="inch" />
        <up_axis>Z_UP</up_axis>
    </asset>
    <library_cameras>
        <camera id="ID1" name="skp_camera_Last_Saved_SketchUp_View">
            <optics>
                <technique_common>
                    <perspective>
                        <yfov>35.0000000</yfov>
                        <aspect_ratio>0.0000000</aspect_ratio>
                        <znear>1.0000000</znear>
                        <zfar>1000.0000000</zfar>
                    </perspective>
                </technique_common>
            </optics>
        </camera>
    </library_cameras>
    <library_visual_scenes>
        <visual_scene id="ID2">
            <node name="SketchUp">
                <instance_geometry url="#ID3">
                    <bind_material>
                        <technique_common>
                            <instance_material symbol="Material2" target="#ID5">
                                <bind_vertex_input semantic="UVSET0" input_semantic="TEXCOORD" input_set="0" />
                            </instance_material>
                            <instance_material symbol="Material3" target="#ID10">
                                <bind_vertex_input semantic="UVSET0" input_semantic="TEXCOORD" input_set="0" />
                            </instance_material>
                        </technique_common>
                    </bind_material>
                </instance_geometry>
                <node name="skp_camera_Last_Saved_SketchUp_View">
                    <matrix>0.9857500 0.0094434 0.1679518 330.2823181 0.1682171 -0.0553379 -0.9841955 -862.0587769 0.0000000 0.9984230 -0.0561379 109.0382767 0.0000000 0.0000000 0.0000000 1.0000000</matrix>
                    <instance_camera url="#ID1" />
                </node>
            </node>
        </visual_scene>
    </library_visual_scenes>
    <library_geometries>
        <geometry id="ID3">
            <mesh>
                <source id="ID6">
                    <float_array id="ID11" count="60">318.7783345 0.0000000 0.0000000 240.0381770 -0.0000000 118.1102362 0.0000000 0.0000000 0.0000000 318.7783345 0.0000000 196.8503937 240.0381770 0.0000000 196.8503937 159.3891673 0.0000000 196.8503937 80.6490098 0.0000000 118.1102362 159.3891673 0.0000000 118.1102362 80.6490098 0.0000000 196.8503937 0.0000000 0.0000000 118.1102362 80.6490098 0.0000000 118.1102362 159.3891673 0.0000000 118.1102362 0.0000000 0.0000000 118.1102362 240.0381770 -0.0000000 118.1102362 0.0000000 0.0000000 0.0000000 80.6490098 0.0000000 196.8503937 159.3891673 0.0000000 196.8503937 240.0381770 0.0000000 196.8503937 318.7783345 0.0000000 196.8503937 318.7783345 0.0000000 0.0000000</float_array>
                    <technique_common>
                        <accessor count="20" source="#ID11" stride="3">
                            <param name="X" type="float" />
                            <param name="Y" type="float" />
                            <param name="Z" type="float" />
                        </accessor>
                    </technique_common>
                </source>
                <source id="ID7">
                    <float_array id="ID12" count="60">0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 0.0000000 -1.0000000 0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000 -0.0000000 1.0000000 -0.0000000</float_array>
                    <technique_common>
                        <accessor count="20" source="#ID12" stride="3">
                            <param name="X" type="float" />
                            <param name="Y" type="float" />
                            <param name="Z" type="float" />
                        </accessor>
                    </technique_common>
                </source>
                <vertices id="ID8">
                    <input semantic="POSITION" source="#ID6" />
                    <input semantic="NORMAL" source="#ID7" />
                </vertices>
                <triangles count="8" material="Material2">
                    <input offset="0" semantic="VERTEX" source="#ID8" />
                    <p>0 1 2 1 0 3 1 3 4 5 6 7 6 5 8 2 7 9 7 2 1 9 7 6</p>
                </triangles>
                <triangles count="8" material="Material3">
                    <input offset="0" semantic="VERTEX" source="#ID8" />
                    <p>10 11 12 13 14 11 12 11 14 15 16 10 11 10 16 17 18 13 18 19 13 14 13 19</p>
                </triangles>
            </mesh>
        </geometry>
    </library_geometries>
    <library_materials>
        <material id="ID5" name="material">
            <instance_effect url="#ID4" />
        </material>
        <material id="ID10" name="material_0">
            <instance_effect url="#ID9" />
        </material>
    </library_materials>
    <library_effects>
        <effect id="ID4">
            <profile_COMMON>
                <technique sid="COMMON">
                    <lambert>
                        <diffuse>
                            <color>1.0000000 1.0000000 1.0000000 1.0000000</color>
                        </diffuse>
                    </lambert>
                </technique>
            </profile_COMMON>
        </effect>
        <effect id="ID9">
            <profile_COMMON>
                <technique sid="COMMON">
                    <lambert>
                        <diffuse>
                            <color>0.6431373 0.6980392 0.7333333 1.0000000</color>
                        </diffuse>
                    </lambert>
                </technique>
            </profile_COMMON>
        </effect>
    </library_effects>
    <scene>
        <instance_visual_scene url="#ID2" />
    </scene>
</COLLADA>

您可以看到 collada 输出有 8 个三角形,而有问题的三角形位于该行中描述的索引 5 处:

<triangles count="8" material="Material2">
    <input offset="0" semantic="VERTEX" source="#ID8" />
    <p>0 1 2 1 0 3 1 3 4 5 6 7 6 5 8 2 7 9 7 2 1 9 7 6</p>
                                     ^^^^^
                                     Tri 5
</triangles>

这是指顶点 2、7、9,它们是:

2:  0.0000000 0.0000000 0.0000000
7:  159.3891673 0.0000000 118.1102362 
9:  0.0000000 0.0000000 118.1102362 

乘以英寸到米的比例因子 0.0254000 得出:

0, 0, 0 
4, 0, 3 
0, 0, 3 

我们看到三角形索引 3 具有顶点 5,6 和 7,当与顶点信息交叉引用时会给出:

5:  159.44 0.00 196.85
6:  80.70 0.00 118.11 
7:  159.44 0.00 118.11

乘以英寸到米的比例因子 0.0254000 得出:

4, 0, 5
2, 0, 3
4, 0, 3

当你把它们画出来时,它们看起来像this:

如您所见,这两个三角形与我的第一个图表中的相似,而不是第二个。三角形 5 有一个与三角形 3 相邻的面和一个空面。

所以这可能是 Sketchup 中的一个错误,但它仍然不能帮助我解决寻找边界的问题。 感谢您的宝贵时间。

【讨论】:

  • 啊,我以为你实际上有三角形,就像你的帖子的第一张图片一样。这就是出口商如何对这张单面进行三角测量。如果您需要完全控制三角剖分,那么我建议您在 SketchUp 文件中进行三角剖分。如果您想保留视觉外观,可以隐藏它们。
  • 它与原始图像相同(它实际上取自相同的数据(但我已将其翻转为 y 轴)。可悲的是,绘制单个三角形已经出局 - 我的场景有大约 100,000 个三角形. 我花了一段时间才发现这是我的代码崩溃的原因!
  • 我认为有些扩展可以为您进行三角测量。
  • 是的 - 我使用的是 CGAL,但三角测量有其自身的问题 - 如果你没有正确给出边界/段,那么它将填充锯齿之间的方孔。您可以尝试使用凸包来查找分段,但这也可以填充孔。或者,您可以采用凹形船体(或 Alpha 船体),但这需要知道您期望的“孔”的大小。所以我认为正确的解决方案是通过检查每个三角形的每条边并检查它是否没有相邻的三角形来找到线段。如果不是,那么它是一个细分市场。有问题吗?
猜你喜欢
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
相关资源
最近更新 更多