Salome HOME
Abort document operation after error in process apply (Bug #340).
[modules/hydro.git] / src / HYDROData / HYDROData_PolylineXY.cxx
index f9137e66d6fd0d1520c5821efc922e86800c4160..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>
@@ -107,33 +110,65 @@ HYDROData_PolylineXY::~HYDROData_PolylineXY()
 QStringList HYDROData_PolylineXY::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
 {
   QStringList aResList = dumpObjectCreation( theTreatedObjects );
-  QString aPolylineName = GetName();
+  QString aPolylineName = GetObjPyName();
 
-  // Set polilyne data
-  NCollection_Sequence<TCollection_AsciiString>           aSectNames;
-  NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
-  NCollection_Sequence<bool>                              aSectClosures;
-  GetSections( aSectNames, aSectTypes, aSectClosures );
+  // Set the wire color
+  QStringList aWireColorDef;
 
-  for ( int i = 1, n = aSectNames.Size(); i <= n; ++i )
+  QColor aWireColor = GetWireColor();
+  setPythonObjectColor( aWireColorDef, aWireColor, DefaultWireColor(), "SetWireColor" );
+  
+  if ( !aWireColorDef.isEmpty() )
   {
-    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 << aWireColorDef;
+    aResList << QString( "" );
+  }
 
-    HYDROData_IPolyline::PointsList aSectPointsList = GetPoints( i - 1 );
-    for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k )
+  bool anIsEditable = IsEditable();
+  if ( !anIsEditable )
+  {
+    // If polyline is not editable we try to import the shape from geom
+    TCollection_AsciiString aGeomObjectEntry = GetGeomObjectEntry();
+    if ( !aGeomObjectEntry.IsEmpty() )
     {
-      const Point& aSectPoint = aSectPointsList.Value( k );
+      QString aSalomeObjName = HYDROData_Tool::GenerateNameForPython( theTreatedObjects, "polyline_sobj" );
+      aResList << QString( "%1 = salome.myStudy.FindObjectID( \"%2\" );" )
+                  .arg( aSalomeObjName ).arg( aGeomObjectEntry.ToCString() );
+
+      aResList << QString( "%1.ImportFromGeomIOR( %2.GetIOR() );" )
+                  .arg( aPolylineName ).arg( aSalomeObjName );
 
-      aResList << QString( "%1.AddPoint( %2, QPointF( %3, %4 ) );" ).arg( aPolylineName )
-        .arg( i - 1 ).arg( aSectPoint.X() ).arg( aSectPoint.Y() );
+      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 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 );
 
+      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( "" );
@@ -156,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();