From computational-design-skills
Provides reference for parametric design methodology, data structures, constraint systems, Grasshopper/Dynamo patterns, and associative geometry in AEC computational design.
npx claudepluginhub amanbh997/claude-skills-for-computational-designersThis skill uses the workspace's default tool permissions.
This skill provides a complete reference for parametric design methodology as applied to architecture, engineering, and construction. It covers the intellectual framework, data structures, constraint logic, tool-specific taxonomies for Grasshopper and Dynamo, associative geometry patterns, and professional best practices.
Delivers foundational paradigms like parametric and generative design, pioneers, tools landscape, core concepts, and skill routing for AEC computational design tasks. Auto-activates on detection.
Generates Python scripts for FreeCAD CAD: 3D models, parametric objects, Part/Mesh/Sketcher, workbenches, PySide GUIs, Coin3D scenegraph manipulation, macros, and automation.
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
This skill provides a complete reference for parametric design methodology as applied to architecture, engineering, and construction. It covers the intellectual framework, data structures, constraint logic, tool-specific taxonomies for Grasshopper and Dynamo, associative geometry patterns, and professional best practices.
A static design is a fixed artifact — a single geometric configuration with hard-coded dimensions. Changing one element requires manually adjusting every dependent element. A parametric design is a system of relationships: a directed graph of inputs, transformations, and outputs where modifying any input propagates changes through the entire dependency chain automatically.
The distinction is not merely about sliders. Parametric thinking means encoding design intent rather than design outcome. The designer authors a set of rules that describe a family of possible designs, not a single instance.
Key characteristics of parametric models:
Every parametric definition follows a three-stage pipeline:
INPUTS LOGIC OUTPUTS
─────────────── ───────────────────── ──────────────────
Parameters Transformations Geometry
- Sliders - Mathematical ops - Points, Curves
- Toggles - Geometric ops - Surfaces, Solids
- Points - Conditional branching - Meshes
- Geometry refs - Data restructuring - Data (areas, etc.)
- Data files - Constraint solving - Text, Reports
- User text - Optimization loops - Fabrication data
Inputs define the design space. They must be carefully named, ranged, and organized so that every combination within the parameter space produces a valid (even if suboptimal) output.
Logic is the design intelligence — the rules, relationships, and transformations that encode the designer's intent. This is where computational design expertise lives.
Outputs are the artifacts consumed by downstream workflows: visualization, analysis, documentation, fabrication.
The most critical skill in parametric modeling is translating design intent into computable relationships. This requires decomposing design decisions into:
Independent variables are the inputs the designer directly controls. They are the sliders, number inputs, point positions, and toggle switches at the top of the dependency graph. They have no upstream dependencies.
Dependent variables are computed from independent variables through the logic chain. They cannot be directly set — only influenced by changing their upstream inputs.
Intermediate variables sit between inputs and outputs. They are dependent on upstream inputs but serve as inputs to downstream logic. Identifying these is critical for modular definition design.
Rules for parameter identification:
Not all constraints are equal. Parametric models encode a hierarchy of constraint strength:
| Priority | Constraint Type | Example | Behavior |
|---|---|---|---|
| 1 (Highest) | Legal/Code | Setback lines, FAR limits | Hard boundary, never violated |
| 2 | Structural | Maximum span, minimum depth | Hard boundary with safety factor |
| 3 | Functional | Minimum room area, corridor width | Soft boundary, can flex slightly |
| 4 | Environmental | Solar access, wind comfort | Optimization target, not hard limit |
| 5 | Aesthetic | Proportional ratios, rhythm | Preference, fully negotiable |
| 6 (Lowest) | Exploratory | Novel geometries, experiments | No constraint, free exploration |
Constraint hierarchies determine what happens when parameters conflict: higher-priority constraints override lower-priority ones.
Explicit modeling defines geometry by its absolute coordinates and dimensions. A wall is a box at position (0,0,0) with width 6m, height 3m, thickness 0.2m.
Associative modeling defines geometry by its relationships. A wall starts at point A, ends at point B, has height equal to floor-to-floor parameter minus slab thickness, and thickness from the wall-type lookup table. Moving point A moves the wall. Changing the floor height changes the wall height.
Associative modeling is the foundation of parametric design. Every geometry element is defined by its relationships, not its absolute state.
Use parametric when:
Avoid parametric when:
The most fundamental data structure. An ordered collection of elements accessed by zero-based index.
Operations:
i. Zero-based in Grasshopper and Python; zero-based in Dynamo.a to b. Python: list[a:b]. GH: SubList.Merge. Dynamo: List.AddItemToEnd.Reverse List. Dynamo: List.Reverse.Sort List. Dynamo: List.SortByKey.Cull Pattern, Dispatch. Dynamo: List.FilterByBoolMask.Data trees are Grasshopper's hierarchical data structure — the single most important concept to master for productive Grasshopper work.
Path Anatomy:
A path is a sequence of integers in curly braces: {A;B;C}. Each integer represents a level in the hierarchy. A branch is a list of items at a specific path.
{0;0} → [item0, item1, item2] Branch 0 of Group 0
{0;1} → [item3, item4] Branch 1 of Group 0
{1;0} → [item5, item6, item7, item8] Branch 0 of Group 1
{1;1} → [item9] Branch 1 of Group 1
Core Operations:
| Operation | Effect | When to Use |
|---|---|---|
| Flatten | Collapses all branches into a single list {0} | When you need all items regardless of structure |
| Graft | Wraps every item in its own branch | When you need each item processed independently |
| Simplify | Removes shared path prefix | When tree has unnecessarily deep paths |
| Flip Matrix | Transposes branches and indices (rows↔columns) | When you need to reorganize grid data |
| Unflatten | Restores tree structure from a flat list using a guide tree | When recovering structure after flat operations |
| Prune | Removes branches with fewer than N items | When cleaning sparse trees |
| Trim | Removes path levels from left or right | When aligning trees with different depth |
| Path Mapper | Remaps paths using lexical patterns | Advanced restructuring |
Matching Algorithms:
When two or more data trees enter a component with different structures, Grasshopper must decide how to pair items:
| Algorithm | Behavior | Use Case |
|---|---|---|
| Longest List | Repeats the last item of shorter lists | Default. Most common. |
| Shortest List | Truncates longer lists to match shortest | When pairing must be 1:1 with no repetition |
| Cross Reference | Every item paired with every other item | Combinatorial exploration (N×M results) |
Dynamo uses nested Python-style lists instead of tree paths. A 2D list is a list of lists. A 3D list is a list of lists of lists.
Levels and Lacing:
Dynamo's @L1, @L2 syntax specifies which nesting level a node should operate on:
@L1 — Operate on the outermost list.@L2 — Operate on sub-lists within the outermost list.@L3 — Operate on sub-sub-lists.Lacing options control how inputs of different lengths combine:
For topological relationships (adjacency, connectivity, flow), graph structures are essential:
AEC applications: circulation analysis, structural load paths, utility routing, spatial adjacency diagrams, pedestrian flow networks.
Dictionaries map unique keys to values. Useful for:
Grasshopper added native dictionary support in later versions. Dynamo supports dictionaries natively. Python scripting in both platforms has full dictionary support.
| Pitfall | Symptom | Fix |
|---|---|---|
| Accidental flatten | All items in one branch, lost grouping | Use Simplify instead if paths are too deep |
| Graft before cross-reference | Exponential item count, slow/crash | Only graft when genuinely needed |
| Mismatched tree structures | Unexpected item pairing, wrong geometry | Use Param Viewer to inspect trees before connecting |
| Path Mapper syntax error | Null output, orange component | Test with small data first, verify path pattern |
| Flip Matrix on jagged tree | Missing items, wrong dimensions | Ensure all branches have equal item count first |
| Forgetting Simplify after multiple operations | Paths like {0;0;0;0;0} accumulating depth | Simplify periodically to keep paths clean |
| Operating on wrong tree level | Component receives tree when expecting item | Match tree structures or use Branch component to extract |
Every parameter needs a domain — a minimum and maximum value that define the range of valid designs. Setting these ranges requires domain expertise:
Principles:
Domains in Grasshopper represent numerical intervals: Domain(A, B) where A is the start and B is the end.
Remapping transforms a value from one domain to another:
Remap(value, source_domain, target_domain)
Common remapping patterns:
Remap(value, {min, max}, {0, 1}) — Useful for blending, interpolation.Remap(slider_0_to_1, {0,1}, {2.4m, 4.2m}) — Map abstract slider to floor height.Remap(value, {0,1}, {1,0}) — Reverse the influence direction.Floor_Height_m not Slider_1.| Sequence | Generation | Use Case |
|---|---|---|
| Range | Start to end with N items | Even division of an interval |
| Series | Start, step, count | Regular spacing with known increment |
| Random | Domain + seed + count | Organic variation, testing robustness |
| Fibonacci | Each number = sum of two preceding | Natural growth patterns, phyllotaxis |
| Gaussian | Normal distribution around mean | Realistic variation (material properties, tolerances) |
| Sine/Cosine | Periodic oscillation | Wave-like facades, undulating rooflines |
| Geometric | Each term = previous × ratio | Exponential growth/decay, logarithmic spirals |
Not all parameters have equal impact on the design. Sensitivity analysis identifies which parameters most influence key performance indicators:
High-sensitivity parameters deserve finer slider resolution and more exploration. Low-sensitivity parameters can be fixed early to reduce design space dimensionality.
| Constraint | Description | Degrees Removed |
|---|---|---|
| Coincident | Two points share the same location | 2 (2D) or 3 (3D) |
| Tangent | Curve meets surface/curve without crossing | 1-2 |
| Perpendicular | Two elements meet at 90 degrees | 1 |
| Parallel | Two elements maintain constant orientation offset | 1 |
| Co-planar | Points or lines lie on the same plane | 1 per point |
| Concentric | Two arcs/circles share a center | 2 (2D) or 3 (3D) |
| Symmetric | Elements mirror across an axis | Varies |
| Collinear | Points lie on the same line | 1 per point |
| On-surface | Point constrained to a surface | 1 (reduces 3D to 2D) |
| On-curve | Point constrained to a curve | 2 (reduces 3D to 1D) |
A 2D point has 2 DOF. A 3D point has 3 DOF. Each constraint removes DOF. A fully constrained system has 0 remaining DOF — every element's position is uniquely determined.
When an input changes, constraints must propagate through the model:
Geometry Primitives: Point, Vector, Plane, Line, Circle, Arc, Curve, Surface, Brep, Mesh, SubD Primitive Parameters: Boolean, Integer, Number, Text, Domain, Color, Matrix, Time, Transform, Data Path, File Path Input: Panel, Slider, Toggle, Button, Value List, Gradient, Graph Mapper, MD Slider, Digit Scroller Special: Data, Geometry Pipeline, Group, Cluster Input/Output
Typical Use: Every definition begins with Params for input. Geometry Pipeline pulls referenced Rhino geometry into GH. Graph Mapper provides non-linear remapping curves.
Operators: Addition, Subtraction, Multiplication, Division, Modulus, Power, Absolute, Negative, Maximum, Minimum Trigonometry: Sine, Cosine, Tangent, Arcsine, Arccosine, Arctangent, Degrees, Radians Polynomials: Evaluate, Factorial, Log, Ln, Exponential Domain: Construct Domain, Deconstruct Domain, Remap Numbers, Bounds, Consecutive Domains Matrix: Construct Matrix, Deconstruct Matrix, Multiply Matrix, Invert Matrix, Transpose Matrix Script: Expression (single-line formula evaluation)
List: List Item, List Length, Reverse List, Sort List, Shift List, Insert Items, Replace Items, Split List, Sub List, Dispatch, Cull Pattern, Cull Index, Cull Nth, Partition List, Combine Data, Merge, Entwine, Weave, Zip/Unzip Tree: Flatten, Graft, Simplify, Unflatten, Prune Tree, Trim Tree, Flip Matrix, Path Mapper, Tree Branch, Tree Item, Tree Statistics, Explode Tree, Construct Path, Deconstruct Path, Replace Paths, Relative Item, Split Tree, Stream Filter, Stream Gate Text: Text Join, Text Split, Format, Concatenate, Characters, Text Length, Replace Text, Match Text, RegEx
Point: Construct Point, Deconstruct Point, Distance, Closest Point, Point Groups, Sort Along Curve, Project Point, Pull Point Vector: Unit Vector, Vector 2Pt, Vector Length, Amplitude, Reverse, Cross Product, Dot Product, Angle, Rotate Plane: XY/XZ/YZ Plane, Construct Plane, Deconstruct Plane, Align Plane, Evaluate Plane, Plane Fit, Plane Normal, Plane Closest Point Grid: Rectangular Grid, Hexagonal Grid, Radial Grid, Triangular Grid, Populate 2D, Populate 3D, Populate Geometry
Primitives: Line, Polyline, Circle, Arc, Ellipse, Rectangle, Polygon Splines: Interpolate Curve, Nurbs Curve, Bezier Span, Catenary, Geodesic Analysis: Evaluate Curve, Curvature, Length, Closed, Discontinuity, Curve CP (Closest Point), End Points, Tangent Division: Divide Curve, Divide Length, Divide Distance, Shatter, Contour Utility: Offset Curve, Fillet, Chamfer, Extend, Trim, Join Curves, Explode, Flip Curve, Simplify Curve, Rebuild Curve, Project Curve, Pull Curve, Seam
Primitives: Line, Polyline, Circle, Arc, Ellipse, Rectangle, Polygon Splines: Interpolate Curve, Nurbs Curve, Bezier Span, Catenary, Geodesic Analysis: Evaluate Curve, Curvature, Length, Closed, Discontinuity, Curve CP (Closest Point), End Points, Tangent Division: Divide Curve, Divide Length, Divide Distance, Shatter, Contour Utility: Offset Curve, Fillet, Chamfer, Extend, Trim, Join Curves, Explode, Flip Curve, Simplify Curve, Rebuild Curve, Project Curve, Pull Curve, Seam
Primitives: Plane Surface, Bounding Box, Sphere, Cylinder, Cone, Torus, Box Freeform: Loft, Sweep1, Sweep2, Patch, Network Surface, Edge Surface, Ruled Surface, Extrude, Rail Revolution, Surface From Points Analysis: Evaluate Surface, Surface CP, Surface Curvature, Osculating Circles, Deconstruct Brep, Area, Volume, IsPlanar, Surface Frames Utility: Offset Surface, Isotrim (SubSrf), Divide Surface, Divide Domain², Reparameterize, Retrim, Brep Join, Cap, Flip, Untrim
Primitives: Mesh Box, Mesh Sphere, Mesh Plane, Construct Mesh, Mesh Surface, Mesh Brep Triangulation: Delaunay Mesh, Voronoi, Convex Hull, Mesh from Lines, QuadRemesh Analysis: Mesh Eval, Mesh CP, Face Normals, Mesh Area, Mesh Volume, Mesh Edges, Naked/Clothed Edges, Deconstruct Mesh Utility: Mesh Join, Mesh Split, Mesh Smooth, Weld, Unweld, Flip, Cull Faces, Cull Vertices, Mesh Offset, Thicken Mesh, Blur, Reduce
Affine: Move, Rotate, Scale, Mirror, Orient, Shear, Project Array: Linear Array, Rectangular Array, Polar Array, Curve Array, Box Array Morph: Box Morph, Surface Morph, Twisted Box, Sporph (Surface Map), Bend, Taper, Flow Along Curve, Maelstrom
Physical: Brep|Brep, Mesh|Mesh, Brep|Mesh, Curve|Curve, Curve|Brep, Curve|Mesh, Line|Plane, Brep|Plane, Mesh|Plane, Clash Detection Mathematical: Point In Curve, Point In Brep, Point In Mesh, Curve|Self, Curve Proximity, Brep Proximity Region: Region Union, Region Difference, Region Intersection, Region XOR, Split Brep, Trim Solid, Solid Union, Solid Difference, Solid Intersection
Preview: Custom Preview, Preview (with material), Point Display, Dot Display Color: Colour Swatch, Gradient, Colour RGB, Colour HSL Dimensions: Linear Dimension, Aligned Dimension, Angular Dimension, Annotation
Points: Point.ByCoordinates, Point.Origin, Point.Add, Point.Project Curves: Line.ByStartPointEndPoint, NurbsCurve.ByControlPoints, NurbsCurve.ByPoints, Circle.ByCenterPointRadius, Arc.ByThreePoints, PolyCurve.ByPoints, Rectangle.ByWidthLength, Curve.Offset, Curve.Extrude Surfaces: Surface.ByLoft, Surface.ByPatch, Surface.ByPerimeterPoints, Surface.Offset, Surface.PointAtParameter, Surface.NormalAtParameter, NurbsSurface.ByControlPoints, NurbsSurface.ByPoints Solids: Solid.ByUnion, Solid.ByLoft, Solid.Difference, Cuboid.ByLengths, Sphere.ByCenterPointRadius, Cylinder.ByPointsRadius, Cone.ByPointsRadii Meshes: Mesh.ByPointsFaceIndices, Mesh.TriangleCount, Mesh.Vertices Coordinate Systems: CoordinateSystem.ByOriginVectors, CoordinateSystem.Rotate, CoordinateSystem.Scale, Geometry.Transform
Typical Use: Geometry creation in Dynamo is node-based with explicit method names — highly readable for debugging and sharing.
Operators: +, -, *, /, %, Math.Pow, Math.Sqrt, Math.Abs, Math.Round, Math.Floor, Math.Ceiling, Math.Clamp Trigonometry: Math.Sin, Math.Cos, Math.Tan, Math.Asin, Math.Acos, Math.Atan, Math.Atan2, Math.DegreesToRadians, Math.RadiansToDegrees Formulas: Formula node (accepts multi-variable expressions), Code Block (inline DesignScript)
Create: List.Create, Number Sequence, Number Range, List.OfRepeatedItem, List.Empty, List.Cycle Modify: List.AddItemToEnd, List.AddItemToFront, List.Insert, List.RemoveItemAtIndex, List.Reverse, List.Sort, List.SortByKey, List.Shuffle, List.Flatten, List.Sublists, List.Chop, List.Combine, List.SetDifference, List.SetIntersection, List.SetUnion Query: List.Count, List.FirstItem, List.LastItem, List.RestOfItems, List.GetItemAtIndex, List.IsEmpty, List.ContainsItem, List.AllIndicesOf, List.UniqueItems Advanced: List.Map, List.Reduce, List.Scan, List.FilterByBoolMask, List.GroupByKey, List.Transpose, List.DiagonalRight, List.DiagonalLeft
String.Concat, String.Contains, String.Split, String.Join, String.Replace, String.Substring, String.ToNumber, String.FromObject, String.StartsWith, String.EndsWith, String.IndexOf, String.Length, String.ToUpper, String.ToLower, String.PadLeft, String.PadRight
Input: Boolean, Number, Integer, String, File Path, Directory Path, Number Slider Logic: If, ScopeIf, Not, And, Or, ==, !=, <, >, <=, >= Scripting: Code Block (DesignScript), Python Script, Custom Node Data: Object.Type, Object.IsNull, List.Create, Dictionary.ByKeysValues, Dictionary.ValueAtKey
Elements: Element.GetParameterValueByName, Element.SetParameterByName, Element.GetLocation, Element.Geometry, Element.BoundingBox, Element.Delete Selection: Categories, All Elements of Category, Select Model Element, Select Face, Select Edge Create: Wall.ByCurveAndHeight, Floor.ByOutlineTypeAndLevel, FamilyInstance.ByPoint, FamilyInstance.ByLine, Level.ByElevation, Room.ByLocation, StructuralFraming.BeamByCurve, ModelCurve.ByCurve, FilledRegion.ByCurves Views: Sheet.ByNameNumberTitleBlockAndViews, Viewport.Create, FloorPlanView.ByLevel, SectionView.ByBoundingBox, View.SetFilterOverrides Parameters: Parameter.ParameterByName, GlobalParameter.ByName, Element.OverrideColorInView
Typical Use: Dynamo's primary value proposition is deep Revit integration. These nodes allow reading, creating, and modifying Revit elements programmatically — enabling automation of documentation, element placement, and parameter management at scale.
Description: Create a 2D point grid, deform it (e.g., via attractors or mathematical functions), create a surface through the points, then panelize the surface into fabrication-ready panels.
Inputs: Grid dimensions (U count, V count), grid spacing, deformation parameters (attractor points, Z-function), panel type Logic Flow: Rectangular Grid → Move points (Z = f(x,y) or attractor-based) → Surface from Points → Divide Domain² → Isotrim → Optional: Box Morph custom panel geometry Output: Panelized surface with individual panel geometry, areas, and normal vectors Common Issues: Non-planar panels (check planarity tolerance), extreme curvature causing panel overlap, data tree mismatch between division and morph operations.
Description: Define building sections as curves at intervals, loft between them to create a continuous surface, then offset inward and outward for wall thickness.
Inputs: Section curves (drawn or generated), loft type (normal, loose, tight), shell thickness Logic Flow: Section Curves → Loft → Offset Surface (inward + outward) → Brep Join → Cap Holes Output: Closed solid shell representing building envelope Common Issues: Loft twisting (check seam alignment on curves), offset failure on high-curvature regions, non-manifold edges after joining.
Description: Place elements on a grid and vary their size, rotation, or other properties based on distance to one or more attractor points.
Inputs: Grid of base points, attractor point(s), influence radius, min/max scale, element geometry Logic Flow: Grid Points → Distance to Attractor → Remap Distance to {scale_max, scale_min} (inverse: closer = larger) → Scale/Rotate element at each point → Display Output: Field of elements with gradient variation responding to attractor position Common Issues: Division by zero when attractor coincides with grid point, influence falloff function choice (linear vs. inverse square vs. Gaussian), multiple attractor blending.
Description: Divide a freeform surface into UV cells and place custom 3D modules (brise-soleil, curtain wall units, cladding tiles) at each cell, oriented to the surface normal.
Inputs: Target surface, U/V division counts, module geometry, scale factor Logic Flow: Divide Surface → Surface Frames at division points → Construct target planes from frames → Box Morph (or Orient) module from reference plane to each target plane Output: Array of oriented modules populating the surface Common Issues: Module orientation flipping on surface seams, UV distortion on highly curved regions, scale compensation for varying cell sizes.
Description: Sweep a 2D profile (cross-section) along a 3D curve to create elongated geometry (structural members, handrails, ductwork, moldings).
Inputs: Profile curve(s), rail curve(s), profile orientation option Logic Flow: Define profile in reference plane → Sweep1 along single rail or Sweep2 between two rails → Optional: Cap ends Output: Solid geometry following the path with consistent cross-section Common Issues: Profile twist along curved paths (adjust roadlike vs. freeform option), self-intersection on tight curves, profile scaling on diverging two-rail sweeps.
Description: Generate a building form by stacking floor plan outlines vertically, varying each floor's geometry parametrically (scaling, rotating, offsetting).
Inputs: Base floor plan curve, number of floors, floor-to-floor height, per-floor transformations (scale factor, rotation angle, XY offset) Logic Flow: Base Curve → Copy to Z-levels → Transform each copy (Scale from centroid, Rotate, Move XY) → Loft between floors → Optional: Floor plate from each curve Output: Building massing with articulated floor-by-floor variation Common Issues: Loft twisting between rotated floors (match seam points), structural feasibility of aggressive floor offsets, floor area calculation per level.
Description: Combine, subtract, or intersect solid volumes to create complex building geometry from simple primitives.
Inputs: Solid volumes (boxes, cylinders, extruded curves, etc.), operation type (union, difference, intersection) Logic Flow: Create primitive solids → Position and orient each → Apply Boolean operation → Clean result Output: Complex solid geometry derived from Boolean combinations Common Issues: Non-manifold results from tangent surfaces, tolerance issues with near-coincident faces, performance degradation with many sequential Booleans (prefer combining operands first, then single Boolean).
Description: Define a reference box around source geometry, define a target twisted/deformed box on a surface or in space, and morph the geometry from reference to target.
Inputs: Source geometry, reference box (axis-aligned bounding box), target box (twisted box from surface cell or manually defined) Logic Flow: Source Geometry → Bounding Box (reference) → Define target Twisted Box(es) → Box Morph → Output deformed geometry Output: Source geometry deformed to conform to target box topology Common Issues: Distortion quality depends on source geometry resolution (more control points = smoother deformation), extreme box distortion causes self-intersection, performance scales with geometry complexity.
| Do | Don't |
|---|---|
| Name every component with a descriptive label | Leave default names like "Move" or "List Item" |
| Group related components into labeled groups | Create sprawling definitions with no organization |
| Use Relay components to create clean wire paths | Allow spaghetti wiring across the canvas |
| Internalize referenced geometry for portability | Leave external references that break when Rhino file changes |
| Use Clusters for repeated logic patterns | Copy-paste the same component chain 10 times |
| Set meaningful slider ranges based on domain knowledge | Use default 0-100 slider for a floor height parameter |
| Preview only the outputs you need to see | Preview every component (massive performance hit) |
| Build incrementally, testing at each step | Build the entire definition before testing any output |
| Document complex logic with Scribble/Panel notes | Assume future-you will remember the logic |
| Use data dam components during development | Let every change propagate through a huge definition |
| Save incremental versions of complex definitions | Overwrite the same file and lose recoverable states |
| Profile performance to find bottlenecks | Assume slow = "need faster computer" |
Internalize vs. Reference:
Mesh Resolution:
MeshingParameters in scripting) rather than relying on defaults.Data Tree Efficiency:
Data Dam to pause propagation during development.Entwine over repeated Merge for combining multiple branches.Trim Tree and Simplify to keep path depths minimal.General:
ProjectName_SystemName_v##.gh (e.g., TowerA_Facade_v03.gh).Grasshopper .gh files are XML-based and can be diffed/merged with appropriate tools, though practical merge conflict resolution is difficult. Recommended approach:
.gh files as binary (no merge, always full replacement)..ghcluster files — these can be independently versioned..dyn files are JSON-based and slightly more diff-friendly but still complex.Groups are visual containers — they organize the canvas but have no functional effect.
Clusters are functional encapsulation — they wrap a set of components into a single reusable node with defined inputs and outputs.
When to Group: Organize related components visually. Use consistent color coding:
When to Cluster:
Cluster best practices:
.ghcluster files in a shared team library.| Task | Grasshopper Approach | Dynamo Approach |
|---|---|---|
| Freeform surface design | Rhino geometry + GH manipulation | Limited — Dynamo geometry kernel less suited for complex NURBS |
| BIM element automation | Via Rhino.Inside.Revit | Native Dynamo-Revit integration |
| Data-driven design | CSV/JSON → GH data trees | CSV/Excel → Dynamo lists |
| Structural analysis | Karamba3D plugin | Robot Structural Analysis link |
| Environmental analysis | Ladybug/Honeybee | Insight (Autodesk) |
| Physics simulation | Kangaroo2 | Not natively available |
| Optimization | Galapagos, Wallacei | Refinery (Generative Design) |
| Fabrication output | GH → DXF/G-code export | Dynamo → Revit shop drawings |
| Interoperability | GH → Rhino → IFC/DWG/FBX | Dynamo → Revit → IFC/DWG |
| Python scripting | GhPython (IronPython/CPython) | Python Script node (CPython 3) |
| C# scripting | C# Script component | Not available (use Zero Touch) |
| Visual programming complexity | Handles extreme complexity well | Best for BIM automation, moderate geometry |
This skill provides the foundational knowledge for parametric modeling in AEC computational design. For detailed tool-specific patterns and recipes, see the companion references: grasshopper-patterns.md, dynamo-patterns.md, and data-structures.md.