00001
00151 #ifndef INC_GRE_LRVECTOR_H
00152 #define INC_GRE_LRVECTOR_H
00153
00154 #ifndef INC_GRE_LAYER_H
00155 #include <gre/layer.h>
00156 #endif
00157
00158 #ifndef INC_GRE_LEGEND_H
00159 #include <gre/legend.h>
00160 #endif
00161
00162 #ifndef INC_GRE_EXTRUDEDPARMS_H
00163 #include <gre/extrudedparms.h>
00164 #endif
00165
00166
00167 #ifndef GENERATING_DOXYGEN_OUTPUT
00168 namespace RVC {
00169 class RASTER;
00170 }
00171 #endif
00172
00173
00174 namespace GRE {
00175
00176
00178 class LAYER_VECTOR : public LAYER {
00179 public:
00180
00181
00182 class DISPPARM : public LAYER::DISPPARM {
00183 public:
00184
00185 class DLG;
00186
00187 RVC::OBJITEM m_ObjItem;
00188 RVC::OBJECTNAME m_GeorefName;
00189 RVC::OBJITEM m_ObjItemStyle;
00190 POINTPARMS Point;
00191 LINEPARMS Line;
00192 POLYPARMS Poly;
00193 LABELPARMS Label;
00194 POINTPARMS Node;
00195 POINTSTYLE NodeDangleStyle;
00196 EXTRUDEDPOLYGONPARMS m_ExtrudedPolygon;
00197 EXTRUDEDPOINTPARMS m_ExtrudedPoint;
00198 bool EnablePolyFill3D;
00199 bool m_EnableLabelClipUnder;
00200 bool m_IsEditable;
00201 bool m_HasSaveInfo;
00202 bool m_ShowLabelBase;
00203 LINESTYLE m_LabelBaseStyle;
00204 mutable RVC::OBJITEM m_SaveObjItem;
00205 mutable RVC::OBJITEM m_SaveObjItemStyle;
00206
00208 DISPPARM ();
00209
00211 DISPPARM (
00212 const DISPPARM& rhs
00213 ): LAYER::DISPPARM(rhs) { Copy(rhs); }
00214
00216 virtual ~DISPPARM (
00217 ) { Free(); }
00218
00220 DISPPARM& operator= (
00221 const DISPPARM& rhs
00222 ) { if (this != &rhs) { Free(); Copy(rhs); } return (*this); }
00223
00224 void ClearGeorefName ()
00225 { m_GeorefName.Clear(); }
00226
00227 const RVC::OBJECTNAME& GetGeorefName () const
00228 { return (m_GeorefName); }
00229
00230 const RVC::OBJITEM& GetObjItem () const
00231 { return (m_ObjItem); }
00232
00233 const RVC::OBJITEM& GetObjItemStyle () const
00234 { return (m_ObjItemStyle); }
00235
00236 void SetGeorefName (
00237 const RVC::OBJECTNAME& GeorefName
00238 ) { m_GeorefName = GeorefName; }
00239
00241 ERRVALUE SetObject (
00242 const RVC::OBJITEM& objitem,
00243 bool keepsettings = false
00244 );
00245
00246 void SetSaveObjItems (
00247 const RVC::OBJITEM& ObjItemVector,
00248 const RVC::OBJITEM& ObjItemStyle
00249 ) { m_SaveObjItem = ObjItemVector; m_SaveObjItemStyle = ObjItemStyle; m_HasSaveInfo = true; }
00250
00251 private:
00252 #ifndef GENERATING_DOXYGEN_OUTPUT
00253 static ERRVALUE SerializerCB_StyleFileName (SERIALIZER&, const SERIALIZERITEM *, void *, SERIALIZERITEM::ACTION);
00254 void Copy (const DISPPARM&);
00255 void Free ();
00256 void UpdateSaveInfo () const;
00257
00259 virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00260 virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname = 0) const;
00261
00263 virtual const SERIALIZERITEM* SerialGetItemDef (SERIALIZER& serializer) const;
00264 virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00265 virtual ERRVALUE v_Validate ();
00266
00267 friend class LAYER_VECTOR;
00268 #endif
00269 };
00270
00272 static void RegisterType (
00273 );
00274
00276 static void SMLClassInstall (
00277 SMLCONTEXT *context
00278 );
00279
00281 explicit LAYER_VECTOR (
00282 GRE::GROUP *group,
00283 CREATEFLAGS createflags = CREATEFLAG_None,
00284 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00285 LAYER *reflayer = 0
00286 );
00287
00288 virtual ~LAYER_VECTOR ();
00289
00291 const DISPPARM& GetDispParm (
00292 ) const { return (m_dispparm); }
00293
00301 ERRVALUE SetDispParm (
00302 const DISPPARM& dispparm
00303 );
00304
00305 protected:
00306
00307 DISPPARM m_dispparm;
00308
00309 #ifdef USE_MGUI
00310 virtual void v_MenuAddLayerItems (MGUI::MENU& menu);
00311 #endif
00312
00313 private:
00314 #ifndef GENERATING_DOXYGEN_OUTPUT
00315
00316 static void LegendMsgHandler (GRAPHICTREEITEM_MSG *msg);
00317 #ifdef X_NATIVE
00318 static void CB_LegendElemListAddRmv (Widget, void *vlayer, void *);
00319 #endif
00320
00321 GRE::LEGEND_POINT m_PointLegend;
00322 GRE::LEGEND_LINE m_LineLegend;
00323 GRE::LEGEND_POLYGON m_PolyLegend;
00324 GRE::LEGEND_POINT m_NodeLegend;
00325 COMPINFO m_PointCompInfo;
00326 COMPINFO m_LineCompInfo;
00327 COMPINFO m_PolyCompInfo;
00328 COMPINFO m_NodeCompInfo;
00329 COMPINFO m_LabelCompInfo;
00330 GRE::SCRIPTCONTEXT_STYLE *m_pStyleSC;
00331 int m_StyleSegPoint;
00332 int m_StyleSegLine;
00333 int m_StyleSegPoly;
00334 int m_StyleSegNode;
00335 int m_StyleSegPoint3dBase;
00336 int m_StyleSegPoint3dExt;
00337 int m_StyleSegPoly3dExt;
00338 RVC::RASTER *m_pTempDrapeRast;
00339 RVC::RASTER *m_pTempDrapeMask;
00340 #ifdef USE_MGUI
00341 DISPPARM::DLG *m_pDlgControlPanel;
00342 #endif
00343 RVC::VECTOR *m_pObjVector;
00344 UINT32 m_VectorModifyStamp;
00345 GRE::GEOMETRIC3D *m_pGeometric3D;
00346 GRE::WIREFRAME *m_pWireframe;
00347
00348 class PRIVDRAWDATA;
00349 friend class PRIVDRAWDATA;
00350
00351
00352 bool NewFeaturesFilter (LAYERDC& layerdc);
00353 bool IsModeWireFrame (LAYERDC& layerdc);
00354 bool IsSurfaceFlat (LAYERDC& layerdc);
00355 bool IsManifold (LAYERDC& layerdc);
00356 bool HasPointsOnStalks (LAYERDC& layerdc);
00357 bool HasExtrudedPolygons (LAYERDC& layerdc);
00358
00359
00360 ERRVALUE Draw2D (LAYERDC& layerdc);
00361 ERRVALUE Draw3D (LAYERDC& layerdc);
00362 int DrawPolyFilled3D (LAYERDC&);
00363 ERRVALUE DrawWireframe (LAYERDC& layerdc);
00364 #ifdef USE_MGUI
00365 void OnMenuExtractByRegion (MGUI::ID, bool);
00366 void OnMenuLegendElemListAddRmv (MGUI::ID, bool);
00367 #endif
00368 ERRVALUE OpenPrivateObject () const;
00369 ERRVALUE SetupDrape3D (LAYERDC&);
00370 ERRVALUE SetupLegend ();
00371 int SetupRegion ();
00372 ERRVALUE SetupScriptContext (GRE::SCRIPTCONTEXT_DRAW& sc);
00373 ERRVALUE WireReadExtrudedPoints (GRE::LAYERDC& layerdc);
00374 ERRVALUE WireReadExtrudedPolygons (GRE::LAYERDC& layerdc);
00375 ERRVALUE WireReadVector (GRE::LAYERDC& layerdc);
00376
00378 #ifdef X_NATIVE
00379 virtual void v_AppendPopupMenuItems (Widget widget, const DPOINT2D *point, MENUITEMARRAY& menuitems);
00380 #endif
00381 virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00382 virtual bool v_CanShowDetails () const;
00383 #ifdef USE_MGUI
00384 virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00385 #endif
00386 virtual LAYER* v_Copy (GRE::GROUP *group) const;
00387 virtual const DATATIPPARMS* v_DataTipGetParms (int component) const;
00388 virtual void v_DataTipSetDefault (int component, bool force);
00389 virtual ERRVALUE v_DataTipSetParms (int component, const DATATIPPARMS& DataTipParms);
00390 virtual ERRVALUE v_Draw (LAYERDC& layerdc);
00391 virtual ERRVALUE v_DrawElementLow (LAYERDC& layerdc, ELEMTYPE ElemType, ELEMNUM ElemNum, const void *style);
00392 virtual ERRVALUE v_DrawElementsLow (LAYERDC& layerdc, ELEMTYPE ElemType, const UNSIGNEDSET *pElemSet, const void *style);
00393 virtual ERRVALUE v_DrawElementSample (const GRE::ELEMSAMPLE_DC& sampledc, const RVC::ELEMENT& element, const LRECT2D& samplerect);
00394 virtual ELEMNUM v_FindClosestElement (const DPOINT2D& point, double searchdist, double *distret, int component, const UNSIGNEDSET *pSearchSet, GRE::FINDFLAGS findflags);
00395 virtual int v_GetComponent (ELEMTYPE ElemType) const;
00396 virtual MICONSTRUCT* v_GetComponentIcon (int component) const;
00397 virtual COMPINFO* v_GetComponentInfo (int component);
00398 virtual MISTRING v_GetComponentName (int component) const;
00399 virtual const void* v_GetElemDefaultStyle (ELEMTYPE ElemType) const;
00400 virtual UINT16 v_GetElemDrawSelectionMode (ELEMTYPE ElemType) const;
00401 virtual UINT16 v_GetElemDrawStyleMode (ELEMTYPE ElemType) const;
00402 virtual ERRVALUE v_GetElemExtents (ELEMTYPE ElemType, ELEMNUM ElemNum, DRECT3D& Extents);
00403 virtual ERRVALUE v_GetElemSetByExtent (ELEMTYPE ElemType, const DRECT2D& Extent, UNSIGNEDSET& ElemSet);
00404 virtual ELEMTYPE v_GetElemType (int component) const;
00405 virtual bool v_GetGeorefName (RVC::OBJECTNAME& name, int component = 0) const;
00406 virtual bool v_GetLabelColor(LAYERDC& dc, const GRE::LABELPLACE& place, COLOR& color);
00407 virtual const GRE::LEGEND* v_GetLegend (ELEMTYPE ElemType);
00408 virtual INT64 v_GetNumElements (ELEMTYPE ElemType);
00409 virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00410 virtual ERRVALUE v_GetStyleInfo (ELEMTYPE ElemType, RVC::OBJITEM& ObjItem, RVC::OBJECTNAME& TableName);
00411 virtual bool v_HasLegend () const;
00412 virtual bool v_IsTableUsableForComponent (int component, const RVC::DBTABLE& table) const;
00413 #ifdef USE_MGUI
00414 virtual void v_MenuAddRegionGenItems (MGUI::MENU& menu, ELEMTYPE ElemType);
00415 #endif
00416 virtual void v_OnNotifySurfaceChanged ();
00417 #ifdef USE_MGUI
00418 virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00419 #endif
00420 virtual ERRVALUE v_ReportRawElemInfo (MISTRING& infostr, ELEMTYPE ElemType, ELEMNUM ElemNum);
00421 virtual const char* v_SerialGetTagName () const;
00422 virtual ERRVALUE v_SerialRead (SERIALIZER& serializer);
00423 virtual void v_SetElemDrawSelectionMode (ELEMTYPE ElemType, UINT16 SelectMode);
00424 virtual void v_SetElemDrawStyleMode (ELEMTYPE ElemType, UINT16 StyleMode);
00425 virtual void v_SetLegendSampleFlags (MGD::STYLESAMPLEFLAGS SampleFlags);
00426 virtual void v_SetObjectDescriptor (int component, const RVC::DESCRIPTOR& descriptor);
00427 virtual ERRVALUE v_SetStyleObjItem (const RVC::OBJITEM& ObjItem);
00428 virtual int v_SnapPoint (DPOINT3D& ptObject, SNAPTO SnapTo, double MaxDistance, VIEW *view) const;
00429 virtual bool v_SnapPointIsAllowed (SNAPTO SnapTo) const;
00430 virtual int v_TestElementByRegion (ELEMTYPE ElemType, ELEMNUM ElemNum, const REGION2D& Region, TESTCRITERIA TestMode);
00431 #ifdef USE_MGUI
00432 virtual MGUI::CTRL_TREE::ITEMHND v_TreeViewAddUpdateLegend (GRE::CTRL_TREEVIEW& TreeView, MGUI::CTRL_TREE::ITEMHND hndParent, MGUI::CTRL_TREE::ITEMHND hndInsertAfter);
00433 virtual void v_TreeViewAddUpdateDetails (GRE::CTRL_TREEVIEW& TreeView, MGUI::CTRL_TREE::ITEMHND hndParent, MGUI::CTRL_TREE::ITEMHND hndInsertAfter);
00434 #endif
00435 virtual int v_UpdateExtents (bool forceupdate);
00436 virtual GRE::LAYERSECTION* v_ConstructLayerSection (GRE::VIEW* view);
00437
00438 LAYER_VECTOR (const LAYER_VECTOR&);
00439 LAYER_VECTOR& operator= (const LAYER_VECTOR&);
00440
00441 #endif
00442 };
00443
00444
00445
00446 }
00447
00448 #endif // INC_GRE_LRVECTOR_H