# Kinky sweep

HI,

A question about sweeping: this is an old problem that exists even in Rhino, and it regards sweeping a profile along a ‘curvy’ curve with kinks. It is always difficult and I understand that mainly it is because the intersection between the “curve spaces” is not planar so the profile at the kink idealy should not be planar but concave (or something like that) The problem gets worse if you want the sweep to be tappered…

I have never found a really good solution to this (the only fake solution is to make the meeting segments straight near the kink but the result is “unorganic” and for big angles it becomes totally weird.)

Does anyone have a suggestion?

kinkysweep.gh (47.8 KB)

Profiles are much more complex as it appears to be.
In ICEM SURF there are 16+ methods in sweeping and still very often you need to solve things manually at kinks.
Within a manual approach I would go for method 1, extending surfaces to its intersection plane ( you need to guess it, since often you can’t exactly find it). Now you need to positional match both surfaces. Its good to have an advanced matching functionality, which allows you to blend the other cps proportionally, in order to keep curvature flow similar. In Rhino, VSR tools had this functionality, but native Rhino as well as Grasshopper doesn’t have that, so its up to you to implement something like this. However I doubt someone can do this easily without really knowing the math behind NURBS.

I wonder if it would be possible to try an iterative approach by extracting isocurves (on each interation) and test end points of the curves against its counterparts on the other surface.

By translating and keeping the translation vectors from each iteration one could continue to move in directions that comes closer (its counter part point) and…

Perhaps some kind of flocking/agent methodology could converge within a tolerance (isocurve-ends matching up).

Redneck approach, but perhaps it would work? If I only had unlimited time I’d play around testing things like this…

// Rolf

So the general conclusion is that there is no ‘off the box’ solution right?
RIL I was thinking your approach as well but it would become extremely heavy very quick even for just a single kink (plus: with the tappering, things get more complicated because the prequisites for the corresponding curves to meet are many)
I was even thinking going ‘meshy’ and then translating it into nurbs but I think that would defeat the whole purpose and even then there would be need for deep understanding of topological properties.
(for example: I believe that the intersection (where the ‘spaces’ of the two curves meet) must be a specific surface which would need advanced mathematics to find…
so… we leave it as an unsolvable problem?

If @TomTom says so, then I would also say so.

Edit: But perhaps the @XNurbs guys would like to have a look at this one?

// Rolf

Well … read stuff about Continuity (C1,C2,C3 etc), Locus, Hocus, Pocus and other mysterious and ominous things that can being exposed/explained via mysterious and ominous words like:

Whith regard analysis matters (on hocus pocus things) see attached as well (gets curves, makes them pieces, shuffles the pieces, joins the pieces, finds C1 stuff etc etc). But … well … since you don’t like analysis … don’t try it, he he.

Curves_join_and_find_pieces_V1A.gh (31.1 KB)

I know you are right, that’s why I hate you!!!
I get too little sleep as it is!

Yes, but you don’t necessarily need to use sweep for making a profile. You can do it quite old fashion with a network of well placed curves instead.

In the end its up to a good placement of controlpoints, in order to prevent bad curvature, twisted surfaces and other failure. Less is more, never trust algorithms which are there to shorten work for you. That’s also why for freeform surfacing a direct modelling software outperforms a parametric one. You can’t catch all possibilities when doing freeform surfacing in 3d space

Never trust someone who needs to array his first name or someone who is named after a gps system.
Although you could call me Tom

You can also analyse the knotvector(aka knotlist) and search for duplicated numbers other than at the end. So a knotvector of {0 0 0 1 2 3.5 3.5 3.5 4 5 6 6 6} has a kink at t = 3.5

Pardon me but are you by accident Tom J (the German who likes Ducatis - from the old GH Forum?)

I’m fine with both Tom and @TomTom . I would never trust a @Garmin though. I just put one in the garbage collector and got my self a < plug > TomTom. < / plug >.

// Rolf

Come on guys!
there must be an easier way!!!
I tried finding the space intersection between the curves ‘manually’ (a surface defined by the intersections of offset curves)
It only works for untappered sweeps,for coplanar AND planar curves, its buggy, it’s heavy and doesn’t always produce a solid.
One of you programming gurus should come up with a plugin for these cases.
kinkysweep2.gh (48.4 KB)

its obvious you are missing the second part, which is the most difficult part actually. You need to match both ends positional with blending all cvs propotionally. Without out this step you wil never get a solid…
Besides that its not always right to just make a plane, since you can also have a jagged intersection (, which in certain situations can be much better). In addition to that, I would never use Grasshopper for modelling something complex if you don’t have too. Direct modelling is unbeatable for freeform.
Icem Surf could solve your planar case with ease thus, however Icem devs, similar to the Rhino core develloper do have a much deeper understanding as we have, and I would consider myself not being a beginner in cad programming and modelling. So the indention of my last post was just that I believe this problem is of much higher complexity as you believe it is. I can solve your problem manually, but you can argue if Rhino and other cad software has no good automated solution, why should we solve this with writing some simpilistic gh scripts?

1 Like

Having no idea what to do, asked advise from my top dog C# guru.

He said:

1 Like

It smells electric with a scent of spring flowers…
I tried to somehow get an idea of what that ‘bisecting’ surface might look like… I was hoping that if I at least was able to construct it ‘mechanically’ I could somehow find a way to project onto it the ‘kink profiles’ and that way achieve the kinky sweep but it looks like a fool’s erant.

oh well… Knowing where not to search is a gain as well…
bisecting surfaces.gh (26.1 KB)

Said the Lord (the Merciless):

1. Forget static, ugly, previous century and most notably archaic stuff.
2. Go to a city named D that has a port and zillions of acres for deploying … er … whatever worth the name.
3. Send me 66 Greek goats (ISO 9000 certified) - don’t forget to pay the VAT (high class code has a price).
4. Call Birdair and talk details.
5. Start from stuff like that (sky is the limit):

I have created a definition for creating a -somewhat- automated kinky sweep. (by creating extrussion surfaces at the kinks) and I think I’m 99% there. (although It still only works for coplanar curves)

My only problem is that for some reason I cannot get to smoothly remap the profile on those surfaces and I am not able to rotate it. when I start rotating it, it swaps orientation erratically. I bet its a simple thing but I’m really stuck.
Can somebody have a look pls?
(I’m uploading the full definition because I’m not completely sure where the problem might be)
kinkysweep3.gh (76.5 KB)

Yeaaah!
I finally found the way!!! it can now work perfectly (almost). Profile can rotate and the sweep can be tappered.
I couldn’t believe that it would be so complicated to create a simple sweep!!! (I need more studying apparently hehehe)
I’m posting it in case somebody else loves old fashioned forms like me!
kinkysweep5.gh (58.0 KB)

3 Likes