Skip to content

Commit ffeac65

Browse files
committed
Update readme
Move most TODO items into dedicated document to reduce noise. Link to Wiki, where I've added some screenshots.
1 parent 605cc2e commit ffeac65

File tree

3 files changed

+141
-136
lines changed

3 files changed

+141
-136
lines changed

README.md

Lines changed: 18 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,31 @@
11
# SVS Viewer
22

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.
46

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.
69

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).
923

1024
## Installing
1125

1226
* Standalone applications built via jpackage in CI
1327
* For Mac, I notice that the .pkg works but the .dmg does not
1428

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-
14629
## Format
14730

14831
We use [google-java-format](https://github.com/google/google-java-format) to format the source files.

TODO.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
## Bugs
2+
3+
- on Mac: click on menu, don't select anything and click on pane. Registers as a mouse drag and rotates the scene!
4+
5+
### Design
6+
7+
[X] Hello World
8+
[X] Place display logic into an XML pane thingy
9+
[ ] JMetro? https://www.pixelduke.com/java-javafx-theme-jmetro/
10+
11+
### Network
12+
13+
Real line processor parses and sends results to UI
14+
Test one just saves lines
15+
16+
Perhaps a Java-style pull architecture? UI updater is pulling from command parser, (which is pulling from line
17+
provider?), which is pulling from Server?
18+
19+
[X] listen on specified port
20+
[X] figure out how to update UI in some way
21+
22+
- [X] JavaFX Service (or possibly Task, Worker)
23+
[X] receive SVS commands (POC: just print them out)
24+
[X] add wildcard-trie to GeometryManager so we can retrieve scenes/geometries using wildcards.
25+
[ ] interpret parsed commands
26+
- [X] update geometry
27+
- [X] spike: show a correct box
28+
- [ ] layer
29+
- [X] new scene
30+
- [X] new geometry
31+
- [X] delete scenes
32+
- [X] delete geometries
33+
- [X] save
34+
- [ ] inject Socket?
35+
- [ ] what is controller actually supposed to do?
36+
- [ ] can I really not specify default port in the FXML? Maybe has to be somewhere else? Is DI not possible? Do I not
37+
understand FXML well enough?
38+
[X] connect/disconnect occur gracefully
39+
[ ] graceful error when port is already in use
40+
41+
[ ] testing
42+
43+
- [ ] add an echo mode to server that returns parsed JSON or something
44+
- [ ] instantiate real server and test client
45+
- [ ] turn on echo mode, then send example data to server with test client and expect back proper acknowledgements and
46+
JSONs
47+
[ ] log received commands
48+
- [ ] console
49+
- [ ] a Window user can open?
50+
- [ ] https://github.com/TestFX/TestFX
51+
52+
### 3D Display
53+
54+
[X] meshes from SVS
55+
[X] spheres from SVS
56+
[X] labels from SVS
57+
[%] grid lines
58+
59+
- change grid size automatically when shapeGroup size changes
60+
61+
### List Display
62+
63+
[ ] show all objects
64+
[ ] search objects by name
65+
[ ] change color of selected objects (search for belief-* and make them all red)
66+
[ ] reset color changes
67+
68+
### Controls
69+
70+
[ ] good default camera position
71+
[ ] shortcuts for different angle views
72+
[X] zoom in/out
73+
[X] translate camera
74+
[X] rotate camera
75+
[ ] rotate around point?
76+
[X] labels on/off
77+
[X] drawing mode line/solid
78+
[X] screenshot shortcut
79+
[ ] select which scene (S1, S2, etc.) to display
80+
[ ] select port to listen on, then create server (also allow command line specification)
81+
[ ] shift+mouse-drag horizontal to rotate around z-axis
82+
[ ] select object with mouse or in objects list panel
83+
84+
- [ ] highlight it somehow
85+
- [ ] show orientation with arrows
86+
- [ ] show its info in a separate panel
87+
- [ ] might be able to inspect geometries that have no visualization (only position, rotation, no vertices)
88+
- [ ] double-click or something to focus camera on object?
89+
- [ ] notify if object not currently visible (completely obstructed or surrounded)?
90+
ideas:
91+
- [ ] change camera to FPV from object? (would probably suffice to show viewing direction of robot)
92+
93+
[ ] 1,2,3,4,5,6 shortcuts to view from different faces
94+
[ ] maybe shift 1,2,3,4,5,6,7,8 to view from different corners
95+
[ ] arrow keys move camera to sides
96+
[X] mouse rotation
97+
[ ] regex to show/hide certain labels or objects
98+
99+
[ ] visual camera controls?
100+
101+
- slider for zoom https://www.youtube.com/watch?v=yWsNO9qiYgg
102+
- cube thing for rotation?
103+
- minimap for translation?
104+
105+
other:
106+
107+
- [ ] change package name. I am not associated with UMich.
108+
- [ ] rename to SVSViewerFX (for standalone apps, noone needs to know it's Java!)
109+
- [ ] send a PR to improve JavaFX javadocs
110+
- TriangleMesh
111+
- needs to explain texture coordinates
112+
- needs an example for point, texture, and normal data setting
113+
- needs to explain when to use normals and when not to
114+
- validation of faces array needs to be more specific
115+
- fix typos
116+
- add getPointElementSize(), getTexCoordElementSize(), etc. in warnings where printed literally
117+
- Rotate
118+
- does the rotation axis need to be normalized?
119+
120+
### Settings
121+
122+
[X] save/load settings on user's machine somewhere
123+
[ ] adjust sensitivity of controls (zoom)

src/main/java/edu/umich/soar/svsviewer/ViewerPreferences.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public ViewerPreferences() {
2929
showLabels = new SimpleBooleanProperty(prefs.getBoolean("showLabels", true));
3030
showLabels.addListener(
3131
(obs, wasPreviouslyVisible, isNowVisible) -> {
32-
System.out.println("Pref set: " + isNowVisible);
3332
prefs.putBoolean("showLabels", isNowVisible);
3433
});
3534

0 commit comments

Comments
 (0)