1 /*=========================================================================
2 Program: vv http://www.creatis.insa-lyon.fr/rio/vv
5 - University of LYON http://www.universite-lyon.fr/
6 - Léon Bérard cancer center http://oncora1.lyon.fnclcc.fr
7 - CREATIS CNRS laboratory http://www.creatis.insa-lyon.fr
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the copyright notices for more information.
13 It is distributed under dual licence
15 - BSD See included LICENSE.txt file
16 - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
17 ======================================================================-====*/
20 #include "vvToolStructureSetManager.h"
21 #include "vvImageReader.h"
22 #include "vvStructureSetActor.h"
24 #include "vvROIActor.h"
27 #include <QFileDialog>
28 #include <QMessageBox>
29 #include <QColorDialog>
32 #include <vtkLookupTable.h>
33 #include <vtkRenderWindow.h>
35 //------------------------------------------------------------------------------
36 // Create the tool and automagically (I like this word) insert it in
37 // the main window menu.
38 ADD_TOOL(vvToolStructureSetManager);
39 //------------------------------------------------------------------------------
41 int vvToolStructureSetManager::m_NumberOfTool = 0;
42 std::vector<vvSlicerManager*> vvToolStructureSetManager::mListOfInputs;
43 std::map<vvSlicerManager*, vvToolStructureSetManager*> vvToolStructureSetManager::mListOfOpenTool;
45 //------------------------------------------------------------------------------
46 vvToolStructureSetManager::vvToolStructureSetManager(vvMainWindowBase * parent,
48 vvSlicerManager * current):
49 vvToolWidgetBase(parent, f),
50 // if Qt::Widget -> No dialog in this case (in tab) ; PB = "invisible widget on menu" !
51 // if "f" normal widget
52 vvToolBase<vvToolStructureSetManager>(parent),
53 Ui::vvToolStructureSetManager()
55 Ui_vvToolStructureSetManager::setupUi(mToolWidget);
57 // this->setFixedWidth(120);
59 mCurrentStructureSetActor = 0;
60 connect(mCloseButton, SIGNAL(clicked()), this, SLOT(close()));
61 mCloseButton->setVisible(false);
63 mTree->header()->resizeSection(0, 30);
64 mMainWindowBase->GetTab()->setTabIcon(mTabNumber, GetToolIcon());
65 mCurrentStructureSet = NULL;
66 mCurrentStructureSetIndex = -1;
67 mGroupBoxROI->setEnabled(false);
68 mCurrentROIActor = NULL;
69 mIsAllVisibleEnabled = false;
70 mNumberOfVisibleROI = 0;
71 mNumberOfVisibleContourROI = 0;
72 mDefaultLUTColor = vtkLookupTable::New();
73 for(int i=0; i<mDefaultLUTColor->GetNumberOfTableValues(); i++) {
74 double r = (rand()/(RAND_MAX+1.0));
75 double v = (rand()/(RAND_MAX+1.0));
76 double b = (rand()/(RAND_MAX+1.0));
77 mDefaultLUTColor->SetTableValue(i, r, v, b);
78 // std::cout << "mDefaultLUTColor->SetTableValue(" << i << ", " << r << ", " << v << ", " << b << ");" << std::endl;
80 #include "vvDefaultLut.h"
83 if (current == NULL) {
84 MustOpenDialogWhenCreated = true;
85 AddInputSelector("Select image");
88 MustOpenDialogWhenCreated = false;
89 mMainButtonBox->setEnabled(true);
90 mCurrentSlicerManager = current;
91 mCurrentImage = mCurrentSlicerManager->GetImage();
92 mToolWidget->setEnabled(true);
93 InputIsSelected(mCurrentSlicerManager);
96 //------------------------------------------------------------------------------
99 //------------------------------------------------------------------------------
100 vvToolStructureSetManager::~vvToolStructureSetManager()
103 // DD(mStructureSetsList.size());
104 // DD(mStructureSetActorsList.size());
105 for(uint i=0; i<mStructureSetsList.size();i++) {
107 delete mStructureSetsList[i];
108 delete mStructureSetActorsList[i];
111 //------------------------------------------------------------------------------
114 //------------------------------------------------------------------------------
116 void vvToolStructureSetManager::Initialize() {
117 SetToolName("ROIManager");
118 SetToolMenuName("Display ROI");
119 SetToolIconFilename(":/common/icons/tool-roi.png");
120 SetToolTip("Display ROI from label image.");
121 SetToolExperimental(true);
123 //------------------------------------------------------------------------------
126 //------------------------------------------------------------------------------
127 void vvToolStructureSetManager::InputIsSelected(vvSlicerManager *m)
129 //int mTabNumber = parent->GetTab()->addTab(this, "");
130 // this->setFixedWidth(120);
131 //this->setPreferedHeight(441);
133 if (mCurrentImage->GetNumberOfDimensions() != 3) {
134 QMessageBox::information(this,tr("Sorry only 3D yet"), tr("Sorry only 3D yet"));
138 HideInputSelector(); // splitter
139 mToolInputSelectionWidget->hide();
140 mLabelInputInfo->setText(QString("%1").arg(m->GetFileName().c_str()));
143 // if (!isWindow()) {
144 mListOfInputs.push_back(mCurrentSlicerManager);
145 mListOfOpenTool[mCurrentSlicerManager] = this;
148 // Connect open menus
149 connect(mOpenBinaryButton, SIGNAL(clicked()), this, SLOT(OpenBinaryImage()));
150 connect(mTree, SIGNAL(itemSelectionChanged()), this, SLOT(SelectedItemChangedInTree()));
151 connect(mCheckBoxShow, SIGNAL(toggled(bool)), this, SLOT(VisibleROIToggled(bool)));
152 connect(mOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(OpacityChanged(int)));
153 connect(mChangeColorButton, SIGNAL(clicked()), this, SLOT(ChangeColor()));
154 connect(mContourCheckBoxShow, SIGNAL(toggled(bool)), this, SLOT(VisibleContourROIToggled(bool)));
155 connect(mChangeContourColorButton, SIGNAL(clicked()), this, SLOT(ChangeContourColor()));
156 connect(mContourWidthSpinBox, SIGNAL(valueChanged(int)), this, SLOT(ChangeContourWidth(int)));
157 connect(mReloadButton, SIGNAL(clicked()), this, SLOT(ReloadCurrentROI()));
158 connect(mCheckBoxShowAll, SIGNAL(stateChanged(int)), this, SLOT(AllVisibleROIToggled(int)));
159 connect(mContourCheckBoxShowAll, SIGNAL(toggled(bool)), this, SLOT(AllVisibleContourROIToggled(bool)));
161 // Browse to load image
162 if (MustOpenDialogWhenCreated)
165 //------------------------------------------------------------------------------
168 //------------------------------------------------------------------------------
169 void vvToolStructureSetManager::Open(int type) {
171 case 0: OpenBinaryImage(); return; // Open binary image;
172 case 1: DD("TODO"); return; // Open DICOM RT
173 case 2: DD("TODO"); return; // Open mesh
174 default: std::cerr << "Error ????" << std::endl; exit(0);
177 //------------------------------------------------------------------------------
180 //------------------------------------------------------------------------------
181 void vvToolStructureSetManager::AddRoiInTreeWidget(clitk::DicomRT_ROI * roi, QTreeWidget * ww) {
182 QTreeWidgetItem * w = new QTreeWidgetItem(ww);
183 w->setText(0, QString("%1").arg(roi->GetROINumber()));
184 w->setText(1, QString("%1").arg(roi->GetName().c_str()));
185 QBrush brush(QColor(roi->GetDisplayColor()[0]*255, roi->GetDisplayColor()[1]*255, roi->GetDisplayColor()[2]*255));
186 brush.setStyle(Qt::SolidPattern);
187 w->setBackground(2, brush);
188 mMapROIToTreeWidget[roi] = w;
189 mMapTreeWidgetToROI[w] = roi;
190 mTree->resizeColumnToContents(0);
191 mTree->resizeColumnToContents(1);
193 //------------------------------------------------------------------------------
196 //------------------------------------------------------------------------------
197 void vvToolStructureSetManager::UpdateStructureSetInTreeWidget(int index, clitk::DicomRT_StructureSet * s) {
199 const std::vector<clitk::DicomRT_ROI*> & rois = s->GetListOfROI();
200 for(unsigned int i=0; i<rois.size(); i++) {
201 if (mMapROIToTreeWidget.find(rois[i]) == mMapROIToTreeWidget.end())
202 AddRoiInTreeWidget(rois[i], mTree); // replace mTree with ss if several SS
205 //------------------------------------------------------------------------------
208 //------------------------------------------------------------------------------
209 int vvToolStructureSetManager::AddStructureSet(clitk::DicomRT_StructureSet * mStructureSet) {
210 // Create actor for this SS
212 vvStructureSetActor * mStructureSetActor = new vvStructureSetActor;
214 mStructureSetActor->SetStructureSet(mStructureSet);
215 mStructureSetActor->SetSlicerManager(mCurrentSlicerManager);
216 // Insert in lists and get index
217 mStructureSetsList.push_back(mStructureSet);
218 mStructureSetActorsList.push_back(mStructureSetActor);
219 int index = mStructureSetsList.size()-1;
223 //------------------------------------------------------------------------------
226 //------------------------------------------------------------------------------
227 void vvToolStructureSetManager::OpenBinaryImage()
230 if (mCurrentStructureSet == NULL) {
231 if (mStructureSetsList.size() == 0) { // Create a default SS
232 clitk::DicomRT_StructureSet * mStructureSet = new clitk::DicomRT_StructureSet;
233 index = AddStructureSet(mStructureSet);
235 else { // Get first SS
239 index = mCurrentStructureSetIndex;
241 mCurrentStructureSet = mStructureSetsList[index];
242 mCurrentStructureSetActor = mStructureSetActorsList[index];
243 mCurrentStructureSetIndex = index;
245 QString Extensions = "Images files ( *.mhd *.hdr *.his)";
246 Extensions += ";;All Files (*)";
247 QStringList filename =
248 QFileDialog::getOpenFileNames(this,tr("Open binary image"),
249 mMainWindowBase->GetInputPathName(),Extensions);
250 if (filename.size() == 0) return;
251 mLoadedROIIndex.clear();
252 for(int i=0; i<filename.size(); i++) {
254 QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
255 vvImageReader * mReader = new vvImageReader;
256 std::vector<std::string> filenames;
257 filenames.push_back(filename[i].toStdString());
258 mReader->SetInputFilenames(filenames);
259 mReader->Update(IMAGE);
260 QApplication::restoreOverrideCursor();
262 if (mReader->GetLastError().size() != 0) {
263 std::cerr << "Error while reading " << filename[i].toStdString() << std::endl;
264 QString error = "Cannot open file \n";
265 error += mReader->GetLastError().c_str();
266 QMessageBox::information(this,tr("Reading problem"),error);
270 vvImage::Pointer binaryImage = mReader->GetOutput();
271 AddImage(binaryImage, filename[i].toStdString(), mBackgroundValueSpinBox->value());
276 //------------------------------------------------------------------------------
279 //------------------------------------------------------------------------------
280 void vvToolStructureSetManager::UpdateImage()
282 // Update the TreeWidget
283 UpdateStructureSetInTreeWidget(mCurrentStructureSetIndex, mCurrentStructureSet);
284 // Render loaded ROIs (the first is sufficient)
285 for(unsigned int i=0; i<mLoadedROIIndex.size(); i++) {
286 mCurrentStructureSetActor->GetROIActor(mLoadedROIIndex[i])->Update();
288 for(int i=0; i<mCurrentSlicerManager->GetNumberOfSlicers(); i++) {
289 mCurrentSlicerManager->GetSlicer(i)->Render();
292 //------------------------------------------------------------------------------
295 //------------------------------------------------------------------------------
296 void vvToolStructureSetManager::AddImage(vvImage * binaryImage, std::string filename,
297 double BG, bool m_modeBG)
299 // Check current structure set
301 if (mCurrentStructureSet == NULL) {
302 if (mStructureSetsList.size() == 0) { // Create a default SS
303 clitk::DicomRT_StructureSet * mStructureSet = new clitk::DicomRT_StructureSet;
304 index = AddStructureSet(mStructureSet);
306 else { // Get first SS
310 index = mCurrentStructureSetIndex;
312 mCurrentStructureSet = mStructureSetsList[index];
313 mCurrentStructureSetActor = mStructureSetActorsList[index];
314 mCurrentStructureSetIndex = index;
317 int dim = mCurrentImage->GetNumberOfDimensions();
318 int bin_dim = binaryImage->GetNumberOfDimensions();
319 if (dim < bin_dim) { ////////// TO CHANGE FOR 3D/4D
320 std::ostringstream os;
321 os << "Error. Loaded binary image is " << bin_dim
322 << "D while selected image is " << dim << "D" << std::endl;
323 QMessageBox::information(this,tr("Reading problem"),os.str().c_str());
327 // Add a new roi to the structure
328 int n = mCurrentStructureSet->AddBinaryImageAsNewROI(binaryImage, filename);
329 mLoadedROIIndex.push_back(n);
331 mCurrentStructureSet->GetROI(n)->SetBackgroundValueLabelImage(BG);
333 mCurrentStructureSet->GetROI(n)->SetForegroundValueLabelImage(BG);
336 if (n<mDefaultLUTColor->GetNumberOfTableValues ()) {
337 double * color = mDefaultLUTColor->GetTableValue(n % mDefaultLUTColor->GetNumberOfTableValues ());
338 mCurrentStructureSet->GetROI(n)->SetDisplayColor(color[0], color[1], color[2]);
341 // Add a new roi actor
342 mCurrentStructureSetActor->CreateNewROIActor(n, m_modeBG);
344 // CheckBox for "All"
345 if (mCurrentStructureSetActor->GetROIActor(n)->IsVisible())
346 mNumberOfVisibleROI++;
347 if (mCurrentStructureSetActor->GetROIActor(n)->IsContourVisible())
348 mNumberOfVisibleContourROI++;
349 UpdateAllROIStatus();
351 //------------------------------------------------------------------------------
354 //------------------------------------------------------------------------------
355 void vvToolStructureSetManager::apply()
359 //------------------------------------------------------------------------------
362 //------------------------------------------------------------------------------
363 bool vvToolStructureSetManager::close()
365 return vvToolWidgetBase::close();
367 //------------------------------------------------------------------------------
370 //------------------------------------------------------------------------------
371 void vvToolStructureSetManager::closeEvent(QCloseEvent *event)
373 // DD("vvToolStructureSetManager::closeEvent()");
374 std::vector<vvSlicerManager*>::iterator iter = std::find(mListOfInputs.begin(), mListOfInputs.end(), mCurrentSlicerManager);
375 if (iter != mListOfInputs.end()) mListOfInputs.erase(iter);
377 // DD("how delete mListOfOpenTool ???");
378 mListOfOpenTool.erase(mCurrentSlicerManager);
380 mCheckBoxShowAll->setCheckState(Qt::Unchecked);
381 mContourCheckBoxShowAll->setCheckState(Qt::Unchecked);
382 if (mCurrentSlicerManager != 0) mCurrentSlicerManager->Render();
383 if (mCurrentStructureSetActor) {
384 for(int i=0; i<mCurrentStructureSetActor->GetNumberOfROIs(); i++) {
386 mCurrentStructureSetActor->GetROIList()[i]->SetVisible(false);
387 mCurrentStructureSetActor->GetROIList()[i]->SetContourVisible(false);
388 delete mCurrentStructureSetActor->GetROIList()[i];
393 if (m_NumberOfTool == 1) {
394 mMainWindow->GetTab()->removeTab(mTabNumber);
400 //------------------------------------------------------------------------------
403 //------------------------------------------------------------------------------
404 // CURRENT ROI INTERACTION
405 //------------------------------------------------------------------------------
408 //------------------------------------------------------------------------------
409 void vvToolStructureSetManager::SelectedItemChangedInTree() {
410 // Search which roi is selected
411 QList<QTreeWidgetItem *> l = mTree->selectedItems();
413 mCurrentROIActor = NULL;
415 mGroupBoxROI->setEnabled(false);
418 QTreeWidgetItem * w = l[0];
419 if (mMapTreeWidgetToROI.find(w) == mMapTreeWidgetToROI.end()) {
420 mCurrentROIActor = NULL;
422 mGroupBoxROI->setEnabled(false);
425 clitk::DicomRT_ROI * roi = mMapTreeWidgetToROI[w];
426 // Get selected roi actor
427 vvROIActor * actor = mStructureSetActorsList[mCurrentStructureSetIndex]->GetROIActor(roi->GetROINumber());
429 mCurrentROIActor = actor;
432 mGroupBoxROI->setEnabled(true);
433 mROInameLabel->setText(roi->GetName().c_str());
434 mCheckBoxShow->setChecked(actor->IsVisible());
435 mContourCheckBoxShow->setChecked(actor->IsContourVisible());
436 mContourWidthSpinBox->setValue(actor->GetContourWidth());
438 // Warning -> avoir unuseful Render here by disconnect slider
439 disconnect(mOpacitySlider, SIGNAL(valueChanged(int)),
440 this, SLOT(OpacityChanged(int)));
441 mOpacitySlider->setValue((int)lrint(actor->GetOpacity()*100));
442 mOpacitySpinBox->setValue((int)lrint(actor->GetOpacity()*100));
443 connect(mOpacitySlider, SIGNAL(valueChanged(int)),
444 this, SLOT(OpacityChanged(int)));
448 mCurrentSlicerManager->Render();
450 //------------------------------------------------------------------------------
453 //------------------------------------------------------------------------------
454 void vvToolStructureSetManager::UpdateAllROIStatus() {
456 int nb = mCurrentStructureSetActor->GetROIList().size();
457 for(int i=0; i<nb; i++) {
458 if (mCurrentStructureSetActor->GetROIList()[i]->IsVisible()) {
463 disconnect(mCheckBoxShowAll, SIGNAL(stateChanged(int)), this, SLOT(AllVisibleROIToggled(int)));
464 disconnect(mContourCheckBoxShowAll, SIGNAL(toggled(bool)), this, SLOT(AllVisibleContourROIToggled(bool)));
465 if (nbVisible == nb) mCheckBoxShowAll->setCheckState(Qt::Checked);
467 if (nbVisible == 0) mCheckBoxShowAll->setCheckState(Qt::Unchecked);
468 else mCheckBoxShowAll->setCheckState(Qt::PartiallyChecked);
470 connect(mContourCheckBoxShowAll, SIGNAL(toggled(bool)), this, SLOT(AllVisibleContourROIToggled(bool)));
471 connect(mCheckBoxShowAll, SIGNAL(stateChanged(int)), this, SLOT(AllVisibleROIToggled(int)));
473 //------------------------------------------------------------------------------
475 //------------------------------------------------------------------------------
476 void vvToolStructureSetManager::VisibleROIToggled(bool b) {
477 if (mCurrentROIActor == NULL) return;
478 if (b == mCurrentROIActor->IsVisible()) return; // nothing to do
479 mCurrentROIActor->SetVisible(b);
480 UpdateAllROIStatus();
481 mCurrentSlicerManager->Render();
483 //------------------------------------------------------------------------------
486 //------------------------------------------------------------------------------
487 void vvToolStructureSetManager::VisibleContourROIToggled(bool b) {
488 if (mCurrentROIActor == NULL) return;
489 if (mCurrentROIActor->IsContourVisible() == b) return; // nothing to do
490 mCurrentROIActor->SetContourVisible(b);
491 mCurrentROIActor->UpdateColor();
492 mCurrentSlicerManager->Render();
494 //------------------------------------------------------------------------------
497 //------------------------------------------------------------------------------
498 void vvToolStructureSetManager::OpacityChanged(int v) {
499 if (mCurrentROIActor == NULL) return;
500 mCurrentROIActor->SetOpacity((double)v/100.0);
501 mCurrentROIActor->UpdateColor();
502 mCurrentSlicerManager->Render();
504 //------------------------------------------------------------------------------
507 //------------------------------------------------------------------------------
508 void vvToolStructureSetManager::AllVisibleROIToggled(int b) {
510 if ((mCheckBoxShowAll->checkState() == Qt::Checked) ||
511 (mCheckBoxShowAll->checkState() == Qt::PartiallyChecked)) status = true;
513 for(int i=0; i<mCurrentStructureSetActor->GetNumberOfROIs(); i++) {
514 mCurrentStructureSetActor->GetROIList()[i]->SetVisible(status);
516 if (status) mCheckBoxShowAll->setCheckState(Qt::Checked);
517 else mCheckBoxShowAll->setCheckState(Qt::Unchecked);
518 mCheckBoxShow->setChecked(status);
519 mCurrentSlicerManager->Render();
521 //------------------------------------------------------------------------------
524 //------------------------------------------------------------------------------
525 void vvToolStructureSetManager::AllVisibleContourROIToggled(bool b) {
527 if ((mContourCheckBoxShowAll->checkState() == Qt::Checked) ||
528 (mContourCheckBoxShowAll->checkState() == Qt::PartiallyChecked)) status = true;
530 for(int i=0; i<mCurrentStructureSetActor->GetNumberOfROIs(); i++) {
531 mCurrentStructureSetActor->GetROIList()[i]->SetContourVisible(status);
533 // Update current selection
534 if (status) mContourCheckBoxShowAll->setCheckState(Qt::Checked);
535 else mContourCheckBoxShowAll->setCheckState(Qt::Unchecked);
536 mContourCheckBoxShow->setChecked(status);
537 mCurrentSlicerManager->Render();
539 //------------------------------------------------------------------------------
542 //------------------------------------------------------------------------------
543 void vvToolStructureSetManager::ChangeColor() {
545 color.setRgbF(mCurrentROIActor->GetROI()->GetDisplayColor()[0],
546 mCurrentROIActor->GetROI()->GetDisplayColor()[1],
547 mCurrentROIActor->GetROI()->GetDisplayColor()[2]);
548 QColor c = QColorDialog::getColor(color, this, "Choose the ROI color");
549 mCurrentROIActor->GetROI()->SetDisplayColor(c.redF(), c.greenF(), c.blueF());
550 mCurrentROIActor->UpdateColor();
552 QTreeWidgetItem * w = mMapROIToTreeWidget[mCurrentROI];
553 QBrush brush(QColor(mCurrentROI->GetDisplayColor()[0]*255,
554 mCurrentROI->GetDisplayColor()[1]*255,
555 mCurrentROI->GetDisplayColor()[2]*255));
556 brush.setStyle(Qt::SolidPattern);
557 w->setBackground(2, brush);
559 mCurrentSlicerManager->Render();
561 //------------------------------------------------------------------------------
564 //------------------------------------------------------------------------------
565 void vvToolStructureSetManager::ChangeContourColor() {
567 color.setRgbF(mCurrentROIActor->GetContourColor()[0],
568 mCurrentROIActor->GetContourColor()[1],
569 mCurrentROIActor->GetContourColor()[2]);
570 QColor c = QColorDialog::getColor(color, this, "Choose the contour color");
571 mCurrentROIActor->SetContourColor(c.redF(), c.greenF(), c.blueF());
572 mCurrentROIActor->UpdateColor();
573 mCurrentSlicerManager->Render();
575 //------------------------------------------------------------------------------
578 //------------------------------------------------------------------------------
579 void vvToolStructureSetManager::ChangeContourWidth(int n) {
580 mCurrentROIActor->SetContourWidth(n);
581 mCurrentROIActor->UpdateColor();
582 mCurrentSlicerManager->Render();
584 //------------------------------------------------------------------------------
587 //------------------------------------------------------------------------------
588 void vvToolStructureSetManager::ReloadCurrentROI() {
590 vvImageReader * mReader = new vvImageReader;
591 mReader->SetInputFilename(mCurrentROI->GetFilename());
592 mReader->Update(IMAGE);
593 if (mReader->GetLastError() != "") {
594 QMessageBox::information(mMainWindowBase, tr("Sorry, error. Could not reload"), mReader->GetLastError().c_str());
597 // delete mCurrentROI->GetImage();
598 // DD(mCurrentROI->GetImage()->GetFirstVTKImageData()->GetDataReleased());
599 // DD(mCurrentROI->GetImage()->GetFirstVTKImageData()->GetReferenceCount());
600 mCurrentROI->GetImage()->GetFirstVTKImageData()->ReleaseData();
601 // DD(mCurrentROI->GetImage()->GetFirstVTKImageData()->GetDataReleased());
602 mCurrentROI->SetImage(mReader->GetOutput());
605 mCurrentROIActor->UpdateImage();
606 mCurrentSlicerManager->Render();
608 //------------------------------------------------------------------------------
611 //------------------------------------------------------------------------------
612 void vvToolStructureSetManager::CheckInputList(std::vector<vvSlicerManager*> & l, int & index)
614 for(unsigned int i=0; i<l.size(); i++) {
615 std::vector<vvSlicerManager*>::iterator iter = std::find(mListOfInputs.begin(), mListOfInputs.end(), l[i]);
616 if (iter != mListOfInputs.end()) {
617 for(unsigned int j=i;j<l.size(); j++) l[j] = l[j+1];
619 if (index == (int)i) index = 0;
624 //------------------------------------------------------------------------------
627 //------------------------------------------------------------------------------
629 vvToolStructureSetManager * vvToolStructureSetManager::AddImage(vvSlicerManager * m, std::string name, vvImage::Pointer image, double BG, bool m_modeBG)
631 // If the tool is open for this vvSlicerManager, use it and return
632 if (mListOfOpenTool[m]) {
633 vvToolStructureSetManager * tool = mListOfOpenTool[m];
634 tool->AddImage(image, name, BG, m_modeBG);
639 // If the tool is not open, create it
640 vvToolStructureSetManager * tool = new vvToolStructureSetManager
641 (CREATOR(vvToolStructureSetManager)->GetMainWindow(), Qt::Dialog, m);
642 tool->AddImage(image, name, BG, m_modeBG);
647 //------------------------------------------------------------------------------