I'm following suit for Geometry Gym tools with 'Extra' unless agreement is reached on something else.
Great work Ben, a very useful guide. I'm up and running with this now, and it works very well. I got referencing my Rhino plug-in dll working, which should get rid of some of the localized installation path issues (dependent on Windows version and language) users were seeing with the c# components. For some reason the symbols aren't loading for the grasshopper dll in my multi-project solution, so I can't debug into it but most of my code is in my dll so fingers crossed it's not really needed.
Oh I see the problem, you're getting GH_GeometricGoo, which is an abstract utility class. Kernel.Types.Point is so weird that it doesn't inherit from GH_GeometricGoo. You should use the interface IGH_GeometricGoo instead, that is the only guaranteed implementation.
Are you defining a non-generic List? It should be:
List<IGH_GeometricGoo> restraints = new List<IGH_GeometricGoo>();
There is no short cut way to go from IGH_GeometricGoo to OnGeometry. Either you perform all the casts yourself (which is a lot of work) or you look around Grasshopper.Kernel.GH_Convert for useful functions (my recommendation, since those functions will be updated once new data types become available)
Decree's don't work. If someone adds a single component that clearly belongs in the Curve.Primitive section, I think they should add it to that panel. If someone writes a suite of over 50 components, it probably warrants its own tab.
I specifically designed the Grasshopper SDK so that new tools could be merged into the application as though they are part of the core product.
I think making the UI customizable is the best way to go, but I'm not starting with that anytime soon. First RhinoCommon, then Clusters, then RCP.
With regards to custom components, does anyone have a sense whether they are more stable or execute more quickly than say a VB or C# component within GH?
I can see the advantages of having custom components so you don't have to copy and paste VB/C# components between files and the code stays up to date but are there any specific speed/stability advantages?