00001 00002 /********************************************************************** 00003 * lvert_strip.H: 00004 **********************************************************************/ 00005 #ifndef LVERT_STRIP_H_IS_INCLUDED 00006 #define LVERT_STRIP_H_IS_INCLUDED 00007 00008 #include "vert_strip.H" // base class 00009 #include "lface.H" // subdivision faces, edges, verts 00010 00011 /********************************************************************** 00012 * LvertStrip: 00013 * 00014 * Vertex strip class for LMESHs (subdivision meshes). 00015 * 00016 * A vertex strip in the control mesh corresponds to a vertex 00017 * strip with the same number of vertices in the next-level 00018 * subdivision mesh. 00019 **********************************************************************/ 00020 #define CLvertStrip const LvertStrip 00021 class LvertStrip : public VertStrip { 00022 public: 00023 //******** MANAGERS ******** 00024 LvertStrip() : _substrip(0) {} 00025 virtual ~LvertStrip() { delete_substrip(); } 00026 00027 void clear_subdivision(int level); 00028 00029 Lvert* lv(int i) const { return (Lvert*)_verts[i]; } 00030 00031 //******** BUILDING ******** 00032 virtual void reset() { delete_substrip(); VertStrip::reset(); } 00033 00034 //******** DRAWING ******** 00035 virtual void draw(StripCB* cb) { draw(cur_level(), cb); } 00036 00037 protected: 00038 //******** MEMBER DATA ******** 00039 LvertStrip* _substrip; // corresponding finer-level vert strip 00040 00041 //******** MANAGING SUBSTRIP ******** 00042 void delete_substrip() { delete _substrip; _substrip = 0;} 00043 void generate_substrip(); 00044 int cur_level() const; 00045 00046 //******** DRAWING (INTERNAL) ******** 00047 void draw(int level, StripCB* cb); 00048 }; 00049 00050 #endif // LVERT_STRIP_H_IS_INCLUDED 00051 00052 /* end of file lvert_strip.H */