Merge remote-tracking branch 'remotes/origin/master' into vb_wold_object_manipulation

This commit is contained in:
bubnikv 2019-05-03 12:37:43 +02:00
commit 1c6006f657
76 changed files with 2255 additions and 204 deletions

View File

@ -89,10 +89,12 @@ ExternalProject_Add(dep_libcurl
ExternalProject_Add(dep_wxwidgets ExternalProject_Add(dep_wxwidgets
EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_ALL 1
URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.2/wxWidgets-3.1.2.tar.bz2" GIT_REPOSITORY "https://github.com/prusa3d/wxWidgets"
URL_HASH SHA256=4cb8d23d70f9261debf7d6cfeca667fc0a7d2b6565adb8f1c484f9b674f1f27a GIT_TAG v3.1.1-patched
# URL "https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.2/wxWidgets-3.1.2.tar.bz2"
# URL_HASH SHA256=4cb8d23d70f9261debf7d6cfeca667fc0a7d2b6565adb8f1c484f9b674f1f27a
BUILD_IN_SOURCE 1 BUILD_IN_SOURCE 1
PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/wxwidgets-pngprefix.h" src/png/pngprefix.h # PATCH_COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/wxwidgets-pngprefix.h" src/png/pngprefix.h
CONFIGURE_COMMAND env "CXXFLAGS=${DEP_WERRORS_SDK}" "CFLAGS=${DEP_WERRORS_SDK}" ./configure CONFIGURE_COMMAND env "CXXFLAGS=${DEP_WERRORS_SDK}" "CFLAGS=${DEP_WERRORS_SDK}" ./configure
"--prefix=${DESTDIR}/usr/local" "--prefix=${DESTDIR}/usr/local"
--disable-shared --disable-shared

View File

@ -5,13 +5,13 @@
<g id="layers"> <g id="layers">
<g> <g>
<g> <g>
<rect x="1" y="13" fill="#FFFFFF" width="14" height="2"/> <rect x="1" y="13" fill="#808080" width="14" height="2"/>
</g> </g>
<g> <g>
<rect x="1" y="10.6" fill="#FFFFFF" width="14" height="1.74"/> <rect x="1" y="10.6" fill="#808080" width="14" height="1.74"/>
</g> </g>
<g> <g>
<rect x="1" y="8.19" fill="#FFFFFF" width="14" height="1.47"/> <rect x="1" y="8.19" fill="#808080" width="14" height="1.47"/>
</g> </g>
<g> <g>
<rect x="1" y="5.79" fill="#ED6B21" width="14" height="1.2"/> <rect x="1" y="5.79" fill="#ED6B21" width="14" height="1.2"/>
@ -20,7 +20,7 @@
<rect x="1" y="3.39" fill="#ED6B21" width="14" height="0.93"/> <rect x="1" y="3.39" fill="#ED6B21" width="14" height="0.93"/>
</g> </g>
<g> <g>
<rect x="1" y="0.99" fill="#FFFFFF" width="14" height="0.67"/> <rect x="1" y="0.99" fill="#808080" width="14" height="0.67"/>
</g> </g>
</g> </g>
</g> </g>

Before

Width:  |  Height:  |  Size: 845 B

After

Width:  |  Height:  |  Size: 845 B

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="add_x5F_copies">
<g>
<path fill="#FFFFFF" d="M8,2c3.31,0,6,2.69,6,6s-2.69,6-6,6s-6-2.69-6-6S4.69,2,8,2 M8,1C4.13,1,1,4.13,1,8s3.13,7,7,7s7-3.13,7-7
S11.87,1,8,1L8,1z"/>
</g>
<g>
<path fill="#ED6B21" d="M12,8.75H4C3.59,8.75,3.25,8.41,3.25,8S3.59,7.25,4,7.25h8c0.41,0,0.75,0.34,0.75,0.75S12.41,8.75,12,8.75
z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,12.75c-0.41,0-0.75-0.34-0.75-0.75V4c0-0.41,0.34-0.75,0.75-0.75S8.75,3.59,8.75,4v8
C8.75,12.41,8.41,12.75,8,12.75z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 846 B

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="add_x5F_modifer">
<path fill="#FFFFFF" d="M10.98,9.78c-0.29,0-0.52,0.23-0.52,0.52v2.09v1.04c0,0.29-0.23,0.52-0.52,0.52H2.62
c-0.29,0-0.53-0.24-0.53-0.53l-0.05-7.3c0-0.14,0.05-0.27,0.15-0.37c0.1-0.1,0.23-0.15,0.37-0.15h3.19l0,0
c0.29,0,0.52-0.23,0.52-0.52S6.04,4.55,5.75,4.55H3.66c-0.01,0-0.01,0-0.02,0H2.56c-0.42,0-0.81,0.16-1.11,0.46
C1.16,5.31,1,5.71,1,6.13l0.04,7.31C1.05,14.3,1.75,15,2.62,15h7.31c0.86,0,1.57-0.7,1.57-1.57v-1.04V10.3
C11.5,10.01,11.27,9.78,10.98,9.78z"/>
<circle fill="#ED6B21" cx="11" cy="5" r="3.5"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 891 B

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="add_x5F_part_1_">
<g>
<path fill="#ED6B21" d="M11,15c-0.55,0-1-0.45-1-1V8c0-0.55,0.45-1,1-1s1,0.45,1,1v6C12,14.55,11.55,15,11,15z"/>
</g>
<g>
<path fill="#ED6B21" d="M14,12H8c-0.55,0-1-0.45-1-1s0.45-1,1-1h6c0.55,0,1,0.45,1,1S14.55,12,14,12z"/>
</g>
<g>
<path fill="#FFFFFF" d="M10.98,6.22c-0.29,0-0.52-0.23-0.52-0.52V3.61V2.57c0-0.29-0.23-0.52-0.52-0.52H2.62
c-0.29,0-0.53,0.24-0.53,0.53l-0.05,7.3c0,0.14,0.05,0.27,0.15,0.37c0.1,0.1,0.23,0.15,0.37,0.15h3.19l0,0
c0.29,0,0.52,0.23,0.52,0.52s-0.23,0.52-0.52,0.52H3.66c-0.01,0-0.01,0-0.02,0H2.56c-0.42,0-0.81-0.16-1.11-0.46
C1.16,10.69,1,10.29,1,9.87l0.04-7.31C1.05,1.7,1.75,1,2.62,1h7.31c0.86,0,1.57,0.7,1.57,1.57v1.04V5.7
C11.5,5.99,11.27,6.22,10.98,6.22z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="advanced_x2B_wrench">
<g>
<path fill="#FFFFFF" d="M7.61,3.81C7.49,3.75,7.35,3.6,7.31,3.47S7.15,2.92,7.19,2.79l0.06-0.17c0.04-0.13,0-0.32-0.1-0.41
L6.8,1.85c-0.1-0.1-0.28-0.14-0.41-0.1L6.21,1.81C6.08,1.85,5.88,1.84,5.76,1.78S5.26,1.51,5.2,1.39L5.11,1.22
C5.05,1.1,4.89,1,4.75,1h-0.5c-0.14,0-0.3,0.1-0.36,0.22L3.81,1.39C3.75,1.51,3.6,1.65,3.47,1.69S2.92,1.85,2.79,1.81L2.62,1.75
c-0.13-0.04-0.32,0-0.41,0.1L1.85,2.2c-0.1,0.1-0.14,0.28-0.1,0.41l0.06,0.17c0.04,0.13,0.03,0.33-0.03,0.45s-0.27,0.5-0.39,0.56
l-0.17,0.1C1.1,3.95,1,4.11,1,4.25v0.5c0,0.14,0.1,0.3,0.22,0.36l0.17,0.08c0.12,0.06,0.26,0.21,0.3,0.34S1.85,6.07,1.81,6.2
L1.75,6.38c-0.04,0.13,0,0.32,0.1,0.41L2.2,7.15c0.1,0.1,0.28,0.14,0.41,0.1l0.17-0.06c0.13-0.04,0.33-0.03,0.45,0.03
s0.5,0.27,0.56,0.39l0.08,0.17C3.95,7.9,4.11,8,4.25,8h0.5c0.14,0,0.3-0.1,0.36-0.22l0.08-0.17c0.06-0.12,0.21-0.26,0.34-0.3
S6.07,7.15,6.2,7.19l0.17,0.06c0.13,0.04,0.32,0,0.41-0.1L7.15,6.8c0.1-0.1,0.14-0.28,0.1-0.41L7.19,6.21
C7.15,6.08,7.16,5.88,7.22,5.76s0.27-0.5,0.39-0.56l0.17-0.08C7.9,5.05,8,4.89,8,4.75v-0.5c0-0.14-0.1-0.3-0.22-0.36L7.61,3.81z
M4.5,6.42c-1.06,0-1.92-0.86-1.92-1.92S3.44,2.58,4.5,2.58S6.42,3.44,6.42,4.5S5.56,6.42,4.5,6.42z"/>
</g>
<g>
<path fill="#FFFFFF" d="M12.61,2.6c-0.12-0.06-0.24-0.18-0.28-0.27s-0.11-0.42-0.06-0.54s0-0.31-0.1-0.41l-0.15-0.15
c-0.1-0.1-0.28-0.14-0.41-0.1s-0.3,0.04-0.39,0S10.86,0.9,10.8,0.78s-0.22-0.22-0.36-0.22h-0.21c-0.14,0-0.3,0.1-0.36,0.22
S9.68,1.03,9.59,1.06s-0.41,0.1-0.54,0.06s-0.31,0-0.41,0.1L8.49,1.37c-0.1,0.1-0.14,0.28-0.1,0.41s0.04,0.3,0,0.39
S8.17,2.54,8.05,2.6S7.83,2.82,7.83,2.96v0.21c0,0.14,0.1,0.3,0.22,0.36C8.17,3.59,8.3,3.71,8.33,3.8s0.11,0.42,0.06,0.54
s0,0.31,0.1,0.41L8.64,4.9C8.74,5,8.92,5.04,9.05,5s0.3-0.04,0.39,0s0.37,0.22,0.43,0.34s0.22,0.22,0.36,0.22h0.21
c0.14,0,0.3-0.1,0.36-0.22s0.18-0.24,0.27-0.28S11.49,4.95,11.61,5s0.31,0,0.41-0.1l0.15-0.15c0.1-0.1,0.14-0.28,0.1-0.41
s-0.04-0.3,0-0.39s0.22-0.37,0.34-0.43s0.22-0.22,0.22-0.36v-0.2C12.83,2.82,12.74,2.66,12.61,2.6z M10.33,4.18
c-0.62,0-1.11-0.5-1.11-1.11c0-0.62,0.5-1.11,1.11-1.11s1.11,0.5,1.11,1.11C11.45,3.68,10.95,4.18,10.33,4.18z"/>
</g>
<g>
<path fill="#ED6B21" d="M14.38,9.89c-0.01-0.14,0.06-0.33,0.15-0.44l0.31-0.35c0.09-0.1,0.12-0.29,0.07-0.42l-0.35-0.85
c-0.05-0.13-0.21-0.24-0.35-0.25l-0.47-0.03c-0.14-0.01-0.32-0.1-0.42-0.2l-0.37-0.37c-0.1-0.09-0.2-0.28-0.2-0.41L12.72,6.1
c-0.01-0.14-0.12-0.29-0.25-0.35L11.62,5.4c-0.13-0.05-0.32-0.02-0.42,0.07l-0.36,0.31c-0.1,0.09-0.3,0.16-0.44,0.15H9.88
c-0.13,0-0.33-0.07-0.43-0.16L9.1,5.46C8.99,5.37,8.8,5.34,8.68,5.4L7.83,5.75C7.7,5.8,7.59,5.95,7.58,6.09L7.55,6.56
c-0.01,0.14-0.1,0.32-0.2,0.42L6.98,7.34c-0.09,0.1-0.28,0.2-0.41,0.2L6.09,7.58C5.95,7.59,5.8,7.7,5.75,7.83L5.4,8.68
C5.34,8.8,5.37,8.99,5.46,9.1l0.31,0.36c0.09,0.1,0.16,0.3,0.15,0.44v0.52c0.01,0.14-0.06,0.33-0.15,0.44L5.46,11.2
c-0.09,0.1-0.12,0.29-0.07,0.42l0.35,0.85c0.05,0.13,0.21,0.24,0.35,0.25l0.47,0.03c0.14,0.01,0.32,0.1,0.42,0.2l0.37,0.37
c0.1,0.09,0.2,0.28,0.2,0.41l0.03,0.47c0.01,0.14,0.12,0.29,0.25,0.35l0.85,0.35C8.81,14.95,9,14.92,9.1,14.83l0.36-0.31
c0.1-0.09,0.3-0.16,0.44-0.15h0.52c0.14-0.01,0.33,0.06,0.44,0.15l0.35,0.31c0.1,0.09,0.29,0.12,0.42,0.07l0.85-0.35
c0.13-0.05,0.24-0.21,0.25-0.35l0.03-0.47c0.01-0.14,0.1-0.32,0.2-0.42l0.37-0.37c0.09-0.1,0.28-0.2,0.41-0.21l0.47-0.03
c0.14-0.01,0.29-0.12,0.35-0.25l0.35-0.85c0.05-0.13,0.02-0.32-0.07-0.42l-0.31-0.36c-0.09-0.1-0.16-0.3-0.15-0.44L14.38,9.89z
M10.15,13c-1.57,0-2.85-1.27-2.85-2.85S8.58,7.3,10.15,7.3S13,8.58,13,10.15S11.72,13,10.15,13z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="advanced_x2B_">
<path fill="#FFFFFF" d="M10.98,9.78c-0.29,0-0.52,0.23-0.52,0.52v2.09v1.04c0,0.29-0.23,0.52-0.52,0.52H2.62
c-0.29,0-0.53-0.24-0.53-0.53l-0.05-7.3c0-0.14,0.05-0.27,0.15-0.37c0.1-0.1,0.23-0.15,0.37-0.15h3.19l0,0
c0.29,0,0.52-0.23,0.52-0.52S6.04,4.55,5.75,4.55H3.66c-0.01,0-0.01,0-0.02,0H2.56c-0.42,0-0.81,0.16-1.11,0.46
C1.16,5.31,1,5.71,1,6.13l0.04,7.31C1.05,14.3,1.75,15,2.62,15h7.31c0.86,0,1.57-0.7,1.57-1.57v-1.04V10.3
C11.5,10.01,11.27,9.78,10.98,9.78z"/>
<path fill="#ED6B21" d="M13.56,5.38c-0.01-0.13,0.06-0.33,0.15-0.43l0.13-0.15c0.09-0.1,0.12-0.29,0.07-0.42l-0.2-0.48
c-0.05-0.13-0.21-0.24-0.35-0.25l-0.2-0.01c-0.14-0.01-0.32-0.1-0.41-0.2c-0.09-0.1-0.37-0.45-0.38-0.59l-0.01-0.2
c-0.01-0.14-0.12-0.29-0.25-0.35l-0.48-0.2c-0.13-0.05-0.32-0.02-0.42,0.07L11.06,2.3c-0.1,0.09-0.3,0.16-0.44,0.15
S10.05,2.39,9.94,2.3L9.79,2.16C9.69,2.07,9.5,2.04,9.37,2.1L8.89,2.3C8.76,2.35,8.65,2.5,8.64,2.64l-0.01,0.2
c-0.01,0.14-0.1,0.32-0.2,0.41c-0.1,0.09-0.45,0.37-0.59,0.38l-0.2,0.01C7.5,3.65,7.35,3.76,7.3,3.89L7.1,4.37
C7.04,4.5,7.07,4.69,7.16,4.79L7.3,4.94c0.09,0.1,0.16,0.3,0.15,0.44C7.44,5.51,7.38,5.95,7.29,6.06L7.16,6.21
C7.07,6.31,7.04,6.5,7.1,6.63l0.2,0.48c0.05,0.13,0.2,0.24,0.34,0.25l0.2,0.01c0.14,0.01,0.32,0.1,0.41,0.2s0.37,0.45,0.38,0.59
l0.01,0.2C8.65,8.5,8.76,8.65,8.89,8.7l0.48,0.2C9.5,8.96,9.69,8.93,9.79,8.84L9.94,8.7c0.1-0.09,0.3-0.16,0.44-0.15
c0.14,0.01,0.57,0.06,0.68,0.15l0.15,0.13c0.1,0.09,0.29,0.12,0.42,0.07l0.48-0.2c0.13-0.05,0.24-0.21,0.25-0.35l0.01-0.2
c0.01-0.14,0.1-0.32,0.2-0.41s0.45-0.37,0.59-0.38l0.2-0.01c0.14-0.01,0.29-0.12,0.35-0.25l0.2-0.48c0.05-0.13,0.02-0.32-0.07-0.42
L13.7,6.06C13.61,5.95,13.56,5.51,13.56,5.38z M10.5,7.55c-1.13,0-2.05-0.92-2.05-2.05s0.92-2.05,2.05-2.05s2.05,0.92,2.05,2.05
S11.63,7.55,10.5,7.55z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="machine_x2B_cog">
<path fill="#ffffff" d="M13.77,6.39c-0.13-0.47-0.32-0.92-0.55-1.33l0.43-1.3l-1.41-1.41l-1.3,0.43c-0.42-0.23-0.86-0.42-1.33-0.55
L9,1H7L6.39,2.23C5.92,2.36,5.47,2.54,5.06,2.78l-1.3-0.43L2.34,3.76l0.43,1.3C2.54,5.47,2.36,5.92,2.23,6.39L1,7v2l1.23,0.61
c0.13,0.47,0.32,0.92,0.55,1.33l-0.43,1.3l1.41,1.41l1.3-0.43c0.42,0.23,0.86,0.42,1.33,0.55L7,15h2l0.61-1.23
c0.47-0.13,0.92-0.32,1.33-0.55l1.3,0.43l1.41-1.41l-0.43-1.3c0.23-0.42,0.42-0.86,0.55-1.33L15,9V7L13.77,6.39z M8,13
c-2.76,0-5-2.24-5-5s2.24-5,5-5s5,2.24,5,5S10.76,13,8,13z"/>
<path fill="#ED6B21" d="M11.3,7.08c-0.07-0.27-0.18-0.52-0.31-0.76l0.25-0.74l-0.81-0.81L9.68,5.01C9.45,4.88,9.19,4.78,8.92,4.7
L8.57,4H7.43L7.08,4.7C6.81,4.78,6.55,4.88,6.32,5.01L5.58,4.77L4.77,5.58l0.25,0.74C4.88,6.55,4.78,6.81,4.7,7.08L4,7.43v1.14
l0.7,0.35c0.07,0.27,0.18,0.52,0.31,0.76l-0.25,0.74l0.81,0.81l0.74-0.25c0.24,0.13,0.49,0.24,0.76,0.31L7.43,12h1.14l0.35-0.7
c0.27-0.07,0.52-0.18,0.76-0.31l0.74,0.25l0.81-0.81l-0.25-0.74c0.13-0.24,0.24-0.49,0.31-0.76L12,8.57V7.43L11.3,7.08z M8,10.86
c-1.58,0-2.86-1.28-2.86-2.86S6.42,5.14,8,5.14S10.86,6.42,10.86,8S9.58,10.86,8,10.86z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="cooling">
<path fill="#FFFFFF" d="M14,1H2C1.45,1,1,1.45,1,2v12c0,0.55,0.45,1,1,1h12c0.55,0,1-0.45,1-1V2C15,1.45,14.55,1,14,1z M8,14
c-3.31,0-6-2.69-6-6s2.69-6,6-6s6,2.69,6,6S11.31,14,8,14z"/>
<g>
<path fill="#ED6B21" d="M7.86,7.14C7.94,7.41,8,7.7,8,8c0,1.66-1.34,3-3,3c-0.3,0-0.59-0.06-0.86-0.14C4.51,12.09,5.64,13,7,13
c1.66,0,3-1.34,3-3C10,8.64,9.09,7.51,7.86,7.14z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,8C6.34,8,5,6.66,5,5c0-0.3,0.06-0.59,0.14-0.86C3.91,4.51,3,5.64,3,7c0,1.66,1.34,3,3,3
c1.36,0,2.49-0.91,2.86-2.14C8.59,7.94,8.3,8,8,8z"/>
</g>
<g>
<path fill="#ED6B21" d="M10,6C8.64,6,7.51,6.91,7.14,8.14C7.41,8.06,7.7,8,8,8c1.66,0,3,1.34,3,3c0,0.3-0.06,0.59-0.14,0.86
C12.09,11.49,13,10.36,13,9C13,7.34,11.66,6,10,6z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,8c0-1.66,1.34-3,3-3c0.3,0,0.59,0.06,0.86,0.14C11.49,3.91,10.36,3,9,3C7.34,3,6,4.34,6,6
c0,1.36,0.91,2.49,2.14,2.86C8.06,8.59,8,8.3,8,8z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
<g id="copy">
<g>
<path fill="#ED6B21" d="M115.76,51.2l-8.06-8.06c-2.47-2.47-6.97-4.34-10.47-4.34h-50.8c-4.2,0-7.62,3.42-7.62,7.62v66.04
c0,4.2,3.42,7.62,7.62,7.62h66.04c4.2,0,7.62-3.42,7.62-7.62v-50.8C120.09,58.17,118.23,53.67,115.76,51.2z M111.42,54.04h-6.57
v-6.57L111.42,54.04z M115.01,112.47c0,1.4-1.14,2.54-2.54,2.54H46.43c-1.4,0-2.54-1.14-2.54-2.54V46.42
c0-1.4,1.14-2.54,2.54-2.54h50.8c0.74,0,1.63,0.18,2.54,0.46v12.24c0,1.4,1.14,2.54,2.54,2.54h12.24c0.28,0.91,0.46,1.8,0.46,2.54
V112.47z"/>
<path fill="#ED6B21" d="M53.97,59.13h35.72c1.4,0,2.54-1.14,2.54-2.54s-1.14-2.54-2.54-2.54H53.97c-1.4,0-2.54,1.14-2.54,2.54
S52.56,59.13,53.97,59.13z"/>
<path fill="#ED6B21" d="M104.93,69.29H53.97c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h50.96c1.4,0,2.54-1.14,2.54-2.54
S106.33,69.29,104.93,69.29z"/>
<path fill="#ED6B21" d="M104.93,84.53H53.97c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h50.96c1.4,0,2.54-1.14,2.54-2.54
S106.33,84.53,104.93,84.53z"/>
<path fill="#ED6B21" d="M104.93,99.77H53.97c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h50.96c1.4,0,2.54-1.14,2.54-2.54
S106.33,99.77,104.93,99.77z"/>
</g>
<g>
<path fill="#ffffff" d="M85.27,20.71l-8.06-8.06c-2.47-2.47-6.97-4.34-10.47-4.34h-50.8c-4.2,0-7.62,3.42-7.62,7.62v66.04
c0,4.2,3.42,7.62,7.62,7.62h17.78c1.4,0,2.54-1.14,2.54-2.54s-1.14-2.54-2.54-2.54H15.94c-1.4,0-2.54-1.14-2.54-2.54V15.94
c0-1.4,1.14-2.54,2.54-2.54h50.8c0.74,0,1.63,0.18,2.54,0.46V26.1c0,1.4,1.14,2.54,2.54,2.54h12.45c0.16,0.49,0.25,0.93,0.25,1.27
v3.81c0,1.4,1.14,2.54,2.54,2.54c1.4,0,2.54-1.14,2.54-2.54v-3.81C89.61,27.14,87.75,23.19,85.27,20.71z M74.37,16.99l6.57,6.57
h-6.57V16.99z"/>
<path fill="#ffffff" d="M59.21,23.56H23.48c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h35.72c1.4,0,2.54-1.14,2.54-2.54
S60.61,23.56,59.21,23.56z"/>
<path fill="#ffffff" d="M28.73,38.8h-5.24c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h5.24c1.4,0,2.54-1.14,2.54-2.54
S30.13,38.8,28.73,38.8z"/>
<path fill="#ffffff" d="M28.73,54.04h-5.24c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h5.24c1.4,0,2.54-1.14,2.54-2.54
S30.13,54.04,28.73,54.04z"/>
<path fill="#ffffff" d="M28.73,69.29h-5.24c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h5.24c1.4,0,2.54-1.14,2.54-2.54
S30.13,69.29,28.73,69.29z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="delete">
<g>
<path fill="#ED6B21" d="M13,10c0-1.1-0.9-2-2-2H5c-1.1,0-2,0.9-2,2v3c0,1.1,0.9,2,2,2h6c1.1,0,2-0.9,2-2V10z"/>
</g>
<g>
<path fill="#FFFFFF" d="M12,5.01c0.25,0,0.47,0.09,0.62,0.26s0.22,0.4,0.2,0.64l-0.64,7.01C12.13,13.49,11.58,14,11,14H5
c-0.58,0-1.13-0.51-1.19-1.08L3.18,5.91c-0.02-0.25,0.05-0.47,0.2-0.64C3.53,5.1,3.75,5.01,4,5.01H12 M12,4.01H4
c-1.1,0-1.92,0.9-1.82,1.99l0.64,7.01C2.92,14.1,3.9,15,5,15h6c1.1,0,2.08-0.9,2.18-1.99L13.82,6C13.92,4.91,13.1,4.01,12,4.01
L12,4.01z"/>
</g>
<g>
<path fill="#FFFFFF" d="M13,3.5H3C2.72,3.5,2.5,3.28,2.5,3S2.72,2.5,3,2.5h10c0.28,0,0.5,0.22,0.5,0.5S13.28,3.5,13,3.5z"/>
</g>
<g>
<path fill="#FFFFFF" d="M10,2.5H6C5.72,2.5,5.5,2.28,5.5,2S5.72,1.5,6,1.5h4c0.28,0,0.5,0.22,0.5,0.5S10.28,2.5,10,2.5z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
<g id="DELETE_ALL_1_">
<path fill="#ffffff" d="M103.52,43.87l-13.31,69.97H37.79L24.48,43.87H103.52 M108.77,37.87H19.23c-1.1,0-1.83,0.88-1.63,1.96
l14.84,78.04c0.21,1.08,1.27,1.96,2.37,1.96h58.36c1.1,0,2.17-0.88,2.37-1.96l14.84-78.04C110.6,38.75,109.87,37.87,108.77,37.87
L108.77,37.87z"/>
<g>
<path fill="#ED6B21" d="M89.38,22.97c-1.1,0-2-0.9-2-2v-10.9c0-1.1-0.9-2-2-2H42.62c-1.1,0-2,0.9-2,2v10.9c0,1.1-0.9,2-2,2H19.23
c-1.1,0-2,0.9-2,2v3.45c0,1.1,0.9,2,2,2h89.54c1.1,0,2-0.9,2-2v-3.45c0-1.1-0.9-2-2-2H89.38z M79.59,20.97c0,1.1-0.9,2-2,2H50.41
c-1.1,0-2-0.9-2-2v-3.45c0-1.1,0.9-2,2-2h27.18c1.1,0,2,0.9,2,2V20.97z"/>
</g>
<g>
<path fill="#ffffff" d="M93.17,73.5H34.83c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h58.34c0.83,0,1.5,0.67,1.5,1.5
S94,73.5,93.17,73.5z"/>
</g>
<g>
<path fill="#ffffff" d="M90.14,89.45H37.96c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h52.18c0.83,0,1.5,0.67,1.5,1.5
S90.97,89.45,90.14,89.45z"/>
</g>
<g>
<path fill="#ffffff" d="M87.1,105.4H40.9c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h46.2c0.83,0,1.5,0.67,1.5,1.5
S87.93,105.4,87.1,105.4z"/>
</g>
<g>
<path fill="#ffffff" d="M96.2,57.56H31.8c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h64.4c0.83,0,1.5,0.67,1.5,1.5
S97.03,57.56,96.2,57.56z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
<g id="editor">
<g>
<path fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M118.68,8.83L92.1,37.03c-0.75,0.8-2.27,1.46-3.37,1.46H9.44"/>
</g>
<g>
<line fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="90.72" y1="118.69" x2="90.72" y2="38.81"/>
</g>
<g>
<path fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M119.88,91.51v-81.4c0-1.1-0.9-2-2-2H42.92c-1.1,0-2.66,0.61-3.47,1.36L9.59,37.13c-0.81,0.75-1.47,2.26-1.47,3.36v77.39
c0,1.1,0.9,2,2,2h78.61c1.1,0,2.65-0.63,3.44-1.39l27.67-26.82"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="export_x5F_config">
<path fill="#FFFFFF" d="M14.22,6.61c-0.25-0.12-0.52-0.43-0.6-0.68s-0.32-1.09-0.23-1.35l0.12-0.35c0.09-0.26,0-0.63-0.2-0.83
L12.6,2.7c-0.19-0.19-0.57-0.28-0.83-0.2l-0.35,0.12c-0.26,0.09-0.67,0.06-0.91-0.05s-1-0.54-1.12-0.79L9.22,1.45
C9.1,1.2,8.77,1,8.5,1h-1C7.22,1,6.9,1.2,6.78,1.45L6.61,1.78C6.49,2.02,6.18,2.3,5.93,2.38S4.84,2.7,4.58,2.62L4.23,2.5
C3.97,2.41,3.6,2.5,3.4,2.7L2.7,3.4C2.5,3.6,2.41,3.97,2.5,4.23l0.12,0.35C2.7,4.84,2.68,5.25,2.57,5.49s-0.54,1-0.79,1.12
L1.45,6.78C1.2,6.9,1,7.22,1,7.5v1c0,0.27,0.2,0.6,0.45,0.72l0.33,0.17c0.25,0.12,0.52,0.43,0.6,0.68s0.32,1.09,0.23,1.35
L2.5,11.77c-0.09,0.26,0,0.63,0.2,0.83l0.7,0.7c0.19,0.19,0.57,0.28,0.83,0.2l0.35-0.12c0.26-0.09,0.67-0.06,0.91,0.05
s1,0.54,1.12,0.79l0.17,0.33C6.9,14.8,7.22,15,7.5,15h1c0.27,0,0.6-0.2,0.72-0.45l0.17-0.33c0.12-0.25,0.43-0.52,0.68-0.6
s1.09-0.32,1.35-0.23l0.35,0.12c0.26,0.09,0.63,0,0.83-0.2l0.71-0.71c0.19-0.19,0.28-0.57,0.2-0.83l-0.12-0.35
c-0.09-0.26-0.06-0.67,0.05-0.91s0.54-1,0.79-1.12l0.33-0.17C14.8,9.1,15,8.77,15,8.5v-1c0-0.28-0.2-0.6-0.45-0.72L14.22,6.61z
M8,13c-2.76,0-5-2.24-5-5s2.24-5,5-5s5,2.24,5,5S10.76,13,8,13z"/>
<path fill="#ED6B21" d="M11.65,8.35c0.19-0.19,0.19-0.51,0-0.71L8.92,4.92C8.73,4.73,8.57,4.8,8.57,5.07v1.29
c0,0.28-0.22,0.5-0.5,0.5H4.5C4.22,6.86,4,7.08,4,7.36v1.29c0,0.27,0.22,0.5,0.5,0.5h3.57c0.28,0,0.5,0.22,0.5,0.5v1.29
c0,0.27,0.16,0.34,0.35,0.15L11.65,8.35z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="export_x5F_config_x5F_bundle">
<g>
<path fill="#FFFFFF" d="M1.2,12.61c0.11,0.08,0.21,0.22,0.23,0.31s0.04,0.43-0.03,0.55s-0.05,0.31,0.03,0.42l0.12,0.17
c0.08,0.11,0.25,0.19,0.39,0.17c0.13-0.02,0.3,0.01,0.38,0.06s0.33,0.28,0.37,0.41s0.18,0.25,0.32,0.27l0.21,0.04
c0.14,0.02,0.31-0.05,0.39-0.16s0.22-0.21,0.31-0.23c0.09-0.02,0.43-0.04,0.55,0.03c0.12,0.06,0.31,0.05,0.42-0.03l0.17-0.12
c0.11-0.08,0.19-0.25,0.17-0.39c-0.02-0.13,0.01-0.3,0.06-0.38s0.28-0.33,0.41-0.37c0.13-0.04,0.25-0.18,0.27-0.32l0.04-0.21
c0.02-0.14-0.05-0.31-0.16-0.39c-0.11-0.08-0.21-0.22-0.23-0.31s-0.04-0.43,0.03-0.55c0.06-0.12,0.05-0.31-0.03-0.42L5.5,10.98
c-0.08-0.11-0.25-0.19-0.39-0.17c-0.13,0.02-0.3-0.01-0.38-0.06s-0.33-0.28-0.37-0.41s-0.18-0.25-0.32-0.27l-0.21-0.04
c-0.14-0.02-0.31,0.05-0.39,0.16s-0.22,0.21-0.31,0.23S2.7,10.46,2.58,10.4c-0.12-0.06-0.31-0.05-0.42,0.03l-0.17,0.12
c-0.11,0.08-0.19,0.25-0.17,0.39s-0.01,0.3-0.06,0.38s-0.28,0.33-0.41,0.37s-0.25,0.18-0.27,0.32l-0.04,0.21
C1.02,12.36,1.09,12.53,1.2,12.61z M3.71,11.42c0.61,0.1,1.02,0.68,0.92,1.28c-0.1,0.61-0.68,1.02-1.28,0.92
c-0.61-0.1-1.02-0.68-0.92-1.28C2.53,11.73,3.1,11.32,3.71,11.42z"/>
</g>
<g>
<path fill="#FFFFFF" d="M10.39,4.47c0.13,0.03,0.28,0.13,0.33,0.21s0.19,0.38,0.18,0.52s0.07,0.3,0.19,0.38l0.18,0.11
c0.12,0.07,0.31,0.08,0.42,0.01c0.12-0.07,0.28-0.11,0.38-0.09c0.09,0.02,0.41,0.13,0.5,0.24c0.09,0.1,0.26,0.17,0.4,0.13
l0.21-0.05c0.13-0.03,0.27-0.16,0.3-0.29s0.13-0.28,0.21-0.33c0.08-0.05,0.38-0.19,0.52-0.18c0.13,0.01,0.3-0.07,0.38-0.19
l0.11-0.18c0.07-0.12,0.08-0.31,0.01-0.42c-0.07-0.12-0.11-0.28-0.09-0.38c0.02-0.09,0.13-0.41,0.24-0.5
c0.1-0.09,0.17-0.26,0.13-0.4l-0.05-0.21c-0.03-0.13-0.16-0.27-0.29-0.3s-0.28-0.13-0.33-0.21s-0.19-0.38-0.18-0.52
c0.01-0.13-0.07-0.3-0.19-0.38l-0.18-0.11c-0.12-0.07-0.31-0.08-0.42-0.01c-0.12,0.07-0.28,0.11-0.38,0.09
c-0.09-0.02-0.41-0.13-0.5-0.24c-0.09-0.1-0.26-0.17-0.4-0.13l-0.2,0.06c-0.13,0.03-0.27,0.16-0.3,0.29s-0.13,0.28-0.21,0.33
s-0.38,0.19-0.52,0.18s-0.3,0.07-0.38,0.19l-0.11,0.18c-0.07,0.12-0.08,0.31-0.01,0.42c0.07,0.12,0.11,0.28,0.09,0.38
s-0.13,0.41-0.24,0.5c-0.1,0.09-0.17,0.26-0.13,0.4l0.05,0.21C10.13,4.3,10.26,4.44,10.39,4.47z M12.27,2.43
c0.6-0.13,1.2,0.24,1.33,0.84s-0.24,1.2-0.84,1.33c-0.6,0.13-1.2-0.24-1.33-0.84S11.67,2.56,12.27,2.43z"/>
</g>
<g>
<path fill="#FFFFFF" d="M1.85,4.19C1.8,4.32,1.66,4.47,1.53,4.53L1.15,4.71C1.02,4.77,0.92,4.93,0.91,5.06L0.89,5.92
c0,0.14,0.09,0.3,0.21,0.37l0.37,0.2c0.13,0.06,0.26,0.22,0.3,0.35l0.17,0.44C2,7.41,2,7.62,1.96,7.75l-0.15,0.4
C1.76,8.28,1.8,8.47,1.89,8.57l0.58,0.62c0.09,0.1,0.28,0.15,0.41,0.11L3.3,9.17c0.13-0.04,0.34-0.02,0.46,0.04l0.43,0.2
C4.32,9.46,4.47,9.6,4.53,9.73l0.18,0.39c0.06,0.12,0.22,0.23,0.35,0.23l0.85,0.03c0.14,0,0.3-0.09,0.37-0.21l0.2-0.37
c0.07-0.12,0.23-0.25,0.36-0.29l0.44-0.17c0.13-0.06,0.33-0.06,0.46-0.02l0.4,0.15c0.14,0.03,0.33,0,0.43-0.1l0.62-0.58
C9.29,8.7,9.34,8.51,9.3,8.38L9.17,7.97C9.13,7.84,9.16,7.63,9.22,7.51l0.2-0.43C9.47,6.95,9.61,6.8,9.74,6.74l0.39-0.18
c0.12-0.06,0.23-0.22,0.23-0.35l0.03-0.85c0-0.14-0.09-0.3-0.21-0.37l-0.37-0.2C9.67,4.71,9.54,4.55,9.49,4.42L9.33,3.98
C9.27,3.85,9.26,3.64,9.31,3.52l0.15-0.4C9.5,2.99,9.47,2.8,9.37,2.7L8.79,2.08C8.7,1.98,8.51,1.93,8.38,1.97L7.97,2.09
C7.84,2.13,7.63,2.11,7.51,2.05l-0.43-0.2C6.94,1.8,6.79,1.66,6.73,1.53L6.56,1.15C6.5,1.02,6.34,0.92,6.2,0.91L5.35,0.89
c-0.14,0-0.3,0.09-0.37,0.21l-0.2,0.37C4.71,1.6,4.55,1.73,4.42,1.77L3.98,1.94C3.85,2,3.64,2,3.52,1.96l-0.4-0.15
C2.99,1.76,2.8,1.8,2.7,1.89L2.08,2.48c-0.1,0.09-0.15,0.28-0.11,0.41L2.09,3.3c0.04,0.13,0.02,0.34-0.04,0.46L1.85,4.19z
M6.75,3.15c1.37,0.62,1.98,2.23,1.36,3.6s-2.23,1.98-3.6,1.36C3.15,7.5,2.54,5.89,3.15,4.52S5.38,2.54,6.75,3.15z"/>
</g>
<g>
<path fill="#ED6B21" d="M14.65,11.78c0.19-0.19,0.19-0.51,0-0.71l-2.72-2.72c-0.19-0.19-0.35-0.13-0.35,0.15v1.29
c0,0.28-0.22,0.5-0.5,0.5H8.49c-0.28,0-0.5,0.23-0.5,0.5v1.29c0,0.28,0.22,0.5,0.5,0.5h2.58c0.28,0,0.5,0.23,0.5,0.5v1.29
c0,0.28,0.16,0.34,0.35,0.15L14.65,11.78z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="export_x5F_gcode">
<g>
<path fill="#FFFFFF" d="M5.02,7.17H9v3.08c0,2.6-1.23,3.72-4.05,3.72S1,12.85,1,10.29V5.54C1,3.12,2.09,2,4.95,2S9,3,9,5.54H6.88
c0-1.11-0.28-1.66-1.92-1.66c-1.54,0-1.83,0.69-1.83,1.77v4.65c0,1.12,0.29,1.77,1.83,1.77s2.08-0.65,2.08-1.82V9.09H5.02V7.17z"
/>
</g>
<path fill="#ED6B21" d="M14.65,8.35c0.19-0.19,0.19-0.51,0-0.71l-4.29-4.29C10.16,3.16,10,3.22,10,3.5v9
c0,0.27,0.16,0.34,0.35,0.15L14.65,8.35z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 797 B

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#ED6B21;}
</style>
<g id="export_x5F_plater">
<path class="st0" d="M13,2c0.5,0,1,0.4,1,1v10c0,0.5-0.4,1-1,1H3c-0.5,0-1-0.4-1-1V3c0-0.5,0.4-1,1-1H13 M13,1H3C1.9,1,1,1.9,1,3
v10c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V3C15,1.9,14.1,1,13,1L13,1z"/>
<path class="st1" d="M11.6,8.4c0.2-0.2,0.2-0.5,0-0.7L8.9,4.9C8.7,4.7,8.6,4.8,8.6,5.1v1.3c0,0.3-0.2,0.5-0.5,0.5H4.5
C4.2,6.9,4,7.1,4,7.4v1.3C4,9,4.2,9.2,4.5,9.2h3.6c0.3,0,0.5,0.2,0.5,0.5V11c0,0.3,0.2,0.3,0.4,0.1L11.6,8.4z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 884 B

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="export_x5F_plater">
<path fill="#FFFFFF" d="M13,2c0.55,0,1,0.45,1,1v10c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1V3c0-0.55,0.45-1,1-1H13 M13,1H3
C1.9,1,1,1.89,1,3v10c0,1.1,0.89,2,2,2h10c1.1,0,2-0.89,2-2V3C15,1.89,14.11,1,13,1L13,1z"/>
<path fill="#ED6B21" d="M11.65,8.35c0.19-0.19,0.19-0.51,0-0.71L8.92,4.92C8.73,4.73,8.57,4.8,8.57,5.07v1.29
c0,0.28-0.22,0.5-0.5,0.5H4.5C4.22,6.86,4,7.08,4,7.36v1.29c0,0.27,0.22,0.5,0.5,0.5h3.57c0.28,0,0.5,0.22,0.5,0.5v1.29
c0,0.27,0.16,0.34,0.35,0.15L11.65,8.35z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 862 B

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="extruder_x2B_funnel">
<rect x="1" y="1" display="none" fill="#808080" width="14" height="6"/>
<line fill="none" stroke="#ED6B21" stroke-linecap="round" stroke-miterlimit="10" x1="8" y1="9.37" x2="8" y2="15"/>
<polygon display="none" fill="#808080" points="5,7 5,8 8,10 11,8 11,7 "/>
<g>
<path fill="#FFFFFF" d="M14,2v4h-3c-0.55,0-1,0.45-1,1v0.47L8,8.8L6,7.46V7c0-0.55-0.45-1-1-1H2V2H14 M14,1H2C1.45,1,1,1.45,1,2v4
c0,0.55,0.45,1,1,1h3v1l2.45,1.63C7.61,9.74,7.81,9.8,8,9.8c0.19,0,0.39-0.06,0.55-0.17L11,8V7h3c0.55,0,1-0.45,1-1V2
C15,1.45,14.55,1,14,1L14,1z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 935 B

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="flag_x5F_green">
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="14" y1="2" x2="14" y2="14"/>
<path fill="#8CC63F" d="M13,2C8.2,2,5.8,4.4,1,4.4v7.2c4.8,0,7.2-2.4,12-2.4V2z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 591 B

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="flag_x5F_red">
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="14" y1="2" x2="14" y2="14"/>
<path fill="#ED1C24" d="M13,2C8.2,2,5.8,4.4,1,4.4v7.2c4.8,0,7.2-2.4,12-2.4V2z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 589 B

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="import_x5F_config">
<g>
<path fill="#FFFFFF" d="M14.22,6.61c-0.25-0.12-0.52-0.43-0.6-0.68s-0.32-1.09-0.23-1.35l0.12-0.35c0.09-0.26,0-0.63-0.2-0.83
L12.6,2.7c-0.19-0.19-0.57-0.28-0.83-0.2l-0.35,0.12c-0.26,0.09-0.67,0.06-0.91-0.05s-1-0.54-1.12-0.79L9.22,1.45
C9.1,1.2,8.77,1,8.5,1h-1C7.22,1,6.9,1.2,6.78,1.45L6.61,1.78C6.49,2.02,6.18,2.3,5.93,2.38S4.84,2.7,4.58,2.62L4.23,2.5
C3.97,2.41,3.6,2.5,3.4,2.7L2.7,3.4C2.5,3.6,2.41,3.97,2.5,4.23l0.12,0.35C2.7,4.84,2.68,5.25,2.57,5.49s-0.54,1-0.79,1.12
L1.45,6.78C1.2,6.9,1,7.22,1,7.5v1c0,0.27,0.2,0.6,0.45,0.72l0.33,0.17c0.25,0.12,0.52,0.43,0.6,0.68s0.32,1.09,0.23,1.35
L2.5,11.77c-0.09,0.26,0,0.63,0.2,0.83l0.7,0.7c0.19,0.19,0.57,0.28,0.83,0.2l0.35-0.12c0.26-0.09,0.67-0.06,0.91,0.05
s1,0.54,1.12,0.79l0.17,0.33C6.9,14.8,7.22,15,7.5,15h1c0.27,0,0.6-0.2,0.72-0.45l0.17-0.33c0.12-0.25,0.43-0.52,0.68-0.6
s1.09-0.32,1.35-0.23l0.35,0.12c0.26,0.09,0.63,0,0.83-0.2l0.71-0.71c0.19-0.19,0.28-0.57,0.2-0.83l-0.12-0.35
c-0.09-0.26-0.06-0.67,0.05-0.91s0.54-1,0.79-1.12l0.33-0.17C14.8,9.1,15,8.77,15,8.5v-1c0-0.28-0.2-0.6-0.45-0.72L14.22,6.61z
M8,13c-2.76,0-5-2.24-5-5s2.24-5,5-5s5,2.24,5,5S10.76,13,8,13z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,12c-0.55,0-1-0.45-1-1V5c0-0.55,0.45-1,1-1s1,0.45,1,1v6C9,11.55,8.55,12,8,12z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,9H5C4.45,9,4,8.55,4,8s0.45-1,1-1h6c0.55,0,1,0.45,1,1S11.55,9,11,9z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="import_x5F_config_x5F_bundle">
<g>
<g>
<path fill="#FFFFFF" d="M1.2,12.61c0.11,0.08,0.21,0.22,0.23,0.31s0.04,0.43-0.03,0.55s-0.05,0.31,0.03,0.42l0.12,0.17
c0.08,0.11,0.25,0.19,0.39,0.17c0.13-0.02,0.3,0.01,0.38,0.06s0.33,0.28,0.37,0.41s0.18,0.25,0.32,0.27l0.21,0.04
c0.14,0.02,0.31-0.05,0.39-0.16s0.22-0.21,0.31-0.23c0.09-0.02,0.43-0.04,0.55,0.03c0.12,0.06,0.31,0.05,0.42-0.03l0.17-0.12
c0.11-0.08,0.19-0.25,0.17-0.39c-0.02-0.13,0.01-0.3,0.06-0.38s0.28-0.33,0.41-0.37c0.13-0.04,0.25-0.18,0.27-0.32l0.04-0.21
c0.02-0.14-0.05-0.31-0.16-0.39c-0.11-0.08-0.21-0.22-0.23-0.31s-0.04-0.43,0.03-0.55c0.06-0.12,0.05-0.31-0.03-0.42L5.5,10.98
c-0.08-0.11-0.25-0.19-0.39-0.17c-0.13,0.02-0.3-0.01-0.38-0.06s-0.33-0.28-0.37-0.41s-0.18-0.25-0.32-0.27l-0.21-0.04
c-0.14-0.02-0.31,0.05-0.39,0.16s-0.22,0.21-0.31,0.23S2.7,10.46,2.58,10.4c-0.12-0.06-0.31-0.05-0.42,0.03l-0.17,0.12
c-0.11,0.08-0.19,0.25-0.17,0.39s-0.01,0.3-0.06,0.38s-0.28,0.33-0.41,0.37s-0.25,0.18-0.27,0.32l-0.04,0.21
C1.02,12.36,1.09,12.53,1.2,12.61z M3.71,11.42c0.61,0.1,1.02,0.68,0.92,1.28c-0.1,0.61-0.68,1.02-1.28,0.92
c-0.61-0.1-1.02-0.68-0.92-1.28C2.53,11.73,3.1,11.32,3.71,11.42z"/>
</g>
</g>
<g>
<g>
<path fill="#FFFFFF" d="M10.39,4.47c0.13,0.03,0.28,0.13,0.33,0.21s0.19,0.38,0.18,0.52s0.07,0.3,0.19,0.38l0.18,0.11
c0.12,0.07,0.31,0.08,0.42,0.01c0.12-0.07,0.28-0.11,0.38-0.09c0.09,0.02,0.41,0.13,0.5,0.24c0.09,0.1,0.26,0.17,0.4,0.13
l0.21-0.05c0.13-0.03,0.27-0.16,0.3-0.29s0.13-0.28,0.21-0.33c0.08-0.05,0.38-0.19,0.52-0.18c0.13,0.01,0.3-0.07,0.38-0.19
l0.11-0.18c0.07-0.12,0.08-0.31,0.01-0.42c-0.07-0.12-0.11-0.28-0.09-0.38c0.02-0.09,0.13-0.41,0.24-0.5
c0.1-0.09,0.17-0.26,0.13-0.4l-0.05-0.21c-0.03-0.13-0.16-0.27-0.29-0.3s-0.28-0.13-0.33-0.21s-0.19-0.38-0.18-0.52
c0.01-0.13-0.07-0.3-0.19-0.38l-0.18-0.11c-0.12-0.07-0.31-0.08-0.42-0.01c-0.12,0.07-0.28,0.11-0.38,0.09
c-0.09-0.02-0.41-0.13-0.5-0.24c-0.09-0.1-0.26-0.17-0.4-0.13l-0.2,0.06c-0.13,0.03-0.27,0.16-0.3,0.29s-0.13,0.28-0.21,0.33
s-0.38,0.19-0.52,0.18s-0.3,0.07-0.38,0.19l-0.11,0.18c-0.07,0.12-0.08,0.31-0.01,0.42c0.07,0.12,0.11,0.28,0.09,0.38
s-0.13,0.41-0.24,0.5c-0.1,0.09-0.17,0.26-0.13,0.4l0.05,0.21C10.13,4.3,10.26,4.44,10.39,4.47z M12.27,2.43
c0.6-0.13,1.2,0.24,1.33,0.84s-0.24,1.2-0.84,1.33c-0.6,0.13-1.2-0.24-1.33-0.84S11.67,2.56,12.27,2.43z"/>
</g>
</g>
<g>
<g>
<path fill="#FFFFFF" d="M1.85,4.19C1.8,4.32,1.66,4.47,1.53,4.53L1.15,4.71C1.02,4.77,0.92,4.93,0.91,5.06L0.89,5.92
c0,0.14,0.09,0.3,0.21,0.37l0.37,0.2c0.13,0.06,0.26,0.22,0.3,0.35l0.17,0.44C2,7.41,2,7.62,1.96,7.75l-0.15,0.4
C1.76,8.28,1.8,8.47,1.89,8.57l0.58,0.62c0.09,0.1,0.28,0.15,0.41,0.11L3.3,9.17c0.13-0.04,0.34-0.02,0.46,0.04l0.43,0.2
C4.32,9.46,4.47,9.6,4.53,9.73l0.18,0.39c0.06,0.12,0.22,0.23,0.35,0.23l0.85,0.03c0.14,0,0.3-0.09,0.37-0.21l0.2-0.37
c0.07-0.12,0.23-0.25,0.36-0.29l0.44-0.17c0.13-0.06,0.33-0.06,0.46-0.02l0.4,0.15c0.14,0.03,0.33,0,0.43-0.1l0.62-0.58
C9.29,8.7,9.34,8.51,9.3,8.38L9.17,7.97C9.13,7.84,9.16,7.63,9.22,7.51l0.2-0.43C9.47,6.95,9.61,6.8,9.74,6.74l0.39-0.18
c0.12-0.06,0.23-0.22,0.23-0.35l0.03-0.85c0-0.14-0.09-0.3-0.21-0.37l-0.37-0.2C9.67,4.71,9.54,4.55,9.49,4.42L9.33,3.98
C9.27,3.85,9.26,3.64,9.31,3.52l0.15-0.4C9.5,2.99,9.47,2.8,9.37,2.7L8.79,2.08C8.7,1.98,8.51,1.93,8.38,1.97L7.97,2.09
C7.84,2.13,7.63,2.11,7.51,2.05l-0.43-0.2C6.94,1.8,6.79,1.66,6.73,1.53L6.56,1.15C6.5,1.02,6.34,0.92,6.2,0.91L5.35,0.89
c-0.14,0-0.3,0.09-0.37,0.21l-0.2,0.37C4.71,1.6,4.55,1.73,4.42,1.77L3.98,1.94C3.85,2,3.64,2,3.52,1.96l-0.4-0.15
C2.99,1.76,2.8,1.8,2.7,1.89L2.08,2.48c-0.1,0.09-0.15,0.28-0.11,0.41L2.09,3.3c0.04,0.13,0.02,0.34-0.04,0.46L1.85,4.19z
M6.75,3.15c1.37,0.62,1.98,2.23,1.36,3.6s-2.23,1.98-3.6,1.36C3.15,7.5,2.54,5.89,3.15,4.52S5.38,2.54,6.75,3.15z"/>
</g>
</g>
<g>
<g>
<path fill="#ED6B21" d="M11,15c-0.55,0-1-0.45-1-1V8c0-0.55,0.45-1,1-1s1,0.45,1,1v6C12,14.55,11.55,15,11,15z"/>
</g>
</g>
<g>
<g>
<path fill="#ED6B21" d="M14,12H8c-0.55,0-1-0.45-1-1s0.45-1,1-1h6c0.55,0,1,0.45,1,1S14.55,12,14,12z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16"
style="enable-background:new 0 0 16 16;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#ED6B21;}
</style>
<metadata>
<sfw xmlns="&ns_sfw;">
<slices></slices>
<sliceSourceBounds bottomLeftOrigin="true" height="14" width="14" x="1" y="1"></sliceSourceBounds>
</sfw>
</metadata>
<g id="import_x5F_plater">
<g>
<path class="st0" d="M13,2c0.5,0,1,0.4,1,1v10c0,0.5-0.4,1-1,1H3c-0.5,0-1-0.4-1-1V3c0-0.5,0.4-1,1-1H13 M13,1H3C1.9,1,1,1.9,1,3
v10c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V3C15,1.9,14.1,1,13,1L13,1z"/>
</g>
<g>
<path class="st1" d="M8,12c-0.6,0-1-0.4-1-1V5c0-0.6,0.4-1,1-1s1,0.4,1,1v6C9,11.6,8.6,12,8,12z"/>
</g>
<g>
<path class="st1" d="M11,9H5C4.4,9,4,8.6,4,8s0.4-1,1-1h6c0.6,0,1,0.4,1,1C12,8.6,11.6,9,11,9z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="import_x5F_plater">
<g>
<path fill="#FFFFFF" d="M13,2c0.55,0,1,0.45,1,1v10c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1V3c0-0.55,0.45-1,1-1H13 M13,1H3
C1.9,1,1,1.89,1,3v10c0,1.1,0.89,2,2,2h10c1.1,0,2-0.89,2-2V3C15,1.89,14.11,1,13,1L13,1z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,12c-0.55,0-1-0.45-1-1V5c0-0.55,0.45-1,1-1s1,0.45,1,1v6C9,11.55,8.55,12,8,12z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,9H5C4.45,9,4,8.55,4,8s0.45-1,1-1h6c0.55,0,1,0.45,1,1S11.55,9,11,9z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 835 B

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="infill">
<g>
<g>
<defs>
<polygon id="SVGID_1_" points="8,1.03 2,5.03 2,7.03 2,11.03 8,15.03 14,11.03 14,7.03 14,5.03 "/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<g clip-path="url(#SVGID_2_)">
<line fill="none" stroke="#ED6B21" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.32" y1="11.59" x2="8.56" y2="1.34"/>
<line fill="none" stroke="#ED6B21" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="4.88" y1="13.15" x2="11.12" y2="2.9"/>
<line fill="none" stroke="#ED6B21" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="7.44" y1="14.71" x2="13.68" y2="4.46"/>
<line fill="none" stroke="#ED6B21" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="4.44" y1="2.34" x2="14.68" y2="8.59"/>
<line fill="none" stroke="#ED6B21" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="2.88" y1="4.91" x2="13.12" y2="11.15"/>
<line fill="none" stroke="#ED6B21" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="1.32" y1="7.47" x2="11.56" y2="13.71"/>
</g>
</g>
</g>
<g>
<path fill="#FFFFFF" d="M8,2.23l5,3.33v1.46v3.46l-5,3.33l-5-3.33V7.03V5.56L8,2.23 M8,1.03l-6,4v2v4l6,4l6-4v-4v-2L8,1.03L8,1.03
z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="layers">
<g>
<g>
<rect x="1" y="13" fill="#FFFFFF" width="14" height="2"/>
</g>
<g>
<rect x="1" y="10.6" fill="#FFFFFF" width="14" height="1.74"/>
</g>
<g>
<rect x="1" y="8.19" fill="#FFFFFF" width="14" height="1.47"/>
</g>
<g>
<rect x="1" y="5.79" fill="#ED6B21" width="14" height="1.2"/>
</g>
<g>
<rect x="1" y="3.39" fill="#ED6B21" width="14" height="0.93"/>
</g>
<g>
<rect x="1" y="0.99" fill="#FFFFFF" width="14" height="0.67"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 845 B

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="lock2_x5F_closed">
<path fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" d="M4,8V4c0,0,0-2,2-2c1,0,3,0,4,0c2,0,2,2,2,2v4"/>
<path fill="#FFFFFF" d="M13,8H3C2.45,8,2,8.45,2,9v5c0,0.55,0.45,1,1,1h10c0.55,0,1-0.45,1-1V9C14,8.45,13.55,8,13,8z M10,12H8.91
c-0.21,0.58-0.76,1-1.41,1C6.67,13,6,12.33,6,11.5S6.67,10,7.5,10c0.65,0,1.2,0.42,1.41,1H10V12z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 730 B

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="lock_x5F_closed">
<path fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="10" d="M4,8V4c0,0,0-2,2-2c1,0,3,0,4,0c2,0,2,2,2,2v4"/>
<path fill="#FFFFFF" d="M13,8H3C2.45,8,2,8.45,2,9v5c0,0.55,0.45,1,1,1h10c0.55,0,1-0.45,1-1V9C14,8.45,13.55,8,13,8z M10,12H8.91
c-0.21,0.58-0.76,1-1.41,1C6.67,13,6,12.33,6,11.5S6.67,10,7.5,10c0.65,0,1.2,0.42,1.41,1H10V12z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 729 B

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="machine_x2B_cog">
<g>
<path fill="#FFFFFF" d="M14.22,6.61c-0.25-0.12-0.52-0.43-0.6-0.68s-0.32-1.09-0.23-1.35l0.12-0.35c0.09-0.26,0-0.63-0.2-0.83
L12.6,2.7c-0.19-0.19-0.57-0.28-0.83-0.2l-0.35,0.12c-0.26,0.09-0.67,0.06-0.91-0.05s-1-0.54-1.12-0.79L9.22,1.45
C9.1,1.2,8.77,1,8.5,1h-1C7.22,1,6.9,1.2,6.78,1.45L6.61,1.78C6.49,2.02,6.18,2.3,5.93,2.38S4.84,2.7,4.58,2.62L4.23,2.5
C3.97,2.41,3.6,2.5,3.4,2.7L2.7,3.4C2.5,3.6,2.41,3.97,2.5,4.23l0.12,0.35C2.7,4.84,2.68,5.25,2.57,5.49s-0.54,1-0.79,1.12
L1.45,6.78C1.2,6.9,1,7.22,1,7.5v1c0,0.27,0.2,0.6,0.45,0.72l0.33,0.17c0.25,0.12,0.52,0.43,0.6,0.68s0.32,1.09,0.23,1.35
L2.5,11.77c-0.09,0.26,0,0.63,0.2,0.83l0.7,0.7c0.19,0.19,0.57,0.28,0.83,0.2l0.35-0.12c0.26-0.09,0.67-0.06,0.91,0.05
s1,0.54,1.12,0.79l0.17,0.33C6.9,14.8,7.22,15,7.5,15h1c0.27,0,0.6-0.2,0.72-0.45l0.17-0.33c0.12-0.25,0.43-0.52,0.68-0.6
s1.09-0.32,1.35-0.23l0.35,0.12c0.26,0.09,0.63,0,0.83-0.2l0.71-0.71c0.19-0.19,0.28-0.57,0.2-0.83l-0.12-0.35
c-0.09-0.26-0.06-0.67,0.05-0.91s0.54-1,0.79-1.12l0.33-0.17C14.8,9.1,15,8.77,15,8.5v-1c0-0.28-0.2-0.6-0.45-0.72L14.22,6.61z
M8,13c-2.76,0-5-2.24-5-5s2.24-5,5-5s5,2.24,5,5S10.76,13,8,13z"/>
</g>
<g>
<path fill="#ED6B21" d="M11.65,7.25c-0.19-0.1-0.39-0.29-0.44-0.44s-0.17-0.67-0.1-0.87s-0.04-0.53-0.23-0.72l-0.1-0.1
c-0.19-0.19-0.52-0.3-0.72-0.23s-0.48,0.07-0.62,0C9.3,4.83,8.84,4.54,8.75,4.35C8.65,4.16,8.35,4,8.07,4H7.93
C7.65,4,7.35,4.16,7.25,4.35S6.96,4.74,6.81,4.79s-0.67,0.17-0.87,0.1S5.42,4.93,5.22,5.12l-0.1,0.1
c-0.19,0.19-0.3,0.52-0.23,0.72s0.07,0.48,0,0.62C4.83,6.7,4.54,7.16,4.35,7.25C4.16,7.35,4,7.65,4,7.93v0.14
c0,0.28,0.16,0.58,0.35,0.68s0.39,0.29,0.44,0.44c0.05,0.14,0.17,0.67,0.1,0.87s0.04,0.53,0.23,0.72l0.1,0.1
c0.19,0.19,0.52,0.3,0.72,0.23s0.48-0.07,0.62,0s0.59,0.35,0.69,0.54C7.35,11.84,7.65,12,7.93,12h0.14c0.28,0,0.58-0.16,0.68-0.35
c0.1-0.19,0.29-0.39,0.44-0.44c0.14-0.05,0.67-0.17,0.87-0.1s0.53-0.04,0.72-0.23l0.1-0.1c0.19-0.19,0.3-0.52,0.23-0.72
s-0.07-0.48,0-0.62s0.35-0.59,0.54-0.69C11.84,8.65,12,8.35,12,8.07V7.93C12,7.65,11.84,7.35,11.65,7.25z M8,10.86
c-1.58,0-2.86-1.28-2.86-2.86S6.42,5.14,8,5.14S10.86,6.42,10.86,8S9.58,10.86,8,10.86z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="notes">
<g>
<path fill="#FFFFFF" d="M11,2v12H2V2H11 M11,1H2C1.45,1,1,1.45,1,2v12c0,0.55,0.45,1,1,1h9c0.55,0,1-0.45,1-1V2
C12,1.45,11.55,1,11,1L11,1z"/>
</g>
<path fill="#ED6B21" d="M14,3L14,3c-0.55,0-1,0.45-1,1v10c0,0.55,0.45,1,1,1l0,0c0.55,0,1-0.45,1-1V4C15,3.45,14.55,3,14,3z"/>
<polygon fill="#ED6B21" points="15,4 13,4 14,1 "/>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="3" y1="4" x2="10" y2="4"/>
</g>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="3" y1="6" x2="10" y2="6"/>
</g>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="3" y1="8" x2="10" y2="8"/>
</g>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" x1="3" y1="10" x2="7" y2="10"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="number_x5F_of_x5F_copies">
<g>
<path fill="#FFFFFF" d="M13,2c0.55,0,1,0.45,1,1v10c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1V3c0-0.55,0.45-1,1-1H13 M13,1H3
C1.9,1,1,1.89,1,3v10c0,1.1,0.89,2,2,2h10c1.1,0,2-0.89,2-2V3C15,1.89,14.11,1,13,1L13,1z"/>
</g>
<g>
<path fill="#ED6B21" d="M6,4.5H4C3.72,4.5,3.5,4.28,3.5,4S3.72,3.5,4,3.5h2c0.28,0,0.5,0.22,0.5,0.5S6.28,4.5,6,4.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M12,8.5H8C7.72,8.5,7.5,8.28,7.5,8S7.72,7.5,8,7.5h4c0.28,0,0.5,0.22,0.5,0.5C12.5,8.28,12.28,8.5,12,8.5z
"/>
</g>
<g>
<path fill="#ED6B21" d="M6,12.5H4c-0.28,0-0.5-0.22-0.5-0.5s0.22-0.5,0.5-0.5h2c0.28,0,0.5,0.22,0.5,0.5S6.28,12.5,6,12.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M5,12.5c-0.28,0-0.5-0.22-0.5-0.5V4c0-0.28,0.22-0.5,0.5-0.5S5.5,3.72,5.5,4v8C5.5,12.28,5.28,12.5,5,12.5
z"/>
</g>
<g>
<path fill="#ED6B21" d="M10,10.5c-0.28,0-0.5-0.22-0.5-0.5V6c0-0.28,0.22-0.5,0.5-0.5s0.5,0.22,0.5,0.5v4
C10.5,10.28,10.28,10.5,10,10.5z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="open">
<path fill="#FFFFFF" d="M1.22,14V3c0,0,0-1,1-1s4,0,5,0s1,2,2,2s4,0,4,0s1,0,1,1v2h-1c0,0,0,0,0-1s-1-1-1-1h-3.5c-1,0-1-2-2-2
s-3.5,0-3.5,0c-1,0-1,1-1,1v9v1h1v1c0,0,0,0-1,0S1.22,14,1.22,14z"/>
<path fill="#ED6B21" d="M5,6C4.45,6,3.86,6.43,3.68,6.95l-2.37,7.1C1.14,14.57,1.45,15,2,15h10c0.55,0,1.14-0.43,1.32-0.95
l2.37-7.1C15.86,6.43,15.55,6,15,6H5z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 720 B

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="output_x2B_page_x5F_white">
<path fill="#FFFFFF" d="M14.5,10c-0.27,0-0.5,0.23-0.5,0.5v3c0,0.27-0.23,0.5-0.5,0.5h-11C2.22,14,2,13.77,2,13.5v-11
C2,2.22,2.22,2,2.5,2h11C13.77,2,14,2.22,14,2.5v3C14,5.78,14.23,6,14.5,6l0,0C14.77,6,15,5.78,15,5.5v-4C15,1.23,14.77,1,14.5,1
h-13C1.23,1,1,1.23,1,1.5v13C1,14.77,1.23,15,1.5,15h13c0.27,0,0.5-0.23,0.5-0.5v-4C15,10.23,14.77,10,14.5,10L14.5,10z"/>
<path fill="#FFFFFF" d="M11,10.5c0-0.27-0.01-0.5-0.02-0.5s-0.17,0.17-0.36,0.37c0,0-0.61,0.67-1.3,0.95
c-1.83,0.73-3.91-0.16-4.64-1.99s0.16-3.91,1.99-4.64c1.59-0.64,3.88,1.02,3.88,1.02C10.77,5.87,10.97,6,10.98,6S11,5.78,11,5.5
V5.49c0-0.28-0.04-0.55-0.1-0.62s-0.23-0.43-0.25-0.7s-0.24-0.58-0.49-0.68L9.77,3.32C9.52,3.21,9.15,3.26,8.94,3.44
s-0.53,0.3-0.71,0.29S7.37,3.6,7.17,3.42S6.6,3.18,6.34,3.28l-0.4,0.16c-0.26,0.1-0.48,0.41-0.5,0.67S5.28,4.7,5.14,4.82
s-0.69,0.5-0.96,0.52S3.6,5.58,3.49,5.83l-0.17,0.4C3.21,6.48,3.26,6.85,3.44,7.06s0.3,0.53,0.29,0.71S3.6,8.63,3.42,8.83
S3.18,9.4,3.28,9.66l0.16,0.4c0.1,0.26,0.41,0.48,0.67,0.5s0.59,0.16,0.71,0.3s0.5,0.69,0.52,0.96s0.24,0.58,0.49,0.68l0.39,0.17
c0.25,0.11,0.63,0.05,0.83-0.12s0.53-0.3,0.71-0.29s0.85,0.13,1.05,0.31s0.57,0.24,0.83,0.14l0.4-0.16c0.26-0.1,0.48-0.41,0.5-0.67
s0.1-0.55,0.17-0.62S11,10.79,11,10.51V10.5z"/>
<path fill="#ED6B21" d="M14.65,8.35c0.19-0.19,0.19-0.51,0-0.71l-2.29-2.29C12.16,5.16,12,5.22,12,5.5v1C12,6.78,11.77,7,11.5,7h-3
C8.23,7,8,7.22,8,7.5v1C8,8.77,8.23,9,8.5,9h3C11.77,9,12,9.23,12,9.5v1c0,0.27,0.16,0.34,0.35,0.15L14.65,8.35z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="pad">
<g>
<path fill="#ED6B21" d="M14,14H2c-0.55,0-1-0.45-1-1s0.45-1,1-1h12c0.55,0,1,0.45,1,1S14.55,14,14,14z"/>
</g>
<g>
<path fill="#FFFFFF" d="M8,8.17c-0.4,0-0.8-0.1-1.11-0.31L2.55,4.97C1.95,4.57,1.5,3.72,1.5,3V2c0-0.28,0.22-0.5,0.5-0.5
S2.5,1.72,2.5,2v1c0,0.38,0.29,0.93,0.61,1.14l4.34,2.89c0.29,0.19,0.82,0.19,1.11,0l4.34-2.89c0.31-0.21,0.6-0.76,0.6-1.14V2
c0-0.28,0.22-0.5,0.5-0.5s0.5,0.22,0.5,0.5v1c0,0.72-0.45,1.57-1.05,1.97L9.11,7.86C8.8,8.07,8.4,8.17,8,8.17z"/>
</g>
<g>
<g>
<path fill="#FFFFFF" d="M13,11.38c-0.21,0-0.38-0.17-0.38-0.38V7c0-0.21,0.17-0.38,0.38-0.38S13.38,6.79,13.38,7v4
C13.38,11.21,13.21,11.38,13,11.38z"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M12,7.49"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M12,11"/>
</g>
<g>
<path fill="#FFFFFF" d="M11,11.38c-0.21,0-0.38-0.17-0.38-0.38V8.12c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38V11
C11.38,11.21,11.21,11.38,11,11.38z"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M10,8.79"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M10,11"/>
</g>
<g>
<path fill="#FFFFFF" d="M9,11.38c-0.21,0-0.38-0.17-0.38-0.38V9.5c0-0.21,0.17-0.38,0.38-0.38S9.38,9.29,9.38,9.5V11
C9.38,11.21,9.21,11.38,9,11.38z"/>
</g>
</g>
<g>
<g>
<path fill="#FFFFFF" d="M3,11.38c-0.21,0-0.38-0.17-0.38-0.38V7c0-0.21,0.17-0.38,0.38-0.38S3.37,6.79,3.37,7v4
C3.37,11.21,3.2,11.38,3,11.38z"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M4,7.49"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M4,11"/>
</g>
<g>
<path fill="#FFFFFF" d="M5,11.38c-0.21,0-0.38-0.17-0.38-0.38V8.12c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38V11
C5.37,11.21,5.2,11.38,5,11.38z"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M6,8.79"/>
</g>
<g>
<path fill="#FFFFFF" stroke="#808080" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M6,11"/>
</g>
<g>
<path fill="#FFFFFF" d="M7,11.38c-0.21,0-0.38-0.17-0.38-0.38V9.5c0-0.21,0.17-0.38,0.38-0.38S7.37,9.29,7.37,9.5V11
C7.37,11.21,7.2,11.38,7,11.38z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
<g id="paste">
<path fill="#ffffff" d="M33.73,107.03H15.94c-1.4,0-2.54-1.14-2.54-2.54V23.52c0-1.4,1.14-2.54,2.54-2.54h7.62v5.08
c0,1.4,1.14,2.54,2.54,2.54h45.72c1.4,0,2.54-1.14,2.54-2.54v-5.08h7.62c1.4,0,2.54,1.14,2.54,2.54v10.16
c0,1.4,1.14,2.54,2.54,2.54c1.4,0,2.54-1.14,2.54-2.54V23.52c0-4.2-3.42-7.62-7.62-7.62h-7.62v-5.08c0-1.4-1.14-2.54-2.54-2.54
H26.11c-1.4,0-2.54,1.14-2.54,2.54v5.08h-7.62c-4.2,0-7.62,3.42-7.62,7.62v80.97c0,4.2,3.42,7.62,7.62,7.62h17.78
c1.4,0,2.54-1.14,2.54-2.54C36.27,108.16,35.13,107.03,33.73,107.03z M28.65,13.36h40.64v10.16H28.65V13.36z"/>
<g>
<path fill="#ED6B21" d="M53.97,59.08h35.72c1.4,0,2.54-1.14,2.54-2.54c0-1.4-1.14-2.54-2.54-2.54H53.97
c-1.4,0-2.54,1.14-2.54,2.54C51.43,57.94,52.56,59.08,53.97,59.08z"/>
<path fill="#ED6B21" d="M104.93,69.24H53.97c-1.4,0-2.54,1.14-2.54,2.54c0,1.4,1.14,2.54,2.54,2.54h50.96
c1.4,0,2.54-1.14,2.54-2.54C107.47,70.38,106.33,69.24,104.93,69.24z"/>
<path fill="#ED6B21" d="M104.93,99.72H53.97c-1.4,0-2.54,1.14-2.54,2.54s1.14,2.54,2.54,2.54h50.96c1.4,0,2.54-1.14,2.54-2.54
S106.33,99.72,104.93,99.72z"/>
<path fill="#ED6B21" d="M115.75,51.15l-8.06-8.06c-2.47-2.47-6.97-4.34-10.47-4.34h-50.8c-4.2,0-7.62,3.42-7.62,7.62v66.04
c0,4.2,3.42,7.62,7.62,7.62h66.04c4.2,0,7.62-3.42,7.62-7.62v-50.8C120.09,58.12,118.23,53.62,115.75,51.15z M104.85,47.43
l6.57,6.57h-6.57V47.43z M115.01,112.42c0,1.4-1.14,2.54-2.54,2.54H46.43c-1.4,0-2.54-1.14-2.54-2.54V46.38
c0-1.4,1.14-2.54,2.54-2.54h50.8c0.74,0,1.63,0.18,2.54,0.46v12.24c0,1.4,1.14,2.54,2.54,2.54h12.24c0.28,0.91,0.46,1.8,0.46,2.54
V112.42z"/>
<path fill="#ED6B21" d="M104.93,84.48H53.97c-1.4,0-2.54,1.14-2.54,2.54c0,1.4,1.14,2.54,2.54,2.54h50.96
c1.4,0,2.54-1.14,2.54-2.54C107.47,85.62,106.33,84.48,104.93,84.48z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="plater">
<path fill="#FFFFFF" d="M13,2c0.55,0,1,0.45,1,1v10c0,0.55-0.45,1-1,1H3c-0.55,0-1-0.45-1-1V3c0-0.55,0.45-1,1-1H13 M13,1H3
C1.9,1,1,1.89,1,3v10c0,1.1,0.89,2,2,2h10c1.1,0,2-0.89,2-2V3C15,1.89,14.11,1,13,1L13,1z"/>
<path fill="#ED6B21" d="M8.42,3.28c-0.23-0.15-0.6-0.15-0.83,0l-3.46,2.3C3.9,5.73,3.71,6.08,3.71,6.36v1.85c0,0.28,0,0.54,0,0.58
s0,0.31,0,0.58v0.27c0,0.27,0.19,0.62,0.42,0.78l3.46,2.3c0.23,0.15,0.6,0.15,0.83,0l3.46-2.3c0.23-0.15,0.42-0.5,0.42-0.78V9.38
c0-0.28,0-0.54,0-0.58s0-0.31,0-0.58V6.36c0-0.28-0.19-0.62-0.42-0.78L8.42,3.28z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 919 B

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
<g id="preview">
<g>
<path fill="#ffffff" d="M90.72,121.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12l-29.16,28.57C91.49,121.23,91.11,121.38,90.72,121.38z"/>
</g>
<g>
<path fill="#ffffff" d="M90.72,111.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.14
c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12l-29.16,28.57C91.49,111.23,91.11,111.38,90.72,111.38z"/>
</g>
<g>
<path fill="#ffffff" d="M90.72,101.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.14
c0.59-0.58,1.54-0.57,2.12,0.02s0.57,1.54-0.02,2.12l-29.16,28.57C91.49,101.23,91.11,101.38,90.72,101.38z"/>
</g>
<g>
<path fill="#ffffff" d="M90.72,91.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
c0.59-0.58,1.54-0.57,2.12,0.02s0.57,1.54-0.02,2.12L91.77,90.95C91.49,91.23,91.11,91.38,90.72,91.38z"/>
</g>
<g>
<path fill="#ffffff" d="M90.72,81.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12L91.77,80.95C91.49,81.23,91.11,81.38,90.72,81.38z"/>
</g>
<g>
<path fill="#ffffff" d="M90.72,71.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12L91.77,70.95C91.49,71.23,91.11,71.38,90.72,71.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M90.72,61.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
c0.59-0.58,1.54-0.57,2.12,0.02c0.58,0.59,0.57,1.54-0.02,2.12L91.77,60.95C91.49,61.23,91.11,61.38,90.72,61.38z"/>
</g>
<g>
<path fill="#ffffff" d="M90.72,51.38H8.12c-0.83,0-1.5-0.67-1.5-1.5s0.67-1.5,1.5-1.5h81.99l28.72-28.15
c0.59-0.58,1.54-0.57,2.12,0.02s0.57,1.54-0.02,2.12L91.77,50.95C91.49,51.23,91.11,51.38,90.72,51.38z"/>
</g>
<g>
<g>
<path fill="#ffffff" d="M88.72,41.38H9.18c-1.68,0-2.22-0.95-2.37-1.36s-0.37-1.48,0.89-2.59L38.43,10.5
c1.1-0.96,3.03-1.69,4.49-1.69h75.85c1.65,0,2.22,0.94,2.38,1.34s0.42,1.47-0.75,2.63c0,0,0,0,0,0L93.2,39.55
C92.14,40.59,90.21,41.38,88.72,41.38z M11.17,38.38h77.55c0.71,0,1.87-0.47,2.37-0.97l26.01-25.6H42.92
c-0.74,0-1.96,0.46-2.51,0.95L11.17,38.38z M118.89,11.82C118.89,11.82,118.89,11.82,118.89,11.82
C118.89,11.82,118.89,11.82,118.89,11.82z M119.34,11.71L119.34,11.71L119.34,11.71z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="printer">
<rect x="1" y="1" fill="#FFFFFF" width="1" height="14"/>
<rect x="14" y="1" fill="#FFFFFF" width="1" height="14"/>
<rect x="1" y="5" fill="#FFFFFF" width="14" height="1"/>
<rect x="1" y="1" fill="#FFFFFF" width="14" height="1"/>
<rect x="1" y="13" fill="#FFFFFF" width="14" height="2"/>
<rect x="3" y="4" fill="#ED6B21" width="4" height="4"/>
<polygon fill="#ED6B21" points="5,9 4,8 6,8 "/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 766 B

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="slice">
<path fill="#FFFFFF" d="M14.22,6.61c-0.25-0.12-0.52-0.43-0.6-0.68s-0.32-1.09-0.23-1.35l0.12-0.35c0.09-0.26,0-0.63-0.2-0.83
L12.6,2.7c-0.19-0.19-0.57-0.28-0.83-0.2l-0.35,0.12c-0.26,0.09-0.67,0.06-0.91-0.05s-1-0.54-1.12-0.79L9.22,1.45
C9.1,1.2,8.77,1,8.5,1h-1C7.22,1,6.9,1.2,6.78,1.45L6.61,1.78C6.49,2.02,6.18,2.3,5.93,2.38S4.84,2.7,4.58,2.62L4.23,2.5
C3.97,2.41,3.6,2.5,3.4,2.7L2.7,3.4C2.5,3.6,2.41,3.97,2.5,4.23l0.12,0.35C2.7,4.84,2.68,5.25,2.57,5.49s-0.54,1-0.79,1.12
L1.45,6.78C1.2,6.9,1,7.22,1,7.5v1c0,0.27,0.2,0.6,0.45,0.72l0.33,0.17c0.25,0.12,0.52,0.43,0.6,0.68s0.32,1.09,0.23,1.35
L2.5,11.77c-0.09,0.26,0,0.63,0.2,0.83l0.7,0.7c0.19,0.19,0.57,0.28,0.83,0.2l0.35-0.12c0.26-0.09,0.67-0.06,0.91,0.05
s1,0.54,1.12,0.79l0.17,0.33C6.9,14.8,7.22,15,7.5,15h1c0.27,0,0.6-0.2,0.72-0.45l0.17-0.33c0.12-0.25,0.43-0.52,0.68-0.6
s1.09-0.32,1.35-0.23l0.35,0.12c0.26,0.09,0.63,0,0.83-0.2l0.71-0.71c0.19-0.19,0.28-0.57,0.2-0.83l-0.12-0.35
c-0.09-0.26-0.06-0.67,0.05-0.91s0.54-1,0.79-1.12l0.33-0.17C14.8,9.1,15,8.77,15,8.5v-1c0-0.28-0.2-0.6-0.45-0.72L14.22,6.61z
M8,13c-2.76,0-5-2.24-5-5s2.24-5,5-5s5,2.24,5,5S10.76,13,8,13z"/>
<path fill="#ED6B21" d="M6.86,5.51C6.39,5.23,6,5.45,6,6v4c0,0.55,0.39,0.77,0.86,0.49l3.29-1.97c0.47-0.28,0.47-0.75,0-1.03
L6.86,5.51z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="remove_x5F_copies">
<g>
<path fill="#FFFFFF" d="M8,2c3.31,0,6,2.69,6,6s-2.69,6-6,6s-6-2.69-6-6S4.69,2,8,2 M8,1C4.13,1,1,4.13,1,8s3.13,7,7,7s7-3.13,7-7
S11.87,1,8,1L8,1z"/>
</g>
<g>
<path fill="#ED6B21" d="M12,8.75H4C3.59,8.75,3.25,8.41,3.25,8S3.59,7.25,4,7.25h8c0.41,0,0.75,0.34,0.75,0.75S12.41,8.75,12,8.75
z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 128 128" enable-background="new 0 0 128 128" xml:space="preserve">
<path fill="#ffffff" d="M38.11,44.25H25.75c-0.95,0-1.72,0.77-1.72,1.72s0.77,1.72,1.72,1.72H38.1c0.95,0,1.72-0.77,1.72-1.72
C39.83,45.02,39.06,44.25,38.11,44.25z M45.89,45.97c0,0.95,0.77,1.72,1.72,1.72h12.35c0.95,0,1.72-0.77,1.72-1.72
s-0.77-1.72-1.72-1.72H47.61C46.66,44.25,45.89,45.02,45.89,45.97z M68.11,43.6c-0.33,0.28-0.52,0.65-0.59,1.04
c-0.59,0.27-1,0.87-1,1.56v5.6c0,0.95,0.77,1.72,1.72,1.72c0.95,0,1.72-0.77,1.72-1.72v-5.34c0.12-0.06,0.24-0.13,0.35-0.22
c0.13-0.11,0.25-0.23,0.36-0.34l8.27-8.77c0.65-0.69,0.62-1.78-0.07-2.43s-1.78-0.62-2.43,0.07l-8.27,8.78
C68.16,43.56,68.14,43.58,68.11,43.6z M68.25,76.84c-0.95,0-1.72,0.77-1.72,1.72V89.1c0,0.95,0.77,1.72,1.72,1.72
c0.95,0,1.72-0.77,1.72-1.72V78.56C69.97,77.61,69.2,76.84,68.25,76.84z M69.97,59.91c0-0.95-0.77-1.72-1.72-1.72
c-0.95,0-1.72,0.77-1.72,1.72v10.54c0,0.95,0.77,1.72,1.72,1.72c0.95,0,1.72-0.77,1.72-1.72V59.91z M88.92,56.35
c-0.95,0-1.72,0.77-1.72,1.72v3.4c0,0.34-0.02,0.63-0.04,0.85c-0.51,0.55-0.62,1.38-0.22,2.06c0.32,0.54,0.89,0.84,1.48,0.84
c0.3,0,0.6-0.08,0.88-0.24l0.25-0.15c0.67-0.4,1.09-1.1,1.09-3.35v-3.4C90.64,57.12,89.87,56.35,88.92,56.35z M41.81,26.17h11.3
c0.95,0,1.72-0.77,1.72-1.72s-0.77-1.72-1.72-1.72h-11.3c-0.95,0-1.72,0.77-1.72,1.72S40.86,26.17,41.81,26.17z M87.2,22.73h-5.39
c-0.95,0-1.72,0.77-1.72,1.72s0.77,1.72,1.72,1.72h2.75l-1.58,1.68c-0.65,0.69-0.62,1.78,0.07,2.43c0.33,0.31,0.76,0.47,1.18,0.47
c0.46,0,0.91-0.18,1.25-0.54l1.72-1.82v0.99c0,0.95,0.77,1.72,1.72,1.72c0.95,0,1.72-0.77,1.72-1.72v-3.21
C90.64,24.27,89.09,22.73,87.2,22.73z M61.81,26.17h11.3c0.95,0,1.72-0.77,1.72-1.72s-0.77-1.72-1.72-1.72h-11.3
c-0.95,0-1.72,0.77-1.72,1.72S60.86,26.17,61.81,26.17z M9.71,67.54c0.95,0,1.72-0.77,1.72-1.72v-11.3c0-0.95-0.77-1.72-1.72-1.72
s-1.72,0.77-1.72,1.72v11.3C7.99,66.77,8.76,67.54,9.71,67.54z M24.65,33.86c0.42,0,0.84-0.15,1.17-0.46l7.04-6.52
c0.14-0.13,0.46-0.34,0.9-0.51c0.89-0.34,1.34-1.33,1-2.22s-1.33-1.34-2.22-1c-0.8,0.3-1.52,0.73-2.03,1.2l-7.04,6.52
c-0.7,0.65-0.74,1.74-0.09,2.43C23.73,33.68,24.19,33.86,24.65,33.86z M70.35,99.28l-0.37,0.36v-2.43c0-0.95-0.77-1.72-1.72-1.72
c-0.95,0-1.72,0.77-1.72,1.72v4.72H61.3c-0.95,0-1.72,0.77-1.72,1.72s0.77,1.72,1.72,1.72h5.23c1.4,0,3.15-0.7,4.16-1.66l2.03-1.94
c0.69-0.66,0.71-1.75,0.06-2.43C72.13,98.65,71.03,98.63,70.35,99.28z M52.6,101.93H41.3c-0.95,0-1.72,0.77-1.72,1.72
s0.77,1.72,1.72,1.72h11.3c0.95,0,1.72-0.77,1.72-1.72S53.55,101.93,52.6,101.93z M88.92,36.35c-0.95,0-1.72,0.77-1.72,1.72v11.3
c0,0.95,0.77,1.72,1.72,1.72c0.95,0,1.72-0.77,1.72-1.72v-11.3C90.64,37.12,89.87,36.35,88.92,36.35z M32.61,101.93H21.3
c-0.95,0-1.72,0.77-1.72,1.72s0.77,1.72,1.72,1.72h11.3c0.95,0,1.72-0.77,1.72-1.72S33.56,101.93,32.61,101.93z M9.71,87.54
c0.95,0,1.72-0.77,1.72-1.72v-11.3c0-0.95-0.77-1.72-1.72-1.72s-1.72,0.77-1.72,1.72v11.3C7.99,86.77,8.76,87.54,9.71,87.54z
M12.61,101.93h-1.18v-7.42c0-0.95-0.77-1.72-1.72-1.72s-1.72,0.77-1.72,1.72v7.42c0,1.9,1.54,3.44,3.44,3.44h1.18
c0.95,0,1.72-0.77,1.72-1.72S13.56,101.93,12.61,101.93z M19.53,36.88c-0.65-0.7-1.74-0.74-2.43-0.09l-7.3,6.76
c-0.55,0.51-0.93,1.15-1.16,1.6C8.22,46,8.56,47.03,9.41,47.46c0.25,0.12,0.51,0.18,0.77,0.18h0.01c0.14,0.04,0.29,0.07,0.45,0.07
h5.6c0.95,0,1.72-0.77,1.72-1.72s-0.77-1.72-1.72-1.72h-2.13l5.33-4.94C20.14,38.66,20.18,37.57,19.53,36.88z M80.7,89.4l-4.05,3.86
c-0.69,0.66-0.71,1.75-0.06,2.43c0.34,0.35,0.79,0.53,1.25,0.53c0.43,0,0.86-0.16,1.19-0.48l4.05-3.86
c0.69-0.66,0.71-1.75,0.06-2.43C82.48,88.77,81.39,88.75,80.7,89.4z"/>
<g>
<path fill="#ED6B21" d="M98.82,101.06c-11.63,0-21.09-9.46-21.09-21.09s9.46-21.09,21.09-21.09s21.09,9.46,21.09,21.09
S110.45,101.06,98.82,101.06z M98.82,62.32c-9.73,0-17.65,7.92-17.65,17.65s7.92,17.65,17.65,17.65s17.65-7.92,17.65-17.65
S108.55,62.32,98.82,62.32z"/>
</g>
<g>
<path fill="#ED6B21" d="M110.44,81.84c0,1.1-0.9,2-2,2H89.2c-1.1,0-2-0.9-2-2v-3.75c0-1.1,0.9-2,2-2h19.25c1.1,0,2,0.9,2,2
L110.44,81.84L110.44,81.84z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="resin">
<rect x="4" y="7" fill="#ED6B21" width="8" height="8"/>
<path fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-miterlimit="10" d="M4.5,15h6.99c0.28,0,0.5-0.23,0.5-0.5V6
c0-1-2-1-2-2s0-1,0-1h1V1.5C11,1.23,10.77,1,10.5,1h-5C5.23,1,5,1.23,5,1.5V3h1v1c0,1-2,1-2,2v8.5C4,14.77,4.23,15,4.5,15z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 670 B

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="save">
<g>
<path fill="#FFFFFF" d="M12,2c1.44,0,2,0.56,2,2v10H2V2H12 M12,1H2C1.45,1,1,1.45,1,2v12c0,0.55,0.45,1,1,1h12c0.55,0,1-0.45,1-1
V4C15,2,14,1,12,1L12,1z"/>
</g>
<g>
<path fill="#FFFFFF" d="M10,8.5H3C2.72,8.5,2.5,8.28,2.5,8S2.72,7.5,3,7.5h7c0.28,0,0.5,0.22,0.5,0.5C10.5,8.28,10.28,8.5,10,8.5z
"/>
</g>
<g>
<path fill="#FFFFFF" d="M10,10.5H3c-0.28,0-0.5-0.22-0.5-0.5S2.72,9.5,3,9.5h7c0.28,0,0.5,0.22,0.5,0.5S10.28,10.5,10,10.5z"/>
</g>
<g>
<path fill="#FFFFFF" d="M7,12.5H3c-0.28,0-0.5-0.22-0.5-0.5s0.22-0.5,0.5-0.5h4c0.28,0,0.5,0.22,0.5,0.5S7.28,12.5,7,12.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,1H5C4.45,1,4,1.45,4,2v3c0,0.55,0.45,1,1,1h6c0.55,0,1-0.45,1-1V2C12,1.45,11.55,1,11,1z M6,4.5
C6,4.78,5.78,5,5.5,5S5,4.78,5,4.5v-2C5,2.22,5.22,2,5.5,2S6,2.22,6,2.5V4.5z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="set_x5F_separate_x5F_obj">
<g>
<path fill="#FFFFFF" d="M6,15.49H2.04c-0.83,0-1.5-0.67-1.51-1.5l-0.02-3.96c0-0.4,0.15-0.78,0.44-1.06C1.22,8.69,1.6,8.53,2,8.53
h4c0.83,0,1.5,0.67,1.5,1.5v3.96C7.5,14.82,6.83,15.49,6,15.49z M6,9.53H2c-0.13,0-0.26,0.05-0.35,0.15
C1.56,9.77,1.51,9.9,1.51,10.03l0.02,3.96c0,0.28,0.23,0.5,0.51,0.5H6c0.28,0,0.5-0.22,0.5-0.5v-3.96C6.5,9.75,6.28,9.53,6,9.53z"
/>
</g>
<g>
<path fill="#FFFFFF" d="M6,7.5H2.04c-0.83,0-1.5-0.67-1.51-1.5L0.51,2.04c0-0.4,0.15-0.78,0.44-1.06C1.22,0.7,1.6,0.54,2,0.54h4
c0.83,0,1.5,0.67,1.5,1.5V6C7.5,6.83,6.83,7.5,6,7.5z M6,1.54H2c-0.13,0-0.26,0.05-0.35,0.15C1.56,1.78,1.51,1.9,1.51,2.04L1.53,6
c0,0.28,0.23,0.5,0.51,0.5H6c0.28,0,0.5-0.22,0.5-0.5V2.04C6.5,1.76,6.28,1.54,6,1.54z"/>
</g>
<g>
<path fill="#ED6B21" d="M14,7.5h-3.96c-0.83,0-1.5-0.67-1.51-1.5L8.51,2.04c0-0.4,0.15-0.78,0.44-1.06C9.22,0.7,9.6,0.54,10,0.54
h4c0.83,0,1.5,0.67,1.5,1.5V6C15.5,6.83,14.83,7.5,14,7.5z M14,1.54h-4c-0.13,0-0.26,0.05-0.35,0.15C9.56,1.78,9.5,1.9,9.51,2.04
L9.53,6c0,0.27,0.23,0.5,0.51,0.5H14c0.28,0,0.5-0.22,0.5-0.5V2.04C14.5,1.76,14.28,1.54,14,1.54z"/>
</g>
<g>
<path fill="#FFFFFF" d="M14,15.5h-3.96c-0.83,0-1.5-0.67-1.51-1.5l-0.02-3.96c0-0.4,0.15-0.78,0.44-1.06
C9.22,8.7,9.6,8.54,10,8.54h4c0.83,0,1.5,0.67,1.5,1.5V14C15.5,14.83,14.83,15.5,14,15.5z M14,9.54h-4
c-0.13,0-0.26,0.05-0.35,0.15C9.56,9.78,9.5,9.9,9.51,10.04L9.53,14c0,0.27,0.23,0.5,0.51,0.5H14c0.28,0,0.5-0.22,0.5-0.5v-3.96
C14.5,9.76,14.28,9.54,14,9.54z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<path fill="#FFFFFF" d="M11.9,5.59L8.42,3.27c-0.23-0.15-0.6-0.15-0.83,0L4.1,5.59C3.87,5.75,3.69,6.1,3.69,6.37v0.44v1v0.44
c0,0.28,0,0.72,0,1v0.44c0,0.28,0.19,0.62,0.42,0.78l3.48,2.32c0.23,0.15,0.6,0.15,0.83,0l3.48-2.32c0.23-0.15,0.42-0.5,0.42-0.78
V9.25c0-0.28,0-0.72,0-1V7.81v-1V6.37C12.31,6.1,12.13,5.75,11.9,5.59z M11.47,7.81v0.44c0,0.27,0,0.71,0,0.99s-0.19,0.62-0.42,0.78
l-2.64,1.76c-0.23,0.15-0.6,0.15-0.83,0l-2.64-1.76c-0.23-0.15-0.42-0.5-0.42-0.78c0-0.27,0-0.71,0-0.99V7.81V6.82
c0-0.27,0.19-0.62,0.42-0.78l2.64-1.76c0.23-0.15,0.6-0.15,0.83,0l2.64,1.76c0.23,0.15,0.42,0.5,0.42,0.78V7.81z"/>
<path fill="#ED6B21" d="M13.17,4.47L8.83,1.58c-0.46-0.31-1.21-0.31-1.66,0L2.83,4.47C2.37,4.78,2,5.48,2,6.03s0,1.45,0,2v2
c0,0.55,0.37,1.25,0.83,1.55l4.34,2.89c0.46,0.31,1.21,0.31,1.66,0l4.34-2.89c0.46-0.31,0.83-1,0.83-1.55v-2c0-0.55,0-1.45,0-2
S13.63,4.78,13.17,4.47z M13.25,8.03v1.6c0,0.55-0.37,1.25-0.83,1.55l-3.59,2.39c-0.46,0.31-1.21,0.31-1.66,0l-3.59-2.39
c-0.46-0.31-0.83-1-0.83-1.55v-1.6c0-0.48,0-1.14,0-1.6c0-0.55,0.37-1.25,0.83-1.55l3.59-2.39c0.46-0.31,1.21-0.31,1.66,0l3.59,2.39
c0.46,0.31,0.83,1,0.83,1.55C13.25,6.89,13.25,7.55,13.25,8.03z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="split_x5F_object_x5F_small">
<path fill="#FFFFFF" d="M10.98,7.22c-0.29,0-0.52-0.23-0.52-0.52V4.61V3.57c0-0.29-0.23-0.52-0.52-0.52H2.62
c-0.29,0-0.53,0.24-0.53,0.53l-0.04,7.31c0,0.14,0.05,0.27,0.15,0.37c0.1,0.1,0.23,0.15,0.37,0.15h3.19l0,0
c0.29,0,0.52,0.23,0.52,0.52s-0.23,0.52-0.52,0.52h-2.1c-0.01,0-0.01,0-0.02,0H2.56c-0.42,0-0.81-0.16-1.11-0.46
C1.16,11.69,1,11.29,1,10.87l0.04-7.31C1.05,2.7,1.75,2,2.62,2h7.31c0.86,0,1.57,0.7,1.57,1.57v1.04V6.7
C11.5,6.99,11.27,7.22,10.98,7.22z"/>
<g>
<path fill="#ED6B21" d="M13.53,8H7.47C7.21,8,7,8.21,7,8.47v6.07C7,14.79,7.21,15,7.47,15h6.07c0.26,0,0.47-0.21,0.47-0.47V8.47
C14,8.21,13.79,8,13.53,8z M12.36,12.68c0,1.14-0.57,1.65-1.88,1.65s-1.84-0.51-1.84-1.65v-2.33c0-1.17,0.51-1.65,1.84-1.65
s1.88,0.48,1.88,1.65V12.68z"/>
<path fill="#ED6B21" d="M10.47,9.57c-0.72,0-0.85,0.32-0.85,0.82v2.23c0,0.52,0.14,0.82,0.85,0.82c0.72,0,0.89-0.3,0.89-0.82V10.4
C11.37,9.9,11.24,9.57,10.47,9.57z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="split_x5F_parts_x5F_small">
<path fill="#FFFFFF" d="M10.98,7.22c-0.29,0-0.52-0.23-0.52-0.52V4.61V3.57c0-0.29-0.23-0.52-0.52-0.52H2.62
c-0.29,0-0.53,0.24-0.53,0.53l-0.04,7.31c0,0.14,0.05,0.27,0.15,0.37c0.1,0.1,0.23,0.15,0.37,0.15h3.19l0,0
c0.29,0,0.52,0.23,0.52,0.52s-0.23,0.52-0.52,0.52h-2.1c-0.01,0-0.01,0-0.02,0H2.56c-0.42,0-0.81-0.16-1.11-0.46
C1.16,11.69,1,11.29,1,10.87l0.04-7.31C1.05,2.7,1.75,2,2.62,2h7.31c0.86,0,1.57,0.7,1.57,1.57v1.04V6.7
C11.5,6.99,11.27,7.22,10.98,7.22z"/>
<g>
<path fill="#ED6B21" d="M13.53,8H7.47C7.21,8,7,8.21,7,8.47v6.07C7,14.79,7.21,15,7.47,15h6.07c0.26,0,0.47-0.21,0.47-0.47V8.47
C14,8.21,13.79,8,13.53,8z M12.19,10.89c0,1.16-0.65,1.69-1.99,1.69H9.81v1.72H8.79V8.7h1.41c1.35,0,1.99,0.49,1.99,1.67V10.89z"
/>
<path fill="#ED6B21" d="M10.21,9.62h-0.4v2h0.39c0.73,0,0.97-0.25,0.97-0.78v-0.41C11.17,9.89,10.99,9.62,10.21,9.62z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="spool">
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="2" y1="2" x2="2" y2="14"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" x1="14" y1="2" x2="14" y2="14"/>
<line fill="none" stroke="#ED6B21" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="4" y1="3" x2="4" y2="13"/>
<line fill="none" stroke="#ED6B21" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="6" y1="3" x2="6" y2="13"/>
<line fill="none" stroke="#ED6B21" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="8" y1="3" x2="8" y2="13"/>
<line fill="none" stroke="#ED6B21" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="10" y1="3" x2="10" y2="13"/>
<line fill="none" stroke="#ED6B21" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="12" y1="3" x2="12" y2="13"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="support">
<g>
<path fill="#FFFFFF" d="M8.42,0.91c-0.23-0.15-0.6-0.15-0.83,0L3.11,3.89c-0.23,0.15-0.42,0.5-0.42,0.78v0.57c0,0.28,0,0.55,0,0.6
s0,0.33,0,0.6V7.2c0,0.27,0,0.55,0,0.6s0,0.33,0,0.6v0.57c0,0.28,0.19,0.62,0.42,0.78l4.47,2.98c0.23,0.15,0.6,0.15,0.83,0
l4.47-2.98c0.23-0.15,0.42-0.5,0.42-0.78V8.4c0-0.27,0-0.55,0-0.6s0-0.33,0-0.6V6.44c0-0.28,0-0.55,0-0.6s0-0.33,0-0.6V4.67
c0-0.28-0.19-0.62-0.42-0.78L8.42,0.91z M12.42,5.24c0,0.28,0,0.55,0,0.6s0,0.33,0,0.6V7.2c0,0.27,0,0.55,0,0.6s0,0.33,0,0.6v0.09
c0,0.28-0.19,0.62-0.42,0.78l-3.59,2.39c-0.23,0.15-0.6,0.15-0.83,0L3.99,9.27c-0.23-0.15-0.42-0.5-0.42-0.78V8.4
c0-0.27,0-0.55,0-0.6s0-0.33,0-0.6V6.44c0-0.28,0-0.55,0-0.6s0-0.33,0-0.6v-0.1c0-0.27,0.19-0.62,0.42-0.78l3.59-2.39
c0.23-0.15,0.6-0.15,0.83,0L12,4.36c0.23,0.15,0.42,0.5,0.42,0.78V5.24z"/>
</g>
<g>
<g>
<path fill="#ED6B21" d="M13,15.38c-0.21,0-0.38-0.17-0.38-0.38v-4c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38v4
C13.38,15.21,13.21,15.38,13,15.38z"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M12,11.49"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M12,15"/>
</g>
<g>
<path fill="#ED6B21" d="M11,15.38c-0.21,0-0.38-0.17-0.38-0.38v-2.88c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38V15
C11.38,15.21,11.21,15.38,11,15.38z"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M10,12.79"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M10,15"/>
</g>
<g>
<path fill="#ED6B21" d="M9,15.38c-0.21,0-0.38-0.17-0.38-0.38v-1.5c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38V15
C9.38,15.21,9.21,15.38,9,15.38z"/>
</g>
</g>
<g>
<g>
<path fill="#ED6B21" d="M3,15.38c-0.21,0-0.38-0.17-0.38-0.38v-4c0-0.21,0.17-0.38,0.38-0.38S3.37,10.79,3.37,11v4
C3.37,15.21,3.2,15.38,3,15.38z"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M4,11.49"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M4,15"/>
</g>
<g>
<path fill="#ED6B21" d="M5,15.38c-0.21,0-0.38-0.17-0.38-0.38v-2.88c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38V15
C5.37,15.21,5.2,15.38,5,15.38z"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M6,12.79"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.75" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M6,15"/>
</g>
<g>
<path fill="#ED6B21" d="M7,15.38c-0.21,0-0.38-0.17-0.38-0.38v-1.5c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38V15
C7.37,15.21,7.2,15.38,7,15.38z"/>
</g>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M8,14"/>
</g>
<g>
<path fill="none" stroke="#ED6B21" stroke-width="0.5" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M8,15"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="support_x5F_blocker">
<g>
<path fill="#FFFFFF" d="M8,8.17c-0.4,0-0.8-0.1-1.11-0.31L2.55,4.97C1.95,4.57,1.5,3.72,1.5,3V2c0-0.28,0.22-0.5,0.5-0.5
S2.5,1.72,2.5,2v1c0,0.38,0.29,0.93,0.61,1.14l4.34,2.89c0.29,0.19,0.82,0.19,1.11,0l4.34-2.89c0.31-0.21,0.6-0.76,0.6-1.14V2
c0-0.28,0.22-0.5,0.5-0.5s0.5,0.22,0.5,0.5v1c0,0.72-0.45,1.57-1.05,1.97L9.11,7.86C8.8,8.07,8.4,8.17,8,8.17z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,8.38c-0.12,0-0.24-0.06-0.31-0.17c-0.11-0.17-0.07-0.41,0.1-0.52l3-2c0.12-0.08,0.26-0.08,0.38-0.02
s0.2,0.19,0.2,0.33v2c0,0.21-0.17,0.38-0.38,0.38S13.62,8.21,13.62,8V6.7L11.2,8.31C11.14,8.35,11.07,8.38,11,8.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M14,14.38h-3c-0.21,0-0.38-0.17-0.38-0.38s0.17-0.38,0.38-0.38h2.62V13c0-0.21,0.17-0.38,0.38-0.38
s0.38,0.17,0.38,0.38v1C14.38,14.21,14.21,14.38,14,14.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M9,14.38H7c-0.21,0-0.38-0.17-0.38-0.38S6.79,13.62,7,13.62h2c0.21,0,0.38,0.17,0.38,0.38
S9.21,14.38,9,14.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M14,11.38c-0.21,0-0.38-0.17-0.38-0.38v-1c0-0.21,0.17-0.38,0.38-0.38s0.38,0.17,0.38,0.38v1
C14.38,11.21,14.21,11.38,14,11.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,10.38c-0.13,0-0.25-0.06-0.32-0.18C7.57,10.02,7.63,9.79,7.8,9.68l1.62-1C9.6,8.57,9.83,8.63,9.94,8.8
c0.11,0.18,0.05,0.41-0.12,0.52l-1.62,1C8.14,10.36,8.07,10.38,8,10.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M5,8.38c-0.07,0-0.14-0.02-0.21-0.06L2.38,6.7V8c0,0.21-0.17,0.38-0.38,0.38S1.62,8.21,1.62,8V6
c0-0.14,0.08-0.27,0.2-0.33C1.95,5.6,2.09,5.61,2.21,5.69l3,2c0.17,0.11,0.22,0.35,0.1,0.52C5.24,8.32,5.12,8.38,5,8.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M5,14.38H2c-0.21,0-0.38-0.17-0.38-0.38v-1c0-0.21,0.17-0.38,0.38-0.38S2.38,12.79,2.38,13v0.62H5
c0.21,0,0.38,0.17,0.38,0.38S5.21,14.38,5,14.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M2,11.38c-0.21,0-0.38-0.17-0.38-0.38v-1c0-0.21,0.17-0.38,0.38-0.38S2.38,9.79,2.38,10v1
C2.38,11.21,2.21,11.38,2,11.38z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,10.38c-0.07,0-0.14-0.02-0.2-0.06l-1.62-1C6.01,9.21,5.96,8.98,6.06,8.8C6.17,8.63,6.4,8.57,6.58,8.68
l1.62,1c0.18,0.11,0.23,0.34,0.12,0.52C8.25,10.31,8.13,10.38,8,10.38z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="support_x5F_enfocer">
<g>
<path fill="#FFFFFF" d="M8,8.17c-0.4,0-0.8-0.1-1.11-0.31L2.55,4.97C1.95,4.57,1.5,3.72,1.5,3V2c0-0.28,0.22-0.5,0.5-0.5
S2.5,1.72,2.5,2v1c0,0.38,0.29,0.93,0.61,1.14l4.34,2.89c0.29,0.19,0.82,0.19,1.11,0l4.34-2.89c0.31-0.21,0.6-0.76,0.6-1.14V2
c0-0.28,0.22-0.5,0.5-0.5s0.5,0.22,0.5,0.5v1c0,0.72-0.45,1.57-1.05,1.97L9.11,7.86C8.8,8.07,8.4,8.17,8,8.17z"/>
</g>
<g>
<path fill="#ED6B21" d="M13,14.5H3c-0.83,0-1.5-0.67-1.5-1.5V7c0-0.45,0.19-0.81,0.51-0.98s0.72-0.13,1.1,0.12l4.34,2.89
c0.29,0.19,0.82,0.19,1.11,0l4.34-2.89c0.38-0.25,0.78-0.3,1.1-0.12c0.31,0.17,0.5,0.53,0.5,0.98v6C14.5,13.83,13.83,14.5,13,14.5
z M2.5,6.94c0,0.02,0,0.04,0,0.06v6c0,0.28,0.22,0.5,0.5,0.5h10c0.28,0,0.5-0.22,0.5-0.5V7c0-0.02,0-0.04,0-0.06
c-0.02,0.01-0.03,0.02-0.05,0.03L9.11,9.86c-0.62,0.41-1.6,0.41-2.22,0L2.55,6.97C2.54,6.96,2.52,6.95,2.5,6.94z M8.83,9.45
L8.83,9.45L8.83,9.45z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="test">
<g>
<path fill="#FFFFFF" d="M13,1.5h-1.5v1h1v12h-9v-12h1v-1H3C2.72,1.5,2.5,1.72,2.5,2v13c0,0.28,0.22,0.5,0.5,0.5h10
c0.28,0,0.5-0.22,0.5-0.5V2C13.5,1.72,13.28,1.5,13,1.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,8.5H5C4.72,8.5,4.5,8.28,4.5,8V5c0-0.28,0.22-0.5,0.5-0.5h3c0.28,0,0.5,0.22,0.5,0.5v3
C8.5,8.28,8.28,8.5,8,8.5z M5.5,7.5h2v-2h-2V7.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M8,13.5H5c-0.28,0-0.5-0.22-0.5-0.5v-3c0-0.28,0.22-0.5,0.5-0.5h3c0.28,0,0.5,0.22,0.5,0.5v3
C8.5,13.28,8.28,13.5,8,13.5z M5.5,12.5h2v-2h-2V12.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,5.5h-1C9.72,5.5,9.5,5.28,9.5,5S9.72,4.5,10,4.5h1c0.28,0,0.5,0.22,0.5,0.5S11.28,5.5,11,5.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,7.5h-1C9.72,7.5,9.5,7.28,9.5,7S9.72,6.5,10,6.5h1c0.28,0,0.5,0.22,0.5,0.5S11.28,7.5,11,7.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,10.5h-1c-0.28,0-0.5-0.22-0.5-0.5S9.72,9.5,10,9.5h1c0.28,0,0.5,0.22,0.5,0.5S11.28,10.5,11,10.5z"/>
</g>
<g>
<path fill="#ED6B21" d="M11,12.5h-1c-0.28,0-0.5-0.22-0.5-0.5s0.22-0.5,0.5-0.5h1c0.28,0,0.5,0.22,0.5,0.5S11.28,12.5,11,12.5z"/>
</g>
<g>
<g>
<path fill="#FFFFFF" d="M11,3.5H5C4.72,3.5,4.5,3.28,4.5,3V1c0-0.28,0.22-0.5,0.5-0.5h6c0.28,0,0.5,0.22,0.5,0.5v2
C11.5,3.28,11.28,3.5,11,3.5z M5.5,2.5h5v-1h-5V2.5z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="time">
<g>
<path fill="#FFFFFF" d="M8,2c3.31,0,6,2.69,6,6s-2.69,6-6,6s-6-2.69-6-6S4.69,2,8,2 M8,1C4.13,1,1,4.13,1,8s3.13,7,7,7s7-3.13,7-7
S11.87,1,8,1L8,1z"/>
</g>
<g>
<line fill="none" stroke="#ED6B21" stroke-linecap="round" stroke-miterlimit="10" x1="5" y1="4" x2="8" y2="8"/>
</g>
<line fill="none" stroke="#ED6B21" stroke-width="1.5" stroke-linecap="round" stroke-miterlimit="10" x1="11.5" y1="8" x2="8" y2="8"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 789 B

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="gueue">
<g>
<path fill="#FFFFFF" d="M6,15.49H2.04c-0.83,0-1.5-0.67-1.51-1.5l-0.02-3.96c0-0.4,0.15-0.78,0.44-1.06C1.22,8.69,1.6,8.53,2,8.53
h4c0.83,0,1.5,0.67,1.5,1.5v3.96C7.5,14.82,6.83,15.49,6,15.49z M6,9.53H2c-0.13,0-0.26,0.05-0.35,0.15
C1.56,9.77,1.51,9.9,1.51,10.03l0.02,3.96c0,0.28,0.23,0.5,0.51,0.5H6c0.28,0,0.5-0.22,0.5-0.5v-3.96C6.5,9.75,6.28,9.53,6,9.53z"
/>
</g>
<g>
<path fill="#FFFFFF" d="M6,7.5H2.04c-0.83,0-1.5-0.67-1.51-1.5L0.51,2.04c0-0.4,0.15-0.78,0.44-1.06C1.22,0.7,1.6,0.54,2,0.54h4
l0,0c0.4,0,0.77,0.16,1.06,0.44C7.34,1.26,7.5,1.64,7.5,2.04V6C7.5,6.83,6.83,7.5,6,7.5z M6,1.54L6,1.54H2
c-0.13,0-0.26,0.05-0.35,0.15C1.56,1.78,1.51,1.9,1.51,2.04L1.53,6c0,0.28,0.23,0.5,0.51,0.5H6c0.28,0,0.5-0.22,0.5-0.5V2.04
c0-0.13-0.05-0.26-0.15-0.35C6.26,1.59,6.13,1.54,6,1.54z"/>
</g>
<g>
<path fill="#FFFFFF" d="M14,7.5h-3.96c-0.83,0-1.5-0.67-1.51-1.5L8.51,2.04c0-0.4,0.15-0.78,0.44-1.06C9.22,0.7,9.6,0.54,10,0.54
h4l0,0c0.4,0,0.78,0.16,1.06,0.44s0.44,0.66,0.44,1.06V6C15.5,6.83,14.83,7.5,14,7.5z M14,1.54L14,1.54h-4
c-0.13,0-0.26,0.05-0.35,0.15C9.56,1.78,9.5,1.9,9.51,2.04L9.53,6c0,0.27,0.23,0.5,0.51,0.5H14c0.28,0,0.5-0.22,0.5-0.5V2.04
c0-0.13-0.05-0.26-0.15-0.35S14.13,1.54,14,1.54z"/>
</g>
<path fill="#ED6B21" d="M12,8.5c-1.93,0-3.5,1.57-3.5,3.5s1.57,3.5,3.5,3.5s3.5-1.57,3.5-3.5S13.93,8.5,12,8.5z M13.45,12.58H12
c-0.09,0-0.17-0.02-0.24-0.06c-0.02-0.01-0.04-0.02-0.05-0.04c-0.05-0.03-0.1-0.07-0.14-0.12c-0.01-0.01-0.02-0.01-0.03-0.02
l-1.25-1.67c-0.19-0.26-0.14-0.62,0.12-0.82c0.26-0.19,0.62-0.14,0.82,0.12l1.07,1.43h1.17c0.32,0,0.58,0.26,0.58,0.58
C14.04,12.32,13.78,12.58,13.45,12.58z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="advanced_x2B_wrench">
<path fill="#FFFFFF" d="M7.4,3.7C7.3,3.5,7.2,3.2,7.1,3l0.2-0.7L6.6,1.7L6,1.9C5.8,1.8,5.5,1.7,5.3,1.6L5,1H4L3.7,1.6
C3.5,1.7,3.2,1.8,3,1.9L2.4,1.7L1.7,2.4L1.9,3C1.8,3.2,1.7,3.5,1.6,3.7L1,4v1l0.6,0.3C1.7,5.5,1.8,5.8,1.9,6L1.7,6.6l0.7,0.7L3,7.1
c0.2,0.1,0.4,0.2,0.7,0.3L4,8h1l0.3-0.6C5.5,7.3,5.8,7.2,6,7.1l0.7,0.2l0.7-0.7L7.1,6c0.1-0.2,0.2-0.4,0.3-0.7L8,5V4L7.4,3.7z
M4.5,6.4c-1.1,0-1.9-0.9-1.9-1.9s0.9-1.9,1.9-1.9s1.9,0.9,1.9,1.9S5.6,6.4,4.5,6.4z"/>
<path fill="#FFFFFF" d="M12.4,2.5c-0.1-0.2-0.1-0.3-0.2-0.5l0.1-0.5L11.8,1l-0.5,0.2C11.2,1.1,11.1,1,10.9,1l-0.2-0.4H10L9.8,1
C9.6,1,9.4,1.1,9.3,1.2L8.8,1L8.3,1.5L8.5,2C8.4,2.2,8.3,2.3,8.3,2.5L7.8,2.7v0.7l0.4,0.2c0,0.2,0.1,0.3,0.2,0.5L8.3,4.6l0.5,0.5
l0.5-0.2C9.4,5,9.6,5.1,9.8,5.1L10,5.6h0.7l0.2-0.4c0.2,0,0.3-0.1,0.5-0.2l0.5,0.2l0.5-0.5l-0.2-0.5c0.1-0.2,0.1-0.3,0.2-0.5
l0.4-0.2V2.7L12.4,2.5z M10.3,4.2c-0.6,0-1.1-0.5-1.1-1.1S9.7,2,10.3,2s1.1,0.5,1.1,1.1S10.9,4.2,10.3,4.2z"/>
<path fill="#ED6B21" d="M14.4,9.6L15,8.9l-0.5-1.3l-1-0.1C13.3,7.3,13,7,12.8,6.8l-0.1-1l-1.3-0.5l-0.7,0.6c-0.3,0-0.7,0-1,0
L8.9,5.3L7.6,5.8l-0.1,1C7.3,7,7,7.3,6.8,7.5l-1,0.1L5.3,8.9l0.6,0.7c0,0.3,0,0.7,0,1l-0.6,0.7l0.5,1.3l1,0.1
C7,13,7.3,13.3,7.5,13.5l0.1,1L8.9,15l0.7-0.6c0.3,0,0.7,0,1,0l0.7,0.6l1.3-0.5l0.1-1c0.3-0.2,0.5-0.5,0.7-0.7l1-0.1l0.5-1.3
l-0.6-0.7C14.4,10.3,14.4,10,14.4,9.6z M10.2,13c-1.6,0-2.9-1.3-2.9-2.8c0-1.6,1.3-2.9,2.9-2.9S13,8.6,13,10.2
C13,11.7,11.7,13,10.2,13z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<g id="advanced_x2B_wrench">
<path fill="#FFFFFF" d="M7.4,3.7C7.3,3.5,7.2,3.2,7.1,3l0.2-0.7L6.6,1.7L6,1.9C5.8,1.8,5.5,1.7,5.3,1.6L5,1H4L3.7,1.6
C3.5,1.7,3.2,1.8,3,1.9L2.4,1.7L1.7,2.4L1.9,3C1.8,3.2,1.7,3.5,1.6,3.7L1,4v1l0.6,0.3C1.7,5.5,1.8,5.8,1.9,6L1.7,6.6l0.7,0.7L3,7.1
c0.2,0.1,0.4,0.2,0.7,0.3L4,8h1l0.3-0.6C5.5,7.3,5.8,7.2,6,7.1l0.7,0.2l0.7-0.7L7.1,6c0.1-0.2,0.2-0.4,0.3-0.7L8,5V4L7.4,3.7z
M4.5,6.4c-1.1,0-1.9-0.9-1.9-1.9s0.9-1.9,1.9-1.9s1.9,0.9,1.9,1.9S5.6,6.4,4.5,6.4z"/>
<path fill="#FFFFFF" d="M12.4,2.5c-0.1-0.2-0.1-0.3-0.2-0.5l0.1-0.5L11.8,1l-0.5,0.2C11.2,1.1,11.1,1,10.9,1l-0.2-0.4H10L9.8,1
C9.6,1,9.4,1.1,9.3,1.2L8.8,1L8.3,1.5L8.5,2C8.4,2.2,8.3,2.3,8.3,2.5L7.8,2.7v0.7l0.4,0.2c0,0.2,0.1,0.3,0.2,0.5L8.3,4.6l0.5,0.5
l0.5-0.2C9.4,5,9.6,5.1,9.8,5.1L10,5.6h0.7l0.2-0.4c0.2,0,0.3-0.1,0.5-0.2l0.5,0.2l0.5-0.5l-0.2-0.5c0.1-0.2,0.1-0.3,0.2-0.5
l0.4-0.2V2.7L12.4,2.5z M10.3,4.2c-0.6,0-1.1-0.5-1.1-1.1S9.7,2,10.3,2s1.1,0.5,1.1,1.1S10.9,4.2,10.3,4.2z"/>
<path fill="#ED6B21" d="M14.4,9.6L15,8.9l-0.5-1.3l-1-0.1C13.3,7.3,13,7,12.8,6.8l-0.1-1l-1.3-0.5l-0.7,0.6c-0.3,0-0.7,0-1,0
L8.9,5.3L7.6,5.8l-0.1,1C7.3,7,7,7.3,6.8,7.5l-1,0.1L5.3,8.9l0.6,0.7c0,0.3,0,0.7,0,1l-0.6,0.7l0.5,1.3l1,0.1
C7,13,7.3,13.3,7.5,13.5l0.1,1L8.9,15l0.7-0.6c0.3,0,0.7,0,1,0l0.7,0.6l1.3-0.5l0.1-1c0.3-0.2,0.5-0.5,0.7-0.7l1-0.1l0.5-1.3
l-0.6-0.7C14.4,10.3,14.4,10,14.4,9.6z M10.2,13c-1.6,0-2.9-1.3-2.9-2.8c0-1.6,1.3-2.9,2.9-2.9S13,8.6,13,10.2
C13,11.7,11.7,13,10.2,13z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -11,6 +11,8 @@
#define ENABLE_SELECTION_DEBUG_OUTPUT 0 #define ENABLE_SELECTION_DEBUG_OUTPUT 0
// Renders a small sphere in the center of the bounding box of the current selection when no gizmo is active // Renders a small sphere in the center of the bounding box of the current selection when no gizmo is active
#define ENABLE_RENDER_SELECTION_CENTER 0 #define ENABLE_RENDER_SELECTION_CENTER 0
// Shows an imgui dialog with render related data
#define ENABLE_RENDER_STATISTICS 0
//==================== //====================

View File

@ -628,7 +628,7 @@ std::string CLI::output_filepath(const Model &model, IO::ExportFormat format) co
{ {
std::string ext; std::string ext;
switch (format) { switch (format) {
case IO::AMF: ext = ".amf"; break; case IO::AMF: ext = ".zip.amf"; break;
case IO::OBJ: ext = ".obj"; break; case IO::OBJ: ext = ".obj"; break;
case IO::STL: ext = ".stl"; break; case IO::STL: ext = ".stl"; break;
case IO::TMF: ext = ".3mf"; break; case IO::TMF: ext = ".3mf"; break;

View File

@ -47,6 +47,8 @@ set(SLIC3R_GUI_SOURCES
GUI/Gizmos/GLGizmoFlatten.hpp GUI/Gizmos/GLGizmoFlatten.hpp
GUI/Gizmos/GLGizmoCut.cpp GUI/Gizmos/GLGizmoCut.cpp
GUI/Gizmos/GLGizmoCut.hpp GUI/Gizmos/GLGizmoCut.hpp
GUI/GLSelectionRectangle.cpp
GUI/GLSelectionRectangle.hpp
GUI/GLTexture.hpp GUI/GLTexture.hpp
GUI/GLTexture.cpp GUI/GLTexture.cpp
GUI/GLToolbar.hpp GUI/GLToolbar.hpp

View File

@ -223,7 +223,8 @@ void GLIndexedVertexArray::render(
} }
const float GLVolume::SELECTED_COLOR[4] = { 0.0f, 1.0f, 0.0f, 1.0f }; const float GLVolume::SELECTED_COLOR[4] = { 0.0f, 1.0f, 0.0f, 1.0f };
const float GLVolume::HOVER_COLOR[4] = { 0.4f, 0.9f, 0.1f, 1.0f }; const float GLVolume::HOVER_SELECT_COLOR[4] = { 0.4f, 0.9f, 0.1f, 1.0f };
const float GLVolume::HOVER_DESELECT_COLOR[4] = { 1.0f, 0.75f, 0.75f, 1.0f };
const float GLVolume::OUTSIDE_COLOR[4] = { 0.0f, 0.38f, 0.8f, 1.0f }; const float GLVolume::OUTSIDE_COLOR[4] = { 0.0f, 0.38f, 0.8f, 1.0f };
const float GLVolume::SELECTED_OUTSIDE_COLOR[4] = { 0.19f, 0.58f, 1.0f, 1.0f }; const float GLVolume::SELECTED_OUTSIDE_COLOR[4] = { 0.19f, 0.58f, 1.0f, 1.0f };
const float GLVolume::DISABLED_COLOR[4] = { 0.25f, 0.25f, 0.25f, 1.0f }; const float GLVolume::DISABLED_COLOR[4] = { 0.25f, 0.25f, 0.25f, 1.0f };
@ -251,7 +252,7 @@ GLVolume::GLVolume(float r, float g, float b, float a)
, zoom_to_volumes(true) , zoom_to_volumes(true)
, shader_outside_printer_detection_enabled(false) , shader_outside_printer_detection_enabled(false)
, is_outside(false) , is_outside(false)
, hover(false) , hover(HS_None)
, is_modifier(false) , is_modifier(false)
, is_wipe_tower(false) , is_wipe_tower(false)
, is_extrusion_path(false) , is_extrusion_path(false)
@ -291,10 +292,12 @@ void GLVolume::set_render_color()
if (force_native_color) if (force_native_color)
set_render_color(color, 4); set_render_color(color, 4);
else { else {
if (selected) if (hover == HS_Select)
set_render_color(HOVER_SELECT_COLOR, 4);
else if (hover == HS_Deselect)
set_render_color(HOVER_DESELECT_COLOR, 4);
else if (selected)
set_render_color(is_outside ? SELECTED_OUTSIDE_COLOR : SELECTED_COLOR, 4); set_render_color(is_outside ? SELECTED_OUTSIDE_COLOR : SELECTED_COLOR, 4);
else if (hover)
set_render_color(HOVER_COLOR, 4);
else if (disabled) else if (disabled)
set_render_color(DISABLED_COLOR, 4); set_render_color(DISABLED_COLOR, 4);
else if (is_outside && shader_outside_printer_detection_enabled) else if (is_outside && shader_outside_printer_detection_enabled)

View File

@ -225,7 +225,8 @@ private:
class GLVolume { class GLVolume {
public: public:
static const float SELECTED_COLOR[4]; static const float SELECTED_COLOR[4];
static const float HOVER_COLOR[4]; static const float HOVER_SELECT_COLOR[4];
static const float HOVER_DESELECT_COLOR[4];
static const float OUTSIDE_COLOR[4]; static const float OUTSIDE_COLOR[4];
static const float SELECTED_OUTSIDE_COLOR[4]; static const float SELECTED_OUTSIDE_COLOR[4];
static const float DISABLED_COLOR[4]; static const float DISABLED_COLOR[4];
@ -233,6 +234,13 @@ public:
static const float SLA_SUPPORT_COLOR[4]; static const float SLA_SUPPORT_COLOR[4];
static const float SLA_PAD_COLOR[4]; static const float SLA_PAD_COLOR[4];
enum EHoverState : unsigned char
{
HS_None,
HS_Select,
HS_Deselect
};
GLVolume(float r = 1.f, float g = 1.f, float b = 1.f, float a = 1.f); GLVolume(float r = 1.f, float g = 1.f, float b = 1.f, float a = 1.f);
GLVolume(const float *rgba) : GLVolume(rgba[0], rgba[1], rgba[2], rgba[3]) {} GLVolume(const float *rgba) : GLVolume(rgba[0], rgba[1], rgba[2], rgba[3]) {}
~GLVolume(); ~GLVolume();
@ -298,8 +306,8 @@ public:
bool shader_outside_printer_detection_enabled; bool shader_outside_printer_detection_enabled;
// Wheter or not this volume is outside print volume. // Wheter or not this volume is outside print volume.
bool is_outside; bool is_outside;
// Boolean: Is mouse over this object? // Is mouse or rectangle selection over this object to select/deselect it ?
bool hover; EHoverState hover;
// Wheter or not this volume has been generated from a modifier // Wheter or not this volume has been generated from a modifier
bool is_modifier; bool is_modifier;
// Wheter or not this volume has been generated from the wipe tower // Wheter or not this volume has been generated from the wipe tower

View File

@ -25,6 +25,7 @@ Camera::Camera()
, phi(45.0f) , phi(45.0f)
// , distance(0.0f) // , distance(0.0f)
, requires_zoom_to_bed(false) , requires_zoom_to_bed(false)
, inverted_phi(false)
, m_theta(45.0f) , m_theta(45.0f)
, m_target(Vec3d::Zero()) , m_target(Vec3d::Zero())
{ {

View File

@ -22,6 +22,7 @@ struct Camera
float phi; float phi;
// float distance; // float distance;
bool requires_zoom_to_bed; bool requires_zoom_to_bed;
bool inverted_phi;
private: private:
Vec3d m_target; Vec3d m_target;

View File

@ -52,6 +52,9 @@
#include <float.h> #include <float.h>
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
#if ENABLE_RENDER_STATISTICS
#include <chrono>
#endif // ENABLE_RENDER_STATISTICS
static const float TRACKBALLSIZE = 0.8f; static const float TRACKBALLSIZE = 0.8f;
static const float GROUND_Z = -0.02f; static const float GROUND_Z = -0.02f;
@ -672,6 +675,7 @@ GLCanvas3D::Mouse::Mouse()
: dragging(false) : dragging(false)
, position(DBL_MAX, DBL_MAX) , position(DBL_MAX, DBL_MAX)
, scene_position(DBL_MAX, DBL_MAX, DBL_MAX) , scene_position(DBL_MAX, DBL_MAX, DBL_MAX)
, ignore_left_up(false)
{ {
} }
@ -1228,7 +1232,6 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar
, m_initialized(false) , m_initialized(false)
, m_use_VBOs(false) , m_use_VBOs(false)
, m_apply_zoom_to_volumes_filter(false) , m_apply_zoom_to_volumes_filter(false)
, m_hover_volume_id(-1)
, m_legend_texture_enabled(false) , m_legend_texture_enabled(false)
, m_picking_enabled(false) , m_picking_enabled(false)
, m_moving_enabled(false) , m_moving_enabled(false)
@ -1237,6 +1240,7 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar
, m_regenerate_volumes(true) , m_regenerate_volumes(true)
, m_moving(false) , m_moving(false)
, m_tab_down(false) , m_tab_down(false)
, m_cursor_type(Standard)
, m_color_by("volume") , m_color_by("volume")
, m_reload_delayed(false) , m_reload_delayed(false)
, m_render_sla_auxiliaries(true) , m_render_sla_auxiliaries(true)
@ -1588,6 +1592,10 @@ void GLCanvas3D::render()
if (!_set_current() || !_3DScene::init(m_canvas)) if (!_set_current() || !_3DScene::init(m_canvas))
return; return;
#if ENABLE_RENDER_STATISTICS
auto start_time = std::chrono::high_resolution_clock::now();
#endif // ENABLE_RENDER_STATISTICS
if (m_bed.get_shape().empty()) if (m_bed.get_shape().empty())
{ {
// this happens at startup when no data is still saved under <>\AppData\Roaming\Slic3rPE // this happens at startup when no data is still saved under <>\AppData\Roaming\Slic3rPE
@ -1617,8 +1625,15 @@ void GLCanvas3D::render()
wxGetApp().imgui()->new_frame(); wxGetApp().imgui()->new_frame();
// picking pass if (m_picking_enabled)
_picking_pass(); {
if (m_rectangle_selection.is_dragging())
// picking pass using rectangle selection
_rectangular_selection_picking_pass();
else
// regular picking pass
_picking_pass();
}
// draw scene // draw scene
glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
@ -1654,6 +1669,9 @@ void GLCanvas3D::render()
_render_camera_target(); _render_camera_target();
#endif // ENABLE_SHOW_CAMERA_TARGET #endif // ENABLE_SHOW_CAMERA_TARGET
if (m_picking_enabled && m_rectangle_selection.is_dragging())
m_rectangle_selection.render(*this);
// draw overlays // draw overlays
_render_gizmos_overlay(); _render_gizmos_overlay();
_render_warning_texture(); _render_warning_texture();
@ -1666,9 +1684,26 @@ void GLCanvas3D::render()
if ((m_layers_editing.last_object_id >= 0) && (m_layers_editing.object_max_z() > 0.0f)) if ((m_layers_editing.last_object_id >= 0) && (m_layers_editing.object_max_z() > 0.0f))
m_layers_editing.render_overlay(*this); m_layers_editing.render_overlay(*this);
#if ENABLE_RENDER_STATISTICS
ImGuiWrapper& imgui = *wxGetApp().imgui();
imgui.set_next_window_bg_alpha(0.5f);
imgui.begin(std::string("Render statistics"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
imgui.text("Last frame: ");
ImGui::SameLine();
imgui.text(std::to_string(m_render_stats.last_frame));
ImGui::SameLine();
imgui.text(" ms");
imgui.end();
#endif // ENABLE_RENDER_STATISTICS
wxGetApp().imgui()->render(); wxGetApp().imgui()->render();
m_canvas->SwapBuffers(); m_canvas->SwapBuffers();
#if ENABLE_RENDER_STATISTICS
auto end_time = std::chrono::high_resolution_clock::now();
m_render_stats.last_frame = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count();
#endif // ENABLE_RENDER_STATISTICS
} }
void GLCanvas3D::select_all() void GLCanvas3D::select_all()
@ -2365,9 +2400,51 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
// m_canvas->HandleAsNavigationKey(evt); // XXX: Doesn't work in some cases / on Linux // m_canvas->HandleAsNavigationKey(evt); // XXX: Doesn't work in some cases / on Linux
post_event(SimpleEvent(EVT_GLCANVAS_TAB)); post_event(SimpleEvent(EVT_GLCANVAS_TAB));
} }
else if (keyCode == WXK_SHIFT)
{
if (m_picking_enabled && m_rectangle_selection.is_dragging())
{
_update_selection_from_hover();
m_rectangle_selection.stop_dragging();
m_mouse.ignore_left_up = true;
m_dirty = true;
}
// set_cursor(Standard);
}
else if (keyCode == WXK_ALT)
{
if (m_picking_enabled && m_rectangle_selection.is_dragging())
{
_update_selection_from_hover();
m_rectangle_selection.stop_dragging();
m_mouse.ignore_left_up = true;
m_dirty = true;
}
// set_cursor(Standard);
}
else if (keyCode == WXK_CONTROL)
m_dirty = true;
} }
else if (evt.GetEventType() == wxEVT_KEY_DOWN) { else if (evt.GetEventType() == wxEVT_KEY_DOWN) {
m_tab_down = keyCode == WXK_TAB && !evt.HasAnyModifiers(); m_tab_down = keyCode == WXK_TAB && !evt.HasAnyModifiers();
if (keyCode == WXK_SHIFT)
{
if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports))
{
m_mouse.ignore_left_up = false;
// set_cursor(Cross);
}
}
else if (keyCode == WXK_ALT)
{
if (m_picking_enabled && (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports))
{
m_mouse.ignore_left_up = false;
// set_cursor(Cross);
}
}
else if (keyCode == WXK_CONTROL)
m_dirty = true;
} }
} }
} }
@ -2486,6 +2563,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
m_mouse.set_start_position_3D_as_invalid(); m_mouse.set_start_position_3D_as_invalid();
m_mouse.set_start_position_2D_as_invalid(); m_mouse.set_start_position_2D_as_invalid();
m_mouse.dragging = false; m_mouse.dragging = false;
m_mouse.ignore_left_up = false;
m_dirty = true; m_dirty = true;
if (m_canvas->HasCapture()) if (m_canvas->HasCapture())
@ -2584,7 +2662,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
if (top_level_wnd && top_level_wnd->IsActive()) if (top_level_wnd && top_level_wnd->IsActive())
m_canvas->SetFocus(); m_canvas->SetFocus();
m_mouse.position = pos.cast<double>(); m_mouse.position = pos.cast<double>();
// 1) forces a frame render to ensure that m_hover_volume_id is updated even when the user right clicks while // 1) forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while
// the context menu is shown, ensuring it to disappear if the mouse is outside any volume and to // the context menu is shown, ensuring it to disappear if the mouse is outside any volume and to
// change the volume hover state if any is under the mouse // change the volume hover state if any is under the mouse
// 2) when switching between 3d view and preview the size of the canvas changes if the side panels are visible, // 2) when switching between 3d view and preview the size of the canvas changes if the side panels are visible,
@ -2624,26 +2702,35 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
m_dirty = true; m_dirty = true;
} }
} }
else if (evt.LeftDown() && (evt.ShiftDown() || evt.AltDown()) && m_picking_enabled)
{
if (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports)
{
m_rectangle_selection.start_dragging(m_mouse.position, evt.ShiftDown() ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect);
m_dirty = true;
}
}
else else
{ {
// Select volume in this 3D canvas. // Select volume in this 3D canvas.
// Don't deselect a volume if layer editing is enabled. We want the object to stay selected // Don't deselect a volume if layer editing is enabled. We want the object to stay selected
// during the scene manipulation. // during the scene manipulation.
if (m_picking_enabled && ((m_hover_volume_id != -1) || !is_layers_editing_enabled())) if (m_picking_enabled && (!m_hover_volume_idxs.empty() || !is_layers_editing_enabled()))
{ {
if (evt.LeftDown() && (m_hover_volume_id != -1)) if (evt.LeftDown() && !m_hover_volume_idxs.empty())
{ {
bool already_selected = m_selection.contains_volume(m_hover_volume_id); int volume_idx = get_first_hover_volume_idx();
bool already_selected = m_selection.contains_volume(volume_idx);
bool ctrl_down = evt.CmdDown(); bool ctrl_down = evt.CmdDown();
Selection::IndicesList curr_idxs = m_selection.get_volume_idxs(); Selection::IndicesList curr_idxs = m_selection.get_volume_idxs();
if (already_selected && ctrl_down) if (already_selected && ctrl_down)
m_selection.remove(m_hover_volume_id); m_selection.remove(volume_idx);
else else
{ {
m_selection.add(m_hover_volume_id, !ctrl_down, true); m_selection.add(volume_idx, !ctrl_down, true);
m_mouse.drag.move_requires_threshold = !already_selected; m_mouse.drag.move_requires_threshold = !already_selected;
if (already_selected) if (already_selected)
m_mouse.set_move_start_threshold_position_2D_as_invalid(); m_mouse.set_move_start_threshold_position_2D_as_invalid();
@ -2651,6 +2738,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
m_mouse.drag.move_start_threshold_position_2D = pos; m_mouse.drag.move_start_threshold_position_2D = pos;
} }
// propagate event through callback
if (curr_idxs != m_selection.get_volume_idxs()) if (curr_idxs != m_selection.get_volume_idxs())
{ {
m_gizmos.refresh_on_off_state(m_selection); m_gizmos.refresh_on_off_state(m_selection);
@ -2661,18 +2749,18 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
} }
} }
// propagate event through callback if (!m_hover_volume_idxs.empty())
if (m_hover_volume_id != -1)
{ {
if (evt.LeftDown() && m_moving_enabled && (m_mouse.drag.move_volume_idx == -1)) if (evt.LeftDown() && m_moving_enabled && (m_mouse.drag.move_volume_idx == -1))
{ {
// Only accept the initial position, if it is inside the volume bounding box. // Only accept the initial position, if it is inside the volume bounding box.
BoundingBoxf3 volume_bbox = m_volumes.volumes[m_hover_volume_id]->transformed_bounding_box(); int volume_idx = get_first_hover_volume_idx();
BoundingBoxf3 volume_bbox = m_volumes.volumes[volume_idx]->transformed_bounding_box();
volume_bbox.offset(1.0); volume_bbox.offset(1.0);
if (volume_bbox.contains(m_mouse.scene_position)) if (volume_bbox.contains(m_mouse.scene_position))
{ {
// The dragging operation is initiated. // The dragging operation is initiated.
m_mouse.drag.move_volume_idx = m_hover_volume_id; m_mouse.drag.move_volume_idx = volume_idx;
m_selection.start_dragging(); m_selection.start_dragging();
m_mouse.drag.start_position_3D = m_mouse.scene_position; m_mouse.drag.start_position_3D = m_mouse.scene_position;
m_moving = true; m_moving = true;
@ -2689,7 +2777,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
Vec3d cur_pos = m_mouse.drag.start_position_3D; Vec3d cur_pos = m_mouse.drag.start_position_3D;
// we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag
if (m_selection.contains_volume(m_hover_volume_id)) if (m_selection.contains_volume(get_first_hover_volume_idx()))
{ {
if (m_camera.get_theta() == 90.0f) if (m_camera.get_theta() == 90.0f)
{ {
@ -2727,10 +2815,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
m_regenerate_volumes = false; m_regenerate_volumes = false;
m_selection.translate(cur_pos - m_mouse.drag.start_position_3D); m_selection.translate(cur_pos - m_mouse.drag.start_position_3D);
wxGetApp().obj_manipul()->set_dirty(); wxGetApp().obj_manipul()->set_dirty();
m_dirty = true; m_dirty = true;
} }
} }
else if (evt.Dragging() && evt.LeftIsDown() && m_picking_enabled && m_rectangle_selection.is_dragging())
{
m_rectangle_selection.dragging(pos.cast<double>());
m_dirty = true;
}
else if (evt.Dragging()) else if (evt.Dragging())
{ {
m_mouse.dragging = true; m_mouse.dragging = true;
@ -2744,10 +2836,11 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
else if (evt.LeftIsDown()) else if (evt.LeftIsDown())
{ {
// if dragging over blank area with left button, rotate // if dragging over blank area with left button, rotate
if ((m_hover_volume_id == -1) && m_mouse.is_start_position_3D_defined()) if (m_hover_volume_idxs.empty() && m_mouse.is_start_position_3D_defined())
{ {
const Vec3d& orig = m_mouse.drag.start_position_3D; const Vec3d& orig = m_mouse.drag.start_position_3D;
m_camera.phi += (((float)pos(0) - (float)orig(0)) * TRACKBALLSIZE); float sign = m_camera.inverted_phi ? -1.0f : 1.0f;
m_camera.phi += sign * ((float)pos(0) - (float)orig(0)) * TRACKBALLSIZE;
m_camera.set_theta(m_camera.get_theta() - ((float)pos(1) - (float)orig(1)) * TRACKBALLSIZE, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA); m_camera.set_theta(m_camera.get_theta() - ((float)pos(1) - (float)orig(1)) * TRACKBALLSIZE, wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA);
m_dirty = true; m_dirty = true;
} }
@ -2786,7 +2879,14 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
// of the scene with the background processing data should be performed. // of the scene with the background processing data should be performed.
post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED));
} }
else if (evt.LeftUp() && !m_mouse.dragging && (m_hover_volume_id == -1) && !is_layers_editing_enabled()) else if (evt.LeftUp() && m_picking_enabled && m_rectangle_selection.is_dragging())
{
if (evt.ShiftDown() || evt.AltDown())
_update_selection_from_hover();
m_rectangle_selection.stop_dragging();
}
else if (evt.LeftUp() && !m_mouse.ignore_left_up && !m_mouse.dragging && m_hover_volume_idxs.empty() && !is_layers_editing_enabled())
{ {
// deselect and propagate event through callback // deselect and propagate event through callback
if (!evt.ShiftDown() && m_picking_enabled) if (!evt.ShiftDown() && m_picking_enabled)
@ -2799,21 +2899,24 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
} }
} }
else if (evt.LeftUp() && m_mouse.dragging)
// Flips X mouse deltas if bed is upside down
m_camera.inverted_phi = (m_camera.get_dir_up()(2) < 0.0);
else if (evt.RightUp()) else if (evt.RightUp())
{ {
m_mouse.position = pos.cast<double>(); m_mouse.position = pos.cast<double>();
// forces a frame render to ensure that m_hover_volume_id is updated even when the user right clicks while // forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while
// the context menu is already shown // the context menu is already shown
render(); render();
if (m_hover_volume_id != -1) if (!m_hover_volume_idxs.empty())
{ {
// if right clicking on volume, propagate event through callback (shows context menu) // if right clicking on volume, propagate event through callback (shows context menu)
if (m_volumes.volumes[m_hover_volume_id]->hover int volume_idx = get_first_hover_volume_idx();
&& !m_volumes.volumes[m_hover_volume_id]->is_wipe_tower // no context menu for the wipe tower if (!m_volumes.volumes[volume_idx]->is_wipe_tower // no context menu for the wipe tower
&& m_gizmos.get_current_type() != GLGizmosManager::SlaSupports) // disable context menu when the gizmo is open && m_gizmos.get_current_type() != GLGizmosManager::SlaSupports) // disable context menu when the gizmo is open
{ {
// forces the selection of the volume // forces the selection of the volume
m_selection.add(m_hover_volume_id); m_selection.add(volume_idx);
m_gizmos.refresh_on_off_state(m_selection); m_gizmos.refresh_on_off_state(m_selection);
post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
m_gizmos.update_data(*this); m_gizmos.update_data(*this);
@ -3213,6 +3316,20 @@ double GLCanvas3D::get_size_proportional_to_max_bed_size(double factor) const
return factor * m_bed.get_bounding_box().max_size(); return factor * m_bed.get_bounding_box().max_size();
} }
void GLCanvas3D::set_cursor(ECursorType type)
{
if ((m_canvas != nullptr) && (m_cursor_type != type))
{
switch (type)
{
case Standard: { m_canvas->SetCursor(*wxSTANDARD_CURSOR); break; }
case Cross: { m_canvas->SetCursor(*wxCROSS_CURSOR); break; }
}
m_cursor_type = type;
}
}
void GLCanvas3D::msw_rescale() void GLCanvas3D::msw_rescale()
{ {
m_warning_texture.msw_rescale(*this); m_warning_texture.msw_rescale(*this);
@ -3391,7 +3508,7 @@ bool GLCanvas3D::_init_toolbar()
item.name = "layersediting"; item.name = "layersediting";
#if ENABLE_SVG_ICONS #if ENABLE_SVG_ICONS
item.icon_filename = "layers.svg"; item.icon_filename = "layers_white.svg";
#endif // ENABLE_SVG_ICONS #endif // ENABLE_SVG_ICONS
item.tooltip = GUI::L_str("Layers editing"); item.tooltip = GUI::L_str("Layers editing");
item.sprite_id = 10; item.sprite_id = 10;
@ -3583,10 +3700,10 @@ void GLCanvas3D::_refresh_if_shown_on_screen()
void GLCanvas3D::_picking_pass() const void GLCanvas3D::_picking_pass() const
{ {
const Vec2d& pos = m_mouse.position; if (m_picking_enabled && !m_mouse.dragging && (m_mouse.position != Vec2d(DBL_MAX, DBL_MAX)))
if (m_picking_enabled && !m_mouse.dragging && (pos != Vec2d(DBL_MAX, DBL_MAX)))
{ {
m_hover_volume_idxs.clear();
// Render the object for picking. // Render the object for picking.
// FIXME This cannot possibly work in a multi - sampled context as the color gets mangled by the anti - aliasing. // FIXME This cannot possibly work in a multi - sampled context as the color gets mangled by the anti - aliasing.
// Better to use software ray - casting on a bounding - box hierarchy. // Better to use software ray - casting on a bounding - box hierarchy.
@ -3617,27 +3734,98 @@ void GLCanvas3D::_picking_pass() const
GLubyte color[4] = { 0, 0, 0, 0 }; GLubyte color[4] = { 0, 0, 0, 0 };
const Size& cnv_size = get_canvas_size(); const Size& cnv_size = get_canvas_size();
bool inside = (0 <= pos(0)) && (pos(0) < cnv_size.get_width()) && (0 <= pos(1)) && (pos(1) < cnv_size.get_height()); bool inside = (0 <= m_mouse.position(0)) && (m_mouse.position(0) < cnv_size.get_width()) && (0 <= m_mouse.position(1)) && (m_mouse.position(1) < cnv_size.get_height());
if (inside) if (inside)
{ {
glsafe(::glReadPixels(pos(0), cnv_size.get_height() - pos(1) - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color)); glsafe(::glReadPixels(m_mouse.position(0), cnv_size.get_height() - m_mouse.position(1) - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color));
volume_id = color[0] + color[1] * 256 + color[2] * 256 * 256; volume_id = color[0] + (color[1] << 8) + (color[2] << 16);
} }
if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size())) if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size()))
{ {
m_hover_volume_id = volume_id; m_hover_volume_idxs.push_back(volume_id);
m_gizmos.set_hover_id(-1); m_gizmos.set_hover_id(-1);
} }
else else
{
m_hover_volume_id = -1;
m_gizmos.set_hover_id(inside && volume_id <= GLGizmoBase::BASE_ID ? (GLGizmoBase::BASE_ID - volume_id) : -1); m_gizmos.set_hover_id(inside && volume_id <= GLGizmoBase::BASE_ID ? (GLGizmoBase::BASE_ID - volume_id) : -1);
}
_update_volumes_hover_state(); _update_volumes_hover_state();
} }
} }
void GLCanvas3D::_rectangular_selection_picking_pass() const
{
m_gizmos.set_hover_id(-1);
std::set<int> idxs;
if (m_picking_enabled)
{
if (m_multisample_allowed)
glsafe(::glDisable(GL_MULTISAMPLE));
glsafe(::glDisable(GL_BLEND));
glsafe(::glEnable(GL_DEPTH_TEST));
glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
_render_volumes_for_picking();
if (m_multisample_allowed)
glsafe(::glEnable(GL_MULTISAMPLE));
int width = std::max((int)m_rectangle_selection.get_width(), 1);
int height = std::max((int)m_rectangle_selection.get_height(), 1);
int px_count = width * height;
int left = (int)m_rectangle_selection.get_left();
int top = get_canvas_size().get_height() - (int)m_rectangle_selection.get_top();
if ((left >= 0) && (top >= 0))
{
#define USE_PARALLEL 1
#if USE_PARALLEL
struct Pixel
{
std::array<GLubyte, 4> data;
int id() const { return data[0] + (data[1] << 8) + (data[2] << 16); }
};
std::vector<Pixel> frame(px_count);
glsafe(::glReadPixels(left, top, width, height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)frame.data()));
tbb::spin_mutex mutex;
tbb::parallel_for(tbb::blocked_range<size_t>(0, frame.size(), (size_t)width),
[this, &frame, &idxs, &mutex](const tbb::blocked_range<size_t>& range) {
for (size_t i = range.begin(); i < range.end(); ++i)
{
int volume_id = frame[i].id();
if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size()))
{
mutex.lock();
idxs.insert(volume_id);
mutex.unlock();
}
}
}
);
#else
std::vector<GLubyte> frame(4 * px_count);
glsafe(::glReadPixels(left, top, width, height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)frame.data()));
for (int i = 0; i < px_count; ++i)
{
int px_id = 4 * i;
int volume_id = frame[px_id] + (frame[px_id + 1] << 8) + (frame[px_id + 2] << 16);
if ((0 <= volume_id) && (volume_id < (int)m_volumes.volumes.size()))
idxs.insert(volume_id);
}
#endif // USE_PARALLEL
}
}
m_hover_volume_idxs.assign(idxs.begin(), idxs.end());
_update_volumes_hover_state();
}
void GLCanvas3D::_render_background() const void GLCanvas3D::_render_background() const
{ {
glsafe(::glPushMatrix()); glsafe(::glPushMatrix());
@ -4123,24 +4311,93 @@ void GLCanvas3D::_update_volumes_hover_state() const
{ {
for (GLVolume* v : m_volumes.volumes) for (GLVolume* v : m_volumes.volumes)
{ {
v->hover = false; v->hover = GLVolume::HS_None;
} }
if (m_hover_volume_id == -1) if (m_hover_volume_idxs.empty())
return; return;
GLVolume* volume = m_volumes.volumes[m_hover_volume_id]; bool ctrl_pressed = wxGetKeyState(WXK_CONTROL); // additive select/deselect
if (volume->is_modifier) bool shift_pressed = wxGetKeyState(WXK_SHIFT); // select by rectangle
volume->hover = true; bool alt_pressed = wxGetKeyState(WXK_ALT); // deselect by rectangle
else
{
int object_idx = volume->object_idx();
int instance_idx = volume->instance_idx();
for (GLVolume* v : m_volumes.volumes) if (alt_pressed && (shift_pressed || ctrl_pressed))
{
// illegal combinations of keys
m_hover_volume_idxs.clear();
return;
}
bool selection_modifiers_only = m_selection.is_empty() || m_selection.is_any_modifier();
bool hover_modifiers_only = true;
for (int i : m_hover_volume_idxs)
{
if (!m_volumes.volumes[i]->is_modifier)
{ {
if ((v->object_idx() == object_idx) && (v->instance_idx() == instance_idx)) hover_modifiers_only = false;
v->hover = true; break;
}
}
std::set<std::pair<int, int>> hover_instances;
for (int i : m_hover_volume_idxs)
{
const GLVolume& v = *m_volumes.volumes[i];
hover_instances.insert(std::make_pair(v.object_idx(), v.instance_idx()));
}
bool hover_from_single_instance = hover_instances.size() == 1;
if (hover_modifiers_only && !hover_from_single_instance)
{
// do not allow to select volumes from different instances
m_hover_volume_idxs.clear();
return;
}
for (int i : m_hover_volume_idxs)
{
GLVolume& volume = *m_volumes.volumes[i];
if (volume.hover != GLVolume::HS_None)
continue;
bool deselect = volume.selected && ((ctrl_pressed && !shift_pressed) || alt_pressed);
// (volume->is_modifier && !selection_modifiers_only && !is_ctrl_pressed) -> allows hovering on selected modifiers belonging to selection of type Instance
bool select = (!volume.selected || (volume.is_modifier && !selection_modifiers_only && !ctrl_pressed)) && !alt_pressed;
if (select || deselect)
{
bool as_volume =
volume.is_modifier && hover_from_single_instance && !ctrl_pressed &&
(
(!deselect) ||
(deselect && !m_selection.is_single_full_instance() && (volume.object_idx() == m_selection.get_object_idx()) && (volume.instance_idx() == m_selection.get_instance_idx()))
);
if (as_volume)
{
if (deselect)
volume.hover = GLVolume::HS_Deselect;
else
volume.hover = GLVolume::HS_Select;
}
else
{
int object_idx = volume.object_idx();
int instance_idx = volume.instance_idx();
for (GLVolume* v : m_volumes.volumes)
{
if ((v->object_idx() == object_idx) && (v->instance_idx() == instance_idx))
{
if (deselect)
v->hover = GLVolume::HS_Deselect;
else
v->hover = GLVolume::HS_Select;
}
}
}
} }
} }
} }
@ -5419,6 +5676,55 @@ void GLCanvas3D::_resize_toolbars() const
} }
#endif // !ENABLE_SVG_ICONS #endif // !ENABLE_SVG_ICONS
void GLCanvas3D::_update_selection_from_hover()
{
bool ctrl_pressed = wxGetKeyState(WXK_CONTROL);
if (m_hover_volume_idxs.empty())
{
if (!ctrl_pressed && (m_rectangle_selection.get_state() == GLSelectionRectangle::Select))
m_selection.clear();
return;
}
GLSelectionRectangle::EState state = m_rectangle_selection.get_state();
bool hover_modifiers_only = true;
for (int i : m_hover_volume_idxs)
{
if (!m_volumes.volumes[i]->is_modifier)
{
hover_modifiers_only = false;
break;
}
}
if ((state == GLSelectionRectangle::Select) && !ctrl_pressed)
m_selection.clear();
for (int i : m_hover_volume_idxs)
{
if (state == GLSelectionRectangle::Select)
{
if (hover_modifiers_only)
{
const GLVolume& v = *m_volumes.volumes[i];
m_selection.add_volume(v.object_idx(), v.volume_idx(), v.instance_idx(), false);
}
else
m_selection.add(i, false);
}
else
m_selection.remove(i);
}
m_gizmos.refresh_on_off_state(m_selection);
m_gizmos.update_data(*this);
post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
m_dirty = true;
}
const Print* GLCanvas3D::fff_print() const const Print* GLCanvas3D::fff_print() const
{ {
return (m_process == nullptr) ? nullptr : m_process->fff_print(); return (m_process == nullptr) ? nullptr : m_process->fff_print();

View File

@ -303,6 +303,7 @@ class GLCanvas3D
Vec2d position; Vec2d position;
Vec3d scene_position; Vec3d scene_position;
Drag drag; Drag drag;
bool ignore_left_up;
Mouse(); Mouse();
@ -319,7 +320,6 @@ class GLCanvas3D
} }
}; };
private:
struct SlaCap struct SlaCap
{ {
struct Triangles struct Triangles
@ -399,6 +399,23 @@ private:
void render(const GLCanvas3D& canvas) const; void render(const GLCanvas3D& canvas) const;
}; };
#if ENABLE_RENDER_STATISTICS
struct RenderStats
{
long long last_frame;
RenderStats() : last_frame(0) {}
};
#endif // ENABLE_RENDER_STATISTICS
public:
enum ECursorType : unsigned char
{
Standard,
Cross
};
private:
wxGLCanvas* m_canvas; wxGLCanvas* m_canvas;
wxGLContext* m_context; wxGLContext* m_context;
#if ENABLE_RETINA_GL #if ENABLE_RETINA_GL
@ -433,7 +450,7 @@ private:
bool m_initialized; bool m_initialized;
bool m_use_VBOs; bool m_use_VBOs;
bool m_apply_zoom_to_volumes_filter; bool m_apply_zoom_to_volumes_filter;
mutable int m_hover_volume_id; mutable std::vector<int> m_hover_volume_idxs;
bool m_warning_texture_enabled; bool m_warning_texture_enabled;
bool m_legend_texture_enabled; bool m_legend_texture_enabled;
bool m_picking_enabled; bool m_picking_enabled;
@ -443,6 +460,8 @@ private:
bool m_regenerate_volumes; bool m_regenerate_volumes;
bool m_moving; bool m_moving;
bool m_tab_down; bool m_tab_down;
ECursorType m_cursor_type;
GLSelectionRectangle m_rectangle_selection;
// Following variable is obsolete and it should be safe to remove it. // Following variable is obsolete and it should be safe to remove it.
// I just don't want to do it now before a release (Lukas Matena 24.3.2019) // I just don't want to do it now before a release (Lukas Matena 24.3.2019)
@ -454,6 +473,10 @@ private:
GCodePreviewVolumeIndex m_gcode_preview_volume_index; GCodePreviewVolumeIndex m_gcode_preview_volume_index;
#if ENABLE_RENDER_STATISTICS
RenderStats m_render_stats;
#endif // ENABLE_RENDER_STATISTICS
public: public:
GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar); GLCanvas3D(wxGLCanvas* canvas, Bed3D& bed, Camera& camera, GLToolbar& view_toolbar);
~GLCanvas3D(); ~GLCanvas3D();
@ -582,7 +605,7 @@ public:
float get_view_toolbar_height() const { return m_view_toolbar.get_height(); } float get_view_toolbar_height() const { return m_view_toolbar.get_height(); }
int get_move_volume_id() const { return m_mouse.drag.move_volume_idx; } int get_move_volume_id() const { return m_mouse.drag.move_volume_idx; }
int get_hover_volume_id() const { return m_hover_volume_id; } int get_first_hover_volume_idx() const { return m_hover_volume_idxs.empty() ? -1 : m_hover_volume_idxs.front(); }
// Returns the view ray line, in world coordinate, at the given mouse position. // Returns the view ray line, in world coordinate, at the given mouse position.
Linef3 mouse_ray(const Point& mouse_pos); Linef3 mouse_ray(const Point& mouse_pos);
@ -594,6 +617,7 @@ public:
double get_size_proportional_to_max_bed_size(double factor) const; double get_size_proportional_to_max_bed_size(double factor) const;
void set_cursor(ECursorType type);
void msw_rescale(); void msw_rescale();
private: private:
@ -612,6 +636,7 @@ private:
void _refresh_if_shown_on_screen(); void _refresh_if_shown_on_screen();
void _picking_pass() const; void _picking_pass() const;
void _rectangular_selection_picking_pass() const;
void _render_background() const; void _render_background() const;
void _render_bed(float theta) const; void _render_bed(float theta) const;
void _render_axes() const; void _render_axes() const;
@ -690,6 +715,9 @@ private:
void _resize_toolbars() const; void _resize_toolbars() const;
#endif // !ENABLE_SVG_ICONS #endif // !ENABLE_SVG_ICONS
// updates the selection from the content of m_hover_volume_idxs
void _update_selection_from_hover();
static std::vector<float> _parse_colors(const std::vector<std::string>& colors); static std::vector<float> _parse_colors(const std::vector<std::string>& colors);
public: public:

View File

@ -0,0 +1,117 @@
#include "GLSelectionRectangle.hpp"
#include "Camera.hpp"
#include "3DScene.hpp"
#include "GLCanvas3D.hpp"
#include <GL/glew.h>
namespace Slic3r {
namespace GUI {
void GLSelectionRectangle::start_dragging(const Vec2d& mouse_position, EState state)
{
if (is_dragging() || (state == Off))
return;
m_state = state;
m_start_corner = mouse_position;
m_end_corner = mouse_position;
}
void GLSelectionRectangle::dragging(const Vec2d& mouse_position)
{
if (!is_dragging())
return;
m_end_corner = mouse_position;
}
std::vector<unsigned int> GLSelectionRectangle::stop_dragging(const GLCanvas3D& canvas, const std::vector<Vec3d>& points)
{
std::vector<unsigned int> out;
if (!is_dragging())
return out;
m_state = Off;
const Camera& camera = canvas.get_camera();
const std::array<int, 4>& viewport = camera.get_viewport();
const Transform3d& modelview_matrix = camera.get_view_matrix();
const Transform3d& projection_matrix = camera.get_projection_matrix();
// bounding box created from the rectangle corners - will take care of order of the corners
BoundingBox rectangle(Points{ Point(m_start_corner.cast<int>()), Point(m_end_corner.cast<int>()) });
// Iterate over all points and determine whether they're in the rectangle.
for (unsigned int i = 0; i<points.size(); ++i) {
const Vec3d& point = points[i];
GLdouble out_x, out_y, out_z;
::gluProject((GLdouble)point(0), (GLdouble)point(1), (GLdouble)point(2), (GLdouble*)modelview_matrix.data(), (GLdouble*)projection_matrix.data(), (GLint*)viewport.data(), &out_x, &out_y, &out_z);
out_y = canvas.get_canvas_size().get_height() - out_y;
if (rectangle.contains(Point(out_x, out_y)))
out.push_back(i);
}
return out;
}
void GLSelectionRectangle::stop_dragging()
{
if (is_dragging())
m_state = Off;
}
void GLSelectionRectangle::render(const GLCanvas3D& canvas) const
{
if (!is_dragging())
return;
float zoom = canvas.get_camera().zoom;
float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f;
Size cnv_size = canvas.get_canvas_size();
float cnv_half_width = 0.5f * (float)cnv_size.get_width();
float cnv_half_height = 0.5f * (float)cnv_size.get_height();
if ((cnv_half_width == 0.0f) || (cnv_half_height == 0.0f))
return;
Vec2d start(m_start_corner(0) - cnv_half_width, cnv_half_height - m_start_corner(1));
Vec2d end(m_end_corner(0) - cnv_half_width, cnv_half_height - m_end_corner(1));
float left = (float)std::min(start(0), end(0)) * inv_zoom;
float top = (float)std::max(start(1), end(1)) * inv_zoom;
float right = (float)std::max(start(0), end(0)) * inv_zoom;
float bottom = (float)std::min(start(1), end(1)) * inv_zoom;
glsafe(::glLineWidth(1.5f));
float color[3];
color[0] = (m_state == Select) ? 0.3f : 1.0f;
color[1] = (m_state == Select) ? 1.0f : 0.3f;
color[2] = 0.3f;
glsafe(::glColor3fv(color));
glsafe(::glDisable(GL_DEPTH_TEST));
glsafe(::glPushMatrix());
glsafe(::glLoadIdentity());
glsafe(::glPushAttrib(GL_ENABLE_BIT));
glsafe(::glLineStipple(4, 0xAAAA));
glsafe(::glEnable(GL_LINE_STIPPLE));
::glBegin(GL_LINE_LOOP);
::glVertex2f((GLfloat)left, (GLfloat)bottom);
::glVertex2f((GLfloat)right, (GLfloat)bottom);
::glVertex2f((GLfloat)right, (GLfloat)top);
::glVertex2f((GLfloat)left, (GLfloat)top);
glsafe(::glEnd());
glsafe(::glPopAttrib());
glsafe(::glPopMatrix());
}
} // namespace GUI
} // namespace Slic3r

View File

@ -0,0 +1,56 @@
#ifndef slic3r_GLSelectionRectangle_hpp_
#define slic3r_GLSelectionRectangle_hpp_
#include "libslic3r/Point.hpp"
namespace Slic3r {
namespace GUI {
struct Camera;
class GLCanvas3D;
class GLSelectionRectangle {
public:
enum EState {
Off,
Select,
Deselect
};
// Initiates the rectangle.
void start_dragging(const Vec2d& mouse_position, EState state);
// To be called on mouse move.
void dragging(const Vec2d& mouse_position);
// Given a vector of points in world coordinates, the function returns indices of those
// that are in the rectangle. It then disables the rectangle.
std::vector<unsigned int> stop_dragging(const GLCanvas3D& canvas, const std::vector<Vec3d>& points);
// Disables the rectangle.
void stop_dragging();
void render(const GLCanvas3D& canvas) const;
bool is_dragging() const { return m_state != Off; }
EState get_state() const { return m_state; }
float get_width() const { return std::abs(m_start_corner(0) - m_end_corner(0)); }
float get_height() const { return std::abs(m_start_corner(1) - m_end_corner(1)); }
float get_left() const { return std::min(m_start_corner(0), m_end_corner(0)); }
float get_right() const { return std::max(m_start_corner(0), m_end_corner(0)); }
float get_top() const { return std::max(m_start_corner(1), m_end_corner(1)); }
float get_bottom() const { return std::min(m_start_corner(1), m_end_corner(1)); }
private:
EState m_state = Off;
Vec2d m_start_corner;
Vec2d m_end_corner;
};
} // namespace GUI
} // namespace Slic3r
#endif // slic3r_GLGizmoSlaSupports_hpp_

View File

@ -1165,7 +1165,7 @@ void ObjectList::append_menu_item_fix_through_netfabb(wxMenu* menu)
void ObjectList::append_menu_item_export_stl(wxMenu* menu) const void ObjectList::append_menu_item_export_stl(wxMenu* menu) const
{ {
append_menu_item(menu, wxID_ANY, _(L("Export as STL")) + dots, "", append_menu_item(menu, wxID_ANY, _(L("Export as STL")) + dots, "",
[](wxCommandEvent&) { wxGetApp().plater()->export_stl(true); }, "", menu); [](wxCommandEvent&) { wxGetApp().plater()->export_stl(false, true); }, "", menu);
menu->AppendSeparator(); menu->AppendSeparator();
} }

View File

@ -100,7 +100,7 @@ void GLGizmoSlaSupports::on_render(const Selection& selection) const
if (m_quadric != nullptr && selection.is_from_single_instance()) if (m_quadric != nullptr && selection.is_from_single_instance())
render_points(selection, false); render_points(selection, false);
render_selection_rectangle(); m_selection_rectangle.render(m_parent);
render_clipping_plane(selection); render_clipping_plane(selection);
glsafe(::glDisable(GL_BLEND)); glsafe(::glDisable(GL_BLEND));
@ -240,52 +240,6 @@ void GLGizmoSlaSupports::render_clipping_plane(const Selection& selection) const
} }
void GLGizmoSlaSupports::render_selection_rectangle() const
{
if (m_selection_rectangle_status == srOff)
return;
glsafe(::glLineWidth(1.5f));
float render_color[3] = {0.f, 1.f, 0.f};
if (m_selection_rectangle_status == srDeselect) {
render_color[0] = 1.f;
render_color[1] = 0.3f;
render_color[2] = 0.3f;
}
glsafe(::glColor3fv(render_color));
glsafe(::glPushAttrib(GL_TRANSFORM_BIT)); // remember current MatrixMode
glsafe(::glMatrixMode(GL_MODELVIEW)); // cache modelview matrix and set to identity
glsafe(::glPushMatrix());
glsafe(::glLoadIdentity());
glsafe(::glMatrixMode(GL_PROJECTION)); // cache projection matrix and set to identity
glsafe(::glPushMatrix());
glsafe(::glLoadIdentity());
glsafe(::glOrtho(0.f, m_canvas_width, m_canvas_height, 0.f, -1.f, 1.f)); // set projection matrix so that world coords = window coords
// render the selection rectangle (window coordinates):
glsafe(::glPushAttrib(GL_ENABLE_BIT));
glsafe(::glLineStipple(4, 0xAAAA));
glsafe(::glEnable(GL_LINE_STIPPLE));
::glBegin(GL_LINE_LOOP);
::glVertex3f((GLfloat)m_selection_rectangle_start_corner(0), (GLfloat)m_selection_rectangle_start_corner(1), (GLfloat)0.5f);
::glVertex3f((GLfloat)m_selection_rectangle_end_corner(0), (GLfloat)m_selection_rectangle_start_corner(1), (GLfloat)0.5f);
::glVertex3f((GLfloat)m_selection_rectangle_end_corner(0), (GLfloat)m_selection_rectangle_end_corner(1), (GLfloat)0.5f);
::glVertex3f((GLfloat)m_selection_rectangle_start_corner(0), (GLfloat)m_selection_rectangle_end_corner(1), (GLfloat)0.5f);
glsafe(::glEnd());
glsafe(::glPopAttrib());
glsafe(::glPopMatrix()); // restore former projection matrix
glsafe(::glMatrixMode(GL_MODELVIEW));
glsafe(::glPopMatrix()); // restore former modelview matrix
glsafe(::glPopAttrib()); // restore former MatrixMode
}
void GLGizmoSlaSupports::on_render_for_picking(const Selection& selection) const void GLGizmoSlaSupports::on_render_for_picking(const Selection& selection) const
{ {
glsafe(::glEnable(GL_DEPTH_TEST)); glsafe(::glEnable(GL_DEPTH_TEST));
@ -513,11 +467,7 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
if (action == SLAGizmoEventType::LeftDown && (shift_down || alt_down || control_down)) { if (action == SLAGizmoEventType::LeftDown && (shift_down || alt_down || control_down)) {
if (m_hover_id == -1) { if (m_hover_id == -1) {
if (shift_down || alt_down) { if (shift_down || alt_down) {
m_selection_rectangle_status = shift_down ? srSelect : srDeselect; m_selection_rectangle.start_dragging(mouse_position, shift_down ? GLSelectionRectangle::Select : GLSelectionRectangle::Deselect);
m_selection_rectangle_start_corner = mouse_position;
m_selection_rectangle_end_corner = mouse_position;
m_canvas_width = m_parent.get_canvas_size().get_width();
m_canvas_height = m_parent.get_canvas_size().get_height();
} }
} }
else { else {
@ -533,7 +483,7 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
} }
// left down without selection rectangle - place point on the mesh: // left down without selection rectangle - place point on the mesh:
if (action == SLAGizmoEventType::LeftDown && m_selection_rectangle_status == srOff && !shift_down) { if (action == SLAGizmoEventType::LeftDown && !m_selection_rectangle.is_dragging() && !shift_down) {
// If any point is in hover state, this should initiate its move - return control back to GLCanvas: // If any point is in hover state, this should initiate its move - return control back to GLCanvas:
if (m_hover_id != -1) if (m_hover_id != -1)
return false; return false;
@ -558,38 +508,36 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
} }
// left up with selection rectangle - select points inside the rectangle: // left up with selection rectangle - select points inside the rectangle:
if ((action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::ShiftUp || action == SLAGizmoEventType::AltUp) && m_selection_rectangle_status != srOff) { if ((action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::ShiftUp || action == SLAGizmoEventType::AltUp) && m_selection_rectangle.is_dragging()) {
const Transform3d& instance_matrix = m_model_object->instances[m_active_instance]->get_transformation().get_matrix(); // Is this a selection or deselection rectangle?
const Camera& camera = m_parent.get_camera(); GLSelectionRectangle::EState rectangle_status = m_selection_rectangle.get_state();
const std::array<int, 4>& viewport = camera.get_viewport();
const Transform3d& modelview_matrix = camera.get_view_matrix();
const Transform3d& projection_matrix = camera.get_projection_matrix();
// First collect positions of all the points in world coordinates.
const Transform3d& instance_matrix = m_model_object->instances[m_active_instance]->get_transformation().get_matrix();
std::vector<Vec3d> points;
for (unsigned int i=0; i<m_editing_mode_cache.size(); ++i) {
const sla::SupportPoint &support_point = m_editing_mode_cache[i].support_point;
points.push_back(instance_matrix * support_point.pos.cast<double>());
points.back()(2) += m_z_shift;
}
// Now ask the rectangle which of the points are inside.
const Camera& camera = m_parent.get_camera();
std::vector<unsigned int> selected_idxs = m_selection_rectangle.stop_dragging(m_parent, points);
// we'll recover current look direction (in world coords) and transform it to model coords.
const Selection& selection = m_parent.get_selection(); const Selection& selection = m_parent.get_selection();
const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin()); const GLVolume* volume = selection.get_volume(*selection.get_volume_idxs().begin());
// bounding box created from the rectangle corners - will take care of order of the corners
BoundingBox rectangle(Points{Point(m_selection_rectangle_start_corner.cast<int>()), Point(m_selection_rectangle_end_corner.cast<int>())});
const Transform3d& instance_matrix_no_translation_no_scaling = volume->get_instance_transformation().get_matrix(true,false,true); const Transform3d& instance_matrix_no_translation_no_scaling = volume->get_instance_transformation().get_matrix(true,false,true);
// we'll recover current look direction from the modelview matrix (in world coords)...
Vec3f direction_to_camera = camera.get_dir_forward().cast<float>(); Vec3f direction_to_camera = camera.get_dir_forward().cast<float>();
// ...and transform it to model coords.
Vec3f direction_to_camera_mesh = (instance_matrix_no_translation_no_scaling.inverse().cast<float>() * direction_to_camera).normalized().eval(); Vec3f direction_to_camera_mesh = (instance_matrix_no_translation_no_scaling.inverse().cast<float>() * direction_to_camera).normalized().eval();
Vec3f scaling = volume->get_instance_scaling_factor().cast<float>(); Vec3f scaling = volume->get_instance_scaling_factor().cast<float>();
direction_to_camera_mesh = Vec3f(direction_to_camera_mesh(0)*scaling(0), direction_to_camera_mesh(1)*scaling(1), direction_to_camera_mesh(2)*scaling(2)); direction_to_camera_mesh = Vec3f(direction_to_camera_mesh(0)*scaling(0), direction_to_camera_mesh(1)*scaling(1), direction_to_camera_mesh(2)*scaling(2));
// Iterate over all points, check if they're in the rectangle and if so, check that they are not obscured by the mesh: // Iterate over all points in the rectangle and check that they are neither clipped by the
for (unsigned int i=0; i<m_editing_mode_cache.size(); ++i) { // clipping plane nor obscured by the mesh.
for (const unsigned int i : selected_idxs) {
const sla::SupportPoint &support_point = m_editing_mode_cache[i].support_point; const sla::SupportPoint &support_point = m_editing_mode_cache[i].support_point;
Vec3f pos = instance_matrix.cast<float>() * support_point.pos; if (!is_point_clipped(support_point.pos.cast<double>())) {
pos(2) += m_z_shift;
GLdouble out_x, out_y, out_z;
::gluProject((GLdouble)pos(0), (GLdouble)pos(1), (GLdouble)pos(2), (GLdouble*)modelview_matrix.data(), (GLdouble*)projection_matrix.data(), (GLint*)viewport.data(), &out_x, &out_y, &out_z);
out_y = m_canvas_height - out_y;
if (rectangle.contains(Point(out_x, out_y)) && !is_point_clipped(support_point.pos.cast<double>())) {
bool is_obscured = false; bool is_obscured = false;
// Cast a ray in the direction of the camera and look for intersection with the mesh: // Cast a ray in the direction of the camera and look for intersection with the mesh:
std::vector<igl::Hit> hits; std::vector<igl::Hit> hits;
@ -627,14 +575,13 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
} }
if (!is_obscured) { if (!is_obscured) {
if (m_selection_rectangle_status == srDeselect) if (rectangle_status == GLSelectionRectangle::Deselect)
unselect_point(i); unselect_point(i);
else else
select_point(i); select_point(i);
} }
} }
} }
m_selection_rectangle_status = srOff;
return true; return true;
} }
@ -652,9 +599,8 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
return true; // point has been placed and the button not released yet return true; // point has been placed and the button not released yet
// this prevents GLCanvas from starting scene rotation // this prevents GLCanvas from starting scene rotation
if (m_selection_rectangle_status != srOff) { if (m_selection_rectangle.is_dragging()) {
m_selection_rectangle_end_corner = mouse_position; m_selection_rectangle.dragging(mouse_position);
m_selection_rectangle_status = shift_down ? srSelect : srDeselect;
return true; return true;
} }

View File

@ -3,6 +3,7 @@
#include "GLGizmoBase.hpp" #include "GLGizmoBase.hpp"
#include "GLGizmos.hpp" #include "GLGizmos.hpp"
#include "slic3r/GUI/GLSelectionRectangle.hpp"
// There is an L function in igl that would be overridden by our localization macro - let's undefine it... // There is an L function in igl that would be overridden by our localization macro - let's undefine it...
#undef L #undef L
@ -67,13 +68,16 @@ public:
void delete_selected_points(bool force = false); void delete_selected_points(bool force = false);
ClippingPlane get_sla_clipping_plane() const; ClippingPlane get_sla_clipping_plane() const;
bool is_in_editing_mode() const { return m_editing_mode; }
bool is_selection_rectangle_dragging() const { return m_selection_rectangle.is_dragging(); }
private: private:
bool on_init(); bool on_init();
void on_update(const UpdateData& data, const Selection& selection); void on_update(const UpdateData& data, const Selection& selection);
virtual void on_render(const Selection& selection) const; virtual void on_render(const Selection& selection) const;
virtual void on_render_for_picking(const Selection& selection) const; virtual void on_render_for_picking(const Selection& selection) const;
void render_selection_rectangle() const; //void render_selection_rectangle() const;
void render_points(const Selection& selection, bool picking = false) const; void render_points(const Selection& selection, bool picking = false) const;
void render_clipping_plane(const Selection& selection) const; void render_clipping_plane(const Selection& selection) const;
bool is_mesh_update_necessary() const; bool is_mesh_update_necessary() const;
@ -91,20 +95,12 @@ private:
mutable Vec3d m_old_clipping_plane_normal; mutable Vec3d m_old_clipping_plane_normal;
mutable Vec3d m_clipping_plane_normal = Vec3d::Zero(); mutable Vec3d m_clipping_plane_normal = Vec3d::Zero();
enum SelectionRectangleStatus { GLSelectionRectangle m_selection_rectangle;
srOff = 0,
srSelect = 1,
srDeselect = 2
}m_selection_rectangle_status = srOff;
Vec2d m_selection_rectangle_start_corner;
Vec2d m_selection_rectangle_end_corner;
bool m_wait_for_up_event = false; bool m_wait_for_up_event = false;
bool m_unsaved_changes = false; // Are there unsaved changes in manual mode? bool m_unsaved_changes = false; // Are there unsaved changes in manual mode?
bool m_selection_empty = true; bool m_selection_empty = true;
EState m_old_state = Off; // to be able to see that the gizmo has just been closed (see on_set_state) EState m_old_state = Off; // to be able to see that the gizmo has just been closed (see on_set_state)
int m_canvas_width;
int m_canvas_height;
mutable std::unique_ptr<TriangleMeshSlicer> m_tms; mutable std::unique_ptr<TriangleMeshSlicer> m_tms;
mutable std::unique_ptr<TriangleMeshSlicer> m_supports_tms; mutable std::unique_ptr<TriangleMeshSlicer> m_supports_tms;

View File

@ -696,7 +696,7 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt, GLCanvas3D& canvas)
gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown()); gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), evt.ControlDown());
processed = true; processed = true;
} }
else if (evt.LeftUp() && (m_current == Flatten) && ((canvas.get_hover_volume_id() != -1) || grabber_contains_mouse())) else if (evt.LeftUp() && (m_current == Flatten) && ((canvas.get_first_hover_volume_idx() != -1) || grabber_contains_mouse()))
{ {
// to avoid to loose the selection when user clicks an object while the Flatten gizmo is active // to avoid to loose the selection when user clicks an object while the Flatten gizmo is active
processed = true; processed = true;
@ -846,13 +846,34 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt, GLCanvas3D& canvas)
if (evt.GetEventType() == wxEVT_KEY_UP) if (evt.GetEventType() == wxEVT_KEY_UP)
{ {
if ((m_current == SlaSupports) && (keyCode == WXK_SHIFT) && gizmo_event(SLAGizmoEventType::ShiftUp)) if (m_current == SlaSupports)
// shift has been just released - SLA gizmo might want to close rectangular selection. {
processed = true; GLGizmoSlaSupports* gizmo = reinterpret_cast<GLGizmoSlaSupports*>(get_current());
if ((m_current == SlaSupports) && (keyCode == WXK_ALT) && gizmo_event(SLAGizmoEventType::AltUp)) if (keyCode == WXK_SHIFT)
// alt has been just released - SLA gizmo might want to close rectangular selection. {
// shift has been just released - SLA gizmo might want to close rectangular selection.
if (gizmo_event(SLAGizmoEventType::ShiftUp) || (gizmo->is_in_editing_mode() && gizmo->is_selection_rectangle_dragging()))
processed = true;
}
else if (keyCode == WXK_ALT)
{
// alt has been just released - SLA gizmo might want to close rectangular selection.
if (gizmo_event(SLAGizmoEventType::AltUp) || (gizmo->is_in_editing_mode() && gizmo->is_selection_rectangle_dragging()))
processed = true;
}
}
// if (processed)
// canvas.set_cursor(GLCanvas3D::Standard);
}
else if (evt.GetEventType() == wxEVT_KEY_DOWN)
{
if ((m_current == SlaSupports) && ((keyCode == WXK_SHIFT) || (keyCode == WXK_ALT)) && reinterpret_cast<GLGizmoSlaSupports*>(get_current())->is_in_editing_mode())
{
// canvas.set_cursor(GLCanvas3D::Cross);
processed = true; processed = true;
}
} }
if (processed) if (processed)

View File

@ -14,6 +14,7 @@
#include "libslic3r/Print.hpp" #include "libslic3r/Print.hpp"
#include "libslic3r/Polygon.hpp" #include "libslic3r/Polygon.hpp"
#include "libslic3r/SLAPrint.hpp"
#include "Tab.hpp" #include "Tab.hpp"
#include "PresetBundle.hpp" #include "PresetBundle.hpp"
@ -205,12 +206,30 @@ void MainFrame::add_created_tab(Tab* panel)
bool MainFrame::can_save() const bool MainFrame::can_save() const
{ {
return (m_plater != nullptr) ? !m_plater->model().objects.empty() : false; return (m_plater != nullptr) && !m_plater->model().objects.empty();
} }
bool MainFrame::can_export_model() const bool MainFrame::can_export_model() const
{ {
return (m_plater != nullptr) ? !m_plater->model().objects.empty() : false; return (m_plater != nullptr) && !m_plater->model().objects.empty();
}
bool MainFrame::can_export_supports() const
{
if ((m_plater == nullptr) || (m_plater->printer_technology() != ptSLA) || m_plater->model().objects.empty())
return false;
bool can_export = false;
const PrintObjects& objects = m_plater->sla_print().objects();
for (const SLAPrintObject* object : objects)
{
if (object->has_mesh(slaposBasePool) || object->has_mesh(slaposSupportTree))
{
can_export = true;
break;
}
}
return can_export;
} }
bool MainFrame::can_export_gcode() const bool MainFrame::can_export_gcode() const
@ -243,17 +262,17 @@ bool MainFrame::can_change_view() const
bool MainFrame::can_select() const bool MainFrame::can_select() const
{ {
return (m_plater != nullptr) ? !m_plater->model().objects.empty() : false; return (m_plater != nullptr) && !m_plater->model().objects.empty();
} }
bool MainFrame::can_delete() const bool MainFrame::can_delete() const
{ {
return (m_plater != nullptr) ? !m_plater->is_selection_empty() : false; return (m_plater != nullptr) && !m_plater->is_selection_empty();
} }
bool MainFrame::can_delete_all() const bool MainFrame::can_delete_all() const
{ {
return (m_plater != nullptr) ? !m_plater->model().objects.empty() : false; return (m_plater != nullptr) && !m_plater->model().objects.empty();
} }
void MainFrame::on_dpi_changed(const wxRect &suggested_rect) void MainFrame::on_dpi_changed(const wxRect &suggested_rect)
@ -298,6 +317,16 @@ void MainFrame::on_dpi_changed(const wxRect &suggested_rect)
this->Maximize(is_maximized); this->Maximize(is_maximized);
} }
static std::string menu_icon(const std::string& icon_name)
{
#ifdef __WXMSW__
const std::string folder = "white\\";
#else
const std::string folder = "white/";
#endif
return wxGetApp().dark_mode_menus() ? folder+icon_name : icon_name;
}
void MainFrame::init_menubar() void MainFrame::init_menubar()
{ {
#ifdef __APPLE__ #ifdef __APPLE__
@ -308,40 +337,43 @@ void MainFrame::init_menubar()
wxMenu* fileMenu = new wxMenu; wxMenu* fileMenu = new wxMenu;
{ {
wxMenuItem* item_open = append_menu_item(fileMenu, wxID_ANY, _(L("&Open Project")) + dots + "\tCtrl+O", _(L("Open a project file")), wxMenuItem* item_open = append_menu_item(fileMenu, wxID_ANY, _(L("&Open Project")) + dots + "\tCtrl+O", _(L("Open a project file")),
[this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, "open"); [this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, menu_icon("open"));
wxMenuItem* item_save = append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")), wxMenuItem* item_save = append_menu_item(fileMenu, wxID_ANY, _(L("&Save Project")) + "\tCtrl+S", _(L("Save current project file")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename())); }, "save"); [this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(into_path(m_plater->get_project_filename())); }, menu_icon("save"));
wxMenuItem* item_save_as = append_menu_item(fileMenu, wxID_ANY, _(L("Save Project &as")) + dots + "\tCtrl+Alt+S", _(L("Save current project file as")), wxMenuItem* item_save_as = append_menu_item(fileMenu, wxID_ANY, _(L("Save Project &as")) + dots + "\tCtrl+Alt+S", _(L("Save current project file as")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(); }, "save"); [this](wxCommandEvent&) { if (m_plater) m_plater->export_3mf(); }, menu_icon("save"));
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();
wxMenu* import_menu = new wxMenu(); wxMenu* import_menu = new wxMenu();
wxMenuItem* item_import_model = append_menu_item(import_menu, wxID_ANY, _(L("Import STL/OBJ/AM&F/3MF")) + dots + "\tCtrl+I", _(L("Load a model")), wxMenuItem* item_import_model = append_menu_item(import_menu, wxID_ANY, _(L("Import STL/OBJ/AM&F/3MF")) + dots + "\tCtrl+I", _(L("Load a model")),
[this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, "import_plater"); [this](wxCommandEvent&) { if (m_plater) m_plater->add_model(); }, menu_icon("import_plater"));
import_menu->AppendSeparator(); import_menu->AppendSeparator();
append_menu_item(import_menu, wxID_ANY, _(L("Import &Config")) + dots + "\tCtrl+L", _(L("Load exported configuration file")), append_menu_item(import_menu, wxID_ANY, _(L("Import &Config")) + dots + "\tCtrl+L", _(L("Load exported configuration file")),
[this](wxCommandEvent&) { load_config_file(); }, "import_config"); [this](wxCommandEvent&) { load_config_file(); }, menu_icon("import_config"));
append_menu_item(import_menu, wxID_ANY, _(L("Import Config from &project")) + dots +"\tCtrl+Alt+L", _(L("Load configuration from project file")), append_menu_item(import_menu, wxID_ANY, _(L("Import Config from &project")) + dots +"\tCtrl+Alt+L", _(L("Load configuration from project file")),
[this](wxCommandEvent&) { if (m_plater) m_plater->extract_config_from_project(); }, "import_config"); [this](wxCommandEvent&) { if (m_plater) m_plater->extract_config_from_project(); }, menu_icon("import_config"));
import_menu->AppendSeparator(); import_menu->AppendSeparator();
append_menu_item(import_menu, wxID_ANY, _(L("Import Config &Bundle")) + dots, _(L("Load presets from a bundle")), append_menu_item(import_menu, wxID_ANY, _(L("Import Config &Bundle")) + dots, _(L("Load presets from a bundle")),
[this](wxCommandEvent&) { load_configbundle(); }, "import_config_bundle"); [this](wxCommandEvent&) { load_configbundle(); }, menu_icon("import_config_bundle"));
append_submenu(fileMenu, import_menu, wxID_ANY, _(L("&Import")), ""); append_submenu(fileMenu, import_menu, wxID_ANY, _(L("&Import")), "");
wxMenu* export_menu = new wxMenu(); wxMenu* export_menu = new wxMenu();
wxMenuItem* item_export_gcode = append_menu_item(export_menu, wxID_ANY, _(L("Export &G-code")) + dots +"\tCtrl+G", _(L("Export current plate as G-code")), wxMenuItem* item_export_gcode = append_menu_item(export_menu, wxID_ANY, _(L("Export &G-code")) + dots +"\tCtrl+G", _(L("Export current plate as G-code")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(); }, "export_gcode"); [this](wxCommandEvent&) { if (m_plater) m_plater->export_gcode(); }, menu_icon("export_gcode"));
m_changeable_menu_items.push_back(item_export_gcode);
export_menu->AppendSeparator(); export_menu->AppendSeparator();
wxMenuItem* item_export_stl = append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &STL")) + dots, _(L("Export current plate as STL")), wxMenuItem* item_export_stl = append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &STL")) + dots, _(L("Export current plate as STL")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, "export_plater"); [this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(); }, menu_icon("export_plater"));
wxMenuItem* item_export_stl_sla = append_menu_item(export_menu, wxID_ANY, _(L("Export plate as STL including supports")) + dots, _(L("Export current plate as STL including supports")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_stl(true); }, menu_icon("export_plater"));
wxMenuItem* item_export_amf = append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &AMF")) + dots, _(L("Export current plate as AMF")), wxMenuItem* item_export_amf = append_menu_item(export_menu, wxID_ANY, _(L("Export plate as &AMF")) + dots, _(L("Export current plate as AMF")),
[this](wxCommandEvent&) { if (m_plater) m_plater->export_amf(); }, "export_plater"); [this](wxCommandEvent&) { if (m_plater) m_plater->export_amf(); }, menu_icon("export_plater"));
export_menu->AppendSeparator(); export_menu->AppendSeparator();
append_menu_item(export_menu, wxID_ANY, _(L("Export &Config")) +dots +"\tCtrl+E", _(L("Export current configuration to file")), append_menu_item(export_menu, wxID_ANY, _(L("Export &Config")) +dots +"\tCtrl+E", _(L("Export current configuration to file")),
[this](wxCommandEvent&) { export_config(); }, "export_config"); [this](wxCommandEvent&) { export_config(); }, menu_icon("export_config"));
append_menu_item(export_menu, wxID_ANY, _(L("Export Config &Bundle")) + dots, _(L("Export all presets to file")), append_menu_item(export_menu, wxID_ANY, _(L("Export Config &Bundle")) + dots, _(L("Export all presets to file")),
[this](wxCommandEvent&) { export_configbundle(); }, "export_config_bundle"); [this](wxCommandEvent&) { export_configbundle(); }, menu_icon("export_config_bundle"));
append_submenu(fileMenu, export_menu, wxID_ANY, _(L("&Export")), ""); append_submenu(fileMenu, export_menu, wxID_ANY, _(L("&Export")), "");
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();
@ -369,22 +401,23 @@ void MainFrame::init_menubar()
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();
#endif #endif
m_menu_item_reslice_now = append_menu_item(fileMenu, wxID_ANY, _(L("(Re)Slice &Now")) + "\tCtrl+R", _(L("Start new slicing process")), m_menu_item_reslice_now = append_menu_item(fileMenu, wxID_ANY, _(L("(Re)Slice &Now")) + "\tCtrl+R", _(L("Start new slicing process")),
[this](wxCommandEvent&) { reslice_now(); }, "re_slice"); [this](wxCommandEvent&) { reslice_now(); }, menu_icon("re_slice"));
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();
append_menu_item(fileMenu, wxID_ANY, _(L("&Repair STL file")) + dots, _(L("Automatically repair an STL file")), append_menu_item(fileMenu, wxID_ANY, _(L("&Repair STL file")) + dots, _(L("Automatically repair an STL file")),
[this](wxCommandEvent&) { repair_stl(); }, "wrench"); [this](wxCommandEvent&) { repair_stl(); }, menu_icon("wrench"));
fileMenu->AppendSeparator(); fileMenu->AppendSeparator();
append_menu_item(fileMenu, wxID_EXIT, _(L("&Quit")), wxString::Format(_(L("Quit %s")), SLIC3R_APP_NAME), append_menu_item(fileMenu, wxID_EXIT, _(L("&Quit")), wxString::Format(_(L("Quit %s")), SLIC3R_APP_NAME),
[this](wxCommandEvent&) { Close(false); }); [this](wxCommandEvent&) { Close(false); });
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater != nullptr); }, item_open->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater != nullptr); }, item_open->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_save()); }, item_save->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_save()); }, item_save->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_save()); }, item_save_as->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_save()); }, item_save_as->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater != nullptr); }, item_import_model->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(m_plater != nullptr); }, item_import_model->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_export_gcode()); }, item_export_gcode->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_gcode()); }, item_export_gcode->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_export_model()); }, item_export_stl->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_model()); }, item_export_stl->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_export_model()); }, item_export_amf->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_supports()); }, item_export_stl_sla->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable((m_plater != nullptr) && can_slice()); }, m_menu_item_reslice_now->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_export_model()); }, item_export_amf->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_slice()); }, m_menu_item_reslice_now->GetId());
} }
#ifdef _MSC_VER #ifdef _MSC_VER
@ -409,19 +442,19 @@ void MainFrame::init_menubar()
wxString hotkey_delete = "Del"; wxString hotkey_delete = "Del";
#endif #endif
wxMenuItem* item_select_all = append_menu_item(editMenu, wxID_ANY, _(L("&Select all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A", _(L("Selects all objects")), wxMenuItem* item_select_all = append_menu_item(editMenu, wxID_ANY, _(L("&Select all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "A", _(L("Selects all objects")),
[this](wxCommandEvent&) { m_plater->select_all(); }, ""); [this](wxCommandEvent&) { if (m_plater != nullptr) m_plater->select_all(); }, "");
editMenu->AppendSeparator(); editMenu->AppendSeparator();
wxMenuItem* item_delete_sel = append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete, _(L("Deletes the current selection")), wxMenuItem* item_delete_sel = append_menu_item(editMenu, wxID_ANY, _(L("&Delete selected")) + sep + hotkey_delete, _(L("Deletes the current selection")),
[this](wxCommandEvent&) { m_plater->remove_selected(); }, "remove_menu"); [this](wxCommandEvent&) { m_plater->remove_selected(); }, menu_icon("remove_menu"));
wxMenuItem* item_delete_all = append_menu_item(editMenu, wxID_ANY, _(L("Delete &all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete, _(L("Deletes all objects")), wxMenuItem* item_delete_all = append_menu_item(editMenu, wxID_ANY, _(L("Delete &all")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + hotkey_delete, _(L("Deletes all objects")),
[this](wxCommandEvent&) { m_plater->reset(); }, "delete_all_menu"); [this](wxCommandEvent&) { m_plater->reset_with_confirm(); }, menu_icon("delete_all_menu"));
editMenu->AppendSeparator(); editMenu->AppendSeparator();
wxMenuItem* item_copy = append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C", _(L("Copy selection to clipboard")), wxMenuItem* item_copy = append_menu_item(editMenu, wxID_ANY, _(L("&Copy")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "C", _(L("Copy selection to clipboard")),
[this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, "copy_menu"); [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, menu_icon("copy_menu"));
wxMenuItem* item_paste = append_menu_item(editMenu, wxID_ANY, _(L("&Paste")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V", _(L("Paste clipboard")), wxMenuItem* item_paste = append_menu_item(editMenu, wxID_ANY, _(L("&Paste")) + sep + GUI::shortkey_ctrl_prefix() + sep_space + "V", _(L("Paste clipboard")),
[this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, "paste_menu"); [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, menu_icon("paste_menu"));
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_select()); }, item_select_all->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_select()); }, item_select_all->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_delete()); }, item_delete_sel->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_delete()); }, item_delete_sel->GetId());
@ -436,24 +469,25 @@ void MainFrame::init_menubar()
size_t tab_offset = 0; size_t tab_offset = 0;
if (m_plater) { if (m_plater) {
append_menu_item(windowMenu, wxID_HIGHEST + 1, _(L("&Plater Tab")) + "\tCtrl+1", _(L("Show the plater")), append_menu_item(windowMenu, wxID_HIGHEST + 1, _(L("&Plater Tab")) + "\tCtrl+1", _(L("Show the plater")),
[this](wxCommandEvent&) { select_tab(0); }, "plater"); [this](wxCommandEvent&) { select_tab(0); }, menu_icon("plater"));
tab_offset += 1; tab_offset += 1;
} }
if (tab_offset > 0) { if (tab_offset > 0) {
windowMenu->AppendSeparator(); windowMenu->AppendSeparator();
} }
append_menu_item(windowMenu, wxID_HIGHEST + 2, _(L("P&rint Settings Tab")) + "\tCtrl+2", _(L("Show the print settings")), append_menu_item(windowMenu, wxID_HIGHEST + 2, _(L("P&rint Settings Tab")) + "\tCtrl+2", _(L("Show the print settings")),
[this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 0); }, "cog"); [this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 0); }, menu_icon("cog"));
append_menu_item(windowMenu, wxID_HIGHEST + 3, _(L("&Filament Settings Tab")) + "\tCtrl+3", _(L("Show the filament settings")), wxMenuItem* item_material_tab = append_menu_item(windowMenu, wxID_HIGHEST + 3, _(L("&Filament Settings Tab")) + "\tCtrl+3", _(L("Show the filament settings")),
[this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 1); }, "spool.png"); [this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 1); }, menu_icon("spool"));
m_changeable_menu_items.push_back(item_material_tab);
append_menu_item(windowMenu, wxID_HIGHEST + 4, _(L("Print&er Settings Tab")) + "\tCtrl+4", _(L("Show the printer settings")), append_menu_item(windowMenu, wxID_HIGHEST + 4, _(L("Print&er Settings Tab")) + "\tCtrl+4", _(L("Show the printer settings")),
[this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 2); }, "printer"); [this, tab_offset](wxCommandEvent&) { select_tab(tab_offset + 2); }, menu_icon("printer"));
if (m_plater) { if (m_plater) {
windowMenu->AppendSeparator(); windowMenu->AppendSeparator();
wxMenuItem* item_3d = append_menu_item(windowMenu, wxID_HIGHEST + 5, _(L("3&D")) + "\tCtrl+5", _(L("Show the 3D editing view")), wxMenuItem* item_3d = append_menu_item(windowMenu, wxID_HIGHEST + 5, _(L("3&D")) + "\tCtrl+5", _(L("Show the 3D editing view")),
[this](wxCommandEvent&) { m_plater->select_view_3D("3D"); }, "editor_menu"); [this](wxCommandEvent&) { m_plater->select_view_3D("3D"); }, menu_icon("editor_menu"));
wxMenuItem* item_preview = append_menu_item(windowMenu, wxID_HIGHEST + 6, _(L("Pre&view")) + "\tCtrl+6", _(L("Show the 3D slices preview")), wxMenuItem* item_preview = append_menu_item(windowMenu, wxID_HIGHEST + 6, _(L("Pre&view")) + "\tCtrl+6", _(L("Show the 3D slices preview")),
[this](wxCommandEvent&) { m_plater->select_view_3D("Preview"); }, "preview_menu"); [this](wxCommandEvent&) { m_plater->select_view_3D("Preview"); }, menu_icon("preview_menu"));
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_3d->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_3d->GetId());
Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_preview->GetId()); Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { evt.Enable(can_change_view()); }, item_preview->GetId());
@ -474,7 +508,7 @@ void MainFrame::init_menubar()
windowMenu->AppendSeparator(); windowMenu->AppendSeparator();
append_menu_item(windowMenu, wxID_ANY, _(L("Print &Host Upload Queue")) + "\tCtrl+J", _(L("Display the Print Host Upload Queue window")), append_menu_item(windowMenu, wxID_ANY, _(L("Print &Host Upload Queue")) + "\tCtrl+J", _(L("Display the Print Host Upload Queue window")),
[this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, "upload_queue"); [this](wxCommandEvent&) { m_printhost_queue_dlg->Show(); }, menu_icon("upload_queue"));
} }
// View menu // View menu
@ -554,6 +588,19 @@ void MainFrame::init_menubar()
}, wxID_EXIT); }, wxID_EXIT);
} }
#endif #endif
if (plater()->printer_technology() == ptSLA)
update_menubar();
}
void MainFrame::update_menubar()
{
const bool is_fff = plater()->printer_technology() == ptFFF;
m_changeable_menu_items[miExport] ->SetItemLabel((is_fff ? _(L("Export &G-code")) : _(L("Export")) ) + dots + "\tCtrl+G");
m_changeable_menu_items[miMaterialTab] ->SetItemLabel((is_fff ? _(L("&Filament Settings Tab")) : _(L("Mate&rial Settings Tab"))) + "\tCtrl+3");
m_changeable_menu_items[miMaterialTab] ->SetBitmap(create_scaled_bitmap(this, menu_icon(is_fff ? "spool": "resin")));
} }
// To perform the "Quck Slice", "Quick Slice and Save As", "Repeat last Quick Slice" and "Slice to SVG". // To perform the "Quck Slice", "Quick Slice and Save As", "Repeat last Quick Slice" and "Slice to SVG".

View File

@ -63,6 +63,7 @@ class MainFrame : public DPIFrame
bool can_save() const; bool can_save() const;
bool can_export_model() const; bool can_export_model() const;
bool can_export_supports() const;
bool can_export_gcode() const; bool can_export_gcode() const;
bool can_slice() const; bool can_slice() const;
bool can_change_view() const; bool can_change_view() const;
@ -70,6 +71,16 @@ class MainFrame : public DPIFrame
bool can_delete() const; bool can_delete() const;
bool can_delete_all() const; bool can_delete_all() const;
// MenuBar items changeable in respect to printer technology
enum MenuItems
{ // FFF SLA
miExport = 0, // Export G-code Export
miMaterialTab, // Filament Settings Material Settings
};
// vector of a MenuBar items changeable in respect to printer technology
std::vector<wxMenuItem*> m_changeable_menu_items;
protected: protected:
virtual void on_dpi_changed(const wxRect &suggested_rect); virtual void on_dpi_changed(const wxRect &suggested_rect);
@ -83,6 +94,7 @@ public:
void create_preset_tabs(); void create_preset_tabs();
void add_created_tab(Tab* panel); void add_created_tab(Tab* panel);
void init_menubar(); void init_menubar();
void update_menubar();
void update_ui_from_settings(); void update_ui_from_settings();
bool is_loaded() const { return m_loaded; } bool is_loaded() const { return m_loaded; }

View File

@ -1447,7 +1447,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
// 3DScene/Toolbar: // 3DScene/Toolbar:
view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this); view3D_canvas->Bind(EVT_GLTOOLBAR_ADD, &priv::on_action_add, this);
view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE, [q](SimpleEvent&) { q->remove_selected(); });
view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [this](SimpleEvent&) { reset(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_DELETE_ALL, [q](SimpleEvent&) { q->reset_with_confirm(); });
view3D_canvas->Bind(EVT_GLTOOLBAR_ARRANGE, [this](SimpleEvent&) { arrange(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_ARRANGE, [this](SimpleEvent&) { arrange(); });
view3D_canvas->Bind(EVT_GLTOOLBAR_COPY, [q](SimpleEvent&) { q->copy_selection_to_clipboard(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_COPY, [q](SimpleEvent&) { q->copy_selection_to_clipboard(); });
view3D_canvas->Bind(EVT_GLTOOLBAR_PASTE, [q](SimpleEvent&) { q->paste_from_clipboard(); }); view3D_canvas->Bind(EVT_GLTOOLBAR_PASTE, [q](SimpleEvent&) { q->paste_from_clipboard(); });
@ -2925,7 +2925,7 @@ bool Plater::priv::init_common_menu(wxMenu* menu, const bool is_part/* = false*/
[this](wxCommandEvent&) { reload_from_disk(); }); [this](wxCommandEvent&) { reload_from_disk(); });
append_menu_item(menu, wxID_ANY, _(L("Export as STL")) + dots, _(L("Export the selected object as STL file")), append_menu_item(menu, wxID_ANY, _(L("Export as STL")) + dots, _(L("Export the selected object as STL file")),
[this](wxCommandEvent&) { q->export_stl(true); }); [this](wxCommandEvent&) { q->export_stl(false, true); });
menu->AppendSeparator(); menu->AppendSeparator();
} }
@ -3283,6 +3283,11 @@ void Plater::select_all() { p->select_all(); }
void Plater::remove(size_t obj_idx) { p->remove(obj_idx); } void Plater::remove(size_t obj_idx) { p->remove(obj_idx); }
void Plater::reset() { p->reset(); } void Plater::reset() { p->reset(); }
void Plater::reset_with_confirm()
{
if (wxMessageDialog((wxWindow*)this, _(L("All objects will be removed, continue ?")), _(L("Delete all")), wxYES_NO | wxYES_DEFAULT | wxCENTRE).ShowModal() == wxID_YES)
reset();
}
void Plater::delete_object_from_model(size_t obj_idx) { p->delete_object_from_model(obj_idx); } void Plater::delete_object_from_model(size_t obj_idx) { p->delete_object_from_model(obj_idx); }
@ -3432,7 +3437,7 @@ void Plater::export_gcode()
p->export_gcode(std::move(output_path), PrintHostJob()); p->export_gcode(std::move(output_path), PrintHostJob());
} }
void Plater::export_stl(bool selection_only) void Plater::export_stl(bool extended, bool selection_only)
{ {
if (p->model.objects.empty()) { return; } if (p->model.objects.empty()) { return; }
@ -3467,8 +3472,65 @@ void Plater::export_stl(bool selection_only)
} }
} }
else else
{
mesh = p->model.mesh(); mesh = p->model.mesh();
if (extended && (p->printer_technology == ptSLA))
{
const PrintObjects& objects = p->sla_print.objects();
for (const SLAPrintObject* object : objects)
{
const ModelObject* model_object = object->model_object();
Transform3d mesh_trafo_inv = object->trafo().inverse();
bool is_left_handed = object->is_left_handed();
TriangleMesh pad_mesh;
bool has_pad_mesh = object->has_mesh(slaposBasePool);
if (has_pad_mesh)
{
pad_mesh = object->get_mesh(slaposBasePool);
pad_mesh.transform(mesh_trafo_inv);
}
TriangleMesh supports_mesh;
bool has_supports_mesh = object->has_mesh(slaposSupportTree);
if (has_supports_mesh)
{
supports_mesh = object->get_mesh(slaposSupportTree);
supports_mesh.transform(mesh_trafo_inv);
}
const std::vector<SLAPrintObject::Instance>& obj_instances = object->instances();
for (const SLAPrintObject::Instance& obj_instance : obj_instances)
{
auto it = std::find_if(model_object->instances.begin(), model_object->instances.end(),
[&obj_instance](const ModelInstance *mi) { return mi->id() == obj_instance.instance_id; });
assert(it != model_object->instances.end());
if (it != model_object->instances.end())
{
int instance_idx = it - model_object->instances.begin();
const Transform3d& inst_transform = object->model_object()->instances[instance_idx]->get_transformation().get_matrix();
if (has_pad_mesh)
{
TriangleMesh inst_pad_mesh = pad_mesh;
inst_pad_mesh.transform(inst_transform, is_left_handed);
mesh.merge(inst_pad_mesh);
}
if (has_supports_mesh)
{
TriangleMesh inst_supports_mesh = supports_mesh;
inst_supports_mesh.transform(inst_transform, is_left_handed);
mesh.merge(inst_supports_mesh);
}
}
}
}
}
}
Slic3r::store_stl(path_u8.c_str(), &mesh, true); Slic3r::store_stl(path_u8.c_str(), &mesh, true);
p->statusbar()->set_status_text(wxString::Format(_(L("STL file exported to %s")), path)); p->statusbar()->set_status_text(wxString::Format(_(L("STL file exported to %s")), path));
} }
@ -3748,6 +3810,9 @@ void Plater::set_printer_technology(PrinterTechnology printer_technology)
p->label_btn_export = printer_technology == ptFFF ? L("Export G-code") : L("Export"); p->label_btn_export = printer_technology == ptFFF ? L("Export G-code") : L("Export");
p->label_btn_send = printer_technology == ptFFF ? L("Send G-code") : L("Send to printer"); p->label_btn_send = printer_technology == ptFFF ? L("Send G-code") : L("Send to printer");
if (wxGetApp().mainframe)
wxGetApp().mainframe->update_menubar();
} }
void Plater::changed_object(int obj_idx) void Plater::changed_object(int obj_idx)

View File

@ -153,6 +153,7 @@ public:
void select_all(); void select_all();
void remove(size_t obj_idx); void remove(size_t obj_idx);
void reset(); void reset();
void reset_with_confirm();
void delete_object_from_model(size_t obj_idx); void delete_object_from_model(size_t obj_idx);
void remove_selected(); void remove_selected();
void increase_instances(size_t num = 1); void increase_instances(size_t num = 1);
@ -163,7 +164,7 @@ public:
void cut(size_t obj_idx, size_t instance_idx, coordf_t z, bool keep_upper = true, bool keep_lower = true, bool rotate_lower = false); void cut(size_t obj_idx, size_t instance_idx, coordf_t z, bool keep_upper = true, bool keep_lower = true, bool rotate_lower = false);
void export_gcode(); void export_gcode();
void export_stl(bool selection_only = false); void export_stl(bool extended = false, bool selection_only = false);
void export_amf(); void export_amf();
void export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path()); void export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path());
void reslice(); void reslice();