From 310a70fea52f768e60d0a844e6ef84f13e4babd4 Mon Sep 17 00:00:00 2001 From: guigues Date: Tue, 2 Dec 2008 08:38:08 +0000 Subject: [PATCH] KWWidgets support --- kernel/src/CMakeLists.txt | 8 ++ kernel/src/bbtkKW.cxx | 12 +- kernel/src/bbtkKWBlackBox.cxx | 206 ++------------------------- kernel/src/bbtkKWBlackBox.h | 97 ++----------- kernel/src/vtkKWBlackBoxDialog.cxx | 214 +++++++++++++++++++++++++++++ kernel/src/vtkKWBlackBoxDialog.h | 45 ++++++ packages/kw/src/CMakeLists.txt | 2 + packages/kw/src/bbkwSlicer.cxx | 13 +- packages/kw/src/vtkKWSlicer.cxx | 148 ++++++++++++++++---- packages/kw/src/vtkKWSlicer.h | 22 +-- 10 files changed, 441 insertions(+), 326 deletions(-) create mode 100644 kernel/src/vtkKWBlackBoxDialog.cxx create mode 100644 kernel/src/vtkKWBlackBoxDialog.h diff --git a/kernel/src/CMakeLists.txt b/kernel/src/CMakeLists.txt index 03e8354..f013153 100644 --- a/kernel/src/CMakeLists.txt +++ b/kernel/src/CMakeLists.txt @@ -184,6 +184,13 @@ ADD_DEF(BBTK_EXPORT_SYMBOLS) FILE(GLOB SOURCES "." "*.cxx" "*.cpp") # "ThirdParty/wx/treemultictrl/*.cpp") FILE(GLOB SOURCES_H "." "*.h" ) + +IF(BBTK_USE_KWWIDGETS) +include("${KWWidgets_CMAKE_DIR}/KWWidgetsWrappingMacros.cmake") +kwwidgets_wrap_tcl(bbtk LIB_TCL_SRCS "vtkKWBlackBoxDialog.cxx" "") +SET(SOURCES ${SOURCES} ${LIB_TCL_SRCS}) +ENDIF(BBTK_USE_KWWIDGETS) + #----------------------------------------------------------------------------- # lib definition ADD_LIBRARY(bbtk SHARED ${SOURCES} ${SOURCES_H}) @@ -203,6 +210,7 @@ ENDIF(UNIX) #ENDIF(UNIX) #----------------------------------------------------------------------------- + #----------------------------------------------------------------------------- # EO bbtk library creation #----------------------------------------------------------------------------- diff --git a/kernel/src/bbtkKW.cxx b/kernel/src/bbtkKW.cxx index f4eb6fc..cf88699 100644 --- a/kernel/src/bbtkKW.cxx +++ b/kernel/src/bbtkKW.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkKW.cxx,v $ Language: C++ - Date: $Date: 2008/11/29 21:41:32 $ - Version: $Revision: 1.1 $ + Date: $Date: 2008/12/02 08:38:08 $ + Version: $Revision: 1.2 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -39,6 +39,9 @@ #include "vtkMultiThreader.h" #include + +extern "C" int Bbtk_Init(Tcl_Interp *interp); + namespace bbtk { @@ -113,6 +116,9 @@ namespace bbtk mgKWApp = vtkKWApplication::New(); mgKWApp->SetName("bbtk"); + Bbtk_Init(interp); + + /* if (mgMultiThreader == 0) { @@ -126,7 +132,7 @@ namespace bbtk */ // Dies as soon as it starts because no window at this point !!! - mgKWApp->Start(); + // mgKWApp->Start(); /* clock_t endwait; diff --git a/kernel/src/bbtkKWBlackBox.cxx b/kernel/src/bbtkKWBlackBox.cxx index f1de79e..d661598 100644 --- a/kernel/src/bbtkKWBlackBox.cxx +++ b/kernel/src/bbtkKWBlackBox.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkKWBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/11/29 21:41:33 $ - Version: $Revision: 1.1 $ + Date: $Date: 2008/12/02 08:38:08 $ + Version: $Revision: 1.2 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -39,205 +39,13 @@ #include "bbtkKWBlackBox.h" -#include "vtkObjectFactory.h" +#include "vtkKWBlackBoxDialog.h" namespace bbtk { - //========================================================================= - // vtkKWBlackBoxWindow - //========================================================================= - - - - //========================================================================= - vtkKWBlackBoxWindow::vtkKWBlackBoxWindow() - : mShown(false) - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxWindow::vtkKWBlackBoxWindow()" - <bbSetWindow(0); - } - } - //========================================================================= - - - //========================================================================= - void vtkKWBlackBoxWindow::bbShow() - { - if (bbIsShown()) return; - bbtkDebugMessage("kw",9,"vtkKWBlackBoxWindow::bbShow()"<bbGetFullName()<<"]"<Display(); - bbClose(); - } - //========================================================================= - - //========================================================================= - void vtkKWBlackBoxDialog::bbHide() - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxDialog::bbHide()"<Withdraw(); - } - //========================================================================= - - //========================================================================= - void vtkKWBlackBoxDialog::bbClose() - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxDialog::bbClose()"<Done = vtkKWDialog::StatusCanceled; - // this->Delete(); - } - //========================================================================= - - //========================================================================= - void vtkKWBlackBoxDialog::Cancel() - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxDialog::Cancel()"<Delete(); - } - //========================================================================= - //========================================================================= - vtkKWBlackBoxDialog::~vtkKWBlackBoxDialog() - { - } - //========================================================================= - - - - - - //========================================================================= - // vtkKWBlackBoxFrame - //========================================================================= - - //------------------------------------------------------------------------- - vtkStandardNewMacro( vtkKWBlackBoxFrame ); - vtkCxxRevisionMacro(vtkKWBlackBoxFrame, "$Revision: 1.1 $"); - //------------------------------------------------------------------------- - //========================================================================= - vtkKWBlackBoxFrame::vtkKWBlackBoxFrame() - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxFrame::vtkKWBlackBoxFrame()"<bbGetFullName()<<")"<Display(); - // This Update is ** MANDATORY ** - // to synchronize kwvtkRenderWindowInteractor objects - // (force kw objects creation **NOW**) - /* - -#if defined(_WIN32) - kwFrame::Refresh(); -#endif - - kwFrame::Update(); - kwFrame::SetFocus(); - */ - if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow(); - } - //========================================================================= - - //========================================================================= - void vtkKWBlackBoxFrame::bbHide() - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxFrame::bbHide()"<Withdraw(); - if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnHide(); - } - //========================================================================= - - //========================================================================= - void vtkKWBlackBoxFrame::bbClose() - { - bbtkDebugMessage("kw",9,"vtkKWBlackBoxFrame::bbClose()"<Delete(); - } - //========================================================================= - /* //========================================================================= @@ -544,10 +352,10 @@ namespace bbtk // win->SetHeight( bbGetInputWinHeight() ); KW::GetApplication()->AddWindow((vtkKWWindowBase*)win); win->Create(); - std::cout << "TclName='"<GetTclName()<<"'"<Script("pack %s -side left -anchor c -expand y", + KW::GetApplication()->Script("pack %s -side top -expand yes", bbGetOutputWidget()->GetWidgetName()); /* bbGetOutputWidget()->SetParent(win); @@ -587,7 +395,9 @@ namespace bbtk // Show the window show->bbShow(); - KW::GetApplication()->Start(); + // std::cout << "KW::GetApplication()->Start();"<Start(); + // std::cout << "AFTER KW::GetApplication()->Start();"<bbSetWindow(this); - } - virtual KWBlackBox::Pointer bbGetBlackBox() { return mBox.lock(); } - private: - KWBlackBox::WeakPointer mBox; - bool mShown; - }; - //================================================================== - - - //================================================================== - // Dialog window which is modal - // Name of window must not begin with uppercase letter - class BBTK_EXPORT vtkKWBlackBoxDialog : public vtkKWDialog, - public vtkKWBlackBoxWindow - { - public: - static vtkKWBlackBoxDialog* New(); - vtkTypeRevisionMacro(vtkKWBlackBoxDialog,vtkKWDialog); - void bbShow(); - void bbHide(); - void bbClose(); - void Cancel(); - protected: - vtkKWBlackBoxDialog(); - ~vtkKWBlackBoxDialog(); - private: - vtkKWBlackBoxDialog(const vtkKWBlackBoxDialog&); // Not implemented. - void operator=(const vtkKWBlackBoxDialog&); // Not implemented. - }; - //================================================================== - - //================================================================== - // Frame window which is not modal - class BBTK_EXPORT vtkKWBlackBoxFrame : public vtkKWWindowBase, - public vtkKWBlackBoxWindow - { - public: - static vtkKWBlackBoxFrame* New(); - vtkTypeRevisionMacro(vtkKWBlackBoxFrame,vtkKWWindowBase); - void bbShow(); - void bbHide(); - void bbClose(); - protected: - vtkKWBlackBoxFrame(); - ~vtkKWBlackBoxFrame(); - private: - vtkKWBlackBoxFrame(const vtkKWBlackBoxFrame&); // Not implemented. - void operator=(const vtkKWBlackBoxFrame&); // Not implemented. - }; - //================================================================== - - /* //================================================================= // Handles the destroy events of a widget associated to a KWBlackBox diff --git a/kernel/src/vtkKWBlackBoxDialog.cxx b/kernel/src/vtkKWBlackBoxDialog.cxx new file mode 100644 index 0000000..d7ca41b --- /dev/null +++ b/kernel/src/vtkKWBlackBoxDialog.cxx @@ -0,0 +1,214 @@ +#ifdef USE_KWWIDGETS + +#include "vtkKWBlackBoxDialog.h" +#include "bbtkKW.h" +#include "vtkObjectFactory.h" + + //========================================================================= + // vtkKWBlackBoxWindow + //========================================================================= + + +/* + //========================================================================= + vtkKWBlackBoxWindow::vtkKWBlackBoxWindow() + : mShown(false) + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxWindow::vtkKWBlackBoxWindow()" + <bbSetWindow(0); + } + } + //========================================================================= + + + //========================================================================= + void vtkKWBlackBoxWindow::bbShow() + { + if (bbIsShown()) return; + bbtkDebugMessage("kw",9,"vtkKWBlackBoxWindow::bbShow()"<bbGetFullName()<<"]"<Display(); + this->Invoke(); + // bbClose(); + } + //========================================================================= + + //========================================================================= + void vtkKWBlackBoxDialog::bbHide() + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxDialog::bbHide()"<Withdraw(); + } + //========================================================================= + + //========================================================================= + void vtkKWBlackBoxDialog::bbClose() + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxDialog::bbClose()"<Done = vtkKWDialog::StatusCanceled; + // this->Withdraw(); // this->Delete(); + } + //========================================================================= + + //========================================================================= + void vtkKWBlackBoxDialog::Cancel() + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxDialog::Cancel()"<Delete(); + + // this->Withdraw(); + bbHide(); + this->Done = vtkKWDialog::StatusCanceled; + // std::cout << "REFS= "<GetReferenceCount()<bbSetWindow(0); + } + } + //========================================================================= + + +/* + + + //========================================================================= + // vtkKWBlackBoxFrame + //========================================================================= + + //------------------------------------------------------------------------- + vtkStandardNewMacro( vtkKWBlackBoxFrame ); + vtkCxxRevisionMacro(vtkKWBlackBoxFrame, "$Revision: 1.1 $"); + //------------------------------------------------------------------------- + //========================================================================= + vtkKWBlackBoxFrame::vtkKWBlackBoxFrame() + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxFrame::vtkKWBlackBoxFrame()"<bbGetFullName()<<")"<Display(); + // This Update is ** MANDATORY ** + // to synchronize kwvtkRenderWindowInteractor objects + // (force kw objects creation **NOW**) + + if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow(); + } + //========================================================================= + + //========================================================================= + void vtkKWBlackBoxFrame::bbHide() + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxFrame::bbHide()"<Withdraw(); + if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnHide(); + } + //========================================================================= + + //========================================================================= + void vtkKWBlackBoxFrame::bbClose() + { + bbtkDebugMessage("kw",9,"vtkKWBlackBoxFrame::bbClose()"<Delete(); + } + //========================================================================= + */ +#endif diff --git a/kernel/src/vtkKWBlackBoxDialog.h b/kernel/src/vtkKWBlackBoxDialog.h new file mode 100644 index 0000000..f47f89f --- /dev/null +++ b/kernel/src/vtkKWBlackBoxDialog.h @@ -0,0 +1,45 @@ +#ifndef __vtkKWBlackBoxDialog_h_INCLUDED__ +#define __vtkKWBlackBoxDialog_h_INCLUDED__ + +#ifdef USE_KWWIDGETS + +#include "bbtkKWBlackBox.h" +#include "vtkKWDialog.h" + +typedef bbtk::KWBlackBox::Pointer BBPointer; +typedef bbtk::KWBlackBox::WeakPointer BBWeakPointer; + +class BBTK_EXPORT vtkKWBlackBoxDialog : public vtkKWDialog + //public vtkKWBlackBoxWindow + +{ +public: + + + static vtkKWBlackBoxDialog* New(); + + vtkTypeRevisionMacro(vtkKWBlackBoxDialog,vtkKWDialog); + void bbShow(); + void bbHide(); + void bbClose(); + void Cancel(); + bool bbIsShown() { return mShown; } + void bbSetBlackBox(BBPointer box) + { + mBox = box; + mBox.lock()->bbSetWindow(this); + } + virtual BBPointer bbGetBlackBox() { return mBox.lock(); } +protected: + vtkKWBlackBoxDialog(); + ~vtkKWBlackBoxDialog(); +private: + vtkKWBlackBoxDialog(const vtkKWBlackBoxDialog&); // Not implemented. + void operator=(const vtkKWBlackBoxDialog&); // Not implemented. + BBWeakPointer mBox; + bool mShown; +}; +//================================================================== + +#endif +#endif diff --git a/packages/kw/src/CMakeLists.txt b/packages/kw/src/CMakeLists.txt index e2d2a11..f165f0d 100644 --- a/packages/kw/src/CMakeLists.txt +++ b/packages/kw/src/CMakeLists.txt @@ -1,5 +1,7 @@ #--------------------------------------------------------------------------- # Include src configuration cmake script INCLUDE(${BBTK_CMAKE_DIR}/BBTKConfigurePackage_src.cmake) +#include("${KWWidgets_CMAKE_DIR}/KWWidgetsWrappingMacros.cmake") +#kwwidgets_wrap_tcl(bbkw LIB_TCL_SRCS "vtkKWSlicer.cxx" "") #--------------------------------------------------------------------------- diff --git a/packages/kw/src/bbkwSlicer.cxx b/packages/kw/src/bbkwSlicer.cxx index d570549..e122eaf 100644 --- a/packages/kw/src/bbkwSlicer.cxx +++ b/packages/kw/src/bbkwSlicer.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbkwSlicer.cxx,v $ Language: C++ - Date: $Date: 2008/11/29 21:41:58 $ - Version: $Revision: 1.1 $ + Date: $Date: 2008/12/02 08:38:10 $ + Version: $Revision: 1.2 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -82,15 +82,16 @@ namespace bbkw vtkKWSlicer* s = vtkKWSlicer::New(); bbSetOutputWidget(s); s->SetParent(parent); - s->Create(); - s->GetApplication()->Script("pack %s -side left -anchor c -expand y", - s->GetWidgetName()); - if (bbGetInputIn()) { s->SetImage(bbGetInputIn()); } + s->Create(); + s->GetApplication()->Script("pack %s -side top -expand y", + s->GetWidgetName()); + + } } //namespace bbkw diff --git a/packages/kw/src/vtkKWSlicer.cxx b/packages/kw/src/vtkKWSlicer.cxx index 0c9cd47..adc9bf9 100644 --- a/packages/kw/src/vtkKWSlicer.cxx +++ b/packages/kw/src/vtkKWSlicer.cxx @@ -7,6 +7,7 @@ #include "vtkImageViewer2.h" #include "vtkKWApplication.h" #include "vtkKWFrame.h" +#include "vtkKWSplitFrame.h" #include "vtkKWFrameWithLabel.h" #include "vtkKWMenu.h" #include "vtkKWMenuButton.h" @@ -23,22 +24,23 @@ #include "vtkRenderWindowInteractor.h" #include "vtkXMLImageDataReader.h" -//#include "vtkKWWidgetsPaths.h" +//#include "vtkKWWidgetsPaths.h" #include "vtkToolkits.h" #include -namespace bbkw -{ +//namespace bbkw { //---------------------------------------------------------------------------- vtkStandardNewMacro( vtkKWSlicer ); -vtkCxxRevisionMacro(vtkKWSlicer, "$Revision: 1.1 $"); +vtkCxxRevisionMacro(vtkKWSlicer, "$Revision: 1.2 $"); //---------------------------------------------------------------------------- vtkKWSlicer::vtkKWSlicer() { + this->Frame = NULL; this->RenderWidget = NULL; + this->Image = NULL; this->ImageViewer = NULL; this->SliceScale = NULL; this->WindowLevelPresetSelector = NULL; @@ -48,6 +50,10 @@ vtkKWSlicer::vtkKWSlicer() //---------------------------------------------------------------------------- vtkKWSlicer::~vtkKWSlicer() { + if (this->Frame) + { + this->Frame->Delete(); + } if (this->SliceScale) { this->SliceScale->Delete(); @@ -87,18 +93,32 @@ void vtkKWSlicer::CreateWidget() vtkKWApplication *app = this->GetApplication(); + // Add a SplitFrame + Frame = vtkKWSplitFrame::New(); + Frame->SetFrame1MinimumSize(150); + Frame->SetFrame2MinimumSize(250); + Frame->SetOrientationToVertical (); + Frame->SetExpandableFrameToFrame2(); + Frame->SetParent(this); + Frame->Create(); + app->Script("pack %s -side top -expand yes",// -fill both", + this->Frame->GetWidgetName()); // Add a render widget, attach it to the view frame, and pack if (!this->RenderWidget) { this->RenderWidget = vtkKWRenderWidget::New(); } - this->RenderWidget->SetParent(this); //->GetViewFrame()); + this->RenderWidget->SetParent(Frame->GetFrame2()); this->RenderWidget->Create(); this->RenderWidget->CornerAnnotationVisibilityOn(); - app->Script("pack %s -expand y -fill both -anchor c -expand y", - this->RenderWidget->GetWidgetName()); + // app->Script("grid %s -row 0 -column 0 -columnspan 2 -sticky nsew -padx 8 -pady 8", + app->Script("pack %s -side top -expand y -fill both -padx 2 -pady 2", + // app->Script("pack %s -expand y -fill both -anchor c -expand y", + this->RenderWidget->GetWidgetName()); + // this->Script("grid rowconfigure %s 1 -weight 1 -minsize 100", + // this->RenderWidget->GetWidgetName()); // Create a volume reader /* @@ -127,6 +147,7 @@ void vtkKWSlicer::CreateWidget() this->ImageViewer->SetupInteractor( this->RenderWidget->GetRenderWindow()->GetInteractor()); + // Reset the window/level and the camera /* reader->Update(); @@ -154,19 +175,24 @@ void vtkKWSlicer::CreateWidget() { this->SliceScale = vtkKWScale::New(); } - this->SliceScale->SetParent(this); //->GetViewPanelFrame()); + this->SliceScale->SetParent(Frame->GetFrame1()); this->SliceScale->Create(); - this->SliceScale->SetCommand(this, "SetSliceFromScaleCallback"); + // this->SliceScale->SetCommand(this, "SetSliceFromScaleCallback"); - app->Script("pack %s -side top -expand n -fill x -padx 2 -pady 2", + app->Script("pack %s -side top -expand n -fill x", this->SliceScale->GetWidgetName()); + //app->Script("grid %s -row 1 -column 1 -sticky nsew -padx 8", + //app->Script("pack %s -side right -expand n -fill x -padx 2 -pady 2", + // this->SliceScale->GetWidgetName()); + // this->Script("grid rowconfigure %s 0 -weight 1", + // this->SliceScale->GetWidgetName()); // Create a menu button to control the orientation vtkKWMenuButtonWithSpinButtonsWithLabel *orientation_menubutton = vtkKWMenuButtonWithSpinButtonsWithLabel::New(); - orientation_menubutton->SetParent(this); //->GetMainPanelFrame()); + orientation_menubutton->SetParent(Frame->GetFrame1()); orientation_menubutton->Create(); orientation_menubutton->SetLabelText("Orientation:"); orientation_menubutton->SetPadX(2); @@ -174,20 +200,28 @@ void vtkKWSlicer::CreateWidget() orientation_menubutton->SetBorderWidth(2); orientation_menubutton->SetReliefToGroove(); - app->Script("pack %s -side top -anchor nw -expand n -fill x", + app->Script("pack %s -side top -expand n -fill x", orientation_menubutton->GetWidgetName()); + // this->Script("grid %s -row 1 -column 0", + //app->Script("pack %s -side left -anchor nw -expand n -fill x", + // orientation_menubutton->GetWidgetName()); + // this->Script("grid rowconfigure %s 1 -weight 1", + // orientation_menubutton->GetWidgetName()); + vtkKWMenuButton *mb = orientation_menubutton->GetWidget()->GetWidget(); - vtkKWMenu *menu = mb->GetMenu(); + vtkKWMenu *menu = OrientationMenu = mb->GetMenu(); - menu->AddRadioButton("X-Y", this, "SetSliceOrientationToXYCallback"); - menu->AddRadioButton("X-Z", this, "SetSliceOrientationToXZCallback"); - menu->AddRadioButton("Y-Z", this, "SetSliceOrientationToYZCallback"); + menu->AddRadioButton("X-Y"); //, this, "SetSliceOrientationToXYCallback"); + menu->AddRadioButton("X-Z"); //, this, "SetSliceOrientationToXZCallback"); + menu->AddRadioButton("Y-Z"); //, this, "SetSliceOrientationToYZCallback"); mb->SetValue("X-Y"); - // Create a window/level preset selector + + // Create a window/level preset selector + /* vtkKWFrameWithLabel *wl_frame = vtkKWFrameWithLabel::New(); wl_frame->SetParent(this); //->GetMainPanelFrame()); wl_frame->Create(); @@ -203,6 +237,7 @@ void vtkKWSlicer::CreateWidget() this->WindowLevelPresetSelector->SetParent(wl_frame->GetFrame()); this->WindowLevelPresetSelector->Create(); this->WindowLevelPresetSelector->ThumbnailColumnVisibilityOn(); + this->WindowLevelPresetSelector->SetPresetAddCommand( this, "WindowLevelPresetAddCallback"); this->WindowLevelPresetSelector->SetPresetApplyCommand( @@ -212,6 +247,7 @@ void vtkKWSlicer::CreateWidget() this->WindowLevelPresetSelector->SetPresetHasChangedCommand( this, "WindowLevelPresetHasChangedCallback"); + app->Script("pack %s -side top -anchor nw -expand n -fill x", this->WindowLevelPresetSelector->GetWidgetName()); @@ -233,35 +269,88 @@ void vtkKWSlicer::CreateWidget() this->AnimationWidget->Create(); this->AnimationWidget->SetRenderWidget(this->RenderWidget); this->AnimationWidget->SetAnimationTypeToSlice(); - this->AnimationWidget->SetSliceSetCommand(this, "SetSliceCallback"); - this->AnimationWidget->SetSliceGetCommand(this, "GetSliceCallback"); + // this->AnimationWidget->SetSliceSetCommand(this, "SetSliceCallback"); + // this->AnimationWidget->SetSliceGetCommand(this, "GetSliceCallback"); app->Script("pack %s -side top -anchor nw -expand n -fill x", this->AnimationWidget->GetWidgetName()); - + */ this->UpdateSliceRanges(); + // Callbacks + this->AddCallbackCommandObserver( this->SliceScale, + vtkKWScale::ScaleValueChangingEvent); + this->AddCallbackCommandObserver( menu, + vtkKWMenu::MenuItemInvokedEvent); + + // Deallocate local objects // reader->Delete(); orientation_menubutton->Delete(); - wl_frame->Delete(); - animation_frame->Delete(); + // wl_frame->Delete(); + // animation_frame->Delete(); + UpdateImage(); } //---------------------------------------------------------------------------- +void vtkKWSlicer::ProcessCallbackCommandEvents( + vtkObject *caller, unsigned long event, void *calldata) +{ + std::cout << "###### vtkKWSlicer::ProcessCallbackCommandEvents" << std::endl; + if (caller == this->SliceScale && + event == vtkKWScale::ScaleValueChangingEvent) + { + this->SetSliceFromScaleCallback(*((double*)calldata)); + } + if (caller == this->OrientationMenu && + event == vtkKWMenu::MenuItemInvokedEvent) + { + int i = *((int*)calldata); + // std::cout << i << std::endl; + if (i==0) this->SetSliceOrientationToXYCallback(); + else if (i==1) this->SetSliceOrientationToXZCallback(); + else if (i==2) this->SetSliceOrientationToYZCallback(); + + + // this->SetSliceFromScaleCallback(*((double*)calldata)); + } + + /* + // We received a notification from the application that its value was + // changed. Let's propagate that value to our scale widget + + if (caller == myapp && event == vtkCommand::ModifiedEvent) + { + this->Scale->SetValue(myapp->GetMyValue()); + } + */ + this->Superclass::ProcessCallbackCommandEvents(caller, event, calldata); +} + //---------------------------------------------------------------------------- + + //---------------------------------------------------------------------------- void vtkKWSlicer::SetImage(vtkImageData* image) { - vtkImageData* i = vtkImageData::New(); - i->ShallowCopy(image); - this->ImageViewer->SetInput(i); - double *range = i->GetScalarRange(); + Image = vtkImageData::New(); + Image->ShallowCopy(image); + UpdateImage(); +} +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- +void vtkKWSlicer::UpdateImage() +{ + if (!Image) return; + if (!this->IsCreated()) return; + this->ImageViewer->SetInput(Image); + double *range = Image->GetScalarRange(); this->ImageViewer->SetColorWindow(range[1] - range[0]); this->ImageViewer->SetColorLevel(0.5 * (range[1] + range[0])); this->RenderWidget->ResetCamera(); - i->Delete(); this->UpdateSliceRanges(); + Image->Delete(); } //---------------------------------------------------------------------------- @@ -269,6 +358,7 @@ void vtkKWSlicer::SetImage(vtkImageData* image) void vtkKWSlicer::SetSliceFromScaleCallback(double value) { this->ImageViewer->SetSlice((int)value); + this->ImageViewer->Render(); } //---------------------------------------------------------------------------- @@ -302,8 +392,10 @@ void vtkKWSlicer::UpdateSliceRanges() this->ImageViewer->GetSliceMin(), this->ImageViewer->GetSliceMax()); this->SliceScale->SetValue(this->ImageViewer->GetSlice()); + /* this->AnimationWidget->SetSliceRange( this->ImageViewer->GetSliceMin(), this->ImageViewer->GetSliceMax()); + */ } //---------------------------------------------------------------------------- @@ -367,5 +459,5 @@ void vtkKWSlicer::WindowLevelPresetHasChangedCallback(int id) } -} // namespace kw +//} // namespace kw #endif // USE_KWWIDGETS diff --git a/packages/kw/src/vtkKWSlicer.h b/packages/kw/src/vtkKWSlicer.h index 431eb6d..74a0368 100644 --- a/packages/kw/src/vtkKWSlicer.h +++ b/packages/kw/src/vtkKWSlicer.h @@ -4,7 +4,7 @@ #define __vtkKWSlicer_h -#include "vtkKWFrame.h" +#include "vtkKWCompositeWidget.h" class vtkImageData; class vtkKWRenderWidget; @@ -12,17 +12,19 @@ class vtkImageViewer2; class vtkKWScale; class vtkKWWindowLevelPresetSelector; class vtkKWSimpleAnimationWidget; +class vtkKWMenu; +class vtkKWSplitFrame; -namespace bbkw -{ +//namespace bbkw { -class vtkKWSlicer : public vtkKWFrame +class vtkKWSlicer : public vtkKWCompositeWidget { public: static vtkKWSlicer* New(); - vtkTypeRevisionMacro(vtkKWSlicer,vtkKWFrame); + vtkTypeRevisionMacro(vtkKWSlicer,vtkKWCompositeWidget); void SetImage(vtkImageData*); + void UpdateImage(); // Description: // Callbacks @@ -39,6 +41,9 @@ public: virtual void WindowLevelPresetUpdateCallback(int id); virtual void WindowLevelPresetHasChangedCallback(int id); + void ProcessCallbackCommandEvents(vtkObject *caller, + unsigned long event, + void *calldata); protected: vtkKWSlicer(); ~vtkKWSlicer(); @@ -46,13 +51,14 @@ protected: // Description: // Create the widget. virtual void CreateWidget(); - + vtkKWSplitFrame *Frame; + vtkImageData *Image; vtkImageViewer2 *ImageViewer; vtkKWScale *SliceScale; vtkKWWindowLevelPresetSelector *WindowLevelPresetSelector; vtkKWRenderWidget *RenderWidget; vtkKWSimpleAnimationWidget *AnimationWidget; - + vtkKWMenu *OrientationMenu; virtual void UpdateSliceRanges(); private: @@ -60,6 +66,6 @@ private: void operator=(const vtkKWSlicer&); // Not implemented. }; -} +//} #endif #endif -- 2.45.1