Source PostScript (ligne_file.pps)

Retour Texte non formaté
/linearc 0 def /Ligne { gsave newpath smoveto count 2 idiv {slineto} repeat stroke grestore } def %% syntaxe~: [x1 y1 ... xn yn] ligne_brisee_ /ligne_brisee_ { reversep aload length 2 idiv % 3 copy pop % smoveto { slineto } repeat } def %% syntaxe~: [x1 y1 ... xn yn] ligne_brisee /ligne_brisee { gsave newpath dup 0 getp smoveto ligne_brisee_ starfill newarrowpath stroke grestore } def %% syntaxe~: [x1 y1 ... xn yn] ligne /ligne_coudee_ { dup length 4 le {ligne_brisee_} { 3 dict begin /les_points exch def les_points 0 getp les_points 1 getp les_points 2 getp portion_ligne_coudee_ les_points cdr cdr /nouveaux_points exch def /C' defpoint nouveaux_points 0 C' putp nouveaux_points end ligne_coudee_ } ifelse } def %% syntaxe~: [x1 y1 ... xn yn] ligne /ligne_coudee_ { 3 dict begin /les_points exch def /n les_points length 2 idiv 1 sub def n 1 le {les_points ligne_brisee_} { /i 0 def les_points 0 getp n 1 sub { les_points i 1 add getp les_points i 2 add getp portion_ligne_coudee_ /i i 1 add store } repeat pop pop les_points n getp slineto } ifelse end } def %% syntaxe~: [x1 y1 ... xn yn] ligne_coudee /ligne_coudee { gsave newpath dup 0 getp smoveto ligne_coudee_ starfill newarrowpath stroke grestore } def /ligne { gsave 3 dict begin dup isstring { /option exch def /liste exch def /n liste length 2 idiv 1 sub def liste } if linearc 0 eq {ligne_brisee} {ligne_coudee} ifelse currentdict /option known { liste 1 getp liste 0 getp arrowpath0 liste n 1 sub getp liste n getp arrowpath1 option gere_arrowhead } if end grestore } def %% ligne_ doit etre appele sans option /ligne_ { linearc 0 eq {ligne_brisee_} {ligne_coudee_} ifelse } def %% syntaxe : A B C portion_ligne_coudee --> dessine la ligne coudee %% A B C' et depose C' sur la pile /portion_ligne_coudee_ { 9 dict begin /C defpoint /B defpoint /A defpoint /alpha B C vecteur B A vecteur divc arg .5 mul def alpha 0 eq alpha abs 90 eq or { [A B C milieu] ligne_ B C milieu } { /rapport1 1 linearc alpha tan div A B distance div abs sub def /rapport2 1 linearc alpha tan div C B distance div abs sub def rapport1 A B ABpoint /A' defpoint rapport2 C B ABpoint /C' defpoint A B C bissectrice A B A' perp interdroite /I defpoint A slineto A' slineto I A' C' alpha 0 ge {arcnp_} {arcp_} ifelse C' } ifelse end } def /portion_ligne_coudee { gsave newpath 6 copy pop pop pop pop smoveto portion_ligne_coudee_ stroke grestore } def