This commit is contained in:
Ocraftyone 2025-12-23 16:58:00 -05:00 committed by GitHub
commit 779c65b03d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
169 changed files with 4590 additions and 1354 deletions

View file

@ -14346,7 +14346,7 @@ msgid ""
"\n"
"Using a non-zero value is useful if the printer is set up to print without a "
"prime line.\n"
"Final number of loops is not taken into account while arranging or "
"Final number of loops is not taking into account while arranging or "
"validating objects distance. Increase loop number in such case."
msgstr ""

Binary file not shown.

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M2.21,8.77c1.38.44,3.46.73,5.79.73,4.14,0,7.5-.9,7.5-2s-3.36-2-7.5-2S.5,6.4.5,7.5c0,.48.64.93,1.71,1.27" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="1.5" cy="7.5" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/><path d="M12,11.88c-.3-1.41-1.1-3.36-2.26-5.38C7.66,2.91,5.21.45,4.25,1s-.05,3.91,2.02,7.5,4.53,6.05,5.48,5.5c.42-.24.48-1.02.25-2.12" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="11.25" cy="13.13" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/><path d="M9.79,1.85c-1.07.97-2.36,2.63-3.52,4.65-2.07,3.59-2.97,6.94-2.02,7.5s3.41-1.91,5.48-5.5,2.97-6.94,2.02-7.5c-.42-.24-1.12.09-1.96.85" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="11.25" cy="1.87" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M10.2,13.8A20.875,20.875,0,0,1,6.376,8.5C4.305,4.673,3.353,1.124,4.25.572" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M1.781,6.381A18.541,18.541,0,0,1,8,5.5c4.142,0,7.5.9,7.5,2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M12.017,2.314A21.814,21.814,0,0,1,9.624,8.5c-2.071,3.826-4.477,6.48-5.374,5.927" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M15.5,7.5c0,1.1-3.358,2-7.5,2S.5,8.6.5,7.5c0-.414.472-.8,1.281-1.118" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M4.25,14.426c-.9-.552.055-4.1,2.126-7.927S10.853.02,11.75.572c.336.207.413.835.267,1.742" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M4.25.572c.9-.552,3.3,2.1,5.374,5.927s3.023,7.375,2.126,7.927c-.336.207-.885-.036-1.548-.624" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="12" cy="2.804" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="9.6" cy="13.196" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="2.5" cy="6.499" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

View file

@ -1 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 44 44"><rect x="19" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="20" y="15" width="1" height="14" style="fill:#009688;"/><rect x="21" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="22" y="15" width="1" height="14" style="fill:#009688;"/><rect x="23" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="24" y="15" width="1" height="14" style="fill:#009688;"/><rect x="25" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><line x1="26.5" y1="14" x2="26.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="18.5" y1="14" x2="18.5" y2="30" style="fill:none; stroke:#949494;"/><path d="M28.5,23v-9.5c0-1.66-1.34-3-3-3h-6c-1.66,0-3,1.34-3,3v9.5" style="fill:none; stroke:#949494;"/><path d="M15,23v11h15v-11h-15ZM21,26v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1Z" style="fill:#949494; opacity:.7;"/></svg>
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.88312 4.68555C5.88312 4.13326 6.33083 3.68555 6.88312 3.68555H13.5059C14.0582 3.68555 14.5059 4.13326 14.5059 4.68555V10.3887H5.88312V4.68555Z" stroke="#6B6B6B"/>
<rect x="3.8725" y="10.3887" width="12.7037" height="7.55371" rx="1.2" stroke="#6B6B6B"/>
<path d="M8.21991 5.65234C8.21991 5.3762 8.44377 5.15234 8.71991 5.15234H11.7288C12.005 5.15234 12.2288 5.3762 12.2288 5.65234V10.3887H8.21991V5.65234Z" stroke="#6B6B6B"/>
</svg>

Before

Width:  |  Height:  |  Size: 1 KiB

After

Width:  |  Height:  |  Size: 540 B

Before After
Before After

View file

@ -1 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="44" height="44" viewBox="0 0 44 44"><rect x="5" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="6" y="15" width="1" height="14" style="fill:#009688;"/><rect x="7" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="8" y="15" width="1" height="14" style="fill:#009688;"/><rect x="9" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="10" y="15" width="1" height="14" style="fill:#009688;"/><rect x="11" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="14" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="15" y="15" width="1" height="14" style="fill:#009688;"/><rect x="16" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="17" y="15" width="1" height="14" style="fill:#009688;"/><rect x="18" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="19" y="15" width="1" height="14" style="fill:#009688;"/><rect x="20" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="23" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="24" y="15" width="1" height="14" style="fill:#009688;"/><rect x="25" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="26" y="15" width="1" height="14" style="fill:#009688;"/><rect x="27" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="28" y="15" width="1" height="14" style="fill:#009688;"/><rect x="29" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="32" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="33" y="15" width="1" height="14" style="fill:#009688;"/><rect x="34" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="35" y="15" width="1" height="14" style="fill:#009688;"/><rect x="36" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><rect x="37" y="15" width="1" height="14" style="fill:#009688;"/><rect x="38" y="15" width="1" height="14" style="fill:#009688; opacity:.5;"/><line x1="39.5" y1="14" x2="39.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="31.5" y1="14" x2="31.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="30.5" y1="14" x2="30.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="22.5" y1="14" x2="22.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="21.5" y1="14" x2="21.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="13.5" y1="14" x2="13.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="12.5" y1="14" x2="12.5" y2="30" style="fill:none; stroke:#949494;"/><line x1="4.5" y1="14" x2="4.5" y2="30" style="fill:none; stroke:#949494;"/><path d="M41.5,23v-9.5c0-1.66-1.34-3-3-3H5.5c-1.66,0-3,1.34-3,3v9.5" style="fill:none; stroke:#949494;"/><path d="M39,23H1v11h42v-11h-4ZM7,26v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM16,26v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM25,26v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM34,26v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1Z" style="fill:#949494; opacity:.7;"/></svg>
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.26813 4.73877C4.26813 4.18648 4.71584 3.73877 5.26813 3.73877H15.2681C15.8204 3.73877 16.2681 4.18648 16.2681 4.73877V10.4419H4.26813V4.73877Z" stroke="#6B6B6B"/>
<rect x="2.00372" y="10.4419" width="16.5289" height="7.55371" rx="1.2" stroke="#6B6B6B"/>
<path d="M5.95978 6.13135C5.95978 5.85521 6.18364 5.63135 6.45978 5.63135H13.9891C14.2652 5.63135 14.4891 5.85521 14.4891 6.13135V10.4413H5.95978V6.13135Z" stroke="#6B6B6B"/>
<line x1="8.26813" y1="9.96484" x2="8.26813" y2="6.10772" stroke="#6B6B6B"/>
<line x1="10.3477" y1="9.96484" x2="10.3477" y2="6.10772" stroke="#6B6B6B"/>
<line x1="12.4274" y1="9.96484" x2="12.4274" y2="6.10772" stroke="#6B6B6B"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 775 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M2.21,8.77c1.38.44,3.46.73,5.79.73,4.14,0,7.5-.9,7.5-2s-3.36-2-7.5-2S.5,6.4.5,7.5c0,.48.64.93,1.71,1.27" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="1.5" cy="7.5" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/><path d="M12,11.88c-.3-1.41-1.1-3.36-2.26-5.38C7.66,2.91,5.21.45,4.25,1c-.96.55-.05,3.91,2.02,7.5s4.53,6.05,5.48,5.5c.42-.24.48-1.02.25-2.12" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="11.25" cy="13.13" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/><path d="M9.79,1.85c-1.07.97-2.36,2.63-3.52,4.65-2.07,3.59-2.97,6.94-2.02,7.5.95.56,3.41-1.91,5.48-5.5s2.97-6.94,2.02-7.5c-.42-.24-1.12.09-1.96.85" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="11.25" cy="1.87" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M10.2,13.8A20.875,20.875,0,0,1,6.376,8.5C4.305,4.673,3.353,1.124,4.25.572" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M1.781,6.381A18.541,18.541,0,0,1,8,5.5c4.142,0,7.5.9,7.5,2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M12.017,2.314A21.814,21.814,0,0,1,9.624,8.5c-2.071,3.826-4.477,6.48-5.374,5.927" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M15.5,7.5c0,1.1-3.358,2-7.5,2S.5,8.6.5,7.5c0-.414.472-.8,1.281-1.118" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M4.25,14.426c-.9-.552.055-4.1,2.126-7.927S10.853.02,11.75.572c.336.207.413.835.267,1.742" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M4.25.572c.9-.552,3.3,2.1,5.374,5.927s3.023,7.375,2.126,7.927c-.336.207-.885-.036-1.548-.624" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="12" cy="2.804" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="9.6" cy="13.196" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="2.5" cy="6.499" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

View file

@ -1 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="52" height="32" viewBox="0 0 52 32"><line x1="43.5" y1="8" x2="43.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="35.5" y1="8" x2="35.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="34.5" y1="8" x2="34.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="26.5" y1="8" x2="26.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="25.5" y1="8" x2="25.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="17.5" y1="8" x2="17.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="16.5" y1="8" x2="16.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="8.5" y1="8" x2="8.5" y2="24" style="fill:none; stroke:#949494;"/><path d="M45.5,17V7.5c0-1.66-1.34-3-3-3H9.5c-1.66,0-3,1.34-3,3v9.5" style="fill:none; stroke:#949494;"/><path d="M43,17H5v11h42v-11h-4ZM11,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM20,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM29,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM38,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1Z" style="fill:#949494; opacity:.7;"/></svg>
<svg width="52" height="32" viewBox="0 0 52 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 0C1.79086 0 0 1.79086 0 4V28C0 30.2091 1.79086 32 4 32H48C50.2091 32 52 30.2091 52 28V4C52 1.79086 50.2091 0 48 0H4ZM44 8H8V24H44V8Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.5 16H33.5V18.2617C33.5 19.9186 32.1569 21.2617 30.5 21.2617C28.8431 21.2617 27.5 19.9186 27.5 18.2617V16H24.5V18.2617C24.5 19.9186 23.1569 21.2617 21.5 21.2617C19.8431 21.2617 18.5 19.9186 18.5 18.2617V16H15.5V18.2617C15.5 19.9186 14.1569 21.2617 12.5 21.2617C10.8432 21.2617 9.5 19.9186 9.5 18.2617V16H4V28H48V16H42.5V18.2617C42.5 19.9186 41.1569 21.2617 39.5 21.2617C37.8431 21.2617 36.5 19.9186 36.5 18.2617V16Z" fill="#CECECE"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 9.18382C6 6.32088 8.32088 4 11.1838 4H40.8162C43.6791 4 46 6.32088 46 9.18382V16H42.5V12.2617C42.5 10.6049 41.1569 9.26172 39.5 9.26172C37.8431 9.26172 36.5 10.6049 36.5 12.2617V16H33.5V12.2617C33.5 10.6049 32.1569 9.26172 30.5 9.26172C28.8431 9.26172 27.5 10.6049 27.5 12.2617V16H24.5V12.2617C24.5 10.6049 23.1569 9.26172 21.5 9.26172C19.8431 9.26172 18.5 10.6049 18.5 12.2617V16H15.5V12.2617C15.5 10.6049 14.1569 9.26172 12.5 9.26172C10.8432 9.26172 9.5 10.6049 9.5 12.2617V16H6V9.18382Z" fill="#EEEEEE"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

@ -1 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="52" height="32" viewBox="0 0 52 32"><line x1="43.5" y1="8" x2="43.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="35.5" y1="8" x2="35.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="34.5" y1="8" x2="34.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="26.5" y1="8" x2="26.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="25.5" y1="8" x2="25.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="17.5" y1="8" x2="17.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="16.5" y1="8" x2="16.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="8.5" y1="8" x2="8.5" y2="24" style="fill:none; stroke:#949494;"/><path d="M45.5,17V7.5c0-1.66-1.34-3-3-3H9.5c-1.66,0-3,1.34-3,3v9.5" style="fill:none; stroke:#949494;"/><path d="M43,17H5v11h42v-11h-4ZM11,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM20,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM29,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1ZM38,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1Z" style="fill:#949494; opacity:.7;"/></svg>
<svg width="52" height="32" viewBox="0 0 52 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_21155_56752)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 0C1.79086 0 0 1.79086 0 4V28C0 30.2091 1.79086 32 4 32H48C50.2091 32 52 30.2091 52 28V4C52 1.79086 50.2091 0 48 0H4ZM44 8H8V24H44V8Z" fill="#2F2E33"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M36.5 16H33.5V18.2617C33.5 19.9186 32.1569 21.2617 30.5 21.2617C28.8431 21.2617 27.5 19.9186 27.5 18.2617V16H24.5V18.2617C24.5 19.9186 23.1569 21.2617 21.5 21.2617C19.8431 21.2617 18.5 19.9186 18.5 18.2617V16H15.5V18.2617C15.5 19.9186 14.1569 21.2617 12.5 21.2617C10.8432 21.2617 9.5 19.9186 9.5 18.2617V16H4V28H48V16H42.5V18.2617C42.5 19.9186 41.1569 21.2617 39.5 21.2617C37.8431 21.2617 36.5 19.9186 36.5 18.2617V16Z" fill="#767676"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6 9.18382C6 6.32088 8.32088 4 11.1838 4H40.8162C43.6791 4 46 6.32088 46 9.18382V16H42.5V12.2617C42.5 10.6049 41.1569 9.26172 39.5 9.26172C37.8431 9.26172 36.5 10.6049 36.5 12.2617V16H33.5V12.2617C33.5 10.6049 32.1569 9.26172 30.5 9.26172C28.8431 9.26172 27.5 10.6049 27.5 12.2617V16H24.5V12.2617C24.5 10.6049 23.1569 9.26172 21.5 9.26172C19.8431 9.26172 18.5 10.6049 18.5 12.2617V16H15.5V12.2617C15.5 10.6049 14.1569 9.26172 12.5 9.26172C10.8432 9.26172 9.5 10.6049 9.5 12.2617V16H6V9.18382Z" fill="#BFBFBF"/>
</g>
<defs>
<clipPath id="clip0_21155_56752">
<rect width="52" height="32" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 747 B

After

Width:  |  Height:  |  Size: 747 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="13.5" x2="10.5" y2="10.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><line x1="7.5" y1="8.5" x2="10.5" y2="10.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><polygon points="10.5 6.5 13.5 8.5 13.5 11.5 10.5 13.5 7.5 11.5 7.5 8.5 10.5 6.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><line x1="13.5" y1="8.5" x2="10.5" y2="10.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M6.02,13.31c-2.26-.58-4.01-2.44-4.42-4.76" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,2.17,0,4.07,1.15,5.13,2.88" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="0.5 2.5 0.5 5.5 3.5 5.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M6.51,14.43A7,7,0,0,1,.571,8.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M.79,5.5a7,7,0,0,1,13.639,1" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="11.5" y1="14.5" x2="11.5" y2="11.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="8.5" y1="9.5" x2="11.5" y2="11.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><polygon points="11.5 7.5 14.5 9.5 14.5 12.5 11.5 14.5 8.5 12.5 8.5 9.5 11.5 7.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><line x1="14.5" y1="9.5" x2="11.5" y2="11.5" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 967 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><line x1="10.5" y1="13.5" x2="10.5" y2="10.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><line x1="7.5" y1="8.5" x2="10.5" y2="10.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><polygon points="10.5 6.5 13.5 8.5 13.5 11.5 10.5 13.5 7.5 11.5 7.5 8.5 10.5 6.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><line x1="13.5" y1="8.5" x2="10.5" y2="10.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M6.02,13.31c-2.26-.58-4.01-2.44-4.42-4.76" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,2.17,0,4.07,1.15,5.13,2.88" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="0.5 2.5 0.5 5.5 3.5 5.5" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/><path d="M6.51,14.43A7,7,0,0,1,.571,8.5" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/><path d="M.79,5.5a7,7,0,0,1,13.639,1" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/><line x1="11.5" y1="14.5" x2="11.5" y2="11.5" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/><line x1="8.5" y1="9.5" x2="11.5" y2="11.5" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/><polygon points="11.5 7.5 14.5 9.5 14.5 12.5 11.5 14.5 8.5 12.5 8.5 9.5 11.5 7.5" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/><line x1="14.5" y1="9.5" x2="11.5" y2="11.5" style="fill:none;stroke:#ff6f00;stroke-linecap:round;stroke-linejoin:round"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 967 B

Before After
Before After

View file

@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><line x1="14.5" y1="14.5" x2=".55" y2="14.48" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-linejoin:round;"/><line x1="14.5" y1="8.5" x2=".55" y2="8.48" style="fill:none; stroke:#009688; stroke-linecap:square; stroke-linejoin:round;"/><line x1="14.5" y1="12.5" x2=".55" y2="12.48" style="fill:none; stroke:#009688; stroke-linecap:square; stroke-linejoin:round;"/><line x1="14.5" y1="5.5" x2=".55" y2="5.48" style="fill:none; stroke:#009688; stroke-linecap:square; stroke-linejoin:round;"/><line x1="14.5" y1="2.5" x2=".55" y2="2.48" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-linejoin:round;"/><line x1="14.5" y1=".5" x2=".55" y2=".48" style="fill:none; stroke:#949494; stroke-linecap:square; stroke-linejoin:round;"/></svg>

Before

Width:  |  Height:  |  Size: 892 B

View file

@ -1 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><circle cx="7" cy="7" r="5.5" style="fill:none; stroke:#949494; stroke-miterlimit:10; stroke-width:1px;"/><polyline points="4.5 6.5 7 8.5 9.5 6.5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:1px;"/></svg>
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.99984 11.7394C5.74282 11.7394 4.53729 11.2401 3.64845 10.3512C2.7596 9.46238 2.26025 8.25685 2.26025 6.99984C2.26025 5.74282 2.7596 4.53729 3.64845 3.64845C4.53729 2.7596 5.74282 2.26025 6.99984 2.26025C8.25685 2.26025 9.46238 2.7596 10.3512 3.64845C11.2401 4.53729 11.7394 5.74282 11.7394 6.99984C11.7394 8.25685 11.2401 9.46238 10.3512 10.3512C9.46238 11.2401 8.25685 11.7394 6.99984 11.7394ZM6.99984 1.1665C5.45274 1.1665 3.96901 1.78109 2.87505 2.87505C1.78109 3.96901 1.1665 5.45274 1.1665 6.99984C1.1665 8.54693 1.78109 10.0307 2.87505 11.1246C3.96901 12.2186 5.45274 12.8332 6.99984 12.8332C8.54693 12.8332 10.0307 12.2186 11.1246 11.1246C12.2186 10.0307 12.8332 8.54693 12.8332 6.99984C12.8332 5.45274 12.2186 3.96901 11.1246 2.87505C10.0307 1.78109 8.54693 1.1665 6.99984 1.1665ZM4.24268 6.65804L6.61247 9.02783C6.82666 9.24202 7.17301 9.24202 7.38493 9.02783L9.757 6.65804C9.97119 6.44385 9.97119 6.09749 9.757 5.88558C9.54281 5.67367 9.19645 5.67139 8.98454 5.88558L7.00212 7.868L5.01969 5.88558C4.8055 5.67139 4.45915 5.67139 4.24723 5.88558C4.03532 6.09977 4.03304 6.44613 4.24723 6.65804H4.24268Z" fill="#6B6B6B"/>
</svg>

Before

Width:  |  Height:  |  Size: 380 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

@ -1 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><circle cx="7" cy="7" r="5.5" style="fill:none; stroke:#949494; stroke-miterlimit:10; stroke-width:1px;"/><polyline points="9.5 7.5 7 5.5 4.5 7.5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:1px;"/></svg>
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.99984 2.26025C8.25685 2.26025 9.46238 2.7596 10.3512 3.64845C11.2401 4.53729 11.7394 5.74282 11.7394 6.99984C11.7394 8.25685 11.2401 9.46238 10.3512 10.3512C9.46238 11.2401 8.25685 11.7394 6.99984 11.7394C5.74282 11.7394 4.53729 11.2401 3.64845 10.3512C2.7596 9.46238 2.26025 8.25685 2.26025 6.99984C2.26025 5.74282 2.7596 4.53729 3.64845 3.64845C4.53729 2.7596 5.74282 2.26025 6.99984 2.26025ZM6.99984 12.8332C8.54693 12.8332 10.0307 12.2186 11.1246 11.1246C12.2186 10.0307 12.8332 8.54693 12.8332 6.99984C12.8332 5.45274 12.2186 3.96901 11.1246 2.87505C10.0307 1.78109 8.54693 1.1665 6.99984 1.1665C5.45274 1.1665 3.96901 1.78109 2.87505 2.87505C1.78109 3.96901 1.1665 5.45274 1.1665 6.99984C1.1665 8.54693 1.78109 10.0307 2.87505 11.1246C3.96901 12.2186 5.45274 12.8332 6.99984 12.8332ZM9.757 7.34163L7.38721 4.97184C7.17301 4.75765 6.82666 4.75765 6.61475 4.97184L4.24268 7.34163C4.02848 7.55583 4.02848 7.90218 4.24268 8.11409C4.45687 8.32601 4.80322 8.32829 5.01514 8.11409L6.99756 6.13167L8.97998 8.11409C9.19417 8.32829 9.54053 8.32829 9.75244 8.11409C9.96436 7.8999 9.96663 7.55355 9.75244 7.34163H9.757Z" fill="#6B6B6B"/>
</svg>

Before

Width:  |  Height:  |  Size: 380 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><path d="M2.21,9.77c1.38.44,3.46.73,5.79.73,4.14,0,7.5-.9,7.5-2s-3.36-2-7.5-2S.5,7.4.5,8.5c0,.48.64.93,1.71,1.27" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="1.5" cy="8.5" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/><path d="M12,12.88c-.3-1.41-1.1-3.36-2.26-5.38C7.66,3.91,5.21,1.45,4.25,2c-.96.55-.05,3.91,2.02,7.5s4.53,6.05,5.48,5.5c.42-.24.48-1.02.25-2.12" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="11.25" cy="14.13" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/><path d="M9.79,2.85c-1.07.97-2.36,2.63-3.52,4.65-2.07,3.59-2.97,6.94-2.02,7.5.95.56,3.41-1.91,5.48-5.5s2.97-6.94,2.02-7.5c-.42-.24-1.12.09-1.96.85" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round; stroke-width:.8px;"/><circle cx="11.25" cy="2.87" r="1" style="fill:#009688; stroke:#009688; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><path d="M10.848,14.8a21.022,21.022,0,0,1-4.08-5.3C4.559,5.674,3.543,2.124,4.5,1.572" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M1.866,7.382A21,21,0,0,1,8.5,6.5c4.418,0,8,.895,8,2" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><path d="M12.785,3.314A20.98,20.98,0,0,1,10.232,9.5C8.023,13.326,5.457,15.98,4.5,15.428" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/><circle cx="2.5" cy="7.5" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M16.5,8.5c0,1.105-3.582,2-8,2s-8-.895-8-2c0-.414.5-.8,1.366-1.118" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="12.366" cy="3.804" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M4.5,15.428c-.957-.552.059-4.1,2.268-7.928S11.543,1.02,12.5,1.572c.359.207.44.836.285,1.742" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><circle cx="10.634" cy="14.196" r="1" style="fill:#009688;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M4.5,1.572c.957-.552,3.523,2.1,5.732,5.928s3.225,7.376,2.268,7.928c-.359.207-.944-.036-1.652-.624" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M15.5,22.5l-14-14m21,7-14-14m0,21-7-7m21-7-7-7M2.086,2.086,21.914,21.914" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round;opacity:0.75"/><path d="M8.5,22.5l14-14m-21,7,14-14m0,21,7-7m-21-7,7-7m13.414.586L2.086,21.914" style="fill:none;stroke:#009688;stroke-linecap:round;stroke-linejoin:round"/><path d="M3.5,1.5h17a2,2,0,0,1,2,2v17a2,2,0,0,1-2,2H3.5a2,2,0,0,1-2-2V3.5A2,2,0,0,1,3.5,1.5Z" style="fill:none;stroke:#949494;stroke-linecap:round;stroke-linejoin:round"/></svg>

After

Width:  |  Height:  |  Size: 591 B

View file

@ -1 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><polyline points=".5 .5 .5 4.5 4.5 4.5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round;"/><path d="M.84,4.5C1.67,2.17,3.89.5,6.5.5c3.31,0,6,2.69,6,6s-2.69,6-6,6c-2.95,0-5.41-2.13-5.91-4.94" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.54857 9.22868C3.11861 9.22868 2.77271 8.88275 2.77271 8.45275V3.79717C2.77271 3.36718 3.11861 3.02124 3.54857 3.02124C3.97852 3.02124 4.32443 3.36718 4.32443 3.79717V6.38684L4.97098 5.62707C6.29641 4.03642 8.29749 3.02124 10.5313 3.02124C14.5302 3.02124 17.7727 6.26398 17.7727 10.2633C17.7727 14.2625 14.5302 17.5053 10.5313 17.5053C8.90202 17.5053 7.39555 16.9654 6.1865 16.0569C5.84383 15.7982 5.77594 15.3133 6.03133 14.9706C6.28671 14.6279 6.77486 14.56 7.11753 14.8154C8.06796 15.5299 9.24792 15.9534 10.5313 15.9534C13.6736 15.9534 16.221 13.4058 16.221 10.2633C16.221 7.12074 13.6736 4.5731 10.5313 4.5731C8.77594 4.5731 7.20482 5.36843 6.16064 6.62285L6.1574 6.62932L5.26516 7.67682H8.20374C8.6337 7.67682 8.9796 8.02276 8.9796 8.45275C8.9796 8.88275 8.6337 9.22868 8.20374 9.22868H3.54857Z" fill="#6B6B6B"/>
</svg>

Before

Width:  |  Height:  |  Size: 436 B

After

Width:  |  Height:  |  Size: 933 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,3.31,0,6,2.69,6,6s-2.69,6-6,6c-2.95,0-5.41-2.13-5.91-4.94" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M13.914,6.45A6.5,6.5,0,0,0,2,4.044V1.5a.5.5,0,0,0-1,0v4a.5.5,0,0,0,.5.5h4a.5.5,0,0,0,0-1H2.612a5.477,5.477,0,1,1-.54,3.388.5.5,0,1,0-.987.162,6.5,6.5,0,0,0,11.693,2.743A6.459,6.459,0,0,0,13.914,6.45Z" style="fill:#ff6f00"/></svg>

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 321 B

Before After
Before After

View file

@ -1 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="28" height="32" viewBox="0 0 28 32"><line x1="17.5" y1="8" x2="17.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="9.5" y1="8" x2="9.5" y2="24" style="fill:none; stroke:#949494;"/><path d="M19.5,17V7.5c0-1.66-1.34-3-3-3h-6c-1.66,0-3,1.34-3,3v9.5" style="fill:none; stroke:#949494;"/><path d="M6,17v11h15v-11H6ZM12,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1Z" style="fill:#949494; opacity:.7;"/></svg>
<svg width="29" height="33" viewBox="0 0 29 33" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.77881 0.447754C2.56967 0.447754 0.778809 2.23861 0.778809 4.44775V28.4478C0.778809 30.6569 2.56967 32.4478 4.77881 32.4478H24.7788C26.9879 32.4478 28.7788 30.6569 28.7788 28.4478V4.44775C28.7788 2.23861 26.9879 0.447754 24.7788 0.447754H4.77881ZM21.125 8.44775H9.41602V24.4478H21.125V8.44775Z" fill="white"/>
<g clip-path="url(#clip0_20951_60572)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.7788 16.7349H4.77881V28.7349H24.7788V16.7349H17.7788V18.9966C17.7788 20.6535 16.4357 21.9966 14.7788 21.9966C13.122 21.9966 11.7788 20.6535 11.7788 18.9966V16.7349Z" fill="#CECECE"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.9626 4.73486C9.09969 4.73486 6.77881 7.05574 6.77881 9.91868V16.7349H11.7788V12.9966C11.7788 11.3397 13.122 9.99658 14.7788 9.99658C16.4357 9.99658 17.7788 11.3397 17.7788 12.9966V16.7349H22.7788V9.91868C22.7788 7.05574 20.4579 4.73486 17.595 4.73486H11.9626Z" fill="#EEEEEE"/>
</g>
<defs>
<clipPath id="clip0_20951_60572">
<rect width="20" height="25" fill="white" transform="translate(4.77881 3.94775)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 534 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

@ -1 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="28" height="32" viewBox="0 0 28 32"><line x1="17.5" y1="8" x2="17.5" y2="24" style="fill:none; stroke:#949494;"/><line x1="9.5" y1="8" x2="9.5" y2="24" style="fill:none; stroke:#949494;"/><path d="M19.5,17V7.5c0-1.66-1.34-3-3-3h-6c-1.66,0-3,1.34-3,3v9.5" style="fill:none; stroke:#949494;"/><path d="M6,17v11h15v-11H6ZM12,20v-1c0-.55.45-1,1-1h1c.55,0,1,.45,1,1v1c0,.55-.45,1-1,1h-1c-.55,0-1-.45-1-1Z" style="fill:#949494; opacity:.7;"/></svg>
<svg width="29" height="33" xmlns="http://www.w3.org/2000/svg" fill="none">
<defs>
<clipPath id="clip0_20951_60572">
<rect id="svg_1" x="4.77881" y="3.94775" fill="white" height="25" width="20"/>
</clipPath>
</defs>
<g>
<title _mstTextHash="5637814" _mstHash="1">第 1 层</title>
<path id="svg_2" fill="#2d2d31" d="m4.77881,0.44775c-2.20914,0 -4,1.79086 -4,4l0,24.00005c0,2.2091 1.79086,4 4,4l19.99999,0c2.2091,0 4,-1.7909 4,-4l0,-24.00005c0,-2.20914 -1.7909,-4 -4,-4l-19.99999,0zm16.34619,8l-11.70898,0l0,16.00005l11.70898,0l0,-16.00005z" clip-rule="evenodd" fill-rule="evenodd"/>
<g id="svg_3" clip-path="url(#clip0_20951_60572)">
<path id="svg_4" fill="#CECECE" d="m11.7788,16.7349l-6.99999,0l0,12l19.99999,0l0,-12l-7,0l0,2.2617c0,1.6569 -1.3431,3 -3,3c-1.6568,0 -3,-1.3431 -3,-3l0,-2.2617z" clip-rule="evenodd" fill-rule="evenodd"/>
<path id="svg_5" fill="#EEEEEE" d="m11.9626,4.73486c-2.86291,0 -5.18379,2.32088 -5.18379,5.18382l0,6.81622l4.99999,0l0,-3.7383c0,-1.6569 1.3432,-3.00002 3,-3.00002c1.6569,0 3,1.34312 3,3.00002l0,3.7383l5,0l0,-6.81622c0,-2.86294 -2.3209,-5.18382 -5.1838,-5.18382l-5.6324,0z" clip-rule="evenodd" fill-rule="evenodd"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 534 B

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

@ -1 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><line x1="4.5" y1="14.5" x2="10.5" y2="14.5" style="fill:none; stroke:#fff; stroke-linecap:square; stroke-miterlimit:10;"/><polyline points="8.5 10.5 7.5 11.5 6.5 10.5" style="fill:none; stroke:#fff; stroke-linecap:round; stroke-linejoin:round;"/><line x1="4.5" y1="9.5" x2="6" y2="9.5" style="fill:none; stroke:#fff; stroke-linecap:square; stroke-miterlimit:10;"/><line x1="9.5" y1="9.5" x2="10.5" y2="9.5" style="fill:none; stroke:#fff; stroke-linecap:square; stroke-miterlimit:10;"/><rect x="6.5" y="8.5" width="2" height="2" rx=".27" ry=".27" style="fill:none; stroke:#fff; stroke-miterlimit:10;"/><rect x="1.5" y="6.5" width="12" height="11" rx="1" ry="1" style="fill:none; stroke:#fff; stroke-miterlimit:10;"/><path d="M5.5,5v-1.5c0-.55.45-1,1-1h10c.55,0,1,.45,1,1v9c0,.55-.45,1-1,1h-1.5" style="fill:none; stroke:#fff; stroke-miterlimit:10;"/></svg>
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.1861 5.32812H15.3642V14.5094H8.01917V13.5548M11.6917 5.65603V8.60717M11.1517 11.5583H13.2656" stroke="white"/>
<path d="M6.30876 3.82009V6.77123M4.73482 9.72237H7.8827M2.63623 3.49219H9.98128V12.6735H2.63623V3.49219Z" stroke="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 984 B

After

Width:  |  Height:  |  Size: 351 B

Before After
Before After

View file

@ -1 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points=".5 3.5 3.5 .5 6.5 3.5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round;"/><line x1="3.5" y1=".5" x2="3.5" y2="14.5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round;"/><polyline points="14.5 11.5 11.5 14.5 8.5 11.5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round;"/><line x1="11.5" y1="14.5" x2="11.5" y2=".5" style="fill:none; stroke:#949494; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg width="251" height="252" viewBox="0 0 251 252" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.53636 72.2536L67.482 9.08624" stroke="black" stroke-width="17.0079" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M128.055 72.2536L67.482 9.08624" stroke="black" stroke-width="17.0079" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M67.9763 243.004V8.79553" stroke="#161615" stroke-width="17.0079" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M239.519 180L180.573 243.167" stroke="black" stroke-width="17.0079" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M120 180L180.573 243.167" stroke="black" stroke-width="17.0079" stroke-miterlimit="10" stroke-linecap="round"/>
<path d="M182.91 242.655V8.79999" stroke="#161615" stroke-width="17.0079" stroke-miterlimit="10" stroke-linecap="round"/>
</svg>

Before

Width:  |  Height:  |  Size: 633 B

After

Width:  |  Height:  |  Size: 854 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,3.31,0,6,2.69,6,6s-2.69,6-6,6c-2.95,0-5.41-2.13-5.91-4.94" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><path d="M13.914,6.45A6.5,6.5,0,0,0,2,4.044V1.5a.5.5,0,0,0-1,0v4a.5.5,0,0,0,.5.5h4a.5.5,0,0,0,0-1H2.612a5.477,5.477,0,1,1-.54,3.388.5.5,0,1,0-.987.162,6.5,6.5,0,0,0,11.693,2.743A6.459,6.459,0,0,0,13.914,6.45Z" style="fill:#ff6f00"/></svg>

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 321 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,3.31,0,6,2.69,6,6s-2.69,6-6,6c-2.95,0-5.41-2.13-5.91-4.94" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><path d="M13.914,6.45A6.5,6.5,0,0,0,2,4.044V1.5a.5.5,0,0,0-1,0v4a.5.5,0,0,0,.5.5h4a.5.5,0,0,0,0-1H2.612a5.477,5.477,0,1,1-.54,3.388.5.5,0,1,0-.987.162,6.5,6.5,0,0,0,11.693,2.743A6.459,6.459,0,0,0,13.914,6.45Z" style="fill:#ff6f00"/></svg>

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 321 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="9.5" y="7.5" width="4" height="6" rx="1" ry="1" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M6.53,13.42c-2.51-.41-4.49-2.37-4.93-4.86" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,2.17,0,4.07,1.15,5.13,2.88" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><rect x="9.5" y="7.5" width="4" height="6" rx="1" ry="1" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M6.79,13.46c-2.59-.31-4.77-2.29-5.21-4.99" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M2.03,5.03c.8-1.77,2.44-3.12,4.5-3.46,2.73-.45,5.33,1.03,6.43,3.43" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>

Before

Width:  |  Height:  |  Size: 680 B

After

Width:  |  Height:  |  Size: 687 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><rect x="9.5" y="7.5" width="4" height="6" rx="1" ry="1" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M6.53,13.42c-2.51-.41-4.49-2.37-4.93-4.86" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,2.17,0,4.07,1.15,5.13,2.88" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14"><rect x="9.5" y="7.5" width="4" height="6" rx="1" ry="1" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M6.79,13.46c-2.59-.31-4.77-2.29-5.21-4.99" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M2.03,5.03c.8-1.77,2.44-3.12,4.5-3.46,2.73-.45,5.33,1.03,6.43,3.43" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>

Before

Width:  |  Height:  |  Size: 680 B

After

Width:  |  Height:  |  Size: 687 B

Before After
Before After

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><polyline points="1.5 1.5 1.5 5.5 5.5 5.5" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/><path d="M1.84,5.5c.82-2.33,3.05-4,5.66-4,3.31,0,6,2.69,6,6s-2.69,6-6,6c-2.95,0-5.41-2.13-5.91-4.94" style="fill:none; stroke:#ff6f00; stroke-linecap:round; stroke-linejoin:round;"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path d="M13.914,6.45A6.5,6.5,0,0,0,2,4.044V1.5a.5.5,0,0,0-1,0v4a.5.5,0,0,0,.5.5h4a.5.5,0,0,0,0-1H2.612a5.477,5.477,0,1,1-.54,3.388.5.5,0,1,0-.987.162,6.5,6.5,0,0,0,11.693,2.743A6.459,6.459,0,0,0,13.914,6.45Z" style="fill:#ff6f00"/></svg>

Before

Width:  |  Height:  |  Size: 440 B

After

Width:  |  Height:  |  Size: 321 B

Before After
Before After

View file

@ -41,7 +41,7 @@
"before_layer_change_gcode": "; BEFORE_LAYER_CHANGE [layer_num] @ [layer_z]mm",
"best_object_pos": "0.5,0.5",
"change_extrusion_role_gcode": "",
"change_filament_gcode": "; FLUSH_START\n;;; M400 P0\nT[next_extruder] ; change extruder\n; 1\n;;; G90\n;;; G1 Z{toolchange_z+2} F480\n;;; G1 X261 Y25 F12000\n;;; G1 Y1 F600\n;;; M400 P2730\n;;; G1 Y25 F3000\n;;; M400 P76250\n;;; M400 P35780\n; 2.1\n;;; G90\n;;; G1 Z{toolchange_z+2} F480\n;;; G1 X47 Y230 F12000\n;;; M400 P0\n; 2.2\n;;; G1 X47 Y276 F600\n;;; G1 X47 Y230 F12000\n;;; G1 X47 Y276 F600\n;;; G1 X47 Y230 F12000\n; 3.1\n;;; G1 F36000\n;;; G1 Y250\n;;; G1 F8000\n;;; G1 X81\n;;; G1 Y273\n; 3.2\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 F8000\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n;;; G1 X96\n;;; G1 X81\n; 3.3\n;;; G1 X72\n;;; G1 X77\n;;; G1 Z{toolchange_z}\n;;; M400 P0\n; FLUSH_END",
"change_filament_gcode": "",
"cooling_tube_length": "0",
"cooling_tube_retraction": "0",
"deretraction_speed": [
@ -228,4 +228,4 @@
"Slope Lift"
],
"z_offset": "0"
}
}

View file

@ -137,6 +137,40 @@
display: inline-block;
}
.btn {
display: inline-block;
padding: 6px 9px;
border: 2px solid transparent;
border-radius: 12px;
font-size: 12px;
text-align: center;
cursor: pointer;
transition: all 0.3s;
}
.btn-ok {
color: #fff;
background-color: #009688;
}
.btn-ok:hover {
background-color: #26A69A;
}
.btn-cancel {
color: black;
background-color: white;
border: 1px solid black;
}
.btn-cancel:hover {
background-color: #eeeeee;
}
body.dark-mode button.btn-cancel {
background-color: #2d2d31;
color: #e0e0e0;
border: 1px solid #e0e0e0;
}
select {
padding: 6px 9px;
border: 1px solid #dbdbdb;
@ -163,7 +197,7 @@
.button-container {
display: flex;
justify-content: center;
gap: 0px;
gap: 10px;
margin: 10px;
}
@ -232,6 +266,15 @@
position: sticky;
z-index: 11;
}
body.dark-mode .btn-ok {
background-color: #009688;
}
body.dark-mode .btn-dark {
background-color: #34495e;
}
body.dark-mode select {
background-color: #2d2d31;
color: white;
@ -252,8 +295,6 @@
</style>
</head>
<link rel="stylesheet" type="text/css" href="../include/global.css" /> <!-- ORCA One for all-->
<body>
<div class="container">
<div class="tip-panel" id="auto_flush_tip">
@ -262,14 +303,14 @@
in Orca Slicer &gt; Preferences.
</div>
<div style="margin-bottom: 10px; display: flex; align-items: center;">
<div
class="ButtonStyleConfirm ButtonTypeWindow"
<div style="margin-bottom: 10px; ">
<button
class="btn btn-ok"
onclick="calcFlushingVolumes()"
id="calc_btn"
>
Re-Calculate
</div>
</button>
<select
id="extruders"
onchange="handleExtruderSelect(document.getElementById('extruders').value)"
@ -325,12 +366,12 @@
</div>
</div>
<div class="button-container" style="padding: 0px; margin: 0px;">
<div class="ButtonStyleConfirm ButtonTypeChoice" id="ok_btn" onclick="storeData()">
<button class="btn btn-ok" id="ok_btn" style="width: 60px; height: 30px; font-size: 12px; text-align: center;" onclick="storeData()">
Save
</div>
<div class="ButtonStyleRegular ButtonTypeChoice" id="cancel_btn" onclick="quit()">
</button>
<button class="btn btn-cancel" id="cancel_btn" style="width: 60px; height: 30px; font-size: 12px; text-align: center;" onclick="quit()">
Cancel
</div>
</button>
</div>
</div>

View file

@ -16,7 +16,7 @@
</head>
<body onLoad="OnInit()">
<div id="LoadBlock">
<img id="LoadingSvg" src="loading.svg" />
<img id="LoadingSvg" src="../../../images/loading_spinner.svg" />
<div id="LoadTip" class="trans" tid="t126">Loading……</div>
</div>
</body>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P1</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
<link rel="stylesheet" type="text/css" href="1.css" />
@ -20,7 +19,7 @@
<div id="Title" class="trans" tid="t1">Welcome to Orca Slicer</div>
<div id="STip" class="trans" tid="t2">Orca Slicer will be setup in several steps. Let's start!</div>
<div id="BtnArea">
<a id="StartBtn" class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t24" href="../11/index.html">Get Started</a>
<a id="StartBtn" class="NormalBtn swiper-button-next trans" tid="t24" href="../11/index.html">Get Started</a>
</div>
</body>
</html>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P21</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="11.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
@ -34,7 +33,7 @@
</div>-->
</div>
<div id="AcceptArea">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" id="AcceptBtn" tid="t9" onclick="GotoPolicyPage()">Next</div>
<div class="NormalBtn trans" id="AcceptBtn" tid="t9" onclick="GotoPolicyPage()">Next</div>
</div>
</body>
</html>

View file

@ -25,6 +25,10 @@
margin-right: 0px; /* ORCA align buttons with end of horizontal separator/line */
}
.BannerBtns>.SmallBtn_Green.trans{
margin-right: 7px; /* ORCA adds a small gap between buttons */
}
.BlockBanner a
{
display: inline-block;
@ -145,7 +149,7 @@ img.ModelThumbnail
{
margin-top: 4mm;
display: flex;
justify-content:flex-end;
justify-content:space-around;
}
.search {

View file

@ -91,8 +91,8 @@ function HandleModelList( pVal )
'<div class="BlockBanner">'+
' <a>'+sVV+'</a>'+
' <div class="BannerBtns">'+
' <div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t11" onClick="SelectPrinterAll('+"\'"+strVendor+"\'"+')">all</div>'+
' <div class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="SelectPrinterNone('+"\'"+strVendor+"\'"+')">none</div>'+
' <div class="SmallBtn_Green trans" tid="t11" onClick="SelectPrinterAll('+"\'"+strVendor+"\'"+')">all</div>'+
' <div class="SmallBtn trans" tid="t12" onClick="SelectPrinterNone('+"\'"+strVendor+"\'"+')">none</div>'+
' </div>'+
'</div>'+
'<div class="PrinterArea"> '+
@ -210,8 +210,8 @@ function FilterModelList(keyword) {
'<div class="BlockBanner">' +
' <a>' + sVV + '</a>' +
' <div class="BannerBtns">' +
' <div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t11" onClick="SelectPrinterAll(' + "\'" + strVendor + "\'" + ')">all</div>' +
' <div class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="SelectPrinterNone(' + "\'" + strVendor + "\'" + ')">none</div>' +
' <div class="SmallBtn_Green trans" tid="t11" onClick="SelectPrinterAll(' + "\'" + strVendor + "\'" + ')">all</div>' +
' <div class="SmallBtn trans" tid="t12" onClick="SelectPrinterNone(' + "\'" + strVendor + "\'" + ')">none</div>' +
' </div>' +
'</div>' +
'<div class="PrinterArea"> ' +

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P21</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="21.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
@ -35,8 +34,8 @@
<div class="BlockBanner">
<a>BBL-3DP</a>
<div class="BannerBtns">
<div class="ButtonStyleConfirm ButtonTypeWindow trans" onClick="SelectPrinterAll('BBL')">所有</div>
<div class="ButtonStyleRegular ButtonTypeWindow trans" onClick="SelectPrinterNone('BBL')"></div>
<div class="SmallBtn_Green trans" onClick="SelectPrinterAll('BBL')">所有</div>
<div class="SmallBtn trans" onClick="SelectPrinterNone('BBL')"></div>
</div>
</div>
@ -121,8 +120,8 @@
</div>
<div id="AcceptArea">
<div class="ButtonStyleRegular ButtonTypeChoice trans" id="PreBtn" tid="t8" onclick="window.open('../1/index.html','_self')">Back</div>
<div class="ButtonStyleConfirm ButtonTypeChoice trans" id="AcceptBtn" tid="t9" onclick="GotoFilamentPage()">Next</div>
<div class="GrayBtn trans" id="PreBtn" tid="t8" onclick="window.open('../1/index.html','_self')">Back</div>
<div class="NormalBtn trans" id="AcceptBtn" tid="t9" onclick="GotoFilamentPage()">Next</div>
</div>
<div id="NoticeMask"></div>
@ -131,7 +130,7 @@
<div id="NoticeContent">
<div id="NoticeText" class="trans" tid="t37">At least one printer must be selected.</div>
<div id="NoticeBtns">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t36" onClick="ShowNotice(0)">ok</div>
<div class="SmallBtn trans" tid="t36" onClick="ShowNotice(0)">ok</div>
</div>
</div>
</div>

View file

@ -39,6 +39,12 @@ input
align-items: center;
}
#ItemSelectArea .SmallBtn
{
margin-left:5px;
}
#ItemBlockArea
{
flex: 1 0 236px;
@ -104,7 +110,7 @@ input
{
margin-top: 4mm;
display: flex;
justify-content:flex-end;
justify-content:space-around;
}
#GotoNetPluginBtn

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=0" />
<title>引导_P21</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="22.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
@ -45,17 +44,17 @@
<div id="ItemSelectArea">
<div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t11" onClick="SelectAllFilament(1)">All</div>
<div class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="SelectAllFilament(0)">Clear all</div>
<div class="SmallBtn_Green trans" tid="t11" onClick="SelectAllFilament(1)">All</div>
<div class="SmallBtn trans" tid="t12" onClick="SelectAllFilament(0)">Clear all</div>
</div>
<div id="ItemBlockArea" class="ZScrol">
</div>
</div>
<div id="AcceptArea">
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t8" id="PreBtn" onclick="ReturnPreviewPage()">Back</div>
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t25" id="AcceptBtn" onclick="FinishGuide()">finish</div>
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t9" id="GotoNetPluginBtn" onclick="GotoNetPluginPage()">Next</div>
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="ReturnPreviewPage()">Back</div>
<div class="NormalBtn trans" tid="t25" id="AcceptBtn" onclick="FinishGuide()">finish</div>
<div class="NormalBtn trans" tid="t9" id="GotoNetPluginBtn" onclick="GotoNetPluginPage()">Next</div>
</div>
<div id="NoticeMask">
</div>
@ -65,8 +64,8 @@
<div id="NoticeText" class="trans" tid="t19">At least one filament must be selected. </div>
<div id="NoticeText" class="trans" tid="t20">Do you want to use default filament ?</div>
<div id="NoticeBtns">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t21" onClick="ChooseDefaultFilament()">Yes</div>
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t22" onClick="ShowNotice(0)">No</div>
<div class="SmallBtn trans" tid="t21" onClick="ChooseDefaultFilament()">Yes</div>
<div class="SmallBtn trans" tid="t22" onClick="ShowNotice(0)">No</div>
</div>
</div>
</div>

View file

@ -39,6 +39,12 @@ input
align-items: center;
}
#ItemSelectArea .SmallBtn
{
margin-left:5px;
}
#ItemBlockArea
{
display:flex;
@ -105,7 +111,7 @@ input
{
margin-top: 4mm;
display: flex;
justify-content:flex-end;
justify-content:space-around;
}
#SystemFilamentsArea

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=0" />
<title>引导_P21</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="23.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
@ -45,8 +44,8 @@
</div>
<div id="ItemSelectArea">
<div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t11" onClick="SelectAllFilament(1)">all</div>
<div class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="SelectAllFilament(0)">Clear all</div>
<div class="SmallBtn_Green trans" tid="t11" onClick="SelectAllFilament(1)">all</div>
<div class="SmallBtn trans" tid="t12" onClick="SelectAllFilament(0)">Clear all</div>
</div>
<div id="ItemBlockArea" class="ZScrol">
@ -56,7 +55,7 @@
<div id="CustomFilamentsArea">
<div id="CFilament_Btn_Area">
<div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t111" onClick="OnClickCustomFilamentAdd()">Create New</div>
<div class="SmallBtn_Green trans" tid="t111" onClick="OnClickCustomFilamentAdd()">Create New</div>
</div>
<div id="CFilament_List" class="ZScrol">
</div>
@ -64,8 +63,8 @@
</div>
<div id="AcceptArea">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t39" id="AcceptBtn" onclick="ConfirmSelect()">Confirm</div>
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t38" id="PreBtn" onclick="CancelSelect()">Cancel</div>
<div class="NormalBtn trans" tid="t39" id="AcceptBtn" onclick="ConfirmSelect()">Confirm</div>
<div class="GrayBtn trans" tid="t38" id="PreBtn" onclick="CancelSelect()">Cancel</div>
</div>
<div id="NoticeMask">
</div>
@ -75,8 +74,8 @@
<div id="NoticeText" class="trans" tid="t19">At least one filament must be selected. </div>
<div id="NoticeText" class="trans" tid="t20">Do you want to use default filament ?</div>
<div id="NoticeBtns">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t21" onClick="ChooseDefaultFilament()">yes</div>
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t22" onClick="ShowNotice(0)">no</div>
<div class="SmallBtn trans" tid="t21" onClick="ChooseDefaultFilament()">yes</div>
<div class="SmallBtn trans" tid="t22" onClick="ShowNotice(0)">no</div>
</div>
</div>
</div>

View file

@ -24,6 +24,10 @@
margin-right: 0px; /* ORCA align buttons with end of horizontal separator/line */
}
.BannerBtns>.SmallBtn_Green.trans{
margin-right: 7px; /* ORCA adds a small gap between buttons */
}
/*.Banner-Btn
{
background-color: #C0C0C0;
@ -170,7 +174,7 @@ img.ModelThumbnail
{
margin-top: 4mm;
display: flex;
justify-content:flex-end;
justify-content:space-around;
}
.search {

View file

@ -91,8 +91,8 @@ function HandleModelList( pVal )
'<div class="BlockBanner">'+
' <a>'+sVV+'</a>'+
' <div class="BannerBtns">'+
' <div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t11" onClick="SelectPrinterAll('+"\'"+strVendor+"\'"+')">all</div>'+
' <div class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="SelectPrinterNone('+"\'"+strVendor+"\'"+')">none</div>'+
' <div class="SmallBtn_Green trans" tid="t11" onClick="SelectPrinterAll('+"\'"+strVendor+"\'"+')">all</div>'+
' <div class="SmallBtn trans" tid="t12" onClick="SelectPrinterNone('+"\'"+strVendor+"\'"+')">none</div>'+
' </div>'+
'</div>'+
'<div class="PrinterArea"> '+
@ -210,8 +210,8 @@ function FilterModelList(keyword) {
'<div class="BlockBanner">' +
' <a>' + sVV + '</a>' +
' <div class="BannerBtns">' +
' <div class="ButtonStyleConfirm ButtonTypeWindow trans" tid="t11" onClick="SelectPrinterAll(' + "\'" + strVendor + "\'" + ')">all</div>' +
' <div class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="SelectPrinterNone(' + "\'" + strVendor + "\'" + ')">none</div>' +
' <div class="SmallBtn_Green trans" tid="t11" onClick="SelectPrinterAll(' + "\'" + strVendor + "\'" + ')">all</div>' +
' <div class="SmallBtn trans" tid="t12" onClick="SelectPrinterNone(' + "\'" + strVendor + "\'" + ')">none</div>' +
' </div>' +
'</div>' +
'<div class="PrinterArea"> ' +

View file

@ -4,8 +4,7 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P21</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="24.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
<!-- <script type="text/javascript" src="test.js"></script> -->
@ -34,8 +33,8 @@
<!--<div class="OneVendorBlock" Vendor="BBL">
<div class="BlockBanner">
<div class="BannerBtns">
<div class="ButtonStyleConfirm ButtonTypeWindow" onClick="SelectPrinterAll('BBL')">所有</div>
<div class="ButtonStyleRegular ButtonTypeWindow" onClick="SelectPrinterNone('BBL')"></div>
<div class="SmallBtn_Green" onClick="SelectPrinterAll('BBL')">所有</div>
<div class="SmallBtn" onClick="SelectPrinterNone('BBL')"></div>
</div>
<a>BBL-3DP</a>
@ -93,8 +92,8 @@
</div>
<div id="AcceptArea">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t39" id="AcceptBtn" onclick="ConfirmSelect()">Confirm</div>
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t38" id="PreBtn" onclick="CancelSelect()">Cancel</div>
<div class="NormalBtn trans" tid="t39" id="AcceptBtn" onclick="ConfirmSelect()">Confirm</div>
<div class="GrayBtn trans" tid="t38" id="PreBtn" onclick="CancelSelect()">Cancel</div>
</div>
<div id="NoticeMask"></div>
@ -103,7 +102,7 @@
<div id="NoticeContent">
<div id="NoticeText" class="trans" tid="t37">At least one printer must be selected.</div>
<div id="NoticeBtns">
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t36" onClick="ShowNotice(0)">ok</div>
<div class="SmallBtn trans" tid="t36" onClick="ShowNotice(0)">ok</div>
</div>
</div>
</div>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P1</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="3.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
@ -33,8 +32,8 @@
</label>
</div>
<div id="AcceptArea">
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t8" id="PreBtn" onclick="window.open('../11/index.html','_self')">Back</div>
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t9" id="AcceptBtn" onclick="GotoNextPage()">Next</div>
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="window.open('../11/index.html','_self')">Back</div>
<div class="NormalBtn trans" tid="t9" id="AcceptBtn" onclick="GotoNextPage()">Next</div>
</div>
</body>
</html>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P1</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="31.css" />
<script type="text/javascript" src="../js/jquery-2.1.1.min.js"></script>
@ -32,8 +31,8 @@
</label>
</div>
<div id="AcceptArea">
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t8" id="PreBtn" onclick="window.open('../11/index.html','_self')">Back</div>
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t9" id="AcceptBtn" onclick="GotoNextPage()">Next</div>
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="window.open('../11/index.html','_self')">Back</div>
<div class="NormalBtn trans" tid="t9" id="AcceptBtn" onclick="GotoNextPage()">Next</div>
</div>
</body>
</html>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P1</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
<link rel="stylesheet" type="text/css" href="4orca.css" />
@ -32,8 +31,8 @@
</div>
<div id="AcceptArea">
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t8" id="PreBtn" onclick="window.history.back()">Back</div>
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t9" id="GotoNetPluginBtn" onclick="GotoNetPluginPage()">Next</div>
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="window.history.back()">Back</div>
<div class="NormalBtn trans" tid="t9" id="GotoNetPluginBtn" onclick="GotoNetPluginPage()">Next</div>
</div>
</body>
</html>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P1</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="../css/common.css" />
<link rel="stylesheet" type="text/css" href="../css/dark.css" />
<link rel="stylesheet" type="text/css" href="5.css" />
@ -38,8 +37,8 @@
</div>
<div id="AcceptArea">
<div class="ButtonStyleRegular ButtonTypeChoice trans" tid="t8" id="PreBtn" onclick="window.history.back()">Back</div>
<div class="ButtonStyleConfirm ButtonTypeChoice trans" tid="t25" id="AcceptBtn" onclick="FinishGuide()">Finish</div>
<div class="GrayBtn trans" tid="t8" id="PreBtn" onclick="window.history.back()">Back</div>
<div class="NormalBtn trans" tid="t25" id="AcceptBtn" onclick="FinishGuide()">Finish</div>
</div>
</body>
</html>

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>引导_P1</title>
<link rel="stylesheet" type="text/css" href="../../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="6.css" />
<script type="text/javascript" src="../js/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="../js/json2.js"></script>
@ -41,9 +40,9 @@
</div>
<div id="BtnBlock">
<div id="CancelBtn" class="ButtonStyleRegular ButtonTypeChoice trans" tid="t38" onClick="CancelDownload()" >Cancel</div>
<div id="RestartBtn" class="ButtonStyleRegular ButtonTypeChoice trans" tid="t25" onClick="RestartBambuStudio()">Finish</div>
<div id="CloseBtn" class="ButtonStyleRegular ButtonTypeChoice trans" tid="t86" onClick="CloseDownDialog()" >Close </div>
<div id="CancelBtn" class="trans Btn_Green" tid="t38" onClick="CancelDownload()">Cancel</div>
<div id="RestartBtn" class="Btn_Green" onClick="RestartBambuStudio()"><a class="trans" tid="t25">Finish</a></div>
<div id="CloseBtn" class="Btn_Green" onClick="CloseDownDialog()"><a class="trans" tid="t86">Close</a></div>
</div>
</body>
</html>

View file

@ -101,16 +101,86 @@ body
#AcceptArea
{
height:var(--dialog-button-sizer-height); /*----ORCA Use fixed size to prevent position change----*/
max-height:var(--dialog-button-sizer-height);
min-height:var(--dialog-button-sizer-height);
padding: 0 var(--dialog-button-gap);
height:12%;
padding: 0mm 10mm;
text-align: left;
display: flex;
justify-content:flex-end;
align-items: center;
}
/*--Btn--*/
.NormalBtn
{
padding: 3mm 9mm;
font-size: 14px;
text-align: center;
background-color: #009688;
border-radius: 16px;
color: #fff;
cursor: pointer;
margin-left: 10px;
}
.NormalBtn:hover
{
background-color:#4db6ac;
}
.GrayBtn
{
padding: 3mm 9mm;
font-size: 14px;
text-align: center;
/* border: 1px solid #575757; */ /* ORCA match button style */
border-radius: 18px;
background-color: #D9D9D9;
color: #000; /* ORCA match button style */
cursor: pointer;
margin-left: 10px;
}
.GrayBtn:hover
{
background-color:#CCCCCC; /* ORCA match button style */
}
.SmallBtn
{
padding: 2px 4mm;
font-size: 14px;
text-align: center;
background-color: #D9D9D9;
border-radius: 6px;
color: #000;
cursor: pointer;
display: inline-block;
}
.SmallBtn:hover
{
background-color: #CCCCCC;
}
.SmallBtn_Green
{
padding: 2px 4mm;
font-size: 14px;
text-align: center;
background-color: #009688;
border-radius: 6px;
color: #fff;
cursor: pointer;
display: inline-block;
}
.SmallBtn_Green:hover
{
background-color: #4db6ac;
}
/*---HyperLink---*/
.HyperLink
{
@ -165,6 +235,7 @@ input[type="checkbox"]:checked::before {
transform: scale(1);
}
/*----------------Light Mode-------------------*/

View file

@ -37,6 +37,20 @@ input[type=checkbox]:checked{
background-color:#009688;
}
/*-----Button-----*/
.GrayBtn, .SmallBtn /* ORCA match button style GrayBtn & SmallBtn */
{
background-color:#3E3E45;
/* border: 1px solid #B9B9BC; */
color: #FFFFFF;
}
.GrayBtn:hover, .SmallBtn:hover /* ORCA match button style GrayBtn & SmallBtn */
{
background-color:#49494E;
color: #FFFFFF;
}
/*-------Text------*/
.TextS1

View file

@ -31,6 +31,12 @@ body
/*----Left Menu Button----*/
#LogoutBtn:hover
{
background: #223C3C;
color: #efeff0;
}
.BtnItem
{
color:#B3B3B5;
@ -65,6 +71,11 @@ body
background-color: #223C3C;
}
#RecentClearAllBtn:hover
{
color: #000;
}
.FileImg
{
background-color: #36363C; /*ORCA use darker color for dark theme for thumbnails*/

View file

@ -100,6 +100,16 @@ body
justify-content: center; /*and use login button in new line*/
user-select: none;
}
#LoginBtn
{
cursor:pointer;
}
#LoginBtn:hover
{
font-size:17px;
}
#NoPluginTip
{
@ -157,9 +167,24 @@ body
#LogoutBtn
{
font-size: 14px;
height: 24px;
line-height: 24px;
color: #4db6ac;
border: 1px solid #009688;
border-radius: 4px;
cursor: pointer;
margin-top: 5px;
padding: 0px 8px;
}
#LogoutBtn:hover
{
background: #00f0d8;
color: #fff;
}
/*------------------*/
#BtnArea
{
@ -332,10 +357,22 @@ body
#RecentClearAllBtn
{
border-width: 1px;
border-style: solid;
padding: 0px 10px;
border-radius: 6px;
line-height: 26px;
height: 26px;
margin-left: 20px;
cursor: pointer;
display: none;
}
#RecentClearAllBtn:hover
{
background-color:#CDCECE;
}
#RecentTitle
{

View file

@ -5,7 +5,6 @@
<meta http-equiv="Cache-Control" content="max-age=7200" />
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" />
<title>homepage</title>
<link rel="stylesheet" type="text/css" href="../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="./css/home.css" />
<link rel="stylesheet" type="text/css" href="./css/dark.css" />
@ -24,7 +23,7 @@
<div id="LoginArea">
<div id="Login1">
<div id="Icon1"><img id="BBLIcon" src="../image/logo.png" /></div> <!-- ORCA use square icon for better consistency on UI -->
<div id="LoginBtn" class="ButtonStyleRegular ButtonTypeWindow" onClick="OnLoginOrRegister()"><span class="trans" tid="t26">login</span> / <span class="trans" tid="t27">register</span></div>
<div id="LoginBtn" class="TextS1" style="font-weight: 700;" onClick="OnLoginOrRegister()"><span class="trans" tid="t26">login</span>/<span class="trans" tid="t27">register</span></div>
</div>
<div id="Login2">
@ -32,7 +31,7 @@
<img id="UserAvatarIcon" src="img/c.jpg" onerror="this.onerror=null;this.src='img/c.jpg';" />
</div>
<div id="UserName" class="TextS1"></div>
<div id="LogoutBtn" class="ButtonStyleAlert ButtonTypeWindow trans" tid="t50" onClick="OnLogOut()">log out</div>
<div id="LogoutBtn" class="Btn trans" tid="t50" onClick="OnLogOut()">log out</div>
</div>
<div id="NoPluginTip">
@ -81,7 +80,7 @@
<div id="RecentFileArea">
<div id="RecentTitleBlock">
<div id="RecentTitle" class="Content-Title trans TextS1" tid="t35">recent open</div>
<div id="RecentClearAllBtn" class="ButtonStyleRegular ButtonTypeWindow trans" tid="t12" onClick="OnDeleteAllRecentFiles()">Clear all</div>
<div id="RecentClearAllBtn" class="trans TextS1" tid="t12" onClick="OnDeleteAllRecentFiles()">Clear all</div>
</div>
<div id="FileList">
<!-- <div class="FileItem" onClick="OnOpenRecentFile('aaaa')" fpath='d:\model\11.3mf'>

View file

@ -1,73 +0,0 @@
/*----ORCA UNIFIED STYLING FOR ALL CONTROLS----*/
/*----GLOBAL VARIABLES ----*/
:root {
--dialog-button-sizer-height : 62px; /*----32 + 15 * 2----*/
--dialog-button-gap : 15px;
}
/*----GLOBAL COLORS ----*/
:root {
--main-color : #009688;
--main-color-hover : #26A69A;
--button-fg-light : #FEFEFE;
--button-fg-text : #262E30;
--button-fg-disabled : #6B6B6B;
--button-bg-normal : #DFDFDF;
--button-bg-hover : #D4D4D4;
--button-bg-disabled : var(--button-bg-normal);
--button-bg-alert : #E14747;
}
@media (prefers-color-scheme: dark) {
:root {
--main-color : #00675B;
--main-color-hover : #008172;
--button-fg-light : #FEFEFE;
--button-fg-text : #EFEFF0;
--button-fg-disabled : #818183;
--button-bg-normal : #3E3E45;
--button-bg-hover : #4D4D54;
--button-bg-disabled : var(--button-bg-normal);
--button-bg-alert : #E14747;
}
}
/*----BUTTONS ----*/
/*----Values slightly different since renderer is different----*/
/*----Currently no support for focus border----*/
.ButtonTypeCompact { font-size: 11px; padding: 0px 8px ; border-radius: 12px; line-height: 23px; height: 24px; text-align: center}
.ButtonTypeWindow { font-size: 13px; padding: 0px 11px; border-radius: 12px; line-height: 23px; height: 24px; text-align: center}
.ButtonTypeChoice { font-size: 15px; padding: 0px 13px; border-radius: 4px ; line-height: 31px; height: 32px; text-align: center}
.ButtonTypeParameter { font-size: 15px; padding: 0px 12px; border-radius: 4px ; line-height: 25px; height: 26px; text-align: center}
.ButtonTypeExpanded { font-size: 15px; padding: 0px 12px; border-radius: 4px ; line-height: 31px; height: 32px; text-align: center}
.ButtonTypeWindow,
.ButtonTypeCompact {
min-width: 36px; /*----58 - 11*2(padding)----*/
}
.ButtonTypeWindow.ButtonStyleConfirm { /*---- Commonly used as "All" button before "Clear All" button----*/
margin-right:10px;
}
.ButtonTypeChoice {
min-width: 74px; /*----100 - 13*2(padding)----*/
margin-left:var(--dialog-button-gap);
}
.ButtonTypeExpanded {
width: 100%;
}
.ButtonTypeExpanded {
width: 120px;
}
.ButtonStyleConfirm { background: var(--main-color ); color: var(--button-fg-light )}
.ButtonStyleConfirm:hover { background: var(--main-color-hover ); color: var(--button-fg-light )}
.ButtonStyleRegular { background: var(--button-bg-normal ); color: var(--button-fg-text )}
.ButtonStyleRegular:hover { background: var(--button-bg-hover ); color: var(--button-fg-text )}
.ButtonStyleAlert { background: var(--button-bg-normal ); color: var(--button-fg-text )}
.ButtonStyleAlert:hover { background: var(--button-bg-alert ); color: var(--button-fg-light )}
.ButtonStyleDisabled { background: var(--button-bg-disabled); color: var(--button-fg-disabled)}

View file

@ -25,6 +25,18 @@ body
background-color: #fff;
}
.NormalBtn
{
padding: 3mm 10mm;
font-size: 14px;
text-align: center;
background-color: #009688;
border-radius: 20px;
color: #fff;
cursor: pointer;
margin-left: 10px;
}
#ErrorBlock
{
display:flex;

View file

@ -4,7 +4,6 @@
<meta charset="utf-8">
<meta http-equiv="Cache-Control" content="max-age=7200" />
<title>Network Error</title>
<link rel="stylesheet" type="text/css" href="../include/global.css" /> <!-- ORCA One for all-->
<link rel="stylesheet" type="text/css" href="css/login.css" />
<script type="text/javascript" src="js/jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="../data/text.js"></script>
@ -16,7 +15,7 @@
<div id="ErrorBlock">
<img id="ErrorIcon" src="disconnect3.png" />
<div id="ErrorTip" class="trans" title="t40" >Network disconnect, please check and try again later.</div>
<div id="ErrorBtn" class="ButtonStyleRegular ButtonTypeChoice">Retry</div>
<div id="ErrorBtn" class="NormalBtn">Retry</div>
</div>
</body>
</html>

View file

@ -66,3 +66,8 @@ a
{
background-color:#36363C;
}
#AddModelInfoBtn:hover
{
color: #000;
}

View file

@ -17,7 +17,6 @@
<link rel="stylesheet" type="text/css" href="model.css" />
<link rel="stylesheet" type="text/css" href="./css/dark.css" />
<link rel="stylesheet" type="text/css" href="../include/global.css" /> <!-- ORCA One for all-->
<script type="text/javascript" src="test.js"></script>
<script type="text/javascript" src="model.js"></script>
@ -27,7 +26,7 @@
<div id="EmptyArea">
<div><img src="img/null.png"></div>
<div class="Text_Title Text_Bold trans" tid='orca2'>no model information</div>
<div id="AddModelInfoBtn" class="ButtonStyleConfirm ButtonTypeWindow trans" tid='orca1' onClick="OnClickEditProjectInfo()">Edit Project Info</div>
<div id="AddModelInfoBtn" class="trans TextS1" tid='orca1' onClick="OnClickEditProjectInfo()">Edit Project Info</div>
</div>
<div id="WholeArea">

View file

@ -378,5 +378,17 @@ body
#AddModelInfoBtn
{
border-width: 1px;
border-style: solid;
padding: 0px 10px;
border-radius: 6px;
line-height: 26px;
height: 26px;
margin-top: 20px;
}
cursor: pointer;
}
#AddModelInfoBtn:hover
{
background-color:#CDCECE;
}

View file

@ -111,11 +111,6 @@ void AppConfig::set_defaults()
if (get("background_processing").empty())
set_bool("background_processing", false);
#endif
if (get("auto_slice_after_change").empty())
set_bool("auto_slice_after_change", false);
if (get("auto_slice_change_delay_seconds").empty())
set("auto_slice_change_delay_seconds", "1");
if (get("drop_project_action").empty())
set_bool("drop_project_action", true);
@ -464,6 +459,9 @@ void AppConfig::set_defaults()
set_bool("is_split_compound", false);
}
if (get("show_spoolman_consumption_dialog").empty())
set_bool("show_spoolman_consumption_dialog", true);
// Remove legacy window positions/sizes
erase("app", "main_frame_maximized");
erase("app", "main_frame_pos");

View file

@ -104,7 +104,7 @@ public:
std::string get(const std::string &key) const
{ std::string value; this->get("app", key, value); return value; }
bool get_bool(const std::string &section, const std::string &key) const
{ return this->get(section, key) == "true" || this->get(key) == "1"; }
{ return this->get(section, key) == "true" || this->get(section, key) == "1"; }
bool get_bool(const std::string &key) const
{ return this->get_bool("app", key); }
void set(const std::string &section, const std::string &key, const std::string &value)

View file

@ -801,7 +801,28 @@ ConfigSubstitutions ConfigBase::load_from_json(const std::string &file, ForwardC
int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContext& substitution_context, bool load_inherits_to_config, std::map<std::string, std::string>& key_values, std::string& reason)
{
json j;
try {
json j;
boost::nowide::ifstream ifs(file);
ifs >> j;
ifs.close();
return load_from_json(j, substitution_context, load_inherits_to_config, key_values, reason, file);
}
catch (const std::ifstream::failure &err) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<<file<<" got a ifstream error, reason = " << err.what();
reason = std::string("ifstreamError: ") + err.what();
//throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, e.what()));
}
catch(nlohmann::detail::parse_error &err) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<<file<<" got a nlohmann::detail::parse_error, reason = " << err.what();
reason = std::string("JsonParseError: ") + err.what();
//throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, err.what()));
}
return -1;
}
int ConfigBase::load_from_json(const json &data, ConfigSubstitutionContext& substitution_context, bool load_inherits_to_config, std::map<std::string, std::string>& key_values, std::string& reason, const std::string& file)
{
std::list<std::string> different_settings_append;
std::string new_support_style;
std::string is_infill_first;
@ -855,17 +876,13 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
};
try {
boost::nowide::ifstream ifs(file);
ifs >> j;
ifs.close();
const ConfigDef* config_def = this->def();
if (config_def == nullptr) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": no config defs!";
return -1;
}
//parse the json elements
for (auto it = j.begin(); it != j.end(); it++) {
for (auto it = data.begin(); it != data.end(); it++) {
if (boost::iequals(it.key(),BBL_JSON_KEY_VERSION)) {
key_values.emplace(BBL_JSON_KEY_VERSION, it.value());
}
@ -1076,16 +1093,7 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
this->handle_legacy_composite();
return 0;
}
catch (const std::ifstream::failure &err) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<<file<<" got a ifstream error, reason = " << err.what();
reason = std::string("ifstreamError: ") + err.what();
//throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, e.what()));
}
catch(nlohmann::detail::parse_error &err) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<<file<<" got a nlohmann::detail::parse_error, reason = " << err.what();
reason = std::string("JsonParseError: ") + err.what();
//throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, err.what()));
}
catch(std::exception &err) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "<<file<<" got a generic exception, reason = " << err.what();
reason = std::string("std::exception: ") + err.what();
@ -1443,7 +1451,7 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
}
//BBS: add json support
void ConfigBase::save_to_json(const std::string &file, const std::string &name, const std::string &from, const std::string &version) const
json ConfigBase::save_to_json(const std::string &file, const std::string &name, const std::string &from, const std::string &version) const
{
json j;
//record the headers
@ -1478,12 +1486,16 @@ void ConfigBase::save_to_json(const std::string &file, const std::string &name,
}
}
boost::nowide::ofstream c;
c.open(file, std::ios::out | std::ios::trunc);
c << std::setw(4) << j << std::endl;
c.close();
if (!file.empty()) {
boost::nowide::ofstream c;
c.open(file, std::ios::out | std::ios::trunc);
c << std::setw(4) << j << std::endl;
c.close();
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", saved config to %1%\n")%file;
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", saved config to %1%\n")%file;
}
return j;
}
void ConfigBase::save(const std::string &file) const

View file

@ -15,6 +15,7 @@
#include "clonable_ptr.hpp"
#include "Exception.hpp"
#include "Point.hpp"
#include "nlohmann/json_fwd.hpp"
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/trim.hpp>
@ -2715,6 +2716,7 @@ public:
ConfigSubstitutions load_string_map(std::map<std::string, std::string> &key_values, ForwardCompatibilitySubstitutionRule compatibility_rule);
//BBS: add json support
int load_from_json(const std::string &file, ConfigSubstitutionContext& substitutions, bool load_inherits_in_config, std::map<std::string, std::string>& key_values, std::string& reason);
int load_from_json(const nlohmann::json &data, ConfigSubstitutionContext& substitutions, bool load_inherits_in_config, std::map<std::string, std::string>& key_values, std::string& reason, const std::string& file = "");
ConfigSubstitutions load_from_json(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule, std::map<std::string, std::string>& key_values, std::string& reason);
ConfigSubstitutions load_from_ini(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule);
@ -2727,7 +2729,7 @@ public:
void save(const std::string &file) const;
//BBS: add json support
void save_to_json(const std::string &file, const std::string &name, const std::string &from, const std::string &version) const;
nlohmann::json save_to_json(const std::string &file, const std::string &name, const std::string &from, const std::string &version) const;
// Set all the nullable values to nils.
void null_nullables();
@ -2949,6 +2951,14 @@ private:
std::ostream& operator<<(std::ostream& os, const DynamicConfig::DynamicConfigDifference& diff);
// An abstract class for a dynamic config that is expected to always return a valid def when calling this->def()
class DynamicConfigWithDef : public DynamicConfig
{
using DynamicConfig::DynamicConfig;
public:
const ConfigDef* def() const override = 0;
};
// Configuration store with a static definition of configuration values.
// In Slic3r, the static configuration stores are during the slicing / g-code generation for efficiency reasons,
// because the configuration values could be accessed directly.

View file

@ -1976,6 +1976,18 @@ void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* resu
result->filename = path;
}
// Check the consumption of filament against the remaining filament as reported by Spoolman
for (const auto& est : print->get_spoolman_filament_consumption_estimates()) {
double remaining_length = print->config().filament_remaining_length.get_at(est.print_config_idx);
double remaining_weight = print->config().filament_remaining_weight.get_at(est.print_config_idx);
if (est.est_used_length > remaining_length || est.est_used_weight > remaining_weight) {
std::string msg = boost::str(boost::format(_("Filament %1% does not have enough material for the print. Used: %2$.2f m, %3$.2f g, Remaining: %4$.2f m, %5$.2f g")) %
est.filament_name % (est.est_used_length * 0.001) % est.est_used_weight % (remaining_length * 0.001) % remaining_weight);
print->active_step_add_warning(PrintStateBase::WarningLevel::CRITICAL, msg, PrintStateBase::SlicingNotificationType::SlicingNotEnoughFilament);
}
}
//BBS: add some log for error output
BOOST_LOG_TRIVIAL(debug) << boost::format("Finished processing gcode to %1% ") % path_tmp;
@ -4251,8 +4263,8 @@ LayerResult GCode::process_layer(
bool is_multi_extruder = m_config.nozzle_diameter.size() > 1;
bool need_insert_timelapse_gcode_for_traditional = false;
if ((!m_wipe_tower || !m_wipe_tower->enable_timelapse_print()) && (is_BBL_Printer() || !m_config.time_lapse_gcode.value.empty())) {
need_insert_timelapse_gcode_for_traditional = ((is_i3_printer && !m_spiral_vase) || is_multi_extruder);
if (!m_wipe_tower || !m_wipe_tower->enable_timelapse_print()) {
need_insert_timelapse_gcode_for_traditional = ((is_i3_printer && !m_spiral_vase)|| is_multi_extruder);
}
bool has_insert_timelapse_gcode = false;
@ -4268,18 +4280,19 @@ LayerResult GCode::process_layer(
gcode += this->change_layer(print_z); // this will increase m_layer_index
m_layer = &layer;
m_object_layer_over_raft = false;
if (!m_config.time_lapse_gcode.value.empty() && !is_BBL_Printer()) {
DynamicConfig config;
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z));
gcode += this->placeholder_parser_process("timelapse_gcode",
print.config().time_lapse_gcode.value, m_writer.filament()->id(), &config)
+ "\n";
if(is_BBL_Printer()){
} else {
if (!m_config.time_lapse_gcode.value.empty()) {
DynamicConfig config;
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z));
gcode += this->placeholder_parser_process("timelapse_gcode", print.config().time_lapse_gcode.value, m_writer.filament()->id(),
&config) +
"\n";
}
}
if (!m_config.layer_change_gcode.value.empty()) {
if (! m_config.layer_change_gcode.value.empty()) {
DynamicConfig config;
config.set_key_value("most_used_physical_extruder_id", new ConfigOptionInt(m_config.physical_extruder_map.get_at(most_used_extruder)));
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
@ -4728,7 +4741,7 @@ LayerResult GCode::process_layer(
auto timelapse_pos=m_timelapse_pos_picker.pick_pos(ctx);
std::string timelapse_gcode;
std::string timepals_gcode;
if (!print.config().time_lapse_gcode.value.empty()) {
DynamicConfig config;
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
@ -4739,18 +4752,17 @@ LayerResult GCode::process_layer(
config.set_key_value("timelapse_pos_x", new ConfigOptionInt((int)timelapse_pos.x()));
config.set_key_value("timelapse_pos_y", new ConfigOptionInt((int)timelapse_pos.y()));
config.set_key_value("has_timelapse_safe_pos", new ConfigOptionBool(timelapse_pos != DefaultTimelapsePos));
timelapse_gcode = this->placeholder_parser_process("timelapse_gcode", print.config().time_lapse_gcode.value, m_writer.filament()->id(), &config) + "\n";
timepals_gcode = this->placeholder_parser_process("timelapse_gcode", print.config().time_lapse_gcode.value, m_writer.filament()->id(), &config) + "\n";
}
if (!timepals_gcode.empty()) {
m_writer.set_current_position_clear(false);
if (!timelapse_gcode.empty()) {
m_writer.set_current_position_clear(false);
double temp_z_after_tool_change;
if (GCodeProcessor::get_last_z_from_gcode(timelapse_gcode, temp_z_after_tool_change)) {
Vec3d pos = m_writer.get_position();
pos(2) = temp_z_after_tool_change;
m_writer.set_position(pos);
}
double temp_z_after_tool_change;
if (GCodeProcessor::get_last_z_from_gcode(timepals_gcode, temp_z_after_tool_change)) {
Vec3d pos = m_writer.get_position();
pos(2) = temp_z_after_tool_change;
m_writer.set_position(pos);
}
}
// (layer_object_label_ids.size() < 64) this restriction comes from _encode_label_ids_to_base64()
@ -4771,13 +4783,13 @@ LayerResult GCode::process_layer(
std::string end_str = std::string("; object ids of this layer") + std::to_string(m_layer_index + 1) + (" end: ") + oss.str() + "\n";
end_str += "M625\n";
timelapse_gcode = start_str + timelapse_gcode + end_str;
timepals_gcode = start_str + timepals_gcode + end_str;
}
return timelapse_gcode;
return timepals_gcode;
};
if (!need_insert_timelapse_gcode_for_traditional && is_BBL_Printer()) { // Equivalent to the timelapse gcode placed in layer_change_gcode
if (!need_insert_timelapse_gcode_for_traditional) { // Equivalent to the timelapse gcode placed in layer_change_gcode
if (FILAMENT_CONFIG(retract_when_changing_layer)) {
gcode += this->retract(false, false, auto_lift_type, true);
}
@ -4873,12 +4885,10 @@ LayerResult GCode::process_layer(
gcode_toolchange = this->set_extruder(extruder_id, print_z);
}
if (!gcode_toolchange.empty()) {
// Disable vase mode for layers that has toolchange
result.spiral_vase_enable = false;
}
gcode += std::move(gcode_toolchange);
// let analyzer tag generator aware of a role type change

View file

@ -42,7 +42,6 @@ void GCodeWriter::apply_print_config(const PrintConfig &print_config)
};
m_max_jerk_z = print_config.machine_max_jerk_z.values.front();
m_max_jerk_e = print_config.machine_max_jerk_e.values.front();
m_resolution = print_config.resolution.value;
}
void GCodeWriter::set_extruders(std::vector<unsigned int> extruder_ids)
@ -788,18 +787,8 @@ std::string GCodeWriter::_spiral_travel_to_z(double z, const Vec2d &ij_offset, c
if (!this->config.enable_arc_fitting) { // Orca: if arc fitting is disabled, approximate the arc with small linear segments
std::ostringstream oss;
const double z_start = m_pos(2); // starting Z height
// --------------------------------------------------------------------
// Determine number of segments based on Resolution
// --------------------------------------------------------------------
const double ref_resolution = 0.01; // reference resolution in mm
const double ref_segments = 16.0; // reference number of segments at reference resolution
// number of linear segments to use for approximating the arc, clamp between 4 and 24
const int segments = std::clamp(int(std::round(ref_segments * (ref_resolution / m_resolution))), 4, 24);
// --------------------------------------------------------------------
const double z_start = m_pos(2); // starting Z height
const int segments = 24; // number of linear segments to use for approximating the arc
const double px = m_pos(0) - m_x_offset; // take plate offset into consideration
const double py = m_pos(1) - m_y_offset; // take plate offset into consideration
const double cx = px + ij_offset(0); // center x

View file

@ -168,9 +168,6 @@ public:
//BBS: x, y offset for gcode generated
double m_x_offset{ 0 };
double m_y_offset{ 0 };
// Orca: slicing resolution in mm
double m_resolution = 0.01;
std::string m_gcode_label_objects_start;
std::string m_gcode_label_objects_end;

View file

@ -161,18 +161,11 @@ void extend_default_config_length(DynamicPrintConfig& config, const bool set_nil
int process_variant_length = default_param_length;
int machine_variant_length = default_param_length;
// Orca: use nozzle/extruder count as the default printer variant length
// because non-BBL multi-extruder printers currently do not support extruder variant.
if (config.has("nozzle_diameter")) {
auto* nozzle_diameter = dynamic_cast<const ConfigOptionFloats*>(config.option("nozzle_diameter"));
machine_variant_length = nozzle_diameter->values.size();
}
if(config.has("filament_extruder_variant"))
filament_variant_length = config.option<ConfigOptionStrings>("filament_extruder_variant")->size();
if(config.has("print_extruder_variant"))
process_variant_length = config.option<ConfigOptionStrings>("print_extruder_variant")->size();
if(config.has("printer_extruder_variant")) // Use existing variant list if specified, so BBL's multi-variant profiles still works
if(config.has("printer_extruder_variant"))
machine_variant_length = config.option<ConfigOptionStrings>("printer_extruder_variant")->size();
auto replace_nil_and_resize = [&](const std::string & key, int length){
@ -519,7 +512,7 @@ void Preset::load_info(const std::string& file)
}
}
void Preset::save_info(std::string file)
void Preset::save_info(std::string file) const
{
//BBS: add project embedded preset logic
if (this->is_project_embedded)
@ -558,7 +551,7 @@ void Preset::remove_files()
}
//BBS: add logic for only difference save
void Preset::save(DynamicPrintConfig* parent_config)
void Preset::save(const DynamicPrintConfig* parent_config, json* output /*= nullptr*/) const
{
//BBS: add project embedded preset logic
if (this->is_project_embedded)
@ -575,7 +568,14 @@ void Preset::save(DynamicPrintConfig* parent_config)
else
from_str = std::string("Default");
boost::filesystem::create_directories(fs::path(this->file).parent_path());
json j;
// If an empty string is passed as the file path, the preset is not outputted to a file
std::string file_str;
if (!output) {
file_str = this->file;
boost::filesystem::create_directories(fs::path(file_str).parent_path());
}
//BBS: only save difference if it has parent
if (parent_config) {
@ -595,14 +595,14 @@ void Preset::save(DynamicPrintConfig* parent_config)
for (auto option: dirty_options)
{
ConfigOption *opt_src = config.option(option);
const ConfigOption *opt_src = config.option(option);
ConfigOption *opt_dst = temp_config.option(option, true);
if (opt_dst->is_scalar() || !(opt_dst->nullable()))
opt_dst->set(opt_src);
else {
ConfigOptionVectorBase* opt_vec_src = static_cast<ConfigOptionVectorBase*>(opt_src);
const ConfigOptionVectorBase* opt_vec_src = static_cast<const ConfigOptionVectorBase*>(opt_src);
ConfigOptionVectorBase* opt_vec_dst = static_cast<ConfigOptionVectorBase*>(opt_dst);
ConfigOptionVectorBase* opt_vec_inherit = static_cast<ConfigOptionVectorBase*>(parent_config->option(option));
const ConfigOptionVectorBase* opt_vec_inherit = static_cast<const ConfigOptionVectorBase*>(parent_config->option(option));
if (opt_vec_src->size() == 1)
opt_dst->set(opt_src);
else if (key_set1->find(option) != key_set1->end()) {
@ -615,19 +615,23 @@ void Preset::save(DynamicPrintConfig* parent_config)
opt_dst->set(opt_src);
}
}
temp_config.save_to_json(this->file, this->name, from_str, this->version.to_string());
j = temp_config.save_to_json(file_str, this->name, from_str, this->version.to_string());
} else if (!filament_id.empty() && inherits().empty()) {
DynamicPrintConfig temp_config = config;
temp_config.set_key_value(BBL_JSON_KEY_FILAMENT_ID, new ConfigOptionString(filament_id));
temp_config.save_to_json(this->file, this->name, from_str, this->version.to_string());
j = temp_config.save_to_json(file_str, this->name, from_str, this->version.to_string());
} else {
this->config.save_to_json(this->file, this->name, from_str, this->version.to_string());
j = this->config.save_to_json(file_str, this->name, from_str, this->version.to_string());
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " save config for: " << this->name << " and filament_id: " << filament_id << " and base_id: " << this->base_id;
fs::path idx_file(this->file);
idx_file.replace_extension(".info");
this->save_info(idx_file.string());
if (output) {
*output = std::move(j);
} else {
fs::path idx_file(this->file);
idx_file.replace_extension(".info");
this->save_info(idx_file.string());
}
}
void Preset::reload(Preset const &parent)
@ -990,7 +994,8 @@ static std::vector<std::string> s_Preset_filament_options {/*"filament_colour",
"filament_long_retractions_when_cut","filament_retraction_distances_when_cut", "idle_temperature",
//BBS filament change length while the extruder color
"filament_change_length","filament_flush_volumetric_speed","filament_flush_temp",
"long_retractions_when_ec", "retraction_distances_when_ec"
"long_retractions_when_ec", "retraction_distances_when_ec",
"spoolman_spool_id"
};
static std::vector<std::string> s_Preset_machine_limits_options {
@ -1026,7 +1031,7 @@ static std::vector<std::string> s_Preset_printer_options {
"cooling_tube_retraction",
"cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming",
"z_offset",
"disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "pellet_modded_printer", "support_multi_bed_types", "default_bed_type", "bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut",
"disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "pellet_modded_printer", "support_multi_bed_types", "handles_spoolman_consumption", "default_bed_type", "bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut",
"bed_temperature_formula", "nozzle_flush_dataset"
};
@ -2311,6 +2316,24 @@ Preset& PresetCollection::load_preset(const std::string &path, const std::string
return preset;
}
bool PresetCollection::load_full_config(DynamicPrintConfig& config)
{
const auto& inherits = Preset::inherits(config);
if (inherits.empty())
return true;
const auto inherits_preset = this->find_preset2(inherits);
if (!inherits_preset)
return false;
const auto& inherits_config = inherits_preset->config;
const auto input_copy = config;
config.clear();
config.apply(inherits_config);
config.apply(input_copy);
return true;
}
bool PresetCollection::clone_presets(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::function<void(Preset &, Preset::Type &)> modifier, bool force_rewritten)
{
std::vector<Preset> new_presets;
@ -2392,7 +2415,7 @@ bool PresetCollection::clone_presets_for_filament(Preset const *const & pres
{
std::vector<Preset const *> const presets = {preset};
return clone_presets(presets, failures, [&filament_name, &filament_id, &dynamic_config, &compatible_printers](Preset &preset, Preset::Type &type) {
preset.name = filament_name + " @" + compatible_printers;
preset.name = filament_name + (compatible_printers.empty() ? "" : (" @" + compatible_printers));
if (type == Preset::TYPE_FILAMENT) {
preset.config.apply_only(dynamic_config, {"filament_vendor", "compatible_printers", "filament_type"},true);
@ -2689,7 +2712,7 @@ const std::string& PresetCollection::get_preset_name_by_alias(const std::string&
it_preset->is_visible && (it_preset->is_compatible || size_t(it_preset - m_presets.begin()) == m_idx_selected))
return it_preset->name;
}
return alias;
}

View file

@ -14,6 +14,7 @@
#include "PrintConfig.hpp"
#include "Semver.hpp"
#include "ProjectTask.hpp"
#include "nlohmann/json.hpp"
//BBS: change system directories
#define PRESET_SYSTEM_DIR "system"
@ -268,17 +269,38 @@ public:
long long updated_time{0}; //last updated time
std::map<std::string, std::string> key_values;
// indicate if spoolman is enabled for this preset
// works for filament presets only. All other profiles return false
bool spoolman_enabled() const {
if (type == TYPE_FILAMENT)
return config.opt_int("spoolman_spool_id", 0) > 0;
return false;
}
struct SpoolmanStatistics {
// Orca: spoolman statistics. these are not stored in the preset file
double remaining_length = 0;
double remaining_weight = 0;
double used_length = 0;
double used_weight = 0;
bool archived = false;
};
// the statistics a ptr so that they are a shared value for both the saved and edited preset
std::shared_ptr<SpoolmanStatistics> spoolman_statistics = std::make_shared<SpoolmanStatistics>();
static std::string get_type_string(Preset::Type type);
// get string type for iot
static std::string get_iot_type_string(Preset::Type type);
static Preset::Type get_type_from_string(std::string type_str);
void load_info(const std::string& file);
void save_info(std::string file = "");
void save_info(std::string file = "") const;
void remove_files();
//BBS: add logic for only difference save
//if parent_config is null, save all keys, otherwise, only save difference
void save(DynamicPrintConfig* parent_config);
//if output is null, save the data to file, otherwise, save the data to output
void save(const DynamicPrintConfig* parent_config, nlohmann::json* output = nullptr) const;
void reload(Preset const & parent);
// Return a label of this preset, consisting of a name and a "(modified)" suffix, if this preset is dirty.
@ -494,6 +516,9 @@ public:
Preset& load_preset(const std::string &path, const std::string &name, const DynamicPrintConfig &config, bool select = true, Semver file_version = Semver());
Preset& load_preset(const std::string &path, const std::string &name, DynamicPrintConfig &&config, bool select = true, Semver file_version = Semver());
// Loads the config options from the inherits preset into the provided partial config
bool load_full_config(DynamicPrintConfig& config);
bool clone_presets(std::vector<Preset const *> const &presets, std::vector<std::string> &failures, std::function<void(Preset &, Preset::Type &)> modifier, bool force_rewritten = false);
bool clone_presets_for_printer(
std::vector<Preset const *> const &templates, std::vector<std::string> &failures, std::string const &printer, std::function <std::string(std::string)> create_filament_id, bool force_rewritten = false);
@ -693,6 +718,15 @@ public:
size_t num_visible() const { return std::count_if(m_presets.begin(), m_presets.end(), [](const Preset &preset){return preset.is_visible;}); }
// gets all presets that are visible and compatible
std::vector<Preset *> get_compatible() {
std::vector<Preset *> ret;
for (auto& item : m_presets)
if (item.is_visible && item.is_compatible)
ret.emplace_back(&item);
return ret;
}
// Compare the content of get_selected_preset() with get_edited_preset() configs, return true if they differ.
bool current_is_dirty() const
{ return is_dirty(&this->get_edited_preset(), &this->get_selected_preset()); }

View file

@ -24,6 +24,7 @@
#include <boost/locale.hpp>
#include <boost/log/trivial.hpp>
#include <miniz/miniz.h>
#include <slic3r/Utils/Spoolman.hpp>
// Mark string for localization and translate.
#define L(s) Slic3r::I18N::translate(s)
@ -265,7 +266,7 @@ PresetBundle::PresetBundle()
for(const std::string& opt_key : default_config.keys()){
ConfigOption* opt = default_config.optptr(opt_key, false);
bool is_override_key = std::find(filament_extruder_override_keys.begin(),filament_extruder_override_keys.end(), opt_key) != filament_extruder_override_keys.end();
if(!is_override_key || !opt->nullable())
if(!is_override_key || !opt->nullable())
continue;
opt->deserialize("nil",ForwardCompatibilitySubstitutionRule::Disable);
}
@ -2850,7 +2851,7 @@ DynamicPrintConfig PresetBundle::full_config_secure(std::optional<std::vector<in
config.erase("printhost_cafile");
config.erase("printhost_user");
config.erase("printhost_password");
config.erase("printhost_port");
config.erase("printhost_port");
return config;
}
@ -2892,6 +2893,8 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optio
std::vector<std::string> print_compatible_printers;
//BBS: add logic for settings check between different system presets
std::vector<std::string> different_settings;
std::vector<double> filament_remaining_weight;
std::vector<double> filament_remaining_length;
std::string different_print_settings, different_printer_settings;
compatible_printers_condition.emplace_back(this->prints.get_edited_preset().compatible_printers_condition());
@ -2926,6 +2929,8 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optio
out.apply(filament_config);
compatible_printers_condition.emplace_back(this->filaments.get_edited_preset().compatible_printers_condition());
compatible_prints_condition .emplace_back(this->filaments.get_edited_preset().compatible_prints_condition());
filament_remaining_weight.emplace_back(this->filaments.get_edited_preset().spoolman_statistics->remaining_weight);
filament_remaining_length.emplace_back(this->filaments.get_edited_preset().spoolman_statistics->remaining_length);
//BBS: add logic for settings check between different system presets
//std::string filament_inherits = this->filaments.get_edited_preset().inherits();
std::string current_preset_name = this->filament_presets[0];
@ -2971,6 +2976,8 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optio
DynamicPrintConfig &cfg_rw = *const_cast<DynamicPrintConfig*>(cfg);
compatible_printers_condition.emplace_back(Preset::compatible_printers_condition(cfg_rw));
compatible_prints_condition .emplace_back(Preset::compatible_prints_condition(cfg_rw));
filament_remaining_weight.emplace_back(preset->spoolman_statistics->remaining_weight);
filament_remaining_length.emplace_back(preset->spoolman_statistics->remaining_length);
//BBS: add logic for settings check between different system presets
std::string filament_inherits = Preset::inherits(cfg_rw);
@ -3115,6 +3122,9 @@ DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optio
out.option<ConfigOptionString >("printer_settings_id", true)->value = this->printers.get_selected_preset_name();
out.option<ConfigOptionStrings>("filament_ids", true)->values = filament_ids;
out.option<ConfigOptionInts>("filament_map", true)->values = filament_maps;
out.option<ConfigOptionFloats>("filament_remaining_weight", true)->values = filament_remaining_weight;
out.option<ConfigOptionFloats>("filament_remaining_length", true)->values = filament_remaining_length;
// Serialize the collected "compatible_printers_condition" and "inherits" fields.
// There will be 1 + num_exturders fields for "inherits" and 2 + num_extruders for "compatible_printers_condition" stored.
// The vector will not be stored if all fields are empty strings.

View file

@ -38,6 +38,7 @@
#include "GCode/ConflictChecker.hpp"
#include "ParameterUtils.hpp"
#include "slic3r/Utils/Spoolman.hpp"
#include <codecvt>
@ -3541,6 +3542,34 @@ Vec3d Print::shrinkage_compensation() const
return { xy_compensation, xy_compensation, z_compensation };
}
std::vector<SpoolmanFilamentConsumptionEstimate> Print::get_spoolman_filament_consumption_estimates() const
{
std::vector<SpoolmanFilamentConsumptionEstimate> spoolman_filament_consumption;
std::vector<int> filaments_with_spoolman_idxs;
for (int l = 0; l < m_config.spoolman_spool_id.size(); ++l) {
if (m_config.spoolman_spool_id.get_at(l) > 0)
filaments_with_spoolman_idxs.push_back(l);
}
// get used filament (meters and grams) from used volume in respect to the active extruder
auto get_used_filament_from_volume = [&](const int& extruder_id) -> std::optional<std::pair<double, double>> {
// confirm the item exists in the stats map
if (m_print_statistics.filament_stats.count(extruder_id) <= 0)
return {};
const double& volume = m_print_statistics.filament_stats.at(extruder_id);
return std::make_optional(std::pair { volume / (PI * sqr(0.5 * m_config.filament_diameter.get_at(extruder_id))),
volume * m_config.filament_density.get_at(extruder_id) * 0.001 });
};
for (const auto& idx : filaments_with_spoolman_idxs)
if (auto usage_opt = get_used_filament_from_volume(idx); usage_opt.has_value())
spoolman_filament_consumption.emplace_back(idx, m_config, usage_opt.value());
return spoolman_filament_consumption;
}
const std::string PrintStatistics::FilamentUsedG = "filament used [g]";
const std::string PrintStatistics::FilamentUsedGMask = "; filament used [g] =";

View file

@ -878,6 +878,28 @@ enum FilamentCompatibilityType {
LowMidMixed
};
struct SpoolmanFilamentConsumptionEstimate
{
const unsigned int print_config_idx;
const unsigned int spoolman_spool_id;
const std::string filament_name;
const double est_used_length;
const double est_used_weight;
SpoolmanFilamentConsumptionEstimate(const unsigned int& print_config_idx, const PrintConfig& config, const double& est_used_length, const double& est_used_weight)
: print_config_idx(print_config_idx)
, spoolman_spool_id(config.spoolman_spool_id.get_at(print_config_idx))
, filament_name(config.filament_settings_id.get_at(print_config_idx))
, est_used_length(est_used_length)
, est_used_weight(est_used_weight)
{}
// Alternate that allows the estimates to be provided as a std::pair [est_used_length, est_used_weight]
SpoolmanFilamentConsumptionEstimate(const unsigned int& print_config_idx, const PrintConfig& config, const std::pair<double, double>& estimates) :
SpoolmanFilamentConsumptionEstimate(print_config_idx, config, estimates.first, estimates.second) {}
};
// The complete print tray with possibly multiple objects.
class Print : public PrintBaseWithState<PrintStep, psCount>
{
@ -1108,6 +1130,8 @@ public:
std::tuple<float, float> object_skirt_offset(double margin_height = 0) const;
std::vector<SpoolmanFilamentConsumptionEstimate> get_spoolman_filament_consumption_estimates() const;
protected:
// Invalidates the step, and its depending steps in Print.
bool invalidate_step(PrintStep step);
@ -1171,7 +1195,7 @@ private:
ConflictResultOpt m_conflict_result;
FakeWipeTower m_fake_wipe_tower;
bool m_has_auto_filament_map_result{false};
std::vector<std::set<int>> m_geometric_unprintable_filaments;
//SoftFever: calibration

View file

@ -62,7 +62,8 @@ public:
SlicingReplaceInitEmptyLayers,
SlicingNeedSupportOn,
SlicingEmptyGcodeLayers,
SlicingGcodeOverlap
SlicingGcodeOverlap,
SlicingNotEnoughFilament
};
typedef size_t TimeStamp;

View file

@ -2676,6 +2676,14 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionStrings());
def->cli = ConfigOptionDef::nocli;
def = this->add("filament_remaining_weight", coFloats);
def->set_default_value(new ConfigOptionFloats());
def->cli = ConfigOptionDef::nocli;
def = this->add("filament_remaining_length", coFloats);
def->set_default_value(new ConfigOptionFloats());
def->cli = ConfigOptionDef::nocli;
def = this->add("filament_vendor", coStrings);
def->label = L("Vendor");
def->tooltip = L("Vendor of filament. For show only.");
@ -2683,6 +2691,15 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionStrings{L("(Undefined)")});
def->cli = ConfigOptionDef::nocli;
def = this->add("spoolman_spool_id", coInts);
def->label = L("Spoolman ID");
def->tooltip = L("The spool ID of this filament profile within your Spoolman instance. This will allow automatic spool switching when "
"using moonraker to track spool usage and one touch updating of this filament profile from the Spoolman properties. "
"Setting this to a value of 0 disables its functionality.");
def->mode = comSimple;
def->set_default_value(new ConfigOptionInts({ 0 }));
def->cli = ConfigOptionDef::nocli;
def = this->add("infill_direction", coFloat);
def->label = L("Sparse infill direction");
def->category = L("Strength");
@ -3535,6 +3552,12 @@ void PrintConfigDef::init_fff_params()
def->mode = comSimple;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("handles_spoolman_consumption", coBool);
def->label = L("Handles Spoolman consumption");
def->tooltip = L("Indicates that the printer will handle sending consumption requests to Spoolman");
def->mode = comSimple;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("gcode_label_objects", coBool);
def->label = L("Label objects");
def->tooltip = L("Enable this to add comments into the G-code labeling print moves with what object they belong to,"
@ -7739,7 +7762,7 @@ DynamicPrintConfig DynamicPrintConfig::full_print_config()
return DynamicPrintConfig((const PrintRegionConfig&)FullPrintConfig::defaults());
}
DynamicPrintConfig::DynamicPrintConfig(const StaticPrintConfig& rhs) : DynamicConfig(rhs, rhs.keys_ref())
DynamicPrintConfig::DynamicPrintConfig(const StaticPrintConfig& rhs) : DynamicConfigWithDef(rhs, rhs.keys_ref())
{
}
@ -8003,41 +8026,8 @@ size_t DynamicPrintConfig::get_parameter_size(const std::string& param_name, siz
return extruder_nums;
}
// Orca: Special handling for extruder variants
// BBL printers have extruder variants pre-defined in system profiles, however for customized multi-extruder profile,
// we need to set up these parameters automatically, otherwise per-extruder options won't work properly.
static void extend_extruder_variant(DynamicPrintConfig& config, const unsigned int num_extruders)
{
// 1. Make sure the `extruder_variant_list` is the same length as extruder cnt
auto extruder_variant_opt = dynamic_cast<ConfigOptionStrings*>(config.option("extruder_variant_list"));
assert(extruder_variant_opt != nullptr);
extruder_variant_opt->resize(num_extruders, extruder_variant_opt); // Use the first option as the default value, so all extruders have the same variant
// 2. Update `printer_extruder_variant` and `printer_extruder_id` based on `extruder_variant_list`
auto printer_extruder_id_opt = dynamic_cast<ConfigOptionInts*>(config.option("printer_extruder_id"));
assert(printer_extruder_id_opt != nullptr);
printer_extruder_id_opt->values.clear();
auto printer_extruder_variant_opt = dynamic_cast<ConfigOptionStrings*>(config.option("printer_extruder_variant"));
assert(printer_extruder_variant_opt != nullptr);
printer_extruder_variant_opt->values.clear();
for (int i = 0; i < num_extruders; i++) {
// `extruder_variant_list` specifies supported variant of each nozzle/extruder,
// each item is a comma separated list of variants (extruder type + nozzle flow type) this extruder supported
std::string variant = extruder_variant_opt->get_at(i);
std::vector<std::string> variants_list;
boost::split(variants_list, variant, boost::is_any_of(","), boost::token_compress_on);
if (!variants_list.empty()) {
printer_extruder_id_opt->values.insert(printer_extruder_id_opt->values.end(), variants_list.size(), i + 1);
printer_extruder_variant_opt->values.insert(printer_extruder_variant_opt->values.end(), variants_list.begin(), variants_list.end());
}
}
}
void DynamicPrintConfig::set_num_extruders(unsigned int num_extruders)
{
extend_extruder_variant(*this, num_extruders);
const auto &defaults = FullPrintConfig::defaults();
for (const std::string &key : print_config_def.extruder_option_keys()) {
if (key == "default_filament_profile")

View file

@ -563,14 +563,14 @@ double min_object_distance(const ConfigBase &cfg);
// The dynamic configuration is also used to store user modifications of the print global parameters,
// so the modified configuration values may be diffed against the active configuration
// to invalidate the proper slicing resp. g-code generation processing steps.
class DynamicPrintConfig : public DynamicConfig
class DynamicPrintConfig : public DynamicConfigWithDef
{
public:
DynamicPrintConfig() {}
DynamicPrintConfig(const DynamicPrintConfig &rhs) : DynamicConfig(rhs) {}
DynamicPrintConfig(DynamicPrintConfig &&rhs) noexcept : DynamicConfig(std::move(rhs)) {}
DynamicPrintConfig(const DynamicPrintConfig &rhs) : DynamicConfigWithDef(rhs) {}
DynamicPrintConfig(DynamicPrintConfig &&rhs) noexcept : DynamicConfigWithDef(std::move(rhs)) {}
explicit DynamicPrintConfig(const StaticPrintConfig &rhs);
explicit DynamicPrintConfig(const ConfigBase &rhs) : DynamicConfig(rhs) {}
explicit DynamicPrintConfig(const ConfigBase &rhs) : DynamicConfigWithDef(rhs) {}
DynamicPrintConfig& operator=(const DynamicPrintConfig &rhs) { DynamicConfig::operator=(rhs); return *this; }
DynamicPrintConfig& operator=(DynamicPrintConfig &&rhs) noexcept { DynamicConfig::operator=(std::move(rhs)); return *this; }
@ -1241,6 +1241,7 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, fan_kickstart))
((ConfigOptionBool, fan_speedup_overhangs))
((ConfigOptionFloat, fan_speedup_time))
((ConfigOptionStrings, filament_settings_id))
((ConfigOptionFloats, filament_diameter))
((ConfigOptionBoolsNullable, filament_adaptive_volumetric_speed))
((ConfigOptionStrings, volumetric_speed_coefficients))
@ -1378,6 +1379,9 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionStrings, small_area_infill_flow_compensation_model))
((ConfigOptionBool, has_scarf_joint_seam))
((ConfigOptionInts, spoolman_spool_id))
((ConfigOptionFloats, filament_remaining_weight))
((ConfigOptionFloats, filament_remaining_length))
)
// This object is mapped to Perl as Slic3r::Config::Print.

View file

@ -2168,7 +2168,7 @@ static void triangulate_slice(
float z,
bool triangulate,
bool normals_down,
const std::map<int, Vec3f> &section_vertices_map)
const std::map<int, Vec3f*> &section_vertices_map)
{
sort_remove_duplicates(slice_vertices);
@ -2240,7 +2240,7 @@ static void triangulate_slice(
int idx = -1;
bool exist = false;
for (auto iter = section_vertices_map.begin(); iter != section_vertices_map.end(); iter++) {
if (is_equal(v, iter->second)) {
if (is_equal(v, *iter->second)) {
idx = iter->first;
exist = true;
break;
@ -2348,7 +2348,7 @@ void cut_mesh(const indexed_triangle_set& mesh, float z, indexed_triangle_set* u
IntersectionLines upper_lines, lower_lines;
std::vector<int> upper_slice_vertices, lower_slice_vertices;
std::vector<Vec3i32> facets_edge_ids = its_face_edge_ids(mesh);
std::map<int, Vec3f> section_vertices_map;
std::map<int, Vec3f *> section_vertices_map;
for (int facet_idx = 0; facet_idx < int(mesh.indices.size()); ++ facet_idx) {
const stl_triangle_vertex_indices &facet = mesh.indices[facet_idx];
@ -2357,8 +2357,8 @@ void cut_mesh(const indexed_triangle_set& mesh, float z, indexed_triangle_set* u
float max_z = std::max(vertices[0].z(), std::max(vertices[1].z(), vertices[2].z()));
for (size_t i = 0; i < 3; i++) {
if (is_equal(z, vertices[i].z()) && section_vertices_map.find(facet(i)) == section_vertices_map.end()) {
section_vertices_map.emplace(facet(i), vertices[i]);
if (is_equal(z, vertices[i].z()) && section_vertices_map[facet(i)] == nullptr) {
section_vertices_map[facet(i)] = new Vec3f(vertices[i].x(), vertices[i].y(), vertices[i].z());
}
}
// intersect facet with cutting plane
@ -2554,6 +2554,7 @@ void cut_mesh(const indexed_triangle_set& mesh, float z, indexed_triangle_set* u
}
#endif // NDEBUG
}
std::map<int, Vec3f*>().swap(section_vertices_map);
}
} // namespace Slic3r

View file

@ -497,6 +497,8 @@ set(SLIC3R_GUI_SOURCES
GUI/Widgets/Label.cpp
GUI/Widgets/LabeledStaticBox.cpp
GUI/Widgets/LabeledStaticBox.hpp
GUI/Widgets/LoadingSpinner.cpp
GUI/Widgets/LoadingSpinner.hpp
GUI/Widgets/Label.hpp
GUI/Widgets/PopupWindow.cpp
GUI/Widgets/PopupWindow.hpp
@ -619,10 +621,18 @@ set(SLIC3R_GUI_SOURCES
Utils/UndoRedo.cpp
Utils/UndoRedo.hpp
Utils/WebSocketClient.hpp
Utils/Spoolman.cpp
Utils/Spoolman.hpp
GUI/SpoolmanImportDialog.cpp
GUI/SpoolmanImportDialog.hpp
GUI/SpoolmanDialog.cpp
GUI/SpoolmanDialog.hpp
Utils/WxFontUtils.cpp
Utils/WxFontUtils.hpp
Utils/FileTransferUtils.cpp
Utils/FileTransferUtils.hpp
Utils/SpoolmanConfig.cpp
Utils/SpoolmanConfig.hpp
)
add_subdirectory(GUI/DeviceCore)

View file

@ -57,15 +57,32 @@ void AMSMaterialsSetting::create()
m_sizer_button->Add(0, 0, 1, wxEXPAND, 0);
m_button_confirm = new Button(this, _L("Confirm"));
m_button_confirm->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_btn_bg_green = StateColor(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed), std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_button_confirm->SetBackgroundColor(m_btn_bg_green);
m_button_confirm->SetBorderColor(wxColour(0, 150, 136));
m_button_confirm->SetTextColor(wxColour("#FFFFFE"));
m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_button_confirm->SetCornerRadius(FromDIP(12));
m_button_confirm->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_ok, this);
m_button_reset = new Button(this, _L("Reset"));
m_button_reset->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_btn_bg_gray = StateColor(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed), std::pair<wxColour, int>(*wxWHITE, StateColor::Focused),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
m_button_reset->SetBackgroundColor(m_btn_bg_gray);
m_button_reset->SetBorderColor(AMS_MATERIALS_SETTING_GREY900);
m_button_reset->SetTextColor(AMS_MATERIALS_SETTING_GREY900);
m_button_reset->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_button_reset->SetCornerRadius(FromDIP(12));
m_button_reset->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_reset, this);
m_button_close = new Button(this, _L("Close"));
m_button_close->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_close->SetBackgroundColor(m_btn_bg_gray);
m_button_close->SetBorderColor(AMS_MATERIALS_SETTING_GREY900);
m_button_close->SetTextColor(AMS_MATERIALS_SETTING_GREY900);
m_button_close->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_button_close->SetCornerRadius(FromDIP(12));
m_button_close->Bind(wxEVT_BUTTON, &AMSMaterialsSetting::on_select_close, this);
m_sizer_button->Add(m_button_confirm, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(20));
@ -819,7 +836,7 @@ void AMSMaterialsSetting::update_widgets()
bool AMSMaterialsSetting::Show(bool show)
{
if (show) {
m_button_confirm->Rescale(); // ORCA re applies size
m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20)));
m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20)));
//m_clr_picker->set_color(m_clr_picker->GetParent()->GetBackgroundColour());
@ -1176,7 +1193,9 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
if ( !this->obj || m_filament_selection < 0) {
m_input_k_val->Enable(false);
m_input_n_val->Enable(false);
m_button_confirm->Disable(); // ORCA No need to change style
m_button_confirm->Disable();
m_button_confirm->SetBackgroundColor(wxColour(0x90, 0x90, 0x90));
m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90));
m_comboBox_cali_result->Clear();
m_comboBox_cali_result->SetValue(wxEmptyString);
m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString);
@ -1185,7 +1204,10 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt)
return;
}
else {
m_button_confirm->Enable(true); // ORCA No need to change style
m_button_confirm->SetBackgroundColor(m_btn_bg_green);
m_button_confirm->SetBorderColor(wxColour(0, 150, 136));
m_button_confirm->SetTextColor(wxColour("#FFFFFE"));
m_button_confirm->Enable(true);
}
//filament id
@ -1335,9 +1357,12 @@ void AMSMaterialsSetting::on_dpi_changed(const wxRect &suggested_rect)
degree->msw_rescale();
bitmap_max_degree->SetBitmap(degree->bmp());
bitmap_min_degree->SetBitmap(degree->bmp());
m_button_reset->Rescale(); // ORCA
m_button_confirm->Rescale(); // ORCA
m_button_close->Rescale(); // ORCA
m_button_reset->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_button_reset->SetCornerRadius(FromDIP(12));
m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_button_confirm->SetCornerRadius(FromDIP(12));
m_button_close->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
m_button_close->SetCornerRadius(FromDIP(12));
this->Refresh();
}

View file

@ -39,8 +39,25 @@ BBLStatusBarSend::BBLStatusBarSend(wxWindow *parent, int id)
//StateColor btn_bd_white(std::pair<wxColour, int>(*wxWHITE, StateColor::Disabled), std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
StateColor btn_bt_white(std::pair<wxColour, int>(wxColour(0x90, 0x90, 0x90), StateColor::Disabled),
std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
StateColor btn_bd_white(std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Disabled),
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
StateColor btn_txt_white(std::pair<wxColour, int>(wxColour("#FFFFFE"), StateColor::Disabled), std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal));
m_cancelbutton = new Button(m_self, _L("Cancel"));
m_cancelbutton->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_cancelbutton->SetSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22)));
m_cancelbutton->SetMinSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22)));
m_cancelbutton->SetMaxSize(wxSize(m_self->FromDIP(58), m_self->FromDIP(22)));
m_cancelbutton->SetBackgroundColor(btn_bt_white);
m_cancelbutton->SetBorderColor(btn_bd_white);
m_cancelbutton->SetTextColor(btn_txt_white);
m_cancelbutton->SetCornerRadius(m_self->FromDIP(12));
m_cancelbutton->Bind(wxEVT_BUTTON,
[this](wxCommandEvent &evt) {
cancel();

View file

@ -254,9 +254,11 @@ void BackgroundSlicingProcess::process_fff()
finalize_gcode();
else
export_gcode();
wxQueueEvent(wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_finished_id));
} else if (! m_upload_job.empty()) {
wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id));
prepare_upload();
wxQueueEvent(wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_finished_id));
} else {
m_print->set_status(100, _utf8(L("Slicing complete")));
}
@ -897,10 +899,10 @@ void BackgroundSlicingProcess::export_gcode()
}
// BBS
auto evt = new wxCommandEvent(m_event_export_finished_id, GUI::wxGetApp().mainframe->m_plater->GetId());
wxString output_gcode_str = wxString::FromUTF8(export_path.c_str(), export_path.length());
evt->SetString(output_gcode_str);
wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt);
// auto evt = new wxCommandEvent(m_event_export_finished_id, GUI::wxGetApp().mainframe->m_plater->GetId());
// wxString output_gcode_str = wxString::FromUTF8(export_path.c_str(), export_path.length());
// evt->SetString(output_gcode_str);
// wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, evt);
// BBS: to be checked. Whether use export_path or output_path.
gcode_add_line_number(export_path, m_fff_print->full_print_config());

View file

@ -135,14 +135,32 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
wxBoxSizer* m_sizer_button = new wxBoxSizer(wxHORIZONTAL);
m_sizer_button->Add(0, 0, 1, wxEXPAND, 5);
m_button_bind = new Button(request_bind_panel, _L("Confirm"));
m_button_bind->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Disabled),
std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_button_bind->SetBackgroundColor(btn_bg_green);
m_button_bind->SetBorderColor(*wxWHITE);
m_button_bind->SetTextColor(wxColour("#FFFFFE"));
m_button_bind->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_bind->SetCornerRadius(FromDIP(12));
m_button_bind->Enable(false);
StateColor btn_bg_white(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
m_button_cancel = new Button(request_bind_panel, _L("Cancel"));
m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_cancel->SetBackgroundColor(btn_bg_white);
m_button_cancel->SetBorderColor(BIND_DIALOG_GREY900);
m_button_cancel->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetTextColor(BIND_DIALOG_GREY900);
m_button_cancel->SetCornerRadius(FromDIP(12));
m_sizer_button->Add(m_button_bind, 0, wxALIGN_CENTER, 0);
m_sizer_button->Add(0, 0, 0, wxLEFT, ButtonProps::ChoiceButtonGap());
m_sizer_button->Add(0, 0, 0, wxLEFT, FromDIP(13));
m_sizer_button->Add(m_button_cancel, 0, wxALIGN_CENTER, 0);
@ -161,7 +179,7 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
sizer_request->Add(0, 0, 0, wxTOP, FromDIP(5));
sizer_request->Add(ping_code_input, 0, wxLEFT, FromDIP(10));
sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10));
sizer_request->Add(m_sizer_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, ButtonProps::ChoiceButtonGap());
sizer_request->Add(m_sizer_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, FromDIP(15));
request_bind_panel->SetSizer(sizer_request);
request_bind_panel->Layout();
request_bind_panel->Fit();
@ -179,8 +197,12 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
m_sizer_binding_button->Add(0, 0, 1, wxEXPAND, 5);
m_button_close = new Button(binding_panel, _L("Close"));
m_button_close->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_close->SetBackgroundColor(btn_bg_white);
m_button_close->SetBorderColor(BIND_DIALOG_GREY900);
m_button_close->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_close->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_close->SetTextColor(BIND_DIALOG_GREY900);
m_button_close->SetCornerRadius(FromDIP(12));
m_sizer_binding_button->Add(m_button_close, 0, wxALIGN_CENTER, 0);
auto sizer_binding = new wxBoxSizer(wxVERTICAL);
@ -189,7 +211,7 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/)
sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(10));
sizer_binding->Add(m_loading_tip_txt, 0, wxALIGN_CENTER, 0);
sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(30));
sizer_binding->Add(m_sizer_binding_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, ButtonProps::ChoiceButtonGap());
sizer_binding->Add(m_sizer_binding_button, 0, wxALIGN_RIGHT | wxRIGHT, FromDIP(20));
binding_panel->SetSizer(sizer_binding);
binding_panel->Layout();
binding_panel->Fit();
@ -462,7 +484,7 @@ PingCodeBindDialog::~PingCodeBindDialog() {
wxString txt = _L("Thank you for purchasing a Bambu Lab device. Before using your Bambu Lab device, please read the terms and conditions. "
"By clicking to agree to use your Bambu Lab device, you agree to abide by the Privacy Policy and Terms of Use (collectively, the \"Terms\"). "
"If you do not comply with or agree to the Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services.");
ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Terms and Conditions"), ConfirmBeforeSendDialog::VisibleButtons::ONLY_CONFIRM); // ORCA VisibleButtons instead ButtonStyle
ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Terms and Conditions"), ConfirmBeforeSendDialog::ButtonStyle::ONLY_CONFIRM);
confirm_dlg.update_text(txt);
confirm_dlg.CenterOnParent();
confirm_dlg.on_show();
@ -531,7 +553,7 @@ PingCodeBindDialog::~PingCodeBindDialog() {
"Personal Data by which an individual can be identified directly or indirectly, including "
"without limitation names, addresses, payment information, or phone numbers. By enabling "
"this service, you agree to these terms and the statement about Privacy Policy.");
ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Statement on User Experience Improvement Plan"), ConfirmBeforeSendDialog::VisibleButtons::ONLY_CONFIRM); // ORCA VisibleButtons instead ButtonStyle
ConfirmBeforeSendDialog confirm_dlg(this, wxID_ANY, _L("Statement on User Experience Improvement Plan"), ConfirmBeforeSendDialog::ButtonStyle::ONLY_CONFIRM);
wxString model_id_text;
@ -661,15 +683,35 @@ PingCodeBindDialog::~PingCodeBindDialog() {
auto button_panel = new wxPanel(m_simplebook, wxID_ANY, wxDefaultPosition, BIND_DIALOG_BUTTON_PANEL_SIZE);
button_panel->SetBackgroundColour(*wxWHITE);
wxBoxSizer *m_sizer_button = new wxBoxSizer(wxHORIZONTAL);
m_sizer_button->Add(0, 0, 1, wxEXPAND, 5);
m_button_bind = new Button(button_panel, _L("Confirm"));
m_button_bind->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Disabled),
std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_button_bind->SetBackgroundColor(btn_bg_green);
m_button_bind->SetBorderColor(*wxWHITE);
m_button_bind->SetTextColor(wxColour("#FFFFFE"));
m_button_bind->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_bind->SetCornerRadius(FromDIP(12));
m_button_bind->Enable(false);
StateColor btn_bg_white(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
m_button_cancel = new Button(button_panel, _L("Cancel"));
m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_cancel->SetBackgroundColor(btn_bg_white);
m_button_cancel->SetBorderColor(BIND_DIALOG_GREY900);
m_button_cancel->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetTextColor(BIND_DIALOG_GREY900);
m_button_cancel->SetCornerRadius(FromDIP(12));
m_sizer_button->Add(m_button_bind, 0, wxALIGN_CENTER, 0);
m_sizer_button->AddSpacer(ButtonProps::ChoiceButtonGap());
m_sizer_button->Add(0, 0, 0, wxLEFT, FromDIP(13));
m_sizer_button->Add(m_button_cancel, 0, wxALIGN_CENTER, 0);
button_panel->SetSizer(m_sizer_button);
button_panel->Layout();
@ -688,7 +730,8 @@ PingCodeBindDialog::~PingCodeBindDialog() {
m_sizer_main->Add(m_panel_agreement, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
m_sizer_main->Add(m_sw_bind_failed_info, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(m_simplebook, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, ButtonProps::ChoiceButtonGap());
m_sizer_main->Add(m_simplebook, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(20));
SetSizer(m_sizer_main);
Layout();
@ -848,8 +891,8 @@ PingCodeBindDialog::~PingCodeBindDialog() {
void BindMachineDialog::on_dpi_changed(const wxRect &suggested_rect)
{
m_button_bind->Rescale(); // ORCA
m_button_cancel->Rescale(); // ORCA
m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
}
void BindMachineDialog::update_machine_info(MachineObject* info)
@ -997,18 +1040,34 @@ UnBindMachineDialog::UnBindMachineDialog(Plater *plater /*= nullptr*/)
m_sizer_button->Add(0, 0, 1, wxEXPAND, 5);
m_button_unbind = new Button(this, _L("Confirm"));
m_button_unbind->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_button_unbind->SetBackgroundColor(btn_bg_green);
m_button_unbind->SetBorderColor(wxColour(0, 150, 136));
m_button_unbind->SetTextColor(wxColour("#FFFFFE"));
m_button_unbind->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_unbind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_unbind->SetCornerRadius(FromDIP(12));
StateColor btn_bg_white(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
m_button_cancel = new Button(this, _L("Cancel"));
m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_cancel->SetBackgroundColor(btn_bg_white);
m_button_cancel->SetBorderColor(BIND_DIALOG_GREY900);
m_button_cancel->SetSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetTextColor(BIND_DIALOG_GREY900);
m_button_cancel->SetCornerRadius(FromDIP(12));
m_sizer_button->Add(m_button_unbind, 0, wxALIGN_CENTER, 0);
m_sizer_button->Add(0, 0, 0, wxLEFT, ButtonProps::ChoiceButtonGap());
m_sizer_button->Add(0, 0, 0, wxLEFT, FromDIP(13));
m_sizer_button->Add(m_button_cancel, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(m_status_text, 0, wxALIGN_CENTER, 0);
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(10));
m_sizer_main->Add(m_sizer_button, 0, wxALIGN_RIGHT | wxRIGHT, ButtonProps::ChoiceButtonGap());
m_sizer_main->Add(m_sizer_button, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30));
m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(20));
SetSizer(m_sizer_main);
@ -1074,8 +1133,8 @@ void UnBindMachineDialog::on_unbind_printer(wxCommandEvent &event)
void UnBindMachineDialog::on_dpi_changed(const wxRect &suggested_rect)
{
m_button_unbind->Rescale(); // ORCA
m_button_cancel->Rescale(); // ORCA
m_button_unbind->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE);
}
void UnBindMachineDialog::on_show(wxShowEvent &event)

View file

@ -307,16 +307,30 @@ error:
return NULL;
}
wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height,
wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height,
const bool grayscale/* = false*/, const bool dark_mode/* = false*/, const std::string& new_color /*= ""*/, const float scale_in_center/* = 0*/)
{
std::map<std::string, std::string> replaces;
if (!new_color.empty())
replaces["\"#009688\""] = "\"" + new_color + "\"";
return load_svg(bitmap_name, target_width, target_height, grayscale, dark_mode, replaces, scale_in_center);
}
wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_width, unsigned target_height,
const bool grayscale, const bool dark_mode, const std::map<std::string, std::string>& replacement_colors, const float scale_in_center/* = 0*/)
{
std::string color_key;
if (!replacement_colors.empty())
for (const auto& [key, val] : replacement_colors)
color_key.append(key).append(",").append(val);
std::string bitmap_key = bitmap_name + ( target_height !=0 ?
"-h" + std::to_string(target_height) :
"-w" + std::to_string(target_width))
+ (m_scale != 1.0f ? "-s" + float_to_string_decimal_point(m_scale) : "")
+ (dark_mode ? "-dm" : "")
+ (grayscale ? "-gs" : "")
+ new_color;
+ color_key;
auto it = m_map.find(bitmap_key);
if (it != m_map.end())
@ -347,8 +361,8 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_
if (strstr(bitmap_name.c_str(), "toggle_on") != NULL && dark_mode) // ORCA only replace color of toggle button
replaces["#009688"] = "#00675b";
if (!new_color.empty())
replaces["\"#009688\""] = "\"" + new_color + "\"";
if (!replacement_colors.empty())
replaces.insert(replacement_colors.begin(), replacement_colors.end());
NSVGimage *image = nullptr;
if (strstr(bitmap_name.c_str(), "printer_thumbnail") == NULL) {

View file

@ -44,6 +44,7 @@ public:
static NSVGimage* nsvgParseFromFileWithReplace(const char* filename, const char* units, float dpi, const std::map<std::string, std::string>& replaces);
// Load svg from resources/icons. bitmap_key is given without the .svg suffix. SVG will be rasterized to provided height/width.
wxBitmap* load_svg(const std::string &bitmap_key, unsigned width = 0, unsigned height = 0, const bool grayscale = false, const bool dark_mode = false, const std::string& new_color = "", const float scale_in_center = 0.f);
wxBitmap* load_svg(const std::string &bitmap_key, unsigned width, unsigned height, const bool grayscale, const bool dark_mode, const std::map<std::string, std::string>& replacement_colors, const float scale_in_center = 0.f);
//Load background image of semi transparent material with color,
wxBitmap* load_svg2(const std::string &bitmap_key, unsigned width = 0, unsigned height = 0, const bool grayscale = false, const bool dark_mode = false, const std::vector<std::string>& array_new_color = std::vector<std::string>(), const float scale_in_center = 0.0f);

View file

@ -7,7 +7,6 @@
#include "format.hpp"
#include "MsgDialog.hpp"
#include "slic3r/Utils/CalibUtils.hpp"
#include "Widgets/DialogButtons.hpp"
#include <wx/gbsizer.h>
#include "Plater.hpp"
@ -115,7 +114,15 @@ HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector<PACalibResult>&
scroll_window->SetSizer(scroll_sizer);
Button * mew_btn = new Button(scroll_window, _L("New"));
mew_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Window);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed), std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
mew_btn->SetBackgroundColour(*wxWHITE);
mew_btn->SetBackgroundColor(btn_bg_green);
mew_btn->SetBorderColor(wxColour(0, 150, 136));
mew_btn->SetTextColor(wxColour("#FFFFFE"));
mew_btn->SetMinSize(wxSize(FromDIP(100), FromDIP(24)));
mew_btn->SetMaxSize(wxSize(FromDIP(100), FromDIP(24)));
mew_btn->SetCornerRadius(FromDIP(12));
mew_btn->Bind(wxEVT_BUTTON, &HistoryWindow::on_click_new_button, this);
scroll_sizer->Add(mew_btn, 0, wxLEFT, FromDIP(20));
@ -372,7 +379,9 @@ void HistoryWindow::sync_history_data() {
auto n_value = new Label(m_history_data_panel, n_str);
n_value->Hide();
auto delete_button = new Button(m_history_data_panel, _L("Delete"));
delete_button->SetStyle(ButtonStyle::Alert, ButtonType::Window);
delete_button->SetBackgroundColour(*wxWHITE);
delete_button->SetMinSize(wxSize(-1, FromDIP(24)));
delete_button->SetCornerRadius(FromDIP(12));
delete_button->Bind(wxEVT_BUTTON, [this, gbSizer, i, &result](auto& e) {
if (m_ui_op_lock) {
return;
@ -396,7 +405,15 @@ void HistoryWindow::sync_history_data() {
});
auto edit_button = new Button(m_history_data_panel, _L("Edit"));
edit_button->SetStyle(ButtonStyle::Confirm, ButtonType::Window);
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
edit_button->SetBackgroundColour(*wxWHITE);
edit_button->SetBackgroundColor(btn_bg_green);
edit_button->SetBorderColor(wxColour(0, 150, 136));
edit_button->SetTextColor(wxColour("#FFFFFE"));
edit_button->SetMinSize(wxSize(-1, FromDIP(24)));
edit_button->SetCornerRadius(FromDIP(12));
edit_button->Bind(wxEVT_BUTTON, [this, result, k_value, name_value, edit_button](auto& e) {
if (m_ui_op_lock) return;
@ -563,11 +580,29 @@ EditCalibrationHistoryDialog::EditCalibrationHistoryDialog(wxWindow
panel_sizer->AddSpacer(FromDIP(25));
auto dlg_btns = new DialogButtons(top_panel, {"OK", "Cancel"});
dlg_btns->GetOK()->SetLabel(_L("Save"));
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &EditCalibrationHistoryDialog::on_save, this);
dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, &EditCalibrationHistoryDialog::on_cancel, this);
panel_sizer->Add(dlg_btns, 0, wxEXPAND, 0);
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
Button* save_btn = new Button(top_panel, _L("Save"));
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
save_btn->SetBackgroundColour(*wxWHITE);
save_btn->SetBackgroundColor(btn_bg_green);
save_btn->SetBorderColor(wxColour(0, 150, 136));
save_btn->SetTextColor(wxColour("#FFFFFE"));
save_btn->SetMinSize(wxSize(-1, FromDIP(24)));
save_btn->SetCornerRadius(FromDIP(12));
Button* cancel_btn = new Button(top_panel, _L("Cancel"));
cancel_btn->SetBackgroundColour(*wxWHITE);
cancel_btn->SetMinSize(wxSize(-1, FromDIP(24)));
cancel_btn->SetCornerRadius(FromDIP(12));
save_btn->Bind(wxEVT_BUTTON, &EditCalibrationHistoryDialog::on_save, this);
cancel_btn->Bind(wxEVT_BUTTON, &EditCalibrationHistoryDialog::on_cancel, this);
btn_sizer->AddStretchSpacer();
btn_sizer->Add(save_btn);
btn_sizer->AddSpacer(FromDIP(20));
btn_sizer->Add(cancel_btn);
panel_sizer->Add(btn_sizer, 0, wxEXPAND, 0);
main_sizer->Add(top_panel, 1, wxEXPAND | wxALL, FromDIP(20));
@ -809,10 +844,27 @@ NewCalibrationHistoryDialog::NewCalibrationHistoryDialog(wxWindow *parent, const
panel_sizer->AddSpacer(FromDIP(25));
auto dlg_btns = new DialogButtons(top_panel, {"OK", "Cancel"});
dlg_btns->GetOK()->Bind(wxEVT_BUTTON, &NewCalibrationHistoryDialog::on_ok, this);
dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, &NewCalibrationHistoryDialog::on_cancel, this);
panel_sizer->Add(dlg_btns, 0, wxEXPAND, 0);
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
Button * ok_btn = new Button(top_panel, _L("OK"));
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed), std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
ok_btn->SetBackgroundColour(*wxWHITE);
ok_btn->SetBackgroundColor(btn_bg_green);
ok_btn->SetBorderColor(wxColour(0, 150, 136));
ok_btn->SetTextColor(wxColour("#FFFFFE"));
ok_btn->SetMinSize(wxSize(-1, FromDIP(24)));
ok_btn->SetCornerRadius(FromDIP(12));
Button *cancel_btn = new Button(top_panel, _L("Cancel"));
cancel_btn->SetBackgroundColour(*wxWHITE);
cancel_btn->SetMinSize(wxSize(-1, FromDIP(24)));
cancel_btn->SetCornerRadius(FromDIP(12));
ok_btn->Bind(wxEVT_BUTTON, &NewCalibrationHistoryDialog::on_ok, this);
cancel_btn->Bind(wxEVT_BUTTON, &NewCalibrationHistoryDialog::on_cancel, this);
btn_sizer->AddStretchSpacer();
btn_sizer->Add(ok_btn);
btn_sizer->AddSpacer(FromDIP(20));
btn_sizer->Add(cancel_btn);
panel_sizer->Add(btn_sizer, 0, wxEXPAND, 0);
main_sizer->Add(top_panel, 1, wxEXPAND | wxALL, FromDIP(20));

View file

@ -141,8 +141,16 @@ CalibrationDialog::CalibrationDialog(Plater *plater)
m_calibration_flow->SetMinSize(wxSize(CALI_FLOW_CONTENT_WIDTH, FromDIP(160)));
m_calibration_flow->SetSize(wxSize(CALI_FLOW_CONTENT_WIDTH, FromDIP(160)));
StateColor btn_bg_green(std::pair<wxColour, int>(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled), std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered), std::pair<wxColour, int>(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal));
StateColor btn_bd_green(std::pair<wxColour, int>(AMS_CONTROL_WHITE_COLOUR, StateColor::Disabled), std::pair<wxColour, int>(AMS_CONTROL_BRAND_COLOUR, StateColor::Enabled));
m_calibration_btn = new Button(cali_right_panel, _L("Start Calibration"));
m_calibration_btn->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_calibration_btn->SetBackgroundColor(btn_bg_green);
m_calibration_btn->SetBorderColor(btn_bd_green);
m_calibration_btn->SetTextColor(wxColour("#FFFFFE"));
m_calibration_btn->SetSize(wxSize(FromDIP(128), FromDIP(26)));
m_calibration_btn->SetMinSize(wxSize(FromDIP(128), FromDIP(26)));
cali_right_sizer_v->Add(cali_text_right_top, 0, wxALIGN_CENTER, 0);
cali_right_sizer_v->Add(0, 0, 0, wxTOP, FromDIP(7));

View file

@ -42,10 +42,13 @@ CloneDialog::CloneDialog(wxWindow *parent)
m_progress->Hide();
bottom_sizer->Add(m_progress, 2, wxEXPAND | wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10));
auto dlg_btns = new DialogButtons(this, {"Fill", "OK", "Cancel"}, "", 1 /*left_aligned*/);
// used next button to get automatic left alignment
// will add a left_align_first_n parameter to DialogButtons. current method not good
auto dlg_btns = new DialogButtons(this, {"Next", "OK", "Cancel"});
dlg_btns->GetFIRST()->SetToolTip(_L("Fill bed with copies"));
dlg_btns->GetFIRST()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) {
dlg_btns->GetNEXT()->SetLabel(_L("Fill"));
dlg_btns->GetNEXT()->SetToolTip(_L("Fill bed with copies"));
dlg_btns->GetNEXT()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) {
m_plater->fill_bed_with_instances();
EndModal(wxID_OK);
});
@ -60,7 +63,7 @@ CloneDialog::CloneDialog(wxWindow *parent)
m_progress->Show();
dlg_btns->GetOK()->Hide();
dlg_btns->GetFIRST()->Hide();
dlg_btns->GetNEXT()->Hide();
this->Layout();
v_sizer->Fit(this);

View file

@ -49,7 +49,24 @@ ConnectPrinterDialog::ConnectPrinterDialog(wxWindow *parent, wxWindowID id, cons
sizer_connect->Add(FromDIP(20), 0);
m_button_confirm = new Button(this, _L("Confirm"));
m_button_confirm->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_button_confirm->SetFont(Label::Body_12);
m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24)));
m_button_confirm->SetCornerRadius(FromDIP(12));
m_button_confirm->SetTextColor(wxColour("#FFFFFE"));
StateColor btn_bg(
std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal)
);
StateColor btn_bd(std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
StateColor btn_text(std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal));
m_button_confirm->SetBackgroundColor(btn_bg);
m_button_confirm->SetBorderColor(btn_bd);
m_button_confirm->SetTextColor(btn_text);
sizer_connect->Add(m_button_confirm, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0);
@ -176,7 +193,8 @@ void ConnectPrinterDialog::on_dpi_changed(const wxRect &suggested_rect)
m_textCtrl_code->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(22)));
m_textCtrl_code->GetTextCtrl()->SetMinSize(wxSize(-1, FromDIP(22)));
m_button_confirm->Rescale(); // ORCA No need to set style again
m_button_confirm->SetCornerRadius(FromDIP(12));
m_button_confirm->Rescale();
Layout();
this->Refresh();

View file

@ -168,7 +168,7 @@ static std::set<int> cannot_input_key = {9, 10, 13, 33, 35, 36, 37, 38, 40, 41,
static std::set<char> special_key = {'\n', '\t', '\r', '\v', '@', ';'};
static std::string remove_special_key(const std::string &str)
std::string remove_special_key(const std::string &str)
{
std::string res_str;
for (char c : str) {
@ -480,7 +480,7 @@ static std::string calculate_md5(const std::string &input)
return md5;
}
static std::string get_filament_id(std::string vendor_typr_serial)
std::string get_filament_id(std::string vendor_typr_serial)
{
std::unordered_map<std::string, std::set<std::string>> filament_id_to_filament_name;
@ -2737,7 +2737,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_presets_template_item(wxWindow *pa
wxWindow *CreatePrinterPresetDialog::create_page2_dialog_buttons(wxWindow *parent)
{
auto dlg_btns = new DialogButtons(parent, {"Return", "OK", "Cancel"}, "", 1 /*left_aligned*/);
auto dlg_btns = new DialogButtons(parent, {"Return", "OK", "Cancel"});
dlg_btns->GetRETURN()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { show_page1(); });
@ -4741,9 +4741,9 @@ wxBoxSizer *EditFilamentPresetDialog::create_preset_tree_sizer()
wxWindow *EditFilamentPresetDialog::create_dialog_buttons()
{
auto dlg_btns = new DialogButtons(this, {"Delete", "OK"}, "", 1 /*left_aligned*/);
auto dlg_btns = new DialogButtons(this, {"Delete", "OK"});
dlg_btns->GetFIRST()->Bind(wxEVT_BUTTON, ([this](wxCommandEvent &e) {
dlg_btns->GetButtonFromID(wxID_DELETE)->Bind(wxEVT_BUTTON, ([this](wxCommandEvent &e) {
WarningDialog dlg(this, _L("All the filament presets belong to this filament would be deleted.\n"
"If you are using this filament on your printer, please reset the filament information for that slot."),
_L("Delete filament"), wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxCENTRE);

View file

@ -17,6 +17,9 @@
namespace Slic3r {
namespace GUI {
std::string remove_special_key(const std::string &str);
std::string get_filament_id(std::string vendor_typr_serial);
class CreateFilamentPresetDialog : public DPIDialog
{
public:

View file

@ -4319,7 +4319,7 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
void MachineObject::set_ctt_dlg( wxString text){
if (!m_set_ctt_dlg) {
m_set_ctt_dlg = true;
auto print_error_dlg = new GUI::SecondaryCheckDialog(nullptr, wxID_ANY, _L("Warning"), GUI::SecondaryCheckDialog::VisibleButtons::ONLY_CONFIRM); // ORCA VisibleButtons instead ButtonStyle
auto print_error_dlg = new GUI::SecondaryCheckDialog(nullptr, wxID_ANY, _L("Warning"), GUI::SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM);
print_error_dlg->update_text(text);
print_error_dlg->Bind(wxEVT_SHOW, [this](auto& e) {
if (!e.IsShown()) {

View file

@ -392,4 +392,18 @@ wxSize TextRenderer::GetSize() const
return GetTextExtent(m_value);
}
// ----------------------------------------------------------------------------
// ColorRenderer
// ----------------------------------------------------------------------------
bool ColorRenderer::SetValue(const wxVariant& value) {
color << value;
return true;
}
bool ColorRenderer::Render(wxRect cell, wxDC* dc, int state) {
cell.Deflate(4);
dc->SetBrush(wxBrush(color));
dc->DrawRectangle(cell);
return true;
}

View file

@ -188,4 +188,23 @@ private:
};
// ----------------------------------------------------------------------------
// ColorRenderer
// ----------------------------------------------------------------------------
class ColorRenderer : public wxDataViewCustomRenderer
{
wxColour color;
public:
ColorRenderer() : wxDataViewCustomRenderer(wxT("wxColour")) {}
bool SetValue(const wxVariant& value) override;
bool GetValue(wxVariant& value) const override { return false; };
bool Render(wxRect cell, wxDC* dc, int state) override;
wxSize GetSize() const override { return wxDefaultSize; };
};
#endif // slic3r_GUI_ExtraRenderers_hpp_

View file

@ -171,16 +171,37 @@ void ExtrusionCalibration::create()
m_error_text->Hide();
m_button_cali = new Button(m_step_1_panel, _L("Start calibration"));
m_button_cali->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_btn_bg_green = StateColor(std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Disabled), std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed), std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_button_cali->SetBackgroundColor(m_btn_bg_green);
m_button_cali->SetFont(Label::Body_13);
m_button_cali->SetBorderColor({ std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Disabled), std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Enabled) });
m_button_cali->SetTextColor({ std::pair<wxColour, int>(wxColour(172, 172, 172), StateColor::Disabled), std::pair<wxColour, int>(EXTRUSION_CALIBRATION_GREY200, StateColor::Enabled) });
m_button_cali->SetCornerRadius(FromDIP(12));
m_button_cali->SetMinSize(wxSize(-1, FromDIP(24)));
m_button_cali->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_cali, this);
m_cali_cancel = new Button(m_step_1_panel, _L("Cancel"));
m_cali_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_btn_bg_green = StateColor(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed), std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_cali_cancel->SetBackgroundColor(m_btn_bg_green);
m_cali_cancel->SetBorderColor(wxColour(0, 150, 136));
m_cali_cancel->SetTextColor(EXTRUSION_CALIBRATION_GREY200);
m_cali_cancel->SetMinSize(EXTRUSION_CALIBRATION_BUTTON_SIZE);
m_cali_cancel->SetCornerRadius(FromDIP(12));
m_cali_cancel->Hide();
m_cali_cancel->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_cancel, this);
m_button_next_step = new Button(m_step_1_panel, _L("Next"));
m_button_next_step->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_btn_bg_gray = StateColor(std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed), std::pair<wxColour, int>(*wxWHITE, StateColor::Focused),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(*wxWHITE, StateColor::Normal));
m_button_next_step->SetBackgroundColor(m_btn_bg_gray);
m_button_next_step->SetFont(Label::Body_13);
m_button_next_step->SetBorderColor(EXTRUSION_CALIBRATION_GREY900);
m_button_next_step->SetTextColor(EXTRUSION_CALIBRATION_GREY900);
m_button_next_step->SetMinSize(EXTRUSION_CALIBRATION_BUTTON_SIZE);
m_button_next_step->SetCornerRadius(FromDIP(12));
m_button_next_step->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_next, this);
m_button_next_step->Hide();
@ -236,11 +257,23 @@ void ExtrusionCalibration::create()
// save button
m_button_save_result = new Button(m_step_2_panel, _L("Save"));
m_button_save_result->SetStyle(ButtonStyle::Confirm, ButtonType::Choice);
m_btn_bg_green = StateColor(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed), std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal));
m_button_save_result->SetBackgroundColor(m_btn_bg_green);
m_button_save_result->SetFont(Label::Body_13);
m_button_save_result->SetBorderColor(wxColour(0, 150, 136));
m_button_save_result->SetTextColor(EXTRUSION_CALIBRATION_GREY200);
m_button_save_result->SetMinSize(EXTRUSION_CALIBRATION_BUTTON_SIZE);
m_button_save_result->SetCornerRadius(FromDIP(12));
m_button_save_result->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_save, this);
m_button_last_step = new Button(m_step_2_panel, _L("Last Step")); // Back for english
m_button_last_step->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_button_last_step->SetBackgroundColor(m_btn_bg_gray);
m_button_last_step->SetFont(Label::Body_13);
m_button_last_step->SetBorderColor(EXTRUSION_CALIBRATION_GREY900);
m_button_last_step->SetTextColor(EXTRUSION_CALIBRATION_GREY900);
m_button_last_step->SetMinSize(EXTRUSION_CALIBRATION_BUTTON_SIZE);
m_button_last_step->SetCornerRadius(FromDIP(12));
m_button_last_step->Bind(wxEVT_BUTTON, &ExtrusionCalibration::on_click_last, this);

View file

@ -91,6 +91,9 @@ protected:
int get_bed_temp(DynamicPrintConfig* config);
protected:
StateColor m_btn_bg_green;
StateColor m_btn_bg_gray;
wxPanel* m_step_1_panel;
wxPanel* m_step_2_panel;

View file

@ -7,7 +7,6 @@
#include "Widgets/Label.hpp"
#include "Widgets/Button.hpp"
#include "Widgets/StateColor.hpp"
#include "Widgets/DialogButtons.hpp"
#include "wxExtensions.hpp"
#include <wx/wx.h>
#include <wx/sizer.h>
@ -98,11 +97,8 @@ FilamentPickerDialog::FilamentPickerDialog(wxWindow *parent, const wxString& fil
main_sizer->AddSpacer(FromDIP(8));
// OK / Cancel buttons
auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"});
m_ok_btn = dlg_btns->GetOK();
m_cancel_btn = dlg_btns->GetCANCEL();
main_sizer->Add(dlg_btns, 0, wxEXPAND);
wxBoxSizer* btn_sizer = CreateButtonPanel();
main_sizer->Add(btn_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(10));
container_sizer->Add(main_sizer, 1, wxEXPAND | wxALL, FromDIP(16));
SetSizer(container_sizer);
@ -546,6 +542,61 @@ void FilamentPickerDialog::CreateMoreInfoButton()
m_more_btn->SetCornerRadius(FromDIP(0));
}
wxBoxSizer* FilamentPickerDialog::CreateButtonPanel()
{
wxBoxSizer* btn_sizer = new wxBoxSizer(wxHORIZONTAL);
// Add spacer to push buttons to the right
btn_sizer->AddStretchSpacer();
// standard button color style
StateColor btn_bg_green(
std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal)
);
StateColor btn_bd_green(
std::pair<wxColour, int>(wxColour(0, 150, 136), StateColor::Normal)
);
StateColor btn_text_green(
std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Normal)
);
StateColor btn_bg_white(
std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed),
std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered),
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal)
);
StateColor btn_bd_white(
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal)
);
StateColor btn_text_white(
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Normal)
);
// Create Cancel button using project's Button class
m_cancel_btn = new Button(this, _L("Cancel"), "", 0, 0, wxID_CANCEL);
m_cancel_btn->SetMinSize(wxSize(FromDIP(55), FromDIP(24)));
m_cancel_btn->SetCornerRadius(FromDIP(12));
m_cancel_btn->SetBackgroundColor(btn_bg_white);
m_cancel_btn->SetBorderColor(btn_bd_white);
m_cancel_btn->SetTextColor(btn_text_white);
btn_sizer->Add(m_cancel_btn, 0, wxEXPAND, 0);
btn_sizer->AddSpacer(FromDIP(10));
// Create OK button using project's Button class
m_ok_btn = new Button(this, _L("OK"), "", 0, 0, wxID_OK);
m_ok_btn->SetMinSize(wxSize(FromDIP(55), FromDIP(24)));
m_ok_btn->SetCornerRadius(FromDIP(12));
m_ok_btn->SetBackgroundColor(btn_bg_green);
m_ok_btn->SetBorderColor(btn_bd_green);
m_ok_btn->SetTextColor(btn_text_green);
m_ok_btn->SetFocus();
btn_sizer->Add(m_ok_btn, 0, wxEXPAND, 0);
return btn_sizer;
}
wxColourData FilamentPickerDialog::GetSingleColorData()
{
wxColourData data;

View file

@ -55,6 +55,7 @@ private:
wxScrolledWindow* CreateColorGrid();
wxBoxSizer* CreateSeparatorLine();
void CreateMoreInfoButton();
wxBoxSizer* CreateButtonPanel();
void BindEvents();
// Preview panel helper methods

View file

@ -870,23 +870,15 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle)
if (preset_bundle)
m_nozzle_nums = preset_bundle->get_printer_extruder_count();
bool multimaterial = preset_bundle->filament_presets.empty() ? 0 : preset_bundle->filament_presets.size() > 1;
// set to color print by default if use multi extruders
if (m_nozzle_nums > 1) {
m_view_type_sel = std::distance(view_type_items.begin(),
std::find(view_type_items.begin(), view_type_items.end(), EViewType::Summary));
m_view_type_sel = std::distance(view_type_items.begin(),std::find(view_type_items.begin(), view_type_items.end(), EViewType::Summary));
set_view_type(EViewType::Summary);
} else if (multimaterial) {
m_view_type_sel = std::distance(view_type_items.begin(),
std::find(view_type_items.begin(), view_type_items.end(), EViewType::ColorPrint));
set_view_type(EViewType::ColorPrint);
} else {
m_view_type_sel = std::distance(view_type_items.begin(),
std::find(view_type_items.begin(), view_type_items.end(), EViewType::FeatureType));
set_view_type(EViewType::FeatureType);
m_view_type_sel = std::distance(view_type_items.begin(),std::find(view_type_items.begin(), view_type_items.end(), EViewType::ColorPrint));
set_view_type(EViewType::ColorPrint);
}
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": finished");
}

View file

@ -240,10 +240,6 @@ void GLCanvas3D::LayersEditing::show_tooltip_information(const GLCanvas3D& canva
caption_max += GImGui->Style.WindowPadding.x + imgui.scaled(1);
float scale = canvas.get_scale();
#ifdef WIN32
int dpi = get_dpi_for_window(wxGetApp().GetTopWindow());
scale *= (float) dpi / (float) DPI_DEFAULT;
#endif // WIN32
ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, {0, 0}); // ORCA: Dont add padding
@ -6927,6 +6923,11 @@ void GLCanvas3D::_update_select_plate_toolbar_stats_item(bool force_selected) {
if (force_selected && m_sel_plate_toolbar.show_stats_item)
m_sel_plate_toolbar.m_all_plates_stats_item->selected = true;
if (m_sel_plate_toolbar.m_all_plates_stats_item->selected) {
auto evt = SimpleEvent(EVT_GLTOOLBAR_SELECT_ALL_PLATES_STATS);
wxPostEvent(wxGetApp().plater(), evt);
}
}
bool GLCanvas3D::_update_imgui_select_plate_toolbar()
@ -8873,10 +8874,6 @@ float GLCanvas3D::_show_assembly_tooltip_information(float caption_max, float x,
caption_max += imgui->calc_text_size(": "sv).x + 35.f;
float scale = get_scale();
#ifdef WIN32
int dpi = get_dpi_for_window(wxGetApp().GetTopWindow());
scale *= (float) dpi / (float) DPI_DEFAULT;
#endif // WIN32
ImVec2 button_size = ImVec2(25 * scale, 25 * scale); // ORCA: Use exact resolution will prevent blur on icon
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);

View file

@ -33,6 +33,7 @@ wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent);
wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent);
wxDEFINE_EVENT(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, SimpleEvent);
wxDEFINE_EVENT(EVT_GLTOOLBAR_SELECT_ALL_PLATES_STATS, SimpleEvent);
wxDEFINE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent);
wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent);

View file

@ -33,6 +33,7 @@ wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent);
wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent);
wxDECLARE_EVENT(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, SimpleEvent);
wxDECLARE_EVENT(EVT_GLTOOLBAR_SELECT_ALL_PLATES_STATS, SimpleEvent);
wxDECLARE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent);
wxDECLARE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent);

View file

@ -103,7 +103,7 @@ const std::string& shortkey_alt_prefix()
}
// opt_index = 0, by the reason of zero-index in ConfigOptionVector by default (in case only one element)
void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt_key, const boost::any& value, int opt_index /*= 0*/)
void change_opt_value(DynamicConfigWithDef& config, const t_config_option_key& opt_key, const boost::any& value, int opt_index /*= 0*/)
{
try{

View file

@ -37,7 +37,7 @@ extern AppConfig* get_app_config();
extern void add_menus(wxMenuBar *menu, int event_preferences_changed, int event_language_change);
// Change option value in config
void change_opt_value(DynamicPrintConfig& config, const t_config_option_key& opt_key, const boost::any& value, int opt_index = 0);
void change_opt_value(DynamicConfigWithDef& config, const t_config_option_key& opt_key, const boost::any& value, int opt_index = 0);
// If monospaced_font is true, the error message is displayed using html <code><pre></pre></code> tags,
// so that the code formatting will be preserved. This is useful for reporting errors from the placeholder parser.

Some files were not shown because too many files have changed in this diff Show more