00001
00019 #ifndef INC_RVC_SHAPETOOLKIT_H
00020 #define INC_RVC_SHAPETOOLKIT_H
00021
00022 #ifndef INC_RVC_SHAPE_H
00023 #include <rvc/shape.h>
00024 #endif
00025
00026 #ifndef INC_RVC_STYLE_H
00027 #include <rvc/style.h>
00028 #endif
00029
00030 #ifndef INC_RVC_DBSHAPE_H
00031 #include <rvc/dbshape.h>
00032 #endif
00033
00034 namespace RVC {
00035
00036 #ifndef GENERATING_DOXYGEN_OUTPUT
00037
00038 class SHAPETOOLKITOBSERVER;
00039 #endif // GENERATING_DOXYGEN_OUTPUT
00040
00041 class SHAPETOOLKIT : public SUBJECT<SHAPETOOLKITOBSERVER> {
00042 public:
00043
00044 enum TOOLFLAG {
00045 TOOLFLAG_None = 0x000,
00046 TOOLFLAG_NoQtree = 0x001,
00047 TOOLFLAG_NoDatabase = 0x008,
00048 TOOLFLAG_NoCreateTables = 0x020,
00049 TOOLFLAG_NoSaveQTree = 0x100
00050 };
00051
00052 SHAPETOOLKIT ();
00053
00054 virtual ~SHAPETOOLKIT ();
00055
00056 INT32 AddElement (
00057 SHAPE::ELEMENT& Element
00058 );
00059
00060 ERRVALUE ChangeElement (
00061 INT32 ElemNum,
00062 SHAPE::ELEMENT& Element
00063 );
00064
00065 ERRVALUE Close (
00066 );
00067
00068 ERRVALUE CopyElement (
00069 INT32 ElemNum,
00070 const TRANS2D_AFFINE& OldToNew
00071 );
00072
00073 ERRVALUE CopyElements (
00074 const BITSET& set,
00075 const TRANS2D_AFFINE& OldToNew
00076 );
00077
00078 ERRVALUE DeleteElement (
00079 INT32 ElemNum
00080 );
00081
00082 ERRVALUE ExplodeElement (
00083 INT32 ElemNum
00084 );
00085
00086 double GetZValue (
00087 INT32 ElemNum
00088 );
00089
00090 ERRVALUE MoveElement (
00091 INT32 ElemNum,
00092 const TRANS2D_AFFINE& OldToNew
00093 );
00094
00095 ERRVALUE MoveElements (
00096 const BITSET& set,
00097 const TRANS2D_AFFINE& OldToNew
00098 );
00099
00100 ERRVALUE Open (
00101 const OBJITEM& ObjItem,
00102 TOOLFLAG flags
00103 );
00104
00105 ERRVALUE Open (
00106 const SHAPE& ShapeObj,
00107 TOOLFLAG flags
00108 );
00109
00110 ERRVALUE RecoverFromUndo (
00111 );
00112
00113 ERRVALUE ReverseLinePoints (
00114 INT32 ElemNum
00115 );
00116
00117 ERRVALUE Save (
00118 OBJITEM& ObjItem
00119 );
00120
00121 TOOLFLAG SetFlags (
00122 TOOLFLAG NewFlags
00123 );
00124
00125 void SetSearchDist (
00126 double dist
00127 ) { m_SearchDist = dist; }
00128
00129 ERRVALUE SetZValue (
00130 INT32 ElemNum,
00131 double zvalue
00132 );
00133
00134 ERRVALUE StraightenLine (
00135 INT32 ElemNum
00136 );
00137
00138 ERRVALUE Validate (
00139 );
00140
00141 private:
00142
00143 #ifndef GENERATING_DOXYGEN_OUTPUT
00144 SHAPETOOLKIT (const SHAPETOOLKIT& rhs);
00145 SHAPETOOLKIT operator= (const SHAPETOOLKIT& rhs);
00146
00147 class LOCALOBSERVER : public DBASE::OBSERVER {
00148 public:
00149
00150 LOCALOBSERVER (
00151 DBASE_SHAPE& Database,
00152 INT32& ElemIDTableNum
00153 ) : DBASE::OBSERVER(Database), m_ElemIDTableNum(ElemIDTableNum) {}
00154
00155 private:
00156 virtual void OnTableDropEnd (INT32 TableNum);
00157
00158 INT32& m_ElemIDTableNum;
00159 };
00160
00161 SHAPE m_ShapeObj;
00162 INT32 m_ElemIDTableNum;
00163 TOOLFLAG m_ToolkitFlags;
00164 DBASE_SHAPE m_DBaseObj;
00165 DBTABLE::RECORD m_Record;
00166 SIMPLE_ARRAY<DBLISTELMT> m_DBList;
00167 double m_CurZValue;
00168 double m_SearchDist;
00169 bool m_HasDftZValue;
00170 bool m_HasMinMax;
00171 bool m_IgnoreAddDBList;
00172 bool m_HasSearchTree;
00173 LOCALOBSERVER* m_Observer;
00174 #endif // GENERATING_DOXYGEN_OUTPUT
00175
00176 void CallOnAdd (INT32 ElemNum);
00177 void CallOnDelete (INT32 ElemNum);
00178 void CallOnMoveBegin (INT32 ElemNum);
00179 void CallOnMoveEnd (INT32 ElemNum);
00180
00181 ERRVALUE AddElemDBList (INT32 ElemNum);
00182 ERRVALUE AddQTreeElem (INT32 elemnum, const DRECT2D& Extents);
00183 ERRVALUE BuildQTree(INT32 BlockNum);
00184
00185 ERRVALUE ChangeQTreeElem (
00186 INT32 ElemNum,
00187 const DRECT2D& Extents
00188 ) { return (CopyQTreeElem(ElemNum, ElemNum, Extents)); }
00189
00190 INT32 CopyDBRecordRaw (INT32 TableNum, INT32 SourceRecord, INT32 DestRecord);
00191 ERRVALUE CopyDBRecords (INT32 SourceElem, INT32 DestElem);
00192 ERRVALUE CopyQTreeElem (INT32 source, INT32 dest, const DRECT2D& Extents);
00193 ERRVALUE DeleteQTreeElem (INT32 elemnum, const DRECT2D& Extents);
00194
00195 };
00196
00197 DEFINE_ENUM_OP_BITWISE(SHAPETOOLKIT::TOOLFLAG)
00198
00199 class SHAPETOOLKITOBSERVER : public OBSERVER_BASE {
00200 public:
00201
00202 SHAPETOOLKITOBSERVER (
00203 SHAPETOOLKIT& ctk
00204 ) :
00205 OBSERVER_BASE(ctk)
00206 {}
00207
00208 virtual ~SHAPETOOLKITOBSERVER (
00209 ) {}
00210
00211 virtual void OnAdd (
00212 INT32 ElemNum
00213 );
00214
00215 virtual void OnDelete (
00216 INT32 ElemNum
00217 );
00218
00219 virtual void OnMoveBegin (
00220 INT32 ElemNum
00221 );
00222
00223 virtual void OnMoveEnd (
00224 INT32 ElemNum
00225 );
00226
00227 };
00228
00229 }
00230
00231 #endif // INC_RVC_SHAPETOOLKIT_H