Hi,

please do open a JIRA. However, it is more natural to share the Geometry rather than the GeometryRenderer component itself.

Cheers,

Sean

On 30/09/2016 15:18, Xavier Bigand wrote:
I found a workaround :

QGeometryRenderer*clonedGeometryRenderer=newQGeometryRenderer();

QGeometry*clonedMeshGeometry=newQGeometry(clonedGeometryRenderer);


foreach(QAttribute*attribute,geometryRenderer->geometry()->attributes())

{

attribute->buffer()->setParent(clonedMeshGeometry);

attribute->setParent(clonedMeshGeometry);

clonedMeshGeometry->addAttribute(attribute);

}

clonedGeometryRenderer->setGeometry(clonedMeshGeometry);

subEntity->addComponent(clonedGeometryRenderer);



I have to call setParent on buffers and attributes, that will have more than 
one parent, but it works, they can be shared in this way.

Need I open a bug, because it doesn't seems natural and reusing directly a 
component will be much better.




2016-09-30 15:34 GMT+02:00 Xavier Bigand <flamaros.xav...@gmail.com
<mailto:flamaros.xav...@gmail.com>>:

    I took a look to the addComponent implementation and it seems normal
    that my code doesn't work because a component is intended to be
    attached once.
    So I don't understand the meaning of the shareable flag.

    I'll try to share the geometry instead.

    2016-09-30 15:20 GMT+02:00 Xavier Bigand <flamaros.xav...@gmail.com
    <mailto:flamaros.xav...@gmail.com>>:

        I am trying to share my QGeometryRenderer between many Entities,
        but the addComponent doesn't have any effect.

        When I load our models from files, I save the root entity node
        in a map, and after I clone the node tree when a previously
        model is in the map.
        I have no issue with the material component that is in the
        cloned tree, but the geometryRenderer isn't printed by my trace
        method (material and geometryRenderer components are at the same
        level on sub-entities).

        I set the shareable flag to true on the geometryRenderer.

        PS : for the material component I don't assign the same ptr to
        the cloned model, because I don't want to share the material all
        attributs. My material class have is own clone method to copy
        only the shareable attributs (maps, specular,...).


        Here is my cloning method :

        
voidModel::cloneModel(Qt3DCore::QEntity*source,Qt3DCore::QEntity&destination)

        {

        QNodeVectorsourceEntities=source->childNodes();


        foreach(QNode*node,sourceEntities)

        {

        QEntity*sourceSubEntity=dynamic_cast<QEntity*>(node);

        QEntity*subEntity=newQEntity(&destination);


        H3D_ASSERT(sourceSubEntity!=nullptr);


        subEntity->setObjectName(sourceSubEntity->objectName());


        QComponentVectorsourceComponents=sourceSubEntity->components();


        foreach(QComponent*component,sourceComponents)

        {

        
QGeometryRenderer*geometryRenderer=dynamic_cast<QGeometryRenderer*>(component);

        LightingMaterial*material=dynamic_cast<LightingMaterial*>(component);


        if(geometryRenderer)

        {

        subEntity->addComponent(geometryRenderer);

        
LOG_INFO("geometryRenderer%s%s",qPrintable(component->metaObject()->className()),qPrintable(component->objectName()));

        }

        elseif(material)

        {

        LightingMaterial*clonedMaterial=newLightingMaterial();


        clonedMaterial->clone(*material);

        subEntity->addComponent(clonedMaterial);

        }

        elseif(dynamic_cast<QPhongMaterial*>(component))//TODOtoremove

        {

        }

        elseif(dynamic_cast<QPhongAlphaMaterial*>(component))//TODOtoremove

        {

        }

        else

        {

        
H3D_ASSERT_MSG(false,"Unsupportedcomponenttype%s",qPrintable(component->metaObject()->className()));

        }

        }

        }

        }


        I have this issue with Qt 5.7 and 5.8 build from the git branch.

        --
        Xavier




    --
    Xavier




--
Xavier


_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to