MeVisLab Toolbox Reference
mlGraphAnalyser.h
Go to the documentation of this file.
1/*************************************************************************************
2**
3** Copyright 2007, MeVis Medical Solutions AG
4**
5** The user may use this file in accordance with the license agreement provided with
6** the Software or, alternatively, in accordance with the terms contained in a
7** written agreement between the user and MeVis Medical Solutions AG.
8**
9** For further information use the contact form at https://www.mevislab.de/contact
10**
11**************************************************************************************/
12
13#ifndef ML_GRAPH_ANALYSER_H
14#define ML_GRAPH_ANALYSER_H
15
16
18
19// Include dll-specific settings.
20#include "mlVesselGraphSystem.h"
21#include "VesselGraphTypes.h"
22
23// Include vessel graph class.
25#include <map>
26#include <memory.h>
28#include "mlGraphComponents.h"
29
30#ifndef VESSELGRAPH_USE_MPIF
31#include "AssocGraph.h"
32#endif
33
34
35
36// Be sure that all your modules are part of the ml. So collisions
37// with names in system files or other libraries are minimized.
39
40 // ------------------------------------------------------------------
43 // ------------------------------------------------------------------
65
66 typedef std::map<NData, void *> DataMap;
68
69 //----------------------------------------------------------
72 //----------------------------------------------------------
75 typedef enum
76 {
77 PROC_NONE = 0x000,
78 PROC_LENGTH = 0x001,
79 PROC_VOLUME = 0x002,
82 PROC_SCL = 0x010,
84 PROC_ROOT = 0x100,
86 PROC_ST_POS = 0x204,
87 PROC_ST_NODE_SUM = 0x208
88#ifndef VESSELGRAPH_USE_MPIF
89 , PROC_CLUSTER = 0x400
90#endif
92
93
94
95
97
98 // ------------------------------------------------------------------
101 // ------------------------------------------------------------------
107 struct CIdxFloat{
108 int _nIdx;
109 float _fValue;
110
111
113 CIdxFloat(int nIdx = 0, float fValue = 0.0) : _nIdx(nIdx), _fValue(fValue) {};
114 CIdxFloat& operator=(const CIdxFloat &oIF) {if (this != &oIF){ this->_nIdx = oIF._nIdx; this->_fValue=oIF._fValue;} return *this; }
115
116
118 inline bool operator> (const CIdxFloat& oIF) const { if(_fValue != oIF._fValue){return _fValue > oIF._fValue;} else {return _nIdx > oIF._nIdx;} }
119 inline bool operator< (const CIdxFloat& oIF) const { if(_fValue != oIF._fValue){return _fValue < oIF._fValue;} else {return _nIdx < oIF._nIdx;} }
120 inline bool operator==(const CIdxFloat& oIF) const { return ((_nIdx == oIF._nIdx) && (_fValue == oIF._fValue)); }
122 };
123
127 struct CIdxIdx{
128 int _n1;
129 int _n2;
130 CIdxIdx(const CIdxIdx & oII) : _n1(oII._n1), _n2(oII._n2) {};
131 CIdxIdx& operator=(const CIdxIdx &oII) {if (this != &oII){ this->_n1 = oII._n1; this->_n2=oII._n2;} return *this; }
133 inline bool operator< (const CIdxIdx& oII) const { if(_n1 != oII._n1){return _n1 < oII._n1;} else {return _n2 < oII._n2;} }
134 inline bool operator==(const CIdxIdx& oII) const { return ((_n1 == oII._n1) && (_n2 == oII._n2)); }
136 };
138
139
140
141 // ------------------------------------------------------------------
143 // ------------------------------------------------------------------
149 {
150 public:
151 //--------------------------------------------------------
154 //--------------------------------------------------------
157 explicit GraphAnalyser (Graph * pGraph) : _pGraph(pGraph) {};
159
160 //----------------------------------------------------------
163 //----------------------------------------------------------
167
171
177 );
178
182
185
188
194 );
195
198 bool bIgnoreOrientation=false
200 );
201
204
207 void searchMaxSubTrees(std::vector<VesselEdge *>::iterator iBegin,
208 std::vector<VesselEdge *>::iterator iEnd,
209 int nNum,
210 std::vector<VesselEdge *> * pvMaxEdges,
211 float * pfActValue,
212 float * pfActSum
213 );
214
217 inline void searchMaxSubTrees(std::vector<VesselEdge *> vStartEdges,
218 unsigned int nNum,
219 std::vector<VesselEdge *> * pvMaxEdges,
220 float * pfActValue,
221 float * pfActSum
222 )
223 {
224 searchMaxSubTrees(vStartEdges.begin(), vStartEdges.end(), static_cast<int>(nNum), pvMaxEdges, pfActValue, pfActSum);
225 }
226
229 inline void searchMaxSubTrees(std::vector<VesselEdge *> vStartEdges,
230 int nPos,
231 unsigned int nNum,
232 std::vector<VesselEdge *> * pvMaxEdges,
233 float * pfActValue,
234 float * pfActSum
235 )
236 {
237 searchMaxSubTrees(vStartEdges.begin()+nPos, vStartEdges.begin()+nPos+1, static_cast<int>(nNum), pvMaxEdges, pfActValue, pfActSum);
238 }
239
240 // Starting at node pRoot, search for two subtrees (originating from a common node) with barycenters at a large distance
241 // in separationDirection and large volumes. Push_back() them to vClassifiedEdges ordered by descending position in separationDirection.
242 // If (pRoot==NULL) all nodes in the graph are considered.
243 void searchSubTreeSeparation(VesselNode* pRoot, const Vector3& separationDirection, std::vector<VesselEdge*>& vClassifiedEdges);
244
249 float fMinorLimit,
250 std::vector<VesselEdge *> *pvEdges,
251 bool bClear = true
252 );
253
259 float fMinorLimitStart,
260 float fMinorLimitStep,
262 std::vector<VesselEdge *> *pvEdges,
263 bool bClear = true
264 );
266
267
268
269 //----------------------------------------------------------
272 //----------------------------------------------------------
276
278 const VesselNode * getParent(const VesselNode *pN1, const VesselNode *pN2) const;
279 const VesselNode * getParent(const VesselEdge *pE1, const VesselEdge *pE2) const;
283
284 private:
285 //----------------------------------------------------------
288 //----------------------------------------------------------
290 Graph * _pGraph;
291
293 DataMap _MData;
295
296
297#ifndef VESSELGRAPH_USE_MPIF
298public:
302 )
303 { sumupST_Value (&VesselNode::getDrainVolume, &VesselNode::setDrainVolume, bIgnoreOrientation); }
304
305
312 bool calcDistanceMatrix(MatrixTemplate<double>& dm, std::vector<int>& vId, int nMaxNodes);
313
314
333 bool calcNodeClassifikator(CDoubleArray * pArAssoc, std::vector<int>* pvId, int nMaxNodes);
334
335
339 bool calcNodeBaseFromPosition(const Vector3 & vPosition, const std::vector<int> & vId, std::vector<CIdxFloat> * pvResult);
340
344 bool calcPositionFromNodeBase(std::vector<CIdxFloat> vBase, Vector3 * pvResult);
345
347 double calcSpannedVolume(const std::vector<int> & vId);
348
352
358 void scanSkeletonLabelMinMax( float *min, float *max );
359
361 void collectLeafs(VesselNode *pRoot, std::vector<VesselNode*>& pLeafs);
362
363private:
364 //----------------------------------------------------------
367 //----------------------------------------------------------
371 void calcRootPath(int nParentStart, int nParentEnd, int * pFreeIdx, std::vector<PathInfo>::iterator iPathBase, std::vector<PathInfo>::iterator iPathEnd);
373
374#endif
375
376 };
377
378
379
380
381
382 // ------------------------------------------------------------------
384 // ------------------------------------------------------------------
390 {
391 public:
392
393 //--------------------------------------------------------
396 //--------------------------------------------------------
399 explicit EdgeAnalyser (long NMode, DataMap * pData = nullptr);
401
402
403
404 //--------------------------------------------------------
407 //--------------------------------------------------------
408 // function \c operator() provide singular outer access point
409 inline void operator() (VesselEdge *pEdge){(this->*_actMeasure)(pEdge);}
411
412
413 private:
414 //--------------------------------------------------------
417 //--------------------------------------------------------
419 void measureNothing(VesselEdge * /*pEdge*/) {}
420
423 void measureLength (VesselEdge *pEdge);
424
427 void measureVolume (VesselEdge *pEdge);
428
430 void measurePosition (VesselEdge *pEdge);
431
433 void averageMinDistance (VesselEdge *pEdge);
434
437 void measureST_Volume(VesselEdge *pEdge);
438
441 void measureST_Barycenter(VesselEdge *pEdge);
442
444 void measure_avSkeletonArea(VesselEdge *pEdge);
445
446
449 void sumupST_NodeValue(VesselEdge *pEdge);
450
452
453 //----------------------------------------------------------
456 //----------------------------------------------------------
458 void (EdgeAnalyser::*_actMeasure) (VesselEdge *pEdge);
459
461 float _fVoxVolume;
463 DataMap * _pData;
465 long _NMode;
467 };
468
469
470
481
482 // ------------------------------------------------------------------
484 // ------------------------------------------------------------------
489 public:
492 explicit compareEdges (CMP_FEATURE NFeature, Vector3 planeNormal = Vector3(0)){
493 _planeNormal = planeNormal;
494 switch(NFeature){
495 case (CMP_LENGTH):
496 _actComperator = &compareEdges::compareLength;
497 break;
498 case (CMP_VOLUME):
499 _actComperator = &compareEdges::compareVolume;
500 break;
501 case (CMP_STVOLUME):
502 _actComperator = &compareEdges::compareSTVolume;
503 break;
504 case (CMP_STCENTER_X):
505 _actComperator = &compareEdges::compareSTCenterX;
506 break;
507 case (CMP_STCENTER_Y):
508 _actComperator = &compareEdges::compareSTCenterY;
509 break;
510 case (CMP_STCENTER_Z):
511 _actComperator = &compareEdges::compareSTCenterZ;
512 break;
513 case (CMP_STCENTER_PLANE):
514 _actComperator = &compareEdges::compareSTCenterPlane;
515 break;
516 case (CMP_LABEL):
517 default:
518 _actComperator = &compareEdges::compareLabel;
519 break;
520 }
521 }
522
523 int operator() (const VesselEdge *pE1, const VesselEdge *pE2) const
524 { return (this->*_actComperator)(pE1, pE2); }
525
526 private:
528 int (compareEdges::*_actComperator) (const VesselEdge *pE1, const VesselEdge *pE2) const;
529 Vector3 _planeNormal;
530
531 int compareLabel (const VesselEdge *pE1, const VesselEdge *pE2) const { return pE1->getLabel() > pE2->getLabel(); }
532 int compareLength (const VesselEdge *pE1, const VesselEdge *pE2) const { return pE1->getLength() > pE2->getLength(); }
533 int compareVolume (const VesselEdge *pE1, const VesselEdge *pE2) const { return pE1->getVolume() > pE2->getVolume(); }
534 int compareSTVolume (const VesselEdge *pE1, const VesselEdge *pE2) const { return pE1->getSTVolume() > pE2->getSTVolume(); }
535 int compareSTCenterX (const VesselEdge *pE1, const VesselEdge *pE2) const { return (pE1->getSTBarycenter())[0] > (pE2->getSTBarycenter())[0]; }
536 int compareSTCenterY (const VesselEdge *pE1, const VesselEdge *pE2) const { return (pE1->getSTBarycenter())[1] > (pE2->getSTBarycenter())[1]; }
537 int compareSTCenterZ (const VesselEdge *pE1, const VesselEdge *pE2) const { return (pE1->getSTBarycenter())[2] > (pE2->getSTBarycenter())[2]; }
538 int compareSTCenterPlane (const VesselEdge *pE1, const VesselEdge *pE2) const { return (pE1->getSTBarycenter()-pE2->getSTBarycenter()).dot(_planeNormal) > 0; }
539
540 };
541
542
543 // ------------------------------------------------------------------
545 // ------------------------------------------------------------------
551 {
552 public:
553
554 //--------------------------------------------------------
557 //--------------------------------------------------------
560 explicit NodeAnalyser (long NMode, DataMap * pData = nullptr) :
561 _actMeasure (&NodeAnalyser::doNothing),
562 _pData(pData)
563 {
564 switch(NMode){
565 case PROC_ROOT:
566 if(_pData != nullptr){
567 if((*pData)[OUTDATA_ROOT] != nullptr){
568 *( reinterpret_cast<long *>((*pData)[OUTDATA_ROOT])) = 0;
569 _fDist = 0.0;
570 _actMeasure = &NodeAnalyser::suggestRoot;
571 }
572 } else {
573 _actMeasure = &NodeAnalyser::doNothing;
574 }
575 break;
576#ifndef VESSELGRAPH_USE_MPIF
577 case PROC_CLUSTER:
578 if(_pData != nullptr){
579 if((*pData)[OUTDATA_CLUSTER] != nullptr){
580 _actMeasure = &NodeAnalyser::setClusterLabel;
581 }
582 } else {
583 _actMeasure = &NodeAnalyser::doNothing;
584 }
585 break;
586#endif
587 default:
588 _actMeasure = &NodeAnalyser::doNothing;
589 }
590 }
592
593
594 //--------------------------------------------------------
597 //--------------------------------------------------------
598 // function \c operator() provide singular outer access point
599 inline void operator() (VesselNode *pNode){(this->*_actMeasure)(pNode);}
601
602
603 private:
604 //--------------------------------------------------------
607 //--------------------------------------------------------
609 void doNothing (VesselNode * /*pNode*/) {}
610
612 void suggestRoot (VesselNode *pNode);
613
614#ifndef VESSELGRAPH_USE_MPIF
616 void setClusterLabel (VesselNode *pNode);
617#endif
619
620 //----------------------------------------------------------
623 //----------------------------------------------------------
625 void (NodeAnalyser::*_actMeasure) (VesselNode *pNode);
626
628 DataMap * _pData;
629
630 float _fDist;
632 };
633
634 // ------------------------------------------------------------------
636 // ------------------------------------------------------------------
644 {
645
647 class Process
648 {
650 typedef void (measureSkeletonAgent::*ProcessFkt) (const Skeleton & oSkeleton, Process * pProcess);
651 public:
652 ProcessFkt oProcess = &measureSkeletonAgent::doNothing;
653 void *pResult = nullptr;
654 };
655
657 friend class Process;
658
660 typedef std::map<NProcessMode, Process>::iterator IProcess;
661
662 public:
663
664
665 //--------------------------------------------------------
668 //--------------------------------------------------------
672 _fLastLength(0.0),
673 _pScale(nullptr),
674 _pData(pData)
675 {
676 _MProcess.erase(_MProcess.begin(), _MProcess.end());
677
678 if(_pData != nullptr){
679 if(nMode & PROC_LENGTH)
680 {
681 Process oProcess;
682 oProcess.pResult = (*_pData)[OUTDATA_LENGTH];
683 if(nMode & PROC_SCL){
684 _pScale = static_cast<Vector3 *>((*_pData)[DATA_SCL]);
685 oProcess.oProcess = &measureSkeletonAgent::ProcessL1Scale;
686 }
687 else {
688 oProcess.oProcess =&measureSkeletonAgent::ProcessL1;
689 }
690 _MProcess[PROC_LENGTH] = oProcess;
691 }
692
693 if(nMode & PROC_VOLUME)
694 {
695 Process oProcess;
696 oProcess.pResult = (*_pData)[OUTDATA_VOLUME];
697 oProcess.oProcess = &measureSkeletonAgent::ProcessV1;
698 _MProcess[PROC_VOLUME] = oProcess;
699 }
700
702 {
703 Process oProcess;
704 oProcess.pResult = (*_pData)[OUTDATA_POS];
705 oProcess.oProcess = &measureSkeletonAgent::ProcessP1;
706 _MProcess[PROC_WEIGHTED_POS] = oProcess;
707 }
708
710 {
711 Process oProcess;
712 oProcess.pResult = (*_pData)[OUTDATA_AV_MIN_DIST];
713 oProcess.oProcess = &measureSkeletonAgent::ProcessD1;
714 _MProcess[PROC_AV_MIN_DIST] = oProcess;
715 }
716 }
717 }
719
720
721 //--------------------------------------------------------
724 //--------------------------------------------------------
726 inline void operator() (const Skeleton & oSkeleton)
727 {
728 for(IProcess iProcess = _MProcess.begin(); iProcess != _MProcess.end(); ++iProcess){
729 (this->*((iProcess->second).oProcess))(oSkeleton, &(iProcess->second));
730 }
731 }
733 {
734 for(IProcess iProcess = _MProcess.begin(); iProcess != _MProcess.end(); ++iProcess){
735 (this->*((iProcess->second).oProcess))(*oSkeleton, &(iProcess->second));
736 }
737 }
739
740
741
742 private:
743
744 //--------------------------------------------------------
747 //--------------------------------------------------------
749 void doNothing (const Skeleton & /*oSkeleton*/, Process * /*pProcess*/) {}
750
753 void ProcessL1 (const Skeleton & oSkeleton, Process * pProcess);
754 void ProcessL1Scale (const Skeleton & oSkeleton, Process * pProcess);
756 void ProcessL2 (const Skeleton & oSkeleton, Process * pProcess);
757 void ProcessL2Scale (const Skeleton & oSkeleton, Process * pProcess);
759 void ProcessL3 (const Skeleton & oSkeleton, Process * pProcess);
760 void ProcessL3Scale (const Skeleton & oSkeleton, Process * pProcess);
761
763 void ProcessV1 (const Skeleton & oSkeleton, Process * pProcess);
764
766 void ProcessP1 (const Skeleton & oSkeleton, Process * pProcess);
767
769 void ProcessD1 (const Skeleton & oSkeleton, Process * pProcess);
770
771
773
774 //----------------------------------------------------------
777 //----------------------------------------------------------
779 std::map<NProcessMode, Process> _MProcess;
780
781
783 float _fLastLength;
784
786 std::list<Vector3> _LPoints;
788 std::list<Vector3>::iterator IBack;
790 std::list<Vector3>::iterator IMiddle;
792 std::list<Vector3>::iterator IFront;
793
794 // interpolated Skeleton position
795 Vector3 _vMean;
797 Vector3 * _pScale;
798
800 DataMap * _pData;
802 };
803
805
806#endif // __GRAPHANALYSER_H
807
808
809
810
— Class EdgeAnalyser
EdgeAnalyser(long NMode, DataMap *pData=nullptr)
constructor: connect operator() to the requested functionality
— Class GraphAnalyser
VesselNode * suggestRoot(float fSignificanceLevel=0.7f, int nPreferedDirection=0)
Search for root-node: look for leaf with thick edge seated remote from the barycenter of the Graph.
VesselNode * getParent(VesselEdge *pE1, VesselEdge *pE2)
void tansferLabelsInverse(void)
transfer skeleton labels to vessel edge label (take label of most frequent skeleton)
void searchSubTreeSeparation(VesselNode *pRoot, const Vector3 &separationDirection, std::vector< VesselEdge * > &vClassifiedEdges)
Vector3 measureBarycenter()
Get barycenter position of all the Graph.
void measureSkeletonArea(int nAvLength=5)
measure floating average of SkeletonArea and set area property
void measureST_Volume(bool bIgnoreOrientation=false)
Get the euclidean volume of all graph edges connected with given root, nodes cumulate them according ...
void sumupST_Value(VesselNode::NodeGetFkt getFkt, VesselNode::NodeSetFkt setFkt, bool bIgnoreOrientation=false)
bool calcPositionFromNodeBase(std::vector< CIdxFloat > vBase, Vector3 *pvResult)
Calculate spatial vector position form relative node coordinates.
bool calcDistanceMatrix(MatrixTemplate< double > &dm, std::vector< int > &vId, int nMaxNodes)
Calculate Distance Matrix for rooted Graph, taking hierarchy into account: dm(n1, n2) := minimal dist...
void searchMaxSubTrees(std::vector< VesselEdge * > vStartEdges, unsigned int nNum, std::vector< VesselEdge * > *pvMaxEdges, float *pfActValue, float *pfActSum)
calculate set of edges representing nNum subtrees maximizing selected feature stored in label propert...
void searchMaxSubTrees(std::vector< VesselEdge * >::iterator iBegin, std::vector< VesselEdge * >::iterator iEnd, int nNum, std::vector< VesselEdge * > *pvMaxEdges, float *pfActValue, float *pfActSum)
calculate set of edges representing nNum subtrees maximizing selected feature stored in label propert...
void collectLeafs(VesselNode *pRoot, std::vector< VesselNode * > &pLeafs)
Collect all leafs which are children of node pRoot and append them to pLeafs.
double calcSpannedVolume(const std::vector< int > &vId)
Calculate Volume of minimal cube including all supplied nodes.
void measureVolume()
Get the euclidean volume of all graph edges and set edge 'Volume' property in the Graph.
void sumupST_DrainVolume(bool bIgnoreOrientation=false)
cumulate DrainVolumes given at the leafs
void searchMaxSubTrees(std::vector< VesselEdge * > vStartEdges, int nPos, unsigned int nNum, std::vector< VesselEdge * > *pvMaxEdges, float *pfActValue, float *pfActSum)
calculate set of edges representing nNum subtrees maximizing selected feature stored in label propert...
float measureAvMinDistance()
Get the average minimal distance over all skeletons of an edge and set edge 'averageMinDistance' prop...
short sampleConnectedCluster()
identify connected subgraph return value is number of identified cluster
void tansferLabels(Skeleton::LABELTYPE NType, float fThresh=0.1f)
transfer Vessel-Edge labels to Skeleton
GraphAnalyser(Graph *pGraph)
constructor: provide pointer pGraph for easy access to Graph object
void measureLength()
Get the euclidean length of all graph edges and set edge 'Length' property in the Graph.
bool calcNodeBaseFromPosition(const Vector3 &vPosition, const std::vector< int > &vId, std::vector< CIdxFloat > *pvResult)
Calculate representation of spatial position in node coordinates.
void measureST_Barycenter(bool bIgnoreOrientation=false)
Get the euclidean volume of all graph edges connected with given root, nodes cumulate them according ...
void searchST_MajorBifurcation(VesselEdge *pStartEdge, float fMinorLimitStart, float fMinorLimitStep, int nMinorLimitNumber, std::vector< VesselEdge * > *pvEdges, bool bClear=true)
search for first major bifurcation following main edge starting with pStartEdge, use label property t...
const VesselNode * getParent(const VesselEdge *pE1, const VesselEdge *pE2) const
void scanSkeletonLabelMinMax(float *min, float *max)
evaluate min/max value of skeleton labels
void measureMaxPathValue(VesselNode *pRootNode, VesselEdge::EdgeGetFkt edgeGetFkt, VesselNode::NodeGetFkt nodeGetFkt, VesselNode::NodeSetFkt nodeSetFkt)
For each node calculate the maximum sum of edge values in a single path below this node....
void searchST_MajorBifurcation(VesselEdge *pStartEdge, float fMinorLimit, std::vector< VesselEdge * > *pvEdges, bool bClear=true)
search for first major bifurcation following main edge starting with pStartEdge, use label property t...
const VesselNode * getParent(const VesselNode *pN1, const VesselNode *pN2) const
get pointer to common parent if exists or NULL
VesselNode * getParent(VesselNode *pN1, VesselNode *pN2)
bool calcNodeClassifikator(CDoubleArray *pArAssoc, std::vector< int > *pvId, int nMaxNodes)
stack Node classificators in (*pArAssoc) (n1,n1): classificators based on single Node n1 respect to g...
Defines the basic Graph class which holds sets of nodes, edges and roots to model tubular structures ...
Definition mlGraph.h:64
— Class NodeAnalyser
NodeAnalyser(long NMode, DataMap *pData=nullptr)
constructor: connect operator() to the requested functionality
Skeleton objects represent centerline voxels stored in a VesselEdge object.
Definition mlSkeleton.h:35
Class VesselEdge.
double(VesselEdge::* EdgeGetFkt)(void) const
object bound function pointer: position of function relative to (individual) object base
VesselNode is derived from GraphNode, hence it can be stored as node item in a class Graph object.
void(VesselNode::* NodeSetFkt)(const MLdouble &)
function to set double parameter value
MLdouble(VesselNode::* NodeGetFkt)() const
object bound function pointer: position of function relative to (individual) object base
— Class compareEdges
int operator()(const VesselEdge *pE1, const VesselEdge *pE2) const
compareEdges(CMP_FEATURE NFeature, Vector3 planeNormal=Vector3(0))
constructor: connect operator() to the requested functionality
— Class measureSkeletonAgent
friend class Process
allow functor access to all internal stuff
void operator()(const Skeleton &oSkeleton)
add Skeleton successive
measureSkeletonAgent(int nMode, DataMap *pData=nullptr)
constructor: connect operator() to start functionality and initialize parameter for accumulation of p...
T dot(const FloatingPointVector< T, size, DataContainer > &buffer) const
Returns the dot product, i.e., sum of all components multiplied with corresponding components of buff...
std::map< NData, void * > DataMap
CMP_FEATURE
@ CMP_LENGTH
@ CMP_STCENTER_Z
@ CMP_STCENTER_PLANE
@ CMP_STCENTER_Y
@ CMP_STVOLUME
@ CMP_VOLUME
@ CMP_LABEL
@ CMP_STCENTER_X
NProcessMode
Flags for processing instructions and control of used functionalty.
@ PROC_ST_POS
@ PROC_NONE
@ PROC_ST_NODE_SUM
@ PROC_VOLUME
@ PROC_SKELETON_AREA
@ PROC_SCL
@ PROC_WEIGHTED_POS
@ PROC_LENGTH
@ PROC_ROOT
@ PROC_ST_VOLUME
@ PROC_CLUSTER
@ PROC_AV_MIN_DIST
NData
data structure for passing informations down the processing pipe
@ DATA_SET_FKT
@ DATA_GET_FKT
@ OUTDATA_POS
@ DATA_NODE
@ DATA_DISTANCE
@ OUTDATA_LENGTH
@ OUTDATA_VOLUME
@ OUTDATA_GLOBAL_MIN_DIST
@ DATA_FLAG
@ DATA_BARYCENTER
@ OUTDATA_AV_MIN_DIST
@ DATA_NO
@ OUTDATA_ROOT
@ DATA_AV_LEN
@ DATA_SCL
@ OUTDATA_CLUSTER
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
#define VESSELGRAPH_END_NAMESPACE
#define VESSELGRAPH_EXPORT
Definiert systemspezifische Macros, die f"ur diese DLL gelten sollen.
#define VESSELGRAPH_BEGIN_NAMESPACE
Tvec3< MLdouble > Vector3
A vector with 3 components of type double.
Definition mlVector3.h:287
CIdxFloat(const CIdxFloat &oIF)
CIdxFloat(int nIdx=0, float fValue=0.0)
bool operator<(const CIdxFloat &oIF) const
bool operator>(const CIdxFloat &oIF) const
supply comparison operator to induce an order for assistance of non-abiguous sequences
CIdxFloat & operator=(const CIdxFloat &oIF)
bool operator==(const CIdxFloat &oIF) const
bool operator<(const CIdxIdx &oII) const
supply comparison operator to induce an order for assistance of non-abiguous sequences
CIdxIdx(const CIdxIdx &oII)
CIdxIdx & operator=(const CIdxIdx &oII)
bool operator==(const CIdxIdx &oII) const