% ================== 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
|