Skip to content

Select

Turns a rule into a named group — tag a range, every Nth element, everything matching a comparison, a stable random subset, or everything inside a shape, then drive any Apply To field, Connect Points' From/To, or a delete with it.

Category: Point Ops Menu path: Point Ops > Select

Ports

PortTypeDirectionDescription
inpoints / shapeinputThe stream to tag. Polymorphic like Point Delete — connect points or a shape and out follows the input type
shape_inshapeinputSpatial rule only: the region to test containment against (signed-distance; a point exactly on the outline counts inside)
mask_inscalarFieldinputSpatial rule only, when no shape_in: field sampled at each element, > 0.5 = inside
outpoints / shapeoutputSame geometry, with the group written

Parameters

ParamTypeDefaultDescription
namestringgroupThe group to write. A group is just a scalar attribute — members get 1, the rest 0 — so anything that reads attributes reads groups. @ names are refused (write target)
domainenumPointPoint marks points/vertices; Path marks whole sub-paths (shape input; Spatial tests each path's centroid)
modeenumSetHow this Select composes with an existing group of the same name: Set (define it), Add (union), Remove (subtract), Intersect (narrow — chain two Selects for compound predicates: @x > 0scale > 2)
ruleenumAllWho's a member: All, Range, Every Nth, Attribute, Random, Spatial
rangeFirst / rangeLastscalar0 / 9Range rule: inclusive element-order span (@index). "Tag the first 50" = 0–49
everyN / everyOffsetscalar2 / 0Every Nth rule: element i is a member when (i − offset) mod n = 0
attrNamestring(empty)Attribute rule: the column to compare — any attribute or intrinsic (@x, @id, glyphIndex). Missing column = no members
attrRuleenumGreater ThanGreater Than, At Least, Less Than, At Most, Equals, Not Equal, Between. Equals/Not Equal are exact — meant for integer columns (indices, tags)
attrValue / attrValue2scalar0 / 1Comparison operand(s). attrValue2 appears only for Between (inclusive both ends)
percent / seedscalar50 / 0Random rule: a stable subset — keyed on @id, so membership survives points being added or removed elsewhere in the stream. Path domain keys on path order
regionenumInsideSpatial rule: members are inside (or outside) the shape_in region / mask_in field. Nothing connected = no members
valuescalar1What members get written. Any value — Select doubles as a conditional scalar stamp
writeElsebooleantrueSet mode only: whether non-members are written (elseValue) or left untouched. Off makes Set behave like Add
elseValuescalar0What non-members get (Set with writeElse, Remove, Intersect)

Expose Channels

None.

How It Works

The rule marks members; the write policy turns membership into a scalar attribute on the chosen domain. Positions, ids and every other attribute pass through untouched — Select is an attribute-only node, so it never disturbs simulation caches, trails, or downstream bounds.

The group lands as a plain scalar column, which is the whole design: AttributeToField("group") turns it into a 0/1 mask field, Apply To fields consume it by name, Connect Points bridges between two of them, Point Delete removes it. Nothing downstream knows or cares that a Select wrote it rather than a Point Attributes.

Usage Examples

Basic: delete every 3rd point

Grid → Select (rule Every Nth, every 3) → PointDelete (attribute group) → DrawPoints. Change every to re-thin live.

Random half, stable under change

PointScatter → Select (rule Random, 50%) → Apply To: group on DrawPoints. The subset is keyed on point ids, so animating the scatter count doesn't re-roll every point's membership.

Compound predicate without an expression box

Select (Attribute: @x Greater Than 0, mode Set) → Select (Attribute: scale Greater Than 2, mode Intersect) → the group is "right of center AND big". Add a third Select with mode Add to union in another set.

TextToShape → Select.shape_in; PointScatter → Select.in (rule Spatial, Inside) → Apply To on Point Advect. Only the points inside the letterforms flow; animate the text's transform upstream and re-select per frame follows it.

Viewport Feedback

With the Select node selected, the viewer overlays its output in gizmo cyan with membership baked in: members draw bright (solid paths, larger dots), everything else dim. Change the rule or scrub the values and the overlay re-resolves from the engine — what you see is the group the engine actually wrote, not a client-side guess.

Tips

  • Chain order matters for modes: Set defines, later Add/Remove/Intersect edit. Keep the defining Select first.
  • value ≠ 1 turns Select into a conditional stamp — e.g. write 5 into a scale column for members and leave the rest via writeElse off.
  • The Attribute rule's picker lists the point-domain stream; with domain: Path type the per-path name directly (glyphIndex, index).
  • A group is per-element data: it survives MergePoints (union merge fills non-members with 0) and rides through every passthrough op.