Panda3D
Loading...
Searching...
No Matches
switchNode.h
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file switchNode.h
10 * @author drose
11 * @date 2002-07-31
12 */
13
14#ifndef SWITCHNODE_H
15#define SWITCHNODE_H
16
17#include "pandabase.h"
18
19#include "selectiveChildNode.h"
20
21/**
22 * A node that renders only one of its children, according to the user's
23 * indication.
24 */
25class EXPCL_PANDA_PGRAPHNODES SwitchNode : public SelectiveChildNode {
26PUBLISHED:
27 INLINE explicit SwitchNode(const std::string &name);
28
29public:
30 SwitchNode(const SwitchNode &copy);
31
32 virtual PandaNode *make_copy() const;
33 virtual bool safe_to_combine() const;
34 virtual bool safe_to_combine_children() const;
35
36 virtual bool cull_callback(CullTraverser *trav, CullTraverserData &data);
37 virtual int get_first_visible_child() const;
38 virtual bool has_single_child_visibility() const;
39
40PUBLISHED:
41 INLINE void set_visible_child(int index);
42 virtual int get_visible_child() const;
43
44 MAKE_PROPERTY(visible_child, get_visible_child, set_visible_child);
45
46private:
47 class EXPCL_PANDA_PGRAPHNODES CData : public CycleData {
48 public:
49 INLINE CData();
50 INLINE CData(const CData &copy);
51 virtual CycleData *make_copy() const;
52 virtual void write_datagram(BamWriter *manager, Datagram &dg) const;
53 virtual void fillin(DatagramIterator &scan, BamReader *manager);
54 virtual TypeHandle get_parent_type() const {
55 return SwitchNode::get_class_type();
56 }
57
58 int _visible_child;
59 };
60
62 typedef CycleDataReader<CData> CDReader;
63 typedef CycleDataWriter<CData> CDWriter;
64
65public:
66 static void register_with_read_factory();
67 virtual void write_datagram(BamWriter *manager, Datagram &dg);
68
69protected:
70 static TypedWritable *make_from_bam(const FactoryParams &params);
71 void fillin(DatagramIterator &scan, BamReader *manager);
72
73public:
74 static TypeHandle get_class_type() {
75 return _type_handle;
76 }
77 static void init_type() {
78 SelectiveChildNode::init_type();
79 register_type(_type_handle, "SwitchNode",
80 SelectiveChildNode::get_class_type());
81 }
82 virtual TypeHandle get_type() const {
83 return get_class_type();
84 }
85 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
86
87private:
88 static TypeHandle _type_handle;
89};
90
91#include "switchNode.I"
92
93#endif
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition bamReader.h:110
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition bamWriter.h:63
This collects together the pieces of data that are accumulated for each node while walking the scene ...
This object performs a depth-first traversal of the scene graph, with optional view-frustum culling,...
This template class calls PipelineCycler::read_unlocked(), and then provides a transparent read-only ...
This template class calls PipelineCycler::write() in the constructor and PipelineCycler::release_writ...
A single page of data maintained by a PipelineCycler.
Definition cycleData.h:50
A class to retrieve the individual data elements previously stored in a Datagram.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition datagram.h:38
An instance of this class is passed to the Factory when requesting it to do its business and construc...
A basic node of the scene graph or data graph.
Definition pandaNode.h:65
virtual bool has_single_child_visibility() const
Should be overridden by derived classes to return true if this kind of node has the special property ...
virtual bool safe_to_combine() const
Returns true if it is generally safe to combine this particular kind of PandaNode with other kinds of...
virtual bool safe_to_combine_children() const
Returns true if it is generally safe to combine the children of this PandaNode with each other.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PandaNode.
virtual PandaNode * make_copy() const
Returns a newly-allocated PandaNode that is a shallow copy of this one.
virtual void write_datagram(BamWriter *manager, Datagram &dg)
Writes the contents of this object to the datagram for shipping out to a Bam file.
A base class for nodes like LODNode and SequenceNode that select only one visible child at a time.
virtual int get_first_visible_child() const
Returns the index number of the first visible child of this node, or a number >= get_num_children() i...
A node that renders only one of its children, according to the user's indication.
Definition switchNode.h:25
virtual int get_visible_child() const
Returns the index number of the currently visible child of this node.
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
Base class for objects that can be written to and read from Bam files.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
This class maintains different copies of a page of data between stages of the graphics pipeline (or a...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.