X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=packages%2Fwxvtk%2Fsrc%2FbbwxvtkViewer2D.cxx;h=731d4978e9df71f99fa2d2004a4633082ec760e1;hb=85be7d05390ee84a66308c17c740565456ce15d2;hp=5d43509e8c0d3bb3ac1c123c78337c4d3cbe601b;hpb=3928b4ad06b5b5fd142f696f58a7828d064e2883;p=bbtk.git diff --git a/packages/wxvtk/src/bbwxvtkViewer2D.cxx b/packages/wxvtk/src/bbwxvtkViewer2D.cxx index 5d43509..731d497 100644 --- a/packages/wxvtk/src/bbwxvtkViewer2D.cxx +++ b/packages/wxvtk/src/bbwxvtkViewer2D.cxx @@ -1,18 +1,37 @@ +/* + # --------------------------------------------------------------------- + # + # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image + # pour la SantÈ) + # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton + # Previous Authors : Laurent Guigues, Jean-Pierre Roux + # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil + # + # This software is governed by the CeCILL-B license under French law and + # abiding by the rules of distribution of free software. You can use, + # modify and/ or redistribute the software under the terms of the CeCILL-B + # license as circulated by CEA, CNRS and INRIA at the following URL + # http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html + # or in the file LICENSE.txt. + # + # As a counterpart to the access to the source code and rights to copy, + # modify and redistribute granted by the license, users are provided only + # with a limited warranty and the software's author, the holder of the + # economic rights, and the successive licensors have only limited + # liability. + # + # The fact that you are presently reading this means that you have had + # knowledge of the CeCILL-B license and that you accept its terms. + # ------------------------------------------------------------------------ */ + + /*========================================================================= Program: bbtk Module: $RCSfile: bbwxvtkViewer2D.cxx,v $ Language: C++ - Date: $Date: 2008/12/08 12:56:03 $ - Version: $Revision: 1.28 $ - - 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. + Date: $Date: 2012/11/16 08:52:36 $ + Version: $Revision: 1.39 $ =========================================================================*/ /** @@ -21,8 +40,8 @@ */ -#ifdef _USE_WXWIDGETS_ - +#ifdef USE_WXWIDGETS +#ifdef USE_VTK #include "bbwxvtkViewer2D.h" #include "bbwxvtkPackage.h" @@ -33,19 +52,35 @@ #include "vtkRenderer.h" #include #include - - - +#include namespace bbwxvtk { - - BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer2D); + //-------------------------------------------------------------------------- + class Viewer2DWidget : public wxPanel + { + public: + Viewer2DWidget(Viewer2D* box, wxWindow *parent); + ~Viewer2DWidget(); + void UpdateView(); + vtkRenderer *GetRenderer(); + vtkImageActor *GetImageActor(); + private: + bool mFirstTime; + Viewer2D *mBox; + wxvtkImageViewer2 *imageViewer; + vtkImageData *backImageData; + vtkImageData *mDefaultImage; + wxVTKRenderWindowInteractor *wxvtkrenderwindowinteractor; + bool mUpdateCamera; + + vtkImplicitPlaneWidget * maPlane1, * maPlane2, * mbPlane1, * mbPlane2; + }; - Viewer2DWidget::Viewer2DWidget(Viewer2D* box, wxWindow *parent) : wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), + mFirstTime(true), mBox(box) { wxPanel *panel = this; @@ -59,7 +94,7 @@ namespace bbwxvtk mDefaultImage = vtkImageData::New(); int dim[3]; - dim[0] = dim[1] = 32 ; + dim[0] = dim[1] = 256 ; dim[2] = 2; mDefaultImage->SetDimensions ( dim ); mDefaultImage->SetSpacing(1,1,1); @@ -71,23 +106,35 @@ namespace bbwxvtk for (int i=0;iSetScalarComponentFromFloat(i,j,k,0,0); + mDefaultImage->SetScalarComponentFromFloat(i,j,k,0,0); for (int i=0;iSetScalarComponentFromFloat(dim[0]-i-1,i,0,0,255); - mDefaultImage->SetScalarComponentFromFloat(i,i,1,0,255); - } + { + /* + mDefaultImage->SetScalarComponentFromFloat(i,0,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-1,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(0,i,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(dim[0]-1,i,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,0,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-1,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(0,i,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(dim[0]-1,i,1,0,255); + */ + mDefaultImage->SetScalarComponentFromFloat(i,i,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-i-1,0,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,i,1,0,255); + mDefaultImage->SetScalarComponentFromFloat(i,dim[1]-i-1,1,0,255); + } backImageData = mDefaultImage; imageViewer->SetInput( backImageData ); mUpdateCamera = true; wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL); - sizer-> Add( wxvtkrenderwindowinteractor , 1, wxEXPAND, 0); - panel-> SetSizer(sizer); - panel-> SetAutoLayout(true); - panel-> Layout(); + sizer->Add( wxvtkrenderwindowinteractor, 1, wxEXPAND, 0); + panel->SetSizer(sizer); + panel->SetAutoLayout(true); + panel->Layout(); // wxvtkrenderwindowinteractor->Refresh(); @@ -120,57 +167,44 @@ namespace bbwxvtk delete wxvtkrenderwindowinteractor; // std::cout << "Viewer2DWidget::~Viewer2DWidget() OK" << std::endl; } - - //------------------------------------------------------------------------- - + //------------------------------------------------------------------------- void Viewer2DWidget::UpdateView() { - // std::cout << "Viewer2DWidget::UpdateView() "<bbGetFullName() << std::endl; - // std::cout << "slice="<bbGetInputSlice()<bbGetInputConnectorMap().find("In")->second ; - if (c->GetStatus()==bbtk::MODIFIED) - { - std::cout << "===> MODIFIED"<GetStatus()==bbtk::UPTODATE) - { - std::cout << "===> UPTODATE"<bbGetInputIn() != NULL ) && - // (true) ) // - (backImageData != mBox->bbGetInputIn()) ) - { - std::cout << "** Viewer2DWidget::UpdateView() : Input changed" - <bbGetInputIn(); - backImageData->Update(); - imageViewer->SetInput( backImageData ); - mUpdateCamera = true; + (( mBox->bbGetInputStatus("In") != bbtk::UPTODATE ) || + ( mFirstTime)) + ) + //(backImageData != mBox->bbGetInputIn()) ) + { + // std::cout << "** Viewer2DWidget::UpdateView() : Input changed" <bbGetInputIn()) // Don't update if just Slice changed + { + backImageData = mBox->bbGetInputIn(); + backImageData->Update(); + imageViewer->SetInput( backImageData ); + mUpdateCamera = true; + } } if (mUpdateCamera) { - std::cout << "** Viewer2DWidget::UpdateView() : Update Camera" - <GetSpacing(spx,spy,spz); @@ -211,16 +245,24 @@ namespace bbwxvtk << std::endl; */ } - + // std::cout << "OW = "<< mBox->bbGetWindow() << std::endl; // std::cout << "CW = "<< mBox->bbGetContainingWindow() << std::endl; // std::cout << "Sh = "<< mBox->bbIsShown() << std::endl; + + bool interp = mBox->bbGetInputInterpolate(); + if ( interp ) + imageViewer->GetImageActor()->InterpolateOn(); + else + imageViewer->GetImageActor()->InterpolateOff(); + int orientation = mBox->bbGetInputOrientation(); if (orientation<0 || orientation>2) { - bbtkMessage("Output", 2, "Viewer2D : Orientation was not 0< <2 "<bbIsShown() is necessary to be sure that the wxWindow is already // created and displayed. // Else when slice != 0 we get an X Window System error with wxGTK @@ -229,7 +271,6 @@ namespace bbwxvtk (mBox->bbIsShown())) { int z = mBox->bbGetInputSlice(); - // std::cout << "slice = "<GetWholeExtent(ext); /* @@ -265,9 +306,7 @@ namespace bbwxvtk imageViewer->SetSliceOrientation (orientation); imageViewer->SetSlice( z ); - } - - + } } @@ -284,55 +323,61 @@ namespace bbwxvtk //-------------------------------------------------------------------------- - - + BBTK_ADD_BLACK_BOX_TO_PACKAGE(wxvtk,Viewer2D); BBTK_BLACK_BOX_IMPLEMENTATION(Viewer2D,bbtk::WxBlackBox); - + + //----------------------------------------------------------------- + void Viewer2D::bbUserSetDefaultValues() + { + bbSetInputIn(NULL); + bbSetInputInterpolate(true); // JP + bbSetInputSlice(0); + bbSetOutputWidget(0); + bbSetOutputRenderer(0); + bbSetInputOrientation(2); + } + + //----------------------------------------------------------------- + void Viewer2D::bbUserInitializeProcessing() + { + } + + //----------------------------------------------------------------- + void Viewer2D::bbUserFinalizeProcessing() + { + } + + //-------------------------------------------------------------------------- void Viewer2D::Process() { + // std::cout << "Viewer2D::Process" << std::endl; + // std::cout << "In="<UpdateView(); - bbSetOutputRenderer( ((Viewer2DWidget*)bbGetOutputWidget())->GetRenderer() ); } - bbSetOutputOut( bbGetInputSlice() ); - + bbSetOutputOut( bbGetInputSlice() ); } - void Viewer2D::bbUserConstructor() - { - bbSetInputIn(NULL); - bbSetInputSlice(0); - bbSetOutputWidget(0); - bbSetInputOrientation(2); - } - /** - * \brief Create wxWidget . - * - * - */ + + //-------------------------------------------------------------------------- void Viewer2D::CreateWidget(wxWindow* parent) { - Viewer2DWidget* w = new Viewer2DWidget(this,parent);//bbGetWxParent()); + Viewer2DWidget* w = new Viewer2DWidget(this,parent); + w->UpdateView(); bbSetOutputWidget(w); + bbSetOutputRenderer( ((Viewer2DWidget*)bbGetOutputWidget())->GetRenderer() ); } - // This callback is *no more* - // necessary to get actual processing of the view - // when window is shown - void Viewer2D::OnShowWidget() - { - // ((Viewer2DWidget*)bbGetOutputWidget())->Update(); - // ((Viewer2DWidget*)bbGetOutputWidget())->UpdateView(); - } - }//namespace bbtk #endif +#endif