]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Merge commits, bring-to-front, show/hide all
authorapl <anton.poletaev@opencascade.com>
Tue, 8 Nov 2016 11:04:18 +0000 (14:04 +0300)
committerapl <anton.poletaev@opencascade.com>
Tue, 8 Nov 2016 11:04:18 +0000 (14:04 +0300)
src/GEOMGUI/GEOMGUI_AnnotationMgr.cxx
src/GEOMGUI/GEOMGUI_AnnotationMgr.h
src/MeasureGUI/MeasureGUI.cxx [changed mode: 0644->0755]
src/MeasureGUI/MeasureGUI_AnnotationDlg.cxx

index a782e9e88f910b89299a9837990b55ff02a40a6b..4fe3f98434938d8bd4de2222ff5095fe98f65dd0 100755 (executable)
@@ -22,7 +22,9 @@
 #include <GEOMGUI_AnnotationAttrs.h>
 #include <GEOM_Annotation.hxx>
 #include <GEOM_Client.hxx>
+#include <GEOM_Constants.h>
 #include <GEOM_Displayer.h>
+
 #include <GeometryGUI.h>
 
 #include <SalomeApp_Application.h>
@@ -65,6 +67,7 @@ QString GEOMGUI_AnnotationMgr::GetEntrySeparator()
 //================================================================
 SALOME_Prs* GEOMGUI_AnnotationMgr::CreatePresentation( const GEOMGUI_AnnotationAttrs::Properties& theProperty,
                                                        GEOM::GEOM_Object_ptr theObject,
+                                                       SALOME_View* theView,
                                                        const QString& theEntry )
 {
   Handle ( GEOM_Annotation ) aPresentation = new GEOM_Annotation();
@@ -104,6 +107,19 @@ SALOME_Prs* GEOMGUI_AnnotationMgr::CreatePresentation( const GEOMGUI_AnnotationA
   gp_Ax3 aShapeLCS = gp_Ax3().Transformed( aShape.Location().Transformation() );
   GEOMGUI_AnnotationAttrs::SetupPresentation( aPresentation, theProperty, aShapeLCS );
 
+  SALOME_View* aView = viewOrActiveView( theView );
+  if ( aView ) {
+
+    // set top-level flag correspondingly
+    SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApplication()->activeStudy() );
+    int aMgrId = dynamic_cast< SUIT_ViewModel* >( aView )->getViewManager()->getGlobalId();
+    QVariant aVal = aStudy->getObjectProperty( aMgrId, QString( getEntry( theObject ).c_str() ), GEOM::propertyName( GEOM::TopLevel ), QVariant() );
+    bool isBringToFront = aVal.isValid() ? aVal.toBool() : false;
+    if( isBringToFront ) {
+      aPresentation->SetZLayer( Graphic3d_ZLayerId_Topmost );
+    }
+  }
+
   // add Prs to preview
   SUIT_ViewWindow* vw = getApplication()->desktop()->activeWindow();
   SOCC_Prs* aPrs =
@@ -153,7 +169,7 @@ void GEOMGUI_AnnotationMgr::Display( const QString& theEntry, const int theIndex
 
   // display presentation in the viewer
   QString anEntry = QString("%1%2%3").arg(theEntry).arg(GetEntrySeparator()).arg(theIndex);
-  SALOME_Prs* aPrs = CreatePresentation( aProperty, anObject, anEntry );
+  SALOME_Prs* aPrs = CreatePresentation( aProperty, anObject, aView, anEntry );
   aView->Display( getDisplayer(), aPrs );
   getDisplayer()->UpdateViewer();
 
@@ -170,7 +186,7 @@ void GEOMGUI_AnnotationMgr::Display( const QString& theEntry, const int theIndex
   myVisualized[aView] = anEntryToMap;
 
   // change persistent for the entry: set visible state in true for indices which presentations are shown
-  storeVisibleState( theEntry, theView, theIndex );
+  storeVisibleState( theEntry, theView );
 }
 
 void GEOMGUI_AnnotationMgr::Erase( const QString& theEntry, const int theIndex, SALOME_View* theView )
@@ -207,7 +223,7 @@ void GEOMGUI_AnnotationMgr::Erase( const QString& theEntry, const int theIndex,
   myVisualized[aView] = anEntryToAnnotation;
 
   // change persistent for the entry: set visible state in true for indices which presentations are shown
-  storeVisibleState( theEntry, theView, theIndex );
+  storeVisibleState( theEntry, theView );
 }
 
 void GEOMGUI_AnnotationMgr::DisplayVisibleAnnotations( const QString& theEntry, SALOME_View* theView )
@@ -217,9 +233,14 @@ void GEOMGUI_AnnotationMgr::DisplayVisibleAnnotations( const QString& theEntry,
   const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnotations = GEOMGUI_AnnotationAttrs::FindAttributes( aSObj );
   if ( !aShapeAnnotations.IsNull() ) {
     const int aCount = aShapeAnnotations->GetNbAnnotation();
+    std::vector<bool> isVisible( aCount );
     for ( int anIndex = 0; anIndex < aCount; ++anIndex )
     {
-      if ( aShapeAnnotations->GetIsVisible( anIndex ) )
+      isVisible[anIndex] = aShapeAnnotations->GetIsVisible( anIndex );
+    }
+    for ( int anIndex = 0; anIndex < aCount; ++anIndex )
+    {
+      if ( isVisible[anIndex] )
         Display( theEntry, anIndex, theView );
     }
   }
@@ -409,7 +430,7 @@ void GEOMGUI_AnnotationMgr::getObject( const QString& theEntry, const int theInd
   }
 }
 
-void GEOMGUI_AnnotationMgr::storeVisibleState( const QString& theEntry, SALOME_View* theView, const int theIndex )
+void GEOMGUI_AnnotationMgr::storeVisibleState( const QString& theEntry, SALOME_View* theView )
 {
   SALOME_View* aView = viewOrActiveView( theView );
   if ( !aView || !myVisualized.contains( aView ) )
@@ -424,14 +445,15 @@ void GEOMGUI_AnnotationMgr::storeVisibleState( const QString& theEntry, SALOME_V
   SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( getApplication()->activeStudy() );
   _PTR(SObject) aSObj = aStudy->studyDS()->FindObjectID( theEntry.toStdString() );
   const Handle(GEOMGUI_AnnotationAttrs) aShapeAnnotations = GEOMGUI_AnnotationAttrs::FindAttributes( aSObj );
-  if ( !aShapeAnnotations.IsNull() ) {
-    
-    bool aVisible = anAnnotationToPrs.contains( theIndex );
-    aShapeAnnotations->SetIsVisible( theIndex, aVisible );
+  if ( !aShapeAnnotations.IsNull() ) {\r
+    const int aCount = aShapeAnnotations->GetNbAnnotation();\r
+    for ( int anIndex = 0; anIndex < aCount; ++anIndex ) {\r
+      bool aVisible = anAnnotationToPrs.contains( anIndex );\r
+      aShapeAnnotations->SetIsVisible( anIndex, aVisible );\r
+    }\r
   }
 }
 
-
 //=======================================================================
 // function : GEOMGUI_AnnotationMgr::getEntry
 // purpose  : 
index 16044bedc2d17d033edbdb167e1922a9e93b2c6e..8b3445903850c98ba8007008106928c0db5feace 100755 (executable)
@@ -32,7 +32,6 @@
 #include <SALOME_InteractiveObject.hxx>
 
 class SalomeApp_Application;
-class GEOM_Annotation;
 class GEOM_Displayer;
 
 /*!
@@ -52,7 +51,9 @@ public:
   static QString GetEntrySeparator();
 
   SALOME_Prs* CreatePresentation( const GEOMGUI_AnnotationAttrs::Properties& theProperty,
-                                  GEOM::GEOM_Object_ptr theObject, const QString& theEntry = QString() );
+                                  GEOM::GEOM_Object_ptr theObject,
+                                  SALOME_View* theView = 0,
+                                  const QString& theEntry = QString() );
 
   bool IsDisplayed( const QString& theEntry, const int theIndex, SALOME_View* theView = 0 ) const;
   void Display( const QString& theEntry, const int theIndex, SALOME_View* theView = 0 );
@@ -85,16 +86,12 @@ protected:
                   GEOM::GEOM_Object_ptr& anObject,
                   GEOMGUI_AnnotationAttrs::Properties& aProperty );
 
-  void storeVisibleState( const QString& theEntry, SALOME_View* theView, const int theIndex );
+  void storeVisibleState( const QString& theEntry, SALOME_View* theView );
 
   std::string getEntry( const GEOM::GEOM_Object_ptr theObject );
 
   std::string getName( const GEOM::GEOM_Object_ptr theObject );
 
-  void setAISProperties( const Handle(GEOM_Annotation)& thePresentation,
-                         const GEOMGUI_AnnotationAttrs::Properties& theProperty,
-                         const gp_Ax3& theLCS );
-
 private:
   SalomeApp_Application* myApplication;
 
old mode 100644 (file)
new mode 100755 (executable)
index 19eccc5..d8ea3d5
@@ -31,6 +31,7 @@
 
 #include <GEOMGUI_DimensionProperty.h>
 #include <GEOMGUI_AnnotationAttrs.h>
+#include <GEOMGUI_AnnotationMgr.h>
 
 #include <LightApp_SelectionMgr.h>
 #include <SUIT_OverrideCursor.h>
@@ -231,13 +232,16 @@ void MeasureGUI::ChangeAnnotationsVisibility( const bool theIsVisible )
    || !anIObject->hasEntry() )
     return;
 
-  _PTR(SObject) aSObj = anActiveStudy->studyDS()->FindObjectID( anIObject->getEntry() );\r
+  const QString aEntry = anIObject->getEntry(),c_str();
+
+  _PTR(SObject) aSObj = anActiveStudy->studyDS()->FindObjectID( aEntry.toStdString() );\r
 
   const Handle(GEOMGUI_AnnotationAttrs)\r
     aShapeAnnotations = GEOMGUI_AnnotationAttrs::FindAttributes( aSObj );\r
 
-  if ( aShapeAnnotations.IsNull() )\r
+  if ( aShapeAnnotations.IsNull() ) {\r
     return;\r
+  }\r
 
   const int aCount = aShapeAnnotations->GetNbAnnotation();
 
@@ -247,10 +251,13 @@ void MeasureGUI::ChangeAnnotationsVisibility( const bool theIsVisible )
 
     for ( int anI = 0; anI <= aCount; ++anI ) {
 
-      aShapeAnnotations->SetIsVisible( anI, theIsVisible );
+      if ( !theIsVisible ) {
+        getGeometryGUI()->GetAnnotationMgr()->Erase( aEntry, anI );
+      }
+      else {
+        getGeometryGUI()->GetAnnotationMgr()->Display( aEntry , anI );
+      }
     }
-
-    GEOM_Displayer( anActiveStudy ).Redisplay( anIObject, true );
   }
 }
 
index 6ac2edf7759ed30134e661aea7d306e5aace53bf..2d347c99b9c0b2250a503839605bd265012baf51 100755 (executable)
@@ -439,10 +439,6 @@ void MeasureGUI_AnnotationDlg::SelectionIntoArgument()
 
         hasAttachPoint = true;
       }
-      else {
-
-        myIsPositionDefined = false;
-      }
     } else if ( myEditCurrentArgument == mySubShapeName ) {
       if ( !myShape->_is_nil() ) {
 
@@ -474,13 +470,8 @@ void MeasureGUI_AnnotationDlg::SelectionIntoArgument()
 
               anAttachPoint = getAttachPoint( aSubShape );
             }
-
             hasAttachPoint = true;
           }
-          else {
-
-            myIsPositionDefined = false;
-          }
         }
       }
       myAnnotationProperties.ShapeIndex = aSubShapeIndex;
@@ -506,6 +497,10 @@ void MeasureGUI_AnnotationDlg::SelectionIntoArgument()
 
       myIsPositionDefined = true;
     }
+    else if ( !hasAttachPoint ) {
+
+      myIsPositionDefined = false;
+    }
   }
   redisplayPreview();
 }