00001
00030 #ifndef INC_GRE_HYPERMGR_H
00031 #define INC_GRE_HYPERMGR_H
00032
00033 #ifndef INC_GRE_BASE
00034 #include <gre/base.h>
00035 #endif
00036
00037 #ifndef INC_RVC_HYPERIDX_H
00038 #include <rvc/hyperidx.h>
00039 #endif
00040
00041 #ifndef INC_MI32_POLYLINE_H
00042 #include <mi32/polyline.h>
00043 #endif
00044
00045
00046
00047 namespace GRE {
00048
00049 class HYPERLINK : public RVC::HYPERINDEX::LINK {
00050 public:
00051 HYPERLINK (
00052 ) :
00053 LINK(),
00054 m_ShapeNum(0),
00055 m_Layer(0)
00056 {}
00057
00058 void Clear (
00059 ) {
00060 m_ShapeNum = 0;
00061 m_Layer = 0;
00062 LINK::Clear();
00063 return;
00064 }
00065
00066 LAYER* GetLayer (
00067 ) const { return (m_Layer); }
00068
00069 UINT32 GetShapeNum (
00070 ) const { return (m_ShapeNum); }
00071
00072 void SetLayer (
00073 LAYER* layer
00074 ) { m_Layer = layer; }
00075
00076 void SetShapeNum (
00077 UINT32 ShapeNum
00078 ) { m_ShapeNum = ShapeNum; }
00079
00080 private:
00081 #ifndef GENERATING_DOXYGEN_OUTPUT
00082 UINT32 m_ShapeNum;
00083 LAYER *m_Layer;
00084 #endif
00085 };
00086
00087
00088 class HYPERSHAPE : public RVC::HYPERINDEX::SHAPE {
00089 public:
00090
00091 HYPERSHAPE (
00092 ) :
00093 SHAPE(),
00094 m_ShapeNum(-1),
00095 m_Highlighted(false)
00096 {}
00097
00098 void Clear (
00099 ) {
00100 m_Points.Clear();
00101 m_Links.Clear();
00102 m_Highlighted = false;
00103 SetExtents(DRECT3D());
00104 return;
00105 }
00106
00107 ERRVALUE DeleteShape (
00108 RVC::HYPERINDEX& HyperObj
00109 );
00110
00111 const MILIST<GRE::HYPERLINK>& GetLinks (
00112 ) const { return (m_Links); }
00113
00114 const POLYLINE& GetPoints (
00115 ) const { return (m_Points); }
00116
00117 bool IsHighlighted (
00118 ) const { return (m_Highlighted); }
00119
00120 ERRVALUE ReadShape (
00121 RVC::HYPERINDEX& HyperObj,
00122 INT32 ShapeNum,
00123 GRE::LAYER *layer
00124 );
00125
00126 void SetHighlighted (
00127 bool value
00128 ) { m_Highlighted = value; }
00129
00130 void SetLinks (
00131 const MILIST<GRE::HYPERLINK>& Links
00132 ) { m_Links = Links; }
00133
00134 private:
00135 #ifndef GENERATING_DOXYGEN_OUTPUT
00136 INT32 m_ShapeNum;
00137 bool m_Highlighted;
00138 POLYLINE m_Points;
00139 MILIST<GRE::HYPERLINK> m_Links;
00140 #endif // GENERATING_DOXYGEN_OUTPUT
00141 };
00142
00143
00144 class HYPERIDXMGR {
00145 public:
00146 enum FINDFLAGS {
00147 FINDFLAG_Default = 0x00,
00148 FINDFLAG_SearchAllElem = 0x01,
00149 FINDFLAG_FirstOnly = 0x02
00150 };
00151
00153 static ERRVALUE DrawShape (
00154 VIEW *view,
00155 LAYER *layer,
00156 int obj,
00157 const TRANS2D_MAPGEN& LayerToDisp,
00158 INT32 shapenum,
00159 UINT32 drawflags
00160 );
00161
00163 static ERRVALUE DrawShape (
00164 VIEW *view,
00165 LAYER *layer,
00166 int obj,
00167 INT32 shapenum,
00168 UINT32 drawflags
00169 );
00170
00172 static int DrawShapes (
00173 VIEW *view,
00174 UINT32 drawflags
00175 );
00176
00178 static int DrawShapes (
00179 VIEW *view,
00180 const GRE::GROUP *group,
00181 UINT32 drawflags
00182 );
00183
00185 static int DrawShapes (
00186 VIEW *view,
00187 GRE::LAYER *layer,
00188 UINT32 drawflags
00189 );
00190
00194 static int FindLayerElemShape (
00195 LAYER *layer,
00196 RVC::HYPERINDEX::SHAPE::TYPE ShapeType,
00197 INT32 ElemNum
00198 );
00199
00203 static int FindLayerObjShapes (
00204 VIEW *view,
00205 LAYER *layer,
00206 int obj,
00207 const DPOINT2D& lpoint,
00208 SIMPLE_ARRAY<INT32>& ShapeList,
00209 FINDFLAGS flags = FINDFLAG_Default
00210 );
00211
00213 static int FindLinks (
00214 VIEW *view,
00215 const DPOINT2D& spoint,
00216 MILIST<HYPERLINK>& linklist,
00217 FINDFLAGS flags = FINDFLAG_Default
00218 );
00219
00221 static int FindLinksView (
00222 VIEW *view,
00223 const DPOINT2D& lpoint,
00224 MILIST<HYPERLINK>& linklist,
00225 FINDFLAGS flags = FINDFLAG_Default
00226 );
00227
00229 static int FindNeighbors (
00230 LAYOUT *layout,
00231 LAYOUT *playout,
00232 const DPOINT2D& point,
00233 const FILEPATH& parentfilename,
00234 const RVC::OBJECTNAME& parentobjname,
00235 const FILEPATH& curfilename,
00236 const RVC::OBJECTNAME& curobjname,
00237 HYPERLINK neighbors[8]
00238 );
00239
00241 static ERRVALUE GetHyperObjItem (
00242 LAYER *layer,
00243 int obj,
00244 RVC::OBJITEM& HyperObjItem
00245 );
00246
00248 static int GetLayerObjShapeList (
00249 LAYER *layer,
00250 int obj,
00251 MILIST<HYPERSHAPE>& ShapeList
00252 );
00253
00255 static bool HasLinks (
00256 VIEWABLE *viewable
00257 );
00258
00260 static bool HasLinks (
00261 VIEW *view,
00262 const DPOINT2D& spoint,
00263 FINDFLAGS flags = FINDFLAG_Default
00264 );
00265
00266 static void Init (
00267 );
00268
00273 static ERRVALUE OpenHyperObject (
00274 LAYER *layer,
00275 int obj,
00276 RVC::HYPERINDEX& HyperObj,
00277 RVC::OBJECT::OPENMODE OpenMode
00278 );
00279
00281 static int ShapeAddToLayer (
00282 LAYER *layer,
00283 int obj,
00284 RVC::HYPERINDEX& HyperObj,
00285 INT32 shapenum
00286 );
00287
00289 static int ShapeDelete (
00290 LAYER *layer,
00291 int obj,
00292 RVC::HYPERINDEX& HyperObj,
00293 INT32 shapenum
00294 );
00295
00298 static ELEMTYPE ShapeTypeToElemType (
00299 LAYER *layer,
00300 RVC::HYPERINDEX::SHAPE::TYPE ShapeType
00301 );
00302
00304 static int ShapeUpdate (
00305 LAYER *layer,
00306 int obj,
00307 RVC::HYPERINDEX& HyperObj,
00308 INT32 shapenum
00309 );
00310
00311 };
00312 #ifndef GENERATING_DOXYGEN_OUTPUT
00313 DEFINE_ENUM_OP_BITWISE(HYPERIDXMGR::FINDFLAGS);
00314 #endif
00315
00316
00317 }
00318
00319
00320
00321
00322 #define HYPERDRAWFLAG_Highlight 0x01
00323 #define HYPERDRAWFLAG_Unhighlight 0x02
00324 #define HYPERDRAWFLAG_ShowTransparent 0x04
00325 #define HYPERDRAWFLAG_NoDraw 0x08
00326
00327
00328
00329 #endif // INC_GRE_HYPERMGR_H