Panda3D
 All Classes Functions Variables Enumerations
collisionTube.I
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 &copy) :
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 
 All Classes Functions Variables Enumerations