From 29549853feb27513449f8ac61ac7cecf7fcd9d45 Mon Sep 17 00:00:00 2001 From: nds Date: Wed, 4 Dec 2013 16:37:10 +0000 Subject: [PATCH] Code correction. Put only the curve AIS presentation to the Local context. --- src/HYDROCurveCreator/CurveCreator_Utils.cxx | 150 ++++++------------ src/HYDROCurveCreator/CurveCreator_Utils.h | 22 +-- src/HYDROCurveCreator/CurveCreator_Widget.cxx | 2 +- 3 files changed, 55 insertions(+), 119 deletions(-) diff --git a/src/HYDROCurveCreator/CurveCreator_Utils.cxx b/src/HYDROCurveCreator/CurveCreator_Utils.cxx index 9fb21deb..1fcc4084 100644 --- a/src/HYDROCurveCreator/CurveCreator_Utils.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Utils.cxx @@ -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 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 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; iAddOrRemoveSelected( 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, diff --git a/src/HYDROCurveCreator/CurveCreator_Utils.h b/src/HYDROCurveCreator/CurveCreator_Utils.h index 0ba0372a..f7691c0d 100644 --- a/src/HYDROCurveCreator/CurveCreator_Utils.h +++ b/src/HYDROCurveCreator/CurveCreator_Utils.h @@ -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 diff --git a/src/HYDROCurveCreator/CurveCreator_Widget.cxx b/src/HYDROCurveCreator/CurveCreator_Widget.cxx index 01808e2d..60a024d2 100644 --- a/src/HYDROCurveCreator/CurveCreator_Widget.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Widget.cxx @@ -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(); } -- 2.39.2