From b2350443a6744611cdae5fdc1c5d32a4aa67c6a2 Mon Sep 17 00:00:00 2001 From: adecler Date: Thu, 14 May 2020 15:06:42 +0800 Subject: [PATCH] Fix crash on invalid mesh preview in Rhino --- Rhinoceros_Engine/Convert/ToRhino.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Rhinoceros_Engine/Convert/ToRhino.cs b/Rhinoceros_Engine/Convert/ToRhino.cs index 805d00a..36decba 100644 --- a/Rhinoceros_Engine/Convert/ToRhino.cs +++ b/Rhinoceros_Engine/Convert/ToRhino.cs @@ -453,15 +453,24 @@ public static RHG.Mesh ToRhino(this BHG.Mesh mesh) List rVertices = mesh.Vertices.Select(x => x.ToRhino()).ToList(); List faces = mesh.Faces; List rFaces = new List(); + int nbVertices = rVertices.Count; for (int i = 0; i < faces.Count; i++) { - if (faces[i].IsQuad()) + BHG.Face face = faces[i]; + if (face.IsQuad()) { - rFaces.Add(new RHG.MeshFace(faces[i].A, faces[i].B, faces[i].C, faces[i].D)); + + if (face.A < nbVertices && face.B < nbVertices && face.C < nbVertices && face.D < nbVertices) + rFaces.Add(new RHG.MeshFace(face.A, face.B, face.C, face.D)); + else + Reflection.Compute.RecordWarning("Mesh face [" + face.A + ", " + face.B + ", " + face.C + ", " + face.D + "] could not be created due to corresponding vertices missing"); } else { - rFaces.Add(new RHG.MeshFace(faces[i].A, faces[i].B, faces[i].C)); + if (face.A < nbVertices && face.B < nbVertices && face.C < nbVertices) + rFaces.Add(new RHG.MeshFace(face.A, face.B, face.C)); + else + Reflection.Compute.RecordWarning("Mesh face [" + face.A + ", " + face.B + ", " + face.C + "] could not be created due to corresponding vertices missing"); } } RHG.Mesh rMesh = new RHG.Mesh();