Skip to content

Commit

Permalink
Merge pull request #20 from DeerSoftDevelopment/master
Browse files Browse the repository at this point in the history
GLTF Support
  • Loading branch information
moritzstaffel authored Aug 16, 2021
2 parents d55de1d + f157032 commit fe51735
Show file tree
Hide file tree
Showing 16 changed files with 1,897 additions and 21 deletions.
62 changes: 53 additions & 9 deletions src/GDTFManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1341,11 +1341,11 @@ const TXString& GdtfModel::GetGeometryFile_3DS_FullPath()
IFolderIdentifierPtr folder (IID_FolderIdentifier);
fParentFixture->GetWorkingFolder(folder);

IFolderIdentifierPtr model3DsFolter (IID_FolderIdentifier);
model3DsFolter->Set(folder, "models3ds");
IFolderIdentifierPtr model3DsFolder (IID_FolderIdentifier);
model3DsFolder->Set(folder, "models3ds");

IFileIdentifierPtr file (IID_FileIdentifier);
file->Set(model3DsFolter, fGeometryFile + ".3ds");
file->Set(model3DsFolder, fGeometryFile + ".3ds");

bool fileExists = false;
if(VCOM_SUCCEEDED(file->ExistsOnDisk(fileExists)) && fileExists)
Expand All @@ -1364,11 +1364,11 @@ const TXString & SceneData::GdtfModel::GetGeometryFile_SVG_FullPath()
IFolderIdentifierPtr folder (IID_FolderIdentifier);
fParentFixture->GetWorkingFolder(folder);

IFolderIdentifierPtr modelsvgFolter (IID_FolderIdentifier);
modelsvgFolter->Set(folder, "modelssvg");
IFolderIdentifierPtr svgModelsFolder (IID_FolderIdentifier);
svgModelsFolder->Set(folder, "modelssvg");

IFileIdentifierPtr file (IID_FileIdentifier);
file->Set(modelsvgFolter, fGeometryFile + ".svg");
file->Set(svgModelsFolder, fGeometryFile + ".svg");


bool fileExists = false;
Expand All @@ -1380,6 +1380,40 @@ const TXString & SceneData::GdtfModel::GetGeometryFile_SVG_FullPath()
return fFullPathSVG;
}

const TXString & SceneData::GdtfModel::GetGeometryFile_GLTF_FullPath()
{
// Set to store
fFullPathGLTF = "";
// Set to store
IFolderIdentifierPtr folder (IID_FolderIdentifier);
fParentFixture->GetWorkingFolder(folder);

IFolderIdentifierPtr gltfModelsFolder (IID_FolderIdentifier);
gltfModelsFolder->Set(folder, "modelsgltf");

IFileIdentifierPtr file (IID_FileIdentifier);
file->Set(gltfModelsFolder, fGeometryFile + ".glb");

bool fileExists = false;
if(VCOM_SUCCEEDED(file->ExistsOnDisk(fileExists)) && fileExists)
{
file->GetFileFullPath(fFullPathGLTF);
}
else
{
//There are two glTF file format: binary (.glb) or JSON-like (.gltf)
//If we don't find a .glb file, we try with .gltf
file->Set(gltfModelsFolder, fGeometryFile + ".gltf");
if(VCOM_SUCCEEDED(file->ExistsOnDisk(fileExists)) && fileExists)
{
file->GetFileFullPath(fFullPathGLTF);
}
}


return fFullPathGLTF;
}

const TXString& GdtfModel::GetName() const
{
return fUniqueName;
Expand Down Expand Up @@ -2968,8 +3002,13 @@ TSint32Array GdtfDmxMode::GetBreakArray() const
// Prepare Arrays
TSint32Array breaks;
std::vector<GdtfGeometryReferencePtr> geometryRefs;
TGdtfGeometryArray geometrysToCheck = {fGeomRef};
TGdtfGeometryArray geometrysToCheck;

if(fGeomRef)
{
geometrysToCheck.push_back(fGeomRef);
}

//------------------------------------------------------------------------------------------------------------
// Get All Geometry References
while(geometrysToCheck.size() > 0)
Expand Down Expand Up @@ -3044,7 +3083,12 @@ size_t GdtfDmxMode::GetFootPrintForBreak(size_t breakId)
//------------------------------------------------------------------------------------------------------------
// Prepare arrays
TDMXAddressArray addresses;
TGdtfGeometryArray geometriesInGeoTree = {fGeomRef};
TGdtfGeometryArray geometriesInGeoTree;

if(fGeomRef)
{
geometriesInGeoTree.push_back(fGeomRef);
}

// iterate through every geometry in the geometry tree of the mode
while(geometriesInGeoTree.size() > 0)
Expand Down Expand Up @@ -9600,4 +9644,4 @@ double GdtfPowerConsumption::GetFrequencyLow()
double GdtfPowerConsumption::GetFrequencyHigh()
{
return fFrequencyHigh;
}
}
2 changes: 2 additions & 0 deletions src/GDTFManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -590,6 +590,7 @@ namespace SceneData
TXString fGeometryFile; // FileName without the extension.
TXString fFullPath3DS;
TXString fFullPathSVG;
TXString fFullPathGLTF;
//
GdtfFixture* fParentFixture;

Expand All @@ -604,6 +605,7 @@ namespace SceneData
const TXString& GetGeometryFileName() const;
const TXString& GetGeometryFile_3DS_FullPath();
const TXString& GetGeometryFile_SVG_FullPath();
const TXString& GetGeometryFile_GLTF_FullPath();
// Setter
void SetName(const TXString& name);
void SetLength(const double& length);
Expand Down
10 changes: 8 additions & 2 deletions src/Implementation/CGdtfDmxMode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -434,8 +434,14 @@ VectorworksMVR::VCOMError VCOM_CALLTYPE VectorworksMVR::CGdtfDmxModeImpl::Create

VectorworksMVR::VCOMError VectorworksMVR::CGdtfDmxModeImpl::GetBreakCount(size_t & count)
{
count = fDmxMode->GetBreakArray().size();
return kVCOMError_NoError;
if(fDmxMode)
{
count = fDmxMode->GetBreakArray().size();
return kVCOMError_NoError;
}

return kVCOMError_Failed;

}

VectorworksMVR::VCOMError VectorworksMVR::CGdtfDmxModeImpl::GetBreakAt(size_t at, size_t& breakId)
Expand Down
8 changes: 8 additions & 0 deletions src/Implementation/CGdtfModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,14 @@ MvrString VectorworksMVR::CGdtfModelImpl::GetGeometryFile_SVG_FullPath()
return fModel->GetGeometryFile_SVG_FullPath().GetCharPtr();
}

MvrString VectorworksMVR::CGdtfModelImpl::GetGeometryFile_GLTF_FullPath()
{
// Check Pointer
if ( ! fModel) return "";

return fModel->GetGeometryFile_GLTF_FullPath().GetCharPtr();
}

VectorworksMVR::VCOMError VectorworksMVR::CGdtfModelImpl::SetName(MvrString name)
{
if(!fModel) return kVCOMError_NotInitialized;
Expand Down
1 change: 1 addition & 0 deletions src/Implementation/CGdtfModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ namespace VectorworksMVR
virtual MvrString VCOM_CALLTYPE GetGeometryFileName();
virtual MvrString VCOM_CALLTYPE GetGeometryFile_3DS_FullPath();
virtual MvrString VCOM_CALLTYPE GetGeometryFile_SVG_FullPath();
virtual MvrString VCOM_CALLTYPE GetGeometryFile_GLTF_FullPath();

virtual VCOMError VCOM_CALLTYPE SetName(MvrString name);
virtual VCOMError VCOM_CALLTYPE SetLength(double length);
Expand Down
1 change: 1 addition & 0 deletions src/Include/GDTFPrefix.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ namespace VectorworksMVR
Model3DS,
ImageWheel,
RessoureFixture,
ModelGLTF,
};

enum EGdtfObjectType
Expand Down
1 change: 1 addition & 0 deletions src/Include/IMediaRessourceVectorInterface.h
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,7 @@ namespace VectorworksMVR
virtual MvrString VCOM_CALLTYPE GetGeometryFileName() = 0;
virtual MvrString VCOM_CALLTYPE GetGeometryFile_3DS_FullPath() = 0;
virtual MvrString VCOM_CALLTYPE GetGeometryFile_SVG_FullPath() = 0;
virtual MvrString VCOM_CALLTYPE GetGeometryFile_GLTF_FullPath() = 0;


virtual VCOMError VCOM_CALLTYPE SetName(MvrString name) = 0;
Expand Down
8 changes: 7 additions & 1 deletion src/SceneDataExchange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2699,6 +2699,11 @@ bool SceneDataExchange::WriteToFile(const IFileIdentifierPtr& file)
SceneDataZip::AddFileToZip(zipfile, fSVG_FilesToAdd.at(i), ERessourceType::ModelSVG, false/*Delete*/);
}

for (size_t i = 0; i < fGLTF_FilesToAdd.size(); i++)
{
SceneDataZip::AddFileToZip(zipfile, fGLTF_FilesToAdd.at(i), ERessourceType::ModelGLTF, false/*Delete*/);
}

for (size_t i = 0; i < fWheel_Image_FilesToAdd.size(); i++)
{
SceneDataZip::AddFileToZip(zipfile, fWheel_Image_FilesToAdd.at(i), ERessourceType::ImageWheel, false/*Delete*/);
Expand Down Expand Up @@ -3273,10 +3278,11 @@ void SceneDataExchange::AddFileToZip(const IFileIdentifierPtr& file, ERessourceT
case ERessourceType::ImageWheel: fWheel_Image_FilesToAdd.push_back(file); return;
case ERessourceType::Model3DS: f3DS_FilesToAdd.push_back(file); return;
case ERessourceType::ModelSVG: fSVG_FilesToAdd.push_back(file); return;
case ERessourceType::ModelGLTF: fGLTF_FilesToAdd.push_back(file); return;
case ERessourceType::RessoureFixture: fFixtureResources_FilesToAdd.push_back(file);return;
}

DSTOP((kEveryone, "Unaspected ERessourceType Enum for AddFileToZip"));
DSTOP((kEveryone, "Unexpected ERessourceType Enum for AddFileToZip"));
}

void SceneDataExchange::AddBufferToZip(const TXString& fileName, ISceneDataZipBuffer* buffer)
Expand Down
1 change: 1 addition & 0 deletions src/SceneDataExchange.h
Original file line number Diff line number Diff line change
Expand Up @@ -771,6 +771,7 @@ namespace SceneData
//
TFileIdentifierPtrArray f3DS_FilesToAdd;
TFileIdentifierPtrArray fSVG_FilesToAdd;
TFileIdentifierPtrArray fGLTF_FilesToAdd;
TFileIdentifierPtrArray fWheel_Image_FilesToAdd;
TFileIdentifierPtrArray fFixtureResources_FilesToAdd;

Expand Down
5 changes: 4 additions & 1 deletion src/XmlFileHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1713,12 +1713,15 @@ TXString SceneData::SceneDataZip::GetResourceSubFolder(ERessourceType resType)
case ERessourceType::ModelSVG:
return "models" + TXString(kSeperator) + "svg" + TXString(kSeperator);
break;
case ERessourceType::ModelGLTF:
return "models" + TXString(kSeperator) + "gltf" + TXString(kSeperator);
break;
case ERessourceType::RessoureFixture:
return "";
break;
}

DSTOP((kEveryone, "Unaspected Enum for GetResourceSubFolder(ERessourceType resType)"));
DSTOP((kEveryone, "Unexpected Enum for GetResourceSubFolder(ERessourceType resType)"));

return "";
}
Expand Down
40 changes: 32 additions & 8 deletions unittest/GdtfUnittest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,13 @@ void GdtfUnittest::WriteFile()

//------------------------------------------------------------------------------
// Add Test Resources
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestPNG_ThumbNail().c_str(), ERessourceType::RessoureFixture) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestSVG_ThumbNail().c_str(), ERessourceType::RessoureFixture) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestWheel_PNG().c_str(), ERessourceType::ImageWheel) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTest3DS_Model().c_str(), ERessourceType::Model3DS) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestSVG_Model().c_str(), ERessourceType::ModelSVG) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestPNG_ThumbNail().c_str(), ERessourceType::RessoureFixture) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestSVG_ThumbNail().c_str(), ERessourceType::RessoureFixture) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestWheel_PNG().c_str(), ERessourceType::ImageWheel) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTest3DS_Model().c_str(), ERessourceType::Model3DS) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestSVG_Model().c_str(), ERessourceType::ModelSVG) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestGLTF_Model_glb().c_str(), ERessourceType::ModelGLTF) );
__checkVCOM( gdtfWrite->AddFileToGdtfFile( GetTestGLTF_Model().c_str(), ERessourceType::ModelGLTF) );

//------------------------------------------------------------------------------
// Set Attributes
Expand Down Expand Up @@ -429,13 +431,15 @@ void GdtfUnittest::ReadFile()
// Check the file content
size_t ressourceFiles = 0;
__checkVCOM(gdtfRead->GetImageRessourcesCount(ressourceFiles));
this->checkifEqual("GetImageRessourcesCount", ressourceFiles, size_t(5));
this->checkifEqual("GetImageRessourcesCount", ressourceFiles, size_t(7));

CheckAttachedFiles(gdtfRead, 0, this->GetTestPNG_ThumbNail(true));
CheckAttachedFiles(gdtfRead, 1, this->GetTestSVG_ThumbNail(true));
CheckAttachedFiles(gdtfRead, 2, this->GetTestWheel_PNG(true));
CheckAttachedFiles(gdtfRead, 3, this->GetTest3DS_Model(true));
CheckAttachedFiles(gdtfRead, 4, this->GetTestSVG_Model(true));
CheckAttachedFiles(gdtfRead, 5, this->GetTestGLTF_Model_glb(true));
CheckAttachedFiles(gdtfRead, 6, this->GetTestGLTF_Model(true));



Expand Down Expand Up @@ -1438,7 +1442,7 @@ std::string GdtfUnittest::GetTestSVG_ThumbNail(bool readLocation)
std::string GdtfUnittest::GetTestSVG_Model(bool readLocation)
{
std::string path;
if(readLocation) { path = fAppDataFolder + kSeparator + "GdtfGroup" + kSeparator+ "modelssvg" + kSeparator;; }
if(readLocation) { path = fAppDataFolder + kSeparator + "GdtfGroup" + kSeparator+ "modelssvg" + kSeparator; }
else { path = fTestResourcesFolder + kSeparator; }
path += "MyModel.svg";
return path;
Expand All @@ -1447,13 +1451,33 @@ std::string GdtfUnittest::GetTestSVG_Model(bool readLocation)
std::string GdtfUnittest::GetTest3DS_Model(bool readLocation)
{
std::string path;
if(readLocation) { path = fAppDataFolder + kSeparator + "GdtfGroup" + kSeparator+ "models3ds" + kSeparator;; }
if(readLocation) { path = fAppDataFolder + kSeparator + "GdtfGroup" + kSeparator+ "models3ds" + kSeparator; }
else { path = fTestResourcesFolder + kSeparator; }

path += "MyModel.3ds";
return path;
}

std::string GdtfUnittest::GetTestGLTF_Model_glb(bool readLocation)
{
std::string path;
if(readLocation) { path = fAppDataFolder + kSeparator + "GdtfGroup" + kSeparator+ "modelsgltf" + kSeparator; }
else { path = fTestResourcesFolder + kSeparator; }

path += "MyModel.glb";
return path;
}

std::string GdtfUnittest::GetTestGLTF_Model(bool readLocation)
{
std::string path;
if(readLocation) { path = fAppDataFolder + kSeparator + "GdtfGroup" + kSeparator+ "modelsgltf" + kSeparator; }
else { path = fTestResourcesFolder + kSeparator; }

path += "Fox.gltf";
return path;
}

std::string GdtfUnittest::GetTestWheel_PNG(bool readLocation)
{
std::string path;
Expand Down
2 changes: 2 additions & 0 deletions unittest/GdtfUnittest.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ class GdtfUnittest : public Unittest
std::string GetTestSVG_ThumbNail(bool readLocation = false);
std::string GetTestSVG_Model(bool readLocation = false);
std::string GetTest3DS_Model(bool readLocation = false);
std::string GetTestGLTF_Model_glb(bool readLocation = false);
std::string GetTestGLTF_Model(bool readLocation = false);
std::string GetTestWheel_PNG(bool readLocation = false);

void CheckAttibute(VectorworksMVR::IGdtfAttributePtr attribute, bool hasColor);
Expand Down
Binary file added unittest/files/Fox.bin
Binary file not shown.
Loading

0 comments on commit fe51735

Please sign in to comment.