First groundwork on Arch Schedule tool
This commit is contained in:
parent
baf0dc0524
commit
02f938ebdf
|
@ -49,3 +49,4 @@ from ArchEquipment import *
|
|||
from ArchCutPlane import *
|
||||
from ArchServer import *
|
||||
from ArchMaterial import *
|
||||
from ArchSchedule import *
|
||||
|
|
|
@ -120,8 +120,8 @@ class _ArchMaterial:
|
|||
|
||||
def execute(self,obj):
|
||||
if obj.Material and FreeCAD.GuiUp:
|
||||
if "Color" in obj.Material:
|
||||
c = tuple([float(f) for f in obj.Material['Color'].strip("()").split(",")])
|
||||
if "DiffuseColor" in obj.Material:
|
||||
c = tuple([float(f) for f in obj.Material['DiffuseColor'].strip("()").split(",")])
|
||||
for p in obj.InList:
|
||||
if hasattr(p,"BaseMaterial"):
|
||||
if p.BaseMaterial.Name == obj.Name:
|
||||
|
@ -191,9 +191,9 @@ class _ArchMaterialTaskPanel:
|
|||
self.form.FieldName.setText(self.obj.Label)
|
||||
if 'Description' in self.material:
|
||||
self.form.FieldDescription.setText(self.material['Description'])
|
||||
if 'Color' in self.material:
|
||||
if "(" in self.material['Color']:
|
||||
c = tuple([float(f) for f in self.material['Color'].strip("()").split(",")])
|
||||
if 'DiffuseColor' in self.material:
|
||||
if "(" in self.material['DiffuseColor']:
|
||||
c = tuple([float(f) for f in self.material['DiffuseColor'].strip("()").split(",")])
|
||||
self.color = QtGui.QColor()
|
||||
self.color.setRgbF(c[0],c[1],c[2])
|
||||
colorPix = QtGui.QPixmap(16,16)
|
||||
|
@ -208,7 +208,7 @@ class _ArchMaterialTaskPanel:
|
|||
"sets self.material from the contents of the task box"
|
||||
self.material['Name'] = self.form.FieldName.text()
|
||||
self.material['Description'] = self.form.FieldDescription.text()
|
||||
self.material['Color'] = str(self.color.getRgbF()[:3])
|
||||
self.material['DiffuseColor'] = str(self.color.getRgbF()[:3])
|
||||
self.material['StandardCode'] = self.form.FieldCode.text()
|
||||
self.material['ProductURL'] = self.form.FieldUrl.text()
|
||||
|
||||
|
|
247
src/Mod/Arch/ArchSchedule.py
Normal file
247
src/Mod/Arch/ArchSchedule.py
Normal file
|
@ -0,0 +1,247 @@
|
|||
# -*- coding: utf8 -*-
|
||||
|
||||
#***************************************************************************
|
||||
#* *
|
||||
#* Copyright (c) 2015 - Yorik van Havre <yorik@uncreated.net> *
|
||||
#* *
|
||||
#* This program is free software; you can redistribute it and/or modify *
|
||||
#* it under the terms of the GNU Lesser General Public License (LGPL) *
|
||||
#* as published by the Free Software Foundation; either version 2 of *
|
||||
#* the License, or (at your option) any later version. *
|
||||
#* for detail see the LICENCE text file. *
|
||||
#* *
|
||||
#* This program is distributed in the hope that it will be useful, *
|
||||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
#* GNU Library General Public License for more details. *
|
||||
#* *
|
||||
#* You should have received a copy of the GNU Library General Public *
|
||||
#* License along with this program; if not, write to the Free Software *
|
||||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
|
||||
#* USA *
|
||||
#* *
|
||||
#***************************************************************************
|
||||
|
||||
import FreeCAD, time
|
||||
if FreeCAD.GuiUp:
|
||||
import FreeCADGui, Arch_rc, os
|
||||
from PySide import QtCore, QtGui
|
||||
from DraftTools import translate
|
||||
|
||||
__title__ = "Arch Schedule Managment"
|
||||
__author__ = "Yorik van Havre"
|
||||
__url__ = "http://www.freecadweb.org"
|
||||
|
||||
|
||||
class _CommandArchSchedule:
|
||||
"the Arch Schedule command definition"
|
||||
def GetResources(self):
|
||||
return {'Pixmap': 'Arch_Schedule',
|
||||
'MenuText': QtCore.QT_TRANSLATE_NOOP("Arch_Schedule","Create schedule..."),
|
||||
'ToolTip': QtCore.QT_TRANSLATE_NOOP("Arch_Schedule","Creates a materials or areas schedule.")}
|
||||
|
||||
def Activated(self):
|
||||
taskd = _ArchScheduleTaskPanel()
|
||||
FreeCADGui.Control.showDialog(taskd)
|
||||
|
||||
def IsActive(self):
|
||||
if FreeCAD.ActiveDocument:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
|
||||
class _ArchScheduleTaskPanel:
|
||||
'''The editmode TaskPanel for MechanicalMaterial objects'''
|
||||
def __init__(self):
|
||||
self.form = FreeCADGui.PySideUic.loadUi(os.path.splitext(__file__)[0]+".ui")
|
||||
QtCore.QObject.connect(self.form.ComboType, QtCore.SIGNAL("currentIndexChanged(int)"), self.changeType)
|
||||
|
||||
def changeType(self,idx):
|
||||
"changes the type of schedule"
|
||||
if idx == 0:
|
||||
# quantities
|
||||
self.form.GroupQuantities.maximumHeight = 1677215
|
||||
elif idx == 1:
|
||||
# spaces
|
||||
self.form.GroupQuantities.maximumHeight = 17
|
||||
elif idx == 2:
|
||||
# windows
|
||||
self.form.GroupQuantities.maximumHeight = 17
|
||||
|
||||
def accept(self):
|
||||
sp = FreeCAD.ActiveDocument.addObject('Spreadsheet::Sheet','Schedule')
|
||||
if self.form.ComboType.currentIndex() == 0:
|
||||
self.fillMaterialsSchedule(sp)
|
||||
elif self.form.ComboType.currentIndex() == 1:
|
||||
self.fillSpacesSchedule(sp)
|
||||
FreeCADGui.Control.closeDialog()
|
||||
|
||||
def getRoles(self,roles):
|
||||
"gets all objects of the given roles in the document"
|
||||
objs = []
|
||||
for obj in FreeCAD.ActiveDocument.Objects:
|
||||
if obj.ViewObject.isVisible():
|
||||
if hasattr(obj,"Role"):
|
||||
for r in roles:
|
||||
if obj.Role == r:
|
||||
objs.append(obj)
|
||||
break
|
||||
return objs
|
||||
|
||||
def getMaterials(self,objs):
|
||||
"classify the given objects by material"
|
||||
res = {}
|
||||
for obj in objs:
|
||||
if hasattr(obj,"BaseMaterial"):
|
||||
if obj.BaseMaterial:
|
||||
res.setdefault(obj.BaseMaterial.Name,[]).append(obj)
|
||||
return res
|
||||
|
||||
def getEntry(self,mat,entry):
|
||||
"returns the given entry from a given material name"
|
||||
res = ""
|
||||
m = FreeCAD.ActiveDocument.getObject(mat)
|
||||
if m:
|
||||
if m.Material:
|
||||
if entry in m.Material.keys():
|
||||
res = m.Material[entry].encode('utf8')
|
||||
return res
|
||||
|
||||
def fillMaterialsSchedule(self,sp):
|
||||
"creates a materials schedule in the given spreadsheet"
|
||||
|
||||
# table title
|
||||
|
||||
col = self.form.FieldStartCell.text()[0]
|
||||
row = int(self.form.FieldStartCell.text()[1:])
|
||||
global volunit,curunit
|
||||
volunit = self.form.FieldVolumeUnit.text().encode("utf8")
|
||||
curunit = self.form.FieldCurrencyUnit.text().encode("utf8")
|
||||
|
||||
sec = 1
|
||||
sp.set(col+str(row), translate("Arch","Quantities schedule"))
|
||||
row += 1
|
||||
sp.set(col+str(row), translate("Arch","Project") + ": " + FreeCAD.ActiveDocument.Label)
|
||||
row += 1
|
||||
sp.set(col+str(row), translate("Arch","Date") + ": " + time.asctime())
|
||||
row += 2
|
||||
|
||||
# column headers
|
||||
|
||||
end = 1
|
||||
sp.set(chr(ord(col)+end)+str(row), translate("Arch","Material"))
|
||||
end += 1
|
||||
if self.form.CheckDescription.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Description"))
|
||||
end += 1
|
||||
if self.form.CheckColor.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Color"))
|
||||
end += 1
|
||||
if self.form.CheckFinish.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Finish"))
|
||||
end += 1
|
||||
if self.form.CheckUrl.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","URL"))
|
||||
end += 1
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Item"))
|
||||
end += 1
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Volume")+" ("+volunit+")")
|
||||
end += 1
|
||||
if self.form.CheckPrice.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Unit price")+" ("+curunit+"/"+volunit+")")
|
||||
end += 1
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Total price")+" ("+curunit+")")
|
||||
row += 2
|
||||
|
||||
# volume-based row data
|
||||
|
||||
if self.form.CheckStructures.isChecked():
|
||||
row,col,sec = self.printVolume(sp,"Column",translate("Arch","Columns"),row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Beam",translate("Arch","Beams"),row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Slab",translate("Arch","Slabs"),row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Foundation",translate("Arch","Foundations"),row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Pile",None,row,col,sec)
|
||||
if self.form.CheckStairs.isChecked():
|
||||
row,col,sec = self.printVolume(sp,"Stair",translate("Arch","Stairs"),row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Stair Flight",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Ramp",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Ramp Flight",None,row,col,sec)
|
||||
if self.form.CheckWalls.isChecked():
|
||||
row,col,sec = self.printVolume(sp,"Wall",translate("Arch","Walls"),row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Wall Layer",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Curtain Wall",None,row,col,sec)
|
||||
if self.form.CheckOthers.isChecked():
|
||||
sp.set(col+str(row), str(sec) + ". " + translate("Arch","Miscellaneous"))
|
||||
sec += 1
|
||||
row += 2
|
||||
row,col,sec = self.printVolume(sp,"Chimney",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Covering",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Shading Device",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Member",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Railing",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Tendon",None,row,col,sec)
|
||||
row,col,sec = self.printVolume(sp,"Undefined",None,row,col,sec)
|
||||
|
||||
# TODO area: Covering Door Plate Rebar Roof Window
|
||||
# TODO count: Furniture Hydro Equipment Electric Equipment
|
||||
|
||||
def printVolume(self,sp,role,title,row,col,sec):
|
||||
"print object type quantities to the spreadsheet"
|
||||
|
||||
objs = self.getRoles([role])
|
||||
totprice = 0
|
||||
if objs:
|
||||
if title:
|
||||
sp.set(col+str(row), str(sec) + ". " + title)
|
||||
sec += 1
|
||||
row += 2
|
||||
mats = self.getMaterials(objs)
|
||||
for mat,mobjs in mats.items():
|
||||
end = 1
|
||||
sp.set(chr(ord(col)+end)+str(row),self.getEntry(mat,"Name"))
|
||||
end += 1
|
||||
if self.form.CheckDescription.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),self.getEntry(mat,"Description"))
|
||||
end += 1
|
||||
if self.form.CheckColor.isChecked():
|
||||
if self.getEntry(mat,"DiffuseColor"):
|
||||
sp.setBackground(chr(ord(col)+end)+str(row),tuple([float(f) for f in self.getEntry(mat,"DiffuseColor").strip("()").split(",")]))
|
||||
end += 1
|
||||
if self.form.CheckFinish.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),self.getEntry(mat,"Finish"))
|
||||
end += 1
|
||||
if self.form.CheckUrl.isChecked():
|
||||
sp.set(chr(ord(col)+end)+str(row),self.getEntry(mat,"ProductURL"))
|
||||
end += 1
|
||||
total = 0
|
||||
for mobj in mobjs:
|
||||
if not self.form.CheckOnlyShowTotals.isChecked():
|
||||
v = FreeCAD.Units.Quantity(mobj.Shape.Volume,FreeCAD.Units.Volume).getValueAs(volunit.replace("³","^3")).Value
|
||||
sp.set(chr(ord(col)+end)+str(row),mobj.Label)
|
||||
sp.set(chr(ord(col)+end+1)+str(row),str(v))
|
||||
total += v
|
||||
if self.form.CheckPrice.isChecked():
|
||||
sp.set(chr(ord(col)+end+2)+str(row),self.getEntry(mat,"SpecificPrice"))
|
||||
sp.set(chr(ord(col)+end+3)+str(row),"="+chr(ord(col)+end+1)+str(row)+"*"+chr(ord(col)+end+2)+str(row))
|
||||
row += 1
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Total"))
|
||||
sp.set(chr(ord(col)+end+1)+str(row),str(total))
|
||||
if self.form.CheckPrice.isChecked():
|
||||
sp.set(chr(ord(col)+end+2)+str(row),self.getEntry(mat,"SpecificPrice"))
|
||||
sp.set(chr(ord(col)+end+3)+str(row),"="+chr(ord(col)+end+1)+str(row)+"*"+chr(ord(col)+end+2)+str(row))
|
||||
try:
|
||||
totprice += total * float(self.getEntry(mat,"SpecificPrice"))
|
||||
except:
|
||||
print "Arch.Schedule: Unable to add price"
|
||||
row += 2
|
||||
if self.form.CheckPrice.isChecked():
|
||||
if totprice:
|
||||
sp.set(chr(ord(col)+end)+str(row),translate("Arch","Total")+" "+title)
|
||||
sp.set(chr(ord(col)+end+3)+str(row),str(totprice))
|
||||
row += 2
|
||||
return row,col,sec
|
||||
|
||||
|
||||
if FreeCAD.GuiUp:
|
||||
FreeCADGui.addCommand('Arch_Schedule',_CommandArchSchedule())
|
343
src/Mod/Arch/ArchSchedule.ui
Normal file
343
src/Mod/Arch/ArchSchedule.ui
Normal file
|
@ -0,0 +1,343 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Form</class>
|
||||
<widget class="QWidget" name="Form">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>211</width>
|
||||
<height>734</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>General</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QComboBox" name="ComboType">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Quantities</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Spaces</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Doors and windows</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Start cell</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="FieldStartCell">
|
||||
<property name="text">
|
||||
<string>A1</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Area unit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="FieldAreaUnit">
|
||||
<property name="text">
|
||||
<string>m²</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Volume unit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="FieldVolumeUnit">
|
||||
<property name="text">
|
||||
<string>m³</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Currency unit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="toolTip">
|
||||
<string>This must match what is stored in the project materials. No conversion will be done.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset theme="messagebox_warning">
|
||||
<normaloff/>
|
||||
</iconset>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="FieldCurrencyUnit">
|
||||
<property name="text">
|
||||
<string>€</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="GroupQuantities">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>1677215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Quantities</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckOnlyShowTotals">
|
||||
<property name="text">
|
||||
<string>Only show totals</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckDescription">
|
||||
<property name="text">
|
||||
<string>Add material description</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckColor">
|
||||
<property name="text">
|
||||
<string>Add material color</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckFinish">
|
||||
<property name="text">
|
||||
<string>Add material finish</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckUrl">
|
||||
<property name="text">
|
||||
<string>Add material URL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckPrice">
|
||||
<property name="text">
|
||||
<string>Add price calculation</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckStructures">
|
||||
<property name="text">
|
||||
<string>Add structures</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckStairs">
|
||||
<property name="text">
|
||||
<string>Add stairs</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckWalls">
|
||||
<property name="text">
|
||||
<string>Add walls</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckOthers">
|
||||
<property name="text">
|
||||
<string>Add all other roles</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckFloors">
|
||||
<property name="text">
|
||||
<string>Add floors</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckCeilings">
|
||||
<property name="text">
|
||||
<string>Add ceilings</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckRoofs">
|
||||
<property name="text">
|
||||
<string>Add roofs</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckWindows">
|
||||
<property name="text">
|
||||
<string>Add windows and doors</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckPanels">
|
||||
<property name="text">
|
||||
<string>Add panels</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckEquipments">
|
||||
<property name="text">
|
||||
<string>Add equipments</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CheckFurniture">
|
||||
<property name="text">
|
||||
<string>Add furniture</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
|
@ -125,6 +125,8 @@ class _Stairs(ArchComponent.Component):
|
|||
obj.setEditorMode("RiserHeight",1)
|
||||
obj.setEditorMode("BlondelRatio",1)
|
||||
self.Type = "Stairs"
|
||||
self.Role = ["Stair","Stair Flight"]
|
||||
self.Role = "Stair"
|
||||
|
||||
|
||||
def execute(self,obj):
|
||||
|
|
|
@ -74,7 +74,7 @@ class ArchWorkbench(Workbench):
|
|||
"Arch_Window","Arch_Roof","Arch_Axis",
|
||||
"Arch_SectionPlane","Arch_Space","Arch_Stairs",
|
||||
"Arch_Panel","Arch_Equipment",
|
||||
"Arch_Frame","Arch_Material","Arch_CutPlane",
|
||||
"Arch_Frame","Arch_Material","Arch_Schedule","Arch_CutPlane",
|
||||
"Arch_Add","Arch_Remove","Arch_Survey"]
|
||||
self.utilities = ["Arch_Component","Arch_SplitMesh","Arch_MeshToShape",
|
||||
"Arch_SelectNonSolidMeshes","Arch_RemoveShape",
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
<file>icons/Arch_Component.svg</file>
|
||||
<file>icons/Arch_Material.svg</file>
|
||||
<file>icons/Arch_Material_Group.svg</file>
|
||||
<file>icons/Arch_Schedule.svg</file>
|
||||
<file>ui/archprefs-base.ui</file>
|
||||
<file>ui/archprefs-defaults.ui</file>
|
||||
<file>ui/archprefs-import.ui</file>
|
||||
|
|
164
src/Mod/Arch/Resources/icons/Arch_Schedule.svg
Normal file
164
src/Mod/Arch/Resources/icons/Arch_Schedule.svg
Normal file
|
@ -0,0 +1,164 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64px"
|
||||
height="64px"
|
||||
id="svg2860"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="Spreadsheet.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs2862">
|
||||
<linearGradient
|
||||
id="linearGradient3763">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop3765" />
|
||||
<stop
|
||||
style="stop-color:#ffa600;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop3767" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3692"
|
||||
cx="45.883327"
|
||||
cy="28.869568"
|
||||
fx="45.883327"
|
||||
fy="28.869568"
|
||||
r="19.467436"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3703"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="135.38333"
|
||||
cy="97.369568"
|
||||
fx="135.38333"
|
||||
fy="97.369568"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(0.97435,0.2250379,-0.4623105,2.0016728,48.487554,-127.99883)" />
|
||||
<linearGradient
|
||||
id="linearGradient3377">
|
||||
<stop
|
||||
id="stop3379"
|
||||
offset="0"
|
||||
style="stop-color:#faff2b;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop3381"
|
||||
offset="1"
|
||||
style="stop-color:#ffaa00;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3377"
|
||||
id="radialGradient3705"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
cx="148.88333"
|
||||
cy="81.869568"
|
||||
fx="148.88333"
|
||||
fy="81.869568"
|
||||
r="19.467436"
|
||||
gradientTransform="matrix(1.3852588,-0.05136783,0.03705629,0.9993132,-60.392403,7.7040438)" />
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 32 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="64 : 32 : 1"
|
||||
inkscape:persp3d-origin="32 : 21.333333 : 1"
|
||||
id="perspective2868" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient3763"
|
||||
id="linearGradient3769"
|
||||
x1="29.272728"
|
||||
y1="9.2727289"
|
||||
x2="29.09091"
|
||||
y2="56.909092"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7.7781746"
|
||||
inkscape:cx="23.7211"
|
||||
inkscape:cy="29.391527"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1053"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata2865">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
style="color:#000000;fill:url(#linearGradient3769);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect3002"
|
||||
width="56.18182"
|
||||
height="46.545456"
|
||||
x="4"
|
||||
y="9.272728" />
|
||||
<rect
|
||||
style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
|
||||
id="rect3002-9"
|
||||
width="56.18182"
|
||||
height="46.545456"
|
||||
x="4"
|
||||
y="9.272728" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="m 4,20.545455 55.636364,0"
|
||||
id="path3790"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
d="M 20.909091,9.6363636 20.909091,56"
|
||||
id="path3792"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 4,32.429811 55.090909,0"
|
||||
id="path3794"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 4,44.483064 55.636364,0"
|
||||
id="path3796"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
Loading…
Reference in New Issue
Block a user