Source PostScript (ressort.pps)

Retour Texte non formaté
% ================== ressort ====================== %% syntaxe : L l n ress@rt --> ressort vertical de base (0, 0) /ress@rt { 5 dict begin /nbspires exch def %% nb de spires /l exch def %% demi-largeur /L exch def %% Longueur /i 0 def /hauteur 0 def newpath 0 0 smoveto { /hauteur hauteur L nbspires 1 add div add store /l l -1 mul store /i i 1 add store i nbspires 1 add eq {exit} if l hauteur slineto } loop 0 hauteur slineto stroke end } def %% syntaxe : L l n ress@rt* --> ressort vertical de base (0, 0), avec %% des pts aux extremites /ress@rt* { 3 copy pop pop 0 exch point 0 0 point ress@rt } def %% syntaxe : L l n ress@rt1 --> ressort vertical de base (0, 0), avec %% des decrochages aux extremites /ress@rt1 { 4 dict begin /n@ exch def /l@ exch def /L@ exch def /decal L@ 10 div def newpath 0 0 smoveto 0 decal srlineto 0 L@ smoveto 0 decal neg srlineto stroke gsave 0 decal stranslate L@ 2 decal mul sub l@ n@ ress@rt grestore end } def %% syntaxe : L l n ress@rt1* --> ressort vertical de base (0, 0), avec %% des pts et des decrochages aux extremites /ress@rt1* { 4 dict begin /n@ exch def /l@ exch def /L@ exch def /decal L@ 10 div def 0 L@ point 0 0 point newpath 0 0 smoveto 0 decal srlineto 0 L@ smoveto 0 decal neg srlineto stroke gsave 0 decal stranslate L@ 2 decal mul sub l@ n@ ress@rt grestore end } def /barre { 5 dict begin /y@b exch def /x@b exch def /y@a exch def /x@a exch def /di@m exch def gsave di@m setlinewidth newpath x@a y@a smoveto x@b y@b slineto stroke currentlinewidth .5 mul setlinewidth 1 setgray newpath x@a y@a smoveto x@b y@b slineto stroke grestore end } def /diamspire .2 def %% ressort vertical, base O, longueur L, diametre l, diam spire diamspire, nb %% spires n %% syntaxe : L l n ress@rt2 /ress@rt2 { 7 dict begin /nbspires exch def %% nb de spires /l exch def %% demi-largeur /L exch def %% Longueur /interspire L diamspire sub %% la place libre nbspires div %% divise par le nb de spire def /interspire interspire %% pas + gd que 2 x le diametre d'1 spire diamspire 2 mul min store /A {l neg diamspire 2 div} def /B {l L diamspire 2 div sub nbspires 1 sub interspire mul sub} def /i 0 def nbspires { diamspire xunit mul A 0 interspire i mul addv B 0 interspire i mul addv barre /i i 1 add store } repeat end } def %% syntaxe : A B l n (*-) ressort /ressort { /option exch def /n exch def /l exch def /yB exch def /xB exch def /yA exch def /xA exch def gsave xA yA stranslate xA yA xB yB angle 90 sub rotate xA yA xB yB distance l n option (*) eq {ress@rt*} if option (*-) eq option (-*) eq or {ress@rt1*} if option (-) eq {ress@rt1} if option () eq {ress@rt} if option (O) eq {ress@rt2} if grestore } def