ConstructCraft

The interface: ribbon, commands and palette

Versão em português: interface.pt-BR.md.

ConstructCraft’s window follows the layout desktop CAD and BIM users expect. The quick access toolbar sits at the top left. Below it is the ribbon, a row of tabs with groups of buttons. The options bar for the active tool comes next. The project browser and properties are docked on the left, the views fill the tabs in the middle, and the status bar is at the bottom. When many views are open, Close Inactive Views (in the quick access toolbar and in View → Windows) closes every tab but the active one, and right-clicking a tab offers Close Other Views.

Commands and their tooltips

Every button in the ribbon and the quick access toolbar runs an interface command. So does every two-letter shortcut and every entry of the command palette. Each command defines, in one place:

Hover over a button to see its tooltip:

Move  [MV]
Moves the selected elements from a base point to a target.
Unavailable: Select the elements before using the tool
Engine command: elements_move

Buttons that cannot run are greyed out, and their tooltip gives the reason. Typical reasons are “nothing to undo”, “select the elements first”, “open a sheet to export it”, “select one text note” and “copy elements first”. A shortcut typed when its command cannot run shows the same reason in the status bar.

Icons and badges

Icons are drawn in two tones: the strokes in the text color and the soft fills in the theme’s accent tint. A small badge in the bottom-right corner marks what kind of action a command is:

Badge Meaning Examples
green + creates something new new floor or ceiling plan, 3D view, legend, drafting view, schedule, sheet, new component
blue arrow down brings data in from a file Import IFC, Import CAD, Load component
blue arrow up writes data out to a file Export PDF, Export SVG, Export Image, Export DXF
red − removes something Delete

The selected tool is highlighted in the accent color. Unavailable commands are greyed out, badges included.

Collapsing the ribbon

To give the views more room, collapse the ribbon to its tab titles. Any of these collapses it or expands it again:

While the ribbon is collapsed, a click on a tab shows that tab’s panel over the views. The panel closes when a command runs, when you press Esc or click elsewhere, or when you click the same tab again. Whether the ribbon starts collapsed is set in Preferences → Interface.

Narrow windows

When the window is narrower than a tab’s groups, the groups scroll sideways instead of being cut off. Arrows appear at both ends of the row: click them to scroll, or use the mouse wheel. Each arrow is greyed out once that end is reached.

Command palette

Ctrl+Shift+P opens the command palette, as does the magnifier at the right end of the tab row. Type part of what you are looking for. The search ignores case and accents (“niveis” finds “Níveis”), and every word you type must match. The palette finds:

Use ↑ and ↓ to choose and Enter to run, or click an entry. Esc closes the palette. An unavailable command stays in the list, greyed out, with its reason in place of the description.

Running engine commands

Choosing an engine command opens a form with its description and its arguments in JSON, already filled with the required fields:

{
  "elevation": 9.0,
  "name": "Roof deck"
}

Run (or Ctrl+Enter) executes the command in the open project and shows its result or error message. An edit is one undo step and is recorded while a macro is recording, like any other change. Back (or Esc) returns to the search. The arguments are the same as in scripts and in the command reference. Lengths are in meters, angles in degrees, points are [x, y], and levels, types, views and materials can be named by id or by name.

The engine’s file commands (project_open, project_save, ifc_import, ifc_export, sheet_export, view_export…) are not offered here. Their interface commands in the File and Insert tabs and the palette handle files through the usual dialogs.

Keyboard

Key Action
Ctrl+Shift+P Command palette
Ctrl+F1 Collapse / expand the ribbon
Ctrl+, Preferences
Ctrl+N / Ctrl+O / Ctrl+S / Ctrl+Shift+S / Ctrl+W New / Open / Save / Save as / Close project
Ctrl+Z / Ctrl+Y Undo / Redo
Ctrl+X / Ctrl+C / Ctrl+V Cut / Copy / Paste
Delete Delete the selection
Esc Cancel the operation, leave the tool, clear the selection
Backspace While drawing a chain of walls, beams, pipes or conduits: take back the last segment and go on from its start (Ctrl+Z too; Ctrl+Y puts it back); a railing’s last point
Space Rotate or flip the selection or the element being placed

Two-letter keys work while a view has the focus and no text field is being edited. The README lists them all. Each tooltip shows its own shortcut as well.

Selecting in 2D views

A click picks the element under the pointer (Ctrl adds or removes it). A drag that starts on empty paper, or inside a floor, a hatch or another fill, draws a selection box: dragged to the right it is a window and takes the elements wholly inside it (their lines, fills and texts); dragged to the left it is a crossing, dashed and green, and also takes those it cuts or lies in: a wall crossed between its ends, a floor around the box, a text anchored in it. Room areas and imported drawings are not taken by a crossing (a window around them takes them). Ctrl keeps the current selection and adds to it. A drag that starts on an element’s line, or on an element already selected, moves it instead (Ctrl+drag copies).

Tags of doors, windows, beams, columns and footings can be dragged to another spot with the Select tool (the pointer turns into a hand over them). The tag keeps its text and gets a leader back to its element; each plan keeps its own tag positions (a duplicated plan starts with those of the original). Reset Tag, in the element’s properties, puts it back where it sits by default.

Annotate → Levels places level marks. Level in Plan (in a floor or ceiling plan) draws a circle with two filled quarters on the clicked point and writes the finished level of the floor under it above a shelf line and the raw level of its structure (the top of the layers below its finish) under it; off any floor it writes the plan’s level. Level in Section (in a section or elevation) draws a triangle pointing down to the point and writes its height, with the raw level when the point lies on the top of a cut floor; in a section the tool snaps to the view’s lines, so a click on a floor’s top line lands on it. The values follow the model; in the properties palette a mark can set either level by hand, hide the raw one or put the values on the left. The type holds the text size, the datum (the value written for the project’s zero, e.g. 100.00) and the suffixes, (N.A.) and (N.O.) by default in Portuguese.

Editing several elements

With several elements of one category selected, the properties palette shows their Type and Level (Base Constraint for walls, columns, stairs, ramps and shafts) and the parameters they share: the walls’ Location Line, the base offset, the Top Constraint (unconnected, or up to a level; walls made unconnected keep their height) with its offset or the Unconnected Height, sill height, overhang, rotation, Structural, Room Bounding, the walls’ joins at their ends, flips, and the identity data (Mark and Comments). A value that differs among them shows ‹varies› (an indeterminate box for on/off ones); choosing or typing one sets it on all of them in one undo step (the command elements_set; types through elements_set_type). A mixed selection shows how many of each category and Delete.

Selecting in 3D views

With the Select tool, a click picks the element under the pointer (Ctrl adds or removes it). Shift+drag draws a selection box, as in plans: dragged to the right it is a window and takes the elements wholly inside it; dragged to the left it is a crossing and also takes those it touches. Elements behind others count too; hidden ones do not. Ctrl keeps the current selection and adds to it. With Dragging in 3D views selects on in Preferences → Interface, a plain left drag draws the box and Shift+drag orbits instead.

Modifying in 3D views

Move, Copy, Array, Rotate, Mirror (pick or draw the axis), Align and Join Geometry/Unjoin Geometry also work in 3D views; left-drag still orbits (or Shift+drag, see above), middle or right drag pans.

View graphics

View → Graphics holds Visibility/Graphics (VG), Filters and View Templates (also under Manage).

Sketching outlines

Floors, ceilings, roofs, foundation slabs and masses are sketched in a plan. Their tool opens a sketch: the ribbon shows Create Boundary with the drawing tools until Finish or Cancel.

Roof coverings and framing

A roof type sets its covering and its framing, in the type dialog’s Covering and Framing section.

Conceptual masses

Massing & Site → Massing → Mass (MS) sketches an outline in a plan, like a floor, and extrudes it up to the level above. Masses are for massing studies before walls and floors exist: see-through bodies in 3D views, elevations and sections, cut in the plans they cross.

Terrain

Massing & Site → Site → Terrain (TS) sketches the terrain’s boundary in a plan, like a floor’s outline, and places its measured points: Points → Point clicks a point at the elevation set in the options bar (above the level), and undo takes points back like curves. Finish triangulates the points with the boundary; the boundary takes the elevations the points give it, points beyond it included, and the earth closes down to a flat base. A project without a terrain type gets one, cut in an Earth material (a woven hatch).

Massing & Site → Site → Building Pad (PD) sketches a pad’s outline on the terrain of the plan’s level, at the Elevation of the options bar; without a terrain there the button says so. Finish grades the terrain: flat inside the outline, a cut slope where the ground stands above the pad and a fill slope where it lies below, out to where they meet the existing ground (the daylight line).

Railings and their hosts

Curtain walls are walls of a curtain type (a project without one gets one from the wall tool’s type list: + Curtain Wall). Their type properties set the vertical and horizontal grids (layout, spacing or number, justification), the panel (glass, solid, empty, or a door, window or other component) and the vertical, horizontal and border mullions. Architecture → Build → Curtain Grid edits one wall’s grid by clicking it in a plan, elevation or section: Add Line (vertical or horizontal; plans add vertical ones), Remove Line (the nearest), Merge/Split Segment (the piece of a line between two others: the cells on both sides become one panel, or two again) and Swap Panel (the panel chosen in the options bar, or the type’s again); hovering shows what a click does. A selected curtain wall’s properties show its cells, panel count, glazed area and mullion length, and Reset puts back the type’s lines or panels.

Architecture → Circulation → Railing (RA) draws a railing along the points you click, at its level plus the base offset. A railing can also follow a stair or ramp (its host): it runs along the host’s side at the pitch of the nosings or of the slope, turns at its landings, and moves, changes and is deleted with it.

Shafts

Architecture → Floors & Roofs → Shaft (SF) sketches the outline of a vertical opening (a duct chase, a lift or stair shaft, a light well) in a plan, like a floor’s outline; it rises from its level to the highest level above (or a level or height set in its properties). A project without a shaft type gets one the first time.

Swept profiles

Architecture → Model → Sweep (SW) carries a profile along a path drawn in a plan: baseboards, crown moldings, fascia boards, gutters, copings. A project without a sweep type gets one the first time (a baseboard 1.5 × 10 cm).

Drafting views

Callouts and detail views

Detail lines

Line styles, filled and masking regions

Detail components

Imported CAD drawings

Construction phases

Sheets and title blocks

A sheet’s properties set its number, its title block (a title block type of the project, or None for blank paper), its paper size (A0 to A4, or Custom with a width × height in millimeters between 50 and 5000) with Portrait to put the long side up, and its issue date (typed as YYYY-MM-DD; Today fills it in). Sheet Fields lists the title block’s per-sheet fields: type a value for this sheet, or leave the row empty to use the title block’s own text, shown greyed. When a piece of the active sheet’s title block cannot be drawn (an expression that does not resolve), the status bar names it.

Manage → Project → Project Information has a Project fields table: your own values, such as the engineer or the permit number, each with a name and a value. + Add field adds one, a name is changed by typing over it (Enter), × removes it. Title blocks show them as {project:Name}.

A title block draws the whole sheet: border, margins, the block itself, logos. It is a component (category Title Blocks), so it is saved to and loaded from .ccomp files and the component library. Modify → Title Block → Edit Title Block (or Edit Title Block in a sheet’s right-click menu, in the view or the project browser) opens the active sheet’s title block in the editor; View → Documentation → New Title Block makes one from the standard layout and opens it; loading a title block from the library opens it too.

Component modeling environment

Edit Component (Architecture → Model, or Edit Component… in a component type’s properties) opens a workspace of its own for the selected component, or the one the Component tool places. Quick Edit… keeps the older one-window editor.

Preferences

File → Preferences (Ctrl+,, also at the bottom of the home screen) holds the settings of the app itself; they are not part of any project and are kept between sessions. Pick a page on the left. Changes show at once; OK keeps them and Cancel (or Esc) brings back the values the window opened with. Restore defaults (bottom left) resets the settings of the page shown; the language and the folders stay as they are.

Visual programming

Manage → Macros → Visual Programming opens the graph editor in a panel under the views, so the model and the graph are seen together (constructcraft project.ccad --graph file.ccgraph opens one at startup). A graph is a set of nodes joined by wires (see Visual programming graphs for what the nodes do and how running again updates the model).

Plugins

Plugins add commands to ConstructCraft (see Plugins in the automation guide). Manage → Plugins holds two buttons: Plugins… opens the Plugins window, and Plugin Commands is a menu of the installed plugins’ commands, by plugin; choosing one opens its form in the command palette, where Run executes it as one undo step and shows what the plugin printed. The palette also finds plugin commands by name.

The Plugins window has two tabs:

Only this tab reaches the network: it reads the index and the archives it lists, over HTTPS, when you ask. Reload Plugins reads the folder again, after you add or edit a plugin by hand. Plugins are loaded when the app starts and stay loaded when you open another project.

Update notice

ConstructCraft tells you when a newer version is published; it never downloads or installs anything by itself, only when you choose Update Now.

Autosave and recovery

A minute after a project gets unsaved changes (a new project that was never saved too; Preferences → Saving sets another interval or turns autosave off), ConstructCraft writes a copy of it, in the background, to the recovery folder of its data folder (%APPDATA%\ConstructCraft\data on Windows, ~/Library/Application Support/ConstructCraft on macOS, ~/.local/share/constructcraft on Linux). It writes again only after the model changes, and never over your project file. Saving, closing the project or quitting removes the copy.

If ConstructCraft crashes or is killed, the next start shows Recover Unsaved Work with the copies left behind: Restore opens the chosen project with its unsaved changes (saving it writes to its original file, or asks where for a project that was never saved), Discard deletes the copy, and Cancel keeps the copies for the next start. A crash in the interface also writes a last copy before the app closes, and every crash is appended to crash.log in the data folder; attach it when you report a crash.

Graphics start-up

ConstructCraft draws with the system’s native graphics API (DirectX 12 or Vulkan on Windows, Metal on macOS, Vulkan on Linux) and falls back to OpenGL by itself when that fails, which some older or small integrated GPUs need:

Accessibility

The ribbon buttons, tab titles, scroll arrows, palette entries, browser rows, home screen cards, dialog close buttons, property sections and the view cube’s home button are drawn by ConstructCraft itself. They report their role (button, selectable item, collapsible header), their name and their state (enabled, selected, expanded) to the operating system’s accessibility interface, so screen readers can announce them.

For developers

Adding a command to the interface

  1. Make the change an engine command first (see For developers in the automation guide).
  2. Add a variant to UiCommand in crates/cc_app/src/commands.rs. Then fill in its icon, label, description (an i18n key cmd-desc-… in every .ftl file), shortcut (if any), engine (the engine command’s name), badge, unavailable (a localized reason for each state in which it cannot run), selected (for tools) and run. Add it to UiCommand::all.
  3. Place it in a ribbon group with command_button (large) or in a family of small buttons with stacks (crates/cc_app/src/ribbon.rs).

The tooltip, enabling, the palette entry and a two-letter shortcut all follow from the command. Tests check that each engine name exists in the catalog, that shortcuts are unique, and that every command appears in the ribbon with an accessible name.

Icons

Icons are SVG files in assets/icons/ui on a 24-unit grid. They use white strokes (stroke-width 1.75, round caps and joins) and soft fills written as fill="#fff" fill-opacity=".2". icons.rs splits each icon into two layers by those attributes: the strokes and solid marks form the ink, and the soft fills form the tint. Each layer is rasterized with resvg at the exact pixel size and painted in the theme’s colors (icons::Tones). Add the new icon to Icon, Icon::ALL and Icon::source. ICON_SHEET=sheet.png cargo test -p cc_app icon_sheet writes every icon at several sizes for review.

Theme

Colors are tokens of theme::Palette: PALETTE (light) and DARK, with a test of their contrast. Paint with theme::palette(ctx) so a dark theme can be switched on later.

Interface tests

crates/cc_app/src/ui_tests.rs runs the ribbon and the palette headlessly with egui_kittest. The tests click and type through the accessibility tree, so custom widgets must call Response::widget_info. Screenshot references live in crates/cc_app/tests/snapshots. They cover each ribbon tab, the narrow and collapsed ribbon, a rich tooltip, the palette, each page of the Preferences window, and an icon gallery in both themes. GPUs render slightly differently, so the screenshot comparisons run on request:

CC_UI_SNAPSHOTS=1 cargo test -p cc_app snapshots     # compare with the references
UPDATE_SNAPSHOTS=1 cargo test -p cc_app snapshots    # rewrite them after an intended change

Review the new images before committing them. On a mismatch, kittest writes *.new.png and *.diff.png next to the references; Git ignores those files.