General
Guides that apply across platforms and SDKs
Overview
Getting Started
Fundamentals
Essential Mathematics
- Introduction
- Vector Mathematics
- Matrices and Transformations
- Parametric Curves and Surfaces
- Download Essential Mathematics for Computational Design as a single PDF
This Site
Scripting
Guides on using scripting features in Rhino 8 and above, that apply to all programming languages
Getting Started
ScriptEditor Command
- Opening Script Editor
- First Script
- Edit Script
- Running Scripts
- Debugging Scripts
- Using Packages
- Editor Features
Script Component
- Create Script Component
- First Script
- Script Inputs and Outputs
- Edit Script
- Run Scripts
- Debugging Scripts
- Using Packages
- Editor Features
Python Scripting
-
Scripting: Python Coming Soon
- Grasshopper Scripting: Python
C# Scripting
-
Scripting: C# Coming Soon
- Grasshopper Scripting: C#
Editor Features
- Editing Features
-
Explorer Coming Soon
-
Search & Replace Coming Soon
- Terminal
-
Problems Tray Coming Soon
-
Debugger Coming Soon
-
Templates Coming Soon
-
Examples Coming Soon
-
Help Coming Soon
- Options
- Logs
Publishing Script Plugins
Advanced
- ScriptEditor Macros
- Language Initialization
-
CPython Runtime and Language Server Coming Soon
- Python Path Files
- Python Package Environments
-
Language Libraries Coming Soon
- Asynchronous Execution
-
VisualStudioCode Extension Coming Soon
- RhinoCode Command Line Interface
RhinoCommon
The cross-platform .NET plugin SDK for Rhino.
Overview
Getting Started
- Installing Tools (Windows, Mac)
- Your First Plugin (Windows, Mac)
- Plugin Installers (Windows, Mac)
- Distributing a Rhino Plug-In with the Package Manager
Fundamentals
- Object Selection with Options
- Plugin User Data
- Registering Plugins (Windows)
- Commas & Periods
- Event Watchers
- Adding Commands to Projects
- Loading Tool Palettes (Mac)
- Uninstalling Plugins (Mac)
RhinoCommon Geometry
Rendering
- Render Engine Integration - Introduction
- Render Engine Integration - Modal
- Render Engine Integration - ChangeQueue
- Render Engine Integration - Interactive Viewport
Advanced
- Changes to Tabbed Panels
- Creating and Deploying Plugin Toolbars
- Localizing Plugin Toolbars
- Options Pages Best Practices
- Run a Rhino command from a Plugin
- Supporting High DPI Displays
- Using NuGet
- Using RhinoCommon from Python
- Creating a Skin (Windows)
- Display Conduits
- Code-Driven File IO
- Wrapping Native Libraries
- Procedurally Generate Toolbars
- Using methodgen
- Interacting with Rhino Accounts
Zoo
- What is a LAN Zoo Plugin?
- Creating LAN Zoo Plugins
- Creating Plugins that use the LAN Zoo
- Digitally Signing LAN Zoo Plugins
Cloud Zoo
- Creating Plugins that use Cloud Zoo
- Register as an Issuer in Cloud Zoo
- Add Products to Cloud Zoo
- Implement HTTPS Callbacks
- Modify Plug-In licensing code to support Cloud Zoo
- Optional Cloud Zoo endpoints for License Management
Rhino.Python
Quickly add functionality to Rhino or automate repetitive tasks.
Overview
Getting Started
- Your First Python Script in Rhino (Windows, Mac, Grasshopper)
- Where to get help…
- Troubleshooting Installation
Python Editor for Windows
Python in Grasshopper
- Creating Global Sticky Variables
- Node in Code from Python.
- Custom GhPython Baking Component
- Grasshopper data trees and Python
- GhPython Common Questions and Answers
Fundamentals
- Python Basic Syntax
- Python Procedures
- Python Data Types
- Python Variables
- Python Conditionals
- Python Looping
- Python Operators
- Python Code Conventions
- Python Dictionaries
Python in Rhino
- RhinoScriptSyntax in Python
- Points in Python
- List of Points in Python
- Colors in Python
- Lines in Python
- Vectors in Python
- Planes in Python
- Rhino objects in Python
- Point and Vector Methods
- Line and Plane Methods
- Rhino NURBS Geometry Overview
Rhino.Python 101
Introduction
Where to find help
1. What’s it all about?
2. Python Essentials
3. Script Anatomy
4. Operators and Functions
5. Conditional Execution
6. Tuples, Lists, and Dictionaries
7. Classes
8. Geometry
Download the Rhino.Python 101 Primer as a single PDF
Intermediate
- How to read and write a simple file
- Code-Driven File IO
- How to read and write a CSV files
- How to use JSON
- Using Python Dictionary as a database
- How to get user input in a script
- Creating a script and module
- APIs Available to Python
- Module Libraries in Python
- Using Python Packages
- Calling Overloaded Methods from Python
- Generating Random Numbers in Python
- Providing Arguments for By-Reference Parameters
Custom Dialogs in Eto
Other Resources
- Rhino Scripting Forum (Discourse)
- Rhino.Python Samples
- Rhino.Python Developer Samples GitHub
- Designalyze Python Tutorials
- Plethora Project
- Steve Baer’s Blog
- Python Beginner’s Guide
- Tutorials Point Python Series
- Rhino.Python Dash Docset
- Nature of Code Video Tutorials
openNURBS
Read/Write Rhino 3dm files in your application.
Overview
Getting Started
Fundamentals
- Brep Loop & Edge Directions
- Getting Object Attributes
- Importing Lightweight Extrusions
- Periodic Curves & Surfaces
- Reading Render Meshes
- Reading Subdivision Surfaces
- Superfluous Knots
- Traversing Instance Definitions
- Accessing Rendering Assets
Advanced
- Creating Linear Dimensions
- Data from Ellipses
- Finding an Annotation object's font
- Instance References with Non-Uniform Scales
- Reading Per-Face Render Materials
- Testing for Object Visibility
C/C++
Native SDK for Rhino for Windows plugins.
Overview
Getting Started
- Installing Tools (Windows)
- Creating your first C/C++ plugin for Rhino
- Defining New Plugin Commands
- Migrate your plug-in project to Rhino 8
- Migrate your plug-in project to Rhino 7
- Migrate your plug-in project to Rhino 6
- Migrate your Options, Document Properties and Object Properties Pages
- Creating a Rhino Plug-In Package
Fundamentals
- Adding a Custom Menu
- Adding a NURBS Curve from Control Points
- Adding Command Line Options
- Adding Curve Objects
- Adding Mesh Objects
- Adding User Strings to Objects
- Adjusting Isocurve Density
- Annotation Objects
- Applying Non-Uniform Transformations to Objects
- Archiving Curves to a File
- Avoiding Buffer Overruns in String Functions
- Calculating the Angle Between Two Points
- Clear Undo and Redo Lists
- Create Principal Curvature Curves
- Creating Blocks
- Creating Leaders
- Creating Sublayers
- Determining Curve Object Types
- Determining if a Brep is a Box
- Determining the Active Viewport
- Determining the Normal Direction of a Brep Face
- Finding Points on Curves at Arc Length Distances
- Finding Rhino's Installation Folder
- Finding the Parameter of a Curve at a Point
- Getting Layer Objects
- Getting Object UUIDs
- Getting the Units of the Active Document
- Iterating the Geometry Table
- Logging Debug Info
- Mesh Types
- Modify an Object's Color
- Modifying a Light's Color
- Offsetting Curves on Surfaces
- Open a 3DM file
- Orienting Objects on Surfaces
- Picking Brep Components
- Picking Point Objects
- Picking Surface Point
- Picking Text Dots
- Pre- and Post-Picking Objects
- Printing a Layer's Full Path
- Registering Plugins (Windows)
- Renaming Layers
- Running Rhino Commands from Plugins
- Saving Persistent Settings
- Selecting Objects
- Setting Viewport Titles
- Transforming Breps
- Type Casting Rhino Objects
- User Data
- Using the sizeof operator with TCHAR and wchar_t
- Window Selecting
- Writing to Text Files
- Object Types
- Brep Data Structure
Advanced
- Adding Online Help to Your Plugin
- Adding RhinoScript Support
- Adding to Rhino's File Search Path
- Adjusting Clipping Planes from Conduits
- Calculating the Lengths of NURBS Curves
- Canceling Long Processes with ESC
- Changing Display Precision
- Crash Dump Analysis
- Creating a Custom Color Picker
- Creating a Custom CRhinoGetObject Class
- Creating and Deploying Plugin Toolbars
- Creating Points from Text Objects
- Custom Picking Grip Objects
- Custom Undo Events
- Determining Language Setting
- Draft Angle Contouring
- Drawing Arrowheads in Display Conduits
- Duplicating Objects with Group
- Dynamically Drawing Geometry when Picking Points
- Dynamically Drawing Polylines
- Dynamically Drawing Text Strings
- Dynamically Inserting Blocks
- Enabling Orthogonal Mode
- Extracting Curve Edit Points
- Extracting Thumbnail Preview Images
- Getting Script-Added Objects
- Handling Enter and Escape from Modal Dialogs
- Highlighting Objects in Conduits
- Loading Plugins at Startup
- Localizing Plugin Toolbars
- Lofting Surfaces that Maintain Tangency
- Making Plugins That Expire
- Modifying Advanced Display Settings
- Moving Curve and Surface Grips
- Moving Mesh Vertices
- Object Properties Page Icons
- Picking Objects without CRhinoGetObject
- Plugin Loading
- Plugin Search Order
- Project Curves onto Breps
- Projecting Points to Breps
- Retrieving Rhino Data from the Clipboard
- Running Rhino from the Command Line
- Setting Up a Cage Edit
- Shading Individual Objects
- Showing Objects Transforming Dynamically
- Supporting High DPI Displays
- Testing for Curves on Surfaces
- Toggling the Status Bar
- Tracking Camera Changes with Conduits
- Triangulating Polygons
- Unifying Mesh Normals
- Using ActiveX Controls
- Writing Code for 32- and 64-bit Compilers
- Creating a Rhino-dependent C++ DLL
- Creating a Skin
Rendering (RDK)
- RDK Automatic UI
- RDK Current Environment
- RDK Decals
- RDK Dithering
- RDK Document Contents
- RDK Ground Plane
- RDK Linear Workflow
- RDK Post Effect Classes
- RDK Render Content
- RDK Rendering
- RDK Safe Frame
- RDK Skylight
- RDK Sun
- RDK Tasks
- What is the RDK?
- Scripting Methods for RDK (Windows)
- Your First Renderer Plugin (Windows)
- Textures and Mappings
- Light Attenuation
- RDK Render Content Editors
Zoo
Troubleshooting
Grasshopper
Create custom Grasshopper components and plugins.
Essential Algorithms and Data Structures for Grasshopper
- Introduction
- Algorithms and Data
- Introduction to Data Structures
- Advanced Data Structures
- Download full PDF and GH examples
Python Scripting in Grasshopper
- Create Script Component
- First Script
- Script Inputs and Outputs
- Edit Script
- Run Scripts
- Debugging Scripts
- Using Packages
- Editor Features
- Grasshopper Scripting: Python
- Creating Global Sticky Variables
- Node in Code from Python
- Custom GhPython Baking Component
- Grasshopper data trees and Python
- GhPython Common Questions and Answers
C# Scripting in Grasshopper
Grasshopper Plugins
- What is a Grasshopper Component?
- Installing Tools (Windows, Mac)
- Your First Component (Windows, Mac)
- Developer samples on GitHub
- Developer discussions on Discourse
- Distributing a Grasshopper Plug-In with the Package Manager
Plugin Fundamentals
- Simple Component
- Simple Mathematics Component
- Simple Geometry Component
- Simple Data Types
- Simple Parameters
In Depth
Advanced
- List Components
- Extending the GUI
- Task Capable Components
- Custom Attributes
- Code-Driven File IO
- Custom Component Options
- Components with a variable number of parameters
RhinoScript
RhinoScript is a scripting tool based on Microsoft’s VBScript language. With RhinoScript, you can quickly add functionality to Rhino for Windows, or automate repetitive tasks.
Overview
RhinoScript 101
Introduction
Where to find help
1. What’s it all about?
2. RhinoScript Essentials
3. Script Anatomy
4. Operators and Functions
5. Conditional Execution
6. Arrays
7. Geometry
Download the RhinoScript 101 Primer as a single PDF
Fundamentals
- VBScript Statements
- VBScript Procedures
- VBScript Variable Hoisting
- VBScript Variables
- VBScript Data Types
- VBScript Conditionals
- VBScript Logic
- VBScript Looping
- VBScript Passing Parameters
- VBScript Constants
- VBScript Operators
- VBScript Code Conventions
- VBScript Dictionaries
- VBScript Err Objects
- VBScript Err Objects
- VBScript String Literals
Intermediate
- Array Dimensions & Upper Bounds
- ByRef vs ByVal
- Calculating Permutations
- Comparing Arrays
- Converting GUIDs to Strings
- Creating GUIDs
- Disposing of Variables
- Finding Duplicate Strings
- Finding Perfect Squares
- Generating Random Numbers
- Including Scripts
- Lengths of Curves
- Modifying Object Colors
- Multidimensional Arrays
- Nothing vs Empty vs Null
- Optional Arguments
- Parentheses Error
- Parsing Text Files
- Reversing Arrays
- Selecting Curves by Type
- Using .NET Classes
Advanced
- Accessing Databases
- Adding Curvature Circles
- Archimedean Spirals
- Array Utilities
- Cancelling Scripts
- Closest Axis Point
- Converting Text to Geometry
- Converting to Grayscale
- Copying to Excel
- Curve Osculating Planes
- Disconnected Recordset Sorting
- Distance on a Curve from a Point
- Efficient Script Loading
- Error Handling
- Fibonacci Numbers
- Getting & Setting Locale
- Hot & Cold Colors
- Importing Points from Text Files
- Isometric Views
- Linear Regression
- Offsetting Meshes
- Padding Digits
- Persistent Settings
- Quadratic Solver
- Quick Sort Key Value Pairs
- Read & Write UTF-8 Files
- Reading Excel Files
- Replacing Points with Blocks
- Rounding Numbers
- Saving File Summary Info
- Script Demand Loading
- Shortest Line between two Lines
- Skipping current iteration in a For loop
- Sorting VBS Arrays with .NET
- Testing for Empty Arrays
- Trimming Curves
- Uncommon Numeric Conversions
- VBScript RegExp Objects
- VBScript RegExp Objects
Troubleshooting
Other Resources
- Pascal Golay’s scripted utilities for Rhino
- RhinoScript Samples on GitHub
- RhinoScript Dash Docset
- RhinoScript Help File On-Line
Compute
Getting Started
- Compute: Features
- Running and Debugging Compute Locally
- Calling Compute with Python
- Calling Compute with JavaScript
- Calling Compute with .NET
- Extending Compute with Custom Endpoints
Production Deployment
- Licensing & Billing
- How to create a virtual machine (VM) on Azure
- How to create a virtual machine (VM) on Amazon Web Service
- Deployment to Production Servers
- Configure Compute to use HTTPS
Hops
Developer Services
Localization
Our regional office in Europe provides a translation and localization service for third-party developers and anyone else interested in translating their products to French, German, Italian, Spanish, etc. Details…
Marketing Support
If you have developed a Rhino add-on that you would like to make available to other Rhino users, food4Rhino is the place to post the details about your plug-ins for Rhino and Grasshopper. Food4Rhino is the Plug-in Community Service by McNeel. Users can find the newest Rhino Plug-ins, Grasshopper Add-ons, Materials, Textures and Backgrounds, Scripts and much more. It is free. See the frequently asked questions…