27 #include "../../graphicsEngine/WGEUtils.h"
28 #include "WDendrogramGeode.h"
34 float xSize,
float ySize,
float xOffset,
float yOffset ) :
37 m_rootCluster( cluster ),
38 m_minClusterSize( minClusterSize ),
43 m_useLevel( useLevel )
54 m_colors = osg::ref_ptr<osg::Vec4Array>(
new osg::Vec4Array );
58 m_lineArray =
new osg::DrawElementsUInt( osg::PrimitiveSet::LINES, 0 );
77 for(
size_t i = 0; i < m_vertexArray->size(); ++i )
79 (*m_vertexArray)[i].x() = (*m_vertexArray)[i].x() *
m_xMult +
m_xOff;
80 (*m_vertexArray)[i].y() = (*m_vertexArray)[i].y() *
m_yMult +
m_yOff;
83 osg::ref_ptr< osg::Geometry > geometry = osg::ref_ptr< osg::Geometry >(
new osg::Geometry() );
85 geometry->setVertexArray( m_vertexArray );
90 geometry->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
92 osg::StateSet* state = geometry->getOrCreateStateSet();
93 state->setMode( GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED );
95 addDrawable( geometry );
102 float size = right - left;
110 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
113 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
119 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
120 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), leftHeight, 0 ) );
134 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
135 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), rightHeight, 0 ) );
147 float mult = size / ( leftSize + rightSize );
149 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), height, 0 ) );
150 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), height, 0 ) );
155 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), leftHeight, 0 ) );
156 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), rightHeight, 0 ) );
168 layoutLevel( leftCluster, left, left + leftSize * mult );
169 layoutLevel( rightCluster, right - rightSize * mult, right );
178 float size = right - left;
186 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
189 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
195 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
196 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), leftHeight, 0 ) );
210 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), height, 0 ) );
211 m_vertexArray->push_back( osg::Vec3( ( left + size / 2.0 ), rightHeight, 0 ) );
223 float mult = size / ( leftSize + rightSize );
225 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), height, 0 ) );
226 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), height, 0 ) );
231 m_vertexArray->push_back( osg::Vec3( ( left + leftSize * mult / 2.0 ), leftHeight, 0 ) );
232 m_vertexArray->push_back( osg::Vec3( ( right - rightSize * mult / 2.0 ), rightHeight, 0 ) );
244 layoutValue( leftCluster, left, left + leftSize * mult );
245 layoutValue( rightCluster, right - rightSize * mult, right );
280 int size = right - left;
287 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
288 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
302 float mult = size / ( leftSize + rightSize );
326 int size = right - left;
333 float leftSize =
static_cast<float>(
m_tree->
size( leftCluster ) );
334 float rightSize =
static_cast<float>(
m_tree->
size( rightCluster ) );
348 float mult = size / ( leftSize + rightSize );