Skip to main content

Posthoc v1.0.4

· 5 min read
Kevin Zheng

Changes

Architecture Changes

UI Overhaul

Posthoc is completely rebuilt to support dynamic and reconfigurable panels, so you can adjust the UI to fit your workflow or use case. Check out the use cases section for examples.

aux-1

Layers

Visualise what you need by adding it as a layer to the app.

Trace Layer

The Trace layer renders a search trace. Search traces are JSON documents produced by pathfinding solvers that record steps in the search process. trace

Map Layer

The Map layer renders maps in a supported format.

map

Query Layer

The Query layer interfaces with solvers to display search traces for arbitrary problem instances.

query

Extensible Renderer System

Renderers (a.k.a. the Viewport panel) can now be added to Posthoc via extensions (the exact implementation is work-in-progress). This will allow for future renderers to be added with ease (for example, a 3D renderer).

renderer

Layers Panel

Manage view layers using the Layers panel.

Viewport Panel

The Viewport panel renders your layers by making use of an installed renderer (by default, the 2D renderer). You can choose which layers to render, as well as auto-fit the contents to the viewport, or display the contents at 1:1 scale.

Tree Panel

If your pathfinding search problem does not have a convenient spatial embedding (or if you just wanted to), you can also visualise any search trace in a hierarchal format with the Tree panel. You can choose how many nodes to render at once.

Steps Panel

View and replay the recorded events of the search process using the Steps panel.

Debugger Panel

Debug a search trace using the Debugger panel. This feature is currently non-functional in version 1.0.4.

Settings Panel

Manage connections to solvers and renderers in the Settings panel.

Logs Panel

Posthoc will keep a record of all alerts in the Logs panel.

Features

2D Renderer (Built-in)

The basic 2D renderer is built to be reliable and highly performant. Internally, it delegates rendering to background processes. The main process figures out which sections of the screen needs to be repainted (and what resolution) and requests those tiles from the subprocesses.

renderer

Click here for full size

Grid, Network (XY), Poly, Mesh Map Support

There is built-in support for grid (.grid/.map), network (.co/.gr/.xy), mesh (.mesh), and polygon (.poly) map files. Conversions may be required.

GridNetworkMeshPoly
Conversions requiredRename your *.map files to *.gridUse dimacs2xy to convert .co/.gr files to .xyUpdate your .mesh file to version 3None required

Large Map Rendering Support

The renderer and map parser performs optimisations to handle the rendering of large maps.

large-map-florida

Click here for full size

Use Cases

Visualising a Search Trace

Load a search trace and map into Posthoc.

basic

Click here for full size

Interacting with a Search Trace (Viewport, Steps and Tree)

Move around a search trace through the Viewport, Tree, and Steps panel.

interactive

Click here for full size

Creative Use of the Search Trace Format (Polyanya)

The example uses the search trace format to tell the renderer to draw each event in the search process as a triangle.

polyanya

Creative Use of the Search Trace Format (9-Tile)

This example uses the search trace format to tell the renderer how to display the current state of a 9-tile puzzle.

nine-tile

Running a Search Query

This example runs a query using Warthog (WebAssembly) over a grid map.

query

Click here for full size

Comparison of Two Traces

This example compares the search process of two A* implementations, one as a Search Trace file, and another as a query. We display these side-by-side.

comparison

Click here for full size

Releases

Posthoc Standalone (Electron) for Windows

Get Posthoc as a standalone application for Windows.

View Releases

Posthoc Standalone (Electron) for Linux

Get Posthoc as a standalone application for Linux.

View Releases

Posthoc PWA (GitHub Pages)

Use Posthoc in your browser, or install it as a web app.

Open Posthoc

Warthog (WebAssembly) Solver Adapter

This is the Warthog solver compiled to WebAssembly. Add this URL as a Web Worker connection in Posthoc (it should also be there by default).

https://cdn.jsdelivr.net/gh/path-visualiser/app@adapter-warthog-wasm-dist/warthog-wasm.mjs

Warthog (Socket.io/WebSocket) Solver Adapter

This is the Warthog solver running behind an adapter server. The adapter translates requests into Warthog problem instances, and converts Warthog output into the search trace format. The visualiser and solver communicates through a WebSocket channel.

git clone https://github.com/ShortestPathLab/posthoc-app
cd ./app/adapter-warthog-websocket
npm i
npm start

Then, as prompted, add the server's URL as a Socket.io connection in Posthoc.

Iron Harvest Map Adapter

This is an example adapter that exclusively serves iron harvest grid maps to demonstrate how you could serve maps as well as run search queries.

git clone https://github.com/ShortestPathLab/posthoc-app
cd ./app/adapter-iron-harvest
npm i
npm start

Then, as prompted, add the server's URL as a Socket.io connection in Posthoc.

Known Issues

Freeze on Large Search Traces

Posthoc may freeze when the search trace contains too many steps. This is due to the inefficient way the path is currently calculated.

Cannot Choose Source and Destination Nodes for Queries on Network Maps

Currently, queries on the network maps will force the source and destination nodes to be 0.