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
This commit is contained in:
Ralf Habacker
2025-05-27 17:13:17 +02:00
committed by Yorik van Havre
parent 46b7c6c385
commit d63b837326

View File

@@ -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()