Salome HOME
merge trunk on BR_quadtree 20140820
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ProfileOp.cxx
index de66285269f83ba04f9ae2a35b6525673498fd6c..609bdafdf98cca622bbcfa9f42d153daee9234d9 100644 (file)
@@ -24,7 +24,7 @@
 #include "HYDROGUI_ProfileDlg.h"
 #include "HYDROGUI_Tool.h"
 #include "HYDROGUI_UpdateFlags.h"
-
+#include <HYDROGUI_DataObject.h>
 #include "HYDROData_Document.h"
 #include "HYDROData_Profile.h"
 #include "CurveCreator_Profile.hxx"
@@ -91,23 +91,36 @@ void HYDROGUI_ProfileOp::startOperation()
   QString aProfileName;
   if( !myEditedObject.IsNull() )
   {
-    CurveCreator::Coordinates aCurveCoords;
-    CurveCreator::SectionsMap aSectionsMap;
-
-    HYDROData_Profile::ProfilePoints aSectPointsList = myEditedObject->GetProfilePoints();
-    CurveCreator::PosPointsList aPoints;
-    for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k )
+    Handle(HYDROData_ProfileUZ) aProfileUZ = myEditedObject->GetProfileUZ( false );
+    if ( !aProfileUZ.IsNull() )
     {
-      const HYDROData_Profile::ProfilePoint& aSectPoint = aSectPointsList.Value( k );
-      aCurveCoords.clear();
-      aCurveCoords.push_back( aSectPoint.X() );
-      aCurveCoords.push_back( aSectPoint.Z() );
+      CurveCreator::Coordinates aCurveCoords;
+      CurveCreator::SectionsMap aSectionsMap;
+
+      HYDROData_ProfileUZ::PointsList aSectPointsList = aProfileUZ->GetPoints();
+      CurveCreator::PosPointsList aPoints;
+      for ( int k = 1, aNbPoints = aSectPointsList.Size(); k <= aNbPoints; ++k )
+      {
+        const HYDROData_ProfileUZ::Point& aSectPoint = aSectPointsList.Value( k );
+        aCurveCoords.clear();
+        aCurveCoords.push_back( aSectPoint.X() );
+        aCurveCoords.push_back( aSectPoint.Y() );
+
+        CurveCreator_PosPoint* aPosPoint = new CurveCreator_PosPoint( k, aCurveCoords );
+        aPoints.push_back( aPosPoint );
+      }
+
+      aSectionsMap[0] = aPoints;
+      myProfile->addPointsInternal( aSectionsMap );
 
-      CurveCreator_PosPoint* aPosPoint = new CurveCreator_PosPoint( k, aCurveCoords );
-      aPoints.push_back( aPosPoint );
+      HYDROData_ProfileUZ::SectionType aSectType = aProfileUZ->GetSectionType( 0 );
+
+      CurveCreator::SectionType aCurveType = CurveCreator::Polyline;
+      if( aSectType == HYDROData_ProfileUZ::SECTION_SPLINE )
+        aCurveType = CurveCreator::Spline;
+
+      myProfile->setSectionType( 0, aCurveType );
     }
-    aSectionsMap[0] = aPoints;
-    myProfile->addPointsInternal( aSectionsMap );
 
     aProfileName = myEditedObject->GetName();
   }
@@ -142,7 +155,8 @@ HYDROGUI_InputPanel* HYDROGUI_ProfileOp::createInputPanel() const
 }
 
 bool HYDROGUI_ProfileOp::processApply( int& theUpdateFlags,
-                                        QString& theErrorMsg )
+                                       QString& theErrorMsg,
+                                       QStringList& theBrowseObjectsEntries )
 {
   HYDROGUI_ProfileDlg* aPanel = ::qobject_cast<HYDROGUI_ProfileDlg*>( inputPanel() );
   if ( !aPanel )
@@ -177,6 +191,10 @@ bool HYDROGUI_ProfileOp::processApply( int& theUpdateFlags,
   if( aProfileObj.IsNull() )
     return false;
 
+  Handle(HYDROData_ProfileUZ) aProfileUZ = aProfileObj->GetProfileUZ();
+  if ( aProfileUZ.IsNull() )
+    return false;
+
   aProfileObj->SetName(aProfileName);
 
   HYDROData_ProfileUZ::PointsList aProfileParamPoints;
@@ -200,10 +218,34 @@ bool HYDROGUI_ProfileOp::processApply( int& theUpdateFlags,
   }
   aProfileObj->SetParametricPoints( aProfileParamPoints );
 
-  if( !myIsEdit )
-    module()->setObjectVisible( HYDROGUI_Tool::GetActiveOCCViewId( module() ), aProfileObj, true );
+  HYDROData_ProfileUZ::SectionType aSectType = HYDROData_ProfileUZ::SECTION_POLYLINE;
+  if ( myProfile->getSectionType( 0 ) == CurveCreator::Spline )
+    aSectType = HYDROData_ProfileUZ::SECTION_SPLINE;
+
+  aProfileUZ->SetSectionType( 0, aSectType );
+
+  if ( !myIsEdit )
+  {
+    aProfileObj->SetBorderColor( HYDROData_Profile::DefaultBorderColor() );
+  }
+
+  // At first we update the child u,z profile object
+  aProfileUZ->SetToUpdate( true );
+  aProfileUZ->Update();
+
+  // And now we update our edited object
+  aProfileObj->Update();
+  module()->setIsToUpdate( aProfileObj );
 
   theUpdateFlags = UF_Model;
+  if ( myIsEdit )
+    theUpdateFlags |= UF_OCCViewer | UF_OCC_Forced | UF_VTKViewer;
+  else
+  {
+    QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aProfileObj );
+    theBrowseObjectsEntries.append( anEntry );
+  }
+
   return true;
 }
 
@@ -217,7 +259,7 @@ void HYDROGUI_ProfileOp::displayPreview()
     {
       CurveCreator_Displayer* aDisplayer = new CurveCreator_Displayer( aCtx );
       myProfile->setDisplayer( aDisplayer );
-      aDisplayer->display( myProfile->constructWire(), true );
+      aDisplayer->display( myProfile->getAISObject( true ), true );
     }
   }
 }
@@ -231,7 +273,7 @@ void HYDROGUI_ProfileOp::erasePreview()
     Handle(AIS_InteractiveContext) aCtx = aPanel->getAISContext();
     if( !aCtx.IsNull() )
     {
-      aDisplayer->erase( true );
+      aDisplayer->eraseAll( true );
     }
   }
 }