00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_STRUCTURE_GEOMETRICPROPERTIES_H
00008 #define BALL_STRUCTURE_GEOMETRICPROPERTIES_H
00009
00010 #ifndef BALL_COMMON_H
00011 # include <BALL/common.h>
00012 #endif
00013
00014 #ifndef BALL_MATHS_VECTOR3_H
00015 # include <BALL/MATHS/vector3.h>
00016 #endif
00017
00018 #ifndef BALL_MATHS_SIMPLEBOX3_H
00019 # include <BALL/MATHS/simpleBox3.h>
00020 #endif
00021
00022 #ifndef BALL_KERNEL_ATOM_H
00023 # include <BALL/KERNEL/atom.h>
00024 #endif
00025
00026 #ifndef BALL_KERNEL_FRAGMENT_H
00027 # include <BALL/KERNEL/fragment.h>
00028 #endif
00029
00030 #ifndef BALL_CONCEPT_PROCESSOR_H
00031 # include <BALL/CONCEPT/processor.h>
00032 #endif
00033
00034 #ifndef BALL_DATATYPE_STRING_H
00035 # include <BALL/DATATYPE/string.h>
00036 #endif
00037
00038 #include <vector>
00039
00040 namespace BALL
00041 {
00042
00058 class BALL_EXPORT BoundingBoxProcessor
00059 : public UnaryProcessor<Atom>
00060 {
00061 public:
00062
00066
00069 virtual bool start()
00070 ;
00071
00074 virtual bool finish()
00075 ;
00076
00079 virtual Processor::Result operator () (Atom& atom)
00080 { return operator() (atom.getPosition());}
00081
00084 virtual Processor::Result operator () (const Vector3& v)
00085 ;
00086
00087
00089
00092
00095 SimpleBox3 getBox() const
00096 ;
00097
00100 const Vector3& getLower() const
00101 ;
00102
00105 const Vector3& getUpper() const
00106 ;
00107
00109
00110 private:
00111
00112 Vector3 lower_;
00113 Vector3 upper_;
00114 };
00115
00126 class BALL_EXPORT GeometricCenterProcessor
00127 : public UnaryProcessor<Atom>
00128 {
00129 public:
00130
00134
00137 virtual bool start()
00138 ;
00139
00142 virtual bool finish()
00143 ;
00144
00147 virtual Processor::Result operator()(Atom& atom)
00148 { return operator()(atom.getPosition());}
00149
00152 virtual Processor::Result operator()(const Vector3& v)
00153 ;
00154
00156
00159
00162 Vector3& getCenter()
00163 ;
00164
00166
00167 private:
00168
00169 Vector3 center_;
00170 Size n_;
00171 };
00172
00173
00191 class BALL_EXPORT FragmentDistanceCollector
00192 : public UnaryProcessor<Composite>
00193 {
00194 public:
00195
00199
00202 FragmentDistanceCollector()
00203 ;
00204
00209 FragmentDistanceCollector(const Composite& composite)
00210 ;
00211
00217 FragmentDistanceCollector(const Composite& composite, float distance)
00218 ;
00219
00220 virtual ~FragmentDistanceCollector()
00221
00222 {}
00223
00225
00228
00231 virtual bool start()
00232 ;
00233
00236 virtual bool finish()
00237 ;
00238
00241 virtual Processor::Result operator()(Composite& composite)
00242 ;
00243
00245
00248
00252 Size getNumberOfFragments()
00253 ;
00254
00258 void setComposite(const Composite& composite)
00259 ;
00260
00264 const Composite* getComposite() const
00265 ;
00266
00270 float getDistance() const
00271 ;
00272
00276 void setDistance(float distance)
00277 ;
00278
00280
00283 std::vector<Fragment*> fragments;
00284
00285
00286 protected:
00287
00288 std::vector<Fragment*> all_fragments_;
00289 const Composite* reference_composite_;
00290 float squared_distance_;
00291 };
00292
00293
00295
00299
00302 BALL_EXPORT Angle calculateTorsionAngle(const Atom& a1, const Atom& a2, const Atom& a3, const Atom& a4)
00303 throw(Exception::IllegalPosition);
00304
00307 BALL_EXPORT Angle calculateBondAngle(const Atom& a1, const Atom& a2, const Atom& a3)
00308 throw(Exception::IllegalPosition);
00309
00311 }
00312
00313 #endif // BALL_STRUCTURE_GEOMETRICPROPERTIES_H