Search
AutoBRIDGE — Instance Array · Adaptive 3D Workflow
AutoBRIDGE · Instance Array

Array 2-Point Adaptive Family on 3D Mass / Adaptive Curve

Select a source 3D Mass or Adaptive Component, pick any extracted edge as the array path, configure spacing and position, then place repeated 2-adaptive-point families along the curve in a single Revit transaction.

AutoBRIDGE Instance Array Adaptive 3D (2 Point)
Phase 1 — Source & Curve Phase 2 — Family Selection Phase 3 — Parameters Phase 4 — 3D Preview Phase 5 — Run & Validate

What Does This Tool Do?

The Adaptive 3D Array tool (ArraytAdaptive3D) places repeated instances of a 2-adaptive-point Revit family along any edge or curve extracted from a 3D Mass or Adaptive Component already placed in your model. Each instance spans between two computed station points — so the family stretches and orients precisely along the chosen curve with full control over spacing, gaps, elevation, and lateral offset.

🧱

3D Mass Source

Extracts every solid edge from any conceptual mass placed in the project.

〰️

Adaptive Curve

Uses form edges from any placed adaptive component as the array path.

🎯

Live 3D Preview

Interactive orbit/pan/zoom canvas — click curves directly to select them.

Station Control

Start, End, Interval Space, and Gap define the exact repeat pattern in metres.

Validated

AutoBRIDGE confirms the family has exactly 2 adaptive points before any placement.

Family requirement — read before starting:
  • The target family must be an Adaptive Component with exactly 2 adaptive placement points.
  • The family must be loaded as a Generic Model in the Revit project before opening this tool.
Families with 1, 3, or more adaptive points are rejected at run time with an error message.

Form Layout — Five Zones

The form (ArraytAdaptive3D, 772 × 707 px borderless) is organised into three rows. Understanding each zone before starting makes the workflow faster:

#ZonePurpose
1Selector Bar (Row 1, 5%)Four controls side-by-side: source mass picker, curve picker, reverse toggle (⇄), and target family picker.
23D Canvas (Row 2 left, 87%)Interactive GDI+ viewport showing all extracted edges. Click to select a curve; yellow dots update live to preview array station positions.
3Parameter Panel (Row 2 right, 122 px fixed)Six text inputs — Start, End, Interval Space, Gap, Level, Offset — all in metres. Changes update the canvas immediately.
4Alignment Info (Row 3 left)Displays the selected mass name and curve length for confirmation before running.
5RUN Button (Row 3 right)Cyan 120 × 40 px button that triggers validation and placement in a single Revit transaction.

Select Source & Curve

The top row contains two linked dropdowns that identify what element to extract geometry from and which of its edges to use as the array path. Both must be set before any other step.

Tip — Have your mass placed first: The tool reads elements already in the active Revit model. Place or load your 3D Mass or Adaptive Component into the project before opening the form — comboBox1 is populated on form load, not dynamically refreshed.
01

Select the Source Mass or Adaptive Component

The leftmost dropdown (comboBox1) lists every adaptive component and 3D mass instance currently placed in the project, populated by Adaptives.GetAllFamilyInstanceDoc(). Select the element whose edges you want to array along.

Once selected, AutoBRIDGE walks the full geometry tree — unpacking GeometryInstance objects recursively, extracting all Solid edges via edge.AsCurve(), and collecting standalone Curve objects — then sorts them longest first and populates the Curve dropdown.

BridgeMass_01 ▸ BridgeMass_01 BridgeMass_02 PierHead_Adaptive : 1 Curve Length Adaptive component family (2 point)
comboBox1 open — source mass selected; comboBox2 ready to be populated with extracted curves
02

Select the Target Curve

After selecting the source, comboBox2 is filled with all extracted curves labelled Curve N (Length: X.XXX) in metres, sorted longest first. Pick the edge you want to array along.

Selecting a curve immediately auto-fills the End field with the curve length using floor-truncation to 3 decimal places: Math.Floor(curve.Length × 0.3048 × 10³) / 10³. The chosen curve is highlighted red in the 3D canvas and yellow station dots appear instantly.

Curve 1 (Length: 87.432) ▸ Curve 1 (Length: 87.432) Curve 2 (Length: 62.100) Curve 3 (Length: 48.760) Curve 4 (Length: 31.220) ← End auto-filled: 87.432
comboBox2 — curves sorted longest first; Curve 1 selected, End field auto-filled to 87.432 m, canvas shows red highlight
03

Optionally Reverse the Curve Direction

The button between the two dropdowns is a CheckBox styled as a button. When checked, the selected curve is reversed via curve.CreateReversed() before placement — the array starts from the far end and runs toward the near end. The yellow preview dots update immediately.

⚠ Direction affects family orientation: The first adaptive point of each instance is placed at the span start, the second at the span end. Reversing the curve flips which physical end receives Point[0] and Point[1] — this directly changes how the family is oriented in the model.

Select the Adaptive Family

comboBox3 — the rightmost dropdown in the top bar — lists all Generic Model family symbols loaded in the project, sorted alphabetically. Select the 2-point adaptive family you want to repeat along the curve.

The 2-point check runs at RUN time, not at selection time. The dropdown shows all Generic Model symbols. If you select a family that is not a 2-point adaptive, the RUN button will detect this and show an error before making any changes to the model.
04

Select the Family from the Dropdown

Pick the Generic Model family you want to array. The list is populated by PopulateComboBox3(), which collects all FamilySymbol objects in the OST_GenericModel category, deduplicates by name, and sorts alphabetically.

GirderSegment_2pt ▸ GirderSegment_2pt BridgeBarrier_Adaptive CableSeg_2pt RailingPanel_Adaptive
comboBox3 — Generic Model symbols listed A–Z; GirderSegment_2pt selected for placement
05

How the 2-Point Validation Works

When RUN is clicked, AutoBRIDGE performs a three-step check before placing anything in the model:

  1. Find the Family by name — searches the document for a Family object matching the selected item. Shows an error if not found.
  2. Confirm it is Adaptive — calls AdaptiveComponentInstanceUtils.IsAdaptiveFamilySymbol(symbol). Non-adaptive families are rejected here.
  3. Count the adaptive points — creates a temporary instance inside a rolled-back transaction, calls GetInstancePlacementPointElementRefIds() and checks the count equals 2 exactly. Deletes the temp instance, rolls back.
Tip: The validation transaction is always rolled back — no element is permanently created during this check. If validation fails, the model remains completely unchanged.

Configure Array Parameters

The right panel (panel1, 122 px wide) contains six input fields that control how instances are distributed along the curve. All values are in metres. Internal calculations convert to Revit's feet automatically. Every text change fires pictureBox2.Invalidate() — yellow preview dots refresh live.

06

Set Start and End Stations

Start (default: 0) is the station along the selected curve where the first instance begins. End is auto-filled from the selected curve length but can be reduced to restrict the array to a sub-range of the curve.

Validation rules: Start must be ≥ 0, End must be ≤ curve length, and Start must be < End. Any violation shows a clear error dialog and stops placement.

Start: 0 End: 87.432 ← auto Interval Space: 10 Gap:
Parameter panel — End auto-filled from selected curve length; Start defaults to 0 m
07

Set Interval Space and Gap

Interval Space (default: 10 m) is the arc length each family instance spans — the distance between its Point[0] and Point[1]. Gap (default: 0.2 m) is the empty space left between consecutive instances. After each instance is placed, the algorithm advances by Space + Gap.

Example: Start = 0, End = 50 m, Space = 10 m, Gap = 0.5 m → 5 instances at [0,10], [10.5,20.5], [21,31], [31.5,41.5], [42,50].
Performance warning: If the computed instance count exceeds 1,000, a Yes/No confirmation dialog appears before any placement begins. Very dense arrays on long curves can take significant processing time inside Revit.
08

Set Level and Offset Adjustments

Level + - (default: 0) adds a vertical Z shift in metres to both adaptive points of every instance. Positive = up, negative = down. Useful for aligning the family to a bearing seat or deck soffit level.

Offset (default: 0) shifts instances laterally perpendicular to the curve. The perpendicular direction is computed as curve_tangent × Z-up (cross product), normalised, then scaled. Positive = left relative to curve direction, negative = right.

Curve Level (+Z) Offset — lateral ⊥ curve Faint: on-curve (Offset = 0) Solid: with Offset applied · Yellow = station preview points
Level shifts all points vertically (Z axis); Offset shifts all points laterally perpendicular to the local curve tangent

Reading the 3D Preview Canvas

The large pictureBox2 GDI+ canvas provides a real-time perspective view of all curves extracted from the selected element. Use it to orbit, identify, and click-select the correct curve before committing the run.

09

Understand What the Canvas Renders

The canvas draws five visual layers on a medium-grey background (#7D7D7D):

  • Fine grid — grey lines at 10 m spacing on the XY ground plane
  • Coarse grid — slightly blue-grey lines at 50 m spacing
  • All form edges — white, 2 px — every curve extracted from the selected mass
  • Selected curve — red, 3 px — the curve chosen in comboBox2 or by canvas click
  • Station dots — yellow, 4 px radius — one dot per adaptive point placement; updates live as parameters change

An XYZ axis indicator (X=red, Y=green, Z=blue) is pinned to the bottom-right corner in screen space.

Drag to Pan CTRL + Click to Orbit Scroll to Zoom Form edges Selected curve Array stations X Y Z
3D canvas — white form edges, red selected curve, yellow station dots updating live, XYZ axis indicator at bottom-right
10

Interact with the Canvas to Verify Placement

Use the canvas to orbit around the mass and inspect station dot positions from different angles before committing the run:

ActionInputEffect
OrbitCtrl + left-dragRotates azimuth (0.5°/px) and elevation (0.5°/px, clamped 5°–175°)
PanLeft-drag (no Ctrl)Shifts viewport offset in screen space
ZoomScroll wheelAdjusts camera radius ×10% per step, minimum radius 1
Reset viewDouble-clickResets pan offset to zero and restores fit-to-content radius
Select a curveLeft-click near a curveSelects nearest projected curve within 10 px; syncs comboBox2 and auto-fills End
DeselectLeft-click on empty spaceClears selection; comboBox2 index reset to −1

Run the Placement & Validate

The RUN button triggers a sequence that validates inputs, computes all station points, and places every instance in a single Revit transaction. A progress bar appears below the run bar during execution.

11

Review the Alignment Info Bar and Click RUN

Before clicking RUN, verify the Alignment info group box shows the correct mass name and curve. Then click the cyan RUN button (bottom-right, 120 × 40 px). The tool first checks that a curve is selected and a family is chosen — if either is missing, an error dialog appears and nothing changes in the model.

Alignment info BridgeMass_01 · Curve 1 (Length: 87.432 m) · 8 instances · Space 10 m · Gap 0.2 m RUN
Alignment info confirms the selected source and curve; RUN button initiates the placement; progress bar tracks execution
12

All Instances Placed in One Transaction

After validation passes, all instances are created inside a single Revit transaction named "Place Multiple Adaptive Components". For each span, the tool creates an adaptive component instance, retrieves both ReferencePoint objects, and sets rp1.Position = point1 and rp2.Position = point2 from the pre-computed station list. If a single instance fails due to a geometry fault, it is silently skipped via continue and the rest proceed.

Undo tip: All placed instances belong to one Revit undo group. Press Ctrl Z in Revit to remove the entire array in a single step.
13

Confirm Success in the 3D View

A dialog confirms how many instances were placed. Open a 3D view in Revit to verify — instances should span precisely between the computed stations along the selected curve edge, with the correct Level and Offset applied throughout.

🧱

If the arrayed family forms part of a bridge corridor cross-section, see: Corridor Creation Workflow →

⚠ Active view & workset: Instances are placed relative to the active Revit view's level. In workshared models, ensure the correct workset is active before running — workset assignments cannot be batch-corrected after placement without a transaction-level fix.

Troubleshooting

SymptomLikely CauseFix
comboBox1 is emptyNo 3D Mass or Adaptive Component placed in the projectPlace at least one mass or adaptive family instance before opening the form
comboBox2 is empty after selecting sourceThe element has no extractable geometry edges in the active viewEnsure the mass has a resolved solid form; the tool uses IncludeNonVisibleObjects = true but still requires a valid active view
Canvas shows "No form edges"Geometry extraction returned zero curvesTry a different mass, or verify the element has a joined solid form in Revit
RUN rejects — "not 2 adaptive points"The selected family has 1, 3, or more adaptive pointsOnly use Generic Model families with exactly 2 adaptive placement points
Yellow dots don't appear along the red curveStart ≥ End, or Interval Space ≤ 0Check all parameter values; End must exceed Start and Space must be positive
Instances placed at wrong elevationLevel field not adjustedSet Level + - to the required vertical adjustment in metres
Instances are laterally shiftedOffset field is non-zeroReset Offset to 0 for on-curve placement with no lateral displacement
>1000 instance warning appearsCurve is long relative to spacingIncrease Interval Space, reduce the End station, or confirm and proceed if the count is intentional
AutoBRIDGE — Instance Array · Adaptive 3D (2 Point) — Workflow Guide
© 2026 AutoBRIDGE Documentation  ·  auto-bridge.net
Scroll to Top