]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Curve displayer is moved to the curve creator.
authornds <nds@opencascade.com>
Thu, 21 Nov 2013 09:25:39 +0000 (09:25 +0000)
committernds <nds@opencascade.com>
Thu, 21 Nov 2013 09:25:39 +0000 (09:25 +0000)
This is an attempt to fix the bug refs #94 - Fatal error after second Edit polyline
A fix for the bug #refs 111 - curve becomes invisible after edit in modification mode

src/HYDROGUI/HYDROGUI_PolylineOp.cxx
src/HYDROGUI/HYDROGUI_PolylineOp.h

index ae3d5b21c48ea6d74e0e75d7d3f8eb776137f30d..a73efdb351b380e2f6f338e88d7186d0077aa057 100755 (executable)
@@ -46,7 +46,7 @@
 
 HYDROGUI_PolylineOp::HYDROGUI_PolylineOp( HYDROGUI_Module* theModule, bool theIsEdit )
 : HYDROGUI_Operation( theModule ), myIsEdit(theIsEdit), myCurve(NULL), 
-  myViewManager(NULL), myCurveDisplayer(NULL)
+  myViewManager(NULL)
 {
   setName( theIsEdit ? tr( "EDIT_POLYLINE" ) : tr( "CREATE_POLYLINE" ) );
 }
@@ -205,6 +205,11 @@ bool HYDROGUI_PolylineOp::processApply( int& theUpdateFlags,
   }
   aPolylineObj->SetPolylineData(aPolylineData);
 
+  // the viewer should be release from the widget before the module update it
+  // because it has an opened local context and updated presentation should not be displayed in it
+  if ( aPanel )
+    aPanel->setOCCViewer( 0 );
+
   if( !myIsEdit )
     module()->setObjectVisible( HYDROGUI_Tool::GetActiveOCCViewId( module() ), aPolylineObj, true );
 
@@ -220,13 +225,14 @@ void HYDROGUI_PolylineOp::onEditorSelectionChanged()
     return;
   if( !myCurve )
     return;
-  if( !myCurveDisplayer )
+  CurveCreator_Displayer* aDisplayer = myCurve->getDisplayer();
+  if( !aDisplayer )
     return;
   QList<int> aSelSections = aPanel->getSelectedSections();
   for( int i = 0 ; i < myCurve->getNbSections() ; i++ ){
     bool aIsHl = false;
     if( aSelSections.contains(i) ){
-      myCurveDisplayer->highlight( myCurve->constructSection(i), aIsHl );
+      aDisplayer->highlight( myCurve->constructSection(i), aIsHl );
     }
   }
 }
@@ -240,9 +246,9 @@ void HYDROGUI_PolylineOp::displayPreview()
       Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
       if( !aCtx.IsNull() )
       {
-        myCurveDisplayer = new CurveCreator_Displayer( aCtx );
-        myCurve->setDisplayer( myCurveDisplayer );
-        myCurveDisplayer->display( myCurve->constructWire() );
+        CurveCreator_Displayer* aDisplayer = new CurveCreator_Displayer( aCtx );
+        myCurve->setDisplayer( aDisplayer );
+        aDisplayer->display( myCurve->constructWire() );
       }
     }
   }
@@ -250,16 +256,15 @@ void HYDROGUI_PolylineOp::displayPreview()
 
 void HYDROGUI_PolylineOp::erasePreview()
 {
-  if( myViewManager )
+  CurveCreator_Displayer* aDisplayer = myCurve ? myCurve->getDisplayer() : 0;
+  if( myViewManager && aDisplayer )
   {
     if( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() )
     {
       Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
-      if( !aCtx.IsNull() && myCurveDisplayer )
+      if( !aCtx.IsNull() )
       {
-        myCurveDisplayer->erase();
-        delete myCurveDisplayer;
-        myCurveDisplayer = 0;
+        aDisplayer->erase();
       }
     }
   }
index c7fbe6582b5fb85a72146f3a77ab8425692cae9d..aebd8be05d6e912378811ef172d53e739292b261 100755 (executable)
@@ -29,7 +29,6 @@
 
 class OCCViewer_ViewManager;
 class CurveCreator_Curve;
-class CurveCreator_Displayer;
 
 class HYDROGUI_PolylineOp : public HYDROGUI_Operation
 {
@@ -64,7 +63,6 @@ private:
   bool                       myIsEdit;
   Handle(HYDROData_Polyline) myEditedObject;
   CurveCreator_Curve*        myCurve;
-  CurveCreator_Displayer*     myCurveDisplayer;
 };
 
 #endif