Lesson 2.4Lesson 2.4 · Grasshopper Basics
Your First Definition
Curve to points to circles - a real parametric result, built end to end
Everything so far, in one working machine: a curve becomes points becomes circles - and two sliders drive the whole thing live.
Time to build. You have met the canvas, the blocks and the wires; now we assemble them into a real definition that produces geometry you can steer.
The classic first build is deliberately humble - circles spaced along a curve - but it is a complete parametric system: an input, an operation, a generated result, and live controls. Build it once with understanding and you have the template for almost everything that follows.
Input -> operation -> result, two sliders, one group. This is the skeleton of everything.
Set up the input: reference a curve
Every definition starts with inputs, and ours is a single curve. Draw any open curve in Rhino - an arc, a freeform interpolated curve, whatever you like. Then, in Grasshopper, place a Curve parameter (double-click the canvas, type curve), right-click it, and choose Set one Curve; the cursor jumps to Rhino and you click your curve. The parameter now references that Rhino object - it does not copy it, it points at it, so if you reshape the curve in Rhino the whole definition updates.
That referencing relationship is worth pausing on. Your curve lives in Rhino; your logic lives in Grasshopper; the Curve parameter is the bridge. This is the Module 1 idea 'from Rhino to Grasshopper' made concrete - Rhino provides the hand-modelled starting geometry, Grasshopper does the parametric work on it. You could instead build the curve entirely inside Grasshopper (from points, or a primitive), but referencing a Rhino curve is the most common and most tangible way to begin.
With the curve referenced and previewing, you have an input feeding an empty definition. Now we make it do something.
Set one Curve = reference, not copy. Reshape it in Rhino and the whole definition follows.
The operation: divide the curve into points
We want evenly spaced positions along the curve, so we reach for Divide Curve. Place it, then wire your Curve parameter's output into its C input. Add a Number Slider, set it to integer, range 1 to 40, and wire it into the N input - N is the number of segments. Divide Curve's P output now produces a list of points spaced equally along the curve.
Drop a Panel on that P output and look: a list of point coordinates, one per division. Drag the N slider and watch the list grow and shrink live in the Panel and in the Rhino viewport. This is the moment the whole course clicks for many people - you are not placing points, you are describing a rule ('divide this curve into N equal parts') and the points are its consequence. Change N and every point re-solves; change the curve and they redistribute along the new shape.
A subtlety worth naming: an integer slider matters here. N is a count, and a count of 12.5 is meaningless. Right-clicking the slider and setting it to integer stops it ever feeding a fractional value into N. Matching a parameter's type to its meaning - integer for counts, float for sizes - is a small habit that prevents a lot of orange-warning confusion.
It is worth being precise about what Divide Curve does, because the name misleads a little. N is the number of segments, and dividing a curve into N segments produces N+1 points on an open curve (the two ends plus the interior divisions), or N points on a closed one where the ends coincide. So a slider reading 12 on an open curve gives you thirteen points. This is exactly the kind of off-by-one detail that a Panel on the P output settles instantly - rather than assume, you read the actual count. There are sibling components too: Divide Length spaces points a fixed distance apart, and Divide Distance does likewise from the start; Divide Curve is the equal-count version and the one to reach for when you want a specific number of items regardless of the curve's length.
N is a count -> integer slider. R is a size -> float slider. Match type to meaning.
The generated result: a circle at every point
Now the payoff. We will place a circle at each division point, all sized by a second slider. Place a Circle component. It needs a plane or centre point and a radius; wire the P output of Divide Curve into the Circle's plane/centre input (P), and add a second Number Slider - this one a floating-point value, range say 0.1 to 2.0 - wired into the Circle's R (radius) input.
Here is the quietly magical part: Divide Curve produced a list of, say, twelve points, and you wired that list into a component expecting one centre. Grasshopper does not complain - it repeats the operation for every item in the list, giving you twelve circles automatically. This automatic 'do it for each item' behaviour is one of Grasshopper's most important habits (we formalise it as data matching in Module 3), and you just used it without ceremony. One Circle component, a whole ring of circles.
Step back and read what you built: a curve (input) drives a set of points (operation), which drive a set of circles (result), and two sliders - count and radius - steer the entire thing live. Drag N and the number of circles changes; drag R and they all resize together. That is a genuine parametric definition. It is small, but structurally it is the same as a facade or a tower - inputs, operations, generated geometry, live controls.
Notice too that Circle wanted a plane (a centre point plus an orientation), and you gave it bare points. Grasshopper again fills the gap with a sensible default: a point supplied where a plane is expected becomes a world-XY plane at that point, so every circle lies flat. That is fine for a first build, but it hints at the next level of control - if you fed Divide Curve's T (tangent) output in to build a plane aligned to the curve, the circles would tilt to follow it like the ribs of a boat. You do not need that yet; the point to absorb is that the same three-stage skeleton accepts richer inputs as your ambition grows, without changing its shape.
A list of 12 points into a component wanting 1 -> Grasshopper does it 12 times. Free repetition.
Read the result, then tidy with a group
Before celebrating, read what you made. Keep a Panel on the point list and glance at the counts; toggle Circle's preview on and the intermediate points' preview off so the viewport shows only the clean result. Sweep both sliders through their ranges and watch behaviour at the extremes - N at 1, N at 40, R tiny, R large. Reading and sanity-checking a result is a real skill; a definition that looks right at one slider value can misbehave at another, and you want to discover that now, not in a review.
Then tidy the canvas into a group. Select the components that belong together - Curve, Divide Curve, Circle and their sliders - and press Ctrl+G (Command+G on Mac) to wrap them in a group: a coloured, named box that moves as one and documents intent. Right-click the group to rename it ('Circles along curve') and recolour it. Groups are not decoration; on a definition of any size they are how you and your collaborators navigate. A scribble (a text note on the canvas) near the sliders - 'N = count, R = radius' - is the other cheap documentation habit worth starting now.
Finally, if you want real Rhino objects - to dimension, render or export - select the Circle component, right-click, and Bake the circles into the Rhino document. The definition stays live for further tweaking; baking just takes a snapshot. It is worth baking onto a named layer so the results do not vanish into the default layer, and remember that a re-bake after changing a slider adds a second set of objects rather than updating the first - baked geometry has no memory of the definition that made it. You have now completed the full loop the course promised in Module 0: you designed a rule, and the geometry followed.
Ctrl+G to group, rename it, add a scribble. Bake only when you need real Rhino objects.
Curve parameter (Set one Curve)
References a Rhino curve into the definition
Points at the Rhino object rather than copying it - reshape the curve and the definition updates.
Divide Curve
Splits a curve into N equal segments
C = curve, N = count (use an integer slider); P output is the list of division points you build on.
Circle
Creates a circle from a centre/plane and radius
Feed the point list into its centre and a float slider into R to get one circle per point automatically.
Group (Ctrl+G)
A named, coloured box around related components
Documents intent and moves as one unit. Essential for any definition you will revisit.
Bake
Snapshots live geometry into real Rhino objects
Use when you need to dimension, render or export; the definition stays live afterward.
Workshop - build it, break it, extend it
Build the canonical first definition end to end, confirm it is truly parametric, then push it one honest step further so it is yours, not a copied recipe.
Rhino 3D with Grasshopper. No plug-ins.
Goal: a complete, live, tidied parametric definition you understand fully Inputs: Grasshopper open, one open curve drawn in Rhino Time: ~35 minutes
- 1Reference your Rhino curve into a Curve parameter (right-click > Set one Curve).
- 2Add Divide Curve, wire the curve into C, and drive N with an integer Number Slider (range 1 to 40). Put a Panel on P to see the point list.
- 3Add a Circle component, wire the P point list into its centre input, and drive its radius R with a floating-point slider (range 0.1 to 2.0).
- 4Confirm it is parametric: drag N and watch the number of circles change; drag R and watch them all resize. Reshape the curve in Rhino and watch everything follow.
- 5Read the result at the extremes - N = 1, N = 40, R tiny, R large - and note any behaviour that surprises you.
- 6Select the whole thing and group it (Ctrl+G / Command+G), rename the group, and add a scribble labelling the two sliders. Then bake the circles into Rhino.
- 7Extend it: add an Expression on the radius input (for example R*index so circles grow along the curve), or loft the circles into a surface. Keep only what you understand.
You’ll walk away with
A saved .gh definition producing circles along a curve, tidied into a named group, plus one screenshot at a low N and one at a high N, and a sentence describing your extension.
Three altitudes on the same idea
Read the band that fits you — or all three.
This tiny definition is the skeleton of real work. Swap the curve for a building edge, the circles for structural columns or balcony plates, and the count/radius sliders for bay spacing and member size, and you have a schematic massing tool. Build the habit of naming groups and matching slider types now; on a project-scale definition those habits are what let you hand the file to an engineer or a colleague and have them understand it.
Circles along a curve is a screen, a lighting run or a tile field in disguise. Replace circles with a pendant, a perforation or a slat profile, keep the two sliders as spacing and size, and you have a parametric fixture you can tune live against the room. Baking gives you clean geometry to dimension or send to a fabricator - and because it is parametric, the client's 'can we have more, smaller ones?' is one slider drag, not a redraw.
Build this from memory until you can do it without a tutorial - it is the 'hello world' of Grasshopper. Once curve to Divide Curve to Circle is muscle memory, you have a template you will reuse in nearly every exercise this course sets. Then push it: what if the radius came from a second slider through an expression? What if you lofted the circles? Small extensions to a definition you fully understand teach more than a big one you copied.
“Because I wired a list of points into a component that wants one point, I must have made a mistake.”
Do it yourself
Consolidate - build it in your head, then in the software.
- 1What are the three stages of this definition - input, operation, result - and which component is each?
- 2Why should the N (count) slider be an integer while the R (radius) slider is a float?
- 3You wired a list of 12 points into a Circle that wants one centre. Why do you get 12 circles?
- 4What does grouping the components do, and why bother on a definition this small?
- 5When would you bake, and what stays behind on the canvas after you do?
The one line to carry out
Peer-reviewed journals & authoritative standards
- 01Mode Lab - The Grasshopper Primer (Third Edition) — grasshopperprimer.com (free online edition), 2020.
- 02Grasshopper - Algorithmic modeling for Rhino (official) — Robert McNeel & Associates, 2026.
- 03Rhino Developer - Grasshopper guides — Robert McNeel & Associates, 2026.
- 04Woodbury, R. - Elements of Parametric Design — Routledge, 2010.
You have built a working definition and met, in passing, the behaviour where one component acts on a whole list of points. That behaviour - how Grasshopper organises data into lists and trees - is the make-or-break concept of the next module. Module 3 takes it head on.
The author
Amogh N P
Architect, interior designer, and creative polymath. Studio Matrx began in his notebooks — his vision of design made honest, useful, and open to everyone. Its Academy is written and taught in his memory, and free, forever.
More about Amogh →