00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef PLANENODE_H
00016 #define PLANENODE_H
00017
00018 #include "pandabase.h"
00019
00020 #include "plane.h"
00021 #include "pandaNode.h"
00022 #include "updateSeq.h"
00023 #include "geom.h"
00024 #include "cycleData.h"
00025 #include "cycleDataLockedReader.h"
00026 #include "cycleDataReader.h"
00027 #include "cycleDataWriter.h"
00028 #include "cycleDataStageReader.h"
00029 #include "cycleDataStageWriter.h"
00030 #include "pipelineCycler.h"
00031
00032
00033
00034
00035
00036
00037
00038
00039 class EXPCL_PANDA_PGRAPH PlaneNode : public PandaNode {
00040 PUBLISHED:
00041 PlaneNode(const string &name, const LPlane &plane = LPlane());
00042
00043 protected:
00044 PlaneNode(const PlaneNode ©);
00045 public:
00046 virtual void output(ostream &out) const;
00047
00048 virtual PandaNode *make_copy() const;
00049 virtual void xform(const LMatrix4 &mat);
00050
00051 virtual bool cull_callback(CullTraverser *trav, CullTraverserData &data);
00052 virtual bool is_renderable() const;
00053
00054 PUBLISHED:
00055 INLINE void set_plane(const LPlane &plane);
00056 INLINE const LPlane &get_plane() const;
00057
00058 INLINE void set_viz_scale(PN_stdfloat viz_scale);
00059 INLINE PN_stdfloat get_viz_scale() const;
00060
00061 INLINE void set_priority(int priority);
00062 INLINE int get_priority() const;
00063
00064 enum ClipEffect {
00065 CE_visible = 0x0001,
00066 CE_collision = 0x0002,
00067 };
00068 INLINE void set_clip_effect(int clip_effect);
00069 INLINE int get_clip_effect() const;
00070
00071 public:
00072 INLINE static UpdateSeq get_sort_seq();
00073
00074 protected:
00075 virtual void compute_internal_bounds(CPT(BoundingVolume) &internal_bounds,
00076 int &internal_vertices,
00077 int pipeline_stage,
00078 Thread *current_thread) const;
00079 PT(Geom) get_viz(CullTraverser *trav, CullTraverserData &data);
00080
00081 private:
00082
00083
00084
00085 int _priority;
00086 int _clip_effect;
00087 static UpdateSeq _sort_seq;
00088
00089
00090 class EXPCL_PANDA_PGRAPH CData : public CycleData {
00091 public:
00092 INLINE CData();
00093 INLINE CData(const CData ©);
00094 virtual CycleData *make_copy() const;
00095 virtual void write_datagram(BamWriter *manager, Datagram &dg) const;
00096 virtual void fillin(DatagramIterator &scan, BamReader *manager);
00097 virtual TypeHandle get_parent_type() const {
00098 return PlaneNode::get_class_type();
00099 }
00100
00101 LPlane _plane;
00102 PT(Geom) _front_viz, _back_viz;
00103 PN_stdfloat _viz_scale;
00104 };
00105
00106 PipelineCycler<CData> _cycler;
00107 typedef CycleDataLockedReader<CData> CDLockedReader;
00108 typedef CycleDataReader<CData> CDReader;
00109 typedef CycleDataWriter<CData> CDWriter;
00110 typedef CycleDataStageReader<CData> CDStageReader;
00111 typedef CycleDataStageWriter<CData> CDStageWriter;
00112
00113 public:
00114 static void register_with_read_factory();
00115 virtual void write_datagram(BamWriter *manager, Datagram &dg);
00116
00117 protected:
00118 static TypedWritable *make_from_bam(const FactoryParams ¶ms);
00119 void fillin(DatagramIterator &scan, BamReader *manager);
00120
00121 public:
00122 static TypeHandle get_class_type() {
00123 return _type_handle;
00124 }
00125 static void init_type() {
00126 PandaNode::init_type();
00127 register_type(_type_handle, "PlaneNode",
00128 PandaNode::get_class_type());
00129 }
00130 virtual TypeHandle get_type() const {
00131 return get_class_type();
00132 }
00133 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
00134
00135 private:
00136 static TypeHandle _type_handle;
00137 };
00138
00139 #include "planeNode.I"
00140
00141 #endif