Skip to content

Releases

ConstructCAD v0.9.1

Choose a tag to compare

@github-actions github-actions released this 04 Nov 03:29

Added

  • Plan underlays (#154). A floor or ceiling plan can show another level's plan halftone under its own, for reference while drawing. The Underlay section of the plan's properties takes the plan below and the plan above. Each is the next level below or above (which suits view templates) or a given level, seen looking down as a floor plan or up as a ceiling plan. Only the model is drawn (no annotations), in the faint pen and with the view's category visibility, and it is not picked, selected or snapped to. It shows on screen only, unless Print underlay puts it on sheets and in exports. It is also a view template property. view_set and template_set take underlay, and deleting a level drops it from the underlays that name it.
  • Edit a sweep type's profile in a sketch (#166). Modify → Sketch → Edit Profile, with one sweep selected, or the button in its type's Edit Type…, opens the profile in a sketch in its own plane: x across the path, y up from it, with the path's point marked. It has the usual drawing and Modify tools, grips and undo. Finish redraws every sweep of the type in one undo step. Sweep types now keep the curves their profile was drawn with, so arcs stay arcs when it is edited again; sweep_type_create and sweep_profile_set store them.
  • More properties edited on several elements at once: the walls' location line, the top constraint of walls, columns, stairs, ramps and shafts (unconnected or up to a level, walls keeping their height) with its offset or unconnected height, the walls' joins at their ends, and the mark and comments (elements_set takes mark and comments). The level row of elements with a top constraint reads Base Constraint.

Fixed

  • Importing a large DWG or DXF closed the program (#156). A drawing seen whole made more vertices in one frame than the GPU's vertex buffer holds, and the renderer stopped. Painting now draws one line per pixel for lines shorter than a pixel, cuts dashed lines to the view, leaves out texts far outside it, and keeps each frame within a vertex budget, with the model still drawn over imported drawings.
  • Ctrl+Z and Ctrl+Y did not step a chain of walls, beams, pipes or conduits back and forth (#161). Only Backspace and the quick access buttons did, and Ctrl+Y redid a segment without moving the chain on to its end. The keys now run the same commands, which also undo inside an open sketch.
  • A grid line's length could not be typed (#158). After its first point, a typed length (and, after Tab, an angle) places the end, and Enter places the grid, as for walls.

ConstructCAD v0.9.0

Choose a tag to compare

@github-actions github-actions released this 02 Nov 14:31

Added

  • Structural landings for assembled stairs (#143). The landings of a steel, timber or precast stair are no longer a solid block: they are a deck as thick as the treads on beams as wide and deep as the stringers, in line with them. With a central stringer the beams carry the flights' stringer lines across the landing, crossing (Cross) or one springing from the other (T), a new type property (landing_beams); with side stringers they frame the landing's edge. Posts down to the stair's base are placed per stair and per landing, only where wanted: at the corners of a frame or the ends of a central stringer's beams (front, back, inner side, outer side...), in the properties palette's Landing posts, in stair_create (posts) and in element_set (layout.posts); stair_check lists where each landing can take one. Their size is the type's post_width.
  • Wall tops attached to roofs, ceilings and floors (#140). Modify → Geometry → Attach Top attaches the selected walls' tops to the roof, ceiling or floor clicked: under it a wall rises or drops to its underside, following its slope (gable walls end in a triangle), and elsewhere keeps its own top. The walls follow the element when it changes; Detach Top (also in a wall's properties) and deleting the element give them back their own tops. Walls keep the reference (attach_top); the new command wall_attach sets it. Straight walls only for now.
  • Shafts (#30, first part). Architecture → Floors & Roofs → Shaft (SF) sketches a vertical opening that rises from its level to a level or height and cuts every floor, ceiling and roof it passes through, where its outline lies inside theirs and clear of their own openings. The cuts are kept in the slabs (cuts), in step with the shaft in the same undo step, so plans, schedule areas, 3D views and IFC export show them; ceilings can now have openings. Plans draw the shaft as its outline with two diagonals. New commands shaft_create and shaft_type_create; sketch_set redraws a shaft's outline. Project files move to format version 17.
  • Visual styles (#25). Every plan, elevation, section and 3D view has a visual style, also a view template property: Wireframe (every edge, no faces), Hidden line (white faces hide what is behind), Shaded, Consistent colors (material colors, unlit) and Textures (the material's appearance color with its surface pattern, drawn procedurally at real size in 3D and as hatches in 2D views). Plans in the colored styles fill the faces below the cut plane under their linework; the wireframe drops fills. Plans stay in hidden line and other views shaded unless set. view_set/template_set take visual_style, view_get shows it.
  • Railings choose their host (#97). The railing tool's On a stair or ramp option puts a railing on the stair or ramp clicked in a plan, on the side nearest the click or on both sides. A hosted railing's properties switch its side or detach it, keeping its plan path. New command railing_host_set puts an existing railing on a stair or ramp (on the side its path runs along), changes its side or inset, or detaches it; stair_railings_add takes near to pick the side nearest a point.
  • Swept profiles (#73). Architecture → Model → Sweep (SW) carries a profile along a path drawn in a plan, open or closed (around a room), at a height above the level and on either side of the path: baseboards, crown moldings, fascia boards, gutters, copings. The type holds the profile and its material; sweep_type_create makes one from points or from sketch curves (arcs included) and sweep_profile_set redraws it, refusing outlines that are open or cross themselves. Plans and ceiling plans cut and show them, legends draw the profile's section, schedules list length and volume, and IFC export writes coverings of type MOLDING. New commands sweep_create, sweep_type_create, sweep_profile_set. Project files move to format version 16.
  • Connectors in the component modeling environment (#101). A Connector tool in the Create tab places one with a click in the plan, front or side view, locked to the reference planes it lands on so it follows them; every view, 3D too, shows connectors in their system's color with the direction runs leave, and the left panel edits the name, system, position (expressions locked to planes with ⌖), direction and diameter. New commands component_connector_add, component_connector_set and component_connector_delete; component_get lists where each connector is.
  • Three-flight stairs and stairs sized by their risers (#75). A new U-shaped, three flights stair shape goes up, across and back beside its first flight, with a square landing at each corner; Risers in 1st flight and Risers in 2nd flight split the steps between the flights, and its railings run round both landings. Any stair can set its riser count (the riser height is then its height over them) and its tread depth, in the properties palette, the stair tool's options bar and stair_create (risers, tread, split2, shape three_flight); left automatic, they follow the type as before. A stair still ends with a riser: the floor above is its last step. Exported to IFC as TWO_QUARTER_TURN_STAIR.
  • Several elements edited together (#47, #69). With several elements of one category selected, the properties palette shows their type, level and shared parameters (offsets, height, sill, overhang, rotation, structural, room bounding, flips), a differing value marked ‹varies›; a change goes to all of them in one undo step. The new command elements_set merges the same params (and level) into many elements.
  • An Insert ribbon tab, between MEP and Modify, gathers what brings files in or writes them out: Import IFC, Import CAD, Import SketchUp, Import Image, Export IFC, Load Component and the Component Library. The File tab keeps the project, export, settings and help groups.
  • Views go onto sheets by dragging them from the project browser: a plan, elevation, section, 3D view, legend or schedule dropped on an open sheet is placed where it was dropped and picked there (as Place on active sheet does, centered). The paper is outlined while a view is over it; a view already on a sheet stays where it is and the status bar says why.
  • Import pictures and SVG drawings (Insert → Import Image…, or drop the file on the window; image_import). A PNG, JPEG, GIF, BMP or WebP picture or an SVG drawing goes into the active plan, ceiling plan, elevation, section or legend, under the model, as an imported drawing: pinned, moved, turned, scaled, hidden and overridden like a DWG or DXF underlay. A picture is sized by the resolution its file declares (96 dpi otherwise), or by width; the project keeps the file's bytes (as base64), and views, sheets, the PDF (as an image object), SVG and PNG exports draw it, faded when the drawing is. SVG paths become polylines (curves flattened) in their own colors, single-outline filled shapes fills, embedded pictures images; texts are not read. Project files move to format version 15.
  • SketchUp import (Insert → Import SketchUp…, skp_import): a .skp model (SketchUp 3 to the current format) is inserted into the project on the active view's level; each placed component or group becomes a component element whose type holds its faces as fixed mesh pieces, one per material. Copies that differ only by a move or a plan rotation share a type; tilted, scaled or mirrored copies get their own. Faces outside any component make one more element at the file's origin, missing materials are added with their colors, and hidden objects and layers are left out. skp_import also takes a position and rotation for the whole model.
  • Load component also opens .skp files (skp_component_load): the whole model becomes one component type, inserted at the file's origin, ready to place with the Component tool.
  • cc_skp crate: SketchUp (.skp) reader and writer without external dependencies, derived from the MIT-licensed OpenSKP toolkit (current and legacy file formats, flattened and per-definition instanced scenes, a builder that writes .skp files and reopens existing ones for editing).
  • Detail levels (#24). Plans, elevations, sections and 3D views have a detail level (coarse, medium, fine), also a view template property: coarse views cut layered walls, floors and roofs as one plain region, without layers or material patterns, and each component piece (doors and windows too) can be shown only at some levels. view_set, template_set and component_piece_set take detail.
  • DXF export (#27). File → Export DXF…, and view_export/sheet_export with dxf, write any view as DXF R12 for other CAD programs: plans, elevations and sections at full size in millimeters, sheets in paper millimeters, each element on the layer of its category, dashed lines as line types, opaque fills as solids, colors as the nearest color index. Exported files read back with Import CAD.
  • Chains step back one segment (#125). While drawing walls, beams, pipes or conduits, Backspace or Ctrl+Z takes back the last segment and the tool goes on from where it started (again and again, then the start point); Ctrl+Y puts it back. Backspace also removes a railing's last point and an arc wall's picked end.
  • Roof framing in IFC. Each purlin, rafter, batten and truss member (top chord, tie, king post, strut) is exported as an IfcMember (PURLIN, RAFTER, CHORD, POST, STRUT, battens USERDEFINED) aggregated in its IfcRoof, with an IfcMemberType per roof type and member and the framing's material. The covering and framing settings go in a ConstructCAD_Roofing property set, so importing the file restores them on the roof's type and draws the framing again instead of adding the members as objects.
  • Outlines drawn with curves. Floors, ceilings, roofs, foundation slabs and masses take curves instead of points: lines, arcs, circles, ellipses...
Read more

ConstructCAD v0.8.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 17:43

Added

  • Push/Pull on masses (#71). Massing → Push/Pull (PP) in a 3D view: click a face of a mass, move the pointer along its arrow or type the distance, and click or press Enter. The top changes the height, the bottom the base, a side of an extrusion moves its edge with the neighbors keeping their directions; a mass with a floor at every level it spans keeps one at every level it spans after. New command mass_face_move.
  • Movable tags. Tags of doors, windows, beams, columns and footings can be dragged in a plan with the Select tool; a moved tag gets a leader to its element, each plan keeps its own tag positions, and Reset Tag in the properties puts one back. New command tag_move (by delta, to an offset, or reset).
  • Conceptual masses (#31). Architecture → Massing → Mass (MS) sketches an outline and extrudes it to the level above; mass_create also lofts it to a top outline (top, or top_inset to set the base outline in). Masses are see-through in 3D views, elevations and sections and cut in the plans they cross. Mass floors at the levels a mass spans give the area of each storey: plans label the floor of their level, the properties list the levels with a box each, and the new Masses schedule shows the number of floors, the gross floor area and the volume. New commands mass_create, mass_floors_set, mass_floors and mass_type_create. Project files move to format version 14. With masses selected, Walls by Face, Floors from Mass Floors and Roof by Face build the walls (exterior faces on the mass, joined at the corners), a floor on each mass floor and a flat roof on the top; commands mass_walls_create, mass_slabs_create and mass_roof_create.
  • Update Now. When a newer version is out, the notice and the check's dialog offer Update Now where ConstructCAD can replace itself: it downloads the package that fits how it was installed (AppImage, Windows installer or .zip, macOS disk image), checks its SHA-256 against the release's SHA256SUMS.txt before anything changes, and puts it in place: the AppImage and the Windows .zip swap their files and offer a restart, the Windows installer runs when the app closes and opens it again, the disk image is opened to drag the app to Applications. A .deb copy shows the apt command instead. Downloads come only from this repository's release links, and one that does not match is deleted.
  • Views placed on a sheet are edited there (#90). Picking a view on a sheet shows, under its position, the view's own properties (scale, graphics, crop, phase…), and changes there update the sheet at once; a double click on a placed view opens it.
  • Close Inactive Views (#89): a button in the quick access toolbar and in View → Windows closes every view tab but the active one, and right-clicking a tab offers Close Other Views. It is unavailable while only one view is open.
  • Door and window heights in the properties (#70). Doors now have a Base Offset (how high they stand above the wall's base, for a raised floor or a step), windows keep their Sill Height, and both show a Head Height that can be typed: it moves the opening and keeps its height. The wall opening, the door or window pieces, plans and IFC follow, as they already did for windows.
  • Align by faces, at any angle, with clear feedback (#86). The face or line under the pointer is drawn thick, and the reference, once picked, shows as a red dashed line across the view. Elements align by the face or side picked: a wall by either face, not only its location line. When the two lines are not parallel, the element turns about the point clicked until they are, instead of being refused. element_align uses the outline edge nearest to pick and reference_pick for every element (grids and calls without a point keep the location line).
  • Window and crossing selection in 3D views (#68). With the Select tool, Shift+drag draws a selection box as in plans: dragged to the right it takes the elements wholly inside it, dragged to the left also those it touches (hidden faces count, hidden elements do not; Ctrl adds to the selection). Preferences → Interface → Dragging in 3D views selects swaps the gestures: a plain left drag selects and Shift+drag orbits.
  • Custom keyboard shortcuts: a new Keyboard shortcuts page in Preferences lists every command with its keys. Typing two letters in a command's box gives it new keys at once (tooltips, the palette and views follow); keys another command has are refused and the row names it; an empty box takes the keys away and Default brings them back; a search finds commands by name or keys. Ctrl shortcuts stay fixed. The choices are kept with the other preferences.
  • Import DWG and DXF drawings as underlays (#27). File → Import CAD… (or dropping .dwg/.dxf files on the window) places a drawing in the active floor plan, ceiling plan, elevation, section or legend, as thin grey lines and texts under the model, to trace walls and elements over. DXF (ASCII and binary, any version, pre-2007 code pages included) is read by a new in-house reader in the cc_cad crate: layers (off and frozen ones start hidden), blocks (nested, scaled, rotated, arrayed; layer 0 and BYBLOCK colors follow the insert), lines, polylines with bulges, circles, arcs, ellipses, splines, points, TEXT and MTEXT (formatting stripped), dimensions (their blocks), hatch boundaries (solid ones filled), solids, 3D faces and leaders, in their object coordinate systems; other entities are counted and skipped, and file size, primitives, nesting and work are bounded. DWG files (R12 to 2018 and later) are read with the acadrust library and go through the same reader. The drawing starts pinned, snaps to its endpoints, midpoints, centers and lines, and is picked only where no model element is. Its properties set units (from the file, else assumed), scale, rotation, position, colors (grey, layer colors or black), halftone and which layers show; the Imported CAD category hides or overrides it in Visibility/Graphics. It prints on sheets and exports, and is left out of 3D views and IFC export. New commands: cad_import, cad_layers, cad_layers_set; element_set edits the placement.
  • Equalities and sketch points (component modeling environment, phase 3). Equality (EQ) keeps a reference plane halfway between two parallel ones ((a + b) / 2), drawn as two dimensions marked EQ; commands component_equal_add and component_equal_delete. A sketched piece's properties list its points (and a sweep's path and section, a blend's top) as expressions, each lockable to a plane seen edge-on in the sketch's view.
  • Sweeps and blends (component modeling environment, phase 2). Sweep carries a rectangular or round section along a path of lines and arcs drawn in a view, mitered at the corners; Blend joins a bottom outline to a top outline drawn in the same view (the outlines are resampled evenly around, so a square can blend into a circle). Both are solid or void pieces whose coordinates lock to reference planes. component_piece_add takes kind: "sweep" (with path) and kind: "blend" (with top), and component_piece_set changes them. The quick editor lists their fields too.
  • Sketched component pieces (component modeling environment, second part). Extrusion and Revolution in the Create tab draw an outline (lines with arcs, a rectangle or a circle) in the plan, front or side view, solid or void; points on reference planes are locked to them, so pieces follow the parameters that drive the planes. A revolution's axis is a vertical plane or a point. Pieces are selected by their edges and edited in the left panel (name, void, shown in plans, material, start and end or axis and angle, lockable to planes). New engine commands component_piece_add, component_piece_set and component_piece_delete; examples/component_bench.ccmacro models a parametric bench with commands only.
  • Component modeling environment, first part. Edit Component opens a workspace of its own for a component: plan, front, side and 3D views, a Create ribbon tab, and a left panel with the component's types, parameters and the selected plane or dimension. Components gain reference planes (three origin planes, CenterX, CenterY and Base, plus planes drawn with Reference Plane) whose positions are expressions and whose names every expression of the component can read. Dimension measures two parallel planes, and labeling it with a parameter makes the parameter drive the plane. Every change applies to all types of the component in one undo step; Finish keeps the changes, Cancel Editing undoes them. The older editor stays as Quick Edit…. New engine commands: component_get, component_param_add/set/delete, component_ref_plane_add/set/delete, component_ref_line_add/delete and component_dimension_add/set/delete.
  • Imperial units (#80). The project length unit can be decimal feet, decimal inches, feet and fractional inches (12'-6 1/2") or fractional inches (150 1/2"); for the fractional ones the precision goes from 1" to 1/64" and values round to it. Areas can be square feet or square inches, volumes cubic feet, cubic yards or US gallons. Lengths are typed the same ways — 12'6", 12'-6 1/2", 12' 6.5", 6 1/2", 3/4", 12ft 6in, and in feet and inches bare numbers as feet then inches (10 6 1/2); metric values with their symbol (2,5 m) still work — in property fields, dimension values and while drawing. Beam, column and footing section tags and pipe, conduit and bar diameters show in inches. Imperial (US) in the Project Units dialog (or units_set with preset: "imperial") sets feet and inches to 1/16", square and cubic feet and point decimals; Restore Defaults goes back to metric. The model still stores meters. Project files move to format version 13.
  • Ordinate (running) dimensions (#83). The new Ordinate dimension tool (Annotate tab) measures from an origi...
Read more

ConstructCAD v0.7.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 18:52

Added

  • 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.

ConstructCAD v0.6.1

Choose a tag to compare

@github-actions github-actions released this 28 Oct 12:45

Added

  • Lao interface (ພາສາລາວ, lo), contributed by @bounkirdni-2025. It is picked from the system language for lo.
  • Lao text shows in the interface and in PNG export through a system font that has Lao letters (Leelawadee UI on Windows 10 and later, Lao Sangam MN on macOS, Noto Sans Lao or Phetsarath on Linux), after the CJK ones. No font is bundled.

Changed

  • Faster 3D views. Ending an orbit, pan or zoom no longer rebuilds the model's geometry and every view's drawing (saving the camera redraws only that view and the sheets showing it); selecting, hiding or isolating elements repaints the 3D mesh instead of rebuilding it; an unchanged 3D view is not rendered again on every repaint; clicking to select tests the nearest elements first (about 10 times faster). Outline edges of dense meshes, such as imported IFC elements, are found in near-linear time (an element of 8,000 triangles: 184 ms → 13 ms).

Fixed

  • Component editor: text fields shrank to a few letters, the dialog stretched to the window's width, the piece buttons (move down, remove) and the connectors were cut off, and the dialog could run off short windows. The fields have fixed widths, the previews sit in a column beside the parameters and pieces, the connectors span the width below, and the body scrolls when the window is short.
  • A 3D view of only transparent solids (with no edges) showed nothing.

ConstructCAD v0.6.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 00:00

Added

  • Doors and windows are components that open walls. A component of kind Door or Window with a wall opening (width, height and default sill as expressions of its parameters) makes door or window types: they cut that opening in their wall and their pieces, resolved with WallThickness (the wall's thickness) and centered on the opening, mirror with the door's flips. Plans draw the category's swing or sash lines, or the component's own symbol (Own plan symbol). Tags, schedules, legends, dimensions, phases and IFC (IfcDoor/IfcWindow with the pieces as body) work as before. The template's door and window types, and those imported from IFC, are built-in components; the component editor edits the opening; component files carry door and window components. component_create takes kind: "Door"/"Window" and opening.
  • Plan-only component pieces: 2D symbols such as a door's swing (a plan profile with an arc), drawn in plans and legends with no solid in 3D, in the component's cuts or in IFC. The component editor marks them (Plan only).
  • Component connectors: a component lists where pipes and conduits connect, each with a name, a system kind (cold or hot water, sanitary, vent, rainwater, power, lighting), a position and direction (expressions) and a diameter. The networks attach each connector to a run of its kind, and mep_connect starts each branch at its connector, of its diameter, leaving vertically or across as it points. The template toilet has a sewer outlet and a cold water inlet, the washbasin waste, cold and hot water. The component editor lists the connectors and marks them in its previews.
  • Component library window (Architecture → Component Library…): browse the component files (.ccomp) of the folders you add (kept with the preferences), such as a copy of ConstructCAD Components; search by name, type or description, filter by kind, see a component's types, parameters, connectors and plan, load it into the project (doors and windows start the wall tool) and save a project component into a library folder. The engine command component_library_list lists the folders for the command line and MCP.
  • Arc walls trim, extend and align: Trim/Extend to Corner and to a reference work along an arc wall's circle and to it (lines and circles meet where they cross; of two crossings, the one on the elements, else the one that changes them least), and an arc wall aligns onto a concentric one (its radius changes, its openings keep their angles). An arc wall picked as a mirror axis mirrors across its axis of symmetry.

Changed

  • .ccad format version 12: door and window types are components. Older files open with their door and window types turned into the built-in door and window components of the same sizes. Files saved by 0.6.0 do not open in 0.5.0.

ConstructCAD v0.5.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 19:39

Added

  • Arc walls: a selected arc wall shows a round handle at the middle of its arc; drag it to change the curvature (the arc passes through the cursor, its ends stay). While drawing an arc wall, after the start and the end, type a radius and press Enter: the arc takes the cursor's side, the shorter or the longer one, whichever middle is nearer the cursor. wall_create takes radius (signed by the turn) and major_arc.
  • Traditional Chinese interface (繁體中文, zh-TW), contributed by @yoyomaimai. It is picked from the system language for zh-TW, zh-HK, zh-MO and zh-Hant.
  • Chinese, Japanese and Korean text shows in the interface and in PNG export through the system's CJK fonts (Microsoft JhengHei, PingFang, Noto Sans CJK…). They used to show as boxes. No font is bundled. PDF export still writes such text as ?.
  • Doors and windows can be placed in a 3D view: with the Door or Window tool active, click a wall. The opening is centered where you clicked, at the type's sill, facing that side.

Fixed

  • Duplicate in the Type Properties dialog kept the default "(copy)" name unless Enter was pressed: clicking OK or another field dropped the typed name. The name is now kept either way.
  • Snapping only knew wall axes, so clicks at the corner of a wall, as drawn, missed it (sketching a ceiling inside a room, moving an element). Wall faces and corners, column and stair outlines, sketch edges, railings, and grid lines and their crossings are now snap points in every tool.
  • A door or window copied without its wall and pasted on another level stayed on the wall it was copied from. It now goes into the wall where it lands on the target level, and is skipped when there is no wall there.
  • Elevations and sections of a project with nothing modelled yet showed no level lines. They now span the grids, or a few meters from the origin.
  • The Filters and View Templates dialogs grew a little every frame until their header, list and buttons left the window, leaving a blank panel: the divider between the list and the details took the dialog's whole height. It now ends with the taller column.
  • Floors, roofs and ceilings created from walls follow the outer boundary of the level's walls: interior walls meeting the outer corners no longer lead them around an inner loop (an L-shaped house got its old rectangle), and walls hanging off the outline (garden walls) are left out. With separate buildings on a level, the largest is taken.
  • Zoom to fit in plans frames the model and its annotation, leaving out the elevation markers around it and the far clip lines of sections, so the building no longer looks small.
  • View filters: a rule on a field that none of the filter's categories has (width on walls) matched nothing without a word. filter_create and filter_set now refuse it, naming the categories the field applies to, and the filter editor only offers the fields of the checked categories. Door schedules can show the sill height.
  • Download in the update notice and the repository link in About did nothing: the app was built without opening links in the browser.

ConstructCAD v0.4.2

Choose a tag to compare

@github-actions github-actions released this 25 Oct 18:05

Added

  • Linux on arm64 (aarch64): releases include a .deb (arm64), an AppImage and a .tar.gz for 64-bit Arm, built natively on Ubuntu 22.04.

ConstructCAD v0.4.1

Choose a tag to compare

@github-actions github-actions released this 25 Oct 01:59

Changed

  • A 2D view, sheet or 3D view left zoomed to fit fits again when its pane changes size (a maximized window restored, a split moved), until it is panned or zoomed by hand. Views named with --view replace the default layout: the first on the left, the second on the right.

Fixed

  • Linux: the AppImage starts on systems without the X11 keyboard and cursor libraries (it bundles libxkbcommon, libxkbcommon-x11, libXcursor, libXi and the libraries they need), and the Linux builds run on older distributions (built on Ubuntu 22.04, glibc 2.35, instead of 24.04).

ConstructCAD v0.4.0

Choose a tag to compare

@github-actions github-actions released this 24 Oct 23:13

Added

  • Arc walls: a wall's location line can be a circular arc. The wall tool gains Line/Arc modes in the options bar; in Arc mode click the start, the end and then a point on the arc (with a live preview, radius and length), and the chain goes on from the arc's end. Layers, faces and cut patterns follow concentric arcs; arc walls join straight and arc walls at corners, tees and junctions (faces meet where their lines and circles cross; walls continuing along a common tangent butt square), host doors and windows along the arc (offsets measured along the centerline, frames square to the wall at the opening), bound rooms and give floors and roofs drawn from walls their curve. Length, side area and volume are exact (along the centerline arc). Plans draw the arcs (radial and diameter dimensions pick them), and elevations, sections and 3D draw curved faces without seams between facets. Splitting keeps each part on the arc, offsetting makes a concentric copy, end handles and move, rotate, mirror and copy keep the arc; trimming, extending and aligning need straight walls. The properties show the arc angle (editable) and radius.
  • wall_create takes mid (a point on the arc) or bulge (tan of a quarter of the sweep); element_get shows bulge among a wall's params (editable with element_set) and the arc's center, radius and sweep among the derived values. Arcs too tight for the wall's thickness, and three points in line, are refused.
  • Roofs over any footprint: gable and hip roofs are computed as a weighted straight skeleton of the outline (sloped eaves rise at the roof's slope, gable edges stay vertical), so L, T, U and other concave outlines get proper hips, valleys and ridges, and gables can stand above a lower roof beside them. Plans draw the ridges, hips and valleys; 3D, elevations, sections, volumes and IFC export (faceted B-rep) use the computed planes.
  • Roof openings (courtyards): a roof can have openings inside its outline, around which pitched roofs slope down to their own eaves (the overhang reaches over them). The roof properties gain Openings with Add Opening (sketch it in the plan) and Remove Openings; roof_create takes holes, and element_set edits them (openings must lie inside the outline, apart). Flat and shed roofs are cut by them too; areas, volumes, schedules and IFC export (Qto_RoofBaseQuantities) leave them out. element_get reports a roof's plan_area and its ridges.
  • IFC import brings this program's pitched, flat and shed roofs back with their outline, openings and exact slope (from the B-rep's faces). CI validates a roof fixture.
  • IFC export writes an arc wall's axis as an IfcTrimmedCurve on an IfcCircle and its body as an extruded profile of arcs and lines (IfcIndexedPolyCurve), with its openings as sectors through the wall; import brings such walls back as arc walls with their doors and windows. CI validates an arc wall fixture.
  • Update notice: at startup, at most once a day and in the background, the app asks the GitHub API for the latest release and, when it is newer than the running version (pre-releases ignored), shows a notice in the status bar and on the home screen with Download (opens the release page in the browser), Skip This Version and dismiss. Nothing is downloaded or installed. File → Check for Updates (also in About) checks on request and reports the result. Automatic checks can be turned off in About, and CONSTRUCTCAD_NO_UPDATE_CHECK=1 turns every check off; failures are silent. See Update notice in the interface guide for what is contacted.
  • View graphics in the engine: per-view category visibility and overrides (projection and cut lines: color, weight, pattern; surface and cut fills: color, pattern; halftone; transparency), element overrides and hiding in one view, applied to plans, ceiling plans, elevations, sections, 3D views, sheets and PDF/SVG export. Commands view_graphics_get, view_graphics_set, element_override_set and element_hide_in_view; deleting an element drops its overrides.
  • View filters: named, project-wide sets of categories and rules on parameters (any schedule field or the level elevation; equals, contains, begins with, greater/less (or equal), has (no) value and their negations; all or any rule). Views apply them in order with visibility and overrides — the first matching filter wins per attribute, element overrides beat filters and filters beat the category. Commands filter_create, filter_set, filter_delete, filters_list, filter_elements, view_filter_add, view_filter_set, view_filter_move and view_filter_remove.
  • View templates: scale, category graphics, filters, plan cut height, building services display and structural display, each with an include flag. Applied once (view_template_apply) or assigned (view_template_assign): an assigned view follows the template in the same undo step and refuses edits of what it controls; deleting a template frees its views. Commands template_create (from a view), template_set, template_delete and templates_list; view_get reports a view's template.
  • Temporary hide/isolate of elements and categories per view (view_temporary): session display state, not saved, not undone and not printed; view_temporary_apply makes it permanent as one undo step.
  • View graphics in the app (View → Graphics): a Visibility/Graphics dialog (VG) with model and annotation category tables and a filters tab, a filter editor (categories, rules, AND/OR, matching count), a view template manager (Manage too) with an include box per property, Apply Properties and Assign to View, Override Graphics and Hide in View (EH) for the selection, and the view's template in its properties (controlled properties read-only). Temporary Hide/Isolate of elements and categories (HH, HI, HC, IC, HR) marks the view with a colored border and a chip with Reset and Make Permanent. 3D views show category and element colors, transparency, halftone and hiding.
  • Construction phases (renovation work) in the engine: an ordered list of project phases (Existing and New Construction in the template) that elements are built in and demolished in, and a phase and phase filter for each plan, elevation, section, 3D view and schedule. Relative to the view's phase an element is existing, demolished, new or temporary (built and demolished in it); elements built later or demolished earlier are left out. Phase filters (Show All, Show Complete, Show New, Show Previous + Demo, Show Previous + New, Show Previous Phase, Show Demo + New, and your own) show each status by category, with the project's graphics for it (existing faint, demolished dashed, temporary faint and dashed) or not at all, in plans, sections, elevations, 3D, schedules, sheets and PDF/SVG export; view templates control the phase filter. Doors, windows and rebar follow their hosts' phases (demolished with them unless demolished earlier), copies are built in the creation phase, rooms are bounded by the walls standing at the end of their phase, and views of a phase that leaves elements out get geometry of their own (later doors do not open existing walls; walls join within the phase). Schedules gain Phase Created and Phase Demolished fields. Commands phases_list, phase_create, phase_set, phase_delete (with merge_into), elements_phase_set, elements_demolish, phase_creation_set, phase_filters_list, phase_filter_create, phase_filter_set, phase_filter_delete, phase_graphics_get and phase_graphics_set; view_set takes phase and phase_filter, template_set a phase_filter, and element_get and view_get report them.
  • IFC export writes each element's construction phase status relative to the last phase as the IFC4 Status enumeration (NEW, EXISTING, DEMOLISH, TEMPORARY) in its common property set (Pset_WallCommon, Pset_DoorCommon…), the names of its phases in ConstructCAD_Phasing and the project's phases in ConstructCAD_Phases; import restores the phases by name, or maps Status alone onto the last two phases. CI validates a phases fixture.
  • Construction phases in the app: Manage → Phases (phases: add, insert, rename, reorder, delete with a merge target; phase filters: each status not displayed, by category or overridden; graphics of each status), with OK/Cancel undoing as one dialog. Views (plans, elevations, sections, 3D, schedules) get Phase and Phase Filter in a Phasing section of their properties (read-only when the template controls the filter), elements Phase Created and Phase Demolished, and view templates a Phase Filter row. Modify → Demolish (DE) demolishes the clicked elements in the active view's phase. New elements are built in the active view's phase (phase_creation_set), 3D views show their phase's geometry and schedules list their phase's elements.
  • ccad --version (-V) prints the version.
  • Installers in every release, built by the release workflow from packaging/: a Windows MSI (WiX; per-machine under Program Files, Start menu shortcut, .ccad file association, optional ccad on the PATH, in-place upgrades), a Linux .deb and AppImage (desktop entry, icon, .ccad MIME type) and a macOS .dmg per architecture with an ad-hoc signed ConstructCAD.app (icon, .ccad document type). All are listed in SHA256SUMS.txt, next to the existing archives.

Changed

  • .ccad format version 11 (construction phases); older files open with the template's phases, everything built in the last one and views showing all. Version 10 added view graphics, filters and templates; older files open with default graphics. Version 9 added arc walls and roof openings; older files open with straight walls and roofs without openings.
  • On Linux the window reports the app id constructcad, matching the desktop entry, so desktops show its icon and name.