diff options
Diffstat (limited to 'src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp')
-rw-r--r-- | src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp index e58e6007..1de23ac5 100644 --- a/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp +++ b/src/Authoring/Client/Code/Core/Doc/DocumentEditor.cpp @@ -85,6 +85,7 @@ #include <QtCore/qdir.h> #include <unordered_set> #include "Runtime/Include/q3dsqmlbehavior.h" +#include "DataModelObjectReferenceHelper.h" namespace { @@ -2380,6 +2381,40 @@ public: return component; } + void CreateAliasDuplicates(const qt3dsdm::TInstanceHandleList &inInstances, + qt3dsdm::Qt3DSDMSlideHandle theSlide) override + { + for (int i = 0; i < inInstances.size(); i++) { + qt3dsdm::Qt3DSDMInstanceHandle theSelectedInstance = inInstances.at(i); + if (m_Bridge.IsDuplicateable(theSelectedInstance)) { + CPt thePoint(0, 0); + Qt3DSDMInstanceHandle addedInstance = CreateSceneGraphInstance( + ComposerObjectTypes::Alias, theSelectedInstance, theSlide, + DocumentEditorInsertType::NextSibling, thePoint, + PRIMITIVETYPE_UNKNOWN, -1); + + // Compose name and verify it's unique + Q3DStudio::CString name = m_Bridge.GetName(addedInstance); + name.append(m_Bridge.GetName(theSelectedInstance)); + if (!m_Bridge.CheckNameUnique(addedInstance, name)) { + name = m_Bridge.GetUniqueChildName(m_Bridge.GetParentInstance(addedInstance), + addedInstance, name); + } + m_Bridge.SetName(addedInstance, name); + + // Object reference + qt3dsdm::SObjectRefType objRef = + m_Doc.GetDataModelObjectReferenceHelper()->GetAssetRefValue( + theSelectedInstance, addedInstance, + CRelativePathTools::EPathType::EPATHTYPE_GUID); + qt3dsdm::Qt3DSDMPropertyHandle theProperty = + m_Doc.GetPropertySystem()->GetAggregateInstancePropertyByName( + addedInstance, L"referencednode"); + SetInstancePropertyValue(addedInstance, theProperty, objRef); + } + } + } + void DuplicateInstances(const qt3dsdm::TInstanceHandleList &inInstances) override { |