#2d-graphics #graphics #print #2d #command-line-tool #tool #programming-language

app stdg

一款支持跨语言、跨平台的2D图形命令行工具

2个不稳定版本

0.2.0 2019年11月12日
0.1.0 2019年11月12日

#306图形API

MIT 许可证

60KB
935

Standard Graphics是一款从任何语言到任何屏幕打印2D图形的命令行工具。它使用stdinstdout使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

An example output through standard graphics

用法

使用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.pystdg ./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使用命令。请注意,与starttext命令中的所有空白一样,都将转换为单个空格。

命令 示例 注意
启动一切 start400 400一个矩形 必须是第一条打印的行
呈现要绘制的对象 present 必须在无限循环中
永远呈现 present forever .txt文件中使用
获取鼠标位置 get mousexget mousey 返回包含位置的行
获取“鼠标是否按下?” get mouseispressed left 必须是leftcenterright
获取“按键是否按下?” get keyispressed space 以下列出有效键
获取所有按键 get keys 发送空格分隔的键

以下用于样式。

命令 示例 注意
设置背景颜色 background220 220 220
设置填充颜色 fill255 0 0 240 红色、绿色、蓝色和透明度的值都是0-255
设置描边颜色 stroke20 20 20 描边也称为轮廓
不填充或不描边 nostrokenofill 默认颜色为 nofillstroke 0 0 0
获取鼠标位置 get mousexget mousey 返回包含位置的行
设置笔画粗细 笔粗5 默认为 1
设置笔画端点样式 笔画端点为圆形 必须为 squareprojectround(默认)
设置笔画连接样式 笔画连接为斜面 必须为 miter(默认)、bevelround

我们可以进行变换。

命令 示例 注意
应用变换 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 70image char 5 5 50 1 必须是已加载的图像

以下是 stdg 支持的键

  • 所有数字字符
  • 所有小写字母(使用 leftshiftrightshift 检查大写字母)
  • updownleftright
  • spacetabenter
  • leftshiftrightshift
  • escapebackspacedelete

about

标准图形被设计成适用于许多用途-

  • 用于 Bash 脚本的用户界面
  • Python 脚本模拟的可视化
  • 数据可视化
  • 用 JavaScript 编写的桌面游戏
  • 使用纯文本的简单矢量图形
  • 使用 C 的简单动画
  • 等等...

该软件本身完全使用纯 Rust 编写,唯一例外是 MacOS 后端。它使用 RaquoteMiniFB 在幕后进行绘图。

入门指南

安装标准图形有两种方法。

第一种方法是从 此处 下载二进制文件。下载后,请确保存储二进制文件的文件夹位置已添加到 PATH(如果您不确定如何将文件夹位置添加到 PATH,请在网上查找)。

第二种方法是使用 cargo 安装标准图形。请确保已安装 Rust。然后,按以下方式安装。

cargo install stdg

在安装过程中,您可能需要安装一些软件包。在Windows上,我能够简单地安装并运行。然而,在Linux上,我至少需要安装libfontconfig1-devxcursor

安装完成后,您可以查看快捷表以获取更多关于可以打印的各种命令的信息。

依赖关系

~3–13MB
~155K SLoC