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;
}
}
}
// 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;
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 {
}
}
-/*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,
/**
* 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,
/**
* 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(
/*!
* \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