Back to SDS/2 Parametric Scripts
## FtgsPiers.py Version 1.00
##Copyright
(c) 2006 Bruce Vaughan, BV Detailing & Design, Inc.
##All
rights reserved.
#####################################################################
"""
Select
a center of footing reference point
Enter
footing elevation
Enter
a footing length
Enter
a footing width
Enter
a footing rotation
A
rectangular plate miscellaneous member is added
User
must be in plan
"""
def
run_script():
# startup code
begin
from macrolib.P3D
import Plane3D
from
macrolib.Basis3D import BasisTransToGlobal
from macrolib.FileDefaults import import_data,
export_data
from macrolib.PrintPtList import formatPtList
from macrolib.angle import rtod, dtor
import os
from member import
Member
from param import yes_or_no, Dialog, dim_print
from point import
Point, PointLocate
from rect_plate import RectPlate
# startup code end
###########################################
## Variables section
# system path for
defaults file
default_file_path
= os.path.join(os.getcwd(), "macro",
"Defaults")
# default values
file
def_file =
"FtgsPiers_v1_00.txt"
# no images in
this version
# image_path = os.path.join(os.getcwd(), "macro", "Images")
# default to
enable or disable the importing and exporting of dialog dictionary variables
"Enable" "Disable"
enable_default_import_export
= "Enable"
###########################################
## Defaults Section
# ['Ftg',
'Pier']
ftg_pier = 'Ftg'
ftg_length =
144.0
ftg_width = 144.0
ftg_thk = 24.0
rotation = 0.0
ftg_elev = -16.0
pier_length =
24.0
pier_width = 30.0
pier_elev_top =
-16.0
pier_elev_bott =
-48.0
## End Variables and Defaults #############
def add_misc_rect_plate(p1, p2, width, thk):
# member begin
memadd5 = Member('Misc Rectangular Plate')
memadd5.left.location = p1
memadd5.right.location = p2
memadd5.origin = "NS"
memadd5.width = width
memadd5.thick = thk
memadd5.work_pt_dist = p1.dist(p2)
memadd5.length = p1.dist(p2)
memadd5.mtrl_type = 'Plate'
memadd5.mtrl_usage =
"Footing"
memadd5.finish = "Galvanized"
memadd5.description = "Exist
Footing"
memadd5.sequence = '25'
memadd5.ref_pt_offset =
(memadd5.length/2.0, -width/2.0, 0.0)
memadd5.add()
memadd5.rotate((0.0,
0.0, 0.0))
# member end
return memadd5
def add_rp(mem, p1, p2, width, thk, plan_rot):
# rectangular
plate begin
rp1 = RectPlate()
rp1.member = mem
rp1.pt1 = p1
rp1.pt2 = p2
rp1.grade = "A36"
rp1.origin = "NS"
rp1.width = width
rp1.thick = thk
rp1.work_pt_dist = p1.dist(p2)
rp1.length = p1.dist(p2)
rp1.mtrl_type = "Plate"
rp1.mtrl_usage = "Existing
Pier"
rp1.finish = "Galvanized"
rp1.ref_pt_offset = (rp1.length/2.0,
-width/2.0, 0.0)
rp1.add()
rp1.rotate(rp1.member,
(90.0, plan_rot-90.0, 90.0))
# rectangular
plate end
return rp1
#############################################################
# if enabled,
import defaults used previously from disk file
## import defaults data if enabled
if enable_default_import_export == "Enable":
dd0 = import_data(os.path.join(default_file_path, def_file))
if dd0:
for key,
value in dd0.items():
exec
"%s = %s" % (key, repr(value)) in None
else:
Warning("Invalid
data - Reverting to original defaults")
##
while True:
ptWP
= PointLocate('Pick footing reference point
(center)')
if not ptWP:
break
## DIALOG
dlg1 = Dialog("Footing")
dlg1.menu("print_doc", ("Yes", "No"),
"No", "Print documentation only")
dlg1.group_title('Footing
or Pier (member line horiz or vertical)')
dlg1.menu("ftg_pier", ['Ftg', 'Pier'], ftg_pier, 'Add a footing or pier? ')
dlg1.entry("rotation",
rotation, "Footing/Pier plan rotation (deg)")
dlg1.group_title('Footing
Dimensions')
dlg1.entry("ftg_length", dim_print(ftg_length), "Footing length")
dlg1.entry("ftg_width", dim_print(ftg_width), "Footing width")
dlg1.entry("ftg_thk", dim_print(ftg_thk), "Footing thickness")
dlg1.entry('ftg_elev', dim_print(ftg_elev), 'Top of
footing elevation')
dlg1.group_title('Pier
Dimensions')
dlg1.entry("pier_length", dim_print(pier_length), "Pier length")
dlg1.entry("pier_width", dim_print(pier_width), "Footing width")
dlg1.entry("pier_elev_top", dim_print(pier_elev_top), "Top of pier elevation")
dlg1.entry('pier_elev_bott', dim_print(pier_elev_bott), 'Bottom of pier elevation')
try:
dd1 = dlg1.done()
except ResponseNotOK:
break
for key, value
in dd1.items():
exec
"%s = %s" % (key, repr(value)) in None
###################################################
## END DIALOG
###################################################
if print_doc == "Yes":
print
__doc__
break
# Export defaults to disk if enabled
if enable_default_import_export == "Enable":
export_data(os.path.join(default_file_path, def_file),
dd1)
# translate to top of footing elevation
ptWP.z = ftg_elev
a = BasisTransToGlobal(ptWP, ptWP + Point(100.0, 0.0,
0.0), ptWP + Point(0.0, 120.0, 0.0))
if ftg_pier == 'Ftg':
# print formatPtList("Local Basis", [ptWP,
ptWP + Point(100.0, 0.0, 0.0), ptWP
+ Point(0.0, 120.0, 0.0)])
pt1 = ptWP
+ a.translate(-ftg_length/2, ftg_width/2, 0.0)
pt2 = pt1 + a.translate(ftg_length, 0.0, 0.0)
# print formatPtList("Footing End Points", [pt1, pt2])
pt1 = a.PointRotate3D(pt1,
dtor(rotation))
pt2 = a.PointRotate3D(pt2,
dtor(rotation))
# print formatPtList("Rotation in radians = %0.4f" % (dtor(rotation)), [pt1, pt2])
add_misc_rect_plate(pt1, pt2, ftg_width, ftg_thk)
else:
# print formatPtList("Local Basis", [ptWP,
ptWP + Point(100.0, 0.0, 0.0), ptWP
+ Point(0.0, 120.0, 0.0)])
pt1 = ptWP
+ a.translate(-pier_length/2, pier_width/2, 0.0)
pt2 = pt1 + a.translate(pier_length, 0.0, 0.0)
# print formatPtList("Footing End Points", [pt1, pt2])
pt1 = a.PointRotate3D(pt1,
dtor(rotation))
pt2 = a.PointRotate3D(pt2,
dtor(rotation))
# print formatPtList("Rotation in radians = %0.4f" % (dtor(rotation)), [pt1, pt2])
ptWP2 = ptWP
+ Point(0.0, 0.0, pier_elev_top-pier_elev_bott)
mem = add_misc_rect_plate(ptWP2,
ptWP, pier_width, pier_width)
add_rp(mem,
pt1, pt2, pier_width, abs(pier_elev_top-pier_elev_bott),
rotation)
mem.main_mtrl().erase()
##
End run_script()
if
__name__ == '__main__':
try:
run_script()
finally: