Skip to content

Commit

Permalink
Fix for #496 and remove some deprecated functions
Browse files Browse the repository at this point in the history
Always load a fresh viewer from database when writing images
Removed glucifer script feature, can send script commands directly via
lavavu
Removed old interactive viewer process handling functions
  • Loading branch information
OKaluza committed Jul 21, 2020
1 parent 4006f3e commit 61b1db7
Showing 1 changed file with 10 additions and 84 deletions.
94 changes: 10 additions & 84 deletions underworld/visualisation/_glucifer.py
Expand Up @@ -167,23 +167,20 @@ def save(self,filename):
libUnderworld.gLucifer.lucDatabase_BackupDbFile(self._db, filename)
return filename

def lvget(self, db=None, *args, **kwargs):
#Use a single LavaVu instance per db(store) to save resources
def lvget(self):
#Get existing viewer, if any, otherwuse create one
if not self.viewer:
self.viewer = self.lvrun(db=db, *args, **kwargs)
else:
if not db:
db = self._db.path
self.viewer.setup(cache=False, clearstep=True, database=db, timestep=self.step, *args, **kwargs)

self.lvrun()
return self.viewer

def lvrun(self, db=None, *args, **kwargs):
#Create and execute a new viewer with passed args
if not db:
db = self._db.path
if 'UW_VIS_PORT' in os.environ:
kwargs['port'] = int(os.environ['UW_VIS_PORT'])
return lavavu.Viewer(cache=False, clearstep=True, database=db, timestep=self.step, *args, **kwargs)
self.viewer = lavavu.Viewer(cache=False, clearstep=True, database=db, timestep=self.step, *args, **kwargs)
return self.viewer

def _generate(self, figname, objects, props):
#First merge object list with active
Expand Down Expand Up @@ -240,7 +237,7 @@ def _generate(self, figname, objects, props):

#Output any custom geometry on objects
if lavavu and uw.mpi.rank == 0 and any(x.geomType is not None for x in self._objects):
lv = self.lvget() #Open the viewer
lv = self.lvget() #Open/get the viewer
for obj in self._objects:
#Create/Transform geometry by object
obj.render(lv)
Expand All @@ -255,7 +252,7 @@ def _generate(self, figname, objects, props):
self.filename = comm.bcast(self.filename, root=0)
#print uw.mpi.rank,self.filename
#Open the viewer with db filename
lv = self.lvget(self.filename)
lv = self.lvrun(self.filename)
#Loop through objects and run their parallel_render method if present
for obj in self._objects:
if hasattr(obj, "parallel_render"):
Expand Down Expand Up @@ -285,24 +282,6 @@ def _get_state(self, objects, props):

return json.dumps(export, indent=2)

def _read_state(self):
#Read state from database (DEPRECATED)
if uw.mpi.rank > 0:
return
if not self._db.db:
libUnderworld.gLucifer.lucDatabase_OpenDatabase(self._db)
try:
lv = self.lvget()
#Also save the step data
self.timesteps = json.loads(lv.app.getTimeSteps())
#Get figures/states
return lv.app.figures
except RuntimeError as e:
print("LavaVu error: " + str(e))
import traceback
traceback.print_exc()
pass

def empty(self):
""" Empties all the cached drawing objects
"""
Expand Down Expand Up @@ -445,7 +424,6 @@ def __init__(self, store=None, name=None, figsize=None, boundingBox=None, faceco

self.draw = objects.Drawing()
self._drawingObjects = []
self._script = []

#Types of all Drawing derived classes
def all_subclasses(cls):
Expand All @@ -470,9 +448,6 @@ def method(*args, **kwargs):

super(Figure, self).__init__(*args)

def __del__(self):
self.close_viewer()

def _getProperties(self):
#Convert properties to string
return '\n'.join(['%s=%s' % (k,v) for k,v in self.items()]);
Expand Down Expand Up @@ -691,7 +666,7 @@ def save(self, filename=None, size=(0,0), type="Image"):

try:
if type.lower() == "webgl":
lv = self.db.lvget(script=self._script)
lv = self.db.lvrun()
return lv.webgl(filename + '.html')
else:
return self._generate_image(filename, size)
Expand All @@ -713,7 +688,7 @@ def _generate_image(self, filename="", size=(0,0)):
return
try:
#Render with viewer
lv = self.db.lvget(quality=self["quality"], script=self._script)
lv = self.db.lvrun(quality=self["quality"])
imagestr = lv.image(filename, resolution=size)
#Return the generated filename
return imagestr
Expand All @@ -724,25 +699,6 @@ def _generate_image(self, filename="", size=(0,0)):
pass
return ""

def script(self, cmd=None):
"""
Append to or get contents of the saved script.
Parameters
----------
cmd: str
Command to add to script.
"""
if cmd:
if isinstance(cmd, list):
self._script += cmd
else:
self._script += [cmd]
else:
self._script = []
#Returns contents as newline separated string
return '\n'.join(self._script)

def window(self, *args, **kwargs):
""" Open an inline viewer.
Expand Down Expand Up @@ -778,36 +734,6 @@ def viewer(self, new=False, *args, **kwargs):
else:
return self.db.lvget(*args, **kwargs)

def open_viewer(self, args=[], background=True):
""" Open the external viewer.
"""
fname = self.db.filename
if not fname:
fname = os.path.join(tmpdir,"gluciferDB"+self.db._id+".gldb")
self.save_database(fname)
#Already open?
if self._viewerProc and self._viewerProc.poll() == None:
return

if uw.mpi.rank == 0:
#Open viewer with local web server for interactive/iterative use
if background:
self._viewerProc = subprocess.Popen(["LV", "-" + str(self.db.step), "-p9999", "-q90", fname] + self._script + args,
stdout=PIPE, stdin=PIPE, stderr=STDOUT)
from IPython.display import HTML
return HTML('''<a href='#' onclick='window.open("http://" + location.hostname + ":9999");'>Open Viewer Interface</a>''')
else:
self.db.lvget(db=fname, port=9999)

def close_viewer(self):
""" Close the viewer.
"""
#poll() returns None if the process is alive
if self._viewerProc and self._viewerProc.poll() == None:
self.send_command("quit")
self._viewerProc.kill()
self._viewerProc = None

def send_command(self, cmd, retry=True):
"""
Run command on an open viewer instance.
Expand Down

0 comments on commit 61b1db7

Please sign in to comment.