Salome HOME
6.12.2013.Fix of HasIntersection method.
[modules/hydro.git] / src / HYDROData / HYDROData_Profile.cxx
index 257dc01eb6387cc9427bc49e26ee2c95797749e7..85f5fd72f07ae74bf124245c180134735e364f2b 100755 (executable)
@@ -62,8 +62,10 @@ TopoDS_Shape HYDROData_Profile::GetShape3D() const
   return getShape3D();
 }
 
-void HYDROData_Profile::UpdateShape3D()
+void HYDROData_Profile::Update()
 {
+  HYDROData_Object::Update();
+
   BRepBuilderAPI_MakeWire aMakeWire;
 
   ProfilePoints aProfilePoints = GetProfilePoints();
@@ -129,6 +131,8 @@ void HYDROData_Profile::SetFirstPoint( const gp_XY& thePoint )
 
   anArray->SetValue( 0, thePoint.X() );
   anArray->SetValue( 1, thePoint.Y() );
+
+  SetToUpdate( true );
 }
 
 bool HYDROData_Profile::GetFirstPoint( gp_XY& thePoint ) const
@@ -157,6 +161,8 @@ void HYDROData_Profile::SetLastPoint( const gp_XY& thePoint )
 
   anArray->SetValue( 0, thePoint.X() );
   anArray->SetValue( 1, thePoint.Y() );
+
+  SetToUpdate( true );
 }
 
 bool HYDROData_Profile::GetLastPoint( gp_XY& thePoint ) const
@@ -184,6 +190,8 @@ void HYDROData_Profile::Invalidate()
   TDF_Label aLastLabel = myLab.FindChild( DataTag_LastPoint, false );
   if ( !aLastLabel.IsNull() )
     aLastLabel.ForgetAllAttributes();
+
+  SetToUpdate( true );
 }
 
 Handle(HYDROData_ProfileUZ) HYDROData_Profile::GetProfileUZ( const bool theIsCreate ) const
@@ -214,7 +222,10 @@ void HYDROData_Profile::RemovePoints()
 {
   Handle(HYDROData_ProfileUZ) aProfileUZ = GetProfileUZ( false );
   if ( !aProfileUZ.IsNull() )
+  {
     aProfileUZ->RemoveSections();
+    SetToUpdate( true );
+  }
 }
 
 void HYDROData_Profile::SetParametricPoints( const HYDROData_ProfileUZ::PointsList& thePoints )
@@ -227,6 +238,8 @@ void HYDROData_Profile::SetParametricPoints( const HYDROData_ProfileUZ::PointsLi
     const HYDROData_ProfileUZ::Point& aPoint = thePoints.Value( i );
     aProfileUZ->AddPoint( 0, aPoint );
   }
+
+  SetToUpdate( true );
 }
 
 HYDROData_ProfileUZ::PointsList HYDROData_Profile::GetParametricPoints() const
@@ -339,40 +352,38 @@ bool HYDROData_Profile::ImportFromFile( const Handle(HYDROData_Document)& theDoc
   if ( !aFile.IsOpen() )
     return false;
 
-  bool aRes = true;
-
   NCollection_Sequence<Handle(HYDROData_Profile)> aCreatedProfiles;
 
-  while ( aRes && !aFile.IsAtEnd() )
+  Handle(HYDROData_Profile) aNewProfile;
+  while ( !aFile.IsAtEnd() )
   {
-    Handle(HYDROData_Profile) aNewProfile = 
-      Handle(HYDROData_Profile)::DownCast( theDoc->CreateObject( KIND_PROFILE ) );
+    if ( aNewProfile.IsNull() )
+      aNewProfile = Handle(HYDROData_Profile)::DownCast( theDoc->CreateObject( KIND_PROFILE ) );
     
-    aRes = aNewProfile->ImportFromFile( aFile );
-
-    aCreatedProfiles.Append( aNewProfile );
+    if ( aNewProfile->ImportFromFile( aFile ) )
+    {
+      aCreatedProfiles.Append( aNewProfile );
+      aNewProfile.Nullify();
+    }
   }
 
+  if ( !aNewProfile.IsNull() )
+    aNewProfile->Remove();
+
   // Close the file
   aFile.Close();
 
   for ( int i = 1, n = aCreatedProfiles.Length(); i <= n ; ++i )
   {
     Handle(HYDROData_Profile) aProfile = aCreatedProfiles.Value( i );
-    if ( aRes )
-    {
-      QString aProfileName = HYDROData_Tool::GenerateObjectName( theDoc, "Profile" );
-      aProfile->SetName( aProfileName );
 
-      aProfile->SetFilePath( theFileName );
-    }
-    else
-    {
-      aProfile->Remove();
-    }
+    QString aProfileName = HYDROData_Tool::GenerateObjectName( theDoc, "Profile" );
+    aProfile->SetName( aProfileName );
+
+    aProfile->SetFilePath( theFileName );
   }
 
-  return aRes;
+  return !aCreatedProfiles.IsEmpty();
 }
 
 bool HYDROData_Profile::ImportFromFile( const TCollection_AsciiString& theFileName )
@@ -422,7 +433,12 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile )
 
     aLine.LeftAdjust(); aLine.RightAdjust();
     if ( aLine.IsEmpty() )
-      continue;
+    {
+      if ( !anIsParametric && !anIsGeoref )
+        continue; // Definition is not started yet
+
+      break; // Next profile started
+    }
 
     TCollection_AsciiString aValX = aLine.Token( " \t", 1 );
     TCollection_AsciiString aValY = aLine.Token( " \t", 2 );
@@ -485,6 +501,7 @@ bool HYDROData_Profile::ImportFromFile( OSD_File& theFile )
     else if ( anIsGeoref )
     {
       SetProfilePoints( aPointsXYZ );
+      Update();
     }
   }