lrvector.h

Go to the documentation of this file.
00001 /**
00002  * gre/lrvector - GRE_LAYER_VECTOR class definition.
00003  *
00004  * \if NODOC
00005  * $Id: lrvector.h_v 1.26 2005/09/12 18:32:59 vdronov Exp $
00006  *
00007  * $Log: lrvector.h_v $
00008  * Revision 1.26  2005/09/12 18:32:59  vdronov
00009  * removed HasLabels
00010  *
00011  * Revision 1.25  2005/06/10 20:33:36  vdronov
00012  * added extra methods as IsManifold, ...
00013  *
00014  * Revision 1.24  2005/02/25 23:15:38  scowan
00015  * Added copy virtual method.
00016  *
00017  * Revision 1.23  2005/02/23 18:55:04  mju
00018  * Move label placement stuff to layerview.
00019  *
00020  * Revision 1.22  2005/02/15 17:50:34  scowan
00021  * No real changes.
00022  *
00023  * Revision 1.21  2005/02/01 17:26:11  vdronov
00024  * *** empty log message ***
00025  *
00026  * Revision 1.20  2005/01/27 16:47:37  vdronov
00027  * split v_Draw to Draw2D and Draw3D
00028  *
00029  * Revision 1.19  2005/01/20 16:58:01  mju
00030  * Redesign layer type registration.
00031  *
00032  * Revision 1.18  2004/10/15 21:28:13  ldyas
00033  * added needsmem24 method
00034  *
00035  * Revision 1.17  2004/10/01 17:20:25  mju
00036  * Add dlgparent to assignObject.
00037  *
00038  * Revision 1.16  2004/09/03 22:50:09  dwilliss
00039  * *** empty log message ***
00040  *
00041  * Revision 1.15  2004/07/22 22:16:14  dwilliss
00042  * Moved LABLEPLACEMENT out of the layer.  It's now in a LAYERVIEW-derived
00043  * class which is private to mdvector.c
00044  *
00045  * Revision 1.14  2004/07/21 22:37:17  dwilliss
00046  * Added the construct layer view method
00047  *
00048  * Revision 1.13  2004/07/20 22:21:33  dwilliss
00049  * *** empty log message ***
00050  *
00051  * Revision 1.12  2004/07/19 22:55:49  dwilliss
00052  * LABELPLACEMENT changes
00053  *
00054  * Revision 1.11  2004/07/12 23:14:19  mju
00055  * No georegion.
00056  *
00057  * Revision 1.10  2004/04/08 17:20:33  vdronov
00058  * added m_VectorModifyStamp
00059  *
00060  * Revision 1.9  2004/04/08 17:08:28  vdronov
00061  * *** empty log message ***
00062  *
00063  * Revision 1.8  2004/03/05 15:12:56  mju
00064  * Use virtual dtor for dispprma.
00065  *
00066  * Revision 1.7  2004/02/13 15:46:17  scowan
00067  * Fixed deprecated mgd items.
00068  *
00069  * Revision 1.6  2004/02/06 16:02:00  mju
00070  * Use GRE_FIND_FLAGS.
00071  *
00072  * Revision 1.5  2003/09/23 13:16:35  mju
00073  * Explicit init base in dispparm copy ctor.
00074  *
00075  * Revision 1.4  2003/09/15 13:48:59  fileserver!dwilliss
00076  * Doxygen
00077  *
00078  * Revision 1.3  2003/07/30 15:30:59  mju
00079  * Ignore private sections.
00080  *
00081  * Revision 1.2  2003/06/24 16:24:19  mju
00082  * Move layer_vector class defn here.
00083  *
00084  * Revision 1.1  2002/09/19 17:09:20  mju
00085  * Initial revision
00086  * \endif
00087 **/
00088 
00089 #ifndef  INC_GRE_LRVECTOR_H
00090 #define  INC_GRE_LRVECTOR_H
00091 
00092 #ifndef  INC_GRE_LAYER_H
00093 #include <gre/layer.h>
00094 #endif
00095 
00096 #ifndef  INC_GRE_LEGEND_H
00097 #include <gre/legend.h>
00098 #endif
00099 
00100 #ifndef  INC_GRE_SCRIPTCONTEXT_H
00101 #include <gre/scriptcontext.h>
00102 #endif
00103 
00104 #ifndef  INC_GRE_LABELPLACEMENT_H
00105 #include <gre/labelplacement.h>
00106 #endif
00107 
00108 #ifndef GENERATING_DOXYGEN_OUTPUT
00109 namespace GRE {
00110    class GEOMETRIC3D;
00111    }
00112 #endif
00113 
00114 
00115 //===================================================================================================================
00116 
00117 //! GRE layer class for viewing Vector spatial object.
00118 class GRE_LAYER_VECTOR : public GRE_LAYER {
00119    public:
00120 
00121       // GRE_LAYER_VECTOR::DISPPARM
00122       class DISPPARM : public GRE_LAYER::DISPPARM {
00123          public:
00124 
00125             class DLG;                             //!< Layer settings dialog, defined in <gre/uivector.h>
00126 
00127             RVC::OBJITEM m_ObjItem;
00128             RVC::OBJECTNAME m_GeorefName;          //!< Name of georeference object
00129             RVC::OBJITEM m_ObjItemStyle;
00130             POINTPARMS Point;
00131             LINEPARMS Line;
00132             POLYPARMS Poly;
00133             LABELPARMS Label;
00134             POINTPARMS Node;
00135             POINTSTYLE NodeDangleStyle;            //!< Special style for "dangling" nodes
00136             D3POLYPARMS D3Poly;
00137             D3POINTPARMS D3Point;
00138             bool EnablePolyFill3D;
00139             bool m_EnableLabelClipUnder;
00140             bool m_IsEditable;
00141             bool m_HasSaveInfo;
00142             bool m_ShowLabelBase;
00143             LINESTYLE m_LabelBaseStyle;
00144             mutable RVC::OBJITEM m_SaveObjItem;
00145             mutable RVC::OBJITEM m_SaveObjItemStyle;
00146 
00147             DISPPARM ();
00148             DISPPARM (
00149                const DISPPARM& rhs
00150                ): GRE_LAYER::DISPPARM(rhs) { Copy(rhs); }
00151             virtual ~DISPPARM (
00152                ) { Free(); }
00153 
00154             DISPPARM& operator= (
00155                const DISPPARM& rhs
00156                ) { if (this != &rhs) { Free(); Copy(rhs); } return (*this); }
00157 
00158             //! Set to use specified object.
00159             ERRVALUE SetObject (
00160                const RVCOBJITEM& objitem,    //!< Object to set
00161                bool keepsettings = false     //!< Retain current display settings
00162                );
00163 
00164          private:
00165             #ifndef GENERATING_DOXYGEN_OUTPUT
00166             static ERRVALUE SerializerCB_StyleFileName (SERIALIZER&, const SERIALIZER::ITEMDEF *, void *, SERIALIZER::ITEMDEF::ACTION);
00167             void Copy (const DISPPARM&);
00168             void Free ();
00169             void UpdateSaveInfo () const;
00170 
00171             //! Overrides from SERIALIZABLE.
00172             virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00173             virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname = 0) const;
00174 
00175             //! Overrides from GRE_LAYER::DISPPARM.
00176             virtual const SERIALIZER::ITEMDEF* SerialGetItemDef (SERIALIZER& serializer) const;
00177             virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00178             virtual ERRVALUE v_Validate ();
00179 
00180             friend class GRE_LAYER_VECTOR;
00181             #endif //!< GENERATING_DOXYGEN_OUTPUT
00182          }; //! End of GRE_LAYER_VECTOR::DISPPARM
00183 
00184       //! Register this layer type
00185       static void RegisterType (
00186          );
00187 
00188       //! Method to install SML class, called by internal SML function.
00189       static void SMLClassInstall (
00190          SMLCONTEXT *context                    //!< SML context
00191          );
00192 
00193       //! Construct layer and insert into list
00194       explicit GRE_LAYER_VECTOR (
00195          GRE_GROUP *group,                            //!< Group to contain layer
00196          CREATEFLAGS createflags = CREATEFLAG_None,   //!< Creation flags
00197          GRE::LISTPOS listpos = GRE::LISTPOS_Last,    //!< Position in list
00198          GRE_LAYER *reflayer = 0                      //!< Reference layer for insertion
00199          );
00200 
00201       virtual ~GRE_LAYER_VECTOR ();
00202 
00203       //! Retrieve layer-specific display parameters
00204       const DISPPARM& GetDispParm (
00205          ) const { return (m_dispparm); }
00206 
00207       //! Set layer-specific display parameters.
00208       //! This is the recommended method for changing how an existing layer is to be
00209       //! rendered.  Validation will be performed on the specified parameters and
00210       //! adjustments made to the layer's copy if necessary.  Use of this method
00211       //! usually result in a ChangeBegin / ChangeEnd message pair, and will also
00212       //! generate a ChangeObject message if the spatial object used in the layer
00213       //! is changed.
00214       ERRVALUE SetDispParm (
00215          const DISPPARM& dispparm               //!< Parameters to set
00216          );
00217 
00218    protected:
00219 
00220       DISPPARM m_dispparm;                      //!< Layer-specific display parameters
00221 
00222    private:
00223       #ifndef GENERATING_DOXYGEN_OUTPUT
00224 
00225    #ifdef X_NATIVE
00226       static void CB_ExtractRegion (Widget, void*, void*);
00227       static void CB_LegendElemListAddRmv (Widget, void*, void*);
00228       ERRVALUE OnLegendElemListAddRmv (Widget dlgparent);
00229    #endif
00230       static void LegendMsgHandler (GRAPHICTREEITEM_MSG *msg);
00231       static void DBCB_D3Point (DBCALLBACKSTRUCT*, GRE_LAYER_VECTOR*);
00232       static void DBCB_D3Poly (DBCALLBACKSTRUCT*, GRE_LAYER_VECTOR*);
00233 
00234       GRE_LEGEND_POINT m_PointLegend;
00235       GRE_LEGEND_LINE m_LineLegend;
00236       GRE_LEGEND_POLY m_PolyLegend;
00237       GRE_LEGEND_POINT m_NodeLegend;
00238       COMPINFO m_PointCompInfo;
00239       COMPINFO m_LineCompInfo;
00240       COMPINFO m_PolyCompInfo;
00241       COMPINFO m_NodeCompInfo;
00242       COMPINFO m_LabelCompInfo;
00243       GRE_SCRIPTCONTEXT_STYLE m_StyleSC;
00244       int m_StyleSegPoint;
00245       int m_StyleSegLine;
00246       int m_StyleSegPoly;
00247       int m_StyleSegNode;
00248       int m_StyleSegPoint3dBase;
00249       int m_StyleSegPoint3dExt;
00250       int m_StyleSegPoly3dExt;
00251       bool m_HaveTempDrapeRasts;
00252       RVCFILEHANDLE m_TempDrapeFileHandle;
00253       RVC::OBJITEM m_TempDrapeRast;
00254       RVC::OBJITEM m_TempDrapeMask;
00255       RVC::VECTOR *m_pObjVector;
00256 
00257       UINT32 m_VectorModifyStamp;
00258 
00259       GRE::GEOMETRIC3D *m_Geometric3D;
00260    
00261       class PRIVDRAWDATA;
00262       friend class PRIVDRAWDATA;
00263       
00264       int CallDrawFilter (GRE_LAYERDC* ldc, ELEMTYPE ElemType, INT32 ElemNum, void* data) {
00265          if (m_DrawFilter != 0) return (m_DrawFilter(ldc, ElemType, ElemNum, data));
00266          return (1);
00267          }
00268       
00269       // temporary methods may go away ***************
00270       bool NewFeaturesFilter (GRE_LAYERDC& layerdc);
00271       bool IsModeWireFrame (GRE_LAYERDC& layerdc);
00272       bool IsSurfaceFlat (GRE_LAYERDC& layerdc);
00273       bool IsManifold (GRE_LAYERDC& layerdc);
00274       bool HasPointsOnStalks (GRE_LAYERDC& layerdc);
00275       bool HasExtrudedPolygons (GRE_LAYERDC& layerdc);
00276       // **********************************************
00277 
00278       ERRVALUE Draw2D (GRE_LAYERDC& layerdc);
00279       ERRVALUE Draw3D (GRE_LAYERDC& layerdc);
00280       int DrawPolyFilled3D (GRE_LAYERDC&);
00281       ERRVALUE OpenPrivateObject ();
00282       void ScalePointsZ (POLYLINE&);
00283       void Setup3D ();
00284       ERRVALUE SetupDrape3D (GRE_LAYERDC&);
00285       ERRVALUE SetupLegend ();
00286       int SetupRegion ();
00287       ERRVALUE SetupScriptContext (GRE_SCRIPTCONTEXT_DRAW& sc);
00288 
00289       //! Overrides from GRE_LAYER.
00290    #ifdef WIN32_MFC
00291       virtual void v_AddTreeViewDetails (GRE_MFC_TREEVIEW& TreeView, HTREEITEM hParent, HTREEITEM hInsertAfter);
00292       virtual void v_AddTreeViewLegend (GRE_MFC_TREEVIEW& TreeView, HTREEITEM hParent, HTREEITEM hInsertAfter);
00293    #endif
00294    #ifdef X_NATIVE
00295       virtual void v_AppendPopupMenuItems (Widget widget, const DPOINT2D *point, MENUITEMARRAY& menuitems);
00296    #endif
00297       virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00298       virtual bool v_CanShowDetails () const;
00299    #if defined(X_NATIVE) || defined(WIN32_MFC)
00300       virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00301    #endif
00302       virtual GRE_LAYER* v_Copy (GRE_GROUP *group) const;
00303       virtual const DATATIPPARMS& v_DataTipGetParms (int component) const;
00304       virtual ERRVALUE v_DataTipSetParms (int component, const DATATIPPARMS& DataTipParms);
00305       virtual ERRVALUE v_Draw (GRE_LAYERDC& layerdc);
00306       virtual ERRVALUE v_DrawElementLow (GRE_LAYERDC& layerdc, ELEMTYPE ElemType, INT32 ElemNum, const void *style);
00307       virtual ERRVALUE v_DrawElementsLow (GRE_LAYERDC& layerdc, ELEMTYPE ElemType, const UINT8 *ElemSet, const void *style);
00308       virtual ERRVALUE v_DrawElementSample (const GRE_ELEMSAMPLE_DC& sampledc, const RVC::ELEMENT& element, const LRECT2D& samplerect);
00309       virtual INT32 v_FindClosestElement (const DPOINT2D& point, double searchdist, double *distret, int component, const UINT8 *SearchSet, GRE_FIND_FLAGS findflags);
00310       virtual int v_GetComponent (ELEMTYPE ElemType) const;
00311       virtual MICON v_GetComponentIcon (int component) const;
00312       virtual COMPINFO* v_GetComponentInfo (int component);
00313       virtual MISTRING v_GetComponentName (int component) const;
00314       virtual const void* v_GetElemDefaultStyle (ELEMTYPE ElemType) const;
00315       virtual UINT16 v_GetElemDrawSelectionMode (ELEMTYPE ElemType) const;
00316       virtual UINT16 v_GetElemDrawStyleMode (ELEMTYPE ElemType) const;
00317       virtual ERRVALUE v_GetElemExtents (ELEMTYPE ElemType, INT32 ElemNum, DRECT3D& Extents);
00318       virtual ERRVALUE v_GetElemSetByExtent (ELEMTYPE ElemType, const DRECT2D& Extent, BITSET& ElemSet);
00319       virtual ELEMTYPE v_GetElemType (int component) const;
00320       virtual bool v_GetGeorefName (RVC::OBJECTNAME& name, int component = 0) const;
00321       virtual bool v_GetLabelColor(GRE_LAYERDC& dc, const GRE::LABELPLACE& place, COLOR& color);
00322       virtual const GRE_LEGEND* v_GetLegend (ELEMTYPE ElemType);
00323       virtual INT32 v_GetNumElements (ELEMTYPE ElemType);
00324       virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00325       virtual ERRVALUE v_GetStyleInfo (ELEMTYPE ElemType, RVC::OBJITEM& ObjItem, RVC::OBJECTNAME& TableName);
00326    #ifdef X_NATIVE
00327       virtual MENUITEM* v_GetToolMenu () const;
00328    #endif
00329    #ifdef WIN32_MFC
00330       virtual bool v_HasTreeViewLegend () const;
00331    #endif
00332       virtual bool v_NeedsMEM24 (bool IsHirez) const;
00333       virtual bool v_IsTableUsableForComponent (int component, const RVCTABLEINFO& table) const;
00334    #if defined(X_NATIVE) || defined(WIN32_MFC)
00335       virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00336    #endif
00337       virtual ERRVALUE v_ReportRawElemInfo (MISTRING& infostr, ELEMTYPE ElemType, INT32 ElemNum);
00338       virtual const char* v_SerialGetTagName () const;
00339       virtual ERRVALUE v_SerialRead (SERIALIZER& serializer);
00340       virtual void v_SetDftName (bool ReplaceExisting);
00341       virtual void v_SetElemDrawSelectionMode (ELEMTYPE ElemType, UINT16 SelectMode);
00342       virtual void v_SetElemDrawStyleMode (ELEMTYPE ElemType, UINT16 StyleMode);
00343       virtual void v_SetLegendSampleFlags (MGD::STYLESAMPLEFLAGS SampleFlags);
00344       virtual ERRVALUE v_SetStyleObjItem (const RVC::OBJITEM& ObjItem);
00345       virtual int v_TestElementByRegion (ELEMTYPE ElemType, INT32 ElemNum, const REGION2D& Region, TESTCRITERIA TestMode);
00346       virtual int v_UpdateExtents (bool forceupdate);
00347       virtual GRE::LAYERVIEW* v_ConstructLayerView(GRE_VIEW* view);
00348 
00349       GRE_LAYER_VECTOR (const GRE_LAYER_VECTOR&);
00350       GRE_LAYER_VECTOR& operator= (const GRE_LAYER_VECTOR&);
00351 
00352       #endif //!< GENERATING_DOXYGEN_OUTPUT
00353    };
00354 
00355 
00356 //===================================================================================================================
00357 
00358 #endif   //!< INC_GRE_LRVECTOR_H

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