def createPolyDataFromFiles(geom): filename = Geometry.resolvePackageFilename(geom.string_data) basename, ext = os.path.splitext(filename) if filename in Geometry.MeshCache: return Geometry.MeshCache[filename] preferredExtensions = ['.vtm', '.vtp', '.obj'] for x in preferredExtensions: if os.path.isfile(basename + x): filename = basename + x break if not os.path.isfile(filename): print 'warning, cannot find file:', filename return [] visInfo = None if filename.endswith('vtm'): polyDataList = ioUtils.readMultiBlock(filename) else: if filename.endswith('obj'): polyDataList, actors = ioUtils.readObjMtl(filename) if actors: visInfo = Geometry.makeVisInfoFromActors(actors) else: polyDataList = [ioUtils.readPolyData(filename)] for polyData in polyDataList: Geometry.loadTextureForMesh(polyData, filename) result = (polyDataList, visInfo) Geometry.MeshCache[filename] = result return result
def createPolyDataFromFiles(geom): filename = Geometry.resolvePackageFilename(geom.string_data) basename, ext = os.path.splitext(filename) if filename in Geometry.MeshCache: return Geometry.MeshCache[filename] preferredExtensions = ['.vtm', '.vtp', '.obj'] for x in preferredExtensions: if os.path.isfile(basename + x): filename = basename + x break if not os.path.isfile(filename): print 'warning, cannot find file:', filename return [] visInfo = None if filename.endswith('vtm'): polyDataList = ioUtils.readMultiBlock(filename) else: if filename.endswith('obj'): polyDataList, actors = ioUtils.readObjMtl(geom.string_data) if actors: visInfo = Geometry.makeVisInfoFromActors(actors) else: polyDataList = [ioUtils.readPolyData(filename)] for polyData in polyDataList: Geometry.loadTextureForMesh(polyData, filename) result = (polyDataList, visInfo) Geometry.MeshCache[filename] = result return result
def loadObjFile(filename, scaleFactor=0.001): baseName = os.path.basename(filename) folder = om.getOrCreateContainer(baseName) meshes, actors = ioUtils.readObjMtl(filename) print 'loaded %d meshes from file: %s' % (len(meshes), filename) for i, mesh, actor in zip(xrange(len(meshes)), meshes, actors): mesh = filterUtils.cleanPolyData(mesh) mesh = filterUtils.computeNormals(mesh) obj = vis.showPolyData(mesh, baseName + ' piece %d'%i, parent=folder) obj.setProperty('Color', actor.GetProperty().GetColor()) obj.actor.SetTexture(actor.GetTexture()) pts = vnp.getNumpyFromVtk(obj.polyData, 'Points') pts *= scaleFactor print ' mesh %d, num points %d' % (i, obj.polyData.GetNumberOfPoints()) #if actor.GetTexture(): # showImage(actor.GetTexture().GetInput()) polyData = filterUtils.appendPolyData([obj.polyData for obj in folder.children()]) vis.showPolyData(polyData, baseName + ' merged', parent=folder, visible=False) print ' total points:', polyData.GetNumberOfPoints() # compute centroid and subtract from points to move the mesh to the origin origin = np.array(filterUtils.computeCentroid(polyData)) t = transformUtils.frameFromPositionAndRPY(-origin, [0.0, 0.0, 0.0]) for obj in folder.children(): obj.setPolyData(filterUtils.transformPolyData(obj.polyData, t)) return folder.children()[-1].polyData