diff --git a/src/Mod/Import/App/AppImportPy.cpp b/src/Mod/Import/App/AppImportPy.cpp index 0c57e6f9a3..31b71a1bd5 100644 --- a/src/Mod/Import/App/AppImportPy.cpp +++ b/src/Mod/Import/App/AppImportPy.cpp @@ -42,12 +42,17 @@ # include # include # include +# include # include # include # include # include # include # include +# if OCC_VERSION_HEX >= 0x070500 +# include +# include +# endif # if defined(__clang__) # pragma clang diagnostic pop # endif @@ -380,6 +385,23 @@ private: throw Py::Exception(); } } + else if (file.hasExtension("glb") || file.hasExtension("gltf")) { +#if OCC_VERSION_HEX >= 0x070500 + TColStd_IndexedDataMapOfStringString aMetadata; + RWGltf_CafWriter aWriter (name8bit.c_str(), file.hasExtension("glb")); + aWriter.SetTransformationFormat (RWGltf_WriterTrsfFormat_Compact); + // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#coordinate-system-and-units + aWriter.ChangeCoordinateSystemConverter().SetInputLengthUnit (0.001); + aWriter.ChangeCoordinateSystemConverter().SetInputCoordinateSystem (RWMesh_CoordinateSystem_Zup); + Standard_Boolean ret = aWriter.Perform (hDoc, aMetadata, Message_ProgressRange()); + if (!ret) { + PyErr_Format(PyExc_IOError, "Cannot save to file '%s'", Utf8Name.c_str()); + throw Py::Exception(); + } +#else + throw Py::RuntimeError("gITF support requires OCCT 7.5.0 or later"); +#endif + } hApp->Close(hDoc); } diff --git a/src/Mod/Import/Init.py b/src/Mod/Import/Init.py index 48baecd847..fa1429fe9b 100644 --- a/src/Mod/Import/Init.py +++ b/src/Mod/Import/Init.py @@ -33,3 +33,4 @@ FreeCAD.addImportType("PLMXML files (*.plmxml)","PlmXmlParser") FreeCAD.addImportType("STEPZ Zip File Type (*.stpZ *.stpz)","stepZ") FreeCAD.addExportType("STEPZ zip File Type (*.stpZ *.stpz)","stepZ") +FreeCAD.addExportType("glTF (*.gltf *.glb)","ImportGui") diff --git a/src/Mod/Import/InitGui.py b/src/Mod/Import/InitGui.py index 1a69bca426..2cf11cfa0a 100644 --- a/src/Mod/Import/InitGui.py +++ b/src/Mod/Import/InitGui.py @@ -33,7 +33,7 @@ # Registered in Part's Init.py file FreeCAD.changeImportModule("STEP with colors (*.step *.stp)","Import","ImportGui") FreeCAD.changeExportModule("STEP with colors (*.step *.stp)","Import","ImportGui") -FreeCAD.addExportType("glTF (*.gltf *.glb)","ImportGui") +FreeCAD.changeExportModule("glTF (*.gltf *.glb)","Import","ImportGui") """ class ImportWorkbench ( Workbench ):