diff --git a/src/Mod/Arch/ArchEquipment.py b/src/Mod/Arch/ArchEquipment.py index 1dfa5ca3a6..b8af9f883b 100644 --- a/src/Mod/Arch/ArchEquipment.py +++ b/src/Mod/Arch/ArchEquipment.py @@ -267,6 +267,7 @@ class _Equipment(ArchComponent.Component): obj.addProperty("App::PropertyFloat","EquipmentPower","Arch",QT_TRANSLATE_NOOP("App::Property","The electric power needed by this equipment in Watts")) self.Type = "Equipment" obj.Role = Roles + obj.Role = "Furniture" obj.Proxy = self obj.setEditorMode("VerticalArea",2) obj.setEditorMode("HorizontalArea",2) diff --git a/src/Mod/Arch/ArchFrame.py b/src/Mod/Arch/ArchFrame.py index 24bd7548c4..36736adecd 100644 --- a/src/Mod/Arch/ArchFrame.py +++ b/src/Mod/Arch/ArchFrame.py @@ -105,6 +105,7 @@ class _Frame(ArchComponent.Component): self.Type = "Frame" obj.Align = True obj.Role = Roles + obj.Role = "Railing" def execute(self,obj): diff --git a/src/Mod/Arch/ArchSpace.py b/src/Mod/Arch/ArchSpace.py index 45b8704e98..5af09fe19e 100644 --- a/src/Mod/Arch/ArchSpace.py +++ b/src/Mod/Arch/ArchSpace.py @@ -265,6 +265,7 @@ class _Space(ArchComponent.Component): obj.SpaceType = SpaceTypes obj.Conditioning = ConditioningTypes obj.Role = Roles + obj.Role = "Space" obj.setEditorMode("HorizontalArea",2) def execute(self,obj): diff --git a/src/Mod/Arch/ArchStructure.py b/src/Mod/Arch/ArchStructure.py index 5c6989ad0a..7b5b1dc7d2 100644 --- a/src/Mod/Arch/ArchStructure.py +++ b/src/Mod/Arch/ArchStructure.py @@ -411,6 +411,7 @@ class _Structure(ArchComponent.Component): self.Type = "Structure" obj.FaceMaker = ["None","Simple","Cheese","Bullseye"] obj.Role = Roles + obj.Role = "Beam" def execute(self,obj): "creates the structure shape" diff --git a/src/Mod/Arch/ArchWall.py b/src/Mod/Arch/ArchWall.py index 081763bc55..f8d789a22f 100644 --- a/src/Mod/Arch/ArchWall.py +++ b/src/Mod/Arch/ArchWall.py @@ -174,6 +174,7 @@ class _CommandWall: def Activated(self): self.Align = "Center" + self.MultiMat = None self.Length = None self.lengthValue = 0 self.continueCmd = False @@ -275,6 +276,8 @@ class _CommandWall: FreeCADGui.doCommand('base.addGeometry(trace)') FreeCADGui.doCommand('wall = Arch.makeWall(base,width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")') FreeCADGui.doCommand('wall.Normal = FreeCAD.DraftWorkingPlane.axis') + if self.MultiMat: + FreeCADGui.doCommand("wall.Material = FreeCAD.ActiveDocument."+self.MultiMat.Name) FreeCADGui.addModule("Draft") FreeCADGui.doCommand("Draft.autogroup(wall)") @@ -303,31 +306,46 @@ class _CommandWall: w.setWindowTitle(translate("Arch","Wall options").decode("utf8")) grid = QtGui.QGridLayout(w) + matCombo = QtGui.QComboBox() + matCombo.addItem(translate("Arch","Wall Presets...")) + self.multimats = [] + self.MultiMat = None + for o in FreeCAD.ActiveDocument.Objects: + if Draft.getType(o) == "MultiMaterial": + self.multimats.append(o) + matCombo.addItem(o.Label) + if hasattr(FreeCAD,"LastArchMultiMaterial"): + for i,o in enumerate(self.multimats): + if o.Name == FreeCAD.LastArchMultiMaterial: + matCombo.setCurrentIndex(i+1) + self.MultiMat = o + grid.addWidget(matCombo,0,0,1,2) + label5 = QtGui.QLabel(translate("Arch","Length").decode("utf8")) self.Length = ui.createWidget("Gui::InputField") self.Length.setText("0.00 mm") - grid.addWidget(label5,0,0,1,1) - grid.addWidget(self.Length,0,1,1,1) + grid.addWidget(label5,1,0,1,1) + grid.addWidget(self.Length,1,1,1,1) label1 = QtGui.QLabel(translate("Arch","Width").decode("utf8")) value1 = ui.createWidget("Gui::InputField") value1.setText(FreeCAD.Units.Quantity(self.Width,FreeCAD.Units.Length).UserString) - grid.addWidget(label1,1,0,1,1) - grid.addWidget(value1,1,1,1,1) + grid.addWidget(label1,2,0,1,1) + grid.addWidget(value1,2,1,1,1) label2 = QtGui.QLabel(translate("Arch","Height").decode("utf8")) value2 = ui.createWidget("Gui::InputField") value2.setText(FreeCAD.Units.Quantity(self.Height,FreeCAD.Units.Length).UserString) - grid.addWidget(label2,2,0,1,1) - grid.addWidget(value2,2,1,1,1) + grid.addWidget(label2,3,0,1,1) + grid.addWidget(value2,3,1,1,1) label3 = QtGui.QLabel(translate("Arch","Alignment").decode("utf8")) value3 = QtGui.QComboBox() items = ["Center","Left","Right"] value3.addItems(items) value3.setCurrentIndex(items.index(self.Align)) - grid.addWidget(label3,3,0,1,1) - grid.addWidget(value3,3,1,1,1) + grid.addWidget(label3,4,0,1,1) + grid.addWidget(value3,4,1,1,1) label4 = QtGui.QLabel(translate("Arch","Con&tinue").decode("utf8")) value4 = QtGui.QCheckBox() @@ -337,8 +355,8 @@ class _CommandWall: if hasattr(FreeCADGui,"draftToolBar"): value4.setChecked(FreeCADGui.draftToolBar.continueMode) self.continueCmd = FreeCADGui.draftToolBar.continueMode - grid.addWidget(label4,4,0,1,1) - grid.addWidget(value4,4,1,1,1) + grid.addWidget(label4,5,0,1,1) + grid.addWidget(value4,5,1,1,1) QtCore.QObject.connect(self.Length,QtCore.SIGNAL("valueChanged(double)"),self.setLength) QtCore.QObject.connect(value1,QtCore.SIGNAL("valueChanged(double)"),self.setWidth) @@ -350,8 +368,14 @@ class _CommandWall: QtCore.QObject.connect(value1,QtCore.SIGNAL("returnPressed()"),value2.setFocus) QtCore.QObject.connect(value1,QtCore.SIGNAL("returnPressed()"),value2.selectAll) QtCore.QObject.connect(value2,QtCore.SIGNAL("returnPressed()"),self.createFromGUI) + QtCore.QObject.connect(matCombo,QtCore.SIGNAL("currentIndexChanged(int)"),self.setMat) return w + def setMat(self,d): + if d <= len(self.multimats): + self.MultiMat = self.multimats[d-1] + FreeCAD.LastArchMultiMaterial = self.MultiMat.Name + def setLength(self,d): self.lengthValue = d @@ -374,7 +398,9 @@ class _CommandWall: def createFromGUI(self): FreeCAD.ActiveDocument.openTransaction(translate("Arch","Create Wall")) FreeCADGui.addModule("Arch") - FreeCADGui.doCommand('Arch.makeWall(length='+str(self.lengthValue)+',width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")') + FreeCADGui.doCommand('wall = Arch.makeWall(length='+str(self.lengthValue)+',width='+str(self.Width)+',height='+str(self.Height)+',align="'+str(self.Align)+'")') + if self.MultiMat: + FreeCADGui.doCommand("wall.Material = FreeCAD.ActiveDocument."+self.MultiMat.Name) FreeCAD.ActiveDocument.commitTransaction() FreeCAD.ActiveDocument.recompute() if hasattr(FreeCADGui,"draftToolBar"): @@ -436,6 +462,7 @@ class _Wall(ArchComponent.Component): obj.Align = ['Left','Right','Center'] obj.Role = Roles self.Type = "Wall" + obj.Role = "Wall" def execute(self,obj): "builds the wall shape" @@ -716,11 +743,11 @@ class _ViewProviderWall(ArchComponent.ViewProviderComponent): ArchComponent.ViewProviderComponent.attach(self,vobj) def updateData(self,obj,prop): - if prop in ["Placement","Shape"]: + if prop in ["Placement","Shape","Material"]: if obj.ViewObject.DisplayMode == "Footprint": obj.ViewObject.Proxy.setDisplayMode("Footprint") if hasattr(obj,"Material"): - if obj.Material: + if obj.Material and obj.Shape: if hasattr(obj.Material,"Materials"): if len(obj.Material.Materials) == len(obj.Shape.Solids): cols = [] @@ -733,9 +760,11 @@ class _ViewProviderWall(ArchComponent.ViewProviderComponent): if 'Transparency' in mat.Material: c = (c[0],c[1],c[2],float(mat.Material['Transparency'])) cols.extend([c for j in range(len(obj.Shape.Solids[i].Faces))]) - if obj.ViewObject.DiffuseColor != cols: - obj.ViewObject.DiffuseColor = cols + obj.ViewObject.DiffuseColor = cols ArchComponent.ViewProviderComponent.updateData(self,obj,prop) + if len(obj.ViewObject.DiffuseColor) > 1: + # force-reset colors if changed + obj.ViewObject.DiffuseColor = obj.ViewObject.DiffuseColor def getDisplayModes(self,vobj): modes = ArchComponent.ViewProviderComponent.getDisplayModes(self,vobj)+["Footprint"] diff --git a/src/Mod/Arch/ArchWindow.py b/src/Mod/Arch/ArchWindow.py index 571972f13d..7b54e7380c 100644 --- a/src/Mod/Arch/ArchWindow.py +++ b/src/Mod/Arch/ArchWindow.py @@ -656,6 +656,7 @@ class _Window(ArchComponent.Component): obj.setEditorMode("WindowParts",2) self.Type = "Window" obj.Role = Roles + obj.Role = "Window" obj.Proxy = self obj.MoveWithHost = True