VR-Forces 4.3.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
18 namespace BHAVE
19 {
20 
21 /*
22 class PieIntersector
23 */
25 {
26  KY_DEFINE_NEW_DELETE_OPERATORS
27 
28 public:
29  DtPieIntersector(const DtPieCollisionQuery& query, const Kaim::ActiveNavCellGrid& activeNavCellGrid, KyFloat32 startingRadian, KyFloat32 endingRadian) :
30  m_integerPrecision(activeNavCellGrid.m_integerPrecision),
31  myStartingRadian(startingRadian), myEndingRadian(endingRadian),
32  m_center3f(query.m_centerPos3f), m_radius(query.m_radius) {}
33 
34  KY_FORCE_INLINE bool DoesIntersectEdge(const Kaim::CoordPos64& startEdgeCoordPos, const Kaim::CoordPos64& endEdgeCoordPos)
35  {
36  const Kaim::Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
37  const Kaim::Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
38 
39  return SegmentVsPie2d(startEdgePos, endEdgePos, m_center3f, m_radius, myStartingRadian, myEndingRadian);
40  }
41 
42  KY_FORCE_INLINE void ComputeCollisionPosOnEdge(const Kaim::CoordPos64& startEdgeCoordPos, const Kaim::CoordPos64& endEdgeCoordPos, Kaim::Vec3f& collisionPos, KyFloat32& squareDistToCollisionPos)
43  {
44  const Kaim::Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
45  const Kaim::Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
46 
47  Kaim::ClosestPoint::OnSegmentVsPoint2d(startEdgePos, endEdgePos, m_center3f, collisionPos, squareDistToCollisionPos);
48  }
49 
50  KY_FORCE_INLINE void ComputeTriangleCost(const Kaim::CoordPos64& v0CoordPos, const Kaim::CoordPos64& v1CoordPos, const Kaim::CoordPos64& v2CoordPos, KyFloat32& cost)
51  {
52  const Kaim::Vec3f v0(v0CoordPos.x * m_integerPrecision, v0CoordPos.y * m_integerPrecision, 0.f);
53  const Kaim::Vec3f v1(v1CoordPos.x * m_integerPrecision, v1CoordPos.y * m_integerPrecision, 0.f);
54  const Kaim::Vec3f v2(v2CoordPos.x * m_integerPrecision, v2CoordPos.y * m_integerPrecision, 0.f);
55 
56  Kaim::Vec3f unused;
57  Kaim::ClosestPoint::OnTriangleVsPoint2d(v0, v1, v2, m_center3f, unused, cost);
58  }
59 
60 private:
61  KyFloat32 m_integerPrecision;
62 
63  Kaim::Vec3f m_center3f;
64  KyFloat32 myStartingRadian;
65  KyFloat32 myEndingRadian;
66 
67  KyFloat32 m_radius;
68 };
69 
70 }
71 

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)