def _add_drone_velocity(self, init_velocity_vector, radius=0.008, color=[255, 0, 0]): """ Add the drone velocity vector as a cylinder into drone drawer batch. """ translation = np.eye(4) translation[:3, 3] = [0, 0, 0.5] height = np.linalg.norm(init_velocity_vector) transform_z_axis = init_velocity_vector / height transform = np.eye(4) transform[:3, 2] = transform_z_axis transform = np.dot(translation, transform) velocity_axis = trimesh.creation.cylinder(radius=radius, height=height, transform=transform) velocity_axis.visual.face_colors = color axis_origin = trimesh.creation.uv_sphere(radius=radius * 5, count=[10, 10]) axis_origin.visual.face_colors = color merge = trimesh.util.concatenate([axis_origin, velocity_axis]) args = rendering.convert_to_vertexlist(merge) drawer = self.drone_batch.add_indexed(*args) return drawer
def add_geometry(self, name, geometry, **kwargs): """ Add a geometry to the viewer. Parameters -------------- name : hashable Name that references geometry geometry : Trimesh, Path2D, Path3D, PointCloud Geometry to display in the viewer window kwargs ** Passed to rendering.convert_to_vertexlist """ # convert geometry to constructor args args = rendering.convert_to_vertexlist(geometry, **kwargs) # create the indexed vertex list self.vertex_list[name] = self.batch.add_indexed(*args) # save the MD5 of the geometry self.vertex_list_hash[name] = geometry_hash(geometry) # save the rendering mode from the constructor args self.vertex_list_mode[name] = args[1] # if a geometry has a texture defined convert it to opengl form and # save if hasattr(geometry, 'visual') and hasattr(geometry.visual, 'material'): tex = rendering.material_to_texture(geometry.visual.material) if tex is not None: self.textures[name] = tex
def test_args(self): # not imported to trimesh by __init__ # so we don't have a pyglet import attempt # unless we explicitly ask for it (like during # a viewer show() call) from trimesh import rendering m = g.get_mesh('featuretype.STL') args = rendering.mesh_to_vertexlist(m) args_auto = rendering.convert_to_vertexlist(m) assert len(args) == 7 assert len(args_auto) == len(args) # try turning smoothing off and on args_sm = rendering.mesh_to_vertexlist( m, smooth_threshold=0) args_ns = rendering.mesh_to_vertexlist( m, smooth_threshold=g.np.inf) # vertex count should be different # if smooth kwargs got passed through successfully assert args_sm[0] != args_ns[0] P30 = m.section(plane_normal=[0, 0, 1], plane_origin=m.centroid) args = rendering.path_to_vertexlist(P30) args_auto = rendering.convert_to_vertexlist(P30) assert len(args) == 6 assert len(args_auto) == len(args) P20, T = P30.to_planar() args = rendering.path_to_vertexlist(P20) args_auto = rendering.convert_to_vertexlist(P20) assert len(args) == 6 assert len(args_auto) == len(args) P21 = g.get_mesh('2D/wrench.dxf') args = rendering.path_to_vertexlist(P21) args_auto = rendering.convert_to_vertexlist(P21) assert len(args) == 6 assert len(args_auto) == len(args) P22 = g.np.random.random((100, 2)) args = rendering.points_to_vertexlist(P22) args_auto = rendering.convert_to_vertexlist(P22) assert len(args) == 6 assert len(args_auto) == len(args) P31 = g.np.random.random((100, 3)) args = rendering.points_to_vertexlist(P31) args_auto = rendering.convert_to_vertexlist(P31) assert len(args) == 6 assert len(args_auto) == len(args) P32 = g.trimesh.points.PointCloud(P31) args = rendering.convert_to_vertexlist(P32) assert len(args) == 6 assert len(args_auto) == len(args)
def _update_vertex_list(self): for name, geom in self._scene.geometry.items(): if geom.is_empty: continue if self.geometry_hash(geom) == self._vertex_list_hash.get(name): continue args = convert_to_vertexlist(geom, smooth=bool(self._smooth)) self._vertex_list[name] = self._batch.add_indexed(*args) self._vertex_list_hash[name] = self.geometry_hash(geom) self._vertex_list_mode[name] = args[1]
def test_args(self): # not imported to trimesh by __init__ # so we don't have a pyglet import attempt # unless we explicitly ask for it (like during # a viewer show() call) from trimesh import rendering files = ['featuretype.STL', 'fuze.obj', 'points_bin.ply'] for file_name in files: m = g.get_mesh(file_name) args = rendering.convert_to_vertexlist(m) if isinstance(m, g.trimesh.Trimesh): # try turning smoothing off and on rendering.mesh_to_vertexlist(m, smooth_threshold=0) rendering.mesh_to_vertexlist(m, smooth_threshold=g.np.inf) P30 = m.section(plane_normal=[0, 0, 1], plane_origin=m.centroid) args = rendering.path_to_vertexlist(P30) args_auto = rendering.convert_to_vertexlist(P30) assert len(args) == 6 assert len(args_auto) == len(args) P20, T = P30.to_planar() args = rendering.path_to_vertexlist(P20) args_auto = rendering.convert_to_vertexlist(P20) assert len(args) == 6 assert len(args_auto) == len(args) P21 = g.get_mesh('2D/wrench.dxf') args = rendering.path_to_vertexlist(P21) args_auto = rendering.convert_to_vertexlist(P21) assert len(args) == 6 assert len(args_auto) == len(args) P22 = g.np.random.random((100, 2)) args = rendering.points_to_vertexlist(P22) args_auto = rendering.convert_to_vertexlist(P22) assert len(args) == 6 assert len(args_auto) == len(args) P31 = g.np.random.random((100, 3)) args = rendering.points_to_vertexlist(P31) args_auto = rendering.convert_to_vertexlist(P31) assert len(args) == 6 assert len(args_auto) == len(args) P32 = g.trimesh.points.PointCloud(P31) args = rendering.convert_to_vertexlist(P32) assert len(args) == 6 assert len(args_auto) == len(args)
def _add_drone(self): """ Add the drone 3D model in its own model space. """ for name, geom in self.drone_scene.geometry.items(): if geom.is_empty: continue if geometry_hash(geom) == self.drone_vertex_list_hash: continue if name == self.drone_name: args = rendering.convert_to_vertexlist(geom, smooth=True) self.drone_drawer = self.drone_batch.add_indexed(*args) self.drone_vertex_list_hash = geometry_hash(geom) self.drone_vertex_list_mode = args[1] try: assert len(geom.visual.uv) == len(geom.vertices) has_texture = True except BaseException: has_texture = False if has_texture: self.drone_texture = rendering.material_to_texture( geom.visual.material)
def test_args(self): # not imported to trimesh by __init__ # so we don't have a pyglet import attempt # unless we explicitly ask for it (like during # a viewer show() call) from trimesh import rendering try: import pyglet assert not pyglet.options['shadow_window'] except ImportError: pass m = g.get_mesh('featuretype.STL') args = rendering.mesh_to_vertexlist(m) args_auto = rendering.convert_to_vertexlist(m) assert len(args) == 7 assert len(args_auto) == len(args) # try turning smoothing off and on args_sm = rendering.mesh_to_vertexlist( m, smooth_threshold=0) args_ns = rendering.mesh_to_vertexlist( m, smooth_threshold=g.np.inf) # vertex count should be different # if smooth kwargs got passed through successfully assert args_sm[0] != args_ns[0] P30 = m.section(plane_normal=[0, 0, 1], plane_origin=m.centroid) args = rendering.path_to_vertexlist(P30) args_auto = rendering.convert_to_vertexlist(P30) assert len(args) == 6 assert len(args_auto) == len(args) P20, T = P30.to_planar() args = rendering.path_to_vertexlist(P20) args_auto = rendering.convert_to_vertexlist(P20) assert len(args) == 6 assert len(args_auto) == len(args) P21 = g.get_mesh('2D/wrench.dxf') args = rendering.path_to_vertexlist(P21) args_auto = rendering.convert_to_vertexlist(P21) assert len(args) == 6 assert len(args_auto) == len(args) P22 = g.np.random.random((100, 2)) args = rendering.points_to_vertexlist(P22) args_auto = rendering.convert_to_vertexlist(P22) assert len(args) == 6 assert len(args_auto) == len(args) P31 = g.np.random.random((100, 3)) args = rendering.points_to_vertexlist(P31) args_auto = rendering.convert_to_vertexlist(P31) assert len(args) == 6 assert len(args_auto) == len(args) P32 = g.trimesh.points.PointCloud(P31) args = rendering.convert_to_vertexlist(P32) assert len(args) == 6 assert len(args_auto) == len(args)