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"
45 #include "WGEGeometryUtils.h"
46 #include "WGESubdividedPlane.h"
48 #include "WTriangleMesh.h"
81 osg::ref_ptr< osg::Geometry >
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 WColor& defaultColor = WColor( 1.0, 1.0, 1.0, 1.0 ),
142 bool useMeshColor =
true );
155 const float thickness = 3.0f,
156 const WColor& color = WColor( 0, 0, 0, 0 ) );
165 osg::ref_ptr< osg::PositionAttitudeTransform >
addLabel( osg::Vec3 position, std::string text );
173 osg::ref_ptr< osg::PositionAttitudeTransform >
vector2label( osg::Vec3 position );
189 const WColor& color = WColor( 0.0, 0.7, 0.7, 1.0 ),
190 bool border =
false );
219 osg::ref_ptr< osg::Geode >
genFinitePlane( osg::Vec3
const& base, osg::Vec3
const& a, osg::Vec3
const& b );
230 osg::ref_ptr< WGESubdividedPlane >
genUnitSubdividedPlane(
size_t resX,
size_t resY,
double spacing = 0.01 );
242 template<
class Container > osg::ref_ptr< osg::Geode >
genPointBlobs( boost::shared_ptr< Container > points,
244 const WColor& color = WColor( 1.0, 0.0, 0.0, 1.0 ) );
247 template<
class Container >
inline osg::ref_ptr< osg::Geode >
wge::genPointBlobs( boost::shared_ptr< Container > points,
249 const WColor& color )
251 osg::ref_ptr< osg::Vec3Array > vertices = osg::ref_ptr< osg::Vec3Array >(
new osg::Vec3Array );
252 osg::ref_ptr< osg::Vec4Array > colors = osg::ref_ptr< osg::Vec4Array >(
new osg::Vec4Array );
253 osg::ref_ptr< osg::Geometry > geometry = osg::ref_ptr< osg::Geometry >(
new osg::Geometry );
254 osg::ref_ptr< osg::Vec3Array > normals = osg::ref_ptr< osg::Vec3Array >(
new osg::Vec3Array );
256 for(
typename Container::const_iterator point = points->begin(); point != points->end(); ++point )
259 std::vector< WPosition > corners;
260 corners.reserve( 8 );
261 double halfSize = size / 2.0;
262 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] - halfSize, pos[2] - halfSize ) );
263 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] - halfSize, pos[2] - halfSize ) );
264 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] - halfSize, pos[2] + halfSize ) );
265 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] - halfSize, pos[2] + halfSize ) );
266 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] + halfSize, pos[2] - halfSize ) );
267 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] + halfSize, pos[2] - halfSize ) );
268 corners.push_back(
WPosition( pos[0] + halfSize, pos[1] + halfSize, pos[2] + halfSize ) );
269 corners.push_back(
WPosition( pos[0] - halfSize, pos[1] + halfSize, pos[2] + halfSize ) );
272 vertices->insert( vertices->end(), ver->begin(), ver->end() );
274 normals->insert( normals->end(), nor->begin(), nor->end() );
275 geometry->addPrimitiveSet(
new osg::DrawArrays( osg::PrimitiveSet::QUADS, vertices->size() - ver->size(), ver->size() ) );
278 geometry->setVertexArray( vertices );
279 colors->push_back( color );
280 geometry->setColorArray( colors );
281 geometry->setColorBinding( osg::Geometry::BIND_OVERALL );
282 geometry->setNormalArray( normals );
283 geometry->setNormalBinding( osg::Geometry::BIND_PER_PRIMITIVE );
284 osg::ref_ptr< osg::Geode > geode = osg::ref_ptr< osg::Geode >(
new osg::Geode );
285 geode->addDrawable( geometry );
288 #endif // WGEGEODEUTILS_H