Skip to content

Commit 04f2796

Browse files
committed
qtViewer: add save image action
Signed-off-by: Thorsten Liebig <thorsten.liebig@gmx.de>
1 parent 06f8ea4 commit 04f2796

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

python/CSXCAD/qtViewer/qtViewer.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
from CSXCAD.qtViewer.qtSettings import QTreeWidget, QTreeWidgetItem, QDockWidget
1414
from CSXCAD.qtViewer.qtSettings import QIcon, QColor
15+
from CSXCAD.qtViewer.qtSettings import QFileDialog
1516

1617
# # load implementations for rendering and interaction factory classes
1718
import vtkmodules.vtkRenderingOpenGL2
@@ -419,6 +420,14 @@ def addActions(self):
419420
self.actions[f'PP'] = act
420421
self.toolbars['View'].addAction(act)
421422

423+
self.toolbars['Export'] = QToolBar("Export")
424+
self.addToolBar(self.toolbars['Export'])
425+
act = QAction('Img', self)
426+
act.triggered.connect(lambda: self.saveImage())
427+
self.actions[f'Img'] = act
428+
self.toolbars['Export'].addAction(act)
429+
430+
422431
def start(self):
423432
self.ren_widget.Initialize()
424433
self.ren_widget.Start()
@@ -561,6 +570,27 @@ def setGridOpacity(self, val, render=True):
561570
if render:
562571
self.render()
563572

573+
def saveImage(self, fn=None, scale=1):
574+
if fn is None:
575+
fn, sel_filter = QFileDialog.getSaveFileName(self, "Save Image", "image.png", "PNG Files (*.png);;JPEG Files (*.jpg)")
576+
if fn is None or fn=='':
577+
return
578+
if 'PNG' in sel_filter:
579+
writer = vtk.vtkPNGWriter()
580+
elif 'JPEG' in sel_filter:
581+
writer = vtk.vtkJPEGWriter()
582+
else:
583+
return
584+
585+
image_flt = vtk.vtkWindowToImageFilter()
586+
image_flt.SetInput(self.ren_win)
587+
image_flt.SetScale(scale)
588+
image_flt.Update()
589+
590+
writer.SetFileName(fn)
591+
writer.SetInputConnection(image_flt.GetOutputPort())
592+
writer.Write()
593+
564594
def showCSX(CSX):
565595
app = createApp(sys.argv)
566596

0 commit comments

Comments
 (0)