diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index fb8f41ac..09c603b6 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -7768,8 +7768,29 @@ bool GdtfFixture::ImportFromZip(IZIPFilePtr& zipfile) IXMLFileNodePtr rootNode; if (VCOM_SUCCEEDED(xmlFile->GetRootNode( & rootNode))) { + TXString version; + rootNode->GetNodeAttributeValue( XML_GDTF_ROOTNODEATTRVERSION, version ); + + int majorVersion = 0; + int minorVersion = 0; + size_t dotPos = version.Find("."); + if (dotPos != std::string::npos) { + TXString majorStr = version.Mid(0, dotPos); + TXString minorStr = version.Mid(dotPos + 1); + try { + majorVersion = std::stoi(majorStr.GetStdWString()); + minorVersion = std::stoi(minorStr.GetStdWString()); + } catch (...) { + majorVersion = 0; + minorVersion = 0; + } + } + + this->SetMajorVersion( majorVersion ); + this->SetMinorVersion( minorVersion ); + IXMLFileNodePtr fixtureNode; - if (VCOM_SUCCEEDED(rootNode->GetChildNode(XML_GDTF_FixtureNodeName, & fixtureNode))) + if (VCOM_SUCCEEDED(rootNode->GetChildNode(XML_GDTF_FixtureNodeName, &fixtureNode))) { //--------------------------------------------------------------------------------------------- // Read Stuff @@ -9900,6 +9921,16 @@ GdtfPhysicalDescriptions& SceneData::GdtfFixture::GetPhysicalDesciptionsContaine return fPhysicalDesciptions; } +Sint32 GdtfFixture::GetMajorVersion() const +{ + return fMajorVersion; +} + +Sint32 GdtfFixture::GetMinorVersion() const +{ + return fMinorVersion; +} + void GdtfFixture::SetName(const TXString& name) { fName = name; @@ -9956,6 +9987,16 @@ void GdtfFixture::SetCanHaveChildren(bool canHaveChildren) fCanHaveChildren = canHaveChildren; } +void GdtfFixture::SetMajorVersion( Sint32 majorVersion ) +{ + fMajorVersion = majorVersion; +} + +void GdtfFixture::SetMinorVersion( Sint32 minorVersion ) +{ + fMinorVersion = minorVersion; +} + //------------------------------------------------------------------------------------ // Point SceneData::GdtfPoint::GdtfPoint() diff --git a/src/GDTFManager.h b/src/GDTFManager.h index 4acacc57..da4d9e2c 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -2799,6 +2799,8 @@ namespace SceneData size_t fTotalNodesCount = 0; + Sint32 fMajorVersion = 0; + Sint32 fMinorVersion = 0; // GdtfAttributePtr fNoFeature; @@ -2836,6 +2838,8 @@ namespace SceneData const TXString& GetSVGThumnailFullPath(); GdtfProtocols& GetProtocollContainer(); GdtfPhysicalDescriptions& GetPhysicalDesciptionsContainer(); + Sint32 GetMajorVersion() const; + Sint32 GetMinorVersion() const; // Setter void SetName(const TXString& name); @@ -2851,6 +2855,9 @@ namespace SceneData void SetCanHaveChildren(bool canHaveChildren); + void SetMajorVersion( Sint32 majorVersion ); + void SetMinorVersion( Sint32 minorVersion ); + public: //---------------------------------------------------------------------------------------------------------------------------------------------------------------- // Add calls diff --git a/src/Implementation/CGdtfFixture.cpp b/src/Implementation/CGdtfFixture.cpp index ed812ad3..290ce1c9 100755 --- a/src/Implementation/CGdtfFixture.cpp +++ b/src/Implementation/CGdtfFixture.cpp @@ -219,6 +219,28 @@ VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::ReadFromFile(IFileId return retVal; } +VectorworksMVR::VCOMError VectorworksMVR::CGdtfFixtureImpl::GetGDTFVersion( Sint32& major, Sint32& minor ) +{ + if ( !fFixtureObject ) + { + return kVCOMError_NotInitialized; + } + + major = fFixtureObject->GetMajorVersion(); + minor = fFixtureObject->GetMinorVersion(); + + if ( major <= 0 || minor <= 0 ) + { + major = 0; + minor = 0; + + return kVCOMError_Failed; + } + + return kVCOMError_NoError; +} + + MvrString VectorworksMVR::CGdtfFixtureImpl::GetName() { if(!fFixtureObject) {return "";} diff --git a/src/Implementation/CGdtfFixture.h b/src/Implementation/CGdtfFixture.h index 3476a5ea..85c3cf68 100755 --- a/src/Implementation/CGdtfFixture.h +++ b/src/Implementation/CGdtfFixture.h @@ -27,6 +27,8 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE AddBufferToGdtfFile(MvrString filename, const char* inBuffer, size_t length, GdtfDefines::ERessourceType resType); virtual VCOMError VCOM_CALLTYPE Close(); + virtual VCOMError VCOM_CALLTYPE GetGDTFVersion( Sint32& major, Sint32& minor ); + virtual MvrString VCOM_CALLTYPE GetName(); virtual MvrString VCOM_CALLTYPE GetShortName(); virtual MvrString VCOM_CALLTYPE GetLongName(); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index 1fba084d..3d35cb29 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -1556,6 +1556,8 @@ class DYNAMIC_ATTRIBUTE IGdtfMacro : public IVWUnknown virtual VCOMError VCOM_CALLTYPE Close() = 0; + virtual VCOMError VCOM_CALLTYPE GetGDTFVersion( Sint32& major, Sint32& minor ) = 0; + virtual MvrString VCOM_CALLTYPE GetName() = 0; virtual MvrString VCOM_CALLTYPE GetManufacturer() = 0; virtual VCOMError VCOM_CALLTYPE GetFixtureGUID(MvrUUID& uuid) = 0;