Enhancement: Add "Real Time" Measurements to PointDeviation

Hm. No doubt I have opened a can of worms for myself… there must be all kinds of things to fix - the sideways line is in the cuve-curve (most likely - there is some fixing up to do for the case where the curves are not the same lengths ) or curves surface case?


Right, but this time, the built-in tool already exists, and you just schooled the McNeel developers using a simple python script, so I do hope you lit a fire under their butts so they’ll get moving updating their stuff to at least be comparable to yours. :wink:

Hello Pascal,

I tried your tool today! First of all I would like to say thank you for all the time and effort you put into this. Your tool works wonderfully, exactly like i hoped it would. Thank you very much!

I really like how the Min and Max hairs got an extra color!
I also tried different cases of “partial” measurements and it works just fine!

Also when the measurered objects are moved away from each so they have no overlap in normal direction, the measurement disappears and returns if overlap is given. Perfect!

The only strange behavior I found was this case. I selected the edge circled in blue, but the tool used a different edge:


Is there a reason for the angle between the hair lines? It might be a bug, maybe the initial point is measured or drawn to a point in the second set that is shifted one index up?!

Also it might be beneficial to keep the indicator always in front of other objects:


Possible refinements:

Regarding a partial measurement, it would be necessary to measure one curve/edge so several surfaces, as well as several curves/edges to one surface. For example when measuring a doorgap with several patches along the gap.

A solution for now might be running several instances of that tool at the same time. Would that be possible?

Also scalable hairs should be added, so the evenness of distance could be evaluated.
In this example the extrema are fine but the deviation is uneven, which would result uneven shadows and highlights:

The only downside I found is the behavior of some already exsisting curve manipulation tools. However this is no critisim of your tool, this is the given Rhino behavior and other Rhino tools do this too I think.

Using the end bulge tool, I noticed that the measurement only updates once the adjustments are made and the tool is closed. For further adjustments, you have to rerun the tool. This is really impractical.

Using the Curve CV-Movement tool, this woked better, but still the measurement is only updated AFTER the CV is moved. Meaning selecting the CV, moving the CV, letting go of the LMB, only then you get a new measurement.

The much more comfortable behavior would be that the measurement updates with the LMB still pressed.When you hit the desired value you just let go of the LMB and you are done. This is more precise and much quicker!

Also using the CV tool you break the G2 match, you probably even break G1 dragging the CV from the wrong direction. It might be solved by updating the current Curve continuity tool. This might need the least effort, as that tool already takes measurements, it just doesnt show them. The match would still get harmed, but it could be done within a tolerance. Anyway an update like this would also close the gap to the wonderful EdgeContiunity Tool:


Again thank you very much Pascal, for that wonderful tool and the all great work you do!

Hello - thanks for your testing & comments-

Right… I know… and as far as I know at the moment, I cannot do anything about that. It would be nice.

Is the surface joined? I have not tested that case at all - if not, please post or send me the surfaces/curves.

Yes, and I am thinking about how to deal with this… I think I know what is going on but I have not yet delved into it.

I’ll see about scaleable hairs… and yes Dots need to be in front…


Could this be changed in the End Buldge tool?

Maybe it needs to be impractical like that, so everybody could “feel” the necessity of a change like that, so that it gets changed out of sheer frustation in all of Rhinos tools for V8 or V9 . :crazy_face:

Lots of Rhino tools “collide” whith each other. I know from using ICEM that calling and using Analysis-Tools is always possible even with other commands running. Is there a reason Rhino handles it that way?

Joined meaning a polysurface? No it is just the edge of that corner fillet. I will try some more cases…

This bit should be working correctly now - plug-in and scripts updates above. thanks,

@Cadworx I fixed up, I think, the partial overlap case on the curve-curve checker. @eobet - the last couple of fixes might sort out the sideways line you were seeing - if not, please post an example.
Updated above.

Now, text and dots draw in front…



Quick testing on the same curve & surface:


So now, you can just hand over the code to the PointDeviation devs and have them translate it to C/C++ to replace their shoddy code with! :wink: :+1:

EDIT: Similar to this thread, I now did a Pull with Loose=Yes and got a way, way worse result. A result outside of my tolerance even. I guess it perhaps should be expected in this case, but I’m still so annoyed that Rhino never warns me when a tool made a result that’s out of tolerance! (But hey, I guess that’s one aspect where Rhino is very consistent…)

1 Like

Hello Pascal,

yes the hair-angle is gone, but the sideway lines are still visible.

Also all measurements are visible in the foreground. Great!

Actually everything is constantly in the foreground (which is probably a coincidence), however I like this very much.

Measurements are of the highest importance in the viewport. Is it possible to add this behavior to the Edge Continuity Analysis?

For scaleable hair an interpolated curve on the top would allow much better judgement, as the flow of the deviation is easier to read. Could this be added? Also The Edge Continuity tool should work the same, if possible.
Also I noticed that Edge Continuity seems to have an angle too?!

So as @eobet already said, could this tool be available for V7?

DistanceAnalysis in my opinion is an essential tool for high quality surfacing and precise Topology-Analysis, and it would tie many workflows toghether, like filleting for example.

Also this might be a good introduction to a more analysis-driven workflow which might happen for future versions of Rhino.

Best regards and many thanks for all the great work!


Can you please post a file what shows this? I am not sure I am looking at the right thing.


I’m not sure if I am allowed to share data at all, I might have to get a permission first.

However the surface was just a simple corner fillet as shown below, the main surfaces have some overcrowning. Maybe you can reproduce that.


OK, thanks, I’ll have a try.
BTW, for the scaling - I can’t see a good reason to go one way or the other - should the extensions shoot past the curve, or the surface side of the display? And for Curve-Curve, Curve 1, or Curve 2?


I think currently the direction is determined by what object is picked first.
The hairlines start from there.

But it is a good question regarding general behavior. Any deeper sorting logic would probably only be necessary if the Anaylsis uses several pairs simultaneously. I will check tomorrow how this is usually handled. For now I would go with first picked object.

Also the behavior should be the same for all deviation combs in all tools, regardles of the combination.

Curve-curve can go how ever we want, it will pretty much work automatically, but curve-surface works differently internally and it would be simpler (and I think, clearer) to decide on either the curve or the surface being skewered by the lines. If you have a preference, shout - right now, my test shoots the lines from the surface through the curve.


I assume Curve/Curve is identical to Curve/Edge.
And by Curve/Surface you mean “inside” the surface?

Then yes, hairlines from the surface through the curves sounds good for now.

1 Like

Hello Pascal,

regarding the different cases I think the Edge/Edge case should be added after all. It is covered by the Edge Continuity Analysis as it is a Continuity Condition, but it also has a Distance.

I can think of no good reason why a tool called “Distance Analysis” would not cover all cases that have a “Distance”, but randomly spares a single case.

For new users this might be another one of Rhinos random little inconsistencies, as one year from now nobody will remember why it was decided this way.

Also for Beginners the concept of “Distance” is a lot easier to understand than the concept of “Continuity”, I think.

Adding Edge/Edge would make the Distance Analysis a well rounded tool without generating any confusion.

In my current hack, the DrawCurveCurveDeviation should accept two surface edges.


@Cadworx, @eobet - updated above…

  • Added crude scaling to the curve-surface checker, curve-curve does not have it yet.
  • Options for scaling, text format and sample count at the initial prompt. With pre-selection, you do not get these options, currently but:
  • Added a new command DeviationDisplayOptions for when the thing is already running and you want to change the scaling, text format, or sample count.

-Fixed a couple of other things, I hope.

I have not looked at the wrong-edge problem yet…


1 Like

Hello Pascal,

all your updates work beautifully!

I love how you added adaptive colors to the Deviation Comb!
Also the curve on the Comb is nice! Thank you for considering that!

I have also checked the behavior for the Comb direction. Curve/Curve, Edge/Edge is whatever gets picked first is the starting point.

Regarding the Curve/Surface behavior, I prefer it the way we talked about. Starting from the surface and shooting through the curve. This way the comb also indicates the offset direction, which is usefull.

One thing I found is, that the Deviation Analysis does not allow for “Self-Referencing”, meaning measuring two edges of one Surface, which is necessary for Fillet and Overcrowning Analysis.
The Edge Continuity surprisingly allows “Self-Referencing”:

Testing the tool I also found a little bug. The Curve/Curve Deviation Comb shows strange behavior with the hair directions.

I have a request, is it possible to save Analysis Data in the .3dm file? Selecting everything over and over again is really tedious. I also would like the Analysis to stay visible in the viewport after the Tool is closed, having to intentionally delete it. Even more important for the Edge Continuity! This behavior should obviously be optional as not everybody might like that. However Experience proved it to be useful.

Typing “delete all Analysis Data” in the command line could be a way to solve that.

Again thank you very much for your fantastic support!

1 Like

I do know about the curve-curve weirdness - I have not had time to tackle that one yet - hopefully, I am just doing something dumb…
You can use Curve-Curve across any two edges - including on a single surface - does that not work for what you need?


I am pretty sure I can make this work persistently, just toggle it on an off with the same selection - that would be just a test , it is probably not terribly useful with only one display conduit but as a test for the real devs at some point is might be useful. I think it is easy enough to maintain multiple conduits (curve selections) but I do not see a clean way for the user to control them and keep track of them without a panel of some kind and that is not in the cards at this point. I’ll think about it.


Hi Pascal,

Would it be possible to do point to point deviation in addition to the other options ?