From: nds Date: Tue, 3 Dec 2013 09:15:16 +0000 (+0000) Subject: OCC functionality moving out from the widget X-Git-Tag: BR_hydro_v_0_4~85 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=4ddef4dfa7b09c497d8c2bd05557821d5fe5da81;p=modules%2Fhydro.git OCC functionality moving out from the widget --- diff --git a/src/HYDROCurveCreator/CurveCreator_Utils.cxx b/src/HYDROCurveCreator/CurveCreator_Utils.cxx index 1fa61b33..73b429b4 100644 --- a/src/HYDROCurveCreator/CurveCreator_Utils.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Utils.cxx @@ -71,6 +71,50 @@ gp_Pnt CurveCreator_Utils::ConvertClickToPoint( int x, int y, Handle(V3d_View) a return GEOMUtils::ConvertClickToPoint( x, y, aView ); } +std::list CurveCreator_Utils::getSelectedPoints( Handle(AIS_InteractiveContext) theContext ) +{ + std::list aSelectedPoints; + + gp_Pnt aPnt; + for ( theContext->InitSelected(); theContext->MoreSelected(); theContext->NextSelected() ) { + TopoDS_Vertex aVertex; + TopoDS_Shape aShape = theContext->SelectedShape(); + if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) + aVertex = TopoDS::Vertex( theContext->SelectedShape() ); + else { + Handle(SelectMgr_EntityOwner) anOwner = theContext->SelectedOwner(); + if ( !anOwner.IsNull() ) { + Handle(AIS_InteractiveObject) anAIS = Handle(AIS_InteractiveObject)::DownCast( anOwner->Selectable() ); + if ( !anAIS.IsNull() ) { + Handle(AIS_Point) aPoint = Handle(AIS_Point)::DownCast( anAIS); + if ( !aPoint.IsNull() ) + aVertex = TopoDS::Vertex( aPoint->Vertex() ); + } + if ( aVertex.IsNull() ) { + // the following happens if there are no points in the current curve, there is only a shape + /*Handle(StdSelect_BRepOwner) aBrepOwner = Handle(StdSelect_BRepOwner)::DownCast(anOwner); + if ( aBrepOwner.IsNull() ) + continue; + if ( aBrepOwner->HasShape() ) { + const TopoDS_Shape& aShape = aBrepOwner->Shape(); + if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) + { + aVertex = TopoDS::Vertex( aShape ); + } + }*/ + } + } + } + if ( aVertex.IsNull() ) + continue; + aPnt = BRep_Tool::Pnt( aVertex ); + aSelectedPoints.push_back( aPnt.X() ); + aSelectedPoints.push_back( aPnt.Y() ); + aSelectedPoints.push_back( aPnt.Z() ); + } + + return aSelectedPoints; +} //======================================================================= // function : setLocalPointContext // purpose : Open/close the viewer local context diff --git a/src/HYDROCurveCreator/CurveCreator_Utils.h b/src/HYDROCurveCreator/CurveCreator_Utils.h index c9ca6154..5415214d 100644 --- a/src/HYDROCurveCreator/CurveCreator_Utils.h +++ b/src/HYDROCurveCreator/CurveCreator_Utils.h @@ -27,6 +27,8 @@ #include #include +#include + class CurveCreator_Utils { public: @@ -52,7 +54,14 @@ public: * \retval gp_Pnt Returns the point clicked in 3D view */ CURVECREATOR_EXPORT static gp_Pnt ConvertClickToPoint( int x, int y, - Handle(V3d_View) theView ); + Handle(V3d_View) theView ); + + /** + * Find selected points in the context + * \param theContext the viewer context + */ + CURVECREATOR_EXPORT static std::list getSelectedPoints( + Handle(AIS_InteractiveContext) theContext ); /*! * \brief Sets the local point context for the 3D viewer. diff --git a/src/HYDROCurveCreator/CurveCreator_Widget.cxx b/src/HYDROCurveCreator/CurveCreator_Widget.cxx index be18c55a..16a2da79 100644 --- a/src/HYDROCurveCreator/CurveCreator_Widget.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Widget.cxx @@ -1234,42 +1234,21 @@ void CurveCreator_Widget::updateLocalPointView() if ( aContext.IsNull() ) return; + std::list aSelectedList = CurveCreator_Utils::getSelectedPoints( aContext ); + + std::list::const_iterator anIt = aSelectedList.begin(), aLast = aSelectedList.end(); + float aX, anY, aZ; + bool isBlocked = myLocalPointView->blockSignals(true); - gp_Pnt aPnt; myLocalPointView->setRowCount( 0 ); - for ( aContext->InitSelected(); aContext->MoreSelected(); aContext->NextSelected() ) { - TopoDS_Vertex aVertex; - TopoDS_Shape aShape = aContext->SelectedShape(); - if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) - aVertex = TopoDS::Vertex( aContext->SelectedShape() ); - else { - Handle(SelectMgr_EntityOwner) anOwner = aContext->SelectedOwner(); - if ( !anOwner.IsNull() ) { - Handle(AIS_InteractiveObject) anAIS = Handle(AIS_InteractiveObject)::DownCast( anOwner->Selectable() ); - if ( !anAIS.IsNull() ) { - Handle(AIS_Point) aPoint = Handle(AIS_Point)::DownCast( anAIS); - if ( !aPoint.IsNull() ) - aVertex = TopoDS::Vertex( aPoint->Vertex() ); - } - if ( aVertex.IsNull() ) { - // the following happens if there are no points in the current curve, there is only a shape - /*Handle(StdSelect_BRepOwner) aBrepOwner = Handle(StdSelect_BRepOwner)::DownCast(anOwner); - if ( aBrepOwner.IsNull() ) - continue; - if ( aBrepOwner->HasShape() ) { - const TopoDS_Shape& aShape = aBrepOwner->Shape(); - if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX ) - { - aVertex = TopoDS::Vertex( aShape ); - } - }*/ - } - } - } - if ( aVertex.IsNull() ) - continue; - aPnt = BRep_Tool::Pnt( aVertex ); - addLocalPointToTable( aPnt.X(), aPnt.Y() ); + for ( ; anIt != aLast; anIt++ ) + { + aX = *anIt; + anIt++; + anY = *anIt; + anIt++; + aZ = *anIt; + addLocalPointToTable( aX, anY ); } myLocalPointView->blockSignals(isBlocked); }