DI-Guy SDK Documentation  13.1
diguyOsgUtil.h
Go to the documentation of this file.
1 /*********************************************************************
2  ** Copyright (c) 1992-2014 VT MAK
3  ** All rights reserved.
4  *********************************************************************/
5 
6 /*********************************************************************
7  **
8  *t diguyOsgUtil
9  **
10  *b Summary:
11  **
12  ** The diguyOsgUtil class provides some useful functions
13  ** for implementing DI-Guy Author objects.
14  */
15 
16 #ifndef __diguyOsgUtil_H
17 #define __diguyOsgUtil_H
18 
19 #include <osg/Geometry>
20 #include <osg/Object>
21 #include <osg/StateSet>
22 
23 #include <diguy_constants.h>
24 #include <diguy_vector_classes.h>
26 
28 
29 
30 /****************************************************************************/
31 class diguyOsgUtil
32 {
33 
34 public:
35 
36  /*
37  * Mask flags.
38  */
39  enum
40  {
41  MASK_TERRAIN = 0x1,
42  MASK_CHARACTER = 0x2,
44  };
45 
46  /*
47  * Convenience functions for unref-ing a node. The functions below
48  * remove the child from all parents, and then set the ref_ptr to NULL.
49  * In many cases this will bring the ref count to 0 and delete the
50  * child.
51  */
52  static void detach_and_null(osg::ref_ptr<osg::MatrixTransform>& child);
53  static void detach_and_null(osg::ref_ptr<osg::Geode>& child);
54  static void detach_and_null(osg::Geode* geode, osg::ref_ptr<osg::Geometry>& drawable);
55 
56  /*
57  * Drawable creation functions.
58  */
59  static osg::Geometry* create_sphere_solid(float radius,
60  int slices,
61  int layers,
62  const diguyVec4f & color);
63 
64  static osg::Geometry* create_sphere_wireframe(float radius,
65  int slices,
66  int layers,
67  const diguyVec4f & color,
68  float line_width,
69  bool lit);
70 
71  static osg::Geometry* create_cone_solid(float radius,
72  float height,
73  int slices,
74  int layers,
75  const diguyVec3f & position_offset,
76  const diguyVec3f & orientation,
77  const diguyVec4f & color);
78 
79  static osg::Geometry* create_cone_wireframe(float radius,
80  float height,
81  int slices,
82  int layers,
83  const diguyVec3f & position_offset,
84  const diguyVec3f & orientation,
85  const diguyVec4f & color,
86  float line_width,
87  bool lit);
88 
89  static osg::Geometry* create_cylinder_solid(float radius,
90  float height,
91  int slices,
92  int layers,
93  const diguyVec3f & position_offset,
94  const diguyVec3f & orientation,
95  const diguyVec4f & color);
96 
97  static osg::Geometry* create_cylinder_wireframe(float radius,
98  float height,
99  int slices,
100  int layers,
101  const diguyVec3f & position_offset,
102  const diguyVec3f & orientation,
103  const diguyVec4f & color,
104  float line_width,
105  bool lit);
106 
107  static osg::Geometry* create_box_solid(const diguyVec3f & min,
108  const diguyVec3f & max,
109  const diguyVec3f & position_offset,
110  const diguyVec3f & orientation,
111  const diguyVec4f & color);
112 
113  static osg::Geometry* create_box_wireframe(const diguyVec3f & min,
114  const diguyVec3f & max,
115  const diguyVec3f & position_offset,
116  const diguyVec3f & orientation,
117  const diguyVec4f & color,
118  float line_width,
119  bool lit);
120 
121  static void set_name_from_uid(osg::Object* object, long uid);
122 
123  /*
124  * Material functions.
125  */
126  static osg::StateSet* create_material_state_set(const diguyVec4f & color, bool lit);
127  static osg::StateSet* create_material_state_set(diguyAuthorVisualMaterial* visual_material);
128 
129  /*
130  * Vector conversion functions.
131  */
132  static osg::Vec3 diguyVec3_to_osgVec3(const diguyVec3f & diguy_vec3);
133  static osg::Vec4 diguyVec4_to_osgVec4(const diguyVec4f & diguy_vec4);
134  static osg::Quat diguy_euler_zxy_radians_to_osgQuat(const diguyVec3f & diguy_euler);
135  static osg::Quat diguy_euler_zxy_degrees_to_osgQuat(const diguyVec3f & diguy_euler);
136 
137  static diguyVec3f osgVec3_to_diguyVec3(const osg::Vec3& osg_vec3);
138  static diguyVec4f osgVec4_to_diguyVec4(const osg::Vec4& osg_vec4);
139 
140  /*
141  * ...
142  */
143  static bool check_visual_update_flag(int update_flags, diguyAuthorVisualUpdateFlag flag)
144  {
145  if ((update_flags & (int) flag) != 0)
146  return true;
147  return false;
148  }
149 
150  static bool check_visual_update_flag2(int update_flags,
153  {
154  if (((update_flags & (int) flag1) != 0) ||
155  ((update_flags & (int) flag2) != 0))
156  return true;
157  return false;
158  }
159 
160  static bool check_visual_update_flag3(int update_flags,
164  {
165  if (((update_flags & (int) flag1) != 0) ||
166  ((update_flags & (int) flag2) != 0) ||
167  ((update_flags & (int) flag3) != 0))
168  return true;
169  return false;
170  }
171 
172  static void raise_visual_update_flag(int& update_flags,
174  {
175  update_flags |= (int) flag;
176  }
177 };
178 
179 #endif /* __diguyOsgUtil_H */
180 
static osg::Geometry * create_cylinder_solid(float radius, float height, int slices, int layers, const diguyVec3f &position_offset, const diguyVec3f &orientation, const diguyVec4f &color)
Definition: diguyOsgUtil.cpp:491
static void raise_visual_update_flag(int &update_flags, diguyAuthorVisualUpdateFlag flag)
Definition: diguyOsgUtil.h:170
static bool check_visual_update_flag(int update_flags, diguyAuthorVisualUpdateFlag flag)
Definition: diguyOsgUtil.h:141
Link against: libdiguy
Definition: diguyAuthorInterface.h:58
static osg::Geometry * create_box_solid(const diguyVec3f &min, const diguyVec3f &max, const diguyVec3f &position_offset, const diguyVec3f &orientation, const diguyVec4f &color)
Definition: diguyOsgUtil.cpp:696
static osg::Geometry * create_sphere_solid(float radius, int slices, int layers, const diguyVec4f &color)
Definition: diguyOsgUtil.cpp:74
static osg::Geometry * create_cone_solid(float radius, float height, int slices, int layers, const diguyVec3f &position_offset, const diguyVec3f &orientation, const diguyVec4f &color)
Definition: diguyOsgUtil.cpp:286
static diguyVec4f osgVec4_to_diguyVec4(const osg::Vec4 &osg_vec4)
Definition: diguyOsgUtil.cpp:1020
Definition: diguy_vector_classes.h:152
static osg::Vec3 diguyVec3_to_osgVec3(const diguyVec3f &diguy_vec3)
Definition: diguyOsgUtil.cpp:969
Definition: diguyOsgUtil.h:41
static diguyVec3f osgVec3_to_diguyVec3(const osg::Vec3 &osg_vec3)
Definition: diguyOsgUtil.cpp:1011
static bool check_visual_update_flag3(int update_flags, diguyAuthorVisualUpdateFlag flag1, diguyAuthorVisualUpdateFlag flag2, diguyAuthorVisualUpdateFlag flag3)
Definition: diguyOsgUtil.h:158
Definition: diguyOsgUtil.h:39
static osg::Geometry * create_box_wireframe(const diguyVec3f &min, const diguyVec3f &max, const diguyVec3f &position_offset, const diguyVec3f &orientation, const diguyVec4f &color, float line_width, bool lit)
Definition: diguyOsgUtil.cpp:794
static bool check_visual_update_flag2(int update_flags, diguyAuthorVisualUpdateFlag flag1, diguyAuthorVisualUpdateFlag flag2)
Definition: diguyOsgUtil.h:148
static void detach_and_null(osg::ref_ptr< osg::MatrixTransform > &child)
Definition: diguyOsgUtil.cpp:28
static osg::Geometry * create_sphere_wireframe(float radius, int slices, int layers, const diguyVec4f &color, float line_width, bool lit)
Definition: diguyOsgUtil.cpp:184
static osg::Geometry * create_cone_wireframe(float radius, float height, int slices, int layers, const diguyVec3f &position_offset, const diguyVec3f &orientation, const diguyVec4f &color, float line_width, bool lit)
Definition: diguyOsgUtil.cpp:388
static osg::Quat diguy_euler_zxy_radians_to_osgQuat(const diguyVec3f &diguy_euler)
Definition: diguyOsgUtil.cpp:987
static osg::StateSet * create_material_state_set(const diguyVec4f &color, bool lit)
Definition: diguyOsgUtil.cpp:893
Definition: diguy_vector_classes.h:73
static void set_name_from_uid(osg::Object *object, long uid)
Definition: diguyOsgUtil.cpp:1029
diguyAuthorVisualUpdateFlag
This enumeration lists which parts of a visual object may need to be updated.
Definition: diguy_constants.h:560
static osg::Geometry * create_cylinder_wireframe(float radius, float height, int slices, int layers, const diguyVec3f &position_offset, const diguyVec3f &orientation, const diguyVec4f &color, float line_width, bool lit)
Definition: diguyOsgUtil.cpp:593
static osg::Quat diguy_euler_zxy_degrees_to_osgQuat(const diguyVec3f &diguy_euler)
Definition: diguyOsgUtil.cpp:997
static osg::Vec4 diguyVec4_to_osgVec4(const diguyVec4f &diguy_vec4)
Definition: diguyOsgUtil.cpp:978
Summary:
Definition: diguyAuthorVisualMaterial.h:22
Definition: diguyOsgUtil.h:29
Definition: diguyOsgUtil.h:40