From d63b8373266a463523bbe31a0b87b499ae174cdb Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Tue, 27 May 2025 17:13:17 +0200 Subject: [PATCH] BIM: Add top level group when importing obj file into active document When importing an obj file into an existing document, the imported objects are now stored below a new group object in order to improve the structure and avoid flooding the top level with imported objects. Fixup for #21349 --- src/Mod/BIM/importers/importOBJ.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Mod/BIM/importers/importOBJ.py b/src/Mod/BIM/importers/importOBJ.py index e3629d048f..3cf9397046 100644 --- a/src/Mod/BIM/importers/importOBJ.py +++ b/src/Mod/BIM/importers/importOBJ.py @@ -308,9 +308,11 @@ def insert(filename,docname): if "." in i: i = i.split(".")[0] meshName = i + group = None "called when freecad wants to import a file" try: doc = FreeCAD.getDocument(docname) + group = doc.addObject("App::DocumentObjectGroup", meshName) except NameError: doc = FreeCAD.newDocument(docname) FreeCAD.ActiveDocument = doc @@ -360,7 +362,7 @@ def insert(filename,docname): colortable[mname] = [color,trans] elif line[:2] == "o ": if activeobject: - makeMesh(doc,activeobject,verts,medges,facets,material,colortable) + makeMesh(doc,group,activeobject,verts,medges,facets,material,colortable) material = None medges = [] facets = [] @@ -389,11 +391,11 @@ def insert(filename,docname): elif line[:7] == "usemtl ": material = line[7:] if activeobject: - makeMesh(doc,activeobject,verts,medges,facets,material,colortable) + makeMesh(doc,group,activeobject,verts,medges,facets,material,colortable) FreeCAD.Console.PrintMessage(translate("Arch","Successfully imported") + ' ' + filename + "\n") return doc -def makeMesh(doc,activeobject,verts,edges,facets,material,colortable): +def makeMesh(doc,group,activeobject,verts,edges,facets,material,colortable): mfacets = [] if facets: for facet in facets: @@ -419,6 +421,8 @@ def makeMesh(doc,activeobject,verts,edges,facets,material,colortable): mobj.ViewObject.ShapeColor = colortable[material][0] if colortable[material][1] is not None: mobj.ViewObject.Transparency = colortable[material][1] + if group: + group.addObjects([mobj]) # make polylines from edges medges = [] @@ -459,5 +463,7 @@ def makeMesh(doc,activeobject,verts,edges,facets,material,colortable): wire.ViewObject.Transparency = colortable[material][1] features.append(wire) part.addObjects(features) + if group: + group.addObjects([part]) doc.recompute()