Rhino 8 Feature: Constraints

Hi all,

The Rhino 8 WIP provides the ability to create constraints. Constraints are a set of rules such as the length of a line, or angle between two lines, that are added to geometry. These allow you to build complex relationships in your model that are maintained as geometry is being manipulated.

The constraints panel can be accessed from the panels menu or with the Constraints command. The currently implemented constraints are focused on 2D drawings and the following new commands are available:

  • Constraints
  • ConstraintSketch
  • ConstraintsSketchAddObjects
  • LengthConstraint
  • AngleConstraint
  • AnchorConstraint
  • EqualLengthConstraint
  • EqualAngleConstraint
  • TangentArcConstraint
  • CollinearConstraint
  • LengthRatioConstraint
  • ParallelConstraint
  • PerpendicularConstraint
  • OnLineConstraint
  • VerticalConstraint
  • HorizontalConstraint
  • CoincidentConstraint
  • PointOnLineConstraint

Here is a simple introductory video to help you navigate and get acquainted with the new tools.

A slightly more complex example with the file for following along

Example.3dm (32.8 KB)

And a few complex example models

Mechanical_Arm
Mechanical_Arm.3dm (50.8 KB)
Floor_Plan
Floor_Plan.3dm (51.3 KB)

While still in early development we’d love to hear your thoughts, feedback, and bug reports here.

40 Likes

Love the fact that this is being worked on but I agree with the 4 points brought up by @skysurfer to make this usable.

In addition to his 4th point, it would be nice if you could edit the dimension inside the viewport, without having to go back and forth between the side panel.

And I guess to make this something I’d perhaps use a lot would be if this would not only apply to 2D drawings but 3D drawings as well and have Commands like ExtrudeCrv linked to them with a way to change extrusion length etc. But perhaps that’s just me focusing a lot on how parametric modellers work so it’s perhaps a bit hard to see how else you could use this feature.

3 Likes

A little feedback after trying this out for a bit:

It is very convoluted right now to set up relationships through the side panel, and making sure you have the constraints selected, as otherwise you add a constraint and get an annoying extra step to select the sketch. IMO that last step should never be needed, since you select a curve entity and Rhino should know to which sketch it belongs.

It’s hard to keep track of which parts of the sketch has applied constraints to it, unless you click on the constraint in the panel.

If I set up a sketch (for example a polyline) and apply constraints, after exploding all constraints are gone.

In SW, some constraints get automatically added:
connections between end points of lines, vertical, horizontal. This saves a lot of time.

Instead of a length constraint, you drag out a dimension and edit the dimension directly, or add a dimension to a line, type the desired dimension and the length will update accordingly. This would be the preferred way for me.

After setting up even a relatively small sketch, I get a very long list of constraints and it will be hard finding back the one you need. Like mentioned in the other thread, I would want to select a sketch entity and see its constraints, not the other way around.

SW has very conveniently added two line types: construction lines and sketch lines. The construction lines can be very helpful in setting up colinear lines.

The equal length, parallel, horizontal, and vertical constraints should be able to be applied to more than 1 or 2 sketch entities at once.

In setting up constraints, Selecting vertical or horizontal sketch entities (or ones that are close to vertical or horizontal) should give a constraint pop-up that allow you to quickly assign these constraints. Display the constraints that are relevant to the selected entities.

There is currently no feedback whatsoever if the sketch is ‘fully defined’.

11 Likes

Interesting feature! A big surprise!

Quick question, without any testing: are there plans for an area constraint? Maybe volume, too?
It’s a common case when working on architectural floorplans that a certain area is given, and some shape should fit inside.
Thanks!

I would like to be able to set the dimensions straight in the viewport and also to see the constraint symbols in the viewport.

9 Likes

This is a good idea. I logged it as RH-67786

You’re right. I logged it under RH-67787

This is planned to be done with widgets. I’ll make a video after I iron out some of the rough spots that currently exist.

This has been worked on with RH-67663. I did not do the vertical or horizontal constraints but I can add those as well.

Would you expect the constraint manager, if visible, to select or highlight the constraints when the object is selected? Or how do you envision this?

I logged this as RH-67788.

7 Likes

This is awesome! I assume it’s implementing Kangaroo2 for the constraint solving?

Side note: It’s wildly humbling that Ivan Sutherland was doing interactive constraint solving in the early 1960’s:

The full video can be seen here. A fascinated historic overview (including a node/DAG-based system).

12 Likes

That is correct. Sutherlands sketch pad has come up in conversation several times. It is absolutely incredible.

2 Likes

tbh I don’t like the constraint manager all that much, as it becomes too crowded to be useful even when constraining relatively simple sketches. What I would want to see is, when clicking on a sketch entity, that all applied constraints are displayed next to the entity. For example a horizontal line would have the horizontal constraint icon near to it in the viewport once it is being selected, a arc that is connected to a line and is tangent at the connection, would show the tangent symbol near its connection. This way you can quickly check for each entity if it has all the constraints you want to apply.

6 Likes

I won’t make any promises about the future of the panel but I think the view icon is definitely doable. I logged it as RH-67791.

Compare these, and this is just a simple square: it took me minutes to set up the constraints. In SW I make a rectangle by centre, anchor is the origin (automatic) vertical and horizontal constraints are added automatically, all I needed to add is equal length and dimension:


image

5 Likes

Just an extra idea

I would go farther. I would display all these icons when the Rhino opens the model and I would give the Rhino users the option to turn all these icons off and on. The icons may be good enough if there are few constraints. If there are hundreds constraints, these icons will be on top of each other. It would be more practicable to show all constrained lines and curves with some kind of dynamic display (blinking or marching ants) and use the icons to show what kind of constraints were applied to particular line or curve. When you select the curve, the icons are displayed. (SolidWorks displays these icons.)

The SolidWorks icons are not necessary if the constraints are highlighted in the panel. In other words:

  1. All constrained curves look like marching ants.
  2. When the user selects one of these curves, the panel pops up.
  3. All constraints of the selected curve are highlighted in the panel.
1 Like

I like do draw using poly lines and angles and lengths when I am doing straight lines drawings, would be cool, since I am drawing using angles and lengths, to have an option to activate on the poly line command where it would automatically add the constrains while I am using the command.

Also, if the constrains with parameters could have something to tell appart from the auxiliary ones on the panel, like being bold or maybe italic or both. or even split the constrains into parametrized and auxiliary constrains.

that combined with the other ideas already posted here would make it a wonderful tool.

1 Like

As you point out, this would become a giant mess with any decent number of constraints. How do you show just the constraints that you are interested in?

I think this functionality needs to be incorporated in a new object type. Call it whatever makes sense, Mechanism, ConstrainedSketch, Doodle. Features could include:

  • Double click to edit it. The constraint icons appear in edit mode.
  • Similar behaviour to a block. Easy to duplicate, edit, explode, nest.
  • Icons are hidden at all other times.
  • Curves within it are selectable and useable by any command.
  • Parameters can be edited externally to the Mechanism.

Does this need (is it planned) to be restricted to curves?
Does this need (is it planned) to be restricted to 2D? I can see the scope of work exploding if 3D objects is desired.

2 Likes

If I understand you correctly, you want to highlight all lines and curves which have the same constraint, for example, length. Current implementation of the Constraints command highlights these objects when you select their constraints in the panel. For example, if you have three objects with length constraints, these constraints may be listed in the panel as length1, length2, and length3.

Not necessarily. I think the constrained sketch should be its own object type, such as these…

Point
Point cloud
Curve
Surface or sing-face brep
Polysurface or multi-face brep
Mesh
Light
Annotation
Instance of block reference
Text dot object
Grip object
Detail
Hatch
Morph control
Cage
Phantom
Clipping plane
Extrusion

Perhaps it can be incorporated into blocks, rather than a new object type.

I feel as though leaving it open in model space, without some sort of restricted use, will just be chaotic. For example, I can’t tell if a rectangle with edge length constraints is constrained or not just by looking at it, nor selecting it. It isn’t until I attempt to modify it that it becomes apparent that constraints are acting on it.

Creating a block from a constrained sketch deletes the constraints, external and internal to block editing.

3 Likes

You have not read my post.