From 0d60954c66b58c6762b03eadcd1bd00e040d2f80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antti=20M=C3=A4=C3=A4tt=C3=A4?= Date: Mon, 16 Sep 2019 13:15:00 +0300 Subject: Fix generating unique ids for objects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QT3DS-3816 Change-Id: I99c905d0b29db5d8a80f46992b3ade6a4b703dc5 Reviewed-by: Miikka Heikkinen Reviewed-by: Tomi Korpipää Reviewed-by: Antti Määttä --- src/Authoring/Client/Code/Core/Doc/Doc.cpp | 1 - .../Client/Code/Core/Doc/IComposerSerializer.cpp | 347 ++++++++++++--------- .../Client/Code/Core/Doc/IComposerSerializer.h | 1 - 3 files changed, 205 insertions(+), 144 deletions(-) diff --git a/src/Authoring/Client/Code/Core/Doc/Doc.cpp b/src/Authoring/Client/Code/Core/Doc/Doc.cpp index ba7e987c..e0b6af8c 100644 --- a/src/Authoring/Client/Code/Core/Doc/Doc.cpp +++ b/src/Authoring/Client/Code/Core/Doc/Doc.cpp @@ -2099,7 +2099,6 @@ bool CDoc::VerifyCanRename(qt3dsdm::Qt3DSDMInstanceHandle inAsset) */ void CDoc::LoadPresentationFile(CBufferedInputStream *inInputStream) { - Q3DStudio::IComposerSerializer::clear(); // Let any interested parties know that a presentation is going to be loaded m_Core->GetDispatch()->FireOnLoadingPresentation(); diff --git a/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.cpp b/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.cpp index bd40dfb0..c62d3fa1 100644 --- a/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.cpp +++ b/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.cpp @@ -306,17 +306,16 @@ struct SMetaDataPropertyEraser using std::unordered_set; using std::unordered_map; -typedef unordered_map THandleToIdMap; -typedef unordered_map TIdToHandleMap; -typedef unordered_map TGUIDToHandleMap; -typedef unordered_map THandleToGUIDMap; -typedef unordered_map> TInstanceIntMap; -typedef unordered_map> TInstanceToSiblingMap; - // Algorithm to write is to run through the graph, starting at the root instances // and write out the instances as we come to them. struct SComposerSerializerImpl : public IComposerSerializer { + typedef unordered_map THandleToIdMap; + typedef unordered_map TIdToHandleMap; + typedef unordered_map TGUIDToHandleMap; + typedef unordered_map THandleToGUIDMap; + typedef unordered_map> TInstanceIntMap; + typedef unordered_map> TInstanceToSiblingMap; typedef unordered_set> TInstanceSet; typedef unordered_set> TSlideSet; typedef unordered_set> TActionSet; @@ -342,14 +341,14 @@ struct SComposerSerializerImpl : public IComposerSerializer Qt3DSDMSlideHandle m_ActiveSlideParent; // The unique ids for instances - static THandleToIdMap s_HandleToIdMap; - static TIdToHandleMap s_IdToHandleMap; - static TGUIDToHandleMap s_GUIDToHandleMap; - static THandleToGUIDMap s_HandleToGUIDMap; - static THandleToIdMap s_ActionToIdMap; - static TIdToHandleMap s_IdToActionMap; - static THandleToIdMap s_SlideToIdMap; - static TIdToHandleMap s_IdToSlideMap; + THandleToIdMap m_HandleToIdMap; + TIdToHandleMap m_IdToHandleMap; + TGUIDToHandleMap m_GUIDToHandleMap; + THandleToGUIDMap m_HandleToGUIDMap; + THandleToIdMap m_ActionToIdMap; + TIdToHandleMap m_IdToActionMap; + THandleToIdMap m_SlideToIdMap; + TIdToHandleMap m_IdToSlideMap; TInstanceSet m_InstanceSet; TSlideSet m_SlideSet; @@ -387,8 +386,7 @@ struct SComposerSerializerImpl : public IComposerSerializer SComposerObjectDefinitions &inObjectDefinitions, std::shared_ptr inFailedHandler, IGuideSystem &inGuideSystem, qt3ds::render::IPathManager &inPathManager, - IPropertySystem &inPropSystem, - const QString &documentPath) + IPropertySystem &inPropSystem, const QString &documentPath) : m_DataCore(inDataCore) , m_MetaData(inMetaData) , m_SlideCore(inSlideCore) @@ -412,10 +410,19 @@ struct SComposerSerializerImpl : public IComposerSerializer m_randomGenerator.seed(quint32(QTime::currentTime().msecsSinceStartOfDay())); } - void reset(bool resetAll = false) + void reset() { - if (resetAll) - clear(); + m_HandleToIdMap.clear(); + m_IdToHandleMap.clear(); + + m_GUIDToHandleMap.clear(); + m_HandleToGUIDMap.clear(); + + m_ActionToIdMap.clear(); + m_IdToActionMap.clear(); + + m_SlideToIdMap.clear(); + m_IdToSlideMap.clear(); m_ActiveSlide = 0; m_ActiveSlideParent = 0; @@ -439,15 +446,15 @@ struct SComposerSerializerImpl : public IComposerSerializer TCharPtr AddId(const wstring &inId, Qt3DSDMInstanceHandle inHandle) { TCharPtr theIdStr = m_StringTable.RegisterStr(inId.c_str()); - if (s_IdToHandleMap.find(theIdStr) != s_IdToHandleMap.end() - && s_IdToHandleMap.find(theIdStr)->second != inHandle) { + if (m_IdToHandleMap.find(theIdStr) != m_IdToHandleMap.end() + && m_IdToHandleMap.find(theIdStr)->second != inHandle) { m_ImportFailedHandler->DisplayImportFailed( m_documentPath, QObject::tr("Duplicate object id detected: ") + QString::fromWCharArray(theIdStr), false); return theIdStr; } - s_IdToHandleMap.insert(make_pair(theIdStr, inHandle)); - s_HandleToIdMap.insert(make_pair(inHandle, theIdStr)); + m_IdToHandleMap.insert(make_pair(theIdStr, inHandle)); + m_HandleToIdMap.insert(make_pair(inHandle, theIdStr)); if (m_PreserveFileIds) m_DataCore.SetInstancePropertyValue(inHandle, m_ObjectDefinitions.m_Asset.m_FileId, std::make_shared(inId.c_str())); @@ -457,8 +464,8 @@ struct SComposerSerializerImpl : public IComposerSerializer TCharPtr SetId(const wstring &inId, Qt3DSDMInstanceHandle inHandle) { TCharPtr theIdStr = m_StringTable.RegisterStr(inId.c_str()); - s_IdToHandleMap.insert(make_pair(theIdStr, inHandle)).first->second = inHandle; - s_HandleToIdMap.insert(make_pair(inHandle, theIdStr)).first->second = theIdStr; + m_IdToHandleMap.insert(make_pair(theIdStr, inHandle)).first->second = inHandle; + m_HandleToIdMap.insert(make_pair(inHandle, theIdStr)).first->second = theIdStr; if (m_PreserveFileIds) m_DataCore.SetInstancePropertyValue(inHandle, m_ObjectDefinitions.m_Asset.m_FileId, std::make_shared(inId.c_str())); @@ -468,30 +475,39 @@ struct SComposerSerializerImpl : public IComposerSerializer TCharPtr AddActionId(const wstring &inId, Qt3DSDMActionHandle inHandle) { TCharPtr theIdStr = m_StringTable.RegisterStr(inId.c_str()); - if (s_IdToActionMap.find(theIdStr) != s_IdToActionMap.end() - && s_IdToActionMap.find(theIdStr)->second != inHandle) { + if (m_IdToActionMap.find(theIdStr) != m_IdToActionMap.end() + && m_IdToActionMap.find(theIdStr)->second != inHandle) { m_ImportFailedHandler->DisplayImportFailed( m_documentPath, QObject::tr("Duplicate action id detected: ") + QString::fromWCharArray(theIdStr), false); return theIdStr; } - s_IdToActionMap.insert(make_pair(theIdStr, inHandle)); - s_ActionToIdMap.insert(make_pair(inHandle, theIdStr)); + m_IdToActionMap.insert(make_pair(theIdStr, inHandle)); + m_ActionToIdMap.insert(make_pair(inHandle, theIdStr)); + if (m_PreserveFileIds) { + m_DataCore.SetInstancePropertyValue(m_ActionCore.GetActionInstance(inHandle), + m_ObjectDefinitions.m_Action.m_FileId, + std::make_shared(inId.c_str())); + } return theIdStr; } TCharPtr AddSlideId(const wstring &inId, Qt3DSDMSlideHandle inHandle) { TCharPtr theIdStr = m_StringTable.RegisterStr(inId.c_str()); - if (s_IdToSlideMap.find(theIdStr) != s_IdToSlideMap.end() - && s_IdToSlideMap.find(theIdStr)->second != inHandle) { + if (m_IdToActionMap.find(theIdStr) != m_IdToActionMap.end() + && m_IdToActionMap.find(theIdStr)->second != inHandle) { m_ImportFailedHandler->DisplayImportFailed( m_documentPath, QObject::tr("Duplicate slide id detected: ") + QString::fromWCharArray(theIdStr), false); return theIdStr; } - s_IdToSlideMap.insert(make_pair(theIdStr, inHandle)); - s_SlideToIdMap.insert(make_pair(inHandle, theIdStr)); + m_IdToSlideMap.insert(make_pair(theIdStr, inHandle)); + m_SlideToIdMap.insert(make_pair(inHandle, theIdStr)); + if (m_PreserveFileIds) + m_DataCore.SetInstancePropertyValue(m_SlideCore.GetSlideInstance(inHandle), + m_ObjectDefinitions.m_Slide.m_FileId, + std::make_shared(inId.c_str())); return theIdStr; } @@ -503,8 +519,8 @@ struct SComposerSerializerImpl : public IComposerSerializer ++inId; inId = m_StringTable.RegisterStr(inId); - TIdToHandleMap::iterator find = s_IdToHandleMap.find(inId); - if (find != s_IdToHandleMap.end()) + TIdToHandleMap::iterator find = m_IdToHandleMap.find(inId); + if (find != m_IdToHandleMap.end()) return find->second; return 0; } @@ -517,8 +533,8 @@ struct SComposerSerializerImpl : public IComposerSerializer ++inId; inId = m_StringTable.RegisterStr(inId); - TIdToHandleMap::iterator find = s_IdToSlideMap.find(inId); - if (find != s_IdToSlideMap.end()) + TIdToHandleMap::iterator find = m_IdToSlideMap.find(inId); + if (find != m_IdToSlideMap.end()) return find->second; return 0; } @@ -531,22 +547,22 @@ struct SComposerSerializerImpl : public IComposerSerializer ++inId; inId = m_StringTable.RegisterStr(inId); - TIdToHandleMap::iterator find = s_IdToActionMap.find(inId); - if (find != s_IdToActionMap.end()) + TIdToHandleMap::iterator find = m_IdToActionMap.find(inId); + if (find != m_IdToActionMap.end()) return find->second; return 0; } void AddGuid(SLong4 inId, int inHandle) { - s_GUIDToHandleMap.insert(make_pair(inId, inHandle)); - s_HandleToGUIDMap.insert(make_pair(inHandle, inId)); + m_GUIDToHandleMap.insert(make_pair(inId, inHandle)); + m_HandleToGUIDMap.insert(make_pair(inHandle, inId)); } SLong4 GetInstanceGuid(Qt3DSDMInstanceHandle inInstance) { - THandleToGUIDMap::iterator find = s_HandleToGUIDMap.find(inInstance); - if (find != s_HandleToGUIDMap.end()) + THandleToGUIDMap::iterator find = m_HandleToGUIDMap.find(inInstance); + if (find != m_HandleToGUIDMap.end()) return find->second; SValue theValue; if (m_DataCore.GetInstancePropertyValue(inInstance, m_ObjectDefinitions.m_Guided.m_GuidProp, @@ -599,58 +615,77 @@ struct SComposerSerializerImpl : public IComposerSerializer return GetInstanceName(inInstance); } - // Create id for instance. Pass reference handle to id map so that correct - // id map is checked against(same handle value can exist in instance, slides and actions). - TCharPtr GetId(const wstring &inIdStem, CDataModelHandle handle, const THandleToIdMap &refMap) - { - // Check old id - QString stem(QString::fromWCharArray(inIdStem.c_str())); - int pos = stem.lastIndexOf(QLatin1Char('_')); - if (pos > 0) { - // Already has unique id - bool isNumber; - stem.mid(pos+2).toInt(&isNumber); - if (stem.at(pos+1) == QLatin1Char('u') && isNumber) - return m_StringTable.RegisterStr(inIdStem.c_str()); - stem = stem.left(pos); - } else { - const wchar_t *savedId = nullptr; - if (refMap.find(handle) != refMap.end()) - savedId = refMap.find(handle)->second; - - if (savedId) { - QString id(QString::fromWCharArray(savedId)); - // Already has unique id? - pos = id.lastIndexOf(QLatin1Char('_')); + TCharPtr GetId(const wstring &inIdStem, CDataModelHandle instance) + { + // Create an ID for this instance + if (m_PreserveFileIds) { + // permanent id + QString stem = instanceId(instance); + if (stem.isEmpty()) + stem = QString::fromWCharArray(inIdStem.c_str()); + int pos = stem.lastIndexOf(QLatin1Char('_')); + if (pos > 0) { + // Already has unique id bool isNumber; - id.mid(pos+2).toInt(&isNumber); - if (id.at(pos+1) == QLatin1Char('u') && isNumber) - return m_StringTable.RegisterStr(savedId); + stem.mid(pos+2).toInt(&isNumber); + if (stem.at(pos+1) == QLatin1Char('u') && isNumber) { + QByteArray warr; + warr.resize(sizeof(wchar_t) * (stem.length() + 1)); + warr.fill(0); + stem.toWCharArray(reinterpret_cast(warr.data())); + return m_StringTable.RegisterStr(reinterpret_cast(warr.data())); + } + stem = stem.left(pos); } + + // Create an ID for this instance + QByteArray buffer; + wchar_t *str; + do { + int rid = m_randomGenerator.bounded(65536); + QString nid = QStringLiteral("%1_u%2").arg(stem).arg(rid); + buffer.resize((nid.length() + 1) * sizeof(wchar_t)); + buffer.fill(0); + str = reinterpret_cast(buffer.data()); + nid.toWCharArray(str); + } while (m_IdToActionMap.find(m_StringTable.RegisterStr(str)) != m_IdToActionMap.end() + || m_IdToHandleMap.find(m_StringTable.RegisterStr(str)) + != m_IdToHandleMap.end() + || m_IdToSlideMap.find(m_StringTable.RegisterStr(str)) + != m_IdToSlideMap.end()); + + return m_StringTable.RegisterStr(str); + } else { + // temporary id + wstring theTypeStr(inIdStem); + wstring theTypeStem(theTypeStr); + wstring::size_type thePos = theTypeStem.find_last_of('_'); + if (thePos != wstring::npos && thePos < theTypeStem.size() - 2) { + if (theTypeStem[thePos + 1] >= '0' && theTypeStem[thePos + 1] <= '9') + theTypeStem = theTypeStem.substr(0, thePos); + } + QT3DSU32 idIdx = 1; + + while (m_IdToActionMap.find(m_StringTable.RegisterStr(theTypeStr.c_str())) + != m_IdToActionMap.end() + || m_IdToHandleMap.find(m_StringTable.RegisterStr(theTypeStr.c_str())) + != m_IdToHandleMap.end() + || m_IdToSlideMap.find(m_StringTable.RegisterStr(theTypeStr.c_str())) + != m_IdToSlideMap.end()) { + wchar_t theBuffer[16]; + swprintf(theBuffer, 16, L"_%03d", idIdx); + theTypeStr = theTypeStem + theBuffer; + ++idIdx; + } + return m_StringTable.RegisterStr(theTypeStr.c_str()); } - // Create an ID for this instance - QByteArray buffer; - wchar_t *str; - do { - int rid = m_randomGenerator.bounded(65536); - QString nid = QStringLiteral("%1_u%2").arg(stem).arg(rid); - buffer.resize((nid.length() + 1) * sizeof(wchar_t)); - buffer.fill(0); - str = reinterpret_cast(buffer.data()); - nid.toWCharArray(str); - } while (s_IdToActionMap.find(m_StringTable.RegisterStr(str)) != s_IdToActionMap.end() - || s_IdToHandleMap.find(m_StringTable.RegisterStr(str)) - != s_IdToHandleMap.end() - || s_IdToSlideMap.find(m_StringTable.RegisterStr(str)) - != s_IdToSlideMap.end()); - return m_StringTable.RegisterStr(str); } TCharPtr GetInstanceId(Qt3DSDMInstanceHandle inInstance) { QT3DS_ASSERT(inInstance.Valid()); - THandleToIdMap::iterator theFind(s_HandleToIdMap.find(inInstance)); - if (theFind != s_HandleToIdMap.end()) + THandleToIdMap::iterator theFind(m_HandleToIdMap.find(inInstance)); + if (theFind != m_HandleToIdMap.end()) return theFind->second; TCharStr theName(GetInstanceName(inInstance)); @@ -698,13 +733,13 @@ struct SComposerSerializerImpl : public IComposerSerializer } if (theProperty.Valid()) { theIdStr.append(m_DataCore.GetProperty(theProperty).m_Name.wide_str()); - theNewId = GetId(theIdStr, inInstance, s_HandleToIdMap); + theNewId = GetId(theIdStr, inInstance); } } } if (IsTrivial(theNewId)) - theNewId = GetId(theName.wide_str(), inInstance, s_HandleToIdMap); + theNewId = GetId(theName.wide_str(), inInstance); return AddId(theNewId, inInstance); } @@ -712,24 +747,34 @@ struct SComposerSerializerImpl : public IComposerSerializer Qt3DSDMInstanceHandle inInstance) { QT3DS_ASSERT(inAction.Valid()); - THandleToIdMap::iterator theFind(s_ActionToIdMap.find(inAction)); - if (theFind != s_ActionToIdMap.end()) + THandleToIdMap::iterator theFind(m_ActionToIdMap.find(inAction)); + if (theFind != m_ActionToIdMap.end()) return theFind->second; wstring theActionName(GetInstanceName(inInstance, inSlide)); theActionName.append(L"-Action"); - - TCharPtr theNewId = GetId(theActionName, inAction, s_ActionToIdMap); + TCharPtr theNewId; + if (m_PreserveFileIds) { + Qt3DSDMInstanceHandle actionInstance = m_ActionCore.GetActionInstance(inAction); + SValue theValue; + if (m_DataCore.GetInstancePropertyValue( + actionInstance, m_ObjectDefinitions.m_Action.m_FileId, theValue)) { + TDataStrPtr fileId(get(theValue)); + theNewId = fileId->GetData(); + if (!IsTrivial(theNewId)) + return AddSlideId(GetId(theNewId, actionInstance), inSlide); + return AddSlideId(GetId(theActionName, actionInstance), inSlide); + } + } + theNewId = GetId(theActionName, inInstance); return AddActionId(theNewId, inAction); } - // If this function is called with an invalid instance and we don't already have an id - // then we assume we have an external reference and lookup the instance via the component id. TCharPtr GetSlideId(Qt3DSDMSlideHandle inSlide, Qt3DSDMInstanceHandle inInstance) { QT3DS_ASSERT(inSlide.Valid()); - THandleToIdMap::iterator theFind(s_SlideToIdMap.find(inSlide)); - if (theFind != s_SlideToIdMap.end()) + THandleToIdMap::iterator theFind(m_SlideToIdMap.find(inSlide)); + if (theFind != m_SlideToIdMap.end()) return theFind->second; if (inInstance.Valid() == false) { @@ -748,7 +793,21 @@ struct SComposerSerializerImpl : public IComposerSerializer theSlideName.append(L"-"); theSlideName.append(GetSlideName(inSlide)); - TCharPtr theNewId = GetId(theSlideName, inSlide, s_SlideToIdMap); + TCharPtr theNewId; + if (m_PreserveFileIds) { + Qt3DSDMInstanceHandle slideInstance = m_SlideCore.GetSlideInstance(inSlide); + SValue theValue; + if (m_DataCore.GetInstancePropertyValue( + slideInstance, m_ObjectDefinitions.m_Slide.m_FileId, theValue)) { + TDataStrPtr fileId(get(theValue)); + theNewId = fileId->GetData(); + if (!IsTrivial(theNewId)) + return AddSlideId(GetId(theNewId, slideInstance), inSlide); + return AddSlideId(GetId(theSlideName, slideInstance), inSlide); + } + } + + theNewId = GetId(theSlideName, inInstance); return AddSlideId(theNewId, inSlide); } @@ -772,6 +831,24 @@ struct SComposerSerializerImpl : public IComposerSerializer return SLong4(); } + QString instanceId(CDataModelHandle inInstance) { + SValue theInstanceIdValue; + TDataStrPtr theNamePtr; + if (!m_DataCore.GetInstancePropertyValue( + inInstance, m_ObjectDefinitions.m_Asset.m_FileId, theInstanceIdValue)) { + if (!m_DataCore.GetInstancePropertyValue( + inInstance, m_ObjectDefinitions.m_Slide.m_FileId, theInstanceIdValue)) { + m_DataCore.GetInstancePropertyValue( + inInstance, m_ObjectDefinitions.m_Action.m_FileId, theInstanceIdValue); + } + } + theNamePtr = qt3dsdm::get(theInstanceIdValue); + if (theNamePtr && !IsTrivial(theNamePtr->GetData())) + return theNamePtr->toQString(); + return {}; + } + + void GetAllInstanceGuids() { TInstanceHandleList theInstances; @@ -790,10 +867,23 @@ struct SComposerSerializerImpl : public IComposerSerializer theInstance, m_ObjectDefinitions.m_Asset.m_FileId, theInstanceIdValue)) { TDataStrPtr theNamePtr = qt3dsdm::get(theInstanceIdValue); if (theNamePtr && !IsTrivial(theNamePtr->GetData())) { - const wchar_t *theId = GetId(theNamePtr->GetData(), theInstance, - s_HandleToIdMap); + const wchar_t *theId = GetId(theNamePtr->GetData(), theInstance); AddId(theId, theInstance); } + } else if (m_DataCore.GetInstancePropertyValue( + theInstance, m_ObjectDefinitions.m_Slide.m_FileId, theInstanceIdValue)) { + TDataStrPtr theNamePtr = qt3dsdm::get(theInstanceIdValue); + if (theNamePtr && !IsTrivial(theNamePtr->GetData())) { + const wchar_t *theId = GetId(theNamePtr->GetData(), theInstance); + AddSlideId(theId, theInstance); + } + } else if (m_DataCore.GetInstancePropertyValue( + theInstance, m_ObjectDefinitions.m_Action.m_FileId, theInstanceIdValue)) { + TDataStrPtr theNamePtr = qt3dsdm::get(theInstanceIdValue); + if (theNamePtr && !IsTrivial(theNamePtr->GetData())) { + const wchar_t *theId = GetId(theNamePtr->GetData(), theInstance); + AddActionId(theId, theInstance); + } } } } @@ -832,13 +922,13 @@ struct SComposerSerializerImpl : public IComposerSerializer Qt3DSDMInstanceHandle FindInstanceByGUID(SLong4 theGuid) { - if (s_GUIDToHandleMap.size() == 0) + if (m_GUIDToHandleMap.size() == 0) GetAllInstanceGuids(); if (theGuid.Valid() == false) return 0; - TGUIDToHandleMap::iterator theIter(s_GUIDToHandleMap.find(theGuid)); - if (theIter != s_GUIDToHandleMap.end()) + TGUIDToHandleMap::iterator theIter(m_GUIDToHandleMap.find(theGuid)); + if (theIter != m_GUIDToHandleMap.end()) return theIter->second; return 0; } @@ -941,8 +1031,8 @@ struct SComposerSerializerImpl : public IComposerSerializer SStringRef theRef(get(retval)); Qt3DSDMInstanceHandle theRefInstance(GetInstanceById(theRef.m_Id)); if (theRefInstance.Valid()) { - THandleToGUIDMap::iterator theGuidFind = s_HandleToGUIDMap.find(theRefInstance); - if (theGuidFind != s_HandleToGUIDMap.end()) + THandleToGUIDMap::iterator theGuidFind = m_HandleToGUIDMap.find(theRefInstance); + if (theGuidFind != m_HandleToGUIDMap.end()) theFinalValue = theGuidFind->second; } return theFinalValue; @@ -1518,6 +1608,7 @@ struct SComposerSerializerImpl : public IComposerSerializer erase_if(outList, SPropertyMatches(m_ObjectDefinitions.m_Slide.m_ComponentId)); erase_if(outList, SPropertyMatches(m_ObjectDefinitions.m_Named.m_NameProp)); erase_if(outList, SPropertyMatches(m_ObjectDefinitions.m_Typed.m_TypeProp)); + erase_if(outList, SPropertyMatches(m_ObjectDefinitions.m_Slide.m_FileId)); } Option> ParseValue(Qt3DSDMInstanceHandle inInstance, @@ -1790,10 +1881,6 @@ struct SComposerSerializerImpl : public IComposerSerializer m_NewInstancesToSiblings.insert(std::make_pair(theNewInstance, theSiblingRef + 1)); SLong4 theGuid = GetGuid(theNewInstance, m_ObjectDefinitions.m_Guided.m_GuidProp); - if (m_PreserveFileIds) - m_DataCore.SetInstancePropertyValue(theNewInstance, - m_ObjectDefinitions.m_Asset.m_FileId, - std::make_shared(theId)); SetId(theId, theNewInstance); AddGuid(theGuid, theNewInstance); @@ -1892,7 +1979,7 @@ struct SComposerSerializerImpl : public IComposerSerializer Qt3DSDMActionHandle theAction(theMasterActions[theEyeballChanges[idx].first]); IDOMWriter::Scope __actionScope(inWriter, L"Action"); wstring theRef(L"#"); - bool hadAction = s_ActionToIdMap.find(theAction) != s_ActionToIdMap.end(); + bool hadAction = m_ActionToIdMap.find(theAction) != m_ActionToIdMap.end(); theRef.append(GetActionId(theAction, inParent, inInstance)); inWriter.Att(L"ref", theRef.c_str()); inWriter.Att("eyeball", theEyeballChanges[idx].second); @@ -2892,8 +2979,8 @@ struct SComposerSerializerImpl : public IComposerSerializer } Qt3DSDMSlideHandle SerializeSlide(qt3dsdm::IDOMReader &inReader, - const CFilePath &inDocumentDirectory, - qt3dsdm::Qt3DSDMSlideHandle inMaster, int newIndex) override + const CFilePath &inDocumentDirectory, + qt3dsdm::Qt3DSDMSlideHandle inMaster, int newIndex) override { reset(); m_PreserveFileIds = false; @@ -2912,38 +2999,14 @@ struct SComposerSerializerImpl : public IComposerSerializer }; } -THandleToIdMap SComposerSerializerImpl::s_HandleToIdMap = THandleToIdMap(); -TIdToHandleMap SComposerSerializerImpl::s_IdToHandleMap = TIdToHandleMap(); -TGUIDToHandleMap SComposerSerializerImpl::s_GUIDToHandleMap = TGUIDToHandleMap(); -THandleToGUIDMap SComposerSerializerImpl::s_HandleToGUIDMap = THandleToGUIDMap(); -THandleToIdMap SComposerSerializerImpl::s_ActionToIdMap = THandleToIdMap(); -TIdToHandleMap SComposerSerializerImpl::s_IdToActionMap = TIdToHandleMap(); -THandleToIdMap SComposerSerializerImpl::s_SlideToIdMap = THandleToIdMap(); -TIdToHandleMap SComposerSerializerImpl::s_IdToSlideMap = TIdToHandleMap(); - -void IComposerSerializer::clear() -{ - SComposerSerializerImpl::s_HandleToIdMap.clear(); - SComposerSerializerImpl::s_IdToHandleMap.clear(); - - SComposerSerializerImpl::s_GUIDToHandleMap.clear(); - SComposerSerializerImpl::s_HandleToGUIDMap.clear(); - - SComposerSerializerImpl::s_ActionToIdMap.clear(); - SComposerSerializerImpl::s_IdToActionMap.clear(); - - SComposerSerializerImpl::s_SlideToIdMap.clear(); - SComposerSerializerImpl::s_IdToSlideMap.clear(); -} - std::shared_ptr IComposerSerializer::CreateGraphSlideSerializer( IDataCore &inDataCore, IMetaData &inMetaData, ISlideCore &inSlideCore, IAnimationCore &inAnimationCore, IActionCore &inActionCore, CGraph &inAssetGraph, - ISlideSystem &inSlideSystem, IActionSystem &inActionSystem, ISlideGraphCore &inSlideGraphCore, - SComposerObjectDefinitions &inObjectDefinitions, - std::shared_ptr inFailedHandler, IGuideSystem &inGuideSystem, - qt3ds::render::IPathManager &inPathManager, IPropertySystem &inPropSystem, - const QString &documentPath) + ISlideSystem &inSlideSystem, IActionSystem &inActionSystem, + ISlideGraphCore &inSlideGraphCore, SComposerObjectDefinitions &inObjectDefinitions, + std::shared_ptr inFailedHandler, + IGuideSystem &inGuideSystem, qt3ds::render::IPathManager &inPathManager, + IPropertySystem &inPropSystem, const QString &documentPath) { return std::shared_ptr( new SComposerSerializerImpl( diff --git a/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.h b/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.h index 70d43697..e2882cb8 100644 --- a/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.h +++ b/src/Authoring/Client/Code/Core/Doc/IComposerSerializer.h @@ -64,7 +64,6 @@ class IComposerSerializer protected: virtual ~IComposerSerializer() {} public: - static void clear(); // Empty graph roots means use the actual graph roots in the asset graph virtual void SerializeScene(qt3dsdm::IDOMWriter &inWriter) = 0; // Write properties into the active slide until we get to a slide owner, then create new slides. -- cgit v1.2.3