00001
00002
00003
00004 #ifndef SIMPLEX_DATA_H_IS_INCLUDED
00005 #define SIMPLEX_DATA_H_IS_INCLUDED
00006
00007 #include "net/rtti.H"
00008 #include "mlib/points.H"
00009
00010 using namespace mlib;
00011
00012 typedef unsigned int uint;
00013 typedef unsigned short ushort;
00014 typedef unsigned char uchar;
00015
00016 class Bsimplex;
00017
00018
00019
00020
00021
00022
00023 class SimplexData;
00024 typedef const SimplexData CSimplexData;
00025 class SimplexData {
00026 public:
00027
00028
00029
00030 void set(uint id, Bsimplex* s);
00031 void set(Cstr_ptr& str, Bsimplex* s) { set((uint)**str, s); }
00032
00033 SimplexData(uint key, Bsimplex* s) : _id(0), _simplex(0) { set(key, s);}
00034 SimplexData(Cstr_ptr& str, Bsimplex* s): _id(0), _simplex(0) { set(str, s);}
00035
00036 virtual ~SimplexData();
00037
00038
00039 DEFINE_RTTI_METHODS_BASE("SimplexData", CSimplexData*);
00040
00041
00042 uint id() const { return _id; }
00043 Bsimplex* simplex() const { return _simplex; }
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054 virtual void notify_simplex_changed() {}
00055
00056
00057
00058
00059
00060
00061
00062
00063 virtual void notify_normal_changed() {}
00064
00065
00066
00067
00068
00069 virtual void notify_simplex_xformed(CWtransf&) {}
00070
00071
00072 virtual void notify_simplex_deleted() { _simplex = 0; delete this; }
00073
00074
00075
00076
00077
00078
00079
00080
00081 virtual void notify_split(Bsimplex*) {}
00082
00083
00084 virtual void notify_subdiv_gen() {}
00085
00086
00087
00088 virtual bool handle_subdiv_calc() { return false; }
00089
00090
00091 protected:
00092 uint _id;
00093 Bsimplex* _simplex;
00094 };
00095
00096
00097
00098
00099
00100
00101
00102
00103 class SimplexDataList : public ARRAY<SimplexData*> {
00104 public:
00105
00106 SimplexDataList(int n=0) : ARRAY<SimplexData*>(n) {}
00107 ~SimplexDataList();
00108
00109
00110 SimplexData* get_item(uint key) const {
00111 for (int k=0; k<_num; k++)
00112 if (_array[k]->id() == key)
00113 return _array[k];
00114 return 0;
00115 }
00116
00117
00118 void notify_split(Bsimplex* new_simp) const {
00119 for (int k=0; k<_num; k++)
00120 _array[k]->notify_split(new_simp);
00121 }
00122 void notify_simplex_changed() const {
00123 for (int k=0; k<_num; k++)
00124 _array[k]->notify_simplex_changed();
00125 }
00126 void notify_normal_changed() const {
00127 for (int k=0; k<_num; k++)
00128 _array[k]->notify_normal_changed();
00129 }
00130 void notify_simplex_xformed(CWtransf& xf) const {
00131 for (int k=0; k<_num; k++)
00132 _array[k]->notify_simplex_xformed(xf);
00133 }
00134 void notify_simplex_deleted() const {
00135 for (int k=0; k<_num; k++)
00136 _array[k]->notify_simplex_deleted();
00137 }
00138 void notify_subdiv_gen() const {
00139 for (int k=0; k<_num; k++)
00140 _array[k]->notify_subdiv_gen();
00141 }
00142 bool handle_subdiv_calc() {
00143
00144
00145 bool ret = false;
00146 for (int k=0; k<_num; k++)
00147 ret = _array[k]->handle_subdiv_calc() || ret;
00148 return ret;
00149 }
00150 };
00151
00152 #endif // SIMPLEX_DATA_H_IS_INCLUDED
00153
00154