1 /*=========================================================================
4 Module: $RCSfile: bbwxvtkMIPViewer.cxx,v $
6 Date: $Date: 2008/03/03 13:14:27 $
7 Version: $Revision: 1.1 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
25 #ifdef _USE_WXWIDGETS_
28 #include "bbwxvtkMIPViewer.h"
29 #include "bbwxvtkPackage.h"
30 //#include <wx/dialog.h>
32 #include "vtkInteractorStyleImage.h"
33 #include "vtkCamera.h"
34 #include "vtkRenderer.h"
41 BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,MIPViewer);
44 MIPViewerWidget::MIPViewerWidget(MIPViewer* v, wxWindow *parent)
46 wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL),
49 wxPanel *panel = this;
53 // Create the pipeline
54 mCast = vtkImageShiftScale::New();
55 mCast->SetOutputScalarTypeToUnsignedChar();
56 mCast->ClampOverflowOn();
58 mMIP = vtkVolumeRayCastMIPFunction::New();
59 mMIP->SetMaximizeMethodToScalarValue();
61 mMapper = vtkVolumeRayCastMapper::New();
62 mMapper->SetVolumeRayCastFunction(mMIP);
63 mMapper->SetInput(mCast->GetOutput()); // (smoother.GetOutput())
67 mActor = vtkVolume::New();
68 mActor->SetMapper(mMapper);
72 mCamera = vtkCamera::New();
73 mCamera->SetViewUp(0, 0, -1);
74 mCamera->SetPosition(0, 1, 0);
75 mCamera->SetFocalPoint(0, 0, 0);
76 mCamera->ComputeViewPlaneNormal();
79 mRenderer = vtkRenderer::New();
80 mRenderer->AddActor(mActor);
81 mRenderer->SetActiveCamera(mCamera);
82 mRenderer->ResetCamera();
83 mRenderer->SetBackground(1,1,1);
84 mRenderer->ResetCameraClippingRange();
86 mRenderWindow = vtkRenderWindow::New();
87 mRenderWindow->SetSize(640, 480);
88 mRenderWindow->AddRenderer(mRenderer);
90 mRenderWindowInteractor = new wxVTKRenderWindowInteractor(panel,-1);
91 mRenderWindowInteractor->UseCaptureMouseOn();
92 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
93 sizer -> Add( mRenderWindowInteractor , 1, wxEXPAND, 0);
94 panel -> SetSizer(sizer);
95 panel -> SetAutoLayout(true);
97 mRenderWindowInteractor->SetRenderWindow(mRenderWindow);
99 mBox->bbSetOutputInteractor(mRenderWindowInteractor);
101 //-------------------------------------------------------------------------
103 MIPViewerWidget::~MIPViewerWidget()
107 //-------------------------------------------------------------------------
108 void MIPViewerWidget::Update()
112 if ( mImageData != mBox->bbGetInputIn() )
114 mImageData = mBox->bbGetInputIn();
117 mCast->SetScale(1.0);
118 mCast->SetInput(mImageData);
120 int x1,x2,y1,y2,z1,z2;
122 mImageData->GetSpacing(spx,spy,spz);
123 mImageData->GetExtent (x1,x2,y1,y2,z1,z2);
125 mCamera->SetViewUp ( spx*0, -spy*1, spz*0);
126 mCamera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*z2*2 );
127 mCamera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*(z1+z2)/2);
128 mCamera->SetClippingRange( 0.01, 1000000 );
129 mCamera->ComputeViewPlaneNormal();
132 mCast->SetScale( mBox->bbGetInputScale() / 100. );
133 mCast->SetShift( - mBox->bbGetInputShift() );
135 mRenderWindowInteractor->Refresh();
143 //--------------------------------------------------------------------------
144 //-------------------------------------------------------------------------
145 //--------------------------------------------------------------------------
146 //--------------------------------------------------------------------------
149 BBTK_USER_BLACK_BOX_IMPLEMENTATION(MIPViewer,bbtk::WxBlackBox);
152 void MIPViewer::Process()
154 ((MIPViewerWidget*)bbGetOutputWidget())->Update();
159 * \brief Create wxWidget .
163 void MIPViewer::CreateWidget()
165 bbtkDebugMessageInc("Core",9,"MIPViewer::CreateWidget()"<<std::endl);
167 MIPViewerWidget* w = new MIPViewerWidget(this,bbGetWxParent());
169 bbSetOutputWidget(w);
171 bbtkDebugDecTab("Core",9);