Assemblies & the Composer
The cross-section template a corridor sweeps along the alignment. Two tools share the work, the Civil-3D way: the Composer authors ONE subassembly’s internals as a flowchart; the Assemblies tab visually composes those subassemblies into complete assemblies.
Looking for a specific subassembly? The subassembly reference lists all built-in subassemblies and section presets with their parameters and the point / link / shape codes each one publishes.
The three geometry kinds
| Entity | Is | Becomes in the corridor |
|---|---|---|
| Point | A named position at an offset and height from the centreline. | A 3D feature line (stringline). |
| Link | A straight segment between two points. | A surface strip. |
| Shape | A closed area bounded by points. | A 3D solid (a pavement / material course). |
The Assembly Designer
Tools › Open Assembly Designer. It is corridor-independent — you design, save and edit here, and preview on a built-in demo alignment (a tangent → curve → tangent → spiral → curve, so the whole superelevation story is visible).
The flowchart (centre)
A program executed once per station. Nodes:
| Node | Does |
|---|---|
| Point | Create a named point from a reference + a method (offset, angle/distance, slope, intersection, on-surface, slope-to-surface daylight, …). Can also emit its link and choose whether it banks with superelevation. |
| Link | Connect two existing points. |
| Shape | Close a ring over a list of point names. If one of them does not exist at this station the shape is not drawn at all, and the missing name is reported — its area never reaches the material quantities. |
| Variable (ƒ) | Define a value from an expression. |
| Decision (◊) | Run one branch or another by a condition (e.g. add a ditch only in cut). A condition that does not evaluate — an unresolved parameter, a division by zero — takes the else branch and is reported in the diagnostics, rather than counting as true. |
| Switch | Branch on a discriminant value. |
| ForEach (↻) | Loop a count, binding an index variable. |
| Output | Publish a named output value. |
| Mark / Report | Record a point for later reference / emit a diagnostic. |
Expressions
Every numeric field accepts an expression (names are case-insensitive; Civil-3D SAC formulas paste in directly):
| Category | Reference |
|---|---|
| Operators | + − * / ^ (power), comparisons
< <= > >= == !=, logic && || ! |
| Functions | if(cond,a,b), min max clamp abs sign,
sqrt pow exp ln log log10, sin cos tan asin acos atan atan2
sinh cosh tanh, floor ceil round trunc deg rad; constants
pi, e, station |
| Point members | P1.Offset (= P1.X),
P1.Y (height above origin), P1.Elevation,
P1.IsValid |
| Link members | L1.length, L1.slope
(a vertical link, such as a curb face, has no slope: it reads as
"not a number", and every expression that touches it falls back) |
| Targets | Name.IsValid, Name.Offset,
Name.Elevation for each declared target parameter |
| Superelevation | the eight cross-slope keys
(RightOutsideLaneSlope, …) and their SAC spellings
SE.RightLO / SE.HasRightLO … — station-tracked
when a corridor (or the preview slider) supplies a rate; PivotOffset |
| Cant (rail) | Cant.IsDefined, Cant.PivotType,
Cant.LeftRailDeltaElevation, Cant.RightRailDeltaElevation,
Cant.TrackWidth |
| Runtime flags | SA.IsLayout (1 in editor previews, 0 in a
corridor run), SA.IsInCut (ground above the attach point) |
2D Sketch
Draw the section directly — point, line and polygon (shape) tools — and the flowchart and sketch stay in sync. A snap indicator marks the snapped point; lines rubber-band while you drag.
2D & 3D Preview
- 2D Preview — the baked section at a station. The Codes toggle overlays code names; Fit resets zoom/pan; left-drag pans, the wheel zooms. With superelevation active it tilts with the slider and writes each link's live grade %.
- 3D Preview — the assembly swept along the demo alignment.
Packet Settings
| Tab | Contents |
|---|---|
| Input Parameters | The named inputs (lane width, slope, …) — change a number, not the geometry. |
| Output | The named graph the assembly publishes. |
| Target Parameters | Declared targets the geometry binds at corridor time —
Surface (a TIN to intersect / daylight against), Offset
(a lateral offset that overrides a point’s Delta X) and
Elevation (an elevation that overrides a point’s height).
Each row carries a Preview Value and an Enabled In Preview
check: in the editor an enabled target stands in as a flat guide line at that value
(drawn labelled in the sketch), and clearing the check tests the
target-not-found branches — exactly Civil 3D’s preview semantics.
Points reference a declared target from dropdowns in their properties;
expressions read Name.IsValid / Name.Offset /
Name.Elevation. The combo above the table binds the corridor’s
real target surface. |
| Cant | Rail preview stand-ins mirroring Civil 3D’s Cant tab:
CantPivotType (Left Rail / CenterLine / Right Rail), the rail
point names, delta elevations and the track gauge. They feed the
Cant.* expression identifiers in editor previews; in a corridor the
real per-station cant takes over (see Corridors). |
| Superelevation | The Auto superelevation from curvature toggle, the design Standard (AASHTO / RAL / VSS / KGM) and design speed, and the per-lane / per-shoulder cross-slope table. See Superelevation & widening. |
The Assemblies tab — the visual builder
The project’s assemblies live as blocks in the Assemblies tab, and that is where you build them:
- New Assembly starts a fresh assembly (a lone CL origin).
- Click a block to select it; click one of its point markers to pick the attach point (an orange ring marks it — the hint line above the workspace guides each step).
- Double-click a subassembly in the left Subassemblies palette — or simply drag it onto a marker — to compose it there. Each placement gets its own independent parameters (two Lanes → two widths), and its points/links/shapes stay fully editable in the Composer.
- The right Parameters panel edits the selected assembly in place, grouped per placement (Lane1, Curb2, …).
- Save to Library… exports the selection as a library file; right-click a block › Edit in Composer opens its flowchart bound to the project instance (edits are undoable document edits).
Conditional subassemblies
The palette’s built-in Conditional element is the Civil 3D conditional subassembly: everything attached behind it is processed at a corridor station only while its condition holds. Pick an attach point and double-click Conditional; the dialog offers three condition kinds:
- Horizontal Target — a target alignment/offset is Found (or Not Found) within a Minimum–Maximum distance window of the attach point. The distances become regular parameters (Cond1_MaximumDistance, …) editable in the Parameters panel.
- Marked Point — the same window test against a marked point
set elsewhere in the assembly (
Mark Pointin the Composer). - Cut or Fill — the attach point sits in a Cut (surface
above) or Fill (surface below) situation against a surface target;
Minimum/Maximum bound the cut depth or fill height
(continue while
min ≤ depth < max). - Expression — any flowchart expression
(
Mark.MP.IsValid && LaneWidth > 3).
The workspace draws the conditional as a dashed diagonal marker (sloping down for Found, up for Not Found — the Civil 3D convention) that stays visible even when its branch doesn’t bake. Attach the guarded subassemblies to the diamond at its endpoint; attach a second Conditional with the opposite type to the same point to build a Found / Not Found pair whose branches are mutually exclusive.
Importing Civil 3D subassemblies (.pkt)
Assembly Designer › File › Import Civil 3D PKT… converts Subassembly Composer packages — including the whole stock catalog shipped with Civil 3D — into library subassemblies. Parameters (with display names and descriptions), target parameters (with their preview values), the full flowchart (decisions, switches, loops, curves, fillets), codes and the catalog description all carry over; a summary dialog lists anything that needed a stand-in (open Show Details). Imported subassemblies appear in the palette and behave like native ones.
The assembly library
The Assembly Library dock is a program-level library — assembly files stored next to the application, independent of any project.
- Drag a library assembly onto the Assemblies tab (or double-click) to import a copy into the project.
- Each import becomes its own project assembly with a unique name, remembering the source it came from and its own parameter values — so you can import the same source many times with different names and parameters.
- Edit from the browser opens the source in the Designer; Save to Library writes it back beside the application. The save dialog’s Kind chooses Assembly (a whole cross-section) or Subassembly (a composable part — requires exactly one Origin point, its insertion point).
Rail cross-sections
Rail › Subassemblies lists the rail cross-sections this drawing can build. Each row is a real preset, so selecting one shows what it actually produces — the shape codes (Ballast, Sleeper, Rail, Slab, Subballast) and the point, link and shape counts read straight off the built section, not typed in — and Apply adds it to the drawing as an assembly you can put on a corridor.
Today that is three whole sections (ballasted single track, ballasted double track, slab track) and the Rail Single Composer part. It used to list five differently-named entries with hand-written parameters — Ballasted Track Deck, Twin-Track Deck, Station Platform Deck and the rest — none of which the program could build and none of which could be applied. Those are gone. A catalogue row that cannot be applied is worse than no catalogue, because it describes work the drawing cannot do.
Setting the parameters before you apply
The rail sections take real inputs — gauge, rail height, sleeper length, ballast depth and shoulder, track spacing on the double, slab width and thickness on the slab track. Edit them in the upper table and Apply builds the section with your values. A blank or unreadable cell falls back to that parameter’s own default rather than to zero, which would collapse the section.
Rail - Platform Track is a ballasted track with a station platform on one side. The sign of the edge offset chooses the side — negative is left of the track, positive right — so there is no side setting to get wrong, and the height is measured above top of rail, which is the datum a platform is specified in.
Its three defaults are marked — example, set your own in the table,
and they mean it: platform height above rail is 550, 760 or 915 mm depending on
the railway, and the edge offset with it. Those are your standard’s numbers,
not ours — the same rule as the gauge outlines and the fouling-point spacing.
(The cant ceiling over a platform is read from the loaded standard, as
rail.platformCantBaseMm.)
The platform edge follows the track
The edge is not a fixed offset. Two things vary along a real platform and the section follows both:
- The curve. A vehicle sweeps wider than its own section. Where the
platform is on the inside of a curve the bogie centres cut in by
Lb²/(8R); on the outside the ends overhang by(Lv²−Lb²)/(8R). The edge stands off by whichever applies on its side, and by nothing on a tangent. - The cant. Platform height is specified above the running surface of the rail on the platform’s own side, and that surface rises and falls with the cant. The coping goes with its own rail.
The track itself banks too. On a rail corridor every shipped track section — ballasted single and double track, slab track, the platform track — raises its rails, sleepers and ballast top (or slab top) by the corridor’s cant, rotating about the centre between the two rails; the formation (ballast bottom, slab base) stays level. On a tangent, or with no cant, the section is unchanged.
Set Bogie centres and Vehicle length to the reference vehicle whose sweep the platform must clear. Leave either at zero and there is no widening at all — an office that has not said which train has not asked for an allowance, and one will not be invented. Like the height and the offset, the defaults are marked example.
These are the same terms the clearance sweep applies to a gauge, and a test asserts the two land on the same number: the section and the envelope must not disagree about the same physics.
To vary anything the parameters do not cover — a cable trough at an offset, a different shoulder profile — apply the section and edit the copy in the Assembly Designer, the same way any other assembly is varied.
Assigning to a corridor
Bind assemblies to corridor regions on Corridor Properties › Parameters (the Assembly column). See Corridors.