50 #include "qglbuilder.h"
53 #include <QtCore/qurl.h>
55 #include <QMouseEvent>
81 , m_sourceSpace(p_sourceSpace)
84 , m_fOffsetZEye(60.0f)
85 , m_pSceneNodeBrain(0)
114 builder << QGL::Faceted;
115 m_pSceneNodeBrain = builder.currentNode();
121 QSharedPointer<QGLMaterialCollection> palette = builder.sceneNode()->palette();
124 m_vecBoundingBoxMin.setX(m_sourceSpace[0].rr.col(0).minCoeff());
125 m_vecBoundingBoxMin.setY(m_sourceSpace[0].rr.col(1).minCoeff());
126 m_vecBoundingBoxMin.setZ(m_sourceSpace[0].rr.col(2).minCoeff());
127 m_vecBoundingBoxMax.setX(m_sourceSpace[0].rr.col(0).maxCoeff());
128 m_vecBoundingBoxMax.setY(m_sourceSpace[0].rr.col(1).maxCoeff());
129 m_vecBoundingBoxMax.setZ(m_sourceSpace[0].rr.col(2).maxCoeff());
131 m_vecBoundingBoxMin.setX(m_vecBoundingBoxMin.x() < m_sourceSpace[1].rr.col(0).minCoeff() ? m_vecBoundingBoxMin.x() : m_sourceSpace[1].rr.col(0).minCoeff());
132 m_vecBoundingBoxMin.setY(m_vecBoundingBoxMin.y() < m_sourceSpace[1].rr.col(1).minCoeff() ? m_vecBoundingBoxMin.y() : m_sourceSpace[1].rr.col(1).minCoeff());
133 m_vecBoundingBoxMin.setZ(m_vecBoundingBoxMin.z() < m_sourceSpace[1].rr.col(2).minCoeff() ? m_vecBoundingBoxMin.z() : m_sourceSpace[1].rr.col(2).minCoeff());
134 m_vecBoundingBoxMax.setX(m_vecBoundingBoxMax.x() > m_sourceSpace[1].rr.col(0).maxCoeff() ? m_vecBoundingBoxMax.x() : m_sourceSpace[1].rr.col(0).maxCoeff());
135 m_vecBoundingBoxMax.setY(m_vecBoundingBoxMax.y() > m_sourceSpace[1].rr.col(1).maxCoeff() ? m_vecBoundingBoxMax.y() : m_sourceSpace[1].rr.col(1).maxCoeff());
136 m_vecBoundingBoxMax.setZ(m_vecBoundingBoxMax.z() > m_sourceSpace[1].rr.col(2).maxCoeff() ? m_vecBoundingBoxMax.z() : m_sourceSpace[1].rr.col(2).maxCoeff());
138 m_vecBoundingBoxCenter.setX((m_vecBoundingBoxMin.x()+m_vecBoundingBoxMax.x())/2.0f);
139 m_vecBoundingBoxCenter.setY((m_vecBoundingBoxMin.y()+m_vecBoundingBoxMax.y())/2.0f);
140 m_vecBoundingBoxCenter.setZ((m_vecBoundingBoxMin.z()+m_vecBoundingBoxMax.z())/2.0f);
146 for(qint32 h = 0; h < 2; ++h)
151 MatrixX3i tris = m_sourceSpace[h].tris;
152 MatrixX3f rr = m_sourceSpace[h].rr;
155 rr.col(0) = rr.col(0).array() - m_vecBoundingBoxCenter.x();
156 rr.col(1) = rr.col(1).array() - m_vecBoundingBoxCenter.y();
157 rr.col(2) = rr.col(2).array() - m_vecBoundingBoxCenter.z();
163 for(qint32 k = 0; k < m_vecAnnotation[h]->getColortable().numEntries; ++k)
166 if(builder.currentNode()->count() > 0)
169 QGeometryData t_GeometryDataTri;
171 MatrixXf t_TriCoords(3,3*tris.rows());
173 qint32 t_label_ids = m_vecAnnotation[h]->getColortable().table(k,4);
175 for(qint32 i = 0; i < tris.rows(); ++i)
177 if(m_vecAnnotation[h]->getLabelIds()(tris(i,0)) == t_label_ids || m_vecAnnotation[h]->getLabelIds()(tris(i,1)) == t_label_ids || m_vecAnnotation[h]->getLabelIds()(tris(i,2)) == t_label_ids)
179 t_TriCoords.col(t_size*3) = rr.row( tris(i,0) ).transpose();
180 t_TriCoords.col(t_size*3+1) = rr.row( tris(i,1) ).transpose();
181 t_TriCoords.col(t_size*3+2) = rr.row( tris(i,2) ).transpose();
185 t_TriCoords.conservativeResize(3, 3*t_size);
187 t_GeometryDataTri.appendVertexArray(QArray<QVector3D>::fromRawData( reinterpret_cast<const QVector3D*>(t_TriCoords.data()), t_TriCoords.cols() ));
192 if (t_GeometryDataTri.count() > 0)
198 builder.addTriangles(t_GeometryDataTri);
203 QGLMaterial *t_pMaterialROI =
new QGLMaterial();
205 r = m_vecAnnotation[h]->getColortable().table(k,0);
206 g = m_vecAnnotation[h]->getColortable().table(k,1);
207 b = m_vecAnnotation[h]->getColortable().table(k,2);
209 t_pMaterialROI->setColor(QColor(r,g,b,200));
214 index = palette->addMaterial(t_pMaterialROI);
215 builder.currentNode()->setMaterialIndex(index);
226 m_pSceneNode = builder.finalizedSceneNode();
227 m_pSceneNode->setParent(
this);
232 m_pLightModel =
new QGLLightModel(
this);
233 m_pLightModel->setAmbientSceneColor(Qt::white);
234 m_pLightModel->setViewerPosition(QGLLightModel::LocalViewer);
236 m_pLightModel =
new QGLLightModel(
this);
238 m_pLightParametersScene =
new QGLLightParameters(
this);
239 m_pLightParametersScene->setPosition(QVector3D(0.0f, 0.0f, 3.0f));
240 painter->setMainLight(m_pLightParametersScene);
246 this->setStereoType(QGLView::RedCyanAnaglyph);
252 camera()->setCenter(QVector3D(0,0,m_fOffsetZ));
253 camera()->setEyeSeparation(0.4f);
254 camera()->setFieldOfView(30);
255 camera()->setEye(QVector3D(0,0,m_fOffsetZEye));
262 glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
277 painter->modelViewMatrix().push();
278 painter->projectionMatrix().push();
280 painter->setStandardEffect(QGL::LitMaterial);
282 painter->setLightModel(m_pLightModel);
287 m_pSceneNode->draw(painter);
290 painter->modelViewMatrix().pop();
291 painter->projectionMatrix().pop();
298 camera()->setCenter(QVector3D(0,0,0));
300 float normEyeOld = sqrt(pow(camera()->eye().x(),2) + pow(camera()->eye().y(),2) + pow(camera()->eye().z(),2));
302 QGLView::keyPressEvent(e);
304 float dx = (camera()->eye().x()*m_fOffsetZ)/m_fOffsetZEye;
305 float dy = (camera()->eye().y()*m_fOffsetZ)/m_fOffsetZEye;
306 float dz = (camera()->eye().z()*m_fOffsetZ)/m_fOffsetZEye;
308 float normEye = sqrt(pow(camera()->eye().x(),2) + pow(camera()->eye().y(),2) + pow(camera()->eye().z(),2));
309 float scaleEye = normEyeOld/normEye;
310 camera()->setEye(QVector3D(camera()->eye().x()*scaleEye,camera()->eye().y()*scaleEye,camera()->eye().z()*scaleEye));
312 camera()->setCenter(QVector3D(dx,dy,dz));
320 camera()->setCenter(QVector3D(0,0,0));
322 float normEyeOld = sqrt(pow(camera()->eye().x(),2) + pow(camera()->eye().y(),2) + pow(camera()->eye().z(),2));
324 QGLView::mouseMoveEvent(e);
326 float dx = (camera()->eye().x()*m_fOffsetZ)/m_fOffsetZEye;
327 float dy = (camera()->eye().y()*m_fOffsetZ)/m_fOffsetZEye;
328 float dz = (camera()->eye().z()*m_fOffsetZ)/m_fOffsetZEye;
330 float normEye = sqrt(pow(camera()->eye().x(),2) + pow(camera()->eye().y(),2) + pow(camera()->eye().z(),2));
331 float scaleEye = normEyeOld/normEye;
332 camera()->setEye(QVector3D(camera()->eye().x()*scaleEye,camera()->eye().y()*scaleEye,camera()->eye().z()*scaleEye));
334 camera()->setCenter(QVector3D(dx,dy,dz));
343 if(e->buttons() & Qt::RightButton)
345 float normEye = sqrt(pow(camera()->eye().x(),2) + pow(camera()->eye().y(),2) + pow(camera()->eye().z(),2));
346 camera()->setCenter(QVector3D(0,0,m_fOffsetZ));
347 camera()->setEye(QVector3D(0,0,normEye));
350 QGLView::mousePressEvent(e);
void keyPressEvent(QKeyEvent *e)
Source Space descritpion.
void mousePressEvent(QMouseEvent *e)
void paintGL(QGLPainter *painter)
void mouseMoveEvent(QMouseEvent *e)
void initializeGL(QGLPainter *painter)
GeometryView(const MNESourceSpace &p_sourceSpace, QWindow *parent=0)
Declaration of the GeometryView Class.
QSharedPointer< Annotation > SPtr