Step 1 · Create a Point Grid

Create a coordinate system you can translate and rotate, then use it to generate a point grid with Dynamo's lacing.


Overview

Create a coordinate system that can be rotated and translated in coordinate space, then use it to generate a point grid that will support the framing geometry in later steps. By the end of this step you will have:

  • Created a coordinate system from Cartesian coordinates.
  • Rotated the coordinate system.
  • Generated a point grid using the coordinate system and Dynamo's lacing functionality.

Objective 1.1: Create a coordinate system

The first step is to create a new coordinate system with inputs for its X, Y and Z coordinates. This lets you position geometry generated in Dynamo anywhere you like — typically to coordinate with your Revit model.

Add the CoordinateSystem.ByOrigin node: in the library, navigate to Geometry ▸ Abstract ▸ Coordinate System and click the node to place it on the graph. It has default inputs, so it creates a coordinate system even with nothing connected — the default origin is XYZ(0, 0, 0).

To drive the location dynamically, connect number sliders into the inputs. Right-click an empty space, search for number and choose Number Slider. Place a slider, copy it, and wire one into the CoordinateSystem.ByOrigin x input and the other into its y input. Finally, expand each slider with its drop-down arrow and set the Max to 10000mm and the Step to 100.

The CoordinateSystem.ByOrigin node driven by two number sliders The coordinate system, with its origin driven by number sliders.

Objective 1.2: Rotate the coordinate system

The coordinate system also needs to rotate, so that any geometry that depends on it downstream transforms with it. Place the CoordinateSystem.Rotate node (it takes a plane and degrees) and connect your CoordinateSystem.ByOrigin into its coordinateSystem input.

Search for the Plane.XY node, place it, and wire it into the plane input. Add a new Number Slider with a Max of 360 and Step of 1, and connect it to the degrees input.

CoordinateSystem.Rotate fed by Plane.XY and a degrees slider Rotating the coordinate system about the XY plane.

The rotated coordinate system in the viewport

The coordinate system that provides the coordinate space for the parametric model is now complete. Select all the nodes, right-click and choose Group, then double-click the placeholder title and give it a concise, meaningful name. Grouping related nodes is strongly recommended — it keeps the graph legible and organised.

The completed, grouped coordinate-system nodes Group related nodes and give the group a clear title.

Objective 1.3: Generate the point grid

The point grid can now be created from the rotated coordinate system. Generating the points from this coordinate system creates a dependency: any change to the coordinate system — its rotation, or the X/Y origin from Objective 1.1 — propagates through the graph and moves the points. This change propagation is a primary principle of procedural modelling, and what differentiates it from standard CAD.

Search for the Point.ByCartesianCoordinates node and place it. Connect CoordinateSystem.Rotate into its cs input.

Point.ByCartesianCoordinates wired to the rotated coordinate system

For the x and y inputs we'll use a number range — a list of numbers — which triggers a Dynamo behaviour called lacing.

Place a List.Range node with an end of 10000.0 and a step of 1000.0, using Number nodes to supply those values, then connect its output into both the x and y inputs of Point.ByCartesianCoordinates.

With the default Shortest lacing, notice two things: the single-value coordinate inputs are promoted to a list (a rank promotion), and the x and y lists are data-matched index-for-index — (0, 0), (1000, 1000), (2000, 2000)… — giving a diagonal line of points, all relative to the rotated coordinate system.

A diagonal line of points produced by Shortest lacing Shortest lacing pairs coordinates index-for-index.

To build a grid instead, right-click Point.ByCartesianCoordinates and choose Lacing ▸ Cross Product. Now each x is paired with every y — (0, 0), (0, 1000), (0, 2000)… — producing a 2D array (a list of lists), where each sub-list is a row of points in the grid.

The full point grid produced by Cross Product lacing Cross Product lacing produces a grid — a list of lists.

The diagram below describes the resulting data structure. Each row is a sub-list; the first index (lists start at 0) selects a row, and the second index selects a point within it. So index [3][5] is the point in the fourth row, sixth column.

Diagram of the point-grid list-of-lists data structure The point grid as a list of lists — [row][column] indexing.

Group the nodes and give the group a meaningful name to complete the step.

The completed, grouped point-grid nodes