Felipe E. Harker

Documentation

Alexandria Phoenix

Grasshopper components for the logic every project repeats: grids, attractor fields, transforms, culls and fabrication


Start

  1. InstallAlexandria Grasshopper Tools from Rhino's Package Manager (see Install).
  2. RestartRhino.
  3. OpenThe Alexandria Phoenix tab in Grasshopper.

Rhino 8 for Windows. The packages are in the office's shared Alexandria packages folder; full steps are in INSTALL.md. For a short introduction to show someone, there is the overview PDF.

How It Works

Each component does one job. Chain them left to right.

Cells also feed Pattern and Fabricate. Document moves data in and out of Rhino.

Shared Ports

Components that do the same job take and give the same things, so any one swaps for another.

PortCarries
RegionA closed planar curve to fill
CellsClosed curves from any grid
GeometryAnything to measure, move or cull
ValuesOne number per item
DomainThe range values are remapped to

Components

Open a row for its ports.

Grid 7

Square Grid in RegionSqGrid ShowHide Square cells, centred on a closed planar region and trimmed to it
PortTypeDescription
RegionCurveClosed planar curve that bounds the grid.
SizeNumberEdge length of each square cell, in model units.
CellsOutputClosed cell curves inside the region, ordered row by row.
Hex Grid in RegionHexGrid ShowHide Pointy-top hexagons, centred and trimmed the same way
PortTypeDescription
RegionCurveClosed planar curve that bounds the grid.
SizeNumberWidth of each hexagon across its flats, which is also the spacing between neighbouring cell centres, in model units.
CellsOutputClosed cell curves inside the region, ordered row by row.
Rectangle Grid in RegionRectGrid ShowHide Rectangular cells
PortTypeDescription
RegionCurveClosed planar curve that bounds the grid.
SizeXNumberWidth of each cell along the grid X axis, in model units.
SizeYNumberHeight of each cell along the grid Y axis, in model units.
CellsOutputClosed cell curves inside the region, ordered row by row.
Triangle Grid in RegionTriGrid ShowHide Equilateral triangles in alternating rows
PortTypeDescription
RegionCurveClosed planar curve that bounds the grid.
SizeNumberEdge length of each triangle, in model units. Rows are Size x sqrt(3) / 2 tall.
CellsOutputClosed cell curves inside the region, ordered row by row.
Diamond Grid in RegionDiaGrid ShowHide Interlocking diamonds
PortTypeDescription
RegionCurveClosed planar curve that bounds the grid.
SizeXNumberWidth of each diamond corner to corner along the grid X axis, in model units.
SizeYNumberHeight of each diamond corner to corner along the grid Y axis, in model units.
CellsOutputClosed cell curves inside the region, ordered row by row.
Brick Grid in RegionBrickGrid ShowHide Running-bond courses with an adjustable shift
PortTypeDescription
RegionCurveClosed planar curve that bounds the grid.
SizeXNumberLength of each brick along the grid X axis, in model units.
SizeYNumberHeight of each brick and of each row, in model units.
ShiftNumber, optionalFraction of SizeX that every other row slides along the grid X axis. 0.5 gives the classic half bond, 0 a stack bond. Default: 0.5.
CellsOutputClosed cell curves inside the region, ordered row by row.
Panel Grid in RegionPanelGrid ShowHide Exact-size panels with closers at the edges and open joints
PortTypeDescription
RegionCurveClosed planar curve that bounds the panels.
SizeXNumberModule width of a full panel along the grid X axis, joint included, in model units.
SizeYNumberModule height of a full panel along the grid Y axis, joint included, in model units.
JointNumber, optionalGap opened between neighbouring panels without moving them. The same gap is left as a margin where the run meets the region's bounding box, and panels too small to survive it are dropped. Default: 0.
CellsOutputClosed panel curves inside the region, ordered row by row.

Voronoi 4

Attractor SeedsAttrSeeds ShowHide One seed per cell, pulled from its centroid toward attractor curves
PortTypeDescription
CellsCurve listClosed planar cells from any grid, one seed each.
CurvesCurve listAttractor curves. Each seed is pulled toward the nearest one.
DomainDomain, optionalWhere each seed sits on the line from its nearest point on the curves (0) to its cell's centroid (1). The nearest cell takes the start of the domain and the furthest the end. Default: 0 To 1.
SeedsOutputOne seed per cell, in input order, for Voronoi in Region.
Jitter SeedsJitSeeds ShowHide One seed per cell, at a random point inside it
PortTypeDescription
CellsCurve listClosed planar cells from any grid, one seed each.
JitterNumber, optionalHow far (0-1) each seed may wander from its cell's centroid, as a share of the cell's half-width and half-height. Seeds always stay inside their cell. Default: 0.5.
SeedInteger, optionalRandom seed for the jitter. Each cell draws from its own generator, so a cell keeps its seed when others change. Default: 0.
SeedsOutputOne seed per cell, in input order, for Voronoi in Region.
Scatter SeedsScatSeeds ShowHide Evenly scattered random seeds in a region, optionally pulled toward curves
PortTypeDescription
RegionCurveClosed planar curve to scatter the seeds in.
CountIntegerNumber of seeds.
CurvesCurve list, optionalOptional attractor curves. Each seed is pulled toward the nearest one, as Attractor Seeds pulls cell centroids; without them the seeds stay where they were scattered.
DomainDomain, optionalWhere each seed sits on the line from its nearest point on the curves (0) to where it was scattered (1). The nearest seed takes the start of the domain and the furthest the end. Default: 0 To 1.
SeedInteger, optionalRandom seed for the scatter. Default: 0.
SeedsOutputThe seeds, in the order they were scattered, for Voronoi in Region.
Voronoi in RegionVoroRegion ShowHide Voronoi cells from any seeds, trimmed to a region
PortTypeDescription
RegionCurveClosed planar curve that bounds the Voronoi.
SeedsPoint listPoints the cells grow from.
CellsOutputClosed Voronoi cells inside the region, in seed order. A cell the boundary cuts in two gives two.

Remap 7

Point RemapPtRemap ShowHide Distance to the nearest attractor point, remapped to a domain
PortTypeDescription
GeometryAny listItems to measure. Points are used as they are; closed curves, surfaces and meshes are measured from their area centroid.
PointsPoint listAttractor points. Each item measures to the nearest one.
DomainDomain, optionalTarget domain for the remapped values. Default: 0 To 1.
SourceDomain, optionalDomain the measured distances are remapped from. Pin it to make several remaps share one scale; distances outside it then land outside the target domain rather than being clamped. Default: their own spread.
ValuesOutputOne remapped value per item, in input order.
Curve RemapCrvRemap ShowHide Distance to the nearest attractor curve, remapped to a domain
PortTypeDescription
GeometryAny listItems to measure. Points are used as they are; closed curves, surfaces and meshes are measured from their area centroid.
CurvesCurve listAttractor curves. Each item measures to the nearest one.
DomainDomain, optionalTarget domain for the remapped values. Default: 0 To 1.
SourceDomain, optionalDomain the measured distances are remapped from. Pin it to make several remaps share one scale; distances outside it then land outside the target domain rather than being clamped. Default: their own spread.
ValuesOutputOne remapped value per item, in input order.
Image RemapImgRemap ShowHide Image brightness under each item, remapped to a domain
PortTypeDescription
GeometryAny listItems to sample. Points are used as they are; closed curves, surfaces and meshes are read at their area centroid.
ImageTextPath to the image file. A relative path is read from the folder of the Grasshopper file.
RegionCurve, optionalPlanar curve, usually a rectangle, that the image is stretched over. Default: the items' bounding box.
DomainDomain, optionalTarget domain for the remapped values. Default: 0 To 1.
ValuesOutputRemapped brightness under each item, in input order.
ColorsOutputPixel colour under each item, in input order.
Random ValuesRandVal ShowHide One seeded random value per item
PortTypeDescription
GeometryAny listItems to give values to. Any data works; empty items get no value.
DomainDomain, optionalDomain the values are drawn from. Default: 0 To 1.
SeedInteger, optionalRandom seed; change it for a different set of values. Default: 0.
ValuesOutputOne random value per item, in input order.
Value RemapValRemap ShowHide Any number list remapped to a domain
PortTypeDescription
ValuesNumber listNumbers to remap.
DomainDomain, optionalTarget domain for the remapped values. Default: 0 To 1.
SourceDomain, optionalDomain the values are remapped from. Pin it to make several remaps share one scale; values outside it then land outside the target domain rather than being clamped. Default: their own spread.
RemappedOutputOne remapped value per input value, in input order.
Blend ValuesBlendVal ShowHide Two value fields combined by average, min, max or multiply
PortTypeDescription
ValuesANumber listFirst list of values.
ValuesBNumber listSecond list of values.
ModeInteger, optional0 weighted average, 1 minimum, 2 maximum, 3 multiply. Default: 0.
WeightNumber, optionalShare (0-1) of ValuesB in the weighted average: 0 gives ValuesA, 1 gives ValuesB. Default: 0.5.
ValuesOutputOne blended value per pair, in input order.
Step ValuesStepVal ShowHide Values snapped to a step, with a type index per distinct size
PortTypeDescription
ValuesNumber listNumbers to round. Empty items stay empty.
StepNumberIncrement to round to. Must be greater than zero.
ModeInteger, optional0 rounds to the nearest multiple, 1 rounds down, 2 rounds up. Default: 0.
SteppedOutputThe rounded values, in input order.
TypesOutputIndex of each value's stepped size among the distinct sizes, smallest first.

Transform 3

Scale by ValuesScaleVal ShowHide Scales each item about its own centroid by its matching value
PortTypeDescription
GeometryAny listItems to scale. Closed curves, surfaces and meshes scale about their area centroid; other geometry about its bounding-box centre.
FactorsNumber listScale factor per item; 1 leaves the item unchanged. Factors at or below zero give an empty item.
ScaledOutputScaled copies of the items, in input order.
Rotate by ValuesRotateVal ShowHide Rotates each item about its own centroid by its matching angle
PortTypeDescription
GeometryAny listItems to rotate. Closed curves, surfaces and meshes turn about their area centroid; other geometry about its bounding-box centre.
AnglesNumber listRotation per item, in degrees. Positive angles turn counter-clockwise as seen from the tip of the Axis, as in the Top view for world Z.
AxisVector, optionalDirection of the rotation axis through each item's centre. Default: world Z.
RotatedOutputRotated copies of the items, in input order.
Offset by ValuesOffsetVal ShowHide Insets or grows each closed curve by its matching distance
PortTypeDescription
CurvesCurve listClosed planar curves to offset.
DistancesNumber listOffset per curve, in model units. Positive insets, negative grows, zero keeps the curve as it is.
OffsetOutputOne offset curve per input curve, in input order.

Cull 1

Percent CullPctCull ShowHide Randomly removes a share of the items on one side of a value threshold
PortTypeDescription
GeometryAny listItems to cull. Any data works; must match Values in length.
ValuesNumber listOne value per item, usually a distance or area. Remapped to 0-1 before the threshold is applied.
ThresholdNumber, optionalRemapped value (0-1) that splits the list into candidates and protected items. Default: 0.5.
PercentNumber, optionalShare (0-1) of the candidates to remove. Default: 0.5.
SeedInteger, optionalRandom seed that picks which candidates are removed. Default: 0.
InvertBoolean, optionalMake the items below the Threshold the candidates. Default: False.
KeptOutputItems that survive the cull, in input order.
CulledOutputItems that were removed, in input order.
PatternOutputOne boolean per item, True where the item was kept.

Pattern 2

Lattice PatternLattice ShowHide A chord lattice inside every cell, picked with one index
PortTypeDescription
CellsCurve listClosed cell curves, one lattice each. Curved edges are read as straight lines between their corners.
PatternInteger, optionalWhich combination of chord families to draw, in the order given above. Wraps at 1023. Default: 0 (Outline alone).
InnerNumber, optionalSize of the inner ring, from 0 (collapsed onto the centroid) to 1 (on the outline). Default: 0.5.
EncloseBoolean, optionalAlso resolve each cell's chords into the closed shapes they enclose, for cutting rather than engraving. Slower than the lines alone, except where cells are copies of one another. Default: False.
LinesOutputThe chords, one branch per cell. Zero-length and repeated chords are dropped within a cell, but neighbouring cells each draw the edge they share.
ShapesOutputThe closed shapes the chords enclose, one branch per cell. Empty unless Enclose is on; the cell must be planar.
FamiliesOutputNames of the chord families Pattern draws.
Voronoi PatternVoroPatt ShowHide A Voronoi subdivision of every cell, picked with one index
PortTypeDescription
CellsCurve listClosed planar cell curves, one pattern each.
PatternInteger, optionalWhich combination of seed families to use, in the order given above. Wraps at 120. Default: 0 (InnerVert + InnerEval).
InnerNumber, optionalSize of the inner copy: 1 is the cell itself, 0 collapses it onto the centroid, and values above 1 put its seeds outside the cell. Default: 0.5.
OuterAtNumber, optionalWhere along each cell edge the OuterEval seeds sit, from 0 (its start) to 1 (its end). Default: 0.5.
InnerAtNumber, optionalWhere along each inner edge the InnerEval seeds sit, from 0 to 1. Default: 0.5.
ShapesOutputThe Voronoi regions clipped to the cell, one branch per cell, running the same way round as the cell.
SeedsOutputThe seed points each pattern grew from, one branch per cell.
FamiliesOutputNames of the seed families Pattern uses.

Fabricate 4

Fold CellsFold ShowHide Folds cells up along creases into flaps, wedges or pyramids
PortTypeDescription
CellsCurve treeClosed planar cells to fold.
CreasesCurve tree, optionalOptional. Crease lines, one branch per cell. Ignored in Mode 2.
AnglesNumber treeFold angle per cell, in degrees; the last value repeats, so one angle folds every cell alike and a Values list drives a field.
ModeInteger, optional0 folds open flaps, 1 closes each flap into a solid wedge, 2 raises a closed pyramid on each cell. Default: 0.
FoldedOutputFolded pieces, wedges or pyramids, one branch per cell.
HingesOutputThe edge each piece turned about, parallel to Folded; empty where a piece stayed flat and in Mode 2.
UnfoldUnfold ShowHide Flattens folded geometry into cut and score lines
PortTypeDescription
GeometryBrep treeFolded faces or closed solids to flatten.
SpacingNumber, optionalGap between neighbouring pieces in the row. Default: 10.
CutsOutputOutside edges to cut, one branch per flat piece.
ScoresOutputShared edges to score, one branch per flat piece.
BoundsOutputRectangle each flat piece occupies, parallel to the branches.
Panel TabsPanelTabs ShowHide Flat blank of a folded panel: face, folds and tabs, plus creases
PortTypeDescription
PanelCurveClosed planar outline of the panel face.
FoldNumberWidth of the fold zone turned back along each side.
TabWidthNumber, optionalOptional. How far each tab reaches beyond its fold zone; ignored when a Profile is given.
TabHeightNumber, optionalOptional. Height of each tab; ignored when a Profile is given.
SpacingNumberDistance between tab centres; give Frame Slots the same value.
ProfileCurve, optionalOptional. Closed planar curve drawn as the right-hand tab, used in place of a rectangle.
PlanePlane, optionalPlane the panel is laid out in. Default: the panel's own plane with Y running up the panel, world XY when it lies flat.
BlankOutputThe outline to cut: face, fold zones and tabs as one closed curve.
CreasesOutputThe two fold lines to score, left then right.
TabsOutputThe tab outlines, left and right in pairs from the bottom up.
CountOutputHow many tabs were placed on each side.
Frame SlotsFrameSlots ShowHide The frame slots that line up with Panel Tabs
PortTypeDescription
FrameCurveClosed planar outline of the frame face.
SlotWidthNumberWidth of each slot before clearance.
SlotHeightNumberHeight of each slot before clearance.
SpacingXNumberDistance between the centres of the two slot columns.
SpacingYNumberDistance between slot rows; give it the panel's Spacing.
ClearanceNumber, optionalAdded around every slot on each side. Default: 0.
PlanePlane, optionalPlane the frame is laid out in. Default: the frame's own plane with Y running up the frame, world XY when it lies flat.
SlotsOutputThe slot outlines, left and right in pairs from the bottom up.
CountOutputHow many rows of slots were placed.

Geometry 2

Region TrimTrim ShowHide Splits curves into what lies inside and outside a region, keeping closed curves closed
PortTypeDescription
CurvesCurve listCurves to trim, open or closed. Curves off the region's plane are projected onto it first.
RegionCurveClosed planar curve to trim against.
InsideOutputPieces inside the region, in input order.
OutsideOutputPieces outside the region, in input order.
Plane BoundsBounds ShowHide Bounding rectangle and box square to any plane, for stock sizes
PortTypeDescription
GeometryAny listItems to measure.
PlanePlane, optionalPlane to measure in. Default: world XY.
RectangleOutputThe bounding rectangle, drawn on the plane.
BoxOutputThe bounding box, square to the plane.
CenterOutputCentre of the box.
SizeXOutputSize along the plane's X axis.
SizeYOutputSize along the plane's Y axis.
SizeZOutputSize along the plane's Z axis.

Display 1

Material PreviewPreview ShowHide Shaded preview in a chosen colour and opacity
PortTypeDescription
GeometryGeometry listGeometry to preview.
ColorColour, optionalPreview colour. Default: Phoenix orange (242, 101, 34).
OpacityNumber, optionalPreview opacity, from 0 (invisible) to 1 (solid). Default: 1.

Document 4

Layer GeometryLayerGeo ShowHide Live geometry from a Rhino layer, updating as the layer changes
PortTypeDescription
LayerTextFull path of the layer, nested layers joined with a double colon.
SublayersBoolean, optionalAlso read the layers nested under it. Default: False.
GeometryOutputGeometry of each object, layer by layer, oldest first.
NamesOutputRhino object name of each item, blank when it has none.
Bake to LayerBake ShowHide Bakes branches onto named, coloured layers, replacing on each press
PortTypeDescription
GeometryAny treeGeometry to bake, one branch per layer.
LayersText listLayer for each branch, nested layers joined with a double colon.
ColorColour list, optionalLayer colour, one per layer name; the last repeats. Default: new layers get Phoenix orange (242, 101, 34) and existing layers keep theirs.
ReplaceBoolean, optionalClear each layer before baking onto it. Default: False.
BakeBooleanSet True, usually from a Button, to bake.
CountOutputNumber of objects baked.
ReportOutputOne line per branch saying what was baked, removed and skipped.
Export ParametersParamOut ShowHide Writes the canvas's inputs to a CSV, one section per variant
PortTypeDescription
FileTextPath of the CSV file to write; relative paths start at this .gh file.
SectionText, optionalOptional. Section name written into every row.
ExportBooleanSet True, usually from a Button, to write the file.
CountOutputHow many inputs were written.
ReportOutputWhat was written, or why nothing was.
Apply ParametersParamIn ShowHide Sets the canvas's inputs from that CSV
PortTypeDescription
FileTextPath of the CSV file to read; relative paths start at this .gh file.
SectionText, optionalOnly apply rows whose section matches. Default: every row.
ApplyBooleanSet True, usually from a Button, to apply the file.
CountOutputHow many inputs were set.
ReportOutputOne line per row saying what was set or skipped.

Utility 1

Feet InchesFtIn ShowHide Lengths as architectural feet and inches
PortTypeDescription
ValuesNumber listLengths in model units. Empty items stay empty.
PrecisionInteger, optionalSmallest fraction of an inch, as its denominator: 16 rounds to sixteenths, 1 to whole inches. Default: 16.
TextOutputOne feet-and-inches string per length, in input order.

Template Definition

alexandria_phoenix_master_v1.0.gh with its .3dm shows the layout every definition follows. Logic runs along the top; each input group sits below the stage it feeds.

GroupColourHolds
InputBlueVariables and their relays
LogicOrangePhoenix components
OutputGreenResults to bake or pass on
DisplayVioletMaterial Preview

Showcase

Below the template, every component runs in its simplest form: one column per section of the Phoenix tab and one titled row per sample, each on its own tile in the .3dm. The section headers and row titles are the one place the master uses notes.

ColumnRows
GridAll seven grids, each on its own region
VoronoiHex Grid → Attractor Seeds · Hex Grid → Jitter Seeds · Scatter Seeds, each → Voronoi in Region
GeometryRegion Trim · Plane Bounds
RemapLayer Geometry → Point Remap + Image Remap → Blend Values → Value Remap → Step Values → Scale by Values
TransformRandom Values → Rotate by Values · Offset by Values
CullRandom Values → Percent Cull
PatternLattice Pattern · Voronoi Pattern
FabricateLattice → Fold Cells → Unfold → Bake to Layer · Panel Tabs → Frame Slots
DisplayMaterial Preview
DocumentLayer Geometry · Export Parameters + Apply Parameters
UtilityFeet Inches

alexandria_phoenix_master_parameters.csv holds the canvas's inputs in two sections, Default and Dense. Set Section and press Apply to switch between them.

Standards

RuleWhy
Every variable feeds a typed relay in its groupSwap a variable, rewire one point
Logic outputs pass through relays tooSwap a component, rewire one point
Groups get short names and a role colourReadable at a glance
Only Display components previewThe viewport shows what matters
No panels or notesThe layout explains itself
One Rhino layer per referenced inputInputs are easy to find and replace

Install

Two packages for Rhino 8 on Windows, both from Rhino's Package Manager: Alexandria Rhino Tools (the toolbar, its commands and the display modes) and Alexandria Grasshopper Tools (the components). They live in the office's shared Alexandria packages folder rather than on McNeel's public server.

  1. Add the folderOnce per computer. In Tools > Options > Advanced, replace the value of Rhino.Options.PackageManager.Sources with the one in INSTALL.md, ready to paste.
  2. InstallRun PackageManager, search for Alexandria and install both packages. Tick Automatically update packages when Rhino starts.
  3. RestartRhino.
  4. Set upType AlexandriaSetup. It adds Alexandria Tools as a tab after Standard, where it stays through updates, and installs the display modes.

With automatic updates on, a new release installs the next time Rhino starts; otherwise it's in the Package Manager's Updates tab. Click Alexandria Setup again after an update. The render buttons need V-Ray for Rhino. Full steps, including moving from the old install, are in INSTALL.md.

Alexandria Tools

A Rhino toolbar for drawing and rendering, from the Alexandria Rhino Tools package (see Install). Each button runs one of the package's Alexandria… commands.

ButtonDoes
Alexandria SetupAdds this tab and installs the DM display modes that ship in the package.
Populate ModelAdds the standard DETAILS and DESIGN layers, the annotation styles, the render backdrop (wall, modeled ground, scale figure) and the world light.
Set MaterialGives each sublayer of a layer you choose a plaster material in its display colour, MAT_1, MAT_2 and on, replacing any it had. DESIGN::ILLUMS keeps its own.
Day RenderV-Ray's bright, neutral studio day, with the lighting on DESIGN::ILLUMS off.
Night RenderA dim, neutral night where lit sign faces carry the image, with the lighting on DESIGN::ILLUMS back on.
Standard DimensionLeft click: a dimension. Right click: a leader. Both in the Alexandria annotation styles, filed under DETAILS::ANNOTATIONS.
Populate DetailAdds the 2D drawing of a sign detail from the detail library where you click, in the Alexandria styles.
Save as Rhino 7Writes <name>_r7.3dm next to the model. The open model keeps its name and path.

Keep illuminated sign faces and their lights on DESIGN::ILLUMS: Day turns them off and Night back on as you set them up. Other materials and lights stay as they are.

Drawings

Annotation styles and display modes shared by every Alexandria drawing. The details are in STANDARDS.md.

Annotation

Oswald, capitals. Dimensions go on DETAILS::ANNOTATIONS::DIMENSIONS (grey 128,128,128), leaders, notes and titles on DETAILS::ANNOTATIONS::CALLOUTS (grey 50,50,50). Sizes are paper inches, scaled by each style's model space scale (4 by default, 3″ = 1′-0″, so a full-size detail gets 0.5″ dimension text). Populate Model adds the styles; alexandria_annotation_styles.3dm shows each in use.

StyleShape
Alexandria Dimension1/8″ text. Feet and inches to 1/16″, no zero feet. Text centred on the line, always level, masked 0.0375″ each side. No arrowheads. Extension lines start 0.05″ off the design and run 0.075″ past the line.
Alexandria Leader0.1375″ text. 0.055″ dot, a leg at any angle, 0.25″ horizontal landing, text centred on the landing 0.1″ past its end.
Alexandria Text0.1375″ text, top left aligned.
Alexandria Title3/16″ Oswald Bold, centred.

Display Modes

Exported to standards/display_modes/ and installed by Alexandria Setup. To import them by hand, download alexandria_display_modes.zip and use Options > View > Display Modes > Import.

ModeBackgroundLook
DM-WORKINGWhiteOff-white shading, dark grey edges, grid and axes, no shadows
DM-AUTOCADDark slateDM-WORKING's shading on a CAD-style background
DM-DIAGRAMWhiteFlat mid-grey with one light, thin dark edges
DM-DIAGRAM-SHADOWWhiteFlat white with hard shadows on a shadow-only ground

Rendering

Day Render and Night Render set the same V-Ray values, so they run in either order. Day turns off the lighting on DESIGN::ILLUMS (self-illumination and V-Ray lights) and Night restores it, so give sign faces a V-Ray Generic material: its colour reads by day and its glow at night.

SettingDayNight
Environment (background, GI, reflections)× 1× 0.05
World light (directional, front left, 31° up)0.0625Same
Sun, ground planeOffOff
CameraISO 625, f/8, 1/100 sSame
White balanceNeutralNeutral
Image size3840 × 2160 (4K, 16:9)Same

Develop

Each component is one Python 3 script. The scripts are the source of truth; the plugin is built from them.

  1. Editsrc/<family>/<name>.py.
  2. BuildIn Rhino 8, run _-RunPythonScript "tools\build.py".
  3. TestRestart Rhino and test.
  4. ReleaseCommit and push. Pushing main copies the packages into the shared Alexandria packages folder.
  5. DocumentRefresh these docs with python tools/make_site.py.

The Docstring Is the Spec

"""Point Remap (PtRemap)

Measures how far each item sits from its nearest attractor point
and remaps those distances onto a target domain.

Inputs:
    Geometry: Items to measure.
    Points: Attractor points.
    Domain: Target domain. Default: 0 To 1.
Outputs:
    Values: One remapped value per item.
"""
In the scriptIn Grasshopper
First line Name (NickName)Component name and nickname
Folder src/gridRibbon panel Grid
RunScript argumentsInputs, in order
list[...] annotationList access
Default: in a descriptionOptional input

Full rules in STANDARDS.md.