The Rhino 4.0 Software Development Kit (SDK) provides the tools to develop native C++ plug-ins for Rhino 4.0.
(Rhino 3.0 C++ Plug-In development pages can be found here )
The change to Microsoft Visual C++ 2005 requires existing plug-ins to be ported to Rhino 4.0, not just recompiled. Fortunately, the basic structure of a Rhino plug-in has not changed. Most Rhino 3.0 plug-ins will port to Rhino 4.0 with very little effort.
Microsoft Visual Studio 2005 (Professional or Standard Edition - NOT Express Edition)
Migrate your C++ plug-ins from Rhino 3.0 to 4.0
Post questions or read other people's questions/answers on the plug-ins newsgroup
| How To: Run a Rhino Command from a Plug-in Command | Discusses the proper techniques to use when running Rhino command from within the context of a plug-in command. |
| Info: Finding and fixing memory leaks | How to find and fix memory leaks in Rhino 4.0 plug-ins |
| Adding command line options | Demonstrates how to add a different type of command line options to a custom command. |
| Splitting a Curve into Multiple Curve Segments | Demonstrates how to split a curve into multiple curve segments using the Rhino SDK. |
| Creating Sublayers | Demonstrates how to create sublayers using the Rhino SDK. |
| Replacing a Hatch Object's Pattern | Demonstrates how to replace a Hatch Object's pattern using the Rhino SDK. |
| Loading Plug-ins at Startup | Discusses how to configure plug-ins to load at startup. |
| How To: Display MFC Dialogs | How to display both an MFC modal dialog and an MFC modeless dialog from a Rhino plug-in. |
| Extracting Isoparametric Curves from Surfaces | Demonstrates how to extract isoparametric curves from surfaces using the Rhino SDK. |
| Crash Dump Analysis | Discusses how to analyze crash dump files in Visual Studio. |
| How To: Iterate through Rhino's Geometry Table. | Demonstrates how to use the CRhinoObjectIterator class to iterate through the document. |
| How To: Pre-Pick and Post-Pick Objects | Demonstrates how to both pre-pick and post-pick objects using a single CRhinoGetObject object. |
| How To: Pick Point Objects | Demonstrates how to use CRhinoGetObject to pick point objects. |
| How To: Create a Custom CRhinoGetObject Class | Demonstrates how to derive a class from CRhinoGetObject to handle special case object picking. |
| Adding Plug-in RhinoScript to Monkey | Demonstrates how to add your plug-in RhinoScript support to Monkey editor tree. |
| Reading/Writing plug-in user data to a Rhino .3dm file | Demonstrates how to save a restore document data |
| How To: Dynamically Draw Geometry when Picking Points | Demonstrates how to derive a new class from CRhinoGetPoint to dynamically draw geometry during a point picking operation. |
| How To: Determine Rhino's Language Setting | How to determine Rhino's current language setting when developing localized plug-ins. |
| How To: Dynamically Drawing a Polyline | Demonstrates how to derive a new class from CRhinoGetPoint to dynamically draw a polyline. |
| Info: What is a Rhino Plug-in? | Overview of Rhino plug-ins and how to get started in plug-in development. |
| How To: Visual Studio IntelliSense | Discuss how to enable Visual Studio's IntelliSense feature with the Rhino SDK. |
| How To: Display a Toolbar in a Workspace File | Demonstrates how to display a toolbar in a toolbar collection, or workspace, file. |
| Add a Custom Menu to Rhino's Menu | Demonstrates how to add a custom menu to Rhino's menu using the Rhino SDK. |
| Using CRhinoGetFileDialog to Preview Bitmaps | Demonstrates how to use the CRhinoGetFileDialog class to preview bitmap images. |
| How To: Add a Brep Box Rhino | Demonstrates how to add a Brep Box from a Rhino plug-in. |
| Project Curves onto Breps | Demonstrates how to project a curve onto a brep using the Rhino SDK. |
| How To: Mesh Objects using RhinoMeshObjects | Demonstrates how to mesh surface and polysurface objects using the RhinoMeshObjects SDK function. |
| Mesh Boolean Difference | Demonstrates how to use the RhinoMeshBooleanDifference SDK function. |
| Info: Modeless Dialog Box in Plug-In Does Not Process TAB Key | Information on how to make the TAB key work from modeless dialog boxes. |
| Plug-in Search Order | A brief discussion on how Rhino loads plug-ins and their dependencies. |
| Info: Plug-in Loading | A brief discussion on how Rhino loads plug-ins. |
| Transform Screen Coordinates to World Coordinates | Demonstrates how to transform Screen coordinates to world coordinates using Rhino 4 SDK. |
| Orienting Objects on a Surface | Demonstrates how to orient objects on a surface using Rhino 4 SDK. |
| Info: Creating Your First Plug-in | Overview of creating plug-ins with the Rhino SDK's plug-in wizard. |
| Show or Hide Rhino's Status Bar | Demonstrates how to show or hide Rhino's status bar using the Rhino SDK. |
| Calculating the Volumes of Mesh Objects | Demonstrates how to calculating the volumes of mesh objects using Rhino 4.0 SDK. |
| Detecting Custom Texture Mapping | Demonstrates how detect if an object uses a custom texture map using the Rhino SDK. |
| Creating a Leader | Demonstrates how to an annotation leader using the Rhino 4 SDK. |
| Intersecting Line Curves | Demonstrates how to intersect line curves using the Rhino SDK. |
| Calculating Curve Intersections | Demonstrates how to calculate the intersection of two curves. |
| Adding RhinoScript support to Rhino Plug-ins | Demonstrates how to add RhinoScript support to C++ plug-ins. |
| Determining the Normal Direction of a Brep Face | Discusses how to determine the normal direction of a brep face using the Rhino SDK. |
| Determine the Maximum Z Coordinate Value of a Surface | Demonstrates how determine the maximum Z coordinate of a surface using the Rhino SDK. |
| Create a Bounding Polyline of a Mesh Object | Demonstrates how to create a bounding polyline of a mesh object using the Rhino SDK. |
| Dynamically Drawing Text Strings | Demonstrates how to dynamically draw text strings using the Rhino SDK. |
| Adding Curve Objects | Discusses how to add curve objects to Rhino using the Rhino 4.0 SDK. |
| Creating Blocks | Demonstrates how to create an instance definition using the Rhino 4.0 SDK. |
| Changing the Display Precision | Demonstrates how to change the unit's display precision of the current document using the Rhino SDK. |
| Determine the Deviation between two Curves | Demonstrates how to determine the deviation between two curves using the RhinoGetOverlapDistance() SDK function. |
| Adjusting Clipping Planes from a Conduit | How to adjust Rhino's near and far clipping planes from CRhinoDisplayConduit object. |
| Calculating the Volume Centroid of Solid Objects | Demonstrates how to calculating the volume centroid of closed surface and polysurface objects using Rhino 4 SDK. |
| Calculate the angle between two vectors | Demonstrates how to calculate the angle between two 3-D vectors using the Rhino SDK. |
| Adding Background Bitmaps to Viewports | Demonstrates how to add a background bitmap to a viewport using the SDK function. |
| Calculating the Volumes of Solid Objects | Demonstrates how to calculating the volumes of closed surface, polysurface, and mesh objects using Rhino 4.0 SDK. |
| Command Prompt Window Moves when Setting Language | Demonstrates how to prevent the command prompt from moving when setting application settings. |
| Window Selecting Objects | Demonstrates how object selection routine using the Rhino SDK. |
| Enabling Orthogonal Mode | Demonstrates how enable and disable ortho mode using the Rhino SDK. |
| Adding Arrowheads to Curves | Discusses how to add arrowheads to curve objects using the Rhino SDK. |
| How To: Sweeping Surfaces using RhinoSweep1 | Demonstrates how perform a one-rail sweep using the RhinoSweep1 SDK function. |
| Computing Radius of Curvature | How to compute the radius of curvature of a curve object. |
| OpenNURBS Brep Data Structure | Illustrates OpenNURBS B-Rep Data Structure. |
| Comparing Planar Surfaces and Planes | Demonstrates how to see if a planar surface lies in a specific plane. |
| Info: Defining New Plug-in Commands | How to add new command classes to Rhino plug-ins. |
| Triangulating Polygons | Demonstrates how to triangulate polygons using the Rhino SDK. |
| Handling Enter and Escape from Modal Dialogs | Preventing modal dialogs from closing when the Enter or Escape key is pressed. |
| Modifying Advanced Display Settings | Demonstrates how to modify advanced display settings using the Rhino SDK. |
| Picking Text Dots with CRhinoGetObject | Demonstrates how to interactively select Text Dot objects with CRhinoGetObject. |
| Dynamically Inserting Blocks | Demonstrates how to insert a block instance at a user specified location using the Rhino 4.0 SDK. |
| How To: Get an Object's UUID | Demonstrates how to get an object's UUID using the Rhino SDK. |
| Lofting Surfaces that Maintain Tangency | Demonstrates how to loft surfaces that maintain tangency with adjacent surfaces using the RhinoSdkLoftSurface SDK function. |
| Info: Registering Plug-ins | Step-by-step instructions for registering your plug-in. |
| Shading Individual Objects | Demonstrates how to shade individual objects using the Rhino SDK. |
| Info: Loading Wizard-Generated Plug-ins | Information on what version of Rhino to use to test your wizard-generated plug-ins. |
| Rotate Objects Around Center | Demonstrates how rotate objects around the center point of their bounding box using the Rhino SDK. |
| How To: Add a Mesh Object to Rhino | Demonstrates how to add a simple mesh object to Rhino. |
| Split a Brep | Demonstrates how split a brep with another brep using the Rhino SDK. |
| Canceling Long Processes with the ESC Key | Demonstrates how to cancel a long process by detecting the ESC key using the Rhino SDK. |
| Adding User Strings to Objects | Demonstrates how to add user strings to objects. |
| Info: User Data Options in Rhino 4.0 | Overview of user data options in Rhino 4.0 |
| How To: Add a Linear Dimension to Rhino | Demonstrates how to add a linear dimension object to Rhino. |
| How To: Select Objects | How to interactively select objects from a Rhino plug-in. |
| How To: Loft Surfaces using RhinoSdkLoftSurface | Demonstrates how to loft surfaces using the RhinoSdkLoftSurface SDK function. |
| Info: Rhino 4.0 plug-in user data | How to use user data in Rhino 4.0 plug-ins |
| Info: Attaching User Data to Brep Components | Demonstrates how to attach object user data to components of a Brep. |
| Info: Rhino 4.0 Plug-ins & Visual C++ 2005 Service Pack 1 | Information on using Visual C++ 2005 Service Pack 1 to build Rhino plug-ins. |
| Info: Rhino 4.0 SDK: Textures and Mappings | How to set texture coordinates and texture mappings. |
| Displaying Toolbars in Rhino 4.0 | Demonstrates how to open a toolbar collection and display a toolbar in Rhino 4.0. |
| How To: Create Contour Curves | Demonstrates how to create contour curves through surfaces, breps, and meshes using the MakeRhinoContours() SDK function. |
| Retrieving Rhino Data from the Clipboard | How to access Rhino data from the Windows Clipboard. |
| Info: Rhino 4.0 saving plug-in user data in V3 files. | How to get V4 to save your plug-in user data in V3 files. |
| How To: Modify an Object's Color | Discuss how to modify an object's color with the Rhino SDK. |
| How To: Add a Custom Menu to Rhino | How to add a custom popup menu to Rhino's main menu from a Rhino plug-in. |
| How To: Select All Objects on a Layer. | Demonstrates how to select all of the objects on a specified layer. |
| How To: Modify the Weight of a Grip Object | Demonstrates how to modify the weight of a grip object using the Rhino 4.0 SDK. |
| How To: Synchronize a Layer's Rendering Color | Demonstrates how to synchronize the basic material color of a layer with the layer's color. |
| How To: Synchronize an Object's Rendering Color | Demonstrates how to synchronize the basic material color of an object with the object's display color. |
| How To: Dump Debug Information to a Log File | Discusses the use of the ON_TextLog class for debugging plug-ins. |
| Transforming Brep Objects | Demonstrates how to transform brep, or boundary representation, objects using the Rhino SDK. |
| How To: Retrieve the Unit System of the Active Document | Demonstrates how to determine the current unit system of the current document using the Rhino SDK. |
| How To: Set a View's Construction Plane | Demonstrates how to set a view's construction plane. |
| How To: Show All Hidden Objects | Demonstrates how to iterate throught the geometry table an unhide hidden objects. |
| How To: Get and Set the Active View | Demonstrates how to get and set the active view using the Rhino SDK. |
| How To: Replace Rhino's Color Picking Dialog | Demonstrates how to replace Rhino's color picking dialog using the Rhino 4.0 SDK. |
| How To: Reparameterize a Curve | Demonstrates how to reparameterize a curve objeect. |
| How To: Rename a Layer | Discusses how to rename a layer using the Rhino SDK. |
| How To: Create a Plane Surface | Demonstrates how to create a plane surface using the Rhino SDK. |
| How To: Modify an Object's Name | Demonstrates how to modify an object's user-defined name. |
| How To: Determine an Object's Layer Name | Demonstrates how to determine a selected object's layer name using the Rhino SDK. |
| How To: Maximize a View | Demonstrates how to maximize a view using the Rhino SDK. |
| How To: Interactively Pick an Angle | Demonstrates how to use the CRhinoGetAngle class to pick an angle. |
| How To: Extend a Surface | Demonstrates how to use RhinoExtendSurface() to extend a surface object. |
| How To: Extend a Curve Object | Demonstrates how to extend a curve by a line, arc or smooth extension until it intersects a collection of objects. |
| How To: Create a Surface from Edge Curves | Demonstrates how to create a surface object from four edge curves. |
| How To: Copy a CRhinoObject Object | Demonstrates how to make a copy of a CRhinoObject-derived object. |
| Duplicate the Borders of Surfaces | Demonstrates how to duplicate the borders of surfaces and polysurfaces. |
| How To: Divide a Curve by Segments | Demonstrates how to divide a curve object by a specified number of segments. |
| How To: Divide a Curve by Length | Demonstrates how to divide a curve object by a specified length. |
| Supporting Custom Undo Events in Rhino 4.0 | How to support custom undo events in Rhino 4.0 using the Rhino SDK. |
| How To: Find the Parameter of a Curve at a Point | Demonstrates how to find the parameter of a curve at a given 3D point. |
| Info: Using the sizeof operator with TCHAR and wchar_t | Discusses the sizeof operator and UNICODE strings. |
| How To: Convert an Arc curve to a NURBS curve | Demonstrates how to convert an ON_ArcCurve object to an ON_NurbsCurve object. |
| How To: Clear Rhino's Undo and Redo Lists | Demonstrates how to clear Rhino's Undo and Redo lists. |
| How To: Boolean Difference | How to perform a Boolean Difference using the Rhino 4.0 SDK |
| How To: Add a Truncated Cone to Rhino | Demonstrates how to create a truncated cone ON_BrepRevSurface and add it to Rhino. |
| How To: Add a Torus to Rhino | Demonstrates how to create a torus using ON_BrepTorus and add it to Rhino. |
| How To: Add Objects to a Group | Demonstrates how to add selected objects to an object group. |
| How To: Add a Line Curve Object | Demonstrates how to add a line curve to Rhino using the Rhino SDK. |
| How To: Add a New Layer | Demonstrates how to add a new layer to Rhino. |
| How To: Add a Cylinder to Rhino | Demonstrates how to create a cylinder using ON_BrepCylinder and add it to Rhino. |
| How To: Move Objects to the Current Layer | Discusses how to iterate through the Rhino geometry table and modify the layer of selected objects. |
| How To: Move a Construction Plane | Demonstrates how to move the origin of a construction plane. |
| How To: Test if an Object is a Circle | Demonstrates how to test if an object looks like a circle. |
| CreatingInstallationIndependentProjects | How to set up DevStudio and Rhino projects to be independent of user SDK installation choices. |
| How To: Create a NURBS Circle | Demonstrates how to use ON_NurbsCurve to create a circle. |
| How To: Set a CPlane to a View | Demonstrates how to set the construction plane in the active viewport parallel to the view. |
| How To: Modify a Light's Color | How to modify the diffuse color of an exising CRhinoLight object. |
| How To: Insert a Block | Demonstrates how to insert a block instance at a user specified location. |
| How To: Add Text to Rhino | Demonstrates how to use ON_TextEntity2 to add text to Rhino. |
| How To: Add a Spherical Surface to Rhino | Demonstrates how to create a sphere using ON_RevSurface and add it to Rhino. |
| How To: Pull a Curve to a Surface | Demonstrates how to use ON_Surface::Pullback() to pull a curve object to a surface object. |
| Showing Objects Transforming Dynamically | Demonstrates how to dynamically draw transforming objects. |
AutomateRhino - demonstrates how to automate Rhino from an external MFC application.
FalseColorExample - demonstrates how to add custom false color analysis modes.
GridListCtrlExample - demonstrates how to use the CRhinoUiGridListCtrl control.
Hippo - demonstrates the Rhino Application Platform.
HistoryExample - demonstrates how to add history to a command.
Marker - demonstrates how to derive a custom object from CRhinoPointObject.
Modeless Dialog Sample - demonstrates a modeless dialog box that allows the user to pick points.
RhinoDockBar - create a docking dialog (DockBar) in Rhino.
SecondLife - Demonstrates how to create Second Life Sculpted Prims
TestAttributeUserData - demonstrates adding and retrieving custom user data to object attributes.
TestBlockView - preview block instance definitions in an MFC dialog.
TestCustomGrips - add custom grips to Rhino or Rhino-like objects.
TestDecorate - demonstrates how to draw a text decoration in the active viewport using a drawing conduit.
TestDigitizer - skeleton code for a plug-in that supports a 3-D digitizing device.
TestDocUserText - demonstrates how to implement a document-based SetUserText/GetUserText feature.
TestDynamicPreview - demonstrates using CRhinoDisplayConduit to preview geometry from an MFC dialog box.
TestImportPoints - demonstrates importing points from a text file from a file import plug-in.
TestMenu - add a popup menu to Rhino's menu bar.
TestOptionsListCtrl - demonstrates how to use the CRhinoUiOptionsListCtrl list control.
TestObjectPropertiesPage - add a property page to Rhino's object properties dialog.
TestRhinoOptions - added property pages to Rhino's Options dialog.
TestToolbars - display a toolbar from a toolbar collection.
UVMesh - make a uniform quad mesh from an untrimmed surface.