Anatomy of multi command plugin

Hi all,

I need some help with structurising the plugin I’m writing. It consists of multiple projects and commands.
I want to be able to work with different people on the plugin at the same time and of course I want to reduce as much code as possible for maintainability reasons. I also am planning (in progress)to make it a cloud zoo plugin.

I’m now separating different projects in separate plugins and a shared DLL and this works, but doesn’t seem the correct way to me.

Can someone give me an example of the anatomy of his or her plugin? Or can someone explain to me what the best practices are while building a plugin to ensure a well structured progam?

Kind regards Reinder

I think separate plug-ins and DLLs is a good approach, why do you think it wouldn’t be?. We use this approach as well, for about 15 plug-ins and 10 Grasshopper add-ins. All functionality is in shared DLLs, and the plug-ins and grasshopper add-ins use this to offer the same functionality either as Rhino command or as Grasshopper component.

Very basically it looks like this

Common.DLL
   +-> CommonCommands.RHP
   +-> CommonComponents.GHA

I’m not sure about the cloud zoo plug-in, we have never used this.

1 Like

Hi Menno,

Thanks. I doesnt seem a good idea to me, because of the way licensing maybe work in the cloud zoo. Should licenses be distributed for all (sub)plugins separately or is there another solution? These questions and doughts arise mainly due inexperience on my side, becasuse i dont how this exactly works.
So mainly a feeling thing at the moment.

I’ve the following structure:

When I maken a *.yak from all plugins files.

1* DLL plugin

x* Command plugin (about 5 now)
1* datafolder

But maybe this is better?:

1 * Plugin
1 * DLL
X * Command’s
1* datafolder

I’m pretty new to programming (1 year ) and structurising code in a good way wasnt really in the learning program I’ve done.
Also i want to setup this in a correct way, so my coworkers can contribute to the plugins as well.

Outlook-e5uxk4xg.png