Version: 5.1.6

INTERP_KERNEL.EdgeIntersector Class Reference

#include <InterpKernelGeo2DEdge.hxx>

Inheritance diagram for INTERP_KERNEL.EdgeIntersector:
Inheritance graph

Public Member Functions

virtual ~EdgeIntersector ()
virtual bool keepOrder () const =0
virtual bool haveTheySameDirection () const =0
 to call only if 'areOverlapped' have been set to true when areOverlappedOrOnlyColinears was called
virtual void getPlacements (Node *start, Node *end, TypeOfLocInEdge &whereStart, TypeOfLocInEdge &whereEnd, MergePoints &commonNode) const =0
 to call only if 'areOverlapped' have been set to true when areOverlappedOrOnlyColinears was called
bool intersect (const Bounds *whereToFind, 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.
virtual void areOverlappedOrOnlyColinears (const Bounds *whereToFind, bool &obviousNoIntersection, bool &areOverlapped)=0
 Should be called only once per association.
virtual std::list
< IntersectElement
getIntersectionsCharacteristicVal () const =0
 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.

Protected Member Functions

 EdgeIntersector (const Edge &e1, const Edge &e2)
 All non symetric methods are relative to 'e1'.
void obviousCaseForCurvAbscisse (Node *node, TypeOfLocInEdge &where, MergePoints &commonNode, bool &obvious) const

Protected Attributes

const Edge_e1
const Edge_e2

Detailed Description

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


Constructor & Destructor Documentation

INTERP_KERNEL.EdgeIntersector.EdgeIntersector ( const Edge e1,
const Edge e2 
) [protected]

All non symetric methods are relative to 'e1'.

virtual INTERP_KERNEL.EdgeIntersector.~EdgeIntersector (  )  [virtual]

Member Function Documentation

virtual bool INTERP_KERNEL.EdgeIntersector.keepOrder (  )  const [pure virtual]
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.CrossTypeEdgeIntersector, INTERP_KERNEL.ArcCArcCIntersector, and INTERP_KERNEL.SegSegIntersector.

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.ArcCArcCIntersector, INTERP_KERNEL.ArcCSegIntersector, and INTERP_KERNEL.SegSegIntersector.

bool EdgeIntersector::intersect ( const Bounds whereToFind,
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 INTERP_KERNEL.EdgeIntersector.getIntersectionsCharacteristicVal(), INTERP_KERNEL.IntersectElement.LIMIT_ALONE, and INTERP_KERNEL.IntersectElement.LIMIT_ON.

virtual void INTERP_KERNEL.EdgeIntersector.areOverlappedOrOnlyColinears ( const Bounds whereToFind,
bool &  obviousNoIntersection,
bool &  areOverlapped 
) [pure virtual]

Should be called only once per association.

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

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.ArcCArcCIntersector, INTERP_KERNEL.ArcCSegIntersector, and INTERP_KERNEL.SegSegIntersector.

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 INTERP_KERNEL.EdgeIntersector._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().


Field Documentation