mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-27 03:06:57 -06:00
A blend in a .ai file's editing data came in as plain art twice over: the blend's own art (its key objects and spine, on `%_` lines) and its drawn steps were both kept visible, so the keys lay doubled under the drawn ones and the spine showed as a stray path, and nothing was live. The spine itself was read exactly (its line and curve segments match). The `(Adobe Path Blends) 1 0 n XP` record is now read (n bytes of hex on the `%` lines after it, capped, checked: `DCBA`, version 1, the key count and a record per key starting with its id). Each object's dictionary names its part (`ShapeBlendPathType` K or S) and a key's id (`ShapeBlendPathID`); the keys the record lists and the spine become one live blend, the keys sitting on the spine's anchors. The record's other fields aren't known, so the spacing is the drawn steps between two keys (Specified Steps) and the orientation whichever lays the blend out as drawn; the blend replaces the drawn steps only when it comes out as drawn (each step within 0.5 pt and 0.02 of its colour). Otherwise the drawn steps stay, without the blend's own art over them, with a note. Behaviour as documented: https://helpx.adobe.com/illustrator/using/blending-objects.html Save As .ai writes the PDF-compatible part only (no editing data), so a blend is written back as its steps drawn, not live. Hand-written tests: two keys and a straight spine as one live blend with three steps and interpolated colours; a curved spine (l, c, L) in both directions keeping its points and the keys' order; a garbled or short record, a key without an id and ids the record doesn't list keeping the drawn steps with a note; moving a key moving the steps; record parsing on hostile input. The import fuzz target gains the record and the new mesh keys.