Example #1
0
    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
Example #2
0
    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
Example #3
0
    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)
Example #4
0
    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]
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)