def getBam(mesh, filename): scene_members = pandacore.getSceneMembers(mesh) rotateNode = GeomNode("rotater") rotatePath = NodePath(rotateNode) matrix = numpy.identity(4) if mesh.assetInfo.upaxis == collada.asset.UP_AXIS.X_UP: r = collada.scene.RotateTransform(0,1,0,90) matrix = r.matrix elif mesh.assetInfo.upaxis == collada.asset.UP_AXIS.Y_UP: r = collada.scene.RotateTransform(1,0,0,90) matrix = r.matrix rotatePath.setMat(Mat4(*matrix.T.flatten().tolist())) for geom, renderstate, mat4 in scene_members: node = GeomNode("primitive") node.addGeom(geom) if renderstate is not None: node.setGeomState(0, renderstate) geomPath = rotatePath.attachNewNode(node) geomPath.setMat(mat4) rotatePath.flattenStrong() wrappedNode = pandacore.centerAndScale(rotatePath) model_name = filename.replace('/', '_') wrappedNode.setName(model_name) bam_temp = tempfile.mktemp(suffix = model_name + '.bam') wrappedNode.writeBamFile(bam_temp) bam_f = open(bam_temp, 'rb') bam_data = bam_f.read() bam_f.close() os.remove(bam_temp) return bam_data
def getBam(mesh, filename): scene_members = pandacore.getSceneMembers(mesh) rotateNode = GeomNode("rotater") rotatePath = NodePath(rotateNode) matrix = numpy.identity(4) if mesh.assetInfo.upaxis == collada.asset.UP_AXIS.X_UP: r = collada.scene.RotateTransform(0,1,0,90) matrix = r.matrix elif mesh.assetInfo.upaxis == collada.asset.UP_AXIS.Y_UP: r = collada.scene.RotateTransform(1,0,0,90) matrix = r.matrix rotatePath.setMat(Mat4(*matrix.T.flatten().tolist())) for geom, renderstate, mat4 in scene_members: node = GeomNode("primitive") node.addGeom(geom) if renderstate is not None: node.setGeomState(0, renderstate) geomPath = rotatePath.attachNewNode(node) geomPath.setMat(mat4) rotatePath.flattenStrong() wrappedNode = pandacore.centerAndScale(rotatePath) model_name = filename.replace('/', '_') wrappedNode.setName(model_name) bam_temp = tempfile.mktemp(suffix = model_name + '.bam') wrappedNode.writeBamFile(bam_temp) bam_f = open(bam_temp, 'rb') bam_data = bam_f.read() bam_f.close() os.remove(bam_temp) return bam_data
def load_into_bamfile(meshdata, subfiles, model): """Uses pycollada and panda3d to load meshdata and subfiles and write out to a bam file on disk""" if os.path.isfile(model.bam_file): print 'returning cached bam file' return model.bam_file mesh = load_mesh(meshdata, subfiles) model_name = model.model_json['full_path'].replace('/', '_') if model.model_type == 'progressive' and model.model_subtype == 'full': progressive_stream = model.model_json['metadata']['types'][ 'progressive'].get('progressive_stream') if progressive_stream is not None: print 'LOADING PROGRESSIVE STREAM' data = model.prog_data try: mesh = add_back_pm.add_back_pm(mesh, StringIO(data), 100) print '-----' print 'SUCCESSFULLY ADDED BACK PM' print '-----' except: f = open(model.bam_file, 'w') f.close() raise print 'loading into bamfile', model_name, mesh scene_members = pandacore.getSceneMembers(mesh) print 'got scene members', model_name, mesh rotateNode = GeomNode("rotater") rotatePath = NodePath(rotateNode) matrix = numpy.identity(4) if mesh.assetInfo.upaxis == collada.asset.UP_AXIS.X_UP: r = collada.scene.RotateTransform(0, 1, 0, 90) matrix = r.matrix elif mesh.assetInfo.upaxis == collada.asset.UP_AXIS.Y_UP: r = collada.scene.RotateTransform(1, 0, 0, 90) matrix = r.matrix rotatePath.setMat(Mat4(*matrix.T.flatten().tolist())) for geom, renderstate, mat4 in scene_members: node = GeomNode("primitive") node.addGeom(geom) if renderstate is not None: node.setGeomState(0, renderstate) geomPath = rotatePath.attachNewNode(node) geomPath.setMat(mat4) print 'created np', model_name, mesh if model.model_type != 'optimized_unflattened' and model.model_type != 'progressive': print 'ABOUT TO FLATTEN' rotatePath.flattenStrong() print 'DONE FLATTENING' print 'flattened', model_name, mesh wrappedNode = pandacore.centerAndScale(rotatePath) wrappedNode.setName(model_name) wrappedNode.writeBamFile(model.bam_file) print 'saved', model_name, mesh wrappedNode = None return model.bam_file
def load_into_bamfile(meshdata, subfiles, model): """Uses pycollada and panda3d to load meshdata and subfiles and write out to a bam file on disk""" if os.path.isfile(model.bam_file): print 'returning cached bam file' return model.bam_file mesh = load_mesh(meshdata, subfiles) model_name = model.model_json['full_path'].replace('/', '_') if model.model_type == 'progressive' and model.model_subtype == 'full': progressive_stream = model.model_json['metadata']['types']['progressive'].get('progressive_stream') if progressive_stream is not None: print 'LOADING PROGRESSIVE STREAM' data = model.prog_data try: mesh = add_back_pm.add_back_pm(mesh, StringIO(data), 100) print '-----' print 'SUCCESSFULLY ADDED BACK PM' print '-----' except: f = open(model.bam_file, 'w') f.close() raise print 'loading into bamfile', model_name, mesh scene_members = pandacore.getSceneMembers(mesh) print 'got scene members', model_name, mesh rotateNode = GeomNode("rotater") rotatePath = NodePath(rotateNode) matrix = numpy.identity(4) if mesh.assetInfo.upaxis == collada.asset.UP_AXIS.X_UP: r = collada.scene.RotateTransform(0,1,0,90) matrix = r.matrix elif mesh.assetInfo.upaxis == collada.asset.UP_AXIS.Y_UP: r = collada.scene.RotateTransform(1,0,0,90) matrix = r.matrix rotatePath.setMat(Mat4(*matrix.T.flatten().tolist())) for geom, renderstate, mat4 in scene_members: node = GeomNode("primitive") node.addGeom(geom) if renderstate is not None: node.setGeomState(0, renderstate) geomPath = rotatePath.attachNewNode(node) geomPath.setMat(mat4) print 'created np', model_name, mesh if model.model_type != 'optimized_unflattened' and model.model_type != 'progressive': print 'ABOUT TO FLATTEN' rotatePath.flattenStrong() print 'DONE FLATTENING' print 'flattened', model_name, mesh wrappedNode = pandacore.centerAndScale(rotatePath) wrappedNode.setName(model_name) wrappedNode.writeBamFile(model.bam_file) print 'saved', model_name, mesh wrappedNode = None return model.bam_file