]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Ordering of model objects implementation.
authoradv <adv@opencascade.com>
Thu, 20 Mar 2014 11:46:51 +0000 (11:46 +0000)
committeradv <adv@opencascade.com>
Thu, 20 Mar 2014 11:46:51 +0000 (11:46 +0000)
22 files changed:
src/HYDROData/HYDROData_Channel.cxx
src/HYDROData/HYDROData_Channel.h
src/HYDROData/HYDROData_Document.cxx
src/HYDROData/HYDROData_Document.h
src/HYDROData/HYDROData_Entity.cxx
src/HYDROData/HYDROData_Entity.h
src/HYDROData/HYDROData_Image.cxx
src/HYDROData/HYDROData_Image.h
src/HYDROData/HYDROData_ImmersibleZone.cxx
src/HYDROData/HYDROData_ImmersibleZone.h
src/HYDROData/HYDROData_Obstacle.cxx
src/HYDROData/HYDROData_Obstacle.h
src/HYDROData/HYDROData_PolylineXY.cxx
src/HYDROData/HYDROData_PolylineXY.h
src/HYDROData/HYDROData_River.cxx
src/HYDROData/HYDROData_River.h
src/HYDROData/HYDROData_Stream.cxx
src/HYDROData/HYDROData_Stream.h
src/HYDROData/HYDROData_Zone.cxx
src/HYDROData/HYDROData_Zone.h
src/HYDROGUI/CMakeLists.txt
src/HYDROPy/HYDROData_Entity.sip

index bd757fbd7b4bc1ba8c1f34edcdf8344f4b641aef..1f2b6355977729c948959611a4d951ab31d74295 100644 (file)
@@ -174,6 +174,11 @@ void HYDROData_Channel::Update()
   anOutGroup->SetShapes( anOutletEdges );
 }
 
+bool HYDROData_Channel::IsHas2dPrs() const
+{
+  return true;
+}
+
 QColor HYDROData_Channel::DefaultFillingColor()
 {
   return QColor( Qt::blue );
index 72a4621e43cf7ad14bcd8f645dfa4d00489c3ed4..b3b4483ce07ec7c867987331734f1e0ac45e358b 100644 (file)
@@ -62,6 +62,11 @@ public:
    */
   HYDRODATA_EXPORT virtual void Update();
 
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Returns default filling color for new channel.
    */
index 1d51206c5a43a835bcb1c0d5de280d0c05c0dc7d..eea22c6d30248c4d0de805a4093d64225e449ac2 100644 (file)
@@ -26,6 +26,9 @@ static const int TAG_HISTORY = 3; // tag of the history sub-tree (Root for Histo
 
 using namespace std;
 
+typedef QMap<Standard_Integer,Handle_HYDROData_Entity> MapOfOrdered;
+typedef QMap<QString,Handle_HYDROData_Entity> MapOfUnordered;
+
 Handle(HYDROData_Document) HYDROData_Document::Document(const int theStudyID)
 {
   Handle(HYDROData_Document) aResult = 
@@ -306,29 +309,184 @@ bool HYDROData_Document::dumpPartitionToPython( QFile&               theFile,
   return aRes;
 }
 
+bool takeLastDigits( QString& theStr, int& aRes )
+{
+  aRes = -1;
+
+  QString anStrNum;
+  for ( int i = theStr.length() - 1; i >= 0; --i )
+  {
+    const QChar& aChar = theStr.at( i );
+    if ( !aChar.isDigit() )
+      break;
+
+    anStrNum.prepend( aChar );
+  }
+
+  if ( anStrNum.isEmpty() )
+    return false;
+
+  theStr.remove( theStr.length() - anStrNum.length(), anStrNum.length() );
+  aRes = anStrNum.toInt();
+
+  return true;
+}
+
+bool isObjectNameLessThan( const QString& theStr1, const QString& theStr2 )
+{
+  QString aStr1 = theStr1, aStr2 = theStr2;
+
+  int aNum1 = -1, aNum2 = -1;
+  if ( takeLastDigits( aStr1, aNum1 ) && takeLastDigits( aStr2, aNum2 ) )
+  {
+    if ( aStr1 == aStr2 )
+      return aNum1 < aNum2;
+  }
+
+  return theStr1 < theStr2;
+}
+
 HYDROData_SequenceOfObjects HYDROData_Document::GetObjectsLayerOrder(
   const Standard_Boolean theIsAll ) const
 {
   HYDROData_SequenceOfObjects anOrder;
 
-  // TODO
+  MapOfOrdered   aMapOfOrdered;
+  MapOfUnordered aMapOfUnordered;
+
+  HYDROData_Iterator anIter( this );
+  for ( ; anIter.More(); anIter.Next() )
+  {
+    Handle(HYDROData_Entity) anObject = anIter.Current();
+    if ( anObject.IsNull() || !anObject->IsHas2dPrs() )
+      continue;
+
+    Standard_Integer anObjZLevel = -1;
+    if ( anObject->GetZLevel( anObjZLevel ) )
+    {
+      aMapOfOrdered.insert( anObjZLevel, anObject );
+    }
+    else
+    {
+      QString anObjName = anObject->GetName();
+      if ( anObjName.isEmpty() )
+        continue;
+
+      aMapOfUnordered.insert( anObjName, anObject );
+    }
+  }
+
+  MapOfOrdered::const_iterator anOrderedMapIt = aMapOfOrdered.constBegin();
+  for ( ; anOrderedMapIt != aMapOfOrdered.constEnd(); anOrderedMapIt++ )
+  {
+    const Handle(HYDROData_Entity)& anObject = anOrderedMapIt.value();
+    anOrder.Prepend( anObject );
+  }
+
+  if ( theIsAll )
+  {
+    QStringList aSortedNames = aMapOfUnordered.keys();
+    qSort( aSortedNames.begin(), aSortedNames.end(), isObjectNameLessThan );
+
+    for ( int i = 0; i < aSortedNames.length(); ++i )
+    {
+      QString anObjName = aSortedNames.value( i );
+
+      const Handle(HYDROData_Entity)& anObject = aMapOfUnordered.value( anObjName );
+      anOrder.Append( anObject );
+    }
+  }
 
   return anOrder;
 }
 
 void HYDROData_Document::SetObjectsLayerOrder( const HYDROData_SequenceOfObjects& theOrder )
 {
-  // TODO
+  // At first we remove previous model order
+  RemoveObjectsLayerOrder();
+
+  // Make new objects order
+  Standard_Integer aLevel = 0;
+  for ( int i = theOrder.Length(), n = 1; i >= n; --i )
+  {
+    const Handle(HYDROData_Entity)& anObject = theOrder.Value( i );
+    if ( anObject.IsNull() || !anObject->IsHas2dPrs() )
+      continue;
+
+    anObject->SetZLevel( aLevel++ );
+  }
 }
 
 void HYDROData_Document::Show( const Handle_HYDROData_Entity& theObject )
 {
-  // TODO
+  HYDROData_SequenceOfObjects anOrder;
+  anOrder.Append( theObject );
+  Show( anOrder );
 }
 
 void HYDROData_Document::Show( const HYDROData_SequenceOfObjects& theObjects )
 {
-  // TODO
+  MapOfUnordered aMapOfUnordered;
+
+  for ( int i = 1, n = theObjects.Length(); i <= n; ++i )
+  {
+    const Handle(HYDROData_Entity)& anObject = theObjects.Value( i );
+    if ( anObject.IsNull() || !anObject->IsHas2dPrs() )
+      continue;
+
+    Standard_Integer anObjZLevel = -1;
+    if ( anObject->GetZLevel( anObjZLevel ) )
+    {
+      continue; // Skip objects that already have the z-level
+    }
+    else
+    {
+      QString anObjName = anObject->GetName();
+      if ( anObjName.isEmpty() )
+        continue;
+
+      aMapOfUnordered.insert( anObjName, anObject );
+    }
+  }
+
+  if ( aMapOfUnordered.isEmpty() )
+    return; // Nothing to show
+
+  Standard_Integer aTopId = 0;
+
+  HYDROData_SequenceOfObjects aModelOrder = GetObjectsLayerOrder( Standard_False );
+  if ( !aModelOrder.IsEmpty() )
+  {
+    const Handle(HYDROData_Entity)& anObject = aModelOrder.First();
+    anObject->GetZLevel( aTopId );
+    aTopId++;
+  }
+
+  aTopId += aMapOfUnordered.size() - 1;
+
+  QStringList aSortedNames = aMapOfUnordered.keys();
+  qSort( aSortedNames.begin(), aSortedNames.end(), isObjectNameLessThan );
+
+  for ( int i = 0; i < aSortedNames.length(); ++i )
+  {
+    QString anObjName = aSortedNames.value( i );
+
+    const Handle(HYDROData_Entity)& anObject = aMapOfUnordered.value( anObjName );
+    anObject->SetZLevel( aTopId-- );
+  }
+}
+
+void HYDROData_Document::RemoveObjectsLayerOrder()
+{
+  HYDROData_Iterator anIter( this );
+  for ( ; anIter.More(); anIter.Next() )
+  {
+    Handle(HYDROData_Entity) anObject = anIter.Current();
+    if ( anObject.IsNull() || !anObject->IsHas2dPrs() )
+      continue;
+
+    anObject->RemoveZLevel();
+  }
 }
 
 void HYDROData_Document::StartOperation()
index 2709b5b52a15a48afa0e55b39474071475f04060..ffdaf981451ad7b33a5fd50d030a3f3c1a8e2346 100644 (file)
@@ -120,6 +120,9 @@ public:
   //! The objects from the sequence will be sorted alphabetically at first.
   HYDRODATA_EXPORT void Show( const HYDROData_SequenceOfObjects& theObjects );
 
+  //! Removes the order of objects presentation.
+  HYDRODATA_EXPORT void RemoveObjectsLayerOrder();
+
 
 public:
 
index bacca5112724ed8e34d7e4bb59ea6c28172defa0..4c1ed735f799d96d7bd44f9056b8f72733311ff0 100644 (file)
@@ -9,6 +9,7 @@
 #include <TDataStd_UAttribute.hxx>
 #include <TDataStd_IntegerArray.hxx>
 #include <TDataStd_BooleanArray.hxx>
+#include <TDataStd_Integer.hxx>
 #include <TDataStd_RealArray.hxx>
 #include <TDataStd_ReferenceList.hxx>
 
@@ -59,33 +60,21 @@ QStringList HYDROData_Entity::DumpToPython( MapOfTreatedObjects& theTreatedObjec
   return anEmptyList;
 }
 
-QStringList HYDROData_Entity::dumpObjectCreation( MapOfTreatedObjects& theTreatedObjects ) const
+void HYDROData_Entity::Update()
 {
-  QStringList aResList;
-
-  Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
-  if ( aDocument.IsNull() )
-    return aResList;
-
-  QString aDocName = aDocument->GetDocPyName();
-  QString aName = GetObjPyName();
-
-  aResList << QString( "%1 = %2.CreateObject( %3 );" )
-              .arg( aName ).arg( aDocName ).arg( getPyTypeID() );
-  aResList << QString( "%1.SetName( \"%2\" );" )
-              .arg( aName ).arg( GetName() );
-  aResList << QString( "" );
-
-  return aResList;
+  SetToUpdate( false );
 }
 
-void HYDROData_Entity::Update()
+bool HYDROData_Entity::IsHas2dPrs() const
 {
-  SetToUpdate( false );
+  return false;
 }
 
 void HYDROData_Entity::Show()
 {
+  if ( !IsHas2dPrs() )
+    return;
+
   Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
   if ( aDocument.IsNull() )
     return;
@@ -93,39 +82,6 @@ void HYDROData_Entity::Show()
   aDocument->Show( this );
 }
 
-QString HYDROData_Entity::getPyTypeID() const
-{
-  switch( GetKind() )
-  {
-    case KIND_IMAGE:             return "KIND_IMAGE";
-    case KIND_POLYLINE:          return "KIND_POLYLINE";
-    case KIND_BATHYMETRY:        return "KIND_BATHYMETRY";
-    case KIND_ALTITUDE:          return "KIND_ALTITUDE";
-    case KIND_IMMERSIBLE_ZONE:   return "KIND_IMMERSIBLE_ZONE";
-    case KIND_RIVER:             return "KIND_RIVER";
-    case KIND_STREAM:            return "KIND_STREAM";
-    case KIND_CONFLUENCE:        return "KIND_CONFLUENCE";
-    case KIND_CHANNEL:           return "KIND_CHANNEL";
-    case KIND_OBSTACLE:          return "KIND_OBSTACLE";
-    case KIND_DIGUE:             return "KIND_DIGUE";
-    case KIND_PROFILE:           return "KIND_PROFILE";
-    case KIND_PROFILEUZ:         return "KIND_PROFILEUZ";
-    case KIND_POLYLINEXY:        return "KIND_POLYLINEXY";
-    case KIND_CALCULATION:       return "KIND_CALCULATION";
-    case KIND_ZONE:              return "KIND_ZONE";
-    case KIND_REGION:            return "KIND_REGION";
-    case KIND_VISUAL_STATE:      return "KIND_VISUAL_STATE";
-    case KIND_ARTIFICIAL_OBJECT: return "KIND_ARTIFICIAL_OBJECT";
-    case KIND_NATURAL_OBJECT:    return "KIND_NATURAL_OBJECT";
-    case KIND_DUMMY_3D:          return "KIND_DUMMY_3D";
-    case KIND_SHAPES_GROUP:      return "KIND_SHAPES_GROUP";
-    case KIND_SPLITTED_GROUP:    return "KIND_SPLITTED_GROUP";
-    case KIND_STREAM_ALTITUDE:   return "KIND_STREAM_ALTITUDE";
-    case KIND_OBSTACLE_ALTITUDE: return "KIND_OBSTACLE_ALTITUDE";
-    default:                     return "KIND_UNKNOWN"; ///! Unrecognized object
-  }
-}
-
 QVariant HYDROData_Entity::GetDataVariant()
 {
   return QVariant();
@@ -215,13 +171,44 @@ HYDROData_SequenceOfObjects HYDROData_Entity::GetAllReferenceObjects() const
   return HYDROData_SequenceOfObjects();
 }
 
-void HYDROData_Entity::SetLabel(TDF_Label theLabel)
+Standard_Boolean HYDROData_Entity::GetZLevel( Standard_Integer& theLevel ) const
+{
+  theLevel = -1;
+
+  TDF_Label aLabel = myLab.FindChild( DataTag_ZLevel, false );
+  if ( !aLabel.IsNull() )
+  {
+    Handle(TDataStd_Integer) anIntVal;
+    if ( aLabel.FindAttribute( TDataStd_Integer::GetID(), anIntVal ) )
+    {
+      theLevel = anIntVal->Get();
+      return Standard_True;
+    }
+  }
+
+  return Standard_False;
+}
+
+void HYDROData_Entity::SetZLevel( const Standard_Integer& theLevel )
+{
+  TDataStd_Integer::Set( myLab.FindChild( DataTag_ZLevel ), theLevel );
+}
+
+void HYDROData_Entity::RemoveZLevel()
+{
+  TDF_Label aLabel = myLab.FindChild( DataTag_ZLevel, false );
+  if ( !aLabel.IsNull() )
+    aLabel.ForgetAllAttributes();
+}
+
+void HYDROData_Entity::SetLabel( const TDF_Label& theLabel )
 {
   myLab = theLabel;
 }
 
-void HYDROData_Entity::SaveByteArray(const int theTag, 
-  const char* theData, const int theLen)
+void HYDROData_Entity::SaveByteArray( const int   theTag, 
+                                      const char* theData,
+                                      const int   theLen )
 {
   TDF_Label aLab = theTag == 0 ? myLab : myLab.FindChild(theTag);
   // array is empty, remove the attribute
@@ -503,6 +490,71 @@ QColor HYDROData_Entity::GetColor( const QColor& theDefColor,
   return aResColor;
 }
 
+QStringList HYDROData_Entity::dumpObjectCreation( MapOfTreatedObjects& theTreatedObjects ) const
+{
+  QStringList aResList;
+
+  Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
+  if ( aDocument.IsNull() )
+    return aResList;
+
+  QString aDocName = aDocument->GetDocPyName();
+  QString aName = GetObjPyName();
+
+  aResList << QString( "%1 = %2.CreateObject( %3 );" )
+              .arg( aName ).arg( aDocName ).arg( getPyTypeID() );
+  aResList << QString( "%1.SetName( \"%2\" );" )
+              .arg( aName ).arg( GetName() );
+  aResList << QString( "" );
+
+  if ( IsHas2dPrs() )
+  {
+    // Dump object z-level in viewer
+    Standard_Integer anObjZLevel = -1;
+    if ( GetZLevel( anObjZLevel ) )
+    {
+      aResList << QString( "%1.SetZLevel( %2 );" )
+                  .arg( aName ).arg( anObjZLevel );
+      aResList << QString( "" );
+    }
+  }
+
+  return aResList;
+}
+
+QString HYDROData_Entity::getPyTypeID() const
+{
+  switch( GetKind() )
+  {
+    case KIND_IMAGE:             return "KIND_IMAGE";
+    case KIND_POLYLINE:          return "KIND_POLYLINE";
+    case KIND_BATHYMETRY:        return "KIND_BATHYMETRY";
+    case KIND_ALTITUDE:          return "KIND_ALTITUDE";
+    case KIND_IMMERSIBLE_ZONE:   return "KIND_IMMERSIBLE_ZONE";
+    case KIND_RIVER:             return "KIND_RIVER";
+    case KIND_STREAM:            return "KIND_STREAM";
+    case KIND_CONFLUENCE:        return "KIND_CONFLUENCE";
+    case KIND_CHANNEL:           return "KIND_CHANNEL";
+    case KIND_OBSTACLE:          return "KIND_OBSTACLE";
+    case KIND_DIGUE:             return "KIND_DIGUE";
+    case KIND_PROFILE:           return "KIND_PROFILE";
+    case KIND_PROFILEUZ:         return "KIND_PROFILEUZ";
+    case KIND_POLYLINEXY:        return "KIND_POLYLINEXY";
+    case KIND_CALCULATION:       return "KIND_CALCULATION";
+    case KIND_ZONE:              return "KIND_ZONE";
+    case KIND_REGION:            return "KIND_REGION";
+    case KIND_VISUAL_STATE:      return "KIND_VISUAL_STATE";
+    case KIND_ARTIFICIAL_OBJECT: return "KIND_ARTIFICIAL_OBJECT";
+    case KIND_NATURAL_OBJECT:    return "KIND_NATURAL_OBJECT";
+    case KIND_DUMMY_3D:          return "KIND_DUMMY_3D";
+    case KIND_SHAPES_GROUP:      return "KIND_SHAPES_GROUP";
+    case KIND_SPLITTED_GROUP:    return "KIND_SPLITTED_GROUP";
+    case KIND_STREAM_ALTITUDE:   return "KIND_STREAM_ALTITUDE";
+    case KIND_OBSTACLE_ALTITUDE: return "KIND_OBSTACLE_ALTITUDE";
+    default:                     return "KIND_UNKNOWN"; ///! Unrecognized object
+  }
+}
+
 void HYDROData_Entity::setPythonReferenceObject( MapOfTreatedObjects&            theTreatedObjects,
                                                  QStringList&                    theScript,
                                                  const Handle(HYDROData_Entity)& theRefObject,
index aef06bf93831b3fe72a0761ae6da3b1c9268779f..b46a6e43d0bf9a25dda95c4e43c4317a4c3f062b 100644 (file)
@@ -54,6 +54,8 @@ typedef QMap<QString,Handle(Standard_Transient)> MapOfTreatedObjects;
 
 typedef NCollection_Sequence<Handle_HYDROData_Entity> HYDROData_SequenceOfObjects;
 
+///! 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.
@@ -72,8 +74,8 @@ protected:
    */
   enum DataTag
   {
-    DataTag_First = 0     ///< first tag, to reserve
-    // ...
+    DataTag_First  = 0,     ///< first tag, to reserve
+    DataTag_ZLevel,         ///< z-level of object presentation
   };
 
 public:
@@ -112,11 +114,18 @@ public:
    */
   HYDRODATA_EXPORT virtual void Update();
 
+
+  /**
+   * 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.
    * Base implementation returns null value.
@@ -188,6 +197,22 @@ public:
   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();
+
+
 protected:
 
   friend class HYDROData_Iterator;
@@ -207,7 +232,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
@@ -333,6 +358,18 @@ protected:
  
 protected:
 
+  /**
+   * Dump the initial object creation to a Python script.
+   * You should call it from DumpToPython implementation before 
+   * dumping fields of the object.
+   */
+  HYDRODATA_EXPORT virtual QStringList dumpObjectCreation( MapOfTreatedObjects& theTreatedObjects ) const;
+
+  /**
+   * Returns an object type name as a string for dumping to Python.
+   */
+  QString getPyTypeID() const;
+
   void setPythonReferenceObject( MapOfTreatedObjects&            theTreatedObjects,
                                  QStringList&                    theScript,
                                  const Handle(HYDROData_Entity)& theRefObject,
@@ -347,18 +384,6 @@ protected:
                              const QColor&        theDefaultColor,
                              const QString&       theMethod ) const;
 
-  /**
-   * Dump the initial object creation to a Python script.
-   * You should call it from DumpToPython implementation before 
-   * dumping fields of the object.
-   */
-  HYDRODATA_EXPORT virtual QStringList dumpObjectCreation( MapOfTreatedObjects& theTreatedObjects ) const;
-
-  /**
-   * Returns an object type name as a string for dumping to Python.
-   */
-  QString getPyTypeID() const;
-
 protected:
 
   Handle(TDataStd_ReferenceList) getReferenceList( const int  theTag,
@@ -370,7 +395,4 @@ protected:
   TDF_Label myLab; ///< label of this object
 };
 
-///! Is Equal for HYDROData_Entity mapping
-HYDRODATA_EXPORT bool IsEqual(const Handle_HYDROData_Entity& theObj1, const Handle_HYDROData_Entity& theObj2);
-
 #endif
index 09ce073a6d648bb49f9bace91d4637ff444f67de..ea1fed9cac64ed1f1c764bd8569ed1ccfdffdf6b 100644 (file)
@@ -212,6 +212,11 @@ void HYDROData_Image::Update()
   SetToUpdate( false );
 }
 
+bool HYDROData_Image::IsHas2dPrs() const
+{
+  return true;
+}
+
 QVariant HYDROData_Image::GetDataVariant()
 {
   QTransform aTransform = Trsf();
index d7eccacce799fa989df979b2cb95a38ee241fa05..7860f41bfbad391ad6269c582e6f073ea8645c8c 100644 (file)
@@ -63,6 +63,11 @@ public:
    */
   HYDRODATA_EXPORT virtual void Update();
 
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Returns data of object wrapped to QVariant.
    * Reimplemented to wrap and return saved image.
index 8c40d46789339fcb5e8776b54a72a4b84905d8d1..800d27536607133cd1effa4c09bee36ba1383533 100644 (file)
@@ -86,6 +86,11 @@ void HYDROData_ImmersibleZone::Update()
   createGroupObjects();
 }
 
+bool HYDROData_ImmersibleZone::IsHas2dPrs() const
+{
+  return true;
+}
+
 TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape() const
 {
   return generateTopShape( GetPolyline() );
index 7a97a11d52b0456d86efa06967f89852dbbd4c01..9e0b929db973e7ee00af9b12098851049200e4d4 100644 (file)
@@ -48,6 +48,11 @@ public:
    */
   HYDRODATA_EXPORT virtual void Update();
 
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Returns the top shape of the object.
    */
index 5a108d6ed36a968f714cbce20954af2ecf0390ba..4dfae8672fad9e58e82e208ab9255230e52479db 100644 (file)
@@ -107,6 +107,11 @@ void HYDROData_Obstacle::Update()
   HYDROData_Entity::Update();
 }
 
+bool HYDROData_Obstacle::IsHas2dPrs() const
+{
+  return true;
+}
+
 TopoDS_Shape HYDROData_Obstacle::GetTopShape() const
 {
   return getTopShape();
index ccf1599d2605d1c8dd912b882462efe052bc313a..a0ba13ad53b4bd48656eb1cf95c986a29e76236b 100644 (file)
@@ -43,6 +43,11 @@ public:
    */
   HYDRODATA_EXPORT virtual void Update();
 
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Returns the top shape of the object.
    */
index e66438086ea59139e31e280ec67d9806f7331639..be2495cd0f11872616ac56feb545e7cb1c64145b 100755 (executable)
@@ -538,6 +538,11 @@ void HYDROData_PolylineXY::Update()
   setPolylineShape( aResult );
 }
 
+bool HYDROData_PolylineXY::IsHas2dPrs() const
+{
+  return true;
+}
+
 bool HYDROData_PolylineXY::IsEditable() const
 {
   return !myLab.IsAttribute( GUID_IS_UNEDITABLE );
index ccbdaba650e909267304d8482715a3985496b4b0..86ae8e54d2e3f836a68cf26c1d4523e0c9da5308 100644 (file)
@@ -40,6 +40,17 @@ public:
    */
   HYDRODATA_EXPORT virtual QStringList DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const;
 
+  /**
+   * Update the wire contour on the basis of the polyline data.
+   * Call this method whenever you made changes for polyline data.
+   */
+  HYDRODATA_EXPORT virtual void Update();
+
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Returns data of object wrapped to QVariant.
    * Reimplemented to wrap and return saved path.
@@ -100,12 +111,6 @@ public:
    */
   HYDRODATA_EXPORT virtual bool ImportShape( const TopoDS_Shape& theShape );
 
-  /**
-   * Update the wire contour on the basis of the polyline data.
-   * Call this method whenever you made changes for polyline data.
-   */
-  HYDRODATA_EXPORT virtual void Update();
-
 
   /**
    * Returns flag indicating that polyline can be edited or not.
index bd22befb4a40028ef89a9136d2a0afef15d1818c..012167d29c96f2a0a31a8fa83852c6f48cfe3217 100644 (file)
@@ -34,6 +34,17 @@ QStringList HYDROData_River::DumpToPython( MapOfTreatedObjects& theTreatedObject
   return aResList;
 }
 
+void HYDROData_River::Update()
+{
+  // TODO
+  HYDROData_NaturalObject::Update();
+}
+
+bool HYDROData_River::IsHas2dPrs() const
+{
+  return true;
+}
+
 TopoDS_Shape HYDROData_River::GetTopShape() const
 {
   // TODO
index 8d5df364e8411d030d92dea2464074824abeb53a..9503d5b06b6ee163602d166d3026e3c91c6b42c5 100644 (file)
@@ -34,6 +34,17 @@ public:
    */
   HYDRODATA_EXPORT virtual QStringList DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const;
 
+  /**
+   * Update the immersible zone object.
+   * Call this method whenever you made changes for object data.
+   */
+  HYDRODATA_EXPORT virtual void Update();
+
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Returns the top shape of the object.
    */
index df6ad67b532cbdb31289a6330ec2929853b49af7..3b67a6b529d6a79889826054fd1ecd5847fbbe0f 100644 (file)
@@ -146,6 +146,11 @@ void HYDROData_Stream::Update()
   UpdatePrs();
 }
 
+bool HYDROData_Stream::IsHas2dPrs() const
+{
+  return true;
+}
+
 void HYDROData_Stream::UpdatePrs()
 {
   HYDROData_NaturalObject::Update();
index b1ee6f48ae1a929fa36ae1612d936a30c5c2921d..2b47bd7879e07a9081eb231d3bf472868368b168 100644 (file)
@@ -63,6 +63,11 @@ public:
    */
   HYDRODATA_EXPORT virtual void Update();
 
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
   /**
    * Update the shape presentations of stream.
    */
index adde27bf6455f1b278b18a216c87662acced58a9..2df7c740f396f90872503c1d23684646412405de 100644 (file)
@@ -34,6 +34,11 @@ bool HYDROData_Zone::CanBeUpdated() const
   return false;
 }
 
+bool HYDROData_Zone::IsHas2dPrs() const
+{
+  return true;
+}
+
 bool HYDROData_Zone::CanRemove()
 {
   return false;
index 30e86cc01c3d7aba3e96b6ff467e144c260d94f7..f1e3ba962985935e28fbb302ff44e67bca2965d3 100644 (file)
@@ -57,6 +57,12 @@ public:
   HYDRODATA_EXPORT virtual bool CanBeUpdated() const;
 
 
+  /**
+   * Checks that object has 2D presentation. Reimlemented to retun true.
+   */
+  HYDRODATA_EXPORT virtual bool IsHas2dPrs() const;
+
+
   /**
    * Returns flag indicating that object can be removed or not.
    */
index 5a0472cdfcb404bc19236c8c3d3a8f7ff574a347..95a1d878c6b73b328a3658807493ace6fcdc9583 100644 (file)
@@ -88,6 +88,7 @@ set(PROJECT_HEADERS
     HYDROGUI_TranslateObstacleOp.h
     HYDROGUI_ZLevelsModel.h
     HYDROGUI_ZLevelsDlg.h
+    HYDROGUI_ZLevelsOp.h
 )
 
 QT4_WRAP_CPP(PROJECT_HEADERS_MOC ${PROJECT_HEADERS})
@@ -177,6 +178,7 @@ set(PROJECT_SOURCES
     HYDROGUI_TranslateObstacleOp.cxx
     HYDROGUI_ZLevelsModel.cxx
     HYDROGUI_ZLevelsDlg.cxx
+    HYDROGUI_ZLevelsOp.cxx
 )
 
 add_definitions(
index 6208ab9fe1027a0c49360683ef53e4b8ce2007a0..6492535a1e908a3b7a96622235271afbf6171436 100644 (file)
@@ -174,6 +174,11 @@ public:
    */
   virtual void Update();
 
+  /**
+   * Checks that object has 2D presentation. Base implementation returns false.
+   */
+  virtual bool IsHas2dPrs() const;
+
   /**
    * Returns data of object wrapped to QVariant.
    * Base implementation returns null value.
@@ -250,6 +255,23 @@ public:
    */
   virtual HYDROData_SequenceOfObjects GetAllReferenceObjects() const;
 
+
+  /**
+   * Returns the z-level for object presentation, -1 if no z-level.
+   */
+  virtual bool GetZLevel( int& theLevel ) const [Standard_Boolean ( Standard_Integer& )];
+
+  /**
+   * Set the z-level for object presentation.
+   */
+  virtual void SetZLevel( const int& theLevel ) [void ( const Standard_Integer& )];
+
+  /**
+   * Remove the z-level of object presentation.
+   */
+  virtual void RemoveZLevel();
+
+
 protected:
 
   /**