Filleting Tangent Surfaces


Thank you Roland. I have always appreciated your comments.

@jim Hi Jim, can you modify the code to combine the final generated rounded surface and edge curves to join together? This would be more convenient.

1 Like

I’m hoping to avoid doing that.
You can join the fillets by running this macro when the script ends:
selnone -selname “fillet*” pause join enter

If you are running the version ( filsrf_crvs.py ) that makes edge curves you can add this macro to get the joined edge curves.
selnone -selname “sidecrvA*” pause join enter selnone -selname “sidecrvB*” pause join enter

If you have a small gap in the fillet string you should probably do something to fix that before joining.
If you do the joining with a macro and decide you don’t want them joined you can undo. If the script joins things there is no undo available for the join.
The unjoined curves and fillets have serial numbers in the order that the script created them. When they’re joined that information is lost.

1 Like

Yes and that is the problem Mcneel created that I think I may have found a way to overcome.

The main problem I have with is that I didn’t want to release any code that did additional actions that can’t be undone. In other words, after years of using the code in FilserfEx.py I know the original script is rock solid.

Disclaimer:
I also know that if I add many of the requested features it may not be as reliable (because I have already tried it) and therefore I am OK with adding any features requested but I want to do it in a way that if it fails it will be clear that the failures are something out of my hands. If it does not work don’t ask me to fix it, ask McNeel. The original script only produces the same fillets you can make with FilletSrf command.

For those of you who have asked for the fillet string to be joined after the script completes , here is a new script that essentially adds the macro that you, the user should be able to add after the PythonScript finishes. A bug in Rhino prevents anything to be added in a macro after a python script completes. So this is my attempt to workaround this bug.

Here is the the new script with about a dozen lines added at the end of the old script that emulates the user adding a macro that joins the fillet string and leaves it selected so the users can do with it what they will ( I assume the user wants to use it to trim the base surfaces). The script also produces the joined edges which some users have requested.

Filsrf_crvs2.py (41.2 KB)

The few times I have tested this it works OK. The main import of this version is that I think I have a handle on how to control the undo stack within a script. If that works without fail then more actions that can be undone can be added. I don’t mind adding stuff if it can be undone. That way if the user doesn’t want the additional action they can undo it.

If anyone finds a problem in the way this works let me know. I suspect there may be problems…

As the old song goes:
Trouble ahead Trouble behind
And you know that notion Just crossed my mind

9 Likes

The new version of the script works perfectly fine! Thank you for putting the effort to make it more polished! :slight_smile:

I tried the new script on the test 3d scene you provided and using the selected output proved that sometimes the joined fillets are unable trim the input polysurfaces, whereas the extracted border can. To make sure that the input polysurfaces will be always trimmed or split (I prefer splitting), I simply click on a blank area in the viewport to deselect the output objects, then run ! _Split and use the border curves. Works 100% of the time that way. :slight_smile:

Here is one of those polysurfaces that refuse to be split or trimmed via the joined fillets.

That depends on your definition of “works”.
Usually when using the fillet surfaces as the cutter fails to trim (or split) its because there is something wrong with the base surfaces. In this case the green polysurface does not have very good edge continuity. Some of the edges are out of tolerance. That is the sort of thing that makes trimming with fillet surfaces fail to trim. If you remake the green polysurface so that it has more accurate edges then you can trim (or split) with the fillet loop and the end result is a more accurate model.
wingnut_fillet.3dm (253.5 KB)

Also, I posted this model last week:
Rhino7_Bad_Edges.3dm (309.3 KB)

The idea is to construct .125" fillets between the cyan polysurface and the black surface. The fillet radius has to be exactly .125 so that it connects to the existing fillets on this imported model…
Either trimming (or splitting) with the edge curves or trimming with the fillet surfaces appears to work, but when you join the whole thing together you find that trimming with curves makes a bad object at the join command. And the messed up edges and bad surfaces caused by trimming with curves are not easy to fix.

Anyway, I’m not claiming trimming with the surfaces works more often than trimming with the curves. I’m saying it is less likely to cause joining problems.

1 Like

So, it only does half the job? And only if things are already tangent :thinking:

Except for the trimming and joining part…

lol

sounds like alot o’ clicks.

idk bout that.

Can you make a video demonstration and post it :coffee:

hmm that looks cool :face_with_monocle:

Is it really a plugin tho… :coffee:

@Rhino_Bulgaria
quite a bit o’ kinks on that one

I wont mark all over it because it’s pretty obvious that Rhino render mesh is really bad at illustrating tangency of curvature:

Maybe the excuse is it’s not all joined? or maybe it’s ‘file tolerance’, idk, but Rhino has always been bad about throwing off the user that knows something is tangent but the shading makes it look kinky.

*spits out coffee…

wait did you just fillet two closed polysurfaces together?

:face_with_monocle: :thinking: :thought_balloon:

what kinda sorcery is this


looked like you only picked part of the brep faces but looks like incorporated all them …


that’s a pretty coo fillet imo :face_with_monocle: :beers: @Rhino_Bulgaria

Orange would be better. It’s a trade secret though. Don’t tell anyone :shushing_face:

*spits out coffee again, wait what :exploding_head:

ikr, I’m pretty sure the edges are here in this room rn :sweat_smile:

Seems like they pushed @jim to do it :smile: … like he got tired of waiting :sweat_smile:

what lol, sounds interesting…

yeah, but using edge curves is usually more successful imo.

I was wondering what that was. Good to know it still kinda worked?

You been busy :exploding_head:

I thought it was you :sunglasses:

ikr, if he could make it so it worked on already joined surfaces that don’t need to be exploded first, that would be great :coffee: :grin: and trim automatically too :beers:

I’ve often found that trimming will fail during times when instead using ‘crv’ and selecting surface edges as cutting objects will over come the failure of just trying to rely on the surfaces.

I still think the render mesh and ‘edges pulled away from originals’ is the leading factor in these failures.

And using ‘crv’ in the middle of the trim command will often resolve this short coming.

But I guess it depends what you’re actually referring to.

You should make a version that fills the gaps, and call it ‘sandpaper and putty fillet blend’ or something. :coffee: “a little tolerance can go a long way”

I was jus mentioning that. I use that alot :grin:

wait what :exploding_head: :beers:

ikr why so many secret commands :rofl: :sweat_smile:

1 Like

Hard work turns Rhino users into CAD ninjas. :smiley:

1 Like

Bobi, go work at McNeel, get hired - that’s an order! :grin::wink:

2 Likes

I don’t have the necessary skills, I just make some suggestions for improvements. :slight_smile:

1 Like

I think it’s quite the opposite Bobi, they probably don’t have enough developers or institutional knowledge to keep up with your amazing suggestions.

Keep up the great work regardless!

G

4 Likes

Thank you! I think that we, the basic Rhino users, see only a fraction of the whole picture what’s happening behind the scenes at “McNeel”.
I fully agree with you that the developers must devote time to improve the major NURBS modeling and editing tools such like “Blend surface”, “Match surface”, “Patch” (see what xNURBS does in comparison), “Rebuild” (especially conversion to single-span Degree 5 with 6 points), “Loft”, “Sweep 1/2 rails”, a new “Sweep 3 rails” tool, added “Explicit control” option inside the surface creation tools, better control point editing tools, etc.
However, I can also see that the developers are trying to attract customers who are typically coming from mesh modeling programs, this is why SubD was such a big deal for them while developing Rhino 7. For Rhino 8, I would love to see the aforementioned improvements, but after trying Rhino 8 WIP by myself I can’t see it happening before Rhino 9 or 10.

3 Likes

This is a great tool as is. Just wondering if you have any plans on making it able to build G2 blend fillets?

1 Like

No I don’t have any plans for that.
The way I look at it the code for rolling ball fillets is reliable, accurate and fast.
Code for G2 blends would be much less reliable, less accurate and slower.

So, if I manufacture a product with CNC and I’m using a ball tool, and my scallops are 0.0055"-0.007" apart, is that G0,1,2 or 3?

And what would it be after sand paper n’ polish… :thinking:

Is what G0,1,2 or 3? The scallops?: the ball tool? the CNC???

Anybody involved in the manufacturing a product as you described would be puzzled and/or amused by your question.

I used the word ‘scallops’, but really I’m considering all forms of tool marks and surface finish from all forms of manufacturing processes.

Not to mention facets and tessellation manifested from CAD’s or CAM’s exchanges etc. – but that’s part of the argument of ‘true fillet’ I suppose.

It’s real cute how the F1 help docs sneak in some calculus nomenclature in there, but I think most people that want to build things and create a better world, just really only care about ‘tangency’ – imo.

Although most manufacturers love to cut corners and leave sharp edges everywhere on their products and leave burrs on everything.

I guess I’ll need to study calculus better to know derivatives better, to understand G1,2,3 better.

Then I’ll know how to manufacture an ‘inner round’, and/or ‘outer round’ of an edge of a product better, so that the product wont have sharp edges prone to fracture or harm of a customer, and inner corners prone to fracture as well – leading to product failure.

https://www.custompartnet.com/glossaryimages.php?iid=1902

Example of ‘scallops’ manifested from CNC manufacturing process.

While tryna find better examples illustrating tool scallops, I stubbled on this:

Kinda of a random thread he made about scallops lol. Not sure what it was about though other than that equation :joy:

It’s actually really weird how hard it is to find good examples of this…

Marvelous!
Is there any intention to release the Grasshopper version of the code?

What would make a python script a Grasshopper version?

I don’t know, I just think it will be really wonderful if there is a GH component that can do the same thing.

1 Like