# How to create a geometry-node-based generator for columns with a custom side profile and custom amount of sides)

I'm trying to create a geometry node based generator that gives me control over the side profile of a column-like object. I tried to do this with a custom curve window (which can also be accessed by beveling an edge with a custom profile), but I don't know how to adjust the general shape (for example, if I want a square column with 4 vertices, 12 for a circular one). Also, I wanted to control the vertical number of edges so that I can easily create multiple resolutions of this column (so, for example, 20 edges create a smoother side profile than, say, 10 edges)

If my wishes are possible, could someone explain to me how to achieve the desired geometry node setting?

• How do you want to input the profile? A curve in the viewport? Jun 14 at 18:30
• @robin-betts I want to be able to edit the curve like all other curve-editor interfaces and have it affect the profile of the object Like for example when beveling, you have the option to bevel by your custom shape that you can modify by clicking (it looks like a x-y-graph) Jun 14 at 19:33

Here is a solution. Limitations: only the y-displacement of the curve is evaluated. Height of column has to be aligned to z-axis.

The basic idea is, to create a cylinder and move the vertices of its vertical edges along the normals of these edges. This shall be based on the displacements of the vertices of a resampled curve. The original curve will be provided as an input parameter.

Details are explained below.   # How does it work

The following nodes generate the cylinder. Most of its input parameters are published to the Group Input. This makes it easy, to configure the column, that we aim for. The following nodes execute the displacement of the vertices: The direction is determined ty the normal of each vertex. We project this onto the XY-plane, because the normal of the topmost and lowest vertex is not orthogonal to the z-axis. We normalize this, so that we can define the length by a calculated value, that I called Y-Displacement.

The following nodes calculate this value: In the lower frame, we resample the profile curve, so that its number of vertices corresponds to the number of side segments of the cylinder. We do this, because, we want to take the first vertex of the curve, to modify the indices of the topmost segment and so on.

We calculate a z-index, to map the segments to the indices. The vertices of a cylinder are organized counterclockwise for each side segment from top to bottom.

Next we use the calculated z-index to access the position of the corresponding vertex of the curve, by using a Sample Index node. The y-coordinate of this position is the calculated Y-Displacement.