def mesh_readTGS(filename, resObjName): #@author Fanwei Kong based on tetgen.tcl #@c This function processes a tetgen style meshing #@c script file. #@a filename: script filename. #@a resObj: resulting repository MeshObject. #@note resObj is not deleted, even if the script file #@note specifies deleteModel and deleteMesh. if (int(Repository.Exists(resObjName)) != 0): raise ValueError("object" + resObjName + "already exists!") return solid = "/tmp/mesh_readTGS/solid" try: Repository.Delete(solid) except: pass global guiMMvars guiMMvars['meshGenerateVolumeMesh'] = 0 global guiPDvars global guiTGvars geom = Solid.pySolidModel() resObj = MeshObject.pyMeshObject() MeshObject.SetKernel(pc.gOptions['meshing_kernel']) resObj.NewObject(resObjName) resObj.SetSolidKernel(pc.gOptions['meshing_solid_kernel']) # lookup for type types = {} types[1] = 1 types[2] = 2 types['absolute'] = 1 types['relative'] = 2 types['abs'] = 1 types['rel'] = 2 sides = {} sides['negative'] = 0 sides['positive'] = 1 sides['both'] = 2 sides[0] = 0 sides[1] = 1 sides[2] = 2 fp = open(filename, 'r') for line in fp: # skip comment lines if (line[0:2] == "\#"): print("ignoring line: <$line>") continue # supported commands if (line.split()[0] == "logon"): MeshObject.Logon(line.split()[1]) elif (line.split()[0] == "logoff"): MeshObject.Logoff elif (line.split()[0] == "newMesh"): resObj.NewMesh() elif (line.split()[0] == "generateMesh"): resObj.GenerateMesh() elif (line.split()[0] == "loadModel"): resObj.LoadModel(line.split()[1]) try: Repository.Delete(solid) except: pass solidfn = line.split()[1] geom.ReadNative(solid, solidfn) #set smasherInputName $solid if (pc.gOptions['meshing_solid_kernel'] == "PolyData"): global gPolyDataFaceNames global gPolyDataFaceNamesInfo if (os.path.isfile(line.split()[1] + '.facenames')): with open(line.split()[1] + '.facenames') as f: exec(f.read()) #import hashlib #hashlib.md5(open(line.split()[1],'rb').read()).hexdigest() #if {$mymd5 != $gPolyDataFaceNamesInfo(model_file_md5)} { # return -code error "ERROR: polydata model ([lrange $line 1 end]) file doesn't match one used to generate facenames ([lindex $line 1].facenames)!" #} else: print("Getting Solid Boundaries...") gInputReturnVar = 50.0 gInputReturnVar = input( "Boundary Extraction" "Enter Boundary Extraction Angle (0-90 degrees):") guiPDvars['angleForBoundaries'] = gInputReturnVar geom.GetBoundaryFaces(gInputReturnVar) allids = geom.GetFaceIds() numfaces = len(allids) yesno = input( "The number of surfaces found was: %i. Is this the correct number of surfaces on your polydata? yes/no" % numfaces) if (yesno == "no"): raise ValueError( "Try again with a different boundary extraction angle or check the surface of the polydata for deteriorated elements." ) return for newid in allids: gPolyDataFaceNames[newid] = "noname_" + str(newid) elif (line.split()[0] == "setSolidModel"): solidPD = "/tmp/solid/pd" try: Repository.Delete(solidPD) except: pass #Set the polydatasolid in the mesh object to the current solid model geom.GetPolyData(solidPD) resObj.SetVtkPolyData(solidPD) elif (line.split()[0] == "localSize"): facename = line.split()[1] if (facename == ""): raise ValueError( "ERROR: Must select a face to add local mesh size on !") return faceids = geom.GetFaceIds() for ids in faceids: if (gPolyDataFaceNames[ids] == facename): regionid = ids resObj.SetMeshOptions("LocalEdgeSize", [float(line.split()[1])]) elif (line.split()[0] == "useCenterlineRadius"): if (int(guiTGvars['meshWallFirst']) != 1): raise ValueError( "ERROR: Must select wall faces for centerline extraction") return cappedsolid = "/tmp/solid/cappedpd" try: Repository.Delete(cappedsolid) except: pass cappedsolid = PolyDataVMTKGetCenterIds(resObj, "mesh") polys = PolyDataVMTKCenterlines(cappedsolid, resObj, "mesh") resObj.SetVtkPolyData(polys[0]) elif (line.split()[0] == "functionBasedMeshing"): resObj.SetSizeFunctionBasedMesh(float(line.split()[1]), float(line.split()[2])) elif (line.split()[0] == "sphereRefinement"): resObj.SetSphereRefinement(float(line.split()[1]), float(line.split()[2]), [float(i) for i in line.split()[3:]]) elif (line.split()[0] == "wallFaces"): guiTGvars['meshWallFirst'] = 1 resObj.SetMeshOptions("MeshWallFirst", [1]) walls = [] for i in range(1, len(line.split())): name = line.split()[i] name_id = return_face_id(geom, name) walls.append(name_id) resObj.SetWalls(walls) elif (line.split()[0] == "boundaryLayer"): if (guiTGvars['meshWallFirst'] != 1): raise ValueError( "ERROR: Must select wall faces for boundary layer") return resObj.SetBoundaryLayer(0, 0, 0, int(line.split()[1]), [float(i) for i in line.split()[2:]]) elif (line.split()[0] == "tolerance"): resObj.SetTolerance(float(line.split()[1])) elif (line.split()[0] == "quality"): resObj.SetQuality(line.split()[1]) elif (line.split()[0] == "writeMesh"): resObj.WriteMesh(line.split()[1], int(line.split()[-1])) elif (line.split()[0] == "option"): if (len(line.split()) == 3): if (line.split()[1] == "surface"): resObj.SetMeshOptions("SurfaceMeshFlag", [int(line.split()[2])]) elif (line.split()[1] == "volume"): resObj.SetMeshOptions("VolumeMeshFlag", [int(line.split()[2])]) guiMMvars['meshGenerateVolumeMesh'] = 1 elif (line.split()[1] == "gsize"): resObj.SetMeshOptions("GlobalEdgeSize", [float(line.split()[2])]) elif (line.split()[1] == "a"): resObj.SetMeshOptions("GlobalEdgeSize", [float(line.split()[2])]) else: #lappend mylist [lindex $line 2] resObj.SetMeshOptions(line.split()[1], [float(line.split()[2])]) else: for lineval in line.split(): resObj.SetMeshOptions(lineval, [1]) elif (line.split()[0] == "getBoundaries"): resObj.GetBoundaryFaces(guiPDvars['angleForBoundaries']) else: print("ignoring line: " + line) fp.close() try: Repository.Delete(solid) except: pass
def vis_volRepos(ren, objName): if Repository.Exists(objName) == 0: raise ValueError("ERROR: Object does not exist.") return if Repository.Type(objName) != "StructuredPts": raise TypeError("Incorrect object type.") return caster = [None] * 2 opacityTransferFunction = [None] * 2 colorTransferFunction = [None] * 2 gradientTransferFunction = [None] * 2 volumeProperty = [None] * 2 volumeMapper = [None] * 2 compositeFunction = [None] * 2 outline = [None] * 2 outlineMapper = [None] * 2 outlineProperty = [None] * 2 lod = [None] * 2 caster[0] = "vis_vol_caster_" + objName opacityTransferFunction[0] = "vis_vol_opacityTransferFunction_" + objName colorTransferFunction[0] = "vis_vol_colorTransferFunction_" + objName gradientTransferFunction[0] = "vis_vol_gradientTransferFunction_" + objName volumeProperty[0] = "vis_vol_volumeProperty_" + objName volumeMapper[0] = "vis_vol_volumeMapper_" + objName compositeFunction[0] = "vis_vol_compositeFunction_" + objName outline[0] = "vis_vol_outline_" + objName outlineMapper[0] = "vis_vol_outlineMapper_" + objName outlineProperty[0] = "vis_vol_outlineProperty_" + objName lod[0] = "vis_vol_lod_" + objName caster[1] = vtk.vtkImageCast() caster[1].SetOutputScalarTypeToUnsignedShort() caster[1].SetInputDataObject(Repository.ExportToVtk(objName)) caster[1].Update() # Create transfer functions for opacity and color opacityTransferFunction[1] = vtk.vtkPiecewiseFunction() opacityTransferFunction[1].AddPoint(0, 0.) opacityTransferFunction[1].AddPoint(80, 0.) opacityTransferFunction[1].AddPoint(128, 0.5) opacityTransferFunction[1].AddPoint(150, 0.9) opacityTransferFunction[1].AddPoint(350, 1.0) colorTransferFunction[1] = vtk.vtkColorTransferFunction() colorTransferFunction[1].AddRGBPoint(0, 0, 0, 0) colorTransferFunction[1].AddRGBPoint(350, 1, 1, 1) gradientTransferFunction[1] = vtk.vtkPiecewiseFunction() gradientTransferFunction[1].AddPoint(0, 1.0) gradientTransferFunction[1].AddPoint(1, 1.0) gradientTransferFunction[1].AddPoint(255, 1.0) gradientTransferFunction[1].AddPoint(512, 1.0) # Create properties, mappers, volume actors, and ray cast function volumeProperty[1] = vtk.vtkVolumeProperty() volumeProperty[1].SetColor(colorTransferFunction[1]) volumeProperty[1].SetScalarOpacity(opacityTransferFunction[1]) volumeProperty[1].SetGradientOpacity(gradientTransferFunction[1]) volumeProperty[1].SetInterpolationTypeToLinear() volumeMapper[1] = vtk.vtkSmartVolumeMapper() volumeMapper[1].SetInputDataObject(caster[1].GetOutput()) lod[1] = vtk.vtkVolume() lod[1].SetProperty(volumeProperty[1]) lod[1].SetMapper(volumeMapper[1]) ren[1].AddViewProp(lod[1]) setattr(vis, caster[0], caster) setattr(vis, opacityTransferFunction[0], opacityTransferFunction) setattr(vis, colorTransferFunction[0], colorTransferFunction) setattr(vis, gradientTransferFunction[0], gradientTransferFunction) setattr(vis, volumeProperty[0], volumeProperty) setattr(vis, volumeMapper[0], volumeMapper) setattr(vis, compositeFunction[0], compositeFunction) setattr(vis, outline[0], outline) setattr(vis, outlineMapper[0], outlineMapper) setattr(vis, outlineProperty[0], outlineProperty) setattr(vis, lod[0], lod) vis.renfun.render(ren) return lod