From 51383ada0702d756148f09fb88be52928efd1a00 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Sun, 7 Jul 2013 11:29:26 -0300 Subject: [PATCH] 0001167: Arch fixtures system Arch objects can now have Fixtures, which is a mesh or part attached to them, but that doesn't modify the geometry of the base object. They are normally hidden, except when the new Display Mode "Detailed" is used. Fixtures can be added to any Arch object using the new Arch_Fixture command and removed with the standard Arch_Remove command. Fixtures are useful for small unimportant details like window latches or hinges, that should stay hidden most of the time. --- src/Mod/Arch/ArchCommands.py | 38 +++ src/Mod/Arch/ArchComponent.py | 41 ++- src/Mod/Arch/ArchWall.py | 7 +- src/Mod/Arch/ArchWindow.py | 2 +- src/Mod/Arch/Arch_rc.py | 152 +++++++++-- src/Mod/Arch/InitGui.py | 3 +- src/Mod/Arch/Resources/Arch.qrc | 1 + src/Mod/Arch/Resources/icons/Arch_Fixture.svg | 243 ++++++++++++++++++ 8 files changed, 455 insertions(+), 32 deletions(-) create mode 100644 src/Mod/Arch/Resources/icons/Arch_Fixture.svg diff --git a/src/Mod/Arch/ArchCommands.py b/src/Mod/Arch/ArchCommands.py index 96da0d2bd..8212772fa 100644 --- a/src/Mod/Arch/ArchCommands.py +++ b/src/Mod/Arch/ArchCommands.py @@ -525,6 +525,19 @@ def check(objectslist,includehidden=False): bad.append([o,str(translate("Arch","contains faces that are not part of any solid"))]) return bad + +def addFixture(fixture,baseobject): + '''addFixture(fixture,baseobject): adds the given object as a + fixture to the given base object''' + if hasattr(baseobject,"Fixtures"): + f = baseobject.Fixtures + f.append(fixture) + baseobject.Fixtures = f + if baseobject.ViewObject.DisplayMode != "Detailed": + fixture.ViewObject.hide() + else: + FreeCAD.Console.PrintMessage(str(translate("Arch","This object has no support for fixtures"))) + # command definitions ############################################### @@ -737,6 +750,30 @@ class _CommandCheck: FreeCADGui.Selection.addSelection(i[0]) +class _CommandFixture: + "the Arch Fixture command definition" + def GetResources(self): + return {'Pixmap' : 'Arch_Fixture', + 'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Fixture","Add fixture"), + 'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Fixture","Adds the selected components as fixtures to the active object")} + + def IsActive(self): + if len(FreeCADGui.Selection.getSelection()) > 1: + return True + else: + return False + + def Activated(self): + sel = FreeCADGui.Selection.getSelection() + FreeCAD.ActiveDocument.openTransaction(str(translate("Arch","Grouping"))) + host = sel.pop() + for o in sel: + FreeCADGui.doCommand("import Arch") + FreeCADGui.doCommand("Arch.addFixture(FreeCAD.ActiveDocument."+o.Name+",FreeCAD.ActiveDocument."+host.Name+")") + FreeCAD.ActiveDocument.commitTransaction() + FreeCAD.ActiveDocument.recompute() + + FreeCADGui.addCommand('Arch_Add',_CommandAdd()) FreeCADGui.addCommand('Arch_Remove',_CommandRemove()) FreeCADGui.addCommand('Arch_SplitMesh',_CommandSplitMesh()) @@ -745,3 +782,4 @@ FreeCADGui.addCommand('Arch_SelectNonSolidMeshes',_CommandSelectNonSolidMeshes() FreeCADGui.addCommand('Arch_RemoveShape',_CommandRemoveShape()) FreeCADGui.addCommand('Arch_CloseHoles',_CommandCloseHoles()) FreeCADGui.addCommand('Arch_Check',_CommandCheck()) +FreeCADGui.addCommand('Arch_Fixture',_CommandFixture()) diff --git a/src/Mod/Arch/ArchComponent.py b/src/Mod/Arch/ArchComponent.py index aa5a30064..786f48914 100644 --- a/src/Mod/Arch/ArchComponent.py +++ b/src/Mod/Arch/ArchComponent.py @@ -74,6 +74,7 @@ def addToComponent(compobject,addobject,mod=None): addobject.ViewObject.hide() break + def removeFromComponent(compobject,subobject): '''removeFromComponent(compobject,subobject): subtracts subobject from the given component. If the subobject is already part of the @@ -81,7 +82,7 @@ def removeFromComponent(compobject,subobject): it is added as a subtraction.''' if compobject == subobject: return found = False - attribs = ["Additions","Subtractions","Objects","Components","Base","Axes"] + attribs = ["Additions","Subtractions","Objects","Components","Base","Axes","Fixtures"] for a in attribs: if hasattr(compobject,a): if a == "Base": @@ -113,7 +114,7 @@ class ComponentTaskPanel: # the categories are shown only if they are not empty. self.obj = None - self.attribs = ["Base","Additions","Subtractions","Objects","Components","Axes"] + self.attribs = ["Base","Additions","Subtractions","Objects","Components","Axes","Fixtures"] self.form = QtGui.QWidget() self.form.setObjectName("TaskPanel") self.grid = QtGui.QGridLayout(self.form) @@ -263,6 +264,8 @@ class Component: "Other shapes that are appended to this object") obj.addProperty("App::PropertyLinkList","Subtractions","Base", "Other shapes that are subtracted from this object") + obj.addProperty("App::PropertyLinkList","Fixtures","Base", + "Shapes or Meshes that are appended to this object without modifying its geometry") obj.Proxy = self self.Type = "Component" self.Subvolume = None @@ -275,7 +278,18 @@ class Component: def __setstate__(self,state): if state: self.Type = state - + + def onChanged(self,obj,prop): + if prop == "Placement": + # make fixtures move along with host + if hasattr(obj,"Fixtures"): + vo = obj.Shape.Placement.Base + vn = obj.Placement.Base + import DraftVecUtils + if not DraftVecUtils.equals(vo,vn): + delta = vn.sub(vo) + for o in obj.Fixtures: + o.Placement.move(delta) def getSubVolume(self,base,width,plac=None): "returns a subvolume from a base object" @@ -388,7 +402,6 @@ class Component: base = base.cut(o.Shape) return base - class ViewProviderComponent: "A default View Provider for Component objects" def __init__(self,vobj): @@ -406,11 +419,22 @@ class ViewProviderComponent: return def getDisplayModes(self,vobj): - modes=[] + modes=["Detailed"] return modes def setDisplayMode(self,mode): - return mode + if mode == "Detailed": + if hasattr(self,"Object"): + if hasattr(self.Object,"Fixtures"): + for f in self.Object.Fixtures: + f.ViewObject.show() + return "Flat Lines" + else: + if hasattr(self,"Object"): + if hasattr(self.Object,"Fixtures"): + for f in self.Object.Fixtures: + f.ViewObject.hide() + return mode def __getstate__(self): return None @@ -419,7 +443,10 @@ class ViewProviderComponent: return None def claimChildren(self): - return [self.Object.Base]+self.Object.Additions+self.Object.Subtractions + c = [self.Object.Base]+self.Object.Additions+self.Object.Subtractions + if hasattr(self.Object,"Fixtures"): + c.extend(self.Object.Fixtures) + return c def setEdit(self,vobj,mode): taskd = ComponentTaskPanel() diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 9fd625b82..5f0ca5cb0 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -362,9 +362,8 @@ class _Wall(ArchComponent.Component): for o in obj.OutList: if (Draft.getType(o) == "Window") or Draft.isClone(o,"Window"): o.Placement.move(delta) + ArchComponent.Component.onChanged(self,obj,prop) - - def getDefaultValues(self,obj): "returns normal,width,height values from this wall" width = 1.0 @@ -508,14 +507,14 @@ class _ViewProviderWall(ArchComponent.ViewProviderComponent): return ":/icons/Arch_Wall_Tree.svg" def getDisplayModes(self,vobj): - return ["Flat 2D"] + return ArchComponent.ViewProviderComponent.getDisplayModes(self,vobj)+["Flat 2D"] def setDisplayMode(self,mode): self.Object.Proxy.createGeometry(self.Object) if mode == "Flat 2D": return "Flat Lines" else: - return mode + return ArchComponent.ViewProviderComponent.setDisplayMode(self,mode) def attach(self,vobj): self.Object = vobj.Object diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 55dc0c094..c3d72f30a 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -213,7 +213,7 @@ class _ViewProviderWindow(ArchComponent.ViewProviderComponent): if self.Object.Base: self.Object.Base.ViewObject.hide() FreeCADGui.Control.closeDialog() - return + return False def colorize(self,obj): "setting different part colors" diff --git a/src/Mod/Arch/Arch_rc.py b/src/Mod/Arch/Arch_rc.py index 870ae8d4f..37b7e01be 100644 --- a/src/Mod/Arch/Arch_rc.py +++ b/src/Mod/Arch/Arch_rc.py @@ -2,7 +2,7 @@ # Resource object code # -# Created: Wed Jul 3 13:10:05 2013 +# Created: Sun Jul 7 11:06:17 2013 # by: The Resource Compiler for PyQt (Qt v4.8.4) # # WARNING! All changes made in this file will be lost! @@ -30238,6 +30238,115 @@ qt_resource_data = "\ \xd2\x9d\x05\x58\x30\x1c\x10\x5c\xc1\xc0\xb9\x84\x28\x3a\x0e\x7c\ \x1e\x69\x22\x66\xf0\xbf\x6e\xdf\x34\x9b\xcb\xfa\xdb\x5d\xc5\xd7\ \x0f\x77\x73\x77\xf7\x79\xb8\xfb\x37\x54\x09\xba\x52\ +\x00\x00\x06\xab\ +\x00\ +\x00\x22\x6d\x78\x9c\xed\x58\xeb\x8f\xdb\x36\x12\xff\xbe\x7f\x85\ +\x4e\xf9\x92\x45\x4d\x8a\x0f\x49\x14\xb5\xf6\x16\xc5\x05\x29\x0a\ +\xb4\x28\x70\x4d\x70\x1f\x0f\xb2\x44\xdb\xca\xca\x92\x41\xc9\x6b\ +\x3b\x7f\x7d\x87\xb2\x5e\xde\xd5\x3e\x2f\x71\xda\xbb\x18\x58\xac\ +\x34\x0f\xce\x70\xe6\x37\x43\x6a\xa6\x3f\xee\xd7\x99\x75\xab\x74\ +\x99\x16\xf9\xcc\xa6\x98\xd8\x96\xca\xe3\x22\x49\xf3\xe5\xcc\xfe\ +\xf8\xe1\x3d\x0a\x6c\xab\xac\xa2\x3c\x89\xb2\x22\x57\x33\x3b\x2f\ +\xec\x1f\xaf\x2f\xa6\xff\x40\xc8\xfa\xa7\x56\x51\xa5\x12\x6b\x97\ +\x56\x2b\xeb\x97\xfc\xa6\x8c\xa3\x8d\xb2\xde\xae\xaa\x6a\x13\x3a\ +\xce\x6e\xb7\xc3\x69\x43\xc4\x85\x5e\x3a\x97\x16\x42\xd7\x17\x17\ +\xd3\xf2\x76\x79\x61\x59\x16\xd8\xcd\xcb\x30\x89\x67\x76\xa3\xb0\ +\xd9\xea\xac\x16\x4c\x62\x47\x65\x6a\xad\xf2\xaa\x74\x28\xa6\x8e\ +\xdd\x8b\xc7\xbd\x78\x6c\xac\xa7\xb7\x2a\x2e\xd6\xeb\x22\x2f\x6b\ +\xcd\xbc\x7c\x33\x10\xd6\xc9\xa2\x93\x36\xde\xec\x78\x2d\x44\xa5\ +\x94\x0e\x61\x0e\x63\x08\x24\x50\x79\xc8\xab\x68\x8f\x4e\x55\xc1\ +\xc7\x31\x55\x46\x08\x71\x80\xd7\x4b\x3e\x4f\x2a\xdc\x67\x10\x8a\ +\x07\x9d\xa9\xb9\x43\xeb\x10\xfe\x0d\xfc\x75\x0a\x2d\x01\x97\xc5\ +\x56\xc7\x6a\x01\x9a\x0a\xe7\xaa\x72\xde\x7d\x78\xd7\x31\x11\xc1\ +\x49\x95\x0c\x96\x69\xa3\x7f\x62\xf7\x24\x25\x79\xb4\x56\xe5\x26\ +\x8a\x55\xe9\xb4\xf4\x5a\x7f\x97\x26\xd5\x6a\x66\xfb\xee\x66\x5f\ +\xbf\xaf\x54\xba\x5c\x55\x03\x42\x9a\xcc\x6c\xd8\x21\x93\x81\x57\ +\xbf\x0f\x00\x44\x8f\x02\xcd\x72\x61\xc7\x21\xd8\x0d\xb0\x6b\x69\ +\x29\xb9\xac\x45\x5a\xbf\xc3\xa4\x88\x8d\x23\x33\xfb\x27\x1d\xaf\ +\xfe\xf3\x53\x92\x60\x13\xbc\x6b\x90\x99\x26\x6a\x51\x1a\xd9\xa3\ +\x45\xf3\x06\x26\x45\xcd\x03\x2e\x84\x4d\x45\xfa\x67\x1d\x25\x29\ +\x80\xe5\x28\x77\x94\x3c\xe5\x70\x21\x79\xa3\x03\x5a\x65\x55\x6c\ +\x5a\x59\xf0\xa2\x3a\x64\x60\xda\x10\x51\x5c\x64\x85\x0e\xdf\x40\ +\xfa\x16\x41\x74\x55\x93\x0a\x88\x4e\x5a\x1d\x42\x7a\x65\xf7\x3a\ +\xc5\x62\x51\x2a\x08\x07\x19\xd0\xea\x88\x80\x06\xd8\xf2\x6c\xcb\ +\x79\x89\x35\xdf\x5f\x2c\x9e\x61\x8d\x8e\x5b\x13\x9d\xb5\xa9\x73\ +\xba\xed\xc7\xa3\xd4\x26\x08\xdc\xc8\x54\x0c\xeb\x47\xd9\x2e\x3a\ +\x94\x9d\x91\x1a\x94\xe1\x4a\x2b\x28\xa2\x37\x23\xf1\x7c\x34\xdc\ +\xb2\x5f\x86\x82\xe7\x0c\x13\x2e\x02\xe2\x77\xd4\x03\x50\x3d\x17\ +\x13\x42\x5d\x3a\x90\x65\x40\x65\x38\x08\x98\xef\x06\xbd\x2c\x50\ +\x25\x66\xc2\xa5\x03\xe2\xb2\xb1\xf5\x31\x4f\x2b\x28\xc2\x6d\xa9\ +\xf4\x1f\x06\xc8\xbf\xe7\x1f\x4b\x75\x4f\xea\x83\x8e\xf2\x12\xaa\ +\x66\x3d\xb3\x2b\xf3\x98\x41\xdf\x7a\x8b\xd8\x04\xb1\xcb\x3e\x7a\ +\x5f\x27\x4e\x88\x3d\x11\x29\x14\x7c\xdb\x58\x3d\xb5\xff\xd1\x6a\ +\x82\x5d\x9d\xb1\x9e\x90\x7f\xde\x8a\x42\xe4\x95\x35\x35\x1e\xab\ +\xb3\xf6\x1e\x24\xcf\x1c\x2b\xff\xdb\xf4\x1f\x44\x9f\xaa\x2b\xf2\ +\x77\xe8\x41\x94\x10\x4c\x99\xc7\xe5\x04\x09\x4c\x29\x11\xf2\xe9\ +\x8e\x34\x8e\x32\x7a\x56\x94\xd1\x33\xa3\xcc\x7b\x1d\xca\x46\xf3\ +\xf6\x40\x8a\xc7\xe1\x30\x0a\x9d\xc7\x73\xca\xb1\x24\x3e\xf3\x26\ +\xc8\xc5\x2c\x80\xe4\x5e\xbe\x10\x31\x23\x09\x06\x9f\x5e\x53\x18\ +\x0f\xd5\xd8\x57\x3e\xf3\x1e\xdd\x89\x27\xbf\x64\x01\x05\x01\x16\ +\xbe\x2f\x64\x30\xf1\x09\x96\xd2\x17\x81\x7f\xf9\xb5\xea\xfe\x75\ +\x75\x29\xce\x5a\x97\x67\xbe\x7b\xc2\x3d\xe0\xff\xbd\x2e\x87\xf7\ +\xb7\x27\x2a\x53\xfc\xf7\x95\xf9\x40\xef\x3f\xef\x75\x8c\x9d\x19\ +\x64\xaf\xfc\xc4\xf9\x5f\x02\xd9\x0b\xda\x3f\xfb\x5a\x28\x23\xe7\ +\xbd\xf3\x8b\x33\xa3\x2c\xf8\x8e\x32\xf1\x6c\x94\x91\xe7\x82\x6c\ +\xea\x98\xa9\x4d\xfd\xd4\x0d\x7c\xcc\xb4\x27\xb9\x4d\xd5\xee\xa2\ +\x73\x66\x1e\x75\xde\x6d\xa2\xa5\xaa\x93\x0a\x96\x17\xf5\xaf\x61\ +\xcc\x0b\x9d\x28\xdd\xb2\xfc\xfa\x77\xc2\x6a\xf2\x7e\x1c\x63\x5e\ +\x9c\x7a\x67\x56\xed\xf8\x64\x9c\x5f\xae\xa2\xa4\xd8\xcd\x6c\x76\ +\x97\xf9\xb9\x28\x20\xfe\x1c\xf2\x29\x49\x20\xf8\x5d\x76\xbc\x9f\ +\xd9\x70\x7d\x17\x2c\x08\x3c\x1e\xdc\xe3\x82\x41\x97\x61\xe6\x4a\ +\x9f\x7a\xf7\x98\x5b\xad\x21\xa6\x28\x8b\x0e\x0a\x76\x55\xff\x6b\ +\x11\x5a\xae\x8a\xdd\x52\x9b\xe8\x54\x7a\xab\xee\x6a\x26\x45\xbc\ +\x35\x33\x52\xb4\x3d\x66\xba\x99\xcc\x0d\x24\x8c\x2e\x9a\xcf\x8b\ +\xfd\xf8\x02\xbb\x34\x87\xdd\xa2\x66\xd6\x47\x25\xbb\x17\x93\x46\ +\xa2\x9d\xfe\x51\xe2\x89\x07\x44\xf6\x7d\x21\xdf\x65\x1d\x1e\x66\ +\xad\xa3\x7d\xba\x4e\x3f\xab\xa4\xaf\xca\x4e\xa4\xcc\xa3\x0d\xca\ +\x8b\x44\x95\xe3\xde\x17\xf3\x4f\x00\xb6\x13\x89\x06\x70\x6b\x55\ +\x45\x49\x54\x45\x3d\xb8\x5a\x0a\x93\xb2\xed\x61\x53\x9d\x2c\xc2\ +\x7f\xbd\x7b\xdf\x35\x98\x38\x0e\xff\x5d\xe8\x9b\xbe\x37\x18\x81\ +\x68\x5e\x6c\x61\xe3\x5d\xdf\x33\x13\xc9\x38\x34\xd5\x18\x55\xd7\ +\xe9\x1a\x20\x63\xe6\xbc\x3f\xec\xd7\x19\xc0\xbc\x63\x9c\x08\x57\ +\x87\x8d\xea\x17\x3d\x2e\xab\xd5\x71\x8e\x3b\x3a\xfa\x4e\xe2\x75\ +\x6a\x94\x9c\x3f\xaa\x34\xcb\x7e\x31\x46\x06\x8d\xb0\x59\x34\xad\ +\x32\x75\x5d\xdb\x3c\x3e\xb6\xbb\x70\x9a\x6d\xb4\x7d\x6c\xb0\xcb\ +\xa9\xd3\x86\xa1\x7e\x5b\xf6\xe1\x39\x01\x5d\x17\xe0\x2c\x9a\xab\ +\x6c\x66\xff\x6a\x98\xd6\x3d\xee\x52\x17\xdb\xcd\x1a\x82\xdf\xa8\ +\xb7\x61\xdd\x44\xd5\xaa\x75\xb5\xe9\xd2\x0b\xd8\x46\xf8\x26\x08\ +\xe6\xa2\xee\xcf\xba\xb8\x51\xf5\xf9\xc0\x5d\xaf\x79\x3d\x62\x30\ +\x64\xed\xab\xe9\x37\x60\x25\x9c\x6f\xab\x6a\x48\xfb\x54\xa4\x79\ +\x08\x86\xf3\xa4\xa5\xf6\x9d\xbe\x3f\x77\xe0\x77\x65\x6c\x0e\x98\ +\xf5\xab\xde\x66\x2a\xcc\x8b\xfc\x33\x34\x8a\x56\x1f\x42\xad\x74\ +\x06\x20\xac\x42\xb7\xa5\x25\x11\xf4\x01\xad\xa3\x83\x11\x56\x43\ +\xea\xf1\x08\x09\xc9\xd5\x3a\xd2\x37\x4a\x1f\xf9\xb7\x69\x99\xce\ +\xd3\xcc\x18\xaa\x1f\x33\x75\x95\xa4\xe5\x06\xa2\x12\xa6\xb9\xf1\ +\xfa\xaa\xb8\x55\x7a\x91\x15\xbb\x8e\xaf\xf2\x08\xfe\xa1\x79\x14\ +\xdf\x2c\xeb\xed\x84\x51\x0c\xc5\xbc\x35\xbd\xbd\xeb\xab\x90\x98\ +\xdf\x2c\x86\x3d\x41\x99\x14\xee\x84\x73\xec\x12\xea\xf9\xd4\x62\ +\x12\x73\xca\x84\x9c\x50\x89\x85\xe0\x7e\xe0\x59\x3e\xc5\x82\x52\ +\xca\xc5\x84\x13\x60\xfa\x84\xb8\x16\x17\x70\x34\x70\x38\x1c\x26\ +\xae\xc4\x40\x11\xdc\xb3\x3e\x9f\x1c\x00\x26\x57\x20\x3c\xfa\xbd\ +\x98\x43\x06\xaa\x42\x23\xe8\x4f\xb7\x51\xb5\xd5\x6a\x78\x52\xf7\ +\x8d\x1c\x00\x60\xb0\x0a\x15\x18\x9b\x5f\x7f\x82\x3e\x88\x03\x06\ +\x9f\x68\x0b\xf1\x1d\x07\x2f\xc1\xc1\x7a\x14\x07\xc4\x00\x80\x05\ +\xae\xe0\xd4\xa2\x3e\x76\x3d\x9f\x13\xee\x4f\x24\xf6\x28\x0f\x2c\ +\x1a\x60\xe6\xf9\x0c\xd2\x4f\x2c\x44\x15\xf2\x27\x70\x33\xc4\x9e\ +\x94\xdc\x13\xe3\x38\xe0\x5f\x0e\x07\xcf\x01\x02\xdc\x82\x94\x3b\ +\xff\x0e\x84\x97\x01\x61\xac\xaa\x99\x8b\x5d\x26\xb8\xb9\x0e\xf6\ +\x88\x40\x04\xf2\x2f\x28\x9f\x00\x34\xa4\x20\x00\x0e\x80\x41\xf3\ +\xc8\x26\xd4\xc5\x5c\x4a\xe6\x7b\x96\x19\x3b\x4a\xe9\x73\xc0\x09\ +\x00\xc7\x65\xfe\x38\x38\xbc\x67\x83\x63\x34\xf3\xcf\x46\xd4\x11\ +\x21\x6d\xa2\x08\xf6\x3d\xcf\xf5\x19\xe3\x23\xe9\x7c\x69\x6e\x4f\ +\xb2\xd7\x02\xec\x6c\x89\x83\x1b\xa0\x60\xd0\xb7\x27\x1e\xa6\x84\ +\x71\x8f\x43\xfd\x06\x58\xb8\x01\xdc\x27\x2d\x04\x4f\xd2\xa3\x3e\ +\xd4\xaa\xa1\x72\x57\xf8\x81\xb4\x86\x44\x89\x03\x16\xc8\xc0\x3a\ +\x32\x65\x4d\x43\x2d\x11\xce\x01\x19\xd4\x95\x0e\xc4\x4e\x1d\xdd\ +\x21\xf7\xb6\xda\x25\x4e\x33\xad\x21\x2f\x70\x43\xe2\xc8\x1f\xce\ +\xf4\x47\xea\x77\x24\x15\x70\x7f\x79\x7b\xff\x33\x41\x22\x72\xf9\ +\xec\xec\x7c\xa9\x0e\x30\x56\xc1\xbd\xf9\xbf\x60\x49\xbb\x04\x9b\ +\xb9\xbf\x37\x61\xd8\x17\xd0\xe5\x39\xeb\xa1\xc1\x82\x33\x62\xe3\ +\x68\xec\x09\x70\x8c\x7e\xf8\x3d\xd2\x08\xa6\xce\xf2\xfa\x62\x6a\ +\xae\xc9\xd7\x17\x7f\x02\x3a\x43\xda\x26\ \x00\x00\x07\xc4\ \x00\ \x00\x37\x1e\x78\x9c\xed\x5b\x6d\x8f\x9b\x48\x12\xfe\x3e\xbf\x82\ @@ -33264,6 +33373,10 @@ qt_resource_name = "\ \x0a\xa2\x3b\x27\ \x00\x41\ \x00\x72\x00\x63\x00\x68\x00\x5f\x00\x43\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x10\ +\x00\xf0\x67\xc7\ +\x00\x41\ +\x00\x72\x00\x63\x00\x68\x00\x5f\x00\x46\x00\x69\x00\x78\x00\x74\x00\x75\x00\x72\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ \x00\x0d\ \x07\x4a\x92\xc7\ \x00\x41\ @@ -33344,8 +33457,8 @@ qt_resource_name = "\ qt_resource_struct = "\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x01\ -\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3a\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x1f\x00\x00\x00\x1b\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x3b\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x20\x00\x00\x00\x1b\ \x00\x00\x00\x1a\x00\x02\x00\x00\x00\x17\x00\x00\x00\x04\ \x00\x00\x01\x2e\x00\x00\x00\x00\x00\x01\x00\x02\x9d\x23\ \x00\x00\x02\x92\x00\x00\x00\x00\x00\x01\x00\x06\x6c\x9e\ @@ -33370,34 +33483,35 @@ qt_resource_struct = "\ \x00\x00\x01\x14\x00\x00\x00\x00\x00\x01\x00\x02\x52\xbc\ \x00\x00\x00\xe0\x00\x00\x00\x00\x00\x01\x00\x01\xbc\xaa\ \x00\x00\x02\x3e\x00\x00\x00\x00\x00\x01\x00\x05\x84\xf1\ -\x00\x00\x06\x96\x00\x01\x00\x00\x00\x01\x00\x07\xac\x79\ -\x00\x00\x05\x76\x00\x00\x00\x00\x00\x01\x00\x07\x63\x7d\ +\x00\x00\x05\x56\x00\x01\x00\x00\x00\x01\x00\x07\x5b\xb5\ +\x00\x00\x06\xbc\x00\x01\x00\x00\x00\x01\x00\x07\xb3\x28\ +\x00\x00\x05\x9c\x00\x00\x00\x00\x00\x01\x00\x07\x6a\x2c\ \x00\x00\x04\x12\x00\x00\x00\x00\x00\x01\x00\x07\x05\x81\ -\x00\x00\x07\xc6\x00\x01\x00\x00\x00\x01\x00\x08\x04\x4e\ -\x00\x00\x06\x68\x00\x01\x00\x00\x00\x01\x00\x07\xa5\xa4\ +\x00\x00\x07\xec\x00\x01\x00\x00\x00\x01\x00\x08\x0a\xfd\ +\x00\x00\x06\x8e\x00\x01\x00\x00\x00\x01\x00\x07\xac\x53\ \x00\x00\x04\x4c\x00\x01\x00\x00\x00\x01\x00\x07\x13\xf0\ \x00\x00\x04\x9e\x00\x01\x00\x00\x00\x01\x00\x07\x27\x77\ \x00\x00\x03\xb6\x00\x01\x00\x00\x00\x01\x00\x06\xea\xdf\ -\x00\x00\x07\x60\x00\x00\x00\x00\x00\x01\x00\x07\xe1\x0a\ -\x00\x00\x05\xb6\x00\x00\x00\x00\x00\x01\x00\x07\x7d\x57\ -\x00\x00\x05\x56\x00\x01\x00\x00\x00\x01\x00\x07\x5b\xb5\ +\x00\x00\x07\x86\x00\x00\x00\x00\x00\x01\x00\x07\xe7\xb9\ +\x00\x00\x05\xdc\x00\x00\x00\x00\x00\x01\x00\x07\x84\x06\ +\x00\x00\x05\x7c\x00\x01\x00\x00\x00\x01\x00\x07\x62\x64\ \x00\x00\x03\x94\x00\x01\x00\x00\x00\x01\x00\x06\xe1\xe6\ -\x00\x00\x06\x3c\x00\x01\x00\x00\x00\x01\x00\x07\x9a\x7a\ +\x00\x00\x06\x62\x00\x01\x00\x00\x00\x01\x00\x07\xa1\x29\ \x00\x00\x03\x38\x00\x01\x00\x00\x00\x01\x00\x06\xcf\xc5\ -\x00\x00\x07\x36\x00\x01\x00\x00\x00\x01\x00\x07\xd9\x75\ +\x00\x00\x07\x5c\x00\x01\x00\x00\x00\x01\x00\x07\xe0\x24\ \x00\x00\x04\x7a\x00\x01\x00\x00\x00\x01\x00\x07\x1d\x48\ \x00\x00\x03\x0e\x00\x01\x00\x00\x00\x01\x00\x06\xc6\x1d\ \x00\x00\x03\x74\x00\x01\x00\x00\x00\x01\x00\x06\xd9\x78\ -\x00\x00\x05\xe6\x00\x01\x00\x00\x00\x01\x00\x07\x8c\xc5\ +\x00\x00\x06\x0c\x00\x01\x00\x00\x00\x01\x00\x07\x93\x74\ \x00\x00\x05\x0a\x00\x00\x00\x00\x00\x01\x00\x07\x43\x72\ -\x00\x00\x06\x14\x00\x01\x00\x00\x00\x01\x00\x07\x92\x15\ +\x00\x00\x06\x3a\x00\x01\x00\x00\x00\x01\x00\x07\x98\xc4\ \x00\x00\x05\x34\x00\x01\x00\x00\x00\x01\x00\x07\x53\xf3\ -\x00\x00\x06\xc0\x00\x00\x00\x00\x00\x01\x00\x07\xb4\xbe\ +\x00\x00\x06\xe6\x00\x00\x00\x00\x00\x01\x00\x07\xbb\x6d\ \x00\x00\x04\xc2\x00\x01\x00\x00\x00\x01\x00\x07\x2c\x8e\ -\x00\x00\x07\x0a\x00\x01\x00\x00\x00\x01\x00\x07\xd0\xfb\ -\x00\x00\x06\xea\x00\x01\x00\x00\x00\x01\x00\x07\xc6\xc1\ -\x00\x00\x05\x96\x00\x01\x00\x00\x00\x01\x00\x07\x77\x3f\ -\x00\x00\x07\x8c\x00\x00\x00\x00\x00\x01\x00\x07\xf2\xd9\ +\x00\x00\x07\x30\x00\x01\x00\x00\x00\x01\x00\x07\xd7\xaa\ +\x00\x00\x07\x10\x00\x01\x00\x00\x00\x01\x00\x07\xcd\x70\ +\x00\x00\x05\xbc\x00\x01\x00\x00\x00\x01\x00\x07\x7d\xee\ +\x00\x00\x07\xb2\x00\x00\x00\x00\x00\x01\x00\x07\xf9\x88\ \x00\x00\x03\xe8\x00\x00\x00\x00\x00\x01\x00\x06\xf3\x21\ \x00\x00\x04\xec\x00\x00\x00\x00\x00\x01\x00\x07\x34\x76\ \x00\x00\x02\xda\x00\x01\x00\x00\x00\x01\x00\x06\xbe\xcd\ diff --git a/src/Mod/Arch/InitGui.py b/src/Mod/Arch/InitGui.py index 4a8d4ee9f..7d7fd9f5e 100644 --- a/src/Mod/Arch/InitGui.py +++ b/src/Mod/Arch/InitGui.py @@ -72,7 +72,8 @@ class ArchWorkbench(Workbench): self.archtools = ["Arch_Wall","Arch_Structure", "Arch_Floor","Arch_Building","Arch_Site", "Arch_Window","Arch_Roof","Arch_Axis", - "Arch_SectionPlane","Arch_Add","Arch_Remove"] + "Arch_SectionPlane","Arch_Add","Arch_Remove", + "Arch_Fixture"] self.meshtools = ["Arch_SplitMesh","Arch_MeshToShape", "Arch_SelectNonSolidMeshes","Arch_RemoveShape", "Arch_CloseHoles","Arch_MergeWalls"] diff --git a/src/Mod/Arch/Resources/Arch.qrc b/src/Mod/Arch/Resources/Arch.qrc index 8197a7a2c..4aafc08b0 100644 --- a/src/Mod/Arch/Resources/Arch.qrc +++ b/src/Mod/Arch/Resources/Arch.qrc @@ -31,6 +31,7 @@ icons/Arch_SelectNonManifold.svg icons/Arch_MergeWalls.svg icons/Arch_Wall_Tree_Assembly.svg + icons/Arch_Fixture.svg ui/archprefs-base.ui translations/Arch_af.qm translations/Arch_de.qm diff --git a/src/Mod/Arch/Resources/icons/Arch_Fixture.svg b/src/Mod/Arch/Resources/icons/Arch_Fixture.svg new file mode 100644 index 000000000..ee11cd0a8 --- /dev/null +++ b/src/Mod/Arch/Resources/icons/Arch_Fixture.svg @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + +