溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何使用ABAP繪制可伸縮矢量圖

發(fā)布時(shí)間:2021-12-22 09:34:49 來(lái)源:億速云 閱讀:128 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹了如何使用ABAP繪制可伸縮矢量圖,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

如何使用ABAP繪制可伸縮矢量圖

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

使用SAPGUI畫(huà)圖

本文要介紹的是另一種在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)成。

如何使用ABAP繪制可伸縮矢量圖

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

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

如何使用ABAP繪制可伸縮矢量圖

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

如何使用ABAP繪制可伸縮矢量圖

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

Jerry小學(xué)的時(shí)候,上的編程啟蒙課,在386上學(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)的圖案。

如何使用ABAP繪制可伸縮矢量圖

有趣的是,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ǔ)言致敬。

如何使用ABAP繪制可伸縮矢量圖

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

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

如何使用ABAP繪制可伸縮矢量圖

下面這個(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度角。

如何使用ABAP繪制可伸縮矢量圖

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

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

如何使用ABAP繪制可伸縮矢量圖

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

如何使用ABAP繪制可伸縮矢量圖

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

如何使用ABAP繪制可伸縮矢量圖

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

如何使用ABAP繪制可伸縮矢量圖

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用ABAP繪制可伸縮矢量圖”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI