Redesign modelling ribbon icons

This commit is contained in:
Hakan Seven committed 2026-09-05 14:46:06 +03:00
1 parent 9756f0598a
commit 055f1cdb1a
19 files changed
+173 -18

No files matched your search

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Box">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M4 10 15 4 28 10 17 16Z" fill="#DCE7F0"/>
<path d="M4 10 17 16V28L4 22Z" fill="#A9BFCE"/>
<path d="M17 16 28 10V22L17 28Z" fill="#718C9E"/>
</g>
<path d="m5 10 12 5.5 10-5.5" fill="none" stroke="#F4F8FC" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 410 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Solid chamfer">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M5 12 14 6H21L28 13V21L19 27H5Z" fill="#DCE7F0"/>
<path d="M19 19 28 13V21L19 27Z" fill="#718C9E"/>
<path d="M5 12H12L19 19V27H5Z" fill="#A9BFCE"/>
<path d="M12 12 21 6 28 13 19 19Z" fill="#6DB7ED"/>
</g>
<path d="m12 12 7 7" fill="none" stroke="#F4F8FC" stroke-width="1.2"/>
</svg>

After

Width:  |  Height:  |  Size: 477 B

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Cone">
<defs><linearGradient id="body"><stop stop-color="#DCE7F0"/><stop offset=".5" stop-color="#C5D5E1"/><stop offset="1" stop-color="#718C9E"/></linearGradient></defs>
<path d="M16 3 4.5 23C4.5 29 27.5 29 27.5 23Z" fill="url(#body)" stroke="#526B80" stroke-width="1.1" stroke-linejoin="round"/>
<path d="M16 4C17 12 20 21 22 26" fill="none" stroke="#526B80" stroke-opacity=".35" stroke-width="1"/>
<path d="M6 24Q14 28 23 25.5" fill="none" stroke="#F4F8FC" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 577 B

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Cylinder">
<defs><linearGradient id="body"><stop stop-color="#A9BFCE"/><stop offset=".4" stop-color="#DCE7F0"/><stop offset="1" stop-color="#718C9E"/></linearGradient></defs>
<g stroke="#526B80" stroke-width="1.1">
<path d="M5.5 8.5V23.5C5.5 29.5 26.5 29.5 26.5 23.5V8.5Z" fill="url(#body)"/>
<ellipse cx="16" cy="8.5" rx="10.5" ry="4.5" fill="#DCE7F0"/>
</g>
<path d="M7 10Q16 16 25 10" fill="none" stroke="#F4F8FC" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 542 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Extrude">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M4 13 13 8 23 13 14 18Z" fill="#6DB7ED"/>
<path d="M4 13 14 18V28L4 23Z" fill="#A9BFCE"/>
<path d="M14 18 23 13V23L14 28Z" fill="#718C9E"/>
</g>
<path d="m4 23 10 5 9-5" fill="none" stroke="#6DB7ED" stroke-width="1.5" stroke-linejoin="round"/>
<path d="M26 13V3m-3 3 3-3 3 3" fill="none" stroke="#6DB7ED" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 564 B

+9
View File
@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Solid fillet">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M5 12 14 6H21Q28 6 28 13V21L19 27H5Z" fill="#DCE7F0"/>
<path d="M19 19 28 13V21L19 27Z" fill="#718C9E"/>
<path d="M5 12H12Q19 12 19 19V27H5Z" fill="#A9BFCE"/>
<path d="M12 12 21 6Q28 6 28 13L19 19Q19 12 12 12Z" fill="#6DB7ED"/>
</g>
<path d="M12 12Q19 12 19 19" fill="none" stroke="#F4F8FC" stroke-width="1.2"/>
</svg>

After

Width:  |  Height:  |  Size: 512 B

+13
View File
@@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Intersect">
<g fill="#A9BFCE" fill-opacity=".12" stroke="#B4B6B9" stroke-opacity=".65" stroke-width="1" stroke-linejoin="round">
<path d="M3 15 11 10 20 15V25L12 30 3 25Z"/>
<path d="m3 15 9 5 8-5m-8 5v10" fill="none"/>
<path d="M13 6 21 2 30 7V18L22 23 13 18Z"/>
<path d="m13 6 9 5 8-4m-8 4v12" fill="none"/>
</g>
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M13 14 17 12 22 15 18 17Z" fill="#6DB7ED"/>
<path d="M13 14 18 17V23L13 20Z" fill="#6DB7ED"/>
<path d="M18 17 22 15V21L18 23Z" fill="#1565C0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 663 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Loft">
<defs><linearGradient id="body"><stop stop-color="#DCE7F0"/><stop offset=".55" stop-color="#A9BFCE"/><stop offset="1" stop-color="#718C9E"/></linearGradient></defs>
<path d="M10 7C10 14 6 16 3 23L15 29 29 22C24 16 23 14 23 7Z" fill="url(#body)" stroke="#526B80" stroke-width="1.1" stroke-linejoin="round"/>
<path d="M3 23 15 29 29 22 17 17Z" fill="#6DB7ED" fill-opacity=".2" stroke="#6DB7ED" stroke-width="1.4" stroke-linejoin="round"/>
<path d="M16.5 10C16 17 14 19 15 29M7 16c4 4 14 5 19 0" fill="none" stroke="#526B80" stroke-opacity=".65" stroke-width="1"/>
<ellipse cx="16.5" cy="7" rx="6.5" ry="3" fill="#6DB7ED" stroke="#526B80" stroke-width="1.1"/>
</svg>

After

Width:  |  Height:  |  Size: 764 B

+10
View File
@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Polysolid">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M4 10 9 7 17 11 24 7 28 9 17 16Z" fill="#DCE7F0"/>
<path d="M4 10 17 16V28L4 22Z" fill="#A9BFCE"/>
<path d="M17 16 28 9V21L17 28Z" fill="#718C9E"/>
<path d="M9 7V19L17 23V11Z" fill="#718C9E"/>
<path d="M17 11V23L24 19V7Z" fill="#A9BFCE"/>
<path d="M4 10 9 7 17 11 24 7 28 9 17 16Z" fill="#DCE7F0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 507 B

+11
View File
@@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Presspull">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M3 19 14 13 29 20 18 26Z" fill="#DCE7F0"/>
<path d="M3 19 18 26V30L3 23Z" fill="#A9BFCE"/>
<path d="M18 26 29 20V24L18 30Z" fill="#718C9E"/>
<path d="M9 13 16 9 23 13 16 17Z" fill="#6DB7ED"/>
<path d="M9 13 16 17V23L9 19Z" fill="#A9BFCE"/>
<path d="M16 17 23 13V19L16 23Z" fill="#718C9E"/>
</g>
<path d="M16 12V2m-3 3 3-3 3 3" fill="none" stroke="#6DB7ED" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 627 B

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Pyramid">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M15 3 3 22 16 28Z" fill="#DCE7F0"/>
<path d="M15 3 16 28 29 21Z" fill="#A9BFCE"/>
<path d="M15 3 29 21 24 12Z" fill="#718C9E"/>
</g>
<path d="m15 4 1 23" stroke="#F4F8FC" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 381 B

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Revolve">
<defs><linearGradient id="body"><stop stop-color="#718C9E"/><stop offset=".4" stop-color="#DCE7F0"/><stop offset="1" stop-color="#A9BFCE"/></linearGradient></defs>
<path d="M10 7c0 6-5 7-5 13 0 7 18 7 18 0 0-6-5-7-5-13Z" fill="url(#body)" stroke="#526B80" stroke-width="1.1"/>
<ellipse cx="14" cy="7" rx="4" ry="2" fill="#DCE7F0" stroke="#526B80" stroke-width="1.1"/>
<path d="M14 2v26" fill="none" stroke="#526B80" stroke-width="1" stroke-dasharray="2 2"/>
<path d="M25 13c7 6 2 16-9 16M20 26l-4 3 5 1" fill="none" stroke="#6DB7ED" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18 7c0 6 5 7 5 13" fill="none" stroke="#6DB7ED" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 788 B

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Sphere">
<defs><radialGradient id="body" cx=".3" cy=".25" r=".8"><stop stop-color="#F4F8FC"/><stop offset=".4" stop-color="#DCE7F0"/><stop offset=".75" stop-color="#A9BFCE"/><stop offset="1" stop-color="#718C9E"/></radialGradient></defs>
<circle cx="16" cy="16" r="12" fill="url(#body)" stroke="#526B80" stroke-width="1.1"/>
<path d="M5 14C9 21 23 24 27 18M13 4.5C8 10 13 24 22 26" fill="none" stroke="#526B80" stroke-opacity=".5" stroke-width="1"/>
<path d="M8 11a9 9 0 0 1 6-5" fill="none" stroke="#F4F8FC" stroke-width="1.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 651 B

+12
View File
@@ -0,0 +1,12 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Subtract">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M3 14 12 9 25 15 16 20Z" fill="#6DB7ED"/>
<path d="M3 14 16 20V29L3 23Z" fill="#6DB7ED"/>
<path d="M16 20 25 15V24L16 29Z" fill="#718C9E"/>
<path d="M10 17V22L16 25 21 22V17L16 20Z" fill="#526B80"/>
<path d="M14 6 21 2 29 6 22 10Z" fill="#DCE7F0"/>
<path d="M14 6 22 10V17L14 13Z" fill="#A9BFCE"/>
<path d="M22 10 29 6V13L22 17Z" fill="#718C9E"/>
</g>
<path d="M25 25h5" stroke="#6DB7ED" stroke-width="2" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 638 B

+8
View File
@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Sweep">
<defs><linearGradient id="body" x2="1" y2="1"><stop stop-color="#DCE7F0"/><stop offset=".55" stop-color="#A9BFCE"/><stop offset="1" stop-color="#718C9E"/></linearGradient></defs>
<path d="M5 24C5 10 12 5 25 5V13C17 13 13 17 13 24Z" fill="url(#body)" stroke="#526B80" stroke-width="1.1"/>
<path d="M9 24C9 12 15 9 25 9" fill="none" stroke="#F4F8FC" stroke-width="1.2"/>
<ellipse cx="25" cy="9" rx="2.5" ry="4" fill="#718C9E" stroke="#526B80" stroke-width="1.1"/>
<ellipse cx="9" cy="24" rx="4" ry="2.7" fill="#6DB7ED" stroke="#526B80" stroke-width="1.1"/>
<path d="M17 26c0-7 4-9 11-9m-3-3 3 3-3 3" fill="none" stroke="#6DB7ED" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 805 B

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Torus">
<defs><linearGradient id="body" x2="0" y2="1"><stop stop-color="#F4F8FC"/><stop offset=".45" stop-color="#C5D5E1"/><stop offset="1" stop-color="#718C9E"/></linearGradient></defs>
<path d="M29 17c0 6-6 10-13 10S3 23 3 17 9 7 16 7s13 4 13 10ZM22 15c0-2-3-3-6-3s-6 1-6 3 3 3 6 3 6-1 6-3Z" fill="url(#body)" fill-rule="evenodd" stroke="#526B80" stroke-width="1.1"/>
<path d="M10 15c1-4 11-4 12 0M4 16c2 10 22 10 24 0" fill="none" stroke="#526B80" stroke-width="1" stroke-opacity=".55"/>
<path d="M6 13c2-3 5-4 8-4" fill="none" stroke="#F4F8FC" stroke-width="1.3" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 690 B

+10
View File
@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Union">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M3 12 13 17V26L3 21Z" fill="#6DB7ED"/>
<path d="M13 17 17 14.5V23.5L13 26Z" fill="#1565C0"/>
<path d="M17 14.5 23 17.5V26.5L17 23.5Z" fill="#6DB7ED"/>
<path d="M23 17.5 29 13.5V22.5L23 26.5Z" fill="#1565C0"/>
<path d="M3 12 9 8 15 11 19 8.5 29 13.5 23 17.5 17 14.5 13 17Z" fill="#6DB7ED"/>
</g>
<path d="m4 12 9 4.5 4-2.5 6 3 5-3.5" fill="none" stroke="#F4F8FC" stroke-width=".8" stroke-opacity=".65"/>
</svg>

After

Width:  |  Height:  |  Size: 600 B

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" role="img" aria-label="Wedge">
<g stroke="#526B80" stroke-width="1.1" stroke-linejoin="round">
<path d="M4 11 14 5 28 21 18 27Z" fill="#DCE7F0"/>
<path d="M4 11 18 27 4 23Z" fill="#A9BFCE"/>
</g>
<path d="m5 11 13 15" stroke="#F4F8FC" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 335 B

+18 -18
View File
@@ -10,24 +10,24 @@ use crate::modules::{CadModule, IconKind, ModuleEvent, RibbonGroup, RibbonItem,
pub struct ModelModule;
const BOX_ICON: &[u8] = include_bytes!("../../../assets/icons/box3d.svg");
const CYLINDER_ICON: &[u8] = include_bytes!("../../../assets/icons/cylinder3d.svg");
const CONE_ICON: &[u8] = include_bytes!("../../../assets/icons/cone3d.svg");
const SPHERE_ICON: &[u8] = include_bytes!("../../../assets/icons/sphere3d.svg");
const PYRAMID_ICON: &[u8] = include_bytes!("../../../assets/icons/pyramid3d.svg");
const WEDGE_ICON: &[u8] = include_bytes!("../../../assets/icons/wedge3d.svg");
const TORUS_ICON: &[u8] = include_bytes!("../../../assets/icons/torus3d.svg");
const POLYSOLID_ICON: &[u8] = include_bytes!("../../../assets/icons/polysolid.svg");
const EXTRUDE_ICON: &[u8] = include_bytes!("../../../assets/icons/extrude.svg");
const REVOLVE_ICON: &[u8] = include_bytes!("../../../assets/icons/revolve.svg");
const LOFT_ICON: &[u8] = include_bytes!("../../../assets/icons/loft.svg");
const SWEEP_ICON: &[u8] = include_bytes!("../../../assets/icons/sweep.svg");
const PRESSPULL_ICON: &[u8] = include_bytes!("../../../assets/icons/presspull.svg");
const UNION_ICON: &[u8] = include_bytes!("../../../assets/icons/union.svg");
const SUBTRACT_ICON: &[u8] = include_bytes!("../../../assets/icons/subtract.svg");
const INTERSECT_ICON: &[u8] = include_bytes!("../../../assets/icons/intersect.svg");
const FILLET_ICON: &[u8] = include_bytes!("../../../assets/icons/fillet.svg");
const CHAMFER_ICON: &[u8] = include_bytes!("../../../assets/icons/chamfer.svg");
const BOX_ICON: &[u8] = include_bytes!("../../../assets/icons/model/box.svg");
const CYLINDER_ICON: &[u8] = include_bytes!("../../../assets/icons/model/cylinder.svg");
const CONE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/cone.svg");
const SPHERE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/sphere.svg");
const PYRAMID_ICON: &[u8] = include_bytes!("../../../assets/icons/model/pyramid.svg");
const WEDGE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/wedge.svg");
const TORUS_ICON: &[u8] = include_bytes!("../../../assets/icons/model/torus.svg");
const POLYSOLID_ICON: &[u8] = include_bytes!("../../../assets/icons/model/polysolid.svg");
const EXTRUDE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/extrude.svg");
const REVOLVE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/revolve.svg");
const LOFT_ICON: &[u8] = include_bytes!("../../../assets/icons/model/loft.svg");
const SWEEP_ICON: &[u8] = include_bytes!("../../../assets/icons/model/sweep.svg");
const PRESSPULL_ICON: &[u8] = include_bytes!("../../../assets/icons/model/presspull.svg");
const UNION_ICON: &[u8] = include_bytes!("../../../assets/icons/model/union.svg");
const SUBTRACT_ICON: &[u8] = include_bytes!("../../../assets/icons/model/subtract.svg");
const INTERSECT_ICON: &[u8] = include_bytes!("../../../assets/icons/model/intersect.svg");
const FILLET_ICON: &[u8] = include_bytes!("../../../assets/icons/model/fillet.svg");
const CHAMFER_ICON: &[u8] = include_bytes!("../../../assets/icons/model/chamfer.svg");
/// Helper to declare a ribbon tool that fires a named command.
fn tool(id: &'static str, label: &'static str, icon: &'static [u8]) -> ToolDef {