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
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
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
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
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