00001 /************************************************************************* 00002 * * 00003 * Open Physics Abstraction Layer * 00004 * Copyright (C) 2004-2005 * 00005 * Alan Fischer alan.fischer@gmail.com * 00006 * Andres Reinot andres@reinot.com * 00007 * Tyler Streeter tylerstreeter@gmail.com * 00008 * All rights reserved. * 00009 * Web: opal.sourceforge.net * 00010 * * 00011 * This library is free software; you can redistribute it and/or * 00012 * modify it under the terms of EITHER: * 00013 * (1) The GNU Lesser General Public License as published by the Free * 00014 * Software Foundation; either version 2.1 of the License, or (at * 00015 * your option) any later version. The text of the GNU Lesser * 00016 * General Public License is included with this library in the * 00017 * file license-LGPL.txt. * 00018 * (2) The BSD-style license that is included with this library in * 00019 * the file license-BSD.txt. * 00020 * * 00021 * This library is distributed in the hope that it will be useful, * 00022 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00023 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files * 00024 * license-LGPL.txt and license-BSD.txt for more details. * 00025 * * 00026 *************************************************************************/ 00027 00028 #ifndef OPAL_CAPSULE_SHAPE_DATA_H 00029 #define OPAL_CAPSULE_SHAPE_DATA_H 00030 00031 #include "Defines.h" 00032 #include "ShapeData.h" 00033 00034 namespace opal 00035 { 00038 class CapsuleShapeData : public ShapeData 00039 { 00040 public: 00041 OPAL_DECL CapsuleShapeData() 00042 : ShapeData() 00043 { 00044 mType = CAPSULE_SHAPE; 00045 radius = defaults::shape::capsuleRadius; 00046 length = defaults::shape::capsuleLength; 00047 } 00048 00050 OPAL_DECL CapsuleShapeData(const CapsuleShapeData& data) 00051 { 00052 (*this) = data; 00053 } 00054 00055 OPAL_DECL virtual ~CapsuleShapeData() 00056 { 00057 } 00058 00060 OPAL_DECL virtual void OPAL_CALL operator=( 00061 const CapsuleShapeData& data) 00062 { 00063 mType = data.mType; 00064 offset = data.offset; 00065 material = data.material; 00066 contactGroup = data.contactGroup; 00067 radius = data.radius; 00068 length = data.length; 00069 } 00070 00071 OPAL_DECL virtual void OPAL_CALL getLocalAABB(real aabb[6]) 00072 { 00073 // The standard initial capsule orientation in OPAL is to 00074 // align it along the Z axis. 00075 aabb[0] = -radius; 00076 aabb[1] = radius; 00077 aabb[2] = -radius; 00078 aabb[3] = radius; 00079 aabb[4] = -(real)0.5 * length - radius; 00080 aabb[5] = (real)0.5 * length + radius; 00081 } 00082 00084 real radius; 00085 00087 real length; 00088 00089 protected: 00090 00091 private: 00092 }; 00093 } 00094 00095 #endif