24#ifndef __ODGIINTERSECTIONSCALCULATOR__
25#define __ODGIINTERSECTIONSCALCULATOR__
52 bool m_bIsPlaneCalculated;
104 inline void calculatePlaneParameters();
OdGiExtentsSpaceTree< 3, 5, 20, OdGeExtents3d, OdGePoint3d, OdGiExtentsSpaceObject > OdGiExtents3dSpaceTree
OdGiExtentsSpaceTree< 3, 5, 20, OdGeExtents3d, OdGePoint3d, OdGiTriangleForIntersectTest > OdGiExtents3dSpaceTree_Gi
OdVector< OdGiTriangleForIntersectTest, OdMemoryAllocator< OdGiTriangleForIntersectTest > > OdGiIntersectTrianglesVector
OdGiExtentsSpaceNode< OdGeExtents3d, OdGiTriangleForIntersectTest > OdGiExtents3dSpaceNode_Gi
OdVector< OdUInt32, OdMemoryAllocator< OdUInt32 > > OdUInt32Vector
#define SETBIT(flags, bit, value)
#define GETBIT(flags, bit)
@ kOption_IntersectionOnly
void computeIntersections(OdInt32 containerID, OdGeExtents3d &extents)
virtual void finalizeCalculations()
OdArray< OdGiEdgeForIntersectTest * > * intersectionEdges()
OdList< OdGiExtents3dSpaceChainPolyline * > & finalIntersectionPathes()
void setIntersectionsOnly(bool b)
void clearContainersToBeTested()
void getCollisions(OdList< OdInt32 > &result)
OdUInt32 checkPointsPlacement(const OdGeVector3d *pPlaneNormalA, double D_A, const OdGePoint3d *pPointsTriangleB, const OdGeTol &tol)
virtual bool notifyObjectPlacedAtNode(OdGiTriangleForIntersectTest *pTriang, int objectType, OdGiExtents3dSpaceNode_Gi *pNode)
double getClearance() const
bool collideTriangles(OdUInt32 idObjA, OdUInt32 trIdA, OdUInt32 idObjB, OdUInt32 trIdB, OdUInt32 idObjTested, const OdGeTol &tol)
bool getCalcDistance() const
bool isIntersectionsOnly() const
OdVector< DetectedCollision, OdMemoryAllocator< DetectedCollision > > m_vectCollidedContainers
void processPathCalculation(OdUInt32 idObjTested)
bool getCollisionDistance(OdUInt32 collisionIndex, double &result) const
virtual ~OdGiCollisionDetector()
DetectedCollision * m_vectCollidedContainersAsPtr
void removeEdgeInfo(OdInt32 objID)
void setClearance(double cl)
void setCalcDistance(bool b)
void detectCollisions(OdInt32 containerID, const OdGeExtents3d &extents)
OdArray< OdGiExtents3dSpacePoint * > * intersectionVertices()
OdGiEdgeForIntersectTest(OdGiExtents3dSpacePoint &pt1, OdGiExtents3dSpacePoint &pt2, OdUInt32 uniqueID)
OdGiExtents3dSpaceEdge(OdGiExtents3dSpacePoint &pt1, OdGiExtents3dSpacePoint &pt2, OdUInt32 uniqueID)
void intersectTriangles(OdUInt32 idObjA, OdUInt32 trIdA, OdUInt32 idObjB, OdUInt32 trIdB, OdUInt32 idObjTested, const OdGeTol &tol)
OdUInt32Vector m_vectToBeTestedObjects
OdUInt32Vector m_vectTestTriangles_objBoundary
void processTrianglesIntoSpaceTree(OdUInt32 objID, bool bOtherObjectsProcessed)
OdList< OdGiExtents3dSpaceChainPolyline * > m_finalIntersectPathes
virtual ~OdGiIntersectionsCalculator()
void computeIntersections(OdInt32 containerID, OdGeExtents3d &extents)
bool m_bSecondObjectProcessedInTree
const OdGeTol & tolerance() const
OdArray< OdGiExtents3dSpacePoint * > * m_intersectVertices
virtual bool notifyObjectPlacedAtNode(OdGiTriangleForIntersectTest *pTriang, int objectType, OdGiExtents3dSpaceNode_Gi *pNode)
void intermediatefinalizeCalculations()
OdGiExtents3dSpaceTree_Gi m_spaceTriangTree
OdArray< OdGiEdgeForIntersectTest * > * m_intersectEdges
OdVector< bool, OdMemoryAllocator< bool > > m_vectTestedTriangles
bool getSpaceTreeRootExtents(OdGeExtents3d &ext)
OdInt32 addContainerToBeTested(OdInt32 containerID)
OdUInt32 containerToBeTestedSize() const
OdGiExtents3dSpaceTree m_spaceVertexTree
virtual void initializeCalculations(OdGeExtents3d &ext, OdInt32 nObjects)
virtual void finalizeCalculations()
void removeEdgeInfo(OdInt32 objID)
OdUInt32 triangleContainerSize() const
OdInt32 appendTriangleContainer(OdGiIntersectTrianglesVector *pContainer)
OdArray< OdGiEdgeForIntersectTest * > * intersectionEdges()
OdArray< OdGiExtents3dSpacePoint * > * intersectionVertices()
OdList< OdGiExtents3dSpaceChainPolyline * > & finalIntersectionPathes()
void setTolerance(const OdGeTol &tol)
OdGiIntersectionsCalculator()
OdInt32 addTriangleToContainer(OdInt32 containerID, const OdGePoint3d *pTriangle)
OdVector< OdGiIntersectTrianglesVector * > m_containerTriangles
void processPathCalculation(OdUInt32 idObjTested)
bool isEqual(OdGiTriangleForIntersectTest *pObject, const OdGeTol &tol=OdGeContext::gTol) const
bool isInExtents(OdGeExtents2d &extents) const
OdGiTriangleForIntersectTest()
void rewriteExtents(const OdGeExtents3d &extents)
friend class OdGiIntersectionsCalculator
bool isInExtents(OdGeExtents3d &extents) const
void setData(const OdGePoint3d *points, bool bCalcExtents=true)
friend class OdGiCollisionDetector
OdGiTriangleForIntersectTest(const OdGePoint3d *points, OdUInt32 uniqueID)
const OdGeVector3d * getTrianglePlaneNorm()
void setID(OdUInt32 uniqueID)
friend class OdGiCollisionDetectorIntersectionsOnly
static GE_STATIC_EXPORT OdGeTol gTol
DetectedCollision & operator=(bool b)