Salome HOME
Image positioning by two points.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Displayer.cxx
index 2947e10a268274091462ab55cef8b7cbed827839..c28de63f9e4b7cf0926fc03c70b5148b00a24961 100644 (file)
@@ -26,6 +26,8 @@
 #include "HYDROGUI_Module.h"
 #include "HYDROGUI_Prs.h"
 #include "HYDROGUI_PrsImageDriver.h"
+#include "HYDROGUI_PrsPolylineDriver.h"
+#include "HYDROGUI_PrsZoneDriver.h"
 #include "HYDROGUI_Tool.h"
 
 #include <GraphicsView_Viewer.h>
@@ -54,7 +56,7 @@ void HYDROGUI_Displayer::SetToUpdate( const HYDROData_SequenceOfObjects& theObjs
   GraphicsView_ObjectList anObjectList = aViewPort->getObjects();
   for( int i = 1, n = theObjs.Length(); i <= n; i++ )
   {
-    Handle(HYDROData_Object) anObj = theObjs.Value( i );
+    Handle(HYDROData_Entity) anObj = theObjs.Value( i );
     if( anObj.IsNull() )
       continue;
 
@@ -96,13 +98,9 @@ void HYDROGUI_Displayer::EraseAll( const int theViewerId )
 void HYDROGUI_Displayer::DisplayAll( const int theViewerId,
                                      const bool theIsForced )
 {
-  HYDROGUI_DataModel* aModel = (HYDROGUI_DataModel*)myModule->dataModel();
-  if( aModel ) 
-  {
-    HYDROData_SequenceOfObjects aSeq;
-    HYDROGUI_Tool::GetPrsSubObjects( aModel, theViewerId, aSeq );
-    Update( aSeq, theViewerId, theIsForced );
-  }
+  HYDROData_SequenceOfObjects aSeq;
+  HYDROGUI_Tool::GetPrsSubObjects( myModule, aSeq );
+  Update( aSeq, theViewerId, theIsForced );
 }
 
 void HYDROGUI_Displayer::Update( const HYDROData_SequenceOfObjects& theObjs,
@@ -117,7 +115,7 @@ void HYDROGUI_Displayer::Update( const HYDROData_SequenceOfObjects& theObjs,
 
   for( int i = 1, n = theObjs.Length(); i <= n; i++ )
   {
-    const Handle(HYDROData_Object)& anObj = theObjs.Value( i );
+    const Handle(HYDROData_Entity)& anObj = theObjs.Value( i );
     if( anObj.IsNull() )
       anObjectsToErase.Append( anObj );
     else
@@ -148,7 +146,7 @@ void HYDROGUI_Displayer::Erase( const HYDROData_SequenceOfObjects& theObjs,
     for( int i = 1, n = theObjs.Length(); i <= n; i++ )
     {
       // the object may be null or dead
-      const Handle(HYDROData_Object)& anObj = theObjs.Value( i );
+      const Handle(HYDROData_Entity)& anObj = theObjs.Value( i );
       if( HYDROGUI_Prs* aPrs = HYDROGUI_Tool::GetPresentation( anObj, anObjectList ) )
       {
         aViewPort->removeItem( aPrs );
@@ -174,7 +172,7 @@ void HYDROGUI_Displayer::Display( const HYDROData_SequenceOfObjects& theObjs,
   GraphicsView_ObjectList anObjectList = aViewPort->getObjects();
   for( int i = 1, n = theObjs.Length(); i <= n; i++ )
   {
-    Handle(HYDROData_Object) anObj = theObjs.Value( i );
+    Handle(HYDROData_Entity) anObj = theObjs.Value( i );
     if( anObj.IsNull() )
       continue;
 
@@ -192,11 +190,12 @@ void HYDROGUI_Displayer::Display( const HYDROData_SequenceOfObjects& theObjs,
 
     if( aPrs )
     {
-      bool anIsVisible = anObj->GetVisibility();
+      bool anIsVisible = myModule->isObjectVisible( (size_t)aViewer, anObj );
       aPrs->setVisible( anIsVisible );
     }
   }
 
+  aViewPort->onBoundingRectChanged(); // specific of HYDRO module
   aViewPort->fitAll();
 }
 
@@ -215,7 +214,7 @@ void HYDROGUI_Displayer::purgeObjects( const int theViewerId )
   {
     if( HYDROGUI_Prs* aPrs = dynamic_cast<HYDROGUI_Prs*>( anIter.next() ) )
     {
-      Handle(HYDROData_Object) anObject = aPrs->getObject();
+      Handle(HYDROData_Entity) anObject = aPrs->getObject();
       if( !anObject.IsNull() && anObject->IsRemoved() )
       {
         aViewPort->removeItem( aPrs );
@@ -225,7 +224,7 @@ void HYDROGUI_Displayer::purgeObjects( const int theViewerId )
   }
 }
 
-HYDROGUI_PrsDriver* HYDROGUI_Displayer::getDriver( const Handle(HYDROData_Object)& theObj )
+HYDROGUI_PrsDriver* HYDROGUI_Displayer::getDriver( const Handle(HYDROData_Entity)& theObj )
 {
   HYDROGUI_PrsDriver* aDriver = NULL;
   ObjectKind aKind = theObj->GetKind();
@@ -238,11 +237,20 @@ HYDROGUI_PrsDriver* HYDROGUI_Displayer::getDriver( const Handle(HYDROData_Object
     {
       case KIND_IMAGE:
         aDriver = new HYDROGUI_PrsImageDriver();
-        myPrsDriversMap[ aKind ] = aDriver;
+        break;
+      case KIND_POLYLINE:
+        aDriver = new HYDROGUI_PrsPolylineDriver();
+        break;
+      case KIND_ZONE:
+        aDriver = new HYDROGUI_PrsZoneDriver();
         break;
       default:
         break;
     }
+
+    if ( aDriver )
+      myPrsDriversMap[ aKind ] = aDriver;
   }
+
   return aDriver;
 }