- Example: Using fab and job module attributes in a parametric dialog
- Defining the object to be your current Fabricator
- To find out the name of your current Fabricator
- Text editor (to enter fab module code)
Example: Using fab and job module attributes in a parametric dialog
This dialog , which can be generated from the script that follows, uses links to Setup to fill out options on the menus. Note the use of Job().bolt_sched() , Job().avail_bolts() , Job().sequences() and Fabricator().category_defs in the script. |
# Script that generates the dialog that is shown above.
from dialog import Dialog
from dialog.combobox import Combobox
from dialog.dialog import ResponseNotOK
from job import Job
from fabricator import Fabricator
import Tkinter
# Warning: For this to run, a member category must be in line 1 in setup
dlg1 = Dialog( "Setup Lists In Menus" )
dlg1.menu('bolt_type', Job().bolt_sched(), "Item 1", "Bolt type:")
dlg1.menu('bolt_dia', Job().avail_bolts(), "Item 1", "Bolt diameter:")
dlg1.menu('mem_seq', Job().sequences(), "Item 1", "Sequence:")
dlg1.menu('mem_zone', Job().zones(), "Item 1", "Zone:")
dlg1.menu('L_grade', Job().steel_grades("Angle").keys(), "Item 1", "L grade:")
dlg1.menu('category', Fabricator().category_defs, "Item
1", "Category:")
dd = dlg1.done()
# dialog end
# insert code to use choices made to dialog
...
Note: "Item 1"
is a place holder for the default value that each menu should initially be set to. For example, replacing "Item 1"
with an expression like Job().bolt_sched()[2]
causes the third item in the list to be selected by default in the "Bolt type:"
menu.
Defining the object to be your current Fabricator :
obj = Fabricator()
To find out the name of your current Fabricator :
FabricatorName()
Fabricator().sht_load_mem Fabricator().sht_load_mtrl Fabricator().sht_load_sect Fabricator().sht_load_nom_depth Fabricator().sht_load_grade Fabricator().sht_load_welded Fabricator().sht_load_bolted Fabricator().sht_load_end_cut Fabricator().sht_load_custom_cut Fabricator().sht_load_seq Fabricator().sht_load_zone Fabricator().sht_load_mem_category Fabricator().sht_load_route_1 Fabricator().sht_load_route_2 Fabricator().sht_load_route_3 Fabricator().sht_load_route_4 Fabricator().sht_load_sort_mtrl_weight Fabricator().sht_load_sort_mtrl_length Fabricator().sht_load_rotate_col Fabricator().sht_load_min_scale_dtl Fabricator().sht_load_min_scale_submtrl
Fabricator().abm_by_zone Fabricator().abm_by_seq Fabricator().abm_by_mem_type Fabricator().abm_by_labor_code Fabricator().abm_by_job_code Fabricator().abm_by_remarks Fabricator().abm_main_mtrl Fabricator().abm_conn_mtrl Fabricator().abm_misc_mtrl Fabricator().abm_inc_wflg Fabricator().abm_inc_channel Fabricator().abm_inc_angle Fabricator().abm_inc_tee Fabricator().abm_inc_pipe Fabricator().abm_inc_tube Fabricator().abm_inc_plate Fabricator().abm_inc_bar Fabricator().abm_inc_joist Fabricator().abm_inc_weld_sect Fabricator().abm_rolled_over Fabricator().abm_rolled_under Fabricator().abm_rolled_round Fabricator().abm_plate_over_l Fabricator().abm_plate_under_l Fabricator().abm_plate_over_w Fabricator().abm_plate_under_w Fabricator().abm_plate_round Fabricator().abm_square_cut_ends Fabricator().abm_mill_cut_ends Fabricator().abm_bevel_cut_ends Fabricator().abm_std_cut_ends
Fabricator().clip_ang_wide_gage Fabricator().clip_ang_narrow_gage Fabricator().clip_ang_heavy_gage_inside Fabricator().clip_ang_heavy_gage_outside Fabricator().clip_ang_stagger_holes Fabricator().clip_ang_vert_edge_dist Fabricator().clip_ang_exp_web_bolted Fabricator().clip_ang_exp_web_welded Fabricator().clip_ang_end_bm_setback Fabricator().clip_ang_safety_conn
Fabricator().clip_ang("arg1", arg2) returns a clip_ang object. Two arguments are required. " arg1 " can be " Heavy gage bolted " or " Heavy gage welded " or " Wide gage bolted " or " Narrow gage bolted " or " Wide gage welded " or " Narrow gage welded " or " Single bolted " or " Single welded to sptd " or " Single welded to sptng " or " Double welded to sptng ". arg2 can be any of the following values: .75 or .875 or 1 or 1.125 or 1.25 , which are decimal equivalents to the following tabs on clip angle configuration windows:
clip_ang object attributes when "arg1" is "Heavy gage bolted" are:
Fabricator().clip_ang("Heavy gage bolted", .75).angle_size Fabricator().clip_ang("Heavy gage bolted", .75).hole_type_sptd Fabricator().clip_ang("Heavy gage bolted", .75).hole_type_sptng Fabricator().clip_ang("Heavy gage bolted", .75).gage_on_leg_sptd Fabricator().clip_ang("Heavy gage bolted", .75).gage_spa_on_sptd Fabricator().clip_ang("Heavy gage bolted", .75).gage_on_leg_sptng Fabricator().clip_ang("Heavy gage bolted", .75).stagger_dia
Most of these attributes are also valid when, for example, "Wide gage bolted" is "arg1" . However, the .gage_spa_on_sptd argument produces an AttributeError for " Wide gage bolted " since there is no " Gage spacing ... " on the Wide Gage OSL All-Bolted Clip Angles window. This same principle applies to other clip angle configurations .
clip_ang_obj.gol_pcmk(arg1, arg2) is a method that can be applied to a clip_ang object for accessing the piecemark entry to the Clip Angle Piecmarks table. arg1 is the line number from the table, arg2 is the GOL from the table. Please note that arg2 for gol_pcmk() is left blank for the "Single welded to sptng" or "Double welded to sptng" as in this example: Fabricator().clip_ang("Double welded to sptng", 1.125).gol_pcmk(2) .
Example: Fabricator().clip_ang("Heavy gage bolted", .75).gol_pcmk(4, 2.375) would return a8 in the following example from the Wide Gage OSL All-Bolted Clip Angles window for 3/4 inch bolts:
Fabricator().bent_pl_wide_gage Fabricator().bent_pl_narrow_gage Fabricator().bent_pl_vert_edge_dist Fabricator().bent_pl_exp_web_welded Fabricator().bent_pl_exp_web_bolted Fabricator().bent_pl_stagger_holes Fabricator().bent_pl_begin_stagger Fabricator().bent_pl_min_plate_thick Fabricator().bent_pl_sptng_leg_hole_type Fabricator().bent_pl_sptd_leg_hole_type
Fabricator().shear_pl_vert_edge_dist Fabricator().shear_pl_horz_edge_dist Fabricator().shear_pl_min_thick Fabricator().shear_pl_hole_type Fabricator().shear_pl_symmetrical Fabricator().shear_pl_cope_past_flg Fabricator().shear_pl_cope_tabs Fabricator().shear_pl_opp_or_off
Fabricator().end_pl_vert_edge_dist Fabricator().end_pl_horz_edge_dist Fabricator().end_pl_min_thick Fabricator().end_pl_wide_gage Fabricator().end_pl_narrow_gage Fabricator().end_pl_hole_type Fabricator().end_pl_flg_first_hole
Fabricator().bm_seat_hole_type Fabricator().bm_seat_square_cut Fabricator().bm_seat_mem_edge_dist Fabricator().bm_seat_extend
Fabricator().joist_seat("arg") returns a section size when " arg " is " K joist plate " or " LH joist plate " or " DLH joist plate " or " Joist girder plate " or " K joist angle " or " LH joist angle " or " DLH joist angle " or " Joist girder angle "
Fabricator().cap_pl_min_thick
Fabricator().guss_pl_min_thick Fabricator().guss_pl_max_thick Fabricator().guss_pl_round_to Fabricator().guss_pl_min_edge_3_4 Fabricator().guss_pl_min_edge_7_8 Fabricator().guss_pl_min_edge_1 Fabricator().guss_pl_min_edge_1_1_8 Fabricator().guss_pl_min_edge_above Fabricator().guss_pl_col_cut_type Fabricator().guss_pl_bm_cut_type
Fabricator().col_spl_upper_min_clear Fabricator().col_spl_upper_max_clear Fabricator().col_spl_lower_min_clear Fabricator().col_spl_lower_max_clear
Fabricator().col_spl() returns a list of col_spl objects, each of which corresponds to a line on the Channel splice section size selection table. Attributes of col_spl objects are:
obj.NominalDepth obj.MinimumWeightPerFoot obj.MaximumWeightPerFoot obj.ChannelSection
An index of [0] is used in the following script to get data from the first line in the Channel splice section size selection table. Substituting [1] for [0] in this script would get data from the second line.
# Prints the first line of channel splice selection table. from fab import Fabricator print(Fabricator().col_spl()[0].NominalDepth) print(Fabricator().col_spl()[0].MinimumWeightPerFoot) print(Fabricator().col_spl()[0].MaximumWeightPerFoot) print(Fabricator().col_spl()[0].ChannelSection)
Fabricator().spl() accepts a nominal depth value as its argument. In the following example, that value is 10.5 . The following script returns the values on the line on the table that is closest to, but not less than, 10.5:
# Prints setup values for a nominal depth of 10.5. from fab import Fabricator print(Fabricator().col_spl(10.5).NominalDepth) print(Fabricator().col_spl(10.5).MinimumWeightPerFoot) print(Fabricator().col_spl(10.5).MaximumWeightPerFoot) print(Fabricator().col_spl(10.5).ChannelSection)
Preferred Connection Material Sizes
# Return a lists of connection material sizes from their respective setup tablesFabricator().misc_conn("Angles") Fabricator().misc_conn("Tees") Fabricator().misc_conn("Flats")
# Prints the total number of entries present in the Flats list. from fab import Fabricator print(len(Fabricator().misc_conn("Flats")))
Fabricator().dim_terminals Fabricator().slope_hole_dim Fabricator().show_pt_to_pt_dist Fabricator().show_mtrl_grade Fabricator().show_on_rad Fabricator().break_dim_lines Fabricator().break_mtrl_lines Fabricator().combine_dims Fabricator().submtrl_ext_dims Fabricator().dim_holdback Fabricator().dim_ref_on_web_hole Fabricator().dim_ref_on_flg_hole Fabricator().show_ext_dims_bm Fabricator().ext_dim_bolted Fabricator().ext_dim_welded Fabricator().show_end_to_face_clip Fabricator().cope_dims_from Fabricator().show_ext_dims_col Fabricator().ext_dims_from_col Fabricator().overall_dim_cap_plate Fabricator().overall_dim_base_plate Fabricator().show_ext_dims_brc
Fabricator().label_char_height Fabricator().label_ratio Fabricator().sect_height Fabricator().sect_ratio Fabricator().pcmk_height Fabricator().pcmk_ratio Fabricator().weld_height Fabricator().bill_height Fabricator().bill_ratio Fabricator().primary_dim_height Fabricator().primary_dim_width Fabricator().dim_prec Fabricator().bill_pen Fabricator().detailing_pen Fabricator().pointer_pen Fabricator().sect_size_pen Fabricator().pcmk_pen Fabricator().mem_pen Fabricator().cloud_pen Fabricator().primary_dim_pen Fabricator().secondary_dim_pen Fabricator().show_secondary_dim Fabricator().dim_units Fabricator().secondary_dim_units
Fabricator().pen_0_des Fabricator().pen_0_width Fabricator().pen_1_des Fabricator().pen_1_width Fabricator().pen_2_des Fabricator().pen_2_width Fabricator().pen_3_des Fabricator().pen_3_width Fabricator().pen_4_des Fabricator().pen_4_width Fabricator().pen_5_des Fabricator().pen_5_width Fabricator().pen_6_des Fabricator().pen_6_width Fabricator().pen_7_des Fabricator().pen_7_width
Fabricator().detail_scale Fabricator().submtrl_detail_scale Fabricator().show_cross_hatching Fabricator().show_surface_hatching Fabricator().show_mem_size Fabricator().show_sub_mtrl_dims Fabricator().show_bolted_slotted_holes Fabricator().min_slot_length Fabricator().curved_pointers Fabricator().shop_weight_based_on Fabricator().shop_weight_prec Fabricator().edge_dist_rolled Fabricator().show_nonstd_edge_rolled Fabricator().edge_dist_plate Fabricator().show_nonstd_edge_plate
Fabricator().bolt_designation_details Fabricator().bolt_designation_reports Fabricator().field_bolts_listed Fabricator().summarize_field_bolt Fabricator().plot_bolt_bill Fabricator().summarize_shop_bolt Fabricator().list_wash_bolt
Member and Material Piecemarking
Fabricator().break_marks_zone Fabricator().break_marks_seq Fabricator().use_mem_mark_shop Fabricator().primary_submark_designation Fabricator().secondary_submark_designation Fabricator().start_num_pcmk Fabricator().show_submark_quantity Fabricator().break_submark_zone Fabricator().break_submark_seq Fabricator().include_submark_seq Fabricator().include_submark_zone Fabricator().pl_submark Fabricator().ch_submark Fabricator().an_submark Fabricator().pi_submark Fabricator().wt_submark Fabricator().ts_submark Fabricator().wf_submark Fabricator().sf_submark Fabricator().st_submark Fabricator().bp_submark Fabricator().rb_submark Fabricator().sb_submark Fabricator().fb_submark Fabricator().ss_submark Fabricator().gr_submark Fabricator().gt_submark Fabricator().dk_submark Fabricator().ms_submark
Connection Erectability Settings
Fabricator().show_stability_angles Fabricator().allowable_K_infrig Fabricator().use_backing_bar
Fabricator().cope_rad_from_flg Fabricator().round_cope_length Fabricator().round_cope_depth Fabricator().round_mtrl_length Fabricator().bm_edge_dist Fabricator().square_cut_slope_bm Fabricator().bm_show_design_loads Fabricator().bm_show_end_elev Fabricator().bm_show_elev_at Fabricator().bm_add_work_pt_dim Fabricator().col_show_c_face Fabricator().col_show_a_face Fabricator().mill_cut_col_end Fabricator().show_col_pin_hole Fabricator().pin_hole_dia Fabricator().pin_hole_vert_edge_dist Fabricator().col_show_design_loads Fabricator().col_show_end_elev Fabricator().shear_hss_notch_width_clear Fabricator().shear_hss_notch_radius Fabricator().auto_shear_hss_notch_radius Fabricator().hbrc_gusset_clips Fabricator().hbrc_gusset_clips_on Fabricator().hbrc_detailed Fabricator().hbrc_show_design_loads Fabricator().edge_dist_hbrc Fabricator().vbrc_detailed Fabricator().vbrc_show_design_loads Fabricator().edge_dist_vbrc Fabricator().vb_hss_notch_width_clear Fabricator().vb_hss_notch_radius Fabricator().auto_vb_hss_notch_radius Fabricator().vb_hss_notch_prep
Erection View Detailing Options
Fabricator().misc_desc() returns a list of descriptions ( strings ), each of which corresponds to a line on the list of descriptions for Home > Project Settings > Fabricator > Piecemarking > Member Descriptions > the " Default Descriptions " tab > Miscellaneous members . As shown in the following examples, the misc_desc() method can take a line number (integer) as an argument:
# Prints line 1 of miscellaneous members descriptions. from fab import Fabricator print(Fabricator().misc_desc(1))
# Prints line 5 of miscellaneous members descriptions. from fab import Fabricator print(Fabricator().misc_desc(5))
Fabricator().mem_desc() returns a dictionary whose keys are member types such as "BEAM" . The values assigned to each key (member type) are returned as a tuple that contains the System and Sheet autoload piecemark prefixes ('B_', 'B') .
# Prints the keys in the mem_desc() dictionary. from fab import Fabricator print(Fabricator().mem_desc().keys())
# Prints values for "BEAM" key in mem_desc(). from fab import Fabricator print(Fabricator().mem_desc()["BEAM"])
Fabricator().bevel_symbol_base Fabricator().show_degrees_bevel_symbol Fabricator().weld_symbol_on_mtrl Fabricator().hole_symbol_on_mtrl Fabricator().pcmk_on_mtrl Fabricator().show_paint_stripe Fabricator().show_nonstd_holes Fabricator().designate_nonstd_holes
Fabricator().show_cnc_mem_details Fabricator().gage_center_marks Fabricator().web_NS Fabricator().top_flg_NS Fabricator().bot_flg_NS Fabricator().web_FS Fabricator().top_flg_FS Fabricator().bot_flg_FS Fabricator().move_far_side_web_marks Fabricator().gage_web_marks_moved
Fabricator().perp_shear_tab_marks Fabricator().bm_web_single_marks Fabricator().bm_web_double_marks Fabricator().col_bm_flg_marks Fabricator().col_flg_stiff_marks Fabricator().brc_gusset_marks Fabricator().conn_stiff_marks
Fabricator().stair_tread(num).TypeOfTread Fabricator().stair_tread(num).PlateThickness Fabricator().stair_tread(num).NosingDepth Fabricator().stair_tread(num).NosingReturnTop Fabricator().stair_tread(num).NosingReturnBottom Fabricator().stair_tread(num).remove_back_bends Fabricator().stair_tread(num).SanitaryCoveWidth Fabricator().stair_tread(num).PanDepth Fabricator().stair_tread(num).PanReturnLength Fabricator().stair_tread(num).NosingBendType Fabricator().stair_tread(num).TreadSupportType Fabricator().stair_tread(num).TreadWidth Fabricator().stair_tread(num).BearingBarsThickness Fabricator().stair_tread(num).BearingBarsDepth Fabricator().stair_tread(num).BearingBarsSpacing Fabricator().stair_tread(num).BearingBarQuantity Fabricator().stair_tread(num).CrossBarsThickness Fabricator().stair_tread(num).CrossBarsDepth Fabricator().stair_tread(num).CrossBarsSpacing Fabricator().stair_tread(num).EndPlatesThickness Fabricator().stair_tread(num).EndPlatesDepth Fabricator().stair_tread(num).NosingWidth Fabricator().stair_tread(num).bolt_dia Fabricator().stair_tread(num).HolesVerticalDistance Fabricator().stair_tread(num).HolesHorizontalDistance Fabricator().stair_tread(num).HolesHorizontalSpacing
Where
num
is an integer between 1 and 16, inclusive.
Fabricator().category_defs returns a list of definitions ( strings ) from the Category Settings window.
# Prints the category definition listed on line 1. from fab import Fabricator print(Fabricator().category_defs[0])
# Prints the total quantity of category definitions. from fab import Fabricator print(len(Fabricator().category_defs)) # len() is a Python function for list objects.
# Applies the selected category to the selected member. from dialog import Dialog from dialog.combobox import Combobox from fab import Fabricator from member import MemberLocate from param import ClearSelection # dialog opens Dlg0 = Dialog( "Select a Member Category" ) Menu1 = Combobox( Dlg0, "cat", Fabricator().category_defs, label="Category:", default=Fabricator().category_defs[0]) # dialog closes when user presses "OK" or "Cancel" if Dlg0.Run(): #if user pressed "OK" mem1 = MemberLocate("Select a member") mem1.Category = Dlg0.cat mem1.Update() ClearSelection() else: #if user pressed "Cancel" print("You have canceled this operation.")
Fabricator().user_route() returns a list of the four names of the routing configurations (strings). For example, it your current setup uses the default names, it returns the following list: ['MULT. CUTTING #', LABOR CODE', 'REMARKS', 'JOB COST CODE'] .
# Prints the names for route configurations 1, 2, 3, 4. from fab import Fabricator print(Fabricator().user_route())
# Prints the name of user routing configuration #1. from fab import Fabricator print(Fabricator().user_route()[0])
The names of user routing configurations are user configurable, not hard coded. Any of the strings in the list returned with Fabricator().user_route() can be used as an argument in user_rout(). In the example that follows, Fabricator().user_route("MULT. CUTTING #") returns the list of definitions in the routing configuration named "MULT. CUTTING #".
# Prints a list of definitions in "MULT. CUTTING #". from fab import Fabricator print(Fabricator().user_route("MULT. CUTTING #"))
None is returned if there are no entries in setup to the particular configuration that is called. The error fab.error: Header name does not exits is returned if you run the above example and there is no configuration named "MULT. CUTTING #". A way to prevent this fab.error is to return the definition for routing configuration 1 by index [0].
# Prints a list of definitions in routing configuration 1. from fab import Fabricator print(Fabricator().user_route(Fabricator().user_route()[0]))
# Prints definitions in routing configurations 1, 2, 3 & 4. from fab import Fabricator route_1 = Fabricator().user_route()[0] route_2 = Fabricator().user_route()[1] route_3 = Fabricator().user_route()[2] route_4 = Fabricator().user_route()[3] print("Route 1 defs=", Fabricator().user_route(route_1)) print("Route 2 defs=", Fabricator().user_route(route_2)) print("Route 3 defs=", Fabricator().user_route(route_3)) print("Route 4 defs=", Fabricator().user_route(route_4))
This next script outputs the name of each routing configuration and the definitions under each name. If there are no definitions under a particular configuration, the script prints "The list is empty" .
# Prints definitions in routing configurations 1, 2, 3 & 4. for route in Fabricator().user_route(): print("\nUser Route Description: %s" % route) if Fabricator().user_route(route): for item in Fabricator().user_route(route): print(" %s " % item) else: print("The list is empty")
Here's a script for selecting finishes from route 1. In Home > Project Settings > Fabricator > Sheets and Reports > Bill of Material Layout , " Mult Cutting # " was renamed "FINISH". Then finishes were entered to the route 1 tab ('FINISH') on the User Routing Settings setup window.
# Applies the selection made on the dialog to the selected member. from dialog import Dialog from dialog.combobox import Combobox from dialog.dimension import DimensionStyled from dialog.dialog import ResponseNotOK import Tkinter from fab import Fabricator from member import MemberLocate from param import ClearSelection # dialog begin # "FINISH" is defined in Bill Layout in place of "MULT CUT #" Dlg0 = Dialog("Select a Finish") Menu1 = Combobox( Dlg0, "fin", Fabricator().user_route("FINISH"), label="Finish:", default=Fabricator().user_route("FINISH")[0]) # dialog end try: dd = Dlg0.done() mem1 = MemberLocate("Select a member") mem1.Route1Description = Dlg0.fin mem1.Update() ClearSelection() except ResponseNotOK: print("You have canceled this operation.")
Following is a generic version of the script shown above. This script lets the user apply a route 1 definition to a member regardless of the name that is given to route1 in setup.
# Applies the selection on the dialog to the selected member. from dialog import Dialog from dialog.combobox import Combobox from dialog.dimension import DimensionStyled from dialog.dialog import ResponseNotOK import Tkinter from fab import Fabricator from member import MemberLocate from param import ClearSelection # dialog begin Dlg0 = Dialog("Select a User Route 1 Definition") Menu1 = Combobox( Dlg0, "xxx", Fabricator().user_route(Fabricator().user_route()[0]), label="User Route 1:", default=Fabricator().user_route(Fabricator().user_route()[0])[0]) # dialog end try: dd = Dlg0.done() mem1 = MemberLocate("Select a member") mem1.Route1Description = Dlg0.xxx mem1.Update() ClearSelection() except ResponseNotOK: print("You have canceled this operation.")
Fabricator().kettle_length Fabricator().kettle_width Fabricator().kettle_depth Fabricator().allow_progressive_dip Fabricator().kettle_max_progressive_dip Fabricator().kettle_crane_capacity