Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 68 additions & 77 deletions src/Implementation/CMediaRessourceVectorImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1080,9 +1080,12 @@ VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetDataProv
VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetPositionObjectCount(size_t& outCount)
{
outCount = 0;
for (SceneData::SceneDataAuxObjPtr auxObj : fExchangeObj.GetAuxDataObjects())
for ( SceneData::SceneDataAuxObjPtr auxObj : fExchangeObj.GetAuxDataObjects() )
{
if (auxObj->GetObjectType() == SceneData::ESceneDataObjectType::ePosition) { outCount++; }
if ( auxObj->GetObjectType() == SceneData::ESceneDataObjectType::ePosition )
{
outCount++;
}
}

return kVCOMError_NoError;
Expand All @@ -1092,32 +1095,35 @@ VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetPosition
{
// Prepare a var for local counting
size_t positionCount = 0;

// Now cycle thru aux data
for (SceneData::SceneDataAuxObjPtr auxObj : fExchangeObj.GetAuxDataObjects())
for ( SceneData::SceneDataAuxObjPtr auxObj : fExchangeObj.GetAuxDataObjects() )
{
if (auxObj->GetObjectType() == SceneData::ESceneDataObjectType::ePosition)
if ( auxObj->GetObjectType() == SceneData::ESceneDataObjectType::ePosition )
{
if (at == positionCount)
if ( at == positionCount )
{
// Do the cast
SceneData::SceneDataPositionObjPtr scPosition = static_cast<SceneData::SceneDataPositionObjPtr>(auxObj);
ASSERTN(kEveryone, scPosition != nullptr);
if (!scPosition) { return kVCOMError_Failed; }


SceneData::SceneDataPositionObjPtr scPosition = static_cast<SceneData::SceneDataPositionObjPtr>( auxObj );
ASSERTN( kEveryone, scPosition != nullptr );
if ( !scPosition )
{
return kVCOMError_Failed;
}


//---------------------------------------------------------------------------
// Initialize Object
CPositionImpl* pPosition = nullptr;

// Query Interface
if (VCOM_SUCCEEDED(VWQueryInterface(IID_PositionObj, (IVWUnknown**) & pPosition)))
if ( VCOM_SUCCEEDED( VWQueryInterface( IID_PositionObj, (IVWUnknown**) &pPosition ) ) )
{
// Check Casting
CPositionImpl* pResultInterface = static_cast<CPositionImpl* >(pPosition);
if (pResultInterface)
CPositionImpl* pResultInterface = static_cast<CPositionImpl*>( pPosition );
if ( pResultInterface )
{
pResultInterface->SetPointer(scPosition);
pResultInterface->SetPointer( scPosition );
}
else
{
Expand All @@ -1126,23 +1132,20 @@ VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetPosition
return kVCOMError_NoInterface;
}
}

//---------------------------------------------------------------------------
// Check Incomming Object
if (*outPosition)
if ( *outPosition )
{
(*outPosition)->Release();
( *outPosition )->Release();
*outPosition = NULL;
}

//---------------------------------------------------------------------------
// Set Out Value
*outPosition = pPosition;
return kVCOMError_NoError;
}

// Increase position count
positionCount++;
}
}

Expand All @@ -1152,71 +1155,59 @@ VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetPosition

VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetSymDefCount(size_t& outCount)
{
outCount = 0;
for (SceneData::SceneDataAuxObjPtr auxObj : fExchangeObj.GetAuxDataObjects())
{
if (auxObj->GetObjectType() == SceneData::ESceneDataObjectType::eSymDef) { outCount++; }
}
outCount = fExchangeObj.GetSymDefObjects().size();

return kVCOMError_NoError;
}

VectorworksMVR::VCOMError VectorworksMVR::CMediaRessourceVectorImpl::GetSymDefAt(size_t at, ISymDef** outSymDef)
{
// Prepare a var for local counting
size_t symDefCount = 0;

// Now cycle thru aux data
for (SceneData::SceneDataAuxObjPtr auxObj : fExchangeObj.GetAuxDataObjects())
const auto auxObj = fExchangeObj.GetSymDefObjects().at(at);

if ( auxObj->GetObjectType() == SceneData::ESceneDataObjectType::eSymDef )
{
if (auxObj->GetObjectType() == SceneData::ESceneDataObjectType::eSymDef)
// Do the cast
SceneData::SceneDataSymDefObjPtr scSymDef = static_cast<SceneData::SceneDataSymDefObjPtr>( auxObj );
ASSERTN( kEveryone, scSymDef != nullptr );
if ( !scSymDef )
{
if (at == symDefCount)
return kVCOMError_Failed;
}


//---------------------------------------------------------------------------
// Initialize Object
CSymDefImpl* pSymDef = nullptr;

// Query Interface
if ( VCOM_SUCCEEDED( VWQueryInterface( IID_ISymDef, (IVWUnknown**) &pSymDef ) ) )
{
// Check Casting
CSymDefImpl* pResultInterface = static_cast<CSymDefImpl*>( pSymDef );
if ( pResultInterface )
{
// Do the cast
SceneData::SceneDataSymDefObjPtr scSymDef = static_cast<SceneData::SceneDataSymDefObjPtr>(auxObj);
ASSERTN(kEveryone, scSymDef != nullptr);
if (!scSymDef) { return kVCOMError_Failed; }


//---------------------------------------------------------------------------
// Initialize Object
CSymDefImpl* pSymDef = nullptr;

// Query Interface
if (VCOM_SUCCEEDED(VWQueryInterface(IID_ISymDef, (IVWUnknown**) & pSymDef)))
{
// Check Casting
CSymDefImpl* pResultInterface = static_cast<CSymDefImpl* >(pSymDef);
if (pResultInterface)
{
pResultInterface->SetPointer(scSymDef, GetExchangeObj());
}
else
{
pResultInterface->Release();
pResultInterface = nullptr;
return kVCOMError_NoInterface;
}
}

//---------------------------------------------------------------------------
// Check Incomming Object
if (*outSymDef)
{
(*outSymDef)->Release();
*outSymDef = NULL;
}

//---------------------------------------------------------------------------
// Set Out Value
*outSymDef = pSymDef;
return kVCOMError_NoError;
pResultInterface->SetPointer( scSymDef, GetExchangeObj() );
}
else
{
pResultInterface->Release();
pResultInterface = nullptr;
return kVCOMError_NoInterface;
}

// Increase position count
symDefCount++;
}

//---------------------------------------------------------------------------
// Check Incomming Object
if ( *outSymDef )
{
( *outSymDef )->Release();
*outSymDef = NULL;
}

//---------------------------------------------------------------------------
// Set Out Value
*outSymDef = pSymDef;
return kVCOMError_NoError;
}

DSTOP((kEveryone,"Get Position is out of bounds!"));
Expand Down
17 changes: 17 additions & 0 deletions src/Implementation/CSymDefImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,23 @@ VectorworksMVR::VCOMError VectorworksMVR::CSymDefImpl::GetGeometryAt(size_t at,
return kVCOMError_NoError;
}


VectorworksMVR::VCOMError VectorworksMVR::CSymDefImpl::GetIsContaingSymbolGeomtery( bool& isContaining )
{
//------------------------------------------------------------------------------------------
// Check if this is initialized
ASSERTN(kEveryone,fPtr);
if( ! fPtr) return kVCOMError_NotInitialized;

ASSERTN(kEveryone,fContext);
if( ! fContext) return kVCOMError_NotInitialized;


isContaining = fPtr->IsContaingSymbolGeometry();

return kVCOMError_NoError;
}

VectorworksMVR::VCOMError VectorworksMVR::CSymDefImpl::AddGeometry(const STransformMatrix& scMatrix, MvrString fileName)
{
//---------------------------------------------------------------------------
Expand Down
1 change: 1 addition & 0 deletions src/Implementation/CSymDefImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ namespace VectorworksMVR
virtual MvrString VCOM_CALLTYPE GetName();
virtual VCOMError VCOM_CALLTYPE GetGeometryCount(size_t& outCount) ;
virtual VCOMError VCOM_CALLTYPE GetGeometryAt(size_t at, IGeometryReference** outGeometryRef) ;
virtual VCOMError VCOM_CALLTYPE GetIsContaingSymbolGeomtery( bool& isContaining );

virtual VCOMError VCOM_CALLTYPE AddGeometry(const STransformMatrix& geometry, MvrString fileName);
virtual VCOMError VCOM_CALLTYPE AddSymbol(const MvrUUID& guid, const STransformMatrix& geometry, ISymDef* symDef);
Expand Down
1 change: 1 addition & 0 deletions src/Include/IMediaRessourceVectorInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@ namespace VectorworksMVR
virtual MvrString VCOM_CALLTYPE GetName() = 0;
virtual VCOMError VCOM_CALLTYPE GetGeometryCount(size_t& outCount) = 0;
virtual VCOMError VCOM_CALLTYPE GetGeometryAt(size_t at, IGeometryReference** outGeometryRef) = 0;
virtual VCOMError VCOM_CALLTYPE GetIsContaingSymbolGeomtery( bool& isContaining ) = 0;

virtual VCOMError VCOM_CALLTYPE AddGeometry(const STransformMatrix& geometry, MvrString fileName) = 0;
virtual VCOMError VCOM_CALLTYPE AddSymbol(const MvrUUID& guid, const STransformMatrix& geometry, ISymDef* symDef) = 0;
Expand Down
15 changes: 14 additions & 1 deletion src/SceneDataExchange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -514,6 +514,7 @@ void SceneDataSymDefObj::OnReadFromNode(const IXMLFileNodePtr& pNode, SceneDataE
SceneDataSymbolObjPtr symbol = new SceneDataSymbolObj(uuidSymbol);
symbol->ReadFromNode(objNode, exchange);
fGeometries.push_back(symbol);
fContainsSymbolGeometry = true;
}
else
{
Expand Down Expand Up @@ -552,6 +553,11 @@ void SceneDataSymDefObj::Add(SceneDataGeoInstanceObjPtr object)

}

bool SceneDataSymDefObj::IsContaingSymbolGeometry() const
{
return fContainsSymbolGeometry;
}

// ----------------------------------------------------------------------------------------------------------------------------------
// SceneDataSymDefObj
SceneDataPositionObj::SceneDataPositionObj(const SceneDataGUID& guid) : SceneDataAuxObj(guid)
Expand Down Expand Up @@ -2880,7 +2886,8 @@ SceneDataExchange::~SceneDataExchange()
{
fFilesInZip[i]->DeleteOnDisk();
}


fSymDefObjs.clear();
for (SceneDataObjWithMatrixPtr childObj : fChildObjs ) { delete childObj; }
for (SceneDataAuxObjPtr childAux : fAuxDataObjs ) { delete childAux; }
for (SceneDataProviderObjPtr childPro : fProviderObjs ) { delete childPro; }
Expand Down Expand Up @@ -2921,6 +2928,11 @@ SceneDataObjWithMatrixArray& SceneDataExchange::GetSceneDataObjects()
return fSceneObjects;
}

SceneDataAuxObjArray& SceneDataExchange::GetSymDefObjects()
{
return fSymDefObjs;
}

SceneDataSymDefObjPtr SceneDataExchange::GetSymDefByUUID(const SceneDataGUID& guid)
{
for (SceneDataAuxObjPtr auxObj: fAuxDataObjs)
Expand Down Expand Up @@ -2990,6 +3002,7 @@ SceneDataSymDefObjPtr SceneDataExchange::ReadSymDefObject(const IXMLFileNodePtr&
newSymDef->ReadFromNode(node, this);

fAuxDataObjs.push_back(newSymDef);
fSymDefObjs.push_back( newSymDef );
fSymDefMap[uuid] = newSymDef;

return newSymDef;
Expand Down
7 changes: 5 additions & 2 deletions src/SceneDataExchange.h
Original file line number Diff line number Diff line change
Expand Up @@ -205,10 +205,12 @@ namespace SceneData

private:
SceneDataGeometryObjArray fGeometries;
bool fContainsSymbolGeometry = false;

public:
const SceneDataGeometryObjArray& getGeometryArray() const;
void Add(SceneDataGeoInstanceObjPtr object);
bool IsContaingSymbolGeometry() const;

protected:
virtual TXString GetNodeName();
Expand Down Expand Up @@ -976,7 +978,7 @@ namespace SceneData
SceneDataProviderObjArray fProviderObjs;
SceneDataAuxObjArray fAuxDataObjs;
SceneDataObjWithMatrixArray fChildObjs;

SceneDataAuxObjArray fSymDefObjs;

// Arrays for eachobject typ e
SceneDataObjWithMatrixArray fSceneObjects;
Expand Down Expand Up @@ -1028,7 +1030,8 @@ namespace SceneData
SceneDataProviderObjArray& GetProviderObjects();
SceneDataAuxObjArray& GetAuxDataObjects();
SceneDataObjWithMatrixArray& GetChildObjects();

SceneDataAuxObjArray& GetSymDefObjects();

SceneDataObjWithMatrixArray& GetSceneDataObjects();

private:
Expand Down