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
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
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
00118 class GRE_LAYER_VECTOR : public GRE_LAYER {
00119 public:
00120
00121
00122 class DISPPARM : public GRE_LAYER::DISPPARM {
00123 public:
00124
00125 class DLG;
00126
00127 RVC::OBJITEM m_ObjItem;
00128 RVC::OBJECTNAME m_GeorefName;
00129 RVC::OBJITEM m_ObjItemStyle;
00130 POINTPARMS Point;
00131 LINEPARMS Line;
00132 POLYPARMS Poly;
00133 LABELPARMS Label;
00134 POINTPARMS Node;
00135 POINTSTYLE NodeDangleStyle;
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
00159 ERRVALUE SetObject (
00160 const RVCOBJITEM& objitem,
00161 bool keepsettings = false
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
00172 virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00173 virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname = 0) const;
00174
00175
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
00182 };
00183
00184
00185 static void RegisterType (
00186 );
00187
00188
00189 static void SMLClassInstall (
00190 SMLCONTEXT *context
00191 );
00192
00193
00194 explicit GRE_LAYER_VECTOR (
00195 GRE_GROUP *group,
00196 CREATEFLAGS createflags = CREATEFLAG_None,
00197 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00198 GRE_LAYER *reflayer = 0
00199 );
00200
00201 virtual ~GRE_LAYER_VECTOR ();
00202
00203
00204 const DISPPARM& GetDispParm (
00205 ) const { return (m_dispparm); }
00206
00207
00208
00209
00210
00211
00212
00213
00214 ERRVALUE SetDispParm (
00215 const DISPPARM& dispparm
00216 );
00217
00218 protected:
00219
00220 DISPPARM m_dispparm;
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
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
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
00353 };
00354
00355
00356
00357
00358 #endif