In a nutshell, Aspect is a winforms based drag drop surface to represent relationships between objects. My main goal is always simplicity of use.

Aspect has ostensibly been written for DNorm, an, as of yet unpublished project, and so betrays a few functional requirements for that. I do plan to decouple these aspects in the future. Aspect is, however, something I have wanted many times in the past, and felt it was time I built it myself.

Graphically the 'vanilla' implementation of Aspect is plain and simple, though all visual aspects of Aspect are customisable.

There are two basic visual components to the Aspect design surface, an Icon Label, and an Arrow. These inherit from, respectively, BaseSurfaceObject and BaseSurfaceRelationship that handle most of the required functionality.

Both these abstract objects contain a Theme object in order to customise them visually, and if more specific visual changes are required, all rendering code in these objects are marked as virtual.

New components may also be built by implementing the interfaces ISurfaceObject and ISurfaceRelationship, though all functional code must be rewritten if that is done.

New graphical objects may be added to an implementation of Aspect through a simple, app.config based, plugin system.

Any POCO object, implementing a simple interface, can be associated with a visual object, whose properties are viewable / editable through a properties pane.

I shall be documenting Aspect primarily at http://www.obviouscode.com

To Do:

As of February, 2009, I am still working on the following features

Save / Load
Double Buffering / partial ui invalidation
A plugin system to 'utilise' a design - for example, creating code templates from T4
Arrow head and tails (above simple Start and End caps on Pens)
Decoupling the menu tree from the UI
Some menu tree usability features
Editing of object text on surface (as opposed to on menu tree or in properties pane)
Adding objects to the surface through the API rather than drag/drop from the menu.
Overriding of icon for indiviual objects on Surface

Last edited Feb 12, 2010 at 11:10 PM by obviouscode, version 4