lrcad.h

Go to the documentation of this file.
00001 /**
00002  * gre/lrcad - GRE_LAYER_CAD class definition.
00003  *
00004  * \if NODOC
00005  * $Id: lrcad.h_v 1.10 2005/03/31 16:57:06 fileserver!dwilliss Exp $
00006  *
00007  * $Log: lrcad.h_v $
00008  * Revision 1.10  2005/03/31 16:57:06  fileserver!dwilliss
00009  * Rename one of our types to MIUNICODE because it conflicted with a Microsoft #define
00010  *
00011  * Revision 1.9  2005/02/28 18:00:59  scowan
00012  * Support layer copy virtual method.
00013  *
00014  * Revision 1.8  2005/02/25 23:20:51  scowan
00015  * Added copy virtual method implementation.
00016  *
00017  * Revision 1.7  2005/02/23 18:54:25  mju
00018  * Moved labelplacement to layerview_labeled.
00019  *
00020  * Revision 1.6  2005/01/20 16:56:12  mju
00021  * Redesign layer type registration.
00022  *
00023  * Revision 1.5  2004/10/01 17:19:48  mju
00024  * Add dlgparent to assignObject.
00025  *
00026  * Revision 1.4  2004/09/08 20:23:04  dwilliss
00027  * Implement LAYERPLACEMENT stuff
00028  *
00029  * Revision 1.3  2004/07/12 23:13:44  mju
00030  * Use region2d.
00031  *
00032  * Revision 1.2  2004/06/16 21:54:25  scowan
00033  * Significant changes to cad layer and dispparm definitions.
00034  *
00035  * Revision 1.1  2004/06/04 20:50:00  scowan
00036  * Initial revision
00037  *
00038  * \endif
00039 **/
00040 
00041 #ifndef  INC_GRE_LRCAD_H
00042 #define  INC_GRE_LRCAD_H
00043 
00044 #ifndef  INC_MI32_GRE_H
00045 #include <mi32/gre.h>
00046 #endif
00047 
00048 #ifndef GENERATING_DOXYGEN_OUTPUT
00049 namespace GRE {
00050    class LABELPLACEMENT;
00051    class LABELPLACE;
00052    }
00053 #endif
00054 
00055 //===================================================================================================================
00056 
00057 //! GRE layer class for viewing CAD spatial object.
00058 class GRE_LAYER_CAD : public GRE_LAYER {
00059    public:
00060 
00061       // GRE_LAYER_CAD::DISPPARM
00062       class DISPPARM : public GRE_LAYER::DISPPARM {
00063          public:
00064 
00065             class DLG;
00066 
00067             RVC::OBJITEM m_ObjItem;
00068             RVC::OBJECTNAME m_GeorefName;          //!< Name of georeference object
00069             RVC::OBJITEM m_ObjItemStyle;
00070             INT32 BlockNum;                     //!< Number of block to display
00071             MULTISTYLE AllSame;              //!< Style to use if StyleMode == STYLEMODE_AllSame
00072             MULTISTYLE Hilite;               //!< Style to use for highlighting "selected" elements
00073             UINT32 ElemDrawPixel;
00074             UINT32 ElemDrawHilitePixel;
00075             UINT16 SelectMode;                  //!< Element selection mode - SELECTMODE_xxxxx...
00076             UINT16 StyleMode;                //!< Element style mode - STYLEMODE_xxxxx...
00077             UINT8 CADElemSelect[(CAD_LAST + 7)/8];
00078             INT16 SelectTable;                  //!< "Style assignment" table number for CAD element selection
00079             INT16 StyleTable;                //!< "Style assignment" table number for CAD element styling
00080             MIUNICODE *SelectQueryStr;       //!< Query string for element selection
00081             MIUNICODE *StyleQueryStr;           //!< Query string for element styling
00082             DATATIPPARMS DataTip;            //!< DataTip parameters
00083             bool m_EnableLabelClipUnder;
00084             bool m_IsEditable;
00085             bool m_HasSaveInfo;
00086             bool m_ShowLabelBase;
00087             LINESTYLE m_LabelBaseStyle;
00088             LABELFRAMEPARMS m_LabelFrame;
00089             mutable RVC::OBJITEM m_SaveObjItem;
00090             mutable RVC::OBJITEM m_SaveObjItemStyle;
00091 
00092             DISPPARM ();
00093             DISPPARM (
00094                const DISPPARM& rhs
00095                ): GRE_LAYER::DISPPARM(rhs) { Copy(rhs); }
00096             virtual ~DISPPARM (
00097                ) { Free(); }
00098 
00099             DISPPARM& operator= (const DISPPARM& rhs) {
00100                if (this != &rhs) {
00101                   Free();
00102                   Copy(rhs);
00103                   }
00104                return (*this);
00105                }
00106 
00107             //! Set to use specified object.
00108             ERRVALUE SetObject (
00109                const RVCOBJITEM& objitem,    //!< Object to set
00110                bool keepsettings = false     //!< Retain current display settings
00111                );
00112 
00113          private:
00114             #ifndef GENERATING_DOXYGEN_OUTPUT
00115             static ERRVALUE SerializerCB_StyleFileName (SERIALIZER&, const SERIALIZER::ITEMDEF *, void *, SERIALIZER::ITEMDEF::ACTION);
00116             void Copy (const DISPPARM&);
00117             void Free ();
00118             void UpdateSaveInfo () const;
00119 
00120             //! Overrides from SERIALIZABLE.
00121             virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00122             virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname = 0) const;
00123             
00124             //! Overrides from GRE_LAYER::DISPPARM.
00125             virtual const SERIALIZER::ITEMDEF* SerialGetItemDef (SERIALIZER& serializer) const;
00126             virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00127             virtual ERRVALUE v_Validate ();
00128 
00129             friend class GRE_LAYER_CAD;
00130             #endif // GENERATING_DOXYGEN_OUTPUT
00131          }; // End of GRE_LAYER_CAD::DISPPARM
00132 
00133       //! Register this layer type
00134       static void RegisterType (
00135          );
00136 
00137       //! Install SML class, called by internal SML function.
00138       static void SMLClassInstall (
00139          SMLCONTEXT *context
00140          );
00141 
00142       //! Construct layer and insert into list
00143       explicit GRE_LAYER_CAD (
00144          GRE_GROUP *group,                            //!< Group to contain layer
00145          CREATEFLAGS createflags = CREATEFLAG_None,   //!< Creation flags
00146          GRE::LISTPOS listpos = GRE::LISTPOS_Last,    //!< Position in list
00147          GRE_LAYER *reflayer = 0                      //!< Reference layer for insertion
00148          );
00149 
00150       virtual ~GRE_LAYER_CAD ();
00151 
00152       //! Get index into database list given "element number"
00153       INT32 GetDBListIndex (
00154          INT32 ElemNum,                         //!< Element number
00155          int dbhandle = -1                      //!< Open database object handle or -1 (default) if not available
00156          );
00157 
00158       //! Retrieve layer-specific display parameters
00159       const DISPPARM& GetDispParm (
00160          ) const { return (m_dispparm); }
00161 
00162       //! Set layer-specific display parameters.
00163       //!
00164       //! This is the recommended method for changing how an existing layer is to be
00165       //! rendered.  Validation will be performed on the specified parameters and
00166       //! adjustments made to the layer's copy if necessary.  Use of this method
00167       //! usually result in a ChangeBegin / ChangeEnd message pair, and will also
00168       //! generate a ChangeObject message if the spatial object used in the layer
00169       //! is changed.
00170       ERRVALUE SetDispParm (
00171          const DISPPARM& dispparm               //!< Parameters to set
00172          );
00173 
00174    protected:
00175 
00176       DISPPARM m_dispparm;                      //!< Layer-specific display parameters
00177       COMPINFO m_ElemCompInfo;
00178 
00179       virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00180 
00181    private:
00182       #ifndef GENERATING_DOXYGEN_OUTPUT
00183       
00184       #if defined(X_NATIVE) || defined(WIN32_MFC)
00185          DISPPARM::DLG* m_ControlPanelDialog;
00186       #endif
00187       RVC::CAD *m_pObjCad;
00188       
00189       class PRIVDRAWDATA;
00190       friend class PRIVDRAWDATA;
00191 
00192       ERRVALUE OpenPrivateObject ();
00193       int SetupRegion ();
00194 
00195       //! Overrides from GRE_LAYER.
00196    #ifdef WIN32_MFC
00197       virtual void v_AddTreeViewDetails (GRE_MFC_TREEVIEW& TreeView, HTREEITEM hParent, HTREEITEM hInsertAfter);
00198       virtual void v_AddTreeViewLegend (GRE_MFC_TREEVIEW& TreeView, HTREEITEM hParent, HTREEITEM hInsertAfter);
00199    #endif
00200       virtual bool v_CanShowDetails () const;
00201       virtual GRE::LAYERVIEW* v_ConstructLayerView (GRE_VIEW*);
00202       virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00203    #if defined(X_NATIVE) || defined(WIN32_MFC)
00204       virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00205    #endif
00206       virtual GRE_LAYER* v_Copy (GRE_GROUP *group) const;
00207       virtual const DATATIPPARMS& v_DataTipGetParms (int component) const;
00208       virtual ERRVALUE v_DataTipSetParms (int component, const DATATIPPARMS& DataTipParms);
00209       virtual INT32 v_DbListIndexToElemNum (int component, INT32 index);
00210       virtual INT32 v_DbListElemNumToIndex (int component, INT32 ElemNum);
00211       virtual ERRVALUE v_Draw (GRE_LAYERDC& layerdc);
00212       virtual ERRVALUE v_DrawElementLow (GRE_LAYERDC& layerdc, ELEMTYPE ElemType, INT32 ElemNum, const void *style);
00213       virtual ERRVALUE v_DrawElementsLow (GRE_LAYERDC& layerdc, ELEMTYPE ElemType, const UINT8 *ElemSet, const void *style);
00214       virtual INT32 v_FindClosestElement (const DPOINT2D& point, double searchdist, double *distret, int component, const UINT8 *SearchSet, GRE_FIND_FLAGS findflags);
00215       virtual int v_GetComponent (ELEMTYPE ElemType) const;
00216       virtual MICON v_GetComponentIcon (int component) const;
00217       virtual COMPINFO* v_GetComponentInfo (int component);
00218       virtual MISTRING v_GetComponentName (int component) const;
00219       virtual const void* v_GetElemDefaultStyle (ELEMTYPE ElemType) const;
00220       virtual UINT16 v_GetElemDrawSelectionMode (ELEMTYPE ElemType) const;
00221       virtual UINT16 v_GetElemDrawStyleMode (ELEMTYPE ElemType) const;
00222       virtual ERRVALUE v_GetElemExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents);
00223       virtual ERRVALUE v_GetElemSetByExtent (ELEMTYPE ElemType, const DRECT2D& Extent, BITSET& ElemSet);
00224       virtual ELEMTYPE v_GetElemType (int component) const;
00225       virtual bool v_GetGeorefName (RVC::OBJECTNAME& name, int component = 0) const;
00226       virtual bool v_GetLabelColor (GRE_LAYERDC&, const GRE::LABELPLACE&, COLOR&);
00227       virtual INT32 v_GetNumElements (ELEMTYPE ElemType);
00228       virtual ERRVALUE v_GetStyleInfo (ELEMTYPE ElemType, RVC::OBJITEM& ObjItem, RVC::OBJECTNAME& TableName);
00229    #ifdef WIN32_MFC
00230       virtual bool v_HasTreeViewLegend () const;
00231    #endif
00232    #if defined(X_NATIVE) || defined(WIN32_MFC)
00233       virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00234    #endif
00235       virtual ERRVALUE v_ReportRawElemInfo (MISTRING& infostr, ELEMTYPE ElemType, INT32 ElemNum);
00236       virtual const char* v_SerialGetTagName () const;
00237       virtual void v_SetDftName (bool ReplaceExisting);
00238       virtual void v_SetElemDrawSelectionMode (ELEMTYPE ElemType, UINT16 SelectMode);
00239       virtual void v_SetElemDrawStyleMode (ELEMTYPE ElemType, UINT16 StyleMode);
00240       virtual ERRVALUE v_SetStyleObjItem (const RVC::OBJITEM& ObjItem);
00241       virtual int v_TestElementByRegion (ELEMTYPE ElemType, INT32 ElemNum, const REGION2D& Region, TESTCRITERIA TestMode);
00242       virtual int v_UpdateExtents (bool forceupdate);
00243 
00244       GRE_LAYER_CAD (const GRE_LAYER_CAD&);
00245       GRE_LAYER_CAD& operator= (const GRE_LAYER_CAD&);
00246 
00247       #endif // GENERATING_DOXYGEN_OUTPUT
00248    };
00249 
00250 
00251 //===================================================================================================================
00252 
00253 class GRE_LAYER_SKETCH : public GRE_LAYER_CAD {
00254    public:
00255 
00256       enum WARNOUTSIDE {
00257          WARNOUTSIDE_Always,
00258          WARNOUTSIDE_Once,
00259          WARNOUTSIDE_Never
00260          };
00261 
00262       //! Register this layer type
00263       static void RegisterType (
00264          );
00265 
00266       //! Construct layer and insert into list
00267       explicit GRE_LAYER_SKETCH (
00268          GRE_GROUP *group,                            //!< Group to contain layer
00269          CREATEFLAGS createflags = CREATEFLAG_None,   //!< Creation flags
00270          GRE::LISTPOS listpos = GRE::LISTPOS_Last,    //!< Position in list
00271          GRE_LAYER *reflayer = 0                      //!< Reference layer for insertion
00272          );
00273 
00274       virtual ~GRE_LAYER_SKETCH ();
00275 
00276    #if defined(X_NATIVE) || defined(WIN32_MFC)
00277       //! Add element to sketch object.
00278       ERRVALUE AddElement (
00279          MDLGPARENT dlgparent,
00280          RVC::CAD::ELEMENT& Element,
00281          const MULTISTYLE& style,
00282          GRE_VIEW *view
00283          );
00284    #endif
00285 
00286    #if defined(X_NATIVE) || defined(WIN32_MFC)
00287       //! Delete last element in sketch (CAD) object.
00288       ERRVALUE DeleteLastElement (
00289          );
00290    #endif
00291 
00292    #if defined(X_NATIVE) || defined(WIN32_MFC)
00293       //! Display dialog allowing user to define attribute table for sketch object.
00294       ERRVALUE DlgDefineAttribTable (
00295          MDLGPARENT dlgparent
00296          );
00297    #endif
00298 
00299    #if defined(X_NATIVE) || defined(WIN32_MFC)
00300       //! Locate existing attribute table if any.
00301       ERRVALUE FindAttribTable (
00302          );
00303    #endif
00304 
00305    #if defined(X_NATIVE) || defined(WIN32_MFC)
00306       //! Locate existing attribute table if any.
00307       RVC::STYLE& GetStyleObject (
00308          ) { return (m_StyleObj); }
00309    #endif
00310 
00311    #if defined(X_NATIVE) || defined(WIN32_MFC)
00312       //! Determine if layer has attribute table defined.
00313       bool HasAttribTable (
00314          ) const { return (m_AttribTableNum != TABLE_Invalid); }
00315    #endif
00316 
00317    #if defined(X_NATIVE) || defined(WIN32_MFC)
00318       //! Set whether to prompt user for attribute record when adding element
00319       void SetPromptForAttrib (
00320          bool PromptForAttrib
00321          ) { m_PromptForAttrib = PromptForAttrib; }
00322    #endif
00323 
00324    #if defined(X_NATIVE) || defined(WIN32_MFC)
00325       //! Create or open style object used by sketch layer.
00326       ERRVALUE SetupStyleObject (
00327          );
00328    #endif
00329 
00330    #if defined(X_NATIVE) || defined(WIN32_MFC)
00331       //! Set option for warning user of adding elements outside group.
00332       void SetWarnOutside (
00333          WARNOUTSIDE WarnOutside
00334          ) { m_WarnOutside = WarnOutside; }
00335    #endif
00336 
00337    private:
00338       #ifndef GENERATING_DOXYGEN_OUTPUT
00339 
00340    #if defined(X_NATIVE) || defined(WIN32_MFC)
00341       WARNOUTSIDE m_WarnOutside;
00342       bool m_WarnOutsideDone;
00343       bool m_PromptForAttrib;
00344       int m_AttribTableNum;
00345       DBEDIT m_DbEdit;
00346    #endif
00347       RVC::STYLE m_StyleObj;
00348       RVC::CAD m_CadSketchObj;
00349 
00350       ERRVALUE OpenPrivateObject (RVC::OBJECT::OPENMODE mode);
00351       //! Overrides from GRE_LAYER
00352    #if defined(X_NATIVE) || defined(WIN32_MFC)
00353       virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00354    #endif
00355       virtual GRE_LAYER* v_Copy (GRE_GROUP *group) const;
00356       virtual const char* v_SerialGetTagName () const;
00357 
00358       GRE_LAYER_SKETCH (const GRE_LAYER_SKETCH&);
00359       GRE_LAYER_SKETCH& operator= (const GRE_LAYER_SKETCH&);
00360 
00361       #endif // GENERATING_DOXYGEN_OUTPUT
00362    };
00363 
00364 //===================================================================================================================
00365 
00366 #endif   //!< INC_GRE_LRCAD_H

Generated on Wed May 31 15:26:40 2006 for TNTsdk by  doxygen 1.3.8-20040913