I’m having yet another crack at implementing genuinely smooth interpolated movement, and this time I’m trying to use a stack to make sure that the data is ready to be consumed at the point it is required – as opposed to creating an artifical pause at the start of every cycle while some heavy processing takes place.
It’s proving more difficult than I imagined, but I’m sure that truly smooth rendering is almost within my grasp.
After I’ve conquered this particular problem, I’m going to take a little break from developing Gee-Oh! / MakingTracksGPS, and probably a break from development altogether (except for my day job).
Need to recharge.
I’ve generally been making good progress in recent months, but lately I feel like it’s one step forwards, two steps back when working on some key aspects:
- Smoothness of interpolation
- Still seem to be getting this rush to the last point, followed by pause
- Should be no excuse for this pause, it should be 100% smooth
- Need to aim towards the n-1 position
- Thread manager efficiency
- The current switchThreadManagers() functionality is causing a lot of “hangover” connection attempts etc. and it’s having a visual impact on performance – causing a pause every 5 or so seconds
- Need to implement a short timeout or “killable” download mechanism
- Instead of waiting for a long timeout to realise that something has gone wrong
- Rendering jumpiness
- This still appears to rear its head every now and then
- I believe this is fix in cases where !alwaysCentreOnCurrentPoint
- Still need to fully examine behaviour when centred
- The thread manager fix may have helped/solved this
So yeah, that’s the general mindset I’m in. I have to draw a line under these three key issues before I’m happy enough to move on and pick some of this low-hanging fruit:
- Finish off theming
- Auto-centre after theme switching
- Fix location discovery logic so that any new manual waypoint is added to the reduced list immediately
- Get better discovery sound
And then I will get stuck into some of this:
- Fix issue where grid squares above are being cleared, without having been properly replaced by the correct level below
- Finish off auto-update API work
- Improve offline download persistence (don’t just discard after 20)
- Design/implement mechanism to allow grid squares to be refreshed
That should cover it for a while. Ta ta!
I’ve just been looking at improving the smoothness of interpolation in MakingTracksGPS. I’d sorta accepted this little “jump” in location for a while, and struggled to solve it, but I’ve now decided enough is enough and I’m gonna tackle this little fucker.
Having sketched out a few ideas (as shown below) I’ve done a little refactor of the code in order to try and achieve absolutely smooth motion.
Having access to all the spatial/time data information in advance, there’s no excuse not to get this right, so that’s my current focus.
Best crack on, while I’ve got momentum.
As you can see from the before/after images above, I’ve managed to smooth off those horrible text outline artifacts that have basically plagued me for years. I should really back-port this into DiagramBuilder, when I get the chance…
The fix was simple, I just changed this line:
((Graphics2D) g).setStroke(new BasicStroke(2.0f));
((Graphics2D) g).setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
Note that I am aware it looks horrible with all those “too small to read” road names – I am currently working on cutting out any road names that are below a certain size. I shall keep you all updated…
I’ve now got (almost) good quality spatial data being rendered as part of the grid but, as you can see, there is some discrepancy between the true GPS data (shown in red, rendered line by line using projection method) and the pre-rendered image (shown in white).
Also, for some reason, serialization stopped working for the GridSquares, so I will need to look into that too.
My last (immediate) task is to figure out why the mouse location seems to be out of sync with the GridPanel (by (-2,-2)), which I’m hoping is just an issue related to accessing my machine through a remote connection. I’ll find out later.
So, to formalise my current focus:
- Fix serialization issue
- Solve inaccurate mouse location value
- Get image to fit data properly
After that, I can begin to play with getting a full grid on screen, and auto-updating when grid is dragged/zoomed beyond certain limits, not forgetting playing around with the actual rendering (ie. making the whole thing look niiiiiiiiiiice!).
I’ve been playing around with IzPack today, trying to get a decent installer produced for DiagramBuilder, and I’ve made decent progress.
Seems okay in terms of cross-platform performance, but it’s a bit basic at the moment. I need to get my own custom icon put in there, for instance.
I basically took my pre-produced runnable jar file, and turned this into an installer with IzPack – at first with the unpack option set to “true”, which was disastrous – and this now places the runnable jar into the location specified by the installer.
Like I said, I need to get a custom icon put in there, but I also need to look into producing proper native installers – since, for example, I tried to run a runnable jar on a Windows 8 machine recently and it borked.
Aside from that, I will be running a full battery of tests on the licensing system very soon, and I’m looking to sign this off as code complete for v1.0 ASAP.
Naturally, I found another bug that needs fixing (dragging from bottom right to top left does not render circle preview), but that is very minor. I will have the code boxed off extremely soon.
Right, I have to be strict now and ban the inclusion of any new feature ideas before v1.0 is released, no matter how cool or vital they seem.
The remaining features that will make it into the application are as follows, and no more will be allowed:
- Finish off grouped spatial resize
- Implement right-click menu for line point nodes
- Drawn lines must obey “snapTo” angle
- Implement new version of top toolbar
- Implement drawing of primitives (rectangle and circle)
- Implement improved undo/redo/load/save, which takes into account selected states
- And make sure undo takes into account changing colours, line types etc.
- Implement import/export template sets
That’s about it for new features. I will consign scaled view and altered diagram location to the next version, along with a few other cool items.
Of course, I still have a ton of bug fixes, tweaks and alterations to do, but essentially I have closed the door to new stuff. Gonna get what is already there completed and polished up. Got to release this soon!