00001
00045 #ifndef INC_RVC_HYPERIDX_H
00046 #define INC_RVC_HYPERIDX_H
00047
00048 #ifndef INC_RVC_OBJECT_H
00049 #include <rvc/object.h>
00050 #endif
00051
00052 #ifndef INC_MI32_ELEMTYPE_H
00053 #include <mi32/elemtype.h>
00054 #endif
00055
00056 #ifndef INC_MI32_COLOR_H
00057 #include <mi32/color.h>
00058 #endif
00059
00060 #ifndef INC_MI32_RECT_H
00061 #include <mi32/rect.h>
00062 #endif
00063
00064
00065 #ifndef GENERATING_DOXYGEN_OUTPUT
00066
00067 struct HYPERLINK;
00068 class POLYLINE;
00069 namespace RVC {
00070 class DBASE_ELEMENT;
00071 class ELEMENT;
00072 class HYPERHANDLE;
00073 struct HYPERLINK;
00074 struct HYPERSHAPE;
00075 }
00076 #endif
00077
00078
00079 namespace RVC {
00080
00092 class HYPERINDEX : public RVC::OBJECT {
00093 public:
00094
00095 #ifndef GENERATING_DOXYGEN_OUTPUT
00096 class LINK;
00097 class SHAPE;
00098 #endif // GENERATING_DOXYGEN_OUTPUT
00099
00101 HYPERINDEX (
00102 );
00103
00105 HYPERINDEX (
00106 const RVC::HYPERINDEX& obj
00107 );
00108
00110 virtual ~HYPERINDEX (
00111 );
00112
00114 RVC::HYPERINDEX& operator= (
00115 const RVC::HYPERINDEX& rhs
00116 );
00117
00121 INT32 AddLink (
00122 const LINK& link
00123 );
00124
00126 ERRVALUE AddLinkToShape (
00127 INT32 ShapeNum,
00128 INT32 LinkNum
00129 );
00130
00134 INT32 AddShape (
00135 const SHAPE& shape
00136 );
00137
00141 INT32 AddShape (
00142 const SHAPE& shape,
00143 const POLYLINE& Points
00144 );
00145
00147 ERRVALUE ChangeShape (
00148 INT32 ShapeNum,
00149 const SHAPE& shape,
00150 const POLYLINE& Points
00151 );
00152
00155 ERRVALUE ClearLink (
00156 INT32 LinkNum
00157 );
00158
00160 ERRVALUE ClearShapePoints (
00161 INT32 ShapeNum
00162 );
00163
00168 ERRVALUE DeleteShape (
00169 INT32 ShapeNum
00170 );
00171
00174 INT32 FindShape (
00175 ELEMTYPE ElemType,
00176 INT32 ElemNum
00177 );
00178
00180 ERRVALUE GetExtents (
00181 DRECT3D& rect
00182 );
00183
00186 INT32 GetNumLinks (
00187 );
00188
00191 INT32 GetNumShapes (
00192 );
00193
00195 ERRVALUE Make (
00196 const RVC::OBJECT& parent,
00197 const RVC::DESCRIPTOR& Descriptor,
00198 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00199 );
00200
00202 ERRVALUE Make (
00203 RVC::OBJITEM& ObjItem,
00204 #ifdef RVC_CREDENTIALS_MANDATORY
00205 const char* Source,
00206 const CREDENTIALS* Credentials
00207 #else
00208 const char* Source = 0,
00209 const CREDENTIALS* Credentials = 0
00210 #endif
00211 );
00212
00214 ERRVALUE ReadLink (
00215 INT32 LinkNum,
00216 LINK& link
00217 );
00218
00220 ERRVALUE ReadShape (
00221 INT32 ShapeNum,
00222 SHAPE& shape
00223 );
00224
00226 ERRVALUE ReadShape (
00227 INT32 ShapeNum,
00228 SHAPE& shape,
00229 POLYLINE& Points
00230 );
00231
00233 ERRVALUE ReadShape (
00234 INT32 ShapeNum,
00235 SHAPE& shape,
00236 SIMPLE_ARRAY<INT32>& Links
00237 );
00238
00240 ERRVALUE ReadShape (
00241 INT32 ShapeNum,
00242 SHAPE& shape,
00243 POLYLINE& Points,
00244 SIMPLE_ARRAY<INT32>& Links
00245 );
00246
00248 ERRVALUE RemoveLinkFromShape (
00249 INT32 ShapeNum,
00250 INT32 LinkNum
00251 );
00252
00254 ERRVALUE WriteLink (
00255 INT32 LinkNum,
00256 const LINK& link
00257 );
00258
00260 ERRVALUE WriteShape (
00261 INT32 ShapeNum,
00262 const SHAPE& shape
00263 );
00264
00266 ERRVALUE WriteShape (
00267 INT32 ShapeNum,
00268 const SHAPE& shape,
00269 const POLYLINE& Points
00270 );
00271
00273 ERRVALUE WriteShape (
00274 INT32 ShapeNum,
00275 const SHAPE& shape,
00276 const SIMPLE_ARRAY<INT32>& Links
00277 );
00278
00280 ERRVALUE WriteShape (
00281 INT32 ShapeNum,
00282 const SHAPE& shape,
00283 const POLYLINE& Points,
00284 const SIMPLE_ARRAY<INT32>& Links
00285 );
00286
00287 private:
00288 #ifndef GENERATING_DOXYGEN_OUTPUT
00289
00291 virtual ERRVALUE v_CloseObject ();
00292 virtual OBJTYPE v_GetDftObjectType () const;
00293 virtual bool v_IsObjectOpen () const;
00294 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent, const CREDENTIALS* Credentials);
00295
00296 HYPERHANDLE* m_HyperHandle;
00297 #endif // GENERATING_DOXYGEN_OUTPUT
00298 };
00299
00300
00301 class HYPERINDEX::LINK {
00302 public:
00303
00305 enum TYPE {
00306 TYPE_DISP2DWINDOW = 0,
00307
00308 TYPE_Raster = 2,
00309 TYPE_Vector = 3,
00310 TYPE_CAD = 4,
00311 TYPE_Layout = 5,
00312 TYPE_Group = 6,
00313 TYPE_TIN = 7,
00314 TYPE_TextFile = 8,
00315 TYPE_ExternalFile = 9,
00316 TYPE_URL = 10,
00317 TYPE_FileByAttrib = 11,
00318 TYPE_URLByAttrib = 12,
00319 TYPE_Shape = 13,
00320 TYPE_SMLScript = 14,
00321 TYPE_LAST
00322 };
00323
00325 enum REFTYPE {
00326 REFTYPE_Invalid = 0,
00327 REFTYPE_FilePath,
00328 REFTYPE_ObjItem,
00329 REFTYPE_URL,
00330 REFTYPE_TableField
00331 };
00332
00333 enum POSITION {
00334 POSITION_Click = 0,
00335 POSITION_Center,
00336 POSITION_AsSaved,
00337 POSITION_Max
00338 };
00339
00342 enum SCALE {
00343 SCALE_1X = 0,
00344 SCALE_FullView,
00345 SCALE_AsSaved,
00346 SCALE_Zoomed,
00347 SCALE_ToMap,
00348 SCALE_Max
00349 };
00350
00352 LINK (
00353 );
00354
00355
00356
00358 bool CanUseScalePos (
00359 ) const;
00360
00362 void Clear (
00363 );
00364
00365 const MISTRING& GetDescription (
00366 ) const { return (m_Desc); }
00367
00368 TYPE GetLinkType (
00369 ) const { return (m_LinkType); }
00370
00372 double GetMapScale (
00373 ) const { return (m_MapScale); }
00374
00375 const MISTRING& GetName (
00376 ) const { return (m_Name); }
00377
00380 OBJTYPE GetObjType (
00381 ) const { return (GetObjType(m_LinkType)); }
00382
00385 static OBJTYPE GetObjType (
00386 TYPE Type
00387 );
00388
00389 POSITION GetPosition (
00390 ) const { return (m_PosnType); }
00391
00393 const FILEPATH& GetRefFilePath (
00394 ) const { return (m_FilePath); }
00395
00397 ERRVALUE GetRefObjItem (
00398 RVC::OBJITEM& ObjItem
00399 ) const;
00400
00402 ERRVALUE GetRefTableField (
00403 RVC::OBJECTNAME& TableName,
00404 RVC::OBJECTNAME& FieldName
00405 ) const;
00406
00408 REFTYPE GetRefType (
00409 ) const;
00410
00412 const MISTRING& GetRefURL (
00413 ) const { return (m_URL); }
00414
00415 SCALE GetScaleType (
00416 ) const { return (m_ScaleType); }
00417
00419 double GetZoomFactor (
00420 ) const { return (m_ZoomFactor); }
00421
00425 bool IsValid (
00426 ) const;
00427
00430 bool ReadLinkFromAttribute (
00431 const RVC::DBASE_ELEMENT& DBaseObj,
00432 const RVC::ELEMENT& Element
00433 );
00434
00435 void SetDescription (
00436 const MISTRING& desc
00437 ) { m_Desc = desc; }
00438
00441 void SetLinkType (
00442 TYPE type
00443 );
00444
00445 void SetMapScale (
00446 double MapScale
00447 ) { m_MapScale = MapScale; }
00448
00449 void SetPosition (
00450 POSITION posn
00451 ) { m_PosnType = posn; }
00452
00454 ERRVALUE SetRefFilePath (
00455 const FILEPATH& filepath
00456 );
00457
00460 ERRVALUE SetRefObjItem (
00461 const RVC::OBJITEM& ObjItem
00462 );
00463
00465 ERRVALUE SetRefTableField (
00466 const RVC::OBJECTNAME& TableName,
00467 const RVC::OBJECTNAME& FieldName
00468 );
00469
00471 ERRVALUE SetRefURL (
00472 const MISTRING& URL
00473 );
00474
00475 void SetScaleType (
00476 SCALE scale
00477 ) { m_ScaleType = scale; }
00478
00479 private:
00480 #ifndef GENERATING_DOXYGEN_OUTPUT
00481 FILEPATH m_FilePath;
00482 MISTRING m_Name;
00483 MISTRING m_Desc;
00484 MISTRING m_URL;
00485 TYPE m_LinkType;
00486 POSITION m_PosnType;
00487 SCALE m_ScaleType;
00488 double m_ZoomFactor;
00489 double m_MapScale;
00490
00491 void GetHyperLink (HYPERLINK& hlink, const FILEPATH& objfilepath) const;
00492 void SetHyperLink (const HYPERLINK& hlink, const FILEPATH& objfilepath);
00493
00494 friend class HYPERINDEX;
00495 #endif // GENERATING_DOXYGEN_OUTPUT
00496 };
00497
00498 DEFINE_ENUM_OP_INCREMENT(HYPERINDEX::LINK::TYPE)
00499
00500 class HYPERINDEX::SHAPE {
00501 public:
00502 enum TYPE {
00503 TYPE_Deleted = -1,
00504 TYPE_Rect = 0,
00505 TYPE_Circle = 1,
00506 TYPE_Polygon = 2,
00507 TYPE_VectPointAny = 5,
00508 TYPE_VectLineAny = 6,
00509 TYPE_VectPolyAny = 7,
00510 TYPE_VectPoint = 8,
00511 TYPE_VectLine = 9,
00512 TYPE_VectPoly = 10,
00513 TYPE_CAD = 11,
00514 TYPE_CAD_Any = 12,
00515 TYPE_ShapeElem = 13,
00516 TYPE_ShapeElem_Any = 14,
00517 TYPE_TIN_Node = 15,
00518 TYPE_TIN_Node_Any = 16
00519 };
00520
00523 static bool IsAnyElem (
00524 TYPE ShapeType
00525 );
00526
00528 SHAPE ();
00529
00530
00531
00532 void Clear ();
00533
00536 const COLOR& GetColor (
00537 ) const { return (m_Color); }
00538
00541 INT32 GetElemNum (
00542 ) const { return (m_ElemNum); }
00543
00546 const DRECT3D& GetExtents (
00547 ) const { return (m_Extents); }
00548
00551 INT32 GetNumLinks (
00552 ) const { return (m_NumLinks); }
00553
00556 TYPE GetType (
00557 ) const { return (m_ShapeType); }
00558
00561 bool HasLinks (
00562 ) const { return (m_NumLinks > 0); }
00563
00566 bool HasPoints (
00567 ) const { return (m_NumPoints > 0); }
00568
00571 bool IsAnyElem (
00572 ) const { return (IsAnyElem(m_ShapeType)); }
00573
00575 void SetColor (
00576 const COLOR& color
00577 ) { m_Color = color; }
00578
00580 void SetElemNum (
00581 INT32 ElemNum
00582 ) { m_ElemNum = ElemNum; }
00583
00585 void SetExtents (
00586 const DRECT3D& extents
00587 ) { m_Extents = extents; }
00588
00590 void SetType (
00591 TYPE type
00592 ) { m_ShapeType = type; }
00593
00594 private:
00595 #ifndef GENERATING_DOXYGEN_OUTPUT
00596 DRECT3D m_Extents;
00597 COLOR m_Color;
00598 INT32 m_ElemNum;
00599 TYPE m_ShapeType;
00600 UINT32 m_NumPoints;
00601 UINT32 m_NumLinks;
00602
00603 void SetShape (const HYPERSHAPE& hshape);
00604 void GetShape (HYPERSHAPE& hshape) const;
00605
00606 friend class HYPERINDEX;
00607 #endif // GENERATING_DOXYGEN_OUTPUT
00608 };
00609
00610 }
00611
00612 #endif // INC_RVC_HYPERIDX_H