def get_rgmesh(self, face_count=18): """Generate mesh representation of bullet with custom resolution. Parameters ---------- face_count : :class:`int`, optional Desired number of faces, by default 18 Used as a guide for the resolution of the mesh cylinder Returns ------- :class:`Rhino.Geometry.Mesh` """ mesh = self.get_cgmesh(face_count=face_count) # to Rhino.Geometry and clean it up rgmesh = MeshArtist(mesh).draw_mesh() rgmesh.UnifyNormals() rgmesh.Normals.ComputeNormals() return rgmesh
def get_rgmesh(self, face_count=18): """Generate mesh representation of bullet with custom resolution. Parameters ---------- face_count : :class:`int`, optional Desired number of faces, by default 18 Used as a guide for the resolution of the mesh cylinder Returns ------- :class:`Rhino.Geometry.Mesh` """ import Rhino.Geometry as rg if face_count < 6: sides = 3 elif face_count < 15: sides = 4 else: sides = face_count // 3 circle = self.get_rgcircle() polygons = [] polygons.append(rg.Polyline.CreateInscribedPolygon(circle, sides)) T = rg.Transform.Translation(circle.Normal * -self.get_compressed_height()) second_polygon = polygons[0].Duplicate() second_polygon.Transform(T) polygons.append(second_polygon) mesh = cg_Mesh() outer_verts_polygons = [] # generate verts at polygon corners for polygon in polygons: _temp_list = [] polygon_corners = list(polygon.Item) polygon_corners.pop() # remove end pt since == start pt for pt in polygon_corners: _temp_list.append(mesh.add_vertex(x=pt.X, y=pt.Y, z=pt.Z)) outer_verts_polygons.append(_temp_list) polygon_faces = [] for vkeys in outer_verts_polygons: polygon_faces.append(mesh.add_face(vkeys)) # if >4 sides polygon, create faces by tri subd if sides > 4: centroid_verts = [] for fkey in polygon_faces: x, y, z = mesh.face_centroid(fkey) centroid_verts.append(mesh.add_vertex(x=x, y=y, z=z)) mesh.delete_face(fkey) # create new faces for vkeys, ckey in zip(outer_verts_polygons, centroid_verts): for i, vkey in enumerate(vkeys): next_vkey = wrap_list(vkeys, i + 1) mesh.add_face([ckey, vkey, next_vkey]) # generate faces between polygons vertex_for_vertex = zip(*outer_verts_polygons) for i, mirror_corners_1 in enumerate(vertex_for_vertex): mirror_corners_2 = wrap_list(vertex_for_vertex, i + 1) mesh.add_face(mirror_corners_1 + mirror_corners_2[::-1]) # to Rhino.Geometry and clean it up rgmesh = MeshArtist(mesh).draw_mesh() rgmesh.UnifyNormals() rgmesh.Normals.ComputeNormals() return rgmesh