Esempio n. 1
0
 def test_create(self):
     v = Vector2(1, 2)
     try:
         v = Vector2(1, 2, 3)
         assert False, "This should not be normally reached"
     except:
         pass  # test is passed normally
Esempio n. 2
0
    def test_attrbutes(self):
        v = Vector2(0, 0)
        v.x = 4
        self.assertEqual(v[0], v.x)
        self.assertEqual(v[0], 4)

        v.y = 7
        self.assertEqual(v[1], v.y)
        self.assertEqual(v[1], 7)

        try:
            t = v.z
            assert False, "executing of this string is error"
        except AttributeError:
            pass
Esempio n. 3
0
    def convert_to_mesh(
        self,
        vertex_format=None
    ):  # Ripped from kivy3/loaders/objloader.py and edited by GJ
        """Converts data gotten from the ._obj definition
        file and create Kivy3 Mesh object which may be used
        for drawing object in the scene
        """

        geometry = Geometry()
        material = Material()
        mtl_dirname = abspath(
            dirname(self.loader.mtl_source
                    ))  # We don't need this as we arnt loading any images
        # but just in case we keep it

        v_idx = 0
        # create geometry for mesh
        for f in self.faces:
            verts = f[0]
            norms = f[1]
            tcs = f[2]
            face3 = Face3(0, 0, 0)
            for i, e in enumerate(['a', 'b', 'c']):
                # get normal components
                n = (0.0, 0.0, 0.0)
                if norms[i] != -1:
                    n = self.loader.normals[norms[i] - 1]
                face3.vertex_normals.append(n)

                # get vertex components
                v = self.loader.vertices[verts[i] - 1]
                geometry.vertices.append(v)
                setattr(face3, e, v_idx)
                v_idx += 1

                # get texture coordinate components
                t = (0.0, 0.0)
                if tcs[i] != -1:
                    t = self.loader.texcoords[tcs[i] - 1]
                tc = Vector2(t[0], 1. - t[1])
                geometry.face_vertex_uvs[0].append(tc)

            geometry.faces.append(face3)

        # apply material for object
        if self.mtl_name in self.loader.mtl_contents:
            raw_material = self.loader.mtl_contents[self.mtl_name]
            # shader ignores values
            zeros = [
                '0', '0.0', '0.00', '0.000', '0.0000', '0.00000', '0.000000'
            ]
            for k, v in raw_material.items():
                _k = self._mtl_map.get(k, None)
                if k in [
                        "map_Kd",
                ]:
                    self.log_warning(
                        "the tag map_kd should not be used as a material, use map_id and give the texture"
                        " type (ini section and option)")
                    map_path = join(mtl_dirname, v[0])
                    if not exists(map_path):
                        msg = u'Texture not found <{}>'
                        self.log_warning(msg.format(map_path))
                        continue
                    tex = Image(map_path).texture
                    material.map = tex
                    continue
                if k in [
                        "map_id",
                ]:

                    tex = self.textures.get("Materials", str(v[0]))
                    material.map = tex

                if _k:
                    if len(v) == 1:
                        v[0] = '0.000001' if v[0] in zeros else v[0]
                        v = float(v[0])
                        if k == 'Tr':
                            v = 1. - v
                        setattr(material, _k, v)
                    else:
                        v = list(map(lambda x: float(x), v))
                        setattr(material, _k, v)

        if not material.map:
            self.log_warning(
                "No material given or used wrong name -", self.mtl_name,
                "(if nothing here then you "
                "provided no mtl file)")
            material.map = Image(objLoader_folder + '/empty.png').texture
            material.texture_ratio = 0.0
        mesh = Mesh(geometry, material)
        return mesh
Esempio n. 4
0
    def convert_to_mesh(self, vertex_format=None):
        """Converts data gotten from the .obj definition
        file and create Kivy3 Mesh object which may be used
        for drawing object in the scene
        """

        geometry = Geometry()
        material = Material()
        mtl_dirname = os.path.abspath(os.path.dirname(self.loader.mtl_source))

        v_idx = 0
        # create geometry for mesh
        for f in self.faces:
            verts = f[0]
            norms = f[1]
            tcs = f[2]
            face3 = Face3(0, 0, 0)
            for i, e in enumerate(['a', 'b', 'c']):
                #get normal components
                n = (0.0, 0.0, 0.0)
                if norms[i] != -1:
                    n = self.loader.normals[norms[i] - 1]
                face3.vertex_normals.append(n)

                #get vertex components
                v = self.loader.vertices[verts[i] - 1]
                geometry.vertices.append(v)
                setattr(face3, e, v_idx)
                v_idx += 1

                #get texture coordinate components
                t = (0.0, 0.0)
                if tcs[i] != -1:
                    t = self.loader.texcoords[tcs[i] - 1]
                tc = Vector2(t[0], 1. - t[1])
                geometry.face_vertex_uvs[0].append(tc)

            geometry.faces.append(face3)

        # apply material for object
        if self.mtl_name in self.loader.mtl_contents:
            raw_material = self.loader.mtl_contents[self.mtl_name]
            for k, v in raw_material.iteritems():
                _k = self._mtl_map.get(k, None)
                if k in [
                        "map_Kd",
                ]:
                    map_path = os.path.join(mtl_dirname, v[0])
                    tex = Image(map_path).texture
                    material.map = tex
                    continue
                if _k:
                    if len(v) == 1:
                        v = float(v[0])
                        if k == 'Tr':
                            v = 1. - v
                        setattr(material, _k, v)
                    else:
                        v = map(lambda x: float(x), v)
                        setattr(material, _k, v)
        mesh = Mesh(geometry, material)
        return mesh
Esempio n. 5
0
    def convert_to_mesh(self, vertex_format=None):
        """Converts data gotten from the .obj definition
        file and create Kivy3 Mesh object which may be used
        for drawing object in the scene
        """

        geometry = Geometry()
        material = Material()
        mtl_dirname = abspath(dirname(self.loader.mtl_source))

        v_idx = 0
        # create geometry for mesh
        for f in self.faces:
            verts = f[0]
            norms = f[1]
            tcs = f[2]
            face3 = Face3(0, 0, 0)
            for i, e in enumerate(['a', 'b', 'c']):
                # get normal components
                n = (0.0, 0.0, 0.0)
                if norms[i] != -1:
                    n = self.loader.normals[norms[i] - 1]
                face3.vertex_normals.append(n)

                # get vertex components
                v = self.loader.vertices[verts[i] - 1]
                geometry.vertices.append(v)
                setattr(face3, e, v_idx)
                v_idx += 1

                # get texture coordinate components
                t = (0.0, 0.0)
                if tcs[i] != -1:
                    t = self.loader.texcoords[tcs[i] - 1]
                tc = Vector2(t[0], 1. - t[1])
                geometry.face_vertex_uvs[0].append(tc)

            geometry.faces.append(face3)

        # apply material for object
        if self.mtl_name in self.loader.mtl_contents:
            raw_material = self.loader.mtl_contents[self.mtl_name]
            # shader ignores values
            zeros = ['0', '0.0', '0.00', '0.000', '0.0000',
                     '0.00000', '0.000000']
            for k, v in raw_material.items():
                _k = self._mtl_map.get(k, None)
                # TODO: also handle map_Ka and map_Ks
                if k in ["map_Kd", ]:
                    # TODO: map file path may contains spaces.
                    #      current implementation fails.
                    map_path = join(mtl_dirname, v[0])
                    if not exists(map_path):
                        msg = u'WaveObject: Texture not found <{}>'
                        Logger.warning(msg.format(map_path))
                        continue
                    tex = Image(map_path).texture
                    material.map = tex
                    continue
                if _k:
                    if len(v) == 1:
                        v[0] = '0.000001' if v[0] in zeros else v[0]
                        v = float(v[0])
                        if k == 'Tr':
                            v = 1. - v
                        setattr(material, _k, v)
                    else:
                        v = list(map(lambda x: float(x), v))
                        setattr(material, _k, v)

        if not material.map:
            material.map = Image(folder + '/empty.png').texture
            material.texture_ratio = 0.0
        mesh = Mesh(geometry, material)
        return mesh