使用纯 Rust 实现的跨平台二维数据可视化工具(视频示例)。
- 实时、增量绘制简单二维图形(点、线段、圆)
- 跨平台
- 性能足够好
- 易用(颜色、点数等完全通过协议控制)
- 支持图形快照保存为文本文件
渲染基于 iced。
最新版编译器编译的不能收包,需要 debug。
产生数据的应用程序向工具启动时指定的固定端口发送 UDP 包即可实时绘图。
项目包含一个 [[bin]]
目标用于启动应用程序。
不带参数默认以标题 Figure1
和端口 12345
启动。
cargo run --release
也可以传入指定的标题和端口。
cargo run --release -- 图2 23333
- 空格启动自动调整视野
- 按住左键拖动画布
- 按住右键框选视野
- 滚轮以指针位置为中心缩放画布
数据源项目在 Cargo.toml
中依赖此项目。
monitor-tool = { path = "../monitor-tool-rs", default-features = false, features = [
"client",
] }
调用编码器编码图形并发送(示例在此文件)。
const TOPIC: &str = "test";
let socket = UdpSocket::bind("0.0.0.0:0").unwrap();
let _ = socket.connect("127.0.0.1:12345");
{
let mut rng = thread_rng();
let mut colors = Vec::with_capacity(256);
for i in 0..255 {
colors.push((i, rng.gen::<Srgba>()));
}
let _ = socket.send(&Encoder::with(|encoder| {
encoder.config_topic(TOPIC, 200000, 200, &colors, |_| {});
}));
}
for i in 0u64.. {
let mut encoder = Encoder::default();
let mut topic = encoder.topic(TOPIC);
for j in 0..500 {
let theta = ((i * 500 + j) as f32).powf(1.1) * PI * 1e-2;
let (sin, cos) = theta.sin_cos();
topic.push(vertex!((i ^ j) as u8; 0.1 * theta * cos, 0.1 * theta * sin; 255));
}
let _ = socket.send(&encoder.encode());
thread::sleep(Duration::from_millis(200));
}