From 08ff1e5eebfb92e38faac02dc23c1961760bd678 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 27 Sep 2024 19:22:15 +0200 Subject: [PATCH] Core: Fix macro recording when using module_io --- src/Ext/freecad/module_io.py | 6 ++++-- src/Gui/Application.cpp | 40 ++++++++---------------------------- 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/src/Ext/freecad/module_io.py b/src/Ext/freecad/module_io.py index 80e7555a41..e56b707fa1 100644 --- a/src/Ext/freecad/module_io.py +++ b/src/Ext/freecad/module_io.py @@ -1,11 +1,13 @@ from FreeCAD import Base +import importlib - -def OpenInsertObject(importerModule, objectPath, importMethod, docName = ""): +def OpenInsertObject(importerName, objectPath, importMethod, docName = ""): try: importArgs = [] importKwargs = {} + importerModule = importlib.import_module(importerName) + if docName: importArgs.append(docName) if hasattr(importerModule, "importOptions"): diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 9690f9a919..696758fbdd 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -42,6 +42,7 @@ #endif #include +#include #include #include @@ -637,21 +638,10 @@ void Application::open(const char* FileName, const char* Module) } } else { - // Load using provided python module - { - Base::PyGILStateLocker locker; - Py::Module moduleIo(PyImport_ImportModule("freecad.module_io")); - const auto dictS = moduleIo.getDict().keys().as_string(); - if (!moduleIo.isNull() && moduleIo.hasAttr("OpenInsertObject")) - { - const Py::TupleN args( - Py::Module(PyImport_ImportModule(Module)), - Py::String(unicodepath), - Py::String("open") - ); - moduleIo.callMemberFunction("OpenInsertObject", args); - } - } + std::string code = fmt::format("from freecad import module_io\n" + "module_io.OpenInsertObject(\"{}\", \"{}\", \"{}\")\n", + Module, unicodepath, "open"); + Gui::Command::runCommand(Gui::Command::App, code.c_str()); // ViewFit if (sendHasMsgToActiveView("ViewFit")) { @@ -716,22 +706,10 @@ void Application::importFrom(const char* FileName, const char* DocName, const ch } } - // Load using provided python module - { - Base::PyGILStateLocker locker; - Py::Module moduleIo(PyImport_ImportModule("freecad.module_io")); - const auto dictS = moduleIo.getDict().keys().as_string(); - if (!moduleIo.isNull() && moduleIo.hasAttr("OpenInsertObject")) - { - const Py::TupleN args( - Py::Module(PyImport_ImportModule(Module)), - Py::String(unicodepath), - Py::String("insert"), - Py::String(DocName) - ); - moduleIo.callMemberFunction("OpenInsertObject", args); - } - } + std::string code = fmt::format("from freecad import module_io\n" + "module_io.OpenInsertObject(\"{}\", \"{}\", \"{}\", \"{}\")\n", + Module, unicodepath, "insert", DocName); + Gui::Command::runCommand(Gui::Command::App, code.c_str()); // Commit the transaction if (doc && !pendingCommand) {