Back to SDS/2 Parametric Scripts
## Beam_WebOpng.py Version 1.00
"""
Cut rectangular
openings in the web of beam
"""
def run_script():
# startup code
begin
from macrolib.FileDefaults import import_data,
export_data # macrolib.pickle required
from macrolib.MemCnt import member_count
from macrolib.angle import rtod, dtor
from macrolib.ExceptWarn import formatExceptionInfo
import sys, os
from math import tan, atan2, sin, cos,
asin
from param import yes_or_no, ResponseNotOK, Units, ClearSelection,
Dialog, dim_print, Warning, dim
from mtrl_list import MtrlLocate
from point import
Point, PointLocate
from mtrl_cut import MtrlCut
from shape import
Shape
Units("feet")
# startup code end
#######################################################
## Variables section
# system path for
defaults file
default_file_path
= os.path.join(os.getcwd(), "macro",
"Defaults")
# defaults file
def_file =
"MtrlWebOpng.txt"
# default to
enable or disable the importing and exporting of dialog dictionary variables
"Enable" "Disable"
enable_default_import_export
= "Enable"
image_path = os.path.join(os.getcwd(), "macro", "Images")
image_name = os.path.join(image_path, "MtrlWebOpng.gif")
## Defaults section
opng_length =
10.0
opng_height = 4.0
# distance from
top of material to top of opening
opng_vert_dist =
1.0
opng_rad = 0.5
#######################################################
def opng_cut(mtrl, ptList, rad=0.0, rot=(0,0,0)):
# try:
# mtrl
cut begin
mcut1 = MtrlCut()
mcut1.mtrl = [mtrl, ]
mcut1.rotate = rot
for pt in ptList:
mcut1.pts.append((pt,
rad))
mcut1.cut("Layout")
return True
"""
except:
Warning(formatExceptionInfo())
return
False
"""
#
mtrl cut end
###########################################################
## 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
###########################################################
## Main Program
while True:
ClearSelection()
z = 1
bm_list = []
while z:
mem1 = MemberLocate("Select
if mem1 ==
None:
break
else:
if
mem1.type in ["Beam", ]:
if mem1.mtrl_type in
["W flange", "Channel", "Angle",
"Pipe", "W Tee", "Tube"]:
z = 0 # Limit selection to one member
bm_list.append(mem1)
else:
Warning("%s
material is not supported." % (mem1.mtrl_type))
else:
Warning("You
picked a %s. You must pick a Beam." % (mem1.type))
if len(bm_list) < 1:
break
chk_mem_list
= member_count(bm_list[0])
if len(chk_mem_list) > 1:
if yes_or_no("Add flange preparations to all members with
the same piecemark \r(%s members with mark %s)" % (len(chk_mem_list), mem1.piecemark)) == 1:
bm_list
= chk_mem_list
#################################################################
## Dialog
dlg1 = Dialog(
"Beam web openings" )
dlg1.menu("print_doc", ("Yes", "No"),
"No", "Print documentation only
")
dlg1.tabset_begin()
dlg1.tab("Opening
dimensions")
dlg1.group_title("Dimensions")
dlg1.entry("opng_length", dim_print(opng_length), "Opening length ")
dlg1.entry("opng_height", dim_print(opng_height), "Opening height")
dlg1.entry("opng_rad", dim_print(opng_rad), "Opening corner radius")
dlg1.entry("opng_vert_dist", dim_print(opng_vert_dist), "Distance to top of opening")
dlg1.group_title_end
dlg1.tab("Graphic
Image")
dlg1.image(image_name)
try:
dd1 = dlg1.done()
except ResponseNotOK:
break
# Update the local namespace
for key, value
in dd1.items():
exec
"%s = %s" % (key, repr(value)) in None
###############################################################
## END DIALOG
###############################################################
if print_doc == "Yes":
print
__doc__
# Export defaults to disk if enabled
if enable_default_import_export == "Enable":
export_data(os.path.join(default_file_path, def_file),
dd1)
pt_list = []
while True:
ptWP = PointLocate('Select
center of opening point')
if ptWP is None:
break
pt_list.append(ptWP)
pt_list_loc =
[]
for pt in pt_list:
pt_list_loc.append(Point((mem1.trans_to_local(pt-mem1.left.location)).x,
-opng_vert_dist, 0.0))
for bm in bm_list:
for pt in pt_list_loc:
ptWP = bm.left.location + bm.translate(pt)
pt1 = ptWP
+ bm.translate(opng_length/2, 0.0, 0.0)
pt2 = pt1 + bm.translate(0.0, -opng_height, 0.0)
pt3 = pt2 + bm.translate(-opng_length, 0.0, 0.0)
pt4 = pt3 + bm.translate(0.0, opng_height, 0.0)
opng_cut(bm.main_mtrl(),
[ptWP, pt1, pt2, pt3, pt4, ptWP],
opng_rad)
if not yes_or_no("Cut openings in more beams?"):
break
## end run_script()
#########################################################
if __name__ == '__main__':
try:
run_script()
finally: