SpotBlock
A block of spots described by rule rather than enumeration — eighteen rows of twenty-four is one of these, not 432 objects.
This is the unit both assisted-authoring paths produce: the direct-manipulation editor drags one out, and the photo/PDF path emits the same shape, so both are editable by exactly the same controls.
Fields
idID!sectionSpotMapSection!rowsInt!spotsPerRowIntSpots in every row. Null when the block uses a per-row count.
spotsPerRowByRow[Int!]Per-row spot counts, front row first. Null when every row is the same.
rowLabelsSpotRowLabelSchemenumberingSpotNumberingSchemeoriginSpotMapPoint!Centre of the block's first row, in map space.
spotSpacingFloat!rowSpacingFloat!curveRadiusFloatCurve the rows around a focus this far in front of the first row. Larger radii are flatter; null gives straight rows.
curveCenterSpotMapPointAn absolute focus every row curves around, overriding curveRadius and rotation. This is what a bowl uses: pointing every wedge at one shared centre makes a ring exactly concentric instead of approximately so, which is the difference between a tidy arena and one whose wedges splay apart.
staggerFloatOffset alternate rows by this fraction of spotSpacing. 0.5 is the usual half-spot stagger.
rotationFloataisles[Int!]Aisles, as the 1-based spot index within the row that each gap falls after. [6, 18] on a 24-spot row makes a 6 / 12 / 6 house.
aisleWidthFloatAisle width, as a multiple of spotSpacing. Defaults to 1.
faceTowardSpotMapPointPoint every spot at this coordinate — usually the stage centre.
kindSpotKind!accessibleBoolean!obstructedViewBoolean!holdReasonSpotHoldReasonskipRows[Int!]Rows omitted entirely, zero-based.
skipSpots[String!]Spots omitted, as "<rowIndex>:<spotIndex>", both zero-based.