00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef EDGE_FRAME_H_IS_INCLUDED
00021 #define EDGE_FRAME_H_IS_INCLUDED
00022
00023 #include "simplex_frame.H"
00024
00025
00026
00027
00028
00029
00030 class EdgeFrame : public SimplexFrame {
00031 public:
00032
00033
00034
00035 EdgeFrame(uint key, Bedge* e, CWvec& n, double s=0.5, bool flip=false) :
00036 SimplexFrame(key, e, (flip?(-e->vec()):(e->vec())), n),
00037 _orig_n(n),
00038 _flip(flip),
00039 _s(s) {}
00040
00041
00042
00043 DEFINE_RTTI_METHODS3("EdgeFrame", EdgeFrame*, SimplexFrame, CSimplexData*);
00044
00045
00046
00047 Wvec orig_n() const { return _orig_n; }
00048 double s() const { return _s; }
00049 Bedge* edge() const { return (Bedge*) _simplex; }
00050
00051
00052
00053 virtual Wpt o() { return edge()->interp(_s); }
00054
00055
00056
00057 virtual void notify_simplex_changed() {
00058
00059 _dirty = 1;
00060 changed();
00061 }
00062
00063
00064
00065
00066 protected:
00067 Wvec _orig_n;
00068 bool _flip;
00069 double _s;
00070
00071
00072 virtual void recompute() {
00073
00074 set_((_flip?(-(edge()->vec())):(edge()->vec())), _orig_n);
00075 SimplexFrame::recompute();
00076 }
00077 };
00078 typedef const EdgeFrame CEdgeFrame;
00079
00080 #endif // EDGE_FRAME_H_IS_INCLUDED
00081
00082