00001
00038 #ifndef INC_RVC_QUADTREE_H
00039 #define INC_RVC_QUADTREE_H
00040
00041 #ifndef INC_RVC_OBJECT_H
00042 #include <rvc/object.h>
00043 #endif
00044
00045 #ifndef INC_MI32_ELEMTYPE_H
00046 #include <mi32/elemtype.h>
00047 #endif
00048
00049 #ifndef INC_MI32_RECT_H
00050 #include <mi32/rect.h>
00051 #endif
00052
00053
00054 #ifndef GENERATING_DOXYGEN_OUTPUT
00055
00056 class UNSIGNEDSET;
00057 namespace RVC {
00058 class DESCRIPTOR;
00059 class GEOMETRIC;
00060 class QUADTREEHANDLE;
00061 }
00062 #endif
00063
00064
00065 namespace RVC {
00066
00078 class QSEARCHTREE : public RVC::OBJECT {
00079 public:
00080 #ifndef GENERATING_DOXYGEN_OUTPUT
00081 class MAKEPARMS;
00082 class FILTER_EXISTING;
00083 class FILTER_EXISTING_CURRENT;
00084 class FILTER_EXISTING_LEGACY;
00085 class FILTER_VALID;
00086 #endif // GENERATING_DOXYGEN_OUTPUT
00087
00089 static void GenerateDftDescriptor (
00090 ELEMTYPE ElemType,
00091 OBJTYPE ParentObjType,
00092 DESCRIPTOR& Descriptor,
00093 const char* Source = 0
00094 );
00095
00097 QSEARCHTREE ();
00098
00100 QSEARCHTREE (
00101 const RVC::QSEARCHTREE& rhs
00102 );
00103
00105 virtual ~QSEARCHTREE ();
00106
00108 RVC::QSEARCHTREE& operator= (
00109 const RVC::QSEARCHTREE& rhs
00110 );
00111
00113 ERRVALUE AddElement (
00114 INT32 ElemNum,
00115 const DRECT2D& Extents
00116 );
00117
00119 ERRVALUE AddElement (
00120 INT32 ElemNum,
00121 const DPOINT2D& Point
00122 );
00123
00125 ERRVALUE ChangeElement (
00126 INT32 OldElemNum,
00127 INT32 NewElemNum,
00128 const DRECT2D& Extents
00129 );
00130
00132 ERRVALUE ChangeElement (
00133 INT32 OldElemNum,
00134 INT32 NewElemNum,
00135 const DPOINT2D& Point
00136 );
00137
00139 ERRVALUE Clear (
00140 const MAKEPARMS& MakeParms
00141 );
00142
00143 ERRVALUE CreateFromLegacy (
00144 QSEARCHTREE& DestObj
00145 );
00146
00148 ERRVALUE DeleteElement (
00149 INT32 ElemNum,
00150 const DRECT2D& Extents
00151 );
00152
00154 ERRVALUE DeleteElement (
00155 INT32 ElemNum,
00156 const DPOINT2D& Point
00157 );
00158
00160 ELEMTYPE GetElemType (
00161 ) const { return (m_ElemType); }
00162
00164 ERRVALUE Make (
00165 const RVC::OBJECT& parent,
00166 const RVC::DESCRIPTOR& Descriptor,
00167 const MAKEPARMS& MakeParms,
00168 const CREDENTIALS *pCredentials RVC_DEFAULT_CREDENTIALS
00169 );
00170
00172 ERRVALUE Make (
00173 RVC::OBJITEM& ObjItem,
00174 const MAKEPARMS& MakeParms,
00175 #ifdef RVC_CREDENTIALS_MANDATORY
00176 const char *Source,
00177 const CREDENTIALS *pCredentials
00178 #else
00179 const char *Source = 0,
00180 const CREDENTIALS *pCredentials = 0
00181 #endif
00182 );
00183
00185 ERRVALUE Search (
00186 const DRECT2D& Extents,
00187 SIMPLE_ARRAY<INT32>& ElemArray
00188 ) const;
00189
00191 ERRVALUE Search (
00192 const DRECT2D& Extents,
00193 UNSIGNEDSET& ElemSet
00194 ) const;
00195
00196 ERRVALUE Validate (
00197 ) const;
00198
00199 private:
00200 #ifndef GENERATING_DOXYGEN_OUTPUT
00202 virtual ERRVALUE v_CloseObject ();
00203 virtual OBJTYPE v_GetDftObjectType () const;
00204 virtual bool v_IsMultiObject () const;
00205 virtual bool v_IsObjectOpen () const;
00206 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS *pCredentials);
00207 virtual bool v_ValidateObjectType (const OBJTYPE otype) const;
00208
00209 QUADTREEHANDLE* m_QTreeHandle;
00210 ELEMTYPE m_ElemType;
00211 #endif // GENERATING_DOXYGEN_OUTPUT
00212 };
00213
00214
00215 class QSEARCHTREE::MAKEPARMS {
00216 public:
00218 MAKEPARMS (
00219 ELEMTYPE ElemType,
00220 const DRECT2D& Extents,
00221 INT32 InitialNumItems
00222 ) :
00223 m_ElemType(ElemType),
00224 m_Extents(Extents),
00225 m_NumItems(InitialNumItems)
00226 {}
00227
00228 ELEMTYPE GetElemType (
00229 ) const { return (m_ElemType); }
00230
00231 const DRECT2D& GetExtents (
00232 ) const { return (m_Extents); }
00233
00234 INT32 GetNumItems (
00235 ) const { return (m_NumItems); }
00236
00237 void SetElemType (
00238 ELEMTYPE ElemType
00239 ) { m_ElemType = ElemType; }
00240
00241 void SetExtents (
00242 const DRECT2D& Extents
00243 ) { m_Extents = Extents; }
00244
00245 void SetNumItems (
00246 INT32 NumItems
00247 ) { m_NumItems = NumItems; }
00248
00249 private:
00250 ELEMTYPE m_ElemType;
00251 DRECT2D m_Extents;
00252 INT32 m_NumItems;
00253 };
00254
00257 class QSEARCHTREE::FILTER_EXISTING : public RVC::OBJECT::FILTER {
00258 public:
00259
00261 FILTER_EXISTING (
00262 OBJTYPE ObjTypeSearchTree,
00263 ELEMTYPE ElemType
00264 ) : m_ObjTypeSearchTree(ObjTypeSearchTree), m_ElemType(ElemType) {}
00265
00267 void SetElemType (
00268 ELEMTYPE ElemType
00269 ) { m_ElemType = ElemType; }
00270
00271 private:
00272 #ifndef GENERATING_DOXYGEN_OUTPUT
00273 OBJTYPE m_ObjTypeSearchTree;
00274 ELEMTYPE m_ElemType;
00275
00276 virtual bool Filter (const RVC::OBJECT& obj);
00277 #endif // GENERATING_DOXYGEN_OUTPUT
00278 };
00279
00281 class QSEARCHTREE::FILTER_EXISTING_CURRENT : public QSEARCHTREE::FILTER_EXISTING {
00282 public:
00283
00285 explicit FILTER_EXISTING_CURRENT (
00286 ELEMTYPE ElemType
00287 ) : FILTER_EXISTING(OBJTYPE_QuadSearchTree_List,ElemType) { }
00288
00289 };
00290
00294 class QSEARCHTREE::FILTER_VALID : public RVC::OBJECT::FILTER {
00295 public:
00296 FILTER_VALID (
00297 ELEMTYPE ElemType
00298 ) : m_ElemType(ElemType) { }
00299
00301 void SetElemType (
00302 ELEMTYPE ElemType
00303 ) { m_ElemType = ElemType; }
00304
00305 private:
00306 #ifndef GENERATING_DOXYGEN_OUTPUT
00307 ELEMTYPE m_ElemType;
00308
00309 virtual bool Filter (const RVC::OBJECT& obj);
00310 #endif // GENERATING_DOXYGEN_OUTPUT
00311 };
00312
00313 }
00314
00315 #endif // INC_RVC_QSEARCHTREE_H