]> Creatis software - creaContours.git/commitdiff
*** empty log message ***
authordonadio <donadio>
Thu, 16 Apr 2009 15:33:55 +0000 (15:33 +0000)
committerdonadio <donadio>
Thu, 16 Apr 2009 15:33:55 +0000 (15:33 +0000)
lib/Interface_Icons_NDimensions/interfMainPanel.cxx
lib/Interface_Icons_NDimensions/interfMainPanel.h
lib/Interface_Icons_NDimensions/interfSegmentationPanels.cxx
lib/Interface_Icons_NDimensions/interfSegmentationPanels.h
lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.h
lib/Interface_ManagerContour_NDimensions/wxContourViewPanel.cxx

index 4b8c16e9037c8b040bbeb4340c531f02a7b5d41b..60a8d17c929c0bc164365d0ddceb4f41dd52d1fc 100644 (file)
@@ -38,8 +38,6 @@ interfMainPanel::interfMainPanel(wxWindow * parent, int sizex, int sizey, wxEvtH
        splitterwindow->SetMinimumPaneSize( 10 );
        sizey = sizey/8;
 
-       
-
        wxPanel* toolpanel = new wxPanel(splitterwindow, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE, wxString(_T("")));
 
        wxFlexGridSizer* flexsizer = new wxFlexGridSizer(6,2,1,1);      
@@ -298,7 +296,7 @@ void interfMainPanel::showPanel(wxWindow* panel)
 }
 
 /**
-**     Hide the panel in the 
+**     Hide the panel in the lower box
 **/
 void interfMainPanel::hidePanel( ){
        wxContourMainFrame::getInstance()->showAxis(false);
@@ -415,16 +413,6 @@ void interfMainPanel::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,int
        wxContourMainFrame::getInstance()->onSegmentationAllSlice(minZ, maxZ,isovalue,sampling,method);
 }
 
-void interfMainPanel::onMirror()
-{
-       wxContourMainFrame::getInstance()->onMirror();
-}
-
-void interfMainPanel::onMirrorChangeWidth(int width)
-{
-       wxContourMainFrame::getInstance()->refLineChangeWidth(width);
-}
-
 void interfMainPanel::setLabelSegmentationPanelVTK(wxString tmpString){        
     ((interfSegmentationPanelVTK*)segmentationPanel)->setLabel(tmpString);
 }
@@ -496,7 +484,8 @@ void interfMainPanel::onBrigthnessColorWindowLevel(int colorwindow,int windowlev
        wxContourMainFrame::getInstance()->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
 }
 
-void interfMainPanel::onInterpolation(bool interpolate){
+void interfMainPanel::onInterpolation(bool interpolate)
+{
        wxContourMainFrame::getInstance()->onInterpolation(interpolate);
 }
 
@@ -642,7 +631,10 @@ wxString interfMainPanel::getCellValue(int j,int i){
        return ((interfInformationPanel*)informationPanel)->getCellValue(j, i );
 }
 
-void interfMainPanel::onSnakePressed(){
+void interfMainPanel::onSnakePressed()
+{
+       axisshown=false;
+       wxContourMainFrame::getInstance()->showAxis(axisshown);
     wxContourMainFrame::getInstance()->onSnakePressed();
 }
 
@@ -664,38 +656,81 @@ void interfMainPanel::onMirrorPressed(){
                mirrorPanel->Layout();
 
                refLineShown=true;
-
-               showPanel(mirrorPanel);
                wxContourMainFrame::getInstance()->referenceLine();
        }       
 
        else
        {
-               if(refLineShown)
-               {
-                       wxContourMainFrame::getInstance()->refLineHide();
-                       refLineShown=false;
-
-                       hidePanel();
-               }
 
-               else if (!refLineShown)
+               if (!refLineShown)
                {
                        wxContourMainFrame::getInstance()->refLineShow();
                        refLineShown=true;
-
-                       showPanel(mirrorPanel);
                }
        }
 
+       showPanel(mirrorPanel);
 }
 
-       
+void interfMainPanel::onMirror()
+{
+       wxContourMainFrame::getInstance()->onMirror();
+}
+
+void interfMainPanel::onMirrorAxisShow()
+{
+       if (!refLineShown)
+       {
+               wxContourMainFrame::getInstance()->refLineShow();
+               refLineShown=true;
+       }
+}
+
+void interfMainPanel::onMirrorAxisHide()
+{
+       if (refLineShown)
+       {
+               wxContourMainFrame::getInstance()->refLineHide();
+               refLineShown=false;
+       }
+}
+
+void interfMainPanel::onMirrorChangeWidth(int width)
+{
+       wxContourMainFrame::getInstance()->refLineChangeWidth(width);
+}
+
+
 void interfMainPanel::onThreshold(int minVal, int maxVal)
 {
        wxContourMainFrame::getInstance()->onThreshold(minVal, maxVal);
 }
 
+void interfMainPanel::onThresholdChange(int minVal, int maxVal)
+{
+       wxContourMainFrame::getInstance()->onThresholdChange(minVal, maxVal);
+}
+
+void interfMainPanel::onThresholdInstantChange(int range[])
+{
+       panelThreshold->onThresholdInstantChange(range);
+}
+
+void interfMainPanel::onThresholdInterpolation(bool interpolate)
+{
+       wxContourMainFrame::getInstance()->onThresholdInterpolation(interpolate);
+}
+
+void interfMainPanel::onThresholdChangeOpacity (int opacity)
+{
+       wxContourMainFrame::getInstance()->onThresholdChangeOpacity(opacity);
+}
+
+void interfMainPanel::onThresholdRemove()
+{
+       wxContourMainFrame::getInstance()->onThresholdRemove();
+}
+
 void interfMainPanel::onThresholdPressed()
 {
     if(thresholdPanel==NULL)
@@ -713,24 +748,7 @@ void interfMainPanel::onThresholdPressed()
                flexsizer->Add(stattext,wxALIGN_CENTER | wxALIGN_CENTRE);
                flexsizer->Add(panelThreshold, wxEXPAND);
                thresholdPanel->Layout();
-               showPanel(thresholdPanel);
-       }       
 
-
-               else
-       {
-               if(thresholdShown)
-               {
-                       thresholdShown=false;
-                       panelThreshold->onThresholdStop();
-                       
-                       hidePanel();
-               }
-
-               else if (!thresholdShown)
-               {
-                       thresholdShown=true;
-                       showPanel(thresholdPanel);
-               }
-       }
+       }       
+       showPanel(thresholdPanel);
 }
index 7b2fe74aab4272f02e00ad9ad005ecc33df1e9bb..ddcb7038e966dab161e144dc22e23ac4c6975b68 100644 (file)
@@ -126,14 +126,30 @@ public:
 
        void onSegmentationAllSlice(int minZ,int maxZ,int isovalue,int sampling,int method);
 
+       void onMirrorPressed();
+
        void onMirror();
 
+       void onMirrorAxisShow();
+
+       void onMirrorAxisHide();
+
        void onMirrorChangeWidth(int width);
 
        void onThreshold(int minVal, int maxVal);
 
+       void onThresholdChange(int minVal, int maxVal);
+
+       void onThresholdInstantChange(int range[]);
+
+       void onThresholdRemove();
+
        void onThresholdPressed();
 
+       void onThresholdInterpolation(bool interpolate);
+
+       void onThresholdChangeOpacity (int opacity);
+
        void setLabelSegmentationPanelVTK(wxString tmpString);
 
        void onSegmentationPressed();
@@ -192,8 +208,6 @@ public:
 
        void onSnakePressed();
 
-       void onMirrorPressed();
-
 private:
        
 
@@ -242,7 +256,6 @@ private:
 
        bool axisshown;
        bool refLineShown;
-       bool thresholdShown;
        
        //This attribute contains the panel in charge of adding and removing the corresponding checkboxes in
        //list of contours
index 9be4d4b98eb3c41d2eb3e1d4a32ae9f6bc0f725d..edb257c80ca7721ea6f89964ee2d298c387d9482 100644 (file)
@@ -201,12 +201,19 @@ void interfSegmentationPanelITK::onSegmentationAllSlice( wxCommandEvent& event )
 interfMirrorPanel::interfMirrorPanel(wxWindow* parent)
 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
 {
-       wxButton *mirrorGoBtn = new wxButton(this,-1,_T("Go"), wxDefaultPosition, wxSize(200,35) );
-       _thickness = new wxSlider(this, -1, 4, 1, 10, wxDefaultPosition, wxSize(200,35), wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
+       wxButton *axisShowBtn = new wxButton(this,wxID_ANY,_T("Show Axis"), wxDefaultPosition, wxSize(200,35) );
+       wxButton *axisHideBtn = new wxButton(this,wxID_ANY,_T("Hide Axis"), wxDefaultPosition, wxSize(200,35) );
+       wxButton *mirrorGoBtn = new wxButton(this,wxID_ANY,_T("Mirror Contour"), wxDefaultPosition, wxSize(200,35) );
+       _thickness = new wxSlider(this, -1, 4, 1, 10, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
        
-       Connect( mirrorGoBtn->GetId(),          wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onMirrorGo ); 
+       Connect( axisShowBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onAxisShow );
+       Connect( axisHideBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onAxisHide ); 
+       Connect( mirrorGoBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfMirrorPanel::onMirrorGo ); 
 
        wxFlexGridSizer * sizer         = new wxFlexGridSizer(1);
+       sizer -> Add( axisShowBtn, 1, wxGROW );
+       sizer -> Add( axisHideBtn, 1, wxGROW );
+       sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
        sizer -> Add( new wxStaticText(this,-1,_T("Thickness"))  , 1, wxGROW );
        sizer -> Add( _thickness, 1, wxGROW );
        sizer -> Add( mirrorGoBtn, 1, wxGROW );
@@ -219,6 +226,16 @@ interfMirrorPanel::interfMirrorPanel(wxWindow* parent)
 interfMirrorPanel::~interfMirrorPanel(){
 }
 
+void interfMirrorPanel::onAxisShow(wxCommandEvent& event)
+{
+       interfMainPanel::getInstance()->onMirrorAxisShow();
+}
+
+void interfMirrorPanel::onAxisHide(wxCommandEvent& event)
+{
+       interfMainPanel::getInstance()->onMirrorAxisHide();
+}
+
 void interfMirrorPanel::onMirrorGo(wxCommandEvent& event)
 {
        interfMainPanel::getInstance()->onMirror();
@@ -238,13 +255,19 @@ void interfMirrorPanel::onChangeWidth(wxScrollEvent& event)
 interfThresholdPanel::interfThresholdPanel(wxWindow* parent)
 : wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize, wxBORDER_SUNKEN)
 {
-       wxButton *thresholdGoBtn = new wxButton(this,-1,_T("Threshold Go"), wxDefaultPosition, wxSize(200,30) );
-
+       wxButton *thresholdGoBtn = new wxButton(this,wxID_ANY,_T("Add Fake Color"), wxDefaultPosition, wxSize(200,30) );
+       wxButton *thresholdRemoveBtn = new wxButton(this,wxID_ANY,_T("Remove Fake Color"), wxDefaultPosition, wxSize(200,30) );
+       _interpolationCheckBox = new wxCheckBox(this, -1, _T("Image interpolation") );
+       _interpolationCheckBox->SetValue(true); 
+       _opacity = new wxSlider(this, wxID_ANY, 6, 1, 10, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL|wxSL_LABELS, wxDefaultValidator);
        _thresholdGo = false;
 
        double range[2];
        interfMainPanel::getInstance()->getImageRange(range);
        
+       int min = floor (range[0]);
+       int max = ceil (range[1]);
+
        _mBarThreshold  =  new mBarRange(this,70,65);
        _mBarThreshold->SetMin(0);
        _mBarThreshold->SetStart(0);
@@ -252,21 +275,27 @@ interfThresholdPanel::interfThresholdPanel(wxWindow* parent)
        _mBarThreshold-> setActiveStateTo(true);
        _mBarThreshold-> setVisibleLabels( true );
        _mBarThreshold-> setDeviceEndMargin(10);
-       _mBarThreshold-> setRepresentedValues( range[0] , range[1] );
+       _mBarThreshold-> setRepresentedValues( min , max );
        _mBarThreshold-> setDeviceBlitStart(10,10); 
        _mBarThreshold-> setIfWithActualDrawed( false );
-       _mBarThreshold-> SetStart( range[0] );
-       _mBarThreshold-> SetEnd( range[1] );  
+       _mBarThreshold-> SetStart( min );
+       _mBarThreshold-> SetEnd( max );  
        
        Connect( thresholdGoBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfThresholdPanel::onThresholdGo ); 
+       Connect( thresholdRemoveBtn->GetId(), wxEVT_COMMAND_BUTTON_CLICKED , (wxObjectEventFunction) &interfThresholdPanel::onThresholdRemove );
+       Connect( _interpolationCheckBox->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED, (wxObjectEventFunction) &interfThresholdPanel::onThresholdInterpolation );
 
        wxFlexGridSizer * sizer         = new wxFlexGridSizer(1);
+       sizer -> Add( new wxStaticText(this,-1,_T("Image Threshold"))  , 1, wxGROW );
        sizer -> Add( _mBarThreshold, 1, wxGROW );
-       sizer -> Add( thresholdGoBtn, 1, wxGROW );
        sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
+       sizer -> Add( new wxStaticText(this,-1,_T("Opacity Level"))  , 1, wxGROW );
+       sizer -> Add( _opacity, 1, wxGROW );
        sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
-       //sizer -> Add( new wxStaticText(this,-1,_T("Select the image's range to superpose a Fake Color"))  , 1, wxGROW );
-       
+       sizer -> Add( thresholdGoBtn, 1, wxGROW );
+       sizer -> Add( thresholdRemoveBtn, 1, wxGROW );
+       sizer -> Add( new wxStaticText(this,-1,_T(" "))  , 1, wxGROW );
+       sizer -> Add( _interpolationCheckBox, 1, wxGROW );
 
        this->SetSizer( sizer );
        this->SetAutoLayout( true );
@@ -285,9 +314,9 @@ void interfThresholdPanel::onThresholdChange(wxCommandEvent& event)
                int minVal = _mBarThreshold->GetStart();
                int maxVal = _mBarThreshold->GetEnd();
 
-               interfMainPanel::getInstance()->onThreshold(minVal, maxVal);
+               interfMainPanel::getInstance()->onThresholdChange(minVal, maxVal);
 
-               std::cout<< "Valor Min: " << minVal << " & Valor Max: " << maxVal  << std::endl;
+               //std::cout<< "Valor Min: " << minVal << " & Valor Max: " << maxVal  << std::endl;
        }
 }
 
@@ -303,11 +332,35 @@ void interfThresholdPanel::onThresholdGo(wxCommandEvent& event)
        }
 }
 
+void interfThresholdPanel::onThresholdRemove(wxCommandEvent& event)
+{
+       interfMainPanel::getInstance()->onThresholdRemove( );
+       _thresholdGo=false;
+}
+
 void interfThresholdPanel::onThresholdStop()
 {
+       interfMainPanel::getInstance()->onThresholdRemove( );
        _thresholdGo=false;
 }
 
+void interfThresholdPanel::onThresholdInstantChange(int range[])
+{
+       range[0] = _mBarThreshold->GetStart();
+       range[1] = _mBarThreshold->GetEnd();
+}
+
+void interfThresholdPanel::onThresholdInterpolation(wxCommandEvent& event)
+{
+       interfMainPanel::getInstance()->onThresholdInterpolation(_interpolationCheckBox->GetValue());
+}
+
+void interfThresholdPanel::onChangeOpacity(wxScrollEvent& event)
+{
+       int opacity = _opacity->GetValue();
+       interfMainPanel::getInstance()->onThresholdChangeOpacity(opacity);
+}
+
 
 BEGIN_EVENT_TABLE(interfMirrorPanel, wxPanel)
        EVT_SCROLL(interfMirrorPanel :: onChangeWidth)
@@ -317,6 +370,7 @@ BEGIN_EVENT_TABLE(interfThresholdPanel, wxPanel)
        EVT_COMMAND(wxID_ANY, wxEVT_TSBAR_START, interfThresholdPanel :: onThresholdChange)
        EVT_COMMAND(wxID_ANY, wxEVT_TSBAR_END, interfThresholdPanel :: onThresholdChange)
        EVT_COMMAND(wxID_ANY, wxEVT_TSBAR_MOVED, interfThresholdPanel :: onThresholdChange)     
+       EVT_SCROLL(interfThresholdPanel :: onChangeOpacity)
 END_EVENT_TABLE()
 
 
index 5e5b9406cdb3fd0750f4f93a26f7d67a2df82752..72399b12d9415c94f42a4e2bc94da0393ccaab75 100644 (file)
@@ -89,6 +89,10 @@ private:
 
        wxSlider* _thickness;
 
+       void onAxisShow(wxCommandEvent& event);
+
+       void onAxisHide(wxCommandEvent& event);
+
        void onMirrorGo(wxCommandEvent& event);
 
        void onChangeWidth(wxScrollEvent& event);
@@ -105,16 +109,25 @@ public:
        ~interfThresholdPanel();
        
        void onThresholdStop();
+       void onThresholdInstantChange(int range[]);
 
 private:
 
        mBarRange* _mBarThreshold;
+       wxSlider* _opacity;
        bool _thresholdGo;
+       wxCheckBox* _interpolationCheckBox;     
 
        void onThresholdChange(wxCommandEvent& event);
 
        void onThresholdGo(wxCommandEvent& event);
 
+       void onThresholdRemove(wxCommandEvent& event);
+
+       void onThresholdInterpolation(wxCommandEvent& event);
+
+       void onChangeOpacity(wxScrollEvent& event);
+
        DECLARE_EVENT_TABLE()
 };
 
index 3070d426e1bf0325c8ae1fa9655246512d548af6..4ca7174761dd6c4e30e7a090ef083ab15a51120e 100644 (file)
@@ -58,6 +58,8 @@ char wxContourMainFrame::COPY = 'C';
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
+               _thresholdActor                         = NULL;
+               _actorPresent                           = false;
 
                // set up default notebook style
 //             m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
@@ -77,6 +79,8 @@ char wxContourMainFrame::COPY = 'C';
                _refLineControl                         = NULL;
                _refLineModel                           = NULL;
                _refLineView                            = NULL;
+               _thresholdActor                         = NULL;
+               _actorPresent                           = false;
 
                // set up default notebook style
                m_notebook_style =wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_EXTERNAL_MOVE | wxNO_BORDER;
@@ -592,11 +596,12 @@ void wxContourMainFrame::changeInstant()
                updateInstantOutlines();
                updateInstantImageData();
                updateInstantAxes();
-
-               
+               updateActor();
 }
-void wxContourMainFrame :: updateInstantOutlines(){
-       
+
+
+void wxContourMainFrame :: updateInstantOutlines()
+{
        _theViewPanel->removeSceneContours();
        _theViewPanel->addNameWrapperToScene();
 
@@ -613,7 +618,8 @@ std::string wxContourMainFrame::getNameWrapping(int i){
        return kernelManager->getNameWrapping(i);
 }
 
-void wxContourMainFrame::updateInstantImageData(){
+void wxContourMainFrame::updateInstantImageData()
+{
        std::vector<int> inst;
        _instantPanel->getInstant(inst);
 
@@ -627,7 +633,84 @@ void wxContourMainFrame::updateInstantImageData(){
        }
 }
 
-void wxContourMainFrame::updateInstantAxes(){
+void wxContourMainFrame::updateInstantAxes()
+{
+}
+
+void wxContourMainFrame :: updateActor()
+{
+               if (_actorPresent)
+               {
+                       int minMax[2];
+                       _pannew->onThresholdInstantChange(minMax);
+
+                       int     z = _theViewPanel->GetZ();
+
+                       vtkImageData * img = getImageData();
+                       vtkImageReslice *imageReslice = vtkImageReslice::New();
+
+                       imageReslice->SetInput( img );
+                       imageReslice->SetInformationInput(img);
+                       imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+                       imageReslice->SetResliceAxesOrigin(0,0,z);
+                       imageReslice->SetOutputDimensionality(2);
+                       imageReslice->SetInterpolationModeToLinear();
+
+                       img = imageReslice->GetOutput();
+                       img->Update();
+                       img->UpdateInformation();
+
+                       wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+                       
+                       double range[2];
+                       img->GetScalarRange(range);
+
+                       int min = floor (range[0]);
+                       int max = ceil (range[1]);
+
+                       //Lookup Table
+                       vtkLookupTable *lookup = vtkLookupTable::New();
+                       lookup->SetNumberOfTableValues(max+1);
+                       lookup->SetTableRange(range); 
+                       lookup->SetAlphaRange(0, 1);
+                       lookup->SetValueRange(0, 1);
+                       lookup->SetSaturationRange(0, 0); 
+                       lookup->SetRampToLinear( );
+
+                       //Assign a fake color for the upper image, and set the white as transparent
+                       int i;
+                       int minVal = minMax[0];
+                       int maxVal = minMax[1];
+
+                       for(i = min; i <= max; i++)
+                       {
+                               if( i >= minVal && i <= maxVal )
+                               {
+                                       lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+                               }
+                               else if( i >= min && i < minVal )
+                               {
+                                       lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               }
+                               else if( i > maxVal && i < max )
+                               {
+                                       lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               }
+                               else
+                               {
+                                       lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                               }
+                       }
+                               
+                       lookup->Build( );
+
+                       vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
+                       mapperImage->SetLookupTable( lookup );
+                       mapperImage->SetInput( img );
+                       //mapperImage->SetOutputFormatToRGBA( );
+
+                       _thresholdActor->SetInput( mapperImage->GetOutput() );
+               }
 }
 
 void wxContourMainFrame::onChangeDeep(int val){
@@ -1576,49 +1659,52 @@ void wxContourMainFrame::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,i
 //Creates a reference line to be used as the axis of the mirroring
 void wxContourMainFrame::referenceLine()
 {
-    wxBusyCursor wait;
-       double spc[3];
+       if (_refLineControl==NULL)
+       {
+               wxBusyCursor wait;
+               double spc[3];
 
-       vtkImageData *vtkimagedata = _theViewPanel->getImageData();
-       vtkimagedata->GetSpacing(spc);
+               vtkImageData *vtkimagedata = _theViewPanel->getImageData();
+               vtkimagedata->GetSpacing(spc);
 
-       wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+               wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
 
-       _refLineControl = new manualLineControler();
-       _refLineModel   = new manualContourModelLine();
-       _refLineView = new manualViewLine();
-       _refLineView->SetModel( _refLineModel );
-       _refLineView->SetWxVtkBaseView( viewer2D );
-       _refLineView->SetRange( 2 );
-       _refLineView->SetZ( 1200 );
+               _refLineControl = new manualLineControler();
+               _refLineModel   = new manualContourModelLine();
+               _refLineView = new manualViewLine();
+               _refLineView->SetModel( _refLineModel );
+               _refLineView->SetWxVtkBaseView( viewer2D );
+               _refLineView->SetRange( 2 );
+               _refLineView->SetZ( 1200 );
 
-       _refLineView->SetSpacing(spc);
+               _refLineView->SetSpacing(spc);
 
-       _refLineView->SetColorNormalContour(0, 0, 1);
-       _refLineView->SetColorEditContour(0, 0.5, 0.5);
-       _refLineView->SetWidthLine(4);
+               _refLineView->SetColorNormalContour(0, 0, 1);
+               _refLineView->SetColorEditContour(0, 0.5, 0.5);
+               _refLineView->SetWidthLine(4);
 
-       _refLineControl->SetModelView( _refLineModel , _refLineView );
-       viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
-       _refLineModel->SetCloseContour(false);
-       _refLineControl->CreateNewManualContour();
+               _refLineControl->SetModelView( _refLineModel , _refLineView );
+               viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+               _refLineModel->SetCloseContour(false);
+               _refLineControl->CreateNewManualContour();
 
-       double z = _refLineControl->GetZ();
-/*
-       _refLineControl->AddPoint(50,100,z);
-       _refLineControl->AddPoint(80,40,z);
-       _refLineControl->SetCompleteCreation(true);
+               double z = _refLineControl->GetZ();
+       /*
+               _refLineControl->AddPoint(50,100,z);
+               _refLineControl->AddPoint(80,40,z);
+               _refLineControl->SetCompleteCreation(true);
 
-       _refLineModel->AddPoint(50,100,z);
-       _refLineModel->AddPoint(80,40,z);
-       _refLineModel->UpdateSpline();
+               _refLineModel->AddPoint(50,100,z);
+               _refLineModel->AddPoint(80,40,z);
+               _refLineModel->UpdateSpline();
 
-       _refLineView->UpdateViewPoint(0);
-       _refLineView->UpdateViewPoint(1);
-*/
+               _refLineView->UpdateViewPoint(0);
+               _refLineView->UpdateViewPoint(1);
+       */
 
-       _refLineControl->SetActive(true);
-       _refLineView->RefreshContour();
+               _refLineControl->SetActive(true);
+               _refLineView->RefreshContour();
+       }
 }
 
 //Hides the referenceLine
@@ -1626,9 +1712,14 @@ void wxContourMainFrame::refLineHide()
 {
        if (_refLineControl!=NULL)
        {
-               _refLineView->RemoveCompleteContourActor();
-               _refLineControl->SetEditable(false);
-               _refLineControl->SetActive(false);
+               if (_refLineControl->GetActive())
+               {
+                       _refLineView->RemoveCompleteContourActor();
+                       _refLineControl->SetEditable(false);
+                       _refLineControl->SetActive(false);
+
+                       RefreshInterface();
+               }
        }
 }
 
@@ -1637,18 +1728,23 @@ void wxContourMainFrame::refLineShow()
 {
        if (_refLineControl!=NULL)
        {
-               wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
+               if (_refLineControl->GetActive()==false)
+               {
+                       wxVtkBaseView * viewer2D = _theViewPanel->getWxVtkBaseView();
 
-               _refLineView->SetModel( _refLineModel );
-               _refLineView->SetWxVtkBaseView( viewer2D );
-               _refLineView->SetRange( 2 );
-               _refLineView->SetZ( 1200 );
+                       _refLineView->SetModel( _refLineModel );
+                       _refLineView->SetWxVtkBaseView( viewer2D );
+                       _refLineView->SetRange( 2 );
+                       _refLineView->SetZ( 1200 );
 
-               _refLineControl->SetModelView( _refLineModel , _refLineView );
-               viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
-               _refLineControl->CreateNewManualContour();
-               _refLineControl->SetActive(true);
-               _refLineView->RefreshContour();
+                       _refLineControl->SetModelView( _refLineModel , _refLineView );
+                       viewer2D->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _refLineControl );
+                       _refLineControl->CreateNewManualContour();
+                       _refLineControl->SetActive(true);
+                       _refLineView->RefreshContour();
+
+                       RefreshInterface();
+               }
        }
 }
 
@@ -1697,42 +1793,157 @@ void wxContourMainFrame::onMirror()
 
 void wxContourMainFrame::onThreshold(int minVal, int maxVal)
 {
-       
-       vtkImageData * img = _theViewPanel->getImageData();
-       
-       double range[2];
-       img->GetScalarRange(range);
-
-       //vtkImageData * fakeImage = new vtkImageData();
+       if (!_actorPresent)
+       {
+               int     z = _theViewPanel->GetZ();
 
-       //Lookup Table
-       vtkLookupTable *lookup = vtkLookupTable::New();
-       lookup->SetNumberOfTableValues(range[1]+1);
-       lookup->SetTableRange(range); 
-       lookup->SetAlphaRange(0, 1);
-       lookup->SetValueRange(0, 1);
-       lookup->SetSaturationRange(0, 0); 
-       lookup->SetRampToLinear( );
+               vtkImageData * img = getImageData();
+               vtkImageReslice *imageReslice = vtkImageReslice::New();
 
+               imageReslice->SetInput( img );
+               imageReslice->SetInformationInput(img);
+               imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+               imageReslice->SetResliceAxesOrigin(0,0,z);
+               imageReslice->SetOutputDimensionality(2);
+               imageReslice->SetInterpolationModeToLinear();
 
+               img = imageReslice->GetOutput();
+               img->Update();
+               img->UpdateInformation();
 
-       //Assign a fake color for the upper image, and set the white as transparent
-       for(int i = range[0]; i < range[1]; i++)
-       {
-               if( i >= minVal && i <= maxVal )
+               wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+               
+               double range[2];
+               img->GetScalarRange(range);
+
+               int min = floor (range[0]);
+               int max = ceil (range[1]);
+
+               //Lookup Table
+               vtkLookupTable *lookup = vtkLookupTable::New();
+               lookup->SetNumberOfTableValues(max+1);
+               lookup->SetTableRange(range); 
+               lookup->SetAlphaRange(0, 1);
+               lookup->SetValueRange(0, 1);
+               lookup->SetSaturationRange(0, 0); 
+               lookup->SetRampToLinear( );
+
+               //Assign a fake color for the upper image, and set the white as transparent
+               int i;
+               for(i = min; i <= max; i++)
                {
-                       lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+                       if( i >= minVal && i <= maxVal )
+                       {
+                               lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+                       }
+                       else if( i >= min && i < minVal )
+                       {
+                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                       }
+                       else if( i > maxVal && i < max )
+                       {
+                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                       }
+                       else
+                       {
+                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                       }
                }
-               else if( i >= range[0] && i < minVal )
+                       
+               lookup->Build( );
+
+               vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
+               mapperImage->SetLookupTable( lookup );
+               mapperImage->SetInput( img );
+               //mapperImage->SetOutputFormatToRGBA( );
+
+               if (_thresholdActor==NULL)
                {
-                       lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent
+                       _thresholdActor = vtkImageActor::New( );
+                       _thresholdActor->SetInput( mapperImage->GetOutput() );
+                       _thresholdActor->SetOpacity( 0.6 );
+                       _thresholdActor->InterpolateOn( ); 
                }
-               else if( i > maxVal && i < range[1] )
+               else
                {
-                       lookup->SetTableValue(i, 0.0, 0.0, 0.0, 0); //transparent
+                       _thresholdActor->SetInput( mapperImage->GetOutput() );
                }
+
+               baseView->GetRenderer()->AddActor( _thresholdActor );
+               _actorPresent = true;
        }
+
+       RefreshInterface();
+/*
+       vtkImageViewer2* viewer = vtkImageViewer2::New();        
+       viewer->SetInput( upperImageActor->GetInput() ); 
+       viewer->SetColorLevel((range[1]-range[0])/2);
+       viewer->SetColorWindow(range[1]);
+       viewer->GetRenderer()->AddActor( upperImageActor );
+       viewer->Render();
+*/
+
+}
+
+void wxContourMainFrame::onThresholdChange(int minVal, int maxVal)
+{
+       if (_actorPresent)
+       {
+               int     z = _theViewPanel->GetZ();
+
+               vtkImageData * img = getImageData();
+               vtkImageReslice *imageReslice = vtkImageReslice::New();
+
+               imageReslice->SetInput( img );
+               imageReslice->SetInformationInput(img);
+               imageReslice->SetResliceAxesDirectionCosines(1,0,0, 0,1,0 ,0,0,1);
+               imageReslice->SetResliceAxesOrigin(0,0,z);
+               imageReslice->SetOutputDimensionality(2);
+               imageReslice->SetInterpolationModeToLinear();
+
+               img = imageReslice->GetOutput();
+               img->Update();
+               img->UpdateInformation();
+
+               wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
                
+               double range[2];
+               img->GetScalarRange(range);
+
+               int min = floor (range[0]);
+               int max = ceil (range[1]);
+
+               //Lookup Table
+               vtkLookupTable *lookup = vtkLookupTable::New();
+               lookup->SetNumberOfTableValues(max+1);
+               lookup->SetTableRange(range); 
+               lookup->SetAlphaRange(0, 1);
+               lookup->SetValueRange(0, 1);
+               lookup->SetSaturationRange(0, 0); 
+               lookup->SetRampToLinear( );
+
+               //Assign a fake color for the upper image, and set the white as transparent
+               int i;
+               for(i = min; i <= max; i++)
+               {
+                       if( i >= minVal && i <= maxVal )
+                       {
+                               lookup->SetTableValue(i, 1.0, 0.0, 0.0, 1);
+                       }
+                       else if( i >= min && i < minVal )
+                       {
+                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                       }
+                       else if( i > maxVal && i < max )
+                       {
+                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                       }
+                       else
+                       {
+                               lookup->SetTableValue(i, 1.0, 1.0, 1.0, 0); //transparent
+                       }
+               }
+                       
                lookup->Build( );
 
                vtkImageMapToColors *mapperImage = vtkImageMapToColors::New( );
@@ -1740,20 +1951,51 @@ void wxContourMainFrame::onThreshold(int minVal, int maxVal)
                mapperImage->SetInput( img );
                //mapperImage->SetOutputFormatToRGBA( );
 
-               vtkImageActor * upperImageActor = vtkImageActor::New( );
-               upperImageActor->SetInput( mapperImage->GetOutput() );
-               upperImageActor->SetOpacity( 1 );
+               _thresholdActor->SetInput( mapperImage->GetOutput() );
+       }
 
-               vtkImageViewer2* viewer = vtkImageViewer2::New();        
-               viewer->SetInput( upperImageActor->GetInput() ); 
-               viewer->SetColorLevel((range[1]-range[0])/2);
-               viewer->SetColorWindow(range[1]);
-               viewer->GetRenderer()->AddActor( upperImageActor );
-               viewer->Render();
+       RefreshInterface();
+}
+
+void wxContourMainFrame::onThresholdInterpolation(bool interpolate)
+{
+       if (_thresholdActor!=NULL)
+       {
+               if (interpolate)
+               {
+                       _thresholdActor->InterpolateOn( );
+               }
+
+               else
+               {
+                       _thresholdActor->InterpolateOff( );
+               }
 
                RefreshInterface();
+       }
 }
 
+void wxContourMainFrame::onThresholdChangeOpacity (int opacity)
+{
+       if (_actorPresent)
+       {
+               _thresholdActor->SetOpacity(opacity*0.1);
+       }
+
+       RefreshInterface();
+}
+
+void wxContourMainFrame::onThresholdRemove()
+{
+       if (_actorPresent)
+       {
+               wxVtkBaseView * baseView = _theViewPanel->getWxVtkBaseView();
+               baseView->GetRenderer()->RemoveActor( _thresholdActor );
+               _actorPresent = false;
+       }
+
+       RefreshInterface();
+}
 
 void wxContourMainFrame::showAxis(bool show)
 {
@@ -1802,7 +2044,6 @@ int wxContourMainFrame::getWindowLevel(){
 void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){
        _theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
 
-       
        RefreshInterface();
 }
 
index ffad5e36ad5633dbec8f7cb85b3f69565226307a..9d3660a13a28fd120ebc1c42c909b162ef8454b4 100644 (file)
@@ -220,6 +220,7 @@ class wxContourMainFrame : public wxPanel {
        void updateInstantOutlines();
        void updateInstantImageData();
        void updateInstantAxes();
+       void updateActor();
 
        void onChangeDeep(int val);
 
@@ -258,6 +259,10 @@ class wxContourMainFrame : public wxPanel {
        //AD
        void onMirror();
        void onThreshold(int minVal, int maxVal);
+       void onThresholdChange(int minVal, int maxVal);
+       void onThresholdInterpolation(bool interpolate);
+       void onThresholdChangeOpacity (int opacity);
+       void onThresholdRemove();
 
 //==================================================================================================== 
 
@@ -331,15 +336,15 @@ private:
 
 
        wxAuiManager m_mgr;
-    /*
-       wxArrayString m_perspectives;
-        wxMenu* m_perspectives_menu;
-   */
-
-               wxAuiNotebook * notebook;
-        long m_notebook_style;
-        long m_notebook_theme;
-        int _numberOfVariablesStatistics;
+       wxAuiNotebook * notebook;
+
+    long m_notebook_style;
+    long m_notebook_theme;
+    int _numberOfVariablesStatistics;
+       
+       vtkImageActor * _thresholdActor;
+
+       bool _actorPresent;
 
        //OutlineModelManager * _modelManager;
 
index 08bc31e0ec5465420e9dd667d0daadf9044825e8..1394bfaf953a9f8fe062906eafed785df40ad701 100644 (file)
@@ -213,8 +213,8 @@ DEFINE_EVENT_TYPE( wxINSTANT_CHANGE )
        void wxContourViewPanel::createViewPanel()
        {               
                std::vector<int> * numViews = new std::vector<int> ();
-               numViews->push_back(-1);
-               theViewPanel                                    = new wxMaracas_N_ViewersWidget( this, showingVID, numViews );
+               numViews->push_back(0);
+               theViewPanel = new wxMaracas_N_ViewersWidget( this, showingVID, numViews );
                SetVisibleAxis(false);
 
                theViewPanel->SetBackgroundColour(wxColour(0,0,0));
@@ -671,6 +671,7 @@ DEFINE_EVENT_TYPE( wxINSTANT_CHANGE )
                }       
                wxContourMainFrame::getInstance()->changeInstant();
        }
+
        void wxContourViewPanel::onCreateMultipleROI (wxCommandEvent& event){
        }
        void wxContourViewPanel::onCreateROI (wxCommandEvent& event){