Custom data renderer / shadowtype

Hi all,

A while ago I made some noise about doing some work on contouring. Well,
I ignored it for a while but it has come up again, and I think I need to
understand how ShadowTypes work a bit more. I've read the DataRenderer
tutorial, which seems to be a kind if guide to the class heirarchy, but
is a bit hand-wavy when it comes to the actual changes one has to make
in order to change the behaviour of things.

Looking around, it seemed like if I wanted to do my own contouring, the
steps I would need to follow are :

1.) Create a custom DataRenderer, whose basic job is to return custom
ShadowTypes when they are asked for.

2.) Extend ShadowType and override the methods that I care about

However, I'm not sure how the innards of the ShadowType class really
hang together. What I want to do is (I think) change the MakeContour
method in order to change the way contouring works. (Just for argument's
sake, let's pretend I can do that). 

But I don't know who calls this method or why.

I'd really like to understand the execution flow.

Also, I don't know to what extent the ShadowType classes are part of an
interface - i.e. what methods are relied upon by other VisAD classes,
which ones are part of the ShadowType structure, which ones are just
internal etc. 

Maybe I'm being dense, but it seems like a dense topic, so hopefully
that's okay :)

Cheers,
-Tennessee