def draw_mesh(vertices, faces, color=None, vertex_normals=None, texture_coordinates=None): """Draw mesh in Grasshopper. """ mesh = Mesh() for a, b, c in vertices: mesh.Vertices.Add(a, b, c) for face in faces: if len(face) < 4: mesh.Faces.AddFace(face[0], face[1], face[2]) else: mesh.Faces.AddFace(face[0], face[1], face[2], face[3]) if vertex_normals: count = len(vertex_normals) normals = CreateInstance(Vector3f, count) for i, normal in enumerate(vertex_normals): normals[i] = Vector3f(normal[0], normal[1], normal[2]) mesh.Normals.SetNormals(normals) if texture_coordinates: count = len(texture_coordinates) tcs = CreateInstance(Point2f, count) for i, tc in enumerate(texture_coordinates): tcs[i] = Point2f(tc[0], tc[1]) mesh.TextureCoordinates.SetTextureCoordinates(tcs) if color: count = len(vertices) colors = CreateInstance(Color, count) for i in range(count): colors[i] = rs.coercecolor(color) mesh.VertexColors.SetColors(colors) return mesh
def draw_mesh(vertices, faces, color=None, vertex_normals=None, texture_coordinates=None): """Draw mesh in Grasshopper. Parameters ---------- vertices : list of point List of vertex locations. faces : list of list of int List of faces defined as lists of indices into the list of vertices. Other Parameters ---------------- color : tuple, list or :class:`System.Drawing.Color`, optional vertex_normals : bool, optional texture_coordinates Returns ------- list of :class:`Rhino.Geometry.Mesh` """ mesh = Mesh() for a, b, c in vertices: mesh.Vertices.Add(a, b, c) for face in faces: if len(face) < 4: mesh.Faces.AddFace(face[0], face[1], face[2]) else: mesh.Faces.AddFace(face[0], face[1], face[2], face[3]) if vertex_normals: count = len(vertex_normals) normals = CreateInstance(Vector3f, count) for i, normal in enumerate(vertex_normals): normals[i] = Vector3f(normal[0], normal[1], normal[2]) mesh.Normals.SetNormals(normals) if texture_coordinates: count = len(texture_coordinates) tcs = CreateInstance(Point2f, count) for i, tc in enumerate(texture_coordinates): tcs[i] = Point2f(tc[0], tc[1]) mesh.TextureCoordinates.SetTextureCoordinates(tcs) if color: count = len(vertices) colors = CreateInstance(Color, count) for i in range(count): colors[i] = rs.coercecolor(color) mesh.VertexColors.SetColors(colors) return mesh
def xdraw_mesh(vertices, faces, vertex_normals=None, texture_coordinates=None, vertex_colors=None): """Draw mesh. """ # TODO: This should move to compas/compas_grasshoper/utilities/drawing.py. # TODO: This function is mainly a copy of rhinoscriptsyntax.AddMesh, just without scriptcontext adding. mesh = Mesh() for a, b, c in vertices: mesh.Vertices.Add(a, b, c) for face in faces: if len(face) < 4: mesh.Faces.AddFace(face[0], face[1], face[2]) else: mesh.Faces.AddFace(face[0], face[1], face[2], face[3]) if vertex_normals: count = len(vertex_normals) normals = CreateInstance(Vector3f, count) for i, normal in enumerate(vertex_normals): normals[i] = Vector3f(normal[0], normal[1], normal[2]) mesh.Normals.SetNormals(normals) if texture_coordinates: count = len(texture_coordinates) tcs = CreateInstance(Point2f, count) for i, tc in enumerate(texture_coordinates): tcs[i] = Point2f(tc[0], tc[1]) mesh.TextureCoordinates.SetTextureCoordinates(tcs) if vertex_colors: for i, color in vertex_colors.iteritems(): color = rs.coercecolor(color) mesh.VertexColors.SetColor(i, color) return mesh
def draw_mesh(vertices, faces, color=None, vertex_normals=None, texture_coordinates=None): """Draw mesh in Grasshopper. Parameters ---------- vertices : list of point List of vertex locations. faces : list of list of int List of faces defined as lists of indices into the list of vertices. Other Parameters ---------------- color : tuple, list or :class:`System.Drawing.Color`, optional vertex_normals : bool, optional texture_coordinates Returns ------- list of :class:`Rhino.Geometry.Mesh` """ mesh = Mesh() for a, b, c in vertices: mesh.Vertices.Add(a, b, c) for face in faces: f = len(face) if f < 3: continue if f == 3: mesh.Faces.AddFace(*face) elif f == 4: mesh.Faces.AddFace(*face) else: if MeshNgon: centroid = centroid_points([vertices[index] for index in face]) c = mesh.Vertices.Add(*centroid) facets = [] for i, j in pairwise(face + face[:1]): facets.append(mesh.Faces.AddFace(i, j, c)) ngon = MeshNgon.Create(face, facets) mesh.Ngons.AddNgon(ngon) if vertex_normals: count = len(vertex_normals) normals = CreateInstance(Vector3f, count) for i, normal in enumerate(vertex_normals): normals[i] = Vector3f(normal[0], normal[1], normal[2]) mesh.Normals.SetNormals(normals) if texture_coordinates: count = len(texture_coordinates) tcs = CreateInstance(Point2f, count) for i, tc in enumerate(texture_coordinates): tcs[i] = Point2f(tc[0], tc[1]) mesh.TextureCoordinates.SetTextureCoordinates(tcs) if color: count = len(mesh.Vertices) colors = CreateInstance(Color, count) for i in range(count): colors[i] = rs.coercecolor(color) mesh.VertexColors.SetColors(colors) return mesh