Grasshopper

generative modeling for Rhino

# unevenly divided surface

hi,
sorry i have to bug all again.

i can't figure out why with these GH settings (please check image) the loft surface generated in Rhino is splitted/divided unevenly in the V(X) -direction.

is it me, is it Rhino, GH or "only" my computer that is sooo wrong?

i'm just soo tired encountering these kinds of errors all the time.

thanks

-

Views: 5771

### Replies to This Discussion

i believe i picked the wrong node, but i'm not sure yet.

i'm only at the total beginning of learning GH.

sorry

-
Hi Timo,

Well, it all depends on what you mean by "unevenly" ...

As David Rutten exaplains (here, p.78):

"the progression of the domain of a surface is not linear (it might be compressed in some places and stretched in others, especially near the edges where the surface has to be clamped), the distance between isocurves is not guaranteed to be identical either."

In chapter 7 of the Primer you'll find extensive information about Nurbs curves and surfaces - be sure to take a look at it.

When you do, you will understand perfectly what is going on here:

Good luck!

JJ
I downloaded that script and looked at it but hardly understand anything - simply because i'm too dumb for all that math & programming-stuff.

All i get is that stronger curved curve- or surface-segments gather more controlpionts.

And it would have appeared all ok to me if you hadn't posted that image above - cause why would an plane

like your B plane (green) contain a such control point pattern as shown above? It doesn't make sense to me.

So what's the secret in your nodes here? They look pretty much alike for both surfaces.

thank you:)

-
> Not necesarily stronger curved - but certainly more condesed is the domain of the curve. :)

OK, here it goes:

Both A and B look like planes, which they are not.

In fact they are lofted surfaces, each made from two Nurbs curves, each with different surface properties.

Curves A1 and A2 have 2 control points:
startpoint and endpoint

Curves B1 and B2 on the other hand were drawn with 6 control points each.
What's more, those point's aren't equally distanced from one another.

The lofts inherit the position of control points of the profile curves.
The distribution of control points in the loft direction is uniform.

So no suprise here:

You can think of Nurbs curves as rubber bands and of Nurbs surfaces as rubber sheets. The areas with less control points would correspond to streched rubber.

Now lets imagine you take an A4 piece of rubber, lay in on a table and draw equally distanced lines on it. When you strech it ununiformally - the distances won't stay equal anymore.

The Divide Surface component operates on u,v values which you can imagine as dimensions of the rubber sheet in relaxed state.
So the result you got was indeed an equaly divided surface, only in the so called "parameter space" of the surface, which doesn't always correspond to the xyz space.

There are methods to divide curves and surfaces in equal distances in the way you want it. For starters check out the Evaluate Lenght component.

I think that's enough teory for today. Have fun!

JJ
Well

i thank you very very much.

Thing is though, it actually all only describes the problem that i already recognized myself,

i was hoping for a solution how to divide a surface evenly, regardless if stretched or unstretched, bent or unbent.

The tip with the Evaluate Length - node i will have to try out later this evening.

cheers and wish a nice day :)

timo

-
Hey,

As you've probably already noticed I'm not a huge fan of the "silver platter" :)
But the reason why I didn't give you the solution is simple - I don't have it myslef!

Your question intrigued me, so I started to investigate.
Here is what I've come up with today. I've recreated the instructions from David's 101 Primer for creating the iso-distance curve on a surface, step by step:

You can play with the distance slider and see what happens (see attachments).

I think you can modify this definition to achieve your desired effect, but at this point you should ask yourself if this is really what you want.

I mean it's not possible to divide every surface into 10x10 equal pieces of the same dimensions. There'll be lot's of trims and leftovers.

Maybe what you really want is something more like this:

?
Attachments:
I read your post again and I'm pretty sure this is in fact what you wanted.

It seems I've made a fool out of myself with all the off-subject smart talking :)

What you need to do is rebuild that surface directly in Rhino.
(select the surface, enter "Rebuild")

Sorry for all the commotion.

JJ
hey thank you very much.

nobody who's intention is to help somene can make a fool of himself.

I am absolutely sincerely greatful for every honest help and answer, regardless how good it fits.

And i would love to get at your newest advise right away and i can't wait to check it out,
but unfortunalely i'm at work right now, so i can get to it again only as soon as this evening, when i'm home.

So thanks alot in advance and wish a nice day.

cheers :)

timo

-
alright,

now the last image actually shows exactly the kind of points spread i mean, want and am trying to construct in GH, but just can't figure it out yet.

Also your attached files don't seem to represent the type of surface division which the red points/crosses indicate covering the surface in the last image.

Now i wonder of course how you created that point grid in that image.

I suppose by rebuilding the surface in Rhino?

That's a nice idea, but i actually wouldn't want to consider that trick as "the" solution since the "rebuild surface" -command returns a surface which deviates from it's original surface usually tearing off from neighboring or attached surfaces and disrupts curve or surface continuity within any surface network or polysurfaces.

Of course i could simply just use a copy of the base surface to rebuild, but the result then would still be an unpercise points-mask/mould of the original surface.

So i will continue figuring out how to subdivide isocurves of surfaces into equal intervals with Grasshopper without rebuilding.

I just hope there is a way in GH.

But again i want to thank you very much for your effortly and helpful attempts, i am surely greatful for them.

Cheers and good night,

Timo
-
Hi Timo,

Actually, the last image shows the construction done entirely in grasshopper, without rebuilding the surface, as well as the modified definition (top of the screenshot)

Nevertheless, I've modifed it a bit and attached the .ghx this post. It should work for any lofted surface. What it does is extract the iso-curves in the "v" direction (which should be already evenly spaced) and simply divides each of them in the same number of segments. I've added notes for better readability:

JJ
Attachments:

Right now i'm still looking at it and trying to make it work for both directions, u and v.

It's trickier than i thought it would be.

Also if i use seperate sliders for the stepsize and the number of values entrence of the series-node, iso-curves suddenly jump off the surface when setting the sliders to different integer values - which is an awkward behaviour i don't understand yet.

timo

-

iso_distance_curve orig..ghx

-
Hey there,

It just so happens that I've investigated that issue too. It got really interesting when I discovered you were completely right about the rebuild command.

I think I've come up with a solution for dividing the surface evenly in both directions:

Again, the definition is quite simple:

"A" shows standard uv-isocurves division, the result indicates that we're dealing with quite a nasty surface - the domain is very unevenly distributed.

"B" shows my solution for the same surface (copy), which consist of these steps:
1. retreive one set of iso-curves (u or v, you can toggle which)
2. divide each of them into equal segments
3. use the resulting division points to form new pseudo-iso-curves
4. divide those curves into equal segments

The result is quite nice, but there's one downside to it:
It varies depending on the starting set of curves you choose (u or v) - use the toggle button to see the difference, especially for really unevenly distributed parameter spaces.

The reason why this happens is that steps 2-4 listed above are just the first iteration of the formula. If we repeat the process several times, we should get basicaly the same result starting with "u" and "v".

With the use of receivers copying the iterating part of the definition is really simple:

Of course making iterating definitions in Grasshopper is a total nonsense, it was just a quick way to check my idea.

One thing you've got to bear in mind is that I'm no math expert and this solution is based just on a hinch and intuition... so It's possible that it would jump into a stable state (if scripted) or something...

If you like my solution and you don't come up with one which doesn't requiere iterations, you can always post a message on the VB and C corner, maybe someone could code it for you.

Ok, I think that's enough for today, I've pretty much exhausted the subject on my end :)
Let me know how the definition works for you.

Cheers,

JJ

--
as for the akward curves when using different step size and count: it's no big deal, those are just the curves which fall outside the surface domain. remember that the input parameter N in the series component is inverted (expression is: 1/N)
Attachments:

by Alex

by Alex

by Alex

• View All