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);
}
/**
-** Hide the panel in the
+** Hide the panel in the lower box
**/
void interfMainPanel::hidePanel( ){
wxContourMainFrame::getInstance()->showAxis(false);
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);
}
wxContourMainFrame::getInstance()->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
}
-void interfMainPanel::onInterpolation(bool interpolate){
+void interfMainPanel::onInterpolation(bool interpolate)
+{
wxContourMainFrame::getInstance()->onInterpolation(interpolate);
}
return ((interfInformationPanel*)informationPanel)->getCellValue(j, i );
}
-void interfMainPanel::onSnakePressed(){
+void interfMainPanel::onSnakePressed()
+{
+ axisshown=false;
+ wxContourMainFrame::getInstance()->showAxis(axisshown);
wxContourMainFrame::getInstance()->onSnakePressed();
}
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)
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);
}
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 );
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();
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);
_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 );
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;
}
}
}
}
+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)
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()
_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;
_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;
updateInstantOutlines();
updateInstantImageData();
updateInstantAxes();
-
-
+ updateActor();
}
-void wxContourMainFrame :: updateInstantOutlines(){
-
+
+
+void wxContourMainFrame :: updateInstantOutlines()
+{
_theViewPanel->removeSceneContours();
_theViewPanel->addNameWrapperToScene();
return kernelManager->getNameWrapping(i);
}
-void wxContourMainFrame::updateInstantImageData(){
+void wxContourMainFrame::updateInstantImageData()
+{
std::vector<int> inst;
_instantPanel->getInstant(inst);
}
}
-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){
//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
{
if (_refLineControl!=NULL)
{
- _refLineView->RemoveCompleteContourActor();
- _refLineControl->SetEditable(false);
- _refLineControl->SetActive(false);
+ if (_refLineControl->GetActive())
+ {
+ _refLineView->RemoveCompleteContourActor();
+ _refLineControl->SetEditable(false);
+ _refLineControl->SetActive(false);
+
+ RefreshInterface();
+ }
}
}
{
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();
+ }
}
}
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( );
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)
{
void wxContourMainFrame::onBrigthnessColorWindowLevel(int colorwindow,int windowlevel){
_theViewPanel->onBrigthnessColorWindowLevel(colorwindow, windowlevel);
-
RefreshInterface();
}