GOFIGURE2  0.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
QGoSynchronizedViewMainWindow.cxx
Go to the documentation of this file.
1 /*=========================================================================
2  Authors: The GoFigure Dev. Team.
3  at Megason Lab, Systems biology, Harvard Medical school, 2009-11
4 
5  Copyright (c) 2009-11, President and Fellows of Harvard College.
6  All rights reserved.
7 
8  Redistribution and use in source and binary forms, with or without
9  modification, are permitted provided that the following conditions are met:
10 
11  Redistributions of source code must retain the above copyright notice,
12  this list of conditions and the following disclaimer.
13  Redistributions in binary form must reproduce the above copyright notice,
14  this list of conditions and the following disclaimer in the documentation
15  and/or other materials provided with the distribution.
16  Neither the name of the President and Fellows of Harvard College
17  nor the names of its contributors may be used to endorse or promote
18  products derived from this software without specific prior written
19  permission.
20 
21  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
25  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
27  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
30  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 
33 =========================================================================*/
35 
36 #include <sstream>
37 
38 #include <QtGui>
39 #include "qinputdialog.h"
40 
41 #include "QGoSynchronizedView.h"
42 #include "QGoSynchronizedView3D.h"
44 
45 #include "itkImageFileReader.h"
46 
47 #include "vtkImageReader2Factory.h"
48 #include "vtkImageReader2.h"
49 #include "vtkImageData.h"
50 
52 {
54 
55  mdiArea = new QMdiArea;
56 
59  SIGNAL( subWindowActivated(QMdiSubWindow *) ),
60  this,
61  SLOT( updateMenus() ) );
62 
63  windowMapper = new QSignalMapper(this);
65  SIGNAL( mapped(QWidget *) ),
66  this,
67  SLOT( setActiveSubWindow(QWidget *) ) );
68 
69  createActions();
70  createMenus();
73  updateMenus();
74 
75  setWindowTitle( tr("QGoSynchronizedViewMainWindow") );
77 
78  //mdiArea->setViewMode(QMdiArea::TabbedView);
79 }
80 
83 {
84 }
85 
88 {
90 }
91 
92 void
94 {
97 }
98 
100 QGoSynchronizedViewMainWindow::newSynchronizedView(QString iSynchronizedViewName, vtkImageData *iImage)
101 {
102  QGoSynchronizedView *synchronizedView;
103 
104  synchronizedView = dynamic_cast< QGoSynchronizedView * >(
105  m_SynchronizedViewManager->newSynchronizedView(iSynchronizedViewName,
106  iImage) );
107 
108  mdiArea->addSubWindow(synchronizedView, Qt::SubWindow);
109  synchronizedView->parentWidget()
110  ->resize(300, 300);
111 
112  synchronizedView->show();
113  tileAct->trigger();
114 
115  return synchronizedView;
116 }
117 
119 //QGoSynchronizedView3D*
120 // QGoSynchronizedViewMainWindow::newSynchronizedView3D(QString
121 // iSynchronizedViewName, QString iImagePath)
122 //{
123 // QGoSynchronizedView3D *synchronizedView =
124 // m_SynchronizedViewManager->newSynchronizedView3D( iSynchronizedViewName,
125 // iImage);
126 //
127 // mdiArea->addSubWindow(synchronizedView);
128 //
129 // return synchronizedView;
130 //}
131 //*/
132 
133 void
135 {
137 }
138 
139 void
141 {
143 }
144 
145 void
147 {
148  if ( m_SynchronizedViewManager != NULL )
149  {
151  }
153  QMainWindow::closeEvent(iEvent);
154  iEvent->accept();
155 }
156 
157 void
159 {
161  this,
162  tr("Select Image"), "",
163  tr("Images (*.png *.bmp *.jpg *.jpeg *.tiff *.mha *.mhd *.img *.lsm)") );
164 
165  if ( !filename.isEmpty() )
166  {
167  this->OpenSynchronizedViewForFile(filename);
168  }
169 }
170 
172 {
173  if ( QFile::exists(iFile) )
174  {
175  // parse extension
176  QString ext = QFileInfo(iFile).suffix();
177  //if( ext.compare( "lsm", Qt::CaseInsensitive ) == 0 )
178  // {
179  // this->OpenLSMImage( m_CurrentFile, 0 );
180  // }
181  //else
182  {
183  vtkImageReader2Factory *r_factory = vtkImageReader2Factory::New();
184  vtkImageReader2 * reader =
185  r_factory->CreateImageReader2( iFile.toAscii().data() );
186 
187  reader->SetFileName( iFile.toAscii().data() );
188  reader->Update();
189 
190  vtkImageData *image = reader->GetOutput();
191 
192  newSynchronizedView(iFile, image);
193 
194  reader->Delete();
195  r_factory->Delete();
196  }
197  }
198 }
199 
200 void
202 {
203  QGoSynchronizedView *ScreenshotSynchronizedView = activeSynchronizedView();
205  this,
206  tr("Select Image"), "",
207  tr("Images (*.png *.bmp *.jpg *.jpeg *.tiff)")
208  );
209 
210  if ( !filename.isEmpty() )
211  {
212  this->SaveSnapshotInFile(filename, ScreenshotSynchronizedView);
213  }
214 }
215 
216 void
218 {
219  QGoSynchronizedView3D *temp3DSynchronizedView = NULL;
220  QGoSynchronizedView2D *temp2DSynchronizedView = NULL;
221  GoFigure::FileType iType;
222 
223  QString extension = iFile.section('.', -1);
224  QString nameOfScreenshot = iFile.section('/', -1);
225 
226  if ( extension.isEmpty() || nameOfScreenshot.isEmpty() )
227  {
228  std::cerr << "QGoSynchronizedViewMainWindow::SaveSnapshotInFile incorrect name of file" << std::endl;
229  return;
230  }
231  std::cout << iFile.toStdString() << std::endl;
232  std::cout << extension.toStdString() << std::endl;
233  std::cout << nameOfScreenshot.toStdString() << std::endl;
234  // file extension parsing
235  if ( ( extension.contains("jpg", Qt::CaseInsensitive) )
236  || ( extension.contains("jpeg", Qt::CaseInsensitive) ) )
237  {
238  iType = GoFigure::JPEG;
239  }
240  else
241  {
242  if ( extension.contains("bmp", Qt::CaseInsensitive) )
243  {
244  iType = GoFigure::BMP;
245  }
246  else
247  {
248  if ( extension.contains("png", Qt::CaseInsensitive) )
249  {
250  iType = GoFigure::PNG;
251  }
252  else
253  {
254  if ( extension.contains("eps", Qt::CaseInsensitive) )
255  {
256  iType = GoFigure::EPS;
257  }
258  else
259  {
260  if ( extension.contains("tiff", Qt::CaseInsensitive) )
261  {
262  iType = GoFigure::TIFF;
263  }
264  else
265  {
266  std::cerr << "QGoSynchronizedViewMainWindow::SaveSnapshotInFile couldn't find appropriate extension"
267  << std::endl;
268  return;
269  }
270  }
271  }
272  }
273  }
274 
275  if ( SynchronizedView != 0 )
276  {
277  // if we take a snapshot of a 3D synchronizedView
278  if ( SynchronizedView->GetSynchronizedViewType() == 3 )
279  {
280  temp3DSynchronizedView = static_cast< QGoSynchronizedView3D * >( SynchronizedView );
281 
282  temp3DSynchronizedView->GetFullScreenView();
283 
284  switch ( temp3DSynchronizedView->GetFullScreenView() )
285  {
286  case 0:
287  temp3DSynchronizedView->SnapshotViewXYZ(iType, iFile);
288  break;
289 
290  case 1:
291  temp3DSynchronizedView->SnapshotViewXY(iType, iFile);
292  break;
293 
294  case 2:
295  temp3DSynchronizedView->SnapshotViewXZ(iType, iFile);
296  break;
297 
298  case 3:
299  temp3DSynchronizedView->SnapshotViewYZ(iType, iFile);
300  break;
301 
302  case 4:
303  temp3DSynchronizedView->SnapshotViewXYZ(iType, iFile);
304  break;
305 
306  default:
307  std::cerr << "QGoSynchronizedViewMainWindow::SaveSnapshotInFile can't access fullscreen view" << std::endl;
308  return;
309  break; // facultative
310  }
311  }
312  else // if we take a snapshot of a 2D synchronizedView
313  {
314  temp2DSynchronizedView = static_cast< QGoSynchronizedView2D * >( SynchronizedView );
315  temp2DSynchronizedView->SnapshotViewXY(iType, iFile);
316  }
317  }
318  else
319  {
320  std::cerr << "QGoSynchronizedViewMainWindow::SaveSnapshotInFile synchronizedView pointer error" << std::endl;
321  return;
322  }
323 }
324 
325 void
327 {
328  std::stringstream timageinfo;
329 
330  if ( activeSynchronizedView() )
331  {
332  activeSynchronizedView()->PrintOs(timageinfo);
333  QMessageBox::about( this, tr("Image Informations"),
334  QString::fromStdString( timageinfo.str() ) );
335  }
336 }
337 
338 void
340 {
342  {
344  syncAct->setText( tr("&Synchronize images") );
346  tr("Synchronize open images for point-to-point comparison") );
347  }
348  else
349  {
351  syncAct->setText( tr("De&Synchronize images") );
353  tr("Synchronize open images for point-to-point comparison") );
354  }
355 }
356 
357 void
359 {
360  if ( activeSynchronizedView() != 0 )
361  {
362  if ( activeSynchronizedView()->GetSynchronizedViewType() == 3 )
363  {
364  static_cast< QGoSynchronizedView3D * >( activeSynchronizedView() )->SetFullXYScreenView();
365  }
366  }
367 }
368 
369 void
371 {
372  if ( activeSynchronizedView() != 0 )
373  {
374  if ( activeSynchronizedView()->GetSynchronizedViewType() == 3 )
375  {
376  static_cast< QGoSynchronizedView3D * >( activeSynchronizedView() )->SetFullXZScreenView();
377  }
378  }
379 }
380 
381 void
383 {
384  if ( activeSynchronizedView() != 0 )
385  {
386  if ( activeSynchronizedView()->GetSynchronizedViewType() == 3 )
387  {
388  static_cast< QGoSynchronizedView3D * >( activeSynchronizedView() )->SetFullYZScreenView();
389  }
390  }
391 }
392 
393 void
395 {
396  if ( activeSynchronizedView() != 0 )
397  {
398  if ( activeSynchronizedView()->GetSynchronizedViewType() == 3 )
399  {
400  static_cast< QGoSynchronizedView3D * >( activeSynchronizedView() )->SetFullXYZScreenView();
401  }
402  }
403 }
404 
405 void
407 {
408  if ( activeSynchronizedView() != 0 )
409  {
410  if ( activeSynchronizedView()->GetSynchronizedViewType() == 3 )
411  {
412  static_cast< QGoSynchronizedView3D * >( activeSynchronizedView() )->SetQuadView();
413  }
414  }
415 }
416 
417 void
419 {
420  QMessageBox::about( this,
421  tr("About QGoCompare"),
422  tr("<b>QGoCompare</b> lets you open multiple"
423  " VTK/ITK images from a"
424  " VTK or ITK pipeline and compare them."
425  " This program uses"
426  " Qt, VTK, ITK and GoFigure2 libraries") );
427 }
428 
429 void
431 {
432  QMessageBox::about( this,
433  tr("About GoFigure2"),
434  tr("<b>GoFigure2</b> is a cross-platform,"
435  " free open source software (FOSS), for"
436  " visualizing, processing and analysing of bioimages"
437  " http://gofigure2.sourceforge.net/") );
438 }
439 
440 void
442 {
443  bool hasSynchronizedView = ( activeSynchronizedView() != 0 );
444 
445  syncAct->setEnabled(hasSynchronizedView);
446  closeAct->setEnabled(hasSynchronizedView);
447  closeAllAct->setEnabled(hasSynchronizedView);
448  tileAct->setEnabled(hasSynchronizedView);
449  cascadeAct->setEnabled(hasSynchronizedView);
450 
451  // if it is a 3D view, we activate the change view actions
452  bool has3DSynchronizedView = ( ( hasSynchronizedView )
454  XYviewAct->setEnabled(has3DSynchronizedView);
455  XZviewAct->setEnabled(has3DSynchronizedView);
456  YZviewAct->setEnabled(has3DSynchronizedView);
457  XYZviewAct->setEnabled(has3DSynchronizedView);
458  QuadviewAct->setEnabled(has3DSynchronizedView);
459  View3DToolBar->setVisible(has3DSynchronizedView);
460 }
461 
462 void
464 {
465  windowMenu->clear();
471 }
472 
473 void
475 {
476  openfileAct = new QAction( /*QIcon( ":/images/open.png" ),*/
477  tr("&Open an image file"), this);
478  openfileAct->setShortcuts(QKeySequence::Open);
479  openfileAct->setStatusTip( tr("Open an image from file") );
481  SIGNAL( triggered() ),
482  this,
483  SLOT( openfile() ) );
484 /*
485  openmemAct = new QAction(
486  tr("Open from &memory"), this);
487  // openmemAct->setShortcuts(QKeySequence::Open);
488  openmemAct->setStatusTip(tr("Open an image from memory"));
489  connect(openmemAct,
490  SIGNAL(triggered()),
491  this,
492  SLOT(openfile()));
493 */
494  syncAct = new QAction(tr("&Synchronize images"), this);
495  // syncAct->setShortcuts(QKeySequence::SaveAs);
497  tr("Synchronize open images for point-to-point comparison") );
498  connect( syncAct,
499  SIGNAL( triggered() ),
500  this,
501  SLOT( synchronize() ) );
502 
503  snapshotAsAct = new QAction(tr("Sna&pshot..."), this);
504  snapshotAsAct->setShortcuts(QKeySequence::SaveAs);
505  snapshotAsAct->setStatusTip( tr("Save a Snapshot as..") );
507  SIGNAL( triggered() ),
508  this,
509  SLOT( snapshotAs() ) );
510 
512  exitAct = new QAction(tr("E&xit"), this);
513 #if ( ( QT_MAJOR_VERSION == 4 ) && ( QT_MINOR_VERSION >= 6 ) )
514  exitAct->setShortcuts(QKeySequence::Quit);
515 #endif
516  exitAct->setStatusTip( tr("Exit the application") );
517  connect( exitAct,
518  SIGNAL( triggered() ),
519  qApp,
520  SLOT( closeAllWindows() ) );
522 
523  closeAct = new QAction(tr("Cl&ose"), this);
524  closeAct->setStatusTip( tr("Close the active image") );
525  connect( closeAct,
526  SIGNAL( triggered() ),
527  mdiArea,
528  SLOT( closeActiveSubWindow() ) );
529 
530  closeAllAct = new QAction(tr("Close &All"), this);
531  closeAllAct->setStatusTip( tr("Close all images") );
533  SIGNAL( triggered() ),
534  mdiArea,
535  SLOT( closeAllSubWindows() ) );
536 
537  tileAct = new QAction(tr("&Tile"), this);
538  tileAct->setStatusTip( tr("Tile the images") );
539  connect( tileAct,
540  SIGNAL( triggered() ),
541  mdiArea,
542  SLOT( tileSubWindows() ) );
543 
544  cascadeAct = new QAction(tr("&Cascade"), this);
545  cascadeAct->setStatusTip( tr("Cascade the images") );
547  SIGNAL( triggered() ),
548  mdiArea,
549  SLOT( cascadeSubWindows() ) );
550 
551  aboutAct = new QAction(tr("&About"), this);
552  aboutAct->setStatusTip( tr("Show the application's About box") );
553  connect( aboutAct,
554  SIGNAL( triggered() ),
555  this,
556  SLOT( about() ) );
557 
558  aboutGF2Act = new QAction(tr("About &GoFigure2"), this);
559  aboutGF2Act->setStatusTip( tr("Show the Gofigure2 About box") );
561  SIGNAL( triggered() ),
562  this,
563  SLOT( aboutGF2() ) );
564 
565  aboutQtAct = new QAction(tr("About &Qt"), this);
566  aboutQtAct->setStatusTip( tr("Show the Qt library's About box") );
568  SIGNAL( triggered() ),
569  qApp,
570  SLOT( aboutQt() ) );
571 
572  XYviewAct = new QAction(tr("XY view"), this);
573  aboutQtAct->setStatusTip( tr("Shows XY view") );
575  SIGNAL( triggered() ),
576  this,
577  SLOT( FullscreenXY() ) );
578 
579  XZviewAct = new QAction(tr("XZ view"), this);
580  aboutQtAct->setStatusTip( tr("Shows XZ view") );
582  SIGNAL( triggered() ),
583  this,
584  SLOT( FullscreenXZ() ) );
585 
586  YZviewAct = new QAction(tr("YZ view"), this);
587  aboutQtAct->setStatusTip( tr("Shows YZ view") );
589  SIGNAL( triggered() ),
590  this,
591  SLOT( FullscreenYZ() ) );
592 
593  XYZviewAct = new QAction(tr("3D view"), this);
594  aboutQtAct->setStatusTip( tr("Show 3D view") );
596  SIGNAL( triggered() ),
597  this,
598  SLOT( FullscreenXYZ() ) );
599 
600  QuadviewAct = new QAction(tr("Quad-view"), this);
601  aboutQtAct->setStatusTip( tr("Show 3D view and XY,XZ,YZ projections") );
603  SIGNAL( triggered() ),
604  this,
605  SLOT( Quadscreen() ) );
606 }
607 
609 {
610  fileMenu = menuBar()->addMenu( tr("&File") );
612 // fileMenu->addAction(openmemAct);
615 
616  windowMenu = menuBar()->addMenu( tr("&Window") );
618  connect( windowMenu, SIGNAL( aboutToShow() ), this, SLOT( updateWindowMenu() ) );
619 
620  menuBar()->addSeparator();
621 
622  helpMenu = menuBar()->addMenu( tr("&Help") );
626 }
627 
629 {
630  ToolBar = addToolBar( tr("ImageActions") );
631 // ToolBar->addAction(openmemAct);
635 
636  View3DToolBar = addToolBar( tr("Image 3D View selection") );
642 }
643 
645 {
646  statusBar()->showMessage( tr("Ready") );
647 }
648 
650 {
651  if ( QMdiSubWindow * activeSubWindow = mdiArea->activeSubWindow() )
652  {
653  return static_cast< QGoSynchronizedView * >( activeSubWindow->widget() );
654  }
655  else
656  {
657  return 0;
658  }
659 }
660 
662 {
663  foreach ( QMdiSubWindow * twindow, mdiArea->subWindowList() )
664  {
665  QGoSynchronizedView *SynchronizedView =
666  qobject_cast< QGoSynchronizedView * >( twindow->widget() );
667 
668  if ( SynchronizedView->GetName() == iSynchronizedViewName )
669  {
670  return twindow;
671  }
672  }
673  return NULL;
674 }
675 
677 {
678  if ( !twindow )
679  {
680  return;
681  }
682  else
683  {
684  mdiArea->setActiveSubWindow( qobject_cast< QMdiSubWindow * >(twindow) );
685  }
686 }
void setText(const QString &text)
QAction * addSeparator()
std::string toStdString() const
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
QString * GetName(void)
get SynchronizedView's name
abstract class for QGoSynchronizedView2D and QGoSynchronizedView3D. Those classes are used to display...
class used to display a QWidget containing a two dimensional a vtkimagedata* or an itkimage*...
QMenuBar * menuBar() const
QGoSynchronizedViewManager * GetSynchronizedViewManager()
void showMessage(const QString &message, int timeout)
void about(QWidget *parent, const QString &title, const QString &text)
QStatusBar * statusBar() const
bool isSynchronizing()
true if the manager synchronizes some QGoSynchronizedView
void addAction(QAction *action)
void show()
show all the QGoSynchronizedView s
void Update()
update the QGoSynchronizedView s
virtual void setVisible(bool visible)
void closeAllSubWindows()
QGoSynchronizedViewManager * m_SynchronizedViewManager
QMdiSubWindow * activeSubWindow() const
QWidget * widget() const
bool exists() const
QString tr(const char *sourceText, const char *disambiguation, int n)
QString SnapshotViewXY(const GoFigure::FileType &iType, const QString &iBaseName=tr("Snapshot"))
Save a screenshot of the viewer's content.
void setActiveSubWindow(QMdiSubWindow *window)
void trigger()
void resize(int w, int h)
void clear()
void setUnifiedTitleAndToolBarOnMac(bool set)
QString fromStdString(const std::string &str)
void setShortcuts(const QList< QKeySequence > &shortcuts)
QString SnapshotViewXYZ(const GoFigure::FileType &iType, const QString &iBaseName=QString("snapshot-xyz-"))
void synchronizeOpenSynchronizedViews()
synchronize all open QGoSynchronizedViews
virtual void PrintOs(ostream &os)=0
print the SynchronizedView information : it consists in the image information if any.
bool isEmpty() const
QString SnapshotViewYZ(const GoFigure::FileType &iType, const QString &iBaseName=QString("snapshot-yz-"))
QMdiSubWindow * addSubWindow(QWidget *widget, QFlags< Qt::WindowType > windowFlags)
void setCentralWidget(QWidget *widget)
QAction * addSeparator()
QList< QMdiSubWindow * > subWindowList(WindowOrder order) const
void deleteSynchronizedView3D(QGoSynchronizedView3D *ioSynchronizedView)
void accept()
bool contains(QChar ch, Qt::CaseSensitivity cs) const
class used to display a QWidget containing a two dimensional vtkimagedata* or itkimage*. QGoSynchronizedView3D provide the interface to synchronize cameras among several GoSynchronizedView3D.
void setStatusTip(const QString &statusTip)
QAction * addMenu(QMenu *menu)
QString suffix() const
QWidget * parentWidget() const
void setWindowTitle(const QString &)
QString getSaveFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
High level class for QGoSynchronizedView2D, QGoSynchronizedView2DCallbacks QGoSynchronizedView3D, QGoSynchronizedView3DCallbacks.
char * data()
QMdiSubWindow * findSynchronizedView(const QString &iSynchronizedViewName)
QString section(QChar sep, int start, int end, QFlags< QString::SectionFlag > flags) const
QString SnapshotViewXY(const GoFigure::FileType &iType, const QString &iBaseName=tr("Snapshot-xy-"))
void deleteSynchronizedView2D(QGoSynchronizedView2D *ioSynchronizedView)
delete a QGoSynchronizedView from QGoSynchronizedViewManager's parent Object/Widget delete the QGoSyn...
void show()
virtual void closeEvent(QCloseEvent *event)
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, QFlags< QFileDialog::Option > options)
void SaveSnapshotInFile(QString &iFile, QGoSynchronizedView *SynchronizedView)
virtual int GetSynchronizedViewType(void)=0
returns the type of SynchronizedView (2 for 2D, 3 for 3D)
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void unSynchronizeOpenSynchronizedViews()
remove the synchronization leaving the all QGoSynchronizedView independent
void addAction(QAction *action)
void setEnabled(bool)
QGoSynchronizedView3D * newSynchronizedView(QString iSynchronizedViewName, typename itk::Image< TPixel, 3 >::Pointer iImage)
create and add a QGoSynchronizedView to QGoSynchronizedViewManager's parent Object/Widget ...
QByteArray toAscii() const
QString SnapshotViewXZ(const GoFigure::FileType &iType, const QString &iBaseName=QString("snapshot-xz-"))
QGoSynchronizedView * newSynchronizedView(QString iSynchronizedViewName, vtkImageData *iImage)