Panda3D

collisionDSSolid.I

00001 // Filename: collisionDSSolid.I
00002 // Created by:  Dave Schuyler (05Apr06)
00003 // Based on collision tube by:  drose
00004 //
00005 ////////////////////////////////////////////////////////////////////
00006 //
00007 // PANDA 3D SOFTWARE
00008 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00009 //
00010 // All use of this software is subject to the terms of the revised BSD
00011 // license.  You should have received a copy of this license along
00012 // with this source code in a file named "LICENSE."
00013 //
00014 ////////////////////////////////////////////////////////////////////
00015 
00016 
00017 ////////////////////////////////////////////////////////////////////
00018 //     Function: Collision::Constructor
00019 //       Access: Public
00020 //  Description:
00021 ////////////////////////////////////////////////////////////////////
00022 INLINE CollisionDSSolid::
00023 CollisionDSSolid(
00024     const LPoint3f &center_a, float radius_a,
00025     const LPoint3f &center_b, float radius_b,
00026     const Planef &plane_a, const Planef &plane_b) :
00027   _center_a(center_a), _radius_a(radius_a),
00028   _center_b(center_b), _radius_b(radius_b),
00029   _plane_a(plane_a), _plane_b(plane_b),
00030   _lens_radius(0.0f)
00031 {
00032   recalc_internals();
00033   nassertv(_radius_a >= 0.0f);
00034   nassertv(_radius_b >= 0.0f);
00035 }
00036 
00037 ////////////////////////////////////////////////////////////////////
00038 //     Function: CollisionDSSolid::Constructor
00039 //       Access: Public
00040 //  Description:
00041 ////////////////////////////////////////////////////////////////////
00042 INLINE CollisionDSSolid::
00043 CollisionDSSolid(
00044     float ax, float ay, float az,
00045     float radius_a,
00046     float bx, float by, float bz,
00047     float radius_b,
00048     const Planef &plane_a, const Planef &plane_b) :
00049   _center_a(ax, ay, az), _radius_a(radius_a),
00050   _center_b(bx, by, bz), _radius_b(radius_b),
00051   _plane_a(plane_a), _plane_b(plane_b),
00052   _lens_radius(0.0f)
00053 {
00054   recalc_internals();
00055   nassertv(_radius_a >= 0.0f);
00056   nassertv(_radius_b >= 0.0f);
00057 }
00058 
00059 ////////////////////////////////////////////////////////////////////
00060 //     Function: CollisionDSSolid::Default constructor
00061 //       Access: Private
00062 //  Description: Creates an invalid tube.  Only used when reading
00063 //               from a bam file.
00064 ////////////////////////////////////////////////////////////////////
00065 INLINE CollisionDSSolid::
00066 CollisionDSSolid() {
00067 }
00068 
00069 ////////////////////////////////////////////////////////////////////
00070 //     Function: CollisionDSSolid::Copy Constructor
00071 //       Access: Public
00072 //  Description:
00073 ////////////////////////////////////////////////////////////////////
00074 INLINE CollisionDSSolid::
00075 CollisionDSSolid(const CollisionDSSolid &copy) :
00076   CollisionSolid(copy),
00077   _center_a(copy._center_a),
00078   _radius_a(copy._radius_a),
00079   _center_b(copy._center_b),
00080   _radius_b(copy._radius_b),
00081   _plane_a(copy._plane_a),
00082   _plane_b(copy._plane_b)
00083 {
00084   recalc_internals();
00085 }
00086 
00087 ////////////////////////////////////////////////////////////////////
00088 //     Function: CollisionDSSolid::set_center_a
00089 //       Access: Public
00090 //  Description:
00091 ////////////////////////////////////////////////////////////////////
00092 INLINE void CollisionDSSolid::
00093 set_center_a(const LPoint3f &a) {
00094   _center_a = a;
00095   recalc_internals();
00096 }
00097 
00098 ////////////////////////////////////////////////////////////////////
00099 //     Function: CollisionDSSolid::set_center_a
00100 //       Access: Public
00101 //  Description:
00102 ////////////////////////////////////////////////////////////////////
00103 INLINE void CollisionDSSolid::
00104 set_center_a(float x, float y, float z) {
00105   set_center_a(LPoint3f(x, y, z));
00106 }
00107 
00108 ////////////////////////////////////////////////////////////////////
00109 //     Function: CollisionDSSolid::get_center_a
00110 //       Access: Public
00111 //  Description:
00112 ////////////////////////////////////////////////////////////////////
00113 INLINE const LPoint3f &CollisionDSSolid::
00114 get_center_a() const {
00115   return _center_a;
00116 }
00117 
00118 ////////////////////////////////////////////////////////////////////
00119 //     Function: CollisionDSSolid::set_center_b
00120 //       Access: Public
00121 //  Description:
00122 ////////////////////////////////////////////////////////////////////
00123 INLINE void CollisionDSSolid::
00124 set_center_b(const LPoint3f &b) {
00125   _center_b = b;
00126   recalc_internals();
00127 }
00128 
00129 ////////////////////////////////////////////////////////////////////
00130 //     Function: CollisionDSSolid::set_center_b
00131 //       Access: Public
00132 //  Description:
00133 ////////////////////////////////////////////////////////////////////
00134 INLINE void CollisionDSSolid::
00135 set_center_b(float x, float y, float z) {
00136   set_center_b(LPoint3f(x, y, z));
00137 }
00138 
00139 ////////////////////////////////////////////////////////////////////
00140 //     Function: CollisionDSSolid::get_center_b
00141 //       Access: Public
00142 //  Description:
00143 ////////////////////////////////////////////////////////////////////
00144 INLINE const LPoint3f &CollisionDSSolid::
00145 get_center_b() const {
00146   return _center_b;
00147 }
00148 
00149 ////////////////////////////////////////////////////////////////////
00150 //     Function: CollisionDSSolid::set_radius_a
00151 //       Access: Public
00152 //  Description:
00153 ////////////////////////////////////////////////////////////////////
00154 INLINE void CollisionDSSolid::
00155 set_radius_a(float radius) {
00156   nassertv(radius >= 0.0f);
00157   _radius_a = radius;
00158 
00159   // We don't need to call recalc_internals(), since the radius
00160   // doesn't change either of those properties.
00161   mark_internal_bounds_stale();
00162   mark_viz_stale();
00163 }
00164 
00165 ////////////////////////////////////////////////////////////////////
00166 //     Function: CollisionDSSolid::get_radius_a
00167 //       Access: Public
00168 //  Description:
00169 ////////////////////////////////////////////////////////////////////
00170 INLINE float CollisionDSSolid::
00171 get_radius_a() const {
00172   return _radius_a;
00173 }
00174 
00175 ////////////////////////////////////////////////////////////////////
00176 //     Function: CollisionDSSolid::set_radius_b
00177 //       Access: Public
00178 //  Description:
00179 ////////////////////////////////////////////////////////////////////
00180 INLINE void CollisionDSSolid::
00181 set_radius_b(float radius) {
00182   nassertv(radius >= 0.0f);
00183   _radius_b = radius;
00184 
00185   // We don't need to call recalc_internals(), since the radius
00186   // doesn't change either of those properties.
00187   mark_internal_bounds_stale();
00188   mark_viz_stale();
00189 }
00190 
00191 ////////////////////////////////////////////////////////////////////
00192 //     Function: CollisionDSSolid::get_radius_b
00193 //       Access: Public
00194 //  Description:
00195 ////////////////////////////////////////////////////////////////////
00196 INLINE float CollisionDSSolid::
00197 get_radius_b() const {
00198   return _radius_b;
00199 }
00200 
00201 ////////////////////////////////////////////////////////////////////
00202 //     Function: CollisionDSSolid::get_normal_a
00203 //       Access: Published
00204 //  Description:
00205 ////////////////////////////////////////////////////////////////////
00206 INLINE LVector3f CollisionDSSolid::
00207 get_normal_a() const {
00208   return _plane_a.get_normal();
00209 }
00210 
00211 ////////////////////////////////////////////////////////////////////
00212 //     Function: CollisionDSSolid::dist_to_plane_a
00213 //       Access: Published
00214 //  Description:
00215 ////////////////////////////////////////////////////////////////////
00216 INLINE float CollisionDSSolid::
00217 dist_to_plane_a(const LPoint3f &point) const {
00218   return _plane_a.dist_to_plane(point);
00219 }
00220 
00221 ////////////////////////////////////////////////////////////////////
00222 //     Function: CollisionDSSolid::set_plane_a
00223 //       Access: Published
00224 //  Description:
00225 ////////////////////////////////////////////////////////////////////
00226 INLINE void CollisionDSSolid::
00227 set_plane_a(const Planef &plane) {
00228   _plane_a = plane;
00229   mark_internal_bounds_stale();
00230   mark_viz_stale();
00231 }
00232 
00233 ////////////////////////////////////////////////////////////////////
00234 //     Function: CollisionDSSolid::get_plane_a
00235 //       Access: Published
00236 //  Description:
00237 ////////////////////////////////////////////////////////////////////
00238 INLINE const Planef &CollisionDSSolid::
00239 get_plane_a() const {
00240   return _plane_a;
00241 }
00242 
00243 ////////////////////////////////////////////////////////////////////
00244 //     Function: CollisionDSSolid::get_normal_b
00245 //       Access: Published
00246 //  Description:
00247 ////////////////////////////////////////////////////////////////////
00248 INLINE LVector3f CollisionDSSolid::
00249 get_normal_b() const {
00250   return _plane_b.get_normal();
00251 }
00252 
00253 ////////////////////////////////////////////////////////////////////
00254 //     Function: CollisionDSSolid::dist_to_plane_b
00255 //       Access: Published
00256 //  Description:
00257 ////////////////////////////////////////////////////////////////////
00258 INLINE float CollisionDSSolid::
00259 dist_to_plane_b(const LPoint3f &point) const {
00260   return _plane_b.dist_to_plane(point);
00261 }
00262 
00263 ////////////////////////////////////////////////////////////////////
00264 //     Function: CollisionDSSolid::set_plane_b
00265 //       Access: Published
00266 //  Description:
00267 ////////////////////////////////////////////////////////////////////
00268 INLINE void CollisionDSSolid::
00269 set_plane_b(const Planef &plane) {
00270   _plane_b = plane;
00271   mark_internal_bounds_stale();
00272   mark_viz_stale();
00273 }
00274 
00275 ////////////////////////////////////////////////////////////////////
00276 //     Function: CollisionDSSolid::get_plane_b
00277 //       Access: Published
00278 //  Description:
00279 ////////////////////////////////////////////////////////////////////
00280 INLINE const Planef &CollisionDSSolid::
00281 get_plane_b() const {
00282   return _plane_b;
00283 }
00284 
00285 ////////////////////////////////////////////////////////////////////
00286 //     Function: CollisionDSSolid::get_lens_radius
00287 //       Access: Private
00288 //  Description:
00289 ////////////////////////////////////////////////////////////////////
00290 INLINE float CollisionDSSolid::
00291 get_lens_radius() const {
00292   return _lens_radius;
00293 }
00294 
 All Classes Functions Variables Enumerations