#################################################################### # # Name: rail-stairs.scl # Author: Tim Jacobs # July 26, 1996 # Description: Make rails and stairs for caboose # #################################################################### { include "ladder.scl"; platformwidth = 4.2; platformleft = - ( platformwidth / 2.0 ); platformright = platformwidth / 2.0; railheight = 2 * rungspacing + rungthick; supportinterval = platformwidth / 4; railradius = 0.051; } # make rail for caboose platform { railprofile = roundPolyline( polyline( pt( 0, -0.008, platformleft ), pt( 0, railheight, platformleft ), pt( 0, railheight, platformright ), pt( 0, -0.008, platformright ) ), 0.2 ); mainrail = circTubeConstantWidth( railprofile, railradius, true ); supportprofile = crvFromPolyline( polyline( pt( 0, -0.008, platformleft + supportinterval ), pt( 0, railheight, platformleft + supportinterval ) ) ); railsupport = circTubeConstantWidth( supportprofile, railradius - 0.001, true ); railsupport2 = objTransform( railsupport, tz( supportinterval ) ); railladder = objTransform( ladder, txyz( -railradius + 0.001, -railradius + 0.005, supportinterval / 2 ) ); supportgroup = group( railsupport, railladder ); rail = combineShells( mainrail, supportgroup, "+" ); } setColor( rail, "DarkSlateGray" ); # make platform steps { stairheight = 1.2; stepsize = stairheight / 3.0; treadsize = 2 * stepsize / 3; stairwidth = 0.79; stairthick = 0.1; } { sideprofile = profile( pt( 0.002, 0.002, -treadsize - 0.05 ), pt( 0.002, 0.002, 2 * ( 1.0 - treadsize ) / 3 ), pt( 0.002, -stairheight - stairthick - 0.002, 2 * ( stairheight + stairthick ) / 3 + 0.07 ), pt( 0.002, -stairheight - stairthick - 0.002, 2 * ( stairheight - treadsize ) / 3 - 0.1 ), pt( 0.002, 0.002, -treadsize - 0.05 ) ); stairside = extrudeDir( sideprofile, vec( -stairthick, 0, 0 ), true ); stairside2 = objTransform( stairside, tx( stairwidth + stairthick - 0.004 ) ); sidegroup = group( stairside, stairside2 ); stairprofile = profile( pt( 0, -0.002, 0 ), pt( 0, -0.002, stairthick ), pt( 0, -stepsize, stairthick ), pt( 0, -stepsize, stairthick + treadsize ), pt( 0, - ( 2 * stepsize ), stairthick + treadsize ), pt( 0, - ( 2 * stepsize ), stairthick + ( 2 * treadsize ) ), pt( 0, - ( 3 * stepsize ), stairthick + ( 2 * treadsize ) ), pt( 0, - ( 3 * stepsize ), stairthick + ( 3 * treadsize ) ), pt( 0, - ( 3 * stepsize + stairthick ), stairthick + ( 3 * treadsize ) ), pt( 0, - ( 3 * stepsize + stairthick ), 2 * treadsize ), pt( 0, - ( 2 * stepsize + stairthick ), 2 * treadsize ), pt( 0, - ( 2 * stepsize + stairthick ), treadsize ), pt( 0, - ( stepsize + stairthick ), treadsize ), pt( 0, - ( stepsize + stairthick ), 0 ), pt( 0, -0.002, 0 ) ); stairs = reverseObj( extrudeDir( stairprofile, vec( stairwidth, 0, 0 ), true ) ); stairseta = combineShells( stairs, sidegroup, "+" ); stairsetwidth = stairwidth + 2 * stairthick - 0.004; stairset = objTransform( stairseta, txyz( stairthick, 0, stairheight + treadsize ) ); setColor( stairset, "DarkSlateGray" ); } # make shell to subtract from base before adding stairs { subprofile = profile( pt( stairthick / 2, -0.5, stairthick / 2.0 ), pt( stairwidth + 3 * stairthick / 2, -0.5, stairthick / 2.0 ), pt( stairwidth + 3 * stairthick / 2, -0.5, stairheight + 2.0 ), pt( stairthick / 2, -0.5, stairheight + 2.0 ), pt( stairthick / 2, -0.5, stairthick / 2.0 ) ); stairsuba = extrudeDir( subprofile, vec( 0, 1.5, 0 ), true ); stairsub = objTransform( stairsuba, tz( stairheight + treadsize ) ); }