From 321c5b692b754e50c954dc5d85dffd2a65940657 Mon Sep 17 00:00:00 2001 From: Furgo <148809153+furgo16@users.noreply.github.com> Date: Thu, 12 Jun 2025 09:09:59 +0200 Subject: [PATCH] Import: DXF importer, add Python bindings --- src/Mod/Import/App/AppImportPy.cpp | 1 + src/Mod/Import/App/dxf/ImpExpDxf.cpp | 24 ++++++++++++++++++++++++ src/Mod/Import/App/dxf/ImpExpDxf.h | 2 ++ src/Mod/Import/Gui/AppImportGuiPy.cpp | 2 +- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Mod/Import/App/AppImportPy.cpp b/src/Mod/Import/App/AppImportPy.cpp index b4349587ef..91512a4a2e 100644 --- a/src/Mod/Import/App/AppImportPy.cpp +++ b/src/Mod/Import/App/AppImportPy.cpp @@ -415,6 +415,7 @@ private: dxf_file.setOptions(); dxf_file.DoRead(IgnoreErrors); pcDoc->recompute(); + return dxf_file.getStatsAsPyObject(); } catch (const Standard_Failure& e) { throw Py::RuntimeError(e.GetMessageString()); diff --git a/src/Mod/Import/App/dxf/ImpExpDxf.cpp b/src/Mod/Import/App/dxf/ImpExpDxf.cpp index f05e6fed86..467543eb07 100644 --- a/src/Mod/Import/App/dxf/ImpExpDxf.cpp +++ b/src/Mod/Import/App/dxf/ImpExpDxf.cpp @@ -1372,3 +1372,27 @@ void ImpExpDxfWrite::exportDiametricDim(Base::Vector3d textLocn, arc2[2] = arcPoint2.z; writeDiametricDim(text, arc1, arc2, dimText); } + +Py::Object ImpExpDxfRead::getStatsAsPyObject() +{ + Py::Dict statsDict; + + statsDict.setItem("dxfVersion", Py::String(m_stats.dxfVersion)); + statsDict.setItem("dxfEncoding", Py::String(m_stats.dxfEncoding)); + statsDict.setItem("totalEntitiesCreated", Py::Long(m_stats.totalEntitiesCreated)); + statsDict.setItem("unsupportedFeaturesCount", Py::Long(m_stats.unsupportedFeaturesCount)); + + Py::Dict entityCountsDict; + for (const auto& pair : m_stats.entityCounts) { + entityCountsDict.setItem(pair.first.c_str(), Py::Long(pair.second)); + } + statsDict.setItem("entityCounts", entityCountsDict); + + Py::Dict importSettingsDict; + for (const auto& pair : m_stats.importSettings) { + importSettingsDict.setItem(pair.first.c_str(), Py::String(pair.second)); + } + statsDict.setItem("importSettings", importSettingsDict); + + return statsDict; +} diff --git a/src/Mod/Import/App/dxf/ImpExpDxf.h b/src/Mod/Import/App/dxf/ImpExpDxf.h index 989b62cf94..50b8afa558 100644 --- a/src/Mod/Import/App/dxf/ImpExpDxf.h +++ b/src/Mod/Import/App/dxf/ImpExpDxf.h @@ -50,6 +50,8 @@ public: Py_XDECREF(DraftModule); } + Py::Object getStatsAsPyObject(); + bool ReadEntitiesSection() override; // CDxfRead's virtual functions diff --git a/src/Mod/Import/Gui/AppImportGuiPy.cpp b/src/Mod/Import/Gui/AppImportGuiPy.cpp index 35319202c6..700f439736 100644 --- a/src/Mod/Import/Gui/AppImportGuiPy.cpp +++ b/src/Mod/Import/Gui/AppImportGuiPy.cpp @@ -403,6 +403,7 @@ private: dxf_file.setOptions(); dxf_file.DoRead(IgnoreErrors); pcDoc->recompute(); + return dxf_file.getStatsAsPyObject(); } catch (const Standard_Failure& e) { throw Py::RuntimeError(e.GetMessageString()); @@ -410,7 +411,6 @@ private: catch (const Base::Exception& e) { throw Py::RuntimeError(e.what()); } - return Py::None(); } Py::Object exportOptions(const Py::Tuple& args)