DigitizerTreeItem::DigitizerTreeItem(int iType, const QString& text) : AbstractTreeItem(iType, text) , m_pRenderable3DEntity(Q_NULLPTR) { this->setEditable(false); this->setCheckable(true); this->setCheckState(Qt::Checked); this->setToolTip(text); //Add color picker item as meta information item 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(Qt::blue); pItemSurfCol->setData(data, MetaTreeItemRoles::PointColor); pItemSurfCol->setData(data, Qt::DecorationRole); }
void FsSurfaceTreeItem::addData(const Surface& tSurface) { //Create color from curvature information with default gyri and sulcus colors MatrixX3f matCurvatureColor = createCurvatureVertColor(tSurface.curv()); //Set renderable 3D entity mesh and color data m_pCustomMesh->setMeshData(tSurface.rr(), tSurface.nn(), tSurface.tris(), matCurvatureColor, Qt3DRender::QGeometryRenderer::Triangles); this->setPosition(QVector3D(-tSurface.offset()(0), -tSurface.offset()(1), -tSurface.offset()(2))); //Add data which is held by this FsSurfaceTreeItem QVariant data; data.setValue(matCurvatureColor); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurrentColorVert); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurvatureColorVert); data.setValue(tSurface.curv()); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurv); data.setValue(tSurface.rr()); this->setData(data, Data3DTreeModelItemRoles::SurfaceVert); //Add data which is held by this FsSurfaceTreeItem QList<QStandardItem*> list; MetaTreeItem *itemSurfFileName = new MetaTreeItem(MetaTreeItemTypes::FileName, tSurface.fileName()); itemSurfFileName->setEditable(false); list.clear(); list << itemSurfFileName; list << new QStandardItem(itemSurfFileName->toolTip()); this->appendRow(list); data.setValue(tSurface.fileName()); itemSurfFileName->setData(data, MetaTreeItemRoles::SurfaceFileName); // MetaTreeItem *itemSurfPath = new MetaTreeItem(MetaTreeItemTypes::FilePath, tSurface.filePath()); // itemSurfPath->setEditable(false); // list.clear(); // list << itemSurfPath; // list << new QStandardItem(itemSurfPath->toolTip()); // this->appendRow(list); // data.setValue(tSurface.filePath()); // itemSurfPath->setData(data, MetaTreeItemRoles::SurfaceFilePath); }
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 BemSurfaceTreeItem::addData(const MNEBemSurface& tBemSurface, Qt3DCore::QEntity* parent) { //Create renderable 3D entity m_pParentEntity = parent; m_pRenderable3DEntity = new Renderable3DEntity(parent); //Initial transformation also regarding the surface offset m_pRenderable3DEntity->setRotY(180); m_pRenderable3DEntity->setRotX(90); //Create color from curvature information with default gyri and sulcus colors QByteArray arrayVertColor = createVertColor(tBemSurface.rr); //Set renderable 3D entity mesh and color data m_pRenderable3DEntity->setMeshData(tBemSurface.rr, tBemSurface.nn, tBemSurface.tris, arrayVertColor); //Find out BEM layer type and change items name this->setText(MNEBemSurface::id_name(tBemSurface.id)); //Add data which is held by this BemSurfaceTreeItem QVariant data; data.setValue(arrayVertColor); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurrentColorVert); data.setValue(tBemSurface.rr); this->setData(data, Data3DTreeModelItemRoles::SurfaceVert); data.setValue(tBemSurface.tris); this->setData(data, Data3DTreeModelItemRoles::SurfaceTris); data.setValue(tBemSurface.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 *itemAlpha = new MetaTreeItem(MetaTreeItemTypes::SurfaceAlpha, "1.0"); connect(itemAlpha, &MetaTreeItem::surfaceAlphaChanged, this, &BemSurfaceTreeItem::onSurfaceAlphaChanged); list.clear(); list << itemAlpha; list << new QStandardItem(itemAlpha->toolTip()); this->appendRow(list); data.setValue(0.5); itemAlpha->setData(data, MetaTreeItemRoles::SurfaceAlpha); MetaTreeItem* pItemSurfCol = new MetaTreeItem(MetaTreeItemTypes::SurfaceColor, "Surface color"); connect(pItemSurfCol, &MetaTreeItem::surfaceColorChanged, this, &BemSurfaceTreeItem::onSurfaceColorChanged); list.clear(); 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); MetaTreeItem *itemXTrans = new MetaTreeItem(MetaTreeItemTypes::SurfaceTranslateX, QString::number(0)); itemXTrans->setEditable(true); connect(itemXTrans, &MetaTreeItem::surfaceTranslationXChanged, this, &BemSurfaceTreeItem::onSurfaceTranslationXChanged); list.clear(); list << itemXTrans; list << new QStandardItem(itemXTrans->toolTip()); this->appendRow(list); MetaTreeItem *itemYTrans = new MetaTreeItem(MetaTreeItemTypes::SurfaceTranslateY, QString::number(0)); itemYTrans->setEditable(true); connect(itemYTrans, &MetaTreeItem::surfaceTranslationYChanged, this, &BemSurfaceTreeItem::onSurfaceTranslationYChanged); list.clear(); list << itemYTrans; list << new QStandardItem(itemYTrans->toolTip()); this->appendRow(list); MetaTreeItem *itemZTrans = new MetaTreeItem(MetaTreeItemTypes::SurfaceTranslateZ, QString::number(0)); itemZTrans->setEditable(true); connect(itemZTrans, &MetaTreeItem::surfaceTranslationZChanged, this, &BemSurfaceTreeItem::onSurfaceTranslationZChanged); list.clear(); list << itemZTrans; list << new QStandardItem(itemZTrans->toolTip()); this->appendRow(list); return true; }
void SensorDataTreeItem::initItem() { this->setEditable(false); this->setToolTip("SensorData item"); //Add items QList<QStandardItem*> list; QVariant data; MetaTreeItem* pItemStreamStatus = new MetaTreeItem(MetaTreeItemTypes::StreamStatus, "Stream data on/off"); connect(pItemStreamStatus, &MetaTreeItem::checkStateChanged, this, &SensorDataTreeItem::onCheckStateWorkerChanged); list << pItemStreamStatus; list << new QStandardItem(pItemStreamStatus->toolTip()); this->appendRow(list); pItemStreamStatus->setCheckable(true); pItemStreamStatus->setCheckState(Qt::Unchecked); data.setValue(false); pItemStreamStatus->setData(data, MetaTreeItemRoles::StreamStatus); MetaTreeItem* pItemColormapType = new MetaTreeItem(MetaTreeItemTypes::ColormapType, "Hot"); connect(pItemColormapType, &MetaTreeItem::dataChanged, this, &SensorDataTreeItem::onColormapTypeChanged); list.clear(); list << pItemColormapType; list << new QStandardItem(pItemColormapType->toolTip()); this->appendRow(list); data.setValue(QString("Hot")); pItemColormapType->setData(data, MetaTreeItemRoles::ColormapType); MetaTreeItem* pItemSourceLocNormValue = new MetaTreeItem(MetaTreeItemTypes::DistributedSourceLocThreshold, "0.0, 0.5,10.0"); connect(pItemSourceLocNormValue, &MetaTreeItem::dataChanged, this, &SensorDataTreeItem::onDataNormalizationValueChanged); list.clear(); list << pItemSourceLocNormValue; list << new QStandardItem(pItemSourceLocNormValue->toolTip()); this->appendRow(list); data.setValue(QVector3D(0.0,5.5,15)); pItemSourceLocNormValue->setData(data, MetaTreeItemRoles::DistributedSourceLocThreshold); MetaTreeItem *pItemStreamingInterval = new MetaTreeItem(MetaTreeItemTypes::StreamingTimeInterval, "17"); connect(pItemStreamingInterval, &MetaTreeItem::dataChanged, this, &SensorDataTreeItem::onTimeIntervalChanged); list.clear(); list << pItemStreamingInterval; list << new QStandardItem(pItemStreamingInterval->toolTip()); this->appendRow(list); data.setValue(17); pItemStreamingInterval->setData(data, MetaTreeItemRoles::StreamingTimeInterval); MetaTreeItem *pItemLoopedStreaming = new MetaTreeItem(MetaTreeItemTypes::LoopedStreaming, "Looping on/off"); connect(pItemLoopedStreaming, &MetaTreeItem::checkStateChanged, this, &SensorDataTreeItem::onCheckStateLoopedStateChanged); pItemLoopedStreaming->setCheckable(true); pItemLoopedStreaming->setCheckState(Qt::Checked); list.clear(); list << pItemLoopedStreaming; list << new QStandardItem(pItemLoopedStreaming->toolTip()); this->appendRow(list); MetaTreeItem *pItemAveragedStreaming = new MetaTreeItem(MetaTreeItemTypes::NumberAverages, "1"); connect(pItemAveragedStreaming, &MetaTreeItem::dataChanged, this, &SensorDataTreeItem::onNumberAveragesChanged); list.clear(); list << pItemAveragedStreaming; list << new QStandardItem(pItemAveragedStreaming->toolTip()); this->appendRow(list); data.setValue(1); pItemAveragedStreaming->setData(data, MetaTreeItemRoles::NumberAverages); MetaTreeItem *pItemCancelDistance = new MetaTreeItem(MetaTreeItemTypes::CancelDistance, "0.05"); connect(pItemCancelDistance, &MetaTreeItem::dataChanged, this, &SensorDataTreeItem::onCancelDistanceChanged); list.clear(); list << pItemCancelDistance; list << new QStandardItem(pItemCancelDistance->toolTip()); this->appendRow(list); data.setValue(0.05); pItemCancelDistance->setData(data, MetaTreeItemRoles::CancelDistance); MetaTreeItem* pInterpolationFunction = new MetaTreeItem(MetaTreeItemTypes::InterpolationFunction, "Cubic"); connect(pInterpolationFunction, &MetaTreeItem::dataChanged, this, &SensorDataTreeItem::onInterpolationFunctionChanged); list.clear(); list << pInterpolationFunction; list << new QStandardItem(pInterpolationFunction->toolTip()); this->appendRow(list); data.setValue(QString("Cubic")); pInterpolationFunction->setData(data, MetaTreeItemRoles::InterpolationFunction); }
void FsSurfaceTreeItem::addData(const Surface& tSurface, Qt3DCore::QEntity* parent) { //Create renderable 3D entity m_pRenderable3DEntity = new Renderable3DEntity(parent); //Initial transformation also regarding the surface offset m_pRenderable3DEntity->setPosition(QVector3D(-tSurface.offset()(0), -tSurface.offset()(1), -tSurface.offset()(2))); //Create color from curvature information with default gyri and sulcus colors QByteArray arrayCurvatureColor = createCurvatureVertColor(tSurface.curv()); //Set renderable 3D entity mesh and color data m_pRenderable3DEntity->setMeshData(tSurface.rr(), tSurface.nn(), tSurface.tris(), arrayCurvatureColor, Qt3DRender::QGeometryRenderer::Patches); //Set shaders PerVertexTessPhongAlphaMaterial* pPerVertexTessPhongAlphaMaterial = new PerVertexTessPhongAlphaMaterial(); m_pRenderable3DEntity->addComponent(pPerVertexTessPhongAlphaMaterial); // //Render normals // m_pRenderable3DEntityNormals = new Renderable3DEntity(m_pRenderable3DEntity); // m_pRenderable3DEntityNormals->setMeshData(tSurface.rr(), tSurface.nn(), tSurface.tris(), arrayCurvatureColor, Qt3DRender::QGeometryRenderer::Triangles); // m_pRenderable3DEntityNormals->setPosition(QVector3D(-tSurface.offset()(0), -tSurface.offset()(1), -tSurface.offset()(2))); // ShowNormalsMaterial* pShowNormalsMaterial = new ShowNormalsMaterial(); // m_pRenderable3DEntityNormals->addComponent(pShowNormalsMaterial); // //Generate activation overlay surface // MatrixX3f overlayAdds = tSurface.rr(); // for(int i = 0; i<tSurface.nn().rows(); i++) { // RowVector3f direction = tSurface.nn().row(i); // direction.normalize(); // overlayAdds.row(i) = direction*0.0001; // } // m_pRenderable3DEntityNormals->setMeshData(tSurface.rr()+overlayAdds, tSurface.nn(), tSurface.tris(), -tSurface.offset(), matCurvatureColor); //Add data which is held by this FsSurfaceTreeItem QVariant data; data.setValue(arrayCurvatureColor); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurrentColorVert); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurvatureColorVert); data.setValue(tSurface.curv()); this->setData(data, Data3DTreeModelItemRoles::SurfaceCurv); //Add surface meta information as item children QList<QStandardItem*> list; m_pItemSurfColSulci = new MetaTreeItem(MetaTreeItemTypes::SurfaceColorSulci, "Sulci color"); connect(m_pItemSurfColSulci, &MetaTreeItem::curvColorsChanged, this, &FsSurfaceTreeItem::onColorInfoOriginOrCurvColorChanged); list << m_pItemSurfColSulci; list << new QStandardItem(m_pItemSurfColSulci->toolTip()); this->appendRow(list); data.setValue(QColor(50,50,50)); m_pItemSurfColSulci->setData(data, MetaTreeItemRoles::SurfaceColorSulci); m_pItemSurfColSulci->setData(data, Qt::DecorationRole); m_pItemSurfColGyri = new MetaTreeItem(MetaTreeItemTypes::SurfaceColorGyri, "Gyri color"); connect(m_pItemSurfColGyri, &MetaTreeItem::curvColorsChanged, this, &FsSurfaceTreeItem::onColorInfoOriginOrCurvColorChanged); list.clear(); list << m_pItemSurfColGyri; list << new QStandardItem(m_pItemSurfColGyri->toolTip()); this->appendRow(list); data.setValue(QColor(125,125,125)); m_pItemSurfColGyri->setData(data, MetaTreeItemRoles::SurfaceColorGyri); m_pItemSurfColGyri->setData(data, Qt::DecorationRole); float fAlpha = 0.35f; MetaTreeItem *itemAlpha = new MetaTreeItem(MetaTreeItemTypes::SurfaceAlpha, QString("%1").arg(fAlpha)); connect(itemAlpha, &MetaTreeItem::surfaceAlphaChanged, this, &FsSurfaceTreeItem::onSurfaceAlphaChanged); list.clear(); list << itemAlpha; list << new QStandardItem(itemAlpha->toolTip()); this->appendRow(list); data.setValue(fAlpha); itemAlpha->setData(data, MetaTreeItemRoles::SurfaceAlpha); float fTessInner = 1.0; MetaTreeItem *itemTessInner = new MetaTreeItem(MetaTreeItemTypes::SurfaceTessInner, QString("%1").arg(fTessInner)); connect(itemTessInner, &MetaTreeItem::surfaceTessInnerChanged, this, &FsSurfaceTreeItem::onSurfaceTessInnerChanged); list.clear(); list << itemTessInner; list << new QStandardItem(itemTessInner->toolTip()); this->appendRow(list); data.setValue(fTessInner); itemTessInner->setData(data, MetaTreeItemRoles::SurfaceTessInner); float fTessOuter = 1.0; MetaTreeItem *itemTessOuter = new MetaTreeItem(MetaTreeItemTypes::SurfaceTessOuter, QString("%1").arg(fTessOuter)); connect(itemTessOuter, &MetaTreeItem::surfaceTessOuterChanged, this, &FsSurfaceTreeItem::onSurfaceTessOuterChanged); list.clear(); list << itemTessOuter; list << new QStandardItem(itemTessOuter->toolTip()); this->appendRow(list); data.setValue(fTessOuter); itemTessOuter->setData(data, MetaTreeItemRoles::SurfaceTessOuter); float fTriangleScale = 1.0; MetaTreeItem *itemTriangleScale = new MetaTreeItem(MetaTreeItemTypes::SurfaceTriangleScale, QString("%1").arg(fTriangleScale)); connect(itemTriangleScale, &MetaTreeItem::surfaceTriangleScaleChanged, this, &FsSurfaceTreeItem::onSurfaceTriangleScaleChanged); list.clear(); list << itemTriangleScale; list << new QStandardItem(itemTriangleScale->toolTip()); this->appendRow(list); data.setValue(fTriangleScale); itemTriangleScale->setData(data, MetaTreeItemRoles::SurfaceTriangleScale); MetaTreeItem *itemSurfFileName = new MetaTreeItem(MetaTreeItemTypes::FileName, tSurface.fileName()); itemSurfFileName->setEditable(false); list.clear(); list << itemSurfFileName; list << new QStandardItem(itemSurfFileName->toolTip()); this->appendRow(list); data.setValue(tSurface.fileName()); itemSurfFileName->setData(data, MetaTreeItemRoles::SurfaceFileName); MetaTreeItem *itemSurfType = new MetaTreeItem(MetaTreeItemTypes::SurfaceType, tSurface.surf()); itemSurfType->setEditable(false); list.clear(); list << itemSurfType; list << new QStandardItem(itemSurfType->toolTip()); this->appendRow(list); data.setValue(tSurface.surf()); itemSurfType->setData(data, MetaTreeItemRoles::SurfaceType); MetaTreeItem *itemSurfPath = new MetaTreeItem(MetaTreeItemTypes::FilePath, tSurface.filePath()); itemSurfPath->setEditable(false); list.clear(); list << itemSurfPath; list << new QStandardItem(itemSurfPath->toolTip()); this->appendRow(list); data.setValue(tSurface.filePath()); itemSurfPath->setData(data, MetaTreeItemRoles::SurfaceFilePath); MetaTreeItem *itemXTrans = new MetaTreeItem(MetaTreeItemTypes::SurfaceTranslateX, QString::number(tSurface.offset()(0))); itemXTrans->setEditable(true); connect(itemXTrans, &MetaTreeItem::surfaceTranslationXChanged, this, &FsSurfaceTreeItem::onSurfaceTranslationXChanged); list.clear(); list << itemXTrans; list << new QStandardItem(itemXTrans->toolTip()); this->appendRow(list); MetaTreeItem *itemYTrans = new MetaTreeItem(MetaTreeItemTypes::SurfaceTranslateY, QString::number(tSurface.offset()(1))); itemYTrans->setEditable(true); connect(itemYTrans, &MetaTreeItem::surfaceTranslationYChanged, this, &FsSurfaceTreeItem::onSurfaceTranslationYChanged); list.clear(); list << itemYTrans; list << new QStandardItem(itemYTrans->toolTip()); this->appendRow(list); MetaTreeItem *itemZTrans = new MetaTreeItem(MetaTreeItemTypes::SurfaceTranslateZ, QString::number(tSurface.offset()(2))); itemZTrans->setEditable(true); connect(itemZTrans, &MetaTreeItem::surfaceTranslationZChanged, this, &FsSurfaceTreeItem::onSurfaceTranslationZChanged); list.clear(); list << itemZTrans; list << new QStandardItem(itemZTrans->toolTip()); this->appendRow(list); }
void AbstractMeshTreeItem::initItem() { this->setEditable(false); this->setCheckable(true); this->setCheckState(Qt::Checked); this->setToolTip("Abstract Mesh Tree Item"); //Add surface meta information as item children QList<QStandardItem*> list; QVariant data; //Material options MetaTreeItem* pItemMaterialOptions = new MetaTreeItem(MetaTreeItemTypes::UnknownItem, "Material"); pItemMaterialOptions->setEditable(false); list.clear(); list << pItemMaterialOptions; list << new QStandardItem("The material options"); this->appendRow(list); QString surfaceType("Phong Alpha"); MetaTreeItem* pItemMaterialType = new MetaTreeItem(MetaTreeItemTypes::MaterialType, surfaceType); connect(pItemMaterialType, &MetaTreeItem::dataChanged, this, &AbstractMeshTreeItem::onSurfaceMaterialChanged); list.clear(); list << pItemMaterialType; list << new QStandardItem(pItemMaterialType->toolTip()); pItemMaterialOptions->appendRow(list); data.setValue(QString(surfaceType)); pItemMaterialType->setData(data, MetaTreeItemRoles::SurfaceMaterial); pItemMaterialType->setData(data, Qt::DecorationRole); float fTessInner = 1.0; MetaTreeItem *itemTessInner = new MetaTreeItem(MetaTreeItemTypes::SurfaceTessInner, QString("%1").arg(fTessInner)); connect(itemTessInner, &MetaTreeItem::dataChanged, this, &AbstractMeshTreeItem::onSurfaceTessInnerChanged); list.clear(); list << itemTessInner; list << new QStandardItem(itemTessInner->toolTip()); pItemMaterialOptions->appendRow(list); data.setValue(fTessInner); itemTessInner->setData(data, MetaTreeItemRoles::SurfaceTessInner); float fTessOuter = 1.0; MetaTreeItem *itemTessOuter = new MetaTreeItem(MetaTreeItemTypes::SurfaceTessOuter, QString("%1").arg(fTessOuter)); connect(itemTessOuter, &MetaTreeItem::dataChanged, this, &AbstractMeshTreeItem::onSurfaceTessOuterChanged); list.clear(); list << itemTessOuter; list << new QStandardItem(itemTessOuter->toolTip()); pItemMaterialOptions->appendRow(list); data.setValue(fTessOuter); itemTessOuter->setData(data, MetaTreeItemRoles::SurfaceTessOuter); float fTriangleScale = 1.0; MetaTreeItem *itemTriangleScale = new MetaTreeItem(MetaTreeItemTypes::SurfaceTriangleScale, QString("%1").arg(fTriangleScale)); connect(itemTriangleScale, &MetaTreeItem::dataChanged, this, &AbstractMeshTreeItem::onSurfaceTriangleScaleChanged); list.clear(); list << itemTriangleScale; list << new QStandardItem(itemTriangleScale->toolTip()); pItemMaterialOptions->appendRow(list); data.setValue(fTriangleScale); itemTriangleScale->setData(data, MetaTreeItemRoles::SurfaceTriangleScale); //Init materials this->onSurfaceMaterialChanged("Phong Alpha"); //Init custom mesh this->addComponent(m_pCustomMesh); }
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; }
bool BrainRTSourceLocDataTreeItem::init(const MNEForwardSolution& tForwardSolution, const QByteArray& arraySurfaceVertColor, int iHemi, const VectorXi& vecLabelIds, const QList<FSLIB::Label>& lLabels) { //Set hemisphere information as item's data this->setData(iHemi, Data3DTreeModelItemRoles::RTHemi); //Set data based on clusterd or full source space bool isClustered = tForwardSolution.src[iHemi].isClustered(); if(isClustered) { //Source Space IS clustered switch(iHemi) { case 0: this->setData(0, Data3DTreeModelItemRoles::RTStartIdx); this->setData(tForwardSolution.src[0].cluster_info.centroidSource_rr.size() - 1, Data3DTreeModelItemRoles::RTEndIdx); break; case 1: this->setData(tForwardSolution.src[0].cluster_info.centroidSource_rr.size(), Data3DTreeModelItemRoles::RTStartIdx); this->setData(tForwardSolution.src[0].cluster_info.centroidSource_rr.size() + tForwardSolution.src[1].cluster_info.centroidSource_rr.size() - 1, Data3DTreeModelItemRoles::RTEndIdx); break; } } else { //Source Space is NOT clustered switch(iHemi) { case 0: this->setData(0, Data3DTreeModelItemRoles::RTStartIdx); this->setData(tForwardSolution.src[0].nuse - 1, Data3DTreeModelItemRoles::RTEndIdx); break; case 1: this->setData(tForwardSolution.src[0].nuse, Data3DTreeModelItemRoles::RTStartIdx); this->setData(tForwardSolution.src[0].nuse + tForwardSolution.src[1].nuse - 1, Data3DTreeModelItemRoles::RTEndIdx); break; } } QVariant data; if(iHemi != -1 && iHemi < tForwardSolution.src.size()) { if(isClustered) { //When clustered source space, the idx no's are the annotation labels. Take the .cluster_info.centroidVertno instead. VectorXi clustVertNo(tForwardSolution.src[iHemi].cluster_info.centroidVertno.size()); for(int i = 0; i <clustVertNo.rows(); i++) { clustVertNo(i) = tForwardSolution.src[iHemi].cluster_info.centroidVertno.at(i); } data.setValue(clustVertNo); } else { data.setValue(tForwardSolution.src[iHemi].vertno); } this->setData(data, Data3DTreeModelItemRoles::RTVertNo); } //Add meta information as item children QList<QStandardItem*> list; MetaTreeItem* pItemRTDataStreamStatus = new MetaTreeItem(MetaTreeItemTypes::RTDataStreamStatus, "Stream data on/off"); connect(pItemRTDataStreamStatus, &MetaTreeItem::checkStateChanged, this, &BrainRTSourceLocDataTreeItem::onCheckStateWorkerChanged); list << pItemRTDataStreamStatus; list << new QStandardItem(pItemRTDataStreamStatus->toolTip()); this->appendRow(list); pItemRTDataStreamStatus->setCheckable(true); pItemRTDataStreamStatus->setCheckState(Qt::Unchecked); data.setValue(false); pItemRTDataStreamStatus->setData(data, MetaTreeItemRoles::RTDataStreamStatus); MetaTreeItem* pItemVisuaizationType = new MetaTreeItem(MetaTreeItemTypes::RTDataVisualizationType, "Vertex based"); connect(pItemVisuaizationType, &MetaTreeItem::rtDataVisualizationTypeChanged, this, &BrainRTSourceLocDataTreeItem::onVisualizationTypeChanged); list.clear(); list << pItemVisuaizationType; list << new QStandardItem(pItemVisuaizationType->toolTip()); this->appendRow(list); data.setValue(QString("Single Vertex")); pItemVisuaizationType->setData(data, MetaTreeItemRoles::RTDataVisualizationType); QString sIsClustered = isClustered ? "Clustered" : "Full"; MetaTreeItem* pItemSourceSpaceType = new MetaTreeItem(MetaTreeItemTypes::RTDataSourceSpaceType, sIsClustered); pItemSourceSpaceType->setEditable(false); list.clear(); list << pItemSourceSpaceType; list << new QStandardItem(pItemSourceSpaceType->toolTip()); this->appendRow(list); data.setValue(sIsClustered); pItemSourceSpaceType->setData(data, MetaTreeItemRoles::RTDataSourceSpaceType); MetaTreeItem* pItemColormapType = new MetaTreeItem(MetaTreeItemTypes::RTDataColormapType, "Hot Negative 2"); connect(pItemColormapType, &MetaTreeItem::rtDataColormapTypeChanged, this, &BrainRTSourceLocDataTreeItem::onColormapTypeChanged); list.clear(); list << pItemColormapType; list << new QStandardItem(pItemColormapType->toolTip()); this->appendRow(list); data.setValue(QString("Hot Negative 2")); pItemColormapType->setData(data, MetaTreeItemRoles::RTDataColormapType); MetaTreeItem* pItemSourceLocNormValue = new MetaTreeItem(MetaTreeItemTypes::RTDataNormalizationValue, "10.0"); connect(pItemSourceLocNormValue, &MetaTreeItem::rtDataNormalizationValueChanged, this, &BrainRTSourceLocDataTreeItem::onDataNormalizationValueChanged); list.clear(); list << pItemSourceLocNormValue; list << new QStandardItem(pItemSourceLocNormValue->toolTip()); this->appendRow(list); data.setValue(10.0); pItemSourceLocNormValue->setData(data, MetaTreeItemRoles::RTDataNormalizationValue); MetaTreeItem *pItemStreamingInterval = new MetaTreeItem(MetaTreeItemTypes::RTDataTimeInterval, "1000"); connect(pItemStreamingInterval, &MetaTreeItem::rtDataTimeIntervalChanged, this, &BrainRTSourceLocDataTreeItem::onTimeIntervalChanged); list.clear(); list << pItemStreamingInterval; list << new QStandardItem(pItemStreamingInterval->toolTip()); this->appendRow(list); data.setValue(1000); pItemStreamingInterval->setData(data, MetaTreeItemRoles::RTDataTimeInterval); MetaTreeItem *pItemLoopedStreaming = new MetaTreeItem(MetaTreeItemTypes::RTDataLoopedStreaming, "Looping on/off"); connect(pItemLoopedStreaming, &MetaTreeItem::checkStateChanged, this, &BrainRTSourceLocDataTreeItem::onCheckStateLoopedStateChanged); pItemLoopedStreaming->setCheckable(true); pItemLoopedStreaming->setCheckState(Qt::Checked); list.clear(); list << pItemLoopedStreaming; list << new QStandardItem(pItemLoopedStreaming->toolTip()); this->appendRow(list); MetaTreeItem *pItemAveragedStreaming = new MetaTreeItem(MetaTreeItemTypes::RTDataNumberAverages, "1"); connect(pItemAveragedStreaming, &MetaTreeItem::rtDataNumberAveragesChanged, this, &BrainRTSourceLocDataTreeItem::onNumberAveragesChanged); list.clear(); list << pItemAveragedStreaming; list << new QStandardItem(pItemAveragedStreaming->toolTip()); this->appendRow(list); data.setValue(1); pItemAveragedStreaming->setData(data, MetaTreeItemRoles::RTDataNumberAverages); //set rt data corresponding to the hemisphere m_pSourceLocRtDataWorker->setSurfaceData(arraySurfaceVertColor, this->data(Data3DTreeModelItemRoles::RTVertNo).value<VectorXi>()); m_pSourceLocRtDataWorker->setAnnotationData(vecLabelIds, lLabels); m_bIsInit = true; return true; }