Example #1
0
    def compile(clazz, max_path, hv_dir, search_paths=None, verbose=False):
        tick = time.time()

        max_graph = MaxParser.graph_from_file(max_path)

        if not os.path.exists(hv_dir):
            os.makedirs(hv_dir)

        hv_file = os.path.basename(max_path).split(".")[0] + ".hv.json"
        hv_path = os.path.join(hv_dir, hv_file)
        with open(hv_path, "w") as f:
            if verbose:
                f.write(
                    json.dumps(max_graph.to_hv(),
                               sort_keys=True,
                               indent=2,
                               separators=(",", ": ")))
            else:
                f.write(json.dumps(max_graph.to_hv()))

        return {
            "stage": "max2hv",
            "notifs": {
                "has_error": False,
                "exception": None,
                "errors": []
            },
            "in_dir": os.path.dirname(max_path),
            "in_file": os.path.basename(max_path),
            "out_dir": hv_dir,
            "out_file": hv_file,
            "compile_time": (time.time() - tick)
        }
Example #2
0
 def __init__(self, modelMng, matMng, texMng):
     self.parser = MaxParser()
     self.modelMng = modelMng
     self.materialMng = matMng
     self.textureMng = texMng
Example #3
0
class ModelLoader:

    def __init__(self, modelMng, matMng, texMng):
        self.parser = MaxParser()
        self.modelMng = modelMng
        self.materialMng = matMng
        self.textureMng = texMng

    def loadModel(self, filename):
        if not self.parser.parseFile(filename):
            return False
        self.modelName = filename
        self.saveMaterials()
        self.saveModel()
        return True

    def saveModel(self):
        self.model = Model([], [1, 0, 0, 0] +
                               [0, 1, 0, 0] +
                               [0, 0, 1, 0] +
                               [0, 0, 0, 1], self.modelName)
        for m in self.parser.object.meshes:
            if m.type != 1:
                continue
            mesh = Mesh([], None, None, 16*[0])
            
            # get system coordinates
            for i in range(0, 3):
                for j in range(0, 4):
                    mesh.matrix4[i*3+j] = m.data.matrix[i+j*3]
            # get vertices & texCoordinates
            for i in range(0, m.data.nrOfVertices):
                mesh.vertices += m.data.vertices[i]
                if m.data.coordinates:
                    if not mesh.texels:
                        mesh.texels = []
                    mesh.texels += m.data.coordinates[i]
            # get faces
            if m.data.faces:
                mesh.triangles = []
                for group in m.data.faces.materialGroups:
                    triangles = Mesh.Triangles([], self.materialMng.get(group.materialName))
                    for i in group.faces:
                        triangles.faces += m.data.faces.faces[i]
                    mesh.triangles.append(triangles)
            self.model.meshes.append(mesh)
        self.modelMng.add(self.model)

    def saveMaterials(self):
        for m in self.parser.object.materials:
            self.saveTextures(m)
            material = Material(m.name)
            if m.textureMap1:
                material.texture = self.textureMng.get(m.textureMap1.name)
            self.materialMng.add(material)

    def saveTextures(self, material):
        for tex in material.textures:
            texture = Texture(tex.name)
            self.textureMng.add(texture)
        
    def getModel(self):
        return self.model
Example #4
0
class ModelLoader:
    def __init__(self, modelMng, matMng, texMng):
        self.parser = MaxParser()
        self.modelMng = modelMng
        self.materialMng = matMng
        self.textureMng = texMng
        self.currentDir = "./"

    def loadModel(self, filename):
        if not self.parser.parseFile(filename):
            return False
        index = filename.rfind("/")
        if index > -1:
            self.currentDir = filename[0 : index + 1]
        self.modelName = filename
        self.saveMaterials()
        self.saveModel()
        return True

    def saveModel(self):
        self.model = Model([], self.modelName)
        for m in self.parser.object.meshes:
            if m.type != 1:
                continue
            geom = Mesh.Geometry([], [], [])
            # get vertices & texCoordinates
            triangles = []
            geom.vertices = m.data.vertices
            if m.data.coordinates:
                geom.texCoords = m.data.coordinates

            # get faces
            if m.data.faces:
                geom.faces = m.data.faces.faces
                for group in m.data.faces.materialGroups:
                    faces = []
                    for i in group.faces:
                        faces.extend(m.data.faces.faces[i])
                    triangles.append(Mesh.Triangles(faces, self.materialMng.get(group.materialName)))
            # get mesh coordinates
            mat = m.data.matrix
            rot = 9 * [0]
            for i in range(3):
                for j in range(3):
                    rot[3 * i + j] = mat[3 * j + i]

            mesh = Mesh(geom, triangles, Coordinate(rot, mat[9:]))
            mesh.name = m.name
            mesh.init()
            self.model.meshes.append(mesh)
        self.modelMng.add(self.model)

    def saveMaterials(self):
        for m in self.parser.object.materials:
            self.saveTextures(m)
            material = Material(m.name)
            material.ambient = m.ambientColor + [0]
            material.diffuse = m.diffuseColor + [0]
            material.specular = m.specularColor + [0]
            if m.textureMap1:
                material.texture = self.textureMng.get(m.textureMap1.name)
            if m.bumpMap:
                material.bump = self.textureMng.get(m.bumpMap.name)
            material.init()
            self.materialMng.add(material)

    def saveTextures(self, material):
        _dir = self.currentDir
        for tex in material.textures:
            image = self.textureMng.loadImage(tex.name, _dir + tex.name)
            texture = self.textureMng.loadTexture(tex.name, Texture.TEXTURE_2D)

    def getModel(self):
        return self.model