From efb6ac6c2bf257769f6cbdb8e992444eb3c90e62 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Tue, 12 May 2026 16:18:44 +0300 Subject: [PATCH 1/4] Implementing Listening Obj type into MVR --- .../CMediaRessourceVectorImpl.cpp | 68 +++++++++++++++++++ .../CMediaRessourceVectorImpl.h | 21 +++--- src/Include/IMediaRessourceVectorInterface.h | 21 +++--- src/Prefix/CommonPrefix.h | 2 + src/SceneDataExchange.cpp | 55 +++++++++++++++ src/SceneDataExchange.h | 60 ++++++++++------ 6 files changed, 187 insertions(+), 40 deletions(-) diff --git a/src/Implementation/CMediaRessourceVectorImpl.cpp b/src/Implementation/CMediaRessourceVectorImpl.cpp index 7fa782e3..0502b8c7 100644 --- a/src/Implementation/CMediaRessourceVectorImpl.cpp +++ b/src/Implementation/CMediaRessourceVectorImpl.cpp @@ -976,6 +976,74 @@ VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::CreateProje return kVCOMError_NoError; } +VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::CreateListeningPlane(const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outlisteningPlane) +{ + //--------------------------------------------------------------------------- + // Read Container + CSceneObjImpl* pContainer = static_cast(addToContainer); + + ASSERTN(kEveryone, pContainer != nullptr); + if ( ! pContainer) { return kVCOMError_NoValidContainerObj; } + + + SceneData::SceneDataObjWithMatrixPtr obj = nullptr; + ESceneObjType type = ESceneObjType::Layer; + pContainer->GetPointer(obj, type); + + if( ! VectorworksMVR::MvrUtil::isContainerType(type)) { return kVCOMError_NoValidContainerObj; } + + SceneData::SceneDataGroupObjPtr group = static_cast(obj); + + ASSERTN(kEveryone, group != nullptr); + if ( ! group) { return kVCOMError_NoValidContainerObj; } + + //--------------------------------------------------------------------------- + // Create the obj + VWFC::Tools::VWUUID uuid (guid.a,guid.b,guid.c,guid.d); + TXString nameStr ( name ); + + VWTransformMatrix ma; + GdtfUtil::ConvertMatrix(offset, ma); + + SceneData::SceneDataListeningPlaneObjPtr ptr = fExchangeObj.CreateListeningPlane(uuid, ma, nameStr, group); + + //--------------------------------------------------------------------------- + // Initialize Object + CSceneObjImpl* pListeningPlane = nullptr; + + // Query Interface + if (VCOM_SUCCEEDED(VWQueryInterface(IID_SceneObject, (IVWUnknown**) & pListeningPlane))) + { + // Check Casting + CSceneObjImpl* pResultInterface = static_cast(pListeningPlane); + if (pResultInterface) + { + pResultInterface->SetPointer(ptr, GetExchangeObj()); + } + else + { + pResultInterface->Release(); + pResultInterface = nullptr; + return kVCOMError_NoInterface; + } + } + + //--------------------------------------------------------------------------- + // Check Incoming Object + if (*outlisteningPlane) + { + (*outlisteningPlane)->Release(); + *outlisteningPlane = NULL; + } + + //--------------------------------------------------------------------------- + // Set Out Value + *outlisteningPlane = pListeningPlane; + + return kVCOMError_NoError; +} + + VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::Close() { //------------------------------------------------------------------ diff --git a/src/Implementation/CMediaRessourceVectorImpl.h b/src/Implementation/CMediaRessourceVectorImpl.h index 4a5db374..5bc0772b 100644 --- a/src/Implementation/CMediaRessourceVectorImpl.h +++ b/src/Implementation/CMediaRessourceVectorImpl.h @@ -55,16 +55,17 @@ namespace VectorworksMVR // Then you can generate all other objects - virtual VCOMError VCOM_CALLTYPE CreateLayerObject( const MvrUUID& guid, MvrString name, ISceneObj** outLayerObj); - virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, ISceneObj* addToContainer, ISceneObj** outGroupObj); - virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outGroupObj); - virtual VCOMError VCOM_CALLTYPE CreateFixture( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFixture); - virtual VCOMError VCOM_CALLTYPE CreateSceneObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSceneObj); - virtual VCOMError VCOM_CALLTYPE CreateFocusPoint( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFocusPoint); - virtual VCOMError VCOM_CALLTYPE CreateTruss( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outTruss); - virtual VCOMError VCOM_CALLTYPE CreateSupport( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSupport); - virtual VCOMError VCOM_CALLTYPE CreateVideoScreen( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outVideoScreen); - virtual VCOMError VCOM_CALLTYPE CreateProjector( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outProjector); + virtual VCOMError VCOM_CALLTYPE CreateLayerObject( const MvrUUID& guid, MvrString name, ISceneObj** outLayerObj); + virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, ISceneObj* addToContainer, ISceneObj** outGroupObj); + virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outGroupObj); + virtual VCOMError VCOM_CALLTYPE CreateFixture( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFixture); + virtual VCOMError VCOM_CALLTYPE CreateSceneObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSceneObj); + virtual VCOMError VCOM_CALLTYPE CreateFocusPoint( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFocusPoint); + virtual VCOMError VCOM_CALLTYPE CreateTruss( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outTruss); + virtual VCOMError VCOM_CALLTYPE CreateSupport( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSupport); + virtual VCOMError VCOM_CALLTYPE CreateVideoScreen( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outVideoScreen); + virtual VCOMError VCOM_CALLTYPE CreateProjector( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outProjector); + virtual VCOMError VCOM_CALLTYPE CreateListeningPlane( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outListeningPlane); // Add the end call to write the file to disk virtual VCOMError VCOM_CALLTYPE Close(); diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index 2c3266e8..a5f7f8d4 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -450,16 +450,17 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE CreateMappingDefinitionObject( const MvrUUID& guid, MvrString name, IMappingDefinition** outMapDef) = 0; // Then you can generate all other objects - virtual VCOMError VCOM_CALLTYPE CreateLayerObject( const MvrUUID& guid, MvrString name, ISceneObj** outLayerObj) = 0; - virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, ISceneObj* addToContainer, ISceneObj** outGroupObj) = 0; - virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outGroupObj) = 0; - virtual VCOMError VCOM_CALLTYPE CreateFixture( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFixture) = 0; - virtual VCOMError VCOM_CALLTYPE CreateSceneObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSceneObj) = 0; - virtual VCOMError VCOM_CALLTYPE CreateFocusPoint( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFocusPoint) = 0; - virtual VCOMError VCOM_CALLTYPE CreateVideoScreen( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outVideoScreen) = 0; - virtual VCOMError VCOM_CALLTYPE CreateTruss( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outTruss) = 0; - virtual VCOMError VCOM_CALLTYPE CreateSupport( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSupport) = 0; - virtual VCOMError VCOM_CALLTYPE CreateProjector( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outProjector) = 0; + virtual VCOMError VCOM_CALLTYPE CreateLayerObject( const MvrUUID& guid, MvrString name, ISceneObj** outLayerObj) = 0; + virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, ISceneObj* addToContainer, ISceneObj** outGroupObj) = 0; + virtual VCOMError VCOM_CALLTYPE CreateGroupObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outGroupObj) = 0; + virtual VCOMError VCOM_CALLTYPE CreateFixture( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFixture) = 0; + virtual VCOMError VCOM_CALLTYPE CreateSceneObject( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSceneObj) = 0; + virtual VCOMError VCOM_CALLTYPE CreateFocusPoint( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outFocusPoint) = 0; + virtual VCOMError VCOM_CALLTYPE CreateVideoScreen( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outVideoScreen) = 0; + virtual VCOMError VCOM_CALLTYPE CreateTruss( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outTruss) = 0; + virtual VCOMError VCOM_CALLTYPE CreateSupport( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outSupport) = 0; + virtual VCOMError VCOM_CALLTYPE CreateProjector( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outProjector) = 0; + virtual VCOMError VCOM_CALLTYPE CreateListeningPlane( const MvrUUID& guid, const STransformMatrix& offset, MvrString name, ISceneObj* addToContainer, ISceneObj** outListeningPlane) = 0; // Add the end call to write the file to disk virtual VCOMError VCOM_CALLTYPE Close() = 0; diff --git a/src/Prefix/CommonPrefix.h b/src/Prefix/CommonPrefix.h index 702244d1..21bf3bd2 100644 --- a/src/Prefix/CommonPrefix.h +++ b/src/Prefix/CommonPrefix.h @@ -245,6 +245,8 @@ #define XML_Val_ProjectorObjectProjection "Projection" #define XML_Val_ProjectorObjectScaleHandling "ScaleHandling" +#define XML_Val_ListeningPlaneObjectNodeName "ListeningPlane" + #define XML_Val_SymbolObjectNodeName "Symbol" #define XML_Val_GuidSymdefAttrName "symdef" diff --git a/src/SceneDataExchange.cpp b/src/SceneDataExchange.cpp index b231634f..cf5db74e 100644 --- a/src/SceneDataExchange.cpp +++ b/src/SceneDataExchange.cpp @@ -2796,6 +2796,35 @@ void SceneDataProjectorObj::OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDa } +// ---------------------------------------------------------------------------------------------------------------------------------- +// SceneDataListeningPlaneObj +SceneDataListeningPlaneObj::SceneDataListeningPlaneObj(const SceneDataGUID& guid) : SceneDataGDTFSpecObj(guid) +{ +} + +SceneDataListeningPlaneObj::~SceneDataListeningPlaneObj() +{ +} + +TXString SceneDataListeningPlaneObj::GetNodeName() +{ + return TXString(XML_Val_ListeningPlaneObjectNodeName); +} + +ESceneDataObjectType SceneDataListeningPlaneObj::GetObjectType() +{ + return ESceneDataObjectType::eListeningPlane; +} + +void SceneDataListeningPlaneObj::OnPrintToFile(IXMLFileNodePtr pNode, SceneDataExchange* exchange) +{ + SceneDataObjWithMatrix::OnPrintToFile( pNode, exchange ); +} + +void SceneDataListeningPlaneObj::OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDataExchange* exchange) +{ + SceneDataObjWithMatrix::OnReadFromNode( pNode, exchange ); +} // ---------------------------------------------------------------------------------------------------------------------------------- // SceneDataSymbolObj @@ -3444,6 +3473,32 @@ SceneDataProjectorObjPtr SceneDataExchange::ReadProjector(const SceneDataGUID& g return newProjectorObj; } +SceneDataListeningPlaneObjPtr SceneDataExchange::CreateListeningPlane(const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer) +{ + SceneDataListeningPlaneObjPtr newListeningPlaneObj = new SceneDataListeningPlaneObj(guid); + addToContainer->AddObject(newListeningPlaneObj); + + newListeningPlaneObj->setName(name); + newListeningPlaneObj->SetTransformMatrix(offset); + + return newListeningPlaneObj; +} + +SceneDataListeningPlaneObjPtr SceneDataExchange::ReadListeningPlane(const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer) +{ + if ( CheckAbort() ) return nullptr; + //---------------------------------------------------------------------------- + // Create new Object + SceneDataListeningPlaneObjPtr newListeningPlaneObj = new SceneDataListeningPlaneObj(guid); + addToContainer->AddObject(newListeningPlaneObj); + + //---------------------------------------------------------------------------- + // Read + newListeningPlaneObj->ReadFromNode(node, this); + + return newListeningPlaneObj; +} + SceneDataSymbolObjPtr SceneDataExchange::CreateSymbol(const SceneDataGUID& guid, const VWTransformMatrix& offset, SceneDataSymDefObjPtr symDef) { SceneDataSymbolObjPtr newSymbolObj = new SceneDataSymbolObj(guid); diff --git a/src/SceneDataExchange.h b/src/SceneDataExchange.h index afbacc24..b4815fdf 100644 --- a/src/SceneDataExchange.h +++ b/src/SceneDataExchange.h @@ -47,6 +47,7 @@ namespace SceneData eVideoScreen = 7, eProjector = 8, eSupport = 9, + eListeningPlane = 10, eSymDef = -1, eProviderObj = -2, ePosition = -3, @@ -937,6 +938,24 @@ namespace SceneData }; typedef SceneDataProjectorObj* SceneDataProjectorObjPtr; + // ---------------------------------------------------------------------------------------------------------------------------------- + // SceneDataListeningPlaneObj + class SceneDataListeningPlaneObj : public SceneDataGDTFSpecObj + { + + public: + SceneDataListeningPlaneObj(const SceneDataGUID& guid); + virtual ~SceneDataListeningPlaneObj(); + + private: + virtual TXString GetNodeName(); + virtual ESceneDataObjectType GetObjectType(); + virtual void OnPrintToFile(IXMLFileNodePtr pNode, SceneDataExchange* exchange); + virtual void OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDataExchange* exchange); + + }; + typedef SceneDataListeningPlaneObj* SceneDataListeningPlaneObjPtr; + // ---------------------------------------------------------------------------------------------------------------------------------- // SceneDataSymbolObj class SceneDataSymbolObj : public SceneDataGeoInstanceObj @@ -1057,17 +1076,17 @@ namespace SceneData SceneDataMappingDefinitionObjPtr CreateMappingDefinitionObject(const SceneDataGUID& guid, const TXString& name); - SceneDataLayerObjPtr CreateLayerObject( const SceneDataGUID& guid, const TXString& name); - SceneDataGroupObjPtr CreateGroupObject( const SceneDataGUID& guid, const VWTransformMatrix& offset, SceneDataGroupObjPtr addToContainer); - SceneDataGroupObjPtr CreateGroupObject( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataFixtureObjPtr CreateFixture( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataSceneryObjPtr CreateSceneryObject(const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataFocusPointObjPtr CreateFocusPoint( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataTrussObjPtr CreateTruss( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataSupportObjPtr CreateSupport( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataVideoScreenObjPtr CreateVideoScreen( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - SceneDataProjectorObjPtr CreateProjector( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); - + SceneDataLayerObjPtr CreateLayerObject( const SceneDataGUID& guid, const TXString& name); + SceneDataGroupObjPtr CreateGroupObject( const SceneDataGUID& guid, const VWTransformMatrix& offset, SceneDataGroupObjPtr addToContainer); + SceneDataGroupObjPtr CreateGroupObject( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataFixtureObjPtr CreateFixture( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataSceneryObjPtr CreateSceneryObject( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataFocusPointObjPtr CreateFocusPoint( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataTrussObjPtr CreateTruss( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataSupportObjPtr CreateSupport( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataVideoScreenObjPtr CreateVideoScreen( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataProjectorObjPtr CreateProjector( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); + SceneDataListeningPlaneObjPtr CreateListeningPlane( const SceneDataGUID& guid, const VWTransformMatrix& offset, const TXString& name, SceneDataGroupObjPtr addToContainer); // --------------------------------------------------------------------------------------------------------------------- // Read calls @@ -1079,15 +1098,16 @@ namespace SceneData SceneDataMappingDefinitionObjPtr ReadMappingDefinitionObject(const IXMLFileNodePtr& node); - SceneDataLayerObjPtr ReadLayerObject( const SceneDataGUID& guid,const IXMLFileNodePtr& node); - SceneDataGroupObjPtr ReadGroupObject( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataFixtureObjPtr ReadFixture( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataSceneryObjPtr ReadSceneryObject( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataFocusPointObjPtr ReadFocusPoint( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataTrussObjPtr ReadTruss( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataSupportObjPtr ReadSupport( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataVideoScreenObjPtr ReadVideoScreen( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); - SceneDataProjectorObjPtr ReadProjector( const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataLayerObjPtr ReadLayerObject( const SceneDataGUID& guid, const IXMLFileNodePtr& node); + SceneDataGroupObjPtr ReadGroupObject( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataFixtureObjPtr ReadFixture( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataSceneryObjPtr ReadSceneryObject( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataFocusPointObjPtr ReadFocusPoint( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataTrussObjPtr ReadTruss( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataSupportObjPtr ReadSupport( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataVideoScreenObjPtr ReadVideoScreen( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataProjectorObjPtr ReadProjector( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer); + SceneDataListeningPlaneObjPtr ReadListeningPlane( const SceneDataGUID& guid, const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer ); // --------------------------------------------------------------------------------------------------------------------- // Write calls From 30ff49877a23c769364799edd593233210602752 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Tue, 12 May 2026 16:32:10 +0300 Subject: [PATCH 2/4] Update IMediaRessourceVectorInterface.h --- src/Include/IMediaRessourceVectorInterface.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index a5f7f8d4..c3360717 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -327,6 +327,7 @@ namespace VectorworksMVR Fixture, Projector, Support, + ListeningPlane }; class DYNAMIC_ATTRIBUTE ISceneObj : public IVWUnknown From af112bfd7bc06162ba6bea06c50a338b14da405a Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Wed, 13 May 2026 15:05:23 +0300 Subject: [PATCH 3/4] Adding Listening Obj type --- src/Implementation/CSceneObjImpl.cpp | 19 ++++++++++--------- src/SceneDataExchange.cpp | 24 +++++++++++------------- src/SceneDataExchange.h | 5 +++-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Implementation/CSceneObjImpl.cpp b/src/Implementation/CSceneObjImpl.cpp index 1da2d4f1..91668cff 100644 --- a/src/Implementation/CSceneObjImpl.cpp +++ b/src/Implementation/CSceneObjImpl.cpp @@ -2152,15 +2152,16 @@ void VectorworksMVR::CSceneObjImpl::SetPointer(SceneData::SceneDataObjWithMatrix switch (pointer->GetObjectType()) { - case SceneData::eLayer: fType = ESceneObjType::Layer; break; - case SceneData::eGroup: fType = ESceneObjType::Group; break; - case SceneData::eTruss: fType = ESceneObjType::Truss; break; - case SceneData::eSupport: fType = ESceneObjType::Support; break; - case SceneData::eFixture: fType = ESceneObjType::Fixture; break; - case SceneData::eFocusPoint: fType = ESceneObjType::FocusPoint; break; - case SceneData::eSceneObject: fType = ESceneObjType::SceneObj; break; - case SceneData::eVideoScreen: fType = ESceneObjType::VideoScreen; break; - case SceneData::eProjector: fType = ESceneObjType::Projector; break; + case SceneData::eLayer: fType = ESceneObjType::Layer; break; + case SceneData::eGroup: fType = ESceneObjType::Group; break; + case SceneData::eTruss: fType = ESceneObjType::Truss; break; + case SceneData::eSupport: fType = ESceneObjType::Support; break; + case SceneData::eFixture: fType = ESceneObjType::Fixture; break; + case SceneData::eFocusPoint: fType = ESceneObjType::FocusPoint; break; + case SceneData::eSceneObject: fType = ESceneObjType::SceneObj; break; + case SceneData::eVideoScreen: fType = ESceneObjType::VideoScreen; break; + case SceneData::eProjector: fType = ESceneObjType::Projector; break; + case SceneData::eListeningPlane: fType = ESceneObjType::ListeningPlane; break; default: DSTOP((kEveryone, "Unexpected input!")); diff --git a/src/SceneDataExchange.cpp b/src/SceneDataExchange.cpp index cf5db74e..54209f72 100644 --- a/src/SceneDataExchange.cpp +++ b/src/SceneDataExchange.cpp @@ -2798,7 +2798,7 @@ void SceneDataProjectorObj::OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDa // ---------------------------------------------------------------------------------------------------------------------------------- // SceneDataListeningPlaneObj -SceneDataListeningPlaneObj::SceneDataListeningPlaneObj(const SceneDataGUID& guid) : SceneDataGDTFSpecObj(guid) +SceneDataListeningPlaneObj::SceneDataListeningPlaneObj(const SceneDataGUID& guid) : SceneDataGroupObj(guid) { } @@ -3487,13 +3487,10 @@ SceneDataListeningPlaneObjPtr SceneDataExchange::CreateListeningPlane(const Scen SceneDataListeningPlaneObjPtr SceneDataExchange::ReadListeningPlane(const SceneDataGUID& guid,const IXMLFileNodePtr& node, SceneDataGroupObjPtr addToContainer) { if ( CheckAbort() ) return nullptr; - //---------------------------------------------------------------------------- - // Create new Object + SceneDataListeningPlaneObjPtr newListeningPlaneObj = new SceneDataListeningPlaneObj(guid); addToContainer->AddObject(newListeningPlaneObj); - //---------------------------------------------------------------------------- - // Read newListeningPlaneObj->ReadFromNode(node, this); return newListeningPlaneObj; @@ -4122,14 +4119,15 @@ void SceneDataExchange::ReadChildObjs(const IXMLFileNodePtr& node, SceneDataGrou { SceneDataObjWithMatrixPtr obj = nullptr; - if ( nodeName == XML_Val_FixtureNodeName) { obj = ReadFixture( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_SceneObjectNodeName) { obj = ReadSceneryObject( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_FocusPointObjectNodeName) { obj = ReadFocusPoint( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_TrussObjectNodeName) { obj = ReadTruss( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_VideoScreenObjectNodeName) { obj = ReadVideoScreen( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_SupportObjectNodeName) { obj = ReadSupport( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_ProjectorObjectNodeName) { obj = ReadProjector( SceneDataGUID(groupUuid),objNode, addToContainer); } - else if ( nodeName == XML_Val_GroupNodeName) { obj = ProcessGroup(objNode, addToContainer); } + if ( nodeName == XML_Val_FixtureNodeName) { obj = ReadFixture( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_SceneObjectNodeName) { obj = ReadSceneryObject( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_FocusPointObjectNodeName) { obj = ReadFocusPoint( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_TrussObjectNodeName) { obj = ReadTruss( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_VideoScreenObjectNodeName) { obj = ReadVideoScreen( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_SupportObjectNodeName) { obj = ReadSupport( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_ProjectorObjectNodeName) { obj = ReadProjector( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_ListeningPlaneObjectNodeName ) { obj = ReadListeningPlane( SceneDataGUID(groupUuid), objNode, addToContainer); } + else if ( nodeName == XML_Val_GroupNodeName) { obj = ProcessGroup(objNode, addToContainer); } auto grp = dynamic_cast(obj); if (grp) diff --git a/src/SceneDataExchange.h b/src/SceneDataExchange.h index b4815fdf..29728ddb 100644 --- a/src/SceneDataExchange.h +++ b/src/SceneDataExchange.h @@ -940,16 +940,17 @@ namespace SceneData // ---------------------------------------------------------------------------------------------------------------------------------- // SceneDataListeningPlaneObj - class SceneDataListeningPlaneObj : public SceneDataGDTFSpecObj + class SceneDataListeningPlaneObj : public SceneDataGroupObj { public: - SceneDataListeningPlaneObj(const SceneDataGUID& guid); + SceneDataListeningPlaneObj(const SceneDataGUID& guid); virtual ~SceneDataListeningPlaneObj(); private: virtual TXString GetNodeName(); virtual ESceneDataObjectType GetObjectType(); + virtual void OnPrintToFile(IXMLFileNodePtr pNode, SceneDataExchange* exchange); virtual void OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDataExchange* exchange); From 948cde8c76d5ef94182268639b1feff785132d10 Mon Sep 17 00:00:00 2001 From: Alesandro Dragnev Date: Fri, 15 May 2026 13:56:00 +0300 Subject: [PATCH 4/4] Adding heat map data property --- src/Implementation/CSceneObjImpl.cpp | 40 ++++++++++++++++++++ src/Implementation/CSceneObjImpl.h | 2 + src/Include/IMediaRessourceVectorInterface.h | 4 ++ src/SceneDataExchange.cpp | 14 +++++++ src/SceneDataExchange.h | 5 +++ 5 files changed, 65 insertions(+) diff --git a/src/Implementation/CSceneObjImpl.cpp b/src/Implementation/CSceneObjImpl.cpp index 91668cff..cabbab34 100644 --- a/src/Implementation/CSceneObjImpl.cpp +++ b/src/Implementation/CSceneObjImpl.cpp @@ -1984,6 +1984,46 @@ VectorworksMVR::VCOMError VectorworksMVR::CSceneObjImpl::GetVideoScreenSource(IS return kVCOMError_NoError; } +// ------------------------------------------------------------------------------------------------------------------------------------------ +// Listening Plane +VectorworksMVR::VCOMError VectorworksMVR::CSceneObjImpl::SetAudioDescriptionFile(MvrString fileName) +{ + // Check if this is initialized + ASSERTN(kEveryone,fPtr); + if( ! fPtr) return kVCOMError_NotInitialized; + + // Check the type is right + ASSERTN(kEveryone,fType == ESceneObjType::ListeningPlane); + if( fType != ESceneObjType::ListeningPlane) return kVCOMError_Failed; + + // Try to cast + SceneData::SceneDataListeningPlaneObjPtr listeningPlane = static_cast(fPtr); + if( ! listeningPlane) return kVCOMError_Failed; + + listeningPlane->SetAudioDescriptionFile(fileName); + + return kVCOMError_NoError; +} + +VectorworksMVR::VCOMError VectorworksMVR::CSceneObjImpl::GetAudioDescriptionFile( MvrString& outFileName ) +{ + // Check if this is initialized + ASSERTN( kEveryone, fPtr ); + if ( !fPtr ) return kVCOMError_NotInitialized; + + // Check the type is right + ASSERTN( kEveryone, fType == ESceneObjType::ListeningPlane ); + if ( fType != ESceneObjType::ListeningPlane ) return kVCOMError_Failed; + + // Try to cast + SceneData::SceneDataListeningPlaneObjPtr listeningPlane = static_cast( fPtr ); + if ( !listeningPlane ) return kVCOMError_Failed; + + outFileName = listeningPlane->GetAudioDescriptionFile(); + + return kVCOMError_NoError; +} + //------------------------------------------------------------------------------------------------------------------------------------------ // Projector VectorworksMVR::VCOMError VectorworksMVR::CSceneObjImpl::SetProjectorSource(MvrString value, MvrString linkedGeometry, GdtfDefines::ESourceType type) diff --git a/src/Implementation/CSceneObjImpl.h b/src/Implementation/CSceneObjImpl.h index 40aceba1..d1484183 100644 --- a/src/Implementation/CSceneObjImpl.h +++ b/src/Implementation/CSceneObjImpl.h @@ -112,6 +112,8 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE GetConnectionAt(size_t at, IConnection** outConnection); virtual VCOMError VCOM_CALLTYPE CreateConnection(MvrString own, MvrString other, MvrUUID ToObject, IConnection** addedObj); + virtual VCOMError VCOM_CALLTYPE SetAudioDescriptionFile( MvrString fileName ); + virtual VCOMError VCOM_CALLTYPE GetAudioDescriptionFile( MvrString& outFileName ); // Implementation public: diff --git a/src/Include/IMediaRessourceVectorInterface.h b/src/Include/IMediaRessourceVectorInterface.h index c3360717..406a2c83 100644 --- a/src/Include/IMediaRessourceVectorInterface.h +++ b/src/Include/IMediaRessourceVectorInterface.h @@ -405,6 +405,10 @@ namespace VectorworksMVR virtual VCOMError VCOM_CALLTYPE SetVideoScreenSource(MvrString value, MvrString linkedGeometry, GdtfDefines::ESourceType) = 0; virtual VCOMError VCOM_CALLTYPE GetVideoScreenSource(ISource** outSource) = 0; + // Listening Plane + virtual VCOMError VCOM_CALLTYPE SetAudioDescriptionFile(MvrString value) = 0; + virtual VCOMError VCOM_CALLTYPE GetAudioDescriptionFile(MvrString& outValue) = 0; + // Projector virtual VCOMError VCOM_CALLTYPE SetProjectorSource(MvrString value, MvrString linkedGeometry, GdtfDefines::ESourceType) = 0; virtual VCOMError VCOM_CALLTYPE GetProjectorSource(ISource** outSource) = 0; diff --git a/src/SceneDataExchange.cpp b/src/SceneDataExchange.cpp index 54209f72..03468f2e 100644 --- a/src/SceneDataExchange.cpp +++ b/src/SceneDataExchange.cpp @@ -2806,6 +2806,16 @@ SceneDataListeningPlaneObj::~SceneDataListeningPlaneObj() { } +const TXString& SceneDataListeningPlaneObj::GetAudioDescriptionFile() const +{ + return fAudioDescriptionFile; +} + +void SceneDataListeningPlaneObj::SetAudioDescriptionFile( const TXString& value ) +{ + fAudioDescriptionFile = value; +} + TXString SceneDataListeningPlaneObj::GetNodeName() { return TXString(XML_Val_ListeningPlaneObjectNodeName); @@ -2819,11 +2829,15 @@ ESceneDataObjectType SceneDataListeningPlaneObj::GetObjectType() void SceneDataListeningPlaneObj::OnPrintToFile(IXMLFileNodePtr pNode, SceneDataExchange* exchange) { SceneDataObjWithMatrix::OnPrintToFile( pNode, exchange ); + + pNode->SetNodeAttributeValue("AudioDescriptionFile", fAudioDescriptionFile); } void SceneDataListeningPlaneObj::OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDataExchange* exchange) { SceneDataObjWithMatrix::OnReadFromNode( pNode, exchange ); + + pNode->GetNodeAttributeValue("AudioDescriptionFile", fAudioDescriptionFile); } // ---------------------------------------------------------------------------------------------------------------------------------- diff --git a/src/SceneDataExchange.h b/src/SceneDataExchange.h index 29728ddb..4993215e 100644 --- a/src/SceneDataExchange.h +++ b/src/SceneDataExchange.h @@ -947,7 +947,12 @@ namespace SceneData SceneDataListeningPlaneObj(const SceneDataGUID& guid); virtual ~SceneDataListeningPlaneObj(); + virtual const TXString& GetAudioDescriptionFile() const; + virtual void SetAudioDescriptionFile(const TXString& value); + private: + TXString fAudioDescriptionFile; + virtual TXString GetNodeName(); virtual ESceneDataObjectType GetObjectType();