From 5effd3de3215576abed73d2c2c19be4a4fe0a93f Mon Sep 17 00:00:00 2001 From: brnkhy Date: Fri, 31 Mar 2017 16:40:10 +0300 Subject: [PATCH] fix the occasional vertex/triangle count mismatched caused by extra vertices from triangulation lib --- .../MeshModifiers/PolygonMeshModifier.cs | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/PolygonMeshModifier.cs b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/PolygonMeshModifier.cs index f485ce20d..42fc47544 100644 --- a/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/PolygonMeshModifier.cs +++ b/sdkproject/Assets/Mapbox/Core/Unity/MeshGeneration/Modifiers/MeshModifiers/PolygonMeshModifier.cs @@ -6,7 +6,7 @@ namespace Mapbox.Unity.MeshGeneration.Modifiers using TriangleNet.Geometry; using UnityEngine; using Mapbox.Unity.MeshGeneration.Data; - + [CreateAssetMenu(menuName = "Mapbox/Modifiers/Polygon Mesh Modifier")] public class PolygonMeshModifier : MeshModifier { @@ -17,20 +17,14 @@ public override void Run(VectorFeatureUnity feature, MeshData md) if (md.Vertices.Distinct().Count() < 3) return; - var verts = CreateRoofTriangulation(md.Vertices); - md.Triangles.Add(verts); - } - - private List CreateRoofTriangulation(List corners) - { var data = new List(); var _mesh = new TriangleNet.Mesh(); - var inp = new InputGeometry(corners.Count); - for (int i = 0; i < corners.Count; i++) + var inp = new InputGeometry(md.Vertices.Count); + for (int i = 0; i < md.Vertices.Count; i++) { - var v = corners[i]; + var v = md.Vertices[i]; inp.AddPoint(v.x, v.z); - inp.AddSegment(i, (i + 1) % corners.Count); + inp.AddSegment(i, (i + 1) % md.Vertices.Count); } _mesh.Behavior.Algorithm = TriangulationAlgorithm.SweepLine; _mesh.Behavior.Quality = true; @@ -42,7 +36,19 @@ private List CreateRoofTriangulation(List corners) data.Add(tri.P0); data.Add(tri.P2); } - return data; + + if (_mesh.Vertices.Count != md.Vertices.Count) + { + md.Vertices.Clear(); + using (var sequenceEnum = _mesh.Vertices.GetEnumerator()) + { + while (sequenceEnum.MoveNext()) + { + md.Vertices.Add(new Vector3((float)sequenceEnum.Current.x, 0, (float)sequenceEnum.Current.y)); + } + } + } + md.Triangles.Add(data); } } }