Sketchup三角形在边缘上而不是在顶点处连接

时间:2017-05-30 18:01:59

标签: algorithm mesh triangulation sketchup

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

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

  1. 这是一个三角形'汤',我需要一个三角形“网格”(术语问题)?
  2. 可以草绘保存其.dae文件,每个三角形顶点连接到另一个三角形顶点,如下图所示吗?

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

1 个答案:

答案 0 :(得分:0)

编辑以回应@thomthom关于在Sketchup中复制此内容的问题: 作为'答案'因为我没有让Rep添加超过两个链接到原始帖子。 - 抱歉

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

我正在运行Sketchup版本17.2.2554。

然后我转到file-> Export-> 3D模型 选择格式" COLLADA文件(* .dae)" 点击'选项'并检查出口双面'和' Triangulate All Faces' 选择保存文件的位置

这会写一个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和5。 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具有三角形的相邻面和空面。

所以这可能是Sketchup中的一个错误,但它仍然无法解决我找到边界的问题。 谢谢你的时间。