/frameangle 0 def
/linearc 0 def
%% syntaxe : L l alpha Frame_
/Frame_ {
3 dict begin
/@lpha exch def
/l exch def
/L exch def
@lpha rotate
L 0 srlineto
0 l srlineto
L neg 0 srlineto
0 l neg srlineto
stockcurrentcpath
end
} def
%% syntaxe : A L l alpha (string) Frame --> dessine un urframe avec
%% 'ligne' (donc tenant compte de linearc)
/arcFrame {
pop
gsave
4 dict begin
/alpha exch def
/l exch def
/L exch def
/A defpoint
A stranslate
alpha rotate
[0 0 0 l L l L 0] polygone
grestore
end
} def
/Frame {
linearc 0 eq
{Frame_simple}
{arcFrame}
ifelse
} def
%% %% syntaxe : A L l alpha (string) Frame
%% /Frame_simple {
%% 6 dict begin
%% /frameoption exch def
%% /@ngle exch def
%% /l exch def
%% /L exch def
%% /boty exch def
%% /botx exch def
%% gsave
%% newpath
%% botx boty smoveto
%% L l @ngle Frame_
%% closepath
%% starfill
%% grestore
%% gsave
%% newpath
%% botx boty smoveto
%% @ngle rotate
%% frameoption length 4 eq
%% {
%% gsave
%% botx boty stranslate
%% [0 0 L 0 L l 0 l] polygone
%% grestore
%% }
%% {
%% 98 frameoption in %% si option 'b'
%% {pop L 0 srlineto L neg 0 srmoveto}
%% if
%% 117 frameoption in %% si option 'u'
%% {pop 0 l srmoveto L 0 srlineto L neg l neg srmoveto}
%% if
%% 108 frameoption in %% si option 'l'
%% {pop 0 l srlineto 0 l neg srmoveto}
%% if
%% 114 frameoption in %% si option 'r'
%% {pop L 0 srmoveto 0 l srlineto}
%% if
%% } ifelse
%% currentlinewidth 0 eq {} {stroke} ifelse
%% % borderline {stroke} if
%% grestore
%% end
%% } def
%% syntaxe : [A L l theta] rframe_ ou A L l rframe_
/rframe_ {
dup isarray
{aload pop Frame_}
{frameangle Frame_}
ifelse
} def
%% syntaxe : [A L l theta] (option) rframe ou A L l (option) rframe ,
%% ou option est une chaine optionnelle contenant b,u,l,r
/rframe {
1 dict begin
dup type (stringtype) cvn eq %% y a-t-il une option ?
{/frameoption exch def} %% oui => on la sauve
{/frameoption (bulr) def} %% non => on l'impose
ifelse
dup isarray
{aload pop frameoption Frame}
{frameangle frameoption Frame}
ifelse
end
} def
%% syntaxe : A L l (option) rframe*
/rframe* {
1 dict begin
/startest {true} def
rframe
end
} def
%% syntaxe : A L l (option) mframe , ou option est une chaine
%% optionnelle contenant b,u,l,r
/mframe {
1 dict begin
dup type (stringtype) cvn eq %% y a-t-il une option ?
{/frameoption exch def} %% oui => on la sauve
{/frameoption (bulr) def} %% non => on l'impose
ifelse
mf2rf frameoption rframe
end
} def
%% syntaxe : [A L l theta] mframe_ ou A L l mframe_
/mframe_ {
mf2rf Frame_
} def
%% syntaxe : [A L l theta] mf2rf ou A L l mf2rf --> [A' L l theta]
/mf2rf {
dup isarray
{[ exch aload pop mf@rf ]}
{[ 5 1 roll frameangle mf@rf ]}
ifelse
} def
%% syntaxe : A L l theta mf@rf
/mf@rf {
1 dict begin
/thet@ exch def
4 copy %% A L l A L l
pop -2 div %% A L l A L/2
thet@ cos thet@ sin
3 -1 roll
mulv addv %% A L l A'
6 -1 roll
6 -1 roll
pop pop %% L l A'
4 -1 roll
4 -1 roll
thet@
end
} def
/mframe* {
1 dict begin
/startest {true} def
mframe
end
} def
%% %% syntaxe : A L l (option) cframe , ou option est une chaine
%% %% optionnelle contenant b,u,l,r
%% /cframe {
%% 1 dict begin
%% dup type (stringtype) cvn eq %% y a-t-il une option ?
%% {/frameoption exch def} %% oui => on la sauve
%% {/frameoption (bulr) def} %% non => on l'impose
%% ifelse
%% cf2rf frameoption rframe
%% end
%% } def
%% syntaxe : [A L l theta] cframe_ ou A L l cframe_
/cframe_ {
cf2rf Frame_
} def
%% syntaxe : [A L l theta] cf2rf ou A L l cf2rf --> [A' L l theta]
/cf2rf {
dup isarray
{[ exch aload pop cf@rf ]}
{[ 5 1 roll frameangle cf@rf ]}
ifelse
} def
%% syntaxe : A L l theta cf@rf
/cf@rf {
1 dict begin
/@ngle exch def
4 copy %% A L l A L l
-2 div exch -2 div exch %% A L l A -L/2 -l/2
addv %% A L l A'
6 copy
pop pop pop pop
@ngle rotatepoint
6 -1 roll
6 -1 roll
pop pop %% L l A'
4 -1 roll
4 -1 roll
@ngle
end
} def
/cframe* {
1 dict begin
/startest {true} def
cframe
end
} def
%% syntaxe : [A B theta] (option) frame ou A B (option) frame , ou
%% option est une chaine optionnelle contenant b,u,l,r
/frame {
1 dict begin
dup type (stringtype) cvn eq %% y a-t-il une option ?
{/frameoption exch def} %% oui => on la sauve
{/frameoption (bulr) def} %% non => on l'impose
ifelse
f2rf frameoption rframe
end
} def
%% syntaxe : [A B theta] frame_ ou A B frame_
/frame_ {
f2rf rframe_
} def
%% syntaxe : [A B theta] f2rf ou A B f2rf --> [A' L l theta]
/f2rf {
dup isarray
{[ exch aload pop f@rf ]}
{[ 5 1 roll frameangle f@rf ]}
ifelse
} def
%% syntaxe : A B theta f@rf
/f@rf {
4 dict begin
/@ngle exch def
/B defpoint
/A1 defpoint
B A1 @ngle neg rotatepoint /B' defpoint
A1
B' pop A1 pop sub
B' exch pop A1 exch pop sub
@ngle
end
} def
%% syntaxe : A B (option) frame*
/frame* {
1 dict begin
/startest {true} def
frame
end
} def
%% syntaxe : A B C D str gereframe --> -
/gereframe {
5 dict begin
/option exch def
/D defpoint %%
/C defpoint %% D-----C
/B defpoint %% | |
/A defpoint %% A-----B
gsave
newpath
A smoveto
B slineto
C slineto
D slineto
closepath
starfill
grestore
gsave
newpath
98 option in %% si option 'b'
{pop A smoveto B slineto}
if
117 option in %% si option 'u'
{pop C smoveto D slineto}
if
108 option in %% si option 'l'
{pop A smoveto D slineto}
if
114 option in %% si option 'r'
{pop B smoveto C slineto}
if
currentlinewidth 0 eq {} {stroke} ifelse
grestore
end
} def
%% syntaxe : [A L l alpha] cframe
%% syntaxe : A L l cframe
/cframe {
4 dict begin
dup isstring {
/option exch def
} {
/option (bulr) def
} ifelse
dup isarray {
aload pop /alpha exch def
} {
/alpha frameangle def
} ifelse
/l exch def
/L exch def
/A defpoint
[
A L 2 div l 2 div subv
A L 2 div l -2 div addv
A L 2 div l 2 div addv
A L -2 div l 2 div addv
] {A alpha rotatepoint} papply
aload pop option gereframe
end
} def
%% syntaxe : A L l alpha (string) Frame
/Frame_simple {
6 dict begin
/frameoption exch def
/@ngle exch def
/l exch def
/L exch def
/boty exch def
/botx exch def
gsave
newpath
botx boty smoveto
L l @ngle Frame_
closepath
starfill
grestore
gsave
newpath
botx boty smoveto
@ngle rotate
frameoption length 4 eq {
botx boty stranslate
L 0 srlineto 0 l srlineto L neg 0 srlineto
closepath
} {
98 frameoption in { %% si option 'b'
pop L 0 srlineto L neg 0 srmoveto
} if
117 frameoption in { %% si option 'u'
pop 0 l srmoveto L 0 srlineto L neg l neg srmoveto
} if
108 frameoption in { %% si option 'l'
pop 0 l srlineto 0 l neg srmoveto
} if
114 frameoption in { %% si option 'r'
pop L 0 srmoveto 0 l srlineto
} if
} ifelse
currentlinewidth 0 eq {} {stroke} ifelse
grestore
end
} def
|