MeVisLabToolboxReference
MeVisLab/Standard/Sources/ML/MLVesselGraph/mlSkeleton.h
Go to the documentation of this file.
00001 // **InsertLicense** code
00002 //----------------------------------------------------------------------------------
00004 
00009 //----------------------------------------------------------------------------------
00010 #ifndef __mlSkeleton_H
00011 #define __mlSkeleton_H
00012 
00013 // dll specific settings.
00014 #include "mlVesselGraphSystem.h"
00015 
00016 // graph includes
00017 #include "Properties/mlPropertyContainer.h"
00018 #include "mlPropertiesMacros.h"
00019 
00020 // ml includes 
00021 #include "mlBase.h"
00022 #include "mlImageVector.h"
00023 #include "mlVector3.h"
00024 #include "mlMatrix4.h"
00025 #include "mlSystemWarningsDisable.h"
00026 #include <boost/shared_ptr.hpp>
00027 #include "mlSystemWarningsRestore.h"
00028 
00029 ML_START_NAMESPACE
00030 
00031 class TreeNode;
00032 
00033 
00035 class VESSELGRAPH_EXPORT Skeleton : public PropertyContainer
00036 {
00037 friend class Graph;
00038 friend class VesselEdge;
00039 
00040 public:
00042 
00043   enum LABELTYPE {TRACECOLOR,CONTINUOUS};
00045 
00047   Skeleton(const PropertyManager::Pointer& manager, const Vector3& pos=Vector3(0), float min=0, float max=0);
00048 
00050   Skeleton(const Skeleton& other);
00051 
00052   Skeleton& operator=(const Skeleton& other);
00053 
00054   virtual void copyProperties(const Skeleton* other);
00055 
00056   bool operator==(const Skeleton& other) const;
00057   bool operator!=(const Skeleton& other) const { return !(*this==other); }
00058 
00060 
00061   STATIC_GRAPH_PROPERTY(Vector3, pos, Pos)
00062 
00063   
00064 
00065   ImageVector voxelPos();
00066 
00068   void transform(const Matrix4& m);
00069 
00071   void convertToVoxel(Matrix4* mat);
00072   void convertToWorld(Matrix4* mat);
00074 
00076 
00077   STATIC_GRAPH_PROPERTY(double, minDistance, MinDistance);
00078   STATIC_GRAPH_PROPERTY(double, maxDistance, MaxDistance);
00079   STATIC_GRAPH_PROPERTY(double, area, Area);
00080   STATIC_GRAPH_PROPERTY(double, distanceLabel, DistanceLabel);
00081   STATIC_GRAPH_PROPERTY(double, freeLabel, FreeLabel);
00082   STATIC_GRAPH_PROPERTY(double, label, Label);
00083 
00085 
00086 
00087   STATIC_CASTED_GRAPH_PROPERTY(LABELTYPE, MLuint64, labelType, LabelType);
00089   STATIC_GRAPH_PROPERTY(MLuint64, enumLabel, EnumLabel);
00090 
00091   void setRGBA( float r, float g, float b, float a ) { 
00092       _colorRGBA[0] = r;
00093       _colorRGBA[1] = g;
00094       _colorRGBA[2] = b;
00095       _colorRGBA[3] = a;
00096   }  
00097 
00098   void setRGBA( float* rgba ){
00099     for ( size_t i=0; i<4; ++i ) { _colorRGBA[i] = rgba[i]; }
00100   }
00101 
00102   void getRGBA( float* r, float* g, float* b, float* a ) const {
00103       *r = _colorRGBA[0];
00104       *g = _colorRGBA[1];
00105       *b = _colorRGBA[2];
00106       *a = _colorRGBA[3];
00107   }
00108 
00109   float *getRGBA(void){
00110     return _colorRGBA;
00111   }
00113 
00115   virtual void addStateToTree(TreeNode* parent) const;
00117   ML_SET_ADDSTATE_VERSION(5);
00119   virtual void readStateFromTree(TreeNode* parent);
00120 
00121   //----------------------------------------------------------------------------
00123 
00124   //----------------------------------------------------------------------------
00125   size_t        getVoxelNum() const { return _vesselCoordinates.size()+1; }
00126   size_t        numVesselPos() const { return _vesselCoordinates.size(); }
00127   void          addVesselPos(const Vector3 &position) { _vesselCoordinates.push_back(position); }
00128   void          addVesselPos(const ImageVector &v) { _vesselCoordinates.push_back(Vector3(v.x, v.y, v.z)); }
00129   const Vector3 &vesselPos(size_t index) const { return _vesselCoordinates.at(index); }
00130   Vector3       &vesselPos(size_t index) { return _vesselCoordinates.at(index); }
00131   ImageVector   vesselVoxelPos(size_t index);
00132   void          clearVesselPos() { _vesselCoordinates.clear(); }
00134 
00136   static void setCopyVesselVoxels       ( bool flag ){ Skeleton::_copyVesselVoxels = flag; }
00137   static void setCopyVesselVoxelsDefault( void )     { Skeleton::_copyVesselVoxels = true; }
00138 
00139 private:
00142   static bool _copyVesselVoxels;
00143 
00145   float _colorRGBA[4];
00146 
00149   std::vector<Vector3> _vesselCoordinates;
00150 
00151   ML_ABSTRACT_CLASS_HEADER(Skeleton)
00152 };
00153 
00154 ML_END_NAMESPACE
00155 
00156 #endif // __mlSkeleton_H