I’m trying to understand how the Analyze --> Angle command works to measure the angle between two objects.

How does the command determine whether to return the acute or obtuse angle between objects? I’ve noticed that if the angle is close to 90 deg, the returned value may be the acute angle (x) that is not modeled (ex. the surfaces are obtuse to one another). The correct angle as it sits in space is 180-x.

In the below image the object has a non-orthogonal normal for one surface, and an orthogonal normal for the other. Also, the top edges are orthogonal.

It makes sense why the TwoObjects option produces a different result (54.19) than the same command snapping lines (53.78) at the top of each surface. But I experimented a bit by slicing each surface with a plane perpendicular (extruded along normal) to the large surface. The resulting intersecting lines produce an angle of 54.05. My question is, why wouldn’t this have the same result as the TwoObjects option?

As a disclaimer, these results are well within our fabrication tolerances, and the angle measuring process in Rhino has worked out quite well for us in the past. But since we’re folding metal quite often, we come across these little discrepancies that I’ve become curious about.

Hi Nick - I don’t know how you are getting the lines on the surfaces, but I think the way to check is to measure the angle between two normal lines on the surfaces - if the surfaces are planar, then the angle should be what you get from querying the planes. ’

If you make a line on one plane that is perp to the common edge of the planes, and Pull that to the other plane (or extrude normal and Intersect) then you should also get the same number from Angle… If the line is not perpendicular to the common edge, then you would not get the same answer as from querying the planes.

Does that make sense with what you see?

Kind of interesting to see what happens with non-perp lines. Try making a line that is not perpendicular to the common edge, on one surface, then repeatedly Pull the the line, then the result of the pull, then the result of that Pull, back and forth between the surfaces - the result is a fan shaped series of lines that all have their outer end points on a line in each surface that is perp to the common edge , and these two lines are at the angle between the planes.

The red line is the starting line, the black lines are 30 degrees apart, like the planes.

Thanks for the note Pascal. The lines normal to each surface gives the correct angle, indeed (which makes total sense). I found the intersecting lines shown in the image by intersecting both surfaces using a single plane normal to only one of the surfaces, thereby making a mistake.

Also, while I’m here … do you ever find that this command will not return the angle value in the command line, in some cases? For example, you run the command, go with the TwoObject option, click your objects, but nothing is returned?

I’ve been bypassing it with a simple Grasshopper method, but thought this might be a bug perhaps?

Hi Nick - my guess is that there is an extra blank line rolling in under the output and the output is scrolled up- if you look in the command history, or pull the command area down a bit deeper, it is probably there.

I’ve tried both of those options, but an angle measure is not found in the command history. It’s a strange error, and has been duplicated on three different machines with the same file, as well as other files in the past.

The below is a direct copy-paste from the command history: (seems to repeat itself)

Command: Angle
Start of first line ( TwoObjects ): TwoObjects
Select two planar surfaces or lines to measure the angle between them:
Select two planar surfaces or lines to measure the angle between them:
Command: CommandHistory