Panda3D
|
00001 // Filename: collisionTube.I 00002 // Created by: drose (25Sep03) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 00016 //////////////////////////////////////////////////////////////////// 00017 // Function: CollisionTube::Constructor 00018 // Access: Public 00019 // Description: 00020 //////////////////////////////////////////////////////////////////// 00021 INLINE CollisionTube:: 00022 CollisionTube(const LPoint3 &a, const LPoint3 &b, PN_stdfloat radius) : 00023 _a(a), _b(b), _radius(radius) 00024 { 00025 recalc_internals(); 00026 nassertv(_radius >= 0.0f); 00027 } 00028 00029 //////////////////////////////////////////////////////////////////// 00030 // Function: CollisionTube::Constructor 00031 // Access: Public 00032 // Description: 00033 //////////////////////////////////////////////////////////////////// 00034 INLINE CollisionTube:: 00035 CollisionTube(PN_stdfloat ax, PN_stdfloat ay, PN_stdfloat az, 00036 PN_stdfloat bx, PN_stdfloat by, PN_stdfloat bz, 00037 PN_stdfloat radius) : 00038 _a(ax, ay, az), _b(bx, by, bz), _radius(radius) 00039 { 00040 recalc_internals(); 00041 nassertv(_radius >= 0.0f); 00042 } 00043 00044 //////////////////////////////////////////////////////////////////// 00045 // Function: CollisionTube::Default constructor 00046 // Access: Private 00047 // Description: Creates an invalid tube. Only used when reading 00048 // from a bam file. 00049 //////////////////////////////////////////////////////////////////// 00050 INLINE CollisionTube:: 00051 CollisionTube() { 00052 } 00053 00054 //////////////////////////////////////////////////////////////////// 00055 // Function: CollisionTube::Copy Constructor 00056 // Access: Public 00057 // Description: 00058 //////////////////////////////////////////////////////////////////// 00059 INLINE CollisionTube:: 00060 CollisionTube(const CollisionTube ©) : 00061 CollisionSolid(copy), 00062 _a(copy._a), 00063 _b(copy._b), 00064 _radius(copy._radius) 00065 { 00066 recalc_internals(); 00067 } 00068 00069 //////////////////////////////////////////////////////////////////// 00070 // Function: CollisionTube::flush_level 00071 // Access: Public, Static 00072 // Description: Flushes the PStatCollectors used during traversal. 00073 //////////////////////////////////////////////////////////////////// 00074 INLINE void CollisionTube:: 00075 flush_level() { 00076 _volume_pcollector.flush_level(); 00077 _test_pcollector.flush_level(); 00078 } 00079 00080 //////////////////////////////////////////////////////////////////// 00081 // Function: CollisionTube::set_point_a 00082 // Access: Published 00083 // Description: 00084 //////////////////////////////////////////////////////////////////// 00085 INLINE void CollisionTube:: 00086 set_point_a(const LPoint3 &a) { 00087 _a = a; 00088 recalc_internals(); 00089 } 00090 00091 //////////////////////////////////////////////////////////////////// 00092 // Function: CollisionTube::set_point_a 00093 // Access: Published 00094 // Description: 00095 //////////////////////////////////////////////////////////////////// 00096 INLINE void CollisionTube:: 00097 set_point_a(PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) { 00098 set_point_a(LPoint3(x, y, z)); 00099 } 00100 00101 //////////////////////////////////////////////////////////////////// 00102 // Function: CollisionTube::get_point_a 00103 // Access: Published 00104 // Description: 00105 //////////////////////////////////////////////////////////////////// 00106 INLINE const LPoint3 &CollisionTube:: 00107 get_point_a() const { 00108 return _a; 00109 } 00110 00111 //////////////////////////////////////////////////////////////////// 00112 // Function: CollisionTube::set_point_b 00113 // Access: Published 00114 // Description: 00115 //////////////////////////////////////////////////////////////////// 00116 INLINE void CollisionTube:: 00117 set_point_b(const LPoint3 &b) { 00118 _b = b; 00119 recalc_internals(); 00120 } 00121 00122 //////////////////////////////////////////////////////////////////// 00123 // Function: CollisionTube::set_point_b 00124 // Access: Published 00125 // Description: 00126 //////////////////////////////////////////////////////////////////// 00127 INLINE void CollisionTube:: 00128 set_point_b(PN_stdfloat x, PN_stdfloat y, PN_stdfloat z) { 00129 set_point_b(LPoint3(x, y, z)); 00130 } 00131 00132 //////////////////////////////////////////////////////////////////// 00133 // Function: CollisionTube::get_point_b 00134 // Access: Published 00135 // Description: 00136 //////////////////////////////////////////////////////////////////// 00137 INLINE const LPoint3 &CollisionTube:: 00138 get_point_b() const { 00139 return _b; 00140 } 00141 00142 //////////////////////////////////////////////////////////////////// 00143 // Function: CollisionTube::set_radius 00144 // Access: Published 00145 // Description: 00146 //////////////////////////////////////////////////////////////////// 00147 INLINE void CollisionTube:: 00148 set_radius(PN_stdfloat radius) { 00149 nassertv(radius >= 0.0f); 00150 _radius = radius; 00151 00152 // We don't need to call recalc_internals(), since the radius 00153 // doesn't change either of those properties. 00154 mark_internal_bounds_stale(); 00155 mark_viz_stale(); 00156 } 00157 00158 //////////////////////////////////////////////////////////////////// 00159 // Function: CollisionTube::get_radius 00160 // Access: Published 00161 // Description: 00162 //////////////////////////////////////////////////////////////////// 00163 INLINE PN_stdfloat CollisionTube:: 00164 get_radius() const { 00165 return _radius; 00166 } 00167