22
__title__ = "FreeCAD Precast concrete module"
23
__author__ = "Yorik van Havre"
24
__url__ = "https://www.freecad.org"
26
"""This module contains tools to build basic precast concrete elements:
27
Beams, pillars, slabs and panels"""
29
import ArchCommands,ArchComponent,FreeCAD
30
from FreeCAD import Vector
31
from draftutils import params
34
from draftutils.translate import translate
35
from PySide.QtCore import QT_TRANSLATE_NOOP
38
def translate(ctxt,txt):
40
def QT_TRANSLATE_NOOP(ctxt,txt):
51
class _Precast(ArchComponent.Component):
53
"The base Precast class"
55
def __init__(self,obj):
57
ArchComponent.Component.__init__(self,obj)
58
_Precast.setProperties(self,obj)
60
def setProperties(self,obj):
62
pl = obj.PropertiesList
63
if not "Length" in pl:
64
obj.addProperty("App::PropertyDistance","Length","Structure",QT_TRANSLATE_NOOP("App::Property","The length of this element"))
66
obj.addProperty("App::PropertyDistance","Width","Structure",QT_TRANSLATE_NOOP("App::Property","The width of this element"))
67
if not "Height" in pl:
68
obj.addProperty("App::PropertyDistance","Height","Structure",QT_TRANSLATE_NOOP("App::Property","The height of this element"))
70
obj.addProperty("App::PropertyVectorList","Nodes","Structure",QT_TRANSLATE_NOOP("App::Property","The structural nodes of this element"))
73
def onDocumentRestored(self,obj):
75
ArchComponent.Component.onDocumentRestored(self,obj)
76
_Precast.setProperties(self,obj)
78
def execute(self,obj):
84
class _PrecastBeam(_Precast):
88
def __init__(self,obj):
90
_Precast.__init__(self,obj)
91
self.setProperties(obj)
94
def setProperties(self,obj):
96
pl = obj.PropertiesList
97
if not "Chamfer" in pl:
98
obj.addProperty("App::PropertyDistance","Chamfer","Beam",QT_TRANSLATE_NOOP("App::Property","The size of the chamfer of this element"))
99
if not "DentLength" in pl:
100
obj.addProperty("App::PropertyDistance","DentLength","Beam",QT_TRANSLATE_NOOP("App::Property","The dent length of this element"))
101
if not "DentHeight" in pl:
102
obj.addProperty("App::PropertyDistance","DentHeight","Beam",QT_TRANSLATE_NOOP("App::Property","The dent height of this element"))
103
if not "Dents" in pl:
104
obj.addProperty("App::PropertyStringList","Dents","Beam",QT_TRANSLATE_NOOP("App::Property","The dents of this element"))
106
def onDocumentRestored(self,obj):
108
_Precast.onDocumentRestored(self,obj)
109
self.setProperties(obj)
111
def execute(self,obj):
117
length = obj.Length.Value
118
width = obj.Width.Value
119
height = obj.Height.Value
120
chamfer = obj.Chamfer.Value
121
dentlength = obj.DentLength.Value
122
dentheight = obj.DentHeight.Value
128
or chamfer >= width / 2 \
129
or chamfer >= height / 2:
130
FreeCAD.Console.PrintWarning(obj.Label + " " + translate("Arch", "has a null shape") + "\n")
136
p.append(Vector(0,chamfer,0))
137
p.append(Vector(0,width-chamfer,0))
138
p.append(Vector(0,width,chamfer))
139
p.append(Vector(0,width,height-chamfer))
140
p.append(Vector(0,width-chamfer,height))
141
p.append(Vector(0,chamfer,height))
142
p.append(Vector(0,0,height-chamfer))
143
p.append(Vector(0,0,chamfer))
145
p.append(Vector(0,0,0))
146
p.append(Vector(0,width,0))
147
p.append(Vector(0,width,height))
148
p.append(Vector(0,0,height))
150
p = Part.makePolygon(p)
152
shape = f.extrude(Vector(length,0,0))
153
if (dentlength > 0) and (dentheight > 0):
155
p.append(Vector(0,0,0))
156
p.append(Vector(dentlength,0,0))
157
p.append(Vector(dentlength,width,0))
158
p.append(Vector(0,width,0))
160
p = Part.makePolygon(p)
162
d1 = f.extrude(Vector(0,0,dentheight))
164
d2.translate(Vector(length-dentlength,0,0))
165
shape = shape.cut(d1)
166
shape = shape.cut(d2)
168
dent = dent.split(";")
170
dentlength = float(dent[0])
171
dentwidth = float(dent[1])
172
dentheight = float(dent[2])
173
dentslant = float(dent[3])
174
dentchamfer = chamfer
175
dentlevel = float(dent[4])
176
dentrotation = float(dent[5])
177
dentoffset = float(dent[6])
178
if (dentlength == 0) or (dentwidth == 0) or (dentheight == 0):
180
if dentslant >= dentheight:
183
p.append(Vector(0-dentchamfer,0,0))
184
p.append(Vector(dentlength,0,dentslant))
185
p.append(Vector(dentlength,0,dentheight))
186
p.append(Vector(0-dentchamfer,0,dentheight))
188
p = Part.makePolygon(p)
190
dentshape = f.extrude(Vector(0,dentwidth,0))
191
dentshape.rotate(Vector(0,0,0),Vector(0,0,1),dentrotation)
192
if dentrotation == 0:
193
dentshape.translate(Vector(length,dentoffset,0))
194
elif dentrotation == 90:
195
dentshape.translate(Vector(length-dentoffset,width,0))
196
elif dentrotation == 180:
197
dentshape.translate(Vector(0,width-dentoffset,0))
198
elif dentrotation == 270:
199
dentshape.translate(Vector(dentoffset,0,0))
200
dentshape.translate(Vector(0,0,dentlevel))
201
shape = shape.fuse(dentshape)
202
shape = self.processSubShapes(obj,shape,pl)
203
self.applyShape(obj,shape,pl)
206
class _PrecastIbeam(_Precast):
210
def __init__(self,obj):
212
_Precast.__init__(self,obj)
213
self.setProperties(obj)
216
def setProperties(self,obj):
218
pl = obj.PropertiesList
219
if not "Chamfer" in pl:
220
obj.addProperty("App::PropertyDistance","Chamfer","Beam",QT_TRANSLATE_NOOP("App::Property","The chamfer length of this element"))
221
if not "BeamBase" in pl:
222
obj.addProperty("App::PropertyDistance","BeamBase","Beam",QT_TRANSLATE_NOOP("App::Property","The base length of this element"))
224
def onDocumentRestored(self,obj):
226
_Precast.onDocumentRestored(self,obj)
227
self.setProperties(obj)
229
def execute(self,obj):
235
length = obj.Length.Value
236
width = obj.Width.Value
237
height = obj.Height.Value
238
base = obj.BeamBase.Value
239
slant = obj.Chamfer.Value
244
or slant * 2 >= width \
245
or base * 2 + slant * 2 >= height:
246
FreeCAD.Console.PrintWarning(obj.Label + " " + translate("Arch", "has a null shape") + "\n")
251
p.append(Vector(0,0,0))
252
p.append(Vector(0,0,base))
253
p.append(Vector(0,slant,base+slant))
254
p.append(Vector(0,slant,height-(base+slant)))
255
p.append(Vector(0,0,height-base))
256
p.append(Vector(0,0,height))
257
p.append(Vector(0,width,height))
258
p.append(Vector(0,width,height-base))
259
p.append(Vector(0,width-slant,height-(base+slant)))
260
p.append(Vector(0,width-slant,base+slant))
261
p.append(Vector(0,width,base))
262
p.append(Vector(0,width,0))
264
p = Part.makePolygon(p)
266
shape = f.extrude(Vector(length,0,0))
268
shape = self.processSubShapes(obj,shape,pl)
269
self.applyShape(obj,shape,pl)
272
class _PrecastPillar(_Precast):
276
def __init__(self,obj):
278
_Precast.__init__(self,obj)
279
self.setProperties(obj)
280
obj.IfcType = "Column"
282
def setProperties(self,obj):
284
pl = obj.PropertiesList
285
if not "Chamfer" in pl:
286
obj.addProperty("App::PropertyDistance","Chamfer","Column",QT_TRANSLATE_NOOP("App::Property","The size of the chamfer of this element"))
287
if not "GrooveDepth" in pl:
288
obj.addProperty("App::PropertyDistance","GrooveDepth","Column",QT_TRANSLATE_NOOP("App::Property","The groove depth of this element"))
289
if not "GrooveHeight" in pl:
290
obj.addProperty("App::PropertyDistance","GrooveHeight","Column",QT_TRANSLATE_NOOP("App::Property","The groove height of this element"))
291
if not "GrooveSpacing" in pl:
292
obj.addProperty("App::PropertyDistance","GrooveSpacing","Column",QT_TRANSLATE_NOOP("App::Property","The spacing between the grooves of this element"))
293
if not "GrooveNumber" in pl:
294
obj.addProperty("App::PropertyInteger","GrooveNumber","Column",QT_TRANSLATE_NOOP("App::Property","The number of grooves of this element"))
295
if not "Dents" in pl:
296
obj.addProperty("App::PropertyStringList","Dents","Column",QT_TRANSLATE_NOOP("App::Property","The dents of this element"))
298
def onDocumentRestored(self,obj):
300
_Precast.onDocumentRestored(self,obj)
301
self.setProperties(obj)
303
def execute(self,obj):
309
length = obj.Length.Value
310
width = obj.Width.Value
311
height = obj.Height.Value
312
chamfer = obj.Chamfer.Value
313
groovedepth = obj.GrooveDepth.Value
314
grooveheight = obj.GrooveHeight.Value
315
spacing = obj.GrooveSpacing.Value
316
number = obj.GrooveNumber
322
or chamfer >= width / 2 \
323
or chamfer >= length / 2:
324
FreeCAD.Console.PrintWarning(obj.Label + " " + translate("Arch", "has a null shape") + "\n")
330
p.append(Vector(chamfer,0,0))
331
p.append(Vector(length-chamfer,0,0))
332
p.append(Vector(length,chamfer,0))
333
p.append(Vector(length,width-chamfer,0))
334
p.append(Vector(length-chamfer,width,0))
335
p.append(Vector(chamfer,width,0))
336
p.append(Vector(0,width-chamfer,0))
337
p.append(Vector(0,chamfer,0))
339
p.append(Vector(0,0,0))
340
p.append(Vector(length,0,0))
341
p.append(Vector(length,width,0))
342
p.append(Vector(0,width,0))
344
p = Part.makePolygon(p)
346
shape = f.extrude(Vector(0,0,height))
348
if (groovedepth > 0) and (grooveheight > 0) and (spacing > 0) and (number > 0) and (groovedepth < length/2) and (groovedepth < width/2):
350
p1.append(Vector(0,0,0))
351
p1.append(Vector(length,0,0))
352
p1.append(Vector(length,width,0))
353
p1.append(Vector(0,width,0))
355
p1 = Part.makePolygon(p1)
357
groove = f1.extrude(Vector(0,0,grooveheight))
359
p2.append(Vector(groovedepth,groovedepth,0))
360
p2.append(Vector(length-groovedepth,groovedepth,0))
361
p2.append(Vector(length-groovedepth,width-groovedepth,0))
362
p2.append(Vector(groovedepth,width-groovedepth,0))
364
p2 = Part.makePolygon(p2)
366
s = f2.extrude(Vector(0,0,grooveheight))
367
groove = groove.cut(s)
368
for i in range(number):
370
g.translate(Vector(0,0,spacing + i*(spacing+grooveheight)))
374
dent = dent.split(";")
376
dentlength = float(dent[0])
377
dentwidth = float(dent[1])
378
dentheight = float(dent[2])
379
dentslant = float(dent[3])
380
dentchamfer = chamfer
381
dentlevel = float(dent[4])
382
dentrotation = float(dent[5])
383
dentoffset = float(dent[6])
384
if (dentlength == 0) or (dentwidth == 0) or (dentheight == 0):
386
if dentslant >= dentheight:
389
p.append(Vector(0-dentchamfer,0,0))
390
p.append(Vector(dentlength,0,dentslant))
391
p.append(Vector(dentlength,0,dentheight))
392
p.append(Vector(0-dentchamfer,0,dentheight))
394
p = Part.makePolygon(p)
396
dentshape = f.extrude(Vector(0,dentwidth,0))
397
dentshape.rotate(Vector(0,0,0),Vector(0,0,1),dentrotation)
398
if dentrotation == 0:
399
dentshape.translate(Vector(length,dentoffset,0))
400
elif dentrotation == 90:
401
dentshape.translate(Vector(length-dentoffset,width,0))
402
elif dentrotation == 180:
403
dentshape.translate(Vector(0,width-dentoffset,0))
404
elif dentrotation == 270:
405
dentshape.translate(Vector(dentoffset,0,0))
406
dentshape.translate(Vector(0,0,dentlevel))
407
shape = shape.fuse(dentshape)
409
shape = self.processSubShapes(obj,shape,pl)
410
self.applyShape(obj,shape,pl)
413
class _PrecastPanel(_Precast):
417
def __init__(self,obj):
419
_Precast.__init__(self,obj)
420
self.setProperties(obj)
421
obj.IfcType = "Plate"
423
def setProperties(self,obj):
425
pl = obj.PropertiesList
426
if not "Chamfer" in pl:
427
obj.addProperty("App::PropertyDistance","Chamfer","Panel",QT_TRANSLATE_NOOP("App::Property","The size of the chamfer of this element"))
428
if not "DentWidth" in pl:
429
obj.addProperty("App::PropertyDistance","DentWidth","Panel",QT_TRANSLATE_NOOP("App::Property","The dent width of this element"))
430
if not "DentHeight" in pl:
431
obj.addProperty("App::PropertyDistance","DentHeight","Panel",QT_TRANSLATE_NOOP("App::Property","The dent height of this element"))
433
def onDocumentRestored(self,obj):
435
_Precast.onDocumentRestored(self,obj)
436
self.setProperties(obj)
438
def execute(self,obj):
444
length = obj.Length.Value
445
width = obj.Width.Value
446
height = obj.Height.Value
447
chamfer = obj.Chamfer.Value
448
dentheight = obj.DentHeight.Value
449
dentwidth = obj.DentWidth.Value
454
or chamfer + dentwidth >= width \
455
or dentheight >= height:
456
FreeCAD.Console.PrintWarning(obj.Label + " " + translate("Arch", "has a null shape") + "\n")
461
p.append(Vector(0,0,0))
462
p.append(Vector(length,0,0))
463
p.append(Vector(length,width,0))
464
p.append(Vector(0,width,0))
466
p = Part.makePolygon(p)
468
shape = f.extrude(Vector(0,0,height))
471
p.append(Vector(0,width-chamfer,0))
472
p.append(Vector(chamfer,width,0))
473
p.append(Vector(0,width,0))
475
p = Part.makePolygon(p)
477
s = f.extrude(Vector(0,0,height))
480
p.append(Vector(length,width-chamfer,0))
481
p.append(Vector(length-chamfer,width,0))
482
p.append(Vector(length,width,0))
484
p = Part.makePolygon(p)
486
s = f.extrude(Vector(0,0,height))
489
p.append(Vector(0,width-chamfer,0))
490
p.append(Vector(0,width,chamfer))
491
p.append(Vector(0,width,0))
493
p = Part.makePolygon(p)
495
s = f.extrude(Vector(length,0,0))
498
p.append(Vector(0,width-chamfer,height))
499
p.append(Vector(0,width,height-chamfer))
500
p.append(Vector(0,width,height))
502
p = Part.makePolygon(p)
504
s = f.extrude(Vector(length,0,0))
506
if (dentheight > 0) and (dentwidth > 0):
508
p.append(Vector(0,((width-chamfer)-dentwidth)/2,0))
509
p.append(Vector(0,((width-chamfer)-dentwidth)/2+dentwidth,0))
510
p.append(Vector(0,((width-chamfer)-dentwidth)/2+dentwidth,dentheight))
511
p.append(Vector(0,((width-chamfer)-dentwidth)/2,dentheight))
513
p = Part.makePolygon(p)
515
s = f.extrude(Vector(length,0,0))
517
s.translate(Vector(0,0,height))
518
shape = shape.fuse(s)
520
shape = self.processSubShapes(obj,shape,pl)
521
self.applyShape(obj,shape,pl)
524
class _PrecastSlab(_Precast):
528
def __init__(self,obj):
530
_Precast.__init__(self,obj)
531
self.setProperties(obj)
534
def setProperties(self,obj):
536
pl = obj.PropertiesList
537
if not "SlabType" in pl:
538
obj.addProperty("App::PropertyEnumeration","SlabType","Slab",QT_TRANSLATE_NOOP("App::Property","The type of this slab"))
539
obj.SlabType = ["Champagne","Hat"]
540
if not "SlabBase" in pl:
541
obj.addProperty("App::PropertyDistance","SlabBase","Slab",QT_TRANSLATE_NOOP("App::Property","The size of the base of this element"))
542
if not "HoleNumber" in pl:
543
obj.addProperty("App::PropertyInteger","HoleNumber","Slab",QT_TRANSLATE_NOOP("App::Property","The number of holes in this element"))
544
if not "HoleMajor" in pl:
545
obj.addProperty("App::PropertyDistance","HoleMajor","Slab",QT_TRANSLATE_NOOP("App::Property","The major radius of the holes of this element"))
546
if not "HoleMinor" in pl:
547
obj.addProperty("App::PropertyDistance","HoleMinor","Slab",QT_TRANSLATE_NOOP("App::Property","The minor radius of the holes of this element"))
548
if not "HoleSpacing" in pl:
549
obj.addProperty("App::PropertyDistance","HoleSpacing","Slab",QT_TRANSLATE_NOOP("App::Property","The spacing between the holes of this element"))
551
def onDocumentRestored(self,obj):
553
_Precast.onDocumentRestored(self,obj)
554
self.setProperties(obj)
556
def execute(self,obj):
562
slabtype = obj.SlabType
563
length = obj.Length.Value
564
width = obj.Width.Value
565
height = obj.Height.Value
566
base = obj.SlabBase.Value
567
holenumber = obj.HoleNumber
568
holemajor = obj.HoleMajor.Value
569
holeminor = obj.HoleMinor.Value
570
holespacing = obj.HoleSpacing.Value
572
slant = (height - base) / 3
574
base = min(height / 4, 50)
580
or width <= slant * 2 \
581
or height < base * 2 \
582
or (holenumber > 0 and (holespacing == 0 or holemajor == 0 or holeminor == 0)) \
583
or holemajor < holeminor:
584
FreeCAD.Console.PrintWarning(obj.Label + " " + translate("Arch", "has a null shape") + "\n")
589
if slabtype == "Champagne":
590
p.append(Vector(0,0,0))
591
p.append(Vector(0,slant,height-base))
592
p.append(Vector(0,0,height-base))
593
p.append(Vector(0,0,height))
594
p.append(Vector(0,width,height))
595
p.append(Vector(0,width,height-base))
596
p.append(Vector(0,width-slant,height-base))
597
p.append(Vector(0,width,0))
598
elif slabtype == "Hat":
599
p.append(Vector(0,0,0))
600
p.append(Vector(0,0,base))
601
p.append(Vector(0,slant,base))
602
p.append(Vector(0,slant*2,height))
603
p.append(Vector(0,width-slant*2,height))
604
p.append(Vector(0,width-slant,base))
605
p.append(Vector(0,width,base))
606
p.append(Vector(0,width,0))
610
p = Part.makePolygon(p)
612
shape = f.extrude(Vector(length,0,0))
615
holespan = holenumber * holeminor + (holenumber - 1) * holespacing
616
holestart = (width/2 - holespan/2) + holeminor/2
617
if holeminor != holemajor:
618
e = Part.Ellipse(Vector(0,0,0),Vector(0,holeminor/2,0),Vector(0,0,holemajor/2)).toShape()
619
e.translate(Vector(0,0,-holemajor/2))
621
e = Part.Circle(Vector(0,0,0),Vector(1,0,0),holemajor/2).toShape()
624
tube = f.extrude(Vector(length,0,0))
625
for i in range(holenumber):
626
x = holestart + i*(holeminor+holespacing)
628
s.translate(Vector(0,x,height/2))
631
shape = self.processSubShapes(obj,shape,pl)
632
self.applyShape(obj,shape,pl)
635
class _PrecastStairs(_Precast):
639
def __init__(self,obj):
641
_Precast.__init__(self,obj)
642
self.setProperties(obj)
643
obj.IfcType = "Stair"
645
def setProperties(self,obj):
647
pl = obj.PropertiesList
648
if not "DownLength" in pl:
649
obj.addProperty("App::PropertyDistance","DownLength","Stairs",QT_TRANSLATE_NOOP("App::Property","The length of the down floor of this element"))
650
if not "RiserNumber" in pl:
651
obj.addProperty("App::PropertyInteger","RiserNumber","Stairs",QT_TRANSLATE_NOOP("App::Property","The number of risers in this element"))
652
if not "Riser" in pl:
653
obj.addProperty("App::PropertyDistance","Riser","Stairs",QT_TRANSLATE_NOOP("App::Property","The riser height of this element"))
654
if not "Tread" in pl:
655
obj.addProperty("App::PropertyDistance","Tread","Stairs",QT_TRANSLATE_NOOP("App::Property","The tread depth of this element"))
657
def onDocumentRestored(self,obj):
659
_Precast.onDocumentRestored(self,obj)
660
self.setProperties(obj)
662
def execute(self,obj):
668
length = obj.Length.Value
669
width = obj.Width.Value
670
height = obj.Height.Value
671
downlength = obj.DownLength.Value
672
steps = obj.RiserNumber
673
riser = obj.Riser.Value
674
tread = obj.Tread.Value
681
FreeCAD.Console.PrintWarning(obj.Label + " " + translate("Arch", "has a null shape") + "\n")
691
p.append(Vector(0,downlength,0))
692
for i in range(steps-1):
693
p.append(Vector(0,0,riser))
694
p.append(Vector(0,tread,0))
695
p.append(Vector(0,0,riser))
696
p.append(Vector(0,length,0))
697
ang1 = math.atan(riser/tread)
699
rdist = math.tan(ang2)*height
700
if length > (tread+rdist):
701
p.append(Vector(0,0,-height))
702
p.append(Vector(0,-(length-(tread+rdist))))
704
rest = length-(tread+rdist)
705
addh = math.tan(ang1)*rest
706
p.append(Vector(0,0,-(height+addh)))
710
r.append(r[-1].add(m))
713
bdist = math.tan(ang1)*height
714
p.append(Vector(0,downlength+bdist,-height))
715
p.append(Vector(0,0,-height))
717
hdist = height*(math.tan(ang1))
718
p.append(Vector(0,hdist,0))
720
p = Part.makePolygon(p)
722
shape = f.extrude(Vector(width,0,0))
724
shape = self.processSubShapes(obj,shape,pl)
725
self.applyShape(obj,shape,pl)
728
class _ViewProviderPrecast(ArchComponent.ViewProviderComponent):
730
"The View Provider of the Precast object"
732
def __init__(self,vobj):
734
ArchComponent.ViewProviderComponent.__init__(self,vobj)
735
vobj.ShapeColor = ArchCommands.getDefaultColor("Structure")
740
if hasattr(self,"Object"):
741
if self.Object.CloneOf:
742
return ":/icons/Arch_Structure_Clone.svg"
743
return ":/icons/Arch_Structure_Tree.svg"
745
def setEdit(self, vobj, mode):
750
taskd = ArchComponent.ComponentTaskPanel()
751
taskd.obj = self.Object
753
if hasattr(self.Object,"Dents"):
754
self.dentd = _DentsTaskPanel()
755
self.dentd.form.show()
756
self.dentd.fillDents(self.Object.Dents)
757
taskd.form = [taskd.form,self.dentd.form]
758
FreeCADGui.Control.showDialog(taskd)
761
def unsetEdit(self, vobj, mode):
766
if hasattr(self,"dentd"):
767
self.Object.Dents = self.dentd.getValues()
769
FreeCADGui.Control.closeDialog()
773
class _PrecastTaskPanel:
775
'''The TaskPanel for precast creation'''
780
from PySide import QtCore, QtGui, QtSvgWidgets
781
self.form = QtGui.QWidget()
782
self.grid = QtGui.QGridLayout(self.form)
783
self.PrecastTypes = ["Beam","I-Beam","Pillar","Panel","Slab","Stairs"]
784
self.SlabTypes = ["Champagne","Hat"]
787
self.preview = QtSvgWidgets.QSvgWidget(":/ui/ParametersBeam.svg")
788
self.preview.setMaximumWidth(200)
789
self.preview.setMinimumHeight(120)
790
self.grid.addWidget(self.preview,0,0,1,2)
793
self.labelSlabType = QtGui.QLabel()
794
self.valueSlabType = QtGui.QComboBox()
795
self.valueSlabType.addItems(self.SlabTypes)
796
self.valueSlabType.setCurrentIndex(0)
797
self.grid.addWidget(self.labelSlabType,1,0,1,1)
798
self.grid.addWidget(self.valueSlabType,1,1,1,1)
800
self.labelChamfer = QtGui.QLabel()
801
self.valueChamfer = FreeCADGui.UiLoader().createWidget("Gui::InputField")
802
self.grid.addWidget(self.labelChamfer,2,0,1,1)
803
self.grid.addWidget(self.valueChamfer,2,1,1,1)
805
self.labelDentLength = QtGui.QLabel()
806
self.valueDentLength = FreeCADGui.UiLoader().createWidget("Gui::InputField")
807
self.grid.addWidget(self.labelDentLength,3,0,1,1)
808
self.grid.addWidget(self.valueDentLength,3,1,1,1)
810
self.labelDentWidth = QtGui.QLabel()
811
self.valueDentWidth = FreeCADGui.UiLoader().createWidget("Gui::InputField")
812
self.grid.addWidget(self.labelDentWidth,4,0,1,1)
813
self.grid.addWidget(self.valueDentWidth,4,1,1,1)
815
self.labelDentHeight = QtGui.QLabel()
816
self.valueDentHeight = FreeCADGui.UiLoader().createWidget("Gui::InputField")
817
self.grid.addWidget(self.labelDentHeight,5,0,1,1)
818
self.grid.addWidget(self.valueDentHeight,5,1,1,1)
820
self.labelBase = QtGui.QLabel()
821
self.valueBase = FreeCADGui.UiLoader().createWidget("Gui::InputField")
822
self.grid.addWidget(self.labelBase,6,0,1,1)
823
self.grid.addWidget(self.valueBase,6,1,1,1)
825
self.labelHoleNumber = QtGui.QLabel()
826
self.valueHoleNumber = QtGui.QSpinBox()
827
self.grid.addWidget(self.labelHoleNumber,7,0,1,1)
828
self.grid.addWidget(self.valueHoleNumber,7,1,1,1)
830
self.labelHoleMajor = QtGui.QLabel()
831
self.valueHoleMajor = FreeCADGui.UiLoader().createWidget("Gui::InputField")
832
self.grid.addWidget(self.labelHoleMajor,8,0,1,1)
833
self.grid.addWidget(self.valueHoleMajor,8,1,1,1)
835
self.labelHoleMinor = QtGui.QLabel()
836
self.valueHoleMinor = FreeCADGui.UiLoader().createWidget("Gui::InputField")
837
self.grid.addWidget(self.labelHoleMinor,9,0,1,1)
838
self.grid.addWidget(self.valueHoleMinor,9,1,1,1)
840
self.labelHoleSpacing = QtGui.QLabel()
841
self.valueHoleSpacing = FreeCADGui.UiLoader().createWidget("Gui::InputField")
842
self.grid.addWidget(self.labelHoleSpacing,10,0,1,1)
843
self.grid.addWidget(self.valueHoleSpacing,10,1,1,1)
845
self.labelGrooveNumber = QtGui.QLabel()
846
self.valueGrooveNumber = QtGui.QSpinBox()
847
self.grid.addWidget(self.labelGrooveNumber,11,0,1,1)
848
self.grid.addWidget(self.valueGrooveNumber,11,1,1,1)
850
self.labelGrooveDepth = QtGui.QLabel()
851
self.valueGrooveDepth = FreeCADGui.UiLoader().createWidget("Gui::InputField")
852
self.grid.addWidget(self.labelGrooveDepth,12,0,1,1)
853
self.grid.addWidget(self.valueGrooveDepth,12,1,1,1)
855
self.labelGrooveHeight = QtGui.QLabel()
856
self.valueGrooveHeight = FreeCADGui.UiLoader().createWidget("Gui::InputField")
857
self.grid.addWidget(self.labelGrooveHeight,13,0,1,1)
858
self.grid.addWidget(self.valueGrooveHeight,13,1,1,1)
860
self.labelGrooveSpacing = QtGui.QLabel()
861
self.valueGrooveSpacing = FreeCADGui.UiLoader().createWidget("Gui::InputField")
862
self.grid.addWidget(self.labelGrooveSpacing,14,0,1,1)
863
self.grid.addWidget(self.valueGrooveSpacing,14,1,1,1)
865
self.labelRiserNumber = QtGui.QLabel()
866
self.valueRiserNumber = QtGui.QSpinBox()
867
self.grid.addWidget(self.labelRiserNumber,15,0,1,1)
868
self.grid.addWidget(self.valueRiserNumber,15,1,1,1)
870
self.labelDownLength = QtGui.QLabel()
871
self.valueDownLength = FreeCADGui.UiLoader().createWidget("Gui::InputField")
872
self.grid.addWidget(self.labelDownLength,16,0,1,1)
873
self.grid.addWidget(self.valueDownLength,16,1,1,1)
875
self.labelRiser = QtGui.QLabel()
876
self.valueRiser = FreeCADGui.UiLoader().createWidget("Gui::InputField")
877
self.grid.addWidget(self.labelRiser,17,0,1,1)
878
self.grid.addWidget(self.valueRiser,17,1,1,1)
880
self.labelTread = QtGui.QLabel()
881
self.valueTread = FreeCADGui.UiLoader().createWidget("Gui::InputField")
882
self.grid.addWidget(self.labelTread,18,0,1,1)
883
self.grid.addWidget(self.valueTread,18,1,1,1)
886
QtCore.QObject.connect(self.valueChamfer,QtCore.SIGNAL("valueChanged(double)"),self.setChamfer)
887
QtCore.QObject.connect(self.valueDentLength,QtCore.SIGNAL("valueChanged(double)"),self.setDentLength)
888
QtCore.QObject.connect(self.valueDentWidth,QtCore.SIGNAL("valueChanged(double)"),self.setDentWidth)
889
QtCore.QObject.connect(self.valueDentHeight,QtCore.SIGNAL("valueChanged(double)"),self.setDentHeight)
890
QtCore.QObject.connect(self.valueBase,QtCore.SIGNAL("valueChanged(double)"),self.setBase)
891
QtCore.QObject.connect(self.valueHoleMajor,QtCore.SIGNAL("valueChanged(double)"),self.setHoleMajor)
892
QtCore.QObject.connect(self.valueHoleMinor,QtCore.SIGNAL("valueChanged(double)"),self.setHoleMinor)
893
QtCore.QObject.connect(self.valueHoleSpacing,QtCore.SIGNAL("valueChanged(double)"),self.setHoleSpacing)
894
QtCore.QObject.connect(self.valueGrooveDepth,QtCore.SIGNAL("valueChanged(double)"),self.setGrooveDepth)
895
QtCore.QObject.connect(self.valueGrooveHeight,QtCore.SIGNAL("valueChanged(double)"),self.setGrooveHeight)
896
QtCore.QObject.connect(self.valueGrooveSpacing,QtCore.SIGNAL("valueChanged(double)"),self.setGrooveSpacing)
897
QtCore.QObject.connect(self.valueDownLength,QtCore.SIGNAL("valueChanged(double)"),self.setDownLength)
898
QtCore.QObject.connect(self.valueRiser,QtCore.SIGNAL("valueChanged(double)"),self.setRiser)
899
QtCore.QObject.connect(self.valueTread,QtCore.SIGNAL("valueChanged(double)"),self.setTread)
902
self.restoreValue(self.valueChamfer, params.get_param_arch("PrecastChamfer"))
903
self.restoreValue(self.valueDentLength, params.get_param_arch("PrecastDentLength"))
904
self.restoreValue(self.valueDentWidth, params.get_param_arch("PrecastDentWidth"))
905
self.restoreValue(self.valueDentHeight, params.get_param_arch("PrecastDentHeight"))
906
self.restoreValue(self.valueBase, params.get_param_arch("PrecastBase"))
907
self.restoreValue(self.valueHoleMajor, params.get_param_arch("PrecastHoleMajor"))
908
self.restoreValue(self.valueHoleMinor, params.get_param_arch("PrecastHoleMinor"))
909
self.restoreValue(self.valueHoleSpacing, params.get_param_arch("PrecastHoleSpacing"))
910
self.restoreValue(self.valueGrooveDepth, params.get_param_arch("PrecastGrooveDepth"))
911
self.restoreValue(self.valueGrooveHeight, params.get_param_arch("PrecastGrooveHeight"))
912
self.restoreValue(self.valueGrooveSpacing, params.get_param_arch("PrecastGrooveSpacing"))
913
self.restoreValue(self.valueDownLength, params.get_param_arch("PrecastDownLength"))
914
self.restoreValue(self.valueRiser, params.get_param_arch("PrecastRiser"))
915
self.restoreValue(self.valueTread, params.get_param_arch("PrecastTread"))
917
self.retranslateUi(self.form)
920
def restoreValue(self, widget, val):
921
widget.setText(FreeCAD.Units.Quantity(val, FreeCAD.Units.Length).UserString)
925
d["SlabType"] = self.SlabTypes[self.valueSlabType.currentIndex()]
926
d["Chamfer"] = self.Chamfer
927
d["DentLength"] = self.DentLength
928
d["DentWidth"] = self.DentWidth
929
d["DentHeight"] = self.DentHeight
930
d["Base"] = self.Base
931
d["HoleNumber"] = self.valueHoleNumber.value()
932
d["HoleMajor"] = self.HoleMajor
933
d["HoleMinor"] = self.HoleMinor
934
d["HoleSpacing"] = self.HoleSpacing
935
d["GrooveNumber"] = self.valueGrooveNumber.value()
936
d["GrooveDepth"] = self.GrooveDepth
937
d["GrooveHeight"] = self.GrooveHeight
938
d["GrooveSpacing"] = self.GrooveSpacing
939
d["RiserNumber"] = self.valueRiserNumber.value()
940
d["DownLength"] = self.DownLength
941
d["Riser"] = self.Riser
942
d["Tread"] = self.Tread
943
if hasattr(self,"Dents"):
944
d["Dents"] = self.Dents.getValues()
947
def setChamfer(self,value):
949
params.set_param_arch("PrecastChamfer",value)
951
def setDentLength(self,value):
952
self.DentLength = value
953
params.set_param_arch("PrecastDentLength",value)
955
def setDentWidth(self,value):
956
self.DentWidth = value
957
params.set_param_arch("PrecastDentWidth",value)
959
def setDentHeight(self,value):
960
self.DentHeight = value
961
params.set_param_arch("PrecastDentHeight",value)
963
def setBase(self,value):
965
params.set_param_arch("PrecastBase",value)
967
def setHoleMajor(self,value):
968
self.HoleMajor = value
969
params.set_param_arch("PrecastHoleMajor",value)
971
def setHoleMinor(self,value):
972
self.HoleMinor = value
973
params.set_param_arch("PrecastHoleMinor",value)
975
def setHoleSpacing(self,value):
976
self.HoleSpacing = value
977
params.set_param_arch("PrecastHoleSpacing",value)
979
def setGrooveDepth(self,value):
980
self.GrooveDepth = value
981
params.set_param_arch("PrecastGrooveDepth",value)
983
def setGrooveHeight(self,value):
984
self.GrooveHeight = value
985
params.set_param_arch("PrecastGrooveHeight",value)
987
def setGrooveSpacing(self,value):
988
self.GrooveSpacing = value
989
params.set_param_arch("PrecastGrooveSpacing",value)
991
def setDownLength(self,value):
992
self.DownLength = value
993
params.set_param_arch("PrecastDownLength",value)
995
def setRiser(self,value):
997
params.set_param_arch("PrecastRiser",value)
999
def setTread(self,value):
1001
params.set_param_arch("PrecastTread",value)
1003
def retranslateUi(self, dialog):
1004
from PySide import QtGui
1005
self.form.setWindowTitle(translate("Arch", "Precast elements"))
1006
self.labelSlabType.setText(translate("Arch", "Slab type"))
1007
self.labelChamfer.setText(translate("Arch", "Chamfer"))
1008
self.labelDentLength.setText(translate("Arch", "Dent length"))
1009
self.labelDentWidth.setText(translate("Arch", "Dent width"))
1010
self.labelDentHeight.setText(translate("Arch", "Dent height"))
1011
self.labelBase.setText(translate("Arch", "Slab base"))
1012
self.labelHoleNumber.setText(translate("Arch", "Number of holes"))
1013
self.labelHoleMajor.setText(translate("Arch", "Major diameter of holes"))
1014
self.labelHoleMinor.setText(translate("Arch", "Minor diameter of holes"))
1015
self.labelHoleSpacing.setText(translate("Arch", "Spacing between holes"))
1016
self.labelGrooveNumber.setText(translate("Arch", "Number of grooves"))
1017
self.labelGrooveDepth.setText(translate("Arch", "Depth of grooves"))
1018
self.labelGrooveHeight.setText(translate("Arch", "Height of grooves"))
1019
self.labelGrooveSpacing.setText(translate("Arch", "Spacing between grooves"))
1020
self.labelRiserNumber.setText(translate("Arch", "Number of risers"))
1021
self.labelDownLength.setText(translate("Arch", "Length of down floor"))
1022
self.labelRiser.setText(translate("Arch", "Height of risers"))
1023
self.labelTread.setText(translate("Arch", "Depth of treads"))
1025
def setPreset(self,preset):
1027
if preset == "Beam":
1028
self.preview.load(":/ui/ParametersBeam.svg")
1029
self.labelSlabType.hide()
1030
self.valueSlabType.hide()
1031
self.labelChamfer.show()
1032
self.valueChamfer.show()
1033
self.labelDentLength.show()
1034
self.valueDentLength.show()
1035
self.labelDentWidth.hide()
1036
self.valueDentWidth.hide()
1037
self.labelDentHeight.show()
1038
self.valueDentHeight.show()
1039
self.labelBase.hide()
1040
self.valueBase.hide()
1041
self.labelHoleNumber.hide()
1042
self.valueHoleNumber.hide()
1043
self.labelHoleMajor.hide()
1044
self.valueHoleMajor.hide()
1045
self.labelHoleMinor.hide()
1046
self.valueHoleMinor.hide()
1047
self.labelHoleSpacing.hide()
1048
self.valueHoleSpacing.hide()
1049
self.labelGrooveNumber.hide()
1050
self.valueGrooveNumber.hide()
1051
self.labelGrooveDepth.hide()
1052
self.valueGrooveDepth.hide()
1053
self.labelGrooveHeight.hide()
1054
self.valueGrooveHeight.hide()
1055
self.labelGrooveSpacing.hide()
1056
self.valueGrooveSpacing.hide()
1057
self.valueHoleSpacing.hide()
1058
self.labelRiserNumber.hide()
1059
self.valueRiserNumber.hide()
1060
self.labelDownLength.hide()
1061
self.valueDownLength.hide()
1062
self.labelRiser.hide()
1063
self.valueRiser.hide()
1064
self.labelTread.hide()
1065
self.valueTread.hide()
1066
elif preset == "Pillar":
1067
self.preview.load(":/ui/ParametersPillar.svg")
1068
self.labelSlabType.hide()
1069
self.valueSlabType.hide()
1070
self.labelChamfer.show()
1071
self.valueChamfer.show()
1072
self.labelDentLength.hide()
1073
self.valueDentLength.hide()
1074
self.labelDentWidth.hide()
1075
self.valueDentWidth.hide()
1076
self.labelDentHeight.hide()
1077
self.valueDentHeight.hide()
1078
self.labelBase.hide()
1079
self.valueBase.hide()
1080
self.labelHoleNumber.hide()
1081
self.valueHoleNumber.hide()
1082
self.labelHoleMajor.hide()
1083
self.valueHoleMajor.hide()
1084
self.labelHoleMinor.hide()
1085
self.valueHoleMinor.hide()
1086
self.labelHoleSpacing.hide()
1087
self.valueHoleSpacing.hide()
1088
self.labelGrooveNumber.show()
1089
self.valueGrooveNumber.show()
1090
self.labelGrooveDepth.show()
1091
self.valueGrooveDepth.show()
1092
self.labelGrooveHeight.show()
1093
self.valueGrooveHeight.show()
1094
self.labelGrooveSpacing.show()
1095
self.valueGrooveSpacing.show()
1096
self.labelRiserNumber.hide()
1097
self.valueRiserNumber.hide()
1098
self.labelDownLength.hide()
1099
self.valueDownLength.hide()
1100
self.labelRiser.hide()
1101
self.valueRiser.hide()
1102
self.labelTread.hide()
1103
self.valueTread.hide()
1104
elif preset == "Panel":
1105
self.preview.load(":/ui/ParametersPanel.svg")
1106
self.labelSlabType.hide()
1107
self.valueSlabType.hide()
1108
self.labelChamfer.show()
1109
self.valueChamfer.show()
1110
self.labelDentLength.hide()
1111
self.valueDentLength.hide()
1112
self.labelDentWidth.show()
1113
self.valueDentWidth.show()
1114
self.labelDentHeight.show()
1115
self.valueDentHeight.show()
1116
self.labelBase.hide()
1117
self.valueBase.hide()
1118
self.labelHoleNumber.hide()
1119
self.valueHoleNumber.hide()
1120
self.labelHoleMajor.hide()
1121
self.valueHoleMajor.hide()
1122
self.labelHoleMinor.hide()
1123
self.valueHoleMinor.hide()
1124
self.labelHoleSpacing.hide()
1125
self.valueHoleSpacing.hide()
1126
self.labelGrooveNumber.hide()
1127
self.valueGrooveNumber.hide()
1128
self.labelGrooveDepth.hide()
1129
self.valueGrooveDepth.hide()
1130
self.labelGrooveHeight.hide()
1131
self.valueGrooveHeight.hide()
1132
self.labelGrooveSpacing.hide()
1133
self.valueGrooveSpacing.hide()
1134
self.labelRiserNumber.hide()
1135
self.valueRiserNumber.hide()
1136
self.labelDownLength.hide()
1137
self.valueDownLength.hide()
1138
self.labelRiser.hide()
1139
self.valueRiser.hide()
1140
self.labelTread.hide()
1141
self.valueTread.hide()
1142
elif preset == "Slab":
1143
self.preview.load(":/ui/ParametersSlab.svg")
1144
self.labelSlabType.show()
1145
self.valueSlabType.show()
1146
self.labelChamfer.hide()
1147
self.valueChamfer.hide()
1148
self.labelDentLength.hide()
1149
self.valueDentLength.hide()
1150
self.labelDentWidth.hide()
1151
self.valueDentWidth.hide()
1152
self.labelDentHeight.hide()
1153
self.valueDentHeight.hide()
1154
self.labelBase.show()
1155
self.valueBase.show()
1156
self.labelHoleNumber.show()
1157
self.valueHoleNumber.show()
1158
self.labelHoleMajor.show()
1159
self.valueHoleMajor.show()
1160
self.labelHoleMinor.show()
1161
self.valueHoleMinor.show()
1162
self.labelHoleSpacing.show()
1163
self.valueHoleSpacing.show()
1164
self.labelGrooveNumber.hide()
1165
self.valueGrooveNumber.hide()
1166
self.labelGrooveDepth.hide()
1167
self.valueGrooveDepth.hide()
1168
self.labelGrooveHeight.hide()
1169
self.valueGrooveHeight.hide()
1170
self.labelGrooveSpacing.hide()
1171
self.valueGrooveSpacing.hide()
1172
self.labelRiserNumber.hide()
1173
self.valueRiserNumber.hide()
1174
self.labelDownLength.hide()
1175
self.valueDownLength.hide()
1176
self.labelRiser.hide()
1177
self.valueRiser.hide()
1178
self.labelTread.hide()
1179
self.valueTread.hide()
1180
elif preset == "I-Beam":
1181
self.preview.load(":/ui/ParametersIbeam.svg")
1182
self.labelSlabType.hide()
1183
self.valueSlabType.hide()
1184
self.labelChamfer.show()
1185
self.valueChamfer.show()
1186
self.labelDentLength.hide()
1187
self.valueDentLength.hide()
1188
self.labelDentWidth.hide()
1189
self.valueDentWidth.hide()
1190
self.labelDentHeight.hide()
1191
self.valueDentHeight.hide()
1192
self.labelBase.show()
1193
self.valueBase.show()
1194
self.labelHoleNumber.hide()
1195
self.valueHoleNumber.hide()
1196
self.labelHoleMajor.hide()
1197
self.valueHoleMajor.hide()
1198
self.labelHoleMinor.hide()
1199
self.valueHoleMinor.hide()
1200
self.labelHoleSpacing.hide()
1201
self.valueHoleSpacing.hide()
1202
self.labelGrooveNumber.hide()
1203
self.valueGrooveNumber.hide()
1204
self.labelGrooveDepth.hide()
1205
self.valueGrooveDepth.hide()
1206
self.labelGrooveHeight.hide()
1207
self.valueGrooveHeight.hide()
1208
self.labelGrooveSpacing.hide()
1209
self.valueGrooveSpacing.hide()
1210
self.labelRiserNumber.hide()
1211
self.valueRiserNumber.hide()
1212
self.labelDownLength.hide()
1213
self.valueDownLength.hide()
1214
self.labelRiser.hide()
1215
self.valueRiser.hide()
1216
self.labelTread.hide()
1217
self.valueTread.hide()
1218
elif preset == "Stairs":
1219
self.preview.load(":/ui/ParametersStairs.svg")
1220
self.labelSlabType.hide()
1221
self.valueSlabType.hide()
1222
self.labelChamfer.hide()
1223
self.valueChamfer.hide()
1224
self.labelDentLength.hide()
1225
self.valueDentLength.hide()
1226
self.labelDentWidth.hide()
1227
self.valueDentWidth.hide()
1228
self.labelDentHeight.hide()
1229
self.valueDentHeight.hide()
1230
self.labelBase.hide()
1231
self.valueBase.hide()
1232
self.labelHoleNumber.hide()
1233
self.valueHoleNumber.hide()
1234
self.labelHoleMajor.hide()
1235
self.valueHoleMajor.hide()
1236
self.labelHoleMinor.hide()
1237
self.valueHoleMinor.hide()
1238
self.labelHoleSpacing.hide()
1239
self.valueHoleSpacing.hide()
1240
self.labelGrooveNumber.hide()
1241
self.valueGrooveNumber.hide()
1242
self.labelGrooveDepth.hide()
1243
self.valueGrooveDepth.hide()
1244
self.labelGrooveHeight.hide()
1245
self.valueGrooveHeight.hide()
1246
self.labelGrooveSpacing.hide()
1247
self.valueGrooveSpacing.hide()
1248
self.labelRiserNumber.show()
1249
self.valueRiserNumber.show()
1250
self.labelDownLength.show()
1251
self.valueDownLength.show()
1252
self.labelRiser.show()
1253
self.valueRiser.show()
1254
self.labelTread.show()
1255
self.valueTread.show()
1259
class _DentsTaskPanel:
1261
'''The TaskPanel for dent creation'''
1266
from PySide import QtCore, QtGui, QtSvgWidgets
1267
self.form = QtGui.QWidget()
1268
self.grid = QtGui.QGridLayout(self.form)
1269
self.Rotations = ["N","S","E","O"]
1270
self.RotationAngles = [90,270,0,180]
1273
self.labelDents = QtGui.QLabel()
1274
self.listDents = QtGui.QListWidget()
1275
self.grid.addWidget(self.labelDents,0,0,1,2)
1276
self.grid.addWidget(self.listDents,1,0,1,2)
1279
self.buttonAdd = QtGui.QPushButton()
1280
self.buttonRemove = QtGui.QPushButton()
1281
self.grid.addWidget(self.buttonAdd,2,0,1,1)
1282
self.grid.addWidget(self.buttonRemove,2,1,1,1)
1285
self.preview = QtSvgWidgets.QSvgWidget(":/ui/ParametersDent.svg")
1286
self.preview.setMaximumWidth(200)
1287
self.preview.setMinimumHeight(120)
1288
self.grid.addWidget(self.preview,3,0,1,2)
1291
self.labelLength = QtGui.QLabel()
1292
self.valueLength = FreeCADGui.UiLoader().createWidget("Gui::InputField")
1293
self.grid.addWidget(self.labelLength,4,0,1,1)
1294
self.grid.addWidget(self.valueLength,4,1,1,1)
1296
self.labelWidth = QtGui.QLabel()
1297
self.valueWidth = FreeCADGui.UiLoader().createWidget("Gui::InputField")
1298
self.grid.addWidget(self.labelWidth,5,0,1,1)
1299
self.grid.addWidget(self.valueWidth,5,1,1,1)
1301
self.labelHeight = QtGui.QLabel()
1302
self.valueHeight = FreeCADGui.UiLoader().createWidget("Gui::InputField")
1303
self.grid.addWidget(self.labelHeight,6,0,1,1)
1304
self.grid.addWidget(self.valueHeight,6,1,1,1)
1306
self.labelSlant = QtGui.QLabel()
1307
self.valueSlant = FreeCADGui.UiLoader().createWidget("Gui::InputField")
1308
self.grid.addWidget(self.labelSlant,7,0,1,1)
1309
self.grid.addWidget(self.valueSlant,7,1,1,1)
1311
self.labelLevel = QtGui.QLabel()
1312
self.valueLevel = FreeCADGui.UiLoader().createWidget("Gui::InputField")
1313
self.grid.addWidget(self.labelLevel,8,0,1,1)
1314
self.grid.addWidget(self.valueLevel,8,1,1,1)
1316
self.labelRotation = QtGui.QLabel()
1317
self.valueRotation = QtGui.QComboBox()
1318
self.valueRotation.addItems(self.Rotations)
1319
self.valueRotation.setCurrentIndex(0)
1320
self.grid.addWidget(self.labelRotation,9,0,1,1)
1321
self.grid.addWidget(self.valueRotation,9,1,1,1)
1323
self.labelOffset = QtGui.QLabel()
1324
self.valueOffset = FreeCADGui.UiLoader().createWidget("Gui::InputField")
1325
self.grid.addWidget(self.labelOffset,10,0,1,1)
1326
self.grid.addWidget(self.valueOffset,10,1,1,1)
1329
QtCore.QObject.connect(self.valueLength,QtCore.SIGNAL("valueChanged(double)"),self.setLength)
1330
QtCore.QObject.connect(self.valueWidth,QtCore.SIGNAL("valueChanged(double)"),self.setWidth)
1331
QtCore.QObject.connect(self.valueHeight,QtCore.SIGNAL("valueChanged(double)"),self.setHeight)
1332
QtCore.QObject.connect(self.valueSlant,QtCore.SIGNAL("valueChanged(double)"),self.setSlant)
1333
QtCore.QObject.connect(self.valueLevel,QtCore.SIGNAL("valueChanged(double)"),self.setLevel)
1334
QtCore.QObject.connect(self.valueRotation,QtCore.SIGNAL("currentIndexChanged(int)"),self.setDent)
1335
QtCore.QObject.connect(self.valueOffset,QtCore.SIGNAL("valueChanged(double)"),self.setOffset)
1336
QtCore.QObject.connect(self.buttonAdd,QtCore.SIGNAL("clicked()"),self.addDent)
1337
QtCore.QObject.connect(self.buttonRemove,QtCore.SIGNAL("clicked()"),self.removeDent)
1338
QtCore.QObject.connect(self.listDents,QtCore.SIGNAL("itemClicked(QListWidgetItem*)"),self.editDent)
1339
self.retranslateUi(self.form)
1342
def setLength(self,value):
1346
def setWidth(self,value):
1350
def setHeight(self,value):
1354
def setSlant(self,value):
1358
def setLevel(self,value):
1362
def setOffset(self,value):
1366
def fillDents(self,dents):
1367
self.listDents.clear()
1370
s = "Dent "+str(i)+" :"+d
1371
self.listDents.addItem(s)
1374
def setDent(self,i=0):
1375
if self.listDents.currentItem():
1376
num = str(self.listDents.currentRow()+1)
1377
rot = self.RotationAngles[self.valueRotation.currentIndex()]
1378
s = "Dent "+num+" :"+str(self.Length)+";"+str(self.Width)+";"+str(self.Height)+";"+str(self.Slant)+";"+str(self.Level)+";"+str(rot)+";"+str(self.Offset)
1379
self.listDents.currentItem().setText(s)
1382
num = str(self.listDents.count()+1)
1383
rot = self.RotationAngles[self.valueRotation.currentIndex()]
1384
s = "Dent "+num+" :"+str(self.Length)+";"+str(self.Width)+";"+str(self.Height)+";"+str(self.Slant)+";"+str(self.Level)+";"+str(rot)+";"+str(self.Offset)
1385
self.listDents.addItem(s)
1386
self.listDents.setCurrentRow(self.listDents.count()-1)
1389
def removeDent(self):
1390
if self.listDents.currentItem():
1391
self.listDents.takeItem(self.listDents.currentRow())
1393
def editDent(self,item=None):
1394
if self.listDents.currentItem():
1395
s = self.listDents.currentItem().text()
1398
self.valueLength.setText(FreeCAD.Units.Quantity(float(s[0]),FreeCAD.Units.Length).UserString)
1399
self.valueWidth.setText(FreeCAD.Units.Quantity(float(s[1]),FreeCAD.Units.Length).UserString)
1400
self.valueHeight.setText(FreeCAD.Units.Quantity(float(s[2]),FreeCAD.Units.Length).UserString)
1401
self.valueSlant.setText(FreeCAD.Units.Quantity(float(s[3]),FreeCAD.Units.Length).UserString)
1402
self.valueLevel.setText(FreeCAD.Units.Quantity(float(s[4]),FreeCAD.Units.Length).UserString)
1403
self.valueRotation.setCurrentIndex(self.RotationAngles.index(int(s[5])))
1404
self.valueOffset.setText(FreeCAD.Units.Quantity(float(s[6]),FreeCAD.Units.Length).UserString)
1406
def retranslateUi(self, dialog):
1407
from PySide import QtGui
1408
self.form.setWindowTitle(translate("Arch", "Precast options"))
1409
self.labelDents.setText(translate("Arch", "Dents list"))
1410
self.buttonAdd.setText(translate("Arch", "Add dent"))
1411
self.buttonRemove.setText(translate("Arch", "Remove dent"))
1412
self.labelLength.setText(translate("Arch", "Length"))
1413
self.labelWidth.setText(translate("Arch", "Width"))
1414
self.labelHeight.setText(translate("Arch", "Height"))
1415
self.labelSlant.setText(translate("Arch", "Slant"))
1416
self.labelLevel.setText(translate("Arch", "Level"))
1417
self.labelRotation.setText(translate("Arch", "Rotation"))
1418
self.labelOffset.setText(translate("Arch", "Offset"))
1420
def getValues(self):
1422
for i in range(self.listDents.count()):
1423
s = self.listDents.item(i).text()
1424
l.append(s.split(":")[1])
1428
def makePrecast(precasttype=None,length=0,width=0,height=0,slabtype="",chamfer=0,dentlength=0,dentwidth=0,dentheight=0,dents=[],base=0,holenumber=0,holemajor=0,holeminor=0,holespacing=0,groovenumber=0,groovedepth=0,grooveheight=0,groovespacing=0,risernumber=0,downlength=0,riser=0,tread=0):
1430
"Creates one of the precast objects in the current document"
1432
if precasttype == "Beam":
1433
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Beam")
1438
obj.Chamfer = chamfer
1440
obj.DentLength = dentlength
1441
obj.DentHeight = dentheight
1442
elif precasttype == "Pillar":
1443
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Pillar")
1448
obj.Chamfer = chamfer
1450
obj.GrooveNumber = groovenumber
1451
obj.GrooveDepth = groovedepth
1452
obj.GrooveHeight = grooveheight
1453
obj.GrooveSpacing = groovespacing
1454
elif precasttype == "Panel":
1455
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Panel")
1460
obj.Chamfer = chamfer
1461
obj.DentWidth = dentwidth
1462
obj.DentHeight = dentheight
1463
elif precasttype == "Slab":
1464
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Slab")
1466
obj.SlabType = slabtype
1471
obj.HoleNumber = holenumber
1472
obj.HoleMajor = holemajor
1473
obj.HoleMinor = holeminor
1474
obj.HoleSpacing = holespacing
1475
elif precasttype == "I-Beam":
1476
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Beam")
1481
obj.Chamfer = chamfer
1483
elif precasttype == "Stairs":
1484
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Stairs")
1489
obj.RiserNumber = risernumber
1490
obj.DownLength = downlength
1494
obj = FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Precast")
1497
_ViewProviderPrecast(obj.ViewObject)