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

   

    ## MAIN PROGRAM LOOP

    while True:

        ptWP = PointLocate('Pick footing reference point (center)')

        if not ptWP:

            break

        ## DIALOG BOX 1 #################################

        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 BOX 1 ------------------------------#

        ###################################################

        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:

        del run_script