As announced earlier, I have two new projects for you: one on Windows and one on Mac.
Both projects are related to the 3D printing application that you worked on previously.
Let me describe both projects in more detail:
1) The goal of the first project is to optimize the 3D rendering of the Windows application. The problem currently is that my implementation of the hexagon menus is very inefficient, causing the application to run slowly. The reason for this is obvious and has to do with the way the buttons are drawn on the screen.
As you might know from last time, the buttons are hexagon buttons on top of the 3D environment. This is what happens: every button consistents of three layers, as depicted in the picture in attachment. Layer 1 draws the actual hexagon shape, layer 2 is responsible for handling click/hover events and layer 3 handles the representation of the icon. Layer 1 is part of the OpenTK rendering, layer 2 and 3 are implemented on the .NET level.
This has the following implications:
- Every time the OpenTK environment is drawn, all hexagon shapes are drawn each time. This is obviously huge overkill.
- Every time a user hovers over a button, layer 2 has to notify layer 1 and 3 of this event. Both layers know what to do with this, but the problem is that there may occur a delay between both actions. Upon hovering, for instance, layer 3 might already have changed its background color, while layer 1 still waiting to update. This is especially the case on slower computers.
The reason why this is implemented like this is because transparency in .NET doesn't really exist. Elements just pretend to be transparent by looking at the background of the underlying element. Obviously, it would be a lot better if we could just draw a single button-instance on top of the 3d rendering, but the problem is that the space around the hexagon is not really transparant and thus not showing the underlying 3D environment.
I'm open for any solution you propose, but a possible optimization I see is, for instance, have 2 openTK-renderings on top of each other. One is responsible for drawing the hexagons and only gets updated when the buttons are hovered; the other is the regular one and shows the 3D objects. The current situation would basically be decoupled, bringing back the original performance of the OpenTK rendering. This is probably the easiest solution I think...
2) The second project involves the mac version of the 3D create and print application. We are at the point that we need to implement the same mouse gestures as you implemented previous time in the Windows version. As we were very pleased with the result, we would like to rely on your input again.
Basically, the user needs to be able to scale and rotate one or more objects in the workspace. The functionality would be exactly the same as in the Windows version, so I guess you can reuse parts of the rationale. All actual scaling and rotating functionality is already present, so you only need to focus on the mouse gestures itself. The Mac application is based on the Repetier Mac version, so you can take a look at the code on Github to get an idea of the implementation.
On the practical side, the Windows project is the most urgent and should therefore be handled first. The Mac version should be scheduled immediately after.
As for the price, I propose 260 euro for both project together. I'll provide the following milestones: 40 euro upon accepting the project, 100 euro after the Windows project and the remaining 120 after completion of the Mac project.
The NDA from last time is still applicable and I'll give you access to both repos when you accept the project.
Please don't hesitate to ask for more information if certain things would not be clear.
Thanks in advance,