CJ Price

Modeling Approach

To start out, I created a rectangular grid of points to serve as the base of each cylinder. Then, I made a top grid directly over the base grid, but slightly higher (controlled by a z-value slider). Next, I created a pebble location to serve as the attractor point.

Once these three elements were created, I calculated the cylinder height. To do this, I calculated the distance from each point on the base grid to the pebble. Then, I input this distance (times a frequency multiplier) into the sine function. Next, I multiplied the sine function output by an amplification factor and divided this product by a value dependent on the distance calculated earlier. This caused the ripples to diminish as the wave got farther away from the pebble. Lastly, I added a base offset to the sine wave to ensure each cylinder had a height greater than zero.

Then, I applied this sine wave to the top grid height using the Geometry.Translate function. After that, I created cylinders in Dynamo using the Cylinder.ByPointsRadius function. Lastly, I created matching cylinders in Revit using the FamilyInstance.ByPoint function.

Model Geometry
Model Geometry

Code Overview
Code Overview

Left Side Of Code
Left Side Of Code

Middle Of Code
Middle Of Code

Right Side of Code
Right Side of Code