Go to the documentation of this file.00001
00002
00003
00004
00005 #ifndef quadsubdiv_hh
00006 #define quadsubdiv_hh
00007
00008 #include <iostream>
00009 #include "subdivision.hh"
00010
00011 namespace concepts {
00012
00013
00014 class Vertex;
00015 class Connector1;
00016 class Edge;
00017 class Quad;
00018 class InfiniteEdge;
00019 class InfiniteQuad;
00020
00021
00022
00035 class QuadSubdivision : public Subdivision {
00036 public:
00039 virtual void createChildren(Quad& q) const = 0;
00043 virtual void removeChildren(Quad& q) const = 0;
00050 virtual Edge* newEdge(const Quad& q, uint i) const = 0;
00058 virtual Vertex* newVertex(const Quad& q, uint i) const = 0;
00059 };
00060
00061
00062
00071 class QuadSubdiv4 : public QuadSubdivision {
00072 public:
00073 virtual void createChildren(Quad& q) const;
00074 virtual void removeChildren(Quad& q) const;
00075 virtual Edge* newEdge(const Quad& q, uint i) const;
00076 virtual Vertex* newVertex(const Quad& q, uint i) const;
00077 static const QuadSubdiv4* instance();
00078 virtual ~QuadSubdiv4();
00079 protected:
00080 virtual std::ostream& info(std::ostream& os) const;
00081 private:
00082 static std::auto_ptr<QuadSubdiv4> instance_;
00083 };
00084
00085
00086
00093 class QuadSubdiv2H : public QuadSubdivision {
00094 public:
00095 virtual void createChildren(Quad& q) const;
00096 virtual void removeChildren(Quad& q) const;
00097 virtual Edge* newEdge(const Quad& q, uint i) const;
00098 virtual Vertex* newVertex(const Quad& q, uint i) const;
00099 static const QuadSubdiv2H* instance();
00100 virtual ~QuadSubdiv2H();
00101 protected:
00102 virtual std::ostream& info(std::ostream& os) const;
00103 private:
00104 static std::auto_ptr<QuadSubdiv2H> instance_;
00105 };
00106
00107
00108
00115 class QuadSubdiv2V : public QuadSubdivision {
00116 public:
00117 virtual void createChildren(Quad& q) const;
00118 virtual void removeChildren(Quad& q) const;
00119 virtual Edge* newEdge(const Quad& q, uint i) const;
00120 virtual Vertex* newVertex(const Quad& q, uint i) const;
00121 static const QuadSubdiv2V* instance();
00122 virtual ~QuadSubdiv2V();
00123 protected:
00124 virtual std::ostream& info(std::ostream& os) const;
00125 private:
00126 static std::auto_ptr<QuadSubdiv2V> instance_;
00127 };
00128
00129
00130
00145 class InfQuadSubdivision : public Subdivision {
00146 public:
00149 virtual void createChildren(InfiniteQuad& q) const = 0;
00153 virtual void removeChildren(InfiniteQuad& q) const = 0;
00160 virtual Connector1* newEdge(const InfiniteQuad& q, uint i) const = 0;
00168 virtual Vertex* newVertex(const InfiniteQuad& q, uint i) const = 0;
00169 };
00170
00171
00172
00180 class InfQuadSubdiv2V : public InfQuadSubdivision {
00181 public:
00182 virtual void createChildren(InfiniteQuad& q) const;
00183 virtual void removeChildren(InfiniteQuad& q) const;
00184 virtual Connector1* newEdge(const InfiniteQuad& q, uint i) const;
00185 virtual Vertex* newVertex(const InfiniteQuad& q, uint i) const;
00186 static const InfQuadSubdiv2V* instance();
00187 virtual ~InfQuadSubdiv2V();
00188 protected:
00189 virtual std::ostream& info(std::ostream& os) const;
00190 private:
00191 static std::auto_ptr<InfQuadSubdiv2V> instance_;
00192 };
00193
00194
00195 }
00196
00197 #endif // quadsubdiv_hh