#include "bbmaracasvisuTransferFunctionView.h" #include "bbcreaMaracasVisuPackage.h" namespace bbcreaMaracasVisu { BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,TransferFunctionView) BBTK_BLACK_BOX_IMPLEMENTATION(TransferFunctionView,bbtk::WxBlackBox); //----------------------------------------------------- void TransferFunctionView::Process() { if(bbGetInputIn()!=NULL){ if(_currentimg != bbGetInputIn()){ _currentimg = bbGetInputIn(); //mwxwidget->initializeHistogram(_currentimg); mwxwidget->setImageData(_currentimg); //mwxwidget->Refresh(); } onColorChange(); /*bbSetOutputGreyLevel(greylevel); bbSetOutputValue(value); bbSetOutputGreyLevelColors(greylevelcolors); bbSetOutputRed(red); bbSetOutputGreen(green); bbSetOutputBlue(blue);*/ } } void TransferFunctionView::onColorChange(){ std::vector greylevel; std::vector value; std::vector greylevelcolors; std::vector red; std::vector green; std::vector blue; mwxwidget->GetValuesPointsFunction(greylevel, value); mwxwidget->GetValuesColorPointsFunction(greylevelcolors,red, green,blue); _tfun->RemoveAllPoints(); for(int i = 0; i < greylevel.size();i++){ _tfun->AddPoint(greylevel[i], value[i]); std::cout<<"TransferFunctionView::Process()transfer function "<RemoveAllPoints(); _ctfun->SetScaleToLinear (); _ctfun->ClampingOff(); _ctfun->AllowDuplicateScalarsOn(); double w=mwxwidget->GetWindowLevel(); double c=mwxwidget->GetColorLevel(); if (greylevelcolors.size()>1) { double min = greylevelcolors[0]; double max = greylevelcolors[greylevelcolors.size()-1]; double dif = max-min; if (dif==0) dif=0.0001; double nc; int i; i=0; _ctfun->AddRGBPoint(greylevelcolors[i], red[i],green[i], blue[i]); for(i = 0; i < greylevelcolors.size();i++) { nc = ((greylevelcolors[i]-min)/dif)*w + c-w/2; // _ctfun->AddRGBPoint(greylevelcolors[i], red[i],green[i], blue[i]); _ctfun->AddRGBPoint( nc , red[i],green[i], blue[i]); std::cout<<"EED TransferFunctionView::Process()transfer color function <<"<AddRGBPoint( greylevelcolors[i] , red[i],green[i], blue[i]); } bbSignalOutputModification(); _tfun->Update(); bbSetOutputOpacityFunction(_tfun); bbSetOutputColorFunction(_ctfun); } void TransferFunctionView::onSliderChange() { //EED onColorChange(); bbSignalOutputModification(); // bbSetOutputWindowLevel(mwxwidget->GetWindowLevel()); // bbSetOutputColorLevel(mwxwidget->GetColorLevel()); } //----------------------------------------------------- void TransferFunctionView::CreateWidget(wxWindow* parent) { bbtkDebugMessageInc("Core",9,"TransferFunctionView::CreateWxWindow()"<Connect(mwxwidget->GetId(), wxEVT_COMMAND_COMBOBOX_SELECTED, (wxObjectEventFunction) (&HandlerTransferFunctionView::onColorChange),NULL,handler); parent->Connect(mwxwidget->GetId(), wxEVT_SCROLL_THUMBTRACK, (wxObjectEventFunction) (&HandlerTransferFunctionView::onSliderChange),NULL,handler); bbtkDebugDecTab("Core",9); bbSetOutputWidget( mwxwidget ); } //----------------------------------------------------- void TransferFunctionView::bbUserSetDefaultValues() { mwxwidget = NULL; _currentimg = NULL; _tfun = NULL; _ctfun = NULL; bbSetOutputOpacityFunction(0); bbSetOutputColorFunction(0); } //----------------------------------------------------------------- void TransferFunctionView::bbUserInitializeProcessing() { _tfun = vtkPiecewiseFunction::New(); _ctfun = vtkColorTransferFunction::New(); _ctfun->SetClamping(-1); bbSetInputIn(NULL); } //----------------------------------------------------------------- void TransferFunctionView::bbUserFinalizeProcessing() { } //----------------------------------------------------------------- HandlerTransferFunctionView::HandlerTransferFunctionView(TransferFunctionView* box) { _box = box; } HandlerTransferFunctionView::~HandlerTransferFunctionView() { } void HandlerTransferFunctionView::onColorChange(wxCommandEvent& event) { _box->onColorChange(); } void HandlerTransferFunctionView::onSliderChange(wxCommandEvent& event) { _box->onSliderChange(); } } // EO namespace bbcreaMaracasVisu