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