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 @@
+
+
+
+