27 #include "../../graphicsEngine/WGEUtils.h"
29 #include "WDendrogramGeode.h"
35 float xSize,
float ySize,
float xOffset,
float yOffset ) :
38 m_rootCluster( cluster ),
39 m_minClusterSize( minClusterSize ),
44 m_useLevel( useLevel )
55 m_colors = osg::ref_ptr<osg::Vec4Array>(
new osg::Vec4Array );
59 m_lineArray =
new osg::DrawElementsUInt( osg::PrimitiveSet::LINES, 0 );
78 for(
size_t i = 0; i < m_vertexArray->size(); ++i )
80 (*m_vertexArray)[i].x() = (*m_vertexArray)[i].x() *
m_xMult +
m_xOff;
81 (*m_vertexArray)[i].y() = (*m_vertexArray)[i].y() *
m_yMult +
m_yOff;
84 osg::ref_ptr< osg::Geometry > geometry = osg::ref_ptr< osg::Geometry >(
new osg::Geometry() );
86 geometry->setVertexArray( m_vertexArray );
91 geometry->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
93 osg::StateSet* state = geometry->getOrCreateStateSet();
94 state->setMode( GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED );
96 addDrawable( geometry );
103 float size = right - left;
111 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
114 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
120 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
121 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), leftHeight, 0 ) );
135 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
136 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), rightHeight, 0 ) );
148 float mult = size / ( leftSize + rightSize );
150 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), height, 0 ) );
151 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), height, 0 ) );
156 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), leftHeight, 0 ) );
157 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), rightHeight, 0 ) );
169 layoutLevel( leftCluster, left, left + leftSize * mult );
170 layoutLevel( rightCluster, right - rightSize * mult, right );
179 float size = right - left;
187 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
190 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
196 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
197 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), leftHeight, 0 ) );
211 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
212 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), rightHeight, 0 ) );
224 float mult = size / ( leftSize + rightSize );
226 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), height, 0 ) );
227 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), height, 0 ) );
232 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), leftHeight, 0 ) );
233 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), rightHeight, 0 ) );
245 layoutValue( leftCluster, left, left + leftSize * mult );
246 layoutValue( rightCluster, right - rightSize * mult, right );
281 int size = right - left;
288 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
289 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
303 float mult = size / ( leftSize + rightSize );
327 int size = right - left;
334 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
335 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
349 float mult = size / ( leftSize + rightSize );