mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 17:56:50 -06:00
M8.6: Puppet Warp pins appear at once, warp from the rest shape and follow Undo
- Pins show as soon as the tool has art selected: automatic ones at the centre and the middle of each limb's end (at least three), until pins are placed. They stay across tool switches while the selection is unchanged and a new selection starts afresh. - The pins live in the document (Document.puppet, never saved) with the rest shape they started from: every warp starts from it, so warps don't stack and dragging a pin back restores the original; Undo/Redo take the pins back with the art. Adding and deleting pins are undo steps too. - object.puppetWarp gains rest: true (the tool's pins); the new query object.puppetWarp.pins reads them. A click off the mesh adds nothing and says so (not-allowed cursor, canvas label); the command refuses such pins. - The mesh grid covers the expanded art, so tiny art with a wide Expand no longer allocates millions of cells. - Tests on groups, compound paths and open strokes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
47ef223a02
commit
117aa0b5a3
@@ -437,12 +437,17 @@ agent can call directly. Mirror & Cut's tool options (`tool.setOption`, shown in
|
||||
(`free` | `vertical` | `horizontal`; a constrained axis follows the pointer and a click places it) and `keep`
|
||||
(`left` | `right` | `top` | `bottom`); Alt on release keeps the other side.
|
||||
|
||||
Puppet Warp (`puppetWarp`): with art selected, `ui.pointer` clicks on the art add pins (each new pin is selected;
|
||||
Shift-click adds a pin to the selection or takes it out), dragging a pin moves every selected pin and warps the art,
|
||||
and Alt-dragging near (not on) a selected pin turns the art around it. `ui.key` Delete or Backspace removes the
|
||||
selected pins. Each drag is one undo step running `object.puppetWarp`. Its tool options (`tool.setOption`, shown in
|
||||
the Control bar) are `expand` (Expand Mesh, points, 0 allowed), `showMesh` (on by default) and `selectAllPins`
|
||||
(`true` selects every pin, `false` none); `ui.inspect` → `toolOptions` lists `pins` and the `selected` ones.
|
||||
Puppet Warp (`puppetWarp`): with art selected, the tool shows pins at once (automatic ones at the centre and the end
|
||||
of each limb until pins are placed). `ui.pointer` clicks on the art add pins (each new pin is selected; Shift-click
|
||||
adds a pin to the selection or takes it out), dragging a pin moves every selected pin and warps the art, and
|
||||
Alt-dragging near (not on) a selected pin turns the art around it. A click off the mesh adds nothing: the cursor shows
|
||||
not-allowed there and the canvas says so. `ui.key` Delete or Backspace removes the selected pins. Adding, deleting and
|
||||
each drag are one undo step each, running `object.puppetWarp {rest: true, …}`; the pins live in the document, so
|
||||
Undo/Redo take them back with the art, they stay across tool switches while the selection is unchanged, and another
|
||||
selection starts afresh. `object.puppetWarp.pins` reads them. Its tool options (`tool.setOption`, shown in the
|
||||
Control bar) are `expand` (Expand Mesh, points, 0 allowed), `showMesh` (on by default) and `selectAllPins` (`true`
|
||||
selects every pin, `false` none); `ui.inspect` → `toolOptions` lists the `pins` the tool last showed and the
|
||||
`selected` ones.
|
||||
|
||||
Colour adjustment effects (Effect → Color Adjustments) open the `effect` dialog like the other effects
|
||||
(`effect.dialog {effect: "adjust.hueSaturation"}`): its fields are the effect's parameters (sliders for the amounts,
|
||||
|
||||
+12
@@ -879,6 +879,18 @@ on the art) lands on its `moved` point. `angles` (degrees, or null for a free pi
|
||||
the art takes around a pin, as Alt-dragging near a selected pin with the Puppet Warp tool does: one pin with
|
||||
`angles: [90]` turns the art a quarter turn around it.
|
||||
|
||||
The Puppet Warp tool's pins live in the document while the same art stays selected (never saved; Undo and Redo take
|
||||
them back with the art). `object.puppetWarp.pins {ids?}` reads them: `pins` (where each sits on the shape the pins
|
||||
started from), `moved` (where it is now), `angles`, and `auto: true` while none was placed (the tool's automatic pins:
|
||||
the centre and the end of each limb). Edit `moved`, `angles` or the lists and pass the result back to
|
||||
`object.puppetWarp`: with `rest: true` the warp always starts from that rest shape, so warps don't stack and putting
|
||||
a pin back restores the original; every pin must be on the art's mesh, and empty lists remove the pins.
|
||||
|
||||
```json
|
||||
{"name":"run_command","arguments":{"command":"object.puppetWarp.pins","params":{}}}
|
||||
{"name":"run_command","arguments":{"command":"object.puppetWarp","params":{"rest":true,"pins":[[250,150],[110,150],[390,150]],"moved":[[250,150],[110,150],[390,90]],"angles":[null,null,null]}}}
|
||||
```
|
||||
|
||||
```json
|
||||
{"name":"run_command","arguments":{"command":"stroke.widthPoint.set","params":{"id":9,"t":0.5,"left":4,"right":4}}}
|
||||
{"name":"run_command","arguments":{"command":"stroke.widthPoint.set","params":{"id":9,"t":0.8,"left":12,"right":12}}}
|
||||
|
||||
Reference in New Issue
Block a user