Accurate diameter on SubD surface edges

I’m modelling bicycle parts and need a perfect circle with a specific diameter on a SubD edge to meet metal or carbon fiber tubes. Does anyone know a way that I can pull an edge or subdivide the edge to get a perfect cylinder that would match to a NURBS cylinder as seen in these screenshots? I’ve tried align to curve but that pulls the flat vertex of the SubD to the circle rather than the smooth surface edges. I’d like to find a solution that doesn’t involve converting to NURBS until the last moment.
Thanks for your help.


Hi @Owen_Waterhouse ,

Align > ToCurve is the way to go here but there are a couple ways to use the approach. The first and most obvious is to select either edges or vertex sub-objects and align those to the curve or edge of your NURBS cylinder. This will align the control polygon though (what you see with Tab) and be somewhat offset from the actual edge depending on the density of the SubD at that edge. Another approach and what I’d suggest trying here is to use the command EditPtOn and then select those points instead to align to the curve or NURBS surface edge. This will be closer the more edit points there are.

Thanks @BrianJ, using EditPtOn for a SubD is a new trick for me and worked well in this situation. The SubD edges that meet the cylinder weren’t of equal length so I then didn’t get a perfect intersection (shown in red) but it’s getting a lot closer. If I manually adjust the SubD edges to equal in length and then Align > ToCurve I can get even closer. Thanks for your help.

1 Like

Dear @Owen_Waterhouse

for fast aligning - in my example of 8 vertices:
draw some helper SubD:
_subdCylinder
with 8 arround faces
with solid on
subselect and delete, just keep the fan-style bottom.

_stitch
or
_bridge

delete the fan-style circle.

a 8-edge-polygon is already a good approximation for a circle / cylinder
16 edges with R50 mm are 0.003 mm of…

At the end of your modelling, you still have the option to
_subDivide
draw a target _subDCylinder with 16 arround faces
repeat above workflow…

@brian
I would love to see
beautify edge loop
and
SetPtPolar

1 Like

Rhino 9 WIP has a new and useful command called _SubDMatch

2 Likes

That works perfectly! Thank you. I have 11 faces so used a corresponding SubD cylinder and stitched with the existing SubD and it is beautiful! Much faster and all SubD edges are now automatically the same length so the circular opening is more consistent than using align to curve.

@martinsiegrist that looks really useful, thanks for pointing it out, I’ll give it a try. For anyone else looking for similar this forum post has more information about _SubDMatch.

2 Likes

what might also come in handy is this (slightly lame) circularize script:
Works on control points only:
circularize.py (1.8 KB)

1 Like

Thanks @Gijs, I’ll take a look

nice script. thanks.

I did a modification, that does not match by closest point / index.
Fit / match by closest point/index might result in 2 or more points get matched to the same target point.
My modification sorts the grips by the closest parameter first.
If I find time I 'll add an option, that allows “partial” mapping - therefore maps only to a portion of the circle / an Arc…
… that s already quite close to the functionality I would love to see for beautify edge loop and setPtPolar

circularize_tp_00.py (3.0 KB)

1 Like

that’s an excellent modification!

1 Like

thanks
:sunny:
…while the weather here is :cloud:

1 Like