#petri #edit #nets #editor #graph #state #view

app pn-editor

一个功能强大的程序,用于查看、编辑和模拟Petri网

19个版本

0.9.2 2022年8月15日
0.9.0 2022年6月26日
0.8.1 2021年9月30日
0.7.0 2021年4月12日
0.4.3 2019年10月12日

#320 in GUI

每月 48 次下载

MIT/Apache

320KB
657

这是什么?

此程序允许您查看、编辑和模拟Petri网。还可以模拟其他类型的图,如状态机和依赖图,这些基本上是Petri网的子集。它使用pnrs,它是pns的安全Rust包装器,用于加载、编辑和模拟Petri网。

示例

以下是一个编辑器的外观示例

Simple example

可以使用受限模式,这在某些情况下很有用,可能更容易理解。

此模式仅显示状态

Simple example (state only)

此模式仅显示动作

Simple example (actions only)

安装

要安装最新版本,您需要cargo,您可以使用Rustup进行安装。

安装cargo后,您可以使用以下命令安装此程序,无需手动克隆仓库:

$ cargo install --git https://gitlab.com/porky11/pn-editor --features pns/static-build

您还可以在系统上安装pns库,这可能对某些用户来说更可取。您不再需要--features pns/static-build部分。在这种情况下,您不需要指定任何功能

$ cargo install --git https://gitlab.com/porky11/pn-editor

然后您会得到一个名为pn-editor的新命令,用于启动程序。

您还可以自己克隆仓库,进入目录,并在那里使用cargo运行程序。操作方式如下

$ git clone https://gitlab.com/porky11/pn-editor
$ cd pn-editor
$ cargo run --release  # to run the program
$ cargo install --path .  # to install the program

在两个cargo命令中,如果您系统上没有安装pns,您需要在末尾添加--features pns/static-build来指定此功能。

用法

标准选项

  • Alt + Del:删除选定的节点
  • Ctrl + O:从文件加载Petri网
  • Alt + O:从文件加载Petri网状态
  • Ctrl + S:将Petri网保存到文件
  • Alt + S:将Petri网状态保存到文件
  • Ctrl + F:按名称搜索节点
  • Ctrl + N:重置并使用空Petri网
  • Ctrl + P:播放模拟(同时切换到模拟模式)
  • Ctrl + C:复制选中的
  • Ctrl + V:粘贴选中的
  • Ctrl + X:剪切选中的
  • Ctrl + E:切换文本编辑;默认禁用;当仅选择一个转换时,可以编辑其描述
  • Ctrl + G:切换吸附;默认启用;视图和节点吸附到网格
  • Ctrl + Plus:增加所选位置中的令牌数量
  • Ctrl + 1:将视图模式设置为默认;查看并编辑一切
  • Ctrl + 2:将视图模式设置为状态;查看并仅编辑位置
  • Ctrl + 3:将视图模式设置为操作;查看并仅编辑转换
  • Alt + 1:将渲染流向设置为全方向;像您想要的那样放置一切
  • Alt + 2:将渲染流向设置为水平;箭头通常从左到右水平绘制
  • Alt + 3:将渲染流向设置为垂直;箭头通常从上到下垂直绘制

保存和加载

首先,您需要指定要保存项目的目录。保存时生成多个文件,加载时读取这些文件

  • Petri网结构 .pns
    • 包含Petri网的逻辑内容
    • 具体格式描述在此
  • Petri网布局 .pnl
    • 描述Petri网的布局
    • 如果加载时缺失,布局将自动生成
  • Petri网键 .pnk
    • 所有转换的名称列表
    • 如果加载时缺失,名称将自动生成
    • 顺序很重要
  • Petri网位置键 .pnkp
    • 所有位置的名称列表
    • 如果加载时缺失,名称将为空
    • 顺序很重要
  • 故事 .story
    • 将每个转换的描述存储在单个文本文件中
    • 描述使用转换名称作为标题,因此顺序不重要
    • 为不同的转换使用相同的名称会在重新加载时引起问题

为什么有这么多文件格式?

有这么多不同的文件格式。为什么不是只创建一个文件呢?

您可能想在您自己编写的其他程序中使用这些格式中的某些。也许您不关心这些其他程序中的特定方面。

您几乎总是关心Petri网结构本身,所以您可能包括它。

您几乎总是想在导出时忽略Petri网的布局。

转换键也可能非常有用,但您可能不需要它们,当您只使用故事文件时。

位置键在大多数情况下并不那么有用,因为你只想知道什么可行,什么不可行,但在某些情况下你也可能想使用它们。

你可能想要忽略故事的更精确描述,特别是如果你在编辑器中根本没使用这个功能的话。

编辑

通用控制

在编辑时,键 ShiftCtrlAlt 基本上有以下意义

  • Shift:选择多个对象
  • Ctrl:创建对象
  • Alt:特殊控制和播放模拟

两个鼠标按钮主要用于这些任务

  • Left:编辑节点
  • Right:编辑连接

特定控制

当按下 Ctrl + 左键 时,将创建一个新的转换节点。当按下 Ctrl + 右键 时,将创建一个新的位置节点。

当点击一个节点时,它会自动选中。选中节点可以通过按住 Left 键在它上移动。当在其他节点或空白区域点击时,选中的节点将被取消选中。

当按下 Shift 键并按住 Left 键点击节点时,它会额外选中。当节点已经被选中时,它会取消选中。当在按住 Shift 键的同时创建新节点时,之前选中的节点不会被取消选中。当按住 Shift 键移动节点时,其他选中的节点也会移动。

当使用 Ctrl + 左键 移动节点时,它将被复制。两个节点将使用相同的输入和输出连接。当多个节点被选中并按住 Ctrl 键时,所有节点将被复制。当也按住 Shift 键时,复制品将被连接。这意味着新节点代表的是它们复制的节点。当其中一个节点被选中时,可以看到节点是否连接。它们通过特殊的线条连接。除了它们总是包含相同的数据外,这主要用于从视觉上改善布局,例如当一个位置或转换连接到位于非常不同位置的节点时。

当用 右键 点击一个节点并释放它到另一个节点上方时,两个节点将被连接。当多个节点被选中并按住 Ctrl 键时,所有节点都将连接到最后一个节点。当也按住 Alt 键时,现有的连接将被移除。如果两个节点类型相同,将在它们之间插入一个新的其他类型的节点。当也按住 Shift 键时,在空白区域释放将创建一个新类型的节点,当在相同节点上释放时,将创建一个指向新节点的双向连接。

复制和粘贴

当从网络中复制某些内容时,所有选中的节点及其之间的连接都会受到影响。复制可以粘贴到任何地方,包括在同一程序中,甚至在不同网络加载后,在另一个程序中或在文本编辑器中。

复制将存储相对于鼠标的位置,因此在粘贴前移动鼠标将改变位置。

粘贴将始终为所有内容创建新节点,并且永远不会连接到现有节点。

格式与二进制格式类似,但它是文本格式,还包含有关布局和转换名称的信息。

甚至可以将粘贴的数据作为文本编辑,并将这些文本复制到文本编辑器中。这样,您可以复制您的网络的部分并将其保存到文本编辑器中。您还可以以文本形式修改它们,并将它们粘贴回去。

文本编辑

可以使用Ctrl + E切换文本编辑模式。

启用时,如果只选择了一个转换,屏幕右侧将出现文本编辑器窗口,文本输入将进入此窗口。这是为了给每个转换赋予意义,通过描述将被触发的事件。

文件扩展名是.story,因为这样就可以讲述一个故事。

搜索

Ctrl + F进入搜索模式。在搜索模式下,您可以输入一个名称,并且一个匹配的节点将被聚焦。

Tab可以让您查看具有匹配名称的不同节点。首先它会聚焦所有匹配的转换,然后是所有匹配的位置。通过按Ctrl + Tab,也可以更快地在位置和转换之间切换。

Return将完成搜索并选择聚焦的节点。在完成时按住Ctrl将选择所有匹配的节点。在两种情况下按住Shift也会选择它们。

模拟

Ctrl + P将切换到模拟模式。在模拟模式下,编辑略有限制,但可以模拟网络。

在转换上单击Alt + 左键将触发转换(如果可能),Alt + 右键将再次取消触发。

取消触发甚至可以以不同的顺序进行。

始终确保在编辑模式下Petri网络的状 态有效,因此取消触发并非对所有已触发的转换都可行。此外,编辑仅限于在没有任何潜在状态能够采取编辑后不再可能的路由的情况下进行。

再次按Ctrl + P将返回到编辑模式。

Ctrl + A将向模拟中添加一个新的空状态。

Tab将在不同的状态之间切换。

保存和加载网络就像以前一样。

还可以保存和加载状态(当前进度),而不是网络。在加载时,将创建并添加一个新的状态。

除了限制之外,大多数功能都以这种模式工作,包括搜索。复制和粘贴可能不会复制当前的令牌计数。精确的令牌计数是动态基于转换调用计算的,所以这没有意义。

当某些操作在此模式下不工作时,原因可能是某些操作可能会破坏当前的故事。这意味着,如果存在某些状态可以在之前创建,但不能通过在之后按相同顺序触发相同的转换来创建,则某些操作是无效的。

使用模拟模式进行编辑不仅对模拟有帮助,如果您已经有一个工作良好的游戏并想添加新内容,这样可以确保您不会破坏它。

查看模式

有三种模式

  • 默认模式
  • 状态模式
  • 动作模式

默认模式是最强大的模式,因为它提供了对完整Petri网络的访问。其他模式有所限制,但它们有特定的功能。

这两种受限模式都隐藏了一种节点类型,这使得概述更容易。当创建一个连接的位置或转换时,末节点总是相同类型的,而隐藏的节点类型将隐式插入。

状态模式仅提供对Petri网状态的访问,状态由位置表示。本质上,它是一个状态机。它主要用于在具有多个替代状态或故事的选项之间切换。一个常见的例子是视觉小说。

动作模式仅提供对Petri网动作的访问,动作由变迁表示。本质上,它是一个依赖图。当事物没有替代方案时,它非常有用,调用动作只能允许新的动作,而不能删除旧的。一个常见的例子是Metroidvania游戏。

渲染流程

有三种渲染流程设置

  • 全向
  • 水平
  • 垂直

它们都具有不同的节点连接绘制首选方向。

如果您想获得最大的自由度,请使用默认的全向渲染流程。如果您有很多循环,这应该是最合适的选择。

如果您的故事大多数是线性的,且重复不经常出现并且应该立即可见,水平或垂直渲染流程更有用。您使用哪种主要取决于个人偏好。水平渲染从左到右画箭头,垂直从上到下。

依赖项

~12-16MB
~325K SLoC