An Abutting trace with Fills now holds a "Seam Fills" group under its
paths. For each color it has one stroke, 1.5 image pixels wide, along
the edges where a filled path of that color meets a filled path drawn
after it, in that color. A renderer that anti-aliases each path on its
own no longer shows a light hairline along those edges. The traced
paths and their shared edges do not change, and edges against the
image's border, a transparent area or a color left out get no stroke.
- vectorcraft-trace: `seam_fills` finds the segments two filled paths
share and strokes them in the lower path's color (one stroke per
gradient path). Overlapping, traces without Fills and Flat Logo get
none.
- Image Trace commands: the group comes under every path (right above
the hidden image in a live trace). Expand keeps it, Expand by color
leaves it under the color groups, and a trace whose paths have more
than half of the anchor limit gets no seam fills.
Docs: docs/mcp.md, the params text, docs/target-app-parity.md.
A layer or group with a Pathfinder effect or geometry effects moves its ruler guides above the evaluated art. Its trailing guides were split off first and its guides among the art were added after them, so [guide A, art, guide B] came out as B, A. All of its direct guides are now gathered in one pass, in document order.
Variable Options in the Variables panel only renamed a variable, and no
command changed a variable's kind. variable.rename now takes
{name, newName?, kind?} and renames the variable, changes its kind, or
both, in one undo step, with none when nothing changes. A null or empty
value, an unknown kind, a taken name and locked variables are refused.
A kind change unbinds the objects that can't hold the new kind (text
keeps type with no other text variable, image keeps image objects,
graph keeps graph roots, visibility keeps every object) and drops the
variable's values in every data set. The dialog shows the variable's
name and kind and sends both.
A linear or radial gradient of CMYK stops drawn as an image (a dithered
fill, or a Perceptual gradient that is not written as a spot shading)
was written as an RGB image whenever any stop was linked to a spot
swatch, even a stop that colors nothing: one inside fully transparent
stretches, one out of order between stretches with no width, or one at
a tint of 0 without process plates. The spot color warning already
skipped those stops.
The image now falls back to RGB only when a stop prints a spot ink, the
same test the warning and the spot shadings use. A drawn spot stop at a
tint above 0, or with process plates, still gives an RGB image with the
warning.
Automatic counted flat art's colors with a median cut that never splits a
box narrower than 24 levels, so evenly spaced levels about 17 apart (gray)
or 13 apart (sepia) shared boxes: 16 clean gray levels traced in 14 colors
and 16 sepia levels in 9.
When flat art's pixels fall in 2 to 16 histogram bins, each holding at
least the share a color needs to be counted, and every two bins lie at
least 12 levels apart on some channel, Automatic now takes one color per
bin. If mixed-color merging then finds two of those colors mixed through
each other (dithering, or a thin region beside a close level), the picture
is counted by median cut as before, with rare colors added.
Anti-aliased art whose levels lie more than 20 apart is counted level by
level too, because its blended edge pixels are left out of the count.
Noisy pictures, anti-aliased art whose levels lie 20 or fewer apart and
pictures of 17 levels or more are counted as before, and continuous-tone
classification is unchanged.
The Assign tab has a New Row button before Merge. With art selected it
adds a row with no current colors above the first selected row, or at
the top, with that row's new color, and selects it. Merge with the new
row first moves the other rows' current colors into it, and they take
its new color. The row shows an empty slot until then.
An empty row recolors nothing and does not count toward Colors. OK
sends it with the other rows. recolor.apply adds no library swatch for
it and gives a rewritten color group no color from it, in the dialog's
groupColors and in the command's default.
The Variables panel drew each variable as one "name · object" line in
the order the variables were defined, with no headers and no sorting.
The list now has three columns with headers: the type icon, Variables
and Objects. A click on a header sorts the list by that column, and a
second click reverses the order. The new command variable.sort {by:
name|object|type|none, descending?} sets the order, which is panel
state: not saved and not an undo step. variable.list lists the
variables in that order and reports it as sort. An unknown by, or a
descending that is not true or false, is an error.
A fill or stroke of a painted clipping path whose Transform effect scales
strokes or moves patterns is now drawn through its art, as an export bakes
such a path, so a 2 pt stroke scaled to 200 % paints at 4 pt.
The HPGL writer closes the stroke pieces of a clipping path whose fill
paints, as it closes the outline of any filled path.
A clipping path that paints a fill or stroke kept the geometry effects of
those fills and strokes live, so a geometry effect on the clip group or on
a group around it reshaped the path first and the fill's or stroke's
effect applied after it, on the canvas and in export alike. Unpainted
clipping paths already applied them first.
The clipping path now becomes one path per fill and stroke with those
effects applied, as an unpainted one does, in a group marked as such
pieces (`NodeExtras::clip_pieces`, saved with the document). `clip_paint`
paints that group's fill pieces behind the clipped art and its stroke
pieces over it, as the path paints its fills and strokes, also after an
effect around it turns a piece into a compound path or puts it in a group.
The clip group's visual bounds take in the stroke pieces' width, and HP-GL
export draws the clipping path once, in its stroke pieces.
An export of a painted clipping path with such effects in a clip group
without effects of its own also keeps its fill and stroke now, where the
baked pieces painted nothing.