From cd9a90580602d8093be6f9582e4ddbd3cd43847d Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 21 Jan 2026 14:46:46 +0200 Subject: [PATCH 01/14] Adding Display ratio --- src/GDTFManager.cpp | 20 ++++++++++++--- src/GDTFManager.h | 4 +++ src/Implementation/CGdtfGeometry.cpp | 26 ++++++++++++++++++++ src/Implementation/CGdtfGeometry.h | 2 ++ src/Include/IMediaRessourceVectorInterface.h | 2 ++ src/Prefix/CommonPrefix.h | 1 + 6 files changed, 52 insertions(+), 3 deletions(-) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index e0511cc3..3c743abf 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -2906,12 +2906,14 @@ GdtfGeometryDisplay::GdtfGeometryDisplay(GdtfGeometry* parent) :GdtfGeometry(parent) { fTexture = ""; + fAspectRatio = ""; } GdtfGeometryDisplay::GdtfGeometryDisplay(const TXString& name, GdtfModelPtr refToModel,const VWTransformMatrix& ma, GdtfGeometry* parent) :GdtfGeometry(name,refToModel,ma, parent) { - fTexture = ""; + fTexture = ""; + fAspectRatio = ""; } GdtfGeometryDisplay::~GdtfGeometryDisplay() @@ -2928,12 +2930,23 @@ void GdtfGeometryDisplay::SetTexture(const TXString& texture) fTexture = texture; } +const TXString& GdtfGeometryDisplay::GetAspectRatio() const +{ + return fAspectRatio; +} + +void GdtfGeometryDisplay::SetAspectRatio( const TXString& aspectRatio ) +{ + fAspectRatio = aspectRatio; +} + void GdtfGeometryDisplay::OnPrintToFile(IXMLFileNodePtr pNode) { //------------------------------------------------------------------------------------ // Call the parent GdtfGeometry::OnPrintToFile(pNode); - pNode->SetNodeAttributeValue(XML_GDTF_DisplayTexture, fTexture); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, fAspectRatio ); } void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) @@ -2942,7 +2955,8 @@ void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) // Call the parent GdtfGeometry::OnReadFromNode(pNode); - pNode->GetNodeAttributeValue(XML_GDTF_DisplayTexture, fTexture); + pNode->GetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture); + pNode->GetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, fAspectRatio ); } void GdtfGeometryDisplay::OnErrorCheck(const IXMLFileNodePtr& pNode) diff --git a/src/GDTFManager.h b/src/GDTFManager.h index da4d9e2c..8dd7d3e0 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -951,10 +951,14 @@ namespace SceneData ~GdtfGeometryDisplay(); private: TXString fTexture; + TXString fAspectRatio; + public: virtual EGdtfObjectType GetObjectType(); const TXString& GetTexture(); void SetTexture(const TXString& texture); + const TXString& GetAspectRatio() const; + void SetAspectRatio( const TXString& aspectRatio ); protected: virtual TXString GetNodeName(); virtual void OnPrintToFile(IXMLFileNodePtr pNode); diff --git a/src/Implementation/CGdtfGeometry.cpp b/src/Implementation/CGdtfGeometry.cpp index abb6012f..b55586cf 100644 --- a/src/Implementation/CGdtfGeometry.cpp +++ b/src/Implementation/CGdtfGeometry.cpp @@ -983,6 +983,32 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetTexture(MvrStrin return kVCOMError_NoError; } +MvrString VectorworksMVR::CGdtfGeometryImpl::GetAspectRatio() +{ + if(!fGeometry) return ""; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return ""; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return ""; + + return display->GetAspectRatio().GetCharPtr(); +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetAspectRatio(MvrString aspectRatio) +{ + if (!fGeometry) return kVCOMError_NotInitialized; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_WrongGeometryType; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + display->SetAspectRatio(aspectRatio); + return kVCOMError_NoError; +} + + VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetCountLinkedDmxChannel(size_t& count, IGdtfDmxMode * forMode) { // Get Count diff --git a/src/Implementation/CGdtfGeometry.h b/src/Implementation/CGdtfGeometry.h index 24c168ed..7ff99f61 100644 --- a/src/Implementation/CGdtfGeometry.h +++ b/src/Implementation/CGdtfGeometry.h @@ -66,6 +66,8 @@ namespace VectorworksMVR // Display virtual MvrString VCOM_CALLTYPE GetTexture(); virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture); + virtual MvrString VCOM_CALLTYPE GetAspectRatio(); + virtual VCOMError VCOM_CALLTYPE SetAspectRatio(MvrString aspectRatio); // Helpers virtual VCOMError VCOM_CALLTYPE GetCountLinkedDmxChannel(size_t& count, IGdtfDmxMode * forMode); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index e080a8d8..ffb05f3e 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -862,6 +862,8 @@ namespace VectorworksMVR // Display virtual MvrString VCOM_CALLTYPE GetTexture() = 0; virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture) = 0; + virtual MvrString VCOM_CALLTYPE GetAspectRatio() = 0; + virtual VCOMError VCOM_CALLTYPE SetAspectRatio(MvrString aspectRatio) = 0; // GDTF 1.2 // Lamp diff --git a/src/Prefix/CommonPrefix.h b/src/Prefix/CommonPrefix.h index b3585592..78d38146 100644 --- a/src/Prefix/CommonPrefix.h +++ b/src/Prefix/CommonPrefix.h @@ -452,6 +452,7 @@ const Sint32 kGDTF_CurrentMinorVersion = 2; #define XML_GDTF_DisplayNodeName "Display" #define XML_GDTF_DisplayTexture "Texture" +#define XML_GDTF_DisplayAspectRatio "AspectRatio" #define XML_GDTF_LaserProtocolNodeName "Protocol" #define XML_GDTF_LaserProtocolName "Name" From 4812b22badbe8e48beb9a3591c1ea06719f7704a Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 21 Jan 2026 15:01:11 +0200 Subject: [PATCH 02/14] Fixing Unit Tests --- unittest/EmptyGeometryUnitTest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/unittest/EmptyGeometryUnitTest.cpp b/unittest/EmptyGeometryUnitTest.cpp index a7bcd09f..39932148 100644 --- a/unittest/EmptyGeometryUnitTest.cpp +++ b/unittest/EmptyGeometryUnitTest.cpp @@ -54,6 +54,7 @@ void GdtfEmptyModelTest::WriteFile(VectorworksMVR::IGdtfFixturePtr& fixture) IGdtfGeometryPtr geometry4; __checkVCOM(geometry1->CreateGeometry(EGdtfObjectType::eGdtfGeometryDisplay, "Geometry4", filledModel, STransformMatrix(), &geometry4)); __checkVCOM(geometry4->SetTexture("Texture.png")); + __checkVCOM(geometry4->SetAspectRatio("16:9")); // Magnet IGdtfGeometryPtr geometry5; From eb8a80e5eb85a147f9dd963cd798e347b380f2cd Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 21 Jan 2026 15:06:20 +0200 Subject: [PATCH 03/14] Fixing Unit test again --- unittest/EmptyGeometryUnitTest.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/unittest/EmptyGeometryUnitTest.cpp b/unittest/EmptyGeometryUnitTest.cpp index 39932148..28bccdb7 100644 --- a/unittest/EmptyGeometryUnitTest.cpp +++ b/unittest/EmptyGeometryUnitTest.cpp @@ -201,6 +201,8 @@ void GdtfEmptyModelTest::ReadFile(VectorworksMVR::IGdtfFixturePtr& fixture) checkifEqual("Check Texture", geometry4->GetTexture(), "Texture.png"); + checkifEqual("Check Aspect Ratio", geometry4->GetAspectRatio(), "16:9"); + // Magnet IGdtfGeometryPtr geoMagnet; __checkVCOM(geometry1->GetInternalGeometryAt(3, &geoMagnet)); From 100d392fab80daff3985a572b85d512898460b63 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 21 Jan 2026 15:51:40 +0200 Subject: [PATCH 04/14] Adding check to see where the test fails --- unittest/Unittest.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/unittest/Unittest.cpp b/unittest/Unittest.cpp index 2de1fc85..8a3055f6 100644 --- a/unittest/Unittest.cpp +++ b/unittest/Unittest.cpp @@ -265,6 +265,7 @@ void Unittest::checkifEqual(const std::string& check, const std::string& aspecte fFailedTests.push_back(test); + std::cout << "Failed Test: " << test.fMessage << std::endl; }; bool Unittest::checkVCOM(VectorworksMVR::VCOMError error, const std::string& check) From 4e108b4d18e66451f29a618c750f932d41fd7cbc Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 21 Jan 2026 16:01:36 +0200 Subject: [PATCH 05/14] adding cout --- unittest/Utility.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/unittest/Utility.cpp b/unittest/Utility.cpp index b0e302b8..4314d93f 100644 --- a/unittest/Utility.cpp +++ b/unittest/Utility.cpp @@ -53,6 +53,7 @@ bool UnitTestUtil::GetFolderAppDataLocal(std::string& outPath) if(!result) return false; std::wstring ws(buffer); outPath = std::string(ws.begin(), ws.end()); + std::cout << "AppData Local Folder: " << outPath << std::endl; #elif _LINUX // LINUX_IMPLEMENTATION - done From adc432141e34e9ab151acabc93633d3ec91f606a Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 21 Jan 2026 16:48:46 +0200 Subject: [PATCH 06/14] Update Empty Geometry Test --- unittest/EmptyGeometryUnitTest.cpp | 18 ++++++++++++++---- unittest/EmptyGeometryUnitTest.h | 8 ++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/unittest/EmptyGeometryUnitTest.cpp b/unittest/EmptyGeometryUnitTest.cpp index 28bccdb7..9e6433c1 100644 --- a/unittest/EmptyGeometryUnitTest.cpp +++ b/unittest/EmptyGeometryUnitTest.cpp @@ -13,7 +13,7 @@ using namespace VectorworksMVR::GdtfDefines; #define __checkVCOM(x) this->checkVCOM(x, #x) #define __checkVCOM_NotSet(x) this->checkVCOM_NotSet(x, #x) -GdtfEmptyModelTest::GdtfEmptyModelTest(const std::string& currentDir) : GdtfUnitTest(currentDir) +GdtfEmptyModelTest::GdtfEmptyModelTest(const std::string& currentDir) { } @@ -21,10 +21,20 @@ GdtfEmptyModelTest::~GdtfEmptyModelTest() { } +bool GdtfEmptyModelTest::ExecuteTest() +{ + std::cout << "= GdtfEmptyModelTest =" << std::endl; -std::string GdtfEmptyModelTest::GetUnitTestName() -{ - return std::string("GdtfEmptyModel"); + VectorworksMVR::IGdtfFixturePtr fixture( IID_IGdtfFixture ); + fixture->OpenForWrite( "EmptyGeometryUnitTest", "MVR Group", MvrUUID(1,1,1,1) ); + + WriteFile(fixture); + + fixture->Close(); + + ReadFile(fixture); + + return true; } void GdtfEmptyModelTest::WriteFile(VectorworksMVR::IGdtfFixturePtr& fixture) diff --git a/unittest/EmptyGeometryUnitTest.h b/unittest/EmptyGeometryUnitTest.h index f42025ea..a1c91007 100644 --- a/unittest/EmptyGeometryUnitTest.h +++ b/unittest/EmptyGeometryUnitTest.h @@ -7,16 +7,16 @@ #include "GdtfUnittestHandler.h" -class GdtfEmptyModelTest : public GdtfUnitTest +class GdtfEmptyModelTest : public Unittest { public: GdtfEmptyModelTest(const std::string& currentDir); virtual ~GdtfEmptyModelTest(); protected: - std::string virtual GetUnitTestName() override; + bool virtual ExecuteTest(); private: - void virtual WriteFile(VectorworksMVR::IGdtfFixturePtr& fixtureDuringRead) override; - void virtual ReadFile(VectorworksMVR::IGdtfFixturePtr& fixtureDuringWrite) override; + void WriteFile(VectorworksMVR::IGdtfFixturePtr& fixtureDuringRead); + void ReadFile(VectorworksMVR::IGdtfFixturePtr& fixtureDuringWrite); }; \ No newline at end of file From 1b75a04002d77cfb67ff84cb61d6f37553f4a337 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Thu, 19 Mar 2026 11:46:38 +0200 Subject: [PATCH 07/14] Updating aspect ratio data --- src/GDTFManager.cpp | 44 ++++++++++-- src/GDTFManager.h | 14 +++- src/Implementation/CGdtfGeometry.cpp | 70 ++++++++++++++++++-- src/Implementation/CGdtfGeometry.h | 11 ++- src/Include/IMediaRessourceVectorInterface.h | 10 ++- src/Prefix/CommonPrefix.h | 2 + 6 files changed, 130 insertions(+), 21 deletions(-) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index 3c743abf..b0e0ea64 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -2906,14 +2906,14 @@ GdtfGeometryDisplay::GdtfGeometryDisplay(GdtfGeometry* parent) :GdtfGeometry(parent) { fTexture = ""; - fAspectRatio = ""; + fAspectRatio = 0; } GdtfGeometryDisplay::GdtfGeometryDisplay(const TXString& name, GdtfModelPtr refToModel,const VWTransformMatrix& ma, GdtfGeometry* parent) :GdtfGeometry(name,refToModel,ma, parent) { fTexture = ""; - fAspectRatio = ""; + fAspectRatio = 0; } GdtfGeometryDisplay::~GdtfGeometryDisplay() @@ -2930,23 +2930,45 @@ void GdtfGeometryDisplay::SetTexture(const TXString& texture) fTexture = texture; } -const TXString& GdtfGeometryDisplay::GetAspectRatio() const +const double& GdtfGeometryDisplay::GetAspectRatio() const { return fAspectRatio; } -void GdtfGeometryDisplay::SetAspectRatio( const TXString& aspectRatio ) +void GdtfGeometryDisplay::SetAspectRatio( const double& aspectRatio ) { fAspectRatio = aspectRatio; } +const size_t& GdtfGeometryDisplay::GetWidth() const +{ + return fWidth; +} + +void GdtfGeometryDisplay::SetWidth( size_t width ) +{ + fWidth = width; +} + +const size_t& GdtfGeometryDisplay::GetHeight() const +{ + return fHeight; +} + +void GdtfGeometryDisplay::SetHeight( size_t height ) +{ + fHeight = height; +} + void GdtfGeometryDisplay::OnPrintToFile(IXMLFileNodePtr pNode) { //------------------------------------------------------------------------------------ // Call the parent GdtfGeometry::OnPrintToFile(pNode); - pNode->SetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture); - pNode->SetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, fAspectRatio ); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture ); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, GdtfConverter::ConvertDouble(fAspectRatio) ); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayWidth, GdtfConverter::ConvertInteger(fWidth) ); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayHeight, GdtfConverter::ConvertInteger( fHeight ) ); } void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) @@ -2955,8 +2977,16 @@ void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) // Call the parent GdtfGeometry::OnReadFromNode(pNode); + TXString width, height, aspectRatio = ""; + pNode->GetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture); - pNode->GetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, fAspectRatio ); + pNode->GetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, aspectRatio ); + pNode->GetNodeAttributeValue( XML_GDTF_DisplayWidth, width ); + pNode->GetNodeAttributeValue( XML_GDTF_DisplayHeight, height ); + + GdtfConverter::ConvertInteger( width, pNode, fWidth ); + GdtfConverter::ConvertInteger( height, pNode, fHeight ); + GdtfConverter::ConvertDouble( aspectRatio, pNode, fAspectRatio ); } void GdtfGeometryDisplay::OnErrorCheck(const IXMLFileNodePtr& pNode) diff --git a/src/GDTFManager.h b/src/GDTFManager.h index 8dd7d3e0..1caa3fc0 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -951,14 +951,22 @@ namespace SceneData ~GdtfGeometryDisplay(); private: TXString fTexture; - TXString fAspectRatio; + double fAspectRatio; + size_t fWidth; + size_t fHeight; public: virtual EGdtfObjectType GetObjectType(); const TXString& GetTexture(); void SetTexture(const TXString& texture); - const TXString& GetAspectRatio() const; - void SetAspectRatio( const TXString& aspectRatio ); + const double& GetAspectRatio() const; + void SetAspectRatio( const double& aspectRatio ); + void SetWidth( size_t width ); + const size_t& GetWidth() const; + void SetHeight( size_t height ); + const size_t& GetHeight() const; + + protected: virtual TXString GetNodeName(); virtual void OnPrintToFile(IXMLFileNodePtr pNode); diff --git a/src/Implementation/CGdtfGeometry.cpp b/src/Implementation/CGdtfGeometry.cpp index b55586cf..c6a5d400 100644 --- a/src/Implementation/CGdtfGeometry.cpp +++ b/src/Implementation/CGdtfGeometry.cpp @@ -983,19 +983,21 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetTexture(MvrStrin return kVCOMError_NoError; } -MvrString VectorworksMVR::CGdtfGeometryImpl::GetAspectRatio() +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetAspectRatio(double& aspectRatio) { - if(!fGeometry) return ""; + if(!fGeometry) return kVCOMError_Failed; - if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return ""; + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_Failed; SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); - if(!display) return ""; + if(!display) return kVCOMError_Failed; - return display->GetAspectRatio().GetCharPtr(); + aspectRatio = display->GetAspectRatio(); + + return kVCOMError_NoError; } -VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetAspectRatio(MvrString aspectRatio) +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetAspectRatio(double aspectRatio) { if (!fGeometry) return kVCOMError_NotInitialized; @@ -1005,9 +1007,65 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetAspectRatio(MvrS if(!display) return kVCOMError_Failed; display->SetAspectRatio(aspectRatio); + + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetWidth(size_t& width) +{ + if(!fGeometry) return kVCOMError_Failed; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_Failed; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + width = display->GetWidth(); + + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetWidth(size_t width) +{ + if (!fGeometry) return kVCOMError_NotInitialized; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_WrongGeometryType; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + display->SetWidth(width); + return kVCOMError_NoError; } +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetHeight(size_t& height) +{ + if(!fGeometry) return kVCOMError_Failed; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_Failed; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + height = display->GetHeight(); + + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetHeight(size_t height) +{ + if (!fGeometry) return kVCOMError_NotInitialized; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_WrongGeometryType; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + display->SetHeight(height); + + return kVCOMError_NoError; +} VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetCountLinkedDmxChannel(size_t& count, IGdtfDmxMode * forMode) { diff --git a/src/Implementation/CGdtfGeometry.h b/src/Implementation/CGdtfGeometry.h index 7ff99f61..cbc598e4 100644 --- a/src/Implementation/CGdtfGeometry.h +++ b/src/Implementation/CGdtfGeometry.h @@ -65,9 +65,14 @@ namespace VectorworksMVR // Display virtual MvrString VCOM_CALLTYPE GetTexture(); - virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture); - virtual MvrString VCOM_CALLTYPE GetAspectRatio(); - virtual VCOMError VCOM_CALLTYPE SetAspectRatio(MvrString aspectRatio); + virtual VCOMError VCOM_CALLTYPE GetAspectRatio(double& aspectRatio); + virtual VCOMError VCOM_CALLTYPE GetWidth( size_t& width ); + virtual VCOMError VCOM_CALLTYPE GetHeight( size_t& height ); + + virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture); + virtual VCOMError VCOM_CALLTYPE SetAspectRatio(double aspectRatio); + virtual VCOMError VCOM_CALLTYPE SetWidth( size_t width ); + virtual VCOMError VCOM_CALLTYPE SetHeight( size_t height ); // Helpers virtual VCOMError VCOM_CALLTYPE GetCountLinkedDmxChannel(size_t& count, IGdtfDmxMode * forMode); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index ffb05f3e..708e1845 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -861,9 +861,15 @@ namespace VectorworksMVR // Display virtual MvrString VCOM_CALLTYPE GetTexture() = 0; + virtual VCOMError VCOM_CALLTYPE GetAspectRatio(double& aspectRatio) = 0; + virtual VCOMError VCOM_CALLTYPE GetWidth( size_t& width ) = 0; + virtual VCOMError VCOM_CALLTYPE GetHeight( size_t& height ) = 0; + virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture) = 0; - virtual MvrString VCOM_CALLTYPE GetAspectRatio() = 0; - virtual VCOMError VCOM_CALLTYPE SetAspectRatio(MvrString aspectRatio) = 0; + virtual VCOMError VCOM_CALLTYPE SetAspectRatio(double aspectRatio) = 0; + virtual VCOMError VCOM_CALLTYPE SetWidth( size_t width ) = 0; + virtual VCOMError VCOM_CALLTYPE SetHeight( size_t height ) = 0; + // GDTF 1.2 // Lamp diff --git a/src/Prefix/CommonPrefix.h b/src/Prefix/CommonPrefix.h index 78d38146..1e58e752 100644 --- a/src/Prefix/CommonPrefix.h +++ b/src/Prefix/CommonPrefix.h @@ -453,6 +453,8 @@ const Sint32 kGDTF_CurrentMinorVersion = 2; #define XML_GDTF_DisplayNodeName "Display" #define XML_GDTF_DisplayTexture "Texture" #define XML_GDTF_DisplayAspectRatio "AspectRatio" +#define XML_GDTF_DisplayWidth "Width" +#define XML_GDTF_DisplayHeight "Height" #define XML_GDTF_LaserProtocolNodeName "Protocol" #define XML_GDTF_LaserProtocolName "Name" From 55429034aa7f8012eb510a5823e0e18bde9e7a1b Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Thu, 19 Mar 2026 14:44:16 +0200 Subject: [PATCH 08/14] Adding curved screen support --- src/GDTFManager.cpp | 10 +++++++ src/GDTFManager.h | 12 ++++++--- src/Implementation/CGdtfGeometry.cpp | 28 ++++++++++++++++++++ src/Implementation/CGdtfGeometry.h | 2 ++ src/Include/IMediaRessourceVectorInterface.h | 3 ++- 5 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index b0e0ea64..c380d1a2 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -2960,6 +2960,16 @@ void GdtfGeometryDisplay::SetHeight( size_t height ) fHeight = height; } +void GdtfGeometryDisplay::SetIsCurved( const bool& isCurved ) +{ + fIsCurved = isCurved; +} + +void GdtfGeometryDisplay::GetIsCurved( bool& curvedRadius ) const +{ + curvedRadius = fIsCurved; +} + void GdtfGeometryDisplay::OnPrintToFile(IXMLFileNodePtr pNode) { //------------------------------------------------------------------------------------ diff --git a/src/GDTFManager.h b/src/GDTFManager.h index 1caa3fc0..832c14de 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -951,20 +951,24 @@ namespace SceneData ~GdtfGeometryDisplay(); private: TXString fTexture; - double fAspectRatio; size_t fWidth; size_t fHeight; + double fAspectRatio; + bool fIsCurved; public: virtual EGdtfObjectType GetObjectType(); const TXString& GetTexture(); - void SetTexture(const TXString& texture); + void GetIsCurved( bool& curvedRadius ) const; + const size_t& GetHeight() const; + const size_t& GetWidth() const; const double& GetAspectRatio() const; + + void SetTexture(const TXString& texture); void SetAspectRatio( const double& aspectRatio ); void SetWidth( size_t width ); - const size_t& GetWidth() const; void SetHeight( size_t height ); - const size_t& GetHeight() const; + void SetIsCurved( const bool& isCurved ); protected: diff --git a/src/Implementation/CGdtfGeometry.cpp b/src/Implementation/CGdtfGeometry.cpp index c6a5d400..01f42e3f 100644 --- a/src/Implementation/CGdtfGeometry.cpp +++ b/src/Implementation/CGdtfGeometry.cpp @@ -1067,6 +1067,34 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetHeight(size_t he return kVCOMError_NoError; } +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetIsCurved(bool& isCurved) +{ + if(!fGeometry) return kVCOMError_Failed; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_Failed; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + display->GetIsCurved(isCurved); + + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetIsCurved(bool isCurved) +{ + if (!fGeometry) return kVCOMError_NotInitialized; + + if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_WrongGeometryType; + + SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); + if(!display) return kVCOMError_Failed; + + display->SetIsCurved(isCurved); + + return kVCOMError_NoError; +} + VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetCountLinkedDmxChannel(size_t& count, IGdtfDmxMode * forMode) { // Get Count diff --git a/src/Implementation/CGdtfGeometry.h b/src/Implementation/CGdtfGeometry.h index cbc598e4..0e7a5c3d 100644 --- a/src/Implementation/CGdtfGeometry.h +++ b/src/Implementation/CGdtfGeometry.h @@ -68,11 +68,13 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE GetAspectRatio(double& aspectRatio); virtual VCOMError VCOM_CALLTYPE GetWidth( size_t& width ); virtual VCOMError VCOM_CALLTYPE GetHeight( size_t& height ); + virtual VCOMError VCOM_CALLTYPE GetIsCurved( bool& isCurved ); virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture); virtual VCOMError VCOM_CALLTYPE SetAspectRatio(double aspectRatio); virtual VCOMError VCOM_CALLTYPE SetWidth( size_t width ); virtual VCOMError VCOM_CALLTYPE SetHeight( size_t height ); + virtual VCOMError VCOM_CALLTYPE SetIsCurved( bool isCurved ); // Helpers virtual VCOMError VCOM_CALLTYPE GetCountLinkedDmxChannel(size_t& count, IGdtfDmxMode * forMode); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index 708e1845..4e0b09b0 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -864,12 +864,13 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE GetAspectRatio(double& aspectRatio) = 0; virtual VCOMError VCOM_CALLTYPE GetWidth( size_t& width ) = 0; virtual VCOMError VCOM_CALLTYPE GetHeight( size_t& height ) = 0; + virtual VCOMError VCOM_CALLTYPE GetIsCurved( bool& isCurved ) = 0; virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture) = 0; virtual VCOMError VCOM_CALLTYPE SetAspectRatio(double aspectRatio) = 0; virtual VCOMError VCOM_CALLTYPE SetWidth( size_t width ) = 0; virtual VCOMError VCOM_CALLTYPE SetHeight( size_t height ) = 0; - + virtual VCOMError VCOM_CALLTYPE SetIsCurved( bool isCurved ) = 0; // GDTF 1.2 // Lamp From ef71b02d3ff77d426cc89320ecac5b04ed9de433 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Thu, 19 Mar 2026 14:54:37 +0200 Subject: [PATCH 09/14] Fixing Unit Test --- unittest/EmptyGeometryUnitTest.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/unittest/EmptyGeometryUnitTest.cpp b/unittest/EmptyGeometryUnitTest.cpp index 9e6433c1..6050faac 100644 --- a/unittest/EmptyGeometryUnitTest.cpp +++ b/unittest/EmptyGeometryUnitTest.cpp @@ -64,7 +64,11 @@ void GdtfEmptyModelTest::WriteFile(VectorworksMVR::IGdtfFixturePtr& fixture) IGdtfGeometryPtr geometry4; __checkVCOM(geometry1->CreateGeometry(EGdtfObjectType::eGdtfGeometryDisplay, "Geometry4", filledModel, STransformMatrix(), &geometry4)); __checkVCOM(geometry4->SetTexture("Texture.png")); - __checkVCOM(geometry4->SetAspectRatio("16:9")); + __checkVCOM(geometry4->SetAspectRatio( 1.78 )); + __checkVCOM(geometry4->SetWidth(4700)); + __checkVCOM(geometry4->SetHeight(2700)); + __checkVCOM(geometry4->SetIsCurved(false)); + // Magnet IGdtfGeometryPtr geometry5; @@ -211,7 +215,21 @@ void GdtfEmptyModelTest::ReadFile(VectorworksMVR::IGdtfFixturePtr& fixture) checkifEqual("Check Texture", geometry4->GetTexture(), "Texture.png"); - checkifEqual("Check Aspect Ratio", geometry4->GetAspectRatio(), "16:9"); + double aspectRatio = 0.0; + geometry4->GetAspectRatio( aspectRatio ); + checkifEqual("Check Aspect Ratio", aspectRatio, 1.78); + + size_t width = 0; + geometry4->GetWidth( width ); + checkifEqual( "Check Width", width, (size_t) 4700 ); + + size_t height = 0; + geometry4->GetHeight( height ); + checkifEqual( "Check Height", height, (size_t) 2700 ); + + bool isCurved = false; + geometry4->GetIsCurved( isCurved ); + checkifEqual( "Check IsCurved", isCurved, false ); // Magnet IGdtfGeometryPtr geoMagnet; From 0d42088040652f4f9d0c3092033c9d0eae727b0d Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Thu, 19 Mar 2026 15:25:11 +0200 Subject: [PATCH 10/14] isCurved is missing in the file --- src/GDTFManager.cpp | 11 +++++++---- src/Prefix/CommonPrefix.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index c380d1a2..55bbeccb 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -2979,6 +2979,7 @@ void GdtfGeometryDisplay::OnPrintToFile(IXMLFileNodePtr pNode) pNode->SetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, GdtfConverter::ConvertDouble(fAspectRatio) ); pNode->SetNodeAttributeValue( XML_GDTF_DisplayWidth, GdtfConverter::ConvertInteger(fWidth) ); pNode->SetNodeAttributeValue( XML_GDTF_DisplayHeight, GdtfConverter::ConvertInteger( fHeight ) ); + pNode->SetNodeAttributeValue( XML_GDTF_DisplayIsCurved, fIsCurved ? "true" : "false" ); } void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) @@ -2987,16 +2988,18 @@ void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) // Call the parent GdtfGeometry::OnReadFromNode(pNode); - TXString width, height, aspectRatio = ""; + TXString width, height, aspectRatio, isCurved = ""; pNode->GetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture); pNode->GetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, aspectRatio ); pNode->GetNodeAttributeValue( XML_GDTF_DisplayWidth, width ); pNode->GetNodeAttributeValue( XML_GDTF_DisplayHeight, height ); + pNode->GetNodeAttributeValue( XML_GDTF_DisplayIsCurved, isCurved ); - GdtfConverter::ConvertInteger( width, pNode, fWidth ); - GdtfConverter::ConvertInteger( height, pNode, fHeight ); - GdtfConverter::ConvertDouble( aspectRatio, pNode, fAspectRatio ); + GdtfConverter::ConvertInteger( width, pNode, fWidth ); + GdtfConverter::ConvertInteger( height, pNode, fHeight ); + GdtfConverter::ConvertDouble( aspectRatio, pNode, fAspectRatio ); + GdtfConverter::ConvertBool( isCurved, pNode, fIsCurved ); } void GdtfGeometryDisplay::OnErrorCheck(const IXMLFileNodePtr& pNode) diff --git a/src/Prefix/CommonPrefix.h b/src/Prefix/CommonPrefix.h index 1e58e752..fbd5cf63 100644 --- a/src/Prefix/CommonPrefix.h +++ b/src/Prefix/CommonPrefix.h @@ -455,6 +455,7 @@ const Sint32 kGDTF_CurrentMinorVersion = 2; #define XML_GDTF_DisplayAspectRatio "AspectRatio" #define XML_GDTF_DisplayWidth "Width" #define XML_GDTF_DisplayHeight "Height" +#define XML_GDTF_DisplayIsCurved "IsCurved" #define XML_GDTF_LaserProtocolNodeName "Protocol" #define XML_GDTF_LaserProtocolName "Name" From f9d3adcd7ed6da2911cd0ccc4bbe66c3c57d3611 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Mon, 20 Apr 2026 15:06:19 +0300 Subject: [PATCH 11/14] Removing aspect ratio to fix data duplication --- src/GDTFManager.cpp | 14 ---------- src/GDTFManager.h | 3 --- src/Implementation/CGdtfGeometry.cpp | 28 -------------------- src/Implementation/CGdtfGeometry.h | 2 -- src/Include/IMediaRessourceVectorInterface.h | 2 -- unittest/EmptyGeometryUnitTest.cpp | 5 ---- 6 files changed, 54 deletions(-) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index 55bbeccb..3889f047 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -2906,14 +2906,12 @@ GdtfGeometryDisplay::GdtfGeometryDisplay(GdtfGeometry* parent) :GdtfGeometry(parent) { fTexture = ""; - fAspectRatio = 0; } GdtfGeometryDisplay::GdtfGeometryDisplay(const TXString& name, GdtfModelPtr refToModel,const VWTransformMatrix& ma, GdtfGeometry* parent) :GdtfGeometry(name,refToModel,ma, parent) { fTexture = ""; - fAspectRatio = 0; } GdtfGeometryDisplay::~GdtfGeometryDisplay() @@ -2930,16 +2928,6 @@ void GdtfGeometryDisplay::SetTexture(const TXString& texture) fTexture = texture; } -const double& GdtfGeometryDisplay::GetAspectRatio() const -{ - return fAspectRatio; -} - -void GdtfGeometryDisplay::SetAspectRatio( const double& aspectRatio ) -{ - fAspectRatio = aspectRatio; -} - const size_t& GdtfGeometryDisplay::GetWidth() const { return fWidth; @@ -2976,7 +2964,6 @@ void GdtfGeometryDisplay::OnPrintToFile(IXMLFileNodePtr pNode) // Call the parent GdtfGeometry::OnPrintToFile(pNode); pNode->SetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture ); - pNode->SetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, GdtfConverter::ConvertDouble(fAspectRatio) ); pNode->SetNodeAttributeValue( XML_GDTF_DisplayWidth, GdtfConverter::ConvertInteger(fWidth) ); pNode->SetNodeAttributeValue( XML_GDTF_DisplayHeight, GdtfConverter::ConvertInteger( fHeight ) ); pNode->SetNodeAttributeValue( XML_GDTF_DisplayIsCurved, fIsCurved ? "true" : "false" ); @@ -2998,7 +2985,6 @@ void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) GdtfConverter::ConvertInteger( width, pNode, fWidth ); GdtfConverter::ConvertInteger( height, pNode, fHeight ); - GdtfConverter::ConvertDouble( aspectRatio, pNode, fAspectRatio ); GdtfConverter::ConvertBool( isCurved, pNode, fIsCurved ); } diff --git a/src/GDTFManager.h b/src/GDTFManager.h index 832c14de..efb2ab16 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -953,7 +953,6 @@ namespace SceneData TXString fTexture; size_t fWidth; size_t fHeight; - double fAspectRatio; bool fIsCurved; public: @@ -962,10 +961,8 @@ namespace SceneData void GetIsCurved( bool& curvedRadius ) const; const size_t& GetHeight() const; const size_t& GetWidth() const; - const double& GetAspectRatio() const; void SetTexture(const TXString& texture); - void SetAspectRatio( const double& aspectRatio ); void SetWidth( size_t width ); void SetHeight( size_t height ); void SetIsCurved( const bool& isCurved ); diff --git a/src/Implementation/CGdtfGeometry.cpp b/src/Implementation/CGdtfGeometry.cpp index 01f42e3f..75bac241 100644 --- a/src/Implementation/CGdtfGeometry.cpp +++ b/src/Implementation/CGdtfGeometry.cpp @@ -983,34 +983,6 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetTexture(MvrStrin return kVCOMError_NoError; } -VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetAspectRatio(double& aspectRatio) -{ - if(!fGeometry) return kVCOMError_Failed; - - if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_Failed; - - SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); - if(!display) return kVCOMError_Failed; - - aspectRatio = display->GetAspectRatio(); - - return kVCOMError_NoError; -} - -VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::SetAspectRatio(double aspectRatio) -{ - if (!fGeometry) return kVCOMError_NotInitialized; - - if( fGeometryType != EGdtfObjectType::eGdtfGeometryDisplay) return kVCOMError_WrongGeometryType; - - SceneData::GdtfGeometryDisplayPtr display = static_cast(fGeometry); - if(!display) return kVCOMError_Failed; - - display->SetAspectRatio(aspectRatio); - - return kVCOMError_NoError; -} - VectorworksMVR::VCOMError VectorworksMVR::CGdtfGeometryImpl::GetWidth(size_t& width) { if(!fGeometry) return kVCOMError_Failed; diff --git a/src/Implementation/CGdtfGeometry.h b/src/Implementation/CGdtfGeometry.h index 0e7a5c3d..08c754e0 100644 --- a/src/Implementation/CGdtfGeometry.h +++ b/src/Implementation/CGdtfGeometry.h @@ -65,13 +65,11 @@ namespace VectorworksMVR // Display virtual MvrString VCOM_CALLTYPE GetTexture(); - virtual VCOMError VCOM_CALLTYPE GetAspectRatio(double& aspectRatio); virtual VCOMError VCOM_CALLTYPE GetWidth( size_t& width ); virtual VCOMError VCOM_CALLTYPE GetHeight( size_t& height ); virtual VCOMError VCOM_CALLTYPE GetIsCurved( bool& isCurved ); virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture); - virtual VCOMError VCOM_CALLTYPE SetAspectRatio(double aspectRatio); virtual VCOMError VCOM_CALLTYPE SetWidth( size_t width ); virtual VCOMError VCOM_CALLTYPE SetHeight( size_t height ); virtual VCOMError VCOM_CALLTYPE SetIsCurved( bool isCurved ); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index 4e0b09b0..2c3266e8 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -861,13 +861,11 @@ namespace VectorworksMVR // Display virtual MvrString VCOM_CALLTYPE GetTexture() = 0; - virtual VCOMError VCOM_CALLTYPE GetAspectRatio(double& aspectRatio) = 0; virtual VCOMError VCOM_CALLTYPE GetWidth( size_t& width ) = 0; virtual VCOMError VCOM_CALLTYPE GetHeight( size_t& height ) = 0; virtual VCOMError VCOM_CALLTYPE GetIsCurved( bool& isCurved ) = 0; virtual VCOMError VCOM_CALLTYPE SetTexture(MvrString texture) = 0; - virtual VCOMError VCOM_CALLTYPE SetAspectRatio(double aspectRatio) = 0; virtual VCOMError VCOM_CALLTYPE SetWidth( size_t width ) = 0; virtual VCOMError VCOM_CALLTYPE SetHeight( size_t height ) = 0; virtual VCOMError VCOM_CALLTYPE SetIsCurved( bool isCurved ) = 0; diff --git a/unittest/EmptyGeometryUnitTest.cpp b/unittest/EmptyGeometryUnitTest.cpp index 6050faac..7f0a72a9 100644 --- a/unittest/EmptyGeometryUnitTest.cpp +++ b/unittest/EmptyGeometryUnitTest.cpp @@ -64,7 +64,6 @@ void GdtfEmptyModelTest::WriteFile(VectorworksMVR::IGdtfFixturePtr& fixture) IGdtfGeometryPtr geometry4; __checkVCOM(geometry1->CreateGeometry(EGdtfObjectType::eGdtfGeometryDisplay, "Geometry4", filledModel, STransformMatrix(), &geometry4)); __checkVCOM(geometry4->SetTexture("Texture.png")); - __checkVCOM(geometry4->SetAspectRatio( 1.78 )); __checkVCOM(geometry4->SetWidth(4700)); __checkVCOM(geometry4->SetHeight(2700)); __checkVCOM(geometry4->SetIsCurved(false)); @@ -215,10 +214,6 @@ void GdtfEmptyModelTest::ReadFile(VectorworksMVR::IGdtfFixturePtr& fixture) checkifEqual("Check Texture", geometry4->GetTexture(), "Texture.png"); - double aspectRatio = 0.0; - geometry4->GetAspectRatio( aspectRatio ); - checkifEqual("Check Aspect Ratio", aspectRatio, 1.78); - size_t width = 0; geometry4->GetWidth( width ); checkifEqual( "Check Width", width, (size_t) 4700 ); From 3ef23b63d50e6cfb82416ebce9053c4e5ba99def Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Mon, 20 Apr 2026 15:09:10 +0300 Subject: [PATCH 12/14] Removing strings --- src/GDTFManager.cpp | 3 +-- src/Prefix/CommonPrefix.h | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index 3889f047..1cfc5d9c 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -2975,10 +2975,9 @@ void GdtfGeometryDisplay::OnReadFromNode(const IXMLFileNodePtr& pNode) // Call the parent GdtfGeometry::OnReadFromNode(pNode); - TXString width, height, aspectRatio, isCurved = ""; + TXString width, height, isCurved = ""; pNode->GetNodeAttributeValue( XML_GDTF_DisplayTexture, fTexture); - pNode->GetNodeAttributeValue( XML_GDTF_DisplayAspectRatio, aspectRatio ); pNode->GetNodeAttributeValue( XML_GDTF_DisplayWidth, width ); pNode->GetNodeAttributeValue( XML_GDTF_DisplayHeight, height ); pNode->GetNodeAttributeValue( XML_GDTF_DisplayIsCurved, isCurved ); diff --git a/src/Prefix/CommonPrefix.h b/src/Prefix/CommonPrefix.h index fbd5cf63..702244d1 100644 --- a/src/Prefix/CommonPrefix.h +++ b/src/Prefix/CommonPrefix.h @@ -452,7 +452,6 @@ const Sint32 kGDTF_CurrentMinorVersion = 2; #define XML_GDTF_DisplayNodeName "Display" #define XML_GDTF_DisplayTexture "Texture" -#define XML_GDTF_DisplayAspectRatio "AspectRatio" #define XML_GDTF_DisplayWidth "Width" #define XML_GDTF_DisplayHeight "Height" #define XML_GDTF_DisplayIsCurved "IsCurved" From d7a3ea46a38daa9730ae07cc33ec3ec8c66be7c7 Mon Sep 17 00:00:00 2001 From: Vector Date: Mon, 1 Jun 2026 14:03:11 +0000 Subject: [PATCH 13/14] lib CRI implementation --- src/GDTFManager.h | 4 ++-- src/Implementation/CGdtfCRIGroup.cpp | 19 +++++++++++++++++++ src/Implementation/CGdtfCRIGroup.h | 2 +- src/Implementation/CGdtfFixture.cpp | 18 ++++++++++++++++++ src/ModuleMain.cpp | 6 ++++++ src/XmlFileHelper.cpp | 10 ++++++---- 6 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/GDTFManager.h b/src/GDTFManager.h index 9820bf6b..ad079f5f 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -2643,10 +2643,10 @@ namespace SceneData public: virtual EGdtfObjectType GetObjectType(); - // Getter + // Getter double GetColorTemperature() const; TGdtf_CRIArray GetCRI_Array() const; - // Setter + // Setter void SetColorTemperature(double val); GdtfCRIPtr Add_CRI(EGdtfColorSample ces, Sint32 colorTemp); protected: diff --git a/src/Implementation/CGdtfCRIGroup.cpp b/src/Implementation/CGdtfCRIGroup.cpp index f9ebd428..87f9b502 100644 --- a/src/Implementation/CGdtfCRIGroup.cpp +++ b/src/Implementation/CGdtfCRIGroup.cpp @@ -4,6 +4,7 @@ #include "Prefix/StdAfx.h" #include "CGdtfCRIGroup.h" #include "CGdtfCRI.h" +#include "Utility.h" VectorworksMVR::CGdtfCRIGroupImpl::CGdtfCRIGroupImpl() { @@ -45,6 +46,9 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfCRIGroupImpl::GetCRICount(size_t VectorworksMVR::VCOMError VectorworksMVR::CGdtfCRIGroupImpl::GetCRIAt(size_t at, VectorworksMVR::IGdtfCRI** value) { + if (!value) { return kVCOMError_InvalidArg; } + *value = nullptr; + // Check if Set if (!fCRIGroup) { return kVCOMError_NotInitialized; } @@ -74,6 +78,12 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfCRIGroupImpl::GetCRIAt(size_t at, return kVCOMError_NoInterface; } } + else + { + return kVCOMError_NoInterface; + } + + if (!pCRIObj) { return kVCOMError_NoInterface; } //--------------------------------------------------------------------------- // Check Incomming Object @@ -93,6 +103,9 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfCRIGroupImpl::GetCRIAt(size_t at, VectorworksMVR::VCOMError VectorworksMVR::CGdtfCRIGroupImpl::CreateCRI(EGdtfColorSample ces, Sint32 colorTemp, VectorworksMVR::IGdtfCRI **outVal) { + if (!outVal) { return kVCOMError_InvalidArg; } + *outVal = nullptr; + // Check if Set if (!fCRIGroup) { return kVCOMError_NotInitialized; } @@ -119,6 +132,12 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfCRIGroupImpl::CreateCRI(EGdtfColo return kVCOMError_NoInterface; } } + else + { + return kVCOMError_NoInterface; + } + + if (!pCRIObj) { return kVCOMError_NoInterface; } //--------------------------------------------------------------------------- // Check Incomming Object diff --git a/src/Implementation/CGdtfCRIGroup.h b/src/Implementation/CGdtfCRIGroup.h index 89460b40..d4e8e171 100644 --- a/src/Implementation/CGdtfCRIGroup.h +++ b/src/Implementation/CGdtfCRIGroup.h @@ -12,7 +12,7 @@ namespace VectorworksMVR public: CGdtfCRIGroupImpl(); virtual ~CGdtfCRIGroupImpl(); - + virtual VCOMError VCOM_CALLTYPE GetColorTemperature(double& outVal); virtual VCOMError VCOM_CALLTYPE SetColorTemperature(double value); diff --git a/src/Implementation/CGdtfFixture.cpp b/src/Implementation/CGdtfFixture.cpp index e6a6e92b..30bb1cbc 100755 --- a/src/Implementation/CGdtfFixture.cpp +++ b/src/Implementation/CGdtfFixture.cpp @@ -2234,6 +2234,9 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::GetCRIGroupCount(siz VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::GetCRIGroupAt(size_t at, VectorworksMVR::IGdtfCRIGroup** value) { + if (!value) { return kVCOMError_InvalidArg; } + *value = nullptr; + // Check if Set if (!fFixtureObject) { return kVCOMError_NotInitialized; } @@ -2264,6 +2267,12 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::GetCRIGroupAt(size_t return kVCOMError_NoInterface; } } + else + { + return kVCOMError_NoInterface; + } + + if (!pCRIGroupObj) { return kVCOMError_NoInterface; } //--------------------------------------------------------------------------- // Check Incomming Object @@ -2283,6 +2292,9 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::GetCRIGroupAt(size_t VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::CreateCRIGroup(double colorTemp, VectorworksMVR::IGdtfCRIGroup **outVal) { + if (!outVal) { return kVCOMError_InvalidArg; } + *outVal = nullptr; + // Check if Set if (!fFixtureObject) { return kVCOMError_NotInitialized; } @@ -2309,6 +2321,12 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::CreateCRIGroup(doubl return kVCOMError_NoInterface; } } + else + { + return kVCOMError_NoInterface; + } + + if (!pCRIGroupObj) { return kVCOMError_NoInterface; } //--------------------------------------------------------------------------- // Check Incomming Object diff --git a/src/ModuleMain.cpp b/src/ModuleMain.cpp index 2a3592db..7d49e276 100644 --- a/src/ModuleMain.cpp +++ b/src/ModuleMain.cpp @@ -60,6 +60,8 @@ #include "Implementation/CGdtfPoint.h" #include "Implementation/CGdtfColorSpace.h" #include "Implementation/CGdtfConnector.h" +#include "Implementation/CGdtfCRIGroup.h" +#include "Implementation/CGdtfCRI.h" #include "Implementation/CUtility.h" #include "Implementation/CGdtfLaserProtocol.h" #include "Implementation/CGdtfPinPatch.h" @@ -209,6 +211,10 @@ extern "C" VectorworksMVR::VCOMError VWQueryInterface(const VectorworksMVR::VWII resultInterface = new CGdtfColorSpaceImpl(); else if (iid == VectorworksMVR::IID_GdtfGamut) resultInterface = new CGdtfGamutImpl(); + else if (iid == VectorworksMVR::IID_GdtfCRIGroup) + resultInterface = new CGdtfCRIGroupImpl(); + else if (iid == VectorworksMVR::IID_GdtfCRI) + resultInterface = new CGdtfCRIImpl(); else if (iid == VectorworksMVR::IID_GdtfConnector) resultInterface = new CGdtfConnectorImpl(); else if (iid == VectorworksMVR::Filing::IID_FileIdentifier) diff --git a/src/XmlFileHelper.cpp b/src/XmlFileHelper.cpp index d46eeec5..8faca3a8 100644 --- a/src/XmlFileHelper.cpp +++ b/src/XmlFileHelper.cpp @@ -1697,10 +1697,12 @@ CieColor SceneData::GdtfConverter::ConvertCColor(const CCieColor & color) else if (inVal == XML_GDTF_ColorSample_97) { outVal = EGdtfColorSample::CES_97; } else if (inVal == XML_GDTF_ColorSample_98) { outVal = EGdtfColorSample::CES_98; } else if (inVal == XML_GDTF_ColorSample_99) { outVal = EGdtfColorSample::CES_99; } - - DSTOP((kEveryone, "Unknown Value for EGdtfColorSample")); - GdtfParsingError error (GdtfDefines::EGdtfParsingError::eValueError_NoMatchInEnum_ConvertColorSample, node); - SceneData::GdtfFixture::AddError(error); + else + { + DSTOP((kEveryone, "Unknown Value for EGdtfColorSample")); + GdtfParsingError error (GdtfDefines::EGdtfParsingError::eValueError_NoMatchInEnum_ConvertColorSample, node); + SceneData::GdtfFixture::AddError(error); + } return true; } From bdaae207f154fee4a70338cb7a3f0a973cdd887a Mon Sep 17 00:00:00 2001 From: Vector Date: Wed, 17 Jun 2026 12:16:52 +0000 Subject: [PATCH 14/14] First step - adding new WheelSlot params --- src/GDTFManager.cpp | 36 +++++++++++++ src/GDTFManager.h | 12 +++++ src/Implementation/CGdtfWheelSlot.cpp | 56 ++++++++++++++++++++ src/Implementation/CGdtfWheelSlot.h | 9 ++++ src/Include/IMediaRessourceVectorInterface.h | 10 ++++ src/Prefix/CommonPrefix.h | 4 ++ unittest/GdtfUnittest.cpp | 17 ++++++ 7 files changed, 144 insertions(+) diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index fbbe30e7..6d3c762a 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -1153,6 +1153,10 @@ GdtfWheelSlot::GdtfWheelSlot(GdtfWheel* parent) fWheelParent = parent; fFilter = nullptr; fAnimationSystem = nullptr; + fDuration = 0.0; + fWidth = 0; + fHeight = 0; + fFPS = 0; } GdtfWheelSlot::GdtfWheelSlot(const TXString& name, GdtfWheel* parent) @@ -1161,6 +1165,10 @@ GdtfWheelSlot::GdtfWheelSlot(const TXString& name, GdtfWheel* parent) fWheelParent = parent; fFilter = nullptr; fAnimationSystem = nullptr; + fDuration = 0.0; + fWidth = 0; + fHeight = 0; + fFPS = 0; } @@ -1270,6 +1278,10 @@ void GdtfWheelSlot::OnPrintToFile(IXMLFileNodePtr pNode) pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotColor, GdtfConverter::ConvertColor(fColor)); if(fGobo != "") { pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotPicture, fGobo); } if(fFilter) { pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotFilter, fFilter->GetNodeReference()); } + if(fDuration != 0.0) { pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotDuration, GdtfConverter::ConvertDouble(fDuration)); } + if(fWidth != 0) { pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotWidth, GdtfConverter::ConvertInteger(fWidth)); } + if(fHeight != 0) { pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotHeight, GdtfConverter::ConvertInteger(fHeight)); } + if(fFPS != 0) { pNode->SetNodeAttributeValue(XML_GDTF_WheelSlotFPS, GdtfConverter::ConvertInteger(fFPS)); } //------------------------------------------------------------------------------------ // Print the children @@ -1311,6 +1323,16 @@ void GdtfWheelSlot::OnReadFromNode(const IXMLFileNodePtr& pNode) pNode->GetNodeAttributeValue(XML_GDTF_WheelSlotFilter, fUnresolvedFilter); + + TXString duration, width, height, fps; + pNode->GetNodeAttributeValue(XML_GDTF_WheelSlotDuration, duration); + pNode->GetNodeAttributeValue(XML_GDTF_WheelSlotWidth, width); + pNode->GetNodeAttributeValue(XML_GDTF_WheelSlotHeight, height); + pNode->GetNodeAttributeValue(XML_GDTF_WheelSlotFPS, fps); + if(!duration.IsEmpty()) { GdtfConverter::ConvertDouble(duration, pNode, fDuration); } + if(!width.IsEmpty()) { GdtfConverter::ConvertInteger(width, pNode, fWidth); } + if(!height.IsEmpty()) { GdtfConverter::ConvertInteger(height, pNode, fHeight); } + if(!fps.IsEmpty()) { GdtfConverter::ConvertInteger(fps, pNode, fFPS); } //------------------------------------------------------------------------------------ // Read the wheel slots @@ -1358,6 +1380,10 @@ void GdtfWheelSlot::OnErrorCheck(const IXMLFileNodePtr& pNode) optional.push_back(XML_GDTF_WheelSlotColor); optional.push_back(XML_GDTF_WheelSlotPicture); optional.push_back(XML_GDTF_WheelSlotFilter); + optional.push_back(XML_GDTF_WheelSlotDuration); + optional.push_back(XML_GDTF_WheelSlotWidth); + optional.push_back(XML_GDTF_WheelSlotHeight); + optional.push_back(XML_GDTF_WheelSlotFPS); //------------------------------------------------------------------------------------ @@ -1390,6 +1416,16 @@ GdtfWheelSlotAnimationSystem* GdtfWheelSlot::GetAnimationSystem() const return fAnimationSystem; } +double GdtfWheelSlot::GetDuration() const { return fDuration; } +size_t GdtfWheelSlot::GetWidth() const { return fWidth; } +size_t GdtfWheelSlot::GetHeight() const { return fHeight; } +size_t GdtfWheelSlot::GetFPS() const { return fFPS; } + +void GdtfWheelSlot::SetDuration(double duration) { fDuration = duration; } +void GdtfWheelSlot::SetWidth(size_t width) { fWidth = width; } +void GdtfWheelSlot::SetHeight(size_t height) { fHeight = height; } +void GdtfWheelSlot::SetFPS(size_t fps) { fFPS = fps; } + //------------------------------------------------------------------------------------ // GdtfModel GdtfModel::GdtfModel(GdtfFixture* fixture) diff --git a/src/GDTFManager.h b/src/GDTFManager.h index 81eeda90..c060b09a 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -428,6 +428,10 @@ namespace SceneData GdtfFilter* fFilter; TXString fUnresolvedFilter; GdtfWheelSlotAnimationSystem* fAnimationSystem; + double fDuration; + size_t fWidth; + size_t fHeight; + size_t fFPS; public: const TXString& GetGobo() const; @@ -437,6 +441,10 @@ namespace SceneData TGdtfWheelSlotPrismFacetArray GetPrismFacets(); GdtfFilter* GetFilter() const; GdtfWheelSlotAnimationSystem* GetAnimationSystem() const; + double GetDuration() const; + size_t GetWidth() const; + size_t GetHeight() const; + size_t GetFPS() const; void SetName(const TXString& name); void SetGobo(const GdtfPNGFile& png); @@ -444,6 +452,10 @@ namespace SceneData void SetFilter(GdtfFilter* filter); GdtfWheelSlotPrismFacet* AddPrismFacet(); GdtfWheelSlotAnimationSystem* AddAnimationSystem(); + void SetDuration(double duration); + void SetWidth(size_t width); + void SetHeight(size_t height); + void SetFPS(size_t fps); virtual TXString GetNodeReference(); diff --git a/src/Implementation/CGdtfWheelSlot.cpp b/src/Implementation/CGdtfWheelSlot.cpp index 7b9922d2..2889b9a4 100644 --- a/src/Implementation/CGdtfWheelSlot.cpp +++ b/src/Implementation/CGdtfWheelSlot.cpp @@ -374,3 +374,59 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::SetFilter (IGdtfFi return kVCOMError_NoError; } + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::GetDuration(double& outDuration) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + outDuration = fWheelSlot->GetDuration(); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::GetWidth(size_t& outWidth) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + outWidth = fWheelSlot->GetWidth(); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::GetHeight(size_t& outHeight) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + outHeight = fWheelSlot->GetHeight(); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::GetFPS(size_t& outFPS) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + outFPS = fWheelSlot->GetFPS(); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::SetDuration(double duration) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + fWheelSlot->SetDuration(duration); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::SetWidth(size_t width) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + fWheelSlot->SetWidth(width); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::SetHeight(size_t height) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + fWheelSlot->SetHeight(height); + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CGdtfWheelSlotImpl::SetFPS(size_t fps) +{ + if(!fWheelSlot) return kVCOMError_NotInitialized; + fWheelSlot->SetFPS(fps); + return kVCOMError_NoError; +} diff --git a/src/Implementation/CGdtfWheelSlot.h b/src/Implementation/CGdtfWheelSlot.h index 5eeb497a..c2d541a8 100644 --- a/src/Implementation/CGdtfWheelSlot.h +++ b/src/Implementation/CGdtfWheelSlot.h @@ -32,6 +32,15 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE GetAnimationSystem(IGdtfWheelSlotAnimationSystem** outAnimationSystem); virtual VCOMError VCOM_CALLTYPE CreateAnimationSystem(double p1_X, double p1_Y, double p2_X, double p2_Y, double p3_X, double p3_Y, double radius, IGdtfWheelSlotAnimationSystem** outAnimationSystem); + + virtual VCOMError VCOM_CALLTYPE GetDuration(double& outDuration); + virtual VCOMError VCOM_CALLTYPE GetWidth(size_t& outWidth); + virtual VCOMError VCOM_CALLTYPE GetHeight(size_t& outHeight); + virtual VCOMError VCOM_CALLTYPE GetFPS(size_t& outFPS); + virtual VCOMError VCOM_CALLTYPE SetDuration(double duration); + virtual VCOMError VCOM_CALLTYPE SetWidth(size_t width); + virtual VCOMError VCOM_CALLTYPE SetHeight(size_t height); + virtual VCOMError VCOM_CALLTYPE SetFPS(size_t fps); virtual VCOMError VCOM_CALLTYPE BindToObject(void* objAddr); virtual void* VCOM_CALLTYPE GetBoundObject(); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index 2c3266e8..9a172775 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -684,6 +684,16 @@ namespace VectorworksMVR //GDTF 1.1 virtual VCOMError VCOM_CALLTYPE GetAnimationSystem(IGdtfWheelSlotAnimationSystem** outAnimationSystem) = 0; virtual VCOMError VCOM_CALLTYPE CreateAnimationSystem(double p1_X, double p1_Y, double p2_X, double p2_Y, double p3_X, double p3_Y, double radius, IGdtfWheelSlotAnimationSystem** outAnimationSystem) = 0; + + // Spec PR #305 - Media content attributes + virtual VCOMError VCOM_CALLTYPE GetDuration(double& outDuration) = 0; + virtual VCOMError VCOM_CALLTYPE GetWidth(size_t& outWidth) = 0; + virtual VCOMError VCOM_CALLTYPE GetHeight(size_t& outHeight) = 0; + virtual VCOMError VCOM_CALLTYPE GetFPS(size_t& outFPS) = 0; + virtual VCOMError VCOM_CALLTYPE SetDuration(double duration) = 0; + virtual VCOMError VCOM_CALLTYPE SetWidth(size_t width) = 0; + virtual VCOMError VCOM_CALLTYPE SetHeight(size_t height) = 0; + virtual VCOMError VCOM_CALLTYPE SetFPS(size_t fps) = 0; }; typedef VCOMPtr IGdtfWheelSlotPtr; diff --git a/src/Prefix/CommonPrefix.h b/src/Prefix/CommonPrefix.h index 702244d1..3999bbbf 100644 --- a/src/Prefix/CommonPrefix.h +++ b/src/Prefix/CommonPrefix.h @@ -390,6 +390,10 @@ const Sint32 kGDTF_CurrentMinorVersion = 2; #define XML_GDTF_WheelSlotColor "Color" #define XML_GDTF_WheelSlotPicture "MediaFileName" #define XML_GDTF_WheelSlotFilter "Filter" +#define XML_GDTF_WheelSlotDuration "Duration" +#define XML_GDTF_WheelSlotWidth "Width" +#define XML_GDTF_WheelSlotHeight "Height" +#define XML_GDTF_WheelSlotFPS "FPS" #define XML_GDTF_PrismFacetNodeName "Facet" #define XML_GDTF_PrismFacetColor "Color" diff --git a/unittest/GdtfUnittest.cpp b/unittest/GdtfUnittest.cpp index 5c665cd4..65b6f376 100644 --- a/unittest/GdtfUnittest.cpp +++ b/unittest/GdtfUnittest.cpp @@ -194,6 +194,11 @@ void GdtfUnittest::WriteFile() IGdtfWheelSlotAnimationSystemPtr gdtfAnimationSystem; __checkVCOM(wheelSlotContainer->CreateAnimationSystem(1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0 /*radius*/, &gdtfAnimationSystem)); + // Set media content attributes (Spec PR #305) + __checkVCOM(wheelSlotContainer->SetDuration(12.345)); + __checkVCOM(wheelSlotContainer->SetWidth(1920)); + __checkVCOM(wheelSlotContainer->SetHeight(1080)); + __checkVCOM(wheelSlotContainer->SetFPS(30)); // Set Filter link __checkVCOM(wheelSlotContainer->SetFilter(gdtfFilter)); @@ -671,6 +676,18 @@ void GdtfUnittest::ReadFile() } + // Media content attributes (Spec PR #305) + double duration = 0.0; + size_t width = 0, height = 0, fps = 0; + __checkVCOM(gdtfSlot->GetDuration(duration)); + __checkVCOM(gdtfSlot->GetWidth(width)); + __checkVCOM(gdtfSlot->GetHeight(height)); + __checkVCOM(gdtfSlot->GetFPS(fps)); + this->checkifEqual("GetWheelSlotDuration ", duration, 12.345); + this->checkifEqual("GetWheelSlotWidth ", width, size_t(1920)); + this->checkifEqual("GetWheelSlotHeight ", height, size_t(1080)); + this->checkifEqual("GetWheelSlotFPS ", fps, size_t(30)); + } // WheelSlot loop } } // Wheels loop