|
12 | 12 |
|
13 | 13 | from CSXCAD.qtViewer.qtSettings import QTreeWidget, QTreeWidgetItem, QDockWidget |
14 | 14 | from CSXCAD.qtViewer.qtSettings import QIcon, QColor |
| 15 | +from CSXCAD.qtViewer.qtSettings import QFileDialog |
15 | 16 |
|
16 | 17 | # # load implementations for rendering and interaction factory classes |
17 | 18 | import vtkmodules.vtkRenderingOpenGL2 |
@@ -419,6 +420,14 @@ def addActions(self): |
419 | 420 | self.actions[f'PP'] = act |
420 | 421 | self.toolbars['View'].addAction(act) |
421 | 422 |
|
| 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 | + |
422 | 431 | def start(self): |
423 | 432 | self.ren_widget.Initialize() |
424 | 433 | self.ren_widget.Start() |
@@ -561,6 +570,27 @@ def setGridOpacity(self, val, render=True): |
561 | 570 | if render: |
562 | 571 | self.render() |
563 | 572 |
|
| 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 | + |
564 | 594 | def showCSX(CSX): |
565 | 595 | app = createApp(sys.argv) |
566 | 596 |
|
|
0 commit comments