diff options
author | Antti Määttä <antti.maatta@qt.io> | 2020-09-24 08:30:56 +0300 |
---|---|---|
committer | Antti Määttä <antti.maatta@qt.io> | 2020-10-15 12:11:34 +0300 |
commit | 222398b775d7dca97b7b4346d58109f3cee415b4 (patch) | |
tree | 166bae0a6bdd27bb0a45cb8f032511c0dcb4e30c /src/Authoring/Qt3DStudio/Palettes | |
parent | 36ae96eb01fe5c506c958ef008b58bd382a83517 (diff) |
Use images with dynamic object textures
Task-number: QT3DS-4063
Change-Id: I32b4b1892f064311e5896ebc1ebdc087598135d1
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'src/Authoring/Qt3DStudio/Palettes')
5 files changed, 72 insertions, 33 deletions
diff --git a/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp b/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp index b6225dff..4a845425 100644 --- a/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp +++ b/src/Authoring/Qt3DStudio/Palettes/Inspector/InspectorControlModel.cpp @@ -1228,14 +1228,27 @@ void InspectorControlModel::updatePropertyValue(InspectorControlBase *element) c bool skipEmits = false; switch (element->m_dataType) { case qt3dsdm::DataModelDataType::String: { - QString stringValue = qt3dsdm::get<QString>(value); - if (getBridge()->isInsideMaterialContainer(element->m_instance)) { - int index = stringValue.lastIndexOf(QLatin1Char('/')); - if (index != -1) - stringValue = stringValue.mid(index + 1); - } + if (value.getType() == qt3dsdm::DataModelDataType::Long4) { + qt3dsdm::Option<qt3dsdm::SLong4> guid = qt3dsdm::get<qt3dsdm::SLong4>(value); + qt3dsdm::Qt3DSDMInstanceHandle imageInstance = doc->GetDocumentReader() + .GetInstanceForGuid(guid); + if (imageInstance.Valid()) { + Q3DStudio::CString path = doc->GetDocumentReader().GetSourcePath(imageInstance); + Q3DStudio::CFilePath relPath(path); + element->m_value = QVariant(relPath.GetFileName().toQString()); + } else { + element->m_value = QVariant(QString()); + } + } else { + QString stringValue = qt3dsdm::get<QString>(value); + if (getBridge()->isInsideMaterialContainer(element->m_instance)) { + int index = stringValue.lastIndexOf(QLatin1Char('/')); + if (index != -1) + stringValue = stringValue.mid(index + 1); + } - element->m_value = stringValue; + element->m_value = stringValue; + } } Q_FALLTHROUGH(); // fall-through for other String-derived datatypes @@ -1324,8 +1337,21 @@ void InspectorControlModel::updatePropertyValue(InspectorControlBase *element) c QString meshValue = QFileInfo(qt3dsdm::get<QString>(value)).fileName(); element->m_value = meshValue.startsWith('#'_L1) ? meshValue.mid(1) : meshValue; } else if (element->m_propertyType == qt3dsdm::AdditionalMetaDataType::Texture) { - QFileInfo fileInfo(qt3dsdm::get<QString>(value)); - element->m_value = fileInfo.fileName(); + if (value.getType() == qt3dsdm::DataModelDataType::Long4) { + qt3dsdm::Option<qt3dsdm::SLong4> guid = qt3dsdm::get<qt3dsdm::SLong4>(value); + qt3dsdm::Qt3DSDMInstanceHandle imageInstance = doc->GetDocumentReader() + .GetInstanceForGuid(guid); + if (imageInstance.Valid()) { + Q3DStudio::CString path = doc->GetDocumentReader().GetSourcePath(imageInstance); + Q3DStudio::CFilePath relPath(path); + element->m_value = QVariant(relPath.GetFileName().toQString()); + } else { + element->m_value = QVariant(QString()); + } + } else { + QFileInfo fileInfo(qt3dsdm::get<QString>(value)); + element->m_value = fileInfo.fileName(); + } } else if (element->m_propertyType == qt3dsdm::AdditionalMetaDataType::PathBuffer) { element->m_value = qt3dsdm::get<QString>(value); } else if (element->m_propertyType == qt3dsdm::AdditionalMetaDataType::String) { diff --git a/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp b/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp index 8804e675..8b20b950 100644 --- a/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp +++ b/src/Authoring/Qt3DStudio/Palettes/Inspector/TextureChooserView.cpp @@ -91,8 +91,20 @@ QString TextureChooserView::currentDataModelPath() const qt3dsdm::SValue value; propertySystem->GetInstancePropertyValue(m_instance, m_handle, value); - - const QString path = qt3dsdm::get<QString>(value); + QString path; + if (value.getType() == qt3dsdm::DataModelDataType::Long4) { + qt3dsdm::Option<qt3dsdm::SLong4> guid = qt3dsdm::get<qt3dsdm::SLong4>(value); + qt3dsdm::Qt3DSDMInstanceHandle imageInstance = doc->GetDocumentReader() + .GetInstanceForGuid(guid); + if (imageInstance.Valid()) { + Q3DStudio::CFilePath relPath(doc->GetDocumentReader().GetSourcePath(imageInstance)); + path = relPath.GetFileName().toQString(); + } else { + path = QString(); + } + } else { + path = qt3dsdm::get<QString>(value); + } // An empty value can sometimes be represented by a relative path either to project root or the // presentation file, such as"./" or "../", so let's just consider all directory paths as empty diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp index e3483969..599b2a9f 100644 --- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp +++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.cpp @@ -48,8 +48,8 @@ using namespace qt3dsdm; -CMaterialTimelineItemBinding::CMaterialTimelineItemBinding(CTimelineTranslationManager *inMgr, - Qt3DSDMInstanceHandle inDataHandle) +CMaterialEffectTimelineItemBinding::CMaterialEffectTimelineItemBinding( + CTimelineTranslationManager *inMgr, Qt3DSDMInstanceHandle inDataHandle) : Qt3DSDMTimelineItemBinding(inMgr, inDataHandle) { qt3dsdm::IPropertySystem *thePropertySystem = m_TransMgr->GetStudioSystem()->GetPropertySystem(); @@ -63,7 +63,8 @@ CMaterialTimelineItemBinding::CMaterialTimelineItemBinding(CTimelineTranslationM AdditionalMetaDataType::Value theAdditionalMetaDataType = thePropertySystem->GetAdditionalMetaDataType(inDataHandle, theProperty); - if (theAdditionalMetaDataType == AdditionalMetaDataType::Image) { + if (theAdditionalMetaDataType == AdditionalMetaDataType::Image + || theAdditionalMetaDataType == AdditionalMetaDataType::Texture) { TCharStr theName(thePropertySystem->GetName(theProperty)); TCharStr theFormalName(thePropertySystem->GetFormalName(inDataHandle, theProperty)); TNameFormalNamePair thePair = std::make_tuple(theName, theFormalName); @@ -72,16 +73,16 @@ CMaterialTimelineItemBinding::CMaterialTimelineItemBinding(CTimelineTranslationM } } -CMaterialTimelineItemBinding::~CMaterialTimelineItemBinding() +CMaterialEffectTimelineItemBinding::~CMaterialEffectTimelineItemBinding() { } -ITimelineTimebar *CMaterialTimelineItemBinding::GetTimebar() +ITimelineTimebar *CMaterialEffectTimelineItemBinding::GetTimebar() { // No timebars on materials return new CEmptyTimelineTimebar(); } -bool CMaterialTimelineItemBinding::ShowToggleControls() const +bool CMaterialEffectTimelineItemBinding::ShowToggleControls() const { // Materials have no toggle controls, by design return false; @@ -106,7 +107,7 @@ bool ImageSlotIsFilled(qt3dsdm::IPropertySystem *inPropertySystem, Qt3DSDMInstan return theReturn; } -long CMaterialTimelineItemBinding::GetChildrenCount() +long CMaterialEffectTimelineItemBinding::GetChildrenCount() { long theReturnCount = 0; if (m_TransMgr->GetStudioSystem()->IsInstance(m_DataHandle)) { @@ -124,7 +125,7 @@ long CMaterialTimelineItemBinding::GetChildrenCount() return theReturnCount; } -ITimelineItemBinding *CMaterialTimelineItemBinding::GetChild(long inIndex) +ITimelineItemBinding *CMaterialEffectTimelineItemBinding::GetChild(long inIndex) { qt3dsdm::IPropertySystem *thePropertySystem = m_TransMgr->GetStudioSystem()->GetPropertySystem(); @@ -147,7 +148,7 @@ ITimelineItemBinding *CMaterialTimelineItemBinding::GetChild(long inIndex) theImageProperty, std::get<1>(m_ImageNameFormalNamePairs[theSlotCursor]).wide_str()); } -QList<ITimelineItemBinding *> CMaterialTimelineItemBinding::GetChildren() +QList<ITimelineItemBinding *> CMaterialEffectTimelineItemBinding::GetChildren() { int childCount = GetChildrenCount(); QList<ITimelineItemBinding *> retlist; @@ -158,7 +159,7 @@ QList<ITimelineItemBinding *> CMaterialTimelineItemBinding::GetChildren() return retlist; } -void CMaterialTimelineItemBinding::OnAddChild(qt3dsdm::Qt3DSDMInstanceHandle inInstance) +void CMaterialEffectTimelineItemBinding::OnAddChild(qt3dsdm::Qt3DSDMInstanceHandle inInstance) { using namespace qt3dsdm; CClientDataModelBridge *theBridge = m_TransMgr->GetStudioSystem()->GetClientDataModelBridge(); @@ -169,18 +170,18 @@ void CMaterialTimelineItemBinding::OnAddChild(qt3dsdm::Qt3DSDMInstanceHandle inI Qt3DSDMTimelineItemBinding::OnAddChild(inInstance); } -void CMaterialTimelineItemBinding::OnPropertyChanged(Qt3DSDMPropertyHandle inPropertyHandle) +void CMaterialEffectTimelineItemBinding::OnPropertyChanged(Qt3DSDMPropertyHandle inPropertyHandle) { Qt3DSDMTimelineItemBinding::OnPropertyChanged(inPropertyHandle); } -void CMaterialTimelineItemBinding::OnPropertyLinked(Qt3DSDMPropertyHandle inPropertyHandle) +void CMaterialEffectTimelineItemBinding::OnPropertyLinked(Qt3DSDMPropertyHandle inPropertyHandle) { Qt3DSDMTimelineItemBinding::OnPropertyLinked(inPropertyHandle); } qt3dsdm::Qt3DSDMInstanceHandle -CMaterialTimelineItemBinding::GetImage(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle) +CMaterialEffectTimelineItemBinding::GetImage(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle) { qt3dsdm::IPropertySystem *thePropertySystem = m_TransMgr->GetStudioSystem()->GetPropertySystem(); SValue theImageValue; @@ -191,8 +192,8 @@ CMaterialTimelineItemBinding::GetImage(qt3dsdm::Qt3DSDMPropertyHandle inProperty } ITimelineItemBinding * -CMaterialTimelineItemBinding::GetOrCreateImageBinding(qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle, - const wchar_t *inName) +CMaterialEffectTimelineItemBinding::GetOrCreateImageBinding( + qt3dsdm::Qt3DSDMPropertyHandle inPropertyHandle, const wchar_t *inName) { qt3dsdm::Qt3DSDMInstanceHandle theImageInstance = GetImage(inPropertyHandle); ITimelineItemBinding *theImageTimelineRow = m_TransMgr->GetBinding(theImageInstance); diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h index 8e188a52..0ecbcb54 100644 --- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h +++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/MaterialTimelineItemBinding.h @@ -47,7 +47,7 @@ class CTimelineTranslationManager; /** * Binding to a DataModel object of Material type */ -class CMaterialTimelineItemBinding : public Qt3DSDMTimelineItemBinding +class CMaterialEffectTimelineItemBinding : public Qt3DSDMTimelineItemBinding { public: // Types typedef std::tuple<qt3dsdm::TCharStr, qt3dsdm::TCharStr> TNameFormalNamePair; @@ -57,9 +57,9 @@ protected: // Members TNameFormalNamePairList m_ImageNameFormalNamePairs; public: // Construction - CMaterialTimelineItemBinding(CTimelineTranslationManager *inMgr, - qt3dsdm::Qt3DSDMInstanceHandle inDataHandle); - virtual ~CMaterialTimelineItemBinding(); + CMaterialEffectTimelineItemBinding(CTimelineTranslationManager *inMgr, + qt3dsdm::Qt3DSDMInstanceHandle inDataHandle); + virtual ~CMaterialEffectTimelineItemBinding(); public: // Qt3DSDMTimelineItemBinding ITimelineTimebar *GetTimebar() override; diff --git a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp index 2264d232..9a1e9eab 100644 --- a/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp +++ b/src/Authoring/Qt3DStudio/Palettes/Timeline/Bindings/TimelineTranslationManager.cpp @@ -64,8 +64,8 @@ ITimelineItemBinding *CTimelineTranslationManager::GetOrCreate(Qt3DSDMInstanceHa EStudioObjectType objType = g_StudioApp.GetCore()->GetDoc()->GetStudioSystem() ->GetClientDataModelBridge()->GetObjectType(inInstance); - if (objType & OBJTYPE_IS_MATERIAL) { - theReturn = new CMaterialTimelineItemBinding(this, inInstance); + if (objType & (OBJTYPE_IS_MATERIAL | OBJTYPE_EFFECT)) { + theReturn = new CMaterialEffectTimelineItemBinding(this, inInstance); } else if (objType == OBJTYPE_IMAGE) { theReturn = new CImageTimelineItemBinding(this, inInstance); } else if (objType & (OBJTYPE_GROUP | OBJTYPE_COMPONENT)) { @@ -80,7 +80,7 @@ ITimelineItemBinding *CTimelineTranslationManager::GetOrCreate(Qt3DSDMInstanceHa theReturn = new CPathTimelineItemBinding(this, inInstance); } else if (objType == OBJTYPE_LAYER) { theReturn = new CLayerTimelineItemBinding(this, inInstance); - } else if (objType & (OBJTYPE_MODEL | OBJTYPE_TEXT | OBJTYPE_CAMERA | OBJTYPE_EFFECT + } else if (objType & (OBJTYPE_MODEL | OBJTYPE_TEXT | OBJTYPE_CAMERA | OBJTYPE_LIGHT | OBJTYPE_RENDERPLUGIN | OBJTYPE_ALIAS | OBJTYPE_SUBPATH | OBJTYPE_SIGNAL)) theReturn = new Qt3DSDMTimelineItemBinding(this, inInstance); |