]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #327 - Polyline is not shown during creation
authornds <nds@opencascade.com>
Fri, 31 Jan 2014 09:53:27 +0000 (09:53 +0000)
committernds <nds@opencascade.com>
Fri, 31 Jan 2014 09:53:27 +0000 (09:53 +0000)
Fix for immersible zone.

src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.cxx
src/HYDROGUI/HYDROGUI_ImmersibleZoneOp.h
src/HYDROGUI/HYDROGUI_Operation.cxx
src/HYDROGUI/HYDROGUI_Operation.h
src/HYDROGUI/HYDROGUI_PolylineOp.cxx
src/HYDROGUI/HYDROGUI_Shape.cxx
src/HYDROGUI/HYDROGUI_Shape.h

index 41f539a22719df812fd7cc1dceda33cad6e2351b..13fd5202367a17fc3d1318c28139395c7203774e 100644 (file)
@@ -51,7 +51,6 @@ HYDROGUI_ImmersibleZoneOp::HYDROGUI_ImmersibleZoneOp( HYDROGUI_Module* theModule
                                                       const bool theIsEdit )
 : HYDROGUI_Operation( theModule ),
   myIsEdit( theIsEdit ),
-  myViewManager( 0 ),
   myPreviewPrs( 0 )
 {
   setName( theIsEdit ? tr( "EDIT_IMMERSIBLE_ZONE" ) : tr( "CREATE_IMMERSIBLE_ZONE" ) );
@@ -260,21 +259,22 @@ void HYDROGUI_ImmersibleZoneOp::onCreatePreview( const QString& thePolylineName
   }
 
   LightApp_Application* anApp = module()->getApp();
-  if ( !myViewManager )
-    myViewManager = ::qobject_cast<OCCViewer_ViewManager*>( 
-      anApp->getViewManager( OCCViewer_Viewer::Type(), true ) );
+  if ( !getPreviewManager() )
+    setPreviewManager( ::qobject_cast<OCCViewer_ViewManager*>( 
+                       anApp->getViewManager( OCCViewer_Viewer::Type(), true ) ) );
 
-  if ( myViewManager && !myPreviewPrs )
+  OCCViewer_ViewManager* aViewManager = getPreviewManager();
+  if ( aViewManager && !myPreviewPrs )
   {
-    if ( OCCViewer_Viewer* aViewer = myViewManager->getOCCViewer() )
+    if ( OCCViewer_Viewer* aViewer = aViewManager->getOCCViewer() )
     {
       Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
       if ( !aCtx.IsNull() )
-        myPreviewPrs = new HYDROGUI_Shape( aCtx, NULL );
+        myPreviewPrs = new HYDROGUI_Shape( aCtx, NULL, getPreviewZLayer() );
     }
   }
 
-  if ( myViewManager && myPreviewPrs )
+  if ( aViewManager && myPreviewPrs )
   {
     QColor aFillingColor = HYDROData_ImmersibleZone::DefaultFillingColor();
     QColor aBorderColor = HYDROData_ImmersibleZone::DefaultBorderColor();
index ba4410bd841b804c7e16a579b3acc77893aded74..20cddaca872716a121a1411b66642be2afbe912b 100644 (file)
@@ -27,8 +27,6 @@
 
 #include <HYDROData_ImmersibleZone.h>
 
-class OCCViewer_ViewManager;
-
 class HYDROGUI_Shape;
 
 class HYDROGUI_ImmersibleZoneOp : public HYDROGUI_Operation
@@ -48,6 +46,8 @@ protected:
 
   virtual bool               processApply( int& theUpdateFlags, QString& theErrorMsg );
 
+  virtual HYDROGUI_Shape*   getPreviewShape() const { return myPreviewPrs; };
+
 protected slots:
   void                       onCreatePreview( const QString& thePolylineName );
 
@@ -58,8 +58,6 @@ private:
   bool                             myIsEdit;
   Handle(HYDROData_ImmersibleZone) myEditedObject;
 
-  OCCViewer_ViewManager*           myViewManager;
-
   HYDROGUI_Shape*                  myPreviewPrs;
 };
 
index 8b397f151c77e5938f4e07fef8cb5c800ed7e8b0..5fe0773011920a6249b00a52e8eb911453bc1ebb 100644 (file)
@@ -26,6 +26,7 @@
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_Tool.h"
 #include "HYDROGUI_OCCDisplayer.h"
+#include "HYDROGUI_Shape.h"
 
 #include <HYDROData_Document.h>
 #include <HYDROData_Iterator.h>
@@ -91,13 +92,26 @@ HYDROGUI_Module* HYDROGUI_Operation::module() const
 
 /**
   * Returns Z layer of the operation preview.
-  \ returns a layer position
+   \ returns a layer position
  */
 int HYDROGUI_Operation::getPreviewZLayer() const
 {
   return myPreviewZLayer;
 }
 
+/**
+ * Update Z layer for the operation preview.
+   \param theLayer a layer position
+ */
+void HYDROGUI_Operation::updatePreviewZLayer( int theLayer )
+{
+  setPreviewZLayer( theLayer );
+
+  HYDROGUI_Shape* aPreview = getPreviewShape();
+  if ( aPreview )
+    aPreview->setZLayer( getPreviewZLayer() );
+}
+
 /**
  * Set Z layer for the operation preview.
  \param theLayer a layer position
@@ -108,6 +122,14 @@ void HYDROGUI_Operation::setPreviewZLayer( int theLayer )
     myPreviewZLayer = theLayer;
 }
 
+/**
+ * Returns a shape preview of the operation
+ */
+HYDROGUI_Shape* HYDROGUI_Operation::getPreviewShape() const
+{
+  return 0;
+}
+
 /**
  * Return the operation preview manager
  */
@@ -176,10 +198,8 @@ void HYDROGUI_Operation::stopOperation()
         anOperations.remove( anOperations.lastIndexOf( anOp ) );
     }
   }
-
-  // removes the Z layer, created for the operation preview
-  if ( myPreviewManager && getPreviewZLayer() >= 0 )
-    module()->getOCCDisplayer()->RemoveZLayer( myPreviewManager, getPreviewZLayer() );
+  // release the preview manager with removing the added preview Z layer
+  setPreviewManager( 0 );
 }
 
 void HYDROGUI_Operation::setDialogActive( const bool active )
index 5f03771882d62d67c2e17693979404af6cd4410e..be5f8e7f4c0bcc2aac759ad7497a00cdd97887d6 100644 (file)
@@ -27,6 +27,7 @@
 
 class HYDROGUI_Module;
 class HYDROGUI_InputPanel;
+class HYDROGUI_Shape;
 
 class SUIT_SelectionMgr;
 class OCCViewer_ViewManager;
@@ -53,7 +54,7 @@ public:
   HYDROGUI_Module*                    module() const;
 
   int                                 getPreviewZLayer() const;
-  virtual void                        updatePreviewZLayer( int theLayer ) {};
+  virtual void                        updatePreviewZLayer( int theLayer );
 
 signals:
   void                                helpContextModule( const QString&,
@@ -97,6 +98,7 @@ protected:
   QString                             getHelpContext() const;
 
   virtual void                        setPreviewZLayer( int theLayer );
+  virtual HYDROGUI_Shape*             getPreviewShape() const;
   OCCViewer_ViewManager*              getPreviewManager();
   void                                setPreviewManager( OCCViewer_ViewManager* theManager );
 
index 2c299e2f778c38e300cb5ce9f59c7df6891d07a3..47b25a1233b9769803854985c2caa4e4ab4dbcff 100755 (executable)
@@ -86,7 +86,7 @@ bool HYDROGUI_PolylineOp::deleteEnabled()
  */
 void HYDROGUI_PolylineOp::updatePreviewZLayer( int theLayer )
 {
-  setPreviewZLayer( theLayer );
+  HYDROGUI_Operation::updatePreviewZLayer( theLayer );
 
   int aZLayer = getPreviewZLayer();
   if ( aZLayer >= 0 )
index 3fed9548be2099543ba4eae17dc31127256af861..9cfb65e11cc9093559f82bf6fab8362af137b468 100644 (file)
 #include <QFile>
 
 HYDROGUI_Shape::HYDROGUI_Shape( const Handle(AIS_InteractiveContext)& theContext,
-                                const Handle(HYDROData_Entity)&       theObject )
+                                const Handle(HYDROData_Entity)&       theObject,
+                                const int                             theZLayer )
 : myContext( theContext ),
   myObject( theObject ),
+  myZLayer( theZLayer ),
   myIsHighlight( false ),
   myFillingColor( Qt::transparent ),
   myBorderColor( Qt::black ),
@@ -101,7 +103,7 @@ void HYDROGUI_Shape::display( const bool theIsUpdateViewer )
   if ( myContext.IsNull() || myShape.IsNull() || !isVisible() )
     return;
 
-  myContext->Display( myShape, theIsUpdateViewer );
+  displayShape( theIsUpdateViewer );
 }
 
 void HYDROGUI_Shape::erase( const bool theIsUpdateViewer )
@@ -389,9 +391,10 @@ void HYDROGUI_Shape::update( const bool theIsUpdateViewer,
   if ( myShape.IsNull() || !isVisible() )
     return;
 
-  myContext->Display( myShape, theIsUpdateViewer );
-  
-  if ( theIsDisplayOnTop ) {
+  displayShape( theIsUpdateViewer );
+  // the following code is not necessary if the Z layer is set for the shape
+  if ( myZLayer && theIsDisplayOnTop )
+  {
     // Display the shape on the top Z layer
     Standard_Integer aNewLayerId = -1;
     if ( myContext->CurrentViewer() && 
@@ -417,8 +420,9 @@ void HYDROGUI_Shape::setVisible( const bool theState,
        ( !myIsVisible && !myContext->IsDisplayed( myShape ) ) )
     return;
 
-  if ( myIsVisible )
-    myContext->Display( myShape, theIsUpdateViewer );
+  if ( myIsVisible ) {
+    displayShape( theIsUpdateViewer );
+  }
   else
     myContext->Erase( myShape, theIsUpdateViewer );
 }
@@ -434,7 +438,7 @@ void HYDROGUI_Shape::highlight( bool theIsHighlight, bool isUpdateViewer )
     return;
 
   colorShapeBorder( getActiveColor() );
-  myContext->Display( myShape, isUpdateViewer );
+  displayShape( isUpdateViewer );
 }
 
 bool HYDROGUI_Shape::isHighlighted() const
@@ -568,6 +572,16 @@ QString HYDROGUI_Shape::getTextureFileName() const
   return myTextureFileName;
 }
 
+void HYDROGUI_Shape::setZLayer( const int theZLayer )
+{
+  if ( myZLayer == theZLayer )
+    return;
+
+  myZLayer = theZLayer;
+  if ( !myShape.IsNull() && isVisible() && !myContext.IsNull() && myZLayer >= 0 )
+    myContext->SetZLayer( myShape, myZLayer );
+}
+
 void HYDROGUI_Shape::buildShape()
 {
   // Erase previously created shape
@@ -681,7 +695,17 @@ void HYDROGUI_Shape::updateShape( const bool theToDisplay,
   if ( !theToDisplay || !isVisible() || myContext.IsNull() )
     return;
   
-  myContext->Display( myShape, theIsUpdateViewer );
+  displayShape( theIsUpdateViewer );
+}
+
+void HYDROGUI_Shape::displayShape( const bool theIsUpdateViewer )
+{
+  myContext->Display( myShape, Standard_False );
+
+  if ( myZLayer >= 0 )
+    myContext->SetZLayer( myShape, myZLayer );
+
+  myContext->UpdateCurrentViewer();
 }
 
 QColor HYDROGUI_Shape::getActiveColor() const
index b16161ce6cfa97cac37e304b9604ae897e92ccc1..333083cacb710110b80aa7376e0620d0d18580ef 100644 (file)
@@ -39,7 +39,8 @@ class HYDROGUI_Shape
 {
 public:
   HYDROGUI_Shape( const Handle(AIS_InteractiveContext)& theContext,
-                  const Handle(HYDROData_Entity)&       theObject );
+                  const Handle(HYDROData_Entity)&       theObject,
+                  const int                             theZLayer = -1 );
   ~HYDROGUI_Shape();
 
 public:
@@ -101,10 +102,14 @@ public:
 
   virtual Handle(AIS_Shape)  getAISShape() const { return myShape; }
 
+  void                       setZLayer( const int theZLayer );
+
 protected:
   virtual void               buildShape();
   virtual void               updateShape( const bool theToDisplay      = true,
                                           const bool theIsUpdateViewer = true );
+  void                       displayShape( const bool theIsUpdateViewer );
+
   virtual QColor             getActiveColor() const;
 
 private:
@@ -121,6 +126,8 @@ private:
   Handle(HYDROData_Entity)       myObject;
   Handle(AIS_Shape)              myShape;
 
+  int                            myZLayer;
+
   bool                           myIsToUpdate;
   bool                           myIsVisible;