00001
00002
00003 #ifndef _SPAF_GRAPH_EDGE_PROXIMITY_HPP_
00004 #define _SPAF_GRAPH_EDGE_PROXIMITY_HPP_
00005
00006 #include "spaf/Feature.hpp"
00007 #include "spafgraph/Edge.hpp"
00008 #include <iostream>
00009 #include <geom/Atom.hpp>
00010
00011 namespace jafar {
00012 namespace geom {
00013 struct GeometricRelation;
00014 }
00015 namespace spafgraph {
00016 class Node;
00022 class EdgeProximity : public Edge {
00023 friend class Node;
00024 EdgeProximity(const Node* leftNode, const Node* rightNode);
00025 public:
00026 ~EdgeProximity();
00027 double distance() const;
00028 double distanceCov() const;
00029 double distanceSigma() const;
00030 double cosAngle() const;
00031 double cosAngleCov() const;
00032 double cosAngleSigma() const;
00033 geom::Atom3D::HomogenousVecD characteristicVector(const Node* refNode) const;
00034 const geom::Atom3D::HomogenousSymMatrixD& characteristicVectorCov(const jafar::spafgraph::Node* refNode) const;
00035 const spaf::Feature::Range& occupancyRange(const Node* refNode) const;
00040 bool isCompatible(const EdgeProximity* ep) const;
00041 private:
00042 struct Private;
00043 Private* const d;
00044 };
00045 std::ostream& operator<<(std::ostream& s, const EdgeProximity&);
00046 }
00047 }
00048
00049 #endif