Version: 9.14.0
INTERP_KERNEL::EdgeIntersector Class Referenceabstract
Inheritance diagram for INTERP_KERNEL::EdgeIntersector:
Collaboration diagram for INTERP_KERNEL::EdgeIntersector:

Public Member Functions

virtual bool areColinears () const =0
 
virtual void areOverlappedOrOnlyColinears (bool &obviousNoIntersection, bool &areOverlapped)=0
 
virtual std::list< IntersectElementgetIntersectionsCharacteristicVal () const =0
 
virtual void getPlacements (Node *start, Node *end, TypeOfLocInEdge &whereStart, TypeOfLocInEdge &whereEnd, MergePoints &commonNode) const =0
 
virtual bool haveTheySameDirection () const =0
 
bool intersect (std::vector< Node * > &newNodes, bool &order, MergePoints &commonNode)
 
virtual bool keepOrder () const =0
 
virtual ~EdgeIntersector ()
 

Protected Member Functions

 EdgeIntersector (const Edge &e1, const Edge &e2)
 
virtual void identifyEarlyIntersection (bool &, bool &, bool &, bool &)
 
void obviousCaseForCurvAbscisse (Node *node, TypeOfLocInEdge &where, MergePoints &commonNode, bool &obvious) const
 

Protected Attributes

const Edge_e1
 
const Edge_e2
 
IntersectElement_earlyInter
 

Detailed Description

This abstract interface specifies all the methods to be overloaded of all possibilities edge-intersection.

Constructor & Destructor Documentation

◆ EdgeIntersector()

INTERP_KERNEL::EdgeIntersector::EdgeIntersector ( const Edge e1,
const Edge e2 
)
protected

All non symmetric methods are relative to 'e1'.

◆ ~EdgeIntersector()

virtual INTERP_KERNEL::EdgeIntersector::~EdgeIntersector ( )
virtual

Member Function Documentation

◆ keepOrder()

virtual bool INTERP_KERNEL::EdgeIntersector::keepOrder ( ) const
pure virtual

◆ areColinears()

virtual bool INTERP_KERNEL::EdgeIntersector::areColinears ( ) const
pure virtual

◆ haveTheySameDirection()

virtual bool INTERP_KERNEL::EdgeIntersector::haveTheySameDirection ( ) const
pure virtual

to call only if 'areOverlapped' have been set to true when areOverlappedOrOnlyColinears was called

Implemented in INTERP_KERNEL::SegSegIntersector, INTERP_KERNEL::ArcCArcCIntersector, and INTERP_KERNEL::CrossTypeEdgeIntersector.

Referenced by INTERP_KERNEL::Edge::IntersectOverlapped().

◆ getPlacements()

virtual void INTERP_KERNEL::EdgeIntersector::getPlacements ( Node start,
Node end,
TypeOfLocInEdge whereStart,
TypeOfLocInEdge whereEnd,
MergePoints commonNode 
) const
pure virtual

to call only if 'areOverlapped' have been set to true when areOverlappedOrOnlyColinears was called

Implemented in INTERP_KERNEL::SegSegIntersector, INTERP_KERNEL::ArcCSegIntersector, and INTERP_KERNEL::ArcCArcCIntersector.

Referenced by INTERP_KERNEL::Edge::IntersectOverlapped().

◆ intersect()

bool EdgeIntersector::intersect ( std::vector< Node * > &  newNodes,
bool &  order,
MergePoints commonNode 
)

When true is returned, newNodes should contains at least 1 element. All merging nodes betw _e1 and _e2 extremities must be done.

References getIntersectionsCharacteristicVal(), INTERP_KERNEL::IntersectElement::LIMIT_ALONE, and INTERP_KERNEL::IntersectElement::LIMIT_ON.

Referenced by INTERP_KERNEL::Edge::Intersect().

◆ areOverlappedOrOnlyColinears()

virtual void INTERP_KERNEL::EdgeIntersector::areOverlappedOrOnlyColinears ( bool &  obviousNoIntersection,
bool &  areOverlapped 
)
pure virtual

◆ getIntersectionsCharacteristicVal()

virtual std::list<IntersectElement> INTERP_KERNEL::EdgeIntersector::getIntersectionsCharacteristicVal ( ) const
pure virtual

The size of returned vector is equal to number of potential intersections point. The values are so that their are interpretable by virtual Edge::isIn method.

Implemented in INTERP_KERNEL::SegSegIntersector, INTERP_KERNEL::ArcCSegIntersector, and INTERP_KERNEL::ArcCArcCIntersector.

Referenced by intersect().

◆ obviousCaseForCurvAbscisse()

void EdgeIntersector::obviousCaseForCurvAbscisse ( Node node,
TypeOfLocInEdge where,
MergePoints commonNode,
bool &  obvious 
) const
protected

Locates 'node' regarding edge this->_e1. If node is located close to (with distant lt epsilon) start or end point of _e1, 'node' takes its place. In this case 'obvious' is set to true and 'commonNode' stores information of merge point and finally 'where' is set. Furthermore 'node' is declared as ON LIMIT to indicate in locating process that an absolute location computation will have to be done. If 'node' is not close to start or end point of _e1, 'obvious' is set to false and 'commonNode' and 'where' are let unchanged.

References _e1, INTERP_KERNEL::Edge::changeEndNodeWith(), INTERP_KERNEL::Edge::changeStartNodeWith(), INTERP_KERNEL::Node::declareOnLim(), INTERP_KERNEL::END, INTERP_KERNEL::MergePoints::end1Replaced(), INTERP_KERNEL::Edge::getEndNode(), INTERP_KERNEL::Edge::getStartNode(), INTERP_KERNEL::Node::isEqual(), INTERP_KERNEL::START, and INTERP_KERNEL::MergePoints::start1Replaced().

Referenced by INTERP_KERNEL::ArcCArcCIntersector::getPlacements().

◆ identifyEarlyIntersection()

void EdgeIntersector::identifyEarlyIntersection ( bool &  i1S2S,
bool &  i1E2S,
bool &  i1S2E,
bool &  i1E2E 
)
protectedvirtual

If the 2 edges share one extremity, we can optimize since we already know where is the intersection. In the case of ArcCSegIntersector, this also helps avoid degenerated cases.

References _e1, _e2, _earlyInter, INTERP_KERNEL::Edge::getCharactValue(), INTERP_KERNEL::Edge::getEndNode(), INTERP_KERNEL::Edge::getStartNode(), INTERP_KERNEL::Node::incrRef(), and keepOrder().

Referenced by INTERP_KERNEL::ArcCSegIntersector::areOverlappedOrOnlyColinears(), and INTERP_KERNEL::SegSegIntersector::areOverlappedOrOnlyColinears().

Member Data Documentation

◆ _e1

◆ _e2

◆ _earlyInter