You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Stair shapes (#29): straight, straight with a landing, L-shaped (with a landing or 2 to 6 winders), U-shaped (with a gap between the flights) and spiral/helical (around an inner radius), turning left or right, with the risers of the first flight and the landing depth adjustable. The stair tool's options bar picks the shape; the properties palette edits it; stair_create takes shape, turn, split, landing, gap, winders and inner_radius. Plans draw every tread, landing and winder (dashed above the cut) with the break line and the arrow along the walking line; IFC export writes the matching IfcStair type (TWO_STRAIGHT_RUN_STAIR, QUARTER_TURN_STAIR, QUARTER_WINDING_STAIR, HALF_TURN_STAIR, SPIRAL_STAIR) with one closed B-rep per piece.
Stair construction on the type: solid (filled down to the floor, as before), cast in place (steps on an inclined waist slab of a given thickness, measured square to the pitch, and landing slabs; WaistThickness in IFC) or assembled (precast, steel or timber treads of a given thickness on side stringers or a central one, a central column on spirals, optional closed risers).
Step rules on the type and Blondel's formula: minimum riser and tread and the range of 2 × riser + tread (defaults 16 cm, 28 cm and 63–65 cm); the tread can be fixed or follow Blondel's formula from the riser. The properties palette shows risers, riser height, tread, run and Blondel's step with the broken rules, and the new stair_check command returns them; element_get lists them under derived.check.
Railings that follow a stair (#29): Add railings in a stair's properties, or stair_railings_add, puts railings along its sides that climb at the pitch of the nosings, go round landings and winders and follow the stair when it changes, is copied, mirrored or deleted. Railing lengths are measured along their slope.
Ramps (#29), a new category (Ramp in the Circulation group, RP): straight (flights in line with landings between them), L-shaped (around a corner landing), U-shaped (switchback flights joined by landings) or helical, turning left or right. The type sets the width, the slab thickness and the accessibility rules (steepest slope, highest rise per flight, shortest landing; by default 8.33 %, 0.80 m and 1.20 m): flights are laid out to meet them, and the properties palette and the new ramp_check command report the slope, the flights and the rules broken (too steep, a flight rising too high, a short landing). The instance may take a gentler or steeper slope and a longer landing. ramp_create and ramp_type_create are new; a project without a ramp type gets one with its first ramp. Plans draw the flights (dashed above the cut, with a break line), the arrow and the slope; schedules list width, slope, run and volume; IFC export writes IfcRamp (STRAIGHT_RUN_RAMP, TWO_STRAIGHT_RUN_RAMP, QUARTER_TURN_RAMP, HALF_TURN_RAMP, SPIRAL_RAMP). stair_railings_add (Add railings) also puts railings along ramps.
Autosave and crash recovery (#51). A minute after a project gets unsaved changes (new, never-saved projects too), a copy of it is written in the background to the recovery folder of the app's data folder, only when the model changed since the last copy, through a temporary file and a rename. Saving, closing or quitting cleanly removes it. When ConstructCAD starts and finds copies left by a session that crashed or was killed, the Recover Unsaved Work dialog offers them: Restore opens the project with its unsaved changes (saving writes to its original file), Discard deletes the copy, Cancel keeps it for the next start.
A panic in the interface writes a last recovery copy before the app closes, and every panic is appended to crash.log in the app's data folder (message, place and backtrace), since release builds on Windows have no console.
Grids are named in series (#52). A new grid takes the name after the most recently placed grid parallel to it (within 10°): 1 → 2, 09 → 10, A → B, Z → AA, A1 → A2, 1.1 → 1.2. A grid across the existing ones starts a new series: letters across numbered grids, numbers otherwise. The name is unique among the grids (a taken one is skipped). The grid tool shows the name next to the cursor before the second click. grid_create uses these names when name is left out.
Grid ends line up with the bubbles of the other grids (#52). When the grid tool places a point or an end handle of a selected grid is dragged, the end snaps (within the usual 10-pixel snap distance) to the line through the matching end of a parallel grid, perpendicular to it. The second point also keeps the grid parallel to that grid. A dashed guide from that grid's end shows the alignment. Model points and guide crossings still take priority.
Align Grid Ends (Architecture and Structure tabs, Datum group; grids_align_ends): with one grid selected, every grid parallel to it (within 1°) takes its extents. Each end moves along its own line to the reference end on its side. Pinned grids are left alone. ends limits the move to the start (bubble) or end ends, and grids picks the grids to align.
Modify tools in 3D views (#53): Move, Copy, Array, Rotate, Mirror (pick or draw the axis), Align and Join/Unjoin Geometry work in 3D views. Points are picked on a horizontal working plane at the elements' level (then at the height of the first point) or snap to model points near the pointer: element corners, column and component centers at their base and top, wall ends and grid crossings. The preview shows the elements' outline where they will go. Changes are plan transforms, so elements keep their levels. Trim/Extend, Split, Offset and Allow/Disallow Join need plan linework and say so in 3D views.
Align takes columns and components, by the edge of their outline nearest to the point picked, in plans and in 3D. Alignment is in plan, so a column of an upper floor aligns onto the face of the column below. element_align takes pick and reference_pick for them (without pick, a column or component moves its insertion point onto the reference line, such as a grid).
Dimension lines line up with other dimensions (#54). While the line of an aligned or linear dimension is placed, it snaps (within the usual 10-pixel snap distance) onto the line of a parallel dimension in the same view, shown by a dashed guide from that dimension's line.
Continuous dimensioning (#54). The options bar of the aligned and linear dimension tools chooses Single or Continuous. In Continuous, after the first dimension each click on a point adds the next dimension of the chain, from the previous point, on the same dimension line and in the same direction; Enter, Esc or a right-click ends the chain. Each segment is its own dimension, whose ends follow the elements they were placed on. The new dimension_chain_create command places a whole chain (points in order, kind, direction or angle, offset) in one undo step.
Changed
Solid and cast-in-place stairs build each straight flight as one block from its side profile: the steps on top and, when cast in place, a continuous waist slab with a flat foot on the floor and a haunch under the landing it rises to, down to the landing's underside; the flight above starts from that underside. Sides show the steps and the soffit only, with no seams between treads.
Spiral stairs turn no faster than leaves 2.20 m between a tread and the one a turn below (the tread on the walking line grows when the type's would), and a solid spiral is built as a helical slab instead of treads filled down to the floor; its curved sides and soffit read as smooth surfaces.
Fixed
The 3D view and picking in it could crash on a degenerate face (a footprint with no area, or points that are not finite numbers): its triangulation panicked inside earcutr. Such faces now triangulate in the plane of their points or give no triangles.
A GPU error (a validation error or a failed allocation) no longer ends the app: it is logged. A 3D mesh larger than the GPU's buffer limit is not uploaded instead of failing validation.