Arch: Fixed multilayer wall colors + added control in wall creation panel + fixed default roles

This commit is contained in:
Yorik van Havre
2017-05-05 12:45:41 -03:00
parent 37a62b4096
commit aa65230d4c
6 changed files with 49 additions and 15 deletions

View File

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

View File

@@ -105,6 +105,7 @@ class _Frame(ArchComponent.Component):
self.Type = "Frame"
obj.Align = True
obj.Role = Roles
obj.Role = "Railing"
def execute(self,obj):

View File

@@ -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):

View File

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

View File

@@ -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"]

View File

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