Populate spikes on surface

Hi everyone,

I am working on a project with a curving shell with spikes on it. I would like to populate the curving geometry with multiple sizes of spikes. So essentially different blocks, linked to points on the surface and angled according to the curve of the surface [See the section]. Considering the large number of spikes I think this can be done efficiently in Grasshopper. However, I’ve never used grasshopper before. By now I managed to populate the points on the geometry. However, the points are also placed on the inside of the geometry which is not ideal since I would have to manually delete the spikes later. Can someone help me out with the next steps and how to get the points only on the outside of the geometry?

Many Thanks!

1 Like

Only if you post the geometry.

Geometry attached:

Geometry for spikes.3dm (9.4 MB)


What is your criteria for determining which faces of the brep are “inside” vs. outside?

Not sure how to define it in technical terms but basically the spikes should only be on the outer surface - so basically ‘outside’ ends where the geometry folds inwards and forms the opening. See screenshot.
Also spikes attached:

Spikes.3dm (127.0 KB)

There’s the rub, eh!?

Hmmm yeah I see. An alternative would be to populate them also on the inside and delete them manually afterwards?

This effort creates long lines normal to each PopGeo point, then checks to see if each line intersects the brep. If so, that point is ignored, otherwise it gets a “spike”. In this case, I used cylinders instead of spikes but the base plane for each is available if you want to Orient spikes you created in Rhino.

spikes_2021_Jun21a.gh (17.7 KB)

As you can see, it often works but there are cases where an internal spike pokes through one of the holes in the brep so there is no intersection and that internal spike is allowed.

Version ‘B’: this one replaces the cylinders with your spikes. (white group and Orient)

spikes_2021_Jun21b.gh (66.0 KB)

P.S. In both of these examples, there are 179 PopGeo points and 70 spikes, which means that 109 spike locations were ignored (61%).

1 Like

This seems absolutely great! Clear explanation as well. Thank you so much!
I’m gonna play around with it a little bit and will share an update when done :slight_smile:

Perhaps an additional elliptical lobe could be placed on the interior and also checked for intersections with the lines in order to avoid the ones that happen to go through the holes.

Perhaps shrink wrap a cylindrical mesh to the form and scale by 0.95 to create a test condition envelope.

Or check for surface normals pointed toward or away from a vertical center axis.

I started down that path but it doesn’t work well, considering that some spikes are nearly vertical.

Ah, I see now there’s “floors” and it’s not like a shell with holes.

It looks like SubD geometry so, depending on how the underlying mesh was generated, maybe the holes can be patched to create a solid version of the SubD form?

OP would have to speak to workflow…

You could create a closed form from your (original) shape, scale it down by something between 0.1% and 5% and exclude points inside of this BREP.

OP would have to speak to workflow…

The geometry was indeed generated as a Subd. This is the final stage of my project so its mostly about populating the surface and it doesnt need much flexibility for testing different options etc.
So in that sense the small number of spikes which are generated on the inside are fine to be deleted by hand after baking.

Is there a reason some zones are left kind of empty, whatever the seed and amount of spikes? Can this distribution become more even?

Another question that I have is if its also possible to distribute oriented truncated cones on the surface but which intersect with the shell so they can be used for a boolean difference to create cavities or ‘bites’ in the shell.

Many many thanks!

I started by isolating the outward facing surfaces in your original file. This way I can avoid generating spikes on the “inside” of your object.

Then I noticed there were some spikes being generated on the edges of the openings and at the top/bottom of the object that were at undesired angles. I eliminated this by trimming the surfaces back at the openings and at the top and bottom.

I believe this uneven distribution is due to the varying sizes of the surfaces that make up your object. I split the larger surfaces to make them more equal in size and the distribution seems more even now.

Geometry for spikes_re.gh (8.8 MB)

File weighs in at 8.8 MB - your original geometry is internalized as well as the outward facing surfaces that I isolated and split.


1 Like

Are the spikes to keep predators away? :yum:
Cool project though!