mirror of
https://github.com/storytold/cadcraft.git
synced 2026-10-24 10:56:51 -06:00
Layers and objects get a PlotStyle property (ByLayer/ByBlock/name) applied through named tables (built-in default.stb and monochrome.stb, our own definitions). DXF keeps the names in the ACAD_PLOTSTYLENAME dictionary of ACDBPLACEHOLDER objects with group 390 on layers and objects; tables kept in the drawing travel in a CADCRAFT_PLOTSTYLES XRECORD. PLOTSTYLE sets an object's or the current (CPLOTSTYLE) style; STYLESMANAGER lists, creates, edits, deletes, loads and saves tables in our own JSON format (docs/plot-styles.md). A Plot Style Manager dialog edits a table's styles and the layout's table; the Properties palette shows the current plot style and table. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
58a349772e
commit
fc4220e9b7
@@ -0,0 +1,106 @@
|
||||
# Plot styles
|
||||
|
||||
A plot style table decides how objects print. CADCraft applies it to PDF plots (PLOT,
|
||||
EXPORTPDF and anything that plots through them). It also applies it to a layout shown with
|
||||
**Display plot styles** on: on screen and in the layout's PNG and SVG exports.
|
||||
|
||||
## Tables
|
||||
|
||||
| Kind | Picks the style by | Styles |
|
||||
|---|---|---|
|
||||
| Colour-dependent (`.ctb`) | the object's index colour (a true colour uses its nearest index colour) | exactly 255, `Color_1` … `Color_255` |
|
||||
| Named (`.stb`) | the object's **PlotStyle** property | `Normal` first, then any names |
|
||||
|
||||
A style can set these:
|
||||
|
||||
| Field | Meaning | "Use object" value |
|
||||
|---|---|---|
|
||||
| `color` | output colour, `"#rrggbb"` | absent / `null` |
|
||||
| `grayscale` | print the colour as the grey of its luminance (Rec. 709 weights) | `false` |
|
||||
| `screening` | ink intensity 0–100 %, mixing toward the white paper | `100` |
|
||||
| `linetype` | linetype name (loaded, or from the built-in library; `Continuous` draws solid) | absent / `null` |
|
||||
| `lineweight` | hundredths of a millimetre, 0–211; used when lineweights are plotted | absent / `null` |
|
||||
| `end`, `join`, `fill` | line end, line join and area fill style | `object` |
|
||||
|
||||
Colour 7 prints black. `end`, `join` and `fill` are stored but not applied yet.
|
||||
|
||||
### Built-in tables
|
||||
|
||||
These are CADCraft's own definitions, not copies of any vendor's files.
|
||||
|
||||
| Table | What it does |
|
||||
|---|---|
|
||||
| `default.ctb` | keeps every object property |
|
||||
| `monochrome.ctb` | prints every colour black |
|
||||
| `grayscale.ctb` | prints every colour as the grey of its luminance |
|
||||
| `default.stb` | `Normal` (object properties), `Black`, `Screened 50%`, `Thick` (0.50 mm) |
|
||||
| `monochrome.stb` | `Normal` prints black; `Screened 50%` prints black at 50 % |
|
||||
|
||||
A table kept in the drawing shadows a built-in table of the same name.
|
||||
|
||||
## Named plot styles
|
||||
|
||||
Layers have a plot style name (default `Normal`). Objects have `ByLayer` (the default), `ByBlock`
|
||||
or a style name. `ByLayer` takes the layer's style. On layer 0 inside a block, that is the block
|
||||
reference's layer. `ByBlock` takes the block reference's style. A name the table doesn't have
|
||||
prints as `Normal`. A colour-dependent table ignores the property.
|
||||
|
||||
## Commands
|
||||
|
||||
- `pagesetup {layout, plotStyleTable, displayPlotStyles}` sets the layout's table and the
|
||||
Display plot styles flag. Without a layout, it reports the built-in tables in `plotStyleTables`.
|
||||
- `plot` / `exportpdf {plotStyleTable}` replaces the page setup's table for one plot. `"None"`
|
||||
plots object colours.
|
||||
- `plotstyle {name, handles?}` sets the objects' plot style. With nothing selected, it sets the
|
||||
current plot style for new objects (`CPLOTSTYLE`). Without `name`, it reports the current
|
||||
style and the named styles.
|
||||
- `layer.set {name, plotStyle}` sets a layer's plot style.
|
||||
- `stylesmanager {action, …}` manages the tables: `list`, `get`, `new` (`kind`, `from`), `set`
|
||||
(`style: {name, …fields}`, `removeStyle`, `description`), `delete`, `load` (`path` or `text`)
|
||||
and `save` (`path`, or returns `text`). Typed or chosen from **File ▸ Plot Styles...**, it
|
||||
opens the Plot Style Manager dialog.
|
||||
|
||||
## Table files
|
||||
|
||||
Tables are saved in our own format: UTF-8 JSON with a format marker. Fields left at "use the
|
||||
object's" are omitted.
|
||||
|
||||
```json
|
||||
{
|
||||
"cadcraftPlotStyleTable": 1,
|
||||
"name": "office.stb",
|
||||
"description": "Office pens",
|
||||
"kind": "named",
|
||||
"styles": [
|
||||
{ "name": "Normal" },
|
||||
{ "name": "Pen 5", "color": "#000000", "screening": 40, "lineweight": 35, "linetype": "HIDDEN", "end": "round" }
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
- `kind` is `colorDependent` or `named`.
|
||||
- `end` is one of `object`, `butt`, `square`, `round` or `diamond`.
|
||||
- `join` is one of `object`, `miter`, `bevel`, `round` or `diamond`.
|
||||
- `fill` is one of `object`, `solid`, `checkerboard`, `crosshatch`, `diamonds`, `horizontalBars`,
|
||||
`slantLeft`, `slantRight`, `squareDots` or `verticalBars`.
|
||||
- `color` may also be written `[r, g, b]`.
|
||||
|
||||
Reading fixes hostile values:
|
||||
|
||||
- Screening is capped at 100 and lineweights at 211.
|
||||
- A colour-dependent table always gets 255 styles named `Color_n`.
|
||||
- A named table gets unique style names (at most 1024), with `Normal` first.
|
||||
- Files over 4 MB are refused.
|
||||
|
||||
Binary `.ctb`/`.stb` files are not read. We haven't found a public specification of that format.
|
||||
|
||||
## In DXF files
|
||||
|
||||
- The page setup's table is PLOTSETTINGS group 7, and Display plot styles is plot layout flag 2
|
||||
(group 70).
|
||||
- Plot style names follow the DXF Reference. The named object dictionary entry
|
||||
`ACAD_PLOTSTYLENAME` is an `ACDBDICTIONARYWDFLT` whose entries name `ACDBPLACEHOLDER` objects
|
||||
(default `Normal`). Layers and objects point at them with group 390. An object without a 390
|
||||
is `ByLayer`. `ByBlock` isn't written, so it reads back as `ByLayer`.
|
||||
- Tables kept in the drawing travel in the `CADCRAFT_PLOTSTYLES` XRECORD (JSON) of the named
|
||||
object dictionary.
|
||||
Reference in New Issue
Block a user