Panda3D
eggGroup.I
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 eggGroup.I
10  * @author drose
11  * @date 1999-01-16
12  */
13 
14 /**
15  *
16  */
17 INLINE EggGroup::GroupType EggGroup::
18 get_group_type() const {
19  return (GroupType)(_flags & F_group_type);
20 }
21 
22 /**
23  * Returns true if this group is an instance type node; i.e. it begins the
24  * root of a local coordinate space. This is not related to instancing
25  * (multiple copies of a node in a scene graph).
26  *
27  * This also includes the case of the node including a billboard flag without
28  * an explicit center, which implicitly makes the node behave like an
29  * instance.
30  */
31 INLINE bool EggGroup::
33  return
34  (get_group_type() == GT_instance) ||
35  (get_billboard_type() != BT_none && !has_billboard_center());
36 }
37 
38 /**
39  *
40  */
41 INLINE void EggGroup::
42 set_billboard_type(BillboardType type) {
43  // Make sure the user didn't give us any stray bits.
44  nassertv((type & ~F_billboard_type)==0);
45  _flags = (_flags & ~F_billboard_type) | type;
46  // This may change the transform space of this node.
47  update_under(0);
48 }
49 
50 /**
51  *
52  */
53 INLINE EggGroup::BillboardType EggGroup::
54 get_billboard_type() const {
55  return (BillboardType)(_flags & F_billboard_type);
56 }
57 
58 /**
59  * Sets the point around which the billboard will rotate, if this node
60  * contains a billboard specification.
61  *
62  * If a billboard type is given but no billboard_center is specified, then the
63  * group node is treated as an <Instance>, and the billboard rotates around
64  * the origin. If, however, a billboard_center is specified, then the group
65  * node is *not* treated as an <Instance>, and the billboard rotates around
66  * the specified point.
67  *
68  * The point is in the same coordinate system as the vertices of this node:
69  * usually global, but possibly local if there is an <Instance> somewhere
70  * above. Specifically, this is the coordinate system defined by
71  * get_vertex_frame().
72  */
73 INLINE void EggGroup::
74 set_billboard_center(const LPoint3d &billboard_center) {
75  _billboard_center = billboard_center;
76  _flags2 |= F2_billboard_center;
77  // This may change the transform space of this node.
78  update_under(0);
79 }
80 
81 /**
82  *
83  */
84 INLINE void EggGroup::
85 clear_billboard_center() {
86  _flags2 &= ~F2_billboard_center;
87  // This may change the transform space of this node.
88  update_under(0);
89 }
90 
91 /**
92  *
93  */
94 INLINE bool EggGroup::
95 has_billboard_center() const {
96  return (_flags2 & F2_billboard_center) != 0;
97 }
98 
99 /**
100  *
101  */
102 INLINE const LPoint3d &EggGroup::
103 get_billboard_center() const {
104  nassertr(has_billboard_center(), _billboard_center);
105  return _billboard_center;
106 }
107 
108 /**
109  *
110  */
111 INLINE void EggGroup::
112 set_cs_type(CollisionSolidType type) {
113  // Make sure the user didn't give us any stray bits.
114  nassertv((type & ~F_cs_type)==0);
115  _flags = (_flags & ~F_cs_type) | type;
116 }
117 
118 /**
119  *
120  */
121 INLINE EggGroup::CollisionSolidType EggGroup::
122 get_cs_type() const {
123  return (CollisionSolidType)(_flags & F_cs_type);
124 }
125 
126 /**
127  *
128  */
129 INLINE void EggGroup::
130 set_collision_name(const std::string &collision_name) {
131  _collision_name = collision_name;
132 }
133 
134 /**
135  *
136  */
137 INLINE void EggGroup::
138 clear_collision_name() {
139  _collision_name = "";
140 }
141 
142 /**
143  *
144  */
145 INLINE bool EggGroup::
146 has_collision_name() const {
147  return !_collision_name.empty();
148 }
149 
150 /**
151  *
152  */
153 INLINE const std::string &EggGroup::
154 get_collision_name() const {
155  return _collision_name;
156 }
157 
158 /**
159  *
160  */
161 INLINE void EggGroup::
162 set_collide_flags(int flags) {
163  // Make sure the user didn't give us any stray bits.
164  nassertv((flags & ~F_collide_flags)==0);
165  _flags = (_flags & ~F_collide_flags) | flags;
166 }
167 
168 /**
169  *
170  */
171 INLINE EggGroup::CollideFlags EggGroup::
172 get_collide_flags() const {
173  return (EggGroup::CollideFlags)(_flags & F_collide_flags);
174 }
175 
176 /**
177  *
178  */
179 INLINE void EggGroup::
180 set_dcs_type(EggGroup::DCSType type) {
181  // Make sure the user didn't give us any stray bits.
182  nassertv((type & ~F2_dcs_type)==0);
183  _flags2 = (_flags2 & ~F2_dcs_type) | type;
184 }
185 
186 /**
187  *
188  */
189 INLINE EggGroup::DCSType EggGroup::
190 get_dcs_type() const {
191  return (DCSType)(_flags2 & F2_dcs_type);
192 }
193 
194 /**
195  * Returns true if the specified DCS type is not DC_none and not
196  * DC_unspecified.
197  */
198 INLINE bool EggGroup::
199 has_dcs_type() const {
200  DCSType type = get_dcs_type();
201  return (type != DC_none && type != DC_unspecified);
202 }
203 
204 /**
205  *
206  */
207 INLINE void EggGroup::
208 set_dart_type(EggGroup::DartType type) {
209  // Make sure the user didn't give us any stray bits.
210  nassertv((type & ~F_dart_type)==0);
211  _flags = (_flags & ~F_dart_type) | type;
212 }
213 
214 /**
215  *
216  */
217 INLINE EggGroup::DartType EggGroup::
218 get_dart_type() const {
219  return (DartType)(_flags & F_dart_type);
220 }
221 
222 /**
223  *
224  */
225 INLINE void EggGroup::
226 set_switch_flag(bool flag) {
227  if (flag) {
228  _flags |= F_switch_flag;
229  } else {
230  _flags &= ~F_switch_flag;
231  }
232 }
233 
234 /**
235  *
236  */
237 INLINE bool EggGroup::
238 get_switch_flag() const {
239  return ((_flags & F_switch_flag) != 0);
240 }
241 
242 /**
243  *
244  */
245 INLINE void EggGroup::
246 set_switch_fps(double fps) {
247  _fps = fps;
248 }
249 
250 /**
251  *
252  */
253 INLINE double EggGroup::
254 get_switch_fps() const {
255  return _fps;
256 }
257 
258 /**
259  *
260  */
261 INLINE void EggGroup::
262 add_object_type(const std::string &object_type) {
263  _object_types.push_back(object_type);
264 }
265 
266 /**
267  *
268  */
269 INLINE void EggGroup::
270 clear_object_types() {
271  _object_types.clear();
272 }
273 
274 /**
275  *
276  */
277 INLINE int EggGroup::
278 get_num_object_types() const {
279  return _object_types.size();
280 }
281 
282 /**
283  *
284  */
285 INLINE std::string EggGroup::
286 get_object_type(int index) const {
287  nassertr(index >= 0 && index < (int)_object_types.size(), std::string());
288  return _object_types[index];
289 }
290 
291 /**
292  *
293  */
294 INLINE void EggGroup::
295 set_model_flag(bool flag) {
296  if (flag) {
297  _flags |= F_model_flag;
298  } else {
299  _flags &= ~F_model_flag;
300  }
301 }
302 
303 /**
304  *
305  */
306 INLINE bool EggGroup::
307 get_model_flag() const {
308  return ((_flags & F_model_flag) != 0);
309 }
310 
311 /**
312  *
313  */
314 INLINE void EggGroup::
315 set_texlist_flag(bool flag) {
316  if (flag) {
317  _flags |= F_texlist_flag;
318  } else {
319  _flags &= ~F_texlist_flag;
320  }
321 }
322 
323 /**
324  *
325  */
326 INLINE bool EggGroup::
327 get_texlist_flag() const {
328  return ((_flags & F_texlist_flag) != 0);
329 }
330 
331 /**
332  *
333  */
334 INLINE void EggGroup::
335 set_nofog_flag(bool flag) {
336  if (flag) {
337  _flags |= F_nofog_flag;
338  } else {
339  _flags &= ~F_nofog_flag;
340  }
341 }
342 
343 /**
344  *
345  */
346 INLINE bool EggGroup::
347 get_nofog_flag() const {
348  return ((_flags & F_nofog_flag) != 0);
349 }
350 
351 /**
352  *
353  */
354 INLINE void EggGroup::
355 set_decal_flag(bool flag) {
356  if (flag) {
357  _flags |= F_decal_flag;
358  } else {
359  _flags &= ~F_decal_flag;
360  }
361 }
362 
363 /**
364  *
365  */
366 INLINE bool EggGroup::
367 get_decal_flag() const {
368  return ((_flags & F_decal_flag) != 0);
369 }
370 
371 /**
372  *
373  */
374 INLINE void EggGroup::
375 set_direct_flag(bool flag) {
376  if (flag) {
377  _flags |= F_direct_flag;
378  } else {
379  _flags &= ~F_direct_flag;
380  }
381 }
382 
383 /**
384  *
385  */
386 INLINE bool EggGroup::
387 get_direct_flag() const {
388  return ((_flags & F_direct_flag) != 0);
389 }
390 
391 
392 /**
393  *
394  */
395 INLINE void EggGroup::
396 set_portal_flag(bool flag) {
397  if (flag) {
398  _flags2 |= F2_portal_flag;
399  } else {
400  _flags2 &= ~F2_portal_flag;
401  }
402 }
403 
404 /**
405  *
406  */
407 INLINE bool EggGroup::
408 get_portal_flag() const {
409  return ((_flags2 & F2_portal_flag) != 0);
410 }
411 
412 /**
413  *
414  */
415 INLINE void EggGroup::
416 set_occluder_flag(bool flag) {
417  if (flag) {
418  _flags2 |= F2_occluder_flag;
419  } else {
420  _flags2 &= ~F2_occluder_flag;
421  }
422 }
423 
424 /**
425  *
426  */
427 INLINE bool EggGroup::
428 get_occluder_flag() const {
429  return ((_flags2 & F2_occluder_flag) != 0);
430 }
431 
432 /**
433  *
434  */
435 INLINE void EggGroup::
436 set_polylight_flag(bool flag) {
437  if (flag) {
438  _flags2 |= F2_polylight_flag;
439  } else {
440  _flags2 &= ~F2_polylight_flag;
441  }
442 }
443 
444 /**
445  *
446  */
447 INLINE bool EggGroup::
448 get_polylight_flag() const {
449  return ((_flags2 & F2_polylight_flag) != 0);
450 }
451 
452 /**
453  * If this flag is true, geometry at this node and below will be generated as
454  * indexed geometry.
455  */
456 INLINE void EggGroup::
457 set_indexed_flag(bool flag) {
458  if (flag) {
459  _flags2 |= F2_indexed_flag;
460  } else {
461  _flags2 &= ~F2_indexed_flag;
462  }
463  _flags2 |= F2_has_indexed_flag;
464 }
465 
466 /**
467  *
468  */
469 INLINE void EggGroup::
470 clear_indexed_flag() {
471  _flags2 &= ~(F2_indexed_flag | F2_has_indexed_flag);
472 }
473 
474 /**
475  *
476  */
477 INLINE bool EggGroup::
478 has_indexed_flag() const {
479  return (_flags2 & F2_has_indexed_flag) != 0;
480 }
481 
482 /**
483  *
484  */
485 INLINE bool EggGroup::
486 get_indexed_flag() const {
487  nassertr(has_indexed_flag(), false);
488  return ((_flags2 & F2_indexed_flag) != 0);
489 }
490 
491 /**
492  *
493  */
494 INLINE void EggGroup::
495 set_collide_mask(CollideMask mask) {
496  _collide_mask = mask;
497  _flags2 |= F2_collide_mask;
498 }
499 
500 /**
501  *
502  */
503 INLINE void EggGroup::
504 clear_collide_mask() {
505  _flags2 &= ~F2_collide_mask;
506  _collide_mask = CollideMask::all_off();
507 }
508 
509 /**
510  *
511  */
512 INLINE bool EggGroup::
513 has_collide_mask() const {
514  return (_flags2 & F2_collide_mask) != 0;
515 }
516 
517 /**
518  *
519  */
520 INLINE CollideMask EggGroup::
521 get_collide_mask() const {
522  return _collide_mask;
523 }
524 
525 /**
526  *
527  */
528 INLINE void EggGroup::
529 set_from_collide_mask(CollideMask mask) {
530  _from_collide_mask = mask;
531  _flags2 |= F2_from_collide_mask;
532 }
533 
534 /**
535  *
536  */
537 INLINE void EggGroup::
538 clear_from_collide_mask() {
539  _flags2 &= ~F2_from_collide_mask;
540  _from_collide_mask = CollideMask::all_off();
541 }
542 
543 /**
544  *
545  */
546 INLINE bool EggGroup::
547 has_from_collide_mask() const {
548  return (_flags2 & F2_from_collide_mask) != 0;
549 }
550 
551 /**
552  *
553  */
554 INLINE CollideMask EggGroup::
555 get_from_collide_mask() const {
556  return _from_collide_mask;
557 }
558 
559 /**
560  *
561  */
562 INLINE void EggGroup::
563 set_into_collide_mask(CollideMask mask) {
564  _into_collide_mask = mask;
565  _flags2 |= F2_into_collide_mask;
566 }
567 
568 /**
569  *
570  */
571 INLINE void EggGroup::
572 clear_into_collide_mask() {
573  _flags2 &= ~F2_into_collide_mask;
574  _into_collide_mask = CollideMask::all_off();
575 }
576 
577 /**
578  *
579  */
580 INLINE bool EggGroup::
581 has_into_collide_mask() const {
582  return (_flags2 & F2_into_collide_mask) != 0;
583 }
584 
585 /**
586  *
587  */
588 INLINE CollideMask EggGroup::
589 get_into_collide_mask() const {
590  return _into_collide_mask;
591 }
592 
593 /**
594  *
595  */
596 INLINE void EggGroup::
597 set_blend_mode(EggGroup::BlendMode blend_mode) {
598  _blend_mode = blend_mode;
599 }
600 
601 /**
602  *
603  */
604 INLINE EggGroup::BlendMode EggGroup::
605 get_blend_mode() const {
606  return _blend_mode;
607 }
608 
609 /**
610  *
611  */
612 INLINE void EggGroup::
613 set_blend_operand_a(EggGroup::BlendOperand blend_operand_a) {
614  _blend_operand_a = blend_operand_a;
615 }
616 
617 /**
618  *
619  */
620 INLINE EggGroup::BlendOperand EggGroup::
621 get_blend_operand_a() const {
622  return _blend_operand_a;
623 }
624 
625 /**
626  *
627  */
628 INLINE void EggGroup::
629 set_blend_operand_b(EggGroup::BlendOperand blend_operand_b) {
630  _blend_operand_b = blend_operand_b;
631 }
632 
633 /**
634  *
635  */
636 INLINE EggGroup::BlendOperand EggGroup::
637 get_blend_operand_b() const {
638  return _blend_operand_b;
639 }
640 
641 /**
642  *
643  */
644 INLINE void EggGroup::
645 set_blend_color(const LColor &blend_color) {
646  _blend_color = blend_color;
647  _flags2 |= F2_has_blend_color;
648 }
649 
650 /**
651  * Removes the blend color specification.
652  */
653 INLINE void EggGroup::
654 clear_blend_color() {
655  _blend_color = LColor::zero();
656  _flags2 &= ~F2_has_blend_color;
657 }
658 
659 /**
660  * Returns true if the blend color has been specified, false otherwise.
661  */
662 INLINE bool EggGroup::
663 has_blend_color() const {
664  return (_flags2 & F2_has_blend_color) != 0;
665 }
666 
667 /**
668  * Returns the blend color if one has been specified, or (0, 0, 0, 0) if one
669  * has not.
670  */
671 INLINE const LColor &EggGroup::
672 get_blend_color() const {
673  return _blend_color;
674 }
675 
676 /**
677  *
678  */
679 INLINE void EggGroup::
680 set_lod(const EggSwitchCondition &lod) {
681  _lod = lod.make_copy();
682 }
683 
684 /**
685  *
686  */
687 INLINE void EggGroup::
688 clear_lod() {
689  _lod = nullptr;
690 }
691 
692 /**
693  *
694  */
695 INLINE bool EggGroup::
696 has_lod() const {
697  return (_lod != nullptr);
698 }
699 
700 /**
701  *
702  */
703 INLINE const EggSwitchCondition &EggGroup::
704 get_lod() const {
705  return *_lod;
706 }
707 
708 /**
709  * Associates a user-defined value with a user-defined key which is stored on
710  * the node. This value has no meaning to Panda; but it is stored
711  * indefinitely on the node until it is requested again. This value will be
712  * copied to the PandaNode that is created for this particular EggGroup if the
713  * egg file is loaded as a scene.
714  *
715  * Each unique key stores a different string value. There is no effective
716  * limit on the number of different keys that may be stored or on the length
717  * of any one key's value.
718  */
719 INLINE void EggGroup::
720 set_tag(const std::string &key, const std::string &value) {
721  _tag_data[key] = value;
722 }
723 
724 /**
725  * Retrieves the user-defined value that was previously set on this node for
726  * the particular key, if any. If no value has been previously set, returns
727  * the empty string.
728  */
729 INLINE std::string EggGroup::
730 get_tag(const std::string &key) const {
731  TagData::const_iterator ti;
732  ti = _tag_data.find(key);
733  if (ti != _tag_data.end()) {
734  return (*ti).second;
735  }
736  return std::string();
737 }
738 
739 /**
740  * Returns true if a value has been defined on this node for the particular
741  * key (even if that value is the empty string), or false if no value has been
742  * set.
743  */
744 INLINE bool EggGroup::
745 has_tag(const std::string &key) const {
746  TagData::const_iterator ti;
747  ti = _tag_data.find(key);
748  return (ti != _tag_data.end());
749 }
750 
751 /**
752  * Removes the value defined for this key on this particular node. After a
753  * call to clear_tag(), has_tag() will return false for the indicated key.
754  */
755 INLINE void EggGroup::
756 clear_tag(const std::string &key) {
757  _tag_data.erase(key);
758 }
759 
760 /**
761  * Returns a read-only accessor to the initial pose transform. This is the
762  * <DefaultPose> entry for a Joint, and defines only the initial transform
763  * pose for the unanimated joint; it has nothing to do with the group's
764  * <Transform> entry, which defines the (eventual) space of the group's
765  * vertices.
766  */
767 INLINE const EggTransform &EggGroup::
768 get_default_pose() const {
769  return _default_pose;
770 }
771 
772 /**
773  * Returns a writable accessor to the initial pose transform. This is the
774  * <DefaultPose> entry for a Joint, and defines only the initial transform
775  * pose for the unanimated joint; it has nothing to do with the group's
776  * <Transform> entry, which defines the (eventual) space of the group's
777  * vertices.
778  */
779 INLINE EggTransform &EggGroup::
781  return _default_pose;
782 }
783 
784 /**
785  * Replaces the initial pose transform. This is the <DefaultPose> entry for a
786  * Joint, and defines only the initial transform pose for the unanimated
787  * joint; it has nothing to do with the group's <Transform> entry, which
788  * defines the (eventual) space of the group's vertices.
789  */
790 INLINE void EggGroup::
791 set_default_pose(const EggTransform &transform) {
792  _default_pose = transform;
793 }
794 
795 /**
796  * Removes the initial pose transform. See set_default_pose().
797  */
798 INLINE void EggGroup::
800  _default_pose.clear_transform();
801 }
802 
803 /**
804  * Returns an iterator that can, in conjunction with tag_end(), be used to
805  * traverse the entire set of tag keys. Each iterator returns a pair<string,
806  * string>.
807  *
808  * This interface is not safe to use outside of PANDAEGG.DLL.
809  */
810 INLINE EggGroup::TagData::const_iterator EggGroup::
811 tag_begin() const {
812  return _tag_data.begin();
813 }
814 
815 /**
816  * Returns an iterator that can, in conjunction with tag_begin(), be used to
817  * traverse the entire set of tag keys. Each iterator returns a pair<string,
818  * string>.
819  *
820  * This interface is not safe to use outside of PANDAEGG.DLL.
821  */
822 INLINE EggGroup::TagData::const_iterator EggGroup::
823 tag_end() const {
824  return _tag_data.end();
825 }
826 
827 /**
828  * Returns the number of elements between tag_begin() and tag_end().
829  *
830  * This interface is not safe to use outside of PANDAEGG.DLL.
831  */
832 INLINE EggGroup::TagData::size_type EggGroup::
833 tag_size() const {
834  return _tag_data.size();
835 }
836 
837 /**
838  * Returns an iterator that can, in conjunction with vref_end(), be used to
839  * traverse the entire set of referenced vertices. Each iterator returns a
840  * pair<PT(EggVertex), double>.
841  *
842  * This interface is not safe to use outside of PANDAEGG.DLL.
843  */
844 INLINE EggGroup::VertexRef::const_iterator EggGroup::
845 vref_begin() const {
846  return _vref.begin();
847 }
848 
849 /**
850  * Returns an iterator that can, in conjunction with vref_begin(), be used to
851  * traverse the entire set of referenced vertices. Each iterator returns a
852  * pair<PT(EggVertex), double>.
853  *
854  * This interface is not safe to use outside of PANDAEGG.DLL.
855  */
856 INLINE EggGroup::VertexRef::const_iterator EggGroup::
857 vref_end() const {
858  return _vref.end();
859 }
860 
861 /**
862  * Returns the number of elements between vref_begin() and vref_end().
863  *
864  * This interface is not safe to use outside of PANDAEGG.DLL.
865  */
866 INLINE EggGroup::VertexRef::size_type EggGroup::
867 vref_size() const {
868  return _vref.size();
869 }
870 
871 INLINE void EggGroup::
872 set_scroll_u(const double u_speed) {
873  _u_speed = u_speed;
874 }
875 
876 INLINE void EggGroup::
877 set_scroll_v(const double v_speed) {
878  _v_speed = v_speed;
879 }
880 
881 INLINE void EggGroup::
882 set_scroll_w(const double w_speed) {
883  _w_speed = w_speed;
884 }
885 
886 INLINE void EggGroup::
887 set_scroll_r(const double r_speed) {
888  _r_speed = r_speed;
889 }
890 
891 INLINE double EggGroup::
892 get_scroll_u() const {
893  return _u_speed;
894 }
895 
896 INLINE double EggGroup::
897 get_scroll_v() const {
898  return _v_speed;
899 }
900 
901 INLINE double EggGroup::
902 get_scroll_w() const {
903  return _w_speed;
904 }
905 
906 INLINE double EggGroup::
907 get_scroll_r() const {
908  return _r_speed;
909 }
910 
911 
912 INLINE bool EggGroup::
913 has_scrolling_uvs() {
914  return (_u_speed != 0) || (_v_speed != 0) || (_w_speed != 0) || (_r_speed != 0);
915 }
TagData::const_iterator tag_begin() const
Returns an iterator that can, in conjunction with tag_end(), be used to traverse the entire set of ta...
Definition: eggGroup.I:811
void clear_transform()
Resets the transform to empty, identity.
Definition: eggTransform.I:114
void transform(const LMatrix4d &mat)
Applies the indicated transformation to the node and all of its descendants.
Definition: eggNode.I:253
set_indexed_flag
If this flag is true, geometry at this node and below will be generated as indexed geometry.
Definition: eggGroup.h:307
set_default_pose
Replaces the initial pose transform.
Definition: eggGroup.h:320
VertexRef::const_iterator vref_begin() const
Returns an iterator that can, in conjunction with vref_end(), be used to traverse the entire set of r...
Definition: eggGroup.I:845
TagData::const_iterator tag_end() const
Returns an iterator that can, in conjunction with tag_begin(), be used to traverse the entire set of ...
Definition: eggGroup.I:823
void clear_tag(const std::string &key)
Removes the value defined for this key on this particular node.
Definition: eggGroup.I:756
static BitMask< WType, nbits > all_off()
Returns a BitMask whose bits are all off.
Definition: bitMask.I:43
TagData::size_type tag_size() const
Returns the number of elements between tag_begin() and tag_end().
Definition: eggGroup.I:833
EggTransform & modify_default_pose()
Returns a writable accessor to the initial pose transform.
Definition: eggGroup.I:780
bool has_tag(const std::string &key) const
Returns true if a value has been defined on this node for the particular key (even if that value is t...
Definition: eggGroup.I:745
bool is_instance_type() const
Returns true if this group is an instance type node; i.e.
Definition: eggGroup.I:32
VertexRef::size_type vref_size() const
Returns the number of elements between vref_begin() and vref_end().
Definition: eggGroup.I:867
set_billboard_center
Sets the point around which the billboard will rotate, if this node contains a billboard specificatio...
Definition: eggGroup.h:290
bool has_dcs_type() const
Returns true if the specified DCS type is not DC_none and not DC_unspecified.
Definition: eggGroup.I:199
std::string get_tag(const std::string &key) const
Retrieves the user-defined value that was previously set on this node for the particular key,...
Definition: eggGroup.I:730
void set_tag(const std::string &key, const std::string &value)
Associates a user-defined value with a user-defined key which is stored on the node.
Definition: eggGroup.I:720
This corresponds to a <SwitchCondition> entry within a group.
void clear_default_pose()
Removes the initial pose transform.
Definition: eggGroup.I:799
A general bitmask class.
Definition: bitMask.h:32
VertexRef::const_iterator vref_end() const
Returns an iterator that can, in conjunction with vref_begin(), be used to traverse the entire set of...
Definition: eggGroup.I:857
This represents the <Transform> entry of a group or texture node: a list of component transform opera...
Definition: eggTransform.h:29