Grasshopper

algorithmic modeling for Rhino

Hi folks.

Pretty new to Rhino and Grasshopper, so forgive me if this is an obvious one. I have generated a series of lines and divided them into equal length segments. As you are probably aware, this generates a series of points along each line. I now wish to generate a series of surfaces passing through the points, with the surface normal being tangent to the line at that point. I'm looking for a separate surface for each set of points, so the first surface should pass through the first point on each line, the second surface through the second point on each line, and so on... Is this possible?

Ewan

Views: 1237

Replies to This Discussion

Try uploading a sketch of what you are trying to do.

If you divided each line into points, you could interpolate a curve through each set of points, then loft those interpolated curves to get your surface.

Thanks Brian

I've managed to go straight to the surface using a patch (see picture), however it is not normal to the lines as yet. I will try the curves, which should solve that problem, but I need to extend the surfaces beyond the curves that this will create, so the final solution will probably lie somewhere between the two.

One problem which is common to both approaches is the need to split the the list of points on the line up so you can group all the first points, all the second points and so on. At the moment I am using a series of 'Split' modules (see pic), however this is highly laborious to set up, and I suspect uses a lot of computing power. Is there a more straight forward means of achieving this?

Ewan

Attachments:

Still getting my head around how you would create a surface with the surface normal and curve tangent vector the same. but to help with you question regarding selecting rows of points i think this might help.

 

Attachments:

Thanks Matt, got this bit working now. Much easier.

I'm still having trouble picturing what you are after. Maybe you can upload your files, and try to sketch each step out and upload them?

There are definitely better ways to group all the first points, second points, etc. 

If you can walk me through each of the steps you want to take, I can try to help.

Sorry, work is getting in the way just now. I'll try and break it down over the weekend and get it to you.

I didn't get what you are trying to say

OK, here's a bit more clarification. The picture shows the four curves segmented into equal length sections. Note that one line is significantly longer than the others (we'll get back to this). If you open the rhino and grasshopper files, then hook the 'Crv' module up to these curves, it should generate patches through the points on the curves. What I am trying to do is use the tangents of the curves at the point of intersection as the normal line for the surfaces, there by creating curved surfaces. There are also some extra surfaces generated by the longer line. I am hoping that by defining the surfaces by point and normal line, these will become flat surfaces (ultimately these will be restricted in area by a box, but I'm not there yet). Hope this is a bit clearer. Any help gratefully received.

Ewan

Attachments:

Ok, I think I see now what you are trying to do.

To me it sounds like you want to create a boundary surface from a set of 4 points, one from each curve, but instead of having the surface be flat, you want it to bow up a bit (so that the surface is concave to the floor). 

I'm not sure how important it is to you to have the normals of the surface be defined by the tangent points on the curves where the corner points come from. If it is important, I might look into creating splines between each point on the curve and the next, ensuring that the beginning of the spline takes off at a 90 degreee angle from the curve, and ends at a 90 degree angle from the curve it runs into. Then I would maybe patch those curves.

If it's not so important, you can create the same basic effect by just adding one more point to your patch surface that pulls up the middle of the surface a bit. You could do this a number of ways, one would be to take each set of 4 points, find the middle, and move it up in the Z direction some amount. Then you could trim the patch surface if necessary.

I've shown an example of option 2 below.

You still have the problem of having one curve that is significantly longer than the others, and you are dividing by length instead of by number of segments, so you've got to figure out what you want to do with that longer curve.


Hi Brian

Yeah, I'm trying to keep the normal lines for now as I feel like there must be a way. I've been thinking about the curves approach and it might work, or I might look at creating a plane at each point and see if I can do something with that. Otherwise, the example is a handy fallback. Thanks for the effort. I'll let you know how I get on.

Just out of curiosity, the patch, surface split and boundary box modules in your example have small boxes with text at the bottom. Could you tell me what these refer to?

Many thanks

Ewan

Hi Ewan, 

Those are one of the canvas widget options under display >> canvas widgets >> profiler. 

They help show you how long each component takes to compute in milliseconds. It is helpful if you have a sketch running (rapidly) in realtime and you want to see which components are taking the most time do their job.

It can also help show you when you may have accidentally wired up some components incorrectly and they are processing much more data than you anticipated - for example if you want loft two sets of 10 curves to get 10 surfaces and had one list grafted and another flattened, you would be creating 100 lofts instead of 10.

I took a stab at the spline method. I actually used bezier spans, where the tangent vectors of the end points of each span was the tangent vector of the curve at that point rotated 90 degrees (to point towards the other curve that the span connects to). The effectively gives you 4 bezier curves that, if patched, will give you a surface that has corners whose normals are (approximately) the tangent vectors of the curves at those points.

the file is not that pretty, but it gets the job done.

You can change the slider values to change the amplitude of each of these bezier vectors.

You can also toggle between dividing the curves by distance or by number of segments (since there is the problem of running out of curve length when you divide by distance).

Note: I had to first rebuild your curves because there was something funky about them. I just rebuilt in rhino with 25 control points.

The crvs are internalized in the GH file, so you just need to open this file and the curves will already be reference.

Best,

Brian

Attachments:

RSS

About

Translate

Search

Videos

  • Add Videos
  • View All

© 2024   Created by Scott Davidson.   Powered by

Badges  |  Report an Issue  |  Terms of Service