Rhino 8 Feature: Constraints

That would be a nice thing to have!

Even though I like this idea, the first thing that comes to my mind is how tricky and frustrating can be setting up e.g. Door family in Revit, which solves geometry based on some constraints. Sometimes a lot of constraints, and often not very intuitive, need to be made. Also, if something doesn’t work as expected there is no clear procedure to look at and debug (contrary to the geometry created by Grasshopper). But probably Revit is a poor example and other mechanical software does it way better.

Constraints are great because they offer a quick start and the ability to directly manipulate geometry in the viewport, especially when we have widgets.

What I would like to see is how we could merge the best things from different worlds.

In short:

  • Great viewport input widgets (and customizable panel input)
  • Solid, predictable, easy to debug Grasshopper definition (solver)
  • Some kind of wrapper to make it an independent object (VA GH Style, Smart Block – you name it)

I wonder if such Smart Object could consist of both: Constrains and Grasshopper. For solving 1st step would be constrained geometry manipulation, 2nd step is Grasshopper on top of it.

Another idea is if Grasshopper could create/populate constrained geometry.

@enric I’m jealous of these input widgets and would love to have them inside VA Objects.

Thanks Joshua for logging my requests!

So, this means there won’t be a command to remove selected items from a sketch that does not involve the cross button in the panel? If I were to select a bunch of curves in the viewport, would I be able to remove them from a sketch with the button (basically propagating viewport selection to the sketch entities in the panel) or not?

I am eager to test the constraints feature in the immediate future when the widgets are ready. What would happen if I were to open the file in Rhino 7? Will they just be unconstrained curves or should I expect there to be a loss of geometry (incompatibility)?

E: The video looks very promising!

Do any parametric modellers have forward and backward compatibility between versions?

If constraints are going to mess with compatibility between versions then that could be a problem.

No, I was just trying to let you know there is currently a solution. I opened RH-68561 to add a corresponding command.

I don’t anticipate this losing the geometry. As of right now if you save a constrained model from the WIP for Rhino 7 the geometry stays, but of course there are no constraints in Rhino 7.


Very exciting development! Are there any plans to extend this to include the concept of joints, e.g Hinges, in order to simulate moving mechnical assemblies?


RH-68553 is fixed in the latest WIP

1 Like

Thanks for this improvement!
Can’t wait for this.

Every week I lost a lot of time, energy and concentration because of redrawing everything when I need to change thickness of matérial or other things…

Also as a teacher, my stydent ask me about this “Where are the constraints please?”.

Not sure if anyone else experienced issues with constraints causing BSODs, I tried adding constraints to a segment of a polyline and Serengeti would get stuck with processing and eventually end up with a BSOD 0x00000133 (DPC Watchdog Violation). I checked all of my device drivers and checked for any updates but it seems to happen semi frequently (around 1/5 times).


So far I haven’t got to extensive testing of the constraints but some geometry can cause issues depending on complexity. Does the polyline have lots of vertices? If yes then it could be that trying to solve the constraints requires a lot of software/CPU resources that it will enventually get stuck and crash. If if crashes badly enough it can take down the system. I’ve seen similar behaviour in other software, though I’ve rarely been able to conclusively find out whether it was a bug acting up or just needing way more resources than available and subsequenly crash. It could be a combination.

I suggest contacting Rhino support with the file and a description of what you are doing and they could have a look if it might be a bug somewhere or something that they need to work on to make it (more) crash proof in such situations.

The constraints solver has a timeout if it cannot find a solution, but this still seems like a fairly serious problem. Do you notice any kinds of patterns with this or is it really random? It also might be helpful if you post your system info.

The polyline really simple since it was just a rectangle, I tried adding constraints to one segment and it lead to the BSOD. PC specs wise I’m running with a 7980xe for the CPU and 128gb of ram so running. It is a less common setup on the x299 platform so I’m not sure if that’s the potential source of the issue.

I was hoping to get your full SystemInfo from the SystemInfo command in Rhino. If you could paste the result that’d be great.


This does sound like a hardware issue though.

Hi Joshua,
“Solve space” has “SolveSpace - Technology” has a powerful solver. It is freeware and May be Mcneel can have a deal and integrate It’s solver.

1 Like

This is all fine, but what I’d really like to see is a (2D is ok) solver for mechanical assemblies.

I know you guys can do this (see 2D walking strandbeest model ex grasshopper).

I have a 2D solver (www.linkagesimulator.com) which is built by one person as a labour of love – its great, but it has an off-kilter and unique interface and input requirements that are not very helpful.

I also have the solvespace program (www.solvespace.com) which is rather powerful, but strangely arcane, and looks like a dos cad program from way back. Its library is available for licensing though…

Anyway, being able to solve these kind of mechanical assemblies in rhino itself would be a huge help to me.

For example, see these diagrammatic images of motorcycle / bicycle suspension layouts…



1 Like

Why do you think the SolveSpace solver is preferable?

The only thing I know about the SolveSpace solver is that it’s also being integrated in Blender with the addon called CAD Sketcher, but since this addon is still very much a WIP version, I personally can’t tell how well the solver handles more complex cases (e.g. curvature constraints or tangency constraints between splines and arcs). If @direnc thinks it is preferable, could you show a comparison between the current Constraints in the V8 WIP and in SolveSpace?

I do like the idea of using open source tech, because any features and bug patches added to the solver would mean that users from other platforms, such as Blender’s CAD Sketcher would also benefit.

RH-68002 is fixed in the latest WIP

It is light weight and open source software I thought It can be a good starting point (If possible) instead of building from scratch.

Apologies for the delayed response, I had a really busy last few days. Here’s the text from system info.

Rhino 7 SR18 2022-5-4 (Rhino 7, 7.18.22124.03001, Git hash:master @ b2a1120bcb32e1f6da66a421cd7162a18a9f0cd9)
License type: Educational, build 2022-05-04
License details: Cloud Zoo

Windows 10.0.19044 SR0.0 or greater (Physical RAM: 32Gb)

Computer platform: LAPTOP - Plugged in [97% battery remaining]

Hybrid graphics configuration.
Primary display: Intel(R) UHD Graphics (Intel) Memory: 1GB, Driver date: 1-22-2020 (M-D-Y).
> Integrated graphics device with 3 adapter port(s)
- Windows Main Display is laptop’s integrated screen or built-in port
Primary OpenGL: NVIDIA GeForce RTX 3090 (NVidia) Memory: 24GB, Driver date: 5-19-2022 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 512.95
> Integrated accelerated graphics device with 4 adapter port(s)
- Video pass-through to primary display device

Secondary graphics devices.
NVIDIA GeForce RTX 2070 Super with Max-Q Design (NVidia) Memory: 8GB, Driver date: 5-19-2022 (M-D-Y).
> Integrated accelerated graphics device with 4 adapter port(s)
- This device is not being used

Laptop is using the slower, less reliable integrated graphics device and probably needs a configuration change.

  • Any hardware configuration or cabling changes you make will require that you restart Rhino.

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)

Anti-alias mode: 4x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 5-19-2022
Driver Version:
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 24 GB

Rhino plugins that do not ship with Rhino
C:\Users\bob7d\AppData\Local\Programs\Enscape\Bin64\Enscape.Rhino7.Plugin.dll “Enscape.Rhino7.Plugin” 0.0.22094.1322
C:\Program Files\Chaos Group\V-Ray\V-Ray for Rhinoceros\V7\VRayForRhino.rhp “V-Ray for Rhino”
C:\Users\bob7d\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\Bullant\\bullant.rhp “bullant”
C:\Users\bob7d\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\ggRhinoIFC\\ggRhinoIFC.rhp “ggRhinoIFC”

Rhino plugins that ship with Rhino
C:\Program Files\Rhino 7\Plug-ins\Commands.rhp “Commands” 7.18.22124.3001
C:\Program Files\Rhino 7\Plug-ins\rdk.rhp “Renderer Development Kit”
C:\Program Files\Rhino 7\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 7.18.22124.3001
C:\Program Files\Rhino 7\Plug-ins\rdk_etoui.rhp “RDK_EtoUI” 7.18.22124.3001
C:\Program Files\Rhino 7\Plug-ins\rdk_ui.rhp “Renderer Development Kit UI”
C:\Program Files\Rhino 7\Plug-ins\NamedSnapshots.rhp “Snapshots”
C:\Program Files\Rhino 7\Plug-ins\RhinoCycles.rhp “RhinoCycles” 7.18.22124.3001
C:\Program Files\Rhino 7\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 7.18.22124.3001
C:\Program Files\Rhino 7\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”
C:\Program Files\Rhino 7\Plug-ins\Displacement.rhp “Displacement”
C:\Users\bob7d\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\PanelingTools\2021.3.2.446\PanelingTools.rhp “PanelingTools”

A ton of great notes in this list