If this is a CAD like application (I hope you are not going to create another AutoCAD :-)), I would recommend to think about using WPF, which was designed with this sort of application in mind. In particular, you may think about building all you graphical design around
System.Windows.Controls.Canvas
:
http://msdn.microsoft.com/en-us/library/system.windows.controls.canvas.aspx[
^].
You won't need to care about graphical rendering and many other detail like mouse hit test, zooming, panning and more. You can put any kinds of UI elements on the instance of
Canvas
, primitive (like like or rectangle) or complex. You can even put other instances on
Canvas
to represent compound elements. This way, you can implement hierarchical grouping and ungrouping. You can even allow the users to create their own elements and put them on
Canvas
.
The user can create any elements even using some 3-rd party tools. For example, I would highly recommend Inkscape:
http://en.wikipedia.org/wiki/Inkspace[
^],
http://inkscape.org/[
^].
Even though its graphics is based on SVG (
http://inkscape.org/[
^]), it can be converted to XAML, so you can easily use user's graphic elements in your WPF applications. The users should understand that SVG graphics is somewhat richer than XAML, so they should not use some advanced properties not allowed by XAML, such as blurring.
This is just one of possible approaches, but I think it would be most promising. Potentially, you can even develop it for both WPF and Silverlight and make the online tool out of it.
—SA