|
1 | 1 | # SVS Viewer
|
2 | 2 |
|
3 |
| -A JavaFX-based rewrite of the SVS viewer. |
| 3 | +This is a 3D explorer for [Soar's](https://soar.eecs.umich.edu/) Spatial Visual System. |
| 4 | +It is a JavaFX-based rewrite of Joseph Xu's `svs_viewer`. The application is built as an installer |
| 5 | +for all major platforms, so clients do not need to worry about Java configuration. |
4 | 6 |
|
5 |
| -## Terminology |
| 7 | +This application was put together rather quickly, and I was learning JavaFX in the process. I've tested |
| 8 | +it on am M2 MacOS, but it still needs to be tested on other platforms. |
6 | 9 |
|
7 |
| -Scene in SVS vs JavaFX |
8 |
| -Geometry in SVS (might not be visible, has color, text, etc.) |
| 10 | +To learn more about Soar's Spatial Visual System, see the Soar Manual chapter |
| 11 | +here: https://soar.eecs.umich.edu/soar_manual/08_SpatialVisualSystem/. |
| 12 | + |
| 13 | +## Features |
| 14 | + |
| 15 | +* 3D rendering of SVS scenes |
| 16 | +* Mouse-based scene rotation and keyboard-based camera controls |
| 17 | +* toggleable drawing modes (fill, line, or both) |
| 18 | +* toggleable 3D axes display |
| 19 | +* toggleable label display |
| 20 | +* screenshot saving |
| 21 | + |
| 22 | +Screenshots are available on the [wiki](https://github.com/garfieldnate/JavaSVSViewer/wiki). |
9 | 23 |
|
10 | 24 | ## Installing
|
11 | 25 |
|
12 | 26 | * Standalone applications built via jpackage in CI
|
13 | 27 | * For Mac, I notice that the .pkg works but the .dmg does not
|
14 | 28 |
|
15 |
| -## Progress |
16 |
| - |
17 |
| -NEXT: prioritize features likely needed for preview release |
18 |
| - |
19 |
| -- add instructions and some screenshots to readme |
20 |
| - |
21 |
| -## Bugs |
22 |
| - |
23 |
| -- on Mac: click on menu, don't select anything and click on pane. Registers as a mouse drag and rotates the scene! |
24 |
| - |
25 |
| -### Design |
26 |
| - |
27 |
| -[X] Hello World |
28 |
| -[X] Place display logic into an XML pane thingy |
29 |
| -[ ] JMetro? https://www.pixelduke.com/java-javafx-theme-jmetro/ |
30 |
| - |
31 |
| -### Network |
32 |
| - |
33 |
| -Real line processor parses and sends results to UI |
34 |
| -Test one just saves lines |
35 |
| - |
36 |
| -Perhaps a Java-style pull architecture? UI updater is pulling from command parser, (which is pulling from line |
37 |
| -provider?), which is pulling from Server? |
38 |
| - |
39 |
| -[X] listen on specified port |
40 |
| -[X] figure out how to update UI in some way |
41 |
| - |
42 |
| -- [X] JavaFX Service (or possibly Task, Worker) |
43 |
| - [X] receive SVS commands (POC: just print them out) |
44 |
| - [X] add wildcard-trie to GeometryManager so we can retrieve scenes/geometries using wildcards. |
45 |
| - [ ] interpret parsed commands |
46 |
| - - [X] update geometry |
47 |
| - - [X] spike: show a correct box |
48 |
| - - [ ] layer |
49 |
| - - [X] new scene |
50 |
| - - [X] new geometry |
51 |
| - - [X] delete scenes |
52 |
| - - [X] delete geometries |
53 |
| - - [X] save |
54 |
| -- [ ] inject Socket? |
55 |
| -- [ ] what is controller actually supposed to do? |
56 |
| -- [ ] can I really not specify default port in the FXML? Maybe has to be somewhere else? Is DI not possible? Do I not |
57 |
| - understand FXML well enough? |
58 |
| - [ ] connect/disconnect occur gracefully |
59 |
| - - currently doesn't allow reconnecting at all |
60 |
| - [ ] graceful error when port is already in use |
61 |
| - |
62 |
| -[ ] testing |
63 |
| - |
64 |
| -- [ ] add an echo mode to server that returns parsed JSON or something |
65 |
| -- [ ] instantiate real server and test client |
66 |
| -- [ ] turn on echo mode, then send example data to server with test client and expect back proper acknowledgements and |
67 |
| - JSONs |
68 |
| - [ ] log received commands |
69 |
| -- [ ] console |
70 |
| -- [ ] a Window user can open? |
71 |
| -- [ ] https://github.com/TestFX/TestFX |
72 |
| - |
73 |
| -### 3D Display |
74 |
| - |
75 |
| -[X] meshes from SVS |
76 |
| -[X] spheres from SVS |
77 |
| -[X] labels from SVS |
78 |
| -[%] grid lines |
79 |
| - |
80 |
| -- change grid size automatically when shapeGroup size changes |
81 |
| - |
82 |
| -### List Display |
83 |
| - |
84 |
| -[ ] show all objects |
85 |
| -[ ] search objects by name |
86 |
| -[ ] change color of selected objects (search for belief-* and make them all red) |
87 |
| -[ ] reset color changes |
88 |
| - |
89 |
| -### Controls |
90 |
| - |
91 |
| -[ ] good default camera position |
92 |
| -[ ] shortcuts for different angle views |
93 |
| -[X] zoom in/out |
94 |
| -[X] translate camera |
95 |
| -[X] rotate camera |
96 |
| -[ ] rotate around point? |
97 |
| -[X] labels on/off |
98 |
| -[X] drawing mode line/solid |
99 |
| -[X] screenshot shortcut |
100 |
| -[ ] select which scene (S1, S2, etc.) to display |
101 |
| -[ ] select port to listen on, then create server (also allow command line specification) |
102 |
| -[ ] shift+mouse-drag horizontal to rotate around z-axis |
103 |
| -[ ] select object with mouse or in objects list panel |
104 |
| - |
105 |
| -- [ ] highlight it somehow |
106 |
| -- [ ] show orientation with arrows |
107 |
| -- [ ] show its info in a separate panel |
108 |
| -- [ ] might be able to inspect geometries that have no visualization (only position, rotation, no vertices) |
109 |
| -- [ ] double-click or something to focus camera on object? |
110 |
| -- [ ] notify if object not currently visible (completely obstructed or surrounded)? |
111 |
| - ideas: |
112 |
| -- [ ] change camera to FPV from object? (would probably suffice to show viewing direction of robot) |
113 |
| - |
114 |
| -[ ] 1,2,3,4,5,6 shortcuts to view from different faces |
115 |
| -[ ] maybe shift 1,2,3,4,5,6,7,8 to view from different corners |
116 |
| -[ ] arrow keys move camera to sides |
117 |
| -[X] mouse rotation |
118 |
| -[ ] regex to show/hide certain labels or objects |
119 |
| - |
120 |
| -[ ] visual camera controls? |
121 |
| - |
122 |
| -- slider for zoom https://www.youtube.com/watch?v=yWsNO9qiYgg |
123 |
| -- cube thing for rotation? |
124 |
| -- minimap for translation? |
125 |
| - |
126 |
| -other: |
127 |
| - |
128 |
| -- [ ] change package name. I am not associated with UMich. |
129 |
| -- [ ] rename to SVSViewerFX (for standalone apps, noone needs to know it's Java!) |
130 |
| -- [ ] send a PR to improve JavaFX javadocs |
131 |
| - - TriangleMesh |
132 |
| - - needs to explain texture coordinates |
133 |
| - - needs an example for point, texture, and normal data setting |
134 |
| - - needs to explain when to use normals and when not to |
135 |
| - - validation of faces array needs to be more specific |
136 |
| - - fix typos |
137 |
| - - add getPointElementSize(), getTexCoordElementSize(), etc. in warnings where printed literally |
138 |
| - - Rotate |
139 |
| - - does the rotation axis need to be normalized? |
140 |
| - |
141 |
| -### Settings |
142 |
| - |
143 |
| -[X] save/load settings on user's machine somewhere |
144 |
| -[ ] adjust sensitivity of controls (zoom) |
145 |
| - |
146 | 29 | ## Format
|
147 | 30 |
|
148 | 31 | We use [google-java-format](https://github.com/google/google-java-format) to format the source files.
|
|
0 commit comments