35 #ifndef __TrackContainer_h
36 #define __TrackContainer_h
45 #include "boost/multi_index_container.hpp"
46 #include "boost/multi_index/member.hpp"
47 #include "boost/multi_index/hashed_index.hpp"
48 #include "boost/multi_index/ordered_index.hpp"
49 #include "boost/numeric/conversion/cast.hpp"
50 #include "boost/lexical_cast.hpp"
52 #include "vtkProperty.h"
53 #include "vtkPolyData.h"
55 #include "vtkMapper.h"
56 #include "vtkPointData.h"
57 #include "vtkDoubleArray.h"
60 #include "QGoGUILibConfigure.h"
63 #include "vtkMutableDirectedGraph.h"
215 typedef multi_index::multi_index_container<
217 boost::multi_index::indexed_by<
218 boost::multi_index::ordered_unique<
219 boost::multi_index::tag< TraceID >,
222 boost::multi_index::ordered_non_unique<
223 boost::multi_index::tag< CollectionID >,
224 BOOST_MULTI_INDEX_MEMBER(
TraceStructure,
unsigned int, CollectionID)
226 boost::multi_index::ordered_non_unique<
227 boost::multi_index::tag< Highlighted >,
230 boost::multi_index::ordered_non_unique<
231 boost::multi_index::tag< Visible >,
299 bool UpdateTrackStructurePolyData(
const TrackStructure& iTrackStructure);
316 template<
class TList >
317 void UpdateTracksStrings(
const TList& iTrackList)
319 typename TList::const_iterator it = iTrackList.begin();
320 unsigned int temp = 0;
322 while(it!=iTrackList.end())
324 temp =
static_cast< unsigned int >(*it);
329 emit NeedMeshesInfoForImportedTrack(temp);
339 void ImportTrackInCurrentElement(std::map< unsigned int, double*>& iMeshes);
363 TrackStructure* UpdatePointsForATrack(
const unsigned int& iTrackID,
364 std::list< double*>& iListCenterBoundingBoxes);
373 void UpdateElementHighlighting(
const unsigned int& TraceId)
375 Qt::CheckState state;
376 Superclass::UpdateElementHighlightingWithTraceID(TraceId,
378 emit TracePicked(TraceId, state);
389 void UpdateCollectionHighlighting(
const unsigned int& iTraceId);
395 void GetRootIterator(
396 MultiIndexContainerTraceIDIterator& iMotherIterator);
404 void UpdateElementVisibility(
const unsigned int& iTraceID,
const bool& iState)
406 Superclass::UpdateElementVisibilityWithTraceID(iTraceID, iState);
409 emit TraceVisibilityChanged(iTraceID, Qt::Checked );
412 emit TraceVisibilityChanged(iTraceID, Qt::Unchecked );
420 void MergeTrack(
const unsigned int& iId1,
const unsigned int& iId2);
427 void setTimeInterval(
const int& iTimeInterval);
434 int getTimeInterval();
450 double* GetBorderOfTheTrack(
const unsigned int& iTrackID,
451 const BorderType& iBorder);
459 void SetListOfDivisions(std::list<unsigned int>& iListOfDivisions);
470 void AddDivision(
const unsigned int& iMotherID,
471 const unsigned int& iDaughter1ID,
472 const unsigned int& iDaughter2ID,
473 const bool& iVisible =
true);
482 std::vector<vtkActor* > CreateDivisionActor(vtkPolyData* iPolyData,
483 const bool& iVisible =
true);
490 void CreateDivisionPolydata(
const unsigned int& iMother);
497 std::list<unsigned int> GetSubLineage(
const unsigned int& iTrackID);
504 void UpdateSubLineage(MultiIndexContainerTraceIDIterator it,
505 std::list<unsigned int>& iList);
522 void UpdateDivisionScalar(
523 MultiIndexContainerTraceIDIterator& iMotherIterator,
524 const unsigned int& iDepth);
534 void UpdateCollectionColors(
const unsigned int& iTrackID,
535 const double* color);
541 void UpdateDivisionColor(
542 MultiIndexContainerTraceIDIterator& iMotherIterator,
543 const double* iColor);
551 void UpdateCollectionColorsData(
const unsigned int& iTrackID,
552 const double* color);
558 void UpdateDivisionColorData(
559 MultiIndexContainerTraceIDIterator& iMotherIterator,
560 const double* iColor);
568 unsigned int GetCollectionMaxDepth(
const unsigned int& iTrackRootID);
576 void UpdateCollectionMaxDepth(MultiIndexContainerTraceIDIterator& it,
577 const unsigned int& iDivisionDepth,
578 unsigned int& iLineageDepth);
584 unsigned int GetCollectionMinDepth(
const unsigned int& iTrackRootID );
592 void UpdateCollectionMinDepth( MultiIndexContainerTraceIDIterator& it,
593 const unsigned int& iDivisionDepth,
594 unsigned int& iLineageDepth);
600 unsigned int GetCollectionNumberOfDivisions(
601 const unsigned int& iTrackRootID);
608 void UpdateCollectionNumberOfDivisions(
609 MultiIndexContainerTraceIDIterator& it,
610 unsigned int& iNumberOfDivisions);
616 unsigned int GetCollectionNumberOfLeaves(
const unsigned int& iTrackRootID);
623 void UpdateCollectionNumberOfLeaves(MultiIndexContainerTraceIDIterator& it,
624 unsigned int& iNumberOfLeaves);
631 vtkMutableDirectedGraph* ExportLineage(
const unsigned int& iTrackID);
638 void SetCollectionColorCode(
const std::string& iColumnName,
639 const std::map<
unsigned int,
640 std::string >& iValues);
647 void SetDivisionRandomColor(
const std::string & iColumnName,
648 const std::map< unsigned int, std::string >& iValues);
659 void UpdateDivisionScalarData(MultiIndexContainerTraceIDIterator& it,
660 const std::string& iColumnName,
661 const double& iValue,
670 void SetScalarRangeForAllDivisions(
const double& iMin,
const double& iMax);
676 void SetLookupTableForAllDivisionsColorCoding(
const vtkLookupTable *iLut);
682 void RenderAllDivisionsWithOriginalColors();
695 void UpdateLineage(MultiIndexContainerTraceIDIterator& it,
696 vtkMutableDirectedGraph* iGraph,
697 unsigned int iPedrigree,
700 vtkDoubleArray* iDepthArray,
701 vtkDoubleArray* iIDArray);
705 void TracePicked(
unsigned int, Qt::CheckState);
708 void TraceVisibilityChanged(
unsigned int, Qt::CheckState);
711 void NeedMeshesInfoForImportedTrack(
unsigned int);
716 void UpdateLineageHighlightingFromTrackRootID(
unsigned int);
725 virtual void UpdateElementHighlightingWithGivenTraceIDs(
726 const QStringList& iList,
const Qt::CheckState& iCheck);
733 virtual void UpdateElementVisibilityWithGivenTraceIDs(
734 const QStringList& iList,
const Qt::CheckState& iCheck);
739 void ChangeColorCode(
const QString& iColorCode);
744 void ChangeDivisionsColorCode(
const QString& iColorCode);
753 void UpdateTracksRepresentation(
const double& iRadius,
754 const double& iRadius2,
755 const double& iWidth);
762 void HighlightCollection(
const unsigned int& iRootTrackID,
763 const bool& iHighlighted);
769 void UpdateCollectionHighlighted(MultiIndexContainerTraceIDIterator& it,
770 const bool& iHighlighted);
777 int ModifyDivisionHighlight(MultiIndexContainerTraceIDIterator& it,
778 const bool& iHighlight);
785 void ShowCollection(
const unsigned int&,
const bool&);
791 void UpdateCollectionVisibility(MultiIndexContainerTraceIDIterator& it,
792 const bool& iVisibility);
797 void DeleteCollection(
unsigned int);
801 void UpdateCollectionDelete( MultiIndexContainerTraceIDIterator& it);
809 int ModifyDivisionVisibility(MultiIndexContainerTraceIDIterator& it,
810 const bool& iVisibility );
816 void DeleteADivision(
const unsigned int& iMotherID);
818 void AddVolume(
const unsigned int& iTrackID,
const double& iVolume);
829 void RecomputeMap(
TrackStructure* iStructure, std::list< double* >& iPoints);
835 double* setTrackNodeScalars(
const QString& iArrayName);
841 double* setDivisionNodeScalars(
const QString& iArrayName);
853 #endif // TrackCONTAINER_H