日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用ABAP绘制可伸缩矢量图

發布時間:2023/12/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用ABAP绘制可伸缩矢量图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Jerry去年的文章 動手使用ABAP Channel開發一些小工具,提升日常工作效率 里曾經介紹過一些用ABAP實現的可供娛樂的小程序,比如用古老的HPGL接口在SAPGUI里繪圖:

關于如何用SAP + HPGL語言在SAPGUI里畫出這只哆啦A夢來,參考Jerry的文章:

使用SAPGUI畫圖

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

  • SVG是開放的標準,基于XML,可以直接用純文本工具編輯;
  • SVG與JPEG和GIF等圖像格式比起來,尺寸更小,可壓縮性更強;
  • SVG顧名思義,是一種可伸縮(Scalable)的圖像格式,在圖形尺寸發生改變的情況下,圖形質量也不會受到影響。
  • SVG圖形中的文字是可選可搜索的,最適合用于繪制地圖。

看個具體的例子。一個矩形由四條邊組成,所以一個矩形的SVG實現,則是由對應的四條由line標簽代表的線段構成。

從這個例子我們也能發現,SVG標簽可以直接被嵌入HTML網頁里。

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

這樣,我們將前面介紹的包含有矩形的SVG格式的HTML代碼傳入SHOW_HTML的HTML_STRING參數,發現可以在SAPGUI環境下完美工作:

因此,“使用ABAP繪制可伸縮矢量圖”這個命題,就劃歸為“使用ABAP拼接可伸縮矢量圖對應的HTML源代碼”,一下子就把復雜的圖形操作需求,降維成相對簡單的字符串拼接操作了。

Jerry小學的時候,上的編程啟蒙課,在386上學習過一門名叫Logo的編程語言。LOGO一詞源于希臘文,原意為“文字”或“思考”、“想法”,是一種過程性語言,1976年由美國麻省理工學院佩帕特(Seymour Papert)教授指導下的一個研究小組, 在LISP語言基礎上,專門為兒童研制開發的編程語言。當時教這門課的老師,一位老大爺,直接把語言里畫圖的cursor說成是“海龜”,可謂簡單形象。

下圖是用Logo語言畫出來的圖案。

有趣的是,30年之后,SAP捷克研究院一位開發人員,在Github上創建了一個ABAP代碼倉庫,將SVG常用的繪圖操作用類LOGO語言的語法封裝成庫,庫的名稱就叫ABAP Turtle,仿佛是在向傳統的LOGO語言致敬。

這位ABAP開發人員的聯系方式維護在Github上,大家感興趣的可以自行去交友。

基于這位SAP開發人員創建的ABAP Turtle庫的SVG矩形繪制代碼如下:

下面這個圖形又是如何畫出來的呢?首先選屏幕某個點作為圖形的中心點,從中心點出發畫一個正十邊形,回到原點,然后重復繪制19次正十邊形。每次繪制從中心點出發時,順時針偏移360 / 20 = 18度角。

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

對應的實現代碼:

我們還可以自己編輯一些指令序列,比如用符號F代表前進,加號代表右轉,減號代表左轉。用這三個符號就可以組裝一些自定義指令,然后通過參數num_iterations指定,按照我們期望的迭代次數執行圖像繪制。

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

考一考大家,下面這棵樹如何通過構造自定義的SVG指令畫出來?

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

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

總結

以上是生活随笔為你收集整理的使用ABAP绘制可伸缩矢量图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。