]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Import of geom curve.
authoradv <adv@opencascade.com>
Mon, 20 Jan 2014 06:57:43 +0000 (06:57 +0000)
committeradv <adv@opencascade.com>
Mon, 20 Jan 2014 06:57:43 +0000 (06:57 +0000)
src/HYDROData/HYDROData_Obstacle.cxx
src/HYDROData/HYDROData_Obstacle.h
src/HYDROData/HYDROData_PolylineXY.cxx
src/HYDROData/HYDROData_PolylineXY.h
src/HYDROGUI/HYDROGUI_ImportGeomObjectOp.cxx
src/HYDROPy/HYDROData_Obstacle.sip
src/HYDROPy/HYDROData_PolylineXY.sip

index 6a4cb6357e132c7ac79a5a61736174daeaa2b7fb..560d91e154eaebacd8f93509328c9c1cf8080521 100644 (file)
@@ -59,17 +59,20 @@ QStringList HYDROData_Obstacle::DumpToPython( MapOfTreatedObjects& theTreatedObj
   
   QString anObstacleName = GetObjPyName();
 
-  QString aGeomObjectEntry = GetGeomObjectEntry();
+  TCollection_AsciiString aGeomObjectEntry = GetGeomObjectEntry();
   QString aFilePath = GetFilePath();
 
-  if ( !aGeomObjectEntry.isEmpty() )
+  if ( !aGeomObjectEntry.IsEmpty() )
   {
     QString aSalomeObjName = HYDROData_Tool::GenerateNameForPython( theTreatedObjects, "obstacle_sobj" );
-    aResList << QString( "%1 = salome.sg.IDToObject( \"%2\" );" )
-                .arg( aSalomeObjName ).arg( aGeomObjectEntry );
+    aResList << QString( "%1 = salome.myStudy.FindObjectID( \"%2\" );" )
+                .arg( aSalomeObjName ).arg( aGeomObjectEntry.ToCString() );
 
     aResList << QString( "%1.ImportFromGeomIOR( %2.GetIOR() );" )
                 .arg( anObstacleName ).arg( aSalomeObjName );
+
+    aResList << QString( "%1.SetGeomObjectEntry( \"%2\" );" )
+                .arg( anObstacleName ).arg( aGeomObjectEntry.ToCString() );
   }
   else if ( !aFilePath.isEmpty() )
   {
@@ -154,18 +157,6 @@ bool HYDROData_Obstacle::ImportFromFile( const QString& theFilePath )
   return aRes;
 }
 
-bool HYDROData_Obstacle::ImportFromGeomIOR( const QString& theIOR )
-{
-  TopoDS_Shape aShape = GEOMBase::GetShapeFromIOR( theIOR );
-  if ( aShape.IsNull() )
-    return false;
-
-  SetShape3D( aShape );
-  SetGeomObjectEntry( theIOR );
-  
-  return true;
-}
-
 void HYDROData_Obstacle::SetFilePath( const QString& theFilePath )
 {
   TCollection_AsciiString anAsciiStr( theFilePath.toStdString().c_str() );
@@ -187,22 +178,35 @@ QString HYDROData_Obstacle::GetFilePath() const
   return aRes;
 }
 
-void HYDROData_Obstacle::SetGeomObjectEntry( const QString& theEntry )
+bool HYDROData_Obstacle::ImportFromGeomIOR( const TCollection_AsciiString& theIOR )
 {
-  TCollection_AsciiString anAsciiStr( theEntry.toStdString().c_str() );
-  TDataStd_AsciiString::Set( myLab.FindChild( DataTag_GeomObjectEntry ), anAsciiStr );
+  if ( theIOR.IsEmpty() )
+    return false;
+
+  TopoDS_Shape aShape = GEOMBase::GetShapeFromIOR( theIOR.ToCString() );
+  if ( aShape.IsNull() )
+    return false;
+
+  SetShape3D( aShape );
+  
+  return true;
 }
 
-QString HYDROData_Obstacle::GetGeomObjectEntry() const
+void HYDROData_Obstacle::SetGeomObjectEntry( const TCollection_AsciiString& theEntry )
 {
-  QString aRes;
+  TDataStd_AsciiString::Set( myLab.FindChild( DataTag_GeomObjectEntry ), theEntry );
+}
+
+TCollection_AsciiString HYDROData_Obstacle::GetGeomObjectEntry() const
+{
+  TCollection_AsciiString aRes;
 
   TDF_Label aLabel = myLab.FindChild( DataTag_GeomObjectEntry, false );
   if ( !aLabel.IsNull() )
   {
     Handle(TDataStd_AsciiString) anAsciiStr;
     if ( aLabel.FindAttribute( TDataStd_AsciiString::GetID(), anAsciiStr ) )
-      aRes = QString( anAsciiStr->Get().ToCString() );
+      aRes = anAsciiStr->Get();
   }
 
   return aRes;
index 194dae8bc9d000bdebc80ef115d73b2570958d88..2e38854bed6dd5af379b38b7b09ec3d2a4381576 100644 (file)
@@ -83,13 +83,6 @@ public:
    */
   HYDRODATA_EXPORT virtual bool ImportFromFile( const QString& theFilePath );
 
-  /**
-   * Imports shape from IOR.
-   * \param theIOR the IOR of Geom object
-   * \return \c true if shape has been successfully imported
-   */
-  HYDRODATA_EXPORT virtual bool ImportFromGeomIOR( const QString& theIOR );
-
   /**
    * Stores the file path of the imported file.
    * \param theFilePath file path
@@ -101,16 +94,24 @@ public:
    */
   HYDRODATA_EXPORT QString GetFilePath() const;
 
-   /**
+  
+  /**
+   * Imports shape from IOR.
+   * \param theIOR the IOR of Geom object
+   * \return \c true if shape has been successfully imported
+   */
+  HYDRODATA_EXPORT virtual bool ImportFromGeomIOR( const TCollection_AsciiString& theIOR );
+
+  /**
    * Stores the study entry of the imported GEOM object.
    * \param theEntry GEOM object entry
    */
-  HYDRODATA_EXPORT void SetGeomObjectEntry( const QString& theEntry );
+  HYDRODATA_EXPORT void SetGeomObjectEntry( const TCollection_AsciiString& theEntry );
 
   /**
    * Returns the imported GEOM object entry.
    */
-  HYDRODATA_EXPORT QString GetGeomObjectEntry() const;
+  HYDRODATA_EXPORT TCollection_AsciiString GetGeomObjectEntry() const;
 
 protected:
 
index cdbc3752ed80be47369e61c458b30f9c741dcac5..d40212e22a6018b713445af69ae6d516bb7512c7 100755 (executable)
@@ -13,6 +13,8 @@
 #include <BRepBuilderAPI_MakeFace.hxx>
 #include <BRepOffsetAPI_NormalProjection.hxx>
 
+#include <GEOMBase.h>
+
 #include <GeomAPI_ProjectPointOnCurve.hxx>
 #include <GeomAdaptor_Curve.hxx>
 #include <Geom_Line.hxx>
@@ -36,6 +38,7 @@
 
 #include <TColStd_Array1OfReal.hxx>
 
+#include <TDataStd_AsciiString.hxx>
 #include <TDataStd_BooleanList.hxx>
 #include <TDataStd_ExtStringList.hxx>
 #include <TDataStd_IntegerList.hxx>
@@ -121,31 +124,51 @@ QStringList HYDROData_PolylineXY::DumpToPython( MapOfTreatedObjects& theTreatedO
     aResList << QString( "" );
   }
 
-  // Set polilyne data
-  NCollection_Sequence<TCollection_AsciiString>           aSectNames;
-  NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
-  NCollection_Sequence<bool>                              aSectClosures;
-  GetSections( aSectNames, aSectTypes, aSectClosures );
-
-  for ( int i = 1, n = aSectNames.Size(); i <= n; ++i )
+  bool anIsEditable = IsEditable();
+  if ( !anIsEditable )
   {
-    const TCollection_AsciiString& aSectName = aSectNames.Value( i );
-    const SectionType& aSectType = aSectTypes.Value( i );
-    bool aSectClosure = aSectClosures.Value( i );
+    // If polyline is not editable we try to import the shape from geom
+    TCollection_AsciiString aGeomObjectEntry = GetGeomObjectEntry();
+    if ( !aGeomObjectEntry.IsEmpty() )
+    {
+      QString aSalomeObjName = HYDROData_Tool::GenerateNameForPython( theTreatedObjects, "polyline_sobj" );
+      aResList << QString( "%1 = salome.myStudy.FindObjectID( \"%2\" );" )
+                  .arg( aSalomeObjName ).arg( aGeomObjectEntry.ToCString() );
 
-    aResList << QString( "%1.AddSection( \"%2\", %3, %4 );" ).arg( aPolylineName )
-                .arg( aSectName.ToCString() ).arg( aSectType ).arg( aSectClosure );
+      aResList << QString( "%1.ImportFromGeomIOR( %2.GetIOR() );" )
+                  .arg( aPolylineName ).arg( aSalomeObjName );
 
-    HYDROData_IPolyline::PointsList aSectPointsList = GetPoints( i - 1 );
-    for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k )
+      aResList << QString( "%1.SetGeomObjectEntry( \"%2\" );" )
+                  .arg( aPolylineName ).arg( aGeomObjectEntry.ToCString() );
+    }
+  }
+  else
+  {
+    // Set polilyne data
+    NCollection_Sequence<TCollection_AsciiString>           aSectNames;
+    NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
+    NCollection_Sequence<bool>                              aSectClosures;
+    GetSections( aSectNames, aSectTypes, aSectClosures );
+
+    for ( int i = 1, n = aSectNames.Size(); i <= n; ++i )
     {
-      const Point& aSectPoint = aSectPointsList.Value( k );
+      const TCollection_AsciiString& aSectName = aSectNames.Value( i );
+      const SectionType& aSectType = aSectTypes.Value( i );
+      bool aSectClosure = aSectClosures.Value( i );
+
+      aResList << QString( "%1.AddSection( \"%2\", %3, %4 );" ).arg( aPolylineName )
+                  .arg( aSectName.ToCString() ).arg( aSectType ).arg( aSectClosure );
 
-      aResList << QString( "%1.AddPoint( %2, gp_XY( %3, %4 ) );" ).arg( aPolylineName )
-        .arg( i - 1 ).arg( aSectPoint.X() ).arg( aSectPoint.Y() );
+      HYDROData_IPolyline::PointsList aSectPointsList = GetPoints( i - 1 );
+      for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k )
+      {
+        const Point& aSectPoint = aSectPointsList.Value( k );
+
+        aResList << QString( "%1.AddPoint( %2, gp_XY( %3, %4 ) );" ).arg( aPolylineName )
+          .arg( i - 1 ).arg( aSectPoint.X() ).arg( aSectPoint.Y() );
+      }
     }
   }
-
   aResList << QString( "" );
   aResList << QString( "%1.Update();" ).arg( aPolylineName );
   aResList << QString( "" );
@@ -168,6 +191,38 @@ QColor HYDROData_PolylineXY::DefaultWireColor()
   return QColor( Qt::red );
 }
 
+bool HYDROData_PolylineXY::ImportFromGeomIOR( const TCollection_AsciiString& theIOR )
+{
+  if ( theIOR.IsEmpty() )
+    return false;
+
+  TopoDS_Shape aShape = GEOMBase::GetShapeFromIOR( theIOR.ToCString() );
+  if ( aShape.IsNull() )
+    return false;
+
+  return ImportShape( aShape );
+}
+
+void HYDROData_PolylineXY::SetGeomObjectEntry( const TCollection_AsciiString& theEntry )
+{
+  TDataStd_AsciiString::Set( myLab.FindChild( DataTag_GeomObjectEntry ), theEntry );
+}
+
+TCollection_AsciiString HYDROData_PolylineXY::GetGeomObjectEntry() const
+{
+  TCollection_AsciiString aRes;
+
+  TDF_Label aLabel = myLab.FindChild( DataTag_GeomObjectEntry, false );
+  if ( !aLabel.IsNull() )
+  {
+    Handle(TDataStd_AsciiString) anAsciiStr;
+    if ( aLabel.FindAttribute( TDataStd_AsciiString::GetID(), anAsciiStr ) )
+      aRes = anAsciiStr->Get();
+  }
+
+  return aRes;
+}
+
 TopoDS_Shape HYDROData_PolylineXY::GetShape() const
 {
   return getPolylineShape();
index 32732b08c1a61a7b48fbdc75e2552c0b33235edc..ccbdaba650e909267304d8482715a3985496b4b0 100644 (file)
@@ -23,6 +23,7 @@ protected:
   enum DataTag
   {
     DataTag_First = HYDROData_IPolyline::DataTag_First + 100, ///< first tag, to reserve
+    DataTag_GeomObjectEntry,  ///< study entry of the imported GEOM object
   };
 
 public:
@@ -67,6 +68,26 @@ public:
                                                  const bool&                         theIsClosed,
                                                  const NCollection_Sequence<gp_XYZ>& thePoints );
 
+public:
+
+  /**
+   * Imports shape from IOR.
+   * \param theIOR the IOR of Geom object
+   * \return \c true if shape has been successfully imported
+   */
+  HYDRODATA_EXPORT virtual bool ImportFromGeomIOR( const TCollection_AsciiString& theIOR );
+
+  /**
+   * Stores the study entry of the imported GEOM object.
+   * \param theEntry GEOM object entry
+   */
+  HYDRODATA_EXPORT void SetGeomObjectEntry( const TCollection_AsciiString& theEntry );
+
+  /**
+   * Returns the imported GEOM object entry.
+   */
+  HYDRODATA_EXPORT TCollection_AsciiString GetGeomObjectEntry() const;
+
 public:
 
   /**
index 60b0384b00a233f824e00ef3eeebc3781e3cf04d..c27ebb937eb45f4e2d150c4758593c30d0a06b37 100644 (file)
@@ -215,11 +215,12 @@ bool HYDROGUI_ImportGeomObjectOp::processApply( int& theUpdateFlags,
           Handle(HYDROData_Obstacle) anObstacle = Handle(HYDROData_Obstacle)::DownCast( anObject );
           anObstacle->SetFillingColor( HYDROData_Obstacle::DefaultFillingColor() );
           anObstacle->SetBorderColor( HYDROData_Obstacle::DefaultBorderColor() );
-          anObstacle->SetGeomObjectEntry( anEntry );
+          anObstacle->SetGeomObjectEntry( anEntry.toLatin1().constData() );
         } else if ( myOpType == ImportSelectedAsPolyline ) {
           anObject = doc()->CreateObject( KIND_POLYLINEXY );
           Handle(HYDROData_PolylineXY) aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( anObject );
           aPolylineObj->SetWireColor( HYDROData_PolylineXY::DefaultWireColor() );
+          aPolylineObj->SetGeomObjectEntry( anEntry.toLatin1().constData() );
         }
       } else {
         anObject = anObjectToEdit;
index ca3e321ce797718f9b9bd5acd3780fd761a87e35..14cce6d646566ea75a327179a812d8076592ea7e 100644 (file)
@@ -57,13 +57,6 @@ public:
   bool ImportFromFile( const QString& theFilePath );
 
 
-  /**
-   * Imports shape from IOR.
-   * \param theIOR the IOR of Geom object
-   * \return \c true if shape has been successfully imported
-   */
-  bool ImportFromGeomIOR( const QString& theIOR );
-
   /**
    * Stores the file path of the imported file.
    * \param theFilePath file path
@@ -75,16 +68,27 @@ public:
    */
   QString GetFilePath() const;
 
-   /**
+
+public:
+
+  /**
+   * Imports shape from IOR.
+   * \param theIOR the IOR of Geom object
+   * \return \c true if shape has been successfully imported
+   */
+  bool ImportFromGeomIOR( const TCollection_AsciiString& theIOR );
+
+  /**
    * Stores the study entry of the imported GEOM object.
    * \param theEntry GEOM object entry
    */
-  void SetGeomObjectEntry(const QString& theEntry);
+  void SetGeomObjectEntry( const TCollection_AsciiString& theEntry );
 
   /**
    * Returns the imported GEOM object entry.
    */
-  QString GetGeomObjectEntry() const;
+  TCollection_AsciiString GetGeomObjectEntry() const;
+
 
 protected:
 
index 4286dee313f2ad46fc3fcde86c457f24b1ebb8ca..e1aea5d3844be6c052e98d40a4cb4d338c3fb892 100644 (file)
@@ -65,6 +65,29 @@ public:
   virtual bool IsEditable() const;
 
   
+public:
+
+  /**
+   * Imports shape from IOR.
+   * \param theIOR the IOR of Geom object
+   * \return \c true if shape has been successfully imported
+   */
+  bool ImportFromGeomIOR( const TCollection_AsciiString& theIOR );
+
+  /**
+   * Stores the study entry of the imported GEOM object.
+   * \param theEntry GEOM object entry
+   */
+  void SetGeomObjectEntry( const TCollection_AsciiString& theEntry );
+
+  /**
+   * Returns the imported GEOM object entry.
+   */
+  TCollection_AsciiString GetGeomObjectEntry() const;
+
+
+public:
+
   /**
    * Returns true if polyline is closed
    * \param theIsSimpleCheck flag indicating the type of checking