Pixelated Cathedral

Good morning,

I am trying to use grasshopper to parametrically create a skyscraper resembling a pixelated cathedral. From the outside, it will look like a series of poles. I laid out the general arrangement of the foot print. I just need help extruding these circles where they gradually increase in height towards the center of the field. The max height should be around 1100 ft. I want to do it this way so it is easier to adjust the heights as I progress on this project for midterms.


Cathedral.3dm (11.5 MB)

Hi, you could extrude all your circles to one height and create a solid that represents the volume of your building. Then use a boolean intersection between the solid and the extrusions to shorten the extrusions.

Thanks, David. I appreciate your help but I’m looking for a more parametric solution that would allow me to quickly adjust heights as I work through this design considering I am in school so the form will change constantly.

You could create the solid parametrically so that it can be easy changed.

Oh now I understand. Not exactly sure how to do that. Very much a beginner at grasshopper. Any suggestions?

There are many options, that depends on your design. Maybe you can create kind of outlines and use loft.

I’m trying it now. Thanks. Ill let u know if i have any problems

I derived the center points of your circles and used them to make random height square Domain Box “columns”, taller near the center, shorter near the perimeter. SUnion is still grinding away at joining them all into a single ‘Closed Brep’, we shall see how that goes… Beware of wiring that SUnion!


Pixelated Cathedral_2021Oct11b.gh (270.1 KB)

This isn’t fully parametric because the point grid (internalized) is given (from the .3dm file), not adjustable. It’s actually not a grid because the rows “drift” with the curved edge, so the rectangles overlap inconsistently.

1 Like

Thanks Joseph. I’ll check this out too. Looks like what I am going for.

When you say “wiring” SUnion do you mean connecting it to another container?

Yes. A wire between the Box component and the SUnion will attempt to join all the boxes (each a “Closed Brep”) into a single “Closed Brep” with a large open interior. But it takes a very long time and may well fail. Still waiting for it to complete on my copy. This might have gone faster if the grid of points (from circles) were not a skewed grid, which is visible in top view.

You can increase the height, of course, by extending the range of the slider now set to “300”.

Great. I understand. Thank you.

SUnion is still lost in space working on my original version with 14,182 “columns”, and aside from the huge number, it’s easy to see why it’s complicated. The skewed grid is caused by the fact that the two longest edges of the perimeter are not exactly square to each other. The grid points (circles) are parallel to both of those edges, leaving small rectangular gaps at each column’s corners.

I parameterized the grid so ‘pixel_size’ (a slider) can now be increased from 2 in the .3dm file to 30+, as shown below. SUnion is quite fast with only 71 boxes instead of 14K. With some of the side panels removed, those little gaps become tiny artifact columns in what ideally would be open space.


Pixelated Cathedral_2021Oct11c.gh (283.8 KB)

I believe this could work better and faster if the point grid were created square instead of skewed.

Thank you so much. Last question, is there a way to invert the heights of the original file you sent?

I had the idea of using the extrusions as screens from the surrounding traffic creating an interior bowl-like shape. The heights of the perimeter cylinders correspond to the speed of the traffic

I meant that conceptually. I am by no means going to try to precisely measure the speed and have that affect the height

This version implements a square grid, which I think works better. SUnion failed completely though with all the co-planar faces, so I added a “Fudge Factor” (yellow group) of 0.01 to the ‘pixel_size’ value, which is just enough to make SUnion happy.


Pixelated Cathedral_2021Oct11dd.gh (288.0 KB)

Something I see now but didn’t notice before is that while my “taller in the middle” strategy sorta works on ‘H_max’, it fails to adjust ‘H_min’ which should also be greater, eh? As is, there are some columns that get quite low in the middle of the interior space.

Yeah, if you swap the inputs for the first Construct Domain component, like this:


To “own” this code, you must understand every detail. :thinking:

1 Like

Yes that’s what I was imagining. I understand what the H min and H max are. What is the 0.15 in H perimeter?

What do you think it’s for? This is a test…

I think its setting the range for the varying heights the extrusions fit within

It’s a multiply factor, based on distance of each grid point from the center (Average), for the Random height values defined by the other Construct Domain component (‘H_min’ To ‘H_max’). But as I said, it really isn’t implemented correctly because it doesn’t affect the minimum values near the center, only the max values. This allows the bottom of some columns near the center to be lower than what I’d like to see.

Oh that makes more sense why its a decimal.

Earlier today when you first shared the initial script, you said you derived the center of the circles I provided for the point container. What do you mean by derive and how do you do it?