Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Line Types

Every piece of geometry is drawn with a line type — either one of the built-in patterns or a custom linetype defined in TOML. Line types can be set in two places:

  • Per layer — the Line type dropdown in the layer panel applies to all geometry on the layer (see Layers).
  • Per geometry — the Linetype dropdown in the properties panel overrides the layer setting for the selected geometry. Choosing Default in the layer dropdown lets each geometry use its own setting.

Built-in line types

Continuous (the default), Dashed, Dotted, Dash-Dot, Dash-Dot-Dot, Center, Hidden, and Phantom.

Custom line types

Nullcad ships a default library of survey-oriented linetypes (Boundary, Easement, Traverse, Wire Fence, Water, Gas, Sewer, and more) and lets you define your own in a TOML file. Custom linetypes can include text and symbols repeated along the line — e.g. a water main drawn as ———— W ———— W ————.

  • Import: File -> Import -> Linetypes (TOML). If an imported name matches an existing linetype, a conflict dialog asks whether to overwrite the existing definition or skip the incoming one. Overwriting keeps existing geometry pointing at the updated definition.
  • Export: File -> Export -> Linetypes (TOML) writes the document’s custom linetypes to a file you can share or re-import elsewhere.

Custom linetypes are stored in the document itself (and in templates), so a drawing always carries the definitions it uses.

The TOML format

[linetypes.myline]                # Required namespace; the key must be unique
name = "My Line"                  # Required; shown in the linetype dropdowns
description = "A test linetype"   # Optional, shown alongside the name
pattern = [                       # Required: the repeating pattern
    { stroke = 3.0 },             # Visible dash, 3 mm long
    { gap = 2.0 },                # Invisible break, 2 mm long
    { text = "E", font_size = 2.5 },
    { symbol = "M -1 -1 L 1 1", scale = 1.0 },
]

A file can contain any number of [linetypes.<key>] tables. The pattern list repeats along the whole length of the line.

All dimensions are in millimetres of paper at 1:1, scaled on screen and in output by the current linetype scale — a 3.0 stroke prints 3 mm long at 1:1, 3 m ground at 1:1000.

Pattern elements

Each entry in pattern is one of five element types, chosen by which keys it contains:

ElementKeysNotes
StrokestrokeVisible dash; the value is its length in mm.
GapgapInvisible break; the value is its length in mm.
Dotdot = trueA point marker occupying 0.5 mm of pattern.
Texttext, font_size, rotationText along the line. font_size is in mm (default 2.5); rotation is in degrees relative to the line direction (default 0).
Symbolsymbol, scale, rotation, keep_strokeA small vector shape (see below). scale defaults to 1.0, rotation to 0.

Only the keys shown are recognised — e.g. scale on a text element is silently ignored; use font_size.

Symbols

The symbol value is a path in a small subset of SVG path syntax — straight lines only:

  • M x y — move to (absolute)
  • L x y — line to (absolute)
  • m dx dy — move to (relative)
  • l dx dy — line to (relative)

Numbers are whitespace-separated; commas are not accepted — write "M -1 -1 L 1 1", not "M -1, -1, L 1, 1". Curves and arcs are not supported. Coordinates are in symbol units around the line: the path is multiplied by scale, so at scale = 1.0 a coordinate of 1 is 1 mm from the line. Some examples:

{ symbol = "M -1 -1 L 1 1" }                # single tick /
{ symbol = "M -1 -1 L 1 1 M -1 1 L 1 -1" }  # X marker
{ symbol = "M -1 -1 L 1 -1 L 1 1 L -1 1 L -1 -1" }  # square

By default a symbol replaces a section of the line: it occupies a slot 2 × scale mm wide, punched out of the pattern like a gap. Set keep_stroke = true to instead draw the symbol on top of a continuous line without consuming any pattern length — right for tick marks along an unbroken line, as in the default Building linetype:

[linetypes.building]
name = "Building"
pattern = [
    { stroke = 3.0 },
    { symbol = "M 0 0 L 1 1", scale = 1.0, keep_stroke = true },
]

Linetype scale

Pattern dimensions are paper units, so how large they appear depends on the linetype scale, set per survey phase from the 1:… indicator in the status bar:

  • Manual — type a scale denominator (e.g. 1:500). Pick the scale you intend to plot at and the plotted pattern matches its definition in mm.
  • Link to zoom — the scale is recomputed from the current zoom level and your screen PPI (Settings › Display), so patterns keep a constant on-screen size as you zoom. The status bar shows a link icon while active.

Troubleshooting

  • “No linetypes found in file” — the file has no [linetypes.<key>] tables; check the namespace spelling.
  • Import fails with a parse error — the console (View -> Console) reports the offending line. Common causes: a missing pattern, a missing name, or commas inside a symbol path.
  • Pattern looks solid or invisible — the linetype scale for the current phase is too small or too large for the geometry; adjust it from the status bar.