bed_level: improvements (#1248)

1. use the status reference instead of regex matching (this was coded before the status existed)
2. change icons to reflect the rotation direction
3. change icon to reflect that the adjustment is good enough (according to klipper docs below 6 minutes)
4. auto open the panel when screws_tilt_calculate finished

close #1231
This commit is contained in:
Alfredo Monclus 2024-01-25 22:46:51 -03:00 committed by GitHub
parent 9e252b013f
commit b5e87152f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 613 additions and 66 deletions

View File

@ -6,7 +6,7 @@ from gi.repository import GLib
class Printer:
def __init__(self, state_cb, state_callbacks, busy_cb):
def __init__(self, state_cb, state_callbacks):
self.config = {}
self.data = {}
self.state = "disconnected"
@ -22,8 +22,6 @@ class Printer:
self.output_pin_count = 0
self.store_timeout = None
self.tempstore = {}
self.busy_cb = busy_cb
self.busy = False
self.tempstore_size = 1200
self.cameras = []
self.available_commands = {}
@ -41,7 +39,6 @@ class Printer:
self.ledcount = 0
self.output_pin_count = 0
self.tempstore = {}
self.busy = False
if not self.store_timeout:
self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store)
self.tempstore_size = 1200
@ -137,18 +134,10 @@ class Printer:
return "paused"
if self.data['print_stats']['state'] == 'printing':
return "printing"
if self.data['idle_timeout']['state'].lower() == "printing":
return "busy"
return self.data['webhooks']['state']
def process_status_update(self):
state = self.evaluate_state()
if state == "busy":
self.busy = True
return GLib.idle_add(self.busy_cb, True)
if self.busy:
self.busy = False
GLib.idle_add(self.busy_cb, False)
if state != self.state:
self.change_state(state)
return False

View File

@ -36,7 +36,6 @@ class Panel(ScreenPanel):
def __init__(self, screen, title):
super().__init__(screen, title)
self.response_count = 0
self.screw_dict = {}
self.screws = []
self.y_cnt = 0
@ -306,7 +305,6 @@ class Panel(ScreenPanel):
self._screen._ws.klippy.gcode_script("Z_TILT_ADJUST")
def go_to_position(self, widget, position):
widget.set_sensitive(False)
self.home()
logging.debug(f"Going to position: {position}")
script = [
@ -323,55 +321,40 @@ class Panel(ScreenPanel):
def process_busy(self, busy):
for button in self.buttons:
if button == "screws":
self.buttons[button].set_sensitive(
self._printer.config_section_exists("screws_tilt_adjust")
and (not busy))
continue
self.buttons[button].set_sensitive((not busy))
def process_update(self, action, data):
if action == "notify_busy":
self.process_busy(data)
if 'idle_timeout' in data:
self.process_busy(data['idle_timeout']['state'].lower() == "printing")
if action != "notify_status_update":
return
if action != "notify_gcode_response":
return
if data.startswith('!!'):
self.response_count = 0
self.buttons['screws'].set_sensitive(True)
return
result = re.match(
"^// (.*) : [xX= ]+([\\-0-9\\.]+), [yY= ]+([\\-0-9\\.]+), [zZ= ]+[\\-0-9\\.]+ :" +
" (Adjust ->|adjust) ([CW]+ [0-9:]+)",
data
)
# screws_tilt_adjust uses PROBE positions and was offseted for the buttons to work equal to bed_screws
# for the result we need to undo the offset
if result:
x = round(float(result[2]) + self.x_offset, 1)
y = round(float(result[3]) + self.y_offset, 1)
for key, value in self.screw_dict.items():
if value and x == value[0] and y == value[1]:
logging.debug(f"X: {x} Y: {y} Adjust: {result[5]} Pos: {key}")
self.buttons[key].set_label(result[5])
break
self.response_count += 1
if self.response_count >= len(self.screws) - 1:
if "screws_tilt_adjust" in data:
if "error" in data["screws_tilt_adjust"]:
self.buttons['screws'].set_sensitive(True)
else:
result = re.match(
"^// (.*) : [xX= ]+([\\-0-9\\.]+), [yY= ]+([\\-0-9\\.]+), [zZ= ]+[\\-0-9\\.]",
data
)
# screws_tilt_adjust uses PROBE positions and was offseted for the buttons to work equal to bed_screws
# for the result we need to undo the offset
if result and re.search('base', result[1]):
x = round(float(result[2]) + self.x_offset, 1)
y = round(float(result[3]) + self.y_offset, 1)
logging.debug(f"X: {x} Y: {y} is the reference")
for key, value in self.screw_dict.items():
if value and x == value[0] and y == value[1]:
logging.debug(f"X: {x} Y: {y} Pos: {key}")
self.buttons[key].set_label(_("Reference"))
logging.info("Error reported by screws_tilt_adjust")
if "results" in data["screws_tilt_adjust"]:
section = self._printer.get_config_section('screws_tilt_adjust')
for screw, result in data["screws_tilt_adjust"]["results"].items():
logging.info(f"{screw} {result['sign']} {result['adjust']}")
if screw not in section:
logging.error(f"{screw} not found in {section}")
continue
x, y = section[screw].split(',')
x = round(float(x) + self.x_offset, 1)
y = round(float(y) + self.y_offset, 1)
for key, value in self.screw_dict.items():
if value and x == value[0] and y == value[1]:
logging.debug(f"X: {x} Y: {y} Adjust: {result['adjust']} Pos: {key}")
if result['is_base']:
logging.info(f"{screw} is the Reference")
self.buttons[key].set_label(_("Reference"))
else:
self.buttons[key].set_label(f"{result['sign']} {result['adjust']}")
if int(result['adjust'].split(':')[1]) < 6:
self.buttons[key].set_image(self._gtk.Image('complete'))
else:
self.buttons[key].set_image(self._gtk.Image(result['sign'].lower()))
def _get_screws(self, config_section_name):
screws = []
@ -397,8 +380,5 @@ class Panel(ScreenPanel):
return sorted(screws, key=lambda s: (float(s[1]), float(s[0])))
def screws_tilt_calculate(self, widget):
widget.set_sensitive(False)
self.home()
self.response_count = 0
self.buttons['screws'].set_sensitive(False)
self._screen._send_action(widget, "printer.gcode.script", {"script": "SCREWS_TILT_CALCULATE"})

View File

@ -191,7 +191,7 @@ class KlipperScreen(Gtk.Window):
"shutdown": self.state_shutdown
}
for printer in self.printers:
printer["data"] = Printer(state_execute, state_callbacks, self.process_busy_state)
printer["data"] = Printer(state_execute, state_callbacks)
default_printer = self._config.get_main_config().get('default_printer')
logging.debug(f"Default printer: {default_printer}")
if [True for p in self.printers if default_printer in p]:
@ -266,6 +266,7 @@ class KlipperScreen(Gtk.Window):
"motion_report": ["live_position", "live_velocity", "live_extruder_velocity"],
"exclude_object": ["current_object", "objects", "excluded_objects"],
"manual_probe": ['is_active'],
"screws_tilt_adjust": ['results', 'error'],
}
}
for extruder in self.printer.get_tools():
@ -326,7 +327,6 @@ class KlipperScreen(Gtk.Window):
logging.debug(f"Current panel hierarchy: {' > '.join(self._cur_panels)}")
if hasattr(self.panels[panel], "process_update"):
self.process_update("notify_status_update", self.printer.data)
self.process_update("notify_busy", self.printer.busy)
if hasattr(self.panels[panel], "activate"):
self.panels[panel].activate()
self.show_all()
@ -652,10 +652,6 @@ class KlipperScreen(Gtk.Window):
self.base_panel.show_heaters(False)
self.show_panel("printer_select", _("Printer Select"), remove_all=True)
def process_busy_state(self, busy):
self.process_update("notify_busy", busy)
return False
def websocket_disconnected(self, msg):
self.printer_initializing(msg, remove=True)
self.printer.state = "disconnected"
@ -758,6 +754,8 @@ class KlipperScreen(Gtk.Window):
self.printer.process_update(data)
if 'manual_probe' in data and data['manual_probe']['is_active'] and 'zcalibrate' not in self._cur_panels:
self.show_panel("zcalibrate", _('Z Calibrate'))
if "screws_tilt_adjust" in data and 'bed_level' not in self._cur_panels:
self.show_panel("bed_level", _('Bed Level'))
elif action == "notify_filelist_changed":
if self.files is not None:
self.files.process_update(data)

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
viewBox="0 0 64 64"
version="1.1"
id="svg10"
sodipodi:docname="ccw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
pagecolor="#002b36"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="827"
id="namedview11"
showgrid="false"
inkscape:pagecheckerboard="false"
inkscape:zoom="9.8125"
inkscape:cx="24.611465"
inkscape:cy="26.751592"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg10"
inkscape:document-rotation="0"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<metadata
id="metadata16">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>reboot</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs14" />
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title
id="title2">reboot</title>
<desc
id="desc4">Created with Sketch.</desc>
<g
id="g1"
transform="matrix(-1,0,0,1,65.338774,0)">
<path
style="fill:none;stroke:#eee8d5;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.978816"
id="path1602"
sodipodi:type="arc"
sodipodi:cx="31.999998"
sodipodi:cy="30.999998"
sodipodi:rx="23"
sodipodi:ry="23"
sodipodi:start="0.34906585"
sodipodi:end="5.5850536"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 53.612928,38.866461 A 23,23 0 0 1 29.995416,53.912476 23,23 0 0 1 9.3494198,34.993906 23,23 0 0 1 22.279778,10.154919 23,23 0 0 1 49.61902,16.215883" />
<path
style="color:#000000;display:inline;opacity:0.998;fill:#eee8d5;stroke:none;stroke-width:0.999996;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"
d="m 44.419427,15.545528 4.601827,-4.601827 c 0.341169,-0.341169 0.752279,-0.319634 0.996042,-0.07587 l 2.195376,2.195375 c 0.876612,0.876258 2.376088,0.277073 2.407424,-0.961996 l 0.07976,-3.0951208 c 0.01064,-0.414859 0.381781,-0.786003 0.796637,-0.796638 l 4.228314,-0.107971 c 0.208443,-0.0053 0.343523,0.06144 0.447441,0.165359 0.103919,0.103919 0.171668,0.239975 0.16633,0.448412 l -0.325853,12.6888308 -0.106997,4.231229 c -0.01067,0.416029 -0.378664,0.784028 -0.794694,0.794694 l -4.23123,0.106997 -12.68883,0.325853 c -0.416025,0.01066 -0.624436,-0.197746 -0.613771,-0.61377 l 0.107969,-4.228313 c 0.01064,-0.414859 0.381778,-0.786002 0.796639,-0.796639 l 3.095122,-0.07976 c 1.239068,-0.03134 1.838252,-1.530811 0.961995,-2.407422 l -2.195376,-2.195376 c -0.243763,-0.243763 -0.265294,-0.654877 0.07587,-0.996043 z"
id="rect852-3"
sodipodi:nodetypes="ssscccccscccccccccccss" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
viewBox="0 0 64 64"
version="1.1"
id="svg10"
sodipodi:docname="refresh.svg"
inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
pagecolor="#002b36"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="826"
id="namedview11"
showgrid="false"
inkscape:pagecheckerboard="false"
inkscape:zoom="9.8125"
inkscape:cx="24.66242"
inkscape:cy="26.853503"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg10"
inkscape:document-rotation="0" />
<metadata
id="metadata16">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>reboot</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs14" />
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title
id="title2">reboot</title>
<desc
id="desc4">Created with Sketch.</desc>
<path
style="fill:none;stroke:#eee8d5;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.978816"
id="path1602"
sodipodi:type="arc"
sodipodi:cx="31.999998"
sodipodi:cy="30.999998"
sodipodi:rx="23"
sodipodi:ry="23"
sodipodi:start="0.34906585"
sodipodi:end="5.5850536"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 53.612928,38.866461 A 23,23 0 0 1 29.995416,53.912476 23,23 0 0 1 9.3494198,34.993906 23,23 0 0 1 22.279778,10.154919 23,23 0 0 1 49.61902,16.215883" />
<path
style="color:#000000;display:inline;opacity:0.998;fill:#eee8d5;stroke:none;stroke-width:0.999996;stroke-linecap:round;stroke-linejoin:round;-inkscape-stroke:none"
d="m 44.419427,15.545528 4.601827,-4.601827 c 0.341169,-0.341169 0.752279,-0.319634 0.996042,-0.07587 l 2.195376,2.195375 c 0.876612,0.876258 2.376088,0.277073 2.407424,-0.961996 l 0.07976,-3.0951208 c 0.01064,-0.414859 0.381781,-0.786003 0.796637,-0.796638 l 4.228314,-0.107971 c 0.208443,-0.0053 0.343523,0.06144 0.447441,0.165359 0.103919,0.103919 0.171668,0.239975 0.16633,0.448412 l -0.325853,12.6888308 -0.106997,4.231229 c -0.01067,0.416029 -0.378664,0.784028 -0.794694,0.794694 l -4.23123,0.106997 -12.68883,0.325853 c -0.416025,0.01066 -0.624436,-0.197746 -0.613771,-0.61377 l 0.107969,-4.228313 c 0.01064,-0.414859 0.381778,-0.786002 0.796639,-0.796639 l 3.095122,-0.07976 c 1.239068,-0.03134 1.838252,-1.530811 0.961995,-2.407422 l -2.195376,-2.195376 c -0.243763,-0.243763 -0.265294,-0.654877 0.07587,-0.996043 z"
id="rect852-3"
sodipodi:nodetypes="ssscccccscccccccccccss" />
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1087"
sodipodi:docname="ccw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="namedview1089"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="26"
inkscape:cx="-0.38461538"
inkscape:cy="12.019231"
inkscape:window-width="1600"
inkscape:window-height="827"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1087"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<path
d="M 6.35,6.35 C 7.8,4.9 9.79,4 12,4 a 8,8 0 0 1 8,8 8,8 0 0 1 -8,8 C 8.27,20 5.16,17.45 4.27,14 h 2.08 c 0.82,2.33 3.04,4 5.65,4 A 6,6 0 0 0 18,12 6,6 0 0 0 12,6 C 10.34,6 8.86,6.69 7.78,7.78 L 11,11 H 4 V 4 Z"
id="path1085"
style="fill:#e2e2e2" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1087"
sodipodi:docname="refresh.svg"
inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="namedview1089"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="26"
inkscape:cx="-0.38461538"
inkscape:cy="12.019231"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1087" />
<path
d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"
id="path1085"
style="fill:#e2e2e2" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1087"
sodipodi:docname="ccw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="namedview1089"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="26"
inkscape:cx="-0.38461538"
inkscape:cy="12.019231"
inkscape:window-width="1600"
inkscape:window-height="827"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1087"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<path
d="M 6.35,6.35 C 7.8,4.9 9.79,4 12,4 a 8,8 0 0 1 8,8 8,8 0 0 1 -8,8 C 8.27,20 5.16,17.45 4.27,14 h 2.08 c 0.82,2.33 3.04,4 5.65,4 A 6,6 0 0 0 18,12 6,6 0 0 0 12,6 C 10.34,6 8.86,6.69 7.78,7.78 L 11,11 H 4 V 4 Z"
id="path1085"
style="fill:#e2e2e2" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1087"
sodipodi:docname="refresh.svg"
inkscape:version="1.1 (c4e8f9ed74, 2021-05-24)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="namedview1089"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="26"
inkscape:cx="-0.38461538"
inkscape:cy="12.019231"
inkscape:window-width="1600"
inkscape:window-height="826"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1087" />
<path
d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"
id="path1085"
style="fill:#e2e2e2" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1087"
sodipodi:docname="ccw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="namedview1089"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="26"
inkscape:cx="-0.38461538"
inkscape:cy="12.019231"
inkscape:window-width="1600"
inkscape:window-height="827"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1087"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<path
d="M 6.35,6.35 C 7.8,4.9 9.79,4 12,4 a 8,8 0 0 1 8,8 8,8 0 0 1 -8,8 C 8.27,20 5.16,17.45 4.27,14 h 2.08 c 0.82,2.33 3.04,4 5.65,4 A 6,6 0 0 0 18,12 6,6 0 0 0 12,6 C 10.34,6 8.86,6.69 7.78,7.78 L 11,11 H 4 V 4 Z"
id="path1085"
style="fill:#000000;font-variation-settings:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="24"
height="24"
viewBox="0 0 24 24"
id="svg1087"
sodipodi:docname="cw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="namedview1089"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
showgrid="false"
inkscape:zoom="26"
inkscape:cx="-0.38461538"
inkscape:cy="12.019231"
inkscape:window-width="1600"
inkscape:window-height="827"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1087"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<path
d="M17.65,6.35C16.2,4.9 14.21,4 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20C15.73,20 18.84,17.45 19.73,14H17.65C16.83,16.33 14.61,18 12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6C13.66,6 15.14,6.69 16.22,7.78L13,11H20V4L17.65,6.35Z"
id="path1085"
style="fill:#000000;font-variation-settings:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
viewBox="0 0 64 64"
version="1.1"
id="svg10"
sodipodi:docname="ccw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata16">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>folder</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs14" />
<sodipodi:namedview
pagecolor="#bfbfbf"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="827"
id="namedview12"
showgrid="false"
inkscape:pagecheckerboard="false"
inkscape:zoom="7.6562596"
inkscape:cx="28.995882"
inkscape:cy="29.453024"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg10"
inkscape:snap-bbox="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:document-rotation="0"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:bbox-nodes="true"
inkscape:bbox-paths="true"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title
id="title2">folder</title>
<desc
id="desc4">Created with Sketch.</desc>
<g
id="g1"
transform="translate(1.2631795)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path4710-2-1"
d="m 4.3403339,31.365635 5.187416,7.118657 5.0236311,-7.118657 z"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.73127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#ffffff;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000"
id="path853"
sodipodi:type="arc"
sodipodi:cx="33"
sodipodi:cy="32"
sodipodi:rx="23.5"
sodipodi:ry="23.5"
sodipodi:start="3.1415927"
sodipodi:end="2.3561945"
sodipodi:arc-type="arc"
sodipodi:open="true"
d="M 9.5,32 A 23.5,23.5 0 0 1 28.415378,8.9515457 23.5,23.5 0 0 1 54.711169,23.00694 23.5,23.5 0 0 1 46.0559,51.539536 23.5,23.5 0 0 1 16.38299,48.617009" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
viewBox="0 0 64 64"
version="1.1"
id="svg10"
sodipodi:docname="cw.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata
id="metadata16">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>folder</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs14" />
<sodipodi:namedview
pagecolor="#bfbfbf"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1600"
inkscape:window-height="827"
id="namedview12"
showgrid="false"
inkscape:pagecheckerboard="false"
inkscape:zoom="7.6562596"
inkscape:cx="28.995882"
inkscape:cy="29.453024"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg10"
inkscape:snap-bbox="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:document-rotation="0"
inkscape:snap-bbox-midpoints="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-object-midpoints="true"
inkscape:snap-center="true"
inkscape:bbox-nodes="true"
inkscape:bbox-paths="true"
inkscape:showpageshadow="0"
inkscape:deskcolor="#d1d1d1" />
<!-- Generator: Sketch 52.5 (67469) - http://www.bohemiancoding.com/sketch -->
<title
id="title2">folder</title>
<desc
id="desc4">Created with Sketch.</desc>
<g
id="g1"
transform="matrix(-1,0,0,1,62.736821,0)">
<path
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path4710-2-1"
d="m 4.3403339,31.365635 5.187416,7.118657 5.0236311,-7.118657 z"
style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.73127;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;stroke:#ffffff;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000"
id="path853"
sodipodi:type="arc"
sodipodi:cx="33"
sodipodi:cy="32"
sodipodi:rx="23.5"
sodipodi:ry="23.5"
sodipodi:start="3.1415927"
sodipodi:end="2.3561945"
sodipodi:arc-type="arc"
sodipodi:open="true"
d="M 9.5,32 A 23.5,23.5 0 0 1 28.415378,8.9515457 23.5,23.5 0 0 1 54.711169,23.00694 23.5,23.5 0 0 1 46.0559,51.539536 23.5,23.5 0 0 1 16.38299,48.617009" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB