generative modeling for Rhino
I was wondering if anyone had a solution to my problem. I'm offsetting voronoi curves and trying to fillet the offset voronoi curves with the radius of the fillet determined by the size of the voronoi polygon. Then I need to loft the the geometries created.
To loft I know I need to match the lists, but I'm having trouble doing that.
I've attached some screen caps and the script im working with. Help would be great! Thanks.
Curves im trying to loft.
What I'm trying to do although with the internal filleted with multiple radii.
How about this solution using Difference rather than Loft..??
The alteration you provided with the difference command producing what I need, However the loose offset seems to only produce a portion of curves from the original voronoi list. Any Ideas on how to fix this? Thanks for your reply.
I tried grafting the result but it didn't work. Then noticed that the output of the "closed curve" button is 3100 Curves, in 62 groups. I guess it is cross referencing every set of polylines to each other in a loop. So I flattened the list and receive a list output of 42 polyline values.
I not too great a sorting/matching lists. Any ideas of what I can do to match my lists in order to loft them. Thanks for your help.
I've attached my attempt at sorting the data so you can understand what I'm talking about.
There's some kinda weird stuff going on in your definition. You are getting lots of duplicate points which the voronoi component doesn't like. This is because of the way you are dealing with your attractor points. You need to sort them so you have one list closest to one point, and another closest to the other point (so there are no duplicates).
See page 60 of the grasshopper primer for another good way to deal with multiple attractors.
You are also filletting based on line length, which is fine, but the length may be too large a fillet radius for some cells. Adding in a division factor might help this.
Finally when you are testing if the offset curves are closed and dispatching only the ones that are, you need to use that same true/false dispatch pattern to remove the corresponding un-filleted curves - if you have 10 curves, you fillet them all, 2 closed so you remove them, and then you loft... it's not going to work since you are trying to loft 8 curves with 10 curves (won't match up).
Hope that helps
*2 were not closed so you remove them, and then you loft...
Take a look at this definition, let me know if it's what you are trying to do.
2 main issues with the definition:
Point cloud is producing duplicates of the same point (always in the corners). You can either set something up in grasshopper to delete them, or just bake them and delete all corner points (easy). Then put those points back into the voronoi component.
Second issue if that the offset is messing up all your closed curves. Not sure it there is an easy way to fix this. Try using Scale instead of offset. You probably wouldn't be able to tell the difference in this case. Plus it will keep your curves closed.
Then you can fillet by line length (which I remapped in the definition), and then test if the curves are closed. Then cull both original curves and new curves, graft, and loft.
Actually after looking at how the FFCloud component performs I wouldnt use it for that. It's producing like half the points as duplicates around the edges... not sure why this is.
I would instead use random components to generate points within x and y ranges given by a surface. See attached.
Couldn't I just run the point cloud through the "remove duplicate points" function as a solution? The creation of points alone the x and y directions gives me a diagonal gradient line of points.
I had used the scaling command before, and I think this is a much neater way to offset the curves, however I was trying to use the offset function to get a more consistent offset for architectural construction purposes.
Just looking at your script. I'm trying to understand the remapping of the Domain. Am I correct by saying that you are grabbing the values of the distances measured from the polygons and creating a list of values within a domain from a "minimum fillet value" to the largest value given by the polygon length? Then the remap function gets those values and interpolates them within a smaller domain determined by the 'Target Domain' input in the "remap domain" function. And by doing this you are trying eliminate values too large that may give the fillet command an error?
Just trying understand the logic behind this. I'm obviously still getting to know grasshopper. Thanks for your help though! Much appreciated.
For the x and y value creation you need to make sure the seed of the random components is unique for each component. If you use the same seed for both you will get a diagonal line since the list of values are exactly the same from each component.
I thought I had left them as different values in the definition I uploaded... so that's strange.
I'm not familiar with the remove duplicate points command. Do you mean SelDup in rhino? Cause that would work fine. You can also fairly easily set up a check in grasshopper to remove duplicate points, but I'm unaware it exists as a component. So you can make the cloud component work, I just dont like that so many of the points it generates are duplicates.
And yes you are right about the remapping. You input all the values to remap, the domain you are remapping from, and the domain you are mapping to. In this case I used the bounds components to retrieve the source domain, and definied a new domain manually. So the longest line length will be mapped to the upper end of the new domain and the smallest length will become the lower end of the domain. The reason I added that Max component is if you have a very very small curve length, then the really tiny ones are going to not get filleted much (and you wont see them, and the gradient of not filleted to filleted isn't clear). So it basically removes all values from that remap component that are less than the Max input. It's partially to avoid error, but also just to give you more control over how much or how little filleting you actually want.
Oh yes, your file works. I had been working on the X-Z plane.
There is a function called "remove duplicate points" in grasshopper. So this cleans of the point cloud (you can also set a minimum distance between two points with this function).
Thanks a lot for your help! It was very helpful.
Oh I see, it's in kangaroo. I didn't have it installed on the computer i was on.
Yeah no problem! glad it worked out for you.
An oldie but a goodie...