網路城邦
上一篇 回創作列表 下一篇   字體:
MetaPost語言﹣圖形型態的運算元(picture operator)
2013/07/12 07:30:31瀏覽248|回應0|推薦0

圖形可以使用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;

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=paraquat&aid=7925555