Extracting edge from surface as isocurve

Hi, I’m trying to extract the edges of my object surface as isocurves using the ExtractIsocurve command.

I was having problems getting one edge so for the command I opted for ALL Directions and Extract All options of the command, thinking I will just delete the curves I don’t want afterwards. However, even so, the one edge I am still needing doesn’t get produced and I don’t understand why.

I have a screenshot of the curves that get extracted and also one of the source object/surface, and also the Rhino file simplified as an example.

But I’m not familiar with participating in this forum as Rhino is only a part of my workflow and I am accustomed to posting. I don’t see an option to include these files to make it easier to possibly getting answer

Edit: Ok after posting my question, I see there is a link option. I guess I would do something like uploading my files to a dropbox and get the link for that, or is there a way to upload the files directly?

Hello- if your surface is trimmed then the edges that are trimmed are unlikely to correspond to surface isocurves. If not, then snapping to the ends of adjacent edges ought to work. What are you trying to accomplish that DupEdge or DupBorder will not?

-Pascal

I wasn’t aware of the dupedge command and it seems to work, meaning I do get a curve and it seems the way it’s contructed(has handles), that is indeed an isocurve(nurbs rather than polyline). So that’s what I was after.

It is puzzling though, I don’t know what you mean by trimmed surface. As I basically created a ‘shell’ from a curve and revolved it. I used a boolean object to do a cut on the bottom and another to do a cut on the top. Both done the same way. Yet with the ExtractIsocurve command I as able to get a curve from the bottom section but not the top section.

And as before, I’m not sure how to best post files and images to help clarify what I am doing.

But again, as long as I’m getting an isocurve(Nurbs), which I am exporting into another software package, that’s all that matters at the moment;

So thanks for the head up to use the DupEdge command.

Hi -

You can just drag and drop a file from Windows Explorer onto the message that you are writing, or use the upload button:

-wim

Ok…great, thanks Wim.

Although I’m satisfied with a previous answer, might as well upload anyways to help with clarity if anyone else might come across this post who has a similar question in the future



Extract_IsoCurve_Inquiry.3dm (71.5 KB)

Hello - Yeah, it looks to me like ExtractIsocurve should get all four edges here, I’ll run it by a developer.

-Pascal

The edge with the missing isocurves is a trimmed edge. Untrim on that edge or UntrimAll to see the untrimmed surface.

A trimmed surface is a surface where only part of the surface is used. The definition of a trimmed surface includes one or more “trim curves” in addition to the usual information for a surface. The trim curves function as edges of the surface. The trim curves may coincide with an isocurve but do not have to.

The edge coincides with an isocurve within 1.7742e-12

ShrinkTrimmedSrf the surface. It will then be an untrimmed surface. ExtractIsocurve will then work on the edge.

Note: ShrinkTrimmedSrf only transforms a trimmed surface into an untrimmed surface IF all trimmed edges coincide with isocurves. Otherwise ShrinkTrimmedSrf will pull in the edges of the untrimmed surface almost as close as possible to the trimmed edges while leaving a small gap to any trimmed edges which are not isocurves.

Hello- thank you, yes, I see that. I think it ought to work.

-Pascal

The edge with the missing isocurves is a trimmed edge. Untrim on that edge or UntrimAll to see the untrimmed surface.

Untrim cannot be used since it brings back the geometry that was ‘cut’ away with a boolean operation.

The edge coincides with an isocurve within 1.7742e-12

ShrinkTrimmedSrf the surface. It will then be an untrimmed surface. ExtractIsocurve will then work on the edge.

Note: ShrinkTrimmedSrf only transforms a trimmed surface into an untrimmed surface IF all trimmed edges coincide with isocurves. Otherwise ShrinkTrimmedSrf will pull in the edges of the untrimmed surface almost as close as possible to the trimmed edges while leaving a small gap to any trimmed edges which are not isocurves.

Although it is an exremely small difference (1.7742e-12 ) It seems I can’t use ShrinkTrimmedSrf either if I want the ‘exact’ edge(in the form of a isocurve) where the cut was made. (Assuming I am understanding you correctly with your reference to 1.7742e-12 ie. my model vs. typical edge/isocurve relationships with all geometries).

I am starting to think iso curves are only for defining that which lies across a surface but not the edges.

It doesn’t matter to me if it is an iso edge or not, so long as it’s the actual edge where the cut was made can be represented by a nurbs curve (rather than polygon line/curve).

It seams dupedge as recommended by Pascal is what I need. I only opted for ExtractIsocurve initially because the name of the function seemed to ‘guarantee’ me a nurbs curve result.

But I would hope that despite there being a possible difference between an isocurve and a trimmed edge of the surface, that as the result of a boolean cut operation there is no gap of the actual surface to where it met with the ‘cutting’ geometry.

Did you try ShrinkTrimmedSrf before replying? When I tried ShrinkTrimmedSrf resulted in an untrimmed surface. The exremely small difference (1.7742e-12 ) is close enough that ShrinkTrimmedSrf considers the edge to be an isocurve and the result is an untrimmed surface.

Differences of 1.7742e-12 are usually the result of the finite precision of computer math, and Rhino has tolerances for how large differences can be and ignored.

The results of DupEdge are a degree 3 NURBS curve, not a polyline. Same for Project, Intersect, etc. The NURBS curve may have many control point.

Use What to determine what an object actually is.

Depending on the geometry it may or may not be possible to exactly (algebraic exact) represent the intersection of two NURBS surfaces using NURBS. What Rhino does when an exact solution is not possible is find a solution which is within the absolute tolerance. Rhinoceros Help - Units properties | Rhino 3-D modeling (mcneel.com) The number of control points required for the trim curve depends on the geometry involved and can range from a single span to a very large number.

ExtractIsoCurve does not work on trimmed edges as Pascal noted. They do work on untrimmed edges. DupEdge or DupBorder works on all edges.

Did you try ShrinkTrimmedSrf before replying?

No I didn’t because based on what you said, I would have a gap.(Albeit an extremely small one).
Thanks for all your feedback.

Very small gaps are a fact of life in any NURBS modeling system due the combination of the limitations of NURBS and the finite precision of digital arithmetic. The absolute tolerance setting allows the user to decide how large a gap can be tolerated within limitations of the math precision.
https://wiki.mcneel.com/rhino/faqtolerances