3D and Materials: the bevel and rotation options take their documented names, and the new messages are in every catalog

Bevel Shape, Space, Bevel Inside, Bevel both sides and Presets, as the public 3D and Materials panel
options page names them. The 3D effects' error messages get rows in the twelve complete catalogs.
This commit is contained in:
bflatastic 2026-10-13 00:39:48 +07:00
parent 8a3458a974
commit 2cf2b972f5
18 changed files with 145 additions and 34 deletions

View File

@ -127,7 +127,7 @@ Ranked; detail in [docs/roadmap.md](docs/roadmap.md) and [docs/gaps.md](docs/gap
| Date | What landed |
|---|---|
| 2026-10-12 | Effect › 3D and Materials: Extrude & Bevel (depth, twist, taper, solid or hollow caps, six bevel shapes with repeat, spacing, inside and both sides), Inflate (volume, both sides) and Rotate, with Position presets and the rotation and light gizmos; live, exported as vector faces, expandable (#1407). |
| 2026-10-12 | Effect › 3D and Materials: Extrude & Bevel (depth, twist, taper, solid or hollow caps, five bevel shapes with repeat, spacing, inside and both sides), Inflate (volume, both sides) and Rotate, with Position presets and the rotation and light gizmos; live, exported as vector faces, expandable (#1407). |
| 2026-10-12 | `convert --editing-data` (`editingData: "always"`) opens a `.ai` from its editing data even where its page, which can be older, draws differently, with a note. |
| 2026-10-12 | `.ai` import reads an object's art style (a fill and a stroke, variable widths too, with an Outer Glow or Drop Shadow) as its own appearance, paints a clipping path's own fill under what it clips and keeps a group's transparency as its PDF part draws them. |
| 2026-10-12 | `.ai` import reads gradients with their matrix (radials and skew too), focal point and stop order, gradient meshes and the artboards' names from the editing data. |

View File

@ -21,7 +21,8 @@ pub(super) fn body(app: &VectorcraftApp, ui: &mut egui::Ui, d: &mut Dialog) {
ui.data_mut(|m| m.remove::<bool>(widgets::dialog_focus_flag()));
let screen = ui.ctx().content_rect();
let width = (screen.width() - 64.0).clamp(240.0, SIDE_W);
let height = (screen.height() - 240.0).clamp(120.0, 340.0);
// Tall enough for Extrude & Bevel's Object tab, the longest, where the screen has the room.
let height = (screen.height() - 240.0).clamp(120.0, 450.0);
ui.set_width(width);
egui::ScrollArea::vertical().id_salt("revolve-body").max_height(height).auto_shrink([false, true]).show(ui, |ui| {
controls(app, ui, d);
@ -179,18 +180,18 @@ fn extrude_controls(ui: &mut egui::Ui, d: &mut Dialog, unit: Unit) {
(json!("step"), tl!("Step")),
(json!("ogee"), tl!("Ogee")),
];
choice(ui, d, "bevel", tl!("Shape"), &shapes);
choice(ui, d, "bevel", tl!("Bevel Shape"), &shapes);
ui.add_enabled_ui(d.str("bevel") != "none", |ui| {
number(ui, d, "bevelWidth", tl!("Width"), (0.0, 1000.0), "", 1, Some(unit));
number(ui, d, "bevelHeight", tl!("Height"), (0.0, 1000.0), "", 1, Some(unit));
number(ui, d, "bevelRepeat", tl!("Repeat"), (1.0, 32.0), "", 0, None);
number(ui, d, "bevelSpace", tl!("Spacing"), (0.0, 90.0), "%", 1, None);
toggle(ui, d, "bevelInside", c3("Inside"), false);
toggle(ui, d, "bevelBothSides", tl!("Both sides"), false);
number(ui, d, "bevelSpace", c3("Space"), (0.0, 90.0), "%", 1, None);
toggle(ui, d, "bevelInside", tl!("Bevel Inside"), false);
toggle(ui, d, "bevelBothSides", tl!("Bevel both sides"), false);
});
}
/// Position presets, rotation and perspective for Extrude & Bevel, Inflate and Rotate.
/// Rotation presets, rotation and perspective for Extrude & Bevel, Inflate and Rotate.
fn view_controls(ui: &mut egui::Ui, d: &mut Dialog) {
heading(ui, tl!("Rotation"));
let names = [
@ -215,7 +216,7 @@ fn view_controls(ui: &mut egui::Ui, d: &mut Dialog) {
let current = ROTATION_PRESETS.iter().position(|(_, a)| a.iter().zip(angles).all(|(a, b)| (a - b).abs() < 0.005));
ui.horizontal(|ui| {
ui.spacing_mut().item_spacing.x = 6.0;
label(ui, tl!("Position"));
label(ui, tl!("Presets"));
let width = VALUE_W + rail_width(ui) + 6.0;
let shown = current.and_then(|i| names.get(i).copied()).unwrap_or(tl!("Custom"));
if let Some(k) = widgets::dropdown(ui, "three-d-position", shown, &names, width)

View File

@ -211,9 +211,11 @@ fn advanced_visibility_option_is_saved_resettable_and_leaves_preview_geometry_co
fn the_other_3d_effects_show_their_options_and_position_presets() {
use vectorcraft_effects::{EXTRUDE, INFLATE, ROTATE, ROTATION_PRESETS};
let square = "M100 100 L200 100 L200 200 L100 200 Z";
for (effect, own) in
[(EXTRUDE, &["Depth", "Twist", "Taper", "Cap", "Bevel"][..]), (INFLATE, &["Depth", "Volume", "Both sides"][..]), (ROTATE, &[][..])]
{
for (effect, own) in [
(EXTRUDE, &["Depth", "Twist", "Taper", "Cap", "Bevel", "Bevel Shape", "Space", "Bevel Inside", "Bevel both sides"][..]),
(INFLATE, &["Depth", "Volume", "Both sides"][..]),
(ROTATE, &[][..]),
] {
let mut h = Harness::with(square, effect, vec2(1400.0, 1000.0));
h.settle();
// Extrude & Bevel and Inflate open on their Object tab; Rotate on Rotation.
@ -224,7 +226,7 @@ fn the_other_3d_effects_show_their_options_and_position_presets() {
h.app.ui.dialog.as_mut().unwrap().fields.insert("__tab".into(), json!("rotation"));
h.settle();
}
for text in ["Position", "Rotation X", "Perspective"] {
for text in ["Presets", "Rotation X", "Perspective"] {
h.rect(text);
}
// The defaults are the Off-Axis Front position, shown by name.

View File

@ -4538,4 +4538,13 @@ mark-style Japanese Japonské
3d Hollow Duté
3d Bevel Zkosení
3d Rounded Zaoblené
3d Inside Dovnitř
3d Space Mezera
Bevel Shape Tvar zkosení
Bevel Inside Zkosení dovnitř
Bevel both sides Zkosení na obou stranách
Presets Předvolby
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Objekt může mít jen jeden 3D efekt. Upravte volby stávajícího efektu, nebo jej nejprve odstraňte.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} zatím vyžaduje cestu nebo složenou cestu. Nejprve převeďte text, obrazy a skupiny na cesty.
@msg {label} requires a shape with at least two anchors {label} vyžaduje tvar alespoň se dvěma kotevními body
@msg The shape is too complex for a 3D effect Tvar je pro 3D efekt příliš složitý
@msg The 3D surface is too complex; simplify the shape 3D povrch je příliš složitý; zjednodušte tvar

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4189,4 +4189,13 @@ theme Appearance Erscheinungsbild
3d Hollow Hohl
3d Bevel Abgeflachte Kante
3d Rounded Abgerundet
3d Inside Nach innen
3d Space Abstand
Bevel Shape Form der abgeflachten Kante
Bevel Inside Abgeflachte Kante nach innen
Bevel both sides Abgeflachte Kante beidseitig
Presets Vorgaben
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Ein Objekt kann nur einen 3D-Effekt haben. Bearbeiten Sie die Optionen des vorhandenen Effekts oder entfernen Sie ihn zuerst.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} erfordert derzeit einen Pfad oder zusammengesetzten Pfad. Wandeln Sie Text, Bilder und Gruppen zuerst in Pfade um.
@msg {label} requires a shape with at least two anchors {label} erfordert eine Form mit mindestens zwei Ankerpunkten
@msg The shape is too complex for a 3D effect Die Form ist für einen 3D-Effekt zu komplex
@msg The 3D surface is too complex; simplify the shape Die 3D-Oberfläche ist zu komplex; vereinfachen Sie die Form

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4606,4 +4606,13 @@ mark-style Japanese Japonesas
3d Hollow Hueco
3d Bevel Bisel
3d Rounded Redondeado
3d Inside Hacia dentro
3d Space Espacio
Bevel Shape Forma del bisel
Bevel Inside Bisel hacia dentro
Bevel both sides Bisel en ambos lados
Presets Ajustes preestablecidos
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Un objeto admite un solo efecto 3D. Edite las opciones del efecto existente o quítelo primero.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} requiere por ahora un trazado o un trazado compuesto. Convierta primero el texto, las imágenes y los grupos en trazados.
@msg {label} requires a shape with at least two anchors {label} requiere una forma con al menos dos puntos de ancla
@msg The shape is too complex for a 3D effect La forma es demasiado compleja para un efecto 3D
@msg The 3D surface is too complex; simplify the shape La superficie 3D es demasiado compleja; simplifique la forma

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4242,4 +4242,13 @@ lighting Light Lumière
3d Hollow Creux
3d Bevel Biseau
3d Rounded Arrondi
3d Inside Vers l'intérieur
3d Space Espace
Bevel Shape Forme du biseau
Bevel Inside Biseau vers l'intérieur
Bevel both sides Biseau des deux côtés
Presets Paramètres prédéfinis
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Un objet n'accepte qu'un seul effet 3D. Modifiez les options de l'effet existant ou supprimez-le d'abord.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} nécessite pour l'instant un tracé ou un tracé transparent. Convertissez d'abord le texte, les images et les groupes en tracés.
@msg {label} requires a shape with at least two anchors {label} nécessite une forme comportant au moins deux points d'ancrage
@msg The shape is too complex for a 3D effect La forme est trop complexe pour un effet 3D
@msg The 3D surface is too complex; simplify the shape La surface 3D est trop complexe ; simplifiez la forme

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4632,4 +4632,13 @@ theme Appearance Kinézet
3d Hollow Üreges
3d Bevel Élletörés
3d Rounded Lekerekített
3d Inside Befelé
3d Space Köz
Bevel Shape Élletörés alakja
Bevel Inside Élletörés befelé
Bevel both sides Élletörés mindkét oldalon
Presets Készletek
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Egy objektumnak csak egy 3D effektusa lehet. Szerkessze a meglévő effektus beállításait, vagy előbb távolítsa el.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} egyelőre görbét vagy összetett görbét igényel. Előbb alakítsa görbévé a szöveget, a képeket és a csoportokat.
@msg {label} requires a shape with at least two anchors {label} legalább két szerkesztőpontos alakzatot igényel
@msg The shape is too complex for a 3D effect Az alakzat túl összetett a 3D effektushoz
@msg The 3D surface is too complex; simplify the shape A 3D felület túl összetett; egyszerűsítse az alakzatot

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4234,4 +4234,13 @@ lighting Light Luce
3d Hollow Cavo
3d Bevel Smusso
3d Rounded Arrotondato
3d Inside Verso l'interno
3d Space Spazio
Bevel Shape Forma smusso
Bevel Inside Smusso verso l'interno
Bevel both sides Smusso su entrambi i lati
Presets Predefiniti
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Un oggetto può avere un solo effetto 3D. Modificate le opzioni dell'effetto esistente oppure rimuovetelo prima.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} richiede per ora un tracciato o un tracciato composto. Convertite prima testo, immagini e gruppi in tracciati.
@msg {label} requires a shape with at least two anchors {label} richiede una forma con almeno due punti di ancoraggio
@msg The shape is too complex for a 3D effect La forma è troppo complessa per un effetto 3D
@msg The 3D surface is too complex; simplify the shape La superficie 3D è troppo complessa; semplificate la forma

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4228,4 +4228,13 @@ lighting Light ライト
3d Hollow 中空
3d Bevel ベベル
3d Rounded 丸み
3d Inside 内側
3d Space 間隔
Bevel Shape ベベルシェイプ
Bevel Inside ベベルを内側に
Bevel both sides 両面にベベル
Presets プリセット
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. 1 つのオブジェクトに適用できる 3D 効果は 1 つです。既存の効果のオプションを編集するか、先に削除してください。
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} には現在、パスまたは複合パスが必要です。テキスト、画像、グループは先にパスに変換してください。
@msg {label} requires a shape with at least two anchors {label} には 2 つ以上のアンカーポイントを持つシェイプが必要です
@msg The shape is too complex for a 3D effect シェイプが複雑すぎるため 3D 効果を適用できません
@msg The 3D surface is too complex; simplify the shape 3D サーフェスが複雑すぎます。シェイプを単純化してください

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4198,4 +4198,13 @@ lighting Light 광원
3d Hollow 속이 빈
3d Bevel 베벨
3d Rounded 둥글게
3d Inside 안쪽
3d Space 간격
Bevel Shape 베벨 모양
Bevel Inside 안쪽 베벨
Bevel both sides 양면 베벨
Presets 사전 설정
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. 오브젝트에는 3D 효과를 하나만 적용할 수 있습니다. 기존 효과의 옵션을 편집하거나 먼저 제거하십시오.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label}에는 현재 패스 또는 컴파운드 패스가 필요합니다. 문자, 이미지 및 그룹을 먼저 패스로 변환하십시오.
@msg {label} requires a shape with at least two anchors {label}에는 고정점이 두 개 이상인 모양이 필요합니다
@msg The shape is too complex for a 3D effect 모양이 너무 복잡하여 3D 효과를 적용할 수 없습니다
@msg The 3D surface is too complex; simplify the shape 3D 표면이 너무 복잡합니다. 모양을 단순화하십시오

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4230,4 +4230,13 @@ lighting Light Свет
3d Hollow Полый
3d Bevel Фаска
3d Rounded Скруглённый
3d Inside Внутрь
3d Space Интервал
Bevel Shape Форма фаски
Bevel Inside Фаска внутрь
Bevel both sides Фаска с обеих сторон
Presets Наборы
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. У объекта может быть только один 3D-эффект. Измените параметры существующего эффекта или сначала удалите его.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label}: пока требуется контур или составной контур. Сначала преобразуйте текст, изображения и группы в контуры.
@msg {label} requires a shape with at least two anchors {label}: требуется фигура не менее чем с двумя опорными точками
@msg The shape is too complex for a 3D effect Фигура слишком сложна для 3D-эффекта
@msg The 3D surface is too complex; simplify the shape 3D-поверхность слишком сложна; упростите фигуру

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -4214,4 +4214,13 @@ lighting Light Світло
3d Hollow Порожнистий
3d Bevel Фаска
3d Rounded Заокруглений
3d Inside Усередину
3d Space Інтервал
Bevel Shape Форма фаски
Bevel Inside Фаска всередину
Bevel both sides Фаска з обох боків
Presets Набори
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Об'єкт може мати лише один 3D-ефект. Змініть параметри наявного ефекту або спершу вилучіть його.
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label}: поки що потрібен контур або складений контур. Спершу перетворіть текст, зображення та групи на контури.
@msg {label} requires a shape with at least two anchors {label}: потрібна фігура щонайменше з двома опорними точками
@msg The shape is too complex for a 3D effect Фігура надто складна для 3D-ефекту
@msg The 3D surface is too complex; simplify the shape 3D-поверхня надто складна; спростіть фігуру

Can't render this file because it has a wrong number of fields in line 13.

View File

@ -3825,4 +3825,13 @@ lighting Light 光源
3d Hollow 空心
3d Bevel 斜角
3d Rounded 圆角
3d Inside 向内
3d Space 间距
Bevel Shape 斜角形状
Bevel Inside 斜角向内
Bevel both sides 双面斜角
Presets 预设
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. 一个对象只能应用一种 3D 效果。请编辑现有效果的选项,或先将其移去。
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label}目前需要路径或复合路径。请先将文字、图像和编组转换为路径。
@msg {label} requires a shape with at least two anchors {label}需要至少有两个锚点的形状
@msg The shape is too complex for a 3D effect 形状过于复杂,无法应用 3D 效果
@msg The 3D surface is too complex; simplify the shape 3D 表面过于复杂;请简化形状

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -3606,4 +3606,13 @@ lighting Light 光源
3d Hollow 空心
3d Bevel 斜角
3d Rounded 圓角
3d Inside 向內
3d Space 間距
Bevel Shape 斜角形狀
Bevel Inside 斜角向內
Bevel both sides 雙面斜角
Presets 預設集
@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. 一個物件只能套用一種 3D 效果。請編輯現有效果的選項,或先將其移除。
@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label}目前需要路徑或複合路徑。請先將文字、影像和群組轉換為路徑。
@msg {label} requires a shape with at least two anchors {label}需要至少有兩個錨點的形狀
@msg The shape is too complex for a 3D effect 形狀過於複雜,無法套用 3D 效果
@msg The 3D surface is too complex; simplify the shape 3D 表面過於複雜;請簡化形狀

Can't render this file because it contains an unexpected character in line 6 and column 47.

View File

@ -85,7 +85,7 @@ not an accuracy guarantee for arbitrary artwork. Tests: `pixel::tests::film_grai
| Item | Ours |
|---|---|
| Revolve | initial: live, editable profile, rotation and light gizmos, flat shading, SVG/PDF output, Expand Appearance ([revolve.md](revolve.md), #846) |
| Extrude & Bevel, Inflate, Rotate | initial: live, depth, twist, taper, solid or hollow caps, six original bevel shapes, Inflate volume and both sides, Rotate of every fill and stroke, Position presets, rotation and light gizmos, SVG/PDF output, Expand Appearance ([three-d.md](three-d.md)) |
| Extrude & Bevel, Inflate, Rotate | initial: live, depth, twist, taper, solid or hollow caps, five original bevel shapes, Inflate volume and both sides, Rotate of every fill and stroke, Position presets, rotation and light gizmos, SVG/PDF output, Expand Appearance ([three-d.md](three-d.md)) |
| Materials panel, lighting, ray-traced render | one directional light with flat shading only; no materials, several lights, light colour, shadows or ray tracing |
| 3D (Classic): Extrude & Bevel, Revolve, Rotate | none |
| Turntable (30.0 beta) | none |

View File

@ -75,7 +75,7 @@ dominate; 3D, graphs and automation are specialist). They sum to 105. Feature de
| Appearance, transparency, graphic styles, masks | 5 | 97% | raster effect reach in preview bounds | 1–2 | estimated |
| Live vector effects | 5 | 85% | Outline Object, Effect › Rasterize, Pathfinder Hard Mix/Soft Mix/Trap, SVG Filters, the Transform effect's missing options (#885) | 6–10 | measured count 44/50, depth estimated |
| Raster effects (Effect Gallery) | 4 | 49% | 28 Photoshop-style filters (14 Artistic, 14 Sketch), the Effect Gallery dialog, Load Texture | 23–39 | measured count 29/57; texture redraw distances optimized (#1257), pixels verified; depth estimated |
| 3D and Materials (and Turntable) | 4 | ~25% | initial live Revolve, Extrude & Bevel (twist, taper, caps, six bevel shapes), Inflate and Rotate with Position presets (flat shading, one light, painter visibility); materials, several lights, shadows, ray tracing, 3D Classic, Turntable views, 3D export | 30–55 | estimated (Extrude & Bevel, Inflate and Rotate added 2026-10-12) |
| 3D and Materials (and Turntable) | 4 | ~25% | initial live Revolve, Extrude & Bevel (twist, taper, caps, five bevel shapes), Inflate and Rotate with Position presets (flat shading, one light, painter visibility); materials, several lights, shadows, ray tracing, 3D Classic, Turntable views, 3D export | 30–55 | estimated (Extrude & Bevel, Inflate and Rotate added 2026-10-12) |
| Type core | 9 | 80% | hyphenation and justification options, Optical Margin Alignment, Middle Eastern features beyond bidi layout, optional group font-size preservation; transformed character controls fixed (#1034), see [type-parity.md](type-parity.md) | 14–19 | estimated; full-name font matches regression-tested (#1258) |
| Type advanced (CJK, spelling, Touch Type, Retype) | 4 | 50% | CJK vertical composition (ruby, mojikumi), variable font axes, tab leaders, spell check, Touch Type, Retype | 20–28 | estimated |
| Symbols, blends, envelopes, Repeat, perspective | 5 | 85% | 30.7's Blend panel with ease in/out, dynamic symbols, symbol libraries, Start Global Edit, envelope Anti-Alias/Preserve Shape | 6–10 | estimated (lowered from 88%: target moved) |
@ -457,7 +457,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur
- **Geometry and effects:**
- Pathfinder (10 exact curve booleans; single-result shape operations retain source names and SVG IDs, #1293), Offset, Outline Stroke, Simplify, Clean Up, Split Into Grid, Divide Objects Below. Object › Path › Remove Anchor Points (`path.removeAnchors`) removes the direct-selected anchors without opening their paths (the Delete key still deletes them with their segments): the neighbours keep their handle directions and their facing handles are refitted so one cubic follows the two old segments, and straight sides stay straight. The Delete Anchor Point tool uses the same refit. The Control bar, the contextual task bar, the Properties quick actions and the canvas context menu offer it when anchors are selected. With anchors selected, the Control bar and the Properties panel also convert them to corner or smooth (`path.convertAnchors`), connect end points (Join) and cut the path at them (`path.cutAtAnchors`, also on the task bar and the context menu): a closed path opens there and an open one becomes one path per piece, each cut leaving one of its two coincident anchors selected so a drag pulls the path apart.
- Divide uses open lines, bent paths and curves as cutting edges (#1307), preserving the frontmost filled face's appearance and holes. Engine tests cover implicit closure of filled open contours and unrelated objects; native automation confirms independent piece movement, one Undo/Redo, canvas/window captures and an exact saved-document read by a separate CLI process. The shared planar map retains its 4,096-segment cap and filled-area fallback; other Pathfinder operations are unchanged.
- Extrude & Bevel, Inflate and Rotate (Effect › 3D and Materials): live effects in the `three-d` crate with depth, twist, taper, solid or hollow caps, six original bevel shapes (width, height, repeat, spacing, inside, both sides), Inflate's volume and both sides, Rotate's turned fills and strokes, Position presets, the rotation and light gizmos, SVG/PDF vector output and Expand Appearance; one 3D effect per object; covered by geometry, effect, canvas-versus-export, command and dialog tests ([three-d.md](three-d.md)).
- Extrude & Bevel, Inflate and Rotate (Effect › 3D and Materials): live effects in the `three-d` crate with depth, twist, taper, solid or hollow caps, five original bevel shapes (width, height, repeat, spacing, inside, both sides), Inflate's volume and both sides, Rotate's turned fills and strokes, Position presets, the rotation and light gizmos, SVG/PDF vector output and Expand Appearance; one 3D effect per object; covered by geometry, effect, canvas-versus-export, command and dialog tests ([three-d.md](three-d.md)).
- Initial live Revolve (#605, #846): a portable geometry and shading crate (`three-d`), editable path and compound profiles, compact options with artboard rotation and light gizmos, SVG/PDF vector output and Expand Appearance that can trim covered faces. Open ends are uncapped, shading is flat with one light, and intersecting surfaces' visibility is approximate ([revolve.md](revolve.md)).
- Live effects with previewing dialogs: Distort & Transform, Path, Convert to Shape, 15 Warp styles, Round Corners, Scribble, Effect → Pathfinder (all 10 operations, live on groups; several loose objects are grouped first, in one undo step), Color Adjustments (Brightness/Contrast, Curves, Levels, Hue/Saturation, Shift to Color, Temperature/Tint, on vectors, live type and embedded images), and raster drop shadow, glows and feather. SVG and PDF export keep live effects (geometry baked; SVG raster effects as filters).
- **Simplify feedback and component selection (#1272):** the existing tolerance dialog previews from the original interaction snapshot and shows original/new anchor counts. Preview off and Cancel restore the document and selection; OK is one Undo. A refit or Add Anchor Points clears component indexes only on paths whose geometry changes, keeping their objects selected whole and unchanged paths' components intact. Engine and real-egui frame regressions cover document/selection restoration and grouped paths.

View File

@ -8,7 +8,7 @@ Select a path or compound path, then choose **Effect › 3D and Materials › Ex
**Rotate…**. The options dialog opens beside the artboard with tabs:
- **Object** (Extrude & Bevel and Inflate): the shape's own options, below.
- **Rotation**: a **Position** preset, **Rotation X/Y/Z** (−180° to 180°) and **Perspective**. The rotation rings
- **Rotation**: a **Presets** menu, **Rotation X/Y/Z** (−180° to 180°) and **Perspective**. The rotation rings
on the artboard turn the object about the centre of its bounds; Shift snaps to 15°.
- **Lighting**: **Shading**, the light's **Direction** and **Elevation** (or drag the light on the artboard),
**Intensity** and **Ambient**, as for Revolve.
@ -27,11 +27,11 @@ object is where the art was.
| Twist | −360° to 360°: the back face turned against the front, the walls following in slices. |
| Taper | 1–100 %: the back face's size against the front's. |
| Cap | **Solid** closes the front and back; **Hollow** leaves them open, showing the insides of the walls. |
| Bevel | **None**, **Classic** (a straight chamfer), **Rounded** (convex quarter round), **Cove** (concave), **Step** (two steps) or **Ogee** (an S curve). Our own cross-sections. |
| Width, Height | How far the bevel reaches across the face and along the depth (0–1,000 pt each). The height is limited to the depth (half of it on each side with Both sides). |
| Repeat, Spacing | The cross-section repeated 1–32 times across the width, with a share (0–90 %) of the width flat between repeats. |
| Inside | The bevel carved into the shape (the front face shrinks) instead of added around it (the walls stand outside the art). |
| Both sides | The back is bevelled too. |
| Bevel Shape | **None**, **Classic** (a straight chamfer), **Rounded** (convex quarter round), **Cove** (concave), **Step** (two steps) or **Ogee** (an S curve). Our own cross-sections. |
| Width, Height | How far the bevel reaches across the face and along the depth (0–1,000 pt each). The height is limited to the depth (half of it on each side with Bevel both sides). |
| Repeat, Space | The cross-section repeated 1–32 times across the width, with a share (0–90 %) of the width flat between repeats. |
| Bevel Inside | The bevel carved into the shape (the front face shrinks) instead of added around it (the walls stand outside the art). |
| Bevel both sides | The back is bevelled too. |
Holes stay holes, with walls of their own. Bevels move each corner along its bisector (mitres are limited to four
times the width), so a bevel wider than a narrow part of the shape folds over itself.
@ -55,7 +55,7 @@ The flat art turned in 3D about the centre of its bounds. Every fill and stroke
stroke as its outline, so it foreshortens with the art) and shaded as one plane; a plane has two sides, so its
back shows when it is turned past 90°.
## Position presets
## Rotation presets
**Front**, **Back**, **Left**, **Right**, **Top** and **Bottom** face the art that way. **Off-Axis** tilts each 20°
down and 25° aside, so the top and the right show. **Isometric Left/Right/Top/Bottom** lay the art on that plane