Paramatrix

  • warning: Division by zero in /home/.hytek/armin/mw/dp/includes/image.inc on line 125.
  • warning: imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in /home/.hytek/armin/mw/dp/includes/image.inc on line 238.
  • warning: imagecolorallocatealpha(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 240.
  • warning: imagealphablending(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 241.
  • warning: imagefilledrectangle(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 242.
  • warning: imagealphablending(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 243.
  • warning: imagesavealpha(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 244.
  • warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 264.
  • warning: imagepng(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 342.
  • warning: imagedestroy(): supplied argument is not a valid Image resource in /home/.hytek/armin/mw/dp/includes/image.inc on line 267.
  • Unable to create scaled Original image

A cooperative, Pi-calculus based UI subsystem.

Yep, I have done it. It has taken a little time, but I am now in the final steps to finish a new engine to develop interactive components. This can be used to create workflow systems or user interfaces.

The UI subsystem I created for my simple sensor application was not capable to handle the complexity and flexibility required to implement a multi-dimensional layout engine.

I struggeled around a few days with the layout engine based on the old UI subsystem, but then decided to revamp the subsystem completely to create a new – more Pi-Calculus based – system, where the connection ports are copyable and channels between ports are created on demand.

UI event subsystem and sensors are working, next is layout management.

So today, after 3 attempts I finally finished the user interface event subsystem. Thanks to elists I was capable to create a small scheduler for event handlers and a template based system similar to the signal and slots system of trolltech’s Qt framework.

Slotmanagement milestone reached, development of UI subsystem

The externalising of slots is done now. I have created a small application named ‘desktop’ which is capable to handle space organisation for the terminals starting up. Additionally, the server supports a hierarchical slot namespace, so it is possible to place and access slots by path names.

Today I decided, that it would be nice to support window (slot) decorations containing some essential buttons. So it is not time to start building the user interface subsystem. Of course, it will include automatic 2d/3d layout-management and full support for the costomisation of 3D widgets.

Expect some buttons soon, click, click

Next milestone

Ok, slot management is implemented, today, while thinking what to put next on my todo list I got a new idea: I will rewrite the whole slot management system to allow any client to provide 3D slots and to start other clients inside these slots. This would solve some of my current issues with space partitioning and application startup:

Movement update

I rewrote the complete focusmanager and movement engine, so now it is possible to use the mouse-wheel to adjust the relative depth to the current object. Additionally, it is now possible to concatenate movements: Users are able to adjust the relative depth while moving the focus to a new object.

Using the paramatrix terminal emulator within the cylindrical slot manager


This screenshot shows (from left to right) a gprof output and source editing using vim and some output produced by the find command. The text quality is not final and the borders are somewhat overlapping. But all in all it is possible to work within the paramatrix terminal emulator. Please click on ‘original image’ to get the real impression.

Slot management

Zombie objects and the event-system are finished. The event-system is preliminary, but it is now possible to work with multiple applications while switching through them using the Focusmanager. Yep! Again, one point less on my todo list. But the next is near:

Focusmanager implemented, now it's time to support zombie objects

Both, the association system, I called tlists (from type-lists) and the focusmanager are implemented and working.

In fact, the focusmanager is working much better than in my 3D prototype I’ve made in 2000. The mouse feedback is very acceptible for touch interaction. You touch an object, and the camera will move itsself into the best position to focus it, with the mouse cursor not leaving the appropriate position in the 3D plane of the focused object.

Associating instances

So, to implement the Focusmanager I found out, that there is another small technology needed. Basically, I need some kind of an association system to link arbitrary typed instances to the scenegraph nodes. While rendering the scenegraph, this could have multiple uses:

  • OpenGL or other scenegraph renderer need some kind of optimisation attachments, based on the scenegraph node-level. I don’t like the idea of creating inheritance hierarchies for the scene nodes to specialise them. I want them to be allocated and attached separately, and I want to attach instances based on classes not derived from the same baseclass.
  • Additionally, the Focusmanager may attach information on a per node granularity, for example to store the relevant information to interpolate quaternions.

Paramatrix focus manager progress

I finished all code required for implementing the focusmanager today. 3D Ray/Polygon intersection and all the associated math. This time I was not able use the OpenGL functions, so I had to manage and implement all matrix math required. Testing was a little bit of a struggle, because of my limited experience with inversed matrices and some bugs in the math code. But finally it worked.

Syndicate content