# EggGroup¶

class EggGroup

The main glue of the egg hierarchy, this corresponds to the <Group>, <Instance>, and <Joint> type nodes.

Inheritance diagram

enum BillboardType
enumerator BT_none = 0

The bits here must correspond to those in Flags, below.

enumerator BT_axis = 32
enumerator BT_point_camera_relative = 64
enumerator BT_point_world_relative = 128
enum BlendMode

These correspond to ColorBlendAttrib::Mode (but not numerically).

enumerator BM_unspecified = 0
enumerator BM_none = 1
enumerator BM_add = 2
enumerator BM_subtract = 3
enumerator BM_inv_subtract = 4
enumerator BM_min = 5
enumerator BM_max = 6
enum BlendOperand

These correspond to ColorBlendAttrib::Operand (but not numerically).

enumerator BO_unspecified = 0
enumerator BO_zero = 1
enumerator BO_one = 2
enumerator BO_incoming_color = 3
enumerator BO_one_minus_incoming_color = 4
enumerator BO_fbuffer_color = 5
enumerator BO_one_minus_fbuffer_color = 6
enumerator BO_incoming_alpha = 7
enumerator BO_one_minus_incoming_alpha = 8
enumerator BO_fbuffer_alpha = 9
enumerator BO_one_minus_fbuffer_alpha = 10
enumerator BO_constant_color = 11
enumerator BO_one_minus_constant_color = 12
enumerator BO_constant_alpha = 13
enumerator BO_one_minus_constant_alpha = 14
enumerator BO_incoming_color_saturate = 15
enumerator BO_color_scale = 16
enumerator BO_one_minus_color_scale = 17
enumerator BO_alpha_scale = 18
enumerator BO_one_minus_alpha_scale = 19
enum CollideFlags
enumerator CF_none = 0

The bits here must correspond to those in Flags, below, and they must fit within F_collide_flags.

enumerator CF_descend = 1048576
enumerator CF_event = 2097152
enumerator CF_keep = 4194304
enumerator CF_solid = 8388608
enumerator CF_center = 16777216
enumerator CF_turnstile = 33554432
enumerator CF_level = 67108864
enumerator CF_intangible = 134217728
enum CollisionSolidType
enumerator CST_none = 0

The bits here must correspond to those in Flags, below, and they must fit within F_cs_type.

enumerator CST_plane = 65536
enumerator CST_polygon = 131072
enumerator CST_polyset = 196608
enumerator CST_sphere = 262144
enumerator CST_tube = 327680
enumerator CST_inv_sphere = 393216
enumerator CST_box = 458752
enumerator CST_floor_mesh = 524288
enum DCSType
enumerator DC_unspecified = 0

The bits here must correspond to those in Flags2, below.

enumerator DC_none = 16
enumerator DC_local = 32
enumerator DC_net = 48
enumerator DC_no_touch = 64
enumerator DC_default = 80
enum DartType
enumerator DT_none = 0

The bits here must correspond to those in Flags, below.

enumerator DT_structured = 268435456
enumerator DT_sync = 536870912
enumerator DT_nosync = 805306368
enumerator DT_default = 1073741824
enum GroupType

These bits are all stored somewhere in _flags.

enumerator GT_invalid = -1

The bits here must correspond to those in Flags, below.

enumerator GT_group = 0
enumerator GT_instance = 1
enumerator GT_joint = 2
typedef map<std::string, std::string> EggGroup::TagData

alias of map< string, string >

typedef map<PT_EggVertex, double> EggGroup::VertexRef

alias of map< PT_EggVertex, double >

explicit EggGroup(std::string const &name = "")
EggGroup(EggGroup const &copy)
void add_group_ref(EggGroup *group)

Adds a new <Ref> entry to the group. This declares an internal reference to another node, and is used to implement scene-graph instancing; it is only valid if the group_type is GT_instance.

void add_object_type(std::string const &object_type)
void clear_billboard_center(void)
void clear_blend_color(void)

Removes the blend color specification.

void clear_collide_mask(void)
void clear_collision_name(void)
void clear_default_pose(void)

Removes the initial pose transform. See set_default_pose().

void clear_from_collide_mask(void)
void clear_group_refs(void)

Removes all of the <Ref> entries within this group. See add_group_ref().

void clear_indexed_flag(void)
void clear_into_collide_mask(void)
void clear_lod(void)
void clear_object_types(void)
void clear_tag(std::string const &key)

Removes the value defined for this key on this particular node. After a call to clear_tag(), has_tag() will return false for the indicated key.

virtual EggRenderMode *determine_alpha_mode(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has an alpha_mode other than AM_unspecified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

virtual EggRenderMode *determine_bin(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has a bin specified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

virtual bool determine_decal(void)

Walks back up the hierarchy, looking for an EggGroup at this level or above that has the “decal” flag set. Returns the value of the decal flag if it is found, or false if it is not.

In other words, returns true if the “decal” flag is in effect for the indicated node, false otherwise.

virtual EggRenderMode *determine_depth_offset(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has a depth_offset specified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

virtual EggRenderMode *determine_depth_test_mode(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has a depth_test_mode other than DTM_unspecified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

virtual EggRenderMode *determine_depth_write_mode(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has a depth_write_mode other than DWM_unspecified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

virtual EggRenderMode *determine_draw_order(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has a draw_order specified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

virtual bool determine_indexed(void)

Walks back up the hierarchy, looking for an EggGroup at this level or above that has the “indexed” scalar set. Returns the value of the indexed scalar if it is found, or false if it is not.

In other words, returns true if the “indexed” flag is in effect for the indicated node, false otherwise.

virtual EggRenderMode *determine_visibility_mode(void)

Walks back up the hierarchy, looking for an EggGroup or EggPrimitive or some such object at this level or above this group that has a visibility_mode other than VM_unspecified. Returns a valid EggRenderMode pointer if one is found, or NULL otherwise.

LPoint3d const &get_billboard_center(void) const
BillboardType get_billboard_type(void) const
LColor const &get_blend_color(void) const

Returns the blend color if one has been specified, or (0, 0, 0, 0) if one has not.

BlendMode get_blend_mode(void) const
BlendOperand get_blend_operand_a(void) const
BlendOperand get_blend_operand_b(void) const
static TypeHandle get_class_type(void)
CollideFlags get_collide_flags(void) const
CollideMask get_collide_mask(void) const
std::string const &get_collision_name(void) const
CollisionSolidType get_cs_type(void) const
DartType get_dart_type(void) const
DCSType get_dcs_type(void) const
bool get_decal_flag(void) const
EggTransform const &get_default_pose(void) const

Returns a read-only accessor to the initial pose transform. This is the <DefaultPose> entry for a Joint, and defines only the initial transform pose for the unanimated joint; it has nothing to do with the group’s <Transform> entry, which defines the (eventual) space of the group’s vertices.

bool get_direct_flag(void) const
CollideMask get_from_collide_mask(void) const
EggGroup *get_group_ref(int n) const

Returns the nth <Ref> entry within this group. See add_group_ref().

GroupType get_group_type(void) const
bool get_indexed_flag(void) const
CollideMask get_into_collide_mask(void) const
EggSwitchCondition const &get_lod(void) const
bool get_model_flag(void) const
bool get_nofog_flag(void) const
int get_num_group_refs(void) const

Returns the number of <Ref> entries within this group. See add_group_ref().

int get_num_object_types(void) const
std::string get_object_type(int index) const
bool get_occluder_flag(void) const
bool get_polylight_flag(void) const
bool get_portal_flag(void) const
double get_scroll_r(void) const
double get_scroll_u(void) const
double get_scroll_v(void) const
double get_scroll_w(void) const
bool get_switch_flag(void) const
double get_switch_fps(void) const
std::string get_tag(std::string const &key) const

Retrieves the user-defined value that was previously set on this node for the particular key, if any. If no value has been previously set, returns the empty string.

bool get_texlist_flag(void) const
double get_vertex_membership(EggVertex const *vert) const

Returns the amount of membership of the indicated vertex in this group. If the vertex is not reffed by the group, returns 0.

bool has_billboard_center(void) const
bool has_blend_color(void) const

Returns true if the blend color has been specified, false otherwise.

bool has_collide_mask(void) const
bool has_collision_name(void) const
bool has_dcs_type(void) const

Returns true if the specified DCS type is not DC_none and not DC_unspecified.

bool has_from_collide_mask(void) const
bool has_indexed_flag(void) const
bool has_into_collide_mask(void) const
bool has_lod(void) const
bool has_object_type(std::string const &object_type) const

Returns true if the indicated object type has been added to the group, or false otherwise.

bool has_scrolling_uvs(void)
bool has_tag(std::string const &key) const

Returns true if a value has been defined on this node for the particular key (even if that value is the empty string), or false if no value has been set.

bool is_instance_type(void) const

Returns true if this group is an instance type node; i.e. it begins the root of a local coordinate space. This is not related to instancing (multiple copies of a node in a scene graph).

This also includes the case of the node including a billboard flag without an explicit center, which implicitly makes the node behave like an instance.

virtual bool is_joint(void) const

Returns true if this particular node represents a <Joint> entry or not. This is a handy thing to know since Joints are sorted to the end of their sibling list when writing an egg file. See EggGroupNode::write().

EggTransform &modify_default_pose(void)

Returns a writable accessor to the initial pose transform. This is the <DefaultPose> entry for a Joint, and defines only the initial transform pose for the unanimated joint; it has nothing to do with the group’s <Transform> entry, which defines the (eventual) space of the group’s vertices.

void ref_vertex(EggVertex *vert, double membership = 1.0)

Adds the vertex to the set of those referenced by the group, at the indicated membership level. If the vertex is already being referenced, increases the membership amount by the indicated amount.

void remove_group_ref(int n)

Removes the nth <Ref> entry within this group. See add_group_ref().

bool remove_object_type(std::string const &object_type)

Removes the first instance of the indicated object type from the group if it is present. Returns true if the object type was found and removed, false otherwise.

void set_billboard_center(LPoint3d const &billboard_center)

Sets the point around which the billboard will rotate, if this node contains a billboard specification.

If a billboard type is given but no billboard_center is specified, then the group node is treated as an <Instance>, and the billboard rotates around the origin. If, however, a billboard_center is specified, then the group node is not treated as an <Instance>, and the billboard rotates around the specified point.

The point is in the same coordinate system as the vertices of this node: usually global, but possibly local if there is an <Instance> somewhere above. Specifically, this is the coordinate system defined by get_vertex_frame().

void set_billboard_type(EggGroup::BillboardType type)
void set_blend_color(LColor const &blend_color)
void set_blend_mode(EggGroup::BlendMode blend_mode)
void set_blend_operand_a(EggGroup::BlendOperand blend_operand_a)
void set_blend_operand_b(EggGroup::BlendOperand blend_operand_b)
void set_collide_flags(int flags)
void set_collide_mask(CollideMask mask)
void set_collision_name(std::string const &collision_name)
void set_cs_type(EggGroup::CollisionSolidType type)
void set_dart_type(EggGroup::DartType type)
void set_dcs_type(EggGroup::DCSType type)
void set_decal_flag(bool flag)
void set_default_pose(EggTransform const &transform)

Replaces the initial pose transform. This is the <DefaultPose> entry for a Joint, and defines only the initial transform pose for the unanimated joint; it has nothing to do with the group’s <Transform> entry, which defines the (eventual) space of the group’s vertices.

void set_direct_flag(bool flag)
void set_from_collide_mask(CollideMask mask)
void set_group_type(EggGroup::GroupType type)
void set_indexed_flag(bool flag)

If this flag is true, geometry at this node and below will be generated as indexed geometry.

void set_into_collide_mask(CollideMask mask)
void set_lod(EggSwitchCondition const &lod)
void set_model_flag(bool flag)
void set_nofog_flag(bool flag)
void set_occluder_flag(bool flag)
void set_polylight_flag(bool flag)
void set_portal_flag(bool flag)
void set_scroll_r(double const r_speed)
void set_scroll_u(double const u_speed)
void set_scroll_v(double const v_speed)
void set_scroll_w(double const w_speed)
void set_switch_flag(bool flag)
void set_switch_fps(double fps)
void set_tag(std::string const &key, std::string const &value)

Associates a user-defined value with a user-defined key which is stored on the node. This value has no meaning to Panda; but it is stored indefinitely on the node until it is requested again. This value will be copied to the PandaNode that is created for this particular EggGroup if the egg file is loaded as a scene.

Each unique key stores a different string value. There is no effective limit on the number of different keys that may be stored or on the length of any one key’s value.

void set_texlist_flag(bool flag)
void set_vertex_membership(EggVertex *vert, double membership)

Explicitly sets the net membership of the indicated vertex in this group to the given value.

void steal_vrefs(EggGroup *other)

Moves all of the vertex references from the indicated other group into this one. If a given vertex was previously shared by both groups, the relative memberships will be summed.

static BillboardType string_billboard_type(std::string const &strval)

Returns the BillboardType value associated with the given string representation, or BT_none if the string does not match any known BillboardType value.

static BlendMode string_blend_mode(std::string const &strval)

Returns the BlendMode value associated with the given string representation, or BM_none if the string does not match any known BlendMode.

static BlendOperand string_blend_operand(std::string const &strval)

Returns the BlendOperand value associated with the given string representation, or BO_none if the string does not match any known BlendOperand.

static CollideFlags string_collide_flags(std::string const &strval)

Returns the CollideFlags value associated with the given string representation, or CF_none if the string does not match any known CollideFlags value. This only recognizes a single keyword; it does not attempt to parse a string of keywords.

static CollisionSolidType string_cs_type(std::string const &strval)

Returns the CollisionSolidType value associated with the given string representation, or CST_none if the string does not match any known CollisionSolidType value.

static DartType string_dart_type(std::string const &strval)

Returns the DartType value associated with the given string representation, or DT_none if the string does not match any known DartType value.

static DCSType string_dcs_type(std::string const &strval)

Returns the DCSType value associated with the given string representation, or DC_unspecified if the string does not match any known DCSType value.

static GroupType string_group_type(std::string const &strval)

Returns the GroupType value associated with the given string representation, or GT_invalid if the string does not match any known GroupType value.

void test_vref_integrity(void) const
void unref_all_vertices(void)

Removes all vertices from the reference list.

void unref_vertex(EggVertex *vert)

Removes the vertex from the set of those referenced by the group. Does nothing if the vertex is not already reffed.

virtual void write(std::ostream &out, int indent_level) const

Writes the group and all of its children to the indicated output stream in Egg format.

void write_billboard_flags(std::ostream &out, int indent_level) const

Writes just the <Billboard> entry and related fields to the indicated ostream.

void write_collide_flags(std::ostream &out, int indent_level) const

Writes just the <Collide> entry and related fields to the indicated ostream.

void write_decal_flags(std::ostream &out, int indent_level) const

Writes the flags related to decaling, if any.

void write_model_flags(std::ostream &out, int indent_level) const

Writes the <Model> flag and related flags to the indicated ostream.

void write_object_types(std::ostream &out, int indent_level) const

Writes just the <ObjectTypes> entries, if any, to the indicated ostream.

void write_render_mode(std::ostream &out, int indent_level) const

Writes the flags inherited from EggRenderMode and similar flags that control obscure render effects.

void write_switch_flags(std::ostream &out, int indent_level) const

Writes the <Switch> flag and related flags to the indicated ostream.

void write_tags(std::ostream &out, int indent_level) const

Writes just the <Tag> entries, if any, to the indicated ostream.