def create_ellipsoidal_LV(casename="ellipsoidal", meshsize=0.5, gmshcmd="gmsh", iswritemesh=True, verbose=True): print "starting script" if verbose: print '*** create_ellipsoidal_LV ***' cur_dir = os.path.dirname( os.path.abspath(inspect.getfile(inspect.currentframe()))) print "cur_dir" + cur_dir geofile = cur_dir + "/ellipsoidal.geo" tempgeofile = "ellipsoidal_temp.geo" print tempgeofile print os.getcwd() meshfilename = casename + ".vtk" cmd = "cp " + geofile + " " + tempgeofile os.system(cmd) cmd = "sed -i.bak s/'<<Meshsize>>'/'" + str( meshsize) + "'/g " + tempgeofile os.system(cmd) cmd = gmshcmd + " -3 ellipsoidal_temp.geo -o " + meshfilename os.system(cmd) cmd = "rm ellipsoidal_temp.geo" os.system(cmd) ugrid = vtk_py.readUGrid(meshfilename) return ugrid
def create_BiVmesh(epicutfilename, LVendocutfilename, RVendocutfilename, casename="BiV", meshsize=0.5, gmshcmd="gmsh", iswritemesh=False, verbose=True): if (verbose): print '*** create_BiVmesh ***' cur_dir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) geofile = cur_dir + "/BiV.geo" tempgeofile = "BiV_temp.geo" print tempgeofile print os.getcwd() meshfilename = casename+".vtk" cmd = "cp " + geofile + " " + tempgeofile os.system(cmd) cmd = "sed -i.bak s/'<<Meshsize>>'/'" + str(meshsize) + "'/g " + tempgeofile os.system(cmd) cmd = "sed -i.bak s/'<<LVfilename>>'/'" + "\""+ str(LVendocutfilename).replace("/", "\/") + "\"" + "'/g " + tempgeofile os.system(cmd) cmd = "sed -i.bak s/'<<RVfilename>>'/'" + "\""+ str(RVendocutfilename).replace("/", "\/") + "\"" + "'/g " + tempgeofile os.system(cmd) cmd = "sed -i.bak s/'<<Epifilename>>'/'" + "\""+ str(epicutfilename).replace("/", "\/") + "\"" + "'/g " + tempgeofile os.system(cmd) cmd = gmshcmd+" -3 BiV_temp.geo -o " + meshfilename os.system(cmd) cmd = "rm BiV_temp.geo " os.system(cmd) ugrid = vtk_py.readUGrid(meshfilename) cmd = "rm meshfilename" os.system(cmd) return ugrid
def pig_lv(): #print "starting pig_LV" casename = "New_mesh" #"ellipsoidal" #"New_mesh" #"ellipsoidal_from_MRI" meshfilename = casename + ".vtk" #"ellipsoidal.vtk"# print meshfilename outdir = "./" + casename + "/" directory = os.getcwd() + '/' + casename + "/" ugrid = vtk_py.readUGrid(meshfilename) #print (ugrid) mesh = vtk_py.convertUGridToXMLMesh(ugrid) print(mesh) comm2 = pyMPI.COMM_WORLD fenics_mesh_ref, fenics_facet_ref, fenics_edge_ref = vtk_py.extractFeNiCsBiVFacet( ugrid, geometry="LV") matid = MeshFunction('size_t', fenics_mesh_ref, 3, mesh.domains()) meshname = casename ztop = max(fenics_mesh_ref.coordinates()[:, 2]) ztrans = Expression(("0.0", "0.0", str(-ztop)), degree=1) if (dolfin.dolfin_version() != '1.6.0'): ALE.move(fenics_mesh_ref, ztrans) else: fenics_mesh_ref.move(ztrans) mesh = fenics_mesh_ref gdim = mesh.geometry().dim() quad_deg = 4 VQuadelem = VectorElement("Quadrature", mesh.ufl_cell(), degree=quad_deg, quad_scheme="default") VQuadelem._quad_scheme = 'default' fiberFS = FunctionSpace(mesh, VQuadelem) Quadelem = FiniteElement("Quadrature", mesh.ufl_cell(), degree=quad_deg, quad_scheme="default") Quadelem._quad_scheme = 'default' hslFS = FunctionSpace(mesh, Quadelem) isepiflip = True isendoflip = True endo_angle = 30 epi_angle = -30 casedir = "./" hsl0_endo = 895.0 hsl0_epi = 955.0 hsl0, ef, es, en, eC, eL, eR = vtk_py.addLVfiber(mesh, fiberFS, hslFS, "lv", endo_angle, epi_angle, hsl0_endo, hsl0_epi, casedir, isepiflip, isendoflip, isapexflip=False) matid_filename = outdir + meshname + "_matid.pvd" File(matid_filename) << matid f = HDF5File(mesh.mpi_comm(), directory + meshname + ".hdf5", 'w') f.write(mesh, meshname) f.close() f = HDF5File(mesh.mpi_comm(), directory + meshname + ".hdf5", 'a') f.write(fenics_facet_ref, meshname + "/" + "facetboundaries") f.write(fenics_edge_ref, meshname + "/" + "edgeboundaries") f.write(matid, meshname + "/" + "matid") f.write(ef, meshname + "/" + "eF") f.write(es, meshname + "/" + "eS") f.write(en, meshname + "/" + "eN") f.write(eC, meshname + "/" + "eC") f.write(eL, meshname + "/" + "eL") f.write(eR, meshname + "/" + "eR") #print hsl0 #print eR f.write(hsl0, meshname + "/" + "hsl0") f.close() File(outdir + "_facetboundaries" + ".pvd") << fenics_facet_ref File(outdir + "_edgeboundaries" + ".pvd") << fenics_edge_ref File(outdir + "_mesh" + ".pvd") << mesh File(outdir + "matid" + ".pvd") << matid return 0
rotatedendopdata = vtk_py.rotatePData_w_axis(endopdata, angle, raxis) height = min(rotatedendopdata.GetBounds()[5], rotatedepipdata.GetBounds()[5]) - zoffset clipped_endo, clipped_epi = vtk_py.clipSurfacesForCutLVMesh(rotatedendopdata, rotatedepipdata, height, verbose=True) #vtk_py.writeSTL(clipped_epi, "clipped_epi_tmp.stl") vtk_py.writeSTL(clipped_epi, output_dir + "clipped_epi_tmp.stl") #vtk_py.writeSTL(clipped_endo, "clipped_endo_tmp.stl") vtk_py.writeSTL(clipped_endo, output_dir + "clipped_endo_tmp.stl") #filename = 'New_mesh' filename = output_info["mesh_name"] vtk_py.createLVmesh(filename, 0.5, "clipped_epi_tmp.stl", "clipped_endo_tmp.stl")#(filename, 0.45, "clipped_epi_tmp.stl", "clipped_endo_tmp.stl") # #os.remove("clipped_epi_tmp.stl") #os.remove("clipped_endo_tmp.stl") #os.remove("LVtemp.geo.bak") ugridfilename = output_dir + filename + '.vtk' pdatafilename = output_dir + filename + '.vtp' ugrid = vtk_py.readUGrid(ugridfilename)
mtvfile.close() tol = 1e-1 parser = argparse.ArgumentParser() parser.add_argument('--vtk_folder', type=str, required=True) parser.add_argument('--vtk_filename', type=str, required=True) parser.add_argument('--mtv_grid_directory', type=str, required=True) parser.add_argument('--mtv_basename', type=str, required=True) parser.add_argument('--isepispring', type=int, required=True) args = parser.parse_args() print "************* Entering vtkmtvtranslator_quadtets_v1.py *****************" if (args.isepispring): print "Enforce spring B.C on epi" if (args.vtk_filename[len(args.vtk_filename) - 3:len(args.vtk_filename)] == 'vtu'): mesh = vtk_py.readXMLUGrid(os.path.join(args.vtk_folder, args.vtk_filename)) else: mesh = vtk_py.readUGrid(os.path.join(args.vtk_folder, args.vtk_filename)) mesh = extract_tetra(mesh) convert_quadtets_2_mtv(mesh, args.mtv_grid_directory, args.mtv_basename, 1, 1, "z", tol, args.isepispring) print "************* Leaving vtkmtvtranslator_quadtets_v1.py *****************"
## Use gmsh to generate biventricular mesh #os.system(gmshcmd + " -3 " + meshname + ".geo" + " -o " + meshname+".vtk") kurtis commented out, already generated this file in newer version of gmsh #################################################################### # Failing heart ##################################################### #meshname = "biv_idealized2_failing" #directory = "./" # Use gmsh to generate biventricular mesh #os.system(gmshcmd + " -3 " + meshname + ".geo" + " -o " + meshname+".vtk") #################################################################### #stop # Read in vtk file ugrid = vtk_py.readUGrid(meshname + ".vtk") # Rotate mesh so that z = 0 at base ugridrot = vtk_py.rotateUGrid(ugrid, rx=0.0, ry=-90.0, rz=0.0, sx=1.0, sy=1.0, sz=1.0) vtk_py.writeUGrid(ugridrot, meshname + "_rot.vtk") # For some reason vtkPointLocator in extractFenicsBiVFacet will give error if precision is too high newpts = vtk.vtkPoints() for p in range(0, ugridrot.GetNumberOfPoints()): pt = [