bool BrainSourceSpaceTreeItem::addData(const MNEHemisphere& tHemisphere, Qt3DCore::QEntity* parent) { //Create renderable 3D entity m_pParentEntity = parent; m_pRenderable3DEntity = new Renderable3DEntity(m_pParentEntity); //Initial transformation also regarding the surface offset m_pRenderable3DEntity->setRotX(90); m_pRenderable3DEntity->setRotY(180); //Create sources as small 3D spheres RowVector3f sourcePos; QVector3D pos; if(tHemisphere.isClustered()) { for(int i = 0; i < tHemisphere.cluster_info.centroidVertno.size(); i++) { Renderable3DEntity* pSourceSphereEntity = new Renderable3DEntity(m_pRenderable3DEntity); sourcePos = tHemisphere.rr.row(tHemisphere.cluster_info.centroidVertno.at(i)); pos.setX(sourcePos(0)); pos.setY(sourcePos(1)); pos.setZ(sourcePos(2)); Qt3DExtras::QSphereMesh* sourceSphere = new Qt3DExtras::QSphereMesh(); sourceSphere->setRadius(0.001f); pSourceSphereEntity->addComponent(sourceSphere); pSourceSphereEntity->setPosition(pos); Qt3DExtras::QPhongMaterial*material = new Qt3DExtras::QPhongMaterial(); material->setAmbient(Qt::yellow); pSourceSphereEntity->addComponent(material); m_lSpheres.append(pSourceSphereEntity); } } else { for(int i = 0; i < tHemisphere.vertno.rows(); i++) { Renderable3DEntity* pSourceSphereEntity = new Renderable3DEntity(m_pRenderable3DEntity); sourcePos = tHemisphere.rr.row(tHemisphere.vertno(i)); pos.setX(sourcePos(0)); pos.setY(sourcePos(1)); pos.setZ(sourcePos(2)); Qt3DExtras::QSphereMesh* sourceSphere = new Qt3DExtras::QSphereMesh(); sourceSphere->setRadius(0.001f); pSourceSphereEntity->addComponent(sourceSphere); pSourceSphereEntity->setPosition(pos); Qt3DExtras::QPhongMaterial* material = new Qt3DExtras::QPhongMaterial(); material->setAmbient(Qt::yellow); pSourceSphereEntity->addComponent(material); m_lSpheres.append(pSourceSphereEntity); } } //Create color from curvature information with default gyri and sulcus colors QByteArray arrayVertColor = createVertColor(tHemisphere.rr); //Set renderable 3D entity mesh and color data m_pRenderable3DEntity->setMeshData(tHemisphere.rr, tHemisphere.nn, tHemisphere.tris, arrayVertColor); //Add data which is held by this BrainSourceSpaceTreeItem QVariant data; data.setValue(arrayVertColor); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurrentColorVert); data.setValue(tHemisphere.rr); this->setData(data, Data3DTreeModelItemRoles::SurfaceVert); data.setValue(tHemisphere.tris); this->setData(data, Data3DTreeModelItemRoles::SurfaceTris); data.setValue(tHemisphere.nn); this->setData(data, Data3DTreeModelItemRoles::SurfaceNorm); data.setValue(m_pRenderable3DEntity); this->setData(data, Data3DTreeModelItemRoles::SurfaceRenderable3DEntity); //Add surface meta information as item children QList<QStandardItem*> list; MetaTreeItem* pItemSurfCol = new MetaTreeItem(MetaTreeItemTypes::SurfaceColor, "Surface color"); connect(pItemSurfCol, &MetaTreeItem::surfaceColorChanged, this, &BrainSourceSpaceTreeItem::onSurfaceColorChanged); list << pItemSurfCol; list << new QStandardItem(pItemSurfCol->toolTip()); this->appendRow(list); data.setValue(QColor(100,100,100)); pItemSurfCol->setData(data, MetaTreeItemRoles::SurfaceColor); pItemSurfCol->setData(data, Qt::DecorationRole); return true; }
bool DigitizerTreeItem::addData(const QList<FIFFLIB::FiffDigPoint>& tDigitizer, Qt3DCore::QEntity* parent) { //Clear all data m_lSpheres.clear(); // if(!m_pRenderable3DEntity.isNull()) { // m_pRenderable3DEntity->deleteLater(); // } m_pRenderable3DEntity = new Renderable3DEntity(parent); //Create digitizers as small 3D spheres QVector3D pos; QColor colDefault(100,100,100); for(int i = 0; i < tDigitizer.size(); ++i) { Renderable3DEntity* pSourceSphereEntity = new Renderable3DEntity(m_pRenderable3DEntity); pos.setX(tDigitizer[i].r[0]); pos.setY(tDigitizer[i].r[1]); pos.setZ(tDigitizer[i].r[2]); Qt3DExtras::QSphereMesh* sourceSphere = new Qt3DExtras::QSphereMesh(); if (tDigitizer[i].kind == FIFFV_POINT_CARDINAL) { sourceSphere->setRadius(0.002f); } else { sourceSphere->setRadius(0.001f); } pSourceSphereEntity->addComponent(sourceSphere); pSourceSphereEntity->setPosition(pos); Qt3DExtras::QPhongMaterial* material = new Qt3DExtras::QPhongMaterial(); switch (tDigitizer[i].kind) { case FIFFV_POINT_CARDINAL: colDefault = Qt::yellow; material->setAmbient(colDefault); break; case FIFFV_POINT_HPI: colDefault = Qt::red; material->setAmbient(colDefault); break; case FIFFV_POINT_EEG: colDefault = Qt::green; material->setAmbient(colDefault); break; case FIFFV_POINT_EXTRA: colDefault = Qt::blue; material->setAmbient(colDefault); break; default: colDefault = Qt::white; material->setAmbient(colDefault); break; } pSourceSphereEntity->addComponent(material); pSourceSphereEntity->setParent(m_pRenderable3DEntity); m_lSpheres.append(pSourceSphereEntity); } QList<QStandardItem*> items = this->findChildren(MetaTreeItemTypes::PointColor); for(int i = 0; i < items.size(); ++i) { if(MetaTreeItem* item = dynamic_cast<MetaTreeItem*>(items.at(i))) { QVariant data; data.setValue(colDefault); item->setData(data, MetaTreeItemRoles::PointColor); } } return true; }
SceneModifier::SceneModifier(Qt3DCore::QEntity *rootEntity) : m_rootEntity(rootEntity) { // Torus shape data //! [0] m_torus = new Qt3DExtras::QTorusMesh(); m_torus->setRadius(1.0f); m_torus->setMinorRadius(0.4f); m_torus->setRings(100); m_torus->setSlices(20); //! [0] // TorusMesh Transform //! [1] Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform(); torusTransform->setScale(2.0f); torusTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(0.0f, 1.0f, 0.0f), 25.0f)); torusTransform->setTranslation(QVector3D(5.0f, 4.0f, 0.0f)); //! [1] //! [2] Qt3DExtras::QPhongMaterial *torusMaterial = new Qt3DExtras::QPhongMaterial(); torusMaterial->setDiffuse(QColor(QRgb(0xbeb32b))); //! [2] // Torus //! [3] m_torusEntity = new Qt3DCore::QEntity(m_rootEntity); m_torusEntity->addComponent(m_torus); m_torusEntity->addComponent(torusMaterial); m_torusEntity->addComponent(torusTransform); //! [3] // Cone shape data Qt3DExtras::QConeMesh *cone = new Qt3DExtras::QConeMesh(); cone->setTopRadius(0.5); cone->setBottomRadius(1); cone->setLength(3); cone->setRings(50); cone->setSlices(20); // ConeMesh Transform Qt3DCore::QTransform *coneTransform = new Qt3DCore::QTransform(); coneTransform->setScale(1.5f); coneTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), 45.0f)); coneTransform->setTranslation(QVector3D(0.0f, 4.0f, -1.5)); Qt3DExtras::QPhongMaterial *coneMaterial = new Qt3DExtras::QPhongMaterial(); coneMaterial->setDiffuse(QColor(QRgb(0x928327))); // Cone m_coneEntity = new Qt3DCore::QEntity(m_rootEntity); m_coneEntity->addComponent(cone); m_coneEntity->addComponent(coneMaterial); m_coneEntity->addComponent(coneTransform); // Cylinder shape data Qt3DExtras::QCylinderMesh *cylinder = new Qt3DExtras::QCylinderMesh(); cylinder->setRadius(1); cylinder->setLength(3); cylinder->setRings(100); cylinder->setSlices(20); // CylinderMesh Transform Qt3DCore::QTransform *cylinderTransform = new Qt3DCore::QTransform(); cylinderTransform->setScale(1.5f); cylinderTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), 45.0f)); cylinderTransform->setTranslation(QVector3D(-5.0f, 4.0f, -1.5)); Qt3DExtras::QPhongMaterial *cylinderMaterial = new Qt3DExtras::QPhongMaterial(); cylinderMaterial->setDiffuse(QColor(QRgb(0x928327))); // Cylinder m_cylinderEntity = new Qt3DCore::QEntity(m_rootEntity); m_cylinderEntity->addComponent(cylinder); m_cylinderEntity->addComponent(cylinderMaterial); m_cylinderEntity->addComponent(cylinderTransform); // Cuboid shape data Qt3DExtras::QCuboidMesh *cuboid = new Qt3DExtras::QCuboidMesh(); // CuboidMesh Transform Qt3DCore::QTransform *cuboidTransform = new Qt3DCore::QTransform(); cuboidTransform->setScale(4.0f); cuboidTransform->setTranslation(QVector3D(5.0f, -4.0f, 0.0f)); Qt3DExtras::QPhongMaterial *cuboidMaterial = new Qt3DExtras::QPhongMaterial(); cuboidMaterial->setDiffuse(QColor(QRgb(0x665423))); //Cuboid m_cuboidEntity = new Qt3DCore::QEntity(m_rootEntity); m_cuboidEntity->addComponent(cuboid); m_cuboidEntity->addComponent(cuboidMaterial); m_cuboidEntity->addComponent(cuboidTransform); // Plane shape data Qt3DExtras::QPlaneMesh *planeMesh = new Qt3DExtras::QPlaneMesh(); planeMesh->setWidth(2); planeMesh->setHeight(2); // Plane mesh transform Qt3DCore::QTransform *planeTransform = new Qt3DCore::QTransform(); planeTransform->setScale(1.3f); planeTransform->setRotation(QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 0.0f, 0.0f), 45.0f)); planeTransform->setTranslation(QVector3D(0.0f, -4.0f, 0.0f)); Qt3DExtras::QPhongMaterial *planeMaterial = new Qt3DExtras::QPhongMaterial(); planeMaterial->setDiffuse(QColor(QRgb(0xa69929))); // Plane m_planeEntity = new Qt3DCore::QEntity(m_rootEntity); m_planeEntity->addComponent(planeMesh); m_planeEntity->addComponent(planeMaterial); m_planeEntity->addComponent(planeTransform); // Sphere shape data Qt3DExtras::QSphereMesh *sphereMesh = new Qt3DExtras::QSphereMesh(); sphereMesh->setRings(20); sphereMesh->setSlices(20); sphereMesh->setRadius(2); // Sphere mesh transform Qt3DCore::QTransform *sphereTransform = new Qt3DCore::QTransform(); sphereTransform->setScale(1.3f); sphereTransform->setTranslation(QVector3D(-5.0f, -4.0f, 0.0f)); Qt3DExtras::QPhongMaterial *sphereMaterial = new Qt3DExtras::QPhongMaterial(); sphereMaterial->setDiffuse(QColor(QRgb(0xa69929))); // Sphere m_sphereEntity = new Qt3DCore::QEntity(m_rootEntity); m_sphereEntity->addComponent(sphereMesh); m_sphereEntity->addComponent(sphereMaterial); m_sphereEntity->addComponent(sphereTransform); }
bool DigitizerTreeItem::addData(const QList<FIFFLIB::FiffDigPoint>& tDigitizer, Qt3DCore::QEntity* parent) { //Create renderable 3D entity m_pParentEntity = parent; m_pRenderable3DEntity = new Renderable3DEntity(m_pParentEntity); //Initial transformation also regarding the surface offset m_pRenderable3DEntity->setRotX(90); m_pRenderable3DEntity->setRotY(180); //Create sources as small 3D spheres QVector3D pos; QColor colDefault(100,100,100); for(int i = 0; i < tDigitizer.size(); ++i) { Renderable3DEntity* pSourceSphereEntity = new Renderable3DEntity(m_pRenderable3DEntity); pos.setX(tDigitizer[i].r[0]); pos.setY(tDigitizer[i].r[1]); pos.setZ(tDigitizer[i].r[2]); Qt3DExtras::QSphereMesh* sourceSphere = new Qt3DExtras::QSphereMesh(); if (tDigitizer[i].kind == FIFFV_POINT_CARDINAL) { sourceSphere->setRadius(0.002f); } else { sourceSphere->setRadius(0.001f); } pSourceSphereEntity->addComponent(sourceSphere); pSourceSphereEntity->setPosition(pos); Qt3DExtras::QPhongMaterial* material = new Qt3DExtras::QPhongMaterial(); switch (tDigitizer[i].kind) { case FIFFV_POINT_CARDINAL: colDefault = Qt::yellow; material->setAmbient(colDefault); break; case FIFFV_POINT_HPI: colDefault = Qt::red; material->setAmbient(colDefault); break; case FIFFV_POINT_EEG: colDefault = Qt::green; material->setAmbient(colDefault); break; case FIFFV_POINT_EXTRA: colDefault = Qt::blue; material->setAmbient(colDefault); break; default: colDefault = Qt::white; material->setAmbient(colDefault); break; } pSourceSphereEntity->addComponent(material); pSourceSphereEntity->setParent(m_pRenderable3DEntity); m_lSpheres.append(pSourceSphereEntity); } //Add surface meta information as item children QVariant data; QList<QStandardItem*> list; MetaTreeItem* pItemSurfCol = new MetaTreeItem(MetaTreeItemTypes::PointColor, "Point color"); connect(pItemSurfCol, &MetaTreeItem::surfaceColorChanged, this, &DigitizerTreeItem::onSurfaceColorChanged); list.clear(); list << pItemSurfCol; list << new QStandardItem(pItemSurfCol->toolTip()); this->appendRow(list); data.setValue(colDefault); pItemSurfCol->setData(data, MetaTreeItemRoles::PointColor); pItemSurfCol->setData(data, Qt::DecorationRole); return true; }