python/trisurf/VTKRendering.py | ●●●●● patch | view | raw | blame | history | |
src/general.h | ●●●●● patch | view | raw | blame | history | |
src/io.c | ●●●●● patch | view | raw | blame | history | |
src/poly.c | ●●●●● patch | view | raw | blame | history | |
src/tape | ●●●●● patch | view | raw | blame | history |
python/trisurf/VTKRendering.py
@@ -4,6 +4,80 @@ from vtk import * class MultiRender: def __init__(self,args,host): target_runs=getRargetRunIdxList(args) if target_runs==None: target_runs=list(range(1,len(host['runs'])+1)) nruns=len(target_runs) #prepare rendering window self.renderer_window = vtkRenderWindow() self.renderer_window.AddRenderer(self.renderer) self.renderer_window.SetSize(1200,600) interactor = vtkRenderWindowInteractor() interactor.SetRenderWindow(self.renderer_window) interactor.Initialize() interactor.AddObserver("TimerEvent", self.RenderUpdate) timerIDR = interactor.CreateRepeatingTimer(1000) self.filename=[] self.renderer=[] i=0 for run in target_runs: #for each target run calculate renderer location r.vtkRenderer() r.SetBackground(0,0,0) p=1.0/float(nruns) x1=i*p x2=(i+1)*p r.SetViewport(x1,0.0,x2,1.0) self.renderer.Append(r) self.renderer_window.AddRenderer(r) i=i+1 #call Renderer object with Run, renderer #start endless loop of interactor interactor.Start() def lastVTU(self,run): Dir=trisurf.Directory(maindir=run.maindir,simdir=run.subdir) filename=os.path.join("./",Dir.fullpath(),run.getLastVTU()) return filename def lastActorForRun(self,run): filename=self.lastVTU(run) reader=vtkXMLUnstructuredGridReader() reader.SetFileName(self.filename) reader.Update() # Needed because of GetScalarRange output = reader.GetOutput() scalar_range = output.GetScalarRange() mapper = vtkDataSetMapper() mapper.SetInput(output) mapper.SetScalarRange(scalar_range) # Create the Actor actor = vtkActor() actor.SetMapper(mapper) return actor def RenderUpdate(self, obj, event): i=0 for run in runs: if(self.lastVTU(run)!=self.filename[i]): #print("updejt") self.renderer.RemoveActor(self.actor) self.renderer.RemoveActor(self.textactor) self.actor=self.lastActor() self.textactor=self.textActor() self.renderer.AddActor(self.actor) self.renderer.AddActor(self.textactor) self.renderer_window.Render() #self.render.RemoveActor(self.actor) i=i+1 return class Renderer: def __init__(self,args,host): self.host=host @@ -14,11 +88,16 @@ self.renderer.AddActor(self.actor) self.renderer.AddActor(self.textactor) self.renderer.SetBackground(0, 0, 0) # Set background to white # Create the RendererWindow self.renderer_window = vtkRenderWindow() self.renderer_window.AddRenderer(self.renderer) self.renderer_window.SetSize(1200,600) self.renderer.SetViewport(0.0,0.0,0.5,1.0) rend=vtk.vtkRenderer() rend.AddActor(self.actor) rend.SetViewport(0.5,0.0,1.0,1.0) self.renderer_window.AddRenderer(rend) # Set up a check for aborting rendering. # Create the RendererWindowInteractor and display the vtk_file interactor = vtkRenderWindowInteractor() @@ -40,7 +119,7 @@ textactor.SetInput(self.filename) tp=textactor.GetTextProperty() tp.SetColor(1,1,1) tp.SetFontSize(18) tp.SetFontSize(11) textactor.SetDisplayPosition(20,30) return textactor src/general.h
@@ -257,6 +257,7 @@ long int nczmax; long int npoly; long int nmono; long int internal_poly; long int nfil; long int nfono; long int R_nucleus; src/io.c
@@ -888,7 +888,6 @@ fprintf(fh,"</DataArray>\n"); fprintf(fh,"</PointData>\n<CellData>\n</CellData>\n<Points>\n<DataArray type=\"Float64\" Name=\"Koordinate tock\" NumberOfComponents=\"3\" format=\"ascii\">\n"); for(i=0;i<vlist->n;i++){ fprintf(fh,"%.17e %.17e %.17e\n",vtx[i]->x,vtx[i]->y, vtx[i]->z); @@ -1066,6 +1065,7 @@ CFG_SIMPLE_INT("nmono", &tape->nmono), CFG_SIMPLE_INT("nfil",&tape->nfil), CFG_SIMPLE_INT("nfono",&tape->nfono), CFG_SIMPLE_INT("internal_poly",&tape->internal_poly), CFG_SIMPLE_INT("R_nucleus",&tape->R_nucleus), CFG_SIMPLE_FLOAT("R_nucleusX",&tape->R_nucleusX), CFG_SIMPLE_FLOAT("R_nucleusY",&tape->R_nucleusY), src/poly.c
@@ -83,6 +83,7 @@ if (vlist!=NULL){ /* Make straight grafted poylmers normal to membrane (polymer brush). Dist. between poly vertices put to 1*/ ts_int intpoly=vesicle->tape->internal_poly; for (i=0;i<poly_list->n;i++){ xnorm=0.0; @@ -94,6 +95,9 @@ znorm-=poly_list->poly[i]->grafted_vtx->tristar[j]->znorm; } normlength=sqrt(xnorm*xnorm+ynorm*ynorm+znorm*znorm); if(intpoly && i%2){ normlength=-normlength; } xnorm=xnorm/normlength; ynorm=ynorm/normlength; znorm=znorm/normlength; src/tape
@@ -1,6 +1,6 @@ ####### Vesicle definitions ########### # nshell is a number of divisions of dipyramid nshell=5 nshell=17 # dmax is the max. bond length (in units l_min) dmax=1.7 # dmin_interspecies in the min. dist. between different vertex species (in units l_min) @@ -14,7 +14,7 @@ # (pswitch=1: calc. p*dV energy contribution) pswitch = 0 # pressure difference: p_inside - p_outside (in units kT/l_min^3): pressure=-10.0 pressure=10.0 #Constant volume constraint (0 disable constant volume, 1 enable wiht additional vertex move, 2 enable with epsvol) constvolswitch=0 @@ -25,11 +25,13 @@ ####### Polymer (brush) definitions ########### # npoly is a number of polymers attached to npoly distinct vertices on vesicle npoly=0 npoly=800 # nmono is a number of monomers in each polymer nmono=2 nmono=6 # Spring constant between monomers of the polymer k_spring=800 #set to 1 if half of the polymeres are inside the vesicle internal_poly=1 ####### Filament (inside the vesicle) definitions ########### # nfil is a number of filaments inside the vesicle @@ -37,7 +39,7 @@ # nfono is a number of monomers in each filament nfono=3 # Persistence lenght of the filaments (in units l_min) xi=0 xi=100 ####### Nucleus (inside the vesicle) ########### # Radius of an impenetrable hard sphere inside the vesicle @@ -70,6 +72,8 @@ #shut up if we are using cluster!!! quiet=false #what type of multiprocessing? (*none, smp, cluster, distributed, cuda, auto) #currently only none makes sense. multiprocessing=none