From 8a92115ec6a47103acd5f0c957860af2e85d1124 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 4 Jun 2012 18:08:10 -0300 Subject: [PATCH] Arch: more bugfixing --- src/Mod/Arch/ArchBuilding.py | 44 +++++++--------------------------- src/Mod/Arch/ArchFloor.py | 22 +++++++++++++---- src/Mod/Arch/ArchSite.py | 46 ++++++++---------------------------- src/Mod/Arch/ArchWall.py | 16 +++++++++---- 4 files changed, 46 insertions(+), 82 deletions(-) diff --git a/src/Mod/Arch/ArchBuilding.py b/src/Mod/Arch/ArchBuilding.py index 4b0011b34d..0d6d5cc403 100644 --- a/src/Mod/Arch/ArchBuilding.py +++ b/src/Mod/Arch/ArchBuilding.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchCommands +import FreeCAD,FreeCADGui,Draft,ArchCommands,ArchFloor from PyQt4 import QtCore from DraftTools import translate @@ -56,7 +56,7 @@ class _CommandBuilding: FreeCADGui.doCommand("import Arch") FreeCADGui.doCommand("obj = Arch.makeBuilding()") FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") - FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + FreeCADGui.doCommand('FreeCAD.ActiveDocument.removeObject("'+sel[0].Name+'")') FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: @@ -73,47 +73,19 @@ class _CommandBuilding: FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() -class _Building: +class _Building(ArchFloor._Floor): "The Building object" def __init__(self,obj): + ArchFloor._Floor.__init__(self,obj) self.Type = "Building" - obj.Proxy = self - self.Object = obj - - def execute(self,obj): - self.Object = obj - - def onChanged(self,obj,prop): - pass - - def addObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if not child in g: - g.append(child) - self.Object.Group = g - - def removeObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if child in g: - g.remove(child) - self.Object.Group = g - -class _ViewProviderBuilding: + obj.setEditorMode('Height',2) + +class _ViewProviderBuilding(ArchFloor._ViewProviderFloor): "A View Provider for the Building object" def __init__(self,vobj): - vobj.Proxy = self + ArchFloor._ViewProviderFloor.__init__(self,vobj) def getIcon(self): return ":/icons/Arch_Building_Tree.svg" - def attach(self,vobj): - self.Object = vobj.Object - return - - def claimChildren(self): - return self.Object.Group - - FreeCADGui.addCommand('Arch_Building',_CommandBuilding()) diff --git a/src/Mod/Arch/ArchFloor.py b/src/Mod/Arch/ArchFloor.py index 922d8aca0c..f7ccab17ae 100644 --- a/src/Mod/Arch/ArchFloor.py +++ b/src/Mod/Arch/ArchFloor.py @@ -57,7 +57,7 @@ class _CommandFloor: FreeCADGui.doCommand("import Arch") FreeCADGui.doCommand("obj = Arch.makeFloor()") FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") - FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + FreeCADGui.doCommand('FreeCAD.ActiveDocument.removeObject("'+sel[0].Name+'")') FreeCAD.ActiveDocument.commitTransaction() ok = True if not ok: @@ -74,7 +74,7 @@ class _CommandFloor: FreeCAD.ActiveDocument.recompute() class _Floor: - "The Cell object" + "The Floor object" def __init__(self,obj): obj.addProperty("App::PropertyLength","Height","Base", str(translate("Arch","The height of this floor"))) @@ -82,11 +82,17 @@ class _Floor: obj.Proxy = self self.Object = obj + def __getstate__(self): + return None + + def __setstate__(self,state): + return None + def execute(self,obj): - self.Object = obj + pass def onChanged(self,obj,prop): - pass + self.Object = obj def addObject(self,child): if hasattr(self,"Object"): @@ -103,7 +109,7 @@ class _Floor: self.Object.Group = g class _ViewProviderFloor: - "A View Provider for the Cell object" + "A View Provider for the Floor object" def __init__(self,vobj): vobj.Proxy = self @@ -117,4 +123,10 @@ class _ViewProviderFloor: def claimChildren(self): return self.Object.Group + def __getstate__(self): + return None + + def __setstate__(self,state): + return None + FreeCADGui.addCommand('Arch_Floor',_CommandFloor()) diff --git a/src/Mod/Arch/ArchSite.py b/src/Mod/Arch/ArchSite.py index d05a7e8ffa..69cfda8bab 100644 --- a/src/Mod/Arch/ArchSite.py +++ b/src/Mod/Arch/ArchSite.py @@ -21,7 +21,7 @@ #* * #*************************************************************************** -import FreeCAD,FreeCADGui,Draft,ArchCommands +import FreeCAD,FreeCADGui,Draft,ArchCommands,ArchFloor from PyQt4 import QtCore from DraftTools import translate @@ -56,7 +56,7 @@ class _CommandSite: FreeCADGui.doCommand("import Arch") FreeCADGui.doCommand("obj = Arch.makeSite()") FreeCADGui.doCommand("Arch.copyProperties(FreeCAD.ActiveDocument."+sel[0].Name+",obj)") - FreeCADGui.doCommand("FreeCAD.ActiveDocument.removeObject("+sel[0].Name+")") + FreeCADGui.doCommand('FreeCAD.ActiveDocument.removeObject("'+sel[0].Name+'")') nobj = makeSite() ArchCommands.copyProperties(sel[0],nobj) @@ -75,47 +75,21 @@ class _CommandSite: FreeCADGui.doCommand("Arch.makeSite("+ss+")") FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() - -class _Site: + +class _Site(ArchFloor._Floor): "The Site object" def __init__(self,obj): + ArchFloor._Floor.__init__(self,obj) self.Type = "Site" - obj.Proxy = self - self.Object = obj - - def execute(self,obj): - self.Object = obj - - def onChanged(self,obj,prop): - pass - - def addObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if not child in g: - g.append(child) - self.Object.Group = g - - def removeObject(self,child): - if hasattr(self,"Object"): - g = self.Object.Group - if child in g: - g.remove(child) - self.Object.Group = g - -class _ViewProviderSite: + obj.setEditorMode('Height',2) + +class _ViewProviderSite(ArchFloor._ViewProviderFloor): "A View Provider for the Site object" def __init__(self,vobj): - vobj.Proxy = self + ArchFloor._ViewProviderFloor.__init__(self,vobj) def getIcon(self): return ":/icons/Arch_Site_Tree.svg" - def attach(self,vobj): - self.Object = vobj.Object - return - - def claimChildren(self): - return self.Object.Group - + FreeCADGui.addCommand('Arch_Site',_CommandSite()) diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 0bfa8f6e48..19b3b29bad 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -265,6 +265,7 @@ class _Wall(ArchComponent.Component): self.createGeometry(obj) def onChanged(self,obj,prop): + print prop if prop in ["Base","Height","Width","Align","Additions","Subtractions"]: self.createGeometry(obj) @@ -373,7 +374,8 @@ class _Wall(ArchComponent.Component): base = temp for app in obj.Additions: - base = base.fuse(app.Shape) + if hasattr(app,"Shape"): + base = base.fuse(app.Shape) app.ViewObject.hide() #to be removed for hole in obj.Subtractions: if Draft.getType(hole) == "Window": @@ -393,10 +395,14 @@ class _Wall(ArchComponent.Component): hole.ViewObject.hide() # to be removed if base: - base.removeSplitter() - obj.Shape = base - if not DraftGeomUtils.isNull(pl): - obj.Placement = pl + if not base.isNull(): + try: + base.removeSplitter() + except: + print "Wall: Error removing splitter" + obj.Shape = base + if not DraftGeomUtils.isNull(pl): + obj.Placement = pl class _ViewProviderWall(ArchComponent.ViewProviderComponent): "A View Provider for the Wall object"