]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Code correction. Put only the curve AIS presentation to the Local context.
authornds <nds@opencascade.com>
Wed, 4 Dec 2013 16:37:10 +0000 (16:37 +0000)
committernds <nds@opencascade.com>
Wed, 4 Dec 2013 16:37:10 +0000 (16:37 +0000)
src/HYDROCurveCreator/CurveCreator_Utils.cxx
src/HYDROCurveCreator/CurveCreator_Utils.h
src/HYDROCurveCreator/CurveCreator_Widget.cxx

index 9fb21deb01479f3f32c65c9a5ca25ece1d49c547..1fcc4084030de42aba451f7fe357f77c117470e8 100644 (file)
@@ -215,59 +215,55 @@ void CurveCreator_Utils::setSelectedPoints( Handle(AIS_InteractiveContext) theCo
                                             const CurveCreator_ICurve* theCurve,
                                             const CurveCreator_ICurve::SectionToPointList& thePoints )
 {
-  AIS_ListOfInteractive aDisplayedList;
-  theContext->DisplayedObjects( aDisplayedList );
-  theContext->ClearSelected( Standard_False );
-
-  for ( AIS_ListIteratorOfListOfInteractive it( aDisplayedList ); it.More(); it.Next() )
-  {
-    Handle(AIS_InteractiveObject) anAIS = it.Value();
-    if ( anAIS.IsNull() )
-      continue;
-    Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast( anAIS );
-    if ( anAISShape.IsNull() )
-      continue;
+  if ( !theCurve )
+    return;
 
-    //ASL: we convert list of point indices to list of points coordinates
-    int aSize = thePoints.size();
-    std::vector<gp_Pnt> aPntsToSelect( aSize );
+  Handle(AIS_InteractiveObject) anAIS = theCurve->getAISObject();
+  if ( anAIS.IsNull() )
+    return;
+  Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast( anAIS );
+  if ( anAISShape.IsNull() )
+    return;
 
-    CurveCreator_ICurve::SectionToPointList::const_iterator
-      aPIt = thePoints.begin(), aPLast = thePoints.end();
-    CurveCreator_ICurve::SectionToPoint aSToPoint;
-    for( int i=0; aPIt != aPLast; aPIt++, i++ )
-    {
-      gp_Pnt aPntToSelect;
-      CurveCreator_UtilsICurve::getPoint( theCurve, aPIt->first, aPIt->second, aPntToSelect );
-      aPntsToSelect[i] = aPntToSelect;
-    }
+  //ASL: we convert list of point indices to list of points coordinates
+  int aSize = thePoints.size();
+  std::vector<gp_Pnt> aPntsToSelect( aSize );
 
+  CurveCreator_ICurve::SectionToPointList::const_iterator
+                     aPIt = thePoints.begin(), aPLast = thePoints.end();
+  CurveCreator_ICurve::SectionToPoint aSToPoint;
+  for( int i=0; aPIt != aPLast; aPIt++, i++ )
+  {
+    gp_Pnt aPntToSelect;
+    CurveCreator_UtilsICurve::getPoint( theCurve, aPIt->first, aPIt->second, aPntToSelect );
+    aPntsToSelect[i] = aPntToSelect;
+  }
 
-    //ASL: we switch off automatic highlight to improve performance of selection
-    theContext->SetAutomaticHilight( Standard_False );
+  theContext->ClearSelected( Standard_False );
+  //ASL: we switch off automatic highlight to improve performance of selection
+  theContext->SetAutomaticHilight( Standard_False );
 
-    Handle_SelectMgr_Selection aSelection = anAISShape->Selection( AIS_Shape::SelectionMode( TopAbs_VERTEX ) );
-    for( aSelection->Init(); aSelection->More(); aSelection->Next() )
-    {
-      Handle_SelectBasics_SensitiveEntity aSenEntity = aSelection->Sensitive();
-      Handle_Select3D_SensitivePoint aSenPnt = Handle_Select3D_SensitivePoint::DownCast( aSenEntity );
+  Handle_SelectMgr_Selection aSelection = anAISShape->Selection( AIS_Shape::SelectionMode( TopAbs_VERTEX ) );
+  for( aSelection->Init(); aSelection->More(); aSelection->Next() )
+  {
+    Handle_SelectBasics_SensitiveEntity aSenEntity = aSelection->Sensitive();
+    Handle_Select3D_SensitivePoint aSenPnt = Handle_Select3D_SensitivePoint::DownCast( aSenEntity );
 
-      gp_Pnt anOwnerPnt = aSenPnt->Point();
-      Handle_SelectMgr_EntityOwner anOwner = Handle_SelectMgr_EntityOwner::DownCast( aSenPnt->OwnerId() );
+    gp_Pnt anOwnerPnt = aSenPnt->Point();
+    Handle_SelectMgr_EntityOwner anOwner = Handle_SelectMgr_EntityOwner::DownCast( aSenPnt->OwnerId() );
 
 
-      CurveCreator_ICurve::SectionToPointList::const_iterator anIt = thePoints.begin(),
-                                                                     aLast = thePoints.end();
-      bool isFound = false;
-      for( int i=0; i<aSize; i++ )
+    CurveCreator_ICurve::SectionToPointList::const_iterator anIt = thePoints.begin(),
+                                                                   aLast = thePoints.end();
+    bool isFound = false;
+    for( int i=0; i<aSize; i++ )
+    {
+      bool isIntersect = fabs( aPntsToSelect[i].X() - anOwnerPnt.X() ) < LOCAL_SELECTION_TOLERANCE &&
+                         fabs( aPntsToSelect[i].Y() - anOwnerPnt.Y() ) < LOCAL_SELECTION_TOLERANCE;
+      if( isIntersect )
       {
-        bool isIntersect = fabs( aPntsToSelect[i].X() - anOwnerPnt.X() ) < LOCAL_SELECTION_TOLERANCE &&
-                           fabs( aPntsToSelect[i].Y() - anOwnerPnt.Y() ) < LOCAL_SELECTION_TOLERANCE;
-        if( isIntersect )
-        {
-          theContext->AddOrRemoveSelected( anOwner, Standard_False );
-          break;
-        }
+        theContext->AddOrRemoveSelected( anOwner, Standard_False );
+        break;
       }
     }
   }
@@ -282,14 +278,10 @@ void CurveCreator_Utils::setSelectedPoints( Handle(AIS_InteractiveContext) theCo
 // function : setLocalPointContext
 // purpose  : Open/close the viewer local context
 //=======================================================================
-//#define USE_GLOBAL_SELECTION
-void CurveCreator_Utils::setLocalPointContext(
-                                              Handle(AIS_InteractiveContext) theContext,
-                                              const bool theOpen )
+void CurveCreator_Utils::setLocalPointContext( const CurveCreator_ICurve* theCurve,
+                                               Handle(AIS_InteractiveContext) theContext,
+                                               const bool theOpen )
 {
-#ifdef USE_GLOBAL_SELECTION
-  return;
-#endif
   if ( !theContext )
     return;
 
@@ -299,30 +291,15 @@ void CurveCreator_Utils::setLocalPointContext(
       theContext->ClearCurrents( false );
       theContext->OpenLocalContext( false/*use displayed objects*/, true/*allow shape decomposition*/ );
     }
-    AIS_ListOfInteractive aList;
-    theContext->DisplayedObjects( aList );
-    int aLSize = 0;
-    for ( AIS_ListIteratorOfListOfInteractive it( aList ); it.More(); it.Next() )
-      aLSize++;
-
-    for ( AIS_ListIteratorOfListOfInteractive it( aList ); it.More(); it.Next() )
+    // load the curve AIS object to the local context with the point selection
+    Handle(AIS_InteractiveObject) anAIS = theCurve->getAISObject();
+    if ( !anAIS.IsNull() )
     {
-      Handle(AIS_InteractiveObject) anAIS = it.Value();
-      if ( !anAIS.IsNull() )
+      if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) )
       {
-        if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) )
-        {
-          theContext->Load( anAIS, -1/*selection mode*/, true/*allow decomposition*/ );
-          //theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_WIRE ) );
-          theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) );
-        }
-        else if ( anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron) )
-        {
-          theContext->Load( anAIS, -1/*selection mode*/, false/*allow decomposition*/ );
-          theContext->Activate( anAIS, TopAbs_VERTEX );
-        }
+        theContext->Load( anAIS, -1/*selection mode*/, true/*allow decomposition*/ );
+        theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) );
       }
-      continue;
     }
   }
   else {
@@ -331,35 +308,6 @@ void CurveCreator_Utils::setLocalPointContext(
   }
 }
 
-/*bool CurveCreator_Utils::getNeighbourPoints( Handle(AIS_InteractiveContext) theContext,
-                                             Handle(V3d_View) theView,
-                                             const int theX, const int theY,
-                                             gp_Pnt& thePoint, gp_Pnt& thePoint1,
-                                             gp_Pnt& thePoint2 )
-{
-  bool isFoundPoint = false;
-  if ( theContext.IsNull() )
-    return isFoundPoint;
-
-  for ( theContext->InitSelected(); theContext->MoreSelected() && !isFoundPoint;
-        theContext->NextSelected() ) {
-    TopoDS_Shape aTShape = theContext->SelectedShape();
-    if ( !aTShape.IsNull() && aTShape.ShapeType() == TopAbs_VERTEX )
-      continue;
-    else {
-      Handle(SelectMgr_EntityOwner) anOwner = theContext->SelectedOwner();
-      if ( anOwner.IsNull() )
-        continue;
-      const TopLoc_Location& aLocation = anOwner->Location();
-      Handle(AIS_InteractiveObject) anAIS =
-                        Handle(AIS_InteractiveObject)::DownCast( anOwner->Selectable() );
-      isFoundPoint = CurveCreator_Utils::pointOnObject( theView, anAIS, theX, theY, thePoint,
-                                                        thePoint1, thePoint2 );
-    }
-  }
-  return isFoundPoint;
-}*/
-
 bool CurveCreator_Utils::pointOnObject( Handle(V3d_View) theView,
                                         Handle(AIS_InteractiveObject) theObject,
                                         const int theX, const int theY,
index 0ba0372a66613d610a832bb92fce6e31429888b8..f7691c0dd78896b9f7bdfb2391d61a2701a63b73 100644 (file)
@@ -72,6 +72,7 @@ public:
   /**
    * Find selected points in the context
    * \param theContext the viewer context
+   * \param theCurve a curve object, that contains data
    */
   CURVECREATOR_EXPORT static void getSelectedPoints( Handle(AIS_InteractiveContext) theContext,
                                          const CurveCreator_ICurve* theCurve,
@@ -80,6 +81,7 @@ public:
   /**
    * Set selected points to the context
    * \param theContext the viewer context
+   * \param theCurve a curve object, that contains data
    * \param thePoints the curve point indices to be selected in the context
    */
   CURVECREATOR_EXPORT static void setSelectedPoints(
@@ -90,29 +92,15 @@ public:
 
   /*!
    * \brief Sets the local point context for the 3D viewer.
+   * \param theCurve a curve object, that contains data
+   * \param theContext the viewer context
    * \param theOpen The flag to open or close the local context.
    */
   CURVECREATOR_EXPORT static void setLocalPointContext(
+                                        const CurveCreator_ICurve* theCurve,
                                         Handle(AIS_InteractiveContext) theContext,
                                         const bool theOpen );
 
-  /**
-   * Find the neighbour points by the clicked coordinates
-   * \param theContext the viewer context.
-   * \param theContext the V3D view.
-   * \param theX the X coordinate in the view.
-   * \param theY the Y coordinate in the view.
-   * \param thePoint the output point to be append to the model curve
-   * \param thePoint1 the output point to bound the line where a new point should be inserted
-   * \param thePoint2 the output point to bound the line where a new point should be inserted
-   */
-  /*CURVECREATOR_EXPORT static bool getNeighbourPoints(
-                                        Handle(AIS_InteractiveContext) theContext,
-                                        Handle(V3d_View) theView,
-                                        const int theX, const int theY,
-                                        gp_Pnt& thePoint, gp_Pnt& thePoint1,
-                                        gp_Pnt& thePoint2 );*/
-
   /**
    * Checks whether the point belongs to the OCC object
    * \param theObject a line or shape with a bspline inside
index 01808e2d7b7f46e60595445e385deb00702ffe8a..60a024d262c550e60cd0b7cf5e4e4bc62398a580 100644 (file)
@@ -1199,7 +1199,7 @@ void CurveCreator_Widget::updateLocalPointView()
  */
 void CurveCreator_Widget::setLocalPointContext( const bool theOpen, const bool isUpdateTable )
 {
-  CurveCreator_Utils::setLocalPointContext( getAISContext(), theOpen );
+  CurveCreator_Utils::setLocalPointContext( myCurve, getAISContext(), theOpen );
   if ( !theOpen && isUpdateTable )
     updateLocalPointView();
 }