Rhino3D is an excellent 3D modeling and CAD package from McNeel Associates. They have a flexible architecture called the Cloud Zoo used in licensing their own software and, optionally, by party tools built using their framework. McNeel supplies a thorough Cloud Zoo Plugin Licensing Guide. This is the first in a series of articles written while my first licensing implementation as a Rhino plugin vendor is still fresh in my mind. Hopefully others will find it useful. The Rhino developer documentation is complete from a technical perspective; this is more of a planning/project management summary.
This list and my experience are related from the perspective of a .NET plugin, but the procedure for C++ is analogous. A list of the tasks required of a third party when setting up this infrastructure, as done in my own XRay Rhino3D Plugin, is:
- Create a code signing key, which involves several steps including McNeel performing a signing to create a signing certificate for the plugin vendor.
- Implement several inherited methods inside the plugin matching a basic flow of:
- Rhino to plugin: Please Load
- Plugin to Rhino: Please check for a license.
- Rhino to plugin: Here are the results of the license check. Please either continue loading or return an error code.
- Plugin, optionally: Please supply more information.
- (loading concludes, either successfully or unsuccessfully)
- Create tools to answer http queries from the cloud zoo: these are in the form of server software that you need to host. The principal requirement is to answer questions about whether a given license may be assigned to a user/group with yes/no.
- Create tools or scripts to inform McNeel of additional products and licenses via http.
I left that list unordered because the actual flow of development may differ. The technical documentation supplied for Cloud Zoo data objects and code requirements is quite thorough and I won’t duplicate any of that except to note that the licensing communication between the Rhino plugin vendor’s server and McNeel is a set of simple JSON object POSTs, PUTs, and GETs.
Leave a Reply