@Gijs I’m finding that I’m having to re-enter my tolerance settings each time the command is run. It’d be great if it could remember my values for next time.

Thanks, I will add stickies for those in next release, so that they keep the same across a Rhino session.

You could also store them in plugin settings. During OnLoad read them, during OnClose write them.

Do you know if that’s also possible with Python based plugins like this one is?

Sorry I was not aware you are using Python. I am not sure how big extent of RhinoCommon API is accessible with Python.

Thank you so much for this plugin.

@Gijs After a few days of working with this I’m finding that sometimes the graphs aren’t updating when I’m going through re-matching surfaces. The numbers reported in the box at the bottom are good though.

I have to cancel the command and re-run it again. I’ll have maybe 8 to 10 surfaces in my selection if that makes any difference?

Not a complaint, just an observation… please don’t take this away from me…

I was thinking - could the interactive position analysis work with curves?

Imagine you were trying to match a single span curve the best you could to a heavy multispan and you had an interactive readout of the deviation, this could be yet another priceless tool.

is this when you are using the MatchSrf command? Indeed I have some issues with that related to updating, but couldn’t yet pinpoint it. If you have something you can easily repeat it would be very welcome.

I won’t… but I will keep it in beta as long as these things are happening.

Yes, MatchSrf is being used. I’ll see if I can get something repeatable for you next time it happens.

Looking forward to buying this when it’s released!

I’ve uploaded 0.9.7 which extends the usage until end of april (45 days) - no code changes other than the expiry date

I’ve uploaded a new version 0.9.8 which extends the usage until end of june (58 days) - no code changes other than the expiry date. Download on PackageManager (enable prereleases) or from Food4Rhino

I added 0.9.9.2 to packagemanager.

the new version works in Rhino 6.35 and above for Win (though with one restriction that the dots don’t display well) and Rhino 7.17 and above for Win and Mac.

Look for Global-Edge-Continuity on _PackageManager. (_TestPackageManager on Rhino 6)

New features:

- Completely rewritten in C# (previously: Python)
- Faster initialization time
- Faster calculation ( up to 50%, although in some cases the difference is minor)
- Zebra preview toggle
- Reset to default values
- Dot size is adjustable
- Settings are now saved as Persistent Plugin Settings, so they survive across sessions.
- Better rules for determining G2 continuity: now takes rel. tolerance into account. This is hard coded. If the rel. tolerance is >0.5 (or <-0.5) the edge will not be marked G2 continuous even if abs. tolerance is within threshold. This means for example a blend surface to a flat surface will not be marked G2. This change needs to be discussed. @Rhino_Bulgaria , @mcvltd , @fares.boulamaali , @sgreenawalt let me know your thoughts on this.

Once this beta is approved I hope to finally release it. It will be released as free and open source. If you want to donate or contribute to this project, pls send me a pm

~~Note: there is currently an issue that has unlinked the download from food4rhino.~~

Those sound like great improvements! Can’t wait to test it out later and compare to the earlier version. Thank you for your relentless work on this analysis tool!

As for the G2 to flat surfaces, I think that it should be marked as true G2 since the transition to the 2nd and 3rd rows of control points meet the criteria for curvature continuity.

The thing is that I got wrong G2 markings for surfaces that showed a edges that were marked at G2, where their direction was flipped, and this I want to avoid. An erroneous G2 marking is worse than marking an edge G1 that could be said to be G2. Anyhow, let’s see if is a problem for you in practice, since I doubt that you often need to deal with blends to planar surfaces.

Since flat surfaces have no curvature I’m not sure yet how to deal with this in an elegant way.

Maybe if there is a way to say to the script that a flat surface should be considered G2 one? Not sure if it’s possible.

How are you calculating relative curvature?

Flat surfaces have a curvature value. The value is zero.

I do not like a pair of surfaces with G2 continuity not being labeled G2. That is misleading.

What difficulty is resolved by applying the rule “If the rel. tolerance is >0.5 (or <-0.5) the edge will not be marked G2 continuous even if abs. tolerance is within threshold”?

@Gijs Thanks for the new version. I’ll try to take a look at it to compare how it works with previous versions. For relative values, I don’t have a clear idea how it should be presented. ask vsr users how they handle these cases? there must be a solution.

EdgeContinuity reports both numerical continuity deviation and relative continuity deviation.

## Curvature

Evaluates curvature deviation between the selected edge pair.

This option displays absolute and relative (in parentheses) deviations.

- Absolute curvature deviation = (1/Radius1)-(1/Radius2)
- Relative curvature deviation = (Radius1-Radius2)/(Radius1+Radius2)

EdgeContinuity | Rhino 3-D modeling

The use can then decide which is relevant.

I used the method you posted here

me neither, but worse is a edge pair marked G2 that is not. Consider the following example file:

incorrect G2 flag.3dm (12.5 MB)

in previous version, all edges (except the 3 G0 ones) are marked G2, because their abs. tolerance is well within specs:

In new version, I get this:

which IMO is much more accurate feedback, apart from the edges that meet the flat surfaces.

So I am thinking: what might be a good way is to mark edges G2, if their rel. tolerance is low enough (currently -0.5 < rel < 0.5 ) and abs tolerance is within specs OR if abs tolerance == 0

This would then yield this result:

I am interested in how you are calculating **relative** curvature difference from the curvatures or radii, and in particular what you are using to normalize the curvature difference.

One formula is

(Curvature 1 - Curvature 2)/(Curvature 1 + Curvature 2)

which can also be written as

(1/Radius 1 - 1/Radius 2)/(1/Radius 1 + 1/Radius2)

which equals

(Radius 2 - Radius 1)/(Radius 2 + Radius 1)

These formulas can fail if the curvatures/radii have opposite signs. In that case magnitude of the curvatures or radii should be used in the denominator:

(Curvature 1 - Curvature 2)/(Abs(Curvature 1) + Abs(Curvature 2))

(1/Radius 1 - 1/Radius 2)/(Abs(1/Radius 1) + Abs(1/Radius2))

(Radius 2 - Radius 1)/(Abs(Radius 2) + Abs(Radius 1))