Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

geometry/quadsubdiv.hh
Go to the documentation of this file.
00001 /* Topology.
00002  * how to subdivide a quad
00003  */
00004 
00005 #ifndef quadsubdiv_hh
00006 #define quadsubdiv_hh
00007 
00008 #include <iostream>
00009 #include "subdivision.hh"
00010 
00011 namespace concepts {
00012 
00013   // forward declaration
00014   class Vertex;
00015   class Connector1;
00016   class Edge;
00017   class Quad;
00018   class InfiniteEdge;
00019   class InfiniteQuad;
00020 
00021   // ******************************************************* QuadSubdivision **
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   // *********************************************************** QuadSubdiv4 **
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   // ********************************************************** QuadSubdiv2H **
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   // ********************************************************** QuadSubdiv2V **
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   // ******************************************************* InfQuadSubdivision **
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   // ******************************************************* InfQuadSubdiv2V **
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 } // namespace concepts
00196 
00197 #endif // quadsubdiv_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)