大家好,
由于在写仿真的代码的时候,常常会希望有可视化的调试工具。比如用鼠标框选粒子,可视化稀疏网格,矩阵检查器等…这对我们调试代码很有帮助。于是我就打算开发一套完全基于GGUI之上的小工具。
开发的进度可到这个issue上跟踪
[RFC] Visualization utilities for debugging · Issue #7853 · taichi-dev/taichi (github.com)
Repo放在这里了:
chunleili/taichiVisTools (github.com)
希望实现的功能包括:
- 粒子拾取器: 用鼠标框选得到粒子的id并且高亮。
- 稀疏网格可视化:用线框小方块表示稀疏网格的是否被占用。
- 矩阵检查器:检查矩阵的大致分布情况和异常值。
例子
粒子拾取器
运行
python selector.py
拖动鼠标左键画出框框
按i打印粒子的id
Outpus:
[ 85 606 692 871 2478 2663 2013 3075 2911 3054 3600 4255
5260 5521 5582 6259 7191 7722 7066 7122 8771 8820 10765 10446
10902 10999 11857 11086 11087 11964 11991 11321 13118 14111 14112 15101
16390 16050 16056 16935 16278 16278 17156 16878 17800 17860 19085 18708
18781 18782 20046 20049 21030 21068 22135 23214 24166 24167 24168 24202
25081 26818 26051 26933 26934 26935 26936 28192 29099 29919 31261 30924
30978 30979 30403 31962 32144 32145 32146 32147 32148 32149 32457 32824
32897 32898 32604 32899 33564 32900 33565 32901 33566 33564 33567 32960
33611 33567 34438 33032 33775 33776]
API使用方法:首先实例化一个Selector,然后在渲染循环中调用selector.select()来进行框选和高亮, 最后想要获取id的时候使用selector.get_ids()即可。
用例代码如下
# 首先初始化一个拾取器
selector = Selector(camera, window, particle_pos)
while window.running:
#select the particles in the rectangle when dragging the mouse
selector.select()
#clear the selection when press "c"
if window.is_pressed("c"):
selector.clear()
#print the selected particle ids when press "i"
if window.is_pressed("i"):
print(selector.get_ids())
#draw the selected particles in red
scene.particles(particle_pos, radius=0.01, per_vertex_color=selector.per_vertex_color)