public static Mesh ToRhino(DB.Mesh mesh) { if (mesh is null) { return(null); } var result = new Mesh(); result.Vertices.Capacity = mesh.Vertices.Count; result.Vertices.AddVertices(mesh.Vertices.Convert(AsPoint3d)); var faceCount = mesh.NumTriangles; result.Faces.Capacity = faceCount; for (int t = 0; t < faceCount; ++t) { var triangle = mesh.get_Triangle(t); result.Faces.AddFace ( (int)triangle.get_Index(0), (int)triangle.get_Index(1), (int)triangle.get_Index(2) ); } return(result); }
public static Mesh ToRhino(DB.Mesh mesh) { if (mesh.NumTriangles < 1) { return(null); } var result = new Mesh(); result.Vertices.AddVertices(mesh.Vertices.Select(x => ToRhino(x))); for (int t = 0; t < mesh.NumTriangles; ++t) { var triangle = mesh.get_Triangle(t); var meshFace = new MeshFace ( (int)triangle.get_Index(0), (int)triangle.get_Index(1), (int)triangle.get_Index(2) ); result.Faces.AddFace(meshFace); } return(result); }
// must return an array to make mesh double sided public static Mesh3D[] RevitMeshToHelixMesh(Autodesk.Revit.DB.Mesh rmesh) { List <int> indices_front = new List <int>(); List <int> indices_back = new List <int>(); List <Point3D> vertices = new List <Point3D>(); for (int i = 0; i < rmesh.NumTriangles; ++i) { MeshTriangle tri = rmesh.get_Triangle(i); for (int k = 0; k < 3; ++k) { Point3D new_point = RevitPointToWindowsPoint(tri.get_Vertex(k)); bool new_point_exists = false; for (int l = 0; l < vertices.Count; ++l) { Point3D p = vertices[l]; if ((p.X == new_point.X) && (p.Y == new_point.Y) && (p.Z == new_point.Z)) { indices_front.Add(l); new_point_exists = true; break; } } if (new_point_exists) { continue; } indices_front.Add(vertices.Count); vertices.Add(new_point); } int a = indices_front[indices_front.Count - 3]; int b = indices_front[indices_front.Count - 2]; int c = indices_front[indices_front.Count - 1]; indices_back.Add(c); indices_back.Add(b); indices_back.Add(a); } List <Mesh3D> meshes = new List <Mesh3D>(); meshes.Add(new Mesh3D(vertices, indices_front)); meshes.Add(new Mesh3D(vertices, indices_back)); return(meshes.ToArray()); }
static Rhino.Geometry.Mesh ToRhino(this Autodesk.Revit.DB.Mesh mesh) { var result = new Rhino.Geometry.Mesh(); result.Vertices.AddVertices(mesh.Vertices.ToRhino()); for (int t = 0; t < mesh.NumTriangles; ++t) { var triangle = mesh.get_Triangle(t); var meshFace = new MeshFace ( (int)triangle.get_Index(0), (int)triangle.get_Index(1), (int)triangle.get_Index(2) ); result.Faces.AddFace(meshFace); } return(result); }