From 72ca1478e85b7a635abbd05b08933bc2fbd47607 Mon Sep 17 00:00:00 2001 From: Furgo <148809153+furgo16@users.noreply.github.com> Date: Thu, 12 Jun 2025 07:35:50 +0200 Subject: [PATCH] Import: DXF importer, populate stats reporting structure --- src/Mod/Import/App/dxf/ImpExpDxf.cpp | 27 ++++++++++++++++++++++++++- src/Mod/Import/App/dxf/ImpExpDxf.h | 5 +++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Mod/Import/App/dxf/ImpExpDxf.cpp b/src/Mod/Import/App/dxf/ImpExpDxf.cpp index 6b9279deaf..f05e6fed86 100644 --- a/src/Mod/Import/App/dxf/ImpExpDxf.cpp +++ b/src/Mod/Import/App/dxf/ImpExpDxf.cpp @@ -141,22 +141,32 @@ void ImpExpDxfRead::setOptions() { ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath(getOptionSource().c_str()); + m_stats.importSettings.clear(); + m_preserveLayers = hGrp->GetBool("dxfUseDraftVisGroups", true); + m_stats.importSettings["Use layers"] = m_preserveLayers ? "Yes" : "No"; + m_preserveColors = hGrp->GetBool("dxfGetOriginalColors", true); + m_stats.importSettings["Use colors from the DXF file"] = m_preserveColors ? "Yes" : "No"; + // Default for creation type is to create draft objects. // The radio-button structure of the options dialog should generally prevent this condition. m_mergeOption = DraftObjects; + m_stats.importSettings["Merge option"] = "Create Draft objects"; // Default if (hGrp->GetBool("groupLayers", true)) { // Group all compatible objects together m_mergeOption = MergeShapes; + m_stats.importSettings["Merge option"] = "Group layers into blocks"; } else if (hGrp->GetBool("dxfCreatePart", true)) { // Create (non-draft) Shape objects when possible m_mergeOption = SingleShapes; + m_stats.importSettings["Merge option"] = "Create Part shapes"; } else if (hGrp->GetBool("dxfCreateDraft", true)) { // Create only Draft objects, making the result closest to drawn-from-scratch m_mergeOption = DraftObjects; + m_stats.importSettings["Merge option"] = "Create Draft objects"; } // TODO: joingeometry should give an intermediate between MergeShapes and SingleShapes which // will merge shapes that happen to join end-to-end. As such it should be in the radio button @@ -164,12 +174,25 @@ void ImpExpDxfRead::setOptions() // this really means is there should be an "Import as sketch" checkbox, and only the // MergeShapes, JoinShapes, and SingleShapes radio buttons should be allowed, i.e. Draft Objects // would be ignored. - SetAdditionalScaling(hGrp->GetFloat("dxfScaling", 1.0)); + bool joinGeometry = hGrp->GetBool("joingeometry", false); + m_stats.importSettings["Join geometry"] = joinGeometry ? "Yes" : "No"; + + double scaling = hGrp->GetFloat("dxfScaling", 1.0); + SetAdditionalScaling(scaling); + m_stats.importSettings["Manual scaling factor"] = std::to_string(scaling); m_importAnnotations = hGrp->GetBool("dxftext", false); + m_stats.importSettings["Import texts and dimensions"] = m_importAnnotations ? "Yes" : "No"; + m_importPoints = hGrp->GetBool("dxfImportPoints", true); + m_stats.importSettings["Import points"] = m_importPoints ? "Yes" : "No"; + m_importPaperSpaceEntities = hGrp->GetBool("dxflayout", false); + m_stats.importSettings["Import layout objects"] = m_importPaperSpaceEntities ? "Yes" : "No"; + m_importHiddenBlocks = hGrp->GetBool("dxfstarblocks", false); + m_stats.importSettings["Import hidden blocks"] = m_importHiddenBlocks ? "Yes" : "No"; + // TODO: There is currently no option for this: m_importFrozenLayers = // hGrp->GetBool("dxffrozenLayers", false); // TODO: There is currently no option for this: m_importHiddenLayers = @@ -771,6 +794,7 @@ std::string ImpExpDxfRead::Deformat(const char* text) void ImpExpDxfRead::DrawingEntityCollector::AddObject(const TopoDS_Shape& shape, const char* nameBase) { + Reader.IncrementCreatedObjectCount(); auto pcFeature = Reader.document->addObject(nameBase); pcFeature->Shape.setValue(shape); Reader.MoveToLayer(pcFeature); @@ -778,6 +802,7 @@ void ImpExpDxfRead::DrawingEntityCollector::AddObject(const TopoDS_Shape& shape, } void ImpExpDxfRead::DrawingEntityCollector::AddObject(FeaturePythonBuilder shapeBuilder) { + Reader.IncrementCreatedObjectCount(); App::FeaturePython* shape = shapeBuilder(Reader.OCSOrientationTransform); if (shape != nullptr) { Reader.MoveToLayer(shape); diff --git a/src/Mod/Import/App/dxf/ImpExpDxf.h b/src/Mod/Import/App/dxf/ImpExpDxf.h index c486e6eb7d..989b62cf94 100644 --- a/src/Mod/Import/App/dxf/ImpExpDxf.h +++ b/src/Mod/Import/App/dxf/ImpExpDxf.h @@ -204,6 +204,11 @@ private: std::string m_optionSource; protected: + friend class DrawingEntityCollector; + void IncrementCreatedObjectCount() + { + m_stats.totalEntitiesCreated++; + } virtual void ApplyGuiStyles(Part::Feature* /*object*/) const {} virtual void ApplyGuiStyles(App::FeaturePython* /*object*/) const