From 51ea541969cbbf404e6775740590cc39c854ff2b Mon Sep 17 00:00:00 2001 From: Billy Huddleston Date: Fri, 16 Jan 2026 20:35:29 -0500 Subject: [PATCH] CAM: Add tapered ball nose toolbit/shape asset Introduced new toolbit and shape models for tapered ball nose tools, including schema, summary, and integration into CMake and module imports. Added corresponding SVG and FCStd files to resources. Updated SVGs so end markers (arrows) render correctly in Qt by converting markers to paths. Kept a source SVG with markers as strokes (not paths) for future editing and updates. Reworked the ToolBitEditor UI to display the toolbit to the right of the toolbit properties, improving usability. Shrunk the overall height of the editor window to better fit typical screen sizes. src/Mod/CAM/CMakeLists.txt: - Registered new taperedballnose toolbit and shape models and resources - Added updated SVGs and source SVGs for marker compatibility src/Mod/CAM/Path/Tool/shape/__init__.py: - Imported ToolBitShapeTaperedBallNose and added to __all__ src/Mod/CAM/Path/Tool/shape/models/taperedballnose.py: - Added ToolBitShapeTaperedBallNose class with schema and label src/Mod/CAM/Path/Tool/toolbit/__init__.py: - Imported ToolBitTaperedBallNose and added to __all__ src/Mod/CAM/Path/Tool/toolbit/models/taperedballnose.py: - Added ToolBitTaperedBallNose class with summary and integration Tools/Shape/taperedballnose.svg, Tools/Shape/taperedballnose.fcstd: - Added new SVG and FCStd for tapered ball nose - Updated SVGs for correct marker rendering in Qt - Kept editable source SVGs with markers as strokes for future updates --- src/Mod/CAM/CMakeLists.txt | 4 + .../CAM/Gui/Resources/panels/ToolBitEditor.ui | 37 +- src/Mod/CAM/Path/Main/Gui/Camotics.py | 1 + src/Mod/CAM/Path/Op/SurfaceSupport.py | 1 + .../Path/Tool/library/serializers/camotics.py | 8 +- src/Mod/CAM/Path/Tool/shape/__init__.py | 2 + .../Path/Tool/shape/models/taperedballnose.py | 66 ++ src/Mod/CAM/Path/Tool/shape/ui/shapewidget.py | 2 +- src/Mod/CAM/Path/Tool/toolbit/__init__.py | 2 + .../Tool/toolbit/models/taperedballnose.py | 46 ++ .../Path/Tool/toolbit/serializers/camotics.py | 8 +- src/Mod/CAM/Path/Tool/toolbit/ui/editor.py | 44 +- src/Mod/CAM/Tools/Shape/ballend.svg | 125 +++- src/Mod/CAM/Tools/Shape/bullnose.svg | 142 +++- src/Mod/CAM/Tools/Shape/chamfer.svg | 157 +++- src/Mod/CAM/Tools/Shape/dovetail.svg | 265 +++++-- src/Mod/CAM/Tools/Shape/drill.svg | 167 +++-- src/Mod/CAM/Tools/Shape/endmill.svg | 172 ++++- src/Mod/CAM/Tools/Shape/probe.svg | 90 ++- src/Mod/CAM/Tools/Shape/radius.svg | 178 +++-- src/Mod/CAM/Tools/Shape/reamer.svg | 34 +- src/Mod/CAM/Tools/Shape/slittingsaw.svg | 208 ++++-- .../CAM/Tools/Shape/svg_source/ballend.svg | 376 ++++++++++ .../CAM/Tools/Shape/svg_source/bullnose.svg | 408 +++++++++++ .../CAM/Tools/Shape/svg_source/chamfer.svg | 452 ++++++++++++ .../CAM/Tools/Shape/svg_source/dovetail.svg | 668 ++++++++++++++++++ src/Mod/CAM/Tools/Shape/svg_source/drill.svg | 284 ++++++++ .../CAM/Tools/Shape/svg_source/endmill.svg | 626 ++++++++++++++++ src/Mod/CAM/Tools/Shape/svg_source/probe.svg | 476 +++++++++++++ src/Mod/CAM/Tools/Shape/svg_source/radius.svg | 508 +++++++++++++ src/Mod/CAM/Tools/Shape/svg_source/reamer.svg | 594 ++++++++++++++++ .../Tools/Shape/svg_source/slittingsaw.svg | 512 ++++++++++++++ src/Mod/CAM/Tools/Shape/svg_source/tap.svg | 454 ++++++++++++ .../Shape/svg_source/taperedballnose.svg | 371 ++++++++++ .../Shape/svg_source/taperedballnosev1.svg | 364 ++++++++++ .../Shape/svg_source/taperedballnosev2.svg | 363 ++++++++++ .../Tools/Shape/svg_source/thread-mill.svg | 610 ++++++++++++++++ src/Mod/CAM/Tools/Shape/svg_source/v-bit.svg | 467 ++++++++++++ src/Mod/CAM/Tools/Shape/tap.svg | 170 +++-- src/Mod/CAM/Tools/Shape/taperedballnose.fcstd | Bin 0 -> 34399 bytes src/Mod/CAM/Tools/Shape/taperedballnose.svg | 463 ++++++++++++ src/Mod/CAM/Tools/Shape/thread-mill.svg | 199 ++++-- src/Mod/CAM/Tools/Shape/v-bit.svg | 181 ++++- 43 files changed, 9788 insertions(+), 517 deletions(-) create mode 100644 src/Mod/CAM/Path/Tool/shape/models/taperedballnose.py create mode 100644 src/Mod/CAM/Path/Tool/toolbit/models/taperedballnose.py create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/ballend.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/bullnose.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/chamfer.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/dovetail.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/drill.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/endmill.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/probe.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/radius.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/reamer.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/slittingsaw.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/tap.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/taperedballnose.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev1.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev2.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/thread-mill.svg create mode 100644 src/Mod/CAM/Tools/Shape/svg_source/v-bit.svg create mode 100644 src/Mod/CAM/Tools/Shape/taperedballnose.fcstd create mode 100644 src/Mod/CAM/Tools/Shape/taperedballnose.svg diff --git a/src/Mod/CAM/CMakeLists.txt b/src/Mod/CAM/CMakeLists.txt index 4b1b4d927e..f1e5af3042 100644 --- a/src/Mod/CAM/CMakeLists.txt +++ b/src/Mod/CAM/CMakeLists.txt @@ -211,6 +211,7 @@ SET(PathPythonToolsToolBitModels_SRCS Path/Tool/toolbit/models/reamer.py Path/Tool/toolbit/models/slittingsaw.py Path/Tool/toolbit/models/tap.py + Path/Tool/toolbit/models/taperedballnose.py Path/Tool/toolbit/models/threadmill.py Path/Tool/toolbit/models/vbit.py ) @@ -284,6 +285,7 @@ SET(PathPythonToolsShapeModels_SRCS Path/Tool/shape/models/reamer.py Path/Tool/shape/models/slittingsaw.py Path/Tool/shape/models/tap.py + Path/Tool/shape/models/taperedballnose.py Path/Tool/shape/models/threadmill.py Path/Tool/shape/models/vbit.py ) @@ -487,6 +489,8 @@ SET(Tools_Shape_SRCS Tools/Shape/slittingsaw.svg Tools/Shape/tap.fcstd Tools/Shape/tap.svg + Tools/Shape/taperedballnose.fcstd + Tools/Shape/taperedballnose.svg Tools/Shape/thread-mill.fcstd Tools/Shape/thread-mill.svg Tools/Shape/v-bit.fcstd diff --git a/src/Mod/CAM/Gui/Resources/panels/ToolBitEditor.ui b/src/Mod/CAM/Gui/Resources/panels/ToolBitEditor.ui index 12cc1b8a7a..250c5f0828 100644 --- a/src/Mod/CAM/Gui/Resources/panels/ToolBitEditor.ui +++ b/src/Mod/CAM/Gui/Resources/panels/ToolBitEditor.ui @@ -6,8 +6,8 @@ 0 0 - 750 - 800 + 775 + 600 @@ -15,24 +15,9 @@ - - - true - - - - - 0 - 0 - 980 - 849 - - - - - - - + + + 0 @@ -41,14 +26,14 @@ - 650 - 850 + 775 + 600 - 650 - 850 + 775 + 600 @@ -170,10 +155,6 @@ - - - - diff --git a/src/Mod/CAM/Path/Main/Gui/Camotics.py b/src/Mod/CAM/Path/Main/Gui/Camotics.py index 3eedc530ad..7d8c98c1eb 100644 --- a/src/Mod/CAM/Path/Main/Gui/Camotics.py +++ b/src/Mod/CAM/Path/Main/Gui/Camotics.py @@ -134,6 +134,7 @@ class CamoticsSimulation(QtCore.QObject): SHAPEMAP = { "ballend": "Ballnose", "endmill": "Cylindrical", + "taperedballnose": "Ballnose", "v-bit": "Conical", "chamfer": "Snubnose", } diff --git a/src/Mod/CAM/Path/Op/SurfaceSupport.py b/src/Mod/CAM/Path/Op/SurfaceSupport.py index 18169c544b..b792a37b00 100644 --- a/src/Mod/CAM/Path/Op/SurfaceSupport.py +++ b/src/Mod/CAM/Path/Op/SurfaceSupport.py @@ -2678,6 +2678,7 @@ class OCL_Tool: "endmill": "CylCutter", "ballend": "BallCutter", "bullnose": "BullCutter", + "taperedballnose": "BallCutter", "drill": "ConeCutter", "engraver": "ConeCutter", "v_bit": "ConeCutter", diff --git a/src/Mod/CAM/Path/Tool/library/serializers/camotics.py b/src/Mod/CAM/Path/Tool/library/serializers/camotics.py index 15513bad94..807b289258 100644 --- a/src/Mod/CAM/Path/Tool/library/serializers/camotics.py +++ b/src/Mod/CAM/Path/Tool/library/serializers/camotics.py @@ -33,11 +33,17 @@ from ..models.library import Library SHAPEMAP = { "ballend": "Ballnose", "endmill": "Cylindrical", + "taperedballnose": "Ballnose", "v-bit": "Conical", "vbit": "Conical", "chamfer": "Snubnose", } -SHAPEMAP_REVERSE = dict((v, k) for k, v in SHAPEMAP.items()) +SHAPEMAP_REVERSE = { + "Ballnose": "ballend", # Default to ballend when deserializing Ballnose + "Cylindrical": "endmill", + "Conical": "v-bit", + "Snubnose": "chamfer", +} tooltemplate = { "units": "metric", diff --git a/src/Mod/CAM/Path/Tool/shape/__init__.py b/src/Mod/CAM/Path/Tool/shape/__init__.py index a6d5cf04bc..22dca5562a 100644 --- a/src/Mod/CAM/Path/Tool/shape/__init__.py +++ b/src/Mod/CAM/Path/Tool/shape/__init__.py @@ -16,6 +16,7 @@ from .models.probe import ToolBitShapeProbe from .models.reamer import ToolBitShapeReamer from .models.slittingsaw import ToolBitShapeSlittingSaw from .models.tap import ToolBitShapeTap +from .models.taperedballnose import ToolBitShapeTaperedBallNose from .models.threadmill import ToolBitShapeThreadMill from .models.vbit import ToolBitShapeVBit from .models.icon import ( @@ -42,6 +43,7 @@ __all__ = [ "ToolBitShapeReamer", "ToolBitShapeSlittingSaw", "ToolBitShapeTap", + "ToolBitShapeTaperedBallNose", "ToolBitShapeThreadMill", "ToolBitShapeVBit", "TOOL_BIT_SHAPE_NAMES", diff --git a/src/Mod/CAM/Path/Tool/shape/models/taperedballnose.py b/src/Mod/CAM/Path/Tool/shape/models/taperedballnose.py new file mode 100644 index 0000000000..80074e75fe --- /dev/null +++ b/src/Mod/CAM/Path/Tool/shape/models/taperedballnose.py @@ -0,0 +1,66 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +################################################################################ +# # +# © 2026 Billy Huddleston # +# # +# FreeCAD is free software: you can redistribute it and/or modify # +# it under the terms of the GNU Lesser General Public License as # +# published by the Free Software Foundation, either version 2.1 # +# of the License, or (at your option) any later version. # +# # +# FreeCAD is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty # +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # +# See the GNU Lesser General Public License for more details. # +# # +# You should have received a copy of the GNU Lesser General Public # +# License along with FreeCAD. If not, see https://www.gnu.org/licenses # +# # +################################################################################ + +import FreeCAD +from typing import Tuple, Mapping +from .base import ToolBitShape + + +class ToolBitShapeTaperedBallNose(ToolBitShape): + name: str = "TaperedBallNose" + aliases = ("taperedballnose",) + + @classmethod + def schema(cls) -> Mapping[str, Tuple[str, str]]: + return { + "CuttingEdgeHeight": ( + FreeCAD.Qt.translate("ToolBitShape", "Cutting edge height"), + "App::PropertyLength", + ), + "Diameter": ( + FreeCAD.Qt.translate("ToolBitShape", "Diameter"), + "App::PropertyLength", + ), + "Flutes": ( + FreeCAD.Qt.translate("ToolBitShape", "Flutes"), + "App::PropertyInteger", + ), + "Length": ( + FreeCAD.Qt.translate("ToolBitShape", "Overall tool length"), + "App::PropertyLength", + ), + "ShankDiameter": ( + FreeCAD.Qt.translate("ToolBitShape", "Shank diameter"), + "App::PropertyLength", + ), + "TaperAngle": ( + FreeCAD.Qt.translate("ToolBitShape", "Included Taper angle"), + "App::PropertyAngle", + ), + "TaperDiameter": ( + FreeCAD.Qt.translate("ToolBitShape", "Diameter at top of Taper"), + "App::PropertyLength", + ), + } + + @property + def label(self) -> str: + return FreeCAD.Qt.translate("ToolBitShape", "Tapered Ball Nose") diff --git a/src/Mod/CAM/Path/Tool/shape/ui/shapewidget.py b/src/Mod/CAM/Path/Tool/shape/ui/shapewidget.py index 15470c0efc..43667192a7 100644 --- a/src/Mod/CAM/Path/Tool/shape/ui/shapewidget.py +++ b/src/Mod/CAM/Path/Tool/shape/ui/shapewidget.py @@ -45,7 +45,7 @@ class ShapeWidget(QtGui.QWidget): self.layout.setAlignment(QtCore.Qt.AlignHCenter) self.shape = shape - self.icon_size = icon_size or QtCore.QSize(140, 165) # 200 x 235 + self.icon_size = icon_size or QtCore.QSize(263, 372) # A4 aspect ratio self.icon_widget = QtGui.QLabel() self.layout.addWidget(self.icon_widget) diff --git a/src/Mod/CAM/Path/Tool/toolbit/__init__.py b/src/Mod/CAM/Path/Tool/toolbit/__init__.py index c1603981be..9b95591711 100644 --- a/src/Mod/CAM/Path/Tool/toolbit/__init__.py +++ b/src/Mod/CAM/Path/Tool/toolbit/__init__.py @@ -15,6 +15,7 @@ from .models.radius import ToolBitRadius from .models.probe import ToolBitProbe from .models.reamer import ToolBitReamer from .models.slittingsaw import ToolBitSlittingSaw +from .models.taperedballnose import ToolBitTaperedBallNose from .models.tap import ToolBitTap from .models.threadmill import ToolBitThreadMill from .models.vbit import ToolBitVBit @@ -33,6 +34,7 @@ __all__ = [ "ToolBitProbe", "ToolBitReamer", "ToolBitSlittingSaw", + "ToolBitTaperedBallNose", "ToolBitTap", "ToolBitThreadMill", "ToolBitVBit", diff --git a/src/Mod/CAM/Path/Tool/toolbit/models/taperedballnose.py b/src/Mod/CAM/Path/Tool/toolbit/models/taperedballnose.py new file mode 100644 index 0000000000..2ab1124403 --- /dev/null +++ b/src/Mod/CAM/Path/Tool/toolbit/models/taperedballnose.py @@ -0,0 +1,46 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +################################################################################ +# # +# © 2026 Billy Huddleston # +# # +# FreeCAD is free software: you can redistribute it and/or modify # +# it under the terms of the GNU Lesser General Public License as # +# published by the Free Software Foundation, either version 2.1 # +# of the License, or (at your option) any later version. # +# # +# FreeCAD is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty # +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # +# See the GNU Lesser General Public License for more details. # +# # +# You should have received a copy of the GNU Lesser General Public # +# License along with FreeCAD. If not, see https://www.gnu.org/licenses # +# # +################################################################################ +import FreeCAD +import Path +from ...shape import ToolBitShapeTaperedBallNose +from ..mixins import RotaryToolBitMixin, CuttingToolMixin +from .base import ToolBit + + +class ToolBitTaperedBallNose(ToolBit, CuttingToolMixin, RotaryToolBitMixin): + SHAPE_CLASS = ToolBitShapeTaperedBallNose + + def __init__(self, shape: ToolBitShapeTaperedBallNose, id: str | None = None): + Path.Log.track(f"ToolBitTaperedBallNose __init__ called with shape: {shape}, id: {id}") + super().__init__(shape, id=id) + CuttingToolMixin.__init__(self, self.obj) + + @property + def summary(self) -> str: + diameter = self.get_property_str("Diameter", "?", precision=3) + flutes = self.get_property("Flutes") + cutting_edge_height = self.get_property_str("CuttingEdgeHeight", "?", precision=3) + taper_angle = self.get_property_str("TaperAngle", "?", precision=1) + + return FreeCAD.Qt.translate( + "CAM", + f"{diameter} tip, {taper_angle} taper, {flutes}-flute tapered ball nose, {cutting_edge_height} cutting edge", + ) diff --git a/src/Mod/CAM/Path/Tool/toolbit/serializers/camotics.py b/src/Mod/CAM/Path/Tool/toolbit/serializers/camotics.py index 755cbd585b..00a9d124e2 100644 --- a/src/Mod/CAM/Path/Tool/toolbit/serializers/camotics.py +++ b/src/Mod/CAM/Path/Tool/toolbit/serializers/camotics.py @@ -34,11 +34,17 @@ from ...assets.asset import Asset SHAPEMAP = { "ballend": "Ballnose", "endmill": "Cylindrical", + "taperedballnose": "Ballnose", "v-bit": "Conical", "vbit": "Conical", "chamfer": "Snubnose", } -SHAPEMAP_REVERSE = dict((v, k) for k, v in SHAPEMAP.items()) +SHAPEMAP_REVERSE = { + "Ballnose": "ballend", # Default to ballend when deserializing Ballnose + "Cylindrical": "endmill", + "Conical": "v-bit", + "Snubnose": "chamfer", +} tooltemplate = { "units": "metric", diff --git a/src/Mod/CAM/Path/Tool/toolbit/ui/editor.py b/src/Mod/CAM/Path/Tool/toolbit/ui/editor.py index 11ed760bf1..afa6ee9f97 100644 --- a/src/Mod/CAM/Path/Tool/toolbit/ui/editor.py +++ b/src/Mod/CAM/Path/Tool/toolbit/ui/editor.py @@ -99,8 +99,6 @@ class ToolBitPropertiesWidget(QtGui.QWidget): properties_layout.setStretchFactor(self._property_editor, 1) main_layout.addWidget(properties_group_box) - - # Add stretch before shape widget to push it towards the bottom main_layout.addStretch(1) # Layout for centering the shape widget (created later) @@ -276,18 +274,36 @@ class ToolBitEditor(QtGui.QWidget): ) self._tab_closed = False - # Get first tab from the form, add the shape widget at the top. + # Get first tab from the form, add the shape widget to the right. tool_tab_layout = self.form.toolTabLayout - widget = ShapeWidget(toolbit._tool_bit_shape) - tool_tab_layout.addWidget(widget) - # Add tool properties editor to the same tab. + # Create a horizontal layout for the tab content + tab_content_layout = QtGui.QHBoxLayout() + + # Add tool properties editor to the left with stretch self._props = ToolBitPropertiesWidget(toolbit, tool_no, self, icon=icon) self._last_units_value = self._get_units_value(self._props) self._props.toolBitChanged.connect(self._on_toolbit_changed) self._props.toolBitChanged.connect(self._update) self._props.toolNoChanged.connect(self._on_tool_no_changed) - tool_tab_layout.addWidget(self._props) + + # Wrap properties in a scroll area for vertical scrolling + scroll_area = QtGui.QScrollArea() + scroll_area.setWidget(self._props) + scroll_area.setWidgetResizable(True) + scroll_area.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + scroll_area.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) + scroll_area.setMinimumHeight(550) # Set minimum height for the scroll area + scroll_area.setMaximumHeight(600) # Set maximum height to prevent excessive growth + + tab_content_layout.addWidget(scroll_area, 1) + + # Add shape widget to the right without stretch + widget = ShapeWidget(toolbit._tool_bit_shape) + tab_content_layout.addWidget(widget, 0) + + # Add the horizontal layout to the tab layout + tool_tab_layout.addLayout(tab_content_layout) self.form.tabWidget.setCurrentIndex(0) self.form.tabWidget.currentChanged.connect(self._on_tab_switched) @@ -350,19 +366,27 @@ class ToolBitEditor(QtGui.QWidget): are in sync with the current toolbit's units, and user changes are preserved because the ToolBit object is always up to date. """ - # Remove the current property editor widget + # Get the horizontal layout and scroll area tool_tab_layout = self.form.toolTabLayout - tool_tab_layout.removeWidget(self._props) + tab_content_layout = tool_tab_layout.itemAt(0).layout() # Get the QHBoxLayout + scroll_area = tab_content_layout.itemAt(0).widget() # Get the scroll area + + # Remove the current property editor widget from scroll area + scroll_area.takeWidget() self._props.deleteLater() + # Restore the original schema FreeCAD.Units.setSchema(self._original_schema) + # Recreate the property editor with the current toolbit self._props = ToolBitPropertiesWidget(self.toolbit, self.tool_no, self, icon=False) self._last_units_value = self._get_units_value(self._props) self._props.toolBitChanged.connect(self._on_toolbit_changed) self._props.toolBitChanged.connect(self._update) self._props.toolNoChanged.connect(self._on_tool_no_changed) - tool_tab_layout.addWidget(self._props) + + # Set the new widget in the scroll area + scroll_area.setWidget(self._props) self.form.tabWidget.setCurrentIndex(0) def _restore_original_schema(self): diff --git a/src/Mod/CAM/Tools/Shape/ballend.svg b/src/Mod/CAM/Tools/Shape/ballend.svg index a7d7e1b89a..cbb0039609 100644 --- a/src/Mod/CAM/Tools/Shape/ballend.svg +++ b/src/Mod/CAM/Tools/Shape/ballend.svg @@ -8,7 +8,7 @@ version="1.1" id="svg5" xml:space="preserve" - inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" sodipodi:docname="ballend.svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -25,14 +25,14 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="0.74991656" - inkscape:cx="176.68632" - inkscape:cy="308.70101" - inkscape:window-width="2818" - inkscape:window-height="1645" - inkscape:window-x="1022" - inkscape:window-y="192" - inkscape:window-maximized="0" + inkscape:zoom="0.61035884" + inkscape:cx="409.59512" + inkscape:cy="577.52912" + inkscape:window-width="1632" + inkscape:window-height="1013" + inkscape:window-x="1728" + inkscape:window-y="1050" + inkscape:window-maximized="1" inkscape:current-layer="g547" />LLLLDDCCh + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:28.2222px;font-family:'URW Bookman L';-inkscape-font-specification:'URW Bookman L, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal">h diff --git a/src/Mod/CAM/Tools/Shape/drill.svg b/src/Mod/CAM/Tools/Shape/drill.svg index 3bdd068d0e..a8bb89b7d7 100644 --- a/src/Mod/CAM/Tools/Shape/drill.svg +++ b/src/Mod/CAM/Tools/Shape/drill.svg @@ -6,7 +6,7 @@ height="297mm" width="210mm" sodipodi:docname="drill.svg" - inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -24,15 +24,15 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="2340" - inkscape:window-height="1659" + inkscape:window-width="1680" + inkscape:window-height="1050" id="namedview45" showgrid="false" inkscape:zoom="0.35355339" - inkscape:cx="-80.610173" - inkscape:cy="442.64885" - inkscape:window-x="1500" - inkscape:window-y="263" + inkscape:cx="-82.024387" + inkscape:cy="446.89149" + inkscape:window-x="1680" + inkscape:window-y="1050" inkscape:window-maximized="0" inkscape:current-layer="layer1" inkscape:showpageshadow="2" @@ -66,14 +66,14 @@ offset="1" id="stop17" />image/svg+xmlαα + orient="auto" + viewBox="0 0 12.705841 9.5264135" + markerWidth="12.705841" + markerHeight="9.5264139" + preserveAspectRatio="xMidYMid"> + orient="auto" + viewBox="0 0 12.705841 9.5264135" + markerWidth="12.705841" + markerHeight="9.5264139" + preserveAspectRatio="xMidYMid"> - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + L - + + + + + + + + + + + + + ddd + id="tspan5690-9">d diff --git a/src/Mod/CAM/Tools/Shape/reamer.svg b/src/Mod/CAM/Tools/Shape/reamer.svg index 1707a0495b..41a874341e 100644 --- a/src/Mod/CAM/Tools/Shape/reamer.svg +++ b/src/Mod/CAM/Tools/Shape/reamer.svg @@ -6,7 +6,7 @@ height="297mm" width="210mm" sodipodi:docname="reamer.svg" - inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" xml:space="preserve" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -24,17 +24,17 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="2166" - inkscape:window-height="1490" + inkscape:window-width="1680" + inkscape:window-height="1050" id="namedview71" showgrid="false" - inkscape:zoom="0.73495371" - inkscape:cx="523.1622" - inkscape:cy="775.55905" - inkscape:window-x="1674" - inkscape:window-y="259" + inkscape:zoom="0.41052622" + inkscape:cx="187.56415" + inkscape:cy="777.05147" + inkscape:window-x="1680" + inkscape:window-y="1050" inkscape:window-maximized="0" - inkscape:current-layer="g40" + inkscape:current-layer="layer1" inkscape:document-rotation="0" inkscape:showpageshadow="2" inkscape:pagecheckerboard="true" @@ -166,7 +166,11 @@ id="marker1181" refX="0" refY="0" - orient="auto">HddT + + +SDHL diff --git a/src/Mod/CAM/Tools/Shape/svg_source/bullnose.svg b/src/Mod/CAM/Tools/Shape/svg_source/bullnose.svg new file mode 100644 index 0000000000..a9abd57060 --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/bullnose.svg @@ -0,0 +1,408 @@ + + + +SDHRL diff --git a/src/Mod/CAM/Tools/Shape/svg_source/chamfer.svg b/src/Mod/CAM/Tools/Shape/svg_source/chamfer.svg new file mode 100644 index 0000000000..b7e1e38d8f --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/chamfer.svg @@ -0,0 +1,452 @@ + +image/svg+xmlSDhLα diff --git a/src/Mod/CAM/Tools/Shape/svg_source/dovetail.svg b/src/Mod/CAM/Tools/Shape/svg_source/dovetail.svg new file mode 100644 index 0000000000..6ee794f7b4 --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/dovetail.svg @@ -0,0 +1,668 @@ + +image/svg+xmlSDαHNCLh diff --git a/src/Mod/CAM/Tools/Shape/svg_source/drill.svg b/src/Mod/CAM/Tools/Shape/svg_source/drill.svg new file mode 100644 index 0000000000..28df70c63a --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/drill.svg @@ -0,0 +1,284 @@ + +image/svg+xmlHDα diff --git a/src/Mod/CAM/Tools/Shape/svg_source/endmill.svg b/src/Mod/CAM/Tools/Shape/svg_source/endmill.svg new file mode 100644 index 0000000000..f264d41bff --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/endmill.svg @@ -0,0 +1,626 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + S + D + H + + + + + L + + + + + diff --git a/src/Mod/CAM/Tools/Shape/svg_source/probe.svg b/src/Mod/CAM/Tools/Shape/svg_source/probe.svg new file mode 100644 index 0000000000..d7ad0793b6 --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/probe.svg @@ -0,0 +1,476 @@ + +image/svg+xmlSdL diff --git a/src/Mod/CAM/Tools/Shape/svg_source/radius.svg b/src/Mod/CAM/Tools/Shape/svg_source/radius.svg new file mode 100644 index 0000000000..92151061fc --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/radius.svg @@ -0,0 +1,508 @@ + +image/svg+xmlSDhLrd diff --git a/src/Mod/CAM/Tools/Shape/svg_source/reamer.svg b/src/Mod/CAM/Tools/Shape/svg_source/reamer.svg new file mode 100644 index 0000000000..41a874341e --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/reamer.svg @@ -0,0 +1,594 @@ + +image/svg+xmlDH diff --git a/src/Mod/CAM/Tools/Shape/svg_source/slittingsaw.svg b/src/Mod/CAM/Tools/Shape/svg_source/slittingsaw.svg new file mode 100644 index 0000000000..ef14f94699 --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/slittingsaw.svg @@ -0,0 +1,512 @@ + +image/svg+xmlSDdThL diff --git a/src/Mod/CAM/Tools/Shape/svg_source/tap.svg b/src/Mod/CAM/Tools/Shape/svg_source/tap.svg new file mode 100644 index 0000000000..b6e79c120b --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/tap.svg @@ -0,0 +1,454 @@ + +image/svg+xmlSDαhL diff --git a/src/Mod/CAM/Tools/Shape/svg_source/taperedballnose.svg b/src/Mod/CAM/Tools/Shape/svg_source/taperedballnose.svg new file mode 100644 index 0000000000..e6e78b352b --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/taperedballnose.svg @@ -0,0 +1,371 @@ + + + +ShLDtdα diff --git a/src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev1.svg b/src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev1.svg new file mode 100644 index 0000000000..41d0081ebd --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev1.svg @@ -0,0 +1,364 @@ + + + +ShLDtdα diff --git a/src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev2.svg b/src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev2.svg new file mode 100644 index 0000000000..38a0c6fa98 --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/taperedballnosev2.svg @@ -0,0 +1,363 @@ + + + +ShLDtdα diff --git a/src/Mod/CAM/Tools/Shape/svg_source/thread-mill.svg b/src/Mod/CAM/Tools/Shape/svg_source/thread-mill.svg new file mode 100644 index 0000000000..8851e2a42f --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/thread-mill.svg @@ -0,0 +1,610 @@ + +image/svg+xmlSDαCNn diff --git a/src/Mod/CAM/Tools/Shape/svg_source/v-bit.svg b/src/Mod/CAM/Tools/Shape/svg_source/v-bit.svg new file mode 100644 index 0000000000..e9dd988c4d --- /dev/null +++ b/src/Mod/CAM/Tools/Shape/svg_source/v-bit.svg @@ -0,0 +1,467 @@ + +image/svg+xmlSDαdhL diff --git a/src/Mod/CAM/Tools/Shape/tap.svg b/src/Mod/CAM/Tools/Shape/tap.svg index 4ef1c077e0..8b288bd86d 100644 --- a/src/Mod/CAM/Tools/Shape/tap.svg +++ b/src/Mod/CAM/Tools/Shape/tap.svg @@ -7,7 +7,7 @@ width="210mm" sodipodi:docname="tap.svg" xml:space="preserve" - inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -26,14 +26,14 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="1.0986719" - inkscape:cx="257.58372" - inkscape:cy="643.95931" - inkscape:window-width="2311" - inkscape:window-height="1509" - inkscape:window-x="1156" - inkscape:window-y="209" - inkscape:window-maximized="0" + inkscape:zoom="0.81750039" + inkscape:cx="299.69405" + inkscape:cy="489.90802" + inkscape:window-width="1632" + inkscape:window-height="1013" + inkscape:window-x="1728" + inkscape:window-y="1050" + inkscape:window-maximized="1" inkscape:current-layer="svg8" />image/svg+xmlDhh0McC;$Ke5CHqm4BD{qptN=9000qV001yQrNVYbE;c5%&b00})>k^8jvFnh z-#v1DOZYZ7)+7&Eg;poAMkCc`N$hN{j23RLoXNr))+7pP#fk2DmS%rpuamCeLHgwU ziAcv&k;;-5$pCM6cXz!Hc295g%#_X=v4eB@_`W1CNBJbKy)WfDU$5@uCQeKFKF)4t z{Mg@GeZRraxb3$Vl9`Con@y%p|>0rQu@ZWr*M?&LkhTX0wU*iF07rf>-dV65AHQvNADQ=u~RA|n2Sd>zH zzm}rDmXoHtDzaG4B-9iD;{BZZx!BmRDZ5Vi#9y3}{eFc^o2_KX#(6o)MP383bv~3O zy|mW%WQ*O&IsJt`^X)yWm7Is|_S~F+=WKHoRdPe{iJ9k3@9l>rnt?4*;;b=zD!%B= z2*ayOD2A7P3DEo zOMpCcXeM3}oCUcEczs{1pwBX_ameQ5C=o<_aHlJh1cMj70|R)@qD9o!uK~~ODScRh z@B2f>LqXlKB1e#(bM;Q(Xxa2y>itO=5Lp%ia&S5Ed!5RX-sC_}M(>6fhC~$9Ws-0@ zklwI!4c{5Q_b!JGE9FkU$gtCLbicXdxO)GKZq}Xwjq&|n!X|;JpME^5I@!&EMd{;X zt@T-8IpHINckvcev&ME@%;M}s*U^7{Eo90B3E%0l=QuWLbuf5f_cX!cq{){pD z1M|#hGb+#|Ky1WPad|fdT{QYMh4K2J#TbM2S>r!uj{dq&5uk*tcuT>A;`J^IgRXkHEZuX#;aT1Q>pM< ziY_gH?vop=snPF~?)Btb)sOWGrrfVP;tgc;Hjk|ib(n2-1G%dse-w50AdoAr1OY&< zBm`Nw;IW8F>w_q#o1>&HcM8sQ+xtoU>>~o#@!aRRbY5x_lAb5YwlK*43F3rKZ$YlR z4@H#?JPY`$WVL2seNG_Zdi`$UZ-LZRHdyv#6AI?$AjLx>w-B{mbP&@oO7c<(D zNk7LpmJZl@|r@d{|Bu$o%Ehe>+Y`$?)jrsDLH}99n{SvfQ z@28JS5T7c`%gcM7UDx5yp6Ar6y<}q$*a6 zto&k~OJr^76{aaxiyXsRosZz$Zoj8+5-GuzXxX?S=_^kO*tw?=TgQec4#6ggr!_SY%lG=^^yOlwlf83PPD z;J;Ts&SFiLobmx*NeQY(D}TdJXysypkI1Wvj89Ge)Rl|&Lhl_iM?|8~SSO_E5vvc) zLgX83Bgb?b=bGLu5K76E)6Rre*jDKQ`?ZVjpqHt5s(rAg*jUUoY-J0mdJf#72LUI4 z4pG@*ne^P{(Us9U6!kaAW*@|KqEwc`heiHA*Z%ChPr!g)`9cbwYNeD~Zu*r~S_&;n z_i7?ns`L%*%>wN{Z3R|q$UE#?os+w6gp()oRs%8(P41i&L*$wV?N3P*~1YKU`c#DD?SO3BP2BDN&!cA|7Dz?)-$vLr9#&UF~uMPi6|}Ygm?%t z=CRQA8yfZ3)JNp43WR}EeGI{+Vv(1LyYa1EXb)PAjkPdnw~tn^JeH23vzLs|CY^q4 z59Mpy3gH2UEPX4OLUp>aP1eY>VIoccn29#cGsi*!yFV(iah0oL?%+!*B`WgNUohu1 zhsniu^NB8#ES@|3NVIexjw{Np&&b&me%em~l4sr9kDk|=Z$ju?>cErA-F7f=An;sd z-v=qcmo%VTIzV1C_gt&WAx51ogQ_}GqIFHQI?|rG6(9)#Eb+xMCqR6t3^}=RVGckw z2C&rMd6pp5t+}2YpK}{q=gHAWIkl!u>jV?SsXniE zIg~Sf4c&x~2_SSi?HQ1h~2Iob6 zgzz?ebTVMxiLHvCVJGa3-CIysaBaqoEsbtrlfykR7emXuZw2iRWxB%gV`lV6Ht3Go>;H^^>p~=USC@LZ$Dcu0aqPe&WI^XCo(;Oo2jBaGNzKh zx0>mdv-m<1CBI{;=C4!)_O59w)wj%{CT}l@v&$Homg1e@u@rk{?U>Q1Mul>7d_ySPW=O zW#W>d*ouVIWAASpP3M}M$YpPBuJsNq|0b;${Tf_*@Z|jD;K`|{DQi-2u>B@>m2}D- zk+qn1VlSbdK|BOAQv+{^X;K45RGwN!+2Dr)bCJYOEx~NCTpyohRRK=0KTkg9j`KNB zIl<;EX&qeqLwL<|d>H}wIk?s%G)?Q8%kA(ya&oylsy!{6`@qiS0XMy!2Hv6b0;~(W zTmzrHH`{>du~1!5vBubMx5I386WZ}Ny}7KtTW<1`%lNu*@})%rTaGrP%sR1w-nt0S zTEgKbvh#07Pow+-vfnq}tCviE{nVHD{tfP(o0Mp7nFTB=Xc>wNv;b{ow^}1&#oM$8 z9+#=)0l!Sxb4_mnkycAZMXAY!eIEii3=UK0VSk6Uz_gj$0s}GU=#r|>n$cG--i*io z%?_a-dX9w6AHdufFR_o$u{&M8PU?!LMf&1(RF4}5KQlA3)?@%_roRd#qnJA?aDb`! zcGNrQVn66}d3lLsjQv#h8X49gKza>^$WO)O137sZC6C^>7OCwi;oAx+Et|cLDaX zf?3m{3nw<-$7-_@+B?Q7P&$Md**G62Q64dh;W4qXq~Q5j$NKeq3p)4*y5Xa&szkV% z*;^f*?T}k4T9aj*+z=h27y;w0oB$HHK|b{__u0d#)x_}VpXyEWHOFoRZv4z zRS`2^r*z7C;?#)26AJaACM; z>iA|4^LlF&7hH6s+e1C|YGVwUQIMFTkzNaa3qgL?j1IsbY7}q^cQj>H3jM#}Hm)H} z0WD6_Ra(O}W(N<9SWD+sn4^I3FiitYMH^RL9!JtCB&H%vA1x&^(^XX@bkbDa0->4v zDIOoDEmXdjEt(PiXzT%hgBGdibBk5E&&8{%Q1(&B)lwxk&{k6coZhwi5hwSfPj7v> zPm553O$npY=b)>E8Y4uL#yJv6f>O=3Oh+O_l;`LdV;e9YRWK0S$Yz7Nm&l(YN7qn3 z_T3_{GlOd~)ItKLCUTmGE%NG%eR8|`fV>*^eLHMBUv0*`M`9Q zcV$bK1aPeRmPC}XL8w?41yc6btEjw~&=S_bx;Rw;n_4GjiXuN!GG7R}lr1TvF23`( zn~p-3gS01n?zjOG+l#uv!jIjeZ*j(;DbH~!bsrBxr6o|Qn8moGT=DTl<=IEC5lm=- z*=49jp;adVHHi3bs&5tycuxKsOiYV2`DH44?%27bA45kg3`iC!+Y)$)ib8?kEh6o? z84!U}d9uJDaHo>}IjLzZxtzC&LL{Xi4mOOl=CUtN$3lT9`#CC-Qt493E@hV3BtZIt z!o|jI@$2#{aCYX(ch{3fNI3yQ5frW)*7@_ZUItXKdao3_O}a5B4wo9; zwHs8B!o~+x3tu$Bv_k08A}IGOYU8k_n_J!nbwp|w#5LJ+RJ~dDk{mH5)mYi77^tL~ z(ef%M&tPeheS}&{on^=)y%h%4hvK5agi@tAP>}|9G}*y;De#j& zQqe7NA#iv{VV8uVs0E2#K;=fdtN|7q+{+;;GyrFwkX2_bRS~?Gy10kvB9oL_a-0H> zfP|D$PHMiVT~b86c{;Olp#tGePAHnhvrVH7sd*hCy}EXI$kxSD^P)|gA>C~SUIzWL zG;oo4DGS*od2TYHDVv#gE#f-XtG(^kkLu0uiGr?Qnp=x3Cc0`N2PjAyV zf|1<}&vGPb!VZq4nK!QZxl#3DCYQDdB49HuN$W4$%AYP|(?aI-tGZV+z4nKVa>pcT zhOScANY@8DhT@tyc@^8QW_Mh<<5nfNMiJ}!PzoKc?W7w6S^JhsbGY|?je#f&chl|4sH^73EJfpFR2Tjr2Z!1lXQTO5yp~enlNx^U>t zJS4TuN2hIi?#CLEr1>6_mkr+d)_VK}|K6H-1tGpqti2Vb$J@RYtBTkjVk%QKj3~y? z&do@Upw+%o=D8mg7mY4u^#Y81t+@g9e`!K*^Ljircm|^5ioOQzqg_krLU>3~es(51 z-bV~MvevLPs)2F#iD=d4Jv^5Zbd33v0iQtSZACD)WJ})Sl!Ikrt1F&o6+Aa5VB0x$ z?A4tud!v-oIY+})2?P#NzuBr#m6Mh_Ro)zf$D%xl?s@A>F=woKE}sgOW2n@pkhYo` z`Tmqrjxl^q0xm&fQzc?kvz8w%E73~K5gK7R@bo@JXXS!@oep2Txk#0ZIdCo9E?_Xl zL!j8(b|V})u;21)BebL<+-ki8R86ncS1Zz_|LJ!@B0h%_-1oU9k_vdJK{@Lk{{)G^ z_+WU%cwZEObEO~OuL#$Cf4iJG*UA7sIQ*lKY%a5+Z~+CPBgSJMGDT_YlMo*LO*dXm zvEs@APtRclkCIU9cqC7f{r1d+`_N)$Nidvaa1t})zv-fg9vdE5pwT;wF*Ox&%M0cq zr~ec-Z2eQXHFwHca{?D#N+a&YkYKB~YBxt5y$+nlR;Ei&hK@G4@?0@WweCUmQxoy* znPna)wL}S|a1($qv=S3eDZV>q0A_Tc{(eYzRVu*ddl=qyS{VVRfDUvH`VDEoQ7$_P z;dtaPxBVW1$BA?&DI~u`eoRUdJCJ1Mmulll-$+s`nI({xy)mWuNxvTU^8sf-QW(po z{>b$QD`50{lZ^WwOfI=UrtPM6znwbyHDkU2_XUafpF5gAuUal9)72f!hTIh1wR@i( z*r_0!>nbGsS<@SfjB9I==CwI;v|6;j))d{-s`A>TenB=D&^zu1h}v$_inwivY>Hyw zDoNrm+8}Zj$MN-NIRgMEG>o0{%aO8K}`|${nJD-keoFy%(FV;-RxoZr#&1 z(>abF@QMG8+2o)cNjrSX`Gpo1R(!6q8|u(rBv~T#HG%d7mo&Js?`Gj3f&%_=*{(;m z^PAi5jw6vg)0@f?u(Eeb^dp{9-abA&F-)3-M4MzEGn6d-Vdw~tFeyQ<_ zaa3Sd-X!h#I;~A#ERiB=^-#f(P&`jtd&#vWd#a8?qK5dNVMV#kc_NAqKWVzuGJiFA z6LGE&W6qnNE?rrITdbj}HqDK|((bBSKWI=lVt#eLf#oq8RZwCru^`US>lg#Eai#_k zBbOLaXJZ4v0W1H<`Q24I{5AW1K_3%D5@%XJ@Gon_CVW!EfDszs5vMjll{>EP9vh*g zzahx?7KaR`P`U%A>pW`-8M%LCn_ym$$ubgQVd&?h8H!|R2E;hiNO*0Rt|a0fOip#d zkOPLYS_iT7?#mZ}x8pxrkMG7R;&uE-&C-slW*j8d@YeS~ruUC#vlMTv>>AQJ%e5vC z4&kZJmYq-tHXahjKYh#CYWOjbLh5Oeb(@GJu(*sme*^gxGA-xfhe&p6P_fIBw+BS^ zw~`Yz69C%roLWsh0lBlD!TZhMgt<)*hE0D!`_PN$LPH0T_u51QD;9ptwR)0oOW@@1 zt7_RDMEgloTdDCFa0uOwVWYjU&tNmyVLTjP2I}zynHUl2qE1XG3GZJzlG}{B2^~qe z8wk9!Bd}@Y!;ZN3v^|I90+Ig#2nWBgzgp3m>HK(3v@Z0>z%@rgm0A2R;lxh_Z%dR=ZHUwM zGnhr+p4JvHlRf1A-aFl$#6J-3#i=Ry2ABU2Wgimc{P_2eqHhNX0D$(BD>*w_*qVtO zIGLL`(kdGmTAR>1yF2T|_rV1bAPC?1g5t}w{h~tPVY8Xfjl7eMV33i9AHMxG31FSy z=v>ptSi0P}=!$-BpEhmXnC50AtilRl+J--7O?36QRuFWT9*p2DJeJyw8jwbn_$7`y z)B{9S5zrD8=82zTz6KG9UmQ?n(3Yk_-FLbg|(TtxTCA51}@!g z+8&)v?cX(vH&u;CG~Ju0g})n|8b9ZbRpgZaT)Gru3e+NZ=^b>aR>&IGL6D2O|H*OG zOtSjDyda|BUB!$yfG`P*wpbszhhDI zj1~E%yJ(ado{}s}@mxUGs5)zBm}DRC9fm##wgetRbh!hG z+~JeHmm7q}inU`dRdE&Lg3Zzb`}f?~%t3zdagu6QC2ol@S*gT9HowSx^iHt`jLpYp zU{Kb``dB>uFd0E8cakT1Cmr7Fk|}QyJ^%uJ2|@4B_8$ZvNS`}^LY2+JVGIAJjC=r) zEO{huq0DIa(4iB)6Oa=>-=tv_LUN#USgm8zC#9!`4|)NN1xHoNjH{H9>!s=?ICiPv z^YZD=tcIl_h$yyf@6D0fY@ct`{l3kuO|CaD$E=E7e3v_Sm@l$_?7R4kDb<^t(po?( zxaJtw*gNzB)sM{dSmf)dI!JhPzstw^1m`+ftCcFBtZbtkPT|ZDk#x3M!lB}jcl9|6 z$yA3z%|z=T(_(!FNhxv|oZqw3Db?=U+R=~A-kg_&tVjclMBj)Q19YQf1PS_zc`-B( zSQn&F4L0{qSZm@1z&UZEU3-aEGh!Y-X8qg3?rAb4HwLl0N=EY)Jo!tL-d>{uDuwV5 zZX)5AQ1RKUhPPXnz$gp<+Zbo3j;j{IS=$RUf`D6@z^wQ-xbtt`@C{y}^xFZ?- zzx@mYuSPO@55rq38kmrazY1{#(kd8l=B>eTj2l}KDii>8WCPwu4&kqJN8iz6`T+it zFMm$CEX60>@+w>I_jc{9;FLS$#~y5xH`uvd8A#Fz4{(mj!T;N$Wa zT;?M}iZi2G@5NTZ6$Vlu%>r7-xj31rSIi!?1wrvhg}9ETj!=NqDXWY5j|XFc<;DTg zy9I$?5Zo#m7kA_ldUgR)>M@uVVg2XC*^#+3cCg# zi|2T+Q6S;Y*&UZl=O`rM5&PU&x|X2Cy;7IRU(SoUTpSddD(`+l|EFtx6rjbX`@sf2 zFaQA3f4Wu~1N(ol5t1ll7eo&edh>;vuud%G0D&L0QCWxEVX+?IwH^#tQL->x`t=b) z0)bHNDd4M{wK9AxfuE_0^CZ!_RrNvS2O+*a!>6;Q&3dxaLW~LFGAlpc6)NfH_68*K zrR}Y}LF6Y8ZJY~sq=+QCPFr<}Ent#Jiv&)kIiN_RkIKS7MU$Y z6Vq)S9^y&*RKg6yGyCPY?g2gNg^F>m&)-4C^Rqd{V+*qg*phj|ziVA0CXm8alLe;e zh9I@N<=-I`0wmc+hL)4n_y`=Z!CjnX?d|U$u`8;}S z{O^1Ju79PzA-l;B{<@H)$QT%tm1P;zo=QeqV1>}GOgFFgs&>P z2I{ePme0>;`HW+o=_s;HWnuXPnQEDO_o;`bGr;!Yatm_MgS{iwUsaKkHnq(}T{(P* zwJ>gJ!(v{BJ)27_Iz_jlM*i$x)JHK}-@GOOH%%f=dT4&9aYp7ehB2kx>t(Lw>0CLb znMT$@N#hqd_O1Jc;!zLtRj+Q_-ZTdpwcQ-=?QuJ%Dz*|Tu))O0MMAc;Ok_LlvYGm} zCDOg@8H_aG7UoZ{zMKcyK3)KPs~Vkiwcrh%`0hXL3DPDyr= zGvJ;-ZmL0m$TVIHPr0fe(~PIXY(r^IE;vS8n2}9cGZ49MSz{vv(PB*B*M{Kp6Va5g zbR|mDX9iJvNtM_MUCf!%v!(-ZkRSNCe7*WN!iGY4Bi)p$e5Ea|J)K#exz<;0`+j$F ztJ8HHogJ-RU0N-E9ldF}1ydoSxazkYK&ZR~$xe4E*LyR7^>jCRWQ)|$Qxs*@PCFgiN^>gLY5L)32$3zwi8UO4flmzdih_gLkVeqR8($ zlg3DQ_eNzUDuKc1#eb4zrNOE4P{eEPa{GOa-|-h)&dE6vSjI0njRGdM;|V>W3eyGq zm#g(q$M)aIg;V-pac!|7)NRv7i+^)EZT**HUwE^77_+)ThPmflF16PWq|J1uNwLEM zwP5gy2+1i@$yh#UFhy{XjZgA!u`1CX=Y!^B&Sy9D0CF-SB<7&HIw zLgy0t3{Q7eHw4;M&lV7H9=;&e_^{3Yb#WlyCy5+9!;H_JhSC`=T2rMw$IRE7};|1UX=@CT!exvXN6wnltT$22b9u_{x z4Mvox!>A5E*Z_*%YWMPa;9|<4Y0jzk>_~EXe`@Y++|hD`0G_8`zR|!sM+1C$=&Nk7QdFac3Q1W@5$>; zsHl8W)8!Gi&e14`nJmwVWiNLGZ*q+J;nl zoNFF_`dY46oOS3#k|Wf{DXCiZ^F`^Eam|OCX=n6(oAWfcwSU~t`L@lc-nxhkVK~$< zE)I5ND*Q@j{loFZYxhA?)w{i#&|+*BNMeufxo~o7ec34YvMWMM>RW1VXamQ=#Yh=~ zg-)b+H0D2VHj_hSyarW~q|a^x$q2PfHV3JV2pfFS{>-VvbmQ1^QYSQI+mMjA7j2?DijsY^{XPOE zjhqUkI8}Y?cKc<#G-W|=d8`8kk1&~DC)s4@41`00+cJ2XPaZD60<;jIcwbtOB^j$4 zV>RzuFX2D^|*yk-A7d+u=_9)1K;3GqA)G`z$x0=U@ zu&-LR$})OL12n>a^11Y2N%5$1m%}3I0u-poq+R|$~-?u%gCwg*f=+_8p zmm4#Fx;T2dG<33d({@>6qPSbyUya-XA&BIbzt!~gKPZ0N+R2={E#CE}M>q$I&)-$?>;bQ7%_VVGI^cBy`E&_L2V^b#0NR+9Z&9 zz}F8gu>{v6sa%$B|(|v?ySd~E>)21~H{PcG%2j>Ge+~7Km^bq-o(wKlLslNRe zTJ!p1b!}&ZPSs|cm>#}EfkbWA{6=mG-2uqM!G?6@HDlmN^MfwJoF!ZMS=P|tzWOLyqzx{*rVZ#osp){B zLujg&LS0=5BP)zTZ|~{suoZuR_v*_h5k@Fr!Hq0H;0bb-n32H@M5gtbOEMNwfxbUG ziOY}qq&Q$fM!$uri+(aAox>>nMQ;%W0&Z6g%Oz zO~+3mu)Dzkuy5O|j|+rXb@+0sIe7P;LR}9RFz)!98cu77(_p4t(nup%U9GaICVc#h zLyPN7d2aaGyO*=-m><_?o#O4+fSqZ(XikCF6tUm6r0o$%+!J+)ymT*zo}BM&u<23pcW65AZBEF&(Goe=@*uXo78=rcna1lB8r9@l-D!;h z<01q>q(Ube7$T9azWI~#nnRT~(6?%&#tPpPRV1YA3G*Peqlc-Hvbt`xaj2Mv87icA z6pT*y4jkiKM82ZDq9DhmeePJ{n6_yT9&5o}rA4h9X`V)6uy#cH_KTKub$)FI(BsT%qY$ zX-Psc-%GBt;#l%2MK2<{?0e{z1*sucrk1MIwT}A{YQyz%XF6 zZk9PacrZZhnV1?Cg)A&qQ5p2u>V-{h7!BXALw&lb#iue zY@>`sb2fFp+c||o131_GnEGD$>eq8KY9*l%y&1?3rE_ zjUv}Fg}b;#q?slw!-ZwX#x3Mp;FP!&Ye+4`cyq!DPqgB?RoWEF$Zyo}5o~cP*lw=r z1Wq3iRULY9aLrwCX{{ENNB?1x;183Eb$e9)=3JkMu4PP26~D&W11qNhx2fw4H@UV@ zShTuqOGepLg%IO9tL2KF$3@M&@7mF0uKQ{m`0e|;mesdA|1ilpL0QA(k7~PpTqf^_ zU{a;1A$+IT#0=(MSy_g1jtNMVRazH)A!@6m&s>L$Gu-KRDRQmfz7^sC@S?at0Y!M8 z9*HYvTu`nH<&iOtY|Gl|suC837H{`n4l+(#tf%@{B&gAXKcpf1k`O`ZMtCin$`6vX zuI1O@Jr!~vU_v{wJJ5ydqWfVWOQ+osVimpKLsWkQSX+Xj|Fd6lxgKjPs zM6dJ$dDNeMiqJ~~3vT7`gTNCls-^a)L$Y9=#iU^|71;Z)lDZ_PLmqL=fS7&)Bb%q2 z3E~o-zx8iR>l3Y<#}fzJh^8GtYH4q55{ICW`zv<>`Yz{?ydMsiPX!EHu>+YxB{L{; z!K7x)9zv{s9PSWC(~d(SBjHe`%Rdu;v72%mgJ5t0BtT-n(+N|^?mFQ6r?{EdIRNU7 zAG)7uZl8UoPs zjrwf=Uv0-XQv51`2uHAgw}r|&%r?_?Hlrbm{>Gau$`6f@1Qe@arVKvk@S18R0d$w<-1(s(f1#J}Pm)>J!2(VR&Y~zsvAb!E zixGh#K8a7#6=FvG3LmIqM1TL$b|l*h%#obx@{+egfS&8G7TliN!^-+$8nr!)U8==>M$m0axY9Zj5^OpO1{rT><7sNz;( zF`xhd&LRK+;D5d(=3?=myD%;s_u0|D^2%oGR2KYL2ajdZJR^gP&06MB$&B9^{W?$( zb}j038gTlhWtMoScvpGH@Lqw2NBf4M2qWfIbRuXbMiOJEWlp%N^YBcSoaM@m)J@-W zbQiY?4dH$l7{qSeXtQ$KcD|o|DqMse91uH8KyutTE39C(F&Q@a5rrWz8%(;&%E=x- zcsPL2fVrzTonplNiZn$d9i`t}!8E-M{r)`Z5gQqq)msHUhbJ=*h?ehBWCqkk0zZfL%|f@h%+n+xTV;=t1kn-P%$LB zlNGQ#Cql1|>vSp0aFsZh4AUus0^>2#A}2R6JZlM+cT7L2oxWzz6E@I_Gdxidg4r>m zgicnyNTJ&Nly?fH6XWxO*0(xX&J*M^-u^b}i7@YBsXk;0HmuaEdzeC9#^JWfB>&eB{S-?BTse1v8Tsrzm} zry|**TB};AV!`Z6F|^-&()BWKKTm((K!b&;q~Cai@UkTa@=UuycymQ;8jOX}!qcay zy(P`_dyg1m=Gt2WNNMNa0YB8`8~9&Kr(ZK$y*GtM*mJd&vcm={2D8NNg^X@ zK5QXYkI3rIrdI}zwBBY9tF=7x!AoS?-Z6RJos;cZFEsHkA+rzE1i69NyDz8dKPx%= zKJA@1u$DV7O21Z|Djn`UcFa7y)AGYE^I@258;-OycvbSD@hd|Y^YpX)yQSzMG6URe zgr+4akBg>&C3@~sXZaK;PVn|3SiXlkK?k%_5lKw811h&sei>Y=B#5M=Tue4bwZ9Ml z#e%SilEXrKzvxthSzbOxnY68(!2m9MFfyw!JVudW+zE zFXXKqbqRo``;iflXO!9>IPQeu2<=_LwyQ|Ux4{i{kZvgy8nzPBR-Y?yEcMGS_vN^( zSH`94&~*L3?8EofzP6J!o{x93yS*>CG2q-`QxQX7j+>ScYX*@2(A%=EI5J64#@}f2 zn(JLntjQ;59EyN0jA-T#Ne3eATeT)7vosvv(-4@%{N69uz<5*<|EQJR9}&7A4<5ZD zP>P+?>5rHpx|5RJACSlmx#vTRzvml9(HfgbJZ;jr~P7*eLGJ zE?8{sO?t;-zepAFjYjg7R=dOB#j@8Fcz@A&yW7=ppOP~30Q&43zNcZ#Yg|T=QES|t z_!@O3AzRx&{(b)^@fCZ_Rq~iR>nrckhMwTvuekleUTNKsoSkpkRRG7Ml2YUpkzN+9g@|0R5Hs8s3UQNjgK<{+ z2+ruezC#7}LiZ$?F{!h&7yg*NBIVy~qx?c-!i9{Zf$l`1_J%z}FGR@F;uVz2bo)N0 zK?LG!XVpFui zFf%sS6bq30dJoG4DU+*7cNJ{uORoWq)OBEB;S8SE3U_V*K*eE(7R(ld+BL!Ct)4u) zidT{tA3mN5^^~Q`Ayni&*|gGb+L_jD3vutIE}Ut!T_V6 zIsCPhvPB`+8d0v^<4thr#28&N6qtoge@oh}GIaH2I?*sqC6~^59!(zg6}AR|J@TYP z8ShMb)Qvj&BJgItV3P=X|b78X7~2Wozh}#qzU&4uirw`=g(Sk^Xv7^-fp__ zkP9jO%y}Jazi8S(NZu78aL)+@4OscyyVZpGSji?U5WJO#!0YT4=t^}X#pQ>PFSZ5H zpv~3Y1BJAo{+zmkfw$XBd-TSNSa+6N1R?{-j04~Yc!TrO zrdpl47fjf5+~?8?eWa{ub&Q@Obp+;*BJP{eGdJ;Gyewf|Ct|?E@S^0q+9D2_DNdj+ z=#V}x8=z17PSHE@(EMOdpu9;h#IKBzyafSM)!U?JSuRHCFLWFyJ0_Y1)0jZXtrN(6 z=>9dAd3v1gESutsdUZyV6>eBe%SWCHJ7OiI(b!L&e`DqIOyzbZpiABX;j@<=7s4Pw?BS54)LOg^ts<&Q+G(s-?V z0u=Yj%qOGIljBdFKyj_G=W3?!Scc*g!><)okhKlprgzFE zVWifyKNWmhc;ZylLc@Joy?^sMwq>aLi(kH-Udt{dw%bX~b1K~$ufI|eWk!{6OzpJ7 zy#G3@4o}=M%9BHc z{j~yy5&UQ_%Fm5qz?c2c5q_{JoB{V7tZ-Ty2W#nSE=JJqu^!)-(8^cHE(%P>L!&o- zz0Ctmi|pT>o+rDW95-IwP3J(?mLvXgoa_KD+NCH>rK)q2mu5xk<;rGJ*t6zB-HP)k z#o5h5Fk>cz8%SJ>TlljfOPwk-|; zU4cntwN=;~oU^{>1eV?f6+0E0HeSME_x|{rrN|i5<};nAulJ4jJgcSZq#71`51GBc zV*kC`r^FVvi+~RR0Q)EX6WlwSyVw}o8dz96(JBAylGfhV3=o^|us1?pRty#j>nG*} zfRzvzR{YVae*Kdm{+X40#>XW3$sp~;HJpA{)(rlW08^;pumJ!F03?J3l-;wBd?sp0 zq*9ljlgiFj{rKbf#R&pHkat}lSYRjxzQK(|VNOeF@%!lL`2{;XXyecps{otxD@hll zq0UuJbB$n#HV5$D>z`X}@Dj$B$D-{UKk40CO{}tBiCcQU*uGgA8s^T)3oF+Cx1hZR-j@hQ#=?zrIf$?dF@}3rO<2$NQ7!m*@ z6xpz~@bGEsvVp@{6bWkOWb&>&xryv%+%_@;kawIT?dGskCigq~OA8%{Vk;mvlNF5a z{#HvaNQ)5aP}p~Q0N6Vg7l6DR<(4*rkPg7l5SkM1KWoX2;XR=NQGk>8Wwz|tFf}bJ ziFP{+iA2kVIlekedvYGhcQpHgn1D$TQWwM^HN zciyX814G&dOvth}6$52UVeDj2+;WE}PN)eUrI{NLb9BJZ`cE!am}g z)rRPdp{7G8X+*?PUa0B`mgJ zar$fe7Y(L8bU}K6(0M*-3#ycOgffEdm0xA%vx@w2azBJKi&909=d0wU$=(y3MY$L? zWaM^Kq!PRJN4ugDbSx6Y0^(_*I33W+03GF?cf9eUb?7*w=S z;s~J|FdN~C7buX;MHkFzT%jbHvvQ5X)A~OCXA+<1*8m?$;m!A9 z9G}no)i#9fnTlzbx+RqyVs%jO&|!M~$cj9Vd3FfD6oB!c$H;LM!1qj5fJp%tO)k_Y1=dVI( z8Bq@CW~7$d$ZyKI8)P35Vd1=RU$Mu4Q{p+XLb;zC-3VSpAGt@Z!kY+R;m5C(FPgc8 zDAn$ekr0!n3W=)O{ps;>sSRZP||fy}=|*Re?gVTF0(|E2UiN4cWdhR|Uw!6V50LV^2Z zKBH5RzoBOJf`qfTtWpmhFm~&7-oauR_#&fuuRrhx;I6@wm7b6$xdwySZ=74mr8b&7Y)$qT?SD;O!a6@ z7+)YT(5miVnvWv5EBHdwtBYXKhG`GjXH@JZIOmRp;$$ywZ)wRoFzS;h!9_hS%nTf` zpPuiS#AlZsmWM4CFQAHrZ739VJgGnH7!5U)4%4L_U61Is(F%x+8#Wq>*6SG=m>HB5 z+6w~InZl_wg86cku#K`>`XDpb2Y@<>d$Gblg!xGR_#vZNX@J#)6DIusw071}aV_b) z#%bK$8h3YhcMtAPa0m{KH7>yk?k>UIgA+7ZAh;zEJOsUD=FUCmcv0% zd23hI$F9ArYro%i@^v0O)Z=4kU8u0-8R@abTNGt?CT->bJvu#-e7;6423dycHwCeu zD~=?HomMrmWoAh*=&&}sw+;xf-(O4z(-m+tAX8VNLr;^%AcC`hbnd8K*NW(UoGD<= znhik5pB6pH__|dO2FUu^W*&K&aVRK%-v{v8Rme=zU(-}r4-_dC|G-T;7Si&dcQ4EL z-$SmG-s0s)7iuXVrHmlm$~@%1l;Aq|G@d%JM}Km#_a)h)k5+qs6uz$j!xHvo68(%I zIx%c~%%1(jW3$?V3tdW*RFu+SSQoaE0xU7dP+SWFAR{V@|yksQ+_ zMc7(%fn(K^t`PyOSw+@hPUH$IeWLgm&dIp7)`Oly42<$6+Y-I%VG@Bnu+%JN$#ml+ zjqOMmqB7?V>jD~%lUr(>B6lVM;>-&uICIpcrpldTfnKU!MzxuKDKydcTx z5xFn3VB5Ang1a{U(y41m8NvF94sNkXX|n8F_R4!Rzf~%>wB`X)_h8h4|*S3h;6c65tS!KF3}=?H3ztvs<25c`?{ z?D|%!chdUoa_w;+_-!5KBQFXfrAWuyZh;*ch0IoN-hL@ZbYue;o+@s;3Pymd(tH&F zb4XsjD6IurQjt6k;nAvMVTPTbKX$a9F0gq)Yg7?(U#YL)Nv$qIr6**Ba5VOZxT(Oy zZrCMc1Fu5(hk&nQl+qBH(9%qakj&6vNr$1Y;87{`A@Y-tSeWzTiSZ6U7|vva)5*_- zZiQtAGU+@g4wALuv1v{D!IB$AF6-uJ_U%|MZREY9&786#`xUv^ zQhi@w=co4UkJns%>oST1El+=MDI6k(o>jQxD<}wyL(~KpXd-m>%IxjpYs_dB0_XN2 zUF!%aB5*7q_;TCDznm8ybY?y&jE-MY2M#vjB(P0%5o~p+gNS|q;}(eRV|291kV~!* zb{o6s!8F(ALidCl&eVb$(WlJvDOwArCWP#I$_Sws&e%I&`L$8O&SYJPE!r@E+M0_Z zT2czjsMz&r6p2%4ZRKzvO_CpGx-^jmMg;MJ$Bbz_jX{a52KYmv1Ij4B4I_ytx?8BB zq>~sab`cIv(0*Ksn4@OWq?jNO-TGF*(GI6}7+=va8%#Na(7Qz`-ol>QRpclLPK#!- z2{0x$zH`jdQPH*V5mVShV3AMmBvOl76ZLOtE^aEF zR41#zXG2A;*KJkS6piCbBY8W+M!`dGwEz^6I?WL8V4Yj@2MBS(Du;e4qRr;y$g8f6 zD9ngOt*`@tmAbNr=j_j;Yy{tZIUCOK{$Us)#_}_k>#|Xi&t^BxWTYC8rrb0T!Iz&N z(w{IU%*B6r!HrHXlo2BXwl{bS4;ZE95#_s1!Bqz3=T8haJnxw*E;4PD#*l!;QpbsJ zqjsj|LP=?4Iaij^>!oUcJsT6(3ggLmm9|t^wPt~o$sBEvmGue6(oIfkN3y#nv#mLO zDjss@#s<{KeWppGj{yILJ^GXfBM(moS+Zf5Oa)SwoH#oEN64WCm`I%<1HFF-17D5v zy&1JNHVEP&0?qLK7HuhsTjo(DJr2;mXqn!Oj)!Ey&)>=ov!7P~(g69J1mEsN?$jx> z7A5@nx|ulXiQ-3b)BSOqgziQ88V{JNPI&_Iayl?Lm_$lUHcLZhkyS=!oC$8O6sHiuxV()YF$^ArG5? zk^-<>8X^xM&bP!eg#e{@3X5CO@9()Acn|KnwKw^%Io&rohjlS`<*u?tDkDDVx*$=L z8|F4aV0;&W86V~cRI5dvOyUGK>~t8xKYk?kD7yE?!by_VdMe2zXEt zazJ@HkZ>3M(Egp_H)H1D)%|0TNJSB?*@? zC800mW&Gbm~;lqIXmX;X@a8Lbss8Tha(WIT7Z&pc@4cZQ67 zyZzuDHLl}9G0V1d)lZzKiG|bvt{MUyJg87S@|JZknZ!^)JG!jB{N1oX>B4L(ANfLxu*O01$M(7K{J_TUejZ?az8J%$(=#>A=G9>?`qE zen zCa#QXCtl>cd~dzVerV8Zei0)+sjh9rPr_Wk0(oW~Be4g$Pp+XsiC3(Q*HsCs^^P-z znb0bxz6@#5m*8sIe8%c4AM)7=@4k736&!W*G?l+v(5E+nS#Xp@Q!Sxdy1=tf5qh_; zeXrNU%!E<^cANNXCKiH-o$58bB+FN!JI9Clb0%x;p0COaEPUJDO&AW z_vJf!H^Q|vdvoID#qnlUUSO)Mlrk^}C4YqK5$<$oB_9c7U=j+P5kZ`m-%Ncf-5l}H z!5dm(y1z1Piz14wI^KSIe-A%7{@N`GE^dV3(DK%hk#JxywlayIQUD9Y0)#=&0QCAy z9+UbzFms^{@9}YA_VA(lzz%oTOw&d3y2#>gVGwG?xb7Rp^gZsYYV|7e-q*2+((YEC ziYdj9zs4tR*>9qbaqUS=$s!P3d^*4?0eu8VA6b0PEfR0Xl+opZ>W0Y}2o&$&9%=~Q zp3gNK&cO^oVE)84Z!j22E@Lbm@eq?cT_z5EbWCkv_auNi*rNSfsusQt)8k#ohbrl+ zXOC!dx#TjMk~wRw zhIZu~kdb1q&=H@R=j2$yG8vPbHj|I`1^`vVd9sXv2X$ZPv>)am#87A(+T0(+)40y% zYZOZJ>1>O8%Y%7tW^(wJiUVeYJy{~u`ZWU-iHH2{W0CN;?X!1${>B8|b}Mw6BoT#i zk{#<#zP!Zth#mZgc+2e~B(P+9Zzl|gB7S~nbbND0L=XzNqRNv52_deF65&({BUBy? zIkyJsb;ifeyD)K1cv#mAc}|zL5MJ=OHu32U3!6VgD8rs(r*vpyfb;V4j)UKw;dzkj z7)Te%T#L&k6YIrbJ281(l~0PGO1x+E)^Q*(fRuTZ5kU!Yfy6ir#=5sVnt**}_-ewY zL^;Si?lqHDbjL9dH}_Q?%^?8@R!IR;R3>dq_wec6YFQ=zu~;P3E95!Ta4`q`h-vca zo-x4CGJ`@~;_|c)3Y#q9*Uf%DKk$~)h-3tV;f=!@_jQ7`f+qDumr9R-74;3e)q&>Z6FT{g}Na?3eVyJaD^fq4}J7K zr7e8t$$l12QF_?1QC_ZrdR|3F`v(rBUxSt%w&vC>H+H-iLONZW$F4u&kUcA*9^i9F zU3|C955$tM^k!2hoqG7f_|f(UjxM&m)T$mXT+LYwCN>i9wb2*y04M#DiB0C57|p9t ztl&bx=SwDRkQYxSZURFLChr1&n(vLYj_;>KqBy$aed&!OmQ`H*Scu|9{Ur5*p^eBq ztX#=Z+ZYt#C0GQy#GKjIZnO}xO=psu5R9KsBiE=kJxd|38MN^WgFZrBNIhh(#{+({ zp7I6a&A7$lBW~rFwG!^g1g&aVeWofuXyy|%&MGWSR&Dfjjz0vvOL|Rte_gUVIg|9B z5blX&H8Pi}SY8Vrr%PosMQ$C{tXd zFB&MpkJOloX2D&3IiNcy$;SGDlm)7%<{p~~C|7u95Y}x9#EBM5n(qU*+MT~CQS_?7fY9(G`f0ScaeB!?CQRC0q!zPp>M516z46#2^l*%T*78@$F(D&-V zxYxw=$H<7@*j28MioEuaW{a^5n6xYw!jka|TVsiWW9R*Z|K$jHYzS#nHk)t&pZ{K( zQl`P$K_r84rS!|I?ww>yz5{|50`YPi!zV)zLW^6?PHU2BHLs1aB?JIA$|L^)+{23U z>4Q(Q&Dm!PBO7K^EbE9>Y&aJrkJ?R`<)B?_m3|FE%lLGVSfC;h)wS0Q$`UdnV>Irf zS$2s0&F@G*^1Q@C6N3{WcD6KBL6WjxvrpI~d_>*i~RN9bQh-8Aey;QeJ2)0*qV9O$|)ca?BkbZ8QO& zRK_f8%)Oqm%=it#rfw!Cm3QoPk@)heQNKtB70}`ZHz z=B8Gik$ydc@mB1Ejc2%`=@f++dvb#oX>&c+Jb?iOWc-C98@g^B5 z*Ta;}fDFy+w2I}T`V2SG^O7PvNnNPXQj{DnfFK^<%U#~Je>O21aphRK5e-AQ%9M{~ zBoBoeT9)5Bl~5}VcgCs(mC<5{zP}hJgE;`3-%W%X=Rqu!E<>)GT(V9HjMVDGbAd%B zLW_qI9iT1v{YqsPsJVICA~de1ve2kui#9|FY=y}q9*1?Hn;Dq>#+l_qU^fMaN^{lv zB?);df)F`<-V`15ZdMK>#aIPf$q}vzBu|Hm_ttE|osaSw*27M8N*Zubs2Q?b7$~Yj zD20s=Q<-Y6AVBHHQF+o3H#o|!rxamx#j-wX;eR;&5dpqTP0+GLyWKV@Bhi>f2iX?V zw5l{8f}(8r%#IC+Mi<6;ozdzny1-@Dz@hOKANWK&jbbyl&OV5uYu8@>I&J1>sUaZh z-jI(G_WCYnqVzesL%rrFrZyq>%6>1_Bk3$!WaMG$Kh{HaUsgoxUOvt*U$TELlY*t5 zLn9*t&vwXy9`=cf$XjpUbbCf5+x(!9Fnhd=F*hCGO50Jf6T|3K`&AclIWfcj8?XLan?tR!NdwOYuw3Hvq zo$%}rsopj9A5n*cx$%J%chQF?y_gsQ5BszVel?Hh6Qw-_%dDA5oE@f2xH5_|ECQ;b z@7)PJy5{4o#^Y+x7d)IDp>ONVDKXMVT6|y-XTPdFFC3E&ey~dD@s<7lG&r#~5mV>0 zf6Dizm6QGeMA4Q*${_)fyKan{0C^I2+;io5p2!2dbWHg-lqOJ`5{Z8n;OdSBib6u$VZua?0bp&fzR#T1`*`}N~iTvtf( zQNOiCmz*4>fA1AEe)0=Gu|3n7Ldb)QSXdia$V1^$CIy7iOX@x>OT-o&LtvM+ric@_ zZY3dtZ&0&}QdJ_n9lS$Lx`GNG1%?a+cUEugwx~@4WUrL294IL6&T4q^hS&Vw3Sk3K z*ij93%Ol#kr9vx{vd2`s@RBh5KW%Q&zMZSu`tcGn2E(4J_a+4K!*xn;@}drb{@DSU zH1cm$Drt2)1j=d{T=L(6P4LXVb`jQaU249()whvzp!5B<(AYt}Fo=}owxVw7UBE~V zl*E@B&sw{*c(HX4oka4n@nqfcyq+K*qJc#<;tA27gpwjgSh(3e#+3MwvSStCa{Mzz z#HwzeS}iQN1q)+YKvo0#67Um}kt{8)5@%Llp+voM%49uS6^~O{tqE={6HB6Ejf9UU zJLbZvG&}!O;=S^%U?WOm$^3j!!1IO9N}OP-52s?i zrAdL)%M$1^7Re&Eddhr8YTM&(Y-SZKaw#|a&H9CkMTyy;>{N|OU?b9#sp{ON2{yvT z;QS~N;kj0s-Dyfr_26M8q7T(uPr{uEQp$NA7M{G*iP}UNGnMKwkp&YO0#W5s zcP_uZORAd!i0IB56@8}xjpQc8@a8oOO?ygw3=6CY)9as=NrWSU@|e8$-Cocqf4g;+ zJ!bNJ`QrB6?9-O~@H>4k&`s}>;g>yEqAnQqjDk8ZUKiE zkHHzdzL9>YbdvDhD=N@5<0N`Ej;WOr=m+X#g;TO!uv~u*vd)+(E!q)UYtZw;` zse~lSqkL7cZ+HBrbWrwMdqw=19ub*)B;_XGc&CU)u@XiRLFf z+n+wF%ulKCOCF`uW#|Yq$=0S`cXq#SI^kF%G=)8?ZoF-29KkrdC<*-hbdfR-zHW6w z63p>un(k7$-_ zSREAE_^f7*MI`v6>G0H@ZzlXuQ!rH^Bhf4O^8&4}t54$2IXaLl;X@SsSMg~iyQqTC zAHcqz(MQmvR_Y68uvXKFMz=8R4`u}8hPGh((Um5cM;dt z%0=MA!0yCa(KDHpjJ{9(gjL{A>E_QGAE8J57D&%C?-KpVfe+t0b5)1dA35SB9}S(E z;R&96zdUg4ii_D2f5bxjv6HPwVAs#HanMeq66>{4{KjKOEEnb5sU&d{7-CD3I0}sU zH8N#D$ktfo+3<=&G~n6IvOw$P0CIX_?$BT04mk2v30-8AWnQwWn2Ss)?kHc4-l}XE zib74(H@L{nZpbP)bE~g9Et~QP82h7=RXJ>3CP4<|F##JCIWPZ^HgoW_bPeMb~h>C9UdtG=x!dnLX=dUy7 z#=M9CLxf&V&MZ=*wq&_y8Tgq zYBiO)C|9Cnt?h_WYST9`h(0yMRXK0Rc75w|5vtStq+L4Cf|>it&Rqo?}${q zYMK~!h1eSL8E@{sjTT0&%pN_dr`T&`VQ3-k&39hXUv@ce%<2|t+ zYFlm$Y-?ZbP#h%;GlsP7lfG7IQ0Y{S9NO*}bRNaEN!7zZI<9Eeb)?i;Q$fWGA}!mg z5PuBm-hF`f1AW%KzMT`t>;2Fe?xz|$xjLbngFsfMt2&<}NV({ywqM!J|5mT)>BQiu z*Gf*%!IEe;H8Zq35IOiYb>H6egyB=0iudxnI&WX0*_%fYi+aY7qDk$tl_BWzS>Gux zx{LZjv{G9C4-3IB_f~gLopTaN9p7*JcX3F;rlbgASZ}PYCsT9Qr?XHpE9lsAwr^)C znIFE9a5ciBp%C7*hzGcC-#+{99G=`sorQ@mC>~A27x+hjwj3A=*9<4*T;IGWg|6v| z+>#|p%vL$7N=jopM;YTc#QXWPl{Nj|0=4P(1G(bjH%A-HJ!tjLW|{A_lvI$WkX=I* z2@ES#P(IT`S_u)xEueq>>>dxN9bvOuRoT&0zKmzR?;E3EXJ^@HNeEEgrelrUv?gyD zMMti&3iT%u3(IQ9d83BaN|yj9`19j;lj98^A7);Uox=gGc|t+SZFn;Y7e6(f%Chat zOhnPAcOBL#PHQ1$a0p?rIa#ZL%It*+aP8X?QddDYCRWFHMkZG(?CEU>a?v+@&vI?D%^H0Xznq`aqDdq zYRhq#;g{{C?F~)|Wy@kSkIOt6tse8>I3#_DXP-zE%;~LqSnG0aPylv+mzu`f&5!DU z)v+1x$T6i>8u!^T|Ck+FE)pE#J!-Njl}&teG$^Tdg$@;ZoNm`l^6zmaW!j-9pQtM zGL2Aa|Me12OMuZ;`OmWxMFlk1PxllZO$qNTQq@P5zx!EjZjEfygFD`)f=~LbG#>0|xcclC z5@W4a7Vc7h{v|eyAc=8vBCL>ru*=`j*!kS)xmHwDRG0(2nvJmnFX4CVCK&B7iHOFO zgG}DbPHYbend?q3xrv#&FUYWzz*l$uH8&m}Nwg=3%q|#vQ1jQb8!=ES8NP|yJ<1MB zPMO04Q6)l3dQy?#Gkc0H*KA&N<#c=XS8(Y9PJzM zD9~NyKx{a+vaos4_4-ND=5^)!C}$AgRe>1zT`t(%#WQi+7#fo%L<}AUbM|9TK!tNk z5;oF#zd=r;VEtPSPmNHvxI9Gkwt3G*Q-Ng5@+~!{J<5vva&dNcgG7=_S93h0FpdLu zT3793&#Y}F>gV6uEiXz>+GT{m)m<7PstlA~St{hKmCuf}rJSQ7 zKQs_u%Mgt^TD@H!%*&^;f#Ev=NxoSzf%G2*>-v%)U=%dmO5Y7xN~NHNh1)uGBz6@j z@;f1$+~)=t^ar{(16JI&5_!5CM&wOgKi89%Oj(3$Ac1I3Z?{b_A2|yXUN+!}pm+DE z|GW=6ySjdPa8h(=!DmP^Y$`V)viaD^*Phu)B7UVgUU~sO>Qju62}c4C;o@-=$W_>e zbtYg1?n(nUD&Ge^R5J(txLzVNqt(R;g&R!HD#pl{ayGaeiOWV%LJ*9!=RNL0?SNgz zq1cTDciC+8ygI8vH*LlKL$undS zZYC3XJWHFKpAisOb*HtM*a#_NlJOtS6TW>q3++c66GlNd7Rl{-%8HCK{elI#E=>^1%=MFd?Ga<9mf^>=e|)sZkp=Jjy?- zgM$V?E~3TBKSiJTIeQl{lcf+gG)6iF>JgdyZUukGU+5ADiw1q zRh#K6->aZ&>w>8WB9P`iqViSjJ;F74)T76^6Kq8$!A#+twuwi~g-%EkUw(Fy5rl{y zJD_H@)XIg-uvJJj)EktIGdFz#^b8F9XaX#oeVBKTyXa|WOsl>s$&!U37sy4@CLZ~m z6&%P%;LFBVL9WQoZrin`v}#N2o?Nrz&GciRiiJiV0=e!RHqg@FlJEED5>sTa*dwit_)gouqr1Ps3l88!1N5t5^tvj<30lovQ5UwhIHhiq<01Lq=SJ_AYAj+Lk)gh*FY&k z21En>2`os%crYr?gdjKvff$@-?D^So*&bf^FcxAVtq{X)n(hJA(*359btyJk2e7}#qCVeT$sf$~hLq83NvJS<1^+>eRV@pzPQ zu@GZ1Vz#d!iwbdE2`w`Y^utW5d(jAV)FF>Ycc%iG+|>%zOv5kVuE#EKvE3Me#H5H@ zk3s`n_)*5)pviBDMiZf4eS=T;#4YIN`KVkq=C6Mz0U5z5dv}OE%2~Hn5LU_(A_ifM z0QiO-j@UR_j*fF&%I>_WBaDKFnsu@U_hSlMJr#+mP0SeA9|6Yb+ZXq-<9WFlR$n(r zZ5x=F>1a#BFee3>Pg;X#l)O-y7bLf0=aMdFz0t?^R|mDFqOFEy?tSAN%zf|j^P7DDw-0l zE;ff@AZWLqaC3-r_0!d_D<2xR(nC;Tmy!{7b>Cnh$SJq%ZS^gW1pQF=u znXiFCHBiucUncyG#Lz*sYX z$N;2xaKjod@2P&nly-iV!LgXnoU9Bjjqw(Yo^R0K`6Z)HbZ4N; zYB$kEY3GjK+%QWnB8Vbd75IFN=P~P-^58~!yR+9zY@bLx&t$>S5H^3~J$trS5+)Ml zeW)s)RGIAaG>9$oCi$$02ue8P4dldvc$-@FbZNhlxRUI5H(g#)HMtLG!N(8HyAnNL zfB=mIY29q~yOAV8=d;!%ff1-Nx3{YFCHNltJkDfJheyRL()rHHp> zQTgkNTy7+_n+f!PTrf*X=!-yt%`wi=RO?zhjt%jOqByU8$*;gp$H<~@ zC}S=(-^ItI#Y6GNNzbap!$AD{mR+(M$EhohE8peiedX`n4UFiKZ9_O$Jkwnli6NHd zPQXvKxE`z1)boY8LN)3+@9w@5up!ES5h`tGhw-(YzmBPhnkd-Togzhe*;uhp!r9FM zZLb@Qj|zDe2bVklEzvD_)`I8iOA9a;XpJbB|iZ<99^+j?$zy(7Hd#g|_3{n(;}_^y7En_9J3E zq|FvK(Xja%Y?p~|<5^qsjmBTeW@o)7@YUq&(wQq^hB5YXH^i>C$Zvf&P8xYT!c^|u z7Kq9#CL4>UE5;&uMo9+6Eq84napy=8Jqt|vD6E@`NRU--7%91)rA`oBC0`&hTBK@N zu6Pjj?8^q0d8=CGdr;BHQbeZ}CAdaF@I4siLo zk4`|}LE?2xK%b)Zg&+^3}m4C@3;k|itM29N>Ems2-{E0{R+W`4d zItyJ|mhmK#Iw5w2C?hnY^P*u>N37_xe%&ka?yYO4AVdYg%O=Pj&mrdIFNs(6Y*tcK z-G@;h=J;N=Z~7QSkj6{4lXzaEfIXb)KAo6bHL5nO+0;(&hpGoy3Gjm!ybSEhT3fDCaejmf&rK3C05mdOG)X_fKW{jR2T}3T|;;KXcFbBM|+0 z)gNZtw&FN>P+uL1Qsh(^?l!o-ml$vO%KjBzCSMVymtW?1bUP+jqjBqN%U6$_h(Wh| z+n%3PuVJq_6War7Ht{-eRkIKx#cYIDq{mMfM?ED3wPRS*D%b28##^Hm?SE3WG!}{o zaw}2EE;YUvUJdW_p+9x?I8zHU&&9_V2XJkMCKj%XEuk&YA%0YLb`s>#Q0Jv{Zb%u5 z%0brnV0=wQI4zkJf2kR1+kZEe$-%x;mA&w?cR3qkO+j~~T?8^ErtV@PJ)Fb7VIhtMLQju9ue!7`&o?z3d7eQM{Z)Au7R@F)Gz}LI zzS^J|@rNzu?ch;*yP4bIU?nmZr&0IQdL+;TE*?g)98neogF1|c-&$4>U*?Xjm~zAh zHtM6A2VquV!jnoZ@2SlMED7(NqQmGZ<89^Wqr>GG!=(Z7gG4~q_i5m>7=Y@bU?ZUF zYM!XnbUU7>s{BiSX4Ov^l|>f5&o*ADlA}Ls>Q3jFjx0CYKA=voK=+{tsC@Kq1j6`g zay9fhxoyn*^B#$f{;;T1@lTTZg#8uLc3pwsGsj(ZN;NkT)!R8{LJuC^TGytaQZ8k$ z_j$V?3Rqt$1JRYPlsFY_{AV?_`;rTE)OmTmWr@^^x7A`7)F}8*U8}ASx#*7L03O%j z9P>1}Gb*zA7+@+GM1Odi!t}U1X;n`jDAb?0?z)tw#F(*^7~l{j8?SM(Bo{Q3Ft+s| z_J`a25F99cczBAbDDuR353aC5a!d|>k8^VVvPcM2zY%w}Vhuaq;0KM_Q4fDn68KHt zg-&#UxQ4C_=vW$9@I7PejcAr6=M+;b+C*7{ft%HG3`@xxXbvw3L*r!niMt70BaI9y zM3WUK=p8?K)qt-#aZ+F$huj|Ag;9iXVa8v+8&*PCTC3|(Z~j_Lwp1a{?>!=Fx8?=} zm{86fFqA4!fjK?bOj&aGp=Tq65n_z!3rgm;^-uKW(__Tmen(0-HL3g6$d3J_lGnT8 zSEU;o+-&J`lGV&@d(0VPz~#hv}=3+M8o-t|ocpi6ijpMF@E>j-8GOY;amDoc{V763 zvtqpD7n&-noM-M$Ex{nd8#rE{v&O1${MBi4r4M-2z{JSPGP)*_{bJ!-iLPWB8KMMy zJXCtTXyITejiRJ4p3vF8&>=bg2B2;)2hzZKSQeNN$0M=)e4SM?1nDzAtr!_0RD=md z=Mvn*3<}aW%iQQaS*mK>?wSf;%WG${DbS@=gzX`tTfak}qd;+mNYtReR||%&lV*Uj zB0J$d-%uAS@;Jh#c>77wE^sVGARpp^7h1X!)yDd!JV$|~&@K!vdbUw>6CMX&fv*NM zf~F45@A{CW#(utV+=OVJiKeQoP0TS3sjyqq7Qvw6)0>sd#E)m~f;AH;@_nd^3oMq2 zdoHE5+!nY)Y6bO<)f!2S76VKim^X0(J$LXej$%XCW|mBO_8J;UZPI2$G+zIB;EQ{J z&w(xMD)N?(4GBagB7N@S@6DJx_MY)rG9u>H((b0r;FblFfX+Y>Y8XWmHJ>7W?e{?t z9>GBvGOBcrI0}rjwoat&6n4^&x3Dj5p$e7RC^)$^gE{FZ{h%72XC|T?OaQ=M@Flr^ z?EoN^rkqxBX>yAm)eUP;#t8+868UDE0m}~LV~HwhDb#QX-o(`dr7~zz>Mwd&hgpa* z`D^!ib+%hxMN1^DN}?D}Cr(e=yO@*E=el%s-5@uK{1Uxqm2ffDu#a&m0`i@N4NNFuduzMN|(53TWU^?T)Zr&o(N= zaLkjojH*AqmYMBR(lmXG)|br4>(L>~4BO10-H$F;;+ujXMZhj*ixm5LzP>g(R2Rbz z1G_>X1CCG{MQXpD4b3|6%Zgs9ej_gE)hCAedUyGm9@mbBAR2@1X8KL6EHX` zw~Nts@43amcomUwLys7WJ%5|%6fajW(eg?~8J^67L@YbLgUZQrk9goJ0oGMR>#NQ3 z$MSv*y1@i`Wf@?z`+ywnsG-kM7Jv7e zDzI_*Wjjhf@?2y|=~D?I#UnTmnJyw-RS;zmv@dxqV^h1%x0M|%tPM*cMzqc{=m$)! z!XveMd%jezo{(%ujG3E-*=cW2AhA-RzC=$T;>cSB$!HwOqADkBMzduzJWD#JE$#&c z1wUo192h+SXAv$ru3w2!DJ`Q@0I(^GNP8uGd|sKS$bdKkdS?!V*F+giXiY^(q}OiU zL*XYaqFL`--%OnB(t22Jrt+zFBl{F%|UTzmB4kMGF7o8Hy4Y`qq zfP#v`8p$3yW434)u6sg!?)UZ83!N?I}Z_}6K zBO~}>T#wxiewtQ1>M9}B$S=1pi}2C3LAR*coe6Dnm7N&EqK%wM-ja1dFK-?S*--XC zPb1XV>8(x~lbRdSh%@ZcrIA!eT_hB*q{>UCHxQ{lx91GFkT=p3=yH1(*wQQ0{p2Mk z-D*a<*9_RqmkLobTmnk37r{yNoBcOco3hBnT!Y>Ul@Vd+a;;=xkZRt8#J?4XMh0{ZgO&$ccAs={aZvZ_97#`b8%m$%&^hrYb2D?Yu=+=B&W?@`&y$&)&*F|i5x);3 zsB#4_`hUs$@tkSc_b-`$xP<>oiSdUF`yV<>Tt&}79`ron9Sitkwf|2Yj{hMY&i^4D zuKyt&?*Abjp8r;748MZ?UorM;*#8=1{~WI8>r2_+hWXFfuVMZz$o?budvN}>x_^%9 z|0AaVO?Cf~`*TqLn`q?yqnG~gQ4KoiJSBc<=C6N_f1|_q4;?Z>!n@~RQB6WZ@(g-t zYU1((hC{t{93&Jr^ncEI|04O1(ggbT=g;12zmvb`)cGd|0nr3neevY~_ZfD6*Z4he z%^w;aFUB2z&0_OA`+H)BKUka>-?=}r|J%y%cmCJ$zdSyEm0vC)|0+!&53-l@{||Wx zepmTD55XTQ)qkk`AG^EX>EDgg|Dfe5|Ia!6ll~8__}!2E4+W|hhw?w!8vf=^{`;By zZqoaQjxPOw)cFtR^t&PLA6l&pf6@An{qnm#;~xrNS^tf~e>jg{)W1gfmlff^N)t$$ z{jVy2HzxeOe||S6{6j1BMe8@4!r$TF4Qc*>M+N`0J%U49Nb80D?Rxn;{O9Y|U*VV+__wL~clh@y_>Y?B{tmPM_cWpZ->T;L?`iYD z)13c3UHNyK>%XTj{!VlM_q0I3-`dUdJN@VR@UH_F@ + + +ShLDtdα diff --git a/src/Mod/CAM/Tools/Shape/thread-mill.svg b/src/Mod/CAM/Tools/Shape/thread-mill.svg index 904d1f3aa5..ae1e681f23 100644 --- a/src/Mod/CAM/Tools/Shape/thread-mill.svg +++ b/src/Mod/CAM/Tools/Shape/thread-mill.svg @@ -7,7 +7,7 @@ width="210mm" sodipodi:docname="thread-mill.svg" xml:space="preserve" - inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -27,13 +27,13 @@ inkscape:document-units="mm" showgrid="false" inkscape:zoom="0.71628115" - inkscape:cx="407.66115" - inkscape:cy="655.46888" - inkscape:window-width="1838" - inkscape:window-height="1205" - inkscape:window-x="2002" - inkscape:window-y="638" - inkscape:window-maximized="0" + inkscape:cx="256.88237" + inkscape:cy="573.09898" + inkscape:window-width="1632" + inkscape:window-height="1013" + inkscape:window-x="1728" + inkscape:window-y="1050" + inkscape:window-maximized="1" inkscape:current-layer="svg8" />DDNn + style="fill:none;stroke:#000000;stroke-width:0.753157;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> diff --git a/src/Mod/CAM/Tools/Shape/v-bit.svg b/src/Mod/CAM/Tools/Shape/v-bit.svg index e6e327b813..a9517165dd 100644 --- a/src/Mod/CAM/Tools/Shape/v-bit.svg +++ b/src/Mod/CAM/Tools/Shape/v-bit.svg @@ -7,7 +7,7 @@ width="210mm" sodipodi:docname="v-bit.svg" xml:space="preserve" - inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:version="1.2.2 (b0a8486541, 2022-12-01)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:xlink="http://www.w3.org/1999/xlink" @@ -26,14 +26,14 @@ inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="0.7127433" - inkscape:cx="623.64669" - inkscape:cy="637.67699" - inkscape:window-width="2860" - inkscape:window-height="1491" - inkscape:window-x="536" - inkscape:window-y="363" - inkscape:window-maximized="0" + inkscape:zoom="0.71907494" + inkscape:cx="333.76215" + inkscape:cy="581.99776" + inkscape:window-width="1632" + inkscape:window-height="1013" + inkscape:window-x="1728" + inkscape:window-y="1050" + inkscape:window-maximized="1" inkscape:current-layer="svg8" />DDddhh