00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef INC_RVC_CADTOOLS_H
00027 #define INC_RVC_CADTOOLS_H
00028
00029 #ifndef INC_RVC_CAD_H
00030 #include <rvc/cad.h>
00031 #endif
00032
00033 #ifndef INC_RVC_STYLE_H
00034 #include <rvc/style.h>
00035 #endif
00036
00037 #ifndef INC_RVC_HYPERIDX_H
00038 #include <rvc/hyperidx.h>
00039 #endif
00040
00041 #ifndef INC_RVC_DBCAD_H
00042 #include <rvc/dbcad.h>
00043 #endif
00044
00045 #ifndef INC_RVC_DBTABLE_H
00046 #include <rvc/dbtable.h>
00047 #endif
00048
00049
00050 #ifndef GENERATING_DOXYGEN_OUTPUT
00051
00052 namespace RVC {
00053 class CADTOOLKITOBSERVER;
00054 class CADSTDATT;
00055 }
00056 #endif // GENERATING_DOXYGEN_OUTPUT
00057
00058
00059 namespace RVC {
00060
00062 class CADTOOLKIT : public SUBJECT<CADTOOLKITOBSERVER> {
00063 public:
00064
00065 enum TOOLFLAG {
00066 TOOLFLAG_None = 0x000,
00067 TOOLFLAG_NoQtree = 0x001,
00068 TOOLFLAG_NoDBStatTable = 0x002,
00069 TOOLFLAG_NoStyle = 0x004,
00070 TOOLFLAG_NoDatabase = 0x008,
00071 TOOLFLAG_NoHyper = 0x010,
00072 TOOLFLAG_NoCreateTables = 0x020,
00073 TOOLFLAG_NoCreateStyle = 0x040,
00074 TOOLFLAG_IgnoreBadMinMax = 0x080,
00075 TOOLFLAG_NoSaveQTree = 0x100
00076 };
00077
00078 enum JOINFLAG {
00079 JOINFLAG_BestDistance = 0x01,
00080 JOINFLAG_BestAngle = 0x02,
00081 JOINFLAG_JoinStart = 0x04,
00082 JOINFLAG_JoinEnd = 0x08,
00083 JOINFLAG_JoinBothEnds = 0x0C
00084 };
00085
00086 CADTOOLKIT (
00087 );
00088
00089 virtual ~CADTOOLKIT (
00090 );
00091
00092 INT32 AddElement (
00093 CAD::ELEMENT& Element
00094 );
00095
00096 ERRVALUE AppendBlock (
00097 INT32 SourceBlock,
00098 INT32 DestBlock
00099 );
00100
00101 ERRVALUE AppendObject (
00102 const RVC::OBJITEM& ObjItem
00103 );
00104
00105 ERRVALUE BreakElement (
00106 INT32 ElemNum,
00107 const POLYLINE& BreakPoints
00108 );
00109
00110 ERRVALUE ChangeCurrentBlock (
00111 INT32 NewBlock
00112 );
00113
00114 ERRVALUE ChangeElement (
00115 INT32 ElemNum,
00116 RVC::CAD::ELEMENT& Element
00117 );
00118
00119 ERRVALUE CheckForCyclic (
00120 INT32 SourceBlock,
00121 INT32 InsertBlock
00122 );
00123
00124 ERRVALUE Close ();
00125
00126 ERRVALUE CopyElement (
00127 INT32 ElemNum,
00128 const TRANS2D_AFFINE& OldToNew
00129 );
00130
00131 ERRVALUE CopyElements (
00132 const UNSIGNEDSET& set,
00133 const TRANS2D_AFFINE& OldToNew
00134 );
00135
00136 INT32 CreateBlock (
00137 CADBLOCK& block
00138 );
00139
00140 ERRVALUE DeleteBlock (
00141 UINT32 BlockNum
00142 );
00143
00144 ERRVALUE DeleteElement (
00145 INT32 ElemNum
00146 );
00147
00148 ERRVALUE ExplodeElement (
00149 INT32 ElemNum
00150 );
00151
00152 INT32 GetBlockDBIndex (
00153 INT32 BlockNum
00154 );
00155
00156 double GetZValue (
00157 INT32 ElemNum
00158 );
00159
00160 bool IsBlockDeleted (
00161 INT32 BlockNum
00162 ) const;
00163
00164 ERRVALUE JoinLine (
00165 INT32 ElemNum,
00166 double MaxAngle,
00167 JOINFLAG flags
00168 );
00169
00170 ERRVALUE JoinLines (
00171 const UNSIGNEDSET& set,
00172 double MaxAngle,
00173 JOINFLAG flags
00174 );
00175
00176 ERRVALUE MoveElement (
00177 INT32 ElemNum,
00178 const TRANS2D_AFFINE& OldToNew
00179 );
00180
00181 ERRVALUE MoveElements (
00182 const UNSIGNEDSET& set,
00183 const TRANS2D_AFFINE& OldToNew
00184 );
00185
00186 ERRVALUE Open (
00187 const RVC::OBJITEM& ObjItem,
00188 TOOLFLAG flags
00189 );
00190
00191 ERRVALUE Open (
00192 const RVC::CAD& CadObj,
00193 TOOLFLAG flags
00194 );
00195
00196 ERRVALUE RecoverFromUndo (
00197 );
00198
00199 ERRVALUE ReverseLinePoints (
00200 INT32 ElemNum
00201 );
00202
00203 ERRVALUE Save (
00204 RVC::OBJITEM& ObjItem
00205 );
00206
00207 ERRVALUE SaveBlock (
00208 INT32 BlockNum,
00209 RVC::OBJITEM& ObjItem
00210 );
00211
00212 ERRVALUE SetBlock (
00213 UINT32 BlockNum,
00214 CADBLOCK& block
00215 );
00216
00217 TOOLFLAG SetFlags (
00218 TOOLFLAG NewFlags
00219 );
00220
00221 void SetSearchDist (
00222 double dist
00223 ) { m_SearchDist = dist; }
00224
00225 ERRVALUE SetZValue (
00226 INT32 ElemNum,
00227 double zvalue
00228 );
00229
00230 ERRVALUE SortElement (
00231 INT32 ElemNum,
00232 bool ToFront
00233 );
00234
00235 ERRVALUE SortElementIndex (
00236 const BITSET& elemset,
00237 bool ToFront
00238 );
00239
00240 ERRVALUE StraightenLine (
00241 INT32 ElemNum
00242 );
00243
00244 ERRVALUE UpdateStdAttrib (
00245 UINT32 flags
00246 );
00247
00248 ERRVALUE Validate ();
00249
00250 private:
00251 #ifndef GENERATING_DOXYGEN_OUTPUT
00252 class LOCALOBSERVER;
00253 class EXPLODEDRAW;
00254 class JOINTABLE;
00255
00256 struct CBLOCKINFO {
00257 CADBLOCK m_block;
00258 bool m_NewBlock;
00259 bool m_Deleted;
00260 bool m_IsDirty;
00261 INT32 m_BlockNum;
00262 };
00263
00264 CAD m_CadObj;
00265 INT32 m_CurBlock;
00266 INT32 m_ElemIDTableNum;
00267 HYPERINDEX m_HyperObj;
00268 STYLE m_StyleObj;
00269 TOOLFLAG m_ToolkitFlags;
00270 CADSTDATT *m_sdh;
00271 DBASE_CAD m_DBaseObj;
00272 DBTABLE::RECORD m_Record;
00273 SIMPLE_ARRAY<DBLISTELMT> m_DBList;
00274 SIMPLE_ARRAY<CBLOCKINFO> m_BlockList;
00275 double m_CurZValue;
00276 double m_SearchDist;
00277 bool m_HasDftZValue;
00278 bool m_HasMinMax;
00279 bool m_IgnoreAddDBList;
00280 bool m_HasSearchTree;
00281 LOCALOBSERVER *m_Observer;
00282
00283 ERRVALUE AddElemDBList (INT32 ElemNum);
00284 ERRVALUE AddQTreeElem (INT32 elemnum, const DRECT2D& Extents);
00285 ERRVALUE BuildQTree(INT32 BlockNum);
00286
00287 void CallOnAdd (INT32 ElemNum);
00288 void CallOnAddBlock (INT32 BlockNum);
00289 void CallOnChangeBlock (INT32 BlockNum);
00290 void CallOnDelete (INT32 ElemNum);
00291 void CallOnDeleteBlock (INT32 BlockNum);
00292 void CallOnJoinBegin (INT32 ElemNum, INT32 OtherElemNum);
00293 void CallOnJoinEnd (INT32 ElemNum);
00294 void CallOnMoveBegin (INT32 ElemNum);
00295 void CallOnMoveEnd (INT32 ElemNum);
00296 void CallOnSortBegin (INT32 ElemNum);
00297 void CallOnSortEnd (INT32 ElemNum);
00298 void CallOnSplitBegin (INT32 ElemNum);
00299 void CallOnSplitEnd (INT32 ElemNum, INT32 OtherElemNum);
00300
00301 ERRVALUE ChangeQTreeElem (
00302 INT32 ElemNum,
00303 const DRECT2D& Extents
00304 ) { return (CopyQTreeElem(ElemNum, ElemNum, Extents)); }
00305
00306 ERRVALUE ComputeJoinLine (SIMPLE_ARRAY<JOINTABLE>& JoinTable, INT32 ElemNum, double MaxAngle, JOINFLAG flags);
00307 INT32 ComputeJoinLineNumber (INT32 ElemNum, int useend, DPOINT2D *endpts, double MaxAngle, bool& JoinEnd, JOINFLAG flags);
00308 INT32 CopyDBRecordRaw (INT32 TableNum, INT32 SourceRecord, INT32 DestRecord);
00309 ERRVALUE CopyDBRecords (INT32 SourceElem, INT32 DestElem);
00310 ERRVALUE CopyQTreeElem (INT32 source, INT32 dest, const DRECT2D& Extents);
00311 ERRVALUE DeleteBlockRaw (INT32 blocknum);
00312 ERRVALUE DeleteQTreeElem (INT32 elemnum, const DRECT2D& Extents);
00313 ERRVALUE GetBlockInsertList (INT32 BlockNum, BITSET& BlockSet);
00314 ERRVALUE JoinLineRaw (SIMPLE_ARRAY<JOINTABLE>& JoinTable, INT32 ElemNum, INT32 JoinElemNum, bool start, bool JoinEnd);
00315 ERRVALUE OpenBlocks ();
00316 ERRVALUE SaveBlockRaw (CAD& DestCadObj, INT32 sblocknum, INT32 dblocknum, SIMPLE_ARRAY<INT32>& BlockTrans);
00317
00318
00319 CADTOOLKIT (const CADTOOLKIT& rhs);
00320 CADTOOLKIT operator= (const CADTOOLKIT& rhs);
00321 #endif // GENERATING_DOXYGEN_OUTPUT
00322 };
00323
00324 #ifndef GENERATING_DOXYGEN_OUTPUT
00325 DEFINE_ENUM_OP_BITWISE(CADTOOLKIT::JOINFLAG)
00326 DEFINE_ENUM_OP_BITWISE(CADTOOLKIT::TOOLFLAG)
00327 #endif
00328
00329 class CADTOOLKITOBSERVER : public OBSERVER_BASE {
00330 public:
00331
00332 CADTOOLKITOBSERVER (
00333 CADTOOLKIT& ctk
00334 ) :
00335 OBSERVER_BASE(ctk)
00336 {}
00337
00338 virtual ~CADTOOLKITOBSERVER (
00339 ) {}
00340
00341 virtual void OnAdd (
00342 INT32 ElemNum
00343 );
00344
00345 virtual void OnAddBlock (
00346 INT32 BlockNum
00347 );
00348
00349 virtual void OnChangeBlock (
00350 INT32 BlockNum
00351 );
00352
00353 virtual void OnDelete (
00354 INT32 ElemNum
00355 );
00356
00357 virtual void OnDeleteBlock (
00358 INT32 BlockNum
00359 );
00360
00361 virtual void OnJoinBegin (
00362 INT32 ElemNum,
00363 INT32 OtherElemNum
00364 );
00365
00366 virtual void OnJoinEnd (
00367 INT32 ElemNum
00368 );
00369
00370 virtual void OnMoveBegin (
00371 INT32 ElemNum
00372 );
00373
00374 virtual void OnMoveEnd (
00375 INT32 ElemNum
00376 );
00377
00378 virtual void OnSplitBegin (
00379 INT32 ElemNum
00380 );
00381
00382 virtual void OnSplitEnd (
00383 INT32 ElemNum,
00384 INT32 OtherElemNum
00385 );
00386
00387 virtual void OnSortBegin (
00388 INT32 ElemNum
00389 );
00390
00391 virtual void OnSortEnd (
00392 INT32 ElemNum
00393 );
00394
00395 };
00396
00397 }
00398
00399 #endif // INC_RVC_CADTOOLS_H