diff --git a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h index 95af9fdfd30..3150ad61e23 100644 --- a/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h +++ b/src/plugins/qmldesigner/designercore/include/qmlvisualnode.h @@ -101,6 +101,13 @@ public: const ItemLibraryEntry &itemLibraryEntry, const Position &position, NodeAbstractProperty parentproperty); + + static QmlVisualNode createQmlVisualNode(AbstractView *view, + const ItemLibraryEntry &itemLibraryEntry, + const QVector3D &position); + + static NodeListProperty findSceneNodeProperty(AbstractView *view); + private: void setDoubleProperty(const PropertyName &name, double value); }; diff --git a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp index 15226fa32b8..e9977d5c98c 100644 --- a/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmlvisualnode.cpp @@ -39,6 +39,8 @@ #include "modelmerger.h" #include "rewritingexception.h" +#include + #include #include #include @@ -289,6 +291,32 @@ QmlObjectNode QmlVisualNode::createQmlObjectNode(AbstractView *view, return newQmlObjectNode; } +QmlVisualNode QmlVisualNode::createQmlVisualNode(AbstractView *view, + const ItemLibraryEntry &itemLibraryEntry, + const QVector3D &position) +{ + NodeAbstractProperty sceneNodeProperty = findSceneNodeProperty(view); + QTC_ASSERT(sceneNodeProperty.isValid(), return {}); + ModelNode node = createQmlObjectNode(view, itemLibraryEntry, position, sceneNodeProperty).modelNode(); + + return node; +} + +NodeListProperty QmlVisualNode::findSceneNodeProperty(AbstractView *view) +{ + QTC_ASSERT(view, return {}); + + QList quickViews = view->allModelNodesOfType("QtQuick3D.View3D"); + QTC_ASSERT(!quickViews.isEmpty(), return {}); + const ModelNode quickView = quickViews.first(); + + QList nodes = quickView.directSubModelNodesOfType("QtQuick3D.Node"); + QTC_ASSERT(!nodes.isEmpty(), return {}); + const ModelNode node = nodes.first(); + + return node.defaultNodeListProperty(); +} + QList toModelNodeList(const QList &qmlVisualNodeList) { QList modelNodeList;