Skip to content

Commit c7e859b

Browse files
committed
Adds a batch mode to the plotter
1 parent 56a4558 commit c7e859b

3 files changed

Lines changed: 52 additions & 21 deletions

File tree

openmc_plotter/__main__.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ def main():
2424
ap.add_argument('model_path', nargs='?', default=os.curdir,
2525
help='Location of model XML file or a directory containing '
2626
'XML files (default is current dir)')
27+
ap.add_argument('-b', '--batch-mode', nargs='+', default=False,
28+
help='View files used to generate plots in batch mode')
2729

2830
args = ap.parse_args()
2931

@@ -68,9 +70,18 @@ def run_app(user_args):
6870
mainWindow = MainWindow(font_metric, screen_size, user_args.model_path)
6971
# connect splashscreen to main window, close when main window opens
7072
mainWindow.loadGui(use_settings_pkl=user_args.ignore_settings)
71-
mainWindow.show()
73+
7274
splash.close()
7375

76+
if user_args.batch_mode:
77+
for view_file in user_args.batch_mode:
78+
print(view_file)
79+
mainWindow.saveBatchImage(view_file)
80+
mainWindow.close()
81+
sys.exit()
82+
else:
83+
mainWindow.show()
84+
7485
# connect interrupt signal to close call
7586
signal.signal(signal.SIGINT, lambda *args: mainWindow.close())
7687
# create timer that interrupts the Qt event loop

openmc_plotter/main_window.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,13 @@ def updateWindowMenu(self):
449449
self.colorDialogAction.setChecked(self.colorDialog.isActiveWindow())
450450
self.mainWindowAction.setChecked(self.isActiveWindow())
451451

452+
def saveBatchImage(self, view_file):
453+
# store the
454+
cv = self.model.currentView
455+
# load the view from file
456+
self.loadViewFile(view_file)
457+
self.plotIm.saveImage(view_file.replace('.pltvw', ''))
458+
452459
# Menu and shared methods
453460
def loadModel(self, reload=False, use_settings_pkl=True):
454461
if reload:
@@ -478,10 +485,8 @@ def saveImage(self):
478485
"untitled",
479486
"Images (*.png)")
480487
if filename:
481-
if "." not in filename:
482-
filename += ".png"
483-
self.plotIm.figure.savefig(filename, transparent=True)
484-
self.statusBar().showMessage('Plot Image Saved', 5000)
488+
self.plotIm.saveImage(filename)
489+
self.statusBar().showMessage('Plot Image Saved', 5000)
485490

486491
def saveView(self):
487492
filename, ext = QFileDialog.getSaveFileName(self,
@@ -497,26 +502,29 @@ def saveView(self):
497502
with open(filename, 'wb') as file:
498503
pickle.dump(saved, file)
499504

505+
def loadViewFile(self, filename):
506+
try:
507+
with open(filename, 'rb') as file:
508+
saved = pickle.load(file)
509+
except Exception:
510+
message = 'Error loading plot settings'
511+
saved = {'version': None,
512+
'current': None}
513+
if saved['version'] == self.model.version:
514+
self.model.activeView = saved['current']
515+
self.dock.updateDock()
516+
self.colorDialog.updateDialogValues()
517+
self.applyChanges()
518+
message = '{} settings loaded'.format(filename)
519+
else:
520+
message = 'Error loading plot settings. Incompatible model.'
521+
self.statusBar().showMessage(message, 5000)
522+
500523
def openView(self):
501524
filename, ext = QFileDialog.getOpenFileName(self, "Open View Settings",
502525
".", "*.pltvw")
503526
if filename:
504-
try:
505-
with open(filename, 'rb') as file:
506-
saved = pickle.load(file)
507-
except Exception:
508-
message = 'Error loading plot settings'
509-
saved = {'version': None,
510-
'current': None}
511-
if saved['version'] == self.model.version:
512-
self.model.activeView = saved['current']
513-
self.dock.updateDock()
514-
self.colorDialog.updateDialogValues()
515-
self.applyChanges()
516-
message = '{} settings loaded'.format(filename)
517-
else:
518-
message = 'Error loading plot settings. Incompatible model.'
519-
self.statusBar().showMessage(message, 5000)
527+
self.loadViewFile(filename)
520528

521529
def openStatePoint(self):
522530
# check for an alread-open statepoint

openmc_plotter/plotgui.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,18 @@ def _resize(self):
111111
self.resize(self.parent.width() * z,
112112
self.parent.height() * z)
113113

114+
def saveImage(self, filename):
115+
"""Save an image of the current view
116+
117+
Parameters
118+
----------
119+
filename : str or pathlib.Path
120+
Name of the image to save
121+
"""
122+
if "." not in filename:
123+
filename += ".png"
124+
self.figure.savefig(filename, transparent=True)
125+
114126
def getDataIndices(self, event):
115127
cv = self.model.currentView
116128

0 commit comments

Comments
 (0)