-/*=========================================================================
-
- 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 <wx/dialog.h>
-
-#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()"<<std::endl);
-
- MIPViewerWidget* w = new MIPViewerWidget(this,bbGetWxParent());
- w->Update();
- bbSetOutputWidget(w);
-
- bbtkDebugDecTab("Core",9);
- }
-
-
-}//namespace bbtk
-
-#endif
-