跳至內容

LNNBot/WhatCommands指令/wthsvg

出自希顶维基

WhatCommands 指令 wthsvg 可根據輸入的一系列中文指令繪製圖像。主要作者為 CycwinDGCK81LNN 補充完善部分功能。

用法

¿¿wthsvg 指令...

wthsvg 的參數中每行為一條指令,指令分為操作和屬性,操作以橫槓(-)開頭,屬性跟在其所屬的操作之後。

操作

-画布 w h
指定畫布寬為w,高為h,一般寫在最開頭作為第一個操作。
-左下角坐标
特殊操作:此操作執行後,後續的所有操作中坐標原點在左下角,縱軸向上。未使用此操作時原點在左上角,縱軸向下。
-线段 x1,y1 x2,y2
繪製從 (x1, y1) 到 (x2, y2) 的線段。
線段目前沒有默認顏色,必須通過颜色屬性手動設置顏色才可繪製。
-圆形 r x,y
繪製一個圓心在 (x, y),半徑為 r 的圓形。
-矩形 x1,y1 x2,y2
繪製一個對角為 (x1, y1) 與 (x2, y2),平行於坐標軸的矩形。可以缺省任意一個坐標,默認值為(0,0)。
-多边形 x1,y1 x2,y2 x3,y3...
以給定的一系列坐標為頂點繪製多邊形。
-文字 x,y 内容
在 (x, y) 處繪製文本。
-扇形 r x,y a1 a2
繪製一個圓心在 (x, y),圓心角(順時針)為 a1,半徑為 r ,起始角度(順時針)為 a2 的扇形。 a2 可以缺省,默認值為0。

圖形操作(不包括 -文字)可以一次輸入多組參數,用英文分號(;)分隔,此時將同時繪製多個同類圖形並共用屬性。建議在分號之後或前後均添加空格以便閱讀。例如,繪製四個半徑 50 單位,緊挨在一起的圓:-圆形 50 100,100; 50 100,200; 50 200,100; 50 200,200

屬性

設置顏色時,可以使用方括號括起並以空格分隔的 RGB 顏色值([r g b]),CSS 顏色語法(包括 rgb(R,G,B)、井號開頭的十六進制顏色值、英文關鍵字顏色名)和我們預先定義的中文顏色名表示。

背景 c
只對 -画布 指令有效:設置畫布背景顏色為 c。可以是「透明」。未設置時默認為白色。
颜色 c
設置圖形的顏色為 c
對於除線段之外的圖形,未設置時默認為黑色;可將颜色設置為「透明」後再設置描边屬性來繪製空心的圖形。
描边 c
為圖形添加顏色為 c 的描邊。
對於線段,與颜色屬性等價。
粗细 d
設置線段或描邊的寬度為 d
旋转 a x,y
將圖形沿點 (x, y) 旋轉 a 度(順時針)。
渐变 c1 x1,y1 c2 x2,y2
渐变描边 c1 x1,y1 c2 x2,y2
設置圖形(或描邊)為漸變色,從 (x1, y1) 處顏色 c1 平滑過渡到 (x2, y2) 處顏色 c2
(x1, y1)、(x2, y2) 兩個點可以連成一條線段,稱為漸變軸,顏色的 RGB 值在漸變軸上分別均勻變化;圖形上任何一個其他的點,都與漸變軸上離那個點最近的一個點的顏色相同。也就是說,讓漸變軸沿着垂直於自身的方向平移,掃過的面積里顏色均勻變化,而沒有掃過的地方顏色與相應端點的顏色相同,即 c1c2
渐变 c0 x1,y1 c1 t1 c2 t2 ... cn x2,y2
渐变描边 c0 x1,y1 c1 t1 c2 t2 ... cn x2,y2
除了漸變軸的兩個端點外,可以在漸變軸上選定更多控制點並設置顏色,每兩個相鄰控制點之間顏色的 RGB 值都會均勻變化。每個中間控制點由一個顏色 c 和一個位置比值定義,比值可以是一個百分比 t% 或分數 m/n,表示控制點位置到漸變軸起點的距離與漸變軸長度的比值。若兩個中間控制點的位置重合,會形成一個顏色突變,分界線垂直於漸變軸。
虚线 l d
設置線段或描邊為許多短線組成的虛線,短線長度為 l,每兩條短線之間空出 d 的距離。
dl 相同時可省略 d
虚线 l1 d1 l2 d2 l3 ...
高級虛線:從圖形輪廓的起點開始先畫長 l1 的短線,空出 d1 的距離,再畫 l2 的短線,空出 d2,以此類推,直到最後一組 lndn 後循環。若最後一組只有 ln 沒有 dn(即總共有奇數個數字),則最後一個短線長度 ln 跟循環回開頭的第一個短線長度 l1 合併為一條長 ln + l1 的短線,之後再空出 d1 的距離,畫 l2 的短線……這樣繼續下去。
平头
取消線段或虛線兩端默認存在的小半圓,使本來圓頭的線變為平頭。
方头
將線段或虛線兩端本來的小半圓改為小長方形,類似於平头但是視覺上使線的兩端各延長了線寬度的一半。
字号 s
設置文字的大小為 s
字体 名称
設置文字使用的字體族名稱。
字重 w
設置字重(文字形狀的粗細)為 w
字重是一個 1000 以內的正整數,未設置時默認為 400,即常規。w 也可以是漢字「」,表示 700,即粗體。只有部分字體支持任意設置字重,多數隻支持幾個固定的值,如果字體不支持你設置的字重,會自動選擇一個比較接近的可用值。
字宽 w
設置字寬為 w%。
字寬是一個 50% 到 200% 之間的百分數,未設置時為 100%。只有部分字體支持設置字寬。
斜体
使文字傾斜(使用意大利體的字母)。
斜体 a
斜体 後面也可以跟一個角度 a,表示讓文字傾斜大約 a 度。正常的傾斜體是 14 度。很少有字體支持任意設置傾斜角度。
左对齐
右对齐
讓文字的左/右端對準設置的坐標。未設置時,默認是讓文字的中心落在設置的坐標處。

示例

待添加

一些想說的

這條命令實際上是受一位有着視力障礙的群友激發而產生的。這位群友在我們不知道的地方打聽到了某款電腦專用的盲用畫圖軟件(經過LNN的逆向可知這是一個Python程序,根據原作者的描述實際上是給盲人寫論文畫示例圖用的),又打聽到LNN有個LNNBot(大概因為他也是玩造語的)於是前來詢問LNN能否將這個盲用畫圖軟件移植到LNNBot上使用。我一時興起建了一個SVGpath解析器,後來覺得太難用於是搓出來了wthsvg的最初模樣:只有畫布、線段,以及顏色、描邊。我很不想很不想辜負這位發言極其真誠的群友,我一再聲明:這不符合那款軟件的語法!這裡的漏洞還有很多!但這位群友仍然在鼓勵我(他截止目前已畫出來了許多我們認為不錯的作品),於是在大概一周內有了整整八個操作。LNN的加入實際上以我們替換中文顏色的詞庫匱乏而起,他在漸變的語法判定上、圓形的語法轉化上以及關於字體的所有屬性等等都做出了巨大的貢獻!包括這篇文檔也是他寫的。我很感謝一直支持這個項目的人(儘管這項目才開展了兩周不到,我編輯時離月考只有兩三天了),包括代碼貢獻者,指令使用者(儘管有預防)。能做成一個對他人有着幫助的wc指令我感到高興至極!即便不為人知,這件事已成為我人生漆黑夜空中一顆不亮的閃星,在我極匱乏的內心世界中照耀。十分感謝各位。我們會在除這個指令外的世界中共同走下去,可能在將來不再有互聯網上的聯繫,但這段旅程我會銘記於心。(好申必的升華啊)

 
Cycwin