METAFONT vektorove do PS

Antonin Strejc STREJC at vc.cvut.cz
Thu Jul 29 11:52:24 CEST 1999


Jakub Zlamal pise:
>> Existuje nejaka moznost, jak prevest obrazky nakreslene METAFONTem do
>> postscriptu (a nasledne do PDF) ve vektorove podobe a nikoliv jako bitmapy?
>
>Pouzijte metapost. Nikdy jsem obrazky z metafontu neprevadel,
>ale myslim ze je jen velmi malo rozdilu (predevsim v hlavicce obrazku).

Hezky letni den,

s radou lze souhlasit. Je treba ale upozornit na zcela odlisnou
filozofii vytvareni kresby v PostScriptu (MetaPostu) a Metafontu.

PostScript pouziva filozofii vrstev, ktere se pres sebe prekladaji,
s tim, ze posledni vrstva prekryje vsechno, co je pod ni (je treba
respektovat poradi vytvarenych vrstev).

V Metafontu vsak toto neplati. O tom, zda nejaky bod bude ve
vysledne kresbe cerny nebo bily, rozhoduje rozdil, kolikrat byl tento
bod "pokreslen" minus kolikrat bylo "smazan" (je-li tento rozdil > 0,
bod bude cerny, jinak bily), pricemz vubec nezalezi na poradi
"mazani" a "kresleni".

Tato rozdilnost filozofii muze v dusledku znamenat, ze napr.:

1. Pokud napred vymazeme nejakou plochu a pak do ni neco nakreslime,
   v pripade MF nedostaneme nic (rozdil je u vsech bodu <= 0 ),
   zatimco MP vygeneruje to, co jsme nakreslili (druha vrstva
   prekryla prvni).

2. Pokud nejakou oblast pokreslime dvakrat a pak ji jednou smazeme,
   ve vystupu z MF oblast zustane cerna, zatimco u MP nikoli!
   Ilustruje to nasledujici priklad:

% Toto je metafontovy kod
mode_setup;
u#:=1bp;
define_pixels(u);
beginchar("A",20u,20u,0);
pickup pensquare scaled 5u;
draw(10u,0)--(10u,20u);
draw(0,10u)--(20u,10u);
unfill(5u,5u)--(15u,5u)--(15u,15u)--(5u,15u)--cycle;
endchar;
end;

%... a toto obdobny metapostovy
u:=1bp;
beginfig(1);
pickup pensquare scaled 5u;
draw(10u,0)--(10u,20u);
draw(0,10u)--(20u,10u);
unfill(5u,5u)--(15u,5u)--(15u,15u)--(5u,15u)--cycle;
endfig;
end;



V prvnim pripade dostaneme zhruba toto:

          XXX
          XXX

    XXX   XXX   XXX
    XXX   XXX   XXX

          XXX
          XXX


zatimco v druhem pripade je vysledek:

          XXX
          XXX

    XXX         XXX
    XXX         XXX

          XXX
          XXX


Zaver je tedy ten, ze je potreba podivat se napred na MF kod,
jestli se v nem vyskytuji vicenasobna prekryvani ci mazani,
a podle toho pripadne pozmenit MP kod. Jinak bychom mohli byt
nemile prekvapeni rozdilnosti vysledku.

S pozdravem
Antonin Strejc

---------------------------------------------------------------------
Ing. Antonin Strejc                            Phone: +420-2-24352938
---------------------------------------------------------------------
Czech Technical University in Prague                 Computing Centre
Czech Republic                               Zikova 4, 166 35 Praha 6
---------------------------------------------------------------------



More information about the csTeX mailing list