#!/usr/bin/env python #-*- coding: UTF-8 -*- """ This module demonstrates the functionality of PyAssimp. """ import os, sys import logging logging.basicConfig(level=logging.INFO) import pyassimp import pyassimp.postprocess def recur_node(node,level = 0): print(" " + "\t" * level + "- " + str(node)) for child in node.children: recur_node(child, level + 1) def main(filename=None): scene = pyassimp.load(filename, pyassimp.postprocess.aiProcess_Triangulate) #the model we load print("MODEL:" + filename) print #write some statistics print("SCENE:") print(" meshes:" + str(len(scene.meshes))) print(" materials:" + str(len(scene.materials))) print(" textures:" + str(len(scene.textures))) print print("NODES:") recur_node(scene.rootnode) print print("MESHES:") for index, mesh in enumerate(scene.meshes): print(" MESH" + str(index+1)) print(" material id:" + str(mesh.materialindex+1)) print(" vertices:" + str(len(mesh.vertices))) print(" first 3 verts:\n" + str(mesh.vertices[:3])) if mesh.normals: print(" first 3 normals:\n" + str(mesh.normals[:3])) else: print(" no normals") print(" colors:" + str(len(mesh.colors))) tcs = mesh.texturecoords if tcs.any(): for index, tc in enumerate(tcs): print(" texture-coords "+ str(index) + ":" + str(len(tcs[index])) + "first3:" + str(tcs[index][:3])) else: print(" no texture coordinates") print(" uv-component-count:" + str(len(mesh.numuvcomponents))) print(" faces:" + str(len(mesh.faces)) + " -> first:\n" + str(mesh.faces[:3])) print(" bones:" + str(len(mesh.bones)) + " -> first:" + str([str(b) for b in mesh.bones[:3]])) print print("MATERIALS:") for index, material in enumerate(scene.materials): print(" MATERIAL (id:" + str(index+1) + ")") for key, value in material.properties.items(): print(" %s: %s" % (key, value)) print print("TEXTURES:") for index, texture in enumerate(scene.textures): print(" TEXTURE" + str(index+1)) print(" width:" + str(texture.width)) print(" height:" + str(texture.height)) print(" hint:" + str(texture.achformathint)) print(" data (size):" + str(len(texture.data))) # Finally release the model pyassimp.release(scene) def usage(): print("Usage: sample.py <3d model>") if __name__ == "__main__": if len(sys.argv) != 2: usage() else: main(sys.argv[1])