void View3D::createCoordSystem(Qt3DCore::QEntity* parent) { m_pCoordSysEntity = QSharedPointer<Qt3DCore::QEntity>::create(parent); //create geometry QSharedPointer<Qt3DExtras::QCylinderGeometry> pAxis = QSharedPointer<Qt3DExtras::QCylinderGeometry>::create(); pAxis->setRadius(0.001f); pAxis->setLength(30); pAxis->setRings(100); pAxis->setSlices(20); //create mesh GeometryMultiplier *pCoordSysMesh = new GeometryMultiplier(pAxis); QVector<QColor> vColors; vColors.reserve(3); QVector<QMatrix4x4> vTransforms; vTransforms.reserve(3); QMatrix4x4 transformMat; // Y - red transformMat.setToIdentity(); vTransforms.push_back(transformMat); vColors.push_back(QColor(255, 0, 0)); // X - blue transformMat.setToIdentity(); transformMat.rotate(90.0f, QVector3D(0,0,1)); vTransforms.push_back(transformMat); vColors.push_back(QColor(0, 0, 255)); // Z - green transformMat.setToIdentity(); transformMat.rotate(90.0f, QVector3D(1,0,0)); vTransforms.push_back(transformMat); vColors.push_back(QColor(0, 255, 0)); //Set transforms and colors pCoordSysMesh->setTransforms(vTransforms); pCoordSysMesh->setColors(vColors); //Add material GeometryMultiplierMaterial* pCoordSysMaterial = new GeometryMultiplierMaterial; pCoordSysMaterial->setAmbient(QColor(0,0,0)); pCoordSysMaterial->setAlpha(1.0f); m_pCoordSysEntity->addComponent(pCoordSysMesh); m_pCoordSysEntity->addComponent(pCoordSysMaterial); }
void DigitizerTreeItem::addData(const QList<FIFFLIB::FiffDigPoint>& tDigitizer, const float tSphereRadius, const QColor &tSphereColor) { //create instanced renderer if there is none if(!m_pSphereMesh && !tDigitizer.isEmpty()) { Renderable3DEntity* pSourceSphereEntity = new Renderable3DEntity(this); QSharedPointer<Qt3DExtras::QSphereGeometry> pSourceSphereGeometry = QSharedPointer<Qt3DExtras::QSphereGeometry>::create(); pSourceSphereGeometry->setRadius(tSphereRadius); m_pSphereMesh = new GeometryMultiplier(pSourceSphereGeometry); //Set sphere positions pSourceSphereEntity->addComponent(m_pSphereMesh); //add transform Qt3DCore::QTransform *pTransform = new Qt3DCore::QTransform; pSourceSphereEntity->addComponent(pTransform); //Add material GeometryMultiplierMaterial* pMaterial = new GeometryMultiplierMaterial(true); pMaterial->setAmbient(tSphereColor); pSourceSphereEntity->addComponent(pMaterial); } //Set transforms if(!tDigitizer.isEmpty()) { QVector<QMatrix4x4> vTransforms; vTransforms.reserve(tDigitizer.size()); QVector3D tempPos; for(int i = 0; i < tDigitizer.size(); ++i) { QMatrix4x4 tempTransform; tempPos.setX(tDigitizer[i].r[0]); tempPos.setY(tDigitizer[i].r[1]); tempPos.setZ(tDigitizer[i].r[2]); tempTransform.translate(tempPos); vTransforms.push_back(tempTransform); } //Set instance Transform m_pSphereMesh->setTransforms(vTransforms); } //Update alpha float alpha = 1.0; this->setMaterialParameter(QVariant(alpha), "alpha"); QList<QStandardItem*> items = m_pItemAppearanceOptions->findChildren(MetaTreeItemTypes::AlphaValue); for(int i = 0; i < items.size(); ++i) { if(MetaTreeItem* item = dynamic_cast<MetaTreeItem*>(items.at(i))) { QVariant data; data.setValue(alpha); item->setData(data, MetaTreeItemRoles::AlphaValue); item->setData(data, Qt::DecorationRole); } } //Update colors in color item items = m_pItemAppearanceOptions->findChildren(MetaTreeItemTypes::Color); for(int i = 0; i < items.size(); ++i) { if(MetaTreeItem* item = dynamic_cast<MetaTreeItem*>(items.at(i))) { QVariant data; data.setValue(tSphereColor); item->setData(data, MetaTreeItemRoles::Color); item->setData(data, Qt::DecorationRole); } } }