I am currently evaluating building a plugin in Rhino for an automation project and want to understand the practical limitations of using Python comprared to C#.
From my current understanding, Rhino itself is built on C#, however Python provides access to RhinoCommon and seems quite powerful.
For my project i want a build in Plugin Solution (not just a script) with an interactive UI. My use case is focused on automated geometry and importing step-files.
Are there things that are fundamentally only possible with a C# Plugin?
Are there performance drawbacks when using Python?
Are there any disadvantages?
Maybe someone has experice and can help. I feel like its tough finding the differences and limitations between both options, however the documentation and how to start is realy good documentet.
Any insights, real world experience or recommendations would be greatly appreciated.
In my experience the only thing you cannot do with a Rhino Plugin written in Python (or Grasshopper for that matter), compared to C# is register your plugin to be able to create a dockable panel. Everything else seems pretty much available thru the Rhino Common interface.
Just my two cents - Rhino is the only program that uses ETO (the GUI library) in conjunction with Python. The only documentation for ETO+Python is what you find on the Rhino website… and Github examples (which are sometimes too old and do not work with current releases).
I think that your plugin lifestyle will be easier with C# even though Python (in my opinion) is way easier to use. There should be more resources for using ETO for interactive panels in C#.
I hope some plugin creators chime in to give better clarity.
I have found Grok and Gemini to be great resources (these last few months, the free version of Grok always times out, so I tend to use Gemini these days). I don’t “vibe code” with them, but just ask them to explain how to use ETO or RhinoCommon with python. Like, I never understood how to use TableLayout in Python, so I asked Gemini to explain and provide examples, and now I can implement it.
Another thing Gemini has been great for is telling me if something is possible to do and which RhinoCommon or ETO functions I should use.
Of course, AIs get stuff wrong sometimes. But, when that happens, I can usually say, “That gave me such and such error.” And their 2nd (or 3rd) try usually works.
The constant glazing gets a little tiresome after a while, tho. Eg, now that you’re doing {whatever}, your project is not just a {slightly negative thing} but a {super positive thing}).