VR-Forces 4.2 Class Documentation
pieIntersector.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2009 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 
7 #pragma once
8 
10 #include "kypathdata/navmesh/navmeshtypes.h"
11 #include "kypathdata/generic/memory.h"
12 #include "kypathdata/math/vec3f.h"
13 #include "kypathdata/navmesh/closestpoint.h"
14 
16 
17 namespace BHAVE
18 {
19 
20 /*
21 class PieIntersector
22 */
24 {
25  KY_DEFINE_NEW_DELETE_OPERATORS
26 
27 public:
28  DtPieIntersector(const DtPieCollisionQuery& query, const Kaim::ActiveNavCellGrid& activeNavCellGrid, KyFloat32 startingRadian, KyFloat32 endingRadian) :
29  m_integerPrecision(activeNavCellGrid.m_integerPrecision),
30  myStartingRadian(startingRadian), myEndingRadian(endingRadian),
31  m_center3f(query.m_centerPos3f), m_radius(query.m_radius) {}
32 
33  KY_FORCE_INLINE bool DoesIntersectEdge(const Kaim::CoordPos64& startEdgeCoordPos, const Kaim::CoordPos64& endEdgeCoordPos)
34  {
35  const Kaim::Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
36  const Kaim::Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
37 
38  return SegmentVsPie2d(startEdgePos, endEdgePos, m_center3f, m_radius, myStartingRadian, myEndingRadian);
39  }
40 
41  KY_FORCE_INLINE void ComputeCollisionPosOnEdge(const Kaim::CoordPos64& startEdgeCoordPos, const Kaim::CoordPos64& endEdgeCoordPos, Kaim::Vec3f& collisionPos, KyFloat32& squareDistToCollisionPos)
42  {
43  const Kaim::Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
44  const Kaim::Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
45 
46  Kaim::ClosestPoint::OnSegmentVsPoint2d(startEdgePos, endEdgePos, m_center3f, collisionPos, squareDistToCollisionPos);
47  }
48 
49  KY_FORCE_INLINE void ComputeTriangleCost(const Kaim::CoordPos64& v0CoordPos, const Kaim::CoordPos64& v1CoordPos, const Kaim::CoordPos64& v2CoordPos, KyFloat32& cost)
50  {
51  const Kaim::Vec3f v0(v0CoordPos.x * m_integerPrecision, v0CoordPos.y * m_integerPrecision, 0.f);
52  const Kaim::Vec3f v1(v1CoordPos.x * m_integerPrecision, v1CoordPos.y * m_integerPrecision, 0.f);
53  const Kaim::Vec3f v2(v2CoordPos.x * m_integerPrecision, v2CoordPos.y * m_integerPrecision, 0.f);
54 
55  Kaim::Vec3f unused;
56  Kaim::ClosestPoint::OnTriangleVsPoint2d(v0, v1, v2, m_center3f, unused, cost);
57  }
58 
59 private:
60  KyFloat32 m_integerPrecision;
61 
62  Kaim::Vec3f m_center3f;
63  KyFloat32 myStartingRadian;
64  KyFloat32 myEndingRadian;
65 
66  KyFloat32 m_radius;
67 };
68 
69 }
70 

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)