Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

panda/src/collide/collisionPolygon.h

Go to the documentation of this file.
00001 // Filename: collisionPolygon.h
00002 // Created by:  drose (25Apr00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) 2001, Disney Enterprises, Inc.  All rights reserved
00008 //
00009 // All use of this software is subject to the terms of the Panda 3d
00010 // Software license.  You should have received a copy of this license
00011 // along with this source code; you will also find a current copy of
00012 // the license at http://www.panda3d.org/license.txt .
00013 //
00014 // To contact the maintainers of this program write to
00015 // panda3d@yahoogroups.com .
00016 //
00017 ////////////////////////////////////////////////////////////////////
00018 
00019 #ifndef COLLISIONPOLYGON_H
00020 #define COLLISIONPOLYGON_H
00021 
00022 #include <pandabase.h>
00023 
00024 #include "collisionPlane.h"
00025 
00026 #include <vector_LPoint2f.h>
00027 
00028 ///////////////////////////////////////////////////////////////////
00029 //       Class : CollisionPolygon
00030 // Description :
00031 ////////////////////////////////////////////////////////////////////
00032 class EXPCL_PANDA CollisionPolygon : public CollisionPlane {
00033 PUBLISHED:
00034   INLINE CollisionPolygon(const LPoint3f &a, const LPoint3f &b,
00035                           const LPoint3f &c);
00036   INLINE CollisionPolygon(const LPoint3f &a, const LPoint3f &b,
00037                           const LPoint3f &c, const LPoint3f &d);
00038   INLINE CollisionPolygon(const LPoint3f *begin, const LPoint3f *end);
00039 
00040 public:
00041   CollisionPolygon(const CollisionPolygon &copy);
00042 
00043   virtual CollisionSolid *make_copy();
00044 
00045   INLINE static bool verify_points(const LPoint3f &a, const LPoint3f &b,
00046                                    const LPoint3f &c);
00047   INLINE static bool verify_points(const LPoint3f &a, const LPoint3f &b,
00048                                    const LPoint3f &c, const LPoint3f &d);
00049   static bool verify_points(const LPoint3f *begin, const LPoint3f *end);
00050 
00051 
00052   virtual void xform(const LMatrix4f &mat);
00053   virtual LPoint3f get_collision_origin() const;
00054 
00055   virtual void output(ostream &out) const;
00056 
00057 protected:
00058   INLINE CollisionPolygon(void);
00059   virtual BoundingVolume *recompute_bound();
00060 
00061 protected:
00062   virtual PT(CollisionEntry)
00063   test_intersection_from_sphere(const CollisionEntry &entry) const;
00064   virtual PT(CollisionEntry)
00065   test_intersection_from_ray(const CollisionEntry &entry) const;
00066   virtual PT(CollisionEntry)
00067   test_intersection_from_segment(const CollisionEntry &entry) const;
00068 
00069   virtual void fill_viz_geom();
00070 
00071 private:
00072   bool is_inside(const LPoint2f &p) const;
00073   bool is_concave() const;
00074 
00075   void setup_points(const LPoint3f *begin, const LPoint3f *end);
00076   LPoint2f to_2d(const LPoint3f &point3d) const;
00077   LPoint3f to_3d(const LPoint2f &point2d) const;
00078 
00079 private:
00080   typedef vector_LPoint2f Points;
00081   Points _points;
00082   LPoint2f _median;
00083 
00084   enum AxisType {
00085     AT_x, AT_y, AT_z
00086   };
00087   AxisType _axis;
00088   bool _reversed;
00089 
00090 public:
00091   static void register_with_read_factory(void);
00092   virtual void write_datagram(BamWriter* manager, Datagram &me);
00093 
00094   static TypedWritable *make_CollisionPolygon(const FactoryParams &params);
00095 
00096 protected:
00097   void fillin(DatagramIterator& scan, BamReader* manager);
00098 
00099 public:
00100   static TypeHandle get_class_type() {
00101     return _type_handle;
00102   }
00103   static void init_type() {
00104     CollisionPlane::init_type();
00105     register_type(_type_handle, "CollisionPolygon",
00106                   CollisionPlane::get_class_type());
00107   }
00108   virtual TypeHandle get_type() const {
00109     return get_class_type();
00110   }
00111   virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00112 
00113 private:
00114   static TypeHandle _type_handle;
00115 };
00116 
00117 #include "collisionPolygon.I"
00118 
00119 #endif
00120 
00121 

Generated on Fri May 2 00:35:40 2003 for Panda by doxygen1.3