| [8eb17a] | 1 | #ifndef BOUNDARY_HPP_
 | 
|---|
 | 2 | #define BOUNDARY_HPP_
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | class BoundaryPointSet;
 | 
|---|
 | 5 | class BoundaryLineSet;
 | 
|---|
 | 6 | class BoundaryTriangleSet;
 | 
|---|
 | 7 | 
 | 
|---|
 | 8 | // include config.h
 | 
|---|
 | 9 | #ifdef HAVE_CONFIG_H
 | 
|---|
 | 10 | #include <config.h>
 | 
|---|
 | 11 | #endif
 | 
|---|
 | 12 | 
 | 
|---|
 | 13 | // STL headers
 | 
|---|
 | 14 | #include <map>
 | 
|---|
 | 15 | #include <set>
 | 
|---|
 | 16 | #include <deque>
 | 
|---|
 | 17 | 
 | 
|---|
 | 18 | #include <gsl/gsl_poly.h>
 | 
|---|
 | 19 | 
 | 
|---|
 | 20 | #include "molecules.hpp"
 | 
|---|
 | 21 | 
 | 
|---|
 | 22 | template <typename T> void SetEndpointsOrdered(T endpoints[2], T endpoint1, T endpoint2)
 | 
|---|
 | 23 | {
 | 
|---|
 | 24 |   if (endpoint1->Nr < endpoint2->Nr) {
 | 
|---|
 | 25 |     endpoints[0] = endpoint1;
 | 
|---|
 | 26 |     endpoints[1] = endpoint2;
 | 
|---|
 | 27 |   } else {
 | 
|---|
 | 28 |     endpoints[0] = endpoint2;
 | 
|---|
 | 29 |     endpoints[1] = endpoint1;
 | 
|---|
 | 30 |   }
 | 
|---|
 | 31 | };
 | 
|---|
 | 32 | 
 | 
|---|
 | 33 | class BoundaryPointSet {
 | 
|---|
 | 34 |   public:
 | 
|---|
 | 35 |     BoundaryPointSet();
 | 
|---|
 | 36 |     BoundaryPointSet(atom *Walker);
 | 
|---|
 | 37 |     ~BoundaryPointSet();
 | 
|---|
 | 38 |     
 | 
|---|
 | 39 |     void AddLine(class BoundaryLineSet *line);
 | 
|---|
 | 40 |     
 | 
|---|
 | 41 |     LineMap lines;
 | 
|---|
 | 42 |     int LinesCount;
 | 
|---|
 | 43 |     atom *node;
 | 
|---|
 | 44 |     int Nr;
 | 
|---|
 | 45 | };
 | 
|---|
 | 46 | 
 | 
|---|
 | 47 | class BoundaryLineSet {
 | 
|---|
 | 48 |   public:
 | 
|---|
 | 49 |     BoundaryLineSet();
 | 
|---|
 | 50 |     BoundaryLineSet(class BoundaryPointSet *Point[2], int number);
 | 
|---|
 | 51 |     ~BoundaryLineSet();
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 |     void AddTriangle(class BoundaryTriangleSet *triangle);
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 |     class BoundaryPointSet *endpoints[2];
 | 
|---|
 | 56 |     TriangleMap triangles;
 | 
|---|
 | 57 |     int TrianglesCount;
 | 
|---|
 | 58 |     int Nr;
 | 
|---|
 | 59 | };
 | 
|---|
 | 60 | 
 | 
|---|
 | 61 | class BoundaryTriangleSet {
 | 
|---|
 | 62 |   public:
 | 
|---|
 | 63 |     BoundaryTriangleSet();
 | 
|---|
 | 64 |     BoundaryTriangleSet(class BoundaryLineSet *line[3], int number);
 | 
|---|
 | 65 |     ~BoundaryTriangleSet();
 | 
|---|
 | 66 |     
 | 
|---|
| [e9b8bb] | 67 |     void GetNormalVector(Vector &NormalVector);
 | 
|---|
| [8eb17a] | 68 |     
 | 
|---|
 | 69 |     class BoundaryPointSet *endpoints[3];
 | 
|---|
 | 70 |     class BoundaryLineSet *lines[3];
 | 
|---|
 | 71 |     int Nr;
 | 
|---|
 | 72 | };
 | 
|---|
 | 73 | 
 | 
|---|
 | 74 | class Tesselation {
 | 
|---|
 | 75 |   public:
 | 
|---|
 | 76 |     
 | 
|---|
 | 77 |     Tesselation();
 | 
|---|
 | 78 |     ~Tesselation();
 | 
|---|
 | 79 |     
 | 
|---|
 | 80 |     void TesselateOnBoundary(ofstream *out, config *configuration, molecule *mol);
 | 
|---|
 | 81 |     void GuessStartingTriangle(ofstream *out);
 | 
|---|
 | 82 |     void AddPoint(atom * Walker);
 | 
|---|
 | 83 |     
 | 
|---|
 | 84 |     PointMap PointsOnBoundary;
 | 
|---|
 | 85 |     LineMap LinesOnBoundary;
 | 
|---|
 | 86 |     TriangleMap TrianglesOnBoundary;
 | 
|---|
 | 87 |     class BoundaryPointSet *BPS[2];
 | 
|---|
 | 88 |     class BoundaryLineSet *BLS[3];
 | 
|---|
 | 89 |     class BoundaryTriangleSet *BTS;
 | 
|---|
 | 90 |     int PointsOnBoundaryCount;
 | 
|---|
 | 91 |     int LinesOnBoundaryCount;
 | 
|---|
 | 92 |     int TrianglesOnBoundaryCount;
 | 
|---|
 | 93 | };
 | 
|---|
 | 94 | 
 | 
|---|
 | 95 | 
 | 
|---|
 | 96 | ostream & operator << (ostream &ost, BoundaryPointSet &a);
 | 
|---|
 | 97 | ostream & operator << (ostream &ost, BoundaryLineSet &a);
 | 
|---|
 | 98 | ostream & operator << (ostream &ost, BoundaryTriangleSet &a);
 | 
|---|
 | 99 | 
 | 
|---|
 | 100 | 
 | 
|---|
| [6c5812] | 101 | double VolumeOfConvexEnvelope(ofstream *out, config *configuration, Boundaries *BoundaryPoints, molecule *mol);
 | 
|---|
| [318bfd] | 102 | double * GetDiametersOfCluster(ofstream *out, Boundaries *BoundaryPtr, molecule *mol, bool IsAngstroem);
 | 
|---|
| [edb650] | 103 | void PrepareClustersinWater(ofstream *out, config *configuration, molecule *mol, double ClusterVolume, double celldensity);
 | 
|---|
| [8eb17a] | 104 | 
 | 
|---|
 | 105 | 
 | 
|---|
 | 106 | #endif /*BOUNDARY_HPP_*/
 | 
|---|