Import: move glTF writer to its own source files

This commit is contained in:
wmayer
2023-09-24 18:22:25 +02:00
committed by wwmayer
parent 9260cd9502
commit 0aa9ea99b4
7 changed files with 188 additions and 41 deletions

View File

@@ -51,7 +51,6 @@
#include <XSControl_WorkSession.hxx>
#if OCC_VERSION_HEX >= 0x070500
#include <Message_ProgressRange.hxx>
#include <RWGltf_CafWriter.hxx>
#endif
#if defined(__clang__)
#pragma clang diagnostic pop
@@ -74,7 +73,7 @@
#include <Mod/Part/App/encodeFilename.h>
#include "ImportOCAF2.h"
#include "WriterGltf.h"
namespace Import
{
@@ -434,25 +433,8 @@ private:
}
}
else if (file.hasExtension({"glb", "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);
#if OCC_VERSION_HEX >= 0x070700
aWriter.SetParallel(true);
#endif
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
Import::WriterGltf writer(name8bit, file);
writer.write(hDoc);
}
hApp->Close(hDoc);

View File

@@ -35,12 +35,16 @@ SET(Import_SRCS
ImportOCAF2.h
#ImportOCAFAssembly.cpp
#ImportOCAFAssembly.h
ReaderGltf.cpp
ReaderGltf.h
StepShapePy.xml
StepShape.h
StepShape.cpp
StepShapePyImp.cpp
PreCompiled.cpp
PreCompiled.h
WriterGltf.cpp
WriterGltf.h
dxf/ImpExpDxf.cpp
dxf/ImpExpDxf.h
dxf/dxf.cpp

View File

@@ -0,0 +1,32 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2023 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
#include <Standard_Version.hxx>
#endif
#include "ReaderGltf.h"
using namespace Import;

View File

@@ -0,0 +1,32 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2023 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#ifndef IMPORT_READER_GLTF_H
#define IMPORT_READER_GLTF_H
namespace Import
{
}
#endif // IMPORT_READER_GLTF_H

View File

@@ -0,0 +1,67 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2023 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#include "PreCompiled.h"
#ifndef _PreComp_
#include <sstream>
#include <Standard_Version.hxx>
#include <TColStd_IndexedDataMapOfStringString.hxx>
#if OCC_VERSION_HEX >= 0x070500
#include <Message_ProgressRange.hxx>
#include <RWGltf_CafWriter.hxx>
#endif
#endif
#include "WriterGltf.h"
#include <Base/Exception.h>
using namespace Import;
WriterGltf::WriterGltf(std::string name8bit, const Base::FileInfo& file) // NOLINT
: name8bit {std::move(name8bit)}
, file {file}
{}
void WriterGltf::write(Handle(TDocStd_Document) hDoc) const // NOLINT
{
#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); // NOLINT
aWriter.ChangeCoordinateSystemConverter().SetInputCoordinateSystem(RWMesh_CoordinateSystem_Zup);
#if OCC_VERSION_HEX >= 0x070700
aWriter.SetParallel(true);
#endif
Standard_Boolean ret = aWriter.Perform(hDoc, aMetadata, Message_ProgressRange());
if (!ret) {
std::stringstream str;
str << "Cannot save to file '"
<< "" << file.filePath() << "'";
}
#else
throw Base::RuntimeError("gITF support requires OCCT 7.5.0 or later");
#endif
}

View File

@@ -0,0 +1,47 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/***************************************************************************
* Copyright (c) 2023 Werner Mayer <wmayer[at]users.sourceforge.net> *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
**************************************************************************/
#ifndef IMPORT_WRITER_GLTF_H
#define IMPORT_WRITER_GLTF_H
#include <Mod/Import/ImportGlobal.h>
#include <Base/FileInfo.h>
#include <TDocStd_Document.hxx>
namespace Import
{
class ImportExport WriterGltf
{
public:
WriterGltf(std::string name8bit, const Base::FileInfo& file);
void write(Handle(TDocStd_Document) hDoc) const;
private:
std::string name8bit;
Base::FileInfo file;
};
} // namespace Import
#endif // IMPORT_WRITER_GLTF_H

View File

@@ -88,7 +88,6 @@
#if OCC_VERSION_HEX >= 0x070500
#include <Message_ProgressRange.hxx>
#include <RWGltf_CafWriter.hxx>
#endif
#if defined(__clang__)
#pragma clang diagnostic pop
@@ -105,6 +104,7 @@
#include <Gui/MainWindow.h>
#include <Gui/ViewProviderLink.h>
#include <Mod/Import/App/ImportOCAF2.h>
#include <Mod/Import/App/WriterGltf.h>
#include <Mod/Part/App/ImportIges.h>
#include <Mod/Part/App/ImportStep.h>
#include <Mod/Part/App/Interface.h>
@@ -769,25 +769,8 @@ private:
}
}
else if (file.hasExtension({"glb", "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);
#if OCC_VERSION_HEX >= 0x070700
aWriter.SetParallel(true);
#endif
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
Import::WriterGltf writer(name8bit, file);
writer.write(hDoc);
}
hApp->Close(hDoc);