mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-31 21:27:00 -06:00
Path Precision Tools gains two tools, kept out of the toolbars (All Tools drawer and Object › Plug-ins › Path Precision Tools, no shortcuts): - Corner Tool (cornerTool): editable corners on any path through the existing Live Corners. Hover shows an eligible anchor, a click cuts a corner with the tool's radius and kind, a drag sizes it (Shift: whole values), a corner's marker selects it and loads its values, resizes it and removes it at 0 or on a double-click; a corner never grows past what fits; an Alt-marquee cuts every eligible anchor inside. - Corners section in the Anchor Inspector: radius, kind, selected count, Apply to Selected Anchors. - Slide Anchor Along Path (slideAnchor): a drag runs an anchor along its curve, the neighbouring segments refitted by the keep-shape kernel; Shift snaps where the tangent is a multiple of 45° from the constrain angle. - Commands addon.pathtools.cornerSet, cornerRemove and slideAnchor, one undo step each, params validated and covered by the command sweep. - Cursor stand-ins, catalog rows in every language, docs and tests.
40 lines
1.5 KiB
Rust
40 lines
1.5 KiB
Rust
//! Object menu: transforms, arrange, group, lock/hide, compound paths, clipping masks, isolation,
|
|
//! align & distribute, object properties.
|
|
|
|
use std::collections::BTreeSet;
|
|
use std::sync::Arc;
|
|
|
|
use serde_json::{Value, json};
|
|
use vectorcraft_color::{BlendMode, Paint};
|
|
use vectorcraft_doc::corners::{convert_radii_relative, set_corners};
|
|
use vectorcraft_doc::{Appearance, Document, Knockout, LiveCorners, LiveShape, Node, NodeId, NodeKind, OrientedBox, Scaling};
|
|
use vectorcraft_geom::shapes::CornerKind;
|
|
use vectorcraft_geom::{Affine, FillRule, PathData, Point, Rect, Vec2};
|
|
use vectorcraft_render::effects;
|
|
|
|
use super::edit::{duplicate_in, outermost, selected_roots, selected_roots_to_transform};
|
|
use super::opacitymask::percent;
|
|
use super::{
|
|
CommandSpec, Result, Session, bad, bool_or, check_numbers, check_switches, cmd, f64_or, f64_req, has_doc, has_multi, has_selection,
|
|
has_selection_or_guides, id_param, ids_param, matrix_param, ok, point_param, str_param, targets,
|
|
};
|
|
use crate::{EngineError, LastTransform};
|
|
|
|
mod align;
|
|
mod arrange;
|
|
mod bounds;
|
|
mod commands;
|
|
mod compound;
|
|
mod props;
|
|
mod shape;
|
|
mod spans;
|
|
mod transform;
|
|
|
|
pub(crate) use align::choice;
|
|
pub(crate) use arrange::group_nodes;
|
|
pub(crate) use bounds::bounds_rewrite;
|
|
pub use commands::specs;
|
|
pub(super) use compound::{as_clipping_path, make_clipping_path, release_clip};
|
|
pub(super) use shape::recut;
|
|
pub(crate) use transform::{apply_transform, preview_copies, scaling, transform_node, transform_patterns, transforms_objects};
|