Rhino 8 Feature: Constraints

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

Totally new to this:

Gave this a 5 minute look-see, here is some feedback, although I’m sure I’m missing a ton of stuff:

-my color is super faint when I highlight any constraint to view it, I’d like it to be a bit more prominent

  • I’m not sure, but I’m having difficulty constraining points (especially point on line) and it will not provide the prompt to draw out the line if I highlight the points prior to the command
  • what tells me the sketch is fully defined?
  • am I missing how to link up the dimensions to this sketch? would love to see my dimensions on my sketch and be able to toggle on and off, and of course double click the dimension type to input new value (could this be another icon on constraints panel?) or am I just completely missing it
  • I’d love to see something having to do with the center of your sketch, or possibly to define the center - or just guide lines that are not actually geometry and do not get in the way of the constraint solver
  • i know my sketch is fully defined but I can move around the points… and then weird things happen…
  • i tried to extrude and play with the parameters, but nothing updates…
    -just itching to see this move into powerful drawing update…

Yesterday, I was working (testing) Fusion 360 to create a portion of an urban design parametrically. This led me to a couple of pain points which I hope you could address for Rhino.

For urban design sketches, I would like to differentiate between roads, pavement and building outlines. Would it be possible to use layers within the Sketches just like you would with non-constraint based drafting? That way, I could change linestyles/ colour to help me as guide through the process. Perhaps there could be a button in the Sketch panel that you can check to display the sketch by layer properties or by constraint properties.
Or there needs to be another solution to display whether a line is constrained, unconstrained and whether the sketch is fully constrained or not. This can be difficult if I could change all line properties, so maybe the I should only be able to affect the linetype/ colour and not lineweight, for instance. I think that may work considering the current constraint glow colour? (BTW this looks neat already :+1:).

It may need a predetermined colour scheme for custom layer colours? :thinking:

What I would also love to see is that if I offset a curve in a sketch, that it would automatically constrain the offset line. Fusion doesn’t allow offsetting ofset lines, so if Rhino could, it would be a big workflow improvement.

E: By the way, if I have disabled dragging objects that I have not selected (Rhino options > Mouse > Click and drag > Drag selected objects only), would I be able to still drag sketch curves that I have not selected? That’s the way I would expect the constraints to work, because I may need to test how the sketch flexes and for that I don’t want to select the items first (unlike when I am in the regular viewport doing modeling work).

@Joshua_Kennedy have you seen this:


I’ve made a couple of intro videos recently. The point on line and point along line constraint are covered here.

This is logged as RH-68550

Hopefully this video makes things clearer.

I’ll update the issue about over and under constrained sketches with this.

You’ll wanna use history for that. I also made a video about it.


You mean assigning constraints to layers in a sketch or the objects within a sketch?

I’ll update RH-68550 with this.

This is a bit tricky with the way history works on the offset command. We have talked about this specific issue. I’m trying to find an elegant reasonable solution.

I don’t think having the selection and dragging behave different for curves only if they’re constrained makes sense. That interaction of to see the sketch flex is also probably better done with grips. I have a video on it here.

1 Like

Yep, it’s an interesting project. Is there something in it you think we should take note of?

Here’s another example model with history that a few of you might find interesting. It takes advantage of the history enabled boolean commands available in the WIP.


I have a video explainer here. I’ve also attached the file for experimenting.
Constraints_History_Booleans.3dm (275.0 KB)


Yes in short: ease of use…

What I like a lot about the workflow is that it seems very fast and user friendly to setup and see relations. The following might sound a bit harsh, but I have to mention it: Right now in the WIP setting up constraints is so convoluted that if it stays like this, I will probably never use it because it takes too much time to set up, and I’m quite sure I will not be the only one.

For example what I want to be able to do is:
Draw a rectangle (adds vertical and horizontal constraints automatically), dimension it, fillet the corners (while the dimensions remain in tact), (Fillets will add tangent constraints automatically)
Select all fillets, make them equal in one go.
Add a dimension to the fillet. Add a hole concentric to one or more of the just created fillets (snaps to center and adds concentric constraint automatically)


So I am thinking that what you refer to as “auto points” could be enabled for the entire sketch, so I can move any of these points just by dragging the first time around. In the long run, selecting each element first adds up by a lot. Fusion 360 also let’s you drag sketch elements/ points from the get go.

And I do want to be able to drag any of the curves inside the sketch. That’s also good to establish a design. I think a different behaviour for sketch lines for the dragging options makes sense, since I want to move the geometry of the sketch and if it’s constrained, it won’t move in an unpredictable/ undesirable manner (unlike, for instance a Brep, which causes discrepancies between the building outline sketch and the building volume itself).

So I would still want there to be an option to drag sketch items.

I personally find the inability to select points in a polyline by clicking on them (instead of on the polyline and then the point) a nuisance in Rhino. For sketches, this would be even more of a nuisance to me.

Apart from this dragging option, the video you posted looks neat, I like the red preview as well :+1:

So within a sketch, I want to be able to assign the line geometry to a layer. So let’s say I have a sketch with a small and large rectangle, I would want to assign the small rectangle to the “Small” layer and the large rectangle to the “Large” layer. That way, I can hide a portion of the sketch and project/ include those sketch elements that I need in my next sketch.

For clarity, what could happen is that every sketch becomes a layer of its own, with the parent layer corresponding to the sketch name.
So, with the aforementioned example, you’d get the following layer structure:

Sketch 01


Sketch 02

-Large (< this is the projected geometry of Sketch 01)
-Layer 1
-Layer 2, etc.

Basically, this thus already creates something like a layer tree.
Whether a layer is hidden or not should not influence the parametric solver. What it does is it helps to further clarify the sketch visually, because you can filter what you want to see.

1 Like

How would one transfer a more complex file than this over to a co-worker (or future me a few months later)? There’s now way to visualise which boolean occurs before or after another. I would definitely love to have a history enabled timeline with all the history enabled commands listed. A panel to visualise history would also be one of my top requests for Rhino 8, just below the sketch constraints you are working on now.

Constraint icons
I would definitely like to see constraint icons to help me visualise how the sketch is going to behave. That’s one of the things I like from Fusion 360 and Blender’s CAD Sketcher addon. Freecad also has these icons.

They have another benefit: if offsets automatically add constraints, I sometimes remove the offset constraint so I can create a (poly-) line that already constrains its constituent lines with parallel constraints to the original sketch. Since offsets retain the length of the original line, deleting the offset constraint in Fusion allows me to change the length of the line while retaining all the other relationships.


Really cool Joshua - The college kids will love it.

Just be sure it is easily disabled and hidden for us old-timers.

this news is amazing!
The only concern is about the UI: would be possible to get the History also when DeleteInput=YES?

In a more complex example, with dozen of solids keep all the source solids will make a big mess.
It could be better to have an EDIT function like in the FilletEdge or BlendSrf that embed the original geometries and show them only during the editing.

I understand what you’re after, unfortunately that’s a whole other can of worms. I am experimenting with constraints and how it interacts with history. I’m still in the early phases of this though and have no idea where it will end up.

This is on the way hopefully in the next WIP. There’s still quite a few little things to sort out with them so they won’t be perfect on first appearance, but I’m working to get them in there.


That’s good to hear!
Will those be the final icons? To be honest, the simpler they are, the better. I find these hard to distinguish at first glance due to them being inside a box. If you got rid of the box and used only the icon, the icons can be scaled up and be more discernible from their shape alone. The box makes them all look alike. I prefer to have bold iconography that is visually distinguishable. So in most of these icons, you would only need to show one vertex and the rest could be with lines/ curves.
Could you take a look at FreeCAD’s icons for reference? They are a bit further down on the page.
I think those are a good start (though the coincident constraint is a bit odd).
Fusion’s icons are graphically a bit more refined in comparison:
So they look nicer, but are a little bit less distinguishable, so they are displayed larger than the ones in FreeCAD as far as I can see.

Yes I understand and things like these take time. So it’s nice that you already made it work with history. I try to point out whatever I see, in the hopes to eventually be able to replace my Fusion 360 workflow with Rhino, so that’s the benchmark for me. :wink:
In that sense, ease of interaction is key.


Forgot to mention: another reason to use layers in constraints is that this will allow me to pass a specific layer through to Revit with Rhino.Inside, so I could constrain an architectural plan and use layers to differentiate between wall types.

If you should improve the UI Design panel please

I agree that the box make the icon less readable.
I’m using OnShape time to time and there the icons are freestanding but with a bolder style that makes them easly to read and understood.

One thing that should be done is to make the constraint icon pops (becoming visible) only for selected objects and use a color code to identify if a constraint belong between more geometries.