Arch: Adjust height of objects inside groups
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user