一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

使用ABAP繪制可伸縮矢量圖(SVG)

 汪子熙 2019-11-25

Jerry去年的文章 動(dòng)手使用ABAP Channel開(kāi)發(fā)一些小工具,提升日常工作效率 里曾經(jīng)介紹過(guò)一些用ABAP實(shí)現(xiàn)的可供娛樂(lè)的小程序,比如用古老的HPGL接口在SAPGUI里繪圖:

關(guān)于如何用SAP + HPGL語(yǔ)言在SAPGUI里畫(huà)出這只哆啦A夢(mèng)來(lái),參考Jerry的文章:

使用SAPGUI畫(huà)圖

https://www.jianshu.com/p/d3852942b1a9

本文要介紹的是另一種在SAPGUI里用ABAP繪圖的方式。矢量圖(Scalable Vector Graphics)也是一種圖像格式,和傳統(tǒng)的圖像格式相比具有很多優(yōu)點(diǎn),因此近些年使用越來(lái)越廣泛:

  • SVG是開(kāi)放的標(biāo)準(zhǔn),基于XML,可以直接用純文本工具編輯;

  • SVG與JPEG和GIF等圖像格式比起來(lái),尺寸更小,可壓縮性更強(qiáng);

  • SVG顧名思義,是一種可伸縮(Scalable)的圖像格式,在圖形尺寸發(fā)生改變的情況下,圖形質(zhì)量也不會(huì)受到影響。

  • SVG圖形中的文字是可選可搜索的,最適合用于繪制地圖。

看個(gè)具體的例子。一個(gè)矩形由四條邊組成,所以一個(gè)矩形的SVG實(shí)現(xiàn),則是由對(duì)應(yīng)的四條由line標(biāo)簽代表的線段構(gòu)成。

從這個(gè)例子我們也能發(fā)現(xiàn),SVG標(biāo)簽可以直接被嵌入HTML網(wǎng)頁(yè)里。

而ABAP有一個(gè)工具類,CL_ABAP_BROWSER提供了SHOW_HTML方法,可以在SAPGUI里打開(kāi)一個(gè)嵌入的瀏覽器窗口。

這樣,我們將前面介紹的包含有矩形的SVG格式的HTML代碼傳入SHOW_HTML的HTML_STRING參數(shù),發(fā)現(xiàn)可以在SAPGUI環(huán)境下完美工作:

因此,“使用ABAP繪制可伸縮矢量圖”這個(gè)命題,就簡(jiǎn)化為“使用ABAP拼接可伸縮矢量圖對(duì)應(yīng)的HTML源代碼”,一下子就把復(fù)雜的圖形操作需求,降維成相對(duì)簡(jiǎn)單的字符串拼接操作了。

Jerry小學(xué)的時(shí)候,上編程啟蒙課,在386計(jì)算機(jī)上學(xué)習(xí)過(guò)一門(mén)名叫Logo的編程語(yǔ)言。Logo一詞源于希臘文,原意為“文字”或“思考”、“想法”,是一種面向過(guò)程式語(yǔ)言,1976年由美國(guó)麻省理工學(xué)院佩帕特(Seymour Papert)教授指導(dǎo)下的一個(gè)研究小組, 在LISP語(yǔ)言基礎(chǔ)上,專門(mén)為兒童研制開(kāi)發(fā)的編程語(yǔ)言。當(dāng)時(shí)教這門(mén)課的老師,一位老大爺,直接把語(yǔ)言里畫(huà)圖的cursor說(shuō)成是“海龜”,可謂簡(jiǎn)單形象。

下圖是用Logo語(yǔ)言畫(huà)出來(lái)的圖案。

有趣的是,30年之后,SAP捷克研究院一位開(kāi)發(fā)人員,在Github上創(chuàng)建了一個(gè)ABAP代碼倉(cāng)庫(kù),將SVG常用的繪圖操作用類Logo語(yǔ)言的語(yǔ)法封裝成庫(kù),庫(kù)的名稱就叫ABAP Turtle,仿佛是在向傳統(tǒng)的Logo語(yǔ)言致敬。

https://github.com/FreHu/abap-turtle-graphics

這位ABAP開(kāi)發(fā)人員的聯(lián)系方式維護(hù)在Github上,大家感興趣的可以自行去交友。

基于這位SAP開(kāi)發(fā)人員創(chuàng)建的ABAP Turtle庫(kù)的SVG矩形繪制代碼如下:

下面這個(gè)圖形又是如何畫(huà)出來(lái)的呢?首先選屏幕某個(gè)點(diǎn)作為圖形的中心點(diǎn),從中心點(diǎn)出發(fā)畫(huà)一個(gè)正十邊形,回到原點(diǎn),然后重復(fù)繪制19次正十邊形。每次繪制從中心點(diǎn)出發(fā)時(shí),順時(shí)針偏移360 / 20 = 18度角。

最后我們看到的圖形,是由20個(gè)正十邊形施加了18度角的偏移量后疊加而成。

對(duì)應(yīng)的實(shí)現(xiàn)代碼:

我們還可以自己編輯一些指令序列,比如用符號(hào)F代表前進(jìn),加號(hào)代表右轉(zhuǎn),減號(hào)代表左轉(zhuǎn)。用這三個(gè)符號(hào)就可以組裝一些自定義指令,然后通過(guò)參數(shù)num_iterations指定,按照我們期望的迭代次數(shù)執(zhí)行圖像繪制。

你能想象下面這個(gè)圖形,是由"_|—|_"這個(gè)基礎(chǔ)圖形按照F+F-F-F+F迭代四次構(gòu)成的么?

考一考大家,下面這棵樹(shù)如何通過(guò)構(gòu)造自定義的SVG指令畫(huà)出來(lái)?

答案在FreHu的github里:https://github.com/FreHu/abap-turtle-graphics

更多閱讀

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲欧美日韩色图七区| 国产色偷丝袜麻豆亚洲| 91人妻人人澡人人人人精品| 国产女优视频一区二区| 亚洲女同一区二区另类| 99热九九热这里只有精品| 国产精品白丝久久av| 五月婷婷欧美中文字幕| 欧美黑人在线精品极品| 久久精品亚洲情色欧美| 日韩一区二区三区观看| 免费一区二区三区少妇| 国产超碰在线观看免费| 欧美日韩国内一区二区| 熟女免费视频一区二区| 婷婷色香五月综合激激情| 日本亚洲精品在线观看| 蜜桃臀欧美日韩国产精品| 久久亚洲成熟女人毛片| 日韩中文字幕人妻精品| 丝袜av一区二区三区四区五区| 中文字幕欧美精品人妻一区| 最近中文字幕高清中文字幕无| 成人免费视频免费观看| 国产不卡一区二区四区| 亚洲欧美日韩综合在线成成| 高潮少妇高潮久久精品99| 色好吊视频这里只有精| 免费在线观看欧美喷水黄片| 亚洲国产欧美久久精品| 国产成人精品国产成人亚洲| 狠狠干狠狠操在线播放| 亚洲一区二区欧美在线| 视频一区二区三区自拍偷| 国产av乱了乱了一区二区三区| 久久热这里只有精品视频| 国产成人精品国内自产拍| 亚洲国产av在线观看一区 | 欧美丰满人妻少妇精品| 成人国产激情福利久久| 日韩一区二区三区高清在|