圖形可以使用image命令來輸入:
picture p;
%p=image也可以
p:=image(
draw command 1;
draw command 2;
...
draw command n;
);
這樣子,p的內容就是這些繪圖指令的總結果。
另外,也可以使用currentpicture變數,來給圖形變數賦值。currentpicture是MetaPost的系統變數,它自動會把一個圖的所有繪圖結果儲在裡面,而nullpicture則是空白畫面。所以:
picture p;
draw command 1;
draw command 2;
...
draw command n;
p:=currentpicture;
currentpicture:=nullpicture;
把currentpicture:=nullpicture;命令執行後,所繪的圖形就會回到空白。進而可以畫出其他的圖形。
Picture的運算也很有越,值得玩一下。如下表:

其中的glyph運算元,可以輸出某個字型的字元的圖形,高度會是1000 bp。如果是256個以內的西方字母,可以用 glyph "X" of "cmr10"來輸出X的"cmr10"字體。如果是中文的unicde,只能用glyph number of "中文字體的方式。接下來的例子,「車」這個字是在新宋體(asong)的subfont asong8e內第202個字元,如果這個字體有裝好,那麼「glyph 202 of "asong8e"」就可以把字取出來。然後用pathpart來分析其字的path,再用point of 畫出path的點。for 【變數】 within 【圖形】用來分析圖形的結構。

上圖故意用drawarrow來畫「車」的path,可以看出path 的起點和終點在哪裡。而印出原點的位置是用來比較其path的座標關係。如果要把做成象棋棋子圖形,這個path還需要修正位置,把字的中心點移到原點上面。這個在未來的文件中再進一步說明。
最後,可以用這個把asong8e內的字全部取出來,看看可以認識幾個字:
beginfig(1);
picture p;
for i=0 upto 255:
p:=glyph i of "asong8e" scaled 0.025 shifted (28*(i mod 16), -28*floor(i/16));
for j within p:
draw pathpart j;
endfor
endfor
endfig;
end;
下一則: MetaPost語言﹣布林型態、字串型態、畫筆型態和顏色型態的運算元(Boolean, string, pen, color operators)
限會員,要發表迴響,請先登入


