;Tip1779: STL.LSP STEEL SHAPES OF ALL TYPES AND SIZES (C)2002, Al Rogers $50 Bonus Winner ;STL.LSP Version 1.1 - Al's STEEL MILL ;(C) Copyright 1998 by Al Rogers ;E-mail: alrogers@ici.net ;;----------------------------------------------------------------------; ;Rev. 1.1 - 12/14/99 - Added Bar size C shapes. ;;----------------------------------------------------------------------; ;THIS PROGRAM IS PROVIDED "AS IS" AND WITH ALL FAULTS. AL ROGERS ;SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR ;FITNESS FOR A PARTICULAR USE. AL ROGERS DOES NOT WARRANT THAT THE ;OPERATION OF THIS PROGRAM WILL BE UNINTERRUPTED OR ERROR FREE. ;;----------------------------------------------------------------------; ;CREDIT WHERE CREDIT IS DUE: ;THIS PROGRAM WAS INSPIRED BY 2 OTHER SIMILAR PROGRAMS THAT EACH ;EMBODIED PORTIONS OF THE FUNCTIONALITY OF THIS PROGRAM. HOPEFULLY ;I HAVE SUCCEEDED IN INCORPORATING THE BEST FEATURES OF BOTH AS WELL ;AS A FEW NEW INNOVATIONS OF MY OWN. THESE PROGRAMS ARE AS FOLLOWS: ; ;STEEL.LSP BY JEFFREY DAVID WELLS OF PELLHAM PHILLIPS HAGERMAN ;ARCHITECTS AND ENGINEERS, SPRINGFIELD, MO ; ;BEAM.LSP VERSION 1.0 BY STEVE Q. STAPLETON, PO BOX 16066, JACKSON, ;MS 39236, MODIFIED BY BILL LE COUTEUR. ;----------------------------------------------------------------------; ;COMPANION FILES: ;STL.LSP HAS 22 COMPANION FILES THAT ARE REQUIRED TO BE IN THE SAME ;DIRECTORY IN ORDER TO FUNCTION. THESE FILES ARE NAMED AS FOLLOWS: ;STL.DCL, STL_HELP.TXT, STL_C.DIM, STL_C_BAR.DIM,STL_HP.DIM, STL_L.DIM, ;STL_M.DIM, STL_MC.DIM, STL_MET_A.DIM, STL_MET_C.DIM, STL_MET_R.DIM, ;STL_MET_W.DIM, STL_MT.DIM, STL_P.DIM, STL_PX.DIM, STL_PXX.DIM, STL_S.DIM, ;STL_ST.DIM, STL_TS_RECT.DIM, STL_TS_SQ.DIM, STL_TUBE.DIM, STL_W.DIM, ;STL_WT.DIM. THESE FILES CONTAIN THE DIALOG (.DCL) CODE, A HELP FILE (.TXT) ;AND THE DATA TABLES FOR SHAPE DIMENSIONS (.DIM). ;----------------------------------------------------------------------; ;1. ABOUT THE PROGRAM: ; A. ALL SHAPES ARE DRAWN AS POLY-LINES FOR EASE OF HANDLING, EXTENDING TO, ; TRIMMING TO, CHANGING LINETYPE OF, REGION MODELING FOR COMPOSITE SHAPE ; ANALYSIS, AND CONVERTING TO 3D SOLID AND 3D SURFACE. INCLUDES AUTOMATIC ; "PLINEWID" SETTING TO "0", THEN RE-SET TO ORIGINAL SETTING. ; B. INSERT POINTS ARE TOP BEAM CENTER, TOP TUBE CENTER, PIPE OR TUBE CENTER, ; ANGLE HEEL, AND CHANNEL HEEL. ; C. SHAPE CONTOURS ARE DRAWN ACCURATELY WITH TAPERED FLANGES AND RADIUSED ; CORNERS AND EDGES. ; D. THE PROGRAM SETS AN AUTOMATIC "OSMODE" SETTING OF "111" (INTERSECTION, ; ENDPOINT, MIDPOINT, CENTERPOINT, NODE, AND INSERTION) TO AID IN ; SELECTING INSERT POINT, AUTOMATIC RE-SET TO "0" FOR DRAWING THE SHAPE, ; THEN RESET TO ORIGINAL OSMODE OF DRAWING ENVIRONMENT. ; E. INSERT PROMPT HAS A REFERENCE OPTION. THIS ALLOWS PLACEMENT OF INSERT ; POINT BY "PICKING" A BASE POINT AND THEN ENTERING ITS X,Y REFERENCE TO ; THE "PICKED" BASE POINT. ; F. PROGRAM DRAWS ALL OF THE STRUCTURAL SHAPES, PIPE, AND TUBE LISTED IN ; THE AMERICAN INSTITUTE OF STEEL CONSTRUCTION'S (AISC) STEEL CONSTRUCTION ; MANUAL, EITHER THE ASD NINTH EDITION OR THE LRFD FIRST EDITION. METRIC ; SHAPE DATA TABLES WERE OBTAINED FROM BEAM.LSP BY STEVE Q. STAPLETON AND ; BILL LE COUTEUR. ; G. THE PROGRAM ALTERS THE DRAWING ENVIRONMENT WITH A TEMPORARY "OSMODE" ; "111" AND "PLINEWID" "0" SETTING. SHAPES ARE DRAWN ON THE CURRENT ; LAYER AND UCS. ; H. IF YOU MAKE IMPROVEMENTS, HAVE COMMENTS, OR FIND BUGS, PLEASE CONTACT ; ME BY E-MAIL: alrogers@ici.net ;2. LOADING AND STARTING THE PROGRAM: ; A. FIRST, ALL STL FILES SHOULD BE LOCATED IN THE SAME DIRECTORY. THE DIRECTORY ; SHOULD BE SPECIFIED IN THE AUTOCAD SEARCH PATH. MY PERSONAL APPROACH IS TO ; PUT ALL MY CUSTOM AUTOLISP FILES IN A DIRECTORY CALLED AUTOLISP WHICH I THEN ; ADD TO MY AUTOCAD SEARCH PATH. THIS KEEPS THEM SEPARATE FROM ALL THE ONES ; SUPPLIED WITH AUTOCAD IN THE SUPPORT DIRECTORY. ; B. LOADING CAN BE DONE BY VARIOUS MEANS DEPENDING ON HOW FREQUENTLY YOU EXPECT ; TO USE THE PROGRAM. FOR INFREQUENT USE, THE "LOAD APPLICATION" MENU ON THE ; "TOOLS" PULL-DOWN (R13 AND R14) MAY SUFFICE. YOU CAN ALSO LOAD DIRECTLY ; AT THE COMMAND PROMPT BY TYPING (LOAD "STL") AND PRESSING ENTER. FOR ; FREQUENT USERS WHO WANT THE PROGRAM AVAILABLE AT ALL TIMES, ADD (LOAD "STL") ; TO YOUR ACAD.LSP FILE SO THAT THE PROGRAM LOADS AUTOMATICALLY EVERY TIME. ; YOU CAN THEN START THE PROGRAM BY TYPING STL AT THE COMMAND PROMPT OR BY ; CONFIGURING A CUSTOM TOOLBAR BUTTON TO START. MY PERSONAL APPROACH IN R13 AND ; R14 IS TO CREATE AND CONFIGURE A CUSTOM TOOLBAR BUTTON THAT BOTH LOADS AND ; STARTS THE PROGRAM. THE BUTTON COMMAND IS (LOAD "STL") STL. IT'S THAT SIMPLE. ;3. PICK THE SHAPE TYPE: ; WHEN THE PROGRAM STARTS, IT CALLS UP THE MAIN DIALOG BOX. THE BOX CONTAINS ; 23 BUTTONS, ONE FOR EACH AVAILABLE SHAPE TYPE. WHEN A BUTTON IS SELECTED, ; A LIST OF AVAILABLE SHAPE SIZES IS DISPLAYED IN THE LIST BOX. FOR FORMED ; SHEET METAL SHAPES, THE USER IS PRESENTED WITH A POP-UP DIALOG TO ENTER SHAPE ; DIMENSIONS. ;4. PICK THE SHAPE SIZE: ; SCROLL THE LIST OF AVAILABLE SHAPE SIZES AND PICK A SIZE. THE PICKED SIZE ; WILL BE HIGHLIGHTED AND A LIST OF THE DIMENSIONS FOR THAT SIZE WILL BE ; DISPLAYED TO THE LEFT OF THE LIST BOX. ;5. PICK THE VIEW: ; FIVE VIEW SELECTIONS ARE AVAILABLE BY RADIO BUTTONS. SELECT A VIEW BUTTON ; AND YOU ARE NOW READY TO DRAW THE SHAPE. THE 2D END VIEW IS DEFAULT. IF YOU ; SELECT ANY OF THE OTHER 4 VIEWS, A LENGTH DIMENSION IS REQUIRED IN THE ; HIGHLIGHTED LENGTH EDIT BOX. IF YOU DO NOT ENTER A LENGTH DIMENSION THE ; DEFAULT IS 1 UNIT. ;6. PICK OK: ; THE PROGRAM WILL DISPLAY AN ALERT BOX WITH A OOPS! ERROR MESSAGE TO TRY AGAIN ; IF YOU FAIL TO PICK EITHER A SHAPE TYPE OR SHAPE SIZE. IF YOU FAIL TO SELECT ; A VIEW, THE PROGRAM WILL DRAW THE 2D END VIEW BY DEFAULT. ;7. HELP IS AVAILABLE: ; IF YOU EXPERIENCE PROBLEMS, CONTACT ME BY E-MAIL: alrogers@ici.net ; I HOPE YOU WILL GAIN MUCH IN THE WAY OF PRODUCTIVITY THROUGH THE USE OF THIS ; PROGRAM. ;--------------------------INTERNAL ERROR HANDLER---------------------; (defun STL_ERR (MSG) (if (or (/= MSG "Function cancelled") ; If an error (such as ESC) occurs (= MSG "quit / exit abort") ) ;_ end of or (princ) (princ (strcat "\nError: " MSG)) ) ; while this command is active... (setvar "OSMODE" OS) ; Restore saved modes (setvar "PLINEWID" PLW) (setq *ERROR* OLDERR) ; Restore old *error* handler (princ) ) ;end STL_ERR ;------------------------------MAIN PROGRAM----------------------------; (defun DTR (A) (* pi (/ A 180.0))) ;----------------------------------------------------------------------; (defun RTD (A) (/ (* A 180.0) pi)) ;----------------------------------------------------------------------; ;Read data file and parse "size string", nth 0, for display in ;list box as variable display_list. (defun STL_READ_DIM_FILE (/ A AA) (STL_SET_NIL) (setq A "") (STL_DEFAULTS) (STL_OPEN_DIM_FILE) (while (/= A NIL) (setq A (read-line STL_DIM_FILE)) (if (/= A NIL) (progn (setq A (nth 0 (read A)) AA (append AA (list A)) ) ;_ end of setq ) ;end progn ) ;end if ) ;end while (setq DISPLAY_LIST (reverse AA)) (close STL_DIM_FILE) (start_list "get_size") (mapcar 'add_list DISPLAY_LIST) (end_list) ) ;end STL_READ_DIM_FILE ;-----------------------------------------------------------------------; (defun STL_SET_NIL () (setq STL_DEF_NEWTILE NIL STL_DEF_SIZE NIL STL_DEF_WHICH_VIEW NIL STL_DEF_DISPLAY_LIST NIL STL_DEF_INDEX NIL STL_DEF_D NIL STL_DEF_TW NIL STL_DEF_BF NIL STL_DEF_TF NIL STL_DEF_K NIL STL_DEF_TEMP_DIST1 NIL STL_DEF_TEMP_DIST2 NIL STL_DEF_L_VERT NIL STL_DEF_L_HORIZ NIL STL_DEF_L_THICK NIL STL_DEF_TUBE_VERT NIL STL_DEF_TUBE_HORIZ NIL STL_DEF_TUBE_THICK NIL STL_DEF_DEPTHDIM NIL STL_DEF_WEBDIM NIL STL_DEF_WIDTHDIM NIL STL_DEF_FLANGEDIM NIL STL_DEF_KDIM NIL STL_DEF_OD_PIPEDIM NIL STL_DEF_ID_PIPEDIM NIL STL_DEF_DEPTH_TUBEDIM NIL STL_DEF_WIDTH_TUBEDIM NIL STL_DEF_THK_TUBEDIM NIL STL_DEF_2DEND NIL STL_DEF_2DTOP NIL STL_DEF_2DSIDE NIL STL_DEF_3DSOLID NIL STL_DEF_3DSURFACE NIL STL_DEF_LGTH NIL STL_DEF_SCALE NIL STL_DEF_METSCALE NIL SIZE NIL WHICH_VIEW NIL DISPLAY_LIST NIL INDEX NIL D NIL TW NIL BF NIL TF NIL K NIL TEMP_DIST1 NIL TEMP_DIST2 NIL L_VERT NIL L_HORIZ NIL L_THICK NIL TUBE_VERT NIL TUBE_HORIZ NIL TUBE_THICK NIL SCALE NIL ) ;_ end of setq (set_tile "depth" "") (set_tile "web" "") (set_tile "width" "") (set_tile "flange" "") (set_tile "k_dim" "") (set_tile "od_pipe" "") (set_tile "id_pipe" "") (set_tile "depth_tube" "") (set_tile "width_tube" "") (set_tile "thk_tube" "") (start_list "get_size") (mapcar 'add_list DISPLAY_LIST) (end_list) ) ;end STL_SET_NIL ;-----------------------------------------------------------------------; ;Read selected size, size, from list box and read dimension list from ;data file. Set dimension variables. (defun STL_DIM_LIST (/ TEST) (STL_OPEN_DIM_FILE) (progn (while (/= SIZE TEST) (setq SIZE_DIMS (read (read-line STL_DIM_FILE)) TEST (strcase (nth 0 SIZE_DIMS)) ) ;end setq ) ;end while (close STL_DIM_FILE) ) ;end progn (STL_SET_DIM) ) ;end STL_DIM_LIST ;-----------------------------------------------------------------------; ;Find and open data file, stl_*.dim (defun STL_OPEN_DIM_FILE () (if (= NEWTILE "w_shape") (setq STL_DIM_FILE (open (findfile "stl_w.dim") "r")) ) ;_ end of if (if (= NEWTILE "m_shape") (setq STL_DIM_FILE (open (findfile "stl_m.dim") "r")) ) ;_ end of if (if (= NEWTILE "hp_shape") (setq STL_DIM_FILE (open (findfile "stl_hp.dim") "r")) ) ;_ end of if (if (= NEWTILE "s_shape") (setq STL_DIM_FILE (open (findfile "stl_s.dim") "r")) ) ;_ end of if (if (= NEWTILE "c_shape") (setq STL_DIM_FILE (open (findfile "stl_c.dim") "r")) ) ;_ end of if (if (= NEWTILE "c_bar_shape") (setq STL_DIM_FILE (open (findfile "stl_c_bar.dim") "r")) ) ;_ end of if (if (= NEWTILE "mc_shape") (setq STL_DIM_FILE (open (findfile "stl_mc.dim") "r")) ) ;_ end of if (if (= NEWTILE "l_shape") (setq STL_DIM_FILE (open (findfile "stl_l.dim") "r")) ) ;_ end of if (if (= NEWTILE "wt_shape") (setq STL_DIM_FILE (open (findfile "stl_wt.dim") "r")) ) ;_ end of if (if (= NEWTILE "mt_shape") (setq STL_DIM_FILE (open (findfile "stl_mt.dim") "r")) ) ;_ end of if (if (= NEWTILE "st_shape") (setq STL_DIM_FILE (open (findfile "stl_st.dim") "r")) ) ;_ end of if (if (= NEWTILE "std_pipe") (setq STL_DIM_FILE (open (findfile "stl_p.dim") "r")) ) ;_ end of if (if (= NEWTILE "xs_pipe") (setq STL_DIM_FILE (open (findfile "stl_px.dim") "r")) ) ;_ end of if (if (= NEWTILE "xxs_pipe") (setq STL_DIM_FILE (open (findfile "stl_pxx.dim") "r")) ) ;_ end of if (if (= NEWTILE "tube_round") (setq STL_DIM_FILE (open (findfile "stl_tube.dim") "r")) ) ;_ end of if (if (= NEWTILE "ts_square") (setq STL_DIM_FILE (open (findfile "stl_ts_sq.dim") "r")) ) ;_ end of if (if (= NEWTILE "ts_rect") (setq STL_DIM_FILE (open (findfile "stl_ts_rect.dim") "r")) ) ;_ end of if (if (= NEWTILE "met_w_shape") (setq STL_DIM_FILE (open (findfile "stl_met_w.dim") "r")) ) ;_ end of if (if (= NEWTILE "met_r_shape") (setq STL_DIM_FILE (open (findfile "stl_met_r.dim") "r")) ) ;_ end of if (if (= NEWTILE "met_c_shape") (setq STL_DIM_FILE (open (findfile "stl_met_c.dim") "r")) ) ;_ end of if (if (= NEWTILE "met_a_shape") (setq STL_DIM_FILE (open (findfile "stl_met_a.dim") "r")) ) ;_ end of if ) ;end STL_OPEN_DIM_FILE ;-----------------------------------------------------------------------; (defun STL_SET_DIM () (if (and (= NEWTILE "w_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "m_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "hp_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "s_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "c_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "c_bar_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "mc_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "l_shape") (/= SIZE NIL)) (STL_L_SETDIM) ) ;_ end of if (if (and (= NEWTILE "wt_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "mt_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "st_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "std_pipe") (/= SIZE NIL)) (STL_PIPE_SETDIM) ) ;_ end of if (if (and (= NEWTILE "xs_pipe") (/= SIZE NIL)) (STL_PIPE_SETDIM) ) ;_ end of if (if (and (= NEWTILE "xxs_pipe") (/= SIZE NIL)) (STL_PIPE_SETDIM) ) ;_ end of if (if (and (= NEWTILE "tube_round") (/= SIZE NIL)) (STL_PIPE_SETDIM) ) ;_ end of if (if (and (= NEWTILE "ts_square") (/= SIZE NIL)) (STL_TS_SETDIM) ) ;_ end of if (if (and (= NEWTILE "ts_rect") (/= SIZE NIL)) (STL_TS_SETDIM) ) ;_ end of if (if (and (= NEWTILE "met_w_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "met_r_shape") (/= SIZE NIL)) (STL_TS_SETDIM) ) ;_ end of if (if (and (= NEWTILE "met_c_shape") (/= SIZE NIL)) (STL_W_SETDIM) ) ;_ end of if (if (and (= NEWTILE "met_a_shape") (/= SIZE NIL)) (STL_L_SETDIM) ) ;_ end of if ) ;end STL_SET_DIM ;-----------------------------------------------------------------------; (defun DRAW_SHAPE () (if (and (/= NEWTILE NIL) (= WHICH_VIEW "2d_end")) (DRAW_SHAPE_END_VIEW) ) ;_ end of if (if (and (/= NEWTILE NIL) (= WHICH_VIEW "2d_top")) (DRAW_SHAPE_TOP_VIEW) ) ;_ end of if (if (and (/= NEWTILE NIL) (= WHICH_VIEW "2d_side")) (DRAW_SHAPE_SIDE_VIEW) ) ;_ end of if (if (and (/= NEWTILE NIL) (= WHICH_VIEW "3d_solid")) (DRAW_SHAPE_END_VIEW) ) ;_ end of if (if (and (/= NEWTILE NIL) (= WHICH_VIEW "3d_surface")) (DRAW_SHAPE_END_VIEW) ) ;_ end of if ) ; end DRAW_SHAPE ;-----------------------------------------------------------------------; (defun DRAW_SHAPE_END_VIEW () (initget 137 "R") (setq INSERT_PT (getpoint "\n/Reference: ")) (if (= INSERT_PT "R") (progn (setq BPT (getpoint "\nEnter BASE point: ")) (setq RPT (getpoint "\nEnter x,y REFERENCE from BASE point: ")) (setq INSERT_PT (list (+ (car BPT) (car RPT)) (+ (cadr BPT) (cadr RPT)) ) ;_ end of list ) ;_ end of setq ) ;end progn ) ;end if (setvar "OSMODE" 0) (if (= NEWTILE "w_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "m_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "hp_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "s_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "c_shape") (DRAW_C_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "c_bar_shape") (DRAW_C_BAR_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "mc_shape") (DRAW_C_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "l_shape") (DRAW_L_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "wt_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "mt_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "st_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "std_pipe") (DRAW_PIPE_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "xs_pipe") (DRAW_PIPE_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "xxs_pipe") (DRAW_PIPE_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "tube_round") (DRAW_PIPE_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "ts_square") (DRAW_TS_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "ts_rect") (DRAW_TS_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "met_w_shape") (DRAW_W_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "met_r_shape") (DRAW_TS_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "met_c_shape") (DRAW_C_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "met_a_shape") (DRAW_L_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "form_ang_shape") (DRAW_FORM_ANG_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "form_chann_shape") (DRAW_FORM_CHANN_SHAPE_TOP) ) ;_ end of if (if (= NEWTILE "form_zee_shape") (DRAW_FORM_ZEE_SHAPE_TOP) ) ;_ end of if ) ;end DRAW_SHAPE ;-----------------------------------------------------------------------; (defun DRAW_SHAPE_SIDE_VIEW () (initget 137 "R") (setq INSERT_PT (getpoint "\n