X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FHYDROData%2FHYDROData_Entity.h;h=a38e771dd47ba9a8499061bc6a34835b23e38882;hb=9a544b2f8f5692d57e7554c304a95aebe6e33e3f;hp=9f2633a28673d09931f3f3826a31f4e2409ded79;hpb=7b9454f8053b968f127bf7981eb05b6749e261f4;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Entity.h b/src/HYDROData/HYDROData_Entity.h index 9f2633a2..a38e771d 100644 --- a/src/HYDROData/HYDROData_Entity.h +++ b/src/HYDROData/HYDROData_Entity.h @@ -1,52 +1,89 @@ +// Copyright (C) 2014-2015 EDF-R&D +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifndef HYDROData_Entity_HeaderFile #define HYDROData_Entity_HeaderFile #include "HYDROData.h" - #include - #include - #include +#include class QColor; -class QString; class QVariant; class QStringList; class Handle(TDataStd_ReferenceList); class Handle_HYDROData_Entity; +class TopoDS_Shape; ///! Kind of an object in a document typedef int ObjectKind; -const ObjectKind KIND_UNKNOWN = 0; ///! Unrecognized object -const ObjectKind KIND_IMAGE = 1; -const ObjectKind KIND_POLYLINE = 2; -const ObjectKind KIND_BATHYMETRY = 3; -const ObjectKind KIND_ALTITUDE = 4; -const ObjectKind KIND_IMMERSIBLE_ZONE = 5; -const ObjectKind KIND_RIVER = 6; -const ObjectKind KIND_STREAM = 7; -const ObjectKind KIND_CONFLUENCE = 8; -const ObjectKind KIND_CHANNEL = 9; -const ObjectKind KIND_OBSTACLE = 10; -const ObjectKind KIND_DIGUE = 11; -const ObjectKind KIND_PROFILE = 12; -const ObjectKind KIND_PROFILEUZ = 13; -const ObjectKind KIND_POLYLINEXY = 14; -const ObjectKind KIND_CALCULATION = 15; -const ObjectKind KIND_ZONE = 16; -const ObjectKind KIND_REGION = 17; -const ObjectKind KIND_VISUAL_STATE = 18; -const ObjectKind KIND_LAST = KIND_VISUAL_STATE; +const ObjectKind KIND_UNKNOWN = 0; ///! Unrecognized object +const ObjectKind KIND_IMAGE = 1; +const ObjectKind KIND_POLYLINE = 2; +const ObjectKind KIND_BATHYMETRY = 3; +const ObjectKind KIND_ALTITUDE = 4; +const ObjectKind KIND_IMMERSIBLE_ZONE = 5; +const ObjectKind KIND_RIVER = 6; +const ObjectKind KIND_STREAM = 7; +const ObjectKind KIND_CONFLUENCE = 8; +const ObjectKind KIND_CHANNEL = 9; +const ObjectKind KIND_OBSTACLE = 10; +const ObjectKind KIND_DIGUE = 11; +const ObjectKind KIND_PROFILE = 12; +const ObjectKind KIND_PROFILEUZ = 13; +const ObjectKind KIND_POLYLINEXY = 14; +const ObjectKind KIND_CALCULATION = 15; +const ObjectKind KIND_ZONE = 16; +const ObjectKind KIND_REGION = 17; +const ObjectKind KIND_VISUAL_STATE = 18; +const ObjectKind KIND_ARTIFICIAL_OBJECT = 19; +const ObjectKind KIND_NATURAL_OBJECT = 20; +const ObjectKind KIND_DUMMY_3D = 21; +const ObjectKind KIND_SHAPES_GROUP = 22; +const ObjectKind KIND_SPLIT_GROUP = 23; +const ObjectKind KIND_STREAM_ALTITUDE = 24; +const ObjectKind KIND_OBSTACLE_ALTITUDE = 25; +const ObjectKind KIND_STRICKLER_TABLE = 26; +const ObjectKind KIND_LAND_COVER_OBSOLETE = 27; +const ObjectKind KIND_CHANNEL_ALTITUDE = 28; +const ObjectKind KIND_LAND_COVER_MAP = 29; +const ObjectKind KIND_DTM = 30; +const ObjectKind KIND_LAST = KIND_LAND_COVER_MAP; DEFINE_STANDARD_HANDLE(HYDROData_Entity, MMgt_TShared) -typedef QMap MapOfTreatedObjects; +class MapOfTreatedObjects : public QMap +{ +}; -typedef NCollection_Sequence HYDROData_SequenceOfObjects; +class HYDRODATA_EXPORT HYDROData_SequenceOfObjects : public NCollection_Sequence +{ +public: + HYDROData_SequenceOfObjects(); + HYDROData_SequenceOfObjects( const HYDROData_SequenceOfObjects& ); + HYDROData_SequenceOfObjects( const NCollection_Sequence& ); +}; +///! Is Equal for HYDROData_Entity mapping +HYDRODATA_EXPORT bool IsEqual(const Handle_HYDROData_Entity& theObj1, const Handle_HYDROData_Entity& theObj2); /**\class HYDROData_Entity * \brief Generic class of any object in the data model. @@ -57,25 +94,29 @@ typedef NCollection_Sequence HYDROData_SequenceOfObject */ class HYDROData_Entity : public MMgt_TShared { - protected: - /** * Enumeration of tags corresponding to the persistent object parameters. */ enum DataTag { - DataTag_First = 0 ///< first tag, to reserve - // ... + DataTag_First = 0, ///< first tag, to reserve + DataTag_ZLevel, ///< z-level of object presentation + DataTag_GeomChange, + DataTag_DefaultName, ///< to keep the automatic name, useful in Python dump }; - /** - * Enumeration of tags corresponding to the child sub-objects of object. - */ - enum ChildTag +public: + enum Geometry { - ChildTag_First = 0 ///< first tag, to reserve - // ... + Geom_No = 1, + Geom_2d = 2, + Geom_Z = 4, + Geom_Groups = 8, + + Geom_3d = Geom_2d | Geom_Z, + Geom_2d_and_groups = Geom_2d | Geom_Groups, + Geom_All = Geom_3d | Geom_Groups | Geom_No, }; public: @@ -89,12 +130,22 @@ public: /** * Returns the name of this object. */ - HYDRODATA_EXPORT QString GetName() const; + HYDRODATA_EXPORT virtual QString GetName() const; + + /** + * Returns the default name of this object. + */ + HYDRODATA_EXPORT virtual QString GetDefaultName() const; /** * Updates the name of this object. */ - HYDRODATA_EXPORT void SetName(const QString& theName); + HYDRODATA_EXPORT void SetName( const QString& theName, bool isDefault = false ); + + /** + * Returns the name of this object valid for Python script. + */ + HYDRODATA_EXPORT virtual QString GetObjPyName() const; /** * Dump object to Python script representation. @@ -102,14 +153,26 @@ public: * You should reimplement this function in your derived class if it * has Python API and can be imported/exported from/to Python script. */ - HYDRODATA_EXPORT virtual QStringList DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const; + HYDRODATA_EXPORT virtual QStringList DumpToPython( const QString& thePyScriptPath, + MapOfTreatedObjects& theTreatedObjects ) const; /** - * Updates object state. - * Base implementation dose nothing. - * \param theIsForce force reupdating of data object + * Updates object state. Base implementation dose nothing. */ - HYDRODATA_EXPORT virtual void Update( const bool theIsForce = true ); + HYDRODATA_EXPORT virtual void Update(); + + HYDRODATA_EXPORT virtual void UpdateLocalCS( double theDx, double theDy ); + + /** + * Checks that object has 2D presentation. Base implementation returns false. + */ + HYDRODATA_EXPORT virtual bool IsHas2dPrs() const; + + /** + * Show object at the top of other model objects. + */ + HYDRODATA_EXPORT virtual void Show(); + /** * Returns data of object wrapped to QVariant. @@ -117,6 +180,19 @@ public: */ HYDRODATA_EXPORT virtual QVariant GetDataVariant(); + + + HYDRODATA_EXPORT virtual void ClearChanged(); + HYDRODATA_EXPORT virtual void Changed( Geometry ); + + HYDRODATA_EXPORT bool IsMustBeUpdated( Geometry ) const; + + /** + * Returns flag indicating that object is updateble or not. + */ + HYDRODATA_EXPORT virtual bool CanBeUpdated() const; + + /** * Checks is object exists in the data structure. * \returns true is object is not exists in the data model @@ -129,21 +205,26 @@ public: HYDRODATA_EXPORT virtual void Remove(); /** - * Returns unique integer identifier of the object (may be used for ordering of objects) + * Returns flag indicating that object can be removed or not. + * Reimplement this method in class which can't be removed + * separately with it parent object. + * Base implementaiton returns always TRUE. */ - HYDRODATA_EXPORT inline int ID() const {return myLab.Tag();} + HYDRODATA_EXPORT virtual bool CanRemove(); /** * Copies all properties of this to the destinated object. * Objects must be the same type. * \param theDestination initialized object (from any document) - target of copying */ - HYDRODATA_EXPORT void CopyTo(Handle_HYDROData_Entity theDestination) const; + HYDRODATA_EXPORT virtual void CopyTo( const Handle(HYDROData_Entity)& theDestination, + bool isGenerateNewName ) const; /** * Returns the label of this object. */ - HYDRODATA_EXPORT TDF_Label& Label() {return myLab;} + HYDRODATA_EXPORT TDF_Label& Label() { return myLab; } + /** * Returns father object. For object created under root document label @@ -151,6 +232,59 @@ public: */ HYDRODATA_EXPORT virtual Handle(HYDROData_Entity) GetFatherObject() const; + + /** + * Returns the list of all reference objects of this object. + * Base implementation always return empty list. + */ + HYDRODATA_EXPORT virtual HYDROData_SequenceOfObjects GetAllReferenceObjects() const; + + + /** + * Returns the z-level for object presentation, -1 if no z-level. + */ + HYDRODATA_EXPORT virtual Standard_Boolean GetZLevel( Standard_Integer& theLevel ) const; + + /** + * Set the z-level for object presentation. + */ + HYDRODATA_EXPORT virtual void SetZLevel( const Standard_Integer& theLevel ); + + /** + * Remove the z-level of object presentation. + */ + HYDRODATA_EXPORT virtual void RemoveZLevel(); + + /** + Add in Python script the find instruction, to retrieve the Python object in the document by the object name. + @param theScript the script + @param defName the name to use, if not default name. + */ + void findPythonReferenceObject( QStringList& theScript, + QString defName = QString()) const; + + /** + Add in Python script the set name instruction. + @param theScript the script + @param defName the name to use, if not default name. + */ + void SetNameInDumpPython(QStringList& theScript, + QString theName = QString()) const; + + /** + * Internal method that used to store the color attribute + * \param theTag tag of a label that keeps the attribute (for 0 this is myLab) + * \param theColor color to save + */ + HYDRODATA_EXPORT void SetColor( const QColor& theColor, const int theTag = 0 ); + + /** + * Internal method that used to retreive the color attribute + * \param theTag tag of a label that keeps the attribute (for 0 this is myLab) + * \param theDefColor default color to return if attribute has not been set before + */ + HYDRODATA_EXPORT QColor GetColor( const QColor& theDefColor, const int theTag = 0 ) const; + protected: friend class HYDROData_Iterator; @@ -159,7 +293,7 @@ protected: * Creates new object in the internal data structure. Use higher level objects * to create objects with real content. */ - HYDRODATA_EXPORT HYDROData_Entity(); + HYDRODATA_EXPORT HYDROData_Entity( Geometry ); /** * Destructs properties of the object and object itself, removes it from the document. @@ -170,7 +304,7 @@ protected: * Put the object to the label of the document. * \param theLabel new label of the object */ - HYDRODATA_EXPORT virtual void SetLabel(TDF_Label theLabel); + HYDRODATA_EXPORT virtual void SetLabel( const TDF_Label& theLabel ); /** * Internal method that used to store the byte array attribute @@ -278,40 +412,53 @@ protected: * \param theTag tag of a label that keeps the attribute (for 0 this is myLab) */ void ClearReferenceObjects( const int theTag = 0 ); + +protected: /** - * Internal method that used to store the color attribute - * \param theTag tag of a label that keeps the attribute (for 0 this is myLab) - * \param theColor color to save + * Dump the initial object creation to a Python script. + * You should call it from DumpToPython implementation before + * dumping fields of the object. */ - void SetColor( const QColor& theColor, const int theTag = 0 ); + HYDRODATA_EXPORT virtual QStringList dumpObjectCreation( MapOfTreatedObjects& theTreatedObjects ) const; /** - * Internal method that used to retreive the color attribute - * \param theTag tag of a label that keeps the attribute (for 0 this is myLab) - * \param theDefColor default color to return if attribute has not been set before + * Returns an object type name as a string for dumping to Python. */ - QColor GetColor( const QColor& theDefColor, const int theTag = 0 ) const; + QString getPyTypeID() const; - -protected: - - void setPythonReferenceObject( MapOfTreatedObjects& theTreatedObjects, + void setPythonReferenceObject( const QString& thePyScriptPath, + MapOfTreatedObjects& theTreatedObjects, QStringList& theScript, const Handle(HYDROData_Entity)& theRefObject, const QString& theMethod ) const; + + bool checkObjectPythonDefinition( const QString& thePyScriptPath, + MapOfTreatedObjects& theTreatedObjects, + QStringList& theScript, + const Handle(HYDROData_Entity)& theRefObject ) const; + + void setPythonObjectColor( QStringList& theScript, + const QColor& theColor, + const QColor& theDefaultColor, + const QString& theMethod ) const; protected: Handle(TDataStd_ReferenceList) getReferenceList( const int theTag, const bool theIsCreate ) const; + + void SetShape( int theTag, const TopoDS_Shape& theShape ); + TopoDS_Shape GetShape( int theTag ) const; + + void SetDouble( int theTag, double theValue ); + double GetDouble( int theTag, double theDefValue = 0.0 ) const; + int GetGeomChangeFlag() const; protected: /// Array of pointers to the properties of this object; index in this array is returned by \a AddProperty. TDF_Label myLab; ///< label of this object + Geometry myGeom; }; -///! Is Equal for HYDROData_Entity mapping -HYDRODATA_EXPORT bool IsEqual(const Handle_HYDROData_Entity& theObj1, const Handle_HYDROData_Entity& theObj2); - #endif