The fab module

Sheet Loading Settings Line Weights
ABM Report Criteria General Presentation
Clip Angle Settings Bolt Detailing Settings
Clip Angle Configurations Member and Material Piecemarking
Bent Plate Settings Connection Erectability Settings
Shear Plate Settings Member Detailing Settings
End Plate Settings Detail Erection View Defaults
Beam Seat Settings Member Descriptions
Joist Seat Setup Detailing Symbol Settings
Cap Plate Settings CNC Center Marks
Gusset Plate Settings Position and Match Marks
Column Splice Settings Stair Treads
Preferred Connection Material Sizes Category Settings
Dimension Settings User Routing Settings
Drawing Presentation Galvanizing Settings

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

Sheet Loading Settings


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

ABM Report Criteria

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

Clip Angle Settings

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

Clip Angle Configurations

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:


Bent Plate Settings

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

Shear Plate Settings

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

End Plate Settings

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

Beam Seat Settings

Fabricator().bm_seat_hole_type
      Fabricator().bm_seat_square_cut
      Fabricator().bm_seat_mem_edge_dist
      Fabricator().bm_seat_extend

Joist Seat Setup

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 "


Cap Plate Settings

Fabricator().cap_pl_min_thick

Gusset Plate Settings

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

Column Splice Settings

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

Dimension Settings

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

Drawing Presentation

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

Line Weights

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

General Presentation

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

Bolt Detailing Settings

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

Member Detailing Settings

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

 


Member Descriptions

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

Detailing Symbol Settings

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

CNC Center Marks

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

Position and Match Marks

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

Stair Treads

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.


Category Settings

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

User Routing Settings

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

Galvanizing options

Fabricator().kettle_length
Fabricator().kettle_width
Fabricator().kettle_depth
Fabricator().allow_progressive_dip
Fabricator().kettle_max_progressive_dip
Fabricator().kettle_crane_capacity