00001
00141 #ifndef INC_GRE_LRCAD_H
00142 #define INC_GRE_LRCAD_H
00143
00144 #ifndef INC_GRE_LAYER_H
00145 #include <gre/layer.h>
00146 #endif
00147
00148 #ifndef INC_GRE_DATATIP_H
00149 #include <gre/datatip.h>
00150 #endif
00151
00152 #ifndef INC_RVC_OBJITEM_H
00153 #include <rvc/objitem.h>
00154 #endif
00155
00156 #ifndef INC_MI32_GREMODE_H
00157 #include <mi32/gremode.h>
00158 #endif
00159
00160 #ifndef INC_MI32_LABLSTYL_H
00161 #include <mi32/lablstyl.h>
00162 #endif
00163
00164 #ifndef GENERATING_DOXYGEN_OUTPUT
00165 namespace RVC {
00166 class CAD;
00167 }
00168 namespace SML {
00169 class CLASSMEMBER;
00170 }
00171 #endif
00172
00173 namespace GRE {
00174
00175
00177 class LAYER_CAD : public LAYER {
00178 public:
00179
00180
00181 class DISPPARM : public LAYER::DISPPARM {
00182 public:
00183
00184 class DLG;
00185
00186 RVC::OBJITEM m_ObjItem;
00187 RVC::OBJECTNAME m_GeorefName;
00188 RVC::OBJITEM m_ObjItemStyle;
00189 INT32 m_BlockNum;
00190 MULTISTYLE m_AllSame;
00191 MULTISTYLE m_Hilite;
00192 UINT32 m_ElemDrawPixel;
00193 UINT32 m_ElemDrawHilitePixel;
00194 UINT16 m_SelectMode;
00195 UINT16 m_StyleMode;
00196 UINT8 m_CADElemSelect[4];
00197 INT16 m_SelectTable;
00198 INT16 m_StyleTable;
00199 MISTRING m_SelectQueryStr;
00200 MISTRING m_StyleQueryStr;
00201 DATATIPPARMS m_DataTip;
00202 bool m_EnableLabelClipUnder;
00203 bool m_IsEditable;
00204 bool m_HasSaveInfo;
00205 bool m_ShowLabelBase;
00206 LINESTYLE m_LabelBaseStyle;
00207 LABELFRAMEPARMS m_LabelFrame;
00208 mutable RVC::OBJITEM m_SaveObjItem;
00209 mutable RVC::OBJITEM m_SaveObjItemStyle;
00210
00211 DISPPARM ();
00212
00213 DISPPARM (
00214 const DISPPARM& rhs
00215 ): LAYER::DISPPARM(rhs) { Copy(rhs); }
00216
00217 virtual ~DISPPARM (
00218 ) { Free(); }
00219
00220 DISPPARM& operator= (const DISPPARM& rhs) {
00221 if (this != &rhs) {
00222 Free();
00223 Copy(rhs);
00224 }
00225 return (*this);
00226 }
00227
00228 SELECTMODE GetSelectMode () const
00229 { return (static_cast<SELECTMODE>(m_SelectMode)); }
00230
00231 const MULTISTYLE& GetStyleAllSame () const
00232 { return (m_AllSame); }
00233
00234 STYLEMODE GetStyleMode () const
00235 { return (static_cast<STYLEMODE>(m_StyleMode)); }
00236
00238 ERRVALUE SetObject (
00239 const RVC::OBJITEM& objitem,
00240 bool keepsettings = false
00241 );
00242
00243 void SetSelectMode (
00244 SELECTMODE SelectMode
00245 ) { m_SelectMode = static_cast<UINT16>(SelectMode); }
00246
00247 void SetStyleAllSame (
00248 const MULTISTYLE& style
00249 ) { m_AllSame = style; }
00250
00251 void SetStyleAllSame (
00252 const POINTSTYLE& PointStyle
00253 ) { m_AllSame.Point = PointStyle; }
00254
00255 void SetStyleAllSame (
00256 const LINESTYLE& LineStyle
00257 ) { m_AllSame.Line = LineStyle; }
00258
00259 void SetStyleAllSame (
00260 const POLYSTYLE& PolyStyle
00261 ) { m_AllSame.Poly = PolyStyle; }
00262
00263 void SetStyleAllSame (
00264 const TEXTSTYLE& TextStyle
00265 ) { m_AllSame.Text = TextStyle; }
00266
00267 void SetStyleMode (
00268 STYLEMODE StyleMode
00269 ) { m_StyleMode = static_cast<UINT16>(StyleMode); }
00270
00271 private:
00272 #ifndef GENERATING_DOXYGEN_OUTPUT
00273 typedef LAYER_CAD::DISPPARM THISCLASS;
00274
00275 static ERRVALUE SerializerCB_StyleFileName (SERIALIZER&, const SERIALIZERITEM *, void *, SERIALIZERITEM::ACTION);
00276 void Copy (const DISPPARM&);
00277 void Free ();
00278 void UpdateSaveInfo () const;
00279
00280
00281 virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00282 virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname = 0) const;
00283
00284
00285 virtual const SERIALIZERITEM* SerialGetItemDef (SERIALIZER& serializer) const;
00286 virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00287 virtual ERRVALUE v_Validate ();
00288
00289 friend class LAYER_CAD;
00290 #endif // GENERATING_DOXYGEN_OUTPUT
00291 };
00292
00294 static void RegisterType (
00295 );
00296
00298 static void SMLClassInstall (
00299 SMLCONTEXT *context
00300 );
00301
00303 explicit LAYER_CAD (
00304 GRE::GROUP *group,
00305 CREATEFLAGS createflags = CREATEFLAG_None,
00306 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00307 LAYER *reflayer = 0
00308 );
00309
00310 virtual ~LAYER_CAD ();
00311
00313 const DISPPARM& GetDispParm (
00314 ) const { return (m_dispparm); }
00315
00324 ERRVALUE SetDispParm (
00325 const DISPPARM& dispparm
00326 );
00327
00328 protected:
00329
00330 DISPPARM m_dispparm;
00331 COMPINFO m_ElemCompInfo;
00332
00333 virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00334 virtual void v_CloseObject ();
00335
00336 private:
00337 #ifndef GENERATING_DOXYGEN_OUTPUT
00338
00339 #ifdef USE_MGUI
00340 DISPPARM::DLG *m_pDlgControlPanel;
00341 #endif
00342 RVC::CAD *m_pObjCad;
00343 GRE::GEOMETRIC3D *m_pGeometric3D;
00344 GRE::WIREFRAME *m_pWireframe;
00345
00346 class PRIVDRAWDATA;
00347 friend class PRIVDRAWDATA;
00348
00349 bool CanDraw3dDirect (const LAYERDC& layerdc) const;
00350 ERRVALUE Draw2D (LAYERDC& layerdc);
00351 ERRVALUE Draw3D (LAYERDC& layerdc);
00352 ERRVALUE DrawWireframe (LAYERDC& layerdc);
00353 ERRVALUE OpenPrivateObject () const;
00354 int SetupRegion ();
00355 ERRVALUE WireReadCAD (LAYERDC& layerdc);
00356
00358 virtual bool v_CanShowDetails () const;
00359 virtual GRE::LAYERSECTION* v_ConstructLayerSection (GRE::VIEW* view);
00360 #ifdef USE_MGUI
00361 virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00362 #endif
00363 virtual LAYER* v_Copy (GRE::GROUP *group) const;
00364 virtual const DATATIPPARMS* v_DataTipGetParms (int component) const;
00365 virtual ERRVALUE v_DataTipSetParms (int component, const DATATIPPARMS& DataTipParms);
00366 virtual INT32 v_DbListElemNumToIndex (int component, ELEMNUM ElemNum);
00367 virtual ERRVALUE v_Draw (LAYERDC& layerdc);
00368 virtual ERRVALUE v_DrawElementLow (LAYERDC& layerdc, ELEMTYPE ElemType, ELEMNUM ElemNum, const void *style);
00369 virtual ERRVALUE v_DrawElementsLow (LAYERDC& layerdc, ELEMTYPE ElemType, const UNSIGNEDSET *pElemSet, const void *style);
00370 virtual ELEMNUM v_FindClosestElement (const DPOINT2D& point, double searchdist, double *distret, int component, const UNSIGNEDSET *pSearchSet, GRE::FINDFLAGS findflags);
00371 virtual int v_GetComponent (ELEMTYPE ElemType) const;
00372 virtual MICONSTRUCT* v_GetComponentIcon (int component) const;
00373 virtual COMPINFO* v_GetComponentInfo (int component);
00374 virtual MISTRING v_GetComponentName (int component) const;
00375 virtual const void* v_GetElemDefaultStyle (ELEMTYPE ElemType) const;
00376 virtual UINT16 v_GetElemDrawSelectionMode (ELEMTYPE ElemType) const;
00377 virtual UINT16 v_GetElemDrawStyleMode (ELEMTYPE ElemType) const;
00378 virtual ERRVALUE v_GetElemExtents (ELEMTYPE ElemType, ELEMNUM ElemNum, DRECT3D& Extents);
00379 virtual ERRVALUE v_GetElemSetByExtent (ELEMTYPE ElemType, const DRECT2D& Extent, UNSIGNEDSET& ElemSet);
00380 virtual ELEMTYPE v_GetElemType (int component) const;
00381 virtual bool v_GetGeorefName (RVC::OBJECTNAME& name, int component = 0) const;
00382 virtual bool v_GetLabelColor (LAYERDC&, const GRE::LABELPLACE&, COLOR&);
00383 virtual INT64 v_GetNumElements (ELEMTYPE ElemType);
00384 virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00385 virtual ERRVALUE v_GetStyleInfo (ELEMTYPE ElemType, RVC::OBJITEM& ObjItem, RVC::OBJECTNAME& TableName);
00386 #ifdef USE_MGUI
00387 virtual void v_MenuAddRegionGenItems (MGUI::MENU& menu, ELEMTYPE ElemType);
00388 #endif
00389 #ifdef USE_MGUI
00390 virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00391 #endif
00392 virtual ERRVALUE v_ReportRawElemInfo (MISTRING& infostr, ELEMTYPE ElemType, ELEMNUM ElemNum);
00393 virtual const char* v_SerialGetTagName () const;
00394 virtual void v_SetElemDrawSelectionMode (ELEMTYPE ElemType, UINT16 SelectMode);
00395 virtual void v_SetElemDrawStyleMode (ELEMTYPE ElemType, UINT16 StyleMode);
00396 virtual void v_SetObjectDescriptor (int component, const RVC::DESCRIPTOR& descriptor);
00397 virtual ERRVALUE v_SetStyleObjItem (const RVC::OBJITEM& ObjItem);
00398 virtual int v_SnapPoint (DPOINT3D& ptObject, SNAPTO SnapTo, double MaxDistance, VIEW *view) const;
00399 virtual bool v_SnapPointIsAllowed (SNAPTO SnapTo) const;
00400 virtual int v_TestElementByRegion (ELEMTYPE ElemType, ELEMNUM ElemNum, const REGION2D& Region, TESTCRITERIA TestMode);
00401 #ifdef USE_MGUI
00402 virtual void v_TreeViewAddUpdateDetails (GRE::CTRL_TREEVIEW& TreeView, MGUI::CTRL_TREE::ITEMHND hndParent, MGUI::CTRL_TREE::ITEMHND hndInsertAfter);
00403 virtual MGUI::CTRL_TREE::ITEMHND v_TreeViewAddUpdateLegend (GRE::CTRL_TREEVIEW& TreeView, MGUI::CTRL_TREE::ITEMHND hndParent, MGUI::CTRL_TREE::ITEMHND hndInsertAfter);
00404 #endif
00405 virtual int v_UpdateExtents (bool forceupdate);
00406
00407 LAYER_CAD (const LAYER_CAD&);
00408 LAYER_CAD& operator= (const LAYER_CAD&);
00409
00410 #endif // GENERATING_DOXYGEN_OUTPUT
00411 };
00412
00413
00414
00415 }
00416
00417 #endif // INC_GRE_LRCAD_H