2个不稳定版本
0.2.0 | 2019年11月12日 |
---|---|
0.1.0 | 2019年11月12日 |
#306 在 图形API
60KB
935 行
Standard Graphics是一款从任何语言到任何屏幕打印2D图形的命令行工具。它使用stdin
和stdout
使2D图形与使用Python的print()
或Java的System.out.println()
打印命令一样简单。您甚至可以编写纯文本并处理用户交互。
您只需学习一次stdg
。然后,无论您使用什么语言或框架,您都将能够轻松地使用相同的易于记忆的命令打印2D图形。
特性
- 一次学习 -
stdg
提供了一套用于2D图形的最小命令集。这些命令旨在直观、易于学习和记忆。它们主要受到可汗学院计算机编程环境和Processing的启发。 - 在任何地方使用 -
stdg
是跨语言和跨平台的。这意味着您可以在不同编程语言和操作系统之间自由切换,而无需学习为该语言/操作系统完全全新的2D图形库。 - 获得快速、高性能的图形 -
stdg
是基于MiniFB和Raqote的抽象,它们都是完全用Rust编写的(除MacOS外,它使用了一些Objective-C)。因此,您的图形将以有效本机的速度渲染。渲染和事件处理中不使用Electron之类的框架或“动态”语言。
示例
print("start 400 400 Untitled")
# position of the car
x = 10
while True:
print("background 151 244 247")
# draw the car body
print("fill 255 0 115")
print("nostroke")
print("rect " + str(x) + " 200 100 20")
print("rect " + str(x + 15) + " 178 70 40")
# draw the wheels
print("fill 77 66 66")
print("circle " + str(x + 25) + " 221 12")
print("circle " + str(x + 75) + " 221 12")
print("present") # this is what actually says to draw, must be in an infinite loop
x = x + 1
python moving_car.py | stdg
用法
使用Standard Graphics有两种方法。
第一种,也是最简单的方法,就是直接将程序的输出通过管道传递给stdg
。程序的所有输出(通常是打印的内容)都将发送到stdg
。您可以在终端中输入以下内容,前提是stdg
已安装。
my_data.csv | ruby my_program.rb | stdg
对于stdg
接收到的每一行输入,它都会检查第一单词(通过空白分隔的行中的第一个标记)是否匹配一个命令。如果单词匹配,它将查看该行的其余部分,并通过打印矩形、设置颜色等执行命令。如果单词不匹配,它将直接打印该行。
第二种方法是让stdg
运行一个进程。
stdg node my_thing.js | settings.csv
在这种情况下,stdg
不接受任何输入。您不能将其用于管道传输。您也不能在终端中交互式输入。然而,您可以给它一个要运行的进程。
您通过向stdg
提供参数来给它一个进程。这些参数被解析成一个可以执行的单一命令。基本上,您可以编写stdg python options.py
或stdg ./menu
,但不能做stdg python options.py && ./menu
。
然后,stdg
将运行您的进程,并以与第一种用法中stdg
读取相同的方式读取其输出。命令将被解释。其余的将被作为输出打印。但除此之外,stdg
有时还会将输入打印到进程本身。这些输入将是有关鼠标位置、鼠标点击等信息的信息。进程可以逐行读取这些输入以获取鼠标/键等信息。
这种使用stdg
的第二种方法允许交互性。您可以进行如下操作-
print("start 400 400 A Rectangle")
while True:
print("background 255 255 255")
print("fill 255 0 0")
print("get mousex")
print("get mousey")
print("rect " + str(float(input()) - 25.0) + " " + str(float(input()) - 25.0) + " 50.0 50.0")
print("present")
cheat sheet
以下是为使用stdg
提供的速查表/参考。
以下是最基本的stdg
使用命令。请注意,与start
和text
命令中的所有空白一样,都将转换为单个空格。
命令 | 示例 | 注意 |
---|---|---|
启动一切 | start400 400一个矩形 |
必须是第一条打印的行 |
呈现要绘制的对象 | present |
必须在无限循环中 |
永远呈现 | present forever |
在.txt 文件中使用 |
获取鼠标位置 | get mousex ,get mousey |
返回包含位置的行 |
获取“鼠标是否按下?” | get mouseispressed left |
必须是left 、center 或right |
获取“按键是否按下?” | get keyispressed space |
以下列出有效键 |
获取所有按键 | get keys |
发送空格分隔的键 |
以下用于样式。
命令 | 示例 | 注意 |
---|---|---|
设置背景颜色 | background220 220 220 |
|
设置填充颜色 | fill255 0 0 240 |
红色、绿色、蓝色和透明度的值都是0-255 |
设置描边颜色 | stroke20 20 20 |
描边也称为轮廓 |
不填充或不描边 | nostroke 、nofill |
默认颜色为 nofill ,stroke 0 0 0 |
获取鼠标位置 | get mousex ,get mousey |
返回包含位置的行 |
设置笔画粗细 | 笔粗5 |
默认为 1 |
设置笔画端点样式 | 笔画端点为圆形 |
必须为 square 、project 或 round (默认) |
设置笔画连接样式 | 笔画连接为斜面 |
必须为 miter (默认)、bevel 或 round |
我们可以进行变换。
命令 | 示例 | 注意 |
---|---|---|
应用变换 | push |
这允许我们开始一个新的变换 |
弹出顶部 | pop |
这将恢复到旧的变换 |
平移顶部 | translate50 0 |
|
缩放顶部 | scale0.5 1.0 |
|
旋转顶部 | rotate180 |
角度以度为单位 |
这里有常见的二维原语。
命令 | 示例 | 注意 |
---|---|---|
绘制矩形 | rect50 50 300 300 |
|
绘制椭圆 | ellipse200 200 50 40 |
以给定坐标为中心 |
绘制圆形 | circle200 200 50 |
|
绘制直线 | line300 100 100 300 |
|
绘制圆弧 | arc200 200 50 40 0 90 |
角度以度为单位 |
最后但同样重要的是,我们有文本和图像。
命令 | 示例 | 注意 |
---|---|---|
设置文本字体 | textfont C:\Windows\Fonts\Arial.ttf |
\ 可能需要为 \\ |
设置文本大小 | textsize20 |
|
绘制文本 | text30 30 |
必须后跟包含文本的行 |
加载图像 | open character.pngas char |
如果可能,只应调用一次 |
绘制图像 | image char 30 70 ,image char 5 5 50 1 |
必须是已加载的图像 |
以下是 stdg
支持的键
- 所有数字字符
- 所有小写字母(使用
leftshift
或rightshift
检查大写字母) up
、down
、left
、right
space
、tab
、enter
leftshift
、rightshift
escape
、backspace
、delete
about
标准图形被设计成适用于许多用途-
- 用于 Bash 脚本的用户界面
- Python 脚本模拟的可视化
- 数据可视化
- 用 JavaScript 编写的桌面游戏
- 使用纯文本的简单矢量图形
- 使用 C 的简单动画
- 等等...
该软件本身完全使用纯 Rust 编写,唯一例外是 MacOS 后端。它使用 Raquote 和 MiniFB 在幕后进行绘图。
入门指南
安装标准图形有两种方法。
第一种方法是从 此处 下载二进制文件。下载后,请确保存储二进制文件的文件夹位置已添加到 PATH
(如果您不确定如何将文件夹位置添加到 PATH,请在网上查找)。
第二种方法是使用 cargo
安装标准图形。请确保已安装 Rust。然后,按以下方式安装。
cargo install stdg
在安装过程中,您可能需要安装一些软件包。在Windows上,我能够简单地安装并运行。然而,在Linux上,我至少需要安装libfontconfig1-dev
、xcursor
。
安装完成后,您可以查看快捷表以获取更多关于可以打印的各种命令的信息。
依赖关系
~3–13MB
~155K SLoC