Place: DCS links follow their plate files, clips and document swatches

- The link watch and links.updateChanged look at a DCS file's plate files
  of their own, so a changed plate file is read again.
- links.update and links.relink apply the file's clipping path to the
  images in symbols, graph designs, patterns and masks too. When the new
  file has no clipping path, a clip group holding the old file's clipping
  path loses that path and stays as a plain group of the image, keeping
  its id, name, visibility and transparency. The image keeps that path with its plates to tell it from a
  clipping mask made in the document; a clipping path given another fill
  rule in the document stays. An even-odd clipping path in the file is
  kept as the same area under the nonzero rule.
- links.update and links.relink return the swatch warnings file.place
  gives, including two files that add one ink in two colors.
- links.relink with copy fails for a DCS file with plate files of its own.
- file.place answers the image id of a clipped DCS placement as image,
  and checks page and crop for a DCS file as it does for an EPS file.
- Print separations and Separations Preview take a spot plate's color
  from the document's swatch of its ink, and a reduced image's plates
  keep their coverage.
- Show DCS Transparency Interactions counts a transparent DCS image and
  characters filled or stroked with a transparent gradient.
- %%PlateFile names keep their spaces, and header bytes that are not
  UTF-8 are read as Latin-1.
- A plate program that draws more than one image, art besides its image,
  or its image through a clipping path is an error naming the plate
  instead of printing the wrong ink.
- Nested clipping paths around the composite clip the image together.
- A kept image with more plates than are read, or more TIFF directories
  than its composite and plates, is the CMYK image of its composite
  only, not a set of plates cut short.
- swatch.unused counts a spot or process swatch as used only while an
  image the art shows has a spot plate of its name.
This commit is contained in:
dotCooCoo
2026-11-12 18:43:04 -08:00
parent 18aed1da4e
commit 99f896f9b8
15 changed files with 1171 additions and 125 deletions
+24 -13
View File
@@ -5720,20 +5720,30 @@ plate, <http://www.telegraphics.net/doc/DCS.txt>) is placed only from its `path`
be placed linked" and change nothing. The plates are read from the file (`%%PlateFile: (name) EPS #offset size`) or
from the plate files it names (`%%PlateFile: (name) EPS Local file`, and the `%%CyanPlate:`, `%%MagentaPlate:`,
`%%YellowPlate:` and `%%BlackPlate:` comments of DCS 1.0), which are looked for by file name in the DCS file's folder.
Each plate is the first image its program draws, and a dark pixel is ink. Each spot plate adds a spot swatch (when
Each plate is the one image its program draws, and a dark pixel is ink; a plate program that draws more than one
image, art besides its image, or its image through a clipping path is an error naming the plate. Each spot plate adds a spot swatch (when
the file is placed, and when `links.update` or `links.relink` reads it) in the
CMYK values of the file's `%%CMYKCustomColor:` comment (else `%%RGBCustomColor:`; black, with a warning, when the file
gives neither). A swatch of the same name that the document already has is kept, with a warning when it is not a spot
color of the same values; a plate whose name is a process swatch prints as process inks. `swatch.unused` does not
list a spot swatch while such an image has a plate of its ink; deleting the swatch makes the plate print as its CMYK
values. The clipping path the file's composite is drawn through clips the image (a clipping group); `links.update` and
`links.relink` clip the image by the file's clipping path again (in a new clipping group when none holds it), unless
Placement Options clip the image; when the file no longer has one, the clipping group stays. The link shows as
modified when a plate file of its own changes or is gone, as it does when the DCS file changes. These rules are
VectorCraft's own: the screen, composite print and exports show the image as its plates mixed into CMYK (each
ink amount times the ink's CMYK values, plates combined as `1 − (1 − a)(1 − b)`); Separations Preview and
`file.print` separations show each plate on its own ink, and a spot plate prints as its CMYK values with
`spotsToProcess`. A file may name 64 plates, a plate file may be 1 GB, and the plates together may hold 512 MB of
gives neither). A swatch of the same name that the document already has is kept, with a warning (in `warnings` of
`file.place`, `links.update` and `links.relink`) when it is not a spot color of the same values; Separations Preview
and `file.print` separations then show and print the plate in that swatch's color, and a plate whose name is a
process swatch prints as process inks in that swatch's color. `swatch.unused` does not list a spot or process swatch
while such an image that the art shows has a plate of its name; deleting the swatch makes the plate print as its CMYK values. The clipping path the
file's composite is drawn through clips the image (a clipping group, its path under the nonzero fill rule, an even-odd
clipping path kept as the same area), and `file.place` answers the image's id as
`image`, since the Links commands take the image and not the group. `links.update` and `links.relink` clip the image
by the file's clipping path again (in a new clipping group when none holds it, and inside a clipping mask made in the
document, whose path is kept), unless Placement Options clip the image, the same way for the images in symbols, graph designs, patterns and opacity masks; when the new file has no
clipping path, a clipping group holding just the image whose path is the old file's clipping path loses that path and
stays as a plain group of the image, with its id, name, visibility and transparency (one whose path was given the
even-odd fill rule stays as it is). The link shows as modified when a plate file of its own changes
or is gone, as it does when the DCS file changes, and the app's link watch acts on a changed plate file as on a
changed DCS file. `links.relink {copy: true}` fails for a DCS file that reads plate files of its own, and copies
nothing. These rules are VectorCraft's own: the screen, composite print and exports show the image as its plates
mixed into CMYK (each ink amount times the ink's CMYK values, plates combined as `1 − (1 − a)(1 − b)`); Separations
Preview and `file.print` separations show each plate on its own ink, and a spot plate prints as the document's swatch
of its ink (else its CMYK values) with `spotsToProcess`. Separations Preview shows a reduced image's plates as the
mean of the plate pixels each shown pixel covers. A file may name 64 plates, a plate file may be 1 GB, and the plates together may hold 512 MB of
ink amounts; a plate that can't be read is an error naming the plate, and nothing is placed. The plates go on the first
plate's pixel grid, grown to hold every plate where it prints; a plate of another size or position is resampled onto
it, and a file naming more than 64 plates is an error. `file.place.info` answers `plates` (the ink names) for a DCS file.
@@ -6419,7 +6429,8 @@ DCS Transparency Interactions, off by default) adds `dcsTransparency: true` to t
[are transparent or overlap transparent objects](https://helpx.adobe.com/illustrator/desktop/add-and-import-files/import-other-file-types/eps-and-dcs-file-import-in-illustrator.html),
and the panel shows a warning mark on them. VectorCraft's rule for it: the image, or a group or layer holding it, has
an opacity below 100%, a blend mode other than Normal, an opacity mask or an effect, or its bounds overlap the
bounds of another visible object that has one of those or a gradient with a transparent stop. The check looks at
bounds of another visible object that has one of those or a gradient with a transparent stop (in a fill, a stroke or
a character's fill or stroke); a DCS image with transparency of its own counts as such an object. The check looks at
every object in the layers each time the list is read. A `dcsTransparency` that is not true or false is an error.
`links.goTo {id}` selects an image; `links.embed {ids?}` keeps linked files' pixels in the document (an image whose
file is missing stays linked: relink it first); `links.unembed {id, path}` writes an embedded image to a file