25 #ifndef WGEGEODEUTILS_H
26 #define WGEGEODEUTILS_H
33 #include <osg/Geometry>
34 #include <osg/MatrixTransform>
35 #include <osg/PositionAttitudeTransform>
37 #include <osgText/Text>
39 #include "../common/math/WLine.h"
40 #include "../common/math/WPlane.h"
41 #include "../common/math/linearAlgebra/WLinearAlgebra.h"
42 #include "../common/WColor.h"
43 #include "../common/datastructures/WColoredVertices.h"
44 #include "WExportWGE.h"
45 #include "WGEGeometryUtils.h"
46 #include "WGESubdividedPlane.h"
48 #include "WTriangleMesh.h"
81 osg::ref_ptr< osg::Geometry > WGE_EXPORT
createUnitCube(
const WColor& color );
106 const WColor& defaultColor = WColor( 1.0, 1.0, 1.0, 1.0 ),
107 bool includeNormals =
false,
108 bool lighting =
false,
109 bool useMeshColor =
true );
126 const WColor& defaultColor = WColor( 1.0, 1.0, 1.0, 1.0 ),
127 bool includeNormals =
false,
128 bool lighting =
false
141 const float thickness = 3.0f,
142 const WColor& color = WColor( 0, 0, 0, 0 ) );
151 osg::ref_ptr< osg::PositionAttitudeTransform > WGE_EXPORT
addLabel( osg::Vec3 position, std::string text );
159 osg::ref_ptr< osg::PositionAttitudeTransform > WGE_EXPORT
vector2label( osg::Vec3 position );
172 osg::ref_ptr< osg::Geode > WGE_EXPORT
genFinitePlane(
double xSize,
175 const WColor& color = WColor( 0.0, 0.7, 0.7, 1.0 ),
176 bool border =
false );
205 osg::ref_ptr< osg::Geode > WGE_EXPORT
genFinitePlane( osg::Vec3
const& base, osg::Vec3
const& a, osg::Vec3
const& b );
216 osg::ref_ptr< WGESubdividedPlane > WGE_EXPORT
genUnitSubdividedPlane(
size_t resX,
size_t resY,
double spacing = 0.01 );
228 template<
class Container > osg::ref_ptr< osg::Geode >
genPointBlobs( boost::shared_ptr< Container > points,
230 const WColor& color = WColor( 1.0, 0.0, 0.0, 1.0 ) );
233 template<
class Container >
inline osg::ref_ptr< osg::Geode >
wge::genPointBlobs( boost::shared_ptr< Container > points,
235 const WColor& color )
237 osg::ref_ptr< osg::Vec3Array > vertices = osg::ref_ptr< osg::Vec3Array >(
new osg::Vec3Array );
238 osg::ref_ptr< osg::Vec4Array > colors = osg::ref_ptr< osg::Vec4Array >(
new osg::Vec4Array );
239 osg::ref_ptr< osg::Geometry > geometry = osg::ref_ptr< osg::Geometry >(
new osg::Geometry );
240 osg::ref_ptr< osg::Vec3Array > normals = osg::ref_ptr< osg::Vec3Array >(
new osg::Vec3Array );
242 for(
typename Container::const_iterator point = points->begin(); point != points->end(); ++point )
245 std::vector< WPosition > corners;
246 corners.reserve( 8 );
247 double halfSize = size / 2.0;
248 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] - halfSize, pos[2] - halfSize ) );
249 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] - halfSize, pos[2] - halfSize ) );
250 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] - halfSize, pos[2] + halfSize ) );
251 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] - halfSize, pos[2] + halfSize ) );
252 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] + halfSize, pos[2] - halfSize ) );
253 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] + halfSize, pos[2] - halfSize ) );
254 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] + halfSize, pos[2] + halfSize ) );
255 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] + halfSize, pos[2] + halfSize ) );
258 vertices->insert( vertices->end(), ver->begin(), ver->end() );
260 normals->insert( normals->end(), nor->begin(), nor->end() );
261 geometry->addPrimitiveSet(
new osg::DrawArrays( osg::PrimitiveSet::QUADS, vertices->size() - ver->size(), ver->size() ) );
264 geometry->setVertexArray( vertices );
265 colors->push_back( color );
266 geometry->setColorArray( colors );
267 geometry->setColorBinding( osg::Geometry::BIND_OVERALL );
268 geometry->setNormalArray( normals );
269 geometry->setNormalBinding( osg::Geometry::BIND_PER_PRIMITIVE );
270 osg::ref_ptr< osg::Geode > geode = osg::ref_ptr< osg::Geode >(
new osg::Geode );
271 geode->addDrawable( geometry );
274 #endif // WGEGEODEUTILS_H