Skip to content

Commit

Permalink
Arch: process openings in IFC multicore importer
Browse files Browse the repository at this point in the history
  • Loading branch information
yorikvanhavre committed Jul 13, 2020
1 parent 8d8a8dd commit 451459c
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/Mod/Arch/importIFCmulticore.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,13 @@
from FreeCAD import Base
import ArchIFC

# global dicts to store ifc object/freecad object relationships

layers = {} # ifcid : Draft_Layer
materials = {} #ifcid : Arch_Material
objects = {} #ifcid : Arch_Component
subs = {} #host_ifcid: [child_ifcid,...]
adds = {} #host_ifcid: [child_ifcid,...]


def open(filename):
Expand All @@ -57,9 +61,13 @@ def insert(filename,docname=None,preferences=None):
global layers
global materials
global objects
global adds
global subs
layers = {}
materials = {}
objects = {}
adds = {}
subs = {}

# statistics
starttime = time.time() # in seconds
Expand Down Expand Up @@ -110,6 +118,7 @@ def insert(filename,docname=None,preferences=None):
break

# finished
processRelationships()
progressbar.stop()
FreeCAD.ActiveDocument.recompute()
endtime = round(time.time()-starttime,1)
Expand Down Expand Up @@ -161,6 +170,7 @@ def createProduct(ifcproduct,brep):
createLayer(obj,ifcproduct)
createMaterial(obj,ifcproduct)
createModelStructure(obj,ifcproduct)
setRelationships(obj,ifcproduct)
return obj


Expand Down Expand Up @@ -252,3 +262,32 @@ def createModelStructure(obj,ifcobj):
if hasattr(objects[parent.id()].Proxy,"addObject"):
objects[parent.id()].Proxy.addObject(objects[parent.id()],obj)


def setRelationships(obj,ifcobj):

"""sets additions/subtractions"""

global adds
global subs

if hasattr(ifcobj,"HasOpenings") and ifcobj.HasOpenings:
for rel in ifcobj.HasOpenings:
subs.setdefault(ifcobj.id(),[]).append(rel.RelatedOpeningElement)

# TODO: assemblies & booleans


def processRelationships():

"""process all stored relationships"""

for dom in ((subs,"Subtractions"),(adds,"Additions")):
for key,vals in dom[0]:
if key in objects:
for val in vals:
if val in objects:
if hasattr(objects[key],dom[1]):
g = getattr(objects[key],dom[1])
g.append(val)
setattr(objects[key],dom[1],g)

0 comments on commit 451459c

Please sign in to comment.