Custom Shape
Wednesday, 07 April 2010
Article Index
Custom Shape
Optimising DefiningGeometry
A custom shape example
Repositioning a shape
Choosing a method

Best practice?

So which method should we use?

It all depends. Recreating the geometry is easy and it isn't too inefficient if the geometry is quick to generate. There is a theoretical satisfaction in applying a manual shift to the co-ordinates of the stored geometry but in a general case it could become complex. Setting the geometries transform seems like overkill but it is extremely general - you can implement scaling or rotation in the same way. Given that hardware accelerated graphics can apply transformations efficiently this seems like the best general method.

Banner

Notice however that all of the examples in this article duck the issue of implementing the Shape properties as dependency properties.

There is one last big problem with the custom Shape class as it stands. Currently there is only a constructor with parameters and this means that we cannot instantiate a Tree using XAML as XAML needs a class to have a parameterless constructor.

We could just add a parameterless constructor and then allow the properties to be set after the creation of the instance. However, while it is reasonable to allow positional and even scale parameters to be set after the instance has been created, there is a sense in which L, s, t and dt determine the type of tree and these should be set when the tree is created.

There is also the problem that you can't generate a tree until all of these parameters have values. One easy way around the problem is to simply give each one a default value and generate the geometry each time one of them is set. This approach is fine if you are happy with regenerating the geometry each time a parameter is changed. However, if you want to generate the geometry once when the instance is created and then apply transformations to move, scale and rotate then it is more difficult to allow a parameterless constructor.

The solution is to use the ISupportInitilize interface and a batch parameter initialisation approach. This puts off the creation of the geometry until everything is defined and its honoured by XAML.

Coming soon - parameterless constructors with the help of ISupportInitialize.

Follow us on Twitter  to find out when this article is published.

Banner


Bitmap Effects

WPF bitmap effects are easy to use but subtle. Before moving on to consider custom effects we take a careful look at what is provided as standard.



Loading Bitmaps: DoEvents and the closure pattern

Sometimes loading a bitmap causes an asynchronous download and you have to wait for it to complete before using it - but how best to wait? The standard solution is to use an event but this breaks what [ ... ]



Routed Events

Routed events were new in .NET 3.5 but there is still plenty to discover about using them. We look at bubbling and tunneling and how to create your own routed even and how WPF changes the underlying m [ ... ]



Bitmap Coding and Metatdata in WPF


Having looked at working with raw pixel data we turn our attention to formattted image files and how to code and decode both the pixel data and the meta data they contain.

 



ISupportInitialize and XAML

For a class to be instantiated by XAML it has to have a parameter-less constructor. This means that properties that might be essential to creating the instance can be initialized in any order and this [ ... ]


Other Articles

<ASIN:1590599551>

<ASIN:0596159838>

<ASIN:0470596902>

<ASIN:0470563486>



Last Updated ( Wednesday, 07 April 2010 )
 
 

   
RSS feed of all content
I Programmer - full contents
Copyright © 2015 i-programmer.info. All Rights Reserved.
Joomla! is Free Software released under the GNU/GPL License.