00001
00040 #ifndef __GESTURE_GRAPH_H__
00041 #define __GESTURE_GRAPH_H__
00042
00043 #include "DAG.h"
00044 #include "GGNode.h"
00045
00046
00052 class GestureGraph : public DAG
00053 {
00054 SmartArray<int> hierarchyLevels;
00055 SmartMatrix<int> hierarchicalMatrix;
00056 SmartMatrix<GGRelation> relationMatrix;
00057 Matrix EuclideanDistance;
00058 Matrix Scale;
00059 Matrix Bearing;
00060
00061 int m_nRootNodeCount;
00062
00063 public:
00064 float Get_distance(int, int);
00065 int Get_number_of_relations(int);
00066 int Get_nth_relation(int, int);
00067 int Get_xpos(int);
00068 int Get_ypos(int);
00069
00070 GestureGraph() { m_nRootNodeCount = 0; }
00071
00072 const GGRelation& GetRelation(int v1, int v2) const
00073 {
00074 return relationMatrix[v1 - 2][v2 - 1];
00075 }
00076
00077 void BuildMatrices();
00078 void BuildNodeHistograms();
00079 bool Read(String strFileName);
00080
00081
00082 virtual DAG& operator=(const DAG& rhs);
00083 virtual void Clear();
00084
00085
00086 virtual double NodeDistance(leda_node g1Node, const DAG& g2, leda_node g2Node) const;
00087 virtual bool AreNodesRelated(leda_node g1Node, const DAG& g2, leda_node g2Node) const;
00088 virtual DAG* CreateObject() const;
00089 virtual DAGNodePtr CreateNodeObject(NODE_LABEL lbl) const;
00090 virtual DAGNodePtr ReadNode(istream& is) const;
00091 virtual String ClassName() const;
00092 virtual int NodeType(leda_node v) const { return 0; }
00093
00094 virtual istream& Read(istream& is, bool bOnlyDataForMatching = false);
00095 virtual ostream& Write(ostream& os) const;
00096 virtual void Print(ostream& os = cout) const;
00097
00098 const GGNode* GetGGNode(leda_node v) const { return (const GGNode*)(const DAGNode*)GetNode(v); }
00099 };
00100
00101 #endif //__GESTURE_GRAPH_H__