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