thePoints.push_back( std::make_pair( getSectionId( i ), getPointId( i ) ) );
}
+
+bool CurveCreator_Widget::isIntersectVertexToPoint( const TopoDS_Vertex& theVertex,
+ const CurveCreator_ICurve::SectionToPoint& theSToPoint )
+{
+ bool isIntersect = false;
+
+ if ( theVertex.IsNull() )
+ return isIntersect;
+
+ gp_Pnt aPnt = BRep_Tool::Pnt( theVertex );
+
+ CurveCreator_ICurve::SectionToPointList aPoints;
+ findSectionsToPoints( aPnt.X(), aPnt.Y(), aPoints );
+
+ CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints.begin(),
+ aLast = aPoints.end();
+ CurveCreator_ICurve::SectionToPoint aPoint;
+ for ( ; anIt != aLast && !isIntersect; anIt++ ) {
+ aPoint = *anIt;
+ isIntersect = aPoint.first == theSToPoint.first && aPoint.second == theSToPoint.second;
+ }
+
+ return isIntersect;
+}
+
+
void CurveCreator_Widget::setSelectedPonts( const CurveCreator_ICurve::SectionToPointList& thePoints )
{
if ( myDragStarted )
AIS_ListOfInteractive aDisplayedList;
ic->DisplayedObjects( aDisplayedList );
+ ic->ClearSelected( Standard_False );
CurveCreator_ICurve::SectionToPointList::const_iterator anIt = thePoints.begin(),
aLast = thePoints.end();
CurveCreator_ICurve::SectionToPoint aSToPoint;
+ bool isSelectedVertex = false;
for( ; anIt != aLast; anIt++ ) {
aSToPoint = *anIt;
if ( anAIS.IsNull() )
continue;
Handle(AIS_Point) anAISPoint = Handle(AIS_Point)::DownCast( anAIS );
- if ( anAISPoint.IsNull() )
- continue;
-
- TopoDS_Vertex aVertex = TopoDS::Vertex( anAISPoint->Vertex() );
-
- if ( aVertex.IsNull() )
- continue;
-
- gp_Pnt aPnt = BRep_Tool::Pnt( aVertex );
-
- CurveCreator_ICurve::SectionToPointList aPoints;
- findSectionsToPoints( aPnt.X(), aPnt.Y(), aPoints );
-
- CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints.begin(),
- aLast = aPoints.end();
- CurveCreator_ICurve::SectionToPoint aPoint;
- for ( ; anIt != aLast; anIt++ ) {
- aPoint = *anIt;
- if ( aPoint.first == aSToPoint.first && aPoint.second == aSToPoint.second )
+ if ( !anAISPoint.IsNull() ) {
+ TopoDS_Vertex aVertex = TopoDS::Vertex( anAISPoint->Vertex() );
+ if ( isIntersectVertexToPoint( aVertex, aSToPoint ) )
aListToSelect.Append( anAIS );
}
+ else {
+ Handle(AIS_Shape) anAISShape = Handle(AIS_Shape)::DownCast( anAIS );
+ if ( anAISShape.IsNull() )
+ continue;
+ const TopoDS_Shape& aShape = anAISShape->Shape();
+ TopExp_Explorer aExpV( aShape, TopAbs_VERTEX);
+ for ( ; aExpV.More(); aExpV.Next() )
+ {
+ const TopoDS_Vertex& aVertex = TopoDS::Vertex( aExpV.Current() );
+ if ( isIntersectVertexToPoint( aVertex, aSToPoint ) ) {
+ ic->AddOrRemoveSelected( aVertex, Standard_False );
+ isSelectedVertex = true;
+ }
+ }
+ }
}
}
- if ( thePoints.size() > 0 && aListToSelect.First() == aListToSelect.Last() ) {
- /*TopExp_Explorer aExpF(myShape,TopAbs_FACE);
- for (; aExpF.More(); aExpF.Next())
- {
- const TopoDS_Face& aFace = TopoDS::Face(aExpF.Current());
- }*/
- }
-
-
- ic->ClearSelected( Standard_False );
- setObjectsSelected( aListToSelect );
+ ic->UpdateCurrentViewer();
+ if ( !isSelectedVertex )
+ setObjectsSelected( aListToSelect );
updateLocalPointView();
}