From 0f6eca5ef8e7a3b428aae5f65eeb4bcc7f1cb31a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sat, 24 Mar 2012 18:26:01 -0300 Subject: [PATCH] Bugfixes in Arch Windows --- src/Mod/Arch/ArchWall.py | 37 ++++++++++++++++++++++++------------- src/Mod/Draft/Draft.py | 9 +++++++++ 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 5b12b796c..4799d4abc 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -257,6 +257,25 @@ class _Wall(ArchComponent.Component): if prop in ["Base","Height","Width","Align","Additions","Subtractions"]: self.createGeometry(obj) + def getSubVolume(self,base,width,delta=None): + "returns a subvolume from a base object" + import Part + max_length = 0 + for w in base.Shape.Wires: + if w.BoundBox.DiagonalLength > max_length: + max_length = w.BoundBox.DiagonalLength + f = w + f = Part.Face(f) + n = f.normalAt(0,0) + v1 = fcvec.scaleTo(n,width) + f.translate(v1) + v2 = fcvec.neg(v1) + v2 = fcvec.scale(v1,-2) + f = f.extrude(v2) + if delta: + f.translate(delta) + return f + def createGeometry(self,obj): import Part @@ -342,20 +361,12 @@ class _Wall(ArchComponent.Component): if Draft.getType(hole) == "Window": # window if hole.Base and obj.Width: - max_length = 0 - for w in hole.Base.Shape.Wires: - if w.BoundBox.DiagonalLength > max_length: - max_length = w.BoundBox.DiagonalLength - ext = w - f = Part.Face(ext) - l = obj.Width - n = f.normalAt(0,0) - v1 = fcvec.scaleTo(n,l) - f.translate(v1) - v2 = fcvec.neg(v1) - v2 = fcvec.scale(v1,-2) - f = f.extrude(v2) + f = self.getSubVolume(hole.Base,obj.Width) base = base.cut(f) + elif Draft.isClone(hole,"Window"): + if hole.Objects[0].Base and obj.Width: + f = self.getSubVolume(hole.Objects[0].Base,obj.Width,hole.Placement.Base) + base = base.cut(f) elif hasattr(obj,"Shape"): base = base.cut(hole.Shape) hole.ViewObject.hide() # to be removed diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 37a7f3148..59c4e16d1 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -170,6 +170,15 @@ def getType(obj): return "Group" return "Unknown" +def isClone(obj,objtype): + """isClone(obj,objtype): returns True if the given object is + a clone of an object of the given type""" + if getType(obj) == "Clone": + if len(obj.Objects) == 1: + if getType(obj.Objects[0]) == objtype: + return True + return False + def getGroupNames(): "returns a list of existing groups in the document" glist = []