Arch: Adjust height of objects inside groups

This commit is contained in:
Yorik van Havre
2019-10-07 15:33:28 -03:00
parent c8df73d756
commit 2f07f13e9d
4 changed files with 30 additions and 13 deletions

View File

@@ -377,11 +377,7 @@ class BuildingPart(ArchIFC.IfcProduct):
self.shapecache = None
if (prop == "Height") and obj.Height.Value:
for child in obj.Group:
if Draft.getType(child) in ["Wall","Structure"]:
if not child.Height.Value:
print("Executing ",child.Label)
child.Proxy.execute(child)
self.touchChildren(obj)
elif prop == "Placement":
if hasattr(self,"oldPlacement"):
@@ -461,6 +457,17 @@ class BuildingPart(ArchIFC.IfcProduct):
g.append(o)
return g
def touchChildren(self,obj):
"Touches all descendents where applicable"
for child in obj.Group:
if Draft.getType(child) in ["Wall","Structure"]:
if not child.Height.Value:
print("Executing ",child.Label)
child.Proxy.execute(child)
elif Draft.getType(child) in ["Group"]:
self.touchChildren(child)
class ViewProviderBuildingPart:

View File

@@ -269,6 +269,22 @@ class Component(ArchIFC.IfcProduct):
ilist2.append(o)
return ilist2
def getParentHeight(self,obj):
"gets a height value from a host BuildingPart"
for parent in obj.InList:
if Draft.getType(parent) in ["Floor","BuildingPart"]:
if obj in parent.Group:
if parent.Height.Value:
return parent.Height.Value
# not found? get one level higher
for parent in obj.InList:
if hasattr(parent,"Group"):
if obj in parent.Group:
return self.getParentHeight(parent)
return 0
def clone(self,obj):
"if this object is a clone, sets the shape. Returns True if this is the case"

View File

@@ -730,10 +730,7 @@ class _Structure(ArchComponent.Component):
height = obj.Height.Value
normal = None
if not height:
for p in obj.InList:
if Draft.getType(p) in ["Floor","BuildingPart"]:
if p.Height.Value:
height = p.Height.Value
height = self.getParentHeight(obj)
base = None
placement = None
if obj.Base:

View File

@@ -816,10 +816,7 @@ class _Wall(ArchComponent.Component):
height = obj.Height.Value
if not height:
for p in obj.InList:
if Draft.getType(p) in ["Floor","BuildingPart"]:
if p.Height.Value:
height = p.Height.Value
height = self.getParentHeight(obj)
if not height:
return None
if obj.Normal == Vector(0,0,0):