From: dsarrut Date: Tue, 31 May 2011 08:55:43 +0000 (+0200) Subject: Merge branch 'master' of /home/dsarrut/clitk3.server X-Git-Tag: v1.3.0~321^2~3^2~8 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=bfe06a34392432cafbbca44e02e22163dccab7a4;hp=f4fc4c25f08ee080852aa6e75526bfa8116cc59a;p=clitk.git Merge branch 'master' of /home/dsarrut/clitk3.server --- diff --git a/itk/clitkBackProjectImageFilter.h b/itk/clitkBackProjectImageFilter.h index ebaeffc..7de71a1 100644 --- a/itk/clitkBackProjectImageFilter.h +++ b/itk/clitkBackProjectImageFilter.h @@ -148,6 +148,11 @@ namespace clitk } } + void SetPanelShift(double x, double y) + { + m_PanelShift[0] = x; + m_PanelShift[1] = y; + } // itkSetMacro(IsoCenter, OutputPointType); // itkGetConstReferenceMacro(IsoCenter, OutputPointType) // itkSetMacro( SourceToScreen, double ); @@ -258,6 +263,7 @@ namespace clitk double m_SourceToAxis; OutputPixelType m_EdgePaddingValue; double m_ProjectionAngle; + double m_PanelShift[2]; // Output image info OutputSizeType m_OutputSize; // Size of the output image diff --git a/itk/clitkBackProjectImageFilter.txx b/itk/clitkBackProjectImageFilter.txx index 65ac801..befc882 100644 --- a/itk/clitkBackProjectImageFilter.txx +++ b/itk/clitkBackProjectImageFilter.txx @@ -20,6 +20,7 @@ #include "clitkBackProjectImageFilter.h" #include "itkContinuousIndex.h" #include "vnl/vnl_math.h" +#include "itkLinearInterpolateImageFunction.h" namespace clitk { @@ -39,6 +40,8 @@ namespace clitk this->m_SourceToAxis = 1000.0; this->m_EdgePaddingValue = itk::NumericTraits::Zero;//density images this->m_RigidTransformMatrix.SetIdentity(); + this->m_PanelShift[0] = 0.; + this->m_PanelShift[1] = 0.; //Parameters for output this->m_OutputSpacing.Fill(1); @@ -304,8 +307,6 @@ namespace clitk { //Projection pointer InputImageConstPointer inputPtr=this->GetInput(); - InputPixelType * beginPtr=const_cast(this->GetInput()->GetBufferPointer()); - InputPixelType * pp; //Volume pointer OutputImagePointer outputPTr= this->GetOutput(); @@ -325,8 +326,6 @@ namespace clitk OutputIndexType oIndex; ContinuousInputIndexType iIndex; InputSizeType inputSize=inputPtr->GetLargestPossibleRegion().GetSize(); - double dx,dy,dxm,dym; - int lx, ly; //Get the first output coordinate oIndex=iterator.GetIndex();//costly but only once a thread @@ -337,9 +336,13 @@ namespace clitk //Compute the first input coordinate (invert Y/X) homInputPoint= (m_ProjectionMatrix * homOutputPoint); - iPoint[0]=-homInputPoint[0]/homInputPoint[2]; - iPoint[1]=homInputPoint[1]/homInputPoint[2]; - + iPoint[0]=-homInputPoint[0]/homInputPoint[2] + m_PanelShift[0]; + iPoint[1]=homInputPoint[1]/homInputPoint[2] + m_PanelShift[1]; + + typedef itk::LinearInterpolateImageFunction< InputImageType, double > InterpolatorType; + typename InterpolatorType::Pointer interpolator = InterpolatorType::New(); + interpolator->SetInputImage(this->GetInput()); + //Run over all output voxels for (unsigned int i=0; iTransformPhysicalPointToContinuousIndex(iPoint, iIndex) ) - { - //Own (fast bilinear) interpolation - lx = (int)floor(iIndex[0]); dx = iIndex[0]-lx; dxm = 1.-dx; - ly = (int)floor(iIndex[1]); dy = iIndex[1]-ly; dym = 1.-dy; - pp = beginPtr + ly*inputSize[0]+lx; - value =static_cast( ( dxm * dym*(double)(*pp) - + dx * dym*(double)(*(pp+1)) - + dxm* dy *(double)(*(pp + inputSize[0])) - + dx * dy *(double)(*(pp + inputSize[0]+1))) ); - - } + if (m_ModifiedInput->TransformPhysicalPointToContinuousIndex(iPoint, iIndex) && interpolator->IsInsideBuffer(iIndex)) + value = interpolator->EvaluateAtContinuousIndex(iIndex); //Outside: padding value - else value=m_EdgePaddingValue; - + else + value=m_EdgePaddingValue; //Set it iterator.Set(value); diff --git a/tools/clitkConeBeamProjectImage.ggo b/tools/clitkConeBeamProjectImage.ggo index 1c77551..4e80707 100644 --- a/tools/clitkConeBeamProjectImage.ggo +++ b/tools/clitkConeBeamProjectImage.ggo @@ -35,4 +35,4 @@ option "size" - "Size for the output image" int multiple no default="512" option "spacing" - "Spacing for the output image" double multiple no default="0.8" option "panel_position" - "Approximate position of the panel: small, medium or large" string no default="small" -option "panel_shift" - "Precise position of the panel in mm" double no +option "panel_shift" - "Precise position of the panel in mm" double multiple no diff --git a/tools/clitkConeBeamProjectImageFilter.h b/tools/clitkConeBeamProjectImageFilter.h index fcf8610..2363a5f 100644 --- a/tools/clitkConeBeamProjectImageFilter.h +++ b/tools/clitkConeBeamProjectImageFilter.h @@ -188,11 +188,16 @@ namespace clitk } /** Set the panelshift. */ - void SetPanelShift(double shift) + void SetPanelShift(double x, double y) { - if (m_PanelShift!=shift) + if (m_PanelShift[0] != x) { - m_PanelShift=shift; + m_PanelShift[0] = x; + m_IsInitialized=false; + } + if (m_PanelShift[1] != y) + { + m_PanelShift[1] = y; m_IsInitialized=false; } } @@ -229,7 +234,7 @@ namespace clitk double m_SourceToScreen; double m_SourceToAxis; double m_ProjectionAngle; - double m_PanelShift; + double m_PanelShift[2]; MatrixType m_RigidTransformMatrix; OutputPixelType m_EdgePaddingValue; diff --git a/tools/clitkConeBeamProjectImageFilter.txx b/tools/clitkConeBeamProjectImageFilter.txx index dfc8898..798fbd1 100644 --- a/tools/clitkConeBeamProjectImageFilter.txx +++ b/tools/clitkConeBeamProjectImageFilter.txx @@ -36,6 +36,8 @@ namespace clitk m_IsoCenter.Fill(0.0); m_SourceToScreen=1536.; m_SourceToAxis=1000.; + m_PanelShift[0] = 0.; + m_PanelShift[1] = 0.; m_ProjectionAngle=0.; m_RigidTransformMatrix.SetIdentity(); m_EdgePaddingValue=itk::NumericTraits::Zero;//density images @@ -163,15 +165,15 @@ namespace clitk spacingOutput[1] = m_OutputSpacing[0]; // pixel spacing along Y of the 2D DRR image [mm] spacingOutput[2] = m_OutputSpacing[1]; // pixel spacing along Y of the 2D DRR image [mm] m_Resampler->SetOutputSpacing( spacingOutput ); - if (m_Verbose)std::cout<<"The output size is "<< m_OutputSpacing <<"..."<< std::endl; + if (m_Verbose)std::cout<<"The output spacing is "<< m_OutputSpacing <<"..."<< std::endl; // The position of the DRR is specified, we presume that for an angle of 0° the flatpanel is located at the negative x-axis // JV -1 seems to correspond better with shearwarp of Simon Rit typename InterpolatorType::InputPointType originOutput; originOutput[0] = m_IsoCenter[0]- (m_SourceToScreen - m_SourceToAxis); DD(m_PanelShift); - originOutput[1] = m_IsoCenter[1]-static_cast(sizeOuput[1]-1)*spacingOutput[1]/2.0 - m_PanelShift; - originOutput[2] = m_IsoCenter[2]-static_cast(sizeOuput[2]-1)*spacingOutput[2]/2.0; + originOutput[1] = m_IsoCenter[1]-static_cast(sizeOuput[1]-1)*spacingOutput[1]/2.0 - m_PanelShift[0]; + originOutput[2] = m_IsoCenter[2]-static_cast(sizeOuput[2]-1)*spacingOutput[2]/2.0 - m_PanelShift[1]; m_Resampler->SetOutputOrigin( originOutput ); if (m_Verbose)std::cout<<"The origin of the flat panel is at "<< originOutput <<",..."<< std::endl; diff --git a/tools/clitkConeBeamProjectImageGenericFilter.cxx b/tools/clitkConeBeamProjectImageGenericFilter.cxx index d659b96..e36b7d1 100644 --- a/tools/clitkConeBeamProjectImageGenericFilter.cxx +++ b/tools/clitkConeBeamProjectImageGenericFilter.cxx @@ -133,14 +133,14 @@ namespace clitk DD(m_ArgsInfo.panel_position_arg); if (m_ArgsInfo.panel_shift_given) // one should read the specific values for each angle in Frame.dbf - filter->SetPanelShift(m_ArgsInfo.panel_shift_arg); + filter->SetPanelShift(m_ArgsInfo.panel_shift_arg[0], m_ArgsInfo.panel_shift_arg[1]); else { // approximate panel positions hard coded values for the elekta synergy if (strcmp(m_ArgsInfo.panel_position_arg,"small") ==0) - filter->SetPanelShift(0.); + filter->SetPanelShift(0., 0.); else if (strcmp(m_ArgsInfo.panel_position_arg,"medium") ==0) - filter->SetPanelShift(114.84); + filter->SetPanelShift(114.84, 0.); // VD : 120 , 0 ? else if (strcmp(m_ArgsInfo.panel_position_arg,"large") ==0) - filter->SetPanelShift(190.); + filter->SetPanelShift(190., 0.); else assert(false); //Unsupported panel position } // Output image info diff --git a/vv/vvMainWindow.cxx b/vv/vvMainWindow.cxx index 8a0bd24..c3465c1 100644 --- a/vv/vvMainWindow.cxx +++ b/vv/vvMainWindow.cxx @@ -865,6 +865,7 @@ void vvMainWindow::LoadImages(std::vector files, vvImageReader::Loa item->setData(0,Qt::UserRole,files[i].c_str()); QFileInfo fileinfo(imageManager->GetFileName().c_str()); //Do not show the path item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,fileinfo.fileName()); + item->setData(1,Qt::UserRole,tr("image")); item->setToolTip(COLUMN_IMAGE_NAME, imageManager->GetListOfAbsoluteFilePathInOneString("image").c_str()); qApp->processEvents(); @@ -1340,75 +1341,75 @@ QTreeWidgetItem* vvMainWindow::GetItemFromSlicerManager(vvSlicerManager* sm) //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ -void vvMainWindow::DisplayChanged(QTreeWidgetItem *clicked_item, int column) +void vvMainWindow::DisplayChanged(QTreeWidgetItem *clickedItem, int column) { - int index = GetSlicerIndexFromItem(clicked_item); if ( column >= COLUMN_CLOSE_IMAGE || column <= 0) return; + + // Get parent information (might be the same item) + int slicerManagerIndex = GetSlicerIndexFromItem(clickedItem); + QTreeWidgetItem* clickedParentItem = DataTree->topLevelItem(slicerManagerIndex); + vvSlicer* clickedSlicer = mSlicerManagers[slicerManagerIndex]->GetSlicer(column-1); + + // Go over the complete item tree (only 2 levels, parents and children) for (unsigned int i = 0; i < mSlicerManagers.size(); i++) { - //Trick to avoid redoing twice the job for a key (sr) - mSlicerManagers[i]->GetSlicer(column-1)->GetRenderWindow()-> GetInteractor()->SetKeySym("Crap"); - - QTreeWidgetItem* current_row=DataTree->topLevelItem(i); - if (DataTree->topLevelItem(index) == current_row) { - vvSlicer* clicked_slicer=mSlicerManagers[i]->GetSlicer(column-1); - if (current_row == clicked_item) { - //If we just activated a slicer - if (current_row->data(column,Qt::CheckStateRole).toInt() > 0) { - mSlicerManagers[i]->UpdateSlicer(column-1,clicked_item->data(column,Qt::CheckStateRole).toInt()); - mSlicerManagers[i]->UpdateInfoOnCursorPosition(column-1); - DisplaySliders(i,column-1); - std::map overlay_counts; - for (int child = 0; child < current_row->childCount(); child++) { - std::string overlay_type = - current_row->child(child)->data(1,Qt::UserRole).toString().toStdString(); - overlay_counts[overlay_type]++; - current_row->child(child)->setData(column,Qt::CheckStateRole, - current_row->data(column,Qt::CheckStateRole)); - clicked_slicer->SetActorVisibility(overlay_type,overlay_counts[overlay_type]-1,true); - } - } else { //We don't allow simply desactivating a slicer - clicked_item->setData(column,Qt::CheckStateRole,2); - DisplayChanged(clicked_item, column); - return; - } + // Trick to avoid redoing twice the job for a key (sr) + mSlicerManagers[i]->GetSlicer(column-1)->GetRenderWindow()->GetInteractor()->SetKeySym("Crap"); + + QTreeWidgetItem* currentParentItem = DataTree->topLevelItem(i); + if(currentParentItem != clickedParentItem) { + // Not the branch of the clicked item, uncheck all + + // Parent + currentParentItem->setData(column,Qt::CheckStateRole, 0); + mSlicerManagers[i]->UpdateSlicer(column-1, false); + + // Children + for (int iChild = 0; iChild < currentParentItem->childCount(); iChild++) { + currentParentItem->child(iChild)->setData(column,Qt::CheckStateRole, 0); } - //if we clicked on the vector(or overlay) and not the image - else { - if (clicked_item->data(column,Qt::CheckStateRole).toInt()) { - current_row->setData(column,Qt::CheckStateRole,2); - mSlicerManagers[i]->UpdateSlicer(column-1,2); - mSlicerManagers[i]->UpdateInfoOnCursorPosition(column-1); - DisplaySliders(i,column-1); - } - int vis = clicked_item->data(column,Qt::CheckStateRole).toInt(); - std::string overlay_type = clicked_item->data(1,Qt::UserRole).toString().toStdString(); - int overlay_index=0; - for (int child = 0; child < current_row->childCount(); child++) { - if (current_row->child(child)->data(1,Qt::UserRole).toString().toStdString() == overlay_type) - overlay_index++; - if (current_row->child(child) == clicked_item) break; - } - clicked_slicer->SetActorVisibility( - clicked_item->data(1,Qt::UserRole).toString().toStdString(), overlay_index-1,vis); + } + else { + // Branch of the clicked one: get check status from actor visibility in slicer + // and toggle the clicked one + + // Parent + bool vis = clickedSlicer->GetActorVisibility("image", 0); + bool draw = clickedSlicer->GetRenderer()->GetDraw(); + + // Update slicer (after getting visibility) + mSlicerManagers[slicerManagerIndex]->UpdateSlicer(column-1, true); + mSlicerManagers[slicerManagerIndex]->UpdateInfoOnCursorPosition(column-1); + DisplaySliders(slicerManagerIndex, column-1); + if(!draw) { + // We were not on this branch so far => force visibility + vis = true; } - } else if (current_row->data(column,Qt::CheckStateRole).toInt() > 0) { - current_row->setData(column,Qt::CheckStateRole,0); - mSlicerManagers[i]->UpdateSlicer(column-1,0); - std::map overlay_counts; - for (int child = 0; child < current_row->childCount(); child++) { - std::string overlay_type = - current_row->child(child)->data(1,Qt::UserRole).toString().toStdString(); - overlay_counts[overlay_type]++; - current_row->child(child)->setData(column,Qt::CheckStateRole,0); - vvSlicer * current_slicer=mSlicerManagers[i]->GetSlicer(column-1); - current_slicer->SetActorVisibility(overlay_type,overlay_counts[overlay_type]-1,false); + else if(clickedParentItem == clickedItem) { + // Toggle + vis = !vis; + } + clickedSlicer->SetActorVisibility("image", 0, vis); + clickedParentItem->setData(column, Qt::CheckStateRole, vis?2:0); + + // Children + std::map actorTypeCounts; + for (int iChild = 0; iChild < clickedParentItem->childCount(); iChild++) { + QTreeWidgetItem* currentChildItem = clickedParentItem->child(iChild); + std::string actorType = currentChildItem->data(1,Qt::UserRole).toString().toStdString(); + vis = clickedSlicer->GetActorVisibility(actorType, actorTypeCounts[actorType]); + if(currentChildItem == clickedItem) { + // Toggle or force visibility if it was not on this branch so far + vis = !draw || !vis; + clickedSlicer->SetActorVisibility(actorType, actorTypeCounts[actorType], vis); + } + currentChildItem->setData(column, Qt::CheckStateRole, vis?2:0); + actorTypeCounts[actorType]++; } } - //mSlicerManagers[i]->SetColorMap(-1); - mSlicerManagers[i]->SetColorMap(); } - mSlicerManagers[index]->GetSlicer(column-1)->Render(); + + clickedSlicer->Render(); } //------------------------------------------------------------------------------ @@ -1821,8 +1822,6 @@ void vvMainWindow::AddOverlayImage(int index, QString file) for (int j = 1; j <= 4; j++) { item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole)); - mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("overlay",0, - DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt()); } //Create the buttons for reload and close @@ -1943,8 +1942,6 @@ void vvMainWindow::AddFusionImage(int index, QString file) for (int j = 1; j <= 4; j++) { item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole)); - mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("fusion",0, - DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt()); } //Create the buttons for reload and close @@ -2028,8 +2025,6 @@ void vvMainWindow::AddFieldEntry(QString filename,int index,bool from_disk) for (int j = 1; j <= 4; j++) { item->setData(j,Qt::CheckStateRole,DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole)); - mSlicerManagers[index]->GetSlicer(j-1)->SetActorVisibility("vector",0, - DataTree->topLevelItem(index)->data(j,Qt::CheckStateRole).toInt()); } //Create the buttons for reload and close @@ -2790,6 +2785,7 @@ vvSlicerManager* vvMainWindow::AddImage(vvImage::Pointer image,std::string filen //create an item in the tree with good settings QTreeWidgetItem *item = new QTreeWidgetItem(); item->setData(0,Qt::UserRole,slicer_manager->GetFileName().c_str());//files[i].c_str()); + item->setData(1,Qt::UserRole,tr("image")); item->setData(COLUMN_IMAGE_NAME,Qt::DisplayRole,slicer_manager->GetFileName().c_str());//filename.c_str()); qApp->processEvents(); diff --git a/vv/vvSlicer.cxx b/vv/vvSlicer.cxx index c9d9be2..d934d26 100644 --- a/vv/vvSlicer.cxx +++ b/vv/vvSlicer.cxx @@ -372,7 +372,7 @@ void vvSlicer::SetOverlay(vvImage::Pointer overlay) mOverlayActor = vtkSmartPointer::New(); mOverlayActor->SetInput(mOverlayMapper->GetOutput()); mOverlayActor->SetPickable(0); - mOverlayActor->SetVisibility(false); + mOverlayActor->SetVisibility(true); mOverlayActor->SetOpacity(0.5); } @@ -415,7 +415,7 @@ void vvSlicer::SetFusion(vvImage::Pointer fusion) mFusionActor = vtkSmartPointer::New(); mFusionActor->SetInput(mFusionMapper->GetOutput()); mFusionActor->SetPickable(0); - mFusionActor->SetVisibility(false); + mFusionActor->SetVisibility(true); mFusionActor->SetOpacity(0.7); this->GetRenderer()->AddActor(mFusionActor); } @@ -428,25 +428,50 @@ void vvSlicer::SetFusion(vvImage::Pointer fusion) //------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +bool vvSlicer::GetActorVisibility(const std::string& actor_type, int overlay_index) +{ + bool vis = false; + if (actor_type == "image") { + vis = this->ImageActor->GetVisibility(); + } + else if (actor_type == "vector") { + vis = this->mVFActor->GetVisibility(); + } + else if (actor_type == "overlay") { + vis = this->mOverlayActor->GetVisibility(); + } + else if (actor_type == "fusion") { + vis = this->mFusionActor->GetVisibility(); + } + else if (actor_type == "contour") + vis = this->mSurfaceCutActors[overlay_index]->GetActor()->GetVisibility(); + + return vis; +} +//------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ void vvSlicer::SetActorVisibility(const std::string& actor_type, int overlay_index ,bool vis) { - if (actor_type == "vector") { + if (actor_type == "image") { + this->ImageActor->SetVisibility(vis); + } + else if (actor_type == "vector") { this->mVFActor->SetVisibility(vis); } - if (actor_type == "overlay") { + else if (actor_type == "overlay") { this->mOverlayActor->SetVisibility(vis); } - if (actor_type == "fusion") { + else if (actor_type == "fusion") { this->mFusionActor->SetVisibility(vis); } - if (actor_type == "contour") + else if (actor_type == "contour") this->mSurfaceCutActors[overlay_index]->GetActor()->SetVisibility(vis); UpdateDisplayExtent(); } //------------------------------------------------------------------------------ - //------------------------------------------------------------------------------ void vvSlicer::SetVF(vvImage::Pointer vf) { diff --git a/vv/vvSlicer.h b/vv/vvSlicer.h index 95ec75e..1cdb9f4 100644 --- a/vv/vvSlicer.h +++ b/vv/vvSlicer.h @@ -80,9 +80,10 @@ public: return mFusion; } - /**Set an actor's visibility ("overlay, fusion, vf, contour...") + /**Get/Set an actor's visibility ("overlay, fusion, vf, contour...") Overlay index is the index of the overlay by type, eg. if there are 5 contours and we want to activate the 3rd one, pass 2 **/ + bool GetActorVisibility(const std::string& actor_type, int overlay_index); void SetActorVisibility(const std::string& actor_type, int overlay_index,bool vis); void RemoveActor(const std::string& actor_type, int overlay_index); diff --git a/vv/vvSlicerManager.cxx b/vv/vvSlicerManager.cxx index 7bf8ed6..9ff5a3c 100644 --- a/vv/vvSlicerManager.cxx +++ b/vv/vvSlicerManager.cxx @@ -1049,14 +1049,6 @@ void vvSlicerManager::SetLocalColorWindowing(const int slicer) //---------------------------------------------------------------------------- -//---------------------------------------------------------------------------- -void vvSlicerManager::SetColorMap() -{ - SetColorMap(mColorMap); -} -//---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- void vvSlicerManager::SetColorMap(int colormap) { @@ -1128,7 +1120,7 @@ void vvSlicerManager::SetColorMap(int colormap) fusLUT = NULL; } for ( unsigned int i = 0; i < mSlicers.size(); i++) { - if (mSlicers[i]->GetOverlay() && mSlicers[i]->GetOverlayActor()->GetVisibility()) { + if (mSlicers[i]->GetOverlay()) { vtkLookupTable* supLUT = vtkLookupTable::New(); supLUT->SetTableRange(range[0],range[1]); supLUT->SetValueRange(1,1); @@ -1154,7 +1146,7 @@ void vvSlicerManager::SetColorMap(int colormap) } else { mSlicers[i]->GetWindowLevel()->SetLookupTable(LUT); } - if (mSlicers[i]->GetFusion() && mSlicers[i]->GetFusionActor()->GetVisibility()) { + if (mSlicers[i]->GetFusion()) { mSlicers[i]->GetFusionActor()->SetOpacity(double(mFusionOpacity)/100); mSlicers[i]->GetFusionMapper()->SetLookupTable(fusLUT); mSlicers[i]->GetFusionMapper()->SetWindow(mFusionWindow); diff --git a/vv/vvSlicerManager.h b/vv/vvSlicerManager.h index 680a59b..a1b532e 100644 --- a/vv/vvSlicerManager.h +++ b/vv/vvSlicerManager.h @@ -113,7 +113,6 @@ class vvSlicerManager : public QObject { void SetColorLevel(double s); void SetLocalColorWindowing(const int slicer); void SetOpacity(int i, double factor); - void SetColorMap(); void SetColorMap(int colormap); void SetPreset(int preset); void SetOverlayColor(int color) {