From ea0f6797b629e38b54fe4fa28ac009842da13ad5 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 26 Feb 2018 22:01:04 -0300 Subject: [PATCH] Arch: Fixed recursive loop in windows --- src/Mod/Arch/ArchWindow.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index cb5154afa24a..79c0d0245108 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -1019,11 +1019,28 @@ def getIcon(self): return ":/icons/Arch_Window_Tree.svg" def updateData(self,obj,prop): + if prop == "Shape": + if obj.Base: + if obj.Base.isDerivedFrom("Part::Compound"): + if obj.ViewObject.DiffuseColor != obj.Base.ViewObject.DiffuseColor: + if len(obj.Base.ViewObject.DiffuseColor) > 1: + obj.ViewObject.DiffuseColor = obj.Base.ViewObject.DiffuseColor + obj.ViewObject.update() + elif prop == "CloneOf": + if obj.CloneOf: + mat = None + if hasattr(obj,"Material"): + if obj.Material: + mat = obj.Material + if not mat: + if obj.ViewObject.DiffuseColor != obj.CloneOf.ViewObject.DiffuseColor: + if len(obj.CloneOf.ViewObject.DiffuseColor) > 1: + obj.ViewObject.DiffuseColor = obj.CloneOf.ViewObject.DiffuseColor + obj.ViewObject.update() if (prop in ["WindowParts","Shape"]): if obj.Shape: if not obj.Shape.isNull(): self.colorize(obj) - ArchComponent.ViewProviderComponent.updateData(self,obj,prop) def onDelete(self,vobj,subelements): for o in vobj.Object.Hosts: @@ -1073,19 +1090,24 @@ def colorize(self,obj): ccol = None if len(obj.WindowParts) > i*5: name = obj.WindowParts[(i*5)] - typeidx = (i*5)+1 + mtype = obj.WindowParts[(i*5)+1] if hasattr(obj,"Material"): if obj.Material: if hasattr(obj.Material,"Materials"): if obj.Material.Names: + mat = None if name in obj.Material.Names: mat = obj.Material.Materials[obj.Material.Names.index(name)] + elif mtype in obj.Material.Names: + mat = obj.Material.Materials[obj.Material.Names.index(mtype)] + if mat: if 'DiffuseColor' in mat.Material: if "(" in mat.Material['DiffuseColor']: ccol = tuple([float(f) for f in mat.Material['DiffuseColor'].strip("()").split(",")]) if 'Transparency' in mat.Material: ccol = (ccol[0],ccol[1],ccol[2],float(mat.Material['Transparency'])) if not ccol: + typeidx = (i*5)+1 if typeidx < len(obj.WindowParts): typ = obj.WindowParts[typeidx] if typ == WindowPartTypes[2]: # transparent parts @@ -1095,7 +1117,10 @@ def colorize(self,obj): colors.extend([ccol for f in solids[i].Faces]) #print("colors: ",colors) if colors: - obj.ViewObject.DiffuseColor = colors + if colors != obj.ViewObject.DiffuseColor: + if obj.Material and (len(colors) > 1): + print obj.Label,colors + obj.ViewObject.DiffuseColor = colors class _ArchWindowTaskPanel: '''The TaskPanel for Arch Windows'''