Skip to main content

Crate egui_map

Crate egui_map 

Source
Expand description

§egui-map

An egui widget that renders an interactive 2D map on screen.

The map::Map widget displays a set of nodes connected by lines, with support for:

  • Panning (click and drag) and zooming (mouse wheel; hold Ctrl — or Cmd on macOS — to zoom faster).
  • Spatial indexing of nodes through a kd-tree, so only the nodes inside the current viewport are painted each frame.
  • Node names and free-floating text labels with configurable visibility rules (see map::objects::VisibilitySetting).
  • Pulsing notifications and blinking markers attached to nodes.
  • Custom node rendering and right-click context menus through the map::objects::NodeTemplate and map::objects::ContextMenuManager traits.
  • Independent light and dark themes (see map::objects::MapSettings).

§Quick start

use egui_map::map::Map;
use egui_map::map::objects::MapPoint;
use std::collections::HashMap;

// Build the node set, keyed by node id.
let mut points: HashMap<usize, MapPoint> = HashMap::new();
points.insert(1, MapPoint::new(1, [0.0, 0.0]));
points.insert(2, MapPoint::new(2, [100.0, 50.0]));

let mut map = Map::new();
map.add_hashmap_points(points);

// Then, on every frame of your egui update loop:
// ui.add(&mut map);

§Profiling

The widget’s hot paths (rendering, viewport culling, point/line loading) are instrumented with profiling scopes. These are no-ops unless the final binary enables one of profiling’s backend features (e.g. profile-with-tracy); this crate never needs a feature of its own for that — enabling the backend feature anywhere in the dependency graph activates it here too, because profiling is a normal, unconditional dependency.

Modules§

map
Interactive map widget and the data types it renders.