|
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