/*========================================================================= Program: bbtk Module: $RCSfile: bbwxvtkMIPViewer.cxx,v $ Language: C++ Date: $Date: 2008/03/03 13:14:27 $ Version: $Revision: 1.1 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ /** * \file * \brief */ #ifdef _USE_WXWIDGETS_ #include "bbwxvtkMIPViewer.h" #include "bbwxvtkPackage.h" //#include #include "vtkInteractorStyleImage.h" #include "vtkCamera.h" #include "vtkRenderer.h" namespace bbwxvtk { BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,MIPViewer); MIPViewerWidget::MIPViewerWidget(MIPViewer* v, wxWindow *parent) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), mBox(v) { wxPanel *panel = this; mImageData = NULL; // Create the pipeline mCast = vtkImageShiftScale::New(); mCast->SetOutputScalarTypeToUnsignedChar(); mCast->ClampOverflowOn(); mMIP = vtkVolumeRayCastMIPFunction::New(); mMIP->SetMaximizeMethodToScalarValue(); mMapper = vtkVolumeRayCastMapper::New(); mMapper->SetVolumeRayCastFunction(mMIP); mMapper->SetInput(mCast->GetOutput()); // (smoother.GetOutput()) // Actor mActor = vtkVolume::New(); mActor->SetMapper(mMapper); // Pipeline Viewer // Camera mCamera = vtkCamera::New(); mCamera->SetViewUp(0, 0, -1); mCamera->SetPosition(0, 1, 0); mCamera->SetFocalPoint(0, 0, 0); mCamera->ComputeViewPlaneNormal(); mCamera->Dolly(1.5); // Renderer mRenderer = vtkRenderer::New(); mRenderer->AddActor(mActor); mRenderer->SetActiveCamera(mCamera); mRenderer->ResetCamera(); mRenderer->SetBackground(1,1,1); mRenderer->ResetCameraClippingRange(); // Window mRenderWindow = vtkRenderWindow::New(); mRenderWindow->SetSize(640, 480); mRenderWindow->AddRenderer(mRenderer); mRenderWindowInteractor = new wxVTKRenderWindowInteractor(panel,-1); mRenderWindowInteractor->UseCaptureMouseOn(); wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); sizer -> Add( mRenderWindowInteractor , 1, wxEXPAND, 0); panel -> SetSizer(sizer); panel -> SetAutoLayout(true); panel -> Layout(); mRenderWindowInteractor->SetRenderWindow(mRenderWindow); mBox->bbSetOutputInteractor(mRenderWindowInteractor); } //------------------------------------------------------------------------- MIPViewerWidget::~MIPViewerWidget() { } //------------------------------------------------------------------------- void MIPViewerWidget::Update() { if ( mImageData != mBox->bbGetInputIn() ) { mImageData = mBox->bbGetInputIn(); mCast->SetShift(0); mCast->SetScale(1.0); mCast->SetInput(mImageData); int x1,x2,y1,y2,z1,z2; double spx,spy,spz; mImageData->GetSpacing(spx,spy,spz); mImageData->GetExtent (x1,x2,y1,y2,z1,z2); mCamera->SetViewUp ( spx*0, -spy*1, spz*0); mCamera->SetPosition( spx*(x1+x2)/2, spy*(y1+y2)/2, -spz*z2*2 ); mCamera->SetFocalPoint ( spx*(x1+x2)/2 , spy*(y1+y2)/2 , spz*(z1+z2)/2); mCamera->SetClippingRange( 0.01, 1000000 ); mCamera->ComputeViewPlaneNormal(); mCamera->Zoom( 1 ); } mCast->SetScale( mBox->bbGetInputScale() / 100. ); mCast->SetShift( - mBox->bbGetInputShift() ); mRenderWindowInteractor->Refresh(); Refresh(); } //-------------------------------------------------------------------------- //------------------------------------------------------------------------- //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- BBTK_USER_BLACK_BOX_IMPLEMENTATION(MIPViewer,bbtk::WxBlackBox); void MIPViewer::Process() { ((MIPViewerWidget*)bbGetOutputWidget())->Update(); } /** * \brief Create wxWidget . * * */ void MIPViewer::CreateWidget() { bbtkDebugMessageInc("Core",9,"MIPViewer::CreateWidget()"<Update(); bbSetOutputWidget(w); bbtkDebugDecTab("Core",9); } }//namespace bbtk #endif