MeVisLabToolboxReference
|
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