00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef _SURFACEASSEMBLY_H
00034 #define _SURFACEASSEMBLY_H
00035
00036 #include "ParamSurfaceInt.h"
00037
00038 namespace Go
00039 {
00042
00043
00044 class SurfaceAssembly
00045 {
00046 public:
00047
00049 SurfaceAssembly(boost::shared_ptr<ParamSurfaceInt> surf,
00050 std::vector<std::pair<double,int> > u_div,
00051 std::vector<std::pair<double,int> > v_div,
00052 std::vector<RectDomain> sing_domain,
00053 double rel_par_res);
00054
00056 ~SurfaceAssembly();
00057
00058 void resetSubIndex(int idx=0)
00059 { idx_sub_ = idx; }
00060
00061 void resetAssemblyIndex()
00062 { idx_assembly_ = 0; }
00063
00064 int getNmbSubSurface();
00065
00066
00067 bool getNextSubSurface(boost::shared_ptr<ParamSurfaceInt>& sub_sf,
00068 int& idx, int& sing_idx);
00069
00070 bool getNextAssembly(boost::shared_ptr<ParamSurfaceInt>& assembly,
00071 int& idx, bool& potential_sing);
00072
00076 bool subSfNeighbour(int idx1, int idx2);
00077
00078 bool doTouch(int idx1, int idx2);
00079
00080 bool touchAtSingularity(int idx1, int idx2);
00081
00082 bool isInPrevAssembly(int idx1, int idx2);
00083
00084 bool isInFirstAssembly(boost::shared_ptr<ParamSurfaceInt> sub_srf);
00085
00086 int getSubSurfaceIndex(boost::shared_ptr<ParamSurfaceInt> sub_srf,
00087 bool& at_end);
00088
00089 std::vector<std::pair<double,int> > getUdiv()
00090 {
00091 return u_div_;
00092 }
00093
00094 std::vector<std::pair<double,int> > getVdiv()
00095 {
00096 return v_div_;
00097 }
00098
00099 private:
00100 boost::shared_ptr<ParamSurfaceInt> surf_;
00101 std::vector<std::pair<double,int> > u_div_;
00102 std::vector<std::pair<double,int> > v_div_;
00103 std::vector<RectDomain> sing_domain_;
00104 double ptol_;
00105 bool closed_in_u_;
00106 bool closed_in_v_;
00107 mutable int idx_sub_;
00108 mutable int idx_assembly_;
00109
00110
00111
00112
00113
00114 void refineSurf();
00115 };
00117 }
00118
00119 #endif // _SURFACEASSEMBLY_H
00120
00121
00122
00123