00001
00047 #ifndef INC_GRE_LRSHAPE_H
00048 #define INC_GRE_LRSHAPE_H
00049
00050 #ifndef INC_GRE_LAYER_H
00051 #include <gre/layer.h>
00052 #endif
00053
00054 #ifndef INC_GRE_LEGEND_H
00055 #include <gre/legend.h>
00056 #endif
00057
00058 #ifndef INC_GRE_ELEMPARMS_H
00059 #include <gre/elemparms.h>
00060 #endif
00061
00062 #ifndef GENERATING_DOXYGEN_OUTPUT
00063 namespace RVC {
00064 class SHAPE;
00065 }
00066 #endif // GENERATING_DOXYGEN_OUTPUT
00067
00068
00069 namespace GRE {
00070
00071
00073 class LAYER_SHAPE : public LAYER {
00074 public:
00075
00076
00077 class DISPPARM : public LAYER::DISPPARM {
00078 public:
00079
00080 class DLG;
00081
00083 class ELEMENTPARMS {
00084 public:
00085 SELECTPARMS Select;
00086 POINTPARMS::POINTSTYLEPARMS m_PointStyle;
00087 LINEPARMS::LINESTYLEPARMS m_LineStyle;
00088 POLYPARMS::POLYSTYLEPARMS m_PolyStyle;
00089 DATATIPPARMS DataTip;
00090
00091 LEGENDPARMS Legend;
00092 RVC::OBJECTNAME LegendElemTableName;
00093
00094 ELEMENTPARMS ();
00095 ELEMENTPARMS (const ELEMENTPARMS& rhs);
00096 ~ELEMENTPARMS ();
00097
00098 ELEMENTPARMS& operator= (const ELEMENTPARMS& rhs);
00099 void Validate ();
00100 AUTOLABELPARMS AutoLabel;
00101 };
00102
00103 RVC::OBJITEM m_ObjItem;
00104 RVC::OBJECTNAME m_GeorefName;
00105 RVC::OBJITEM m_ObjItemStyle;
00106 ELEMENTPARMS m_Element;
00107 bool m_EnableLabelClipUnder;
00108 bool m_IsEditable;
00109 bool m_HasSaveInfo;
00110 mutable RVC::OBJITEM m_SaveObjItem;
00111 mutable RVC::OBJITEM m_SaveObjItemStyle;
00112
00113 DISPPARM ();
00114 DISPPARM (
00115 const DISPPARM& rhs
00116 ) { Copy(rhs); }
00117
00118 virtual ~DISPPARM ();
00119
00120 DISPPARM& operator= (
00121 const DISPPARM& rhs
00122 ) { if (this != &rhs) { Free(); Copy(rhs); } return (*this); }
00123
00125 ERRVALUE SetObject (
00126 const RVC::OBJITEM& objitem,
00127 bool keepsettings = false
00128 );
00129
00130 private:
00131 #ifndef GENERATING_DOXYGEN_OUTPUT
00132 static ERRVALUE SerializerCB_StyleFileName (SERIALIZER&, const SERIALIZERITEM *, void *, SERIALIZERITEM::ACTION);
00133 void Copy (const DISPPARM&);
00134 void Free ();
00135 void UpdateSaveInfo () const;
00136
00138 virtual ERRVALUE SerialRead (SERIALIZER& serializer);
00139 virtual ERRVALUE SerialWrite (SERIALIZER& serializer, const char *tagname = 0) const;
00140
00142 virtual const SERIALIZERITEM* SerialGetItemDef (SERIALIZER& serializer) const;
00143 virtual ERRVALUE v_SetObjItem (const RVC::OBJITEM& objitem, bool replace);
00144 virtual ERRVALUE v_Validate ();
00145
00146 friend class LAYER_SHAPE;
00147 #endif
00148 };
00149
00151 static void RegisterType (
00152 );
00153
00155 static void SMLClassInstall (
00156 SMLCONTEXT *context
00157 );
00158
00160 explicit LAYER_SHAPE (
00161 GRE::GROUP *group,
00162 CREATEFLAGS createflags = CREATEFLAG_None,
00163 GRE::LISTPOS listpos = GRE::LISTPOS_Last,
00164 LAYER *reflayer = 0
00165 );
00166
00167 virtual ~LAYER_SHAPE ();
00168
00170 const DISPPARM& GetDispParm (
00171 ) const { return (m_dispparm); }
00172
00180 ERRVALUE SetDispParm (
00181 const DISPPARM& dispparm
00182 );
00183
00184 protected:
00185
00186 DISPPARM m_dispparm;
00187
00188 private:
00189 #ifndef GENERATING_DOXYGEN_OUTPUT
00190
00191 class OPENCLOSE {
00192 public:
00193 OPENCLOSE ();
00194 ~OPENCLOSE ();
00195 ERRVALUE Open (const LAYER_SHAPE *layer);
00196 private:
00197 const LAYER_SHAPE *m_layer;
00198 };
00199
00200 friend class OPENCLOSE;
00201
00202 static void LegendMsgHandler (GRAPHICTREEITEM_MSG *msg);
00203 #ifdef X_NATIVE
00204 static void CB_LegendElemListAddRmv (Widget, void *vlayer, void *);
00205 #endif
00206
00207 GRE::LEGEND_POINT m_PointLegend;
00208 GRE::LEGEND_LINE m_LineLegend;
00209 GRE::LEGEND_POLYGON m_PolyLegend;
00210 COMPINFO m_ElementCompInfo;
00211 GRE::SCRIPTCONTEXT_STYLE *m_pStyleSC;
00212 int m_StyleSegPoint;
00213 int m_StyleSegLine;
00214 int m_StyleSegPoly;
00215 int m_StyleSegPoint3dBase;
00216 int m_StyleSegPoint3dExt;
00217 int m_StyleSegPoly3dExt;
00218 bool m_HaveTempDrapeRasts;
00219 RVC::OBJECT m_TempDrapeFile;
00220 RVC::OBJITEM m_TempDrapeRast;
00221 RVC::OBJITEM m_TempDrapeMask;
00222 #ifdef USE_MGUI
00223 DISPPARM::DLG* m_ControlPanelDialog;
00224 #endif
00225 RVC::SHAPE *m_pObjShape;
00226 mutable INT32 m_PrivOpenCount;
00227 GRE::GEOMETRIC3D *m_pGeometric3D;
00228 GRE::WIREFRAME *m_pWireframe;
00229
00230 class PRIVDRAWDATA;
00231 friend class PRIVDRAWDATA;
00232
00233 void ClosePrivateObject () const;
00234 int DrawPolyFilled3D (LAYERDC&);
00235 #ifdef USE_MGUI
00236 void OnMenuExtractByRegion (MGUI::ID, bool);
00237 void OnMenuLegendElemListAddRmv (MGUI::ID, bool);
00238 #endif
00239 ERRVALUE OpenPrivateObject () const;
00240 void Setup3D ();
00241 ERRVALUE SetupDrape3D (LAYERDC&);
00242 ERRVALUE SetupLegend ();
00243 int SetupRegion ();
00244 ERRVALUE SetupScriptContext (GRE::SCRIPTCONTEXT_DRAW& sc);
00245
00246
00247 bool NewFeaturesFilter (LAYERDC& layerdc);
00248 bool IsModeWireFrame (LAYERDC& layerdc);
00249 bool IsSurfaceFlat (LAYERDC& layerdc);
00250
00251
00252 ERRVALUE Draw2D (LAYERDC& layerdc);
00253 ERRVALUE Draw3D (LAYERDC& layerdc);
00254 ERRVALUE DrawWireframe (LAYERDC& layerdc);
00255 ERRVALUE WireReadShape (LAYERDC& layerdc);
00256
00258 #ifdef X_NATIVE
00259 virtual void v_AppendPopupMenuItems (Widget widget, const DPOINT2D *point, MENUITEMARRAY& menuitems);
00260 #endif
00261 virtual ERRVALUE v_AssignObject (const RVC::OBJITEM& objitem, MDLGPARENT dlgparent);
00262 virtual bool v_CanShowDetails () const;
00263 virtual GRE::LAYERSECTION* v_ConstructLayerSection (GRE::VIEW* view);
00264 #ifdef USE_MGUI
00265 virtual int v_ControlPanel (MDLGPARENT dlgparent,UINT32 flags = 0);
00266 #endif
00267 virtual LAYER* v_Copy (GRE::GROUP *group) const;
00268 virtual const DATATIPPARMS* v_DataTipGetParms (int component) const;
00269 virtual ERRVALUE v_DataTipSetParms (int component, const DATATIPPARMS& DataTipParms);
00270 virtual ERRVALUE v_Draw (LAYERDC& layerdc);
00271 virtual ERRVALUE v_DrawElementLow (LAYERDC& layerdc, ELEMTYPE ElemType, ELEMNUM ElemNum, const void *style);
00272 virtual ERRVALUE v_DrawElementsLow (LAYERDC& layerdc, ELEMTYPE ElemType, const UNSIGNEDSET *pElemSet, const void *style);
00273 virtual ERRVALUE v_DrawElementSample (const GRE::ELEMSAMPLE_DC& sampledc, const RVC::ELEMENT& element, const LRECT2D& samplerect);
00274 virtual ELEMNUM v_FindClosestElement (const DPOINT2D& point, double searchdist, double *distret, int component, const UNSIGNEDSET *pSearchSet, GRE::FINDFLAGS findflags);
00275 virtual int v_GetComponent (ELEMTYPE ElemType) const;
00276 virtual MICONSTRUCT* v_GetComponentIcon (int component) const;
00277 virtual COMPINFO* v_GetComponentInfo (int component);
00278 virtual MISTRING v_GetComponentName (int component) const;
00279 virtual const void* v_GetElemDefaultStyle (ELEMTYPE ElemType) const;
00280 virtual UINT16 v_GetElemDrawSelectionMode (ELEMTYPE ElemType) const;
00281 virtual UINT16 v_GetElemDrawStyleMode (ELEMTYPE ElemType) const;
00282 virtual ERRVALUE v_GetElemExtents (ELEMTYPE ElemType, ELEMNUM ElemNum, DRECT3D& Extents);
00283 virtual ERRVALUE v_GetElemSetByExtent (ELEMTYPE ElemType, const DRECT2D& Extent, UNSIGNEDSET& ElemSet);
00284 virtual ELEMTYPE v_GetElemType (int component) const;
00285 virtual bool v_GetGeorefName (RVC::OBJECTNAME& name, int component = 0) const;
00286 virtual bool v_GetLabelColor (LAYERDC&, const GRE::LABELPLACE&, COLOR&);
00287 virtual const GRE::LEGEND* v_GetLegend (ELEMTYPE ElemType);
00288 virtual INT64 v_GetNumElements (ELEMTYPE ElemType);
00289 virtual const RVC::OBJITEM& v_GetObjItem (int component) const;
00290 virtual ERRVALUE v_GetStyleInfo (ELEMTYPE ElemType, RVC::OBJITEM& ObjItem, RVC::OBJECTNAME& TableName);
00291 virtual bool v_HasLegend () const;
00292 virtual bool v_IsTableUsableForComponent (int component, const RVC::DBTABLE& table) const;
00293 #ifdef USE_MGUI
00294 virtual void v_MenuAddLayerItems (MGUI::MENU& menu);
00295 virtual void v_MenuAddRegionGenItems (MGUI::MENU& menu, ELEMTYPE ElemType);
00296 virtual ERRVALUE v_PromptObject (bool OpenCtrlPanel, MDLGPARENT dlgparent);
00297 #endif
00298 virtual ERRVALUE v_ReportRawElemInfo (MISTRING& infostr, ELEMTYPE ElemType, ELEMNUM ElemNum);
00299 virtual const char* v_SerialGetTagName () const;
00300 virtual ERRVALUE v_SerialRead (SERIALIZER& serializer);
00301 virtual void v_SetElemDrawSelectionMode (ELEMTYPE ElemType, UINT16 SelectMode);
00302 virtual void v_SetElemDrawStyleMode (ELEMTYPE ElemType, UINT16 StyleMode);
00303 virtual void v_SetLegendSampleFlags (MGD::STYLESAMPLEFLAGS SampleFlags);
00304 virtual void v_SetObjectDescriptor (int component, const RVC::DESCRIPTOR& descriptor);
00305 virtual ERRVALUE v_SetStyleObjItem (const RVC::OBJITEM& ObjItem);
00306 virtual int v_SnapPoint (DPOINT3D& ptObject, SNAPTO SnapTo, double MaxDistance, VIEW *view) const;
00307 virtual bool v_SnapPointIsAllowed (SNAPTO SnapTo) const;
00308 virtual int v_TestElementByRegion (ELEMTYPE ElemType, ELEMNUM ElemNum, const REGION2D& Region, TESTCRITERIA TestMode);
00309 #ifdef USE_MGUI
00310 virtual MGUI::CTRL_TREE::ITEMHND v_TreeViewAddUpdateLegend (GRE::CTRL_TREEVIEW& TreeView, MGUI::CTRL_TREE::ITEMHND hndParent, MGUI::CTRL_TREE::ITEMHND hndInsertAfter);
00311 virtual void v_TreeViewAddUpdateDetails (GRE::CTRL_TREEVIEW& TreeView, MGUI::CTRL_TREE::ITEMHND hndParent, MGUI::CTRL_TREE::ITEMHND hndInsertAfter);
00312 #endif
00313 virtual int v_UpdateExtents (bool forceupdate);
00314
00315 LAYER_SHAPE (const LAYER_SHAPE&);
00316 LAYER_SHAPE& operator= (const LAYER_SHAPE&);
00317
00318 #endif // GENERATING_DOXYGEN_OUTPUT
00319 };
00320
00321 }
00322
00323 #endif // INC_GRE_LRSHAPE_H
00324