VR-Forces 4.0.4 Class Documentation
include/bhaveSim/pieIntersector.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2009 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 
00006 
00007 #pragma once
00008 
00009 #include "bhaveSim/kynapseCollisionTests.h"
00010 #include "kypathdata/navmesh/navmeshtypes.h"
00011 #include "kypathdata/generic/memory.h"
00012 #include "kypathdata/math/vec3f.h"
00013 #include "kypathdata/navmesh/closestpoint.h"
00014 
00015 #include "bhaveSim/pieCollisionQuery.h"
00016 
00017 namespace BHAVE
00018 {
00019 
00020 /*
00021 class PieIntersector
00022 */
00023 class DtPieIntersector
00024 {
00025    KY_DEFINE_NEW_DELETE_OPERATORS
00026 
00027 public:
00028    DtPieIntersector(const DtPieCollisionQuery& query, const Kaim::ActiveNavCellGrid& activeNavCellGrid, KyFloat32 startingRadian, KyFloat32 endingRadian) :
00029       m_integerPrecision(activeNavCellGrid.m_integerPrecision),
00030     myStartingRadian(startingRadian), myEndingRadian(endingRadian), 
00031     m_center3f(query.m_centerPos3f), m_radius(query.m_radius) {}
00032 
00033    KY_FORCE_INLINE bool DoesIntersectEdge(const Kaim::CoordPos64& startEdgeCoordPos, const Kaim::CoordPos64& endEdgeCoordPos)
00034    {
00035       const Kaim::Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
00036       const Kaim::Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
00037 
00038       return SegmentVsPie2d(startEdgePos, endEdgePos, m_center3f, m_radius, myStartingRadian, myEndingRadian);
00039    }
00040 
00041    KY_FORCE_INLINE void ComputeCollisionPosOnEdge(const Kaim::CoordPos64& startEdgeCoordPos, const Kaim::CoordPos64& endEdgeCoordPos, Kaim::Vec3f& collisionPos, KyFloat32& squareDistToCollisionPos)
00042    {
00043       const Kaim::Vec3f startEdgePos(startEdgeCoordPos.x * m_integerPrecision, startEdgeCoordPos.y * m_integerPrecision, 0.f);
00044       const Kaim::Vec3f endEdgePos(endEdgeCoordPos.x * m_integerPrecision, endEdgeCoordPos.y * m_integerPrecision, 0.f);
00045 
00046       Kaim::ClosestPoint::OnSegmentVsPoint2d(startEdgePos, endEdgePos, m_center3f, collisionPos, squareDistToCollisionPos);
00047    }
00048 
00049    KY_FORCE_INLINE void ComputeTriangleCost(const Kaim::CoordPos64& v0CoordPos, const Kaim::CoordPos64& v1CoordPos, const Kaim::CoordPos64& v2CoordPos, KyFloat32& cost)
00050    {
00051       const Kaim::Vec3f v0(v0CoordPos.x * m_integerPrecision, v0CoordPos.y * m_integerPrecision, 0.f);
00052       const Kaim::Vec3f v1(v1CoordPos.x * m_integerPrecision, v1CoordPos.y * m_integerPrecision, 0.f);
00053       const Kaim::Vec3f v2(v2CoordPos.x * m_integerPrecision, v2CoordPos.y * m_integerPrecision, 0.f);
00054 
00055       Kaim::Vec3f unused;
00056       Kaim::ClosestPoint::OnTriangleVsPoint2d(v0, v1, v2, m_center3f, unused, cost);
00057    }
00058 
00059 private:
00060    KyFloat32 m_integerPrecision;
00061 
00062    Kaim::Vec3f m_center3f;
00063    KyFloat32 myStartingRadian;
00064    KyFloat32 myEndingRadian;
00065 
00066    KyFloat32 m_radius;
00067 };
00068 
00069 }
00070 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)