RhinoCommon is the new .NET plug-in SDK available for:
The term common is meant to be just that; an SDK that can be used across Rhino platforms. A plug-in built with RhinoCommon could potentially run on both Windows and Macintosh platforms with no changes.
Rhino 4 and Rhino 5 already contain a .NET plug-in SDK called Rhino.NET. We will continue to ship and support the Rhino.NET SDK in Rhino 5.
The good news is that you can use both SDKs in a single .NET plug-in. If there is a new feature in the RhinoCommon SDK that you want to use in your Rhino.NET based plug-in, just add a reference to RhinoCommon.dll and start using it.
Tip: When adding a reference, make sure to always set Copy Local to False.
RhinoCommon is meant to be version 2 of the Rhino.NET SDK, and it improves on the design and implementation of the current SDK. Some of the goals of RhinoCommon are:
The Python plug-in for Windows/Mac, Grasshopper, and all Mac based .NET plug-ins are being built against RhinoCommon. This lets us figure out where the problem spots are in RhinoCommon and make changes.
During 2011, Grasshopper was rewritten by David to be based on RhinoCommon. This was a big project and took some time to complete, but once done it provided performance improvements and better memory management. This has also been a step toward being able to run Grasshopper on Mac Rhino!
Grasshopper will maintain a special build of RhinoCommon to allow it to continue to run on Rhino 4. Because Grasshopper needs to run on Rhino 4, there will still be some dependencies in Grasshopper on the older Rhino.NET SDK.
The Python script engine is entirely based on RhinoCommon. All python scripts directly use RhinoCommon to work with Rhino. I'm finding that typically if something in RhinoCommon is difficult to write a python script for, then the RhinoCommon SDK needs to be fixed in that area.
RhinoCommon on Mac is executed through an embedded Mono framework.
I'm still learning all of the ins and outs of Mono so there will probably be some hiccups along the way. I'm currently trying to figure out the best way to write user interfaces for OSX and Mono. System.Windows.Forms has some problems which I am trying to better understand, but there are other user interface frameworks that I need to experiment with for writing more “pure” OSX style user interfaces.
The Mono development team appears to be pretty active and are adding more and more improvements to their OSX version.
One of the areas that developers need to be aware of is any .NET code that uses P/invoke will have problems on OSX/Mono. P/invoke is a technique to call unmanaged native functions from .NET code and typically these native functions are functions made available by the Windows Operating System. These native functions won't exist on Mac and therefore will throw an exception at run time.
All of .NET is not yet implemented in Mono (although an awful lot is.) A good tool to use for finding potential problem spots is the Mono Migration Analyzer (MoMA). This application can examine your DLLs to see find functions that are not supported by Mono.
Many commercial .NET components use P/invoke so this is something I highly recommend you investigate.
RhinoCommon is composed of the following pieces. These files are included with Rhino 5 / Mac Rhino.
| 2012/05/08 | Giulio | |
| 2010/01/12 | ||
| 2012/08/03 | Steve Baer | |
| 2012/09/28 | Dale Fugier | |
| 2011/03/17 | Steve Baer | |
| 2011/05/21 | Steve Baer | |
| 2011/11/06 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/12/20 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2011/01/12 | Steve Baer | |
| 2011/01/15 | Steve Baer | |
| 2011/01/03 | Steve Baer | |
| 2011/07/14 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/08/02 | Steve Baer | |
| 2010/08/02 | Steve Baer | |
| 2010/09/01 | Steve Baer | |
| 2010/09/01 | Steve Baer | |
| 2010/09/01 | Steve Baer | |
| 2011/05/28 | Steve Baer | |
| 2011/05/28 | Steve Baer | |
| 2011/11/30 | Steve Baer | |
| 2011/03/10 | Steve Baer | |
| 2011/08/12 | Dale Fugier | |
| 2011/06/04 | Steve Baer | |
| 2012/01/27 | Steve Baer | |
| 2011/11/07 | Steve Baer | |
| 2011/06/04 | Steve Baer | |
| 2012/08/14 | Steve Baer | |
| 2010/12/16 | Steve Baer | |
| 2010/12/29 | Steve Baer | |
| 2011/07/26 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2011/03/20 | Steve Baer | |
| 2011/11/07 | Steve Baer | |
| 2012/01/31 | Steve Baer | |
| 2011/03/10 | Steve Baer | |
| 2010/09/01 | Steve Baer | |
| 2011/01/15 | Steve Baer | |
| 2011/03/10 | Steve Baer | |
| 2011/03/22 | Steve Baer | |
| 2012/05/16 | Steve Baer | |
| 2011/06/01 | Steve Baer | |
| 2011/01/18 | Steve Baer | |
| 2011/01/15 | Steve Baer | |
| 2010/07/30 | Steve Baer | |
| 2010/12/16 | Steve Baer | |
| 2011/03/19 | Steve Baer | |
| 2011/05/28 | Steve Baer | |
| 2011/11/06 | Steve Baer | |
| 2011/03/10 | Steve Baer | |
| 2011/02/05 | Steve Baer | |
| 2011/05/19 | Steve Baer | |
| 2011/11/05 | Steve Baer | |
| 2011/06/16 | Steve Baer |