Пример #1
0
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);
}
Пример #2
0
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);
        }
    }
}