00001
00002
00003
00004
00005
00006 #ifndef BALL_STRUCTURE_SOLVENTACCESSIBLESURFACE_H
00007 #define BALL_STRUCTURE_SOLVENTACCESSIBLESURFACE_H
00008
00009 #ifndef BALL_STRUCTURE_SASEDGE_H
00010 # include <BALL/STRUCTURE/SASEdge.h>
00011 #endif
00012
00013 #ifndef BALL_STRUCTURE_SASFACE_H
00014 # include <BALL/STRUCTURE/SASFace.h>
00015 #endif
00016
00017 #ifndef BALL_STRUCTURE_SASVERTEX_H
00018 # include <BALL/STRUCTURE/SASVertex.h>
00019 #endif
00020
00021 #ifndef BALL_STRUCTURE_REDUCEDSURFACE_H
00022 # include <BALL/STRUCTURE/reducedSurface.h>
00023 #endif
00024
00025 #ifndef BALL_MATHS_SPHERE3_H
00026 # include <BALL/MATHS/sphere3.h>
00027 #endif
00028
00029 #include <vector>
00030
00031
00032
00033 namespace BALL
00034 {
00035 class TriangulatedSAS;
00036 class SASTriangulator;
00037
00041 class BALL_EXPORT SolventAccessibleSurface
00042 {
00043 public:
00044
00051 friend class TriangulatedSAS;
00052 friend class SASTriangulator;
00053
00054 BALL_CREATE(SolventAccessibleSurface)
00055
00056
00059
00060
00063 SolventAccessibleSurface()
00064 ;
00065
00071 SolventAccessibleSurface(const SolventAccessibleSurface& sas, bool = false)
00072 ;
00073
00076 SolventAccessibleSurface(ReducedSurface* reduced_surface)
00077 ;
00078
00082 virtual ~SolventAccessibleSurface()
00083 ;
00084
00086
00089
00092 void setVertex(SASVertex* vertex, Position i)
00093 throw(Exception::IndexOverflow);
00094
00097 SASVertex* getVertex(Position i) const
00098 throw(Exception::IndexOverflow);
00099
00102 Size numberOfVertices() const
00103 ;
00104
00107 void setEdge(SASEdge* edge, Position i)
00108 throw(Exception::IndexOverflow);
00109
00112 SASEdge* getEdge(Position i) const
00113 throw(Exception::IndexOverflow);
00114
00117 Size numberOfEdges() const
00118 ;
00119
00122 void setFace(SASFace* face, Position i)
00123 throw(Exception::IndexOverflow);
00124
00127 SASFace* getFace(Position i) const
00128 throw(Exception::IndexOverflow);
00129
00132 Size numberOfFaces() const
00133 ;
00134
00137 void setRS(ReducedSurface* rs)
00138 ;
00139
00142 ReducedSurface* getRS() const
00143 ;
00144
00147 void clear();
00148
00151 void compute()
00152 ;
00153
00155
00156 private:
00157
00158
00159
00161
00162 void preProcessing()
00163 ;
00164
00165 void get()
00166 ;
00167
00168 void createFace(Position j)
00169 ;
00170
00171 void createVertex(Position j)
00172 ;
00173
00174 void createEdge(Position j)
00175 ;
00176
00178
00179
00180 protected:
00181
00182 Position number_of_vertices_;
00183 ::std::vector<SASVertex*> vertices_;
00184 Position number_of_edges_;
00185 ::std::vector<SASEdge*> edges_;
00186 Position number_of_faces_;
00187 ::std::vector<SASFace*> faces_;
00188 ReducedSurface* reduced_surface_;
00189
00190 };
00191
00192
00196
00199 BALL_EXPORT std::ostream& operator << (std::ostream& s,
00200 const SolventAccessibleSurface& sas);
00201
00203
00204
00205 }
00206
00207 #endif // BALL_STRUCTURE_SOLVENTACCESSIBLESURFACE_H
00208