// make tracks by Jim Lemon // World copyright © 2007 All Rights Reserved startshape tracks background {b -1 sat 0 h 0} rule tracks { segment_test_1{} // segment{} } rule segment { possegment{x -6 y 11.01}; possegment{x -12 y 11.01}; negYsegment{x -17.82 y 5.5}; negYsegment{x -17.82 y 0}; negYsegment{x -17.82 y -5.5}; ULnegposcurvedsegment{x -12 y 11.01}; URposnegcurvedsegment{x 0 y 11.01}; LRposposcurvedsegment{x 0 y 0}; LLnegnegcurvedsegment{x -12 y -17}; ULnegposcurvedsegment{}; LLnegnegcurvedsegment{y -11.01}; URposnegcurvedsegment{}; LRposposcurvedsegment{y -11.01}; LRposposcurvedsegment{x -5.8 y -17}; negYsegment{x 0 y -6}; negYsegment{x 0 y 0}; negYsegment{x 0 y 6}; negYsegment{x 0 y 12}; negsegment{x 0}; negsegment{x -6}; negsegment{x -12}; negsegment{x -18}; negsegment{x -6 y -17}; } rule segment_test_1{ LRposposcurvedsegment{x 6}; URposnegcurvedsegment{x 6 y 11}; negsegment{x 6}; ULnegposcurvedsegment{y 11}; negsegment{x 6 y 11}; // draw the ballast-es, with gore // then the sleepers-es, // then the rails-es /* */ LL30negnegcurvedsegment{x -11.3 y 2.85 s -1 -1}; LL30negnegcurvedsegmentRails{}; LLnegnegcurvedsegmentRails{}; LL30negnegcurvedsegmentSleepers{}; LLnegnegcurvedsegmentSleepers{}; LL30negnegcurvedsegmentBallast0{}; LLnegnegcurvedsegmentBallast0{}; LL30negnegcurvedsegmentBallast{}; LLnegnegcurvedsegmentBallast{}; } // short radius curves rule LLnegnegcurvedsegment { 45*{ x -0.2 r -2} track {} } rule LLnegnegcurvedsegmentRails { 45*{ x -0.2 r -2} rails {} } rule LLnegnegcurvedsegmentSleepers { 45*{ x -0.2 r -2} sleepers {} } rule LLnegnegcurvedsegmentBallast { 45*{ x -0.2 r -2} ballast {} } rule LLnegnegcurvedsegmentBallast0 { 45*{ x -0.2 r -2} ballast0 {} } rule ULnegposcurvedsegment { 45*{ x -0.2 r 2} track {} } rule URposnegcurvedsegment { 45*{ x 0.2 r -2} track {} } rule LRposposcurvedsegment { 45*{ x 0.2 r 2} track {} } rule poscurvedsegment { 45*{ x 0.2 r 2} track {} } // long radius curves rule LL30negnegcurvedsegment { 30*{ x -0.2 r -1} track {} } rule LL30negnegcurvedsegmentSleepers { 30*{ x -0.2 r -1} sleepers {} } rule LL30negnegcurvedsegmentBallast { 30*{ x -0.2 r -1} ballast {} } rule LL30negnegcurvedsegmentBallast0 { 30*{ x -0.2 r -1} ballast0 {} } rule LL30negnegcurvedsegmentRails { 30*{ x -0.2 r -1} rails {} } // straight segments rule posYsegment { possegment{r 90} } rule negYsegment { possegment{r -90} } rule possegment { 30*{ x 0.2} track {} } rule negsegment { 30*{ x -0.2} track {} } // basic track parts rule track { // render from the bottom up, the famous painter's algorithm rails{} // the rails and spikes, steel sleepers{} // the ties, wood ballast{} // the right-of-way, roadbed, gravel } rule ballast { SQUARE{ s 0.23 1.1 b 0.9 sat 0 h 0} // outer concrete SQUARE{ s 0.23 1 b 0.7 sat 0 h 0} // outer gravel SQUARE{ s 0.24 0.87 b 0.5 sat 0 h 0} // middle gravel } rule ballast0 { SQUARE{ s 0.24 0.87 b 0.5 sat 0 h 0} // middle gravel } rule sleepers { SQUARE { x 0.02 y -0.01 s 0.06 0.8 b 0 } // tie shadow SQUARE{ x 0 y 0.28 s 0.24 0.03 b 0} // upper rail shadow on gravel SQUARE{ x 0 y -0.32 s 0.24 0.03 b 0} // lower rail shadow on gravel SQUARE { s 0.08 0.8 b 0.8 b 0.5 sat 0.8 h 30 } // tie SQUARE{ x 0 y 0.29 s 0.23 0.03 b 0} // upper rail shadow on tie SQUARE{ x 0 y -0.31 s 0.23 0.03 b 0} // lower rail shadow on tie } rule rails { CIRCLE{ x 0.003 y -0.336 s 0.02 0.02 b 0} // lower spike shadow CIRCLE{ x 0 y -0.33 s 0.015 0.015 b 0.5 sat 1 h 200} // lower spike CIRCLE{ x 0 y -0.33 s 0.01 0.01 b 1 sat 0 h 0} // lower spike highlight CIRCLE{ x 0.003 y 0.324 s 0.02 0.02 b 0} // upper spike shadow CIRCLE{ x 0 y 0.33 s 0.015 0.015 b 0.5 sat 1 h 200} // upper spike CIRCLE{ x 0 y 0.33 s 0.01 0.01 b 1 sat 0 h 0} // upper spike highlight SQUARE{ x 0 y 0.3 s 0.24 0.03 b 0.5 sat 1 h 200} // upper rail SQUARE{ x 0 y 0.3 s 0.24 0.01 b 1 sat 0 h 0} // upper rail highlight SQUARE{ x 0 y -0.3 s 0.24 0.03 b 0.5 sat 1 h 200} // lower rail SQUARE{ x 0 y -0.3 s 0.24 0.01 b 1 sat 0 h 0} // lower rail highlight }