From 3707871f0b4797e1a70203ce0833fdfbc8b2b174 Mon Sep 17 00:00:00 2001
From: kaleidoscopeit
Date: Fri, 27 Jul 2018 15:51:56 +0200
Subject: [PATCH 001/390] - Fixed extruder behaviour to force filament diameter
to 1.75
---
resources/definitions/deltacomb.def.json | 4 +++-
resources/extruders/deltacomb_extruder_0.def.json | 3 +--
2 files changed, 4 insertions(+), 3 deletions(-)
mode change 100644 => 100755 resources/definitions/deltacomb.def.json
mode change 100644 => 100755 resources/extruders/deltacomb_extruder_0.def.json
diff --git a/resources/definitions/deltacomb.def.json b/resources/definitions/deltacomb.def.json
old mode 100644
new mode 100755
index a4b2d47a7b..0c4cec3674
--- a/resources/definitions/deltacomb.def.json
+++ b/resources/definitions/deltacomb.def.json
@@ -33,6 +33,7 @@
"material_final_print_temperature": { "value": "material_print_temperature - 5" },
"material_initial_print_temperature": { "value": "material_print_temperature" },
"material_print_temperature_layer_0": { "value": "material_print_temperature + 5" },
+ "material_diameter": { "default_value": 1.75 },
"travel_avoid_distance": { "default_value": 1, "value": "1" },
"speed_print" : { "default_value": 70 },
"speed_travel": { "value": "150.0" },
@@ -55,6 +56,7 @@
"support_use_towers" : { "default_value": false },
"jerk_wall_0" : { "value": "30" },
"jerk_travel" : { "default_value": 20 },
- "acceleration_travel" : { "value": 10000 }
+ "acceleration_travel" : { "value": 10000 },
+ "machine_max_feedrate_z" : { "default_value": 150 }
}
}
diff --git a/resources/extruders/deltacomb_extruder_0.def.json b/resources/extruders/deltacomb_extruder_0.def.json
old mode 100644
new mode 100755
index 046becfd82..35ed340bc0
--- a/resources/extruders/deltacomb_extruder_0.def.json
+++ b/resources/extruders/deltacomb_extruder_0.def.json
@@ -10,7 +10,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
- "machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 1.75 }
+ "machine_nozzle_size": { "default_value": 0.4 }
}
}
From 3ac5342dfc0d37e7462ed77e9d9b7321ec769ef3 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 1 Aug 2018 15:51:10 +0200
Subject: [PATCH 002/390] Separate firmware updater from USBPrinterOutputDevice
---
plugins/USBPrinting/AvrFirmwareUpdater.py | 122 ++++++++++++++++++
plugins/USBPrinting/USBPrinterOutputDevice.py | 118 ++---------------
2 files changed, 130 insertions(+), 110 deletions(-)
create mode 100644 plugins/USBPrinting/AvrFirmwareUpdater.py
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
new file mode 100644
index 0000000000..5c2b8dc19e
--- /dev/null
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -0,0 +1,122 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
+
+from cura.PrinterOutputDevice import PrinterOutputDevice
+
+from .avr_isp import stk500v2, intelHex
+
+from enum import IntEnum
+
+@signalemitter
+class AvrFirmwareUpdater(QObject):
+ firmwareProgressChanged = pyqtSignal()
+ firmwareUpdateStateChanged = pyqtSignal()
+
+ def __init__(self, output_device: PrinterOutputDevice) -> None:
+ self._output_device = output_device
+
+ self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True)
+
+ self._firmware_view = None
+ self._firmware_location = None
+ self._firmware_progress = 0
+ self._firmware_update_state = FirmwareUpdateState.idle
+
+ def updateFirmware(self, file):
+ # the file path could be url-encoded.
+ if file.startswith("file://"):
+ self._firmware_location = QUrl(file).toLocalFile()
+ else:
+ self._firmware_location = file
+ self.showFirmwareInterface()
+ self.setFirmwareUpdateState(FirmwareUpdateState.updating)
+ self._update_firmware_thread.start()
+
+ def _updateFirmware(self):
+ # Ensure that other connections are closed.
+ if self._connection_state != ConnectionState.closed:
+ self.close()
+
+ try:
+ hex_file = intelHex.readHex(self._firmware_location)
+ assert len(hex_file) > 0
+ except (FileNotFoundError, AssertionError):
+ Logger.log("e", "Unable to read provided hex file. Could not update firmware.")
+ self.setFirmwareUpdateState(FirmwareUpdateState.firmware_not_found_error)
+ return
+
+ programmer = stk500v2.Stk500v2()
+ programmer.progress_callback = self._onFirmwareProgress
+
+ try:
+ programmer.connect(self._serial_port)
+ except:
+ programmer.close()
+ Logger.logException("e", "Failed to update firmware")
+ self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
+ return
+
+ # Give programmer some time to connect. Might need more in some cases, but this worked in all tested cases.
+ sleep(1)
+ if not programmer.isConnected():
+ Logger.log("e", "Unable to connect with serial. Could not update firmware")
+ self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
+ try:
+ programmer.programChip(hex_file)
+ except SerialException:
+ self.setFirmwareUpdateState(FirmwareUpdateState.io_error)
+ return
+ except:
+ self.setFirmwareUpdateState(FirmwareUpdateState.unknown_error)
+ return
+
+ programmer.close()
+
+ # Clean up for next attempt.
+ self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
+ self._firmware_location = ""
+ self._onFirmwareProgress(100)
+ self.setFirmwareUpdateState(FirmwareUpdateState.completed)
+
+ # Try to re-connect with the machine again, which must be done on the Qt thread, so we use call later.
+ CuraApplication.getInstance().callLater(self.connect)
+
+ ## Show firmware interface.
+ # This will create the view if its not already created.
+ def showFirmwareInterface(self):
+ if self._firmware_view is None:
+ path = os.path.join(PluginRegistry.getInstance().getPluginPath("USBPrinting"), "FirmwareUpdateWindow.qml")
+ self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
+
+ self._firmware_view.show()
+
+ @pyqtProperty(float, notify = firmwareProgressChanged)
+ def firmwareProgress(self):
+ return self._firmware_progress
+
+ @pyqtProperty(int, notify=firmwareUpdateStateChanged)
+ def firmwareUpdateState(self):
+ return self._firmware_update_state
+
+ def setFirmwareUpdateState(self, state):
+ if self._firmware_update_state != state:
+ self._firmware_update_state = state
+ self.firmwareUpdateStateChanged.emit()
+
+ # Callback function for firmware update progress.
+ def _onFirmwareProgress(self, progress, max_progress = 100):
+ self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100
+ self.firmwareProgressChanged.emit()
+
+
+class FirmwareUpdateState(IntEnum):
+ idle = 0
+ updating = 1
+ completed = 2
+ unknown_error = 3
+ communication_error = 4
+ io_error = 5
+ firmware_not_found_error = 6
+
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 45b566fcab..bc2350e50f 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -13,15 +13,14 @@ from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
from cura.PrinterOutput.GenericOutputController import GenericOutputController
from .AutoDetectBaudJob import AutoDetectBaudJob
-from .avr_isp import stk500v2, intelHex
+from .AvrFirmwareUpdater import AvrFirmwareUpdater
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QUrl
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty
from serial import Serial, SerialException, SerialTimeoutException
from threading import Thread, Event
from time import time, sleep
from queue import Queue
-from enum import IntEnum
from typing import Union, Optional, List, cast
import re
@@ -32,9 +31,6 @@ catalog = i18nCatalog("cura")
class USBPrinterOutputDevice(PrinterOutputDevice):
- firmwareProgressChanged = pyqtSignal()
- firmwareUpdateStateChanged = pyqtSignal()
-
def __init__(self, serial_port: str, baud_rate: Optional[int] = None) -> None:
super().__init__(serial_port)
self.setName(catalog.i18nc("@item:inmenu", "USB printing"))
@@ -61,8 +57,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
# Instead of using a timer, we really need the update to be as a thread, as reading from serial can block.
self._update_thread = Thread(target=self._update, daemon = True)
- self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True)
-
self._last_temperature_request = None # type: Optional[int]
self._is_printing = False # A print is being sent.
@@ -75,11 +69,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._paused = False
- self._firmware_view = None
- self._firmware_location = None
- self._firmware_progress = 0
- self._firmware_update_state = FirmwareUpdateState.idle
-
self.setConnectionText(catalog.i18nc("@info:status", "Connected via USB"))
# Queue for commands that need to be sent.
@@ -88,6 +77,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._command_received = Event()
self._command_received.set()
+ self._firmware_updater = AvrFirmwareUpdater(self)
+
CuraApplication.getInstance().getOnExitCallbackManager().addCallback(self._checkActivePrintingUponAppExit)
# This is a callback function that checks if there is any printing in progress via USB when the application tries
@@ -107,6 +98,10 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
application = CuraApplication.getInstance()
application.triggerNextExitCheck()
+ @pyqtSlot(str)
+ def updateFirmware(self, file):
+ self._firmware_updater.updateFirmware(file)
+
## Reset USB device settings
#
def resetDeviceSettings(self):
@@ -135,93 +130,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._printGCode(gcode_list)
- ## Show firmware interface.
- # This will create the view if its not already created.
- def showFirmwareInterface(self):
- if self._firmware_view is None:
- path = os.path.join(PluginRegistry.getInstance().getPluginPath("USBPrinting"), "FirmwareUpdateWindow.qml")
- self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
-
- self._firmware_view.show()
-
- @pyqtSlot(str)
- def updateFirmware(self, file):
- # the file path could be url-encoded.
- if file.startswith("file://"):
- self._firmware_location = QUrl(file).toLocalFile()
- else:
- self._firmware_location = file
- self.showFirmwareInterface()
- self.setFirmwareUpdateState(FirmwareUpdateState.updating)
- self._update_firmware_thread.start()
-
- def _updateFirmware(self):
- # Ensure that other connections are closed.
- if self._connection_state != ConnectionState.closed:
- self.close()
-
- try:
- hex_file = intelHex.readHex(self._firmware_location)
- assert len(hex_file) > 0
- except (FileNotFoundError, AssertionError):
- Logger.log("e", "Unable to read provided hex file. Could not update firmware.")
- self.setFirmwareUpdateState(FirmwareUpdateState.firmware_not_found_error)
- return
-
- programmer = stk500v2.Stk500v2()
- programmer.progress_callback = self._onFirmwareProgress
-
- try:
- programmer.connect(self._serial_port)
- except:
- programmer.close()
- Logger.logException("e", "Failed to update firmware")
- self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
- return
-
- # Give programmer some time to connect. Might need more in some cases, but this worked in all tested cases.
- sleep(1)
- if not programmer.isConnected():
- Logger.log("e", "Unable to connect with serial. Could not update firmware")
- self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
- try:
- programmer.programChip(hex_file)
- except SerialException:
- self.setFirmwareUpdateState(FirmwareUpdateState.io_error)
- return
- except:
- self.setFirmwareUpdateState(FirmwareUpdateState.unknown_error)
- return
-
- programmer.close()
-
- # Clean up for next attempt.
- self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
- self._firmware_location = ""
- self._onFirmwareProgress(100)
- self.setFirmwareUpdateState(FirmwareUpdateState.completed)
-
- # Try to re-connect with the machine again, which must be done on the Qt thread, so we use call later.
- CuraApplication.getInstance().callLater(self.connect)
-
- @pyqtProperty(float, notify = firmwareProgressChanged)
- def firmwareProgress(self):
- return self._firmware_progress
-
- @pyqtProperty(int, notify=firmwareUpdateStateChanged)
- def firmwareUpdateState(self):
- return self._firmware_update_state
-
- def setFirmwareUpdateState(self, state):
- if self._firmware_update_state != state:
- self._firmware_update_state = state
- self.firmwareUpdateStateChanged.emit()
-
- # Callback function for firmware update progress.
- def _onFirmwareProgress(self, progress, max_progress = 100):
- self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100
- self.firmwareProgressChanged.emit()
-
## Start a print based on a g-code.
# \param gcode_list List with gcode (strings).
def _printGCode(self, gcode_list: List[str]):
@@ -456,13 +364,3 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
print_job.updateTimeTotal(estimated_time)
self._gcode_position += 1
-
-
-class FirmwareUpdateState(IntEnum):
- idle = 0
- updating = 1
- completed = 2
- unknown_error = 3
- communication_error = 4
- io_error = 5
- firmware_not_found_error = 6
From 339987be9d3a7cf80d7932c49cd418009e9182df Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Thu, 2 Aug 2018 11:50:28 +0200
Subject: [PATCH 003/390] Move hardcoded firmware-file table to definitions
---
.../USBPrinterOutputDeviceManager.py | 44 ++++---------------
resources/definitions/bq_hephestos.def.json | 3 +-
resources/definitions/bq_witbox.def.json | 3 +-
resources/definitions/ultimaker2.def.json | 3 +-
.../definitions/ultimaker2_extended.def.json | 3 +-
.../ultimaker2_extended_plus.def.json | 3 +-
resources/definitions/ultimaker2_go.def.json | 3 +-
.../definitions/ultimaker2_plus.def.json | 3 +-
.../definitions/ultimaker_original.def.json | 4 +-
.../ultimaker_original_dual.def.json | 2 +
.../ultimaker_original_plus.def.json | 3 +-
11 files changed, 30 insertions(+), 44 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
index 2ee85187ee..f444e72908 100644
--- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
+++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
@@ -93,57 +93,31 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin):
global_container_stack = self._application.getGlobalContainerStack()
if not global_container_stack:
Logger.log("e", "There is no global container stack. Can not update firmware.")
- self._firmware_view.close()
return ""
# The bottom of the containerstack is the machine definition
machine_id = global_container_stack.getBottom().id
-
machine_has_heated_bed = global_container_stack.getProperty("machine_heated_bed", "value")
+ baudrate = 250000
if platform.system() == "Linux":
+ # Linux prefers a baudrate of 115200 here because older versions of
+ # pySerial did not support a baudrate of 250000
baudrate = 115200
- else:
- baudrate = 250000
- # NOTE: The keyword used here is the id of the machine. You can find the id of your machine in the *.json file, eg.
- # https://github.com/Ultimaker/Cura/blob/master/resources/machines/ultimaker_original.json#L2
- # The *.hex files are stored at a seperate repository:
- # https://github.com/Ultimaker/cura-binary-data/tree/master/cura/resources/firmware
- machine_without_extras = {"bq_witbox" : "MarlinWitbox.hex",
- "bq_hephestos_2" : "MarlinHephestos2.hex",
- "ultimaker_original" : "MarlinUltimaker-{baudrate}.hex",
- "ultimaker_original_plus" : "MarlinUltimaker-UMOP-{baudrate}.hex",
- "ultimaker_original_dual" : "MarlinUltimaker-{baudrate}-dual.hex",
- "ultimaker2" : "MarlinUltimaker2.hex",
- "ultimaker2_go" : "MarlinUltimaker2go.hex",
- "ultimaker2_plus" : "MarlinUltimaker2plus.hex",
- "ultimaker2_extended" : "MarlinUltimaker2extended.hex",
- "ultimaker2_extended_plus" : "MarlinUltimaker2extended-plus.hex",
- }
- machine_with_heated_bed = {"ultimaker_original" : "MarlinUltimaker-HBK-{baudrate}.hex",
- "ultimaker_original_dual" : "MarlinUltimaker-HBK-{baudrate}-dual.hex",
- }
- ##TODO: Add check for multiple extruders
- hex_file = None
- if machine_id in machine_without_extras.keys(): # The machine needs to be defined here!
- if machine_id in machine_with_heated_bed.keys() and machine_has_heated_bed:
- Logger.log("d", "Choosing firmware with heated bed enabled for machine %s.", machine_id)
- hex_file = machine_with_heated_bed[machine_id] # Return firmware with heated bed enabled
- else:
- Logger.log("d", "Choosing basic firmware for machine %s.", machine_id)
- hex_file = machine_without_extras[machine_id] # Return "basic" firmware
- else:
- Logger.log("w", "There is no firmware for machine %s.", machine_id)
+ # If a firmware file is available, it should be specified in the definition for the printer
+ hex_file = global_container_stack.getMetaDataEntry("firmware_file", None)
+ if machine_has_heated_bed:
+ hex_file = global_container_stack.getMetaDataEntry("firmware_hbk_file", hex_file)
if hex_file:
try:
return Resources.getPath(CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
except FileNotFoundError:
- Logger.log("w", "Could not find any firmware for machine %s.", machine_id)
+ Logger.log("w", "Firmware file %s not found.", hex_file)
return ""
else:
- Logger.log("w", "Could not find any firmware for machine %s.", machine_id)
+ Logger.log("w", "There is no firmware for machine %s.", machine_id)
return ""
## Helper to identify serial ports (and scan for them)
diff --git a/resources/definitions/bq_hephestos.def.json b/resources/definitions/bq_hephestos.def.json
index 8dc67a8cad..be024cd6fa 100644
--- a/resources/definitions/bq_hephestos.def.json
+++ b/resources/definitions/bq_hephestos.def.json
@@ -12,7 +12,8 @@
"machine_extruder_trains":
{
"0": "bq_hephestos_extruder_0"
- }
+ },
+ "firmware_file": "MarlinHephestos2.hex"
},
"overrides": {
diff --git a/resources/definitions/bq_witbox.def.json b/resources/definitions/bq_witbox.def.json
index 0ae1c5e339..b96da6179c 100644
--- a/resources/definitions/bq_witbox.def.json
+++ b/resources/definitions/bq_witbox.def.json
@@ -12,7 +12,8 @@
"machine_extruder_trains":
{
"0": "bq_witbox_extruder_0"
- }
+ },
+ "firmware_file": "MarlinWitbox.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json
index aa684946c2..ca7a784bfc 100644
--- a/resources/definitions/ultimaker2.def.json
+++ b/resources/definitions/ultimaker2.def.json
@@ -20,7 +20,8 @@
"machine_extruder_trains":
{
"0": "ultimaker2_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker2.hex"
},
"overrides": {
"machine_name": { "default_value": "Ultimaker 2" },
diff --git a/resources/definitions/ultimaker2_extended.def.json b/resources/definitions/ultimaker2_extended.def.json
index af169c94fb..39a1ca37b3 100644
--- a/resources/definitions/ultimaker2_extended.def.json
+++ b/resources/definitions/ultimaker2_extended.def.json
@@ -14,7 +14,8 @@
"machine_extruder_trains":
{
"0": "ultimaker2_extended_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker2extended.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker2_extended_plus.def.json b/resources/definitions/ultimaker2_extended_plus.def.json
index f3a8bfcf9f..c296ecd43e 100644
--- a/resources/definitions/ultimaker2_extended_plus.def.json
+++ b/resources/definitions/ultimaker2_extended_plus.def.json
@@ -14,7 +14,8 @@
"machine_extruder_trains":
{
"0": "ultimaker2_extended_plus_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker2extended-plus.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json
index c66fb38fc0..5301fd7db9 100644
--- a/resources/definitions/ultimaker2_go.def.json
+++ b/resources/definitions/ultimaker2_go.def.json
@@ -17,7 +17,8 @@
"machine_extruder_trains":
{
"0": "ultimaker2_go_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker2go.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json
index bc4d3a6230..45019789bf 100644
--- a/resources/definitions/ultimaker2_plus.def.json
+++ b/resources/definitions/ultimaker2_plus.def.json
@@ -19,7 +19,8 @@
"machine_extruder_trains":
{
"0": "ultimaker2_plus_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker2plus.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json
index c961423504..bb6a64d8dc 100644
--- a/resources/definitions/ultimaker_original.def.json
+++ b/resources/definitions/ultimaker_original.def.json
@@ -18,7 +18,9 @@
"machine_extruder_trains":
{
"0": "ultimaker_original_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker-{baudrate}.hex",
+ "firmware_hbk_file": "MarlinUltimaker-HKB-{baudrate}.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker_original_dual.def.json b/resources/definitions/ultimaker_original_dual.def.json
index 55eddba85f..c6002ef396 100644
--- a/resources/definitions/ultimaker_original_dual.def.json
+++ b/resources/definitions/ultimaker_original_dual.def.json
@@ -19,6 +19,8 @@
"0": "ultimaker_original_dual_1st",
"1": "ultimaker_original_dual_2nd"
},
+ "firmware_file": "MarlinUltimaker-{baudrate}-dual.hex",
+ "firmware_hbk_file": "MarlinUltimaker-HKB-{baudrate}-dual.hex",
"first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"],
"supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"]
},
diff --git a/resources/definitions/ultimaker_original_plus.def.json b/resources/definitions/ultimaker_original_plus.def.json
index 71aa53b2bf..46d95f8028 100644
--- a/resources/definitions/ultimaker_original_plus.def.json
+++ b/resources/definitions/ultimaker_original_plus.def.json
@@ -16,7 +16,8 @@
"machine_extruder_trains":
{
"0": "ultimaker_original_plus_extruder_0"
- }
+ },
+ "firmware_file": "MarlinUltimaker-UMOP-{baudrate}.hex"
},
"overrides": {
From bc0a53c15a51c3c4f6476f41c053cccd84bef1b8 Mon Sep 17 00:00:00 2001
From: Tim Kuipers
Date: Mon, 6 Aug 2018 10:38:21 +0200
Subject: [PATCH 004/390] JSON fix: only enable skin settings when there is
skin
---
resources/definitions/fdmprinter.def.json | 29 ++++++++++++++++-------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index b767aac7b9..4b04e520b9 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -831,6 +831,7 @@
"default_value": 0.4,
"type": "float",
"value": "line_width",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1177,6 +1178,7 @@
"zigzag": "Zig Zag"
},
"default_value": "lines",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1192,6 +1194,7 @@
"zigzag": "Zig Zag"
},
"default_value": "lines",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"value": "top_bottom_pattern",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
@@ -1202,7 +1205,7 @@
"description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality.",
"type": "bool",
"default_value": false,
- "enabled": "top_bottom_pattern == 'concentric'",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric'",
"limit_to_extruder": "infill_extruder_nr",
"settable_per_mesh": true
},
@@ -1212,7 +1215,7 @@
"description": "A list of integer line directions to use when the top/bottom layers use the lines or zig zag pattern. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees).",
"type": "[int]",
"default_value": "[ ]",
- "enabled": "top_bottom_pattern != 'concentric'",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1439,6 +1442,7 @@
"description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.",
"type": "bool",
"default_value": true,
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1450,6 +1454,7 @@
"minimum_value": "0",
"maximum_value_warning": "10",
"type": "int",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1778,7 +1783,7 @@
"minimum_value_warning": "-50",
"maximum_value_warning": "100",
"value": "5 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "top_bottom_pattern != 'concentric'",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true,
"children":
@@ -1793,7 +1798,7 @@
"minimum_value_warning": "-0.5 * machine_nozzle_size",
"maximum_value_warning": "machine_nozzle_size",
"value": "0.5 * (skin_line_width + (wall_line_width_x if wall_line_count > 1 else wall_line_width_0)) * skin_overlap / 100 if top_bottom_pattern != 'concentric' else 0",
- "enabled": "top_bottom_pattern != 'concentric'",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
"settable_per_mesh": true
}
}
@@ -1906,6 +1911,7 @@
"default_value": 0,
"value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
"minimum_value": "0",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true,
"children":
@@ -1919,6 +1925,7 @@
"default_value": 0,
"value": "skin_preshrink",
"minimum_value": "0",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1931,6 +1938,7 @@
"default_value": 0,
"value": "skin_preshrink",
"minimum_value": "0",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
}
@@ -1946,6 +1954,7 @@
"value": "wall_line_width_0 + (wall_line_count - 1) * wall_line_width_x",
"minimum_value": "-skin_preshrink",
"limit_to_extruder": "top_bottom_extruder_nr",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"settable_per_mesh": true,
"children":
{
@@ -1958,6 +1967,7 @@
"default_value": 2.8,
"value": "expand_skins_expand_distance",
"minimum_value": "-top_skin_preshrink",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -1970,6 +1980,7 @@
"default_value": 2.8,
"value": "expand_skins_expand_distance",
"minimum_value": "-bottom_skin_preshrink",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
}
@@ -1985,7 +1996,7 @@
"minimum_value_warning": "2",
"maximum_value": "90",
"default_value": 90,
- "enabled": "top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true,
"children":
@@ -1999,7 +2010,7 @@
"default_value": 2.24,
"value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))",
"minimum_value": "0",
- "enabled": "top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and (top_skin_expand_distance > 0 or bottom_skin_expand_distance > 0)",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
}
@@ -2548,6 +2559,7 @@
"default_value": 30,
"value": "speed_print / 2",
"limit_to_extruder": "top_bottom_extruder_nr",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"settable_per_mesh": true
},
"speed_support":
@@ -2872,6 +2884,7 @@
"default_value": 3000,
"value": "acceleration_topbottom",
"enabled": "resolveOrValue('acceleration_enabled') and roofing_layer_count > 0 and top_layers > 0",
+ "enabled": "top_layers > 0 or bottom_layers > 0",
"limit_to_extruder": "roofing_extruder_nr",
"settable_per_mesh": true
},
@@ -3172,7 +3185,7 @@
"maximum_value_warning": "50",
"default_value": 20,
"value": "jerk_print",
- "enabled": "resolveOrValue('jerk_enabled')",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and resolveOrValue('jerk_enabled')",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
@@ -5819,7 +5832,7 @@
"description": "Alternate the direction in which the top/bottom layers are printed. Normally they are printed diagonally only. This setting adds the X-only and Y-only directions.",
"type": "bool",
"default_value": false,
- "enabled": "top_bottom_pattern != 'concentric'",
+ "enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern != 'concentric'",
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
From 6c6e05bf0608fb6e17541e05cba8d0408fadbcc4 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 6 Aug 2018 17:22:04 +0200
Subject: [PATCH 005/390] Don't send JSON file to back-end any more
They are no longer using it.
The back-end now just takes all settings that come in via setting messages. It doesn't need to set its defaults any more because all settings are set at the beginning. Only when slicing via command line does it need a JSON file.
Contributes to issue CURA-4410.
---
plugins/CuraEngineBackend/CuraEngineBackend.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py
index 56763a6632..bc0b275bb7 100755
--- a/plugins/CuraEngineBackend/CuraEngineBackend.py
+++ b/plugins/CuraEngineBackend/CuraEngineBackend.py
@@ -178,8 +178,7 @@ class CuraEngineBackend(QObject, Backend):
# This is useful for debugging and used to actually start the engine.
# \return list of commands and args / parameters.
def getEngineCommand(self) -> List[str]:
- json_path = Resources.getPath(Resources.DefinitionContainers, "fdmprinter.def.json")
- return [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), "-j", json_path, ""]
+ return [self._application.getPreferences().getValue("backend/location"), "connect", "127.0.0.1:{0}".format(self._port), ""]
## Emitted when we get a message containing print duration and material amount.
# This also implies the slicing has finished.
From 688a5083d223b84067d9c4b6a7ccc301b6618db1 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 8 Aug 2018 15:53:26 +0200
Subject: [PATCH 006/390] Add canUpdateFirmware property to printer output
devices
---
cura/PrinterOutput/GenericOutputController.py | 2 ++
cura/PrinterOutput/PrinterOutputController.py | 1 +
cura/PrinterOutput/PrinterOutputModel.py | 7 +++++++
plugins/USBPrinting/AvrFirmwareUpdater.py | 1 -
.../UpgradeFirmwareMachineAction.qml | 1 +
5 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index e6310e5bff..32ad9d8022 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -29,6 +29,8 @@ class GenericOutputController(PrinterOutputController):
self._output_device.printersChanged.connect(self._onPrintersChanged)
self._active_printer = None
+ self.can_update_firmware = True
+
def _onPrintersChanged(self):
if self._active_printer:
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
diff --git a/cura/PrinterOutput/PrinterOutputController.py b/cura/PrinterOutput/PrinterOutputController.py
index 58c6ef05a7..4fe5c04a65 100644
--- a/cura/PrinterOutput/PrinterOutputController.py
+++ b/cura/PrinterOutput/PrinterOutputController.py
@@ -18,6 +18,7 @@ class PrinterOutputController:
self.can_pre_heat_hotends = True
self.can_send_raw_gcode = True
self.can_control_manually = True
+ self.can_update_firmware = False
self._output_device = output_device
def setTargetHotendTemperature(self, printer: "PrinterOutputModel", extruder: "ExtruderOutputModel", temperature: int):
diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py
index 6fafa368bb..f43dbf570e 100644
--- a/cura/PrinterOutput/PrinterOutputModel.py
+++ b/cura/PrinterOutput/PrinterOutputModel.py
@@ -277,6 +277,13 @@ class PrinterOutputModel(QObject):
return self._controller.can_control_manually
return False
+ # Does the printer support upgrading firmware
+ @pyqtProperty(bool, notify = canUpdateFirmwareChanged)
+ def canUpdateFirmware(self):
+ if self._controller:
+ return self._controller.can_update_firmware
+ return False
+
# Returns the configuration (material, variant and buildplate) of the current printer
@pyqtProperty(QObject, notify = configurationChanged)
def printerConfiguration(self):
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index 5c2b8dc19e..681601e3a5 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -9,7 +9,6 @@ from .avr_isp import stk500v2, intelHex
from enum import IntEnum
-@signalemitter
class AvrFirmwareUpdater(QObject):
firmwareProgressChanged = pyqtSignal()
firmwareUpdateStateChanged = pyqtSignal()
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index ed771d2a04..03c17cd811 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -16,6 +16,7 @@ Cura.MachineAction
anchors.fill: parent;
property bool printerConnected: Cura.MachineManager.printerConnected
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
+ property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.canUpdateFirmware : False
Item
{
From b66558f97a913e38c1dcdf6f0ecbe69eaea681d2 Mon Sep 17 00:00:00 2001
From: paukstelis
Date: Sun, 19 Aug 2018 22:52:17 -0400
Subject: [PATCH 007/390] Initial commit for passing mesh names to CuraEngine
---
cura/ObjectsModel.py | 18 ++++++++++++++++++
plugins/CuraEngineBackend/Cura.proto | 2 ++
plugins/CuraEngineBackend/StartSliceJob.py | 4 ++--
3 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py
index f3c703d424..10d8e16f98 100644
--- a/cura/ObjectsModel.py
+++ b/cura/ObjectsModel.py
@@ -40,6 +40,9 @@ class ObjectsModel(ListModel):
filter_current_build_plate = Application.getInstance().getPreferences().getValue("view/filter_current_build_plate")
active_build_plate_number = self._build_plate_number
group_nr = 1
+ instance = 1
+ namecount = []
+
for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
if not isinstance(node, SceneNode):
continue
@@ -55,6 +58,7 @@ class ObjectsModel(ListModel):
if not node.callDecoration("isGroup"):
name = node.getName()
+
else:
name = catalog.i18nc("@label", "Group #{group_nr}").format(group_nr = str(group_nr))
group_nr += 1
@@ -63,6 +67,18 @@ class ObjectsModel(ListModel):
is_outside_build_area = node.isOutsideBuildArea()
else:
is_outside_build_area = False
+
+ #check if we already have an instance of the object based on name
+ duplicate = False
+ for n in namecount:
+ if name == n["name"]:
+ name = "{0}({1})".format(name, n["count"])
+ node.setName(name)
+ n["count"] = n["count"]+1
+ duplicate = True
+
+ if not duplicate:
+ namecount.append({"name" : name, "count" : 1})
nodes.append({
"name": name,
@@ -71,8 +87,10 @@ class ObjectsModel(ListModel):
"buildPlateNumber": node_build_plate_number,
"node": node
})
+
nodes = sorted(nodes, key=lambda n: n["name"])
self.setItems(nodes)
+ print(nodes)
self.itemsChanged.emit()
diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto
index 69612210ec..5e0f88f075 100644
--- a/plugins/CuraEngineBackend/Cura.proto
+++ b/plugins/CuraEngineBackend/Cura.proto
@@ -29,6 +29,8 @@ message Object
bytes normals = 3; //An array of 3 floats.
bytes indices = 4; //An array of ints.
repeated Setting settings = 5; // Setting override per object, overruling the global settings.
+ //PJP
+ string name = 6;
}
message Progress
diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py
index 0ebcafdbb2..4e6c53c4fb 100644
--- a/plugins/CuraEngineBackend/StartSliceJob.py
+++ b/plugins/CuraEngineBackend/StartSliceJob.py
@@ -256,7 +256,7 @@ class StartSliceJob(Job):
mesh_data = object.getMeshData()
rot_scale = object.getWorldTransformation().getTransposed().getData()[0:3, 0:3]
translate = object.getWorldTransformation().getData()[:3, 3]
-
+
# This effectively performs a limited form of MeshData.getTransformed that ignores normals.
verts = mesh_data.getVertices()
verts = verts.dot(rot_scale)
@@ -268,7 +268,7 @@ class StartSliceJob(Job):
obj = group_message.addRepeatedMessage("objects")
obj.id = id(object)
-
+ obj.name = object.getName()
indices = mesh_data.getIndices()
if indices is not None:
flat_verts = numpy.take(verts, indices.flatten(), axis=0)
From fc9c1045c97a857627c93254a5006e8753fa5d4a Mon Sep 17 00:00:00 2001
From: paukstelis
Date: Mon, 20 Aug 2018 07:40:28 -0400
Subject: [PATCH 008/390] Basic cleanup
---
cura/ObjectsModel.py | 1 -
plugins/CuraEngineBackend/Cura.proto | 1 -
2 files changed, 2 deletions(-)
diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py
index 10d8e16f98..1ac0c6247a 100644
--- a/cura/ObjectsModel.py
+++ b/cura/ObjectsModel.py
@@ -90,7 +90,6 @@ class ObjectsModel(ListModel):
nodes = sorted(nodes, key=lambda n: n["name"])
self.setItems(nodes)
- print(nodes)
self.itemsChanged.emit()
diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto
index 5e0f88f075..292330576b 100644
--- a/plugins/CuraEngineBackend/Cura.proto
+++ b/plugins/CuraEngineBackend/Cura.proto
@@ -29,7 +29,6 @@ message Object
bytes normals = 3; //An array of 3 floats.
bytes indices = 4; //An array of ints.
repeated Setting settings = 5; // Setting override per object, overruling the global settings.
- //PJP
string name = 6;
}
From b9f1f8c400372bfe4782e7a2fd4d4e0cbefb527f Mon Sep 17 00:00:00 2001
From: Mark Burton
Date: Mon, 20 Aug 2018 09:48:59 +0100
Subject: [PATCH 009/390] Add machine_extruder_cooling_fan_number setting to
specify print cooling fan for each extruder.
---
resources/definitions/fdmextruder.def.json | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json
index 3f84ed69a4..19c9e92d18 100644
--- a/resources/definitions/fdmextruder.def.json
+++ b/resources/definitions/fdmextruder.def.json
@@ -178,7 +178,19 @@
"maximum_value": "machine_height",
"settable_per_mesh": false,
"settable_per_extruder": true
- }
+ },
+ "machine_extruder_cooling_fan_number":
+ {
+ "label": "Extruder Print Cooling Fan",
+ "description": "The number of the print cooling fan associated with this extruder. Only change this from the default value of 0 when you have a different print cooling fan for each extruder.",
+ "type": "int",
+ "default_value": 0,
+ "minimum_value": "0",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true,
+ "settable_per_meshgroup": false,
+ "setttable_globally": false
+ }
}
},
"platform_adhesion":
From a0787a03ea11f149feb897c7d74d20c210cb50f8 Mon Sep 17 00:00:00 2001
From: Mark Burton
Date: Mon, 20 Aug 2018 09:49:31 +0100
Subject: [PATCH 010/390] Added extruder setting field for cooling fan number.
---
.../MachineSettingsAction/MachineSettingsAction.qml | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml
index b12f8f8696..c9b47ba3c0 100644
--- a/plugins/MachineSettingsAction/MachineSettingsAction.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml
@@ -433,6 +433,18 @@ Cura.MachineAction
property bool allowNegative: true
}
+ Loader
+ {
+ id: extruderCoolingFanNumberField
+ sourceComponent: numericTextFieldWithUnit
+ property string settingKey: "machine_extruder_cooling_fan_number"
+ property string label: catalog.i18nc("@label", "Cooling Fan Number")
+ property string unit: catalog.i18nc("@label", "")
+ property bool isExtruderSetting: true
+ property bool forceUpdateOnChange: true
+ property bool allowNegative: false
+ }
+
Item { width: UM.Theme.getSize("default_margin").width; height: UM.Theme.getSize("default_margin").height }
Row
From afb4440d64494161b1a4eb041fcaeb21f44658af Mon Sep 17 00:00:00 2001
From: Thomas Kriechbaumer
Date: Wed, 22 Aug 2018 13:46:49 +0200
Subject: [PATCH 011/390] add PauseAtHeight post-processing script for RRF
---
.../PauseAtHeightRepRapFirmwareDuet.py | 51 +++++++++++++++++++
1 file changed, 51 insertions(+)
create mode 100644 plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py
diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py
new file mode 100644
index 0000000000..79e5d8c62d
--- /dev/null
+++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py
@@ -0,0 +1,51 @@
+from ..Script import Script
+
+class PauseAtHeightRepRapFirmwareDuet(Script):
+
+ def getSettingDataString(self):
+ return """{
+ "name": "Pause at height for RepRapFirmware DuetWifi / Duet Ethernet / Duet Maestro",
+ "key": "PauseAtHeightRepRapFirmwareDuet",
+ "metadata": {},
+ "version": 2,
+ "settings":
+ {
+ "pause_height":
+ {
+ "label": "Pause height",
+ "description": "At what height should the pause occur",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 5.0
+ }
+ }
+ }"""
+
+ def execute(self, data):
+ current_z = 0.
+ pause_z = self.getSettingValueByKey("pause_height")
+
+ layers_started = False
+ for layer_number, layer in enumerate(data):
+ lines = layer.split("\n")
+ for line in lines:
+ if ";LAYER:0" in line:
+ layers_started = True
+ continue
+
+ if not layers_started:
+ continue
+
+ if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0:
+ current_z = self.getValue(line, 'Z')
+ if current_z != None:
+ if current_z >= pause_z:
+ prepend_gcode = ";TYPE:CUSTOM\n"
+ prepend_gcode += "; -- Pause at height (%.2f mm) --\n" % pause_z
+ prepend_gcode += self.putValue(M = 226) + "\n"
+ layer = prepend_gcode + layer
+
+ data[layer_number] = layer # Override the data of this layer with the modified data
+ return data
+ break
+ return data
From 4bea1410b8ca194ed64dec4f53864c89b84667e8 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 22 Aug 2018 14:37:48 +0200
Subject: [PATCH 012/390] Allow printer output devices to set their ability to
update firmware
---
cura/PrinterOutput/GenericOutputController.py | 2 --
cura/PrinterOutput/PrinterOutputController.py | 7 ++++
cura/PrinterOutput/PrinterOutputModel.py | 6 ++++
plugins/USBPrinting/USBPrinterOutputDevice.py | 8 +++--
.../UpgradeFirmwareMachineAction.qml | 34 ++++++++++++-------
5 files changed, 40 insertions(+), 17 deletions(-)
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index 32ad9d8022..e6310e5bff 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -29,8 +29,6 @@ class GenericOutputController(PrinterOutputController):
self._output_device.printersChanged.connect(self._onPrintersChanged)
self._active_printer = None
- self.can_update_firmware = True
-
def _onPrintersChanged(self):
if self._active_printer:
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
diff --git a/cura/PrinterOutput/PrinterOutputController.py b/cura/PrinterOutput/PrinterOutputController.py
index 4fe5c04a65..eb5f15cceb 100644
--- a/cura/PrinterOutput/PrinterOutputController.py
+++ b/cura/PrinterOutput/PrinterOutputController.py
@@ -2,6 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from UM.Logger import Logger
+from UM.Signal import Signal
MYPY = False
if MYPY:
@@ -56,3 +57,9 @@ class PrinterOutputController:
def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
Logger.log("w", "Custom command not implemented in controller")
+
+ canUpdateFirmwareChanged = Signal()
+ def setCanUpdateFirmware(self, can_update_firmware: bool):
+ if can_update_firmware != self.can_update_firmware:
+ self.can_update_firmware = can_update_firmware
+ self.canUpdateFirmwareChanged.emit()
\ No newline at end of file
diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py
index 252fc35080..5d63f6f1ce 100644
--- a/cura/PrinterOutput/PrinterOutputModel.py
+++ b/cura/PrinterOutput/PrinterOutputModel.py
@@ -26,6 +26,7 @@ class PrinterOutputModel(QObject):
buildplateChanged = pyqtSignal()
cameraChanged = pyqtSignal()
configurationChanged = pyqtSignal()
+ canUpdateFirmwareChanged = pyqtSignal()
def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None, firmware_version = "") -> None:
super().__init__(parent)
@@ -34,6 +35,7 @@ class PrinterOutputModel(QObject):
self._name = ""
self._key = "" # Unique identifier
self._controller = output_controller
+ self._controller.canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged)
self._extruders = [ExtruderOutputModel(printer = self, position = i) for i in range(number_of_extruders)]
self._printer_configuration = ConfigurationModel() # Indicates the current configuration setup in this printer
self._head_position = Vector(0, 0, 0)
@@ -284,6 +286,10 @@ class PrinterOutputModel(QObject):
return self._controller.can_update_firmware
return False
+ # Stub to connect UM.Signal to pyqtSignal
+ def _onControllerCanUpdateFirmwareChanged(self):
+ self.canUpdateFirmwareChanged.emit()
+
# Returns the configuration (material, variant and buildplate) of the current printer
@pyqtProperty(QObject, notify = configurationChanged)
def printerConfiguration(self):
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index bc2350e50f..957269f155 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -183,7 +183,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
container_stack = CuraApplication.getInstance().getGlobalContainerStack()
num_extruders = container_stack.getProperty("machine_extruder_count", "value")
# Ensure that a printer is created.
- self._printers = [PrinterOutputModel(output_controller=GenericOutputController(self), number_of_extruders=num_extruders)]
+ controller = GenericOutputController(self)
+ controller.setCanUpdateFirmware(True)
+ self._printers = [PrinterOutputModel(output_controller=controller, number_of_extruders=num_extruders)]
self._printers[0].updateName(container_stack.getName())
self.setConnectionState(ConnectionState.connected)
self._update_thread.start()
@@ -353,7 +355,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
elapsed_time = int(time() - self._print_start_time)
print_job = self._printers[0].activePrintJob
if print_job is None:
- print_job = PrintJobOutputModel(output_controller = GenericOutputController(self), name= CuraApplication.getInstance().getPrintInformation().jobName)
+ controller = GenericOutputController(self)
+ controller.setCanUpdateFirmware(True)
+ print_job = PrintJobOutputModel(output_controller = controller, name= CuraApplication.getInstance().getPrintInformation().jobName)
print_job.updateState("printing")
self._printers[0].updateActivePrintJob(print_job)
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index 03c17cd811..7c15c303b5 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -16,17 +16,17 @@ Cura.MachineAction
anchors.fill: parent;
property bool printerConnected: Cura.MachineManager.printerConnected
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
- property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.canUpdateFirmware : False
+ property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : False
- Item
+ Column
{
id: upgradeFirmwareMachineAction
anchors.fill: parent;
UM.I18nCatalog { id: catalog; name:"cura"}
+ spacing: UM.Theme.getSize("default_margin").height
Label
{
- id: pageTitle
width: parent.width
text: catalog.i18nc("@title", "Upgrade Firmware")
wrapMode: Text.WordWrap
@@ -34,9 +34,6 @@ Cura.MachineAction
}
Label
{
- id: pageDescription
- anchors.top: pageTitle.bottom
- anchors.topMargin: UM.Theme.getSize("default_margin").height
width: parent.width
wrapMode: Text.WordWrap
text: catalog.i18nc("@label", "Firmware is the piece of software running directly on your 3D printer. This firmware controls the step motors, regulates the temperature and ultimately makes your printer work.")
@@ -44,9 +41,6 @@ Cura.MachineAction
Label
{
- id: upgradeText1
- anchors.top: pageDescription.bottom
- anchors.topMargin: UM.Theme.getSize("default_margin").height
width: parent.width
wrapMode: Text.WordWrap
text: catalog.i18nc("@label", "The firmware shipping with new printers works, but new versions tend to have more features and improvements.");
@@ -54,8 +48,6 @@ Cura.MachineAction
Row
{
- anchors.top: upgradeText1.bottom
- anchors.topMargin: UM.Theme.getSize("default_margin").height
anchors.horizontalCenter: parent.horizontalCenter
width: childrenRect.width
spacing: UM.Theme.getSize("default_margin").width
@@ -64,7 +56,7 @@ Cura.MachineAction
{
id: autoUpgradeButton
text: catalog.i18nc("@action:button", "Automatically upgrade Firmware");
- enabled: parent.firmwareName != "" && activeOutputDevice
+ enabled: parent.firmwareName != "" && canUpdateFirmware
onClicked:
{
activeOutputDevice.updateFirmware(parent.firmwareName)
@@ -74,7 +66,7 @@ Cura.MachineAction
{
id: manualUpgradeButton
text: catalog.i18nc("@action:button", "Upload custom Firmware");
- enabled: activeOutputDevice != null
+ enabled: canUpdateFirmware
onClicked:
{
customFirmwareDialog.open()
@@ -82,6 +74,22 @@ Cura.MachineAction
}
}
+ Label
+ {
+ width: parent.width
+ wrapMode: Text.WordWrap
+ visible: !printerConnected
+ text: catalog.i18nc("@label", "Firmware can not be upgraded because there is no connection with the printer.");
+ }
+
+ Label
+ {
+ width: parent.width
+ wrapMode: Text.WordWrap
+ visible: printerConnected && !canUpdateFirmware
+ text: catalog.i18nc("@label", "Firmware can not be upgraded because the connection with the printer does not support upgrading firmware.");
+ }
+
FileDialog
{
id: customFirmwareDialog
From 5f81c6d1f4a0c7f52feaa0d860946a90d762ee82 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 22 Aug 2018 15:21:03 +0200
Subject: [PATCH 013/390] Add a FirmwareUpdater class and make
AvrFirmwareUpdater a subclass
---
cura/FirmwareUpdater.py | 81 +++++++++++++++++++
plugins/USBPrinting/AvrFirmwareUpdater.py | 77 +-----------------
.../qml}/FirmwareUpdateWindow.qml | 0
3 files changed, 85 insertions(+), 73 deletions(-)
create mode 100644 cura/FirmwareUpdater.py
rename {plugins/USBPrinting => resources/qml}/FirmwareUpdateWindow.qml (100%)
diff --git a/cura/FirmwareUpdater.py b/cura/FirmwareUpdater.py
new file mode 100644
index 0000000000..ca5997bfb1
--- /dev/null
+++ b/cura/FirmwareUpdater.py
@@ -0,0 +1,81 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
+
+from UM.Resources import Resources
+from cura.PrinterOutputDevice import PrinterOutputDevice
+
+from enum import IntEnum
+
+class FirmwareUpdater(QObject):
+ firmwareProgressChanged = pyqtSignal()
+ firmwareUpdateStateChanged = pyqtSignal()
+
+ def __init__(self, output_device: PrinterOutputDevice) -> None:
+ self._output_device = output_device
+
+ self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True)
+
+ self._firmware_view = None
+ self._firmware_location = None
+ self._firmware_progress = 0
+ self._firmware_update_state = FirmwareUpdateState.idle
+
+ def updateFirmware(self, file):
+ # the file path could be url-encoded.
+ if file.startswith("file://"):
+ self._firmware_location = QUrl(file).toLocalFile()
+ else:
+ self._firmware_location = file
+ self.showFirmwareInterface()
+ self.setFirmwareUpdateState(FirmwareUpdateState.updating)
+ self._update_firmware_thread.start()
+
+ def _updateFirmware(self):
+ raise NotImplementedError("_updateFirmware needs to be implemented")
+
+ def cleanupAfterUpdate(self):
+ # Clean up for next attempt.
+ self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
+ self._firmware_location = ""
+ self._onFirmwareProgress(100)
+ self.setFirmwareUpdateState(FirmwareUpdateState.completed)
+
+ ## Show firmware interface.
+ # This will create the view if its not already created.
+ def showFirmwareInterface(self):
+ if self._firmware_view is None:
+ path = Resources.getPath(self.ResourceTypes.QmlFiles, "FirmwareUpdateWindow.qml")
+ self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
+
+ self._firmware_view.show()
+
+ @pyqtProperty(float, notify = firmwareProgressChanged)
+ def firmwareProgress(self):
+ return self._firmware_progress
+
+ @pyqtProperty(int, notify=firmwareUpdateStateChanged)
+ def firmwareUpdateState(self):
+ return self._firmware_update_state
+
+ def setFirmwareUpdateState(self, state):
+ if self._firmware_update_state != state:
+ self._firmware_update_state = state
+ self.firmwareUpdateStateChanged.emit()
+
+ # Callback function for firmware update progress.
+ def _onFirmwareProgress(self, progress, max_progress = 100):
+ self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100
+ self.firmwareProgressChanged.emit()
+
+
+class FirmwareUpdateState(IntEnum):
+ idle = 0
+ updating = 1
+ completed = 2
+ unknown_error = 3
+ communication_error = 4
+ io_error = 5
+ firmware_not_found_error = 6
+
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index 681601e3a5..d3028be0e4 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -1,43 +1,16 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
-
from cura.PrinterOutputDevice import PrinterOutputDevice
+from cura.FirmwareUpdater import FirmwareUpdater, FirmwareUpdateState
from .avr_isp import stk500v2, intelHex
-from enum import IntEnum
-
-class AvrFirmwareUpdater(QObject):
- firmwareProgressChanged = pyqtSignal()
- firmwareUpdateStateChanged = pyqtSignal()
-
+class AvrFirmwareUpdater(FirmwareUpdater):
def __init__(self, output_device: PrinterOutputDevice) -> None:
- self._output_device = output_device
-
- self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True)
-
- self._firmware_view = None
- self._firmware_location = None
- self._firmware_progress = 0
- self._firmware_update_state = FirmwareUpdateState.idle
-
- def updateFirmware(self, file):
- # the file path could be url-encoded.
- if file.startswith("file://"):
- self._firmware_location = QUrl(file).toLocalFile()
- else:
- self._firmware_location = file
- self.showFirmwareInterface()
- self.setFirmwareUpdateState(FirmwareUpdateState.updating)
- self._update_firmware_thread.start()
+ super().__init__(output_device)
def _updateFirmware(self):
- # Ensure that other connections are closed.
- if self._connection_state != ConnectionState.closed:
- self.close()
-
try:
hex_file = intelHex.readHex(self._firmware_location)
assert len(hex_file) > 0
@@ -73,49 +46,7 @@ class AvrFirmwareUpdater(QObject):
programmer.close()
- # Clean up for next attempt.
- self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
- self._firmware_location = ""
- self._onFirmwareProgress(100)
- self.setFirmwareUpdateState(FirmwareUpdateState.completed)
-
# Try to re-connect with the machine again, which must be done on the Qt thread, so we use call later.
CuraApplication.getInstance().callLater(self.connect)
- ## Show firmware interface.
- # This will create the view if its not already created.
- def showFirmwareInterface(self):
- if self._firmware_view is None:
- path = os.path.join(PluginRegistry.getInstance().getPluginPath("USBPrinting"), "FirmwareUpdateWindow.qml")
- self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
-
- self._firmware_view.show()
-
- @pyqtProperty(float, notify = firmwareProgressChanged)
- def firmwareProgress(self):
- return self._firmware_progress
-
- @pyqtProperty(int, notify=firmwareUpdateStateChanged)
- def firmwareUpdateState(self):
- return self._firmware_update_state
-
- def setFirmwareUpdateState(self, state):
- if self._firmware_update_state != state:
- self._firmware_update_state = state
- self.firmwareUpdateStateChanged.emit()
-
- # Callback function for firmware update progress.
- def _onFirmwareProgress(self, progress, max_progress = 100):
- self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100
- self.firmwareProgressChanged.emit()
-
-
-class FirmwareUpdateState(IntEnum):
- idle = 0
- updating = 1
- completed = 2
- unknown_error = 3
- communication_error = 4
- io_error = 5
- firmware_not_found_error = 6
-
+ self.cleanupAfterUpdate()
diff --git a/plugins/USBPrinting/FirmwareUpdateWindow.qml b/resources/qml/FirmwareUpdateWindow.qml
similarity index 100%
rename from plugins/USBPrinting/FirmwareUpdateWindow.qml
rename to resources/qml/FirmwareUpdateWindow.qml
From 7b00d6879a5cd197f220e2351686e40d71dcb1d4 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 22 Aug 2018 15:44:11 +0200
Subject: [PATCH 014/390] Factor out USBPrinterManager singleton
---
cura/Settings/MachineManager.py | 34 ++++++++++++++++++
.../USBPrinterOutputDeviceManager.py | 35 -------------------
plugins/USBPrinting/__init__.py | 1 -
.../UMOCheckupMachineAction.qml | 32 ++++++++---------
.../UpgradeFirmwareMachineAction.qml | 2 +-
5 files changed, 51 insertions(+), 53 deletions(-)
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index d65bbfddd9..f330d70225 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -4,6 +4,7 @@
import collections
import time
from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast
+import platform
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@@ -16,6 +17,7 @@ from UM.FlameProfiler import pyqtSlot
from UM import Util
from UM.Logger import Logger
from UM.Message import Message
+from UM.Resources import Resources
from UM.Settings.SettingFunction import SettingFunction
from UM.Signal import postponeSignals, CompressTechnique
@@ -1531,3 +1533,35 @@ class MachineManager(QObject):
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
self.updateMaterialWithVariant(None)
self._updateQualityWithMaterial()
+
+ ## Get default firmware file name if one is specified in the firmware
+ @pyqtSlot(result = str)
+ def getDefaultFirmwareName(self):
+ # Check if there is a valid global container stack
+ if not self._global_container_stack:
+ return ""
+
+ # The bottom of the containerstack is the machine definition
+ machine_id = self._global_container_stack.getBottom().id
+ machine_has_heated_bed = self._global_container_stack.getProperty("machine_heated_bed", "value")
+
+ baudrate = 250000
+ if platform.system() == "Linux":
+ # Linux prefers a baudrate of 115200 here because older versions of
+ # pySerial did not support a baudrate of 250000
+ baudrate = 115200
+
+ # If a firmware file is available, it should be specified in the definition for the printer
+ hex_file = self._global_container_stack.getMetaDataEntry("firmware_file", None)
+ if machine_has_heated_bed:
+ hex_file = self._global_container_stack.getMetaDataEntry("firmware_hbk_file", hex_file)
+
+ if hex_file:
+ try:
+ return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
+ except FileNotFoundError:
+ Logger.log("w", "Firmware file %s not found.", hex_file)
+ return ""
+ else:
+ Logger.log("w", "There is no firmware for machine %s.", machine_id)
+ return ""
diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
index f444e72908..bd207d9d96 100644
--- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
+++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
@@ -2,14 +2,12 @@
# Cura is released under the terms of the LGPLv3 or higher.
import threading
-import platform
import time
import serial.tools.list_ports
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
from UM.Logger import Logger
-from UM.Resources import Resources
from UM.Signal import Signal, signalemitter
from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
from UM.i18n import i18nCatalog
@@ -87,39 +85,6 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin):
self._addRemovePorts(port_list)
time.sleep(5)
- @pyqtSlot(result = str)
- def getDefaultFirmwareName(self):
- # Check if there is a valid global container stack
- global_container_stack = self._application.getGlobalContainerStack()
- if not global_container_stack:
- Logger.log("e", "There is no global container stack. Can not update firmware.")
- return ""
-
- # The bottom of the containerstack is the machine definition
- machine_id = global_container_stack.getBottom().id
- machine_has_heated_bed = global_container_stack.getProperty("machine_heated_bed", "value")
-
- baudrate = 250000
- if platform.system() == "Linux":
- # Linux prefers a baudrate of 115200 here because older versions of
- # pySerial did not support a baudrate of 250000
- baudrate = 115200
-
- # If a firmware file is available, it should be specified in the definition for the printer
- hex_file = global_container_stack.getMetaDataEntry("firmware_file", None)
- if machine_has_heated_bed:
- hex_file = global_container_stack.getMetaDataEntry("firmware_hbk_file", hex_file)
-
- if hex_file:
- try:
- return Resources.getPath(CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
- except FileNotFoundError:
- Logger.log("w", "Firmware file %s not found.", hex_file)
- return ""
- else:
- Logger.log("w", "There is no firmware for machine %s.", machine_id)
- return ""
-
## Helper to identify serial ports (and scan for them)
def _addRemovePorts(self, serial_ports):
# First, find and add all new or changed keys
diff --git a/plugins/USBPrinting/__init__.py b/plugins/USBPrinting/__init__.py
index fd5488eead..0cb68d3865 100644
--- a/plugins/USBPrinting/__init__.py
+++ b/plugins/USBPrinting/__init__.py
@@ -14,5 +14,4 @@ def getMetaData():
def register(app):
# We are violating the QT API here (as we use a factory, which is technically not allowed).
# but we don't really have another means for doing this (and it seems to you know -work-)
- qmlRegisterSingletonType(USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager, "Cura", 1, 0, "USBPrinterManager", USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager.getInstance)
return {"output_device": USBPrinterOutputDeviceManager.USBPrinterOutputDeviceManager(app)}
diff --git a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml
index b92638aa12..4a1d42e248 100644
--- a/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UMOCheckupMachineAction.qml
@@ -17,7 +17,7 @@ Cura.MachineAction
property int rightRow: (checkupMachineAction.width * 0.60) | 0
property bool heatupHotendStarted: false
property bool heatupBedStarted: false
- property bool usbConnected: Cura.USBPrinterManager.connectedPrinterList.rowCount() > 0
+ property bool printerConnected: Cura.MachineManager.printerConnected
UM.I18nCatalog { id: catalog; name:"cura"}
Label
@@ -86,7 +86,7 @@ Cura.MachineAction
anchors.left: connectionLabel.right
anchors.top: parent.top
wrapMode: Text.WordWrap
- text: checkupMachineAction.usbConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected")
+ text: checkupMachineAction.printerConnected ? catalog.i18nc("@info:status","Connected"): catalog.i18nc("@info:status","Not connected")
}
//////////////////////////////////////////////////////////
Label
@@ -97,7 +97,7 @@ Cura.MachineAction
anchors.top: connectionLabel.bottom
wrapMode: Text.WordWrap
text: catalog.i18nc("@label","Min endstop X: ")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
Label
{
@@ -107,7 +107,7 @@ Cura.MachineAction
anchors.top: connectionLabel.bottom
wrapMode: Text.WordWrap
text: manager.xMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
//////////////////////////////////////////////////////////////
Label
@@ -118,7 +118,7 @@ Cura.MachineAction
anchors.top: endstopXLabel.bottom
wrapMode: Text.WordWrap
text: catalog.i18nc("@label","Min endstop Y: ")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
Label
{
@@ -128,7 +128,7 @@ Cura.MachineAction
anchors.top: endstopXLabel.bottom
wrapMode: Text.WordWrap
text: manager.yMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
/////////////////////////////////////////////////////////////////////
Label
@@ -139,7 +139,7 @@ Cura.MachineAction
anchors.top: endstopYLabel.bottom
wrapMode: Text.WordWrap
text: catalog.i18nc("@label","Min endstop Z: ")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
Label
{
@@ -149,7 +149,7 @@ Cura.MachineAction
anchors.top: endstopYLabel.bottom
wrapMode: Text.WordWrap
text: manager.zMinEndstopTestCompleted ? catalog.i18nc("@info:status","Works") : catalog.i18nc("@info:status","Not checked")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
////////////////////////////////////////////////////////////
Label
@@ -161,7 +161,7 @@ Cura.MachineAction
anchors.top: endstopZLabel.bottom
wrapMode: Text.WordWrap
text: catalog.i18nc("@label","Nozzle temperature check: ")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
Label
{
@@ -171,7 +171,7 @@ Cura.MachineAction
anchors.left: nozzleTempLabel.right
wrapMode: Text.WordWrap
text: catalog.i18nc("@info:status","Not checked")
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
Item
{
@@ -181,7 +181,7 @@ Cura.MachineAction
anchors.top: nozzleTempLabel.top
anchors.left: bedTempStatus.right
anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width/2)
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
Button
{
text: checkupMachineAction.heatupHotendStarted ? catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating")
@@ -209,7 +209,7 @@ Cura.MachineAction
wrapMode: Text.WordWrap
text: manager.hotendTemperature + "°C"
font.bold: true
- visible: checkupMachineAction.usbConnected
+ visible: checkupMachineAction.printerConnected
}
/////////////////////////////////////////////////////////////////////////////
Label
@@ -221,7 +221,7 @@ Cura.MachineAction
anchors.top: nozzleTempLabel.bottom
wrapMode: Text.WordWrap
text: catalog.i18nc("@label","Build plate temperature check:")
- visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+ visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
}
Label
@@ -232,7 +232,7 @@ Cura.MachineAction
anchors.left: bedTempLabel.right
wrapMode: Text.WordWrap
text: manager.bedTestCompleted ? catalog.i18nc("@info:status","Not checked"): catalog.i18nc("@info:status","Checked")
- visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+ visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
}
Item
{
@@ -242,7 +242,7 @@ Cura.MachineAction
anchors.top: bedTempLabel.top
anchors.left: bedTempStatus.right
anchors.leftMargin: Math.round(UM.Theme.getSize("default_margin").width/2)
- visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+ visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
Button
{
text: checkupMachineAction.heatupBedStarted ?catalog.i18nc("@action:button","Stop Heating") : catalog.i18nc("@action:button","Start Heating")
@@ -270,7 +270,7 @@ Cura.MachineAction
wrapMode: Text.WordWrap
text: manager.bedTemperature + "°C"
font.bold: true
- visible: checkupMachineAction.usbConnected && manager.hasHeatedBed
+ visible: checkupMachineAction.printerConnected && manager.hasHeatedBed
}
Label
{
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index 7c15c303b5..0d12f72a0a 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -51,7 +51,7 @@ Cura.MachineAction
anchors.horizontalCenter: parent.horizontalCenter
width: childrenRect.width
spacing: UM.Theme.getSize("default_margin").width
- property var firmwareName: Cura.USBPrinterManager.getDefaultFirmwareName()
+ property var firmwareName: Cura.MachineManager.getDefaultFirmwareName()
Button
{
id: autoUpgradeButton
From 5d5223920194e20108d7666e7ce6c8350323728e Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 24 Aug 2018 09:09:49 +0200
Subject: [PATCH 015/390] Code style
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 957269f155..18373d34d2 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -205,6 +205,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._command_queue.put(command)
else:
self._sendCommand(command)
+
def _sendCommand(self, command: Union[str, bytes]):
if self._serial is None or self._connection_state != ConnectionState.connected:
return
From e36f78dd355fba6c9935a2184051f78c770bf30e Mon Sep 17 00:00:00 2001
From: paukstelis
Date: Fri, 24 Aug 2018 07:27:34 -0400
Subject: [PATCH 016/390] Clean up whitespace
---
cura/ObjectsModel.py | 12 ++++++------
plugins/CuraEngineBackend/StartSliceJob.py | 2 +-
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py
index 1ac0c6247a..4f3d42e7fe 100644
--- a/cura/ObjectsModel.py
+++ b/cura/ObjectsModel.py
@@ -71,12 +71,12 @@ class ObjectsModel(ListModel):
#check if we already have an instance of the object based on name
duplicate = False
for n in namecount:
- if name == n["name"]:
- name = "{0}({1})".format(name, n["count"])
- node.setName(name)
- n["count"] = n["count"]+1
- duplicate = True
-
+ if name == n["name"]:
+ name = "{0}({1})".format(name, n["count"])
+ node.setName(name)
+ n["count"] = n["count"]+1
+ duplicate = True
+
if not duplicate:
namecount.append({"name" : name, "count" : 1})
diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py
index 4e6c53c4fb..2430485e30 100644
--- a/plugins/CuraEngineBackend/StartSliceJob.py
+++ b/plugins/CuraEngineBackend/StartSliceJob.py
@@ -256,7 +256,7 @@ class StartSliceJob(Job):
mesh_data = object.getMeshData()
rot_scale = object.getWorldTransformation().getTransposed().getData()[0:3, 0:3]
translate = object.getWorldTransformation().getData()[:3, 3]
-
+
# This effectively performs a limited form of MeshData.getTransformed that ignores normals.
verts = mesh_data.getVertices()
verts = verts.dot(rot_scale)
From 77f99ecf20a6f70662ba0304366567d602e411dc Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 24 Aug 2018 15:48:11 +0200
Subject: [PATCH 017/390] Moved FirmwareUpdater to cura.PrinterOutput
---
cura/{ => PrinterOutput}/FirmwareUpdater.py | 0
plugins/USBPrinting/AvrFirmwareUpdater.py | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename cura/{ => PrinterOutput}/FirmwareUpdater.py (100%)
diff --git a/cura/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
similarity index 100%
rename from cura/FirmwareUpdater.py
rename to cura/PrinterOutput/FirmwareUpdater.py
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index d3028be0e4..171c81d557 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from cura.PrinterOutputDevice import PrinterOutputDevice
-from cura.FirmwareUpdater import FirmwareUpdater, FirmwareUpdateState
+from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater, FirmwareUpdateState
from .avr_isp import stk500v2, intelHex
From 6dbf0a5fb705f36547c794c42ea7d8c3c69a4fa0 Mon Sep 17 00:00:00 2001
From: Amanda de Castilho
Date: Wed, 29 Aug 2018 00:39:13 -0700
Subject: [PATCH 018/390] Create DisplayFilenameAndLayerOnLCD
This plugin inserts M117 into the g-code so that the filename is displayed on the LCD and updates at each layer to display the current layer
---
.../scripts/DisplayFilenameAndLayerOnLCD | 50 +++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD
diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD
new file mode 100644
index 0000000000..f7ddd01e1e
--- /dev/null
+++ b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD
@@ -0,0 +1,50 @@
+# Cura PostProcessingPlugin
+# Author: Amanda de Castilho
+# Date: August 28, 2018
+
+# Description: This plugin inserts a line at the start of each layer,
+# M117 displays the filename and layer height to the LCD
+# ** user must enter 'filename'
+# ** future update: include actual filename
+
+from ..Script import Script
+
+class DisplayFilenameAndLayerOnLCD(Script):
+ def __init__(self):
+ super().__init__()
+
+ def getSettingDataString(self):
+ return """{
+ "name": "Display filename and layer on LCD",
+ "key": "DisplayFilenameAndLayerOnLCD",
+ "metadata": {},
+ "version": 2,
+ "settings":
+ {
+ "name":
+ {
+ "label": "filename",
+ "description": "Enter filename",
+ "type": "str",
+ "default_value": "default"
+ }
+ }
+ }"""
+
+ def execute(self, data):
+ name = self.getSettingValueByKey("name")
+ lcd_text = "M117 " + name + " layer: "
+ i = 0
+ for layer in data:
+ display_text = lcd_text + str(i)
+ layer_index = data.index(layer)
+ lines = layer.split("\n")
+ for line in lines:
+ if line.startswith(";LAYER:"):
+ line_index = lines.index(line)
+ lines.insert(line_index + 1, display_text)
+ i += 1
+ final_lines = "\n".join(lines)
+ data[layer_index] = final_lines
+
+ return data
From a5baa9008637b7f28a9c5c198671f8bb492c2930 Mon Sep 17 00:00:00 2001
From: Amanda de Castilho
Date: Wed, 29 Aug 2018 08:09:57 -0700
Subject: [PATCH 019/390] Rename DisplayFilenameAndLayerOnLCD to
DisplayFilenameAndLayerOnLCD.py
added the .py extention
---
...splayFilenameAndLayerOnLCD => DisplayFilenameAndLayerOnLCD.py} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename plugins/PostProcessingPlugin/scripts/{DisplayFilenameAndLayerOnLCD => DisplayFilenameAndLayerOnLCD.py} (100%)
diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
similarity index 100%
rename from plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD
rename to plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
From 1fbf9c973145c202ecc6773d18e70234ca6af8d4 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Wed, 29 Aug 2018 17:21:47 +0200
Subject: [PATCH 020/390] Add default value to extruders_enabled_count
Otherwise CuraEngine can't parse this setting from the JSON file in command line slicing.
Contributes to issue CURA-4410.
---
resources/definitions/fdmprinter.def.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 3eb7cb1c32..f00fecbaab 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -216,6 +216,7 @@
"label": "Number of Extruders that are enabled",
"description": "Number of extruder trains that are enabled; automatically set in software",
"value": "machine_extruder_count",
+ "default_value": 1,
"minimum_value": "1",
"maximum_value": "16",
"type": "int",
From f7fbc685d8ffa8ebebc7aa887e4045a6a373d2d8 Mon Sep 17 00:00:00 2001
From: Amanda de Castilho
Date: Wed, 29 Aug 2018 08:43:16 -0700
Subject: [PATCH 021/390] Update DisplayFilenameAndLayerOnLCD.py
changed so that actual filename is displayed (or alternatively user can enter text to display) to LCD during print
---
.../scripts/DisplayFilenameAndLayerOnLCD.py | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
index f7ddd01e1e..2ae07f914c 100644
--- a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
+++ b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
@@ -3,11 +3,11 @@
# Date: August 28, 2018
# Description: This plugin inserts a line at the start of each layer,
-# M117 displays the filename and layer height to the LCD
-# ** user must enter 'filename'
-# ** future update: include actual filename
+# M117 - displays the filename and layer height to the LCD
+# Alternatively, user can override the filename to display alt text + layer height
-from ..Script import Script
+..Script import Script
+from UM.Application import Application
class DisplayFilenameAndLayerOnLCD(Script):
def __init__(self):
@@ -23,16 +23,19 @@ class DisplayFilenameAndLayerOnLCD(Script):
{
"name":
{
- "label": "filename",
- "description": "Enter filename",
+ "label": "text to display:",
+ "description": "By default the current filename will be displayed on the LCD. Enter text here to override the filename and display something else.",
"type": "str",
- "default_value": "default"
+ "default_value": ""
}
}
}"""
def execute(self, data):
- name = self.getSettingValueByKey("name")
+ if self.getSettingValueByKey("name") != "":
+ name = self.getSettingValueByKey("name")
+ else:
+ name = Application.getInstance().getPrintInformation().jobName
lcd_text = "M117 " + name + " layer: "
i = 0
for layer in data:
From 7e7f2aab6b9846ca9235d302250308c50c94a10c Mon Sep 17 00:00:00 2001
From: Amanda de Castilho
Date: Wed, 29 Aug 2018 09:48:37 -0700
Subject: [PATCH 022/390] Update DisplayFilenameAndLayerOnLCD.py
---
.../scripts/DisplayFilenameAndLayerOnLCD.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
index 2ae07f914c..9fd9e08d7d 100644
--- a/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
+++ b/plugins/PostProcessingPlugin/scripts/DisplayFilenameAndLayerOnLCD.py
@@ -6,7 +6,7 @@
# M117 - displays the filename and layer height to the LCD
# Alternatively, user can override the filename to display alt text + layer height
-..Script import Script
+from ..Script import Script
from UM.Application import Application
class DisplayFilenameAndLayerOnLCD(Script):
From 53a0abd230fb4db97ba3e86556d843185d3794bc Mon Sep 17 00:00:00 2001
From: paukstelis
Date: Wed, 29 Aug 2018 17:43:22 -0400
Subject: [PATCH 023/390] Convert name check to defaultdict
---
cura/ObjectsModel.py | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/cura/ObjectsModel.py b/cura/ObjectsModel.py
index 4f3d42e7fe..8354540783 100644
--- a/cura/ObjectsModel.py
+++ b/cura/ObjectsModel.py
@@ -9,6 +9,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Scene.SceneNode import SceneNode
from UM.Scene.Selection import Selection
from UM.i18n import i18nCatalog
+from collections import defaultdict
catalog = i18nCatalog("cura")
@@ -40,9 +41,8 @@ class ObjectsModel(ListModel):
filter_current_build_plate = Application.getInstance().getPreferences().getValue("view/filter_current_build_plate")
active_build_plate_number = self._build_plate_number
group_nr = 1
- instance = 1
- namecount = []
-
+ name_count_dict = defaultdict(int)
+
for node in DepthFirstIterator(Application.getInstance().getController().getScene().getRoot()):
if not isinstance(node, SceneNode):
continue
@@ -69,16 +69,12 @@ class ObjectsModel(ListModel):
is_outside_build_area = False
#check if we already have an instance of the object based on name
- duplicate = False
- for n in namecount:
- if name == n["name"]:
- name = "{0}({1})".format(name, n["count"])
- node.setName(name)
- n["count"] = n["count"]+1
- duplicate = True
-
- if not duplicate:
- namecount.append({"name" : name, "count" : 1})
+ name_count_dict[name] += 1
+ name_count = name_count_dict[name]
+
+ if name_count > 1:
+ name = "{0}({1})".format(name, name_count-1)
+ node.setName(name)
nodes.append({
"name": name,
@@ -87,7 +83,7 @@ class ObjectsModel(ListModel):
"buildPlateNumber": node_build_plate_number,
"node": node
})
-
+
nodes = sorted(nodes, key=lambda n: n["name"])
self.setItems(nodes)
From 9739dbd5f69597b281b61f773d9d6418e0e3eaae Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Sun, 2 Sep 2018 17:18:04 +0200
Subject: [PATCH 024/390] Fix missing import
---
cura/PrinterOutput/FirmwareUpdater.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index ca5997bfb1..17089ad17f 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -7,6 +7,7 @@ from UM.Resources import Resources
from cura.PrinterOutputDevice import PrinterOutputDevice
from enum import IntEnum
+from threading import Thread
class FirmwareUpdater(QObject):
firmwareProgressChanged = pyqtSignal()
From 43b4ca30440a56b843a538ad464e15fccb2fc5f5 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Sun, 2 Sep 2018 18:02:33 +0200
Subject: [PATCH 025/390] Fix code-style
---
cura/PrinterOutput/FirmwareUpdater.py | 2 +-
plugins/USBPrinting/USBPrinterOutputDevice.py | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index 17089ad17f..e7ffc2a2b5 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -16,7 +16,7 @@ class FirmwareUpdater(QObject):
def __init__(self, output_device: PrinterOutputDevice) -> None:
self._output_device = output_device
- self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True)
+ self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
self._firmware_view = None
self._firmware_location = None
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 18373d34d2..b04b51314c 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -55,7 +55,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._all_baud_rates = [115200, 250000, 230400, 57600, 38400, 19200, 9600]
# Instead of using a timer, we really need the update to be as a thread, as reading from serial can block.
- self._update_thread = Thread(target=self._update, daemon = True)
+ self._update_thread = Thread(target=self._update, daemon=True)
self._last_temperature_request = None # type: Optional[int]
@@ -358,7 +358,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if print_job is None:
controller = GenericOutputController(self)
controller.setCanUpdateFirmware(True)
- print_job = PrintJobOutputModel(output_controller = controller, name= CuraApplication.getInstance().getPrintInformation().jobName)
+ print_job = PrintJobOutputModel(output_controller=controller, name=CuraApplication.getInstance().getPrintInformation().jobName)
print_job.updateState("printing")
self._printers[0].updateActivePrintJob(print_job)
From 4a5451576d1894b7eb40bda7f27ac81a20ea6c0f Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Sun, 2 Sep 2018 18:07:30 +0200
Subject: [PATCH 026/390] Update copyright
---
cura/PrinterOutput/PrinterOutputController.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/PrinterOutput/PrinterOutputController.py b/cura/PrinterOutput/PrinterOutputController.py
index eb5f15cceb..dd2276d771 100644
--- a/cura/PrinterOutput/PrinterOutputController.py
+++ b/cura/PrinterOutput/PrinterOutputController.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from UM.Logger import Logger
From 9edf2b5b0bd8f4d22210ea2d3eb85e0a53806fb6 Mon Sep 17 00:00:00 2001
From: KangDroid
Date: Thu, 30 Aug 2018 16:53:07 +0900
Subject: [PATCH 027/390] Re-Enable fullscreen shortcut and add menu on
ViewMenu
---
resources/qml/Actions.qml | 1 +
resources/qml/Menus/ViewMenu.qml | 3 +++
2 files changed, 4 insertions(+)
diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml
index d5572298f7..cc11e609f5 100644
--- a/resources/qml/Actions.qml
+++ b/resources/qml/Actions.qml
@@ -75,6 +75,7 @@ Item
Action
{
id:toggleFullScreenAction
+ shortcut: StandardKey.FullScreen;
text: catalog.i18nc("@action:inmenu","Toggle Fu&ll Screen");
iconName: "view-fullscreen";
}
diff --git a/resources/qml/Menus/ViewMenu.qml b/resources/qml/Menus/ViewMenu.qml
index 6bbb0b1e2e..9a2e603673 100644
--- a/resources/qml/Menus/ViewMenu.qml
+++ b/resources/qml/Menus/ViewMenu.qml
@@ -73,4 +73,7 @@ Menu
MenuSeparator {}
MenuItem { action: Cura.Actions.expandSidebar; }
+
+ MenuSeparator {}
+ MenuItem { action: Cura.Actions.toggleFullScreen; }
}
From d01ec7872d66dc865f5991885131f25659f8ce13 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Mon, 10 Sep 2018 12:13:35 +0200
Subject: [PATCH 028/390] Fix quality lookup
CURA-5694
For a machine, if it has extruder-specific qualities, when we look up
extruder qualities, we should NOT fall back to use the global qualities.
---
cura/Machines/QualityManager.py | 31 ++++++++++++++++++++-----------
cura/Settings/GlobalStack.py | 3 +++
2 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py
index 580d52b089..4ae58a71b2 100644
--- a/cura/Machines/QualityManager.py
+++ b/cura/Machines/QualityManager.py
@@ -200,14 +200,19 @@ class QualityManager(QObject):
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
# This determines if we should only get the global qualities for the global stack and skip the global qualities for the extruder stacks
- has_variants = machine.getHasVariants()
- has_materials = machine.getHasMaterials()
- has_variants_or_materials = has_variants or has_materials
+ has_machine_specific_qualities = machine.getHasMachineQuality()
# To find the quality container for the GlobalStack, check in the following fall-back manner:
# (1) the machine-specific node
# (2) the generic node
machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id)
+ # Check if this machine has specific quality profiles for its extruders, if so, when looking up extruder
+ # qualities, we should not fall back to use the global qualities.
+ has_extruder_specific_qualities = False
+ if machine_node:
+ if machine_node.children_map:
+ has_extruder_specific_qualities = True
+
default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(self._default_machine_definition_id)
nodes_to_check = [machine_node, default_machine_node]
@@ -215,12 +220,10 @@ class QualityManager(QObject):
quality_group_dict = {}
for node in nodes_to_check:
if node and node.quality_type_map:
- # Only include global qualities
- if has_variants_or_materials:
- quality_node = list(node.quality_type_map.values())[0]
- is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
- if not is_global_quality:
- continue
+ quality_node = list(node.quality_type_map.values())[0]
+ is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
+ if not is_global_quality:
+ continue
for quality_type, quality_node in node.quality_type_map.items():
quality_group = QualityGroup(quality_node.metadata["name"], quality_type)
@@ -302,9 +305,9 @@ class QualityManager(QObject):
else:
nodes_to_check += [default_machine_node]
- for node in nodes_to_check:
+ for node_idx, node in enumerate(nodes_to_check):
if node and node.quality_type_map:
- if has_variants_or_materials:
+ if has_extruder_specific_qualities:
# Only include variant qualities; skip non global qualities
quality_node = list(node.quality_type_map.values())[0]
is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
@@ -320,6 +323,12 @@ class QualityManager(QObject):
if position not in quality_group.nodes_for_extruders:
quality_group.nodes_for_extruders[position] = quality_node
+ # If the machine has its own specific qualities, for extruders, it should skip the global qualities
+ # and use the material/variant specific qualities.
+ if has_extruder_specific_qualities:
+ if node_idx == len(nodes_to_check) - 1:
+ break
+
# Update availabilities for each quality group
self._updateQualityGroupsAvailability(machine, quality_group_dict.values())
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index d7ebe804f4..e2f7df41ea 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -196,6 +196,9 @@ class GlobalStack(CuraContainerStack):
def getHasVariants(self) -> bool:
return parseBool(self.getMetaDataEntry("has_variants", False))
+ def getHasMachineQuality(self) -> bool:
+ return parseBool(self.getMetaDataEntry("has_machine_quality", False))
+
## private:
global_stack_mime = MimeType(
From 42a523cb001729ad657db6279981b5e3eb4f38df Mon Sep 17 00:00:00 2001
From: Sacha Telgenhof Oude Koehorst
Date: Sun, 9 Sep 2018 16:16:01 +0900
Subject: [PATCH 029/390] Add single extruder definition for Ender-3.
---
.../definitions/creality_ender3.def.json | 8 +++----
.../creality_ender3_extruder_0.def.json | 22 +++++++++++++++++++
2 files changed, 26 insertions(+), 4 deletions(-)
create mode 100644 resources/extruders/creality_ender3_extruder_0.def.json
diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json
index 4ae4d4ad93..eac331dc21 100755
--- a/resources/definitions/creality_ender3.def.json
+++ b/resources/definitions/creality_ender3.def.json
@@ -8,7 +8,10 @@
"manufacturer": "Creality3D",
"file_formats": "text/x-gcode",
"platform": "creality_ender3_platform.stl",
- "preferred_quality_type": "draft"
+ "preferred_quality_type": "draft",
+ "machine_extruder_trains": {
+ "0": "creality_ender3_extruder_0"
+ }
},
"overrides": {
"machine_name": {
@@ -37,9 +40,6 @@
[30, 34]
]
},
- "material_diameter": {
- "default_value": 1.75
- },
"acceleration_enabled": {
"default_value": true
},
diff --git a/resources/extruders/creality_ender3_extruder_0.def.json b/resources/extruders/creality_ender3_extruder_0.def.json
new file mode 100644
index 0000000000..d5ec01a713
--- /dev/null
+++ b/resources/extruders/creality_ender3_extruder_0.def.json
@@ -0,0 +1,22 @@
+{
+ "id": "creality_ender3_extruder_0",
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "creality_ender3",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": {
+ "default_value": 0
+ },
+ "machine_nozzle_size": {
+ "default_value": 0.4
+ },
+ "material_diameter": {
+ "default_value": 1.75
+ }
+ }
+}
\ No newline at end of file
From 5ca5aacbeee9c3aaa466238179d67d843d83e955 Mon Sep 17 00:00:00 2001
From: Sacha Telgenhof Oude Koehorst
Date: Mon, 10 Sep 2018 21:46:26 +0900
Subject: [PATCH 030/390] Removed layer_height override as it isn't needed.
Only the initial layer height needs to be overridden.
---
resources/definitions/creality_ender3.def.json | 3 ---
1 file changed, 3 deletions(-)
diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json
index eac331dc21..2c9bfa04d0 100755
--- a/resources/definitions/creality_ender3.def.json
+++ b/resources/definitions/creality_ender3.def.json
@@ -55,9 +55,6 @@
"jerk_travel": {
"default_value": 20
},
- "layer_height": {
- "default_value": 0.15
- },
"layer_height_0": {
"default_value": 0.2
},
From e7d9f0ce450ee975991f34f946cbc6e7627245ee Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 10 Sep 2018 15:00:33 +0200
Subject: [PATCH 031/390] Added typing for various setting classes
---
cura/CuraApplication.py | 18 ++--
cura/Machines/ContainerNode.py | 19 ++--
cura/Machines/MaterialGroup.py | 4 +-
cura/Machines/MaterialManager.py | 94 ++++++++++---------
cura/Machines/MaterialNode.py | 12 ++-
cura/Machines/Models/BaseMaterialsModel.py | 2 +-
.../Machines/Models/FavoriteMaterialsModel.py | 2 +-
cura/Machines/Models/GenericMaterialsModel.py | 2 +-
cura/Machines/Models/MaterialBrandsModel.py | 8 +-
cura/Machines/QualityChangesGroup.py | 2 +-
cura/Machines/QualityGroup.py | 3 +-
cura/Machines/QualityManager.py | 10 +-
cura/Settings/ContainerManager.py | 77 +++++++++------
cura/Settings/ExtruderManager.py | 17 ++--
cura/Settings/MachineManager.py | 6 +-
plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +-
16 files changed, 162 insertions(+), 116 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 7e5e98adef..8cab6b9d56 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -114,6 +114,8 @@ from UM.FlameProfiler import pyqtSlot
if TYPE_CHECKING:
from plugins.SliceInfoPlugin.SliceInfo import SliceInfo
+ from cura.Machines.MaterialManager import MaterialManager
+ from cura.Machines.QualityManager import QualityManager
numpy.seterr(all = "ignore")
@@ -807,20 +809,20 @@ class CuraApplication(QtApplication):
self._machine_manager = MachineManager(self)
return self._machine_manager
- def getExtruderManager(self, *args):
+ def getExtruderManager(self, *args) -> ExtruderManager:
if self._extruder_manager is None:
self._extruder_manager = ExtruderManager()
return self._extruder_manager
- def getVariantManager(self, *args):
+ def getVariantManager(self, *args) -> VariantManager:
return self._variant_manager
@pyqtSlot(result = QObject)
- def getMaterialManager(self, *args):
+ def getMaterialManager(self, *args) -> "MaterialManager":
return self._material_manager
@pyqtSlot(result = QObject)
- def getQualityManager(self, *args):
+ def getQualityManager(self, *args) -> "QualityManager":
return self._quality_manager
def getObjectsModel(self, *args):
@@ -829,23 +831,23 @@ class CuraApplication(QtApplication):
return self._object_manager
@pyqtSlot(result = QObject)
- def getMultiBuildPlateModel(self, *args):
+ def getMultiBuildPlateModel(self, *args) -> MultiBuildPlateModel:
if self._multi_build_plate_model is None:
self._multi_build_plate_model = MultiBuildPlateModel(self)
return self._multi_build_plate_model
@pyqtSlot(result = QObject)
- def getBuildPlateModel(self, *args):
+ def getBuildPlateModel(self, *args) -> BuildPlateModel:
if self._build_plate_model is None:
self._build_plate_model = BuildPlateModel(self)
return self._build_plate_model
- def getCuraSceneController(self, *args):
+ def getCuraSceneController(self, *args) -> CuraSceneController:
if self._cura_scene_controller is None:
self._cura_scene_controller = CuraSceneController.createCuraSceneController()
return self._cura_scene_controller
- def getSettingInheritanceManager(self, *args):
+ def getSettingInheritanceManager(self, *args) -> SettingInheritanceManager:
if self._setting_inheritance_manager is None:
self._setting_inheritance_manager = SettingInheritanceManager.createSettingInheritanceManager()
return self._setting_inheritance_manager
diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py
index 944579e354..0d44c7c4a3 100644
--- a/cura/Machines/ContainerNode.py
+++ b/cura/Machines/ContainerNode.py
@@ -24,29 +24,34 @@ if TYPE_CHECKING:
# This is used in Variant, Material, and Quality Managers.
#
class ContainerNode:
- __slots__ = ("metadata", "container", "children_map")
+ __slots__ = ("_metadata", "container", "children_map")
def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
- self.metadata = metadata
+ self._metadata = metadata
self.container = None
- self.children_map = OrderedDict() #type: OrderedDict[str, Union[QualityGroup, ContainerNode]]
+ self.children_map = OrderedDict() # type: ignore # This is because it's children are supposed to override it.
## Get an entry value from the metadata
def getMetaDataEntry(self, entry: str, default: Any = None) -> Any:
- if self.metadata is None:
+ if self._metadata is None:
return default
- return self.metadata.get(entry, default)
+ return self._metadata.get(entry, default)
+
+ def getMetadata(self) -> Dict[str, Any]:
+ if self._metadata is None:
+ return {}
+ return self._metadata
def getChildNode(self, child_key: str) -> Optional["ContainerNode"]:
return self.children_map.get(child_key)
def getContainer(self) -> Optional["InstanceContainer"]:
- if self.metadata is None:
+ if self._metadata is None:
Logger.log("e", "Cannot get container for a ContainerNode without metadata.")
return None
if self.container is None:
- container_id = self.metadata["id"]
+ container_id = self._metadata["id"]
from UM.Settings.ContainerRegistry import ContainerRegistry
container_list = ContainerRegistry.getInstance().findInstanceContainers(id = container_id)
if not container_list:
diff --git a/cura/Machines/MaterialGroup.py b/cura/Machines/MaterialGroup.py
index 8a73796a7a..e05647e674 100644
--- a/cura/Machines/MaterialGroup.py
+++ b/cura/Machines/MaterialGroup.py
@@ -24,8 +24,8 @@ class MaterialGroup:
def __init__(self, name: str, root_material_node: "MaterialNode") -> None:
self.name = name
self.is_read_only = False
- self.root_material_node = root_material_node # type: MaterialNode
- self.derived_material_node_list = [] # type: List[MaterialNode]
+ self.root_material_node = root_material_node # type: MaterialNode
+ self.derived_material_node_list = [] # type: List[MaterialNode]
def __str__(self) -> str:
return "%s[%s]" % (self.__class__.__name__, self.name)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index 1463f2e40e..98a4eeb330 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -4,8 +4,7 @@
from collections import defaultdict, OrderedDict
import copy
import uuid
-import json
-from typing import Dict, Optional, TYPE_CHECKING
+from typing import Dict, Optional, TYPE_CHECKING, Any, Set, List, cast, Tuple
from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot
@@ -39,26 +38,35 @@ if TYPE_CHECKING:
#
class MaterialManager(QObject):
- materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated.
- favoritesUpdated = pyqtSignal() # Emitted whenever the favorites are changed
+ materialsUpdated = pyqtSignal() # Emitted whenever the material lookup tables are updated.
+ favoritesUpdated = pyqtSignal() # Emitted whenever the favorites are changed
def __init__(self, container_registry, parent = None):
super().__init__(parent)
self._application = Application.getInstance()
self._container_registry = container_registry # type: ContainerRegistry
- self._fallback_materials_map = dict() # material_type -> generic material metadata
- self._material_group_map = dict() # root_material_id -> MaterialGroup
- self._diameter_machine_nozzle_buildplate_material_map = dict() # approximate diameter str -> dict(machine_definition_id -> MaterialNode)
+ # Material_type -> generic material metadata
+ self._fallback_materials_map = dict() # type: Dict[str, Dict[str, Any]]
+
+ # Root_material_id -> MaterialGroup
+ self._material_group_map = dict() # type: Dict[str, MaterialGroup]
+
+ # Approximate diameter str
+ self._diameter_machine_nozzle_buildplate_material_map = dict() # type: Dict[str, Dict[str, MaterialNode]]
# We're using these two maps to convert between the specific diameter material id and the generic material id
# because the generic material ids are used in qualities and definitions, while the specific diameter material is meant
# i.e. generic_pla -> generic_pla_175
- self._material_diameter_map = defaultdict(dict) # root_material_id -> approximate diameter str -> root_material_id for that diameter
- self._diameter_material_map = dict() # material id including diameter (generic_pla_175) -> material root id (generic_pla)
+ # root_material_id -> approximate diameter str -> root_material_id for that diameter
+ self._material_diameter_map = defaultdict(dict) # type: Dict[str, Dict[str, str]]
+
+ # Material id including diameter (generic_pla_175) -> material root id (generic_pla)
+ self._diameter_material_map = dict() # type: Dict[str, str]
# This is used in Legacy UM3 send material function and the material management page.
- self._guid_material_groups_map = defaultdict(list) # GUID -> a list of material_groups
+ # GUID -> a list of material_groups
+ self._guid_material_groups_map = defaultdict(list) # type: Dict[str, List[MaterialGroup]]
# The machine definition ID for the non-machine-specific materials.
# This is used as the last fallback option if the given machine-specific material(s) cannot be found.
@@ -77,15 +85,15 @@ class MaterialManager(QObject):
self._container_registry.containerAdded.connect(self._onContainerMetadataChanged)
self._container_registry.containerRemoved.connect(self._onContainerMetadataChanged)
- self._favorites = set()
+ self._favorites = set() # type: Set[str]
- def initialize(self):
+ def initialize(self) -> None:
# Find all materials and put them in a matrix for quick search.
material_metadatas = {metadata["id"]: metadata for metadata in
self._container_registry.findContainersMetadata(type = "material") if
- metadata.get("GUID")}
+ metadata.get("GUID")} # type: Dict[str, Dict[str, Any]]
- self._material_group_map = dict()
+ self._material_group_map = dict() # type: Dict[str, MaterialGroup]
# Map #1
# root_material_id -> MaterialGroup
@@ -94,7 +102,7 @@ class MaterialManager(QObject):
if material_id == "empty_material":
continue
- root_material_id = material_metadata.get("base_file")
+ root_material_id = material_metadata.get("base_file", "")
if root_material_id not in self._material_group_map:
self._material_group_map[root_material_id] = MaterialGroup(root_material_id, MaterialNode(material_metadatas[root_material_id]))
self._material_group_map[root_material_id].is_read_only = self._container_registry.isReadOnly(root_material_id)
@@ -110,26 +118,26 @@ class MaterialManager(QObject):
# Map #1.5
# GUID -> material group list
- self._guid_material_groups_map = defaultdict(list)
+ self._guid_material_groups_map = defaultdict(list) # type: Dict[str, List[MaterialGroup]]
for root_material_id, material_group in self._material_group_map.items():
- guid = material_group.root_material_node.metadata["GUID"]
+ guid = material_group.root_material_node.getMetaDataEntry("GUID", "")
self._guid_material_groups_map[guid].append(material_group)
# Map #2
# Lookup table for material type -> fallback material metadata, only for read-only materials
- grouped_by_type_dict = dict()
+ grouped_by_type_dict = dict() # type: Dict[str, Any]
material_types_without_fallback = set()
for root_material_id, material_node in self._material_group_map.items():
- material_type = material_node.root_material_node.metadata["material"]
+ material_type = material_node.root_material_node.getMetaDataEntry("material", "")
if material_type not in grouped_by_type_dict:
grouped_by_type_dict[material_type] = {"generic": None,
"others": []}
material_types_without_fallback.add(material_type)
- brand = material_node.root_material_node.metadata["brand"]
+ brand = material_node.root_material_node.getMetaDataEntry("brand", "")
if brand.lower() == "generic":
to_add = True
if material_type in grouped_by_type_dict:
- diameter = material_node.root_material_node.metadata.get("approximate_diameter")
+ diameter = material_node.root_material_node.getMetaDataEntry("approximate_diameter", "")
if diameter != self._default_approximate_diameter_for_quality_search:
to_add = False # don't add if it's not the default diameter
@@ -138,7 +146,7 @@ class MaterialManager(QObject):
# - if it's in the list, it means that is a new material without fallback
# - if it is not, then it is a custom material with a fallback material (parent)
if material_type in material_types_without_fallback:
- grouped_by_type_dict[material_type] = material_node.root_material_node.metadata
+ grouped_by_type_dict[material_type] = material_node.root_material_node._metadata
material_types_without_fallback.remove(material_type)
# Remove the materials that have no fallback materials
@@ -155,15 +163,15 @@ class MaterialManager(QObject):
self._diameter_material_map = dict()
# Group the material IDs by the same name, material, brand, and color but with different diameters.
- material_group_dict = dict()
+ material_group_dict = dict() # type: Dict[Tuple[Any], Dict[str, str]]
keys_to_fetch = ("name", "material", "brand", "color")
for root_material_id, machine_node in self._material_group_map.items():
- root_material_metadata = machine_node.root_material_node.metadata
+ root_material_metadata = machine_node.root_material_node._metadata
- key_data = []
+ key_data_list = [] # type: List[Any]
for key in keys_to_fetch:
- key_data.append(root_material_metadata.get(key))
- key_data = tuple(key_data)
+ key_data_list.append(machine_node.root_material_node.getMetaDataEntry(key))
+ key_data = cast(Tuple[Any], tuple(key_data_list)) # type: Tuple[Any]
# If the key_data doesn't exist, it doesn't matter if the material is read only...
if key_data not in material_group_dict:
@@ -172,8 +180,8 @@ class MaterialManager(QObject):
# ...but if key_data exists, we just overwrite it if the material is read only, otherwise we skip it
if not machine_node.is_read_only:
continue
- approximate_diameter = root_material_metadata.get("approximate_diameter")
- material_group_dict[key_data][approximate_diameter] = root_material_metadata["id"]
+ approximate_diameter = machine_node.root_material_node.getMetaDataEntry("approximate_diameter", "")
+ material_group_dict[key_data][approximate_diameter] = machine_node.root_material_node.getMetaDataEntry("id", "")
# Map [root_material_id][diameter] -> root_material_id for this diameter
for data_dict in material_group_dict.values():
@@ -192,7 +200,7 @@ class MaterialManager(QObject):
# Map #4
# "machine" -> "nozzle name" -> "buildplate name" -> "root material ID" -> specific material InstanceContainer
- self._diameter_machine_nozzle_buildplate_material_map = dict()
+ self._diameter_machine_nozzle_buildplate_material_map = dict() # type: Dict[str, Dict[str, MaterialNode]]
for material_metadata in material_metadatas.values():
self.__addMaterialMetadataIntoLookupTree(material_metadata)
@@ -203,7 +211,7 @@ class MaterialManager(QObject):
self._favorites.add(item)
self.favoritesUpdated.emit()
- def __addMaterialMetadataIntoLookupTree(self, material_metadata: dict) -> None:
+ def __addMaterialMetadataIntoLookupTree(self, material_metadata: Dict[str, Any]) -> None:
material_id = material_metadata["id"]
# We don't store empty material in the lookup tables
@@ -290,7 +298,7 @@ class MaterialManager(QObject):
return self._material_diameter_map.get(root_material_id, {}).get(approximate_diameter, root_material_id)
def getRootMaterialIDWithoutDiameter(self, root_material_id: str) -> str:
- return self._diameter_material_map.get(root_material_id)
+ return self._diameter_material_map.get(root_material_id, "")
def getMaterialGroupListByGUID(self, guid: str) -> Optional[list]:
return self._guid_material_groups_map.get(guid)
@@ -351,7 +359,7 @@ class MaterialManager(QObject):
# A convenience function to get available materials for the given machine with the extruder position.
#
def getAvailableMaterialsForMachineExtruder(self, machine: "GlobalStack",
- extruder_stack: "ExtruderStack") -> Optional[dict]:
+ extruder_stack: "ExtruderStack") -> Optional[Dict[str, MaterialNode]]:
buildplate_name = machine.getBuildplateName()
nozzle_name = None
if extruder_stack.variant.getId() != "empty_variant":
@@ -368,7 +376,7 @@ class MaterialManager(QObject):
# 2. cannot find any material InstanceContainers with the given settings.
#
def getMaterialNode(self, machine_definition_id: str, nozzle_name: Optional[str],
- buildplate_name: Optional[str], diameter: float, root_material_id: str) -> Optional["InstanceContainer"]:
+ buildplate_name: Optional[str], diameter: float, root_material_id: str) -> Optional["MaterialNode"]:
# round the diameter to get the approximate diameter
rounded_diameter = str(round(diameter))
if rounded_diameter not in self._diameter_machine_nozzle_buildplate_material_map:
@@ -377,7 +385,7 @@ class MaterialManager(QObject):
return None
# If there are nozzle materials, get the nozzle-specific material
- machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[rounded_diameter]
+ machine_nozzle_buildplate_material_map = self._diameter_machine_nozzle_buildplate_material_map[rounded_diameter] # type: Dict[str, MaterialNode]
machine_node = machine_nozzle_buildplate_material_map.get(machine_definition_id)
nozzle_node = None
buildplate_node = None
@@ -426,7 +434,7 @@ class MaterialManager(QObject):
# Look at the guid to material dictionary
root_material_id = None
for material_group in self._guid_material_groups_map[material_guid]:
- root_material_id = material_group.root_material_node.metadata["id"]
+ root_material_id = cast(str, material_group.root_material_node.getMetaDataEntry("id", ""))
break
if not root_material_id:
@@ -502,7 +510,7 @@ class MaterialManager(QObject):
# Sets the new name for the given material.
#
@pyqtSlot("QVariant", str)
- def setMaterialName(self, material_node: "MaterialNode", name: str):
+ def setMaterialName(self, material_node: "MaterialNode", name: str) -> None:
root_material_id = material_node.getMetaDataEntry("base_file")
if root_material_id is None:
return
@@ -520,7 +528,7 @@ class MaterialManager(QObject):
# Removes the given material.
#
@pyqtSlot("QVariant")
- def removeMaterial(self, material_node: "MaterialNode"):
+ def removeMaterial(self, material_node: "MaterialNode") -> None:
root_material_id = material_node.getMetaDataEntry("base_file")
if root_material_id is not None:
self.removeMaterialByRootId(root_material_id)
@@ -530,8 +538,8 @@ class MaterialManager(QObject):
# Returns the root material ID of the duplicated material if successful.
#
@pyqtSlot("QVariant", result = str)
- def duplicateMaterial(self, material_node, new_base_id = None, new_metadata = None) -> Optional[str]:
- root_material_id = material_node.metadata["base_file"]
+ def duplicateMaterial(self, material_node: MaterialNode, new_base_id: Optional[str] = None, new_metadata: Dict[str, Any] = None) -> Optional[str]:
+ root_material_id = cast(str, material_node.getMetaDataEntry("base_file", ""))
material_group = self.getMaterialGroup(root_material_id)
if not material_group:
@@ -586,7 +594,7 @@ class MaterialManager(QObject):
#
# Create a new material by cloning Generic PLA for the current material diameter and generate a new GUID.
- #
+ # Returns the ID of the newly created material.
@pyqtSlot(result = str)
def createMaterial(self) -> str:
from UM.i18n import i18nCatalog
@@ -619,7 +627,7 @@ class MaterialManager(QObject):
return new_id
@pyqtSlot(str)
- def addFavorite(self, root_material_id: str):
+ def addFavorite(self, root_material_id: str) -> None:
self._favorites.add(root_material_id)
self.favoritesUpdated.emit()
@@ -628,7 +636,7 @@ class MaterialManager(QObject):
self._application.saveSettings()
@pyqtSlot(str)
- def removeFavorite(self, root_material_id: str):
+ def removeFavorite(self, root_material_id: str) -> None:
self._favorites.remove(root_material_id)
self.favoritesUpdated.emit()
diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py
index 04423d7b2c..a4dcb0564f 100644
--- a/cura/Machines/MaterialNode.py
+++ b/cura/Machines/MaterialNode.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Dict
-
+from typing import Optional, Dict, Any
+from collections import OrderedDict
from .ContainerNode import ContainerNode
@@ -14,6 +14,12 @@ from .ContainerNode import ContainerNode
class MaterialNode(ContainerNode):
__slots__ = ("material_map", "children_map")
- def __init__(self, metadata: Optional[dict] = None) -> None:
+ def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
super().__init__(metadata = metadata)
self.material_map = {} # type: Dict[str, MaterialNode] # material_root_id -> material_node
+
+ # We overide this as we want to indicate that MaterialNodes can only contain other material nodes.
+ self.children_map = OrderedDict() # type: OrderedDict[str, "MaterialNode"]
+
+ def getChildNode(self, child_key: str) -> Optional["MaterialNode"]:
+ return self.children_map.get(child_key)
\ No newline at end of file
diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py
index 1b20e1188c..9799a35ed1 100644
--- a/cura/Machines/Models/BaseMaterialsModel.py
+++ b/cura/Machines/Models/BaseMaterialsModel.py
@@ -113,7 +113,7 @@ class BaseMaterialsModel(ListModel):
## This is another convenience function which is shared by all material
# models so it's put here to avoid having so much duplicated code.
def _createMaterialItem(self, root_material_id, container_node):
- metadata = container_node.metadata
+ metadata = container_node.getMetadata()
item = {
"root_material_id": root_material_id,
"id": metadata["id"],
diff --git a/cura/Machines/Models/FavoriteMaterialsModel.py b/cura/Machines/Models/FavoriteMaterialsModel.py
index be3f0f605f..18fe310c44 100644
--- a/cura/Machines/Models/FavoriteMaterialsModel.py
+++ b/cura/Machines/Models/FavoriteMaterialsModel.py
@@ -23,7 +23,7 @@ class FavoriteMaterialsModel(BaseMaterialsModel):
item_list = []
for root_material_id, container_node in self._available_materials.items():
- metadata = container_node.metadata
+ metadata = container_node.getMetadata()
# Do not include the materials from a to-be-removed package
if bool(metadata.get("removed", False)):
diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py
index 27e6fdfd7c..c276b865bf 100644
--- a/cura/Machines/Models/GenericMaterialsModel.py
+++ b/cura/Machines/Models/GenericMaterialsModel.py
@@ -23,7 +23,7 @@ class GenericMaterialsModel(BaseMaterialsModel):
item_list = []
for root_material_id, container_node in self._available_materials.items():
- metadata = container_node.metadata
+ metadata = container_node.getMetadata()
# Do not include the materials from a to-be-removed package
if bool(metadata.get("removed", False)):
diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py
index 3f917abb16..f8d92dc65f 100644
--- a/cura/Machines/Models/MaterialBrandsModel.py
+++ b/cura/Machines/Models/MaterialBrandsModel.py
@@ -41,21 +41,19 @@ class MaterialBrandsModel(BaseMaterialsModel):
# Part 1: Generate the entire tree of brands -> material types -> spcific materials
for root_material_id, container_node in self._available_materials.items():
- metadata = container_node.metadata
-
# Do not include the materials from a to-be-removed package
- if bool(metadata.get("removed", False)):
+ if bool(container_node.getMetaDataEntry("removed", False)):
continue
# Add brands we haven't seen yet to the dict, skipping generics
- brand = metadata["brand"]
+ brand = container_node.getMetaDataEntry("brand", "")
if brand.lower() == "generic":
continue
if brand not in brand_group_dict:
brand_group_dict[brand] = {}
# Add material types we haven't seen yet to the dict
- material_type = metadata["material"]
+ material_type = container_node.getMetaDataEntry("material", "")
if material_type not in brand_group_dict[brand]:
brand_group_dict[brand][material_type] = []
diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py
index 2d0e655ed8..3dcf2ab1c8 100644
--- a/cura/Machines/QualityChangesGroup.py
+++ b/cura/Machines/QualityChangesGroup.py
@@ -17,7 +17,7 @@ class QualityChangesGroup(QualityGroup):
super().__init__(name, quality_type, parent)
self._container_registry = Application.getInstance().getContainerRegistry()
- def addNode(self, node: "QualityNode"):
+ def addNode(self, node: "QualityNode") -> None:
extruder_position = node.getMetaDataEntry("position")
if extruder_position is None and self.node_for_global is not None or extruder_position in self.nodes_for_extruders: #We would be overwriting another node.
diff --git a/cura/Machines/QualityGroup.py b/cura/Machines/QualityGroup.py
index 90ef63af51..535ba453f8 100644
--- a/cura/Machines/QualityGroup.py
+++ b/cura/Machines/QualityGroup.py
@@ -6,6 +6,7 @@ from typing import Dict, Optional, List, Set
from PyQt5.QtCore import QObject, pyqtSlot
from cura.Machines.ContainerNode import ContainerNode
+
#
# A QualityGroup represents a group of containers that must be applied to each ContainerStack when it's used.
# Some concrete examples are Quality and QualityChanges: when we select quality type "normal", this quality type
@@ -34,7 +35,7 @@ class QualityGroup(QObject):
return self.name
def getAllKeys(self) -> Set[str]:
- result = set() #type: Set[str]
+ result = set() # type: Set[str]
for node in [self.node_for_global] + list(self.nodes_for_extruders.values()):
if node is None:
continue
diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py
index 4ae58a71b2..e081d4db3e 100644
--- a/cura/Machines/QualityManager.py
+++ b/cura/Machines/QualityManager.py
@@ -221,12 +221,12 @@ class QualityManager(QObject):
for node in nodes_to_check:
if node and node.quality_type_map:
quality_node = list(node.quality_type_map.values())[0]
- is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
+ is_global_quality = parseBool(quality_node.getMetaDataEntry("global_quality", False))
if not is_global_quality:
continue
for quality_type, quality_node in node.quality_type_map.items():
- quality_group = QualityGroup(quality_node.metadata["name"], quality_type)
+ quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type)
quality_group.node_for_global = quality_node
quality_group_dict[quality_type] = quality_group
break
@@ -310,13 +310,13 @@ class QualityManager(QObject):
if has_extruder_specific_qualities:
# Only include variant qualities; skip non global qualities
quality_node = list(node.quality_type_map.values())[0]
- is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
+ is_global_quality = parseBool(quality_node.getMetaDataEntry("global_quality", False))
if is_global_quality:
continue
for quality_type, quality_node in node.quality_type_map.items():
if quality_type not in quality_group_dict:
- quality_group = QualityGroup(quality_node.metadata["name"], quality_type)
+ quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type)
quality_group_dict[quality_type] = quality_group
quality_group = quality_group_dict[quality_type]
@@ -350,7 +350,7 @@ class QualityManager(QObject):
for node in nodes_to_check:
if node and node.quality_type_map:
for quality_type, quality_node in node.quality_type_map.items():
- quality_group = QualityGroup(quality_node.metadata["name"], quality_type)
+ quality_group = QualityGroup(quality_node.getMetaDataEntry("name", ""), quality_type)
quality_group.node_for_global = quality_node
quality_group_dict[quality_type] = quality_group
break
diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py
index 2b8ff4a234..e1a1495dac 100644
--- a/cura/Settings/ContainerManager.py
+++ b/cura/Settings/ContainerManager.py
@@ -4,12 +4,12 @@
import os
import urllib.parse
import uuid
-from typing import Any
-from typing import Dict, Union, Optional
+from typing import Dict, Union, Any, TYPE_CHECKING, List
-from PyQt5.QtCore import QObject, QUrl, QVariant
+from PyQt5.QtCore import QObject, QUrl
from PyQt5.QtWidgets import QMessageBox
+
from UM.i18n import i18nCatalog
from UM.FlameProfiler import pyqtSlot
from UM.Logger import Logger
@@ -21,6 +21,18 @@ from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Settings.InstanceContainer import InstanceContainer
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+ from cura.Machines.ContainerNode import ContainerNode
+ from cura.Machines.MaterialNode import MaterialNode
+ from cura.Machines.QualityChangesGroup import QualityChangesGroup
+ from UM.PluginRegistry import PluginRegistry
+ from UM.Settings.ContainerRegistry import ContainerRegistry
+ from cura.Settings.MachineManager import MachineManager
+ from cura.Machines.MaterialManager import MaterialManager
+ from cura.Machines.QualityManager import QualityManager
+
catalog = i18nCatalog("cura")
@@ -31,20 +43,20 @@ catalog = i18nCatalog("cura")
# when a certain action happens. This can be done through this class.
class ContainerManager(QObject):
- def __init__(self, application):
+ def __init__(self, application: "CuraApplication") -> None:
if ContainerManager.__instance is not None:
raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__)
ContainerManager.__instance = self
super().__init__(parent = application)
- self._application = application
- self._plugin_registry = self._application.getPluginRegistry()
- self._container_registry = self._application.getContainerRegistry()
- self._machine_manager = self._application.getMachineManager()
- self._material_manager = self._application.getMaterialManager()
- self._quality_manager = self._application.getQualityManager()
- self._container_name_filters = {} # type: Dict[str, Dict[str, Any]]
+ self._application = application # type: CuraApplication
+ self._plugin_registry = self._application.getPluginRegistry() # type: PluginRegistry
+ self._container_registry = self._application.getContainerRegistry() # type: ContainerRegistry
+ self._machine_manager = self._application.getMachineManager() # type: MachineManager
+ self._material_manager = self._application.getMaterialManager() # type: MaterialManager
+ self._quality_manager = self._application.getQualityManager() # type: QualityManager
+ self._container_name_filters = {} # type: Dict[str, Dict[str, Any]]
@pyqtSlot(str, str, result=str)
def getContainerMetaDataEntry(self, container_id: str, entry_names: str) -> str:
@@ -69,21 +81,23 @@ class ContainerManager(QObject):
# by using "/" as a separator. For example, to change an entry "foo" in a
# dictionary entry "bar", you can specify "bar/foo" as entry name.
#
- # \param container_id \type{str} The ID of the container to change.
+ # \param container_node \type{ContainerNode}
# \param entry_name \type{str} The name of the metadata entry to change.
# \param entry_value The new value of the entry.
#
- # \return True if successful, False if not.
# TODO: This is ONLY used by MaterialView for material containers. Maybe refactor this.
# Update: In order for QML to use objects and sub objects, those (sub) objects must all be QObject. Is that what we want?
@pyqtSlot("QVariant", str, str)
- def setContainerMetaDataEntry(self, container_node, entry_name, entry_value):
- root_material_id = container_node.metadata["base_file"]
+ def setContainerMetaDataEntry(self, container_node: "ContainerNode", entry_name: str, entry_value: str) -> bool:
+ root_material_id = container_node.getMetaDataEntry("base_file", "")
if self._container_registry.isReadOnly(root_material_id):
Logger.log("w", "Cannot set metadata of read-only container %s.", root_material_id)
return False
material_group = self._material_manager.getMaterialGroup(root_material_id)
+ if material_group is None:
+ Logger.log("w", "Unable to find material group for: %s.", root_material_id)
+ return False
entries = entry_name.split("/")
entry_name = entries.pop()
@@ -91,11 +105,11 @@ class ContainerManager(QObject):
sub_item_changed = False
if entries:
root_name = entries.pop(0)
- root = material_group.root_material_node.metadata.get(root_name)
+ root = material_group.root_material_node.getMetaDataEntry(root_name)
item = root
for _ in range(len(entries)):
- item = item.get(entries.pop(0), { })
+ item = item.get(entries.pop(0), {})
if item[entry_name] != entry_value:
sub_item_changed = True
@@ -109,9 +123,10 @@ class ContainerManager(QObject):
container.setMetaDataEntry(entry_name, entry_value)
if sub_item_changed: #If it was only a sub-item that has changed then the setMetaDataEntry won't correctly notice that something changed, and we must manually signal that the metadata changed.
container.metaDataChanged.emit(container)
+ return True
@pyqtSlot(str, result = str)
- def makeUniqueName(self, original_name):
+ def makeUniqueName(self, original_name: str) -> str:
return self._container_registry.uniqueName(original_name)
## Get a list of string that can be used as name filters for a Qt File Dialog
@@ -125,7 +140,7 @@ class ContainerManager(QObject):
#
# \return A string list with name filters.
@pyqtSlot(str, result = "QStringList")
- def getContainerNameFilters(self, type_name):
+ def getContainerNameFilters(self, type_name: str) -> List[str]:
if not self._container_name_filters:
self._updateContainerNameFilters()
@@ -257,7 +272,7 @@ class ContainerManager(QObject):
#
# \return \type{bool} True if successful, False if not.
@pyqtSlot(result = bool)
- def updateQualityChanges(self):
+ def updateQualityChanges(self) -> bool:
global_stack = self._machine_manager.activeMachine
if not global_stack:
return False
@@ -313,10 +328,10 @@ class ContainerManager(QObject):
# \param material_id \type{str} the id of the material for which to get the linked materials.
# \return \type{list} a list of names of materials with the same GUID
@pyqtSlot("QVariant", bool, result = "QStringList")
- def getLinkedMaterials(self, material_node, exclude_self = False):
- guid = material_node.metadata["GUID"]
+ def getLinkedMaterials(self, material_node: "MaterialNode", exclude_self: bool = False):
+ guid = material_node.getMetaDataEntry("GUID", "")
- self_root_material_id = material_node.metadata["base_file"]
+ self_root_material_id = material_node.getMetaDataEntry("base_file")
material_group_list = self._material_manager.getMaterialGroupListByGUID(guid)
linked_material_names = []
@@ -324,15 +339,19 @@ class ContainerManager(QObject):
for material_group in material_group_list:
if exclude_self and material_group.name == self_root_material_id:
continue
- linked_material_names.append(material_group.root_material_node.metadata["name"])
+ linked_material_names.append(material_group.root_material_node.getMetaDataEntry("name", ""))
return linked_material_names
## Unlink a material from all other materials by creating a new GUID
# \param material_id \type{str} the id of the material to create a new GUID for.
@pyqtSlot("QVariant")
- def unlinkMaterial(self, material_node):
+ def unlinkMaterial(self, material_node: "MaterialNode") -> None:
# Get the material group
- material_group = self._material_manager.getMaterialGroup(material_node.metadata["base_file"])
+ material_group = self._material_manager.getMaterialGroup(material_node.getMetaDataEntry("base_file", ""))
+
+ if material_group is None:
+ Logger.log("w", "Unable to find material group for %s", material_node)
+ return
# Generate a new GUID
new_guid = str(uuid.uuid4())
@@ -344,7 +363,7 @@ class ContainerManager(QObject):
if container is not None:
container.setMetaDataEntry("GUID", new_guid)
- def _performMerge(self, merge_into, merge, clear_settings = True):
+ def _performMerge(self, merge_into: InstanceContainer, merge: InstanceContainer, clear_settings: bool = True) -> None:
if merge == merge_into:
return
@@ -400,7 +419,7 @@ class ContainerManager(QObject):
## Import single profile, file_url does not have to end with curaprofile
@pyqtSlot(QUrl, result="QVariantMap")
- def importProfile(self, file_url):
+ def importProfile(self, file_url: QUrl):
if not file_url.isValid():
return
path = file_url.toLocalFile()
@@ -409,7 +428,7 @@ class ContainerManager(QObject):
return self._container_registry.importProfile(path)
@pyqtSlot(QObject, QUrl, str)
- def exportQualityChangesGroup(self, quality_changes_group, file_url: QUrl, file_type: str):
+ def exportQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup", file_url: QUrl, file_type: str) -> None:
if not file_url.isValid():
return
path = file_url.toLocalFile()
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 1003ab5c86..5af22583ed 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -15,7 +15,7 @@ from UM.Settings.SettingFunction import SettingFunction
from UM.Settings.ContainerStack import ContainerStack
from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext
-from typing import Optional, TYPE_CHECKING, Dict, List, Any
+from typing import Optional, TYPE_CHECKING, Dict, List, Any, Union
if TYPE_CHECKING:
from cura.Settings.ExtruderStack import ExtruderStack
@@ -39,9 +39,12 @@ class ExtruderManager(QObject):
self._application = cura.CuraApplication.CuraApplication.getInstance()
# Per machine, a dictionary of extruder container stack IDs. Only for separately defined extruders.
- self._extruder_trains = {} # type: Dict[str, Dict[str, ExtruderStack]]
+ self._extruder_trains = {} # type: Dict[str, Dict[str, "ExtruderStack"]]
self._active_extruder_index = -1 # Indicates the index of the active extruder stack. -1 means no active extruder stack
- self._selected_object_extruders = [] # type: List[ExtruderStack]
+
+ # TODO; I have no idea why this is a union of ID's and extruder stacks. This needs to be fixed at some point.
+ self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]]
+
self._addCurrentMachineExtruders()
Selection.selectionChanged.connect(self.resetSelectedObjectExtruders)
@@ -80,7 +83,7 @@ class ExtruderManager(QObject):
## Gets a dict with the extruder stack ids with the extruder number as the key.
@pyqtProperty("QVariantMap", notify = extrudersChanged)
def extruderIds(self) -> Dict[str, str]:
- extruder_stack_ids = {}
+ extruder_stack_ids = {} # type: Dict[str, str]
global_container_stack = self._application.getGlobalContainerStack()
if global_container_stack:
@@ -115,7 +118,7 @@ class ExtruderManager(QObject):
## Provides a list of extruder IDs used by the current selected objects.
@pyqtProperty("QVariantList", notify = selectedObjectExtrudersChanged)
- def selectedObjectExtruders(self) -> List[str]:
+ def selectedObjectExtruders(self) -> List[Union[str, "ExtruderStack"]]:
if not self._selected_object_extruders:
object_extruders = set()
@@ -140,7 +143,7 @@ class ExtruderManager(QObject):
elif current_extruder_trains:
object_extruders.add(current_extruder_trains[0].getId())
- self._selected_object_extruders = list(object_extruders)
+ self._selected_object_extruders = list(object_extruders) # type: List[Union[str, "ExtruderStack"]]
return self._selected_object_extruders
@@ -149,7 +152,7 @@ class ExtruderManager(QObject):
# This will trigger a recalculation of the extruders used for the
# selection.
def resetSelectedObjectExtruders(self) -> None:
- self._selected_object_extruders = []
+ self._selected_object_extruders = [] # type: List[Union[str, "ExtruderStack"]]
self.selectedObjectExtrudersChanged.emit()
@pyqtSlot(result = QObject)
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index ed543fcee1..28a3e5cd62 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -892,7 +892,11 @@ class MachineManager(QObject):
extruder_nr = node.callDecoration("getActiveExtruderPosition")
if extruder_nr is not None and int(extruder_nr) > extruder_count - 1:
- node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count - 1).getId())
+ extruder = extruder_manager.getExtruderStack(extruder_count - 1)
+ if extruder is not None:
+ node.callDecoration("setActiveExtruder", extruder.getId())
+ else:
+ Logger.log("w", "Could not find extruder to set active.")
# Make sure one of the extruder stacks is active
extruder_manager.setActiveExtruderIndex(0)
diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py
index 6d55e0643d..36a725d148 100755
--- a/plugins/3MFReader/ThreeMFWorkspaceReader.py
+++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py
@@ -934,7 +934,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
root_material_id)
if material_node is not None and material_node.getContainer() is not None:
- extruder_stack.material = material_node.getContainer()
+ extruder_stack.material = material_node.getContainer() # type: InstanceContainer
def _applyChangesToMachine(self, global_stack, extruder_stack_dict):
# Clear all first
From 729d78e14a9880885988e8ea63f24ad5afbe0793 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 10 Sep 2018 16:08:31 +0200
Subject: [PATCH 032/390] Updated another set of typing
---
cura/CuraApplication.py | 15 ++++----
cura/Machines/MachineErrorChecker.py | 12 +++---
cura/Machines/QualityManager.py | 57 +++++++++++++++++-----------
cura/Machines/QualityNode.py | 3 ++
cura/Machines/VariantManager.py | 16 ++++----
5 files changed, 59 insertions(+), 44 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 8cab6b9d56..9e021aaaf1 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -116,6 +116,7 @@ if TYPE_CHECKING:
from plugins.SliceInfoPlugin.SliceInfo import SliceInfo
from cura.Machines.MaterialManager import MaterialManager
from cura.Machines.QualityManager import QualityManager
+ from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer
numpy.seterr(all = "ignore")
@@ -177,12 +178,12 @@ class CuraApplication(QtApplication):
self._machine_action_manager = None
- self.empty_container = None
- self.empty_definition_changes_container = None
- self.empty_variant_container = None
- self.empty_material_container = None
- self.empty_quality_container = None
- self.empty_quality_changes_container = None
+ self.empty_container = None # type: EmptyInstanceContainer
+ self.empty_definition_changes_container = None # type: EmptyInstanceContainer
+ self.empty_variant_container = None # type: EmptyInstanceContainer
+ self.empty_material_container = None # type: EmptyInstanceContainer
+ self.empty_quality_container = None # type: EmptyInstanceContainer
+ self.empty_quality_changes_container = None # type: EmptyInstanceContainer
self._variant_manager = None
self._material_manager = None
@@ -370,7 +371,7 @@ class CuraApplication(QtApplication):
# Add empty variant, material and quality containers.
# Since they are empty, they should never be serialized and instead just programmatically created.
# We need them to simplify the switching between materials.
- self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container
+ self.empty_container = cura.Settings.cura_empty_instance_containers.empty_container # type: EmptyInstanceContainer
self._container_registry.addContainer(
cura.Settings.cura_empty_instance_containers.empty_definition_changes_container)
diff --git a/cura/Machines/MachineErrorChecker.py b/cura/Machines/MachineErrorChecker.py
index 37de4f30ce..06f064315b 100644
--- a/cura/Machines/MachineErrorChecker.py
+++ b/cura/Machines/MachineErrorChecker.py
@@ -50,7 +50,7 @@ class MachineErrorChecker(QObject):
self._error_check_timer.setInterval(100)
self._error_check_timer.setSingleShot(True)
- def initialize(self):
+ def initialize(self) -> None:
self._error_check_timer.timeout.connect(self._rescheduleCheck)
# Reconnect all signals when the active machine gets changed.
@@ -62,7 +62,7 @@ class MachineErrorChecker(QObject):
self._onMachineChanged()
- def _onMachineChanged(self):
+ def _onMachineChanged(self) -> None:
if self._global_stack:
self._global_stack.propertyChanged.disconnect(self.startErrorCheck)
self._global_stack.containersChanged.disconnect(self.startErrorCheck)
@@ -94,7 +94,7 @@ class MachineErrorChecker(QObject):
return self._need_to_check or self._check_in_progress
# Starts the error check timer to schedule a new error check.
- def startErrorCheck(self, *args):
+ def startErrorCheck(self, *args) -> None:
if not self._check_in_progress:
self._need_to_check = True
self.needToWaitForResultChanged.emit()
@@ -103,7 +103,7 @@ class MachineErrorChecker(QObject):
# This function is called by the timer to reschedule a new error check.
# If there is no check in progress, it will start a new one. If there is any, it sets the "_need_to_check" flag
# to notify the current check to stop and start a new one.
- def _rescheduleCheck(self):
+ def _rescheduleCheck(self) -> None:
if self._check_in_progress and not self._need_to_check:
self._need_to_check = True
self.needToWaitForResultChanged.emit()
@@ -128,7 +128,7 @@ class MachineErrorChecker(QObject):
self._start_time = time.time()
Logger.log("d", "New error check scheduled.")
- def _checkStack(self):
+ def _checkStack(self) -> None:
if self._need_to_check:
Logger.log("d", "Need to check for errors again. Discard the current progress and reschedule a check.")
self._check_in_progress = False
@@ -169,7 +169,7 @@ class MachineErrorChecker(QObject):
# Schedule the check for the next key
self._application.callLater(self._checkStack)
- def _setResult(self, result: bool):
+ def _setResult(self, result: bool) -> None:
if result != self._has_errors:
self._has_errors = result
self.hasErrorUpdated.emit()
diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py
index e081d4db3e..99fa71abe6 100644
--- a/cura/Machines/QualityManager.py
+++ b/cura/Machines/QualityManager.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import TYPE_CHECKING, Optional, cast
+from typing import TYPE_CHECKING, Optional, cast, Dict, List
from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot
@@ -20,6 +20,8 @@ if TYPE_CHECKING:
from UM.Settings.DefinitionContainer import DefinitionContainer
from cura.Settings.GlobalStack import GlobalStack
from .QualityChangesGroup import QualityChangesGroup
+ from cura.CuraApplication import CuraApplication
+ from UM.Settings.ContainerRegistry import ContainerRegistry
#
@@ -36,17 +38,20 @@ class QualityManager(QObject):
qualitiesUpdated = pyqtSignal()
- def __init__(self, container_registry, parent = None):
+ def __init__(self, container_registry: "ContainerRegistry", parent = None) -> None:
super().__init__(parent)
- self._application = Application.getInstance()
+ self._application = Application.getInstance() # type: CuraApplication
self._material_manager = self._application.getMaterialManager()
self._container_registry = container_registry
self._empty_quality_container = self._application.empty_quality_container
self._empty_quality_changes_container = self._application.empty_quality_changes_container
- self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # for quality lookup
- self._machine_quality_type_to_quality_changes_dict = {} # for quality_changes lookup
+ # For quality lookup
+ self._machine_nozzle_buildplate_material_quality_type_to_quality_dict = {} # type: Dict[str, QualityNode]
+
+ # For quality_changes lookup
+ self._machine_quality_type_to_quality_changes_dict = {} # type: Dict[str, QualityNode]
self._default_machine_definition_id = "fdmprinter"
@@ -62,7 +67,7 @@ class QualityManager(QObject):
self._update_timer.setSingleShot(True)
self._update_timer.timeout.connect(self._updateMaps)
- def initialize(self):
+ def initialize(self) -> None:
# Initialize the lookup tree for quality profiles with following structure:
# -> -> ->
# ->
@@ -133,13 +138,13 @@ class QualityManager(QObject):
Logger.log("d", "Lookup tables updated.")
self.qualitiesUpdated.emit()
- def _updateMaps(self):
+ def _updateMaps(self) -> None:
self.initialize()
- def _onContainerMetadataChanged(self, container):
+ def _onContainerMetadataChanged(self, container: InstanceContainer) -> None:
self._onContainerChanged(container)
- def _onContainerChanged(self, container):
+ def _onContainerChanged(self, container: InstanceContainer) -> None:
container_type = container.getMetaDataEntry("type")
if container_type not in ("quality", "quality_changes"):
return
@@ -148,7 +153,7 @@ class QualityManager(QObject):
self._update_timer.start()
# Updates the given quality groups' availabilities according to which extruders are being used/ enabled.
- def _updateQualityGroupsAvailability(self, machine: "GlobalStack", quality_group_list):
+ def _updateQualityGroupsAvailability(self, machine: "GlobalStack", quality_group_list) -> None:
used_extruders = set()
for i in range(machine.getProperty("machine_extruder_count", "value")):
if str(i) in machine.extruders and machine.extruders[str(i)].isEnabled:
@@ -196,12 +201,9 @@ class QualityManager(QObject):
# Whether a QualityGroup is available can be unknown via the field QualityGroup.is_available.
# For more details, see QualityGroup.
#
- def getQualityGroups(self, machine: "GlobalStack") -> dict:
+ def getQualityGroups(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
- # This determines if we should only get the global qualities for the global stack and skip the global qualities for the extruder stacks
- has_machine_specific_qualities = machine.getHasMachineQuality()
-
# To find the quality container for the GlobalStack, check in the following fall-back manner:
# (1) the machine-specific node
# (2) the generic node
@@ -214,7 +216,12 @@ class QualityManager(QObject):
has_extruder_specific_qualities = True
default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(self._default_machine_definition_id)
- nodes_to_check = [machine_node, default_machine_node]
+
+ nodes_to_check = [] # type: List[QualityNode]
+ if machine_node is not None:
+ nodes_to_check.append(machine_node)
+ if default_machine_node is not None:
+ nodes_to_check.append(default_machine_node)
# Iterate over all quality_types in the machine node
quality_group_dict = {}
@@ -273,13 +280,16 @@ class QualityManager(QObject):
# Each points above can be represented as a node in the lookup tree, so here we simply put those nodes into
# the list with priorities as the order. Later, we just need to loop over each node in this list and fetch
# qualities from there.
- node_info_list_0 = [nozzle_name, buildplate_name, root_material_id]
+ node_info_list_0 = [nozzle_name, buildplate_name, root_material_id] # type: List[Optional[str]]
nodes_to_check = []
# This function tries to recursively find the deepest (the most specific) branch and add those nodes to
# the search list in the order described above. So, by iterating over that search node list, we first look
# in the more specific branches and then the less specific (generic) ones.
- def addNodesToCheck(node, nodes_to_check_list, node_info_list, node_info_idx):
+ def addNodesToCheck(node: Optional[QualityNode], nodes_to_check_list: List[QualityNode], node_info_list, node_info_idx: int) -> None:
+ if node is None:
+ return
+
if node_info_idx < len(node_info_list):
node_name = node_info_list[node_info_idx]
if node_name is not None:
@@ -300,9 +310,10 @@ class QualityManager(QObject):
# The last fall back will be the global qualities (either from the machine-specific node or the generic
# node), but we only use one. For details see the overview comments above.
- if machine_node.quality_type_map:
+
+ if machine_node is not None and machine_node.quality_type_map:
nodes_to_check += [machine_node]
- else:
+ elif default_machine_node is not None:
nodes_to_check += [default_machine_node]
for node_idx, node in enumerate(nodes_to_check):
@@ -334,7 +345,7 @@ class QualityManager(QObject):
return quality_group_dict
- def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> dict:
+ def getQualityGroupsForMachineDefinition(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
# To find the quality container for the GlobalStack, check in the following fall-back manner:
@@ -372,7 +383,7 @@ class QualityManager(QObject):
# Remove the given quality changes group.
#
@pyqtSlot(QObject)
- def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup"):
+ def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup") -> None:
Logger.log("i", "Removing quality changes group [%s]", quality_changes_group.name)
removed_quality_changes_ids = set()
for node in quality_changes_group.getAllNodes():
@@ -415,7 +426,7 @@ class QualityManager(QObject):
# Duplicates the given quality.
#
@pyqtSlot(str, "QVariantMap")
- def duplicateQualityChanges(self, quality_changes_name, quality_model_item):
+ def duplicateQualityChanges(self, quality_changes_name: str, quality_model_item) -> None:
global_stack = self._application.getGlobalContainerStack()
if not global_stack:
Logger.log("i", "No active global stack, cannot duplicate quality changes.")
@@ -443,7 +454,7 @@ class QualityManager(QObject):
# the user containers in each stack. These then replace the quality_changes containers in the
# stack and clear the user settings.
@pyqtSlot(str)
- def createQualityChanges(self, base_name):
+ def createQualityChanges(self, base_name: str) -> None:
machine_manager = Application.getInstance().getMachineManager()
global_stack = machine_manager.activeMachine
diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py
index f384ee7825..a821a1e15d 100644
--- a/cura/Machines/QualityNode.py
+++ b/cura/Machines/QualityNode.py
@@ -16,6 +16,9 @@ class QualityNode(ContainerNode):
super().__init__(metadata = metadata)
self.quality_type_map = {} # type: Dict[str, QualityNode] # quality_type -> QualityNode for InstanceContainer
+ def getChildNode(self, child_key: str) -> Optional["QualityNode"]:
+ return self.children_map.get(child_key)
+
def addQualityMetadata(self, quality_type: str, metadata: dict):
if quality_type not in self.quality_type_map:
self.quality_type_map[quality_type] = QualityNode(metadata)
diff --git a/cura/Machines/VariantManager.py b/cura/Machines/VariantManager.py
index 969fed670e..9c8cff9efb 100644
--- a/cura/Machines/VariantManager.py
+++ b/cura/Machines/VariantManager.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from collections import OrderedDict
-from typing import Optional, TYPE_CHECKING
+from typing import Optional, TYPE_CHECKING, Dict
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Logger import Logger
@@ -36,11 +36,11 @@ if TYPE_CHECKING:
#
class VariantManager:
- def __init__(self, container_registry):
- self._container_registry = container_registry # type: ContainerRegistry
+ def __init__(self, container_registry: ContainerRegistry) -> None:
+ self._container_registry = container_registry
- self._machine_to_variant_dict_map = dict() # ->
- self._machine_to_buildplate_dict_map = dict()
+ self._machine_to_variant_dict_map = dict() # type: Dict[str, Dict["VariantType", Dict[str, ContainerNode]]]
+ self._machine_to_buildplate_dict_map = dict() # type: Dict[str, Dict[str, ContainerNode]]
self._exclude_variant_id_list = ["empty_variant"]
@@ -48,7 +48,7 @@ class VariantManager:
# Initializes the VariantManager including:
# - initializing the variant lookup table based on the metadata in ContainerRegistry.
#
- def initialize(self):
+ def initialize(self) -> None:
self._machine_to_variant_dict_map = OrderedDict()
self._machine_to_buildplate_dict_map = OrderedDict()
@@ -106,10 +106,10 @@ class VariantManager:
variant_node = variant_dict[variant_name]
break
return variant_node
+
return self._machine_to_variant_dict_map[machine_definition_id].get(variant_type, {}).get(variant_name)
- def getVariantNodes(self, machine: "GlobalStack",
- variant_type: Optional["VariantType"] = None) -> dict:
+ def getVariantNodes(self, machine: "GlobalStack", variant_type: "VariantType") -> Dict[str, ContainerNode]:
machine_definition_id = machine.definition.getId()
return self._machine_to_variant_dict_map.get(machine_definition_id, {}).get(variant_type, {})
From e717fa22513b557880d08ca884f56ddf680d5f20 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Tue, 11 Sep 2018 10:36:53 +0200
Subject: [PATCH 033/390] Fix issue caused by making metadata of containerNode
private
---
plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py
index 7d9b2aacc3..e12be94b25 100644
--- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py
+++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py
@@ -269,7 +269,7 @@ class XmlMaterialProfile(InstanceContainer):
# Find all hotend sub-profiles corresponding to this material and machine and add them to this profile.
buildplate_dict = {} # type: Dict[str, Any]
for variant_name, variant_dict in machine_variant_map[definition_id].items():
- variant_type = variant_dict["variant_node"].metadata["hardware_type"]
+ variant_type = variant_dict["variant_node"].getMetaDataEntry("hardware_type", "")
variant_type = VariantType(variant_type)
if variant_type == VariantType.NOZZLE:
# The hotend identifier is not the containers name, but its "name".
From a809575bc85dd808ad20910442192b0059d0f198 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Tue, 11 Sep 2018 16:05:53 +0200
Subject: [PATCH 034/390] Add bunch of ID's to qml components so it's easier to
test them.
CURA-5618
---
plugins/Toolbox/resources/qml/Toolbox.qml | 2 ++
.../qml/ToolboxDownloadsGridTile.qml | 1 +
.../Toolbox/resources/qml/ToolboxHeader.qml | 4 ++++
resources/qml/AddMachineDialog.qml | 2 ++
resources/qml/Cura.qml | 12 +++++++++--
resources/qml/Preferences/GeneralPage.qml | 20 +++++++++----------
resources/qml/Settings/SettingCategory.qml | 3 +++
7 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/plugins/Toolbox/resources/qml/Toolbox.qml b/plugins/Toolbox/resources/qml/Toolbox.qml
index 2a56898503..4fb8192d81 100644
--- a/plugins/Toolbox/resources/qml/Toolbox.qml
+++ b/plugins/Toolbox/resources/qml/Toolbox.qml
@@ -33,6 +33,7 @@ Window
{
id: header
}
+
Item
{
id: mainView
@@ -75,6 +76,7 @@ Window
visible: toolbox.viewCategory == "installed"
}
}
+
ToolboxFooter
{
id: footer
diff --git a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
index 4366db041c..887140bbfa 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDownloadsGridTile.qml
@@ -9,6 +9,7 @@ import UM 1.1 as UM
Item
{
+ id: toolboxDownloadsGridTile
property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1
property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0)
height: childrenRect.height
diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml
index 9c9f967d54..ca6197d6c3 100644
--- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml
@@ -21,8 +21,10 @@ Item
left: parent.left
leftMargin: UM.Theme.getSize("default_margin").width
}
+
ToolboxTabButton
{
+ id: pluginsTabButton
text: catalog.i18nc("@title:tab", "Plugins")
active: toolbox.viewCategory == "plugin" && enabled
enabled: toolbox.viewPage != "loading" && toolbox.viewPage != "errored"
@@ -36,6 +38,7 @@ Item
ToolboxTabButton
{
+ id: materialsTabButton
text: catalog.i18nc("@title:tab", "Materials")
active: toolbox.viewCategory == "material" && enabled
enabled: toolbox.viewPage != "loading" && toolbox.viewPage != "errored"
@@ -49,6 +52,7 @@ Item
}
ToolboxTabButton
{
+ id: installedTabButton
text: catalog.i18nc("@title:tab", "Installed")
active: toolbox.viewCategory == "installed"
anchors
diff --git a/resources/qml/AddMachineDialog.qml b/resources/qml/AddMachineDialog.qml
index a635f1f8d1..2b49ce9c31 100644
--- a/resources/qml/AddMachineDialog.qml
+++ b/resources/qml/AddMachineDialog.qml
@@ -79,6 +79,7 @@ UM.Dialog
section.property: "section"
section.delegate: Button
{
+ id: machineSectionButton
text: section
width: machineList.width
style: ButtonStyle
@@ -214,6 +215,7 @@ UM.Dialog
Button
{
+ id: addPrinterButton
text: catalog.i18nc("@action:button", "Add Printer")
anchors.bottom: parent.bottom
anchors.right: parent.right
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index b9febdeb32..07154a0729 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -104,11 +104,13 @@ UM.MainWindow
title: catalog.i18nc("@title:menu menubar:toplevel","&File");
MenuItem
{
+ id: newProjectMenu
action: Cura.Actions.newProject;
}
MenuItem
{
+ id: openMenu
action: Cura.Actions.open;
}
@@ -148,6 +150,7 @@ UM.MainWindow
MenuItem
{
+ id: exportSelectionMenu
text: catalog.i18nc("@action:inmenu menubar:file", "Export Selection...");
enabled: UM.Selection.hasSelection;
iconName: "document-save-as";
@@ -156,7 +159,11 @@ UM.MainWindow
MenuSeparator { }
- MenuItem { action: Cura.Actions.reloadAll; }
+ MenuItem
+ {
+ id: reloadAllMenu
+ action: Cura.Actions.reloadAll;
+ }
MenuSeparator { }
@@ -284,6 +291,7 @@ UM.MainWindow
Menu
{
+ id: preferencesMenu
title: catalog.i18nc("@title:menu menubar:toplevel","P&references");
MenuItem { action: Cura.Actions.preferences; }
@@ -291,7 +299,7 @@ UM.MainWindow
Menu
{
- //: Help menu
+ id: helpMenu
title: catalog.i18nc("@title:menu menubar:toplevel","&Help");
MenuItem { action: Cura.Actions.showProfileFolder; }
diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml
index 5f60b23477..bba2cf764a 100644
--- a/resources/qml/Preferences/GeneralPage.qml
+++ b/resources/qml/Preferences/GeneralPage.qml
@@ -13,6 +13,7 @@ UM.PreferencesPage
{
//: General configuration page title
title: catalog.i18nc("@title:tab","General")
+ id: generalPreferencesPage
function setDefaultLanguage(languageCode)
{
@@ -283,9 +284,6 @@ UM.PreferencesPage
}
}
-
-
-
Label
{
id: languageCaption
@@ -308,7 +306,7 @@ UM.PreferencesPage
width: childrenRect.width;
height: childrenRect.height;
- text: catalog.i18nc("@info:tooltip","Slice automatically when changing settings.")
+ text: catalog.i18nc("@info:tooltip", "Slice automatically when changing settings.")
CheckBox
{
@@ -316,7 +314,7 @@ UM.PreferencesPage
checked: boolCheck(UM.Preferences.getValue("general/auto_slice"))
onClicked: UM.Preferences.setValue("general/auto_slice", checked)
- text: catalog.i18nc("@option:check","Slice automatically");
+ text: catalog.i18nc("@option:check", "Slice automatically");
}
}
@@ -330,7 +328,7 @@ UM.PreferencesPage
Label
{
font.bold: true
- text: catalog.i18nc("@label","Viewport behavior")
+ text: catalog.i18nc("@label", "Viewport behavior")
}
UM.TooltipArea
@@ -338,7 +336,7 @@ UM.PreferencesPage
width: childrenRect.width;
height: childrenRect.height;
- text: catalog.i18nc("@info:tooltip","Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
+ text: catalog.i18nc("@info:tooltip", "Highlight unsupported areas of the model in red. Without support these areas will not print properly.")
CheckBox
{
@@ -347,14 +345,14 @@ UM.PreferencesPage
checked: boolCheck(UM.Preferences.getValue("view/show_overhang"))
onClicked: UM.Preferences.setValue("view/show_overhang", checked)
- text: catalog.i18nc("@option:check","Display overhang");
+ text: catalog.i18nc("@option:check", "Display overhang");
}
}
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
- text: catalog.i18nc("@info:tooltip","Moves the camera so the model is in the center of the view when a model is selected")
+ text: catalog.i18nc("@info:tooltip", "Moves the camera so the model is in the center of the view when a model is selected")
CheckBox
{
@@ -368,12 +366,12 @@ UM.PreferencesPage
UM.TooltipArea {
width: childrenRect.width;
height: childrenRect.height;
- text: catalog.i18nc("@info:tooltip","Should the default zoom behavior of cura be inverted?")
+ text: catalog.i18nc("@info:tooltip", "Should the default zoom behavior of cura be inverted?")
CheckBox
{
id: invertZoomCheckbox
- text: catalog.i18nc("@action:button","Invert the direction of camera zoom.");
+ text: catalog.i18nc("@action:button", "Invert the direction of camera zoom.");
checked: boolCheck(UM.Preferences.getValue("view/invert_zoom"))
onClicked: UM.Preferences.setValue("view/invert_zoom", checked)
}
diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml
index 419285d893..842b3fd185 100644
--- a/resources/qml/Settings/SettingCategory.qml
+++ b/resources/qml/Settings/SettingCategory.qml
@@ -16,6 +16,7 @@ Button
anchors.rightMargin: UM.Theme.getSize("sidebar_margin").width
background: Rectangle
{
+ id: backgroundRectangle
implicitHeight: UM.Theme.getSize("section").height
color: {
if (base.color) {
@@ -35,6 +36,7 @@ Button
Behavior on color { ColorAnimation { duration: 50; } }
Rectangle
{
+ id: backgroundLiningRectangle
height: UM.Theme.getSize("default_lining").height
width: parent.width
anchors.bottom: parent.bottom
@@ -68,6 +70,7 @@ Button
anchors.left: parent.left
Label {
+ id: settingNameLabel
anchors
{
left: parent.left
From d7649f9ee4286ca756600326d16e8ba8aa7dc07d Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Wed, 12 Sep 2018 11:54:35 +0200
Subject: [PATCH 035/390] Print buffer filling rate rather than time frame
The filling rate is more interesting. It's our input.
---
scripts/check_gcode_buffer.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/check_gcode_buffer.py b/scripts/check_gcode_buffer.py
index d3410096c5..2024ce2214 100755
--- a/scripts/check_gcode_buffer.py
+++ b/scripts/check_gcode_buffer.py
@@ -351,7 +351,7 @@ class CommandBuffer:
self.previous_feedrate = [0, 0, 0, 0]
self.previous_nominal_feedrate = 0
- print("Time Frame: %s" % self._detection_time_frame)
+ print("Command speed: %s" % buffer_filling_rate)
print("Code Limit: %s" % self._code_count_limit)
self._bad_frame_ranges = []
From c59ff82c6429ffae9fe05772ce68c4af2fbb2c1d Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 12 Sep 2018 13:39:10 +0200
Subject: [PATCH 036/390] Revert "[CURA-5708] Hide the Materials-tab in ToolBox
(v3.5 only)"
This reverts commit f9585b5fae9cdd3f56dc8d8b04f28db5fcf15434.
---
plugins/Toolbox/resources/qml/ToolboxHeader.qml | 2 --
1 file changed, 2 deletions(-)
diff --git a/plugins/Toolbox/resources/qml/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/ToolboxHeader.qml
index 1e2e95b842..ca6197d6c3 100644
--- a/plugins/Toolbox/resources/qml/ToolboxHeader.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxHeader.qml
@@ -36,7 +36,6 @@ Item
}
}
- /* // NOTE: Remember to re-enable for v3.6!
ToolboxTabButton
{
id: materialsTabButton
@@ -50,7 +49,6 @@ Item
toolbox.viewPage = "overview"
}
}
- */
}
ToolboxTabButton
{
From 5db008f763ebe02596a9cdc88fc7c02792a7964c Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Thu, 13 Sep 2018 12:56:51 +0200
Subject: [PATCH 037/390] New duplicated favorite material will be added to
favorite category CURA-5673
---
cura/Machines/MaterialManager.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index 98a4eeb330..f74da5de85 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -590,6 +590,12 @@ class MaterialManager(QObject):
for container_to_add in new_containers:
container_to_add.setDirty(True)
self._container_registry.addContainer(container_to_add)
+
+
+ #if duplicated material was favorite then new material should also be added to favorite.
+ if root_material_id in self.getFavorites():
+ self.addFavorite(new_base_id)
+
return new_base_id
#
From 6068ed10c14ffde7dbb62f301cb413a1b0cf309e Mon Sep 17 00:00:00 2001
From: Tim Kuipers
Date: Thu, 13 Sep 2018 13:06:50 +0200
Subject: [PATCH 038/390] JSON fix: connect_infill_polygons by default only
when polygons can be connected via the outline.
Also let the user be able to edit the setting in some more situations,
for example when choosing concentric infill when the infill_line_distance = nozzle_size
---
resources/definitions/fdmprinter.def.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 4c87a3bcf0..83f633b775 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1664,8 +1664,8 @@
"description": "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time.",
"type": "bool",
"default_value": true,
- "value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0",
- "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0",
+ "value": "(infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_multiplier % 2 == 0) and infill_wall_line_count > 0",
+ "enabled": "infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'concentric' or infill_multiplier % 2 == 0 or infill_wall_line_count > 1",
"limit_to_extruder": "infill_extruder_nr",
"settable_per_mesh": true
},
From f0e8746a22fdfb78d9a38a8aafe3111a1fe8fa2f Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Thu, 13 Sep 2018 13:23:10 +0200
Subject: [PATCH 039/390] Code style, duplicate material CURA-5673
---
cura/Machines/MaterialManager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index f74da5de85..0feecce41e 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -592,7 +592,7 @@ class MaterialManager(QObject):
self._container_registry.addContainer(container_to_add)
- #if duplicated material was favorite then new material should also be added to favorite.
+ # if the duplicated material was favorite then the new material should also be added to favorite.
if root_material_id in self.getFavorites():
self.addFavorite(new_base_id)
From eb253827be2e331502ec7892286549f66e037eb9 Mon Sep 17 00:00:00 2001
From: Tim Kuipers
Date: Thu, 13 Sep 2018 13:48:08 +0200
Subject: [PATCH 040/390] JSON setting: option to let support be replaced by
brim or not
---
resources/definitions/fdmprinter.def.json | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 4c87a3bcf0..e5726afdca 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -4538,6 +4538,17 @@
}
}
},
+ "brim_replaces_support":
+ {
+ "label": "Brim Replaces Support",
+ "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions fo the first layer of supprot by brim regions.",
+ "type": "bool",
+ "default_value": true,
+ "enabled": "resolveOrValue('adhesion_type') == 'brim' and support_enable",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true,
+ "limit_to_extruder": "adhesion_extruder_nr"
+ },
"brim_outside_only":
{
"label": "Brim Only on Outside",
From 945cc7c3e63d70fa3f66be601dda6be14302b608 Mon Sep 17 00:00:00 2001
From: Tim Kuipers
Date: Thu, 13 Sep 2018 14:25:57 +0200
Subject: [PATCH 041/390] JSon feat: support brim settings
---
resources/definitions/fdmprinter.def.json | 42 +++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index e5726afdca..74e9bab14d 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -3888,6 +3888,48 @@
"settable_per_mesh": false,
"settable_per_extruder": true
},
+ "support_brim_enable":
+ {
+ "label": "Enable Support Brim",
+ "description": "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate.",
+ "type": "bool",
+ "default_value": false,
+ "enabled": "support_enable or support_tree_enable",
+ "limit_to_extruder": "support_infill_extruder_nr",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
+ },
+ "support_brim_width":
+ {
+ "label": "Support Brim Width",
+ "description": "The width of the brim to print underneath the support. A larger brim enhances adhesion to the build plate, at the cost of some extra material.",
+ "type": "float",
+ "unit": "mm",
+ "default_value": 8.0,
+ "minimum_value": "0.0",
+ "maximum_value_warning": "50.0",
+ "enabled": "support_enable",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true,
+ "limit_to_extruder": "support_infill_extruder_nr",
+ "children":
+ {
+ "support_brim_line_count":
+ {
+ "label": "Support Brim Line Count",
+ "description": "The number of lines used for the support brim. More brim lines enhance adhesion to the build plate, at the cost of some extra material.",
+ "type": "int",
+ "default_value": 20,
+ "minimum_value": "0",
+ "maximum_value_warning": "50 / skirt_brim_line_width",
+ "value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))",
+ "enabled": "support_enable",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true,
+ "limit_to_extruder": "support_infill_extruder_nr"
+ }
+ }
+ },
"support_z_distance":
{
"label": "Support Z Distance",
From 3ee9ed0cf3cb809e10f2454c072357e988a85a2b Mon Sep 17 00:00:00 2001
From: Mark Burton
Date: Thu, 13 Sep 2018 15:15:29 +0100
Subject: [PATCH 042/390] Add gyroid infill pattern.
---
resources/definitions/fdmprinter.def.json | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 4c87a3bcf0..a4141e9c1a 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1624,7 +1624,7 @@
"infill_pattern":
{
"label": "Infill Pattern",
- "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.",
+ "description": "The pattern of the infill material of the print. The line and zig zag infill swap direction on alternate layers, reducing material cost. The grid, triangle, tri-hexagon, cubic, octet, quarter cubic, cross and concentric patterns are fully printed every layer. Gyroid, cubic, quarter cubic and octet infill change with every layer to provide a more equal distribution of strength over each direction.",
"type": "enum",
"options":
{
@@ -1639,7 +1639,8 @@
"concentric": "Concentric",
"zigzag": "Zig Zag",
"cross": "Cross",
- "cross_3d": "Cross 3D"
+ "cross_3d": "Cross 3D",
+ "gyroid": "Gyroid"
},
"default_value": "grid",
"enabled": "infill_sparse_density > 0",
From c962b519b192f2a66be79e0ae0cd47c97631a248 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 13 Sep 2018 16:56:14 +0200
Subject: [PATCH 043/390] Clarify PRIME_CLEARANCE global better
---
cura/BuildVolume.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index 10ae8bb87a..4059283a32 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -28,7 +28,7 @@ import copy
from typing import List, Optional
-# Setting for clearance around the prime
+# Radius of disallowed area in mm around prime. I.e. how much distance to keep from prime position.
PRIME_CLEARANCE = 6.5
From 8298f76d91314fe3eda865859341c07000b6fb8d Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 14 Sep 2018 09:43:24 +0200
Subject: [PATCH 044/390] Add material_diameter into fdmprinter
When saving a material to a file, it will save all the settings in that
container, which needs to create SettingInstances for all the cached
ones, and for those instances, their definitions will be retrieved from
the machine definition.
material_diameter is one of the settings, but it only exists in the
extruder definitions, so when it tries to save a material profile, a lot
of warnings/errors will occur due to the missing "material_diameter" in
fdmprinter. Adding it back fixes this problem.
---
resources/definitions/fdmprinter.def.json | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 4c87a3bcf0..6833e921da 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -77,6 +77,20 @@
"type": "str",
"enabled": false
},
+ "material_diameter":
+ {
+ "label": "Diameter",
+ "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.",
+ "unit": "mm",
+ "type": "float",
+ "default_value": 2.85,
+ "minimum_value": "0.0001",
+ "minimum_value_warning": "0.4",
+ "maximum_value_warning": "3.5",
+ "enabled": "machine_gcode_flavor != \"UltiGCode\"",
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
+ },
"material_bed_temp_wait":
{
"label": "Wait for Build Plate Heatup",
From 0ff893c349fcc8deb6549619b0e7157516f898ad Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Fri, 14 Sep 2018 13:49:56 +0200
Subject: [PATCH 045/390] [CURA-5689] Make 'Ignore Small Z Gaps' false by
default. WARNING: Increases default slicing time!
---
resources/definitions/fdmprinter.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 4c87a3bcf0..a3f507fdae 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1438,7 +1438,7 @@
"label": "Ignore Small Z Gaps",
"description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.",
"type": "bool",
- "default_value": true,
+ "default_value": false,
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
From 6bf91d2b3a2ea71c7bbf6869057ad5616280df97 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 14 Sep 2018 13:59:05 +0200
Subject: [PATCH 046/390] Fix updating temperature while preheating bed or
extruder
While preheating the bed/extruder with M190 or M109, the firmware keeps outputting temperature lines, but these do not contain "ok" because no new command was acknowledged.
Fixes #3741
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 4ceda52875..39b358224c 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -313,6 +313,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
while self._connection_state == ConnectionState.connected and self._serial is not None:
try:
line = self._serial.readline()
+ print(line)
except:
continue
@@ -326,8 +327,8 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if self._firmware_name is None:
self.sendCommand("M115")
- if (b"ok " in line and b"T:" in line) or line.startswith(b"T:") or b"ok B:" in line or line.startswith(b"B:"): # Temperature message. 'T:' for extruder and 'B:' for bed
- extruder_temperature_matches = re.findall(b"T(\d*): ?([\d\.]+) ?\/?([\d\.]+)?", line)
+ if re.search(b"[B|T\d*]: ?\d+\.?\d*", line): # Temperature message. 'T:' for extruder and 'B:' for bed
+ extruder_temperature_matches = re.findall(b"T(\d*): ?(\d+\.?\d*) ?\/?(\d+\.?\d*)?", line)
# Update all temperature values
matched_extruder_nrs = []
for match in extruder_temperature_matches:
@@ -349,7 +350,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if match[2]:
extruder.updateTargetHotendTemperature(float(match[2]))
- bed_temperature_matches = re.findall(b"B: ?([\d\.]+) ?\/?([\d\.]+)?", line)
+ bed_temperature_matches = re.findall(b"B: ?(\d+\.?\d*) ?\/?(\d+\.?\d*) ?", line)
if bed_temperature_matches:
match = bed_temperature_matches[0]
if match[0]:
From c9d3847fdb8fa95ce97a0a3a741767b73fa013ab Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 14 Sep 2018 15:41:51 +0200
Subject: [PATCH 047/390] Update description of ignore small_z_gaps
---
resources/definitions/fdmprinter.def.json | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 4c87a3bcf0..ec5a2e937b 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1436,8 +1436,7 @@
"skin_no_small_gaps_heuristic":
{
"label": "Ignore Small Z Gaps",
- "description": "When the model has small vertical gaps, about 5% extra computation time can be spent on generating top and bottom skin in these narrow spaces. In such case, disable the setting.",
- "type": "bool",
+ "description": "If this setting is enabled, it will skip over small vertical gaps. This will save about 5% computation time when generating top / bottom skin, at the cost of possibly exposing infill to the outside.",
"default_value": true,
"limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
From 2369a10ce129376bb640a09388dc0527a8c17859 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 14 Sep 2018 16:31:40 +0200
Subject: [PATCH 048/390] Disallow setting support wall line count per mesh
Because as soon as support is generated it can merge with the polygons of other support areas that are not directly beneath this model. They cannot have a different number of walls any more then because it is the same polygon.
Contributes to issue CURA-5603.
---
resources/definitions/fdmprinter.def.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 327c3a9892..c756a9cb05 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -3816,7 +3816,8 @@
"value": "1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0",
"enabled": "support_enable",
"limit_to_extruder": "support_infill_extruder_nr",
- "settable_per_mesh": true
+ "settable_per_mesh": false,
+ "settable_per_extruder": true
},
"zig_zaggify_support":
{
From a870060a34a61367f0ec3438efa3f58cb156e6b6 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 14 Sep 2018 17:00:55 +0200
Subject: [PATCH 049/390] Remove unused parameter
---
cura/Settings/MachineNameValidator.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py
index 19b29feac4..acdda4b0a0 100644
--- a/cura/Settings/MachineNameValidator.py
+++ b/cura/Settings/MachineNameValidator.py
@@ -35,10 +35,9 @@ class MachineNameValidator(QObject):
## Check if a specified machine name is allowed.
#
# \param name The machine name to check.
- # \param position The current position of the cursor in the text box.
# \return ``QValidator.Invalid`` if it's disallowed, or
# ``QValidator.Acceptable`` if it's allowed.
- def validate(self, name, position):
+ def validate(self, name):
#Check for file name length of the current settings container (which is the longest file we're saving with the name).
try:
filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax
@@ -54,7 +53,7 @@ class MachineNameValidator(QObject):
## Updates the validation state of a machine name text field.
@pyqtSlot(str)
def updateValidation(self, new_name):
- is_valid = self.validate(new_name, 0)
+ is_valid = self.validate(new_name)
if is_valid == QValidator.Acceptable:
self.validation_regex = "^.*$" #Matches anything.
else:
From 8efc5fe345e837d00d9b64f96363cfde46efe9f2 Mon Sep 17 00:00:00 2001
From: Mark Burton
Date: Fri, 14 Sep 2018 18:05:33 +0100
Subject: [PATCH 050/390] Now zig_zaggify_infill is enabled for gyroid infill.
---
resources/definitions/fdmprinter.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index a4141e9c1a..cbc7f19f2f 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1655,7 +1655,7 @@
"type": "bool",
"default_value": false,
"value": "infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
- "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d'",
+ "enabled": "infill_pattern == 'lines' or infill_pattern == 'grid' or infill_pattern == 'triangles' or infill_pattern == 'trihexagon' or infill_pattern == 'cubic' or infill_pattern == 'tetrahedral' or infill_pattern == 'quarter_cubic' or infill_pattern == 'cross' or infill_pattern == 'cross_3d' or infill_pattern == 'gyroid'",
"limit_to_extruder": "infill_extruder_nr",
"settable_per_mesh": true
},
From 9c865e80d113438699c34cee724d0c9945f7b8db Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 14 Sep 2018 19:15:23 +0200
Subject: [PATCH 051/390] Remove debug print
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 39b358224c..36c5321180 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -313,7 +313,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
while self._connection_state == ConnectionState.connected and self._serial is not None:
try:
line = self._serial.readline()
- print(line)
except:
continue
From 261600121a5c0402cd9e90c6593144a77f61122c Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Mon, 17 Sep 2018 15:29:02 +0200
Subject: [PATCH 052/390] Created Cura setting visibility test
---
scripts/check_setting_visibility.py | 113 ++++++++++++++++++++++++++++
1 file changed, 113 insertions(+)
create mode 100644 scripts/check_setting_visibility.py
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
new file mode 100644
index 0000000000..489b00747e
--- /dev/null
+++ b/scripts/check_setting_visibility.py
@@ -0,0 +1,113 @@
+#!/usr/bin/env python3
+#
+# This script check correctness of settings visibility list
+#
+from typing import Dict
+import os
+import sys
+import json
+import configparser
+import glob
+
+# Directory where this python file resides
+SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
+
+
+# The order of settings type. If the setting is in basic list then it also should be in expert
+setting_visibility = ["basic", "advanced", "expert"]
+
+
+class SettingVisibilityInspection:
+
+
+ def __init__(self) -> None:
+ self.all_settings_keys = []
+ self.all_settings_categories = []
+
+
+ def defineAllCuraSettings(self, fdmprinter_json_path: str) -> None:
+
+ with open(fdmprinter_json_path) as f:
+ json_data = json.load(f)
+ self._flattenAllSettings(json_data)
+
+
+ def _flattenAllSettings(self, json_file: Dict[str, str]) -> None:
+ for key, data in json_file["settings"].items(): # top level settings are categories
+ self._flattenSettings(data["children"]) # actual settings are children of top level category-settings
+
+ def _flattenSettings(self, settings: Dict[str, str]) -> None:
+ for key, setting in settings.items():
+
+ if "type" in setting and setting["type"] != "category":
+ self.all_settings_keys.append(key)
+ else:
+ self.all_settings_categories.append(key)
+
+ if "children" in setting:
+ self._flattenSettings(setting["children"])
+
+
+ def getSettingsFromSettingVisibilityFile(self, file_path: str):
+ parser = configparser.ConfigParser(allow_no_value = True)
+ parser.read([file_path])
+
+ if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
+ raise NotImplementedError("Visibility setting file missing general data")
+
+ settings = {}
+ for section in parser.sections():
+ if section == 'general':
+ continue
+
+ if section not in settings:
+ settings[section] = []
+
+ for option in parser[section].keys():
+ settings[section].append(option)
+
+ return settings
+
+ def validateSettingsVisibility(self, setting_visibility_items: Dict):
+
+ for visibility_type in setting_visibility:
+ item = setting_visibility_items[visibility_type]
+
+ for category, settings in item.items():
+ ss = 3
+
+
+
+
+if __name__ == "__main__":
+
+ all_setting_visibility_files = glob.glob(os.path.join(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility"), '*.cfg'))
+ fdmprinter_def_path = os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json")
+
+ inspector = SettingVisibilityInspection()
+ inspector.defineAllCuraSettings(fdmprinter_def_path)
+
+ setting_visibility_items = {}
+ for file_path in all_setting_visibility_files:
+ temp = inspector.getSettingsFromSettingVisibilityFile(all_setting_visibility_files[0])
+
+ base_name = os.path.basename(file_path)
+ visibility_type = base_name.split('.')[0]
+
+ setting_visibility_items[visibility_type] = temp
+
+
+ inspector.validateSettingsVisibility(setting_visibility_items)
+
+ found_error = False
+ # Validate settings
+ # for item in setting_visibility:
+
+
+
+
+
+
+
+
+ sys.exit(0 if not found_error else 1)
From c764b31e06d4899e90758b9042941f5ecfcd2858 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Tue, 18 Sep 2018 11:10:24 +0200
Subject: [PATCH 053/390] Update unit test for 'visibilit_settings' and removed
unused settings from expert.cfv CURA-5734
---
resources/setting_visibility/expert.cfg | 2 -
scripts/check_setting_visibility.py | 119 ++++++++++++++++++------
2 files changed, 93 insertions(+), 28 deletions(-)
diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg
index 0ca2cbab70..437790ef74 100644
--- a/resources/setting_visibility/expert.cfg
+++ b/resources/setting_visibility/expert.cfg
@@ -110,7 +110,6 @@ material_extrusion_cool_down_speed
default_material_bed_temperature
material_bed_temperature
material_bed_temperature_layer_0
-material_diameter
material_adhesion_tendency
material_surface_energy
material_flow
@@ -360,7 +359,6 @@ coasting_min_volume
coasting_speed
skin_alternate_rotation
cross_infill_pocket_size
-cross_infill_apply_pockets_alternatingly
spaghetti_infill_enabled
spaghetti_infill_stepped
spaghetti_max_infill_angle
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
index 489b00747e..37e489c072 100644
--- a/scripts/check_setting_visibility.py
+++ b/scripts/check_setting_visibility.py
@@ -21,9 +21,7 @@ class SettingVisibilityInspection:
def __init__(self) -> None:
- self.all_settings_keys = []
- self.all_settings_categories = []
-
+ self.all_settings_keys = {}
def defineAllCuraSettings(self, fdmprinter_json_path: str) -> None:
@@ -34,18 +32,20 @@ class SettingVisibilityInspection:
def _flattenAllSettings(self, json_file: Dict[str, str]) -> None:
for key, data in json_file["settings"].items(): # top level settings are categories
- self._flattenSettings(data["children"]) # actual settings are children of top level category-settings
- def _flattenSettings(self, settings: Dict[str, str]) -> None:
+ if "type" in data and data["type"] == "category":
+
+ self.all_settings_keys[key] = []
+ self._flattenSettings(data["children"], key) # actual settings are children of top level category-settings
+
+ def _flattenSettings(self, settings: Dict[str, str], category) -> None:
for key, setting in settings.items():
if "type" in setting and setting["type"] != "category":
- self.all_settings_keys.append(key)
- else:
- self.all_settings_categories.append(key)
+ self.all_settings_keys[category].append(key)
if "children" in setting:
- self._flattenSettings(setting["children"])
+ self._flattenSettings(setting["children"], category)
def getSettingsFromSettingVisibilityFile(self, file_path: str):
@@ -70,13 +70,92 @@ class SettingVisibilityInspection:
def validateSettingsVisibility(self, setting_visibility_items: Dict):
+ not_valid_categories = {}
+ not_valid_setting_by_category = {}
+ not_valid_setting_by_order = {}
+
+ visible_settings_order = [] # This list is used to make sure that the settings are in the correct order.
+ # basic.cfg -> advanced.cfg -> expert.cfg. Like: if the setting 'layer_height' in 'basic.cfg' then the same setting
+ # also should be in 'advanced.cfg'
+
+ all_settings_categories = list(self.all_settings_keys.keys())
+
+ # visibility_type = basic, advanced, expert
for visibility_type in setting_visibility:
item = setting_visibility_items[visibility_type]
- for category, settings in item.items():
- ss = 3
+ not_valid_setting_by_category[visibility_type] = [] # this list is for keeping invalid settings.
+ not_valid_categories[visibility_type] = []
+
+ for category, category_settings in item.items():
+
+ # Validate Category, If category is not defined then the test will fail
+ if category not in all_settings_categories:
+ not_valid_categories[visibility_type].append(category)
+
+ for setting in category_settings:
+
+ # Check whether the setting exist in fdmprinter.def.json or not.
+ # If the setting is defined in the wrong category or does not exist there then the test will fail
+ if setting not in self.all_settings_keys[category]:
+ not_valid_setting_by_category[visibility_type].append(setting)
+
+ # Add the 'basic' settings to the list
+ if visibility_type == "basic":
+ visible_settings_order.append(setting)
+ # Check whether the settings are added in right order or not.
+ # The basic settings should be in advanced, and advanced in expert
+ for visibility_type in setting_visibility:
+
+ # Skip the basic because it cannot be compared to previous list
+ if visibility_type == 'basic':
+ continue
+
+ all_settings_in_this_type = []
+ not_valid_setting_by_order[visibility_type] = []
+
+ item = setting_visibility_items[visibility_type]
+ for category, category_settings in item.items():
+ all_settings_in_this_type.extend(category_settings)
+
+
+ for setting in visible_settings_order:
+ if setting not in all_settings_in_this_type:
+ not_valid_setting_by_order[visibility_type].append(setting)
+
+
+ # If any of the settings is defined not correctly then the test is failed
+ has_invalid_settings = False
+
+ for type, settings in not_valid_categories.items():
+ if len(settings) > 0:
+ has_invalid_settings = True
+ print("The following categories are defined incorrectly")
+ print(" Visibility type : '%s'" % (type))
+ print(" Incorrect categories : '%s'" % (settings))
+ print()
+
+
+
+ for type, settings in not_valid_setting_by_category.items():
+ if len(settings) > 0:
+ has_invalid_settings = True
+ print("The following settings do not exist anymore in fdmprinter definition or in wrong category")
+ print(" Visibility type : '%s'" % (type))
+ print(" Incorrect settings : '%s'" % (settings))
+ print()
+
+
+ for type, settings in not_valid_setting_by_order.items():
+ if len(settings) > 0:
+ has_invalid_settings = True
+ print("The following settings are defined in the incorrect order in setting visibility definitions")
+ print(" Visibility type : '%s'" % (type))
+ print(" Incorrect settings : '%s'" % (settings))
+
+ return has_invalid_settings
if __name__ == "__main__":
@@ -89,25 +168,13 @@ if __name__ == "__main__":
setting_visibility_items = {}
for file_path in all_setting_visibility_files:
- temp = inspector.getSettingsFromSettingVisibilityFile(all_setting_visibility_files[0])
+ temp = inspector.getSettingsFromSettingVisibilityFile(file_path)
base_name = os.path.basename(file_path)
visibility_type = base_name.split('.')[0]
setting_visibility_items[visibility_type] = temp
+ has_invalid_settings = inspector.validateSettingsVisibility(setting_visibility_items)
- inspector.validateSettingsVisibility(setting_visibility_items)
-
- found_error = False
- # Validate settings
- # for item in setting_visibility:
-
-
-
-
-
-
-
-
- sys.exit(0 if not found_error else 1)
+ sys.exit(0 if not has_invalid_settings else 1)
From cb49ffa2d283038d7e1a83e20426bccbc36e2632 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Tue, 18 Sep 2018 17:42:01 +0200
Subject: [PATCH 054/390] Updated the script according to the requested changes
CURA-5734
---
scripts/check_setting_visibility.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
index 37e489c072..974b922fbd 100644
--- a/scripts/check_setting_visibility.py
+++ b/scripts/check_setting_visibility.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# This script check correctness of settings visibility list
+# This script checks the correctness of the list of visibility settings
#
from typing import Dict
import os
@@ -168,12 +168,12 @@ if __name__ == "__main__":
setting_visibility_items = {}
for file_path in all_setting_visibility_files:
- temp = inspector.getSettingsFromSettingVisibilityFile(file_path)
+ all_settings_from_visibility_type = inspector.getSettingsFromSettingVisibilityFile(file_path)
base_name = os.path.basename(file_path)
- visibility_type = base_name.split('.')[0]
+ visibility_type = base_name.split(".")[0]
- setting_visibility_items[visibility_type] = temp
+ setting_visibility_items[visibility_type] = all_settings_from_visibility_type
has_invalid_settings = inspector.validateSettingsVisibility(setting_visibility_items)
From b7673a74388574cd2aca6b810940a6ecf1b01702 Mon Sep 17 00:00:00 2001
From: Simon Edwards
Date: Tue, 18 Sep 2018 16:27:22 +0200
Subject: [PATCH 055/390] Show Cura Connect alerts in the monitor tab
CL-897
---
cura/PrinterOutput/PrintJobOutputModel.py | 16 +-
.../resources/qml/ClusterMonitorItem.qml | 1 -
.../resources/qml/PrintJobInfoBlock.qml | 240 +++++++++++++++++-
.../src/ClusterUM3OutputDevice.py | 16 ++
4 files changed, 268 insertions(+), 5 deletions(-)
diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py
index 7366b95f86..c194f5df32 100644
--- a/cura/PrinterOutput/PrintJobOutputModel.py
+++ b/cura/PrinterOutput/PrintJobOutputModel.py
@@ -12,6 +12,8 @@ if TYPE_CHECKING:
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
+from cura.PrinterOutput.ConfigurationChangeModel import ConfigurationChangeModel
+
class PrintJobOutputModel(QObject):
stateChanged = pyqtSignal()
@@ -24,6 +26,7 @@ class PrintJobOutputModel(QObject):
configurationChanged = pyqtSignal()
previewImageChanged = pyqtSignal()
compatibleMachineFamiliesChanged = pyqtSignal()
+ configurationChangesChanged = pyqtSignal()
def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None:
super().__init__(parent)
@@ -41,6 +44,7 @@ class PrintJobOutputModel(QObject):
self._preview_image_id = 0
self._preview_image = None # type: Optional[QImage]
+ self._configuration_changes = [] # type: List[ConfigurationChangeModel]
@pyqtProperty("QStringList", notify=compatibleMachineFamiliesChanged)
def compatibleMachineFamilies(self):
@@ -147,4 +151,14 @@ class PrintJobOutputModel(QObject):
@pyqtSlot(str)
def setState(self, state):
- self._output_controller.setJobState(self, state)
\ No newline at end of file
+ self._output_controller.setJobState(self, state)
+
+ @pyqtProperty("QVariantList", notify=configurationChangesChanged)
+ def configurationChanges(self) -> List[ConfigurationChangeModel]:
+ return self._configuration_changes
+
+ def updateConfigurationChanges(self, changes: List[ConfigurationChangeModel]) -> None:
+ if len(self._configuration_changes) == 0 and len(changes) == 0:
+ return
+ self._configuration_changes = changes
+ self.configurationChangesChanged.emit()
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
index f6cf6607c7..b55b5c6779 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
@@ -85,7 +85,6 @@ Component
anchors.right: parent.right
anchors.rightMargin: UM.Theme.getSize("default_margin").height
anchors.leftMargin: UM.Theme.getSize("default_margin").height
- height: 175 * screenScaleFactor
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 71c2104318..f0e07807e2 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -2,6 +2,8 @@ import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.0
+import QtQuick.Layouts 1.1
+import QtQuick.Dialogs 1.1
import UM 1.3 as UM
@@ -9,6 +11,110 @@ import UM 1.3 as UM
Item
{
id: base
+
+ function haveAlert() {
+ return printJob.configurationChanges.length !== 0;
+ }
+
+ function alertHeight() {
+ return haveAlert() ? 230 : 0;
+ }
+
+ function alertText() {
+ if (printJob.configurationChanges.length === 0) {
+ return "";
+ }
+
+ var topLine;
+ if (materialsAreKnown(printJob)) {
+ topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(printJob.assignedPrinter.name);
+ } else {
+ topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printJob.assignedPrinter.name);
+ }
+ var result = "" + topLine +"
";
+
+ for (var i=0; i" + text + "
";
+ }
+ return result;
+ }
+
+ function materialsAreKnown(printJob) {
+ var conf0 = printJob.configuration[0];
+ if (conf0 && !conf0.material.material) {
+ return false;
+ }
+
+ var conf1 = printJob.configuration[1];
+ if (conf1 && !conf1.material.material) {
+ return false;
+ }
+
+ return true;
+ }
+
+ function formatBuildPlateType(buildPlateType) {
+ var translationText = "";
+
+ switch (buildPlateType) {
+ case 'glass':
+ translationText = catalog.i18nc("@label", "Glass");
+ break;
+ case 'aluminum':
+ translationText = catalog.i18nc("@label", "Aluminum");
+ break;
+ default:
+ translationText = null;
+ }
+ return translationText;
+ }
+
+ function formatPrintJobName(name) {
+ var extensionsToRemove = [
+ '.gz',
+ '.gcode',
+ '.ufp'
+ ];
+
+ for (var i = 0; i < extensionsToRemove.length; i++) {
+ var extension = extensionsToRemove[i];
+
+ if (name.slice(-extension.length) === extension) {
+ name = name.substring(0, name.length - extension.length);
+ }
+ }
+
+ return name;
+ }
+
+ function isPrintJobForcable(printJob) {
+ var forcable = true;
+
+ for (var i = 0; i < printJob.configurationChanges.length; i++) {
+ var typeOfChange = printJob.configurationChanges[i].typeOfChange;
+ if (typeOfChange === 'material_insert' || typeOfChange === 'buildplate_change') {
+ forcable = false;
+ }
+ }
+
+ return forcable;
+ }
+
+ property var cardHeight: 175
+
+ height: (cardHeight + alertHeight()) * screenScaleFactor
property var printJob: null
property var shadowRadius: 5 * screenScaleFactor
function getPrettyTime(time)
@@ -27,6 +133,9 @@ Item
Rectangle
{
id: background
+
+ height: (cardHeight + alertHeight()) * screenScaleFactor
+
anchors
{
top: parent.top
@@ -35,7 +144,7 @@ Item
leftMargin: base.shadowRadius
rightMargin: base.shadowRadius
right: parent.right
- bottom: parent.bottom
+ //bottom: parent.bottom - alertHeight() * screenScaleFactor
bottomMargin: base.shadowRadius
}
@@ -47,6 +156,18 @@ Item
color: "#3F000000" // 25% shadow
}
+ Rectangle
+ {
+ height: cardHeight * screenScaleFactor
+
+ anchors
+ {
+ top: parent.top
+ left: parent.left
+ right: parent.right
+ // bottom: parent.bottom
+ }
+
Item
{
// Content on the left of the infobox
@@ -392,15 +513,128 @@ Item
}
}
-
+ }
Rectangle
{
+ height: cardHeight * screenScaleFactor
color: UM.Theme.getColor("viewport_background")
width: 2 * screenScaleFactor
anchors.top: parent.top
- anchors.bottom: parent.bottom
anchors.margins: UM.Theme.getSize("default_margin").height
anchors.horizontalCenter: parent.horizontalCenter
}
+
+ // Alert / Configuration change box
+ Rectangle
+ {
+ height: alertHeight() * screenScaleFactor
+
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+
+color: "#ff00ff"
+ ColumnLayout
+ {
+ anchors.fill: parent
+ RowLayout
+ {
+ Item
+ {
+ Layout.fillWidth: true
+ }
+
+ Label
+ {
+ font: UM.Theme.getFont("default_bold")
+ text: "Configuration change"
+ }
+
+ UM.RecolorImage
+ {
+ id: collapseIcon
+ width: 15
+ height: 15
+ sourceSize.width: width
+ sourceSize.height: height
+
+ // FIXME
+ source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom")
+ color: "black"
+ }
+
+ Item
+ {
+ Layout.fillWidth: true
+ }
+
+ }
+
+ Rectangle
+ {
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+color: "red"
+
+ Rectangle
+ {
+color: "green"
+ width: childrenRect.width
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ ColumnLayout
+ {
+ width: childrenRect.width
+
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+
+ Text
+ {
+ Layout.alignment: Qt.AlignTop
+
+ textFormat: Text.StyledText
+ font: UM.Theme.getFont("default_bold")
+ text: alertText()
+ }
+
+ Button
+ {
+ visible: isPrintJobForcable(printJob)
+ text: catalog.i18nc("@label", "Override")
+ onClicked: {
+ overrideConfirmationDialog.visible = true;
+ }
+ }
+
+ // Spacer
+ Item
+ {
+ Layout.fillHeight: true
+ }
+ }
+ }
+ }
+ }
+ }
+
+ MessageDialog
+ {
+ id: overrideConfirmationDialog
+ title: catalog.i18nc("@window:title", "Override configuration")
+ icon: StandardIcon.Warning
+ text: {
+ var printJobName = formatPrintJobName(printJob.name);
+ var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
+ return confirmText;
+ }
+
+ standardButtons: StandardButton.Yes | StandardButton.No
+ Component.onCompleted: visible = false
+ onYes: OutputDevice.forceSendJob(printJob.key)
+ }
}
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
index 409ca7a84a..79040373ae 100644
--- a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
@@ -17,6 +17,7 @@ from UM.Scene.SceneNode import SceneNode # For typing.
from UM.Version import Version # To check against firmware versions for support.
from cura.CuraApplication import CuraApplication
+from cura.PrinterOutput.ConfigurationChangeModel import ConfigurationChangeModel
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel
from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState
@@ -406,6 +407,11 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
# is a modification of the cluster queue and not of the actual job.
self.delete("print_jobs/{uuid}".format(uuid = print_job_uuid), on_finished=None)
+ @pyqtSlot(str)
+ def forceSendJob(self, print_job_uuid: str) -> None:
+ data = "{\"force\": true}"
+ self.put("print_jobs/{uuid}".format(uuid=print_job_uuid), data, on_finished=None)
+
def _printJobStateChanged(self) -> None:
username = self._getUserName()
@@ -574,6 +580,16 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
if not status_set_by_impediment:
print_job.updateState(data["status"])
+ print_job.updateConfigurationChanges(self._createConfigurationChanges(data["configuration_changes_required"]))
+
+ def _createConfigurationChanges(self, data: List[Dict[str, Any]]) -> List[ConfigurationChangeModel]:
+ result = []
+ for change in data:
+ result.append(ConfigurationChangeModel(type_of_change=change["type_of_change"],
+ index=change["index"],
+ target_name=change["target_name"],
+ origin_name=change["origin_name"]))
+ return result
def _createMaterialOutputModel(self, material_data) -> MaterialOutputModel:
containers = ContainerRegistry.getInstance().findInstanceContainers(type="material", GUID=material_data["guid"])
From 9d85f3ece615e69d30695c5feff5094c1081b181 Mon Sep 17 00:00:00 2001
From: Simon Edwards
Date: Wed, 19 Sep 2018 17:02:46 +0200
Subject: [PATCH 056/390] Use the same string as the web front-end
CL-897
---
plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index f0e07807e2..ad583edcf8 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -624,7 +624,7 @@ color: "green"
MessageDialog
{
id: overrideConfirmationDialog
- title: catalog.i18nc("@window:title", "Override configuration")
+ title: catalog.i18nc("@window:title", "Override configuration configuration and start print")
icon: StandardIcon.Warning
text: {
var printJobName = formatPrintJobName(printJob.name);
From 9d53a31ec12a046848fed5823cd80a4b510d3608 Mon Sep 17 00:00:00 2001
From: Simon Edwards
Date: Thu, 20 Sep 2018 10:28:14 +0200
Subject: [PATCH 057/390] Add a missing file
CL-897
---
.../PrinterOutput/ConfigurationChangeModel.py | 30 +++++++++++++++++++
1 file changed, 30 insertions(+)
create mode 100644 cura/PrinterOutput/ConfigurationChangeModel.py
diff --git a/cura/PrinterOutput/ConfigurationChangeModel.py b/cura/PrinterOutput/ConfigurationChangeModel.py
new file mode 100644
index 0000000000..b032a08ec2
--- /dev/null
+++ b/cura/PrinterOutput/ConfigurationChangeModel.py
@@ -0,0 +1,30 @@
+
+from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
+
+
+class ConfigurationChangeModel(QObject):
+ def __init__(self, type_of_change: str, index: int, target_name: str, origin_name: str) -> None:
+ super().__init__()
+ self._type_of_change = type_of_change
+ # enum = ["material", "print_core_change"]
+ self._index = index
+ self._target_name = target_name
+ self._origin_name = origin_name
+
+ @pyqtProperty(int)
+ def index(self) -> int:
+ return self._index
+ # "target_id": fields.String(required=True, description="Target material guid or hotend id"),
+ # "origin_id": fields.String(required=True, description="Original/current material guid or hotend id"),
+
+ @pyqtProperty(str)
+ def typeOfChange(self) -> str:
+ return self._type_of_change
+
+ @pyqtProperty(str)
+ def targetName(self) -> str:
+ return self._target_name
+
+ @pyqtProperty(str)
+ def originName(self) -> str:
+ return self._origin_name
From eb114a8529764ac8a19b6467a141f329cce68884 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 20 Sep 2018 13:50:06 +0200
Subject: [PATCH 058/390] chmod a+x check_setting_visibility.py
---
scripts/check_setting_visibility.py | 0
1 file changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 scripts/check_setting_visibility.py
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
old mode 100644
new mode 100755
From 2c571d58865697b32f6cb97085e57424a0869417 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 20 Sep 2018 15:11:41 +0200
Subject: [PATCH 059/390] Rework check_setting_visibility.py
---
scripts/check_setting_visibility.py | 296 +++++++++++++++++-----------
1 file changed, 178 insertions(+), 118 deletions(-)
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
index 974b922fbd..41b1dc9095 100755
--- a/scripts/check_setting_visibility.py
+++ b/scripts/check_setting_visibility.py
@@ -2,179 +2,239 @@
#
# This script checks the correctness of the list of visibility settings
#
-from typing import Dict
+import collections
+import configparser
+import json
import os
import sys
-import json
-import configparser
-import glob
+from typing import Any, Dict, List
# Directory where this python file resides
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
-# The order of settings type. If the setting is in basic list then it also should be in expert
-setting_visibility = ["basic", "advanced", "expert"]
-
-
+#
+# This class
+#
class SettingVisibilityInspection:
-
def __init__(self) -> None:
- self.all_settings_keys = {}
+ # The order of settings type. If the setting is in basic list then it also should be in expert
+ self._setting_visibility_order = ["basic", "advanced", "expert"]
- def defineAllCuraSettings(self, fdmprinter_json_path: str) -> None:
+ # This is dictionary with categories as keys and all setting keys as values.
+ self.all_settings_keys = {} # type: Dict[str, List[str]]
- with open(fdmprinter_json_path) as f:
+ # Load all Cura setting keys from the given fdmprinter.json file
+ def loadAllCuraSettingKeys(self, fdmprinter_json_path: str) -> None:
+ with open(fdmprinter_json_path, "r", encoding = "utf-8") as f:
json_data = json.load(f)
- self._flattenAllSettings(json_data)
-
-
- def _flattenAllSettings(self, json_file: Dict[str, str]) -> None:
- for key, data in json_file["settings"].items(): # top level settings are categories
+ # Get all settings keys in each category
+ for key, data in json_data["settings"].items(): # top level settings are categories
if "type" in data and data["type"] == "category":
-
self.all_settings_keys[key] = []
self._flattenSettings(data["children"], key) # actual settings are children of top level category-settings
- def _flattenSettings(self, settings: Dict[str, str], category) -> None:
+ def _flattenSettings(self, settings: Dict[str, str], category: str) -> None:
for key, setting in settings.items():
-
if "type" in setting and setting["type"] != "category":
self.all_settings_keys[category].append(key)
if "children" in setting:
self._flattenSettings(setting["children"], category)
+ # Loads the given setting visibility file and returns a dict with categories as keys and a list of setting keys as
+ # values.
+ def _loadSettingVisibilityConfigFile(self, file_name: str) -> Dict[str, List[str]]:
+ with open(file_name, "r", encoding = "utf-8") as f:
+ parser = configparser.ConfigParser(allow_no_value = True)
+ parser.read_file(f)
- def getSettingsFromSettingVisibilityFile(self, file_path: str):
- parser = configparser.ConfigParser(allow_no_value = True)
- parser.read([file_path])
-
- if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
- raise NotImplementedError("Visibility setting file missing general data")
-
- settings = {}
- for section in parser.sections():
- if section == 'general':
+ data_dict = {}
+ for category, option_dict in parser.items():
+ if category in (parser.default_section, "general"):
continue
- if section not in settings:
- settings[section] = []
+ data_dict[category] = []
+ for key in option_dict:
+ data_dict[category].append(key)
- for option in parser[section].keys():
- settings[section].append(option)
+ return data_dict
- return settings
+ def validateSettingsVisibility(self, setting_visibility_files: Dict[str, str]) -> Dict[str, Dict[str, Any]]:
+ # First load all setting visibility files into the dict "setting_visibility_dict" in the following structure:
+ # -> ->
+ # "basic" -> "info"
+ setting_visibility_dict = {} # type: Dict[str, Dict[str, List[str]]]
+ for visibility_name, file_path in setting_visibility_files.items():
+ setting_visibility_dict[visibility_name] = self._loadSettingVisibilityConfigFile(file_path)
- def validateSettingsVisibility(self, setting_visibility_items: Dict):
+ # The result is in the format:
+ # -> dict
+ # "basic" -> "file_name": "basic.cfg"
+ # "is_valid": True / False
+ # "invalid_categories": List[str]
+ # "invalid_settings": Dict[category -> List[str]]
+ # "missing_categories_from_previous": List[str]
+ # "missing_settings_from_previous": Dict[category -> List[str]]
+ all_result_dict = dict() # type: Dict[str, Dict[str, Any]]
- not_valid_categories = {}
- not_valid_setting_by_category = {}
- not_valid_setting_by_order = {}
+ previous_result = None
+ previous_visibility_dict = None
+ is_all_valid = True
+ for visibility_name in self._setting_visibility_order:
+ invalid_categories = []
+ invalid_settings = collections.defaultdict(list)
- visible_settings_order = [] # This list is used to make sure that the settings are in the correct order.
- # basic.cfg -> advanced.cfg -> expert.cfg. Like: if the setting 'layer_height' in 'basic.cfg' then the same setting
- # also should be in 'advanced.cfg'
+ this_visibility_dict = setting_visibility_dict[visibility_name]
+ # Check if categories and keys exist at all
+ for category, key_list in this_visibility_dict.items():
+ if category not in self.all_settings_keys:
+ invalid_categories.append(category)
+ continue # If this category doesn't exist at all, not need to check for details
- all_settings_categories = list(self.all_settings_keys.keys())
+ for key in key_list:
+ if key not in self.all_settings_keys[category]:
+ invalid_settings[category].append(key)
- # visibility_type = basic, advanced, expert
- for visibility_type in setting_visibility:
- item = setting_visibility_items[visibility_type]
+ is_settings_valid = len(invalid_categories) == 0 and len(invalid_settings) == 0
+ file_path = setting_visibility_files[visibility_name]
+ result_dict = {"file_name": os.path.basename(file_path),
+ "is_valid": is_settings_valid,
+ "invalid_categories": invalid_categories,
+ "invalid_settings": invalid_settings,
+ "missing_categories_from_previous": list(),
+ "missing_settings_from_previous": dict(),
+ }
- not_valid_setting_by_category[visibility_type] = [] # this list is for keeping invalid settings.
- not_valid_categories[visibility_type] = []
+ # If this is not the first item in the list, check if the settings are defined in the previous
+ # visibility file.
+ # A visibility with more details SHOULD add more settings. It SHOULD NOT remove any settings defined
+ # in the less detailed visibility.
+ if previous_visibility_dict is not None:
+ missing_categories_from_previous = []
+ missing_settings_from_previous = collections.defaultdict(list)
- for category, category_settings in item.items():
+ for prev_category, prev_key_list in previous_visibility_dict.items():
+ # Skip the categories that are invalid
+ if prev_category in previous_result["invalid_categories"]:
+ continue
+ if prev_category not in this_visibility_dict:
+ missing_categories_from_previous.append(prev_category)
+ continue
- # Validate Category, If category is not defined then the test will fail
- if category not in all_settings_categories:
- not_valid_categories[visibility_type].append(category)
+ this_key_list = this_visibility_dict[prev_category]
+ for key in prev_key_list:
+ # Skip the settings that are invalid
+ if key in previous_result["invalid_settings"][prev_category]:
+ continue
- for setting in category_settings:
+ if key not in this_key_list:
+ missing_settings_from_previous[prev_category].append(key)
- # Check whether the setting exist in fdmprinter.def.json or not.
- # If the setting is defined in the wrong category or does not exist there then the test will fail
- if setting not in self.all_settings_keys[category]:
- not_valid_setting_by_category[visibility_type].append(setting)
+ result_dict["missing_categories_from_previous"] = missing_categories_from_previous
+ result_dict["missing_settings_from_previous"] = missing_settings_from_previous
+ is_settings_valid = len(missing_categories_from_previous) == 0 and len(missing_settings_from_previous) == 0
+ result_dict["is_valid"] = result_dict["is_valid"] and is_settings_valid
- # Add the 'basic' settings to the list
- if visibility_type == "basic":
- visible_settings_order.append(setting)
+ # Update the complete result dict
+ all_result_dict[visibility_name] = result_dict
+ previous_result = result_dict
+ previous_visibility_dict = this_visibility_dict
+ is_all_valid = is_all_valid and result_dict["is_valid"]
- # Check whether the settings are added in right order or not.
- # The basic settings should be in advanced, and advanced in expert
- for visibility_type in setting_visibility:
+ all_result_dict["all_results"] = {"is_valid": is_all_valid}
- # Skip the basic because it cannot be compared to previous list
- if visibility_type == 'basic':
+ return all_result_dict
+
+ def printResults(self, all_result_dict: Dict[str, Dict[str, Any]]) -> None:
+ print("")
+ print("Setting Visibility Check Results:")
+
+ prev_visibility_name = None
+ for visibility_name in self._setting_visibility_order:
+ if visibility_name not in all_result_dict:
continue
- all_settings_in_this_type = []
- not_valid_setting_by_order[visibility_type] = []
+ result_dict = all_result_dict[visibility_name]
+ print("=============================")
+ result_str = "OK" if result_dict["is_valid"] else "INVALID"
+ print("[%s] : [%s] : %s" % (visibility_name, result_dict["file_name"], result_str))
- item = setting_visibility_items[visibility_type]
- for category, category_settings in item.items():
- all_settings_in_this_type.extend(category_settings)
+ if result_dict["is_valid"]:
+ continue
+
+ # Print details of invalid settings
+ if result_dict["invalid_categories"]:
+ print("It has the following non-existing CATEGORIES:")
+ for category in result_dict["invalid_categories"]:
+ print(" - [%s]" % category)
+
+ if result_dict["invalid_settings"]:
+ print("")
+ print("It has the following non-existing SETTINGS:")
+ for category, key_list in result_dict["invalid_settings"].items():
+ for key in key_list:
+ print(" - [%s / %s]" % (category, key))
+
+ if prev_visibility_name is not None:
+ if result_dict["missing_categories_from_previous"]:
+ print("")
+ print("The following CATEGORIES are defined in the previous visibility [%s] but not here:" % prev_visibility_name)
+ for category in result_dict["missing_categories_from_previous"]:
+ print(" - [%s]" % category)
+
+ if result_dict["missing_settings_from_previous"]:
+ print("")
+ print("The following SETTINGS are defined in the previous visibility [%s] but not here:" % prev_visibility_name)
+ for category, key_list in result_dict["missing_settings_from_previous"].items():
+ for key in key_list:
+ print(" - [%s / %s]" % (category, key))
+
+ print("")
+ prev_visibility_name = visibility_name
- for setting in visible_settings_order:
- if setting not in all_settings_in_this_type:
- not_valid_setting_by_order[visibility_type].append(setting)
+#
+# Returns a dictionary of setting visibility .CFG files in the given search directory.
+# The dict has the name of the visibility type as the key (such as "basic", "advanced", "expert"), and
+# the actual file path (absolute path).
+#
+def getAllSettingVisiblityFiles(search_dir: str) -> Dict[str, str]:
+ visibility_file_dict = dict()
+ extension = ".cfg"
+ for file_name in os.listdir(search_dir):
+ file_path = os.path.join(search_dir, file_name)
+
+ # Only check files that has the .cfg extension
+ if not os.path.isfile(file_path):
+ continue
+ if not file_path.endswith(extension):
+ continue
+
+ base_filename = os.path.basename(file_name)[:-len(extension)]
+ visibility_file_dict[base_filename] = file_path
+ return visibility_file_dict
- # If any of the settings is defined not correctly then the test is failed
- has_invalid_settings = False
+def main() -> None:
+ setting_visibility_files_dir = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility"))
+ fdmprinter_def_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json"))
- for type, settings in not_valid_categories.items():
- if len(settings) > 0:
- has_invalid_settings = True
- print("The following categories are defined incorrectly")
- print(" Visibility type : '%s'" % (type))
- print(" Incorrect categories : '%s'" % (settings))
- print()
+ setting_visibility_files_dict = getAllSettingVisiblityFiles(setting_visibility_files_dir)
+ print("--- ", setting_visibility_files_dict)
+ inspector = SettingVisibilityInspection()
+ inspector.loadAllCuraSettingKeys(fdmprinter_def_path)
+ check_result = inspector.validateSettingsVisibility(setting_visibility_files_dict)
+ is_result_valid = not check_result["all_results"]["is_valid"]
+ inspector.printResults(check_result)
- for type, settings in not_valid_setting_by_category.items():
- if len(settings) > 0:
- has_invalid_settings = True
- print("The following settings do not exist anymore in fdmprinter definition or in wrong category")
- print(" Visibility type : '%s'" % (type))
- print(" Incorrect settings : '%s'" % (settings))
- print()
-
-
- for type, settings in not_valid_setting_by_order.items():
- if len(settings) > 0:
- has_invalid_settings = True
- print("The following settings are defined in the incorrect order in setting visibility definitions")
- print(" Visibility type : '%s'" % (type))
- print(" Incorrect settings : '%s'" % (settings))
-
- return has_invalid_settings
+ sys.exit(0 if is_result_valid else 1)
if __name__ == "__main__":
-
- all_setting_visibility_files = glob.glob(os.path.join(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility"), '*.cfg'))
- fdmprinter_def_path = os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json")
-
- inspector = SettingVisibilityInspection()
- inspector.defineAllCuraSettings(fdmprinter_def_path)
-
- setting_visibility_items = {}
- for file_path in all_setting_visibility_files:
- all_settings_from_visibility_type = inspector.getSettingsFromSettingVisibilityFile(file_path)
-
- base_name = os.path.basename(file_path)
- visibility_type = base_name.split(".")[0]
-
- setting_visibility_items[visibility_type] = all_settings_from_visibility_type
-
- has_invalid_settings = inspector.validateSettingsVisibility(setting_visibility_items)
-
- sys.exit(0 if not has_invalid_settings else 1)
+ main()
From 72b3f9eb2a861ff6037a9ac82b5e3e2566f46909 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 20 Sep 2018 15:12:54 +0200
Subject: [PATCH 060/390] Remove debugging lines
---
scripts/check_setting_visibility.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
index 41b1dc9095..fde1c2fb81 100755
--- a/scripts/check_setting_visibility.py
+++ b/scripts/check_setting_visibility.py
@@ -224,7 +224,6 @@ def main() -> None:
fdmprinter_def_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json"))
setting_visibility_files_dict = getAllSettingVisiblityFiles(setting_visibility_files_dir)
- print("--- ", setting_visibility_files_dict)
inspector = SettingVisibilityInspection()
inspector.loadAllCuraSettingKeys(fdmprinter_def_path)
From 884c5dea6733f35f19dcfb13eee0e60ac1f8bcf5 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 20 Sep 2018 15:14:50 +0200
Subject: [PATCH 061/390] Add check_setting_visibility.py to Jenkinsfile
---
Jenkinsfile | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/Jenkinsfile b/Jenkinsfile
index 8837fdf487..4f755dcae2 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -14,6 +14,7 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
catchError {
stage('Pre Checks') {
if (isUnix()) {
+ // Check shortcut keys
try {
sh """
echo 'Check for duplicate shortcut keys in all translation files.'
@@ -22,6 +23,16 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
} catch(e) {
currentBuild.result = "UNSTABLE"
}
+
+ // Check setting visibilities
+ try {
+ sh """
+ echo 'Check for duplicate shortcut keys in all translation files.'
+ ${env.CURA_ENVIRONMENT_PATH}/master/bin/python3 scripts/check_setting_visibility.py
+ """
+ } catch(e) {
+ currentBuild.result = "UNSTABLE"
+ }
}
}
From 0bc91132edf721564e49b7d23b79229f4c807361 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 20 Sep 2018 15:18:58 +0200
Subject: [PATCH 062/390] Fix check_setting_visibility return value
---
scripts/check_setting_visibility.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
index fde1c2fb81..8fb5d5b293 100755
--- a/scripts/check_setting_visibility.py
+++ b/scripts/check_setting_visibility.py
@@ -229,7 +229,7 @@ def main() -> None:
inspector.loadAllCuraSettingKeys(fdmprinter_def_path)
check_result = inspector.validateSettingsVisibility(setting_visibility_files_dict)
- is_result_valid = not check_result["all_results"]["is_valid"]
+ is_result_valid = check_result["all_results"]["is_valid"]
inspector.printResults(check_result)
sys.exit(0 if is_result_valid else 1)
From 2dbaa304a01ff67621bfc2638444dc4fe8f0f825 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 20 Sep 2018 15:22:35 +0200
Subject: [PATCH 063/390] Set textFormat for the setting items to PlainText
Based on the Qt guide on making qml run much faster, it seems that the default of textFormatting (auto)
is quite expensive. As we make a *lot* of settingItems, which we don't want to format, it's better to set it to plain.
I haven't checked how much faster it actually is, but i didn't see visual changes, so it's at least a safe step.
---
resources/qml/Settings/SettingCategory.qml | 1 +
resources/qml/Settings/SettingComboBox.qml | 2 ++
resources/qml/Settings/SettingExtruder.qml | 1 +
resources/qml/Settings/SettingItem.qml | 1 +
resources/qml/Settings/SettingOptionalExtruder.qml | 2 ++
resources/qml/Settings/SettingTextField.qml | 1 +
resources/qml/Settings/SettingView.qml | 7 ++++---
7 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml
index 842b3fd185..e3202323eb 100644
--- a/resources/qml/Settings/SettingCategory.qml
+++ b/resources/qml/Settings/SettingCategory.qml
@@ -79,6 +79,7 @@ Button
verticalCenter: parent.verticalCenter;
}
text: definition.label
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
font: UM.Theme.getFont("setting_category")
color:
diff --git a/resources/qml/Settings/SettingComboBox.qml b/resources/qml/Settings/SettingComboBox.qml
index 5d283d5ebb..76d458e427 100644
--- a/resources/qml/Settings/SettingComboBox.qml
+++ b/resources/qml/Settings/SettingComboBox.qml
@@ -73,6 +73,7 @@ SettingItem
anchors.right: downArrow.left
text: control.currentText
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
font: UM.Theme.getFont("default")
color: !enabled ? UM.Theme.getColor("setting_control_disabled_text") : UM.Theme.getColor("setting_control_text")
@@ -115,6 +116,7 @@ SettingItem
anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width
text: modelData.value
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
color: control.contentItem.color
font: UM.Theme.getFont("default")
diff --git a/resources/qml/Settings/SettingExtruder.qml b/resources/qml/Settings/SettingExtruder.qml
index 4c00a60d0e..a9427f863a 100644
--- a/resources/qml/Settings/SettingExtruder.qml
+++ b/resources/qml/Settings/SettingExtruder.qml
@@ -145,6 +145,7 @@ SettingItem
rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width
text: control.currentText
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
font: UM.Theme.getFont("default")
color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text")
diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml
index 34bf9df921..ba7dfd05b6 100644
--- a/resources/qml/Settings/SettingItem.qml
+++ b/resources/qml/Settings/SettingItem.qml
@@ -115,6 +115,7 @@ Item {
text: definition.label
elide: Text.ElideMiddle;
renderType: Text.NativeRendering
+ textFormat: Text.PlainText
color: UM.Theme.getColor("setting_control_text");
opacity: (definition.visible) ? 1 : 0.5
diff --git a/resources/qml/Settings/SettingOptionalExtruder.qml b/resources/qml/Settings/SettingOptionalExtruder.qml
index 2d4f25125f..a3c1422b30 100644
--- a/resources/qml/Settings/SettingOptionalExtruder.qml
+++ b/resources/qml/Settings/SettingOptionalExtruder.qml
@@ -140,6 +140,7 @@ SettingItem
rightPadding: swatch.width + UM.Theme.getSize("setting_unit_margin").width
text: control.currentText
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
font: UM.Theme.getFont("default")
color: enabled ? UM.Theme.getColor("setting_control_text") : UM.Theme.getColor("setting_control_disabled_text")
@@ -199,6 +200,7 @@ SettingItem
anchors.rightMargin: UM.Theme.getSize("setting_unit_margin").width
text: model.name
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
color:
{
diff --git a/resources/qml/Settings/SettingTextField.qml b/resources/qml/Settings/SettingTextField.qml
index c2c04ce36c..15782829d3 100644
--- a/resources/qml/Settings/SettingTextField.qml
+++ b/resources/qml/Settings/SettingTextField.qml
@@ -94,6 +94,7 @@ SettingItem
anchors.verticalCenter: parent.verticalCenter
text: definition.unit
+ textFormat: Text.PlainText
renderType: Text.NativeRendering
color: UM.Theme.getColor("setting_unit")
font: UM.Theme.getFont("default")
diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml
index e17f11bf99..da50b430ac 100644
--- a/resources/qml/Settings/SettingView.qml
+++ b/resources/qml/Settings/SettingView.qml
@@ -39,10 +39,11 @@ Item
Label
{
id: globalProfileLabel
- text: catalog.i18nc("@label","Profile:");
+ text: catalog.i18nc("@label","Profile:")
+ textFormat: Text.PlainText
width: Math.round(parent.width * 0.45 - UM.Theme.getSize("sidebar_margin").width - 2)
- font: UM.Theme.getFont("default");
- color: UM.Theme.getColor("text");
+ font: UM.Theme.getFont("default")
+ color: UM.Theme.getColor("text")
verticalAlignment: Text.AlignVCenter
anchors.top: parent.top
anchors.bottom: parent.bottom
From 0e44a782514e6497c98a77d692121a67aea04a79 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Thu, 20 Sep 2018 15:33:10 +0200
Subject: [PATCH 064/390] Set non-NOTIFY properties to constants
---
cura/PrinterOutput/ConfigurationChangeModel.py | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/cura/PrinterOutput/ConfigurationChangeModel.py b/cura/PrinterOutput/ConfigurationChangeModel.py
index b032a08ec2..f40a0c2e6b 100644
--- a/cura/PrinterOutput/ConfigurationChangeModel.py
+++ b/cura/PrinterOutput/ConfigurationChangeModel.py
@@ -1,7 +1,8 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
-
class ConfigurationChangeModel(QObject):
def __init__(self, type_of_change: str, index: int, target_name: str, origin_name: str) -> None:
super().__init__()
@@ -11,20 +12,20 @@ class ConfigurationChangeModel(QObject):
self._target_name = target_name
self._origin_name = origin_name
- @pyqtProperty(int)
+ @pyqtProperty(int, constant = True)
def index(self) -> int:
return self._index
# "target_id": fields.String(required=True, description="Target material guid or hotend id"),
# "origin_id": fields.String(required=True, description="Original/current material guid or hotend id"),
- @pyqtProperty(str)
+ @pyqtProperty(str, constant = True)
def typeOfChange(self) -> str:
return self._type_of_change
- @pyqtProperty(str)
+ @pyqtProperty(str, constant = True)
def targetName(self) -> str:
return self._target_name
- @pyqtProperty(str)
+ @pyqtProperty(str, constant = True)
def originName(self) -> str:
return self._origin_name
From a2f5dda564654e7b0c7900aae2bb2d9f90c3092d Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Thu, 20 Sep 2018 17:13:45 +0200
Subject: [PATCH 065/390] Out with the old...
Contributes to CL-897
---
.../resources/qml/PrintJobInfoBlock.qml | 1306 ++++++++---------
1 file changed, 652 insertions(+), 654 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index aa6c9a72df..4e79d1ce4e 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -5,659 +5,657 @@ import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
-
import UM 1.3 as UM
-
-Item
-{
- id: base
-
- function haveAlert() {
- return printJob.configurationChanges.length !== 0;
- }
-
- function alertHeight() {
- return haveAlert() ? 230 : 0;
- }
-
- function alertText() {
- if (printJob.configurationChanges.length === 0) {
- return "";
- }
-
- var topLine;
- if (materialsAreKnown(printJob)) {
- topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(printJob.assignedPrinter.name);
- } else {
- topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printJob.assignedPrinter.name);
- }
- var result = "" + topLine +"
";
-
- for (var i=0; i" + text + " ";
- }
- return result;
- }
-
- function materialsAreKnown(printJob) {
- var conf0 = printJob.configuration[0];
- if (conf0 && !conf0.material.material) {
- return false;
- }
-
- var conf1 = printJob.configuration[1];
- if (conf1 && !conf1.material.material) {
- return false;
- }
-
- return true;
- }
-
- function formatBuildPlateType(buildPlateType) {
- var translationText = "";
-
- switch (buildPlateType) {
- case 'glass':
- translationText = catalog.i18nc("@label", "Glass");
- break;
- case 'aluminum':
- translationText = catalog.i18nc("@label", "Aluminum");
- break;
- default:
- translationText = null;
- }
- return translationText;
- }
-
- function formatPrintJobName(name) {
- var extensionsToRemove = [
- '.gz',
- '.gcode',
- '.ufp'
- ];
-
- for (var i = 0; i < extensionsToRemove.length; i++) {
- var extension = extensionsToRemove[i];
-
- if (name.slice(-extension.length) === extension) {
- name = name.substring(0, name.length - extension.length);
- }
- }
-
- return name;
- }
-
- function isPrintJobForcable(printJob) {
- var forcable = true;
-
- for (var i = 0; i < printJob.configurationChanges.length; i++) {
- var typeOfChange = printJob.configurationChanges[i].typeOfChange;
- if (typeOfChange === 'material_insert' || typeOfChange === 'buildplate_change') {
- forcable = false;
- }
- }
-
- return forcable;
- }
-
- property var cardHeight: 175
-
- height: (cardHeight + alertHeight()) * screenScaleFactor
- property var printJob: null
- property var shadowRadius: 5 * screenScaleFactor
- function getPrettyTime(time)
- {
- return OutputDevice.formatDuration(time)
- }
-
- width: parent.width
-
- UM.I18nCatalog
- {
- id: catalog
- name: "cura"
- }
-
- Rectangle
- {
- id: background
-
- height: (cardHeight + alertHeight()) * screenScaleFactor
-
- anchors
- {
- top: parent.top
- topMargin: 3 * screenScaleFactor
- left: parent.left
- leftMargin: base.shadowRadius
- rightMargin: base.shadowRadius
- right: parent.right
- //bottom: parent.bottom - alertHeight() * screenScaleFactor
- bottomMargin: base.shadowRadius
- }
-
- layer.enabled: true
- layer.effect: DropShadow
- {
- radius: base.shadowRadius
- verticalOffset: 2 * screenScaleFactor
- color: "#3F000000" // 25% shadow
- }
-
- Rectangle
- {
- height: cardHeight * screenScaleFactor
-
- anchors
- {
- top: parent.top
- left: parent.left
- right: parent.right
- // bottom: parent.bottom
- }
-
- Item
- {
- // Content on the left of the infobox
- anchors
- {
- top: parent.top
- bottom: parent.bottom
- left: parent.left
- right: parent.horizontalCenter
- margins: UM.Theme.getSize("wide_margin").width
- rightMargin: UM.Theme.getSize("default_margin").width
- }
-
- Label
- {
- id: printJobName
- text: printJob.name
- font: UM.Theme.getFont("default_bold")
- width: parent.width
- elide: Text.ElideRight
- }
-
- Label
- {
- id: ownerName
- anchors.top: printJobName.bottom
- text: printJob.owner
- font: UM.Theme.getFont("default")
- opacity: 0.6
- width: parent.width
- elide: Text.ElideRight
- }
-
- Image
- {
- id: printJobPreview
- source: printJob.previewImageUrl
- anchors.top: ownerName.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: totalTimeLabel.bottom
- width: height
- opacity: printJob.state == "error" ? 0.5 : 1.0
- }
-
- UM.RecolorImage
- {
- id: statusImage
- anchors.centerIn: printJobPreview
- source: printJob.state == "error" ? "../svg/aborted-icon.svg" : ""
- visible: source != ""
- width: 0.5 * printJobPreview.width
- height: 0.5 * printJobPreview.height
- sourceSize.width: width
- sourceSize.height: height
- color: "black"
- }
-
- Label
- {
- id: totalTimeLabel
- anchors.bottom: parent.bottom
- anchors.right: parent.right
- font: UM.Theme.getFont("default")
- text: printJob != null ? getPrettyTime(printJob.timeTotal) : ""
- elide: Text.ElideRight
- }
- }
-
- Item
- {
- // Content on the right side of the infobox.
- anchors
- {
- top: parent.top
- bottom: parent.bottom
- left: parent.horizontalCenter
- right: parent.right
- margins: 2 * UM.Theme.getSize("default_margin").width
- leftMargin: UM.Theme.getSize("default_margin").width
- rightMargin: UM.Theme.getSize("default_margin").width / 2
- }
-
- Label
- {
- id: targetPrinterLabel
- elide: Text.ElideRight
- font: UM.Theme.getFont("default_bold")
- text:
- {
- if(printJob.assignedPrinter == null)
- {
- if(printJob.state == "error")
- {
- return catalog.i18nc("@label", "Waiting for: Unavailable printer")
- }
- return catalog.i18nc("@label", "Waiting for: First available")
- }
- else
- {
- return catalog.i18nc("@label", "Waiting for: ") + printJob.assignedPrinter.name
- }
-
- }
-
- anchors
- {
- left: parent.left
- right: contextButton.left
- rightMargin: UM.Theme.getSize("default_margin").width
- }
- }
-
-
- function switchPopupState()
- {
- popup.visible ? popup.close() : popup.open()
- }
-
- Button
- {
- id: contextButton
- text: "\u22EE" //Unicode; Three stacked points.
- width: 35
- height: width
- anchors
- {
- right: parent.right
- top: parent.top
- }
- hoverEnabled: true
-
- background: Rectangle
- {
- opacity: contextButton.down || contextButton.hovered ? 1 : 0
- width: contextButton.width
- height: contextButton.height
- radius: 0.5 * width
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: contextButton.text
- color: UM.Theme.getColor("monitor_text_inactive")
- font.pixelSize: 25
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
-
- onClicked: parent.switchPopupState()
- }
-
- Popup
- {
- // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
- id: popup
- clip: true
- closePolicy: Popup.CloseOnPressOutside
- x: (parent.width - width) + 26 * screenScaleFactor
- y: contextButton.height - 5 * screenScaleFactor // Because shadow
- width: 182 * screenScaleFactor
- height: contentItem.height + 2 * padding
- visible: false
- padding: 5 * screenScaleFactor // Because shadow
-
- transformOrigin: Popup.Top
- contentItem: Item
- {
- width: popup.width
- height: childrenRect.height + 36 * screenScaleFactor
- anchors.topMargin: 10 * screenScaleFactor
- anchors.bottomMargin: 10 * screenScaleFactor
- Button
- {
- id: sendToTopButton
- text: catalog.i18nc("@label", "Move to top")
- onClicked:
- {
- sendToTopConfirmationDialog.visible = true;
- popup.close();
- }
- width: parent.width
- enabled: OutputDevice.queuedPrintJobs[0].key != printJob.key
- visible: enabled
- anchors.top: parent.top
- anchors.topMargin: 18 * screenScaleFactor
- height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
- hoverEnabled: true
- background: Rectangle
- {
- opacity: sendToTopButton.down || sendToTopButton.hovered ? 1 : 0
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: sendToTopButton.text
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- }
- }
-
- MessageDialog
- {
- id: sendToTopConfirmationDialog
- title: catalog.i18nc("@window:title", "Move print job to top")
- icon: StandardIcon.Warning
- text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name)
- standardButtons: StandardButton.Yes | StandardButton.No
- Component.onCompleted: visible = false
- onYes: OutputDevice.sendJobToTop(printJob.key)
- }
-
- Button
- {
- id: deleteButton
- text: catalog.i18nc("@label", "Delete")
- onClicked:
- {
- deleteConfirmationDialog.visible = true;
- popup.close();
- }
- width: parent.width
- height: 39 * screenScaleFactor
- anchors.top: sendToTopButton.bottom
- hoverEnabled: true
- background: Rectangle
- {
- opacity: deleteButton.down || deleteButton.hovered ? 1 : 0
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: deleteButton.text
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- }
- }
-
- MessageDialog
- {
- id: deleteConfirmationDialog
- title: catalog.i18nc("@window:title", "Delete print job")
- icon: StandardIcon.Warning
- text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name)
- standardButtons: StandardButton.Yes | StandardButton.No
- Component.onCompleted: visible = false
- onYes: OutputDevice.deleteJobFromQueue(printJob.key)
- }
- }
-
- background: Item
- {
- width: popup.width
- height: popup.height
-
- DropShadow
- {
- anchors.fill: pointedRectangle
- radius: 5
- color: "#3F000000" // 25% shadow
- source: pointedRectangle
- transparentBorder: true
- verticalOffset: 2
- }
-
- Item
- {
- id: pointedRectangle
- width: parent.width - 10 * screenScaleFactor // Because of the shadow
- height: parent.height - 10 * screenScaleFactor // Because of the shadow
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
-
- Rectangle
- {
- id: point
- height: 14 * screenScaleFactor
- width: 14 * screenScaleFactor
- color: UM.Theme.getColor("setting_control")
- transform: Rotation { angle: 45}
- anchors.right: bloop.right
- anchors.rightMargin: 24
- y: 1
- }
-
- Rectangle
- {
- id: bloop
- color: UM.Theme.getColor("setting_control")
- width: parent.width
- anchors.top: parent.top
- anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
- }
- }
- }
-
- exit: Transition
- {
- // This applies a default NumberAnimation to any changes a state change makes to x or y properties
- NumberAnimation { property: "visible"; duration: 75; }
- }
- enter: Transition
- {
- // This applies a default NumberAnimation to any changes a state change makes to x or y properties
- NumberAnimation { property: "visible"; duration: 75; }
- }
-
- onClosed: visible = false
- onOpened: visible = true
- }
-
- Row
- {
- id: printerFamilyPills
- spacing: 0.5 * UM.Theme.getSize("default_margin").width
- anchors
- {
- left: parent.left
- right: parent.right
- bottom: extrudersInfo.top
- bottomMargin: UM.Theme.getSize("default_margin").height
- }
- height: childrenRect.height
- Repeater
- {
- model: printJob.compatibleMachineFamilies
-
- delegate: PrinterFamilyPill
- {
- text: modelData
- color: UM.Theme.getColor("viewport_background")
- padding: 3 * screenScaleFactor
- }
- }
- }
- // PrintCore && Material config
- Row
- {
- id: extrudersInfo
- anchors.bottom: parent.bottom
-
- anchors
- {
- left: parent.left
- right: parent.right
- }
- height: childrenRect.height
-
- spacing: UM.Theme.getSize("default_margin").width
-
- PrintCoreConfiguration
- {
- id: leftExtruderInfo
- width: Math.round(parent.width / 2) * screenScaleFactor
- printCoreConfiguration: printJob.configuration.extruderConfigurations[0]
- }
-
- PrintCoreConfiguration
- {
- id: rightExtruderInfo
- width: Math.round(parent.width / 2) * screenScaleFactor
- printCoreConfiguration: printJob.configuration.extruderConfigurations[1]
- }
- }
-
- }
- }
- Rectangle
- {
- height: cardHeight * screenScaleFactor
- color: UM.Theme.getColor("viewport_background")
- width: 2 * screenScaleFactor
- anchors.top: parent.top
- anchors.margins: UM.Theme.getSize("default_margin").height
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- // Alert / Configuration change box
- Rectangle
- {
- height: alertHeight() * screenScaleFactor
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.bottom: parent.bottom
-
-color: "#ff00ff"
- ColumnLayout
- {
- anchors.fill: parent
- RowLayout
- {
- Item
- {
- Layout.fillWidth: true
- }
-
- Label
- {
- font: UM.Theme.getFont("default_bold")
- text: "Configuration change"
- }
-
- UM.RecolorImage
- {
- id: collapseIcon
- width: 15
- height: 15
- sourceSize.width: width
- sourceSize.height: height
-
- // FIXME
- source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom")
- color: "black"
- }
-
- Item
- {
- Layout.fillWidth: true
- }
-
- }
-
- Rectangle
- {
- Layout.fillHeight: true
- Layout.fillWidth: true
-color: "red"
-
- Rectangle
- {
-color: "green"
- width: childrenRect.width
-
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.top: parent.top
- anchors.bottom: parent.bottom
-
- ColumnLayout
- {
- width: childrenRect.width
-
- anchors.top: parent.top
- anchors.bottom: parent.bottom
-
- Text
- {
- Layout.alignment: Qt.AlignTop
-
- textFormat: Text.StyledText
- font: UM.Theme.getFont("default_bold")
- text: alertText()
- }
-
- Button
- {
- visible: isPrintJobForcable(printJob)
- text: catalog.i18nc("@label", "Override")
- onClicked: {
- overrideConfirmationDialog.visible = true;
- }
- }
-
- // Spacer
- Item
- {
- Layout.fillHeight: true
- }
- }
- }
- }
- }
- }
-
- MessageDialog
- {
- id: overrideConfirmationDialog
- title: catalog.i18nc("@window:title", "Override configuration configuration and start print")
- icon: StandardIcon.Warning
- text: {
- var printJobName = formatPrintJobName(printJob.name);
- var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
- return confirmText;
- }
-
- standardButtons: StandardButton.Yes | StandardButton.No
- Component.onCompleted: visible = false
- onYes: OutputDevice.forceSendJob(printJob.key)
- }
- }
-}
\ No newline at end of file
+// Item
+// {
+// id: base
+
+// function haveAlert() {
+// return printJob.configurationChanges.length !== 0;
+// }
+
+// function alertHeight() {
+// return haveAlert() ? 230 : 0;
+// }
+
+// function alertText() {
+// if (printJob.configurationChanges.length === 0) {
+// return "";
+// }
+
+// var topLine;
+// if (materialsAreKnown(printJob)) {
+// topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(printJob.assignedPrinter.name);
+// } else {
+// topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printJob.assignedPrinter.name);
+// }
+// var result = "" + topLine +"
";
+
+// for (var i=0; i" + text + " ";
+// }
+// return result;
+// }
+
+// function materialsAreKnown(printJob) {
+// var conf0 = printJob.configuration[0];
+// if (conf0 && !conf0.material.material) {
+// return false;
+// }
+
+// var conf1 = printJob.configuration[1];
+// if (conf1 && !conf1.material.material) {
+// return false;
+// }
+
+// return true;
+// }
+
+// function formatBuildPlateType(buildPlateType) {
+// var translationText = "";
+
+// switch (buildPlateType) {
+// case 'glass':
+// translationText = catalog.i18nc("@label", "Glass");
+// break;
+// case 'aluminum':
+// translationText = catalog.i18nc("@label", "Aluminum");
+// break;
+// default:
+// translationText = null;
+// }
+// return translationText;
+// }
+
+// function formatPrintJobName(name) {
+// var extensionsToRemove = [
+// '.gz',
+// '.gcode',
+// '.ufp'
+// ];
+
+// for (var i = 0; i < extensionsToRemove.length; i++) {
+// var extension = extensionsToRemove[i];
+
+// if (name.slice(-extension.length) === extension) {
+// name = name.substring(0, name.length - extension.length);
+// }
+// }
+
+// return name;
+// }
+
+// function isPrintJobForcable(printJob) {
+// var forcable = true;
+
+// for (var i = 0; i < printJob.configurationChanges.length; i++) {
+// var typeOfChange = printJob.configurationChanges[i].typeOfChange;
+// if (typeOfChange === 'material_insert' || typeOfChange === 'buildplate_change') {
+// forcable = false;
+// }
+// }
+
+// return forcable;
+// }
+
+// property var cardHeight: 175
+
+// height: (cardHeight + alertHeight()) * screenScaleFactor
+// property var printJob: null
+// property var shadowRadius: 5 * screenScaleFactor
+// function getPrettyTime(time)
+// {
+// return OutputDevice.formatDuration(time)
+// }
+
+// width: parent.width
+
+// UM.I18nCatalog
+// {
+// id: catalog
+// name: "cura"
+// }
+
+// Rectangle
+// {
+// id: background
+
+// height: (cardHeight + alertHeight()) * screenScaleFactor
+
+// anchors
+// {
+// top: parent.top
+// topMargin: 3 * screenScaleFactor
+// left: parent.left
+// leftMargin: base.shadowRadius
+// rightMargin: base.shadowRadius
+// right: parent.right
+// //bottom: parent.bottom - alertHeight() * screenScaleFactor
+// bottomMargin: base.shadowRadius
+// }
+
+// layer.enabled: true
+// layer.effect: DropShadow
+// {
+// radius: base.shadowRadius
+// verticalOffset: 2 * screenScaleFactor
+// color: "#3F000000" // 25% shadow
+// }
+
+// Rectangle
+// {
+// height: cardHeight * screenScaleFactor
+
+// anchors
+// {
+// top: parent.top
+// left: parent.left
+// right: parent.right
+// // bottom: parent.bottom
+// }
+
+// Item
+// {
+// // Content on the left of the infobox
+// anchors
+// {
+// top: parent.top
+// bottom: parent.bottom
+// left: parent.left
+// right: parent.horizontalCenter
+// margins: UM.Theme.getSize("wide_margin").width
+// rightMargin: UM.Theme.getSize("default_margin").width
+// }
+
+// Label
+// {
+// id: printJobName
+// text: printJob.name
+// font: UM.Theme.getFont("default_bold")
+// width: parent.width
+// elide: Text.ElideRight
+// }
+
+// Label
+// {
+// id: ownerName
+// anchors.top: printJobName.bottom
+// text: printJob.owner
+// font: UM.Theme.getFont("default")
+// opacity: 0.6
+// width: parent.width
+// elide: Text.ElideRight
+// }
+
+// Image
+// {
+// id: printJobPreview
+// source: printJob.previewImageUrl
+// anchors.top: ownerName.bottom
+// anchors.horizontalCenter: parent.horizontalCenter
+// anchors.bottom: totalTimeLabel.bottom
+// width: height
+// opacity: printJob.state == "error" ? 0.5 : 1.0
+// }
+
+// UM.RecolorImage
+// {
+// id: statusImage
+// anchors.centerIn: printJobPreview
+// source: printJob.state == "error" ? "../svg/aborted-icon.svg" : ""
+// visible: source != ""
+// width: 0.5 * printJobPreview.width
+// height: 0.5 * printJobPreview.height
+// sourceSize.width: width
+// sourceSize.height: height
+// color: "black"
+// }
+
+// Label
+// {
+// id: totalTimeLabel
+// anchors.bottom: parent.bottom
+// anchors.right: parent.right
+// font: UM.Theme.getFont("default")
+// text: printJob != null ? getPrettyTime(printJob.timeTotal) : ""
+// elide: Text.ElideRight
+// }
+// }
+
+// Item
+// {
+// // Content on the right side of the infobox.
+// anchors
+// {
+// top: parent.top
+// bottom: parent.bottom
+// left: parent.horizontalCenter
+// right: parent.right
+// margins: 2 * UM.Theme.getSize("default_margin").width
+// leftMargin: UM.Theme.getSize("default_margin").width
+// rightMargin: UM.Theme.getSize("default_margin").width / 2
+// }
+
+// Label
+// {
+// id: targetPrinterLabel
+// elide: Text.ElideRight
+// font: UM.Theme.getFont("default_bold")
+// text:
+// {
+// if(printJob.assignedPrinter == null)
+// {
+// if(printJob.state == "error")
+// {
+// return catalog.i18nc("@label", "Waiting for: Unavailable printer")
+// }
+// return catalog.i18nc("@label", "Waiting for: First available")
+// }
+// else
+// {
+// return catalog.i18nc("@label", "Waiting for: ") + printJob.assignedPrinter.name
+// }
+
+// }
+
+// anchors
+// {
+// left: parent.left
+// right: contextButton.left
+// rightMargin: UM.Theme.getSize("default_margin").width
+// }
+// }
+
+
+// function switchPopupState()
+// {
+// popup.visible ? popup.close() : popup.open()
+// }
+
+// Button
+// {
+// id: contextButton
+// text: "\u22EE" //Unicode; Three stacked points.
+// width: 35
+// height: width
+// anchors
+// {
+// right: parent.right
+// top: parent.top
+// }
+// hoverEnabled: true
+
+// background: Rectangle
+// {
+// opacity: contextButton.down || contextButton.hovered ? 1 : 0
+// width: contextButton.width
+// height: contextButton.height
+// radius: 0.5 * width
+// color: UM.Theme.getColor("viewport_background")
+// }
+// contentItem: Label
+// {
+// text: contextButton.text
+// color: UM.Theme.getColor("monitor_text_inactive")
+// font.pixelSize: 25
+// verticalAlignment: Text.AlignVCenter
+// horizontalAlignment: Text.AlignHCenter
+// }
+
+// onClicked: parent.switchPopupState()
+// }
+
+// Popup
+// {
+// // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
+// id: popup
+// clip: true
+// closePolicy: Popup.CloseOnPressOutside
+// x: (parent.width - width) + 26 * screenScaleFactor
+// y: contextButton.height - 5 * screenScaleFactor // Because shadow
+// width: 182 * screenScaleFactor
+// height: contentItem.height + 2 * padding
+// visible: false
+// padding: 5 * screenScaleFactor // Because shadow
+
+// transformOrigin: Popup.Top
+// contentItem: Item
+// {
+// width: popup.width
+// height: childrenRect.height + 36 * screenScaleFactor
+// anchors.topMargin: 10 * screenScaleFactor
+// anchors.bottomMargin: 10 * screenScaleFactor
+// Button
+// {
+// id: sendToTopButton
+// text: catalog.i18nc("@label", "Move to top")
+// onClicked:
+// {
+// sendToTopConfirmationDialog.visible = true;
+// popup.close();
+// }
+// width: parent.width
+// enabled: OutputDevice.queuedPrintJobs[0].key != printJob.key
+// visible: enabled
+// anchors.top: parent.top
+// anchors.topMargin: 18 * screenScaleFactor
+// height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
+// hoverEnabled: true
+// background: Rectangle
+// {
+// opacity: sendToTopButton.down || sendToTopButton.hovered ? 1 : 0
+// color: UM.Theme.getColor("viewport_background")
+// }
+// contentItem: Label
+// {
+// text: sendToTopButton.text
+// horizontalAlignment: Text.AlignLeft
+// verticalAlignment: Text.AlignVCenter
+// }
+// }
+
+// MessageDialog
+// {
+// id: sendToTopConfirmationDialog
+// title: catalog.i18nc("@window:title", "Move print job to top")
+// icon: StandardIcon.Warning
+// text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name)
+// standardButtons: StandardButton.Yes | StandardButton.No
+// Component.onCompleted: visible = false
+// onYes: OutputDevice.sendJobToTop(printJob.key)
+// }
+
+// Button
+// {
+// id: deleteButton
+// text: catalog.i18nc("@label", "Delete")
+// onClicked:
+// {
+// deleteConfirmationDialog.visible = true;
+// popup.close();
+// }
+// width: parent.width
+// height: 39 * screenScaleFactor
+// anchors.top: sendToTopButton.bottom
+// hoverEnabled: true
+// background: Rectangle
+// {
+// opacity: deleteButton.down || deleteButton.hovered ? 1 : 0
+// color: UM.Theme.getColor("viewport_background")
+// }
+// contentItem: Label
+// {
+// text: deleteButton.text
+// horizontalAlignment: Text.AlignLeft
+// verticalAlignment: Text.AlignVCenter
+// }
+// }
+
+// MessageDialog
+// {
+// id: deleteConfirmationDialog
+// title: catalog.i18nc("@window:title", "Delete print job")
+// icon: StandardIcon.Warning
+// text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name)
+// standardButtons: StandardButton.Yes | StandardButton.No
+// Component.onCompleted: visible = false
+// onYes: OutputDevice.deleteJobFromQueue(printJob.key)
+// }
+// }
+
+// background: Item
+// {
+// width: popup.width
+// height: popup.height
+
+// DropShadow
+// {
+// anchors.fill: pointedRectangle
+// radius: 5
+// color: "#3F000000" // 25% shadow
+// source: pointedRectangle
+// transparentBorder: true
+// verticalOffset: 2
+// }
+
+// Item
+// {
+// id: pointedRectangle
+// width: parent.width - 10 * screenScaleFactor // Because of the shadow
+// height: parent.height - 10 * screenScaleFactor // Because of the shadow
+// anchors.horizontalCenter: parent.horizontalCenter
+// anchors.verticalCenter: parent.verticalCenter
+
+// Rectangle
+// {
+// id: point
+// height: 14 * screenScaleFactor
+// width: 14 * screenScaleFactor
+// color: UM.Theme.getColor("setting_control")
+// transform: Rotation { angle: 45}
+// anchors.right: bloop.right
+// anchors.rightMargin: 24
+// y: 1
+// }
+
+// Rectangle
+// {
+// id: bloop
+// color: UM.Theme.getColor("setting_control")
+// width: parent.width
+// anchors.top: parent.top
+// anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
+// anchors.bottom: parent.bottom
+// anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
+// }
+// }
+// }
+
+// exit: Transition
+// {
+// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
+// NumberAnimation { property: "visible"; duration: 75; }
+// }
+// enter: Transition
+// {
+// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
+// NumberAnimation { property: "visible"; duration: 75; }
+// }
+
+// onClosed: visible = false
+// onOpened: visible = true
+// }
+
+// Row
+// {
+// id: printerFamilyPills
+// spacing: 0.5 * UM.Theme.getSize("default_margin").width
+// anchors
+// {
+// left: parent.left
+// right: parent.right
+// bottom: extrudersInfo.top
+// bottomMargin: UM.Theme.getSize("default_margin").height
+// }
+// height: childrenRect.height
+// Repeater
+// {
+// model: printJob.compatibleMachineFamilies
+
+// delegate: PrinterFamilyPill
+// {
+// text: modelData
+// color: UM.Theme.getColor("viewport_background")
+// padding: 3 * screenScaleFactor
+// }
+// }
+// }
+// // PrintCore && Material config
+// Row
+// {
+// id: extrudersInfo
+// anchors.bottom: parent.bottom
+
+// anchors
+// {
+// left: parent.left
+// right: parent.right
+// }
+// height: childrenRect.height
+
+// spacing: UM.Theme.getSize("default_margin").width
+
+// PrintCoreConfiguration
+// {
+// id: leftExtruderInfo
+// width: Math.round(parent.width / 2) * screenScaleFactor
+// printCoreConfiguration: printJob.configuration.extruderConfigurations[0]
+// }
+
+// PrintCoreConfiguration
+// {
+// id: rightExtruderInfo
+// width: Math.round(parent.width / 2) * screenScaleFactor
+// printCoreConfiguration: printJob.configuration.extruderConfigurations[1]
+// }
+// }
+
+// }
+// }
+// Rectangle
+// {
+// height: cardHeight * screenScaleFactor
+// color: UM.Theme.getColor("viewport_background")
+// width: 2 * screenScaleFactor
+// anchors.top: parent.top
+// anchors.margins: UM.Theme.getSize("default_margin").height
+// anchors.horizontalCenter: parent.horizontalCenter
+// }
+
+// // Alert / Configuration change box
+// Rectangle
+// {
+// height: alertHeight() * screenScaleFactor
+
+// anchors.left: parent.left
+// anchors.right: parent.right
+// anchors.bottom: parent.bottom
+
+// color: "#ff00ff"
+// ColumnLayout
+// {
+// anchors.fill: parent
+// RowLayout
+// {
+// Item
+// {
+// Layout.fillWidth: true
+// }
+
+// Label
+// {
+// font: UM.Theme.getFont("default_bold")
+// text: "Configuration change"
+// }
+
+// UM.RecolorImage
+// {
+// id: collapseIcon
+// width: 15
+// height: 15
+// sourceSize.width: width
+// sourceSize.height: height
+
+// // FIXME
+// source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom")
+// color: "black"
+// }
+
+// Item
+// {
+// Layout.fillWidth: true
+// }
+
+// }
+
+// Rectangle
+// {
+// Layout.fillHeight: true
+// Layout.fillWidth: true
+// color: "red"
+
+// Rectangle
+// {
+// color: "green"
+// width: childrenRect.width
+
+// anchors.horizontalCenter: parent.horizontalCenter
+// anchors.top: parent.top
+// anchors.bottom: parent.bottom
+
+// ColumnLayout
+// {
+// width: childrenRect.width
+
+// anchors.top: parent.top
+// anchors.bottom: parent.bottom
+
+// Text
+// {
+// Layout.alignment: Qt.AlignTop
+
+// textFormat: Text.StyledText
+// font: UM.Theme.getFont("default_bold")
+// text: alertText()
+// }
+
+// Button
+// {
+// visible: isPrintJobForcable(printJob)
+// text: catalog.i18nc("@label", "Override")
+// onClicked: {
+// overrideConfirmationDialog.visible = true;
+// }
+// }
+
+// // Spacer
+// Item
+// {
+// Layout.fillHeight: true
+// }
+// }
+// }
+// }
+// }
+// }
+
+// MessageDialog
+// {
+// id: overrideConfirmationDialog
+// title: catalog.i18nc("@window:title", "Override configuration configuration and start print")
+// icon: StandardIcon.Warning
+// text: {
+// var printJobName = formatPrintJobName(printJob.name);
+// var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
+// return confirmText;
+// }
+
+// standardButtons: StandardButton.Yes | StandardButton.No
+// Component.onCompleted: visible = false
+// onYes: OutputDevice.forceSendJob(printJob.key)
+// }
+// }
+// }
\ No newline at end of file
From 50e07ae2a782a84a9b9bedd32c613192c02bc502 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Thu, 20 Sep 2018 17:14:19 +0200
Subject: [PATCH 066/390] ...and in with the new.
Contributes to CL-897
---
.../resources/qml/PrintJobInfoBlock.qml | 149 ++++++++++++++++++
1 file changed, 149 insertions(+)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 4e79d1ce4e..aa2bcc7906 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -7,6 +7,155 @@ import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
import UM 1.3 as UM
+Item {
+
+ id: root
+
+ property var shadowRadius: 5;
+ property var shadowOffset: 2;
+ property var debug: true;
+ property var printJob: null;
+ property var hasChanges: {
+ if (printJob) {
+ return printJob.configurationChanges.length !== 0;
+ }
+ return false;
+ }
+
+ width: parent.width; // Bubbles downward
+ height: childrenRect.height + shadowRadius * 2; // Bubbles upward
+
+ // The actual card (white block)
+ Rectangle {
+
+ color: "white";
+ height: childrenRect.height;
+ width: parent.width - shadowRadius * 2;
+
+ // 5px margin, but shifted 2px vertically because of the shadow
+ anchors {
+ topMargin: shadowRadius - shadowOffset;
+ bottomMargin: shadowRadius + shadowOffset;
+ leftMargin: shadowRadius;
+ rightMargin: shadowRadius;
+ }
+
+ Column {
+
+ width: parent.width;
+ height: childrenRect.height
+
+ // Main content
+ Rectangle {
+
+ color: root.debug ? "red" : "transparent";
+ width: parent.width;
+ height: 200;
+
+ // Left content
+ Rectangle {
+ color: root.debug ? "lightblue" : "transparent";
+ anchors {
+ left: parent.left;
+ right: parent.horizontalCenter;
+ top: parent.top;
+ bottom: parent.bottom;
+ margins: UM.Theme.getSize("wide_margin").width
+ }
+ }
+
+ Rectangle {
+ height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
+ width: 1
+ color: "black";
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
+ }
+
+ // Right content
+ Rectangle {
+ color: root.debug ? "blue" : "transparent";
+ anchors {
+ left: parent.horizontalCenter;
+ right: parent.right;
+ top: parent.top;
+ bottom: parent.bottom;
+ margins: UM.Theme.getSize("wide_margin").width
+ }
+ }
+ }
+
+ // Config change toggle
+ Rectangle {
+ color: root.debug ? "orange" : "transparent";
+ width: parent.width;
+ visible: root.hasChanges;
+ height: visible ? 40 : 0;
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: {
+ configChangeDetails.visible = !configChangeDetails.visible;
+ }
+ }
+ Label {
+ id: configChangeToggleLabel;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
+ text: "Configuration change";
+ }
+ UM.RecolorImage {
+ width: 15;
+ height: 15;
+ anchors {
+ left: configChangeToggleLabel.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ sourceSize.width: width;
+ sourceSize.height: height;
+ source: {
+ if (configChangeDetails.visible) {
+ return UM.Theme.getIcon("arrow_top");
+ } else {
+ return UM.Theme.getIcon("arrow_bottom");
+ }
+ }
+ color: "black";
+ }
+ }
+
+ // Config change details
+ Rectangle {
+ id: configChangeDetails
+ color: root.debug ? "yellow" : "transparent";
+ width: parent.width;
+ visible: false;
+ height: visible ? 150 : 0;
+ Behavior on height { NumberAnimation { duration: 100 } }
+
+ Rectangle {
+ color: root.debug ? "lime" : "transparent";
+ anchors {
+ fill: parent;
+ topMargin: UM.Theme.getSize("wide_margin").height;
+ bottomMargin: UM.Theme.getSize("wide_margin").height;
+ leftMargin: UM.Theme.getSize("wide_margin").height * 4;
+ rightMargin: UM.Theme.getSize("wide_margin").height * 4;
+ }
+ Label {
+ wrapMode: Text.WordWrap;
+ text: "The assigned printer, UltiSandra, requires the following configuration change(s): Change material 1 from PLA to ABS.";
+ }
+ }
+ }
+ }
+ }
+}
+
// Item
// {
// id: base
From 054a49c63de38423bb3ee6e6b1146be6ebd09e55 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 09:33:25 +0200
Subject: [PATCH 067/390] Fix issue with inheritance manager button
Removed one of the special detection cases, since it incorrectly removed a value from a stored profile
CURA=5646
---
resources/qml/Settings/SettingItem.qml | 6 ------
1 file changed, 6 deletions(-)
diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml
index ba7dfd05b6..785562cff5 100644
--- a/resources/qml/Settings/SettingItem.qml
+++ b/resources/qml/Settings/SettingItem.qml
@@ -261,12 +261,6 @@ Item {
// entry (user container) are set, we can simply remove the container.
propertyProvider.removeFromContainer(0)
}
- else if(last_entry - 1 == base.stackLevel)
- {
- // Another special case. The setting that is overriden is only 1 instance container deeper,
- // so we can remove it.
- propertyProvider.removeFromContainer(last_entry - 1)
- }
else
{
// Put that entry into the "top" instance container.
From dbe0d6d82a7383203dee4a4fc45b24a9dfbc9417 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 11:33:06 +0200
Subject: [PATCH 068/390] Add typing
---
plugins/SimulationView/SimulationView.py | 167 ++++++++++++-----------
1 file changed, 91 insertions(+), 76 deletions(-)
diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py
index 44643dbf1c..8d739654d4 100644
--- a/plugins/SimulationView/SimulationView.py
+++ b/plugins/SimulationView/SimulationView.py
@@ -18,10 +18,13 @@ from UM.Platform import Platform
from UM.PluginRegistry import PluginRegistry
from UM.Resources import Resources
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
+
from UM.Scene.Selection import Selection
from UM.Signal import Signal
from UM.View.GL.OpenGL import OpenGL
from UM.View.GL.OpenGLContext import OpenGLContext
+
+
from UM.View.View import View
from UM.i18n import i18nCatalog
from cura.Scene.ConvexHullNode import ConvexHullNode
@@ -30,11 +33,20 @@ from cura.CuraApplication import CuraApplication
from .NozzleNode import NozzleNode
from .SimulationPass import SimulationPass
from .SimulationViewProxy import SimulationViewProxy
+import numpy
+import os.path
+
+from typing import Optional, TYPE_CHECKING, List
+
+if TYPE_CHECKING:
+ from UM.Scene.SceneNode import SceneNode
+ from UM.Scene.Scene import Scene
+ from UM.View.GL.ShaderProgram import ShaderProgram
+ from UM.View.RenderPass import RenderPass
+ from UM.Settings.ContainerStack import ContainerStack
catalog = i18nCatalog("cura")
-import numpy
-import os.path
## View used to display g-code paths.
class SimulationView(View):
@@ -44,7 +56,7 @@ class SimulationView(View):
LAYER_VIEW_TYPE_FEEDRATE = 2
LAYER_VIEW_TYPE_THICKNESS = 3
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
self._max_layers = 0
@@ -64,21 +76,21 @@ class SimulationView(View):
self._busy = False
self._simulation_running = False
- self._ghost_shader = None
- self._layer_pass = None
- self._composite_pass = None
+ self._ghost_shader = None # type: Optional["ShaderProgram"]
+ self._layer_pass = None # type: Optional[SimulationPass]
+ self._composite_pass = None # type: Optional[RenderPass]
self._old_layer_bindings = None
- self._simulationview_composite_shader = None
+ self._simulationview_composite_shader = None # type: Optional["ShaderProgram"]
self._old_composite_shader = None
- self._global_container_stack = None
+ self._global_container_stack = None # type: Optional[ContainerStack]
self._proxy = SimulationViewProxy()
self._controller.getScene().getRoot().childrenChanged.connect(self._onSceneChanged)
self._resetSettings()
self._legend_items = None
self._show_travel_moves = False
- self._nozzle_node = None
+ self._nozzle_node = None # type: Optional[NozzleNode]
Application.getInstance().getPreferences().addPreference("view/top_layer_count", 5)
Application.getInstance().getPreferences().addPreference("view/only_show_top_layers", False)
@@ -102,29 +114,29 @@ class SimulationView(View):
self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled"),
title = catalog.i18nc("@info:title", "Simulation View"))
- def _evaluateCompatibilityMode(self):
+ def _evaluateCompatibilityMode(self) -> bool:
return OpenGLContext.isLegacyOpenGL() or bool(Application.getInstance().getPreferences().getValue("view/force_layer_view_compatibility_mode"))
- def _resetSettings(self):
- self._layer_view_type = 0 # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness
+ def _resetSettings(self) -> None:
+ self._layer_view_type = 0 # type: int # 0 is material color, 1 is color by linetype, 2 is speed, 3 is layer thickness
self._extruder_count = 0
self._extruder_opacity = [1.0, 1.0, 1.0, 1.0]
- self._show_travel_moves = 0
- self._show_helpers = 1
- self._show_skin = 1
- self._show_infill = 1
+ self._show_travel_moves = False
+ self._show_helpers = True
+ self._show_skin = True
+ self._show_infill = True
self.resetLayerData()
- def getActivity(self):
+ def getActivity(self) -> bool:
return self._activity
- def setActivity(self, activity):
+ def setActivity(self, activity: bool) -> None:
if self._activity == activity:
return
self._activity = activity
self.activityChanged.emit()
- def getSimulationPass(self):
+ def getSimulationPass(self) -> SimulationPass:
if not self._layer_pass:
# Currently the RenderPass constructor requires a size > 0
# This should be fixed in RenderPass's constructor.
@@ -133,30 +145,30 @@ class SimulationView(View):
self._layer_pass.setSimulationView(self)
return self._layer_pass
- def getCurrentLayer(self):
+ def getCurrentLayer(self) -> int:
return self._current_layer_num
- def getMinimumLayer(self):
+ def getMinimumLayer(self) -> int:
return self._minimum_layer_num
- def getMaxLayers(self):
+ def getMaxLayers(self) -> int:
return self._max_layers
- def getCurrentPath(self):
+ def getCurrentPath(self) -> int:
return self._current_path_num
- def getMinimumPath(self):
+ def getMinimumPath(self) -> int:
return self._minimum_path_num
- def getMaxPaths(self):
+ def getMaxPaths(self) -> int:
return self._max_paths
- def getNozzleNode(self):
+ def getNozzleNode(self) -> NozzleNode:
if not self._nozzle_node:
self._nozzle_node = NozzleNode()
return self._nozzle_node
- def _onSceneChanged(self, node):
+ def _onSceneChanged(self, node: "SceneNode") -> None:
if node.getMeshData() is None:
self.resetLayerData()
@@ -164,21 +176,21 @@ class SimulationView(View):
self.calculateMaxLayers()
self.calculateMaxPathsOnLayer(self._current_layer_num)
- def isBusy(self):
+ def isBusy(self) -> bool:
return self._busy
- def setBusy(self, busy):
+ def setBusy(self, busy: bool) -> None:
if busy != self._busy:
self._busy = busy
self.busyChanged.emit()
- def isSimulationRunning(self):
+ def isSimulationRunning(self) -> bool:
return self._simulation_running
- def setSimulationRunning(self, running):
+ def setSimulationRunning(self, running: bool) -> None:
self._simulation_running = running
- def resetLayerData(self):
+ def resetLayerData(self) -> None:
self._current_layer_mesh = None
self._current_layer_jumps = None
self._max_feedrate = sys.float_info.min
@@ -186,7 +198,7 @@ class SimulationView(View):
self._max_thickness = sys.float_info.min
self._min_thickness = sys.float_info.max
- def beginRendering(self):
+ def beginRendering(self) -> None:
scene = self.getController().getScene()
renderer = self.getRenderer()
@@ -204,7 +216,7 @@ class SimulationView(View):
if (node.getMeshData()) and node.isVisible():
renderer.queueNode(node, transparent = True, shader = self._ghost_shader)
- def setLayer(self, value):
+ def setLayer(self, value: int) -> None:
if self._current_layer_num != value:
self._current_layer_num = value
if self._current_layer_num < 0:
@@ -218,7 +230,7 @@ class SimulationView(View):
self.currentLayerNumChanged.emit()
- def setMinimumLayer(self, value):
+ def setMinimumLayer(self, value: int) -> None:
if self._minimum_layer_num != value:
self._minimum_layer_num = value
if self._minimum_layer_num < 0:
@@ -232,7 +244,7 @@ class SimulationView(View):
self.currentLayerNumChanged.emit()
- def setPath(self, value):
+ def setPath(self, value: int) -> None:
if self._current_path_num != value:
self._current_path_num = value
if self._current_path_num < 0:
@@ -246,7 +258,7 @@ class SimulationView(View):
self.currentPathNumChanged.emit()
- def setMinimumPath(self, value):
+ def setMinimumPath(self, value: int) -> None:
if self._minimum_path_num != value:
self._minimum_path_num = value
if self._minimum_path_num < 0:
@@ -263,24 +275,24 @@ class SimulationView(View):
## Set the layer view type
#
# \param layer_view_type integer as in SimulationView.qml and this class
- def setSimulationViewType(self, layer_view_type):
+ def setSimulationViewType(self, layer_view_type: int) -> None:
self._layer_view_type = layer_view_type
self.currentLayerNumChanged.emit()
## Return the layer view type, integer as in SimulationView.qml and this class
- def getSimulationViewType(self):
+ def getSimulationViewType(self) -> int:
return self._layer_view_type
## Set the extruder opacity
#
# \param extruder_nr 0..3
# \param opacity 0.0 .. 1.0
- def setExtruderOpacity(self, extruder_nr, opacity):
+ def setExtruderOpacity(self, extruder_nr: int, opacity: float) -> None:
if 0 <= extruder_nr <= 3:
self._extruder_opacity[extruder_nr] = opacity
self.currentLayerNumChanged.emit()
- def getExtruderOpacities(self):
+ def getExtruderOpacities(self)-> List[float]:
return self._extruder_opacity
def setShowTravelMoves(self, show):
@@ -290,46 +302,46 @@ class SimulationView(View):
def getShowTravelMoves(self):
return self._show_travel_moves
- def setShowHelpers(self, show):
+ def setShowHelpers(self, show: bool) -> None:
self._show_helpers = show
self.currentLayerNumChanged.emit()
- def getShowHelpers(self):
+ def getShowHelpers(self) -> bool:
return self._show_helpers
- def setShowSkin(self, show):
+ def setShowSkin(self, show: bool) -> None:
self._show_skin = show
self.currentLayerNumChanged.emit()
- def getShowSkin(self):
+ def getShowSkin(self) -> bool:
return self._show_skin
- def setShowInfill(self, show):
+ def setShowInfill(self, show: bool) -> None:
self._show_infill = show
self.currentLayerNumChanged.emit()
- def getShowInfill(self):
+ def getShowInfill(self) -> bool:
return self._show_infill
- def getCompatibilityMode(self):
+ def getCompatibilityMode(self) -> bool:
return self._compatibility_mode
- def getExtruderCount(self):
+ def getExtruderCount(self) -> int:
return self._extruder_count
- def getMinFeedrate(self):
+ def getMinFeedrate(self) -> float:
return self._min_feedrate
- def getMaxFeedrate(self):
+ def getMaxFeedrate(self) -> float:
return self._max_feedrate
- def getMinThickness(self):
+ def getMinThickness(self) -> float:
return self._min_thickness
- def getMaxThickness(self):
+ def getMaxThickness(self) -> float:
return self._max_thickness
- def calculateMaxLayers(self):
+ def calculateMaxLayers(self) -> None:
scene = self.getController().getScene()
self._old_max_layers = self._max_layers
@@ -383,7 +395,7 @@ class SimulationView(View):
self.maxLayersChanged.emit()
self._startUpdateTopLayers()
- def calculateMaxPathsOnLayer(self, layer_num):
+ def calculateMaxPathsOnLayer(self, layer_num: int) -> None:
# Update the currentPath
scene = self.getController().getScene()
for node in DepthFirstIterator(scene.getRoot()):
@@ -415,10 +427,10 @@ class SimulationView(View):
def getProxy(self, engine, script_engine):
return self._proxy
- def endRendering(self):
+ def endRendering(self) -> None:
pass
- def event(self, event):
+ def event(self, event) -> bool:
modifiers = QApplication.keyboardModifiers()
ctrl_is_active = modifiers & Qt.ControlModifier
shift_is_active = modifiers & Qt.ShiftModifier
@@ -447,7 +459,7 @@ class SimulationView(View):
if QOpenGLContext.currentContext() is None:
Logger.log("d", "current context of OpenGL is empty on Mac OS X, will try to create shaders later")
CuraApplication.getInstance().callLater(lambda e=event: self.event(e))
- return
+ return False
# Make sure the SimulationPass is created
layer_pass = self.getSimulationPass()
@@ -480,11 +492,14 @@ class SimulationView(View):
Application.getInstance().globalContainerStackChanged.disconnect(self._onGlobalStackChanged)
if self._global_container_stack:
self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
-
- self._nozzle_node.setParent(None)
+ if self._nozzle_node:
+ self._nozzle_node.setParent(None)
self.getRenderer().removeRenderPass(self._layer_pass)
- self._composite_pass.setLayerBindings(self._old_layer_bindings)
- self._composite_pass.setCompositeShader(self._old_composite_shader)
+ if self._composite_pass:
+ self._composite_pass.setLayerBindings(self._old_layer_bindings)
+ self._composite_pass.setCompositeShader(self._old_composite_shader)
+
+ return False
def getCurrentLayerMesh(self):
return self._current_layer_mesh
@@ -492,7 +507,7 @@ class SimulationView(View):
def getCurrentLayerJumps(self):
return self._current_layer_jumps
- def _onGlobalStackChanged(self):
+ def _onGlobalStackChanged(self) -> None:
if self._global_container_stack:
self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
self._global_container_stack = Application.getInstance().getGlobalContainerStack()
@@ -504,17 +519,17 @@ class SimulationView(View):
else:
self._wireprint_warning_message.hide()
- def _onPropertyChanged(self, key, property_name):
+ def _onPropertyChanged(self, key: str, property_name: str) -> None:
if key == "wireframe_enabled" and property_name == "value":
- if self._global_container_stack.getProperty("wireframe_enabled", "value"):
+ if self._global_container_stack and self._global_container_stack.getProperty("wireframe_enabled", "value"):
self._wireprint_warning_message.show()
else:
self._wireprint_warning_message.hide()
- def _onCurrentLayerNumChanged(self):
+ def _onCurrentLayerNumChanged(self) -> None:
self.calculateMaxPathsOnLayer(self._current_layer_num)
- def _startUpdateTopLayers(self):
+ def _startUpdateTopLayers(self) -> None:
if not self._compatibility_mode:
return
@@ -525,10 +540,10 @@ class SimulationView(View):
self.setBusy(True)
self._top_layers_job = _CreateTopLayersJob(self._controller.getScene(), self._current_layer_num, self._solid_layers)
- self._top_layers_job.finished.connect(self._updateCurrentLayerMesh)
- self._top_layers_job.start()
+ self._top_layers_job.finished.connect(self._updateCurrentLayerMesh) # type: ignore # mypy doesn't understand the whole private class thing that's going on here.
+ self._top_layers_job.start() # type: ignore
- def _updateCurrentLayerMesh(self, job):
+ def _updateCurrentLayerMesh(self, job: "_CreateTopLayersJob") -> None:
self.setBusy(False)
if not job.getResult():
@@ -539,9 +554,9 @@ class SimulationView(View):
self._current_layer_jumps = job.getResult().get("jumps")
self._controller.getScene().sceneChanged.emit(self._controller.getScene().getRoot())
- self._top_layers_job = None
+ self._top_layers_job = None # type: Optional["_CreateTopLayersJob"]
- def _updateWithPreferences(self):
+ def _updateWithPreferences(self) -> None:
self._solid_layers = int(Application.getInstance().getPreferences().getValue("view/top_layer_count"))
self._only_show_top_layers = bool(Application.getInstance().getPreferences().getValue("view/only_show_top_layers"))
self._compatibility_mode = self._evaluateCompatibilityMode()
@@ -563,7 +578,7 @@ class SimulationView(View):
self._startUpdateTopLayers()
self.preferencesChanged.emit()
- def _onPreferencesChanged(self, preference):
+ def _onPreferencesChanged(self, preference: str) -> None:
if preference not in {
"view/top_layer_count",
"view/only_show_top_layers",
@@ -581,7 +596,7 @@ class SimulationView(View):
class _CreateTopLayersJob(Job):
- def __init__(self, scene, layer_number, solid_layers):
+ def __init__(self, scene: "Scene", layer_number: int, solid_layers: int) -> None:
super().__init__()
self._scene = scene
@@ -589,7 +604,7 @@ class _CreateTopLayersJob(Job):
self._solid_layers = solid_layers
self._cancel = False
- def run(self):
+ def run(self) -> None:
layer_data = None
for node in DepthFirstIterator(self._scene.getRoot()):
layer_data = node.callDecoration("getLayerData")
@@ -638,6 +653,6 @@ class _CreateTopLayersJob(Job):
self.setResult({"layers": layer_mesh.build(), "jumps": jump_mesh})
- def cancel(self):
+ def cancel(self) -> None:
self._cancel = True
super().cancel()
From 3830fa0fd9deb1129013087343ee340cf1befe5e Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 11:58:30 +0200
Subject: [PATCH 069/390] Initial move of the code of CuraPluginOAuth2Module
CURA-5744
---
cura/OAuth2/AuthorizationHelpers.py | 127 +++++++++++++++++
cura/OAuth2/AuthorizationRequestHandler.py | 105 ++++++++++++++
cura/OAuth2/AuthorizationRequestServer.py | 25 ++++
cura/OAuth2/AuthorizationService.py | 151 +++++++++++++++++++++
cura/OAuth2/LocalAuthorizationServer.py | 67 +++++++++
cura/OAuth2/Models.py | 60 ++++++++
cura/OAuth2/__init__.py | 2 +
7 files changed, 537 insertions(+)
create mode 100644 cura/OAuth2/AuthorizationHelpers.py
create mode 100644 cura/OAuth2/AuthorizationRequestHandler.py
create mode 100644 cura/OAuth2/AuthorizationRequestServer.py
create mode 100644 cura/OAuth2/AuthorizationService.py
create mode 100644 cura/OAuth2/LocalAuthorizationServer.py
create mode 100644 cura/OAuth2/Models.py
create mode 100644 cura/OAuth2/__init__.py
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
new file mode 100644
index 0000000000..10041f70ce
--- /dev/null
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -0,0 +1,127 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+import json
+import random
+from _sha512 import sha512
+from base64 import b64encode
+from typing import Optional
+
+import requests
+
+# As this module is specific for Cura plugins, we can rely on these imports.
+from UM.Logger import Logger
+
+# Plugin imports need to be relative to work in final builds.
+from .models import AuthenticationResponse, UserProfile, OAuth2Settings
+
+
+class AuthorizationHelpers:
+ """Class containing several helpers to deal with the authorization flow."""
+
+ def __init__(self, settings: "OAuth2Settings"):
+ self._settings = settings
+ self._token_url = "{}/token".format(self._settings.OAUTH_SERVER_URL)
+
+ @property
+ def settings(self) -> "OAuth2Settings":
+ """Get the OAuth2 settings object."""
+ return self._settings
+
+ def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str)->\
+ Optional["AuthenticationResponse"]:
+ """
+ Request the access token from the authorization server.
+ :param authorization_code: The authorization code from the 1st step.
+ :param verification_code: The verification code needed for the PKCE extension.
+ :return: An AuthenticationResponse object.
+ """
+ return self.parseTokenResponse(requests.post(self._token_url, data={
+ "client_id": self._settings.CLIENT_ID,
+ "redirect_uri": self._settings.CALLBACK_URL,
+ "grant_type": "authorization_code",
+ "code": authorization_code,
+ "code_verifier": verification_code,
+ "scope": self._settings.CLIENT_SCOPES
+ }))
+
+ def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> Optional["AuthenticationResponse"]:
+ """
+ Request the access token from the authorization server using a refresh token.
+ :param refresh_token:
+ :return: An AuthenticationResponse object.
+ """
+ return self.parseTokenResponse(requests.post(self._token_url, data={
+ "client_id": self._settings.CLIENT_ID,
+ "redirect_uri": self._settings.CALLBACK_URL,
+ "grant_type": "refresh_token",
+ "refresh_token": refresh_token,
+ "scope": self._settings.CLIENT_SCOPES
+ }))
+
+ @staticmethod
+ def parseTokenResponse(token_response: "requests.request") -> Optional["AuthenticationResponse"]:
+ """
+ Parse the token response from the authorization server into an AuthenticationResponse object.
+ :param token_response: The JSON string data response from the authorization server.
+ :return: An AuthenticationResponse object.
+ """
+ token_data = None
+
+ try:
+ token_data = json.loads(token_response.text)
+ except ValueError:
+ Logger.log("w", "Could not parse token response data: %s", token_response.text)
+
+ if not token_data:
+ return AuthenticationResponse(success=False, err_message="Could not read response.")
+
+ if token_response.status_code not in (200, 201):
+ return AuthenticationResponse(success=False, err_message=token_data["error_description"])
+
+ return AuthenticationResponse(success=True,
+ token_type=token_data["token_type"],
+ access_token=token_data["access_token"],
+ refresh_token=token_data["refresh_token"],
+ expires_in=token_data["expires_in"],
+ scope=token_data["scope"])
+
+ def parseJWT(self, access_token: str) -> Optional["UserProfile"]:
+ """
+ Calls the authentication API endpoint to get the token data.
+ :param access_token: The encoded JWT token.
+ :return: Dict containing some profile data.
+ """
+ token_request = requests.get("{}/check-token".format(self._settings.OAUTH_SERVER_URL), headers = {
+ "Authorization": "Bearer {}".format(access_token)
+ })
+ if token_request.status_code not in (200, 201):
+ Logger.log("w", "Could not retrieve token data from auth server: %s", token_request.text)
+ return None
+ user_data = token_request.json().get("data")
+ if not user_data or not isinstance(user_data, dict):
+ Logger.log("w", "Could not parse user data from token: %s", user_data)
+ return None
+ return UserProfile(
+ user_id = user_data["user_id"],
+ username = user_data["username"],
+ profile_image_url = user_data.get("profile_image_url", "")
+ )
+
+ @staticmethod
+ def generateVerificationCode(code_length: int = 16) -> str:
+ """
+ Generate a 16-character verification code.
+ :param code_length:
+ :return:
+ """
+ return "".join(random.choice("0123456789ABCDEF") for i in range(code_length))
+
+ @staticmethod
+ def generateVerificationCodeChallenge(verification_code: str) -> str:
+ """
+ Generates a base64 encoded sha512 encrypted version of a given string.
+ :param verification_code:
+ :return: The encrypted code in base64 format.
+ """
+ encoded = sha512(verification_code.encode()).digest()
+ return b64encode(encoded, altchars = b"_-").decode()
diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py
new file mode 100644
index 0000000000..eb703fc5c1
--- /dev/null
+++ b/cura/OAuth2/AuthorizationRequestHandler.py
@@ -0,0 +1,105 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Optional, Callable
+
+from http.server import BaseHTTPRequestHandler
+from urllib.parse import parse_qs, urlparse
+
+# Plugin imports need to be relative to work in final builds.
+from .AuthorizationHelpers import AuthorizationHelpers
+from .models import AuthenticationResponse, ResponseData, HTTP_STATUS, ResponseStatus
+
+
+class AuthorizationRequestHandler(BaseHTTPRequestHandler):
+ """
+ This handler handles all HTTP requests on the local web server.
+ It also requests the access token for the 2nd stage of the OAuth flow.
+ """
+
+ def __init__(self, request, client_address, server):
+ super().__init__(request, client_address, server)
+
+ # These values will be injected by the HTTPServer that this handler belongs to.
+ self.authorization_helpers = None # type: AuthorizationHelpers
+ self.authorization_callback = None # type: Callable[[AuthenticationResponse], None]
+ self.verification_code = None # type: str
+
+ def do_GET(self):
+ """Entry point for GET requests"""
+
+ # Extract values from the query string.
+ parsed_url = urlparse(self.path)
+ query = parse_qs(parsed_url.query)
+
+ # Handle the possible requests
+ if parsed_url.path == "/callback":
+ server_response, token_response = self._handleCallback(query)
+ else:
+ server_response = self._handleNotFound()
+ token_response = None
+
+ # Send the data to the browser.
+ self._sendHeaders(server_response.status, server_response.content_type, server_response.redirect_uri)
+
+ if server_response.data_stream:
+ # If there is data in the response, we send it.
+ self._sendData(server_response.data_stream)
+
+ if token_response:
+ # Trigger the callback if we got a response.
+ # This will cause the server to shut down, so we do it at the very end of the request handling.
+ self.authorization_callback(token_response)
+
+ def _handleCallback(self, query: dict) -> ("ResponseData", Optional["AuthenticationResponse"]):
+ """
+ Handler for the callback URL redirect.
+ :param query: Dict containing the HTTP query parameters.
+ :return: HTTP ResponseData containing a success page to show to the user.
+ """
+ if self._queryGet(query, "code"):
+ # If the code was returned we get the access token.
+ token_response = self.authorization_helpers.getAccessTokenUsingAuthorizationCode(
+ self._queryGet(query, "code"), self.verification_code)
+
+ elif self._queryGet(query, "error_code") == "user_denied":
+ # Otherwise we show an error message (probably the user clicked "Deny" in the auth dialog).
+ token_response = AuthenticationResponse(
+ success=False,
+ err_message="Please give the required permissions when authorizing this application."
+ )
+
+ else:
+ # We don't know what went wrong here, so instruct the user to check the logs.
+ token_response = AuthenticationResponse(
+ success=False,
+ error_message="Something unexpected happened when trying to log in, please try again."
+ )
+
+ return ResponseData(
+ status=HTTP_STATUS["REDIRECT"],
+ data_stream=b"Redirecting...",
+ redirect_uri=self.authorization_helpers.settings.AUTH_SUCCESS_REDIRECT if token_response.success else
+ self.authorization_helpers.settings.AUTH_FAILED_REDIRECT
+ ), token_response
+
+ @staticmethod
+ def _handleNotFound() -> "ResponseData":
+ """Handle all other non-existing server calls."""
+ return ResponseData(status=HTTP_STATUS["NOT_FOUND"], content_type="text/html", data_stream=b"Not found.")
+
+ def _sendHeaders(self, status: "ResponseStatus", content_type: str, redirect_uri: str = None) -> None:
+ """Send out the headers"""
+ self.send_response(status.code, status.message)
+ self.send_header("Content-type", content_type)
+ if redirect_uri:
+ self.send_header("Location", redirect_uri)
+ self.end_headers()
+
+ def _sendData(self, data: bytes) -> None:
+ """Send out the data"""
+ self.wfile.write(data)
+
+ @staticmethod
+ def _queryGet(query_data: dict, key: str, default=None) -> Optional[str]:
+ """Helper for getting values from a pre-parsed query string"""
+ return query_data.get(key, [default])[0]
diff --git a/cura/OAuth2/AuthorizationRequestServer.py b/cura/OAuth2/AuthorizationRequestServer.py
new file mode 100644
index 0000000000..ee428bc236
--- /dev/null
+++ b/cura/OAuth2/AuthorizationRequestServer.py
@@ -0,0 +1,25 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+from http.server import HTTPServer
+
+from .AuthorizationHelpers import AuthorizationHelpers
+
+
+class AuthorizationRequestServer(HTTPServer):
+ """
+ The authorization request callback handler server.
+ This subclass is needed to be able to pass some data to the request handler.
+ This cannot be done on the request handler directly as the HTTPServer creates an instance of the handler after init.
+ """
+
+ def setAuthorizationHelpers(self, authorization_helpers: "AuthorizationHelpers") -> None:
+ """Set the authorization helpers instance on the request handler."""
+ self.RequestHandlerClass.authorization_helpers = authorization_helpers
+
+ def setAuthorizationCallback(self, authorization_callback) -> None:
+ """Set the authorization callback on the request handler."""
+ self.RequestHandlerClass.authorization_callback = authorization_callback
+
+ def setVerificationCode(self, verification_code: str) -> None:
+ """Set the verification code on the request handler."""
+ self.RequestHandlerClass.verification_code = verification_code
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
new file mode 100644
index 0000000000..f425e3a003
--- /dev/null
+++ b/cura/OAuth2/AuthorizationService.py
@@ -0,0 +1,151 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+import json
+import webbrowser
+from typing import Optional
+from urllib.parse import urlencode
+
+# As this module is specific for Cura plugins, we can rely on these imports.
+from UM.Logger import Logger
+from UM.Signal import Signal
+
+# Plugin imports need to be relative to work in final builds.
+from .LocalAuthorizationServer import LocalAuthorizationServer
+from .AuthorizationHelpers import AuthorizationHelpers
+from .models import OAuth2Settings, AuthenticationResponse, UserProfile
+
+
+class AuthorizationService:
+ """
+ The authorization service is responsible for handling the login flow,
+ storing user credentials and providing account information.
+ """
+
+ # Emit signal when authentication is completed.
+ onAuthStateChanged = Signal()
+
+ # Emit signal when authentication failed.
+ onAuthenticationError = Signal()
+
+ def __init__(self, preferences, settings: "OAuth2Settings"):
+ self._settings = settings
+ self._auth_helpers = AuthorizationHelpers(settings)
+ self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL)
+ self._auth_data = None # type: Optional[AuthenticationResponse]
+ self._user_profile = None # type: Optional[UserProfile]
+ self._cura_preferences = preferences
+ self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
+ self._loadAuthData()
+
+ def getUserProfile(self) -> Optional["UserProfile"]:
+ """
+ Get the user data that is stored in the JWT token.
+ :return: Dict containing some user data.
+ """
+ if not self._user_profile:
+ # If no user profile was stored locally, we try to get it from JWT.
+ self._user_profile = self._parseJWT()
+ if not self._user_profile:
+ # If there is still no user profile from the JWT, we have to log in again.
+ return None
+ return self._user_profile
+
+ def _parseJWT(self) -> Optional["UserProfile"]:
+ """
+ Tries to parse the JWT if all the needed data exists.
+ :return: UserProfile if found, otherwise None.
+ """
+ if not self._auth_data:
+ # If no auth data exists, we should always log in again.
+ return None
+ user_data = self._auth_helpers.parseJWT(self._auth_data.access_token)
+ if user_data:
+ # If the profile was found, we return it immediately.
+ return user_data
+ # The JWT was expired or invalid and we should request a new one.
+ self._auth_data = self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token)
+ if not self._auth_data:
+ # The token could not be refreshed using the refresh token. We should login again.
+ return None
+ return self._auth_helpers.parseJWT(self._auth_data.access_token)
+
+ def getAccessToken(self) -> Optional[str]:
+ """
+ Get the access token response data.
+ :return: Dict containing token data.
+ """
+ if not self.getUserProfile():
+ # We check if we can get the user profile.
+ # If we can't get it, that means the access token (JWT) was invalid or expired.
+ return None
+ return self._auth_data.access_token
+
+ def refreshAccessToken(self) -> None:
+ """
+ Refresh the access token when it expired.
+ """
+ self._storeAuthData(self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token))
+ self.onAuthStateChanged.emit(logged_in=True)
+
+ def deleteAuthData(self):
+ """Delete authentication data from preferences and locally."""
+ self._storeAuthData()
+ self.onAuthStateChanged.emit(logged_in=False)
+
+ def startAuthorizationFlow(self) -> None:
+ """Start a new OAuth2 authorization flow."""
+
+ Logger.log("d", "Starting new OAuth2 flow...")
+
+ # Create the tokens needed for the code challenge (PKCE) extension for OAuth2.
+ # This is needed because the CuraDrivePlugin is a untrusted (open source) client.
+ # More details can be found at https://tools.ietf.org/html/rfc7636.
+ verification_code = self._auth_helpers.generateVerificationCode()
+ challenge_code = self._auth_helpers.generateVerificationCodeChallenge(verification_code)
+
+ # Create the query string needed for the OAuth2 flow.
+ query_string = urlencode({
+ "client_id": self._settings.CLIENT_ID,
+ "redirect_uri": self._settings.CALLBACK_URL,
+ "scope": self._settings.CLIENT_SCOPES,
+ "response_type": "code",
+ "state": "CuraDriveIsAwesome",
+ "code_challenge": challenge_code,
+ "code_challenge_method": "S512"
+ })
+
+ # Open the authorization page in a new browser window.
+ webbrowser.open_new("{}?{}".format(self._auth_url, query_string))
+
+ # Start a local web server to receive the callback URL on.
+ self._server.start(verification_code)
+
+ def _onAuthStateChanged(self, auth_response: "AuthenticationResponse") -> None:
+ """Callback method for an authentication flow."""
+ if auth_response.success:
+ self._storeAuthData(auth_response)
+ self.onAuthStateChanged.emit(logged_in=True)
+ else:
+ self.onAuthenticationError.emit(logged_in=False, error_message=auth_response.err_message)
+ self._server.stop() # Stop the web server at all times.
+
+ def _loadAuthData(self) -> None:
+ """Load authentication data from preferences if available."""
+ self._cura_preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
+ try:
+ preferences_data = json.loads(self._cura_preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
+ if preferences_data:
+ self._auth_data = AuthenticationResponse(**preferences_data)
+ self.onAuthStateChanged.emit(logged_in=True)
+ except ValueError as err:
+ Logger.log("w", "Could not load auth data from preferences: %s", err)
+
+ def _storeAuthData(self, auth_data: Optional["AuthenticationResponse"] = None) -> None:
+ """Store authentication data in preferences and locally."""
+ self._auth_data = auth_data
+ if auth_data:
+ self._user_profile = self.getUserProfile()
+ self._cura_preferences.setValue(self._settings.AUTH_DATA_PREFERENCE_KEY, json.dumps(vars(auth_data)))
+ else:
+ self._user_profile = None
+ self._cura_preferences.resetPreference(self._settings.AUTH_DATA_PREFERENCE_KEY)
diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py
new file mode 100644
index 0000000000..5dc05786bf
--- /dev/null
+++ b/cura/OAuth2/LocalAuthorizationServer.py
@@ -0,0 +1,67 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+import threading
+from http.server import HTTPServer
+from typing import Optional, Callable
+
+# As this module is specific for Cura plugins, we can rely on these imports.
+from UM.Logger import Logger
+
+# Plugin imports need to be relative to work in final builds.
+from .AuthorizationHelpers import AuthorizationHelpers
+from .AuthorizationRequestServer import AuthorizationRequestServer
+from .AuthorizationRequestHandler import AuthorizationRequestHandler
+from .models import AuthenticationResponse
+
+
+class LocalAuthorizationServer:
+ def __init__(self, auth_helpers: "AuthorizationHelpers",
+ auth_state_changed_callback: "Callable[[AuthenticationResponse], any]",
+ daemon: bool):
+ """
+ :param auth_helpers: An instance of the authorization helpers class.
+ :param auth_state_changed_callback: A callback function to be called when the authorization state changes.
+ :param daemon: Whether the server thread should be run in daemon mode. Note: Daemon threads are abruptly stopped
+ at shutdown. Their resources (e.g. open files) may never be released.
+ """
+ self._web_server = None # type: Optional[HTTPServer]
+ self._web_server_thread = None # type: Optional[threading.Thread]
+ self._web_server_port = auth_helpers.settings.CALLBACK_PORT
+ self._auth_helpers = auth_helpers
+ self._auth_state_changed_callback = auth_state_changed_callback
+ self._daemon = daemon
+
+ def start(self, verification_code: "str") -> None:
+ """
+ Starts the local web server to handle the authorization callback.
+ :param verification_code: The verification code part of the OAuth2 client identification.
+ """
+ if self._web_server:
+ # If the server is already running (because of a previously aborted auth flow), we don't have to start it.
+ # We still inject the new verification code though.
+ self._web_server.setVerificationCode(verification_code)
+ return
+
+ Logger.log("d", "Starting local web server to handle authorization callback on port %s",
+ self._web_server_port)
+
+ # Create the server and inject the callback and code.
+ self._web_server = AuthorizationRequestServer(("0.0.0.0", self._web_server_port),
+ AuthorizationRequestHandler)
+ self._web_server.setAuthorizationHelpers(self._auth_helpers)
+ self._web_server.setAuthorizationCallback(self._auth_state_changed_callback)
+ self._web_server.setVerificationCode(verification_code)
+
+ # Start the server on a new thread.
+ self._web_server_thread = threading.Thread(None, self._web_server.serve_forever, daemon = self._daemon)
+ self._web_server_thread.start()
+
+ def stop(self) -> None:
+ """ Stops the web server if it was running. Also deletes the objects. """
+
+ Logger.log("d", "Stopping local web server...")
+
+ if self._web_server:
+ self._web_server.server_close()
+ self._web_server = None
+ self._web_server_thread = None
diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py
new file mode 100644
index 0000000000..08bed7e6d9
--- /dev/null
+++ b/cura/OAuth2/Models.py
@@ -0,0 +1,60 @@
+# Copyright (c) 2018 Ultimaker B.V.
+from typing import Optional
+
+
+class BaseModel:
+ def __init__(self, **kwargs):
+ self.__dict__.update(kwargs)
+
+
+# OAuth OAuth2Settings data template.
+class OAuth2Settings(BaseModel):
+ CALLBACK_PORT = None # type: Optional[str]
+ OAUTH_SERVER_URL = None # type: Optional[str]
+ CLIENT_ID = None # type: Optional[str]
+ CLIENT_SCOPES = None # type: Optional[str]
+ CALLBACK_URL = None # type: Optional[str]
+ AUTH_DATA_PREFERENCE_KEY = None # type: Optional[str]
+ AUTH_SUCCESS_REDIRECT = "https://ultimaker.com" # type: str
+ AUTH_FAILED_REDIRECT = "https://ultimaker.com" # type: str
+
+
+# User profile data template.
+class UserProfile(BaseModel):
+ user_id = None # type: Optional[str]
+ username = None # type: Optional[str]
+ profile_image_url = None # type: Optional[str]
+
+
+# Authentication data template.
+class AuthenticationResponse(BaseModel):
+ """Data comes from the token response with success flag and error message added."""
+ success = True # type: bool
+ token_type = None # type: Optional[str]
+ access_token = None # type: Optional[str]
+ refresh_token = None # type: Optional[str]
+ expires_in = None # type: Optional[str]
+ scope = None # type: Optional[str]
+ err_message = None # type: Optional[str]
+
+
+# Response status template.
+class ResponseStatus(BaseModel):
+ code = 200 # type: int
+ message = "" # type str
+
+
+# Response data template.
+class ResponseData(BaseModel):
+ status = None # type: Optional[ResponseStatus]
+ data_stream = None # type: Optional[bytes]
+ redirect_uri = None # type: Optional[str]
+ content_type = "text/html" # type: str
+
+
+# Possible HTTP responses.
+HTTP_STATUS = {
+ "OK": ResponseStatus(code=200, message="OK"),
+ "NOT_FOUND": ResponseStatus(code=404, message="NOT FOUND"),
+ "REDIRECT": ResponseStatus(code=302, message="REDIRECT")
+}
diff --git a/cura/OAuth2/__init__.py b/cura/OAuth2/__init__.py
new file mode 100644
index 0000000000..f3f6970c54
--- /dev/null
+++ b/cura/OAuth2/__init__.py
@@ -0,0 +1,2 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
From 3ae223334f550474e536600ff3519385e18241eb Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 12:02:11 +0200
Subject: [PATCH 070/390] Removed relative imports
Since the oauth module isn't just in a plugin anymore, there is no need for any of the relative imports
CURA-5744
---
cura/OAuth2/AuthorizationHelpers.py | 4 +---
cura/OAuth2/AuthorizationRequestHandler.py | 5 ++---
cura/OAuth2/AuthorizationRequestServer.py | 2 +-
cura/OAuth2/AuthorizationService.py | 6 +++---
cura/OAuth2/LocalAuthorizationServer.py | 8 ++++----
5 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 10041f70ce..a122290c38 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -8,11 +8,9 @@ from typing import Optional
import requests
-# As this module is specific for Cura plugins, we can rely on these imports.
from UM.Logger import Logger
-# Plugin imports need to be relative to work in final builds.
-from .models import AuthenticationResponse, UserProfile, OAuth2Settings
+from cura.OAuth2.Models import AuthenticationResponse, UserProfile, OAuth2Settings
class AuthorizationHelpers:
diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py
index eb703fc5c1..923787d33f 100644
--- a/cura/OAuth2/AuthorizationRequestHandler.py
+++ b/cura/OAuth2/AuthorizationRequestHandler.py
@@ -5,9 +5,8 @@ from typing import Optional, Callable
from http.server import BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse
-# Plugin imports need to be relative to work in final builds.
-from .AuthorizationHelpers import AuthorizationHelpers
-from .models import AuthenticationResponse, ResponseData, HTTP_STATUS, ResponseStatus
+from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+from cura.OAuth2.Models import AuthenticationResponse, ResponseData, HTTP_STATUS, ResponseStatus
class AuthorizationRequestHandler(BaseHTTPRequestHandler):
diff --git a/cura/OAuth2/AuthorizationRequestServer.py b/cura/OAuth2/AuthorizationRequestServer.py
index ee428bc236..270c558167 100644
--- a/cura/OAuth2/AuthorizationRequestServer.py
+++ b/cura/OAuth2/AuthorizationRequestServer.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from http.server import HTTPServer
-from .AuthorizationHelpers import AuthorizationHelpers
+from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
class AuthorizationRequestServer(HTTPServer):
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index f425e3a003..eb68d5c0a4 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -10,9 +10,9 @@ from UM.Logger import Logger
from UM.Signal import Signal
# Plugin imports need to be relative to work in final builds.
-from .LocalAuthorizationServer import LocalAuthorizationServer
-from .AuthorizationHelpers import AuthorizationHelpers
-from .models import OAuth2Settings, AuthenticationResponse, UserProfile
+from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer
+from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+from cura.OAuth2.Models import OAuth2Settings, AuthenticationResponse, UserProfile
class AuthorizationService:
diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py
index 5dc05786bf..9979eaaa08 100644
--- a/cura/OAuth2/LocalAuthorizationServer.py
+++ b/cura/OAuth2/LocalAuthorizationServer.py
@@ -8,10 +8,10 @@ from typing import Optional, Callable
from UM.Logger import Logger
# Plugin imports need to be relative to work in final builds.
-from .AuthorizationHelpers import AuthorizationHelpers
-from .AuthorizationRequestServer import AuthorizationRequestServer
-from .AuthorizationRequestHandler import AuthorizationRequestHandler
-from .models import AuthenticationResponse
+from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+from cura.OAuth2.AuthorizationRequestServer import AuthorizationRequestServer
+from cura.OAuth2.AuthorizationRequestHandler import AuthorizationRequestHandler
+from cura.OAuth2.Models import AuthenticationResponse
class LocalAuthorizationServer:
From b26c78202ba7fe5e265736e628279e1d2fec4c39 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 21 Sep 2018 10:00:21 +0200
Subject: [PATCH 071/390] Consolidate log entries about excluded materials
I got a log where 80% of the log was this particular message. Let's not do that.
---
cura/Machines/MaterialManager.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index dd6376b5e3..b7f3978db8 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -337,6 +337,7 @@ class MaterialManager(QObject):
machine_exclude_materials = machine_definition.getMetaDataEntry("exclude_materials", [])
material_id_metadata_dict = dict() # type: Dict[str, MaterialNode]
+ excluded_materials = set()
for current_node in nodes_to_check:
if current_node is None:
continue
@@ -345,13 +346,14 @@ class MaterialManager(QObject):
# Do not exclude other materials that are of the same type.
for material_id, node in current_node.material_map.items():
if material_id in machine_exclude_materials:
- Logger.log("d", "Exclude material [%s] for machine [%s]",
- material_id, machine_definition.getId())
+ excluded_materials.add(material_id)
continue
if material_id not in material_id_metadata_dict:
material_id_metadata_dict[material_id] = node
+ Logger.log("d", "Exclude materials {excluded_materials} for machine {machine_definition_id}".format(excluded_materials = ", ".join(excluded_materials), machine_definition_id = machine_definition_id))
+
return material_id_metadata_dict
#
From d0fc4878c29a04bbcfcb289775d93a04b62b9517 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 13:54:37 +0200
Subject: [PATCH 072/390] Fix number of mypy mistakes
CURA-5744
---
cura/OAuth2/AuthorizationHelpers.py | 9 ++++-----
cura/OAuth2/AuthorizationRequestHandler.py | 11 ++++++-----
cura/OAuth2/AuthorizationService.py | 18 ++++++++++++++----
cura/OAuth2/LocalAuthorizationServer.py | 13 ++++++++-----
cura/OAuth2/Models.py | 2 +-
5 files changed, 33 insertions(+), 20 deletions(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index a122290c38..06cc0a6061 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -16,7 +16,7 @@ from cura.OAuth2.Models import AuthenticationResponse, UserProfile, OAuth2Settin
class AuthorizationHelpers:
"""Class containing several helpers to deal with the authorization flow."""
- def __init__(self, settings: "OAuth2Settings"):
+ def __init__(self, settings: "OAuth2Settings") -> None:
self._settings = settings
self._token_url = "{}/token".format(self._settings.OAUTH_SERVER_URL)
@@ -25,8 +25,7 @@ class AuthorizationHelpers:
"""Get the OAuth2 settings object."""
return self._settings
- def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str)->\
- Optional["AuthenticationResponse"]:
+ def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str)-> "AuthenticationResponse":
"""
Request the access token from the authorization server.
:param authorization_code: The authorization code from the 1st step.
@@ -42,7 +41,7 @@ class AuthorizationHelpers:
"scope": self._settings.CLIENT_SCOPES
}))
- def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> Optional["AuthenticationResponse"]:
+ def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> AuthenticationResponse:
"""
Request the access token from the authorization server using a refresh token.
:param refresh_token:
@@ -57,7 +56,7 @@ class AuthorizationHelpers:
}))
@staticmethod
- def parseTokenResponse(token_response: "requests.request") -> Optional["AuthenticationResponse"]:
+ def parseTokenResponse(token_response: requests.models.Response) -> AuthenticationResponse:
"""
Parse the token response from the authorization server into an AuthenticationResponse object.
:param token_response: The JSON string data response from the authorization server.
diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py
index 923787d33f..d13639c45d 100644
--- a/cura/OAuth2/AuthorizationRequestHandler.py
+++ b/cura/OAuth2/AuthorizationRequestHandler.py
@@ -1,6 +1,6 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Callable
+from typing import Optional, Callable, Tuple, Dict, Any, List
from http.server import BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse
@@ -49,16 +49,17 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
# This will cause the server to shut down, so we do it at the very end of the request handling.
self.authorization_callback(token_response)
- def _handleCallback(self, query: dict) -> ("ResponseData", Optional["AuthenticationResponse"]):
+ def _handleCallback(self, query: Dict[Any, List]) -> Tuple["ResponseData", Optional["AuthenticationResponse"]]:
"""
Handler for the callback URL redirect.
:param query: Dict containing the HTTP query parameters.
:return: HTTP ResponseData containing a success page to show to the user.
"""
- if self._queryGet(query, "code"):
+ code = self._queryGet(query, "code")
+ if code:
# If the code was returned we get the access token.
token_response = self.authorization_helpers.getAccessTokenUsingAuthorizationCode(
- self._queryGet(query, "code"), self.verification_code)
+ code, self.verification_code)
elif self._queryGet(query, "error_code") == "user_denied":
# Otherwise we show an error message (probably the user clicked "Deny" in the auth dialog).
@@ -99,6 +100,6 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
self.wfile.write(data)
@staticmethod
- def _queryGet(query_data: dict, key: str, default=None) -> Optional[str]:
+ def _queryGet(query_data: Dict[Any, List], key: str, default=None) -> Optional[str]:
"""Helper for getting values from a pre-parsed query string"""
return query_data.get(key, [default])[0]
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index eb68d5c0a4..4c66170c32 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -27,7 +27,7 @@ class AuthorizationService:
# Emit signal when authentication failed.
onAuthenticationError = Signal()
- def __init__(self, preferences, settings: "OAuth2Settings"):
+ def __init__(self, preferences, settings: "OAuth2Settings") -> None:
self._settings = settings
self._auth_helpers = AuthorizationHelpers(settings)
self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL)
@@ -55,7 +55,7 @@ class AuthorizationService:
Tries to parse the JWT if all the needed data exists.
:return: UserProfile if found, otherwise None.
"""
- if not self._auth_data:
+ if not self._auth_data or self._auth_data.access_token is None:
# If no auth data exists, we should always log in again.
return None
user_data = self._auth_helpers.parseJWT(self._auth_data.access_token)
@@ -63,10 +63,13 @@ class AuthorizationService:
# If the profile was found, we return it immediately.
return user_data
# The JWT was expired or invalid and we should request a new one.
+ if self._auth_data.refresh_token is None:
+ return None
self._auth_data = self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token)
- if not self._auth_data:
+ if not self._auth_data or self._auth_data.access_token is None:
# The token could not be refreshed using the refresh token. We should login again.
return None
+
return self._auth_helpers.parseJWT(self._auth_data.access_token)
def getAccessToken(self) -> Optional[str]:
@@ -78,16 +81,23 @@ class AuthorizationService:
# We check if we can get the user profile.
# If we can't get it, that means the access token (JWT) was invalid or expired.
return None
+
+ if self._auth_data is None:
+ return None
+
return self._auth_data.access_token
def refreshAccessToken(self) -> None:
"""
Refresh the access token when it expired.
"""
+ if self._auth_data is None or self._auth_data.refresh_token is None:
+ Logger.log("w", "Unable to refresh acces token, since there is no refresh token.")
+ return
self._storeAuthData(self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token))
self.onAuthStateChanged.emit(logged_in=True)
- def deleteAuthData(self):
+ def deleteAuthData(self) -> None:
"""Delete authentication data from preferences and locally."""
self._storeAuthData()
self.onAuthStateChanged.emit(logged_in=False)
diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py
index 9979eaaa08..d6a4bf5216 100644
--- a/cura/OAuth2/LocalAuthorizationServer.py
+++ b/cura/OAuth2/LocalAuthorizationServer.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
import threading
from http.server import HTTPServer
-from typing import Optional, Callable
+from typing import Optional, Callable, Any
# As this module is specific for Cura plugins, we can rely on these imports.
from UM.Logger import Logger
@@ -16,22 +16,22 @@ from cura.OAuth2.Models import AuthenticationResponse
class LocalAuthorizationServer:
def __init__(self, auth_helpers: "AuthorizationHelpers",
- auth_state_changed_callback: "Callable[[AuthenticationResponse], any]",
- daemon: bool):
+ auth_state_changed_callback: "Callable[[AuthenticationResponse], Any]",
+ daemon: bool) -> None:
"""
:param auth_helpers: An instance of the authorization helpers class.
:param auth_state_changed_callback: A callback function to be called when the authorization state changes.
:param daemon: Whether the server thread should be run in daemon mode. Note: Daemon threads are abruptly stopped
at shutdown. Their resources (e.g. open files) may never be released.
"""
- self._web_server = None # type: Optional[HTTPServer]
+ self._web_server = None # type: Optional[AuthorizationRequestServer]
self._web_server_thread = None # type: Optional[threading.Thread]
self._web_server_port = auth_helpers.settings.CALLBACK_PORT
self._auth_helpers = auth_helpers
self._auth_state_changed_callback = auth_state_changed_callback
self._daemon = daemon
- def start(self, verification_code: "str") -> None:
+ def start(self, verification_code: str) -> None:
"""
Starts the local web server to handle the authorization callback.
:param verification_code: The verification code part of the OAuth2 client identification.
@@ -42,6 +42,9 @@ class LocalAuthorizationServer:
self._web_server.setVerificationCode(verification_code)
return
+ if self._web_server_port is None:
+ raise Exception("Unable to start server without specifying the port.")
+
Logger.log("d", "Starting local web server to handle authorization callback on port %s",
self._web_server_port)
diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py
index 08bed7e6d9..a6b91cae26 100644
--- a/cura/OAuth2/Models.py
+++ b/cura/OAuth2/Models.py
@@ -9,7 +9,7 @@ class BaseModel:
# OAuth OAuth2Settings data template.
class OAuth2Settings(BaseModel):
- CALLBACK_PORT = None # type: Optional[str]
+ CALLBACK_PORT = None # type: Optional[int]
OAUTH_SERVER_URL = None # type: Optional[str]
CLIENT_ID = None # type: Optional[str]
CLIENT_SCOPES = None # type: Optional[str]
From 30ef724322314ac241d6b552c364091d8d814b61 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 21 Sep 2018 14:11:59 +0200
Subject: [PATCH 073/390] Update STL MIME type
Since march, there is now an official MIME type for STL files. See https://www.iana.org/assignments/media-types/model/stl for the new MIME type specification.
Fixes #4141.
---
cura.desktop.in | 2 +-
cura.sharedmimeinfo | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/cura.desktop.in b/cura.desktop.in
index fe61b47217..fbe8b30fed 100644
--- a/cura.desktop.in
+++ b/cura.desktop.in
@@ -13,6 +13,6 @@ TryExec=@CMAKE_INSTALL_FULL_BINDIR@/cura
Icon=cura-icon
Terminal=false
Type=Application
-MimeType=application/sla;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml;
+MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;image/bmp;image/gif;image/jpeg;image/png;model/x3d+xml;
Categories=Graphics;
Keywords=3D;Printing;Slicer;
diff --git a/cura.sharedmimeinfo b/cura.sharedmimeinfo
index 9629aef5df..23d38795eb 100644
--- a/cura.sharedmimeinfo
+++ b/cura.sharedmimeinfo
@@ -6,7 +6,7 @@
-
+
Computer-aided design and manufacturing format
From 060ea0b762ae6dce1a1f041f56c7617346be118a Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 14:12:31 +0200
Subject: [PATCH 074/390] Fixed up final bit of mypy issues
CURA-5744
---
cura/OAuth2/AuthorizationRequestHandler.py | 27 +++++++++++++---------
cura/OAuth2/AuthorizationRequestServer.py | 13 +++++++----
cura/OAuth2/AuthorizationService.py | 16 ++++++-------
cura/OAuth2/LocalAuthorizationServer.py | 13 +++++------
cura/OAuth2/Models.py | 2 +-
5 files changed, 39 insertions(+), 32 deletions(-)
diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py
index d13639c45d..0558db784f 100644
--- a/cura/OAuth2/AuthorizationRequestHandler.py
+++ b/cura/OAuth2/AuthorizationRequestHandler.py
@@ -1,12 +1,15 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Callable, Tuple, Dict, Any, List
+from typing import Optional, Callable, Tuple, Dict, Any, List, TYPE_CHECKING
from http.server import BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
-from cura.OAuth2.Models import AuthenticationResponse, ResponseData, HTTP_STATUS, ResponseStatus
+from cura.OAuth2.Models import AuthenticationResponse, ResponseData, HTTP_STATUS
+
+if TYPE_CHECKING:
+ from cura.OAuth2.Models import ResponseStatus
class AuthorizationRequestHandler(BaseHTTPRequestHandler):
@@ -15,15 +18,15 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
It also requests the access token for the 2nd stage of the OAuth flow.
"""
- def __init__(self, request, client_address, server):
+ def __init__(self, request, client_address, server) -> None:
super().__init__(request, client_address, server)
# These values will be injected by the HTTPServer that this handler belongs to.
- self.authorization_helpers = None # type: AuthorizationHelpers
- self.authorization_callback = None # type: Callable[[AuthenticationResponse], None]
- self.verification_code = None # type: str
+ self.authorization_helpers = None # type: Optional[AuthorizationHelpers]
+ self.authorization_callback = None # type: Optional[Callable[[AuthenticationResponse], None]]
+ self.verification_code = None # type: Optional[str]
- def do_GET(self):
+ def do_GET(self) -> None:
"""Entry point for GET requests"""
# Extract values from the query string.
@@ -44,7 +47,7 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
# If there is data in the response, we send it.
self._sendData(server_response.data_stream)
- if token_response:
+ if token_response and self.authorization_callback is not None:
# Trigger the callback if we got a response.
# This will cause the server to shut down, so we do it at the very end of the request handling.
self.authorization_callback(token_response)
@@ -56,7 +59,7 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
:return: HTTP ResponseData containing a success page to show to the user.
"""
code = self._queryGet(query, "code")
- if code:
+ if code and self.authorization_helpers is not None and self.verification_code is not None:
# If the code was returned we get the access token.
token_response = self.authorization_helpers.getAccessTokenUsingAuthorizationCode(
code, self.verification_code)
@@ -74,6 +77,8 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
success=False,
error_message="Something unexpected happened when trying to log in, please try again."
)
+ if self.authorization_helpers is None:
+ return ResponseData(), token_response
return ResponseData(
status=HTTP_STATUS["REDIRECT"],
@@ -83,7 +88,7 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
), token_response
@staticmethod
- def _handleNotFound() -> "ResponseData":
+ def _handleNotFound() -> ResponseData:
"""Handle all other non-existing server calls."""
return ResponseData(status=HTTP_STATUS["NOT_FOUND"], content_type="text/html", data_stream=b"Not found.")
@@ -100,6 +105,6 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
self.wfile.write(data)
@staticmethod
- def _queryGet(query_data: Dict[Any, List], key: str, default=None) -> Optional[str]:
+ def _queryGet(query_data: Dict[Any, List], key: str, default: Optional[str]=None) -> Optional[str]:
"""Helper for getting values from a pre-parsed query string"""
return query_data.get(key, [default])[0]
diff --git a/cura/OAuth2/AuthorizationRequestServer.py b/cura/OAuth2/AuthorizationRequestServer.py
index 270c558167..514a4ab5de 100644
--- a/cura/OAuth2/AuthorizationRequestServer.py
+++ b/cura/OAuth2/AuthorizationRequestServer.py
@@ -1,8 +1,11 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from http.server import HTTPServer
+from typing import Callable, Any, TYPE_CHECKING
-from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+if TYPE_CHECKING:
+ from cura.OAuth2.Models import AuthenticationResponse
+ from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
class AuthorizationRequestServer(HTTPServer):
@@ -14,12 +17,12 @@ class AuthorizationRequestServer(HTTPServer):
def setAuthorizationHelpers(self, authorization_helpers: "AuthorizationHelpers") -> None:
"""Set the authorization helpers instance on the request handler."""
- self.RequestHandlerClass.authorization_helpers = authorization_helpers
+ self.RequestHandlerClass.authorization_helpers = authorization_helpers # type: ignore
- def setAuthorizationCallback(self, authorization_callback) -> None:
+ def setAuthorizationCallback(self, authorization_callback: Callable[["AuthenticationResponse"], Any]) -> None:
"""Set the authorization callback on the request handler."""
- self.RequestHandlerClass.authorization_callback = authorization_callback
+ self.RequestHandlerClass.authorization_callback = authorization_callback # type: ignore
def setVerificationCode(self, verification_code: str) -> None:
"""Set the verification code on the request handler."""
- self.RequestHandlerClass.verification_code = verification_code
+ self.RequestHandlerClass.verification_code = verification_code # type: ignore
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 4c66170c32..33ea419ff5 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -2,17 +2,18 @@
# Cura is released under the terms of the LGPLv3 or higher.
import json
import webbrowser
-from typing import Optional
+from typing import Optional, TYPE_CHECKING
from urllib.parse import urlencode
-# As this module is specific for Cura plugins, we can rely on these imports.
from UM.Logger import Logger
from UM.Signal import Signal
-# Plugin imports need to be relative to work in final builds.
from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
-from cura.OAuth2.Models import OAuth2Settings, AuthenticationResponse, UserProfile
+from cura.OAuth2.Models import AuthenticationResponse
+
+if TYPE_CHECKING:
+ from cura.OAuth2.Models import UserProfile, OAuth2Settings
class AuthorizationService:
@@ -32,7 +33,7 @@ class AuthorizationService:
self._auth_helpers = AuthorizationHelpers(settings)
self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL)
self._auth_data = None # type: Optional[AuthenticationResponse]
- self._user_profile = None # type: Optional[UserProfile]
+ self._user_profile = None # type: Optional["UserProfile"]
self._cura_preferences = preferences
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
self._loadAuthData()
@@ -75,7 +76,6 @@ class AuthorizationService:
def getAccessToken(self) -> Optional[str]:
"""
Get the access token response data.
- :return: Dict containing token data.
"""
if not self.getUserProfile():
# We check if we can get the user profile.
@@ -130,7 +130,7 @@ class AuthorizationService:
# Start a local web server to receive the callback URL on.
self._server.start(verification_code)
- def _onAuthStateChanged(self, auth_response: "AuthenticationResponse") -> None:
+ def _onAuthStateChanged(self, auth_response: AuthenticationResponse) -> None:
"""Callback method for an authentication flow."""
if auth_response.success:
self._storeAuthData(auth_response)
@@ -150,7 +150,7 @@ class AuthorizationService:
except ValueError as err:
Logger.log("w", "Could not load auth data from preferences: %s", err)
- def _storeAuthData(self, auth_data: Optional["AuthenticationResponse"] = None) -> None:
+ def _storeAuthData(self, auth_data: Optional[AuthenticationResponse] = None) -> None:
"""Store authentication data in preferences and locally."""
self._auth_data = auth_data
if auth_data:
diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py
index d6a4bf5216..d1d07b5c91 100644
--- a/cura/OAuth2/LocalAuthorizationServer.py
+++ b/cura/OAuth2/LocalAuthorizationServer.py
@@ -1,22 +1,21 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import threading
-from http.server import HTTPServer
-from typing import Optional, Callable, Any
+from typing import Optional, Callable, Any, TYPE_CHECKING
-# As this module is specific for Cura plugins, we can rely on these imports.
from UM.Logger import Logger
-# Plugin imports need to be relative to work in final builds.
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
from cura.OAuth2.AuthorizationRequestServer import AuthorizationRequestServer
from cura.OAuth2.AuthorizationRequestHandler import AuthorizationRequestHandler
-from cura.OAuth2.Models import AuthenticationResponse
+
+if TYPE_CHECKING:
+ from cura.OAuth2.Models import AuthenticationResponse
class LocalAuthorizationServer:
def __init__(self, auth_helpers: "AuthorizationHelpers",
- auth_state_changed_callback: "Callable[[AuthenticationResponse], Any]",
+ auth_state_changed_callback: Callable[["AuthenticationResponse"], Any],
daemon: bool) -> None:
"""
:param auth_helpers: An instance of the authorization helpers class.
@@ -62,7 +61,7 @@ class LocalAuthorizationServer:
def stop(self) -> None:
""" Stops the web server if it was running. Also deletes the objects. """
- Logger.log("d", "Stopping local web server...")
+ Logger.log("d", "Stopping local oauth2 web server...")
if self._web_server:
self._web_server.server_close()
diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py
index a6b91cae26..796fdf8746 100644
--- a/cura/OAuth2/Models.py
+++ b/cura/OAuth2/Models.py
@@ -46,7 +46,7 @@ class ResponseStatus(BaseModel):
# Response data template.
class ResponseData(BaseModel):
- status = None # type: Optional[ResponseStatus]
+ status = None # type: ResponseStatus
data_stream = None # type: Optional[bytes]
redirect_uri = None # type: Optional[str]
content_type = "text/html" # type: str
From b54383e685a0fc5909a4a3f3c9a3d414bf0e8c44 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 16:43:32 +0200
Subject: [PATCH 075/390] Added account object to API
CURA-5744
---
cura/API/Account.py | 88 +++++++++++++++++++++++++++++
cura/API/__init__.py | 5 +-
cura/OAuth2/AuthorizationService.py | 1 +
3 files changed, 93 insertions(+), 1 deletion(-)
create mode 100644 cura/API/Account.py
diff --git a/cura/API/Account.py b/cura/API/Account.py
new file mode 100644
index 0000000000..377464f438
--- /dev/null
+++ b/cura/API/Account.py
@@ -0,0 +1,88 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Tuple, Optional, Dict
+
+from PyQt5.QtCore.QObject import QObject, pyqtSignal, pyqtSlot, pyqtProperty
+
+from UM.Message import Message
+from cura.OAuth2.AuthorizationService import AuthorizationService
+from cura.OAuth2.Models import OAuth2Settings
+from UM.Application import Application
+
+from UM.i18n import i18nCatalog
+i18n_catalog = i18nCatalog("cura")
+
+
+## The account API provides a version-proof bridge to use Ultimaker Accounts
+#
+# Usage:
+# ``from cura.API import CuraAPI
+# api = CuraAPI()
+# api.account.login()
+# api.account.logout()
+# api.account.userProfile # Who is logged in``
+#
+class Account(QObject):
+ # Signal emitted when user logged in or out.
+ loginStateChanged = pyqtSignal()
+
+ def __init__(self, parent = None) -> None:
+ super().__init__(parent)
+ self._callback_port = 32118
+ self._oauth_root = "https://account.ultimaker.com"
+ self._cloud_api_root = "https://api.ultimaker.com"
+
+ self._oauth_settings = OAuth2Settings(
+ OAUTH_SERVER_URL= self._oauth_root,
+ CALLBACK_PORT=self._callback_port,
+ CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
+ CLIENT_ID="um---------------ultimaker_cura_drive_plugin",
+ CLIENT_SCOPES="user.read drive.backups.read drive.backups.write",
+ AUTH_DATA_PREFERENCE_KEY="cura_drive/auth_data",
+ AUTH_SUCCESS_REDIRECT="{}/cura-drive/v1/auth-success".format(self._cloud_api_root),
+ AUTH_FAILED_REDIRECT="{}/cura-drive/v1/auth-error".format(self._cloud_api_root)
+ )
+
+ self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
+
+ self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
+ self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
+
+ self._error_message = None
+ self._logged_in = False
+
+ @pyqtProperty(bool, notify=loginStateChanged)
+ def isLoggedIn(self) -> bool:
+ return self._logged_in
+
+ def _onLoginStateChanged(self, logged_in: bool = False, error_message: Optional[str] = None) -> None:
+ if error_message:
+ if self._error_message:
+ self._error_message.hide()
+ self._error_message = Message(error_message, title = i18n_catalog.i18nc("@info:title", "Login failed"))
+ self._error_message.show()
+
+ if self._logged_in != logged_in:
+ self._logged_in = logged_in
+ self.loginStateChanged.emit()
+
+ def login(self) -> None:
+ if self._logged_in:
+ # Nothing to do, user already logged in.
+ return
+ self._authorization_service.startAuthorizationFlow()
+
+ # Get the profile of the logged in user
+ # @returns None if no user is logged in, a dict containing user_id, username and profile_image_url
+ @pyqtProperty("QVariantMap", notify = loginStateChanged)
+ def userProfile(self) -> Optional[Dict[str, Optional[str]]]:
+ user_profile = self._authorization_service.getUserProfile()
+ if not user_profile:
+ return None
+ return user_profile.__dict__
+
+ def logout(self) -> None:
+ if not self._logged_in:
+ return # Nothing to do, user isn't logged in.
+
+ self._authorization_service.deleteAuthData()
diff --git a/cura/API/__init__.py b/cura/API/__init__.py
index 64d636903d..d6d9092219 100644
--- a/cura/API/__init__.py
+++ b/cura/API/__init__.py
@@ -3,6 +3,8 @@
from UM.PluginRegistry import PluginRegistry
from cura.API.Backups import Backups
from cura.API.Interface import Interface
+from cura.API.Account import Account
+
## The official Cura API that plug-ins can use to interact with Cura.
#
@@ -10,7 +12,6 @@ from cura.API.Interface import Interface
# this API provides a version-safe interface with proper deprecation warnings
# etc. Usage of any other methods than the ones provided in this API can cause
# plug-ins to be unstable.
-
class CuraAPI:
# For now we use the same API version to be consistent.
@@ -21,3 +22,5 @@ class CuraAPI:
# Interface API
interface = Interface()
+
+ account = Account()
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 33ea419ff5..868dbe8034 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -49,6 +49,7 @@ class AuthorizationService:
if not self._user_profile:
# If there is still no user profile from the JWT, we have to log in again.
return None
+
return self._user_profile
def _parseJWT(self) -> Optional["UserProfile"]:
From 081b2a28fe6a3b6d8136ec6e8bc67745262e9ede Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Fri, 21 Sep 2018 17:23:30 +0200
Subject: [PATCH 076/390] Expose Account API to QML
This is done by adding the API as an SingletonType to Cura.
CURA-5744
---
cura/API/Account.py | 18 +++++++++++++++++-
cura/API/__init__.py | 10 ++++++++--
cura/CuraApplication.py | 10 ++++++++++
resources/qml/Cura.qml | 3 +--
4 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 377464f438..7ccd995be3 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Tuple, Optional, Dict
-from PyQt5.QtCore.QObject import QObject, pyqtSignal, pyqtSlot, pyqtProperty
+from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty
from UM.Message import Message
from cura.OAuth2.AuthorizationService import AuthorizationService
@@ -66,12 +66,27 @@ class Account(QObject):
self._logged_in = logged_in
self.loginStateChanged.emit()
+ @pyqtSlot()
def login(self) -> None:
if self._logged_in:
# Nothing to do, user already logged in.
return
self._authorization_service.startAuthorizationFlow()
+ @pyqtProperty(str, notify=loginStateChanged)
+ def userName(self):
+ user_profile = self._authorization_service.getUserProfile()
+ if not user_profile:
+ return None
+ return user_profile.username
+
+ @pyqtProperty(str, notify = loginStateChanged)
+ def profileImageUrl(self):
+ user_profile = self._authorization_service.getUserProfile()
+ if not user_profile:
+ return None
+ return user_profile.profile_image_url
+
# Get the profile of the logged in user
# @returns None if no user is logged in, a dict containing user_id, username and profile_image_url
@pyqtProperty("QVariantMap", notify = loginStateChanged)
@@ -81,6 +96,7 @@ class Account(QObject):
return None
return user_profile.__dict__
+ @pyqtSlot()
def logout(self) -> None:
if not self._logged_in:
return # Nothing to do, user isn't logged in.
diff --git a/cura/API/__init__.py b/cura/API/__init__.py
index d6d9092219..54f5c1f8b0 100644
--- a/cura/API/__init__.py
+++ b/cura/API/__init__.py
@@ -1,5 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from PyQt5.QtCore import QObject, pyqtProperty
+
from UM.PluginRegistry import PluginRegistry
from cura.API.Backups import Backups
from cura.API.Interface import Interface
@@ -12,7 +14,7 @@ from cura.API.Account import Account
# this API provides a version-safe interface with proper deprecation warnings
# etc. Usage of any other methods than the ones provided in this API can cause
# plug-ins to be unstable.
-class CuraAPI:
+class CuraAPI(QObject):
# For now we use the same API version to be consistent.
VERSION = PluginRegistry.APIVersion
@@ -23,4 +25,8 @@ class CuraAPI:
# Interface API
interface = Interface()
- account = Account()
+ _account = Account()
+
+ @pyqtProperty(QObject, constant = True)
+ def account(self) -> Account:
+ return CuraAPI._account
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index a94814502e..cd0cfb95d6 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -204,6 +204,7 @@ class CuraApplication(QtApplication):
self._quality_profile_drop_down_menu_model = None
self._custom_quality_profile_drop_down_menu_model = None
+ self._cura_API = None
self._physics = None
self._volume = None
@@ -894,6 +895,12 @@ class CuraApplication(QtApplication):
self._custom_quality_profile_drop_down_menu_model = CustomQualityProfilesDropDownMenuModel(self)
return self._custom_quality_profile_drop_down_menu_model
+ def getCuraAPI(self, *args, **kwargs):
+ if self._cura_API is None:
+ from cura.API import CuraAPI
+ self._cura_API = CuraAPI()
+ return self._cura_API
+
## Registers objects for the QML engine to use.
#
# \param engine The QML engine.
@@ -942,6 +949,9 @@ class CuraApplication(QtApplication):
qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.getInstance)
qmlRegisterType(SidebarCustomMenuItemsModel, "Cura", 1, 0, "SidebarCustomMenuItemsModel")
+ from cura.API import CuraAPI
+ qmlRegisterSingletonType(CuraAPI, "Cura", 1, 1, "API", self.getCuraAPI)
+
# As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work.
actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")))
qmlRegisterSingletonType(actions_url, "Cura", 1, 0, "Actions")
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index 07154a0729..b3367471ad 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -8,7 +8,7 @@ import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2
import UM 1.3 as UM
-import Cura 1.0 as Cura
+import Cura 1.1 as Cura
import "Menus"
@@ -21,7 +21,6 @@ UM.MainWindow
property bool showPrintMonitor: false
backgroundColor: UM.Theme.getColor("viewport_background")
-
// This connection is here to support legacy printer output devices that use the showPrintMonitor signal on Application to switch to the monitor stage
// It should be phased out in newer plugin versions.
Connections
From c29d38361b754d1acbbf4391b5b333a0b5ef2edd Mon Sep 17 00:00:00 2001
From: Cherubim
Date: Sun, 23 Sep 2018 00:27:50 +0200
Subject: [PATCH 077/390] Fix initial start-up when providing model parameter
If you're adding a model file as command line argument to Cura, it should auto-load this file upon start-up. However when adding this command line argument upon first launch of Cura, there is no printer yet so Cura would crash because it tries to load a model before there is a build volume. This prevents that crash and instead doesn't load the model at all.
---
cura/CuraApplication.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index dbaef4df34..65e95f1c11 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -1580,6 +1580,11 @@ class CuraApplication(QtApplication):
job.start()
def _readMeshFinished(self, job):
+ global_container_stack = self.getGlobalContainerStack()
+ if not global_container_stack:
+ Logger.log("w", "Can't load meshes before a printer is added.")
+ return
+
nodes = job.getResult()
file_name = job.getFileName()
file_name_lower = file_name.lower()
@@ -1594,7 +1599,6 @@ class CuraApplication(QtApplication):
for node_ in DepthFirstIterator(root):
if node_.callDecoration("isSliceable") and node_.callDecoration("getBuildPlateNumber") == target_build_plate:
fixed_nodes.append(node_)
- global_container_stack = self.getGlobalContainerStack()
machine_width = global_container_stack.getProperty("machine_width", "value")
machine_depth = global_container_stack.getProperty("machine_depth", "value")
arranger = Arrange.create(x = machine_width, y = machine_depth, fixed_nodes = fixed_nodes)
From 8c6f2dc86a7c6df973d14ff6cf42da1260b2f60b Mon Sep 17 00:00:00 2001
From: drzejkopf <41212609+drzejkopf@users.noreply.github.com>
Date: Sun, 23 Sep 2018 15:21:14 +0200
Subject: [PATCH 078/390] Complete Polish translation for version 3.5
---
resources/i18n/pl_PL/cura.po | 256 ++++++++++++++++++-----------------
1 file changed, 130 insertions(+), 126 deletions(-)
diff --git a/resources/i18n/pl_PL/cura.po b/resources/i18n/pl_PL/cura.po
index bab972db8c..5003eee692 100644
--- a/resources/i18n/pl_PL/cura.po
+++ b/resources/i18n/pl_PL/cura.po
@@ -8,15 +8,15 @@ msgstr ""
"Project-Id-Version: Cura 3.5\n"
"Report-Msgid-Bugs-To: r.dulek@ultimaker.com\n"
"POT-Creation-Date: 2018-09-19 17:07+0200\n"
-"PO-Revision-Date: 2018-04-14 14:35+0200\n"
-"Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n"
+"PO-Revision-Date: 2018-09-21 20:52+0200\n"
+"Last-Translator: 'Jaguś' Paweł Jagusiak, Andrzej 'anraf1001' Rafalski and Jakub 'drzejkopf' Świeciński\n"
"Language-Team: reprapy.pl\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.0.6\n"
+"X-Generator: Poedit 2.1.1\n"
#: /home/ruben/Projects/Cura/plugins/MachineSettingsAction/MachineSettingsAction.py:22
msgctxt "@action"
@@ -43,18 +43,18 @@ msgstr "Pliki G-code"
#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:67
msgctxt "@error:not supported"
msgid "GCodeWriter does not support non-text mode."
-msgstr ""
+msgstr "Zapisywacz G-code nie obsługuje trybu nietekstowego."
#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:73
#: /home/ruben/Projects/Cura/plugins/GCodeWriter/GCodeWriter.py:89
msgctxt "@warning:status"
msgid "Please generate G-code before saving."
-msgstr ""
+msgstr "Wygeneruj G-code przed zapisem."
#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:30
msgctxt "@info:title"
msgid "3D Model Assistant"
-msgstr ""
+msgstr "Asystent Modelu 3D"
#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.py:80
#, python-brace-format
@@ -65,6 +65,10 @@ msgid ""
"Find out how to ensure the best possible print quality and reliability.
\n"
"View print quality guide
"
msgstr ""
+"Jeden lub więcej modeli 3D może nie zostać wydrukowanych optymalnie ze względu na wymiary modelu oraz konfigurację materiału:
\n"
+"{model_names}
\n"
+"Dowiedz się, jak zapewnić najlepszą możliwą jakość oraz niezawodnośc wydruku.
\n"
+"Zobacz przewodnik po jakości wydruku (strona w języku angielskim)
"
#: /home/ruben/Projects/Cura/plugins/ChangeLogPlugin/ChangeLog.py:32
msgctxt "@item:inmenu"
@@ -104,7 +108,7 @@ msgstr "Połączono przez USB"
#: /home/ruben/Projects/Cura/plugins/USBPrinting/USBPrinterOutputDevice.py:103
msgctxt "@label"
msgid "A USB print is in progress, closing Cura will stop this print. Are you sure?"
-msgstr ""
+msgstr "Trwa drukowanie przez USB, zamknięcie Cura spowoduje jego zatrzymanie. Jesteś pewien?"
#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/install/X3GWriter/__init__.py:15
#: /home/ruben/Projects/Cura/plugins/X3GWriter/__init__.py:15
@@ -115,12 +119,12 @@ msgstr "Plik X3G"
#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:16
msgctxt "X3g Writer Plugin Description"
msgid "Writes X3g to files"
-msgstr ""
+msgstr "Zapisuje do plików X3g"
#: /home/ruben/Projects/Cura/plugins/X3GWriter/build/GPX-prefix/src/GPX/slicerplugins/cura15.06/X3gWriter/__init__.py:21
msgctxt "X3g Writer File Description"
msgid "X3g File"
-msgstr ""
+msgstr "Plik X3g"
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/__init__.py:17
#: /home/ruben/Projects/Cura/plugins/GCodeGzReader/__init__.py:17
@@ -131,7 +135,7 @@ msgstr "Skompresowany Plik G-code"
#: /home/ruben/Projects/Cura/plugins/GCodeGzWriter/GCodeGzWriter.py:38
msgctxt "@error:not supported"
msgid "GCodeGzWriter does not support text mode."
-msgstr ""
+msgstr "Zapisywacz skompresowanego G-code nie obsługuje trybu tekstowego."
#: /home/ruben/Projects/Cura/plugins/UFPWriter/__init__.py:38
msgctxt "@item:inlistbox"
@@ -501,7 +505,7 @@ msgstr "Jak zaktualizować"
#: /home/ruben/Projects/Cura/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py:91
msgctxt "@info"
msgid "Could not access update information."
-msgstr "Nie można uzyskać dostępu do informacji o aktualizacji"
+msgstr "Nie można uzyskać dostępu do informacji o aktualizacji."
#: /home/ruben/Projects/Cura/plugins/SimulationView/__init__.py:14
msgctxt "@item:inlistbox"
@@ -545,12 +549,12 @@ msgstr "Zbieranie Danych"
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:48
msgctxt "@action:button"
msgid "More info"
-msgstr ""
+msgstr "Więcej informacji"
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:49
msgctxt "@action:tooltip"
msgid "See more information on what data Cura sends."
-msgstr ""
+msgstr "Zobacz więcej informacji o tym, jakie dane przesyła Cura."
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/SliceInfo.py:51
msgctxt "@action:button"
@@ -565,7 +569,7 @@ msgstr "Zezwól Cura na wysyłanie anonimowych danych statystycznych, aby pomóc
#: /home/ruben/Projects/Cura/plugins/LegacyProfileReader/__init__.py:14
msgctxt "@item:inlistbox"
msgid "Cura 15.04 profiles"
-msgstr "Profile Cura 15.04 "
+msgstr "Profile Cura 15.04"
#: /home/ruben/Projects/Cura/plugins/ImageReader/__init__.py:14
msgctxt "@item:inlistbox"
@@ -628,7 +632,7 @@ msgstr "Nie można pociąć, ponieważ wieża czyszcząca lub jej pozycja(e) są
#, python-format
msgctxt "@info:status"
msgid "Unable to slice because there are objects associated with disabled Extruder %s."
-msgstr ""
+msgstr "Nie można pociąć, ponieważ obecne są obiekty powiązane z wyłączonym ekstruderem %s."
#: /home/ruben/Projects/Cura/plugins/CuraEngineBackend/CuraEngineBackend.py:414
msgctxt "@info:status"
@@ -684,12 +688,12 @@ msgstr "Dysza"
#, python-brace-format
msgctxt "@info:status Don't translate the XML tags or !"
msgid "Project file {0} contains an unknown machine type {1} . Cannot import the machine. Models will be imported instead."
-msgstr ""
+msgstr "Plik projektu {0} zawiera nieznany typ maszyny {1} . Nie można zaimportować maszyny. Zostaną zaimportowane modele."
#: /home/ruben/Projects/Cura/plugins/3MFReader/ThreeMFWorkspaceReader.py:471
msgctxt "@info:title"
msgid "Open Project File"
-msgstr ""
+msgstr "Otwórz Plik Projektu"
#: /home/ruben/Projects/Cura/plugins/SolidView/__init__.py:12
msgctxt "@item:inmenu"
@@ -746,7 +750,7 @@ msgstr "Plik Cura Project 3MF"
#: /home/ruben/Projects/Cura/plugins/3MFWriter/ThreeMFWriter.py:179
msgctxt "@error:zip"
msgid "Error writing 3mf file."
-msgstr ""
+msgstr "Błąd zapisu pliku 3mf."
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelection.py:17
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelection.py:18
@@ -802,7 +806,7 @@ msgstr "Łączenie podpory"
#: /home/ruben/Projects/Cura/cura/PrintInformation.py:104
msgctxt "@tooltip"
msgid "Support"
-msgstr "Podpory "
+msgstr "Podpory"
#: /home/ruben/Projects/Cura/cura/PrintInformation.py:105
msgctxt "@tooltip"
@@ -1008,22 +1012,22 @@ msgstr "Obszar Roboczy"
#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:97
msgctxt "@info:backup_failed"
msgid "Could not create archive from user data directory: {}"
-msgstr ""
+msgstr "Nie można utworzyć archiwum z folderu danych użytkownika: {}"
#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:102
msgctxt "@info:title"
msgid "Backup"
-msgstr ""
+msgstr "Kopia zapasowa"
#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:112
msgctxt "@info:backup_failed"
msgid "Tried to restore a Cura backup without having proper data or meta data."
-msgstr ""
+msgstr "Podjęto próbę przywrócenia kopii zapasowej Cura na podstawie niepoprawnych danych lub metadanych."
#: /home/ruben/Projects/Cura/cura/Backups/Backup.py:122
msgctxt "@info:backup_failed"
msgid "Tried to restore a Cura backup that does not match your current version."
-msgstr ""
+msgstr "Podjęto próbę przywrócenia kopii zapasowej Cura, która nie odpowiada obecnej wersji programu."
#: /home/ruben/Projects/Cura/cura/MultiplyObjectsJob.py:27
msgctxt "@info:status"
@@ -1429,7 +1433,7 @@ msgstr "Zainstalowane"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxErrorPage.qml:16
msgctxt "@info"
msgid "Could not connect to the Cura Package database. Please check your connection."
-msgstr ""
+msgstr "Nie można połączyć się z bazą danych pakietów Cura. Sprawdź swoje połączenie z internetem."
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledPage.qml:38
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:26
@@ -1447,22 +1451,22 @@ msgstr "Materiał"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:80
msgctxt "@label"
msgid "Version"
-msgstr ""
+msgstr "Wersja"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:86
msgctxt "@label"
msgid "Last updated"
-msgstr ""
+msgstr "Ostatnia aktualizacja"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:92
msgctxt "@label"
msgid "Author"
-msgstr ""
+msgstr "Autor"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:98
msgctxt "@label"
msgid "Downloads"
-msgstr ""
+msgstr "Pobrań"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:117
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml:159
@@ -1481,93 +1485,93 @@ msgstr "Aktualizuj"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:31
msgctxt "@action:button"
msgid "Updating"
-msgstr ""
+msgstr "Aktualizowanie"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDetailTileActions.qml:46
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:32
msgctxt "@action:button"
msgid "Updated"
-msgstr ""
+msgstr "Zaktualizowano"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/Toolbox.qml:13
msgctxt "@title"
msgid "Toolbox"
-msgstr ""
+msgstr "Narzędzia"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxBackColumn.qml:25
msgctxt "@action:button"
msgid "Back"
-msgstr ""
+msgstr "Powrót"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:20
msgctxt "@title:window"
msgid "Confirm uninstall "
-msgstr ""
+msgstr "Potwierdź odinstalowanie "
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:50
msgctxt "@text:window"
msgid "You are uninstalling materials and/or profiles that are still in use. Confirming will reset the following materials/profiles to their defaults."
-msgstr ""
+msgstr "Odinstalowujesz materiały i/lub profile, które są aktualnie używane. Zatwierdzenie spowoduje przywrócenie bieżących ustawień materiału/profilu do ustawień domyślnych."
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:51
msgctxt "@text:window"
msgid "Materials"
-msgstr ""
+msgstr "Materiały"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:52
msgctxt "@text:window"
msgid "Profiles"
-msgstr ""
+msgstr "Profile"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml:89
msgctxt "@action:button"
msgid "Confirm"
-msgstr ""
+msgstr "Potwierdź"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:17
msgctxt "@info"
msgid "You will need to restart Cura before changes in packages have effect."
-msgstr ""
+msgstr "Należy uruchomić ponownie Cura, aby zmiany w pakietach przyniosły efekt."
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxFooter.qml:34
msgctxt "@info:button"
msgid "Quit Cura"
-msgstr ""
+msgstr "Zakończ Cura"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34
msgctxt "@label"
msgid "Community Contributions"
-msgstr ""
+msgstr "Udział Społeczności"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:34
msgctxt "@label"
msgid "Community Plugins"
-msgstr ""
+msgstr "Wtyczki Społeczności"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsPage.qml:43
msgctxt "@label"
msgid "Generic Materials"
-msgstr ""
+msgstr "Materiały Podstawowe"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxHeader.qml:54
msgctxt "@title:tab"
msgid "Installed"
-msgstr ""
+msgstr "Zainstalowano"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:19
msgctxt "@label"
msgid "Will install upon restarting"
-msgstr ""
+msgstr "Zostanie zainstalowane po ponownym uruchomieniu"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:51
msgctxt "@action:button"
msgid "Downgrade"
-msgstr ""
+msgstr "Zainstaluj poprzednią wersję"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxInstalledTileActions.qml:51
msgctxt "@action:button"
msgid "Uninstall"
-msgstr ""
+msgstr "Odinstaluj"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLicenseDialog.qml:16
msgctxt "@title:window"
@@ -1598,27 +1602,27 @@ msgstr "Odrzuć"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxDownloadsShowcase.qml:23
msgctxt "@label"
msgid "Featured"
-msgstr ""
+msgstr "Polecane"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxCompatibilityChart.qml:31
msgctxt "@label"
msgid "Compatibility"
-msgstr ""
+msgstr "Zgodność"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxLoadingPage.qml:16
msgctxt "@info"
msgid "Fetching packages..."
-msgstr ""
+msgstr "Uzyskiwanie pakietów..."
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:88
msgctxt "@label"
msgid "Website"
-msgstr ""
+msgstr "Strona internetowa"
#: /home/ruben/Projects/Cura/plugins/Toolbox/resources/qml/ToolboxAuthorPage.qml:94
msgctxt "@label"
msgid "Email"
-msgstr ""
+msgstr "E-mail"
#: /home/ruben/Projects/Cura/plugins/ModelChecker/ModelChecker.qml:22
msgctxt "@info:tooltip"
@@ -1755,12 +1759,12 @@ msgstr "Adres"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:302
msgctxt "@label"
msgid "This printer is not set up to host a group of printers."
-msgstr ""
+msgstr "Ta drukarka nie jest skonfigurowana jako host dla grupy drukarek."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:306
msgctxt "@label"
msgid "This printer is the host for a group of %1 printers."
-msgstr ""
+msgstr "Ta drukarka jest hostem grupy %1 drukarek."
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml:316
msgctxt "@label"
@@ -1808,52 +1812,52 @@ msgstr "Drukuj"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:142
msgctxt "@label"
msgid "Waiting for: Unavailable printer"
-msgstr ""
+msgstr "Oczekiwanie na: Niedostępną drukarkę"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:144
msgctxt "@label"
msgid "Waiting for: First available"
-msgstr ""
+msgstr "Oczekiwanie na: Pierwszą dostępną"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:148
msgctxt "@label"
msgid "Waiting for: "
-msgstr ""
+msgstr "Oczekiwanie na: "
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:213
msgctxt "@label"
msgid "Move to top"
-msgstr ""
+msgstr "Przesuń na początek"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:234
msgctxt "@window:title"
msgid "Move print job to top"
-msgstr ""
+msgstr "Przesuń zadanie drukowania na początek"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:236
msgctxt "@label %1 is the name of a print job."
msgid "Are you sure you want to move %1 to the top of the queue?"
-msgstr ""
+msgstr "Czy jesteś pewien, że chcesz przesunąć %1 na początek kolejki?"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:245
msgctxt "@label"
msgid "Delete"
-msgstr ""
+msgstr "Usuń"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:264
msgctxt "@window:title"
msgid "Delete print job"
-msgstr ""
+msgstr "Usuń zadanie drukowania"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml:266
msgctxt "@label %1 is the name of a print job."
msgid "Are you sure you want to delete %1?"
-msgstr ""
+msgstr "Czy jesteś pewien, że chcesz usunąć %1?"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:32
msgctxt "@label link to connect manager"
msgid "Manage queue"
-msgstr ""
+msgstr "Zarządzaj kolejką"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml:54
msgctxt "@label"
@@ -1868,57 +1872,57 @@ msgstr "Drukowanie"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:54
msgctxt "@label link to connect manager"
msgid "Manage printers"
-msgstr ""
+msgstr "Zarządzaj drukarkami"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:212
msgctxt "@label"
msgid "Not available"
-msgstr ""
+msgstr "Niedostępny"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:215
msgctxt "@label"
msgid "Unreachable"
-msgstr ""
+msgstr "Nieosiągalny"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:221
msgctxt "@label"
msgid "Available"
-msgstr ""
+msgstr "Dostępny"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416
#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:289
msgctxt "@label"
msgid "Resume"
-msgstr ""
+msgstr "Ponów"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:416
#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:284
#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:293
msgctxt "@label"
msgid "Pause"
-msgstr ""
+msgstr "Wstrzymaj"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:444
msgctxt "@label"
msgid "Abort"
-msgstr ""
+msgstr "Anuluj"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:464
#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:335
msgctxt "@window:title"
msgid "Abort print"
-msgstr "Przerwij wydruk"
+msgstr "Anuluj wydruk"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:466
msgctxt "@label %1 is the name of a print job."
msgid "Are you sure you want to abort %1?"
-msgstr ""
+msgstr "Czy jesteś pewien, że chcesz anulować %1?"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:665
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:673
msgctxt "@label:status"
msgid "Aborted"
-msgstr ""
+msgstr "Anulowano"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:667
msgctxt "@label:status"
@@ -1933,7 +1937,7 @@ msgstr "Przygotowywanie"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:675
msgctxt "@label:status"
msgid "Pausing"
-msgstr ""
+msgstr "Wstrzymywanie"
#: /home/ruben/Projects/Cura/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml:677
msgctxt "@label:status"
@@ -2073,22 +2077,22 @@ msgstr "Zmień aktywne skrypty post-processingu"
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:16
msgctxt "@title:window"
msgid "More information on anonymous data collection"
-msgstr ""
+msgstr "Wiećej informacji o zbieraniu anonimowych danych"
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:66
msgctxt "@text:window"
msgid "Cura sends anonymous data to Ultimaker in order to improve the print quality and user experience. Below is an example of all the data that is sent."
-msgstr ""
+msgstr "Cura wysyła anonimowe dane do Ultimaker w celu polepszenia jakości wydruków oraz interakcji z użytkownikiem. Poniżej podano przykład wszystkich danych, jakie mogą być przesyłane."
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:101
msgctxt "@text:window"
msgid "I don't want to send these data"
-msgstr ""
+msgstr "Nie chcę przesyłać tych danych"
#: /home/ruben/Projects/Cura/plugins/SliceInfoPlugin/MoreInfoWindow.qml:111
msgctxt "@text:window"
msgid "Allow sending these data to Ultimaker and help us improve Cura"
-msgstr ""
+msgstr "Zezwól na przesyłanie tych danych do Ultimaker i pomóż nam ulepszać Cura"
#: /home/ruben/Projects/Cura/plugins/ImageReader/ConfigUI.qml:19
msgctxt "@title:window"
@@ -2351,7 +2355,7 @@ msgstr "Otwórz"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:34
msgctxt "@action:button"
msgid "Previous"
-msgstr ""
+msgstr "Poprzedni"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:138
#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsPage.qml:154
@@ -2363,12 +2367,12 @@ msgstr "Eksportuj"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorTabControls.qml:140
msgctxt "@action:button"
msgid "Next"
-msgstr ""
+msgstr "Następny"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageCategoryView.qml:163
msgctxt "@label"
msgid "Tip"
-msgstr ""
+msgstr "Końcówka"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/CuraPrintProfileCreatorView.qml:80
#: /home/ruben/Projects/Cura/resources/qml/PrepareSidebar.qml:341
@@ -2417,12 +2421,12 @@ msgstr "%1m / ~ %2g"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPage.qml:143
msgctxt "@label"
msgid "Print experiment"
-msgstr ""
+msgstr "Próbny wydruk"
#: /home/ruben/Projects/Cura/plugins/CuraPrintProfileCreator/components/ProfileCreatorPageValidation.qml:26
msgctxt "@label"
msgid "Checklist"
-msgstr ""
+msgstr "Lista kontrolna"
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UM2UpgradeSelectionMachineAction.qml:26
#: /home/ruben/Projects/Cura/plugins/UltimakerMachineActions/UMOUpgradeSelectionMachineAction.qml:25
@@ -2645,7 +2649,7 @@ msgstr "Usuń wydruk"
#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:325
msgctxt "@label"
msgid "Abort Print"
-msgstr ""
+msgstr "Anuluj Wydruk"
#: /home/ruben/Projects/Cura/resources/qml/MonitorButton.qml:337
msgctxt "@label"
@@ -2725,7 +2729,7 @@ msgstr "Potwierdź Zmianę Średnicy"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:101
msgctxt "@label (%1 is a number)"
msgid "The new filament diameter is set to %1 mm, which is not compatible with the current extruder. Do you wish to continue?"
-msgstr ""
+msgstr "Średnica nowego filamentu została ustawiona na %1mm, i nie jest kompatybilna z bieżącym ekstruderem. Czy chcesz kontynuować?"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/Materials/MaterialsView.qml:133
msgctxt "@label"
@@ -3068,12 +3072,12 @@ msgstr "Skaluj bardzo małe modele"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:507
msgctxt "@info:tooltip"
msgid "Should models be selected after they are loaded?"
-msgstr ""
+msgstr "Czy modele powinny zostać zaznaczone po załadowaniu?"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:512
msgctxt "@option:check"
msgid "Select models when loaded"
-msgstr ""
+msgstr "Zaznaczaj modele po załadowaniu"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:522
msgctxt "@info:tooltip"
@@ -3108,7 +3112,7 @@ msgstr "Domyślne zachowanie podczas otwierania pliku projektu: "
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:573
msgctxt "@option:openProject"
msgid "Always ask me this"
-msgstr ""
+msgstr "Zawsze pytaj"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:574
msgctxt "@option:openProject"
@@ -3128,22 +3132,22 @@ msgstr "Kiedy dokonasz zmian w profilu i przełączysz się na inny, zostanie wy
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:620
msgctxt "@label"
msgid "Profiles"
-msgstr ""
+msgstr "Profile"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:625
msgctxt "@window:text"
msgid "Default behavior for changed setting values when switching to a different profile: "
-msgstr ""
+msgstr "Domyślne zachowanie dla zmienionych ustawień podczas zmiany profilu na inny: "
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:640
msgctxt "@option:discardOrKeep"
msgid "Always discard changed settings"
-msgstr ""
+msgstr "Zawsze odrzucaj wprowadzone zmiany"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:641
msgctxt "@option:discardOrKeep"
msgid "Always transfer changed settings to new profile"
-msgstr ""
+msgstr "Zawsze przenoś wprowadzone zmiany do nowego profilu"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:675
msgctxt "@label"
@@ -3173,7 +3177,7 @@ msgstr "Wyślij (anonimowe) informacje o drukowaniu"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:713
msgctxt "@action:button"
msgid "More information"
-msgstr ""
+msgstr "Więcej informacji"
#: /home/ruben/Projects/Cura/resources/qml/Preferences/GeneralPage.qml:731
msgctxt "@label"
@@ -3338,7 +3342,7 @@ msgstr "Dodaj drukarkę"
#: /home/ruben/Projects/Cura/resources/qml/JobSpecs.qml:84
msgctxt "@text Print job name"
msgid "Untitled"
-msgstr ""
+msgstr "Bez tytułu"
#: /home/ruben/Projects/Cura/resources/qml/AboutDialog.qml:15
msgctxt "@title:window"
@@ -3519,12 +3523,12 @@ msgstr "Skonfiguruj widoczność ustawień ..."
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:643
msgctxt "@action:inmenu"
msgid "Collapse All"
-msgstr ""
+msgstr "Schowaj wszystkie"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingView.qml:648
msgctxt "@action:inmenu"
msgid "Expand All"
-msgstr ""
+msgstr "Rozwiń wszystkie"
#: /home/ruben/Projects/Cura/resources/qml/Settings/SettingCategory.qml:249
msgctxt "@label"
@@ -3696,17 +3700,17 @@ msgstr "Przed drukowaniem podgrzej stół. W dalszym ciągu można dostosowywać
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:13
msgctxt "@label:category menu label"
msgid "Material"
-msgstr ""
+msgstr "Materiał"
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:37
msgctxt "@label:category menu label"
msgid "Favorites"
-msgstr ""
+msgstr "Ulubione"
#: /home/ruben/Projects/Cura/resources/qml/Menus/MaterialMenu.qml:61
msgctxt "@label:category menu label"
msgid "Generic"
-msgstr ""
+msgstr "Podstawowe"
#: /home/ruben/Projects/Cura/resources/qml/Menus/PrinterMenu.qml:25
msgctxt "@label:category menu label"
@@ -3780,12 +3784,12 @@ msgstr "Ekstruder"
#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/SyncButton.qml:16
msgctxt "@label:extruder label"
msgid "Yes"
-msgstr ""
+msgstr "Tak"
#: /home/ruben/Projects/Cura/resources/qml/Menus/ConfigurationMenu/SyncButton.qml:16
msgctxt "@label:extruder label"
msgid "No"
-msgstr ""
+msgstr "Nie"
#: /home/ruben/Projects/Cura/resources/qml/Menus/RecentFilesMenu.qml:13
msgctxt "@title:menu menubar:file"
@@ -3980,7 +3984,7 @@ msgstr "&Grupuj modele"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:294
msgctxt "@action:inmenu menubar:edit"
msgid "Ungroup Models"
-msgstr "Rozgrupuj modele "
+msgstr "Rozgrupuj modele"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:304
msgctxt "@action:inmenu menubar:edit"
@@ -4010,7 +4014,7 @@ msgstr "Przeładuj wszystkie modele"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:350
msgctxt "@action:inmenu menubar:edit"
msgid "Arrange All Models To All Build Plates"
-msgstr "Rozłóż Wszystkie Modele na Wszystkie Platformy Robocze."
+msgstr "Rozłóż Wszystkie Modele na Wszystkie Platformy Robocze"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:357
msgctxt "@action:inmenu menubar:edit"
@@ -4055,7 +4059,7 @@ msgstr "Pokaż folder konfiguracji"
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:423
msgctxt "@action:menu"
msgid "Browse packages..."
-msgstr ""
+msgstr "Przeglądaj pakiety..."
#: /home/ruben/Projects/Cura/resources/qml/Actions.qml:430
msgctxt "@action:inmenu menubar:view"
@@ -4146,17 +4150,17 @@ msgstr "&Plik"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:120
msgctxt "@title:menu menubar:file"
msgid "&Save..."
-msgstr ""
+msgstr "&Zapisz..."
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:141
msgctxt "@title:menu menubar:file"
msgid "&Export..."
-msgstr ""
+msgstr "&Eksportuj..."
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:151
msgctxt "@action:inmenu menubar:file"
msgid "Export Selection..."
-msgstr ""
+msgstr "Eksportuj Zaznaczenie..."
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:168
msgctxt "@title:menu menubar:toplevel"
@@ -4218,7 +4222,7 @@ msgstr "&Rozszerzenia"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:280
msgctxt "@title:menu menubar:toplevel"
msgid "&Toolbox"
-msgstr ""
+msgstr "&Narzędzia"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:287
msgctxt "@title:menu menubar:toplevel"
@@ -4233,7 +4237,7 @@ msgstr "P&omoc"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:341
msgctxt "@label"
msgid "This package will be installed after restarting."
-msgstr ""
+msgstr "Ten pakiet zostanie zainstalowany po ponownym uruchomieniu."
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:370
msgctxt "@action:button"
@@ -4258,18 +4262,18 @@ msgstr "Czy na pewno chcesz rozpocząć nowy projekt? Spowoduje to wyczyszczenie
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:715
msgctxt "@title:window"
msgid "Closing Cura"
-msgstr ""
+msgstr "Zamykanie Cura"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:716
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:728
msgctxt "@label"
msgid "Are you sure you want to exit Cura?"
-msgstr ""
+msgstr "Czy jesteś pewien, że chcesz zakończyć Cura?"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:861
msgctxt "@window:title"
msgid "Install Package"
-msgstr ""
+msgstr "Instaluj pakiety"
#: /home/ruben/Projects/Cura/resources/qml/Cura.qml:868
msgctxt "@title:window"
@@ -4446,7 +4450,7 @@ msgstr "Materiał"
#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:543
msgctxt "@label"
msgid "Use glue with this material combination"
-msgstr ""
+msgstr "Użyj kleju z tą kombinacją materiałów"
#: /home/ruben/Projects/Cura/resources/qml/SidebarHeader.qml:575
msgctxt "@label"
@@ -4476,7 +4480,7 @@ msgstr "Rozłóż na obecnej platformie roboczej"
#: MachineSettingsAction/plugin.json
msgctxt "description"
msgid "Provides a way to change machine settings (such as build volume, nozzle size, etc.)."
-msgstr ""
+msgstr "Zapewnia możliwość zmiany ustawień maszyny (takich jak objętość robocza, rozmiar dyszy itp.)."
#: MachineSettingsAction/plugin.json
msgctxt "name"
@@ -4486,12 +4490,12 @@ msgstr "Ustawienia Maszyny"
#: Toolbox/plugin.json
msgctxt "description"
msgid "Find, manage and install new Cura packages."
-msgstr ""
+msgstr "Znajdź, zarządzaj i instaluj nowe pakiety Cura."
#: Toolbox/plugin.json
msgctxt "name"
msgid "Toolbox"
-msgstr ""
+msgstr "Narzędzia"
#: XRayView/plugin.json
msgctxt "description"
@@ -4521,7 +4525,7 @@ msgstr "Zapisuje g-code do pliku."
#: GCodeWriter/plugin.json
msgctxt "name"
msgid "G-code Writer"
-msgstr "Pisarz G-code"
+msgstr "Zapisywacz G-code"
#: ModelChecker/plugin.json
msgctxt "description"
@@ -4576,7 +4580,7 @@ msgstr "Drukowanie USB"
#: UserAgreement/plugin.json
msgctxt "description"
msgid "Ask the user once if he/she agrees with our license."
-msgstr ""
+msgstr "Zapytaj użytkownika jednokrotnie, czy zgadza się z warunkami naszej licencji."
#: UserAgreement/plugin.json
msgctxt "name"
@@ -4586,12 +4590,12 @@ msgstr "ZgodaUżytkownika"
#: X3GWriter/plugin.json
msgctxt "description"
msgid "Allows saving the resulting slice as an X3G file, to support printers that read this format (Malyan, Makerbot and other Sailfish-based printers)."
-msgstr ""
+msgstr "Umożliwia zapisanie wyników cięcia jako plik X3G, aby wspierać drukarki obsługujące ten format (Malyan, Makerbot oraz inne oparte o oprogramowanie Sailfish)."
#: X3GWriter/plugin.json
msgctxt "name"
msgid "X3GWriter"
-msgstr ""
+msgstr "Zapisywacz X3G"
#: GCodeGzWriter/plugin.json
msgctxt "description"
@@ -4636,7 +4640,7 @@ msgstr "Wtyczka Urządzenia Wyjścia Dysku Zewn."
#: UM3NetworkPrinting/plugin.json
msgctxt "description"
msgid "Manages network connections to Ultimaker 3 printers."
-msgstr ""
+msgstr "Zarządza ustawieniami połączenia sieciowego z drukarkami Ultimaker 3."
#: UM3NetworkPrinting/plugin.json
msgctxt "name"
@@ -4756,12 +4760,12 @@ msgstr "Ulepszenie Wersji z 3.2 do 3.3"
#: VersionUpgrade/VersionUpgrade33to34/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 3.3 to Cura 3.4."
-msgstr ""
+msgstr "Ulepsza konfigurację z Cura 3.3 do Cura 3.4."
#: VersionUpgrade/VersionUpgrade33to34/plugin.json
msgctxt "name"
msgid "Version Upgrade 3.3 to 3.4"
-msgstr ""
+msgstr "Ulepszenie Wersji z 3.3 do 3.4"
#: VersionUpgrade/VersionUpgrade25to26/plugin.json
msgctxt "description"
@@ -4786,12 +4790,12 @@ msgstr "Ulepszenie Wersji 2.7 do 3.0"
#: VersionUpgrade/VersionUpgrade34to35/plugin.json
msgctxt "description"
msgid "Upgrades configurations from Cura 3.4 to Cura 3.5."
-msgstr ""
+msgstr "Ulepsza konfigurację z Cura 3.4 do Cura 3.5."
#: VersionUpgrade/VersionUpgrade34to35/plugin.json
msgctxt "name"
msgid "Version Upgrade 3.4 to 3.5"
-msgstr ""
+msgstr "Ulepszenie Wersji z 3.4 do 3.5"
#: VersionUpgrade/VersionUpgrade30to31/plugin.json
msgctxt "description"
@@ -4926,7 +4930,7 @@ msgstr "3MF Writer"
#: UltimakerMachineActions/plugin.json
msgctxt "description"
msgid "Provides machine actions for Ultimaker machines (such as bed leveling wizard, selecting upgrades, etc.)."
-msgstr ""
+msgstr "Zapewnia czynności maszyny dla urządzeń Ultimaker (na przykład kreator poziomowania stołu, wybór ulepszeń itp.)."
#: UltimakerMachineActions/plugin.json
msgctxt "name"
From 79cd9f332d0b4ae2b6c5931bc60dd3b4de1722ea Mon Sep 17 00:00:00 2001
From: drzejkopf <41212609+drzejkopf@users.noreply.github.com>
Date: Sun, 23 Sep 2018 15:28:14 +0200
Subject: [PATCH 079/390] Update fdmprinter.def.json.po
---
resources/i18n/pl_PL/fdmprinter.def.json.po | 127 ++++++++++----------
1 file changed, 66 insertions(+), 61 deletions(-)
diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po
index caff3d9438..53aa32009e 100644
--- a/resources/i18n/pl_PL/fdmprinter.def.json.po
+++ b/resources/i18n/pl_PL/fdmprinter.def.json.po
@@ -6,16 +6,17 @@
msgid ""
msgstr ""
"Project-Id-Version: Cura 3.5\n"
-"Report-Msgid-Bugs-To: r.dulek@ultimaker.com"
+"Report-Msgid-Bugs-To: r.dulek@ultimaker.com
"POT-Creation-Date: 2018-09-19 17:07+0000\n"
-"PO-Revision-Date: 2018-04-17 16:45+0200\n"
-"Last-Translator: 'Jaguś' Paweł Jagusiak and Andrzej 'anraf1001' Rafalski\n"
+"PO-Revision-Date: 2018-09-21 21:52+0200\n"
+"Last-Translator: 'Jaguś' Paweł Jagusiak, Andrzej 'anraf1001' Rafalski and Jakub 'drzejkopf' Świeciński\n"
"Language-Team: reprapy.pl\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.6\n"
+"X-Generator: Poedit 2.1.1\n"
+"POT-Creation-Date: \n"
#: fdmprinter.def.json
msgctxt "machine_settings label"
@@ -1073,12 +1074,12 @@ msgstr "Zygzak"
#: fdmprinter.def.json
msgctxt "connect_skin_polygons label"
msgid "Connect Top/Bottom Polygons"
-msgstr ""
+msgstr "Połącz Górne/Dolne Wieloboki"
#: fdmprinter.def.json
msgctxt "connect_skin_polygons description"
msgid "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality."
-msgstr ""
+msgstr "Łączy górne/dolne ścieżki powłoki, gdy są one prowadzone obok siebie. Przy wzorze koncentrycznym, załączenie tego ustawienia znacznie zredukuje czas ruchów jałowych, ale ze względu na to, że połączenie może nastąpić w połowie drogi ponad wypełnieniem, ta fukncja może pogorszyć jakość górnej powierzchni."
#: fdmprinter.def.json
msgctxt "skin_angles label"
@@ -1108,7 +1109,7 @@ msgstr "Optymalizuj Kolejność Drukowania Ścian"
#: fdmprinter.def.json
msgctxt "optimize_wall_printing_order description"
msgid "Optimize the order in which walls are printed so as to reduce the number of retractions and the distance travelled. Most parts will benefit from this being enabled but some may actually take longer so please compare the print time estimates with and without optimization. First layer is not optimized when choosing brim as build plate adhesion type."
-msgstr ""
+msgstr "Optymalizuje kolejność, w jakiej będą drukowane ścianki w celu zredukowania ilości retrakcji oraz dystansu ruchów jałowych. Większość części skorzysta na załączeniu tej funkcji, jednak w niektórych przypadkach czas druku może się wydłużyć, proszę więc o porównanie oszacowanego czasu z funkcją załączoną oraz wyłączoną. Pierwsza warstwa nie zostanie zoptymalizowana, jeżeli jako poprawa przyczepności stołu zostanie wybrany obrys."
#: fdmprinter.def.json
msgctxt "outer_inset_first label"
@@ -1163,22 +1164,22 @@ msgstr "Kompensuje przepływ dla części, których wewnętrzna ściana jest dru
#: fdmprinter.def.json
msgctxt "wall_min_flow label"
msgid "Minimum Wall Flow"
-msgstr ""
+msgstr "Minimalny Przepływ Dla Ścianek"
#: fdmprinter.def.json
msgctxt "wall_min_flow description"
msgid "Minimum allowed percentage flow for a wall line. The wall overlap compensation reduces a wall's flow when it lies close to an existing wall. Walls whose flow is less than this value will be replaced with a travel move. When using this setting, you must enable the wall overlap compensation and print the outer wall before inner walls."
-msgstr ""
+msgstr "Minimalny dopuszczalny przepływ procentowy dla linii ścianki. Kompensacja nakładania się ścianek redukuje przepływ, gdy dana ścianka znajduje się blisko wydrukowanej już ścianki. Ścianki, których przepływ powinien być mniejszy, niż ta wartość, będą zastąpione ruchami jałowymi. Aby używać tego ustawienia należy załączyć kompensację nakładających się ścianek oraz drukowanie ścianek zewnętrznych przed wewnętrznymi."
#: fdmprinter.def.json
msgctxt "wall_min_flow_retract label"
msgid "Prefer Retract"
-msgstr ""
+msgstr "Preferuj Retrakcję"
#: fdmprinter.def.json
msgctxt "wall_min_flow_retract description"
msgid "If enabled, retraction is used rather than combing for travel moves that replace walls whose flow is below the minimum flow threshold."
-msgstr ""
+msgstr "Gdy załączone, retrakcja jest używana zamiast kombinowanego ruchu jałowego, który zastępuje ściankę, której przepływ jest mniejszy od minimalnego."
#: fdmprinter.def.json
msgctxt "fill_perimeter_gaps label"
@@ -1478,7 +1479,7 @@ msgstr "Gęstość Wypełn."
#: fdmprinter.def.json
msgctxt "infill_sparse_density description"
msgid "Adjusts the density of infill of the print."
-msgstr "Dostosowuje gęstość wypełnienia wydruku"
+msgstr "Dostosowuje gęstość wypełnienia wydruku."
#: fdmprinter.def.json
msgctxt "infill_line_distance label"
@@ -1573,12 +1574,12 @@ msgstr "Łączy końce gdzie wzór wypełnienia spotyka się z wewn. ścianą u
#: fdmprinter.def.json
msgctxt "connect_infill_polygons label"
msgid "Connect Infill Polygons"
-msgstr ""
+msgstr "Połącz Wieloboki Wypełnienia"
#: fdmprinter.def.json
msgctxt "connect_infill_polygons description"
msgid "Connect infill paths where they run next to each other. For infill patterns which consist of several closed polygons, enabling this setting greatly reduces the travel time."
-msgstr ""
+msgstr "Łączy ścieżki wypełnienia, gdy są one prowadzone obok siebie. Dla wzorów wypełnienia zawierających kilka zamkniętych wieloboków, załączenie tego ustawienia znacznie skróci czas ruchów jałowych."
#: fdmprinter.def.json
msgctxt "infill_angles label"
@@ -1613,17 +1614,17 @@ msgstr "Wzór wypełnienia jest przesunięty o tę odległość wzdłuż osi Y."
#: fdmprinter.def.json
msgctxt "infill_multiplier label"
msgid "Infill Line Multiplier"
-msgstr ""
+msgstr "Mnożnik Linii Wypełnienia"
#: fdmprinter.def.json
msgctxt "infill_multiplier description"
msgid "Convert each infill line to this many lines. The extra lines do not cross over each other, but avoid each other. This makes the infill stiffer, but increases print time and material usage."
-msgstr ""
+msgstr "Zmienia pojedynczą linię wypełnienia na zadaną ilość linii. Dodatkowe linie wypełnienia nie będą nad sobą przechodzić, ale będą się unikać. Sprawi to, że wypełnienie będzie sztywniejsze, ale czas druku oraz zużycie materiału zwiększą się."
#: fdmprinter.def.json
msgctxt "infill_wall_line_count label"
msgid "Extra Infill Wall Count"
-msgstr ""
+msgstr "Ilość Dodatkowych Ścianek Wypełnienia"
#: fdmprinter.def.json
msgctxt "infill_wall_line_count description"
@@ -1631,6 +1632,8 @@ msgid ""
"Add extra walls around the infill area. Such walls can make top/bottom skin lines sag down less which means you need less top/bottom skin layers for the same quality at the cost of some extra material.\n"
"This feature can combine with the Connect Infill Polygons to connect all the infill into a single extrusion path without the need for travels or retractions if configured right."
msgstr ""
+"Dodaje ścianki naokoło wypełnienia. Takie ścianki mogą spowodować, że linie górnej/dolnej powłoki będą zwisać mniej, co pozwoli na zastosowanie mniejszej ilości górnych/dolnych warstw przy zachowaniu takiej samej jakości kosztem dodatkowego materiału.\n"
+"Ta funkcja może być używana razem z funkcją \"Połącz Wieloboki Wypełnienia\", aby połączyć całe wypełnienie w pojedynczą ścieżkę, co przy poprawnej konfiguracji wyelinimuje potrzebę wykonywania ruchów jałowych lub retrakcji."
#: fdmprinter.def.json
msgctxt "sub_div_rad_add label"
@@ -1745,22 +1748,22 @@ msgstr "Nie generuj obszarów wypełnienia mniejszych niż to (zamiast tego uży
#: fdmprinter.def.json
msgctxt "infill_support_enabled label"
msgid "Infill Support"
-msgstr ""
+msgstr "Wypełnienie Podporowe"
#: fdmprinter.def.json
msgctxt "infill_support_enabled description"
msgid "Print infill structures only where tops of the model should be supported. Enabling this reduces print time and material usage, but leads to ununiform object strength."
-msgstr ""
+msgstr "Drukuj wypełnienie tylko w miejscach, w których górna część modelu powinna być podparta strukturą wewnętrzną. Załączenie tej funkcji skutkuje redukcją czasu druku, ale prowadzi do niejednolitej wytrzymałości obiektu."
#: fdmprinter.def.json
msgctxt "infill_support_angle label"
msgid "Infill Overhang Angle"
-msgstr ""
+msgstr "Kąt Zwisu dla Wypełnienia"
#: fdmprinter.def.json
msgctxt "infill_support_angle description"
msgid "The minimum angle of internal overhangs for which infill is added. At a value of 0° objects are totally filled with infill, 90° will not provide any infill."
-msgstr ""
+msgstr "Minimalny kąt zwisu wewnętrznego, dla którego zostanie dodane wypełnienie. Przy wartości 0° obiekty zostaną wypełnione całkowicie, natomiast przy 90° wypełnienie nie zostanie wygenerowane."
#: fdmprinter.def.json
msgctxt "skin_preshrink label"
@@ -2095,12 +2098,12 @@ msgstr "Okno, w którym wymuszona jest maksymalna liczba retrakcji. Wartość ta
#: fdmprinter.def.json
msgctxt "limit_support_retractions label"
msgid "Limit Support Retractions"
-msgstr ""
+msgstr "Ogranicz Retrakcje Pomiędzy Podporami"
#: fdmprinter.def.json
msgctxt "limit_support_retractions description"
msgid "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excesive stringing within the support structure."
-msgstr ""
+msgstr "Unikaj retrakcji podczas poruszania się od podpory do podpory w linii prostej. Załączenie tej funkcji spowoduje skrócenie czasu druku, lecz może prowadzić do nadmiernego nitkowania wewnątrz struktur podporowych."
#: fdmprinter.def.json
msgctxt "material_standby_temperature label"
@@ -2210,7 +2213,7 @@ msgstr "Prędkość Wewn. Ściany"
#: fdmprinter.def.json
msgctxt "speed_wall_x description"
msgid "The speed at which all inner walls are printed. Printing the inner wall faster than the outer wall will reduce printing time. It works well to set this in between the outer wall speed and the infill speed."
-msgstr "Szybkość, z jaką drukowane są ściany wewnętrzne. Drukowanie wewnętrznej ściany szybciej niż zewn. pozwoli skrócić czas druku. Zaleca się, aby ustawić to pomiędzy prędkością zewn. ściany, a prędkością wypełnienia"
+msgstr "Szybkość, z jaką drukowane są ściany wewnętrzne. Drukowanie wewnętrznej ściany szybciej niż zewn. pozwoli skrócić czas druku. Zaleca się, aby ustawić to pomiędzy prędkością zewn. ściany, a prędkością wypełnienia."
#: fdmprinter.def.json
msgctxt "speed_roofing label"
@@ -2781,6 +2784,8 @@ msgstr "Tryb Kombinowania"
msgctxt "retraction_combing description"
msgid "Combing keeps the nozzle within already printed areas when traveling. This results in slightly longer travel moves but reduces the need for retractions. If combing is off, the material will retract and the nozzle moves in a straight line to the next point. It is also possible to avoid combing over top/bottom skin areas and also to only comb within the infill. Note that the 'Within Infill' option behaves exactly like the 'Not in Skin' option in earlier Cura releases."
msgstr ""
+"Kombinowanie utrzymuje dyszę w już zadrukowanych obszarach podczas ruchu jałowego. Powoduje to nieco dłuższe ruchy jałowe, ale zmniejsza potrzebę retrakcji. Jeśli kombinowanie jest wyłączone, materiał się cofa, a dysza przemieszcza się w linii prostej do następnego punktu. Można też unikać kombinowania na górnych/dolnych obszarach powłoki, a także kombinować tylko wewnątrz wypełnienia. Opcja \"Wewnątrz Wypełnienia\" wymusza takie samo zachowanie, jak opcja \"Nie w Powłoce\" we wcześniejszych "
+"wydaniach Cura."
#: fdmprinter.def.json
msgctxt "retraction_combing option off"
@@ -2795,22 +2800,22 @@ msgstr "Wszędzie"
#: fdmprinter.def.json
msgctxt "retraction_combing option noskin"
msgid "Not in Skin"
-msgstr ""
+msgstr "Nie w Powłoce"
#: fdmprinter.def.json
msgctxt "retraction_combing option infill"
msgid "Within Infill"
-msgstr ""
+msgstr "Wewnątrz Wypełnienia"
#: fdmprinter.def.json
msgctxt "retraction_combing_max_distance label"
msgid "Max Comb Distance With No Retract"
-msgstr ""
+msgstr "Max. Dystans Kombinowania Bez Retrakcji"
#: fdmprinter.def.json
msgctxt "retraction_combing_max_distance description"
msgid "When non-zero, combing travel moves that are longer than this distance will use retraction."
-msgstr ""
+msgstr "Przy wartości niezerowej, kombinowane ruchy jałowe o dystansie większym niż zadany bedą używały retrakcji."
#: fdmprinter.def.json
msgctxt "travel_retract_before_outer_wall label"
@@ -2835,12 +2840,12 @@ msgstr "Dysza unika już wydrukowanych części podczas ruchu jałowego. Ta opcj
#: fdmprinter.def.json
msgctxt "travel_avoid_supports label"
msgid "Avoid Supports When Traveling"
-msgstr ""
+msgstr "Unikaj Podpór Podczas Ruchu Jałowego"
#: fdmprinter.def.json
msgctxt "travel_avoid_supports description"
msgid "The nozzle avoids already printed supports when traveling. This option is only available when combing is enabled."
-msgstr ""
+msgstr "Dysza będzie omijała już wydrukowane podpory podczas ruchu jałowego. Ta opcja jest dostępna jedynie, gdy kombinowanie jest włączone."
#: fdmprinter.def.json
msgctxt "travel_avoid_distance label"
@@ -3195,12 +3200,12 @@ msgstr "Krzyż"
#: fdmprinter.def.json
msgctxt "support_wall_count label"
msgid "Support Wall Line Count"
-msgstr ""
+msgstr "Ilość Ścianek Podpory"
#: fdmprinter.def.json
msgctxt "support_wall_count description"
msgid "The number of walls with which to surround support infill. Adding a wall can make support print more reliably and can support overhangs better, but increases print time and material used."
-msgstr ""
+msgstr "Liczba ścianek otaczających wypełnienie podpory. Dodanie ścianki może sprawić, że podpory będą drukowane solidniej i będą mogły lepiej podpierać nawisy, ale wydłuży to czas druku i zwiększy ilość użytego materiału."
#: fdmprinter.def.json
msgctxt "zig_zaggify_support label"
@@ -3245,22 +3250,22 @@ msgstr "Odległość między drukowanymi liniami struktury podpory. To ustawieni
#: fdmprinter.def.json
msgctxt "support_initial_layer_line_distance label"
msgid "Initial Layer Support Line Distance"
-msgstr ""
+msgstr "Odstęp Między Liniami Podpory w Pocz. Warstwie"
#: fdmprinter.def.json
msgctxt "support_initial_layer_line_distance description"
msgid "Distance between the printed initial layer support structure lines. This setting is calculated by the support density."
-msgstr ""
+msgstr "Odległość między drukowanymi liniami struktury podpory w początkowej warstwie. To ustawienie jest obliczane na podstawie gęstości podpory."
#: fdmprinter.def.json
msgctxt "support_infill_angle label"
msgid "Support Infill Line Direction"
-msgstr ""
+msgstr "Kierunek Linii Wypełnienia Podpory"
#: fdmprinter.def.json
msgctxt "support_infill_angle description"
msgid "Orientation of the infill pattern for supports. The support infill pattern is rotated in the horizontal plane."
-msgstr ""
+msgstr "Orientacja wzoru wypełnienia dla podpór. Wzór podpory jest obracany w płaszczyźnie poziomej."
#: fdmprinter.def.json
msgctxt "support_z_distance label"
@@ -3630,22 +3635,22 @@ msgstr "Zygzak"
#: fdmprinter.def.json
msgctxt "support_fan_enable label"
msgid "Fan Speed Override"
-msgstr ""
+msgstr "Nadpisanie Prędkości Wentylatora"
#: fdmprinter.def.json
msgctxt "support_fan_enable description"
msgid "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support."
-msgstr ""
+msgstr "Gdy załączone, prędkość wentylatora chłodzącego wydruk jest zmieniana dla obszarów leżących bezpośrednio ponad podporami,"
#: fdmprinter.def.json
msgctxt "support_supported_skin_fan_speed label"
msgid "Supported Skin Fan Speed"
-msgstr ""
+msgstr "Prędkość Wentylatora Podpartej Powłoki"
#: fdmprinter.def.json
msgctxt "support_supported_skin_fan_speed description"
msgid "Percentage fan speed to use when printing the skin regions immediately above the support. Using a high fan speed can make the support easier to remove."
-msgstr ""
+msgstr "Procentowa prędkść wentylatora, która zostanie użyta podczas drukowania obszarów powłoki leżących bezpośrednio nad podstawami. Użycie wysokiej prędkości może ułatwić usuwanie podpór."
#: fdmprinter.def.json
msgctxt "support_use_towers label"
@@ -3974,7 +3979,7 @@ msgstr "Szerokość linii na podstawowej warstwie tratwy. Powinny być to grube
#: fdmprinter.def.json
msgctxt "raft_base_line_spacing label"
msgid "Raft Base Line Spacing"
-msgstr ""
+msgstr "Rozstaw Linii Podstawy Tratwy"
#: fdmprinter.def.json
msgctxt "raft_base_line_spacing description"
@@ -4069,7 +4074,7 @@ msgstr "Zryw Tratwy"
#: fdmprinter.def.json
msgctxt "raft_jerk description"
msgid "The jerk with which the raft is printed."
-msgstr "Zryw, z jakim drukowana jest tratwa"
+msgstr "Zryw, z jakim drukowana jest tratwa."
#: fdmprinter.def.json
msgctxt "raft_surface_jerk label"
@@ -4719,12 +4724,12 @@ msgstr "Dane łączące przepływ materiału (w mm3 na sekundę) z temperaturą
#: fdmprinter.def.json
msgctxt "minimum_polygon_circumference label"
msgid "Minimum Polygon Circumference"
-msgstr ""
+msgstr "Minimalny Obwód Wieloboku"
#: fdmprinter.def.json
msgctxt "minimum_polygon_circumference description"
msgid "Polygons in sliced layers that have a circumference smaller than this amount will be filtered out. Lower values lead to higher resolution mesh at the cost of slicing time. It is meant mostly for high resolution SLA printers and very tiny 3D models with a lot of details."
-msgstr ""
+msgstr "Wieloboki w pociętych warstwach mające obwód mniejszy, niż podany, będą odfiltrowane. Mniejsze wartości dają wyższą rozdzielczość siatki kosztem czasu cięcia. Funkcja ta jest przeznaczona głównie dla drukarek wysokiej rozdzielczości SLA oraz bardzo małych modeli z dużą ilością detali."
#: fdmprinter.def.json
msgctxt "meshfix_maximum_resolution label"
@@ -4739,12 +4744,12 @@ msgstr "Minimalny rozmiar linii segmentu po pocięciu. Jeżeli to zwiększysz, s
#: fdmprinter.def.json
msgctxt "meshfix_maximum_travel_resolution label"
msgid "Maximum Travel Resolution"
-msgstr ""
+msgstr "Maksymalna Rozdzielczość Ruchów Jałowych"
#: fdmprinter.def.json
msgctxt "meshfix_maximum_travel_resolution description"
msgid "The minimum size of a travel line segment after slicing. If you increase this, the travel moves will have less smooth corners. This may allow the printer to keep up with the speed it has to process g-code, but it may cause model avoidance to become less accurate."
-msgstr ""
+msgstr "Minimalny rozmiar segmentu linii ruchu jałowego po pocięciu. Jeżeli ta wartość zostanie zwiększona, ruch jałowy będzie miał mniej gładkie zakręty. Może to spowodować przyspieszenie prędkości przetwarzania g-code, ale unikanie modelu może być mniej dokładne."
#: fdmprinter.def.json
msgctxt "support_skip_some_zags label"
@@ -4909,22 +4914,22 @@ msgstr "Rozmiar kieszeni na czterostronnych skrzyżowaniach we wzorze krzyż 3D
#: fdmprinter.def.json
msgctxt "cross_infill_density_image label"
msgid "Cross Infill Density Image"
-msgstr ""
+msgstr "Gęstośc Wypełnienia Krzyżowego Według Obrazu"
#: fdmprinter.def.json
msgctxt "cross_infill_density_image description"
msgid "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the infill of the print."
-msgstr ""
+msgstr "Lokalizacja pliku obrazu, którego jasność będzie determinowała minimalną gęstość wypełnienia wydruku w danym punkcie."
#: fdmprinter.def.json
msgctxt "cross_support_density_image label"
msgid "Cross Fill Density Image for Support"
-msgstr ""
+msgstr "Gęstości Wypełnienia Krzyżowego Podstaw Według Obrazu"
#: fdmprinter.def.json
msgctxt "cross_support_density_image description"
msgid "The file location of an image of which the brightness values determine the minimal density at the corresponding location in the support."
-msgstr ""
+msgstr "Lokalizacja pliku obrazu, którego jasność będzie determinowała minimalną gęstość wypełnienia podstawy w danym punkcie."
#: fdmprinter.def.json
msgctxt "spaghetti_infill_enabled label"
@@ -5174,7 +5179,7 @@ msgstr "DD Przepływ"
#: fdmprinter.def.json
msgctxt "wireframe_flow description"
msgid "Flow compensation: the amount of material extruded is multiplied by this value. Only applies to Wire Printing."
-msgstr "Kompensacja przepływu: ilość wytłaczanego materiału jest mnożona przez tę wartość. Odnosi się tylko do Drukowania Drutu. "
+msgstr "Kompensacja przepływu: ilość wytłaczanego materiału jest mnożona przez tę wartość. Odnosi się tylko do Drukowania Drutu."
#: fdmprinter.def.json
msgctxt "wireframe_flow_connection label"
@@ -5258,7 +5263,7 @@ msgstr "DD Spadek"
#: fdmprinter.def.json
msgctxt "wireframe_fall_down description"
msgid "Distance with which the material falls down after an upward extrusion. This distance is compensated for. Only applies to Wire Printing."
-msgstr "Odległość o jaką spada materiału przez wytłaczanie w górę. Długość ta jest kompensowana. Odnosi się tylko do Drukowania Drutu"
+msgstr "Odległość o jaką spada materiału przez wytłaczanie w górę. Długość ta jest kompensowana. Odnosi się tylko do Drukowania Drutu."
#: fdmprinter.def.json
msgctxt "wireframe_drag_along label"
@@ -5363,7 +5368,7 @@ msgstr "Maks. zmiana zmiennych warstw"
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_variation description"
msgid "The maximum allowed height different from the base layer height."
-msgstr ""
+msgstr "Maksymalna dozwolona różnica wysokości względem bazowej wysokości warstwy."
#: fdmprinter.def.json
msgctxt "adaptive_layer_height_variation_step label"
@@ -5388,22 +5393,22 @@ msgstr "Opóźnienie w wyborze, czy użyć mniejszej warstwy, czy nie. Ta liczba
#: fdmprinter.def.json
msgctxt "wall_overhang_angle label"
msgid "Overhanging Wall Angle"
-msgstr ""
+msgstr "Kąt Nawisającej Ścianki"
#: fdmprinter.def.json
msgctxt "wall_overhang_angle description"
msgid "Walls that overhang more than this angle will be printed using overhanging wall settings. When the value is 90, no walls will be treated as overhanging."
-msgstr ""
+msgstr "Ścianka o większym kącie nawisu niż podany będzie drukowana z użyciem ustawień nawisającej ścianki. Przy wartości 90°, żadna ścianka nie będzie traktowana jako ścianka nawisająca."
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor label"
msgid "Overhanging Wall Speed"
-msgstr ""
+msgstr "Prędkość Ścianki Nawisającej"
#: fdmprinter.def.json
msgctxt "wall_overhang_speed_factor description"
msgid "Overhanging walls will be printed at this percentage of their normal print speed."
-msgstr ""
+msgstr "Nawisające ścianki będą drukowane z taką procentową wartością względem normalnej prędkości druku."
#: fdmprinter.def.json
msgctxt "bridge_settings_enabled label"
@@ -5608,7 +5613,7 @@ msgstr "Ustawienia, które są używane tylko wtedy, gdy CuraEngine nie jest wyw
#: fdmprinter.def.json
msgctxt "center_object label"
msgid "Center Object"
-msgstr ""
+msgstr "Wyśrodkuj obiekt"
#: fdmprinter.def.json
msgctxt "center_object description"
@@ -5618,7 +5623,7 @@ msgstr "Czy wyśrodkować obiekt na środku stołu (0,0), zamiast używać ukła
#: fdmprinter.def.json
msgctxt "mesh_position_x label"
msgid "Mesh Position X"
-msgstr ""
+msgstr "Pozycja Siatki w X"
#: fdmprinter.def.json
msgctxt "mesh_position_x description"
@@ -5628,7 +5633,7 @@ msgstr "Przesunięcie zastosowane dla obiektu w kierunku X."
#: fdmprinter.def.json
msgctxt "mesh_position_y label"
msgid "Mesh Position Y"
-msgstr ""
+msgstr "Pozycja Siatki w Y"
#: fdmprinter.def.json
msgctxt "mesh_position_y description"
@@ -5638,7 +5643,7 @@ msgstr "Przesunięcie zastosowane dla obiektu w kierunku Y."
#: fdmprinter.def.json
msgctxt "mesh_position_z label"
msgid "Mesh Position Z"
-msgstr ""
+msgstr "Pozycja Siatki w Z"
#: fdmprinter.def.json
msgctxt "mesh_position_z description"
From c46e0e7556acb6787090cee739960c2b8ed5b581 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 24 Sep 2018 11:59:02 +0200
Subject: [PATCH 080/390] Only print message about excluded materials if there
are any
Otherwise the message is very strange (with double spaces and such) and unnecessary.
---
cura/Machines/MaterialManager.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index b7f3978db8..0ca9047620 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -352,7 +352,8 @@ class MaterialManager(QObject):
if material_id not in material_id_metadata_dict:
material_id_metadata_dict[material_id] = node
- Logger.log("d", "Exclude materials {excluded_materials} for machine {machine_definition_id}".format(excluded_materials = ", ".join(excluded_materials), machine_definition_id = machine_definition_id))
+ if excluded_materials:
+ Logger.log("d", "Exclude materials {excluded_materials} for machine {machine_definition_id}".format(excluded_materials = ", ".join(excluded_materials), machine_definition_id = machine_definition_id))
return material_id_metadata_dict
From 1e5177a44f1258d45c4ed188b9114e7c2bdf5e92 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 24 Sep 2018 17:04:20 +0200
Subject: [PATCH 081/390] Added unit tests for authorization service
CURA-5744
---
cura/OAuth2/AuthorizationService.py | 6 +-
tests/TestOAuth2.py | 90 +++++++++++++++++++++++++++++
2 files changed, 93 insertions(+), 3 deletions(-)
create mode 100644 tests/TestOAuth2.py
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 868dbe8034..0f57621a47 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -93,7 +93,7 @@ class AuthorizationService:
Refresh the access token when it expired.
"""
if self._auth_data is None or self._auth_data.refresh_token is None:
- Logger.log("w", "Unable to refresh acces token, since there is no refresh token.")
+ Logger.log("w", "Unable to refresh access token, since there is no refresh token.")
return
self._storeAuthData(self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token))
self.onAuthStateChanged.emit(logged_in=True)
@@ -148,8 +148,8 @@ class AuthorizationService:
if preferences_data:
self._auth_data = AuthenticationResponse(**preferences_data)
self.onAuthStateChanged.emit(logged_in=True)
- except ValueError as err:
- Logger.log("w", "Could not load auth data from preferences: %s", err)
+ except ValueError:
+ Logger.logException("w", "Could not load auth data from preferences")
def _storeAuthData(self, auth_data: Optional[AuthenticationResponse] = None) -> None:
"""Store authentication data in preferences and locally."""
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
new file mode 100644
index 0000000000..10578eaeb0
--- /dev/null
+++ b/tests/TestOAuth2.py
@@ -0,0 +1,90 @@
+from unittest.mock import MagicMock, patch
+
+from UM.Preferences import Preferences
+from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+from cura.OAuth2.AuthorizationService import AuthorizationService
+from cura.OAuth2.Models import OAuth2Settings, AuthenticationResponse, UserProfile
+
+CALLBACK_PORT = 32118
+OAUTH_ROOT = "https://account.ultimaker.com"
+CLOUD_API_ROOT = "https://api.ultimaker.com"
+
+OAUTH_SETTINGS = OAuth2Settings(
+ OAUTH_SERVER_URL= OAUTH_ROOT,
+ CALLBACK_PORT=CALLBACK_PORT,
+ CALLBACK_URL="http://localhost:{}/callback".format(CALLBACK_PORT),
+ CLIENT_ID="",
+ CLIENT_SCOPES="",
+ AUTH_DATA_PREFERENCE_KEY="test/auth_data",
+ AUTH_SUCCESS_REDIRECT="{}/auth-success".format(CLOUD_API_ROOT),
+ AUTH_FAILED_REDIRECT="{}/auth-error".format(CLOUD_API_ROOT)
+ )
+
+FAILED_AUTH_RESPONSE = AuthenticationResponse(success = False, err_message = "FAILURE!")
+
+SUCCESFULL_AUTH_RESPONSE = AuthenticationResponse(access_token = "beep", refresh_token = "beep?")
+
+MALFORMED_AUTH_RESPONSE = AuthenticationResponse()
+
+
+def test_cleanAuthService():
+ # Ensure that when setting up an AuthorizationService, no data is set.
+ authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
+ assert authorization_service.getUserProfile() is None
+ assert authorization_service.getAccessToken() is None
+
+
+def test_failedLogin():
+ authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
+ authorization_service.onAuthenticationError.emit = MagicMock()
+ authorization_service.onAuthStateChanged.emit = MagicMock()
+
+ # Let the service think there was a failed response
+ authorization_service._onAuthStateChanged(FAILED_AUTH_RESPONSE)
+
+ # Check that the error signal was triggered
+ assert authorization_service.onAuthenticationError.emit.call_count == 1
+
+ # Since nothing changed, this should still be 0.
+ assert authorization_service.onAuthStateChanged.emit.call_count == 0
+
+ # Validate that there is no user profile or token
+ assert authorization_service.getUserProfile() is None
+ assert authorization_service.getAccessToken() is None
+
+
+def test_loginAndLogout():
+ preferences = Preferences()
+ authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ authorization_service.onAuthenticationError.emit = MagicMock()
+ authorization_service.onAuthStateChanged.emit = MagicMock()
+
+ # Let the service think there was a succesfull response
+ with patch.object(AuthorizationHelpers, "parseJWT", return_value=UserProfile()):
+ authorization_service._onAuthStateChanged(SUCCESFULL_AUTH_RESPONSE)
+
+ # Ensure that the error signal was not triggered
+ assert authorization_service.onAuthenticationError.emit.call_count == 0
+
+ # Since we said that it went right this time, validate that we got a signal.
+ assert authorization_service.onAuthStateChanged.emit.call_count == 1
+ assert authorization_service.getUserProfile() is not None
+ assert authorization_service.getAccessToken() == "beep"
+
+ # Check that we stored the authentication data, so next time the user won't have to log in again.
+ assert preferences.getValue("test/auth_data") is not None
+
+ # We're logged in now, also check if logging out works
+ authorization_service.deleteAuthData()
+ assert authorization_service.onAuthStateChanged.emit.call_count == 2
+ assert authorization_service.getUserProfile() is None
+
+ # Ensure the data is gone after we logged out.
+ assert preferences.getValue("test/auth_data") == "{}"
+
+
+def test_wrongServerResponses():
+ authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
+ with patch.object(AuthorizationHelpers, "parseJWT", return_value=UserProfile()):
+ authorization_service._onAuthStateChanged(MALFORMED_AUTH_RESPONSE)
+ assert authorization_service.getUserProfile() is None
\ No newline at end of file
From fe85c020b1bed640277df95160d3e77ef2a0e614 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 24 Sep 2018 17:12:45 +0200
Subject: [PATCH 082/390] Fixed incorrect OAuth2 settings
CURA-5744
---
cura/API/Account.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 7ccd995be3..19ee0123d7 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -36,11 +36,11 @@ class Account(QObject):
OAUTH_SERVER_URL= self._oauth_root,
CALLBACK_PORT=self._callback_port,
CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
- CLIENT_ID="um---------------ultimaker_cura_drive_plugin",
- CLIENT_SCOPES="user.read drive.backups.read drive.backups.write",
- AUTH_DATA_PREFERENCE_KEY="cura_drive/auth_data",
- AUTH_SUCCESS_REDIRECT="{}/cura-drive/v1/auth-success".format(self._cloud_api_root),
- AUTH_FAILED_REDIRECT="{}/cura-drive/v1/auth-error".format(self._cloud_api_root)
+ CLIENT_ID="um---------------ultimaker_cura",
+ CLIENT_SCOPES="user.read drive.backups.read drive.backups.write.client.package.download",
+ AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
+ AUTH_SUCCESS_REDIRECT="{}/auth-success".format(self._cloud_api_root),
+ AUTH_FAILED_REDIRECT="{}//auth-error".format(self._cloud_api_root)
)
self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
From 7360313ff7555253fdf01390d582574ed745bffd Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 24 Sep 2018 17:26:08 +0200
Subject: [PATCH 083/390] Add LocalAuthServer test
This is to ensure that once we try to login, it actually attempts to start the local server
CURA-5744
---
tests/TestOAuth2.py | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 10578eaeb0..708dd2d41b 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -1,8 +1,10 @@
+import webbrowser
from unittest.mock import MagicMock, patch
from UM.Preferences import Preferences
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
from cura.OAuth2.AuthorizationService import AuthorizationService
+from cura.OAuth2.LocalAuthorizationServer import LocalAuthorizationServer
from cura.OAuth2.Models import OAuth2Settings, AuthenticationResponse, UserProfile
CALLBACK_PORT = 32118
@@ -53,6 +55,24 @@ def test_failedLogin():
assert authorization_service.getAccessToken() is None
+def test_localAuthServer():
+ preferences = Preferences()
+ authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ with patch.object(webbrowser, "open_new") as webrowser_open:
+ with patch.object(LocalAuthorizationServer, "start") as start_auth_server:
+ with patch.object(LocalAuthorizationServer, "stop") as stop_auth_server:
+ authorization_service.startAuthorizationFlow()
+ assert webrowser_open.call_count == 1
+
+ # Ensure that the Authorization service tried to start the server.
+ assert start_auth_server.call_count == 1
+ assert stop_auth_server.call_count == 0
+ authorization_service._onAuthStateChanged(FAILED_AUTH_RESPONSE)
+
+ # Ensure that it stopped the server.
+ assert stop_auth_server.call_count == 1
+
+
def test_loginAndLogout():
preferences = Preferences()
authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
From f16a9c62b52723c4974d6d333f3c293aebd9ce78 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 24 Sep 2018 17:28:19 +0200
Subject: [PATCH 084/390] Fix typo
CL-5744
---
cura/API/Account.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 19ee0123d7..cb80131425 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -37,7 +37,7 @@ class Account(QObject):
CALLBACK_PORT=self._callback_port,
CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
CLIENT_ID="um---------------ultimaker_cura",
- CLIENT_SCOPES="user.read drive.backups.read drive.backups.write.client.package.download",
+ CLIENT_SCOPES="user.read drive.backups.read drive.backups.write client.package.download",
AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
AUTH_SUCCESS_REDIRECT="{}/auth-success".format(self._cloud_api_root),
AUTH_FAILED_REDIRECT="{}//auth-error".format(self._cloud_api_root)
From b48adf5b3e4fd68f3329105d17a668021738df9f Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 24 Sep 2018 17:37:06 +0200
Subject: [PATCH 085/390] Typing fixes
CURA-5744
---
cura/API/Account.py | 4 ++--
cura/OAuth2/AuthorizationRequestHandler.py | 6 +++---
cura/OAuth2/LocalAuthorizationServer.py | 3 +--
tests/TestOAuth2.py | 10 +++++-----
4 files changed, 11 insertions(+), 12 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index cb80131425..6bb5b4e50d 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -1,6 +1,6 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Tuple, Optional, Dict
+from typing import Optional, Dict
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty
@@ -48,7 +48,7 @@ class Account(QObject):
self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
- self._error_message = None
+ self._error_message = None # type: Optional[Message]
self._logged_in = False
@pyqtProperty(bool, notify=loginStateChanged)
diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py
index 0558db784f..3b5b0c34d8 100644
--- a/cura/OAuth2/AuthorizationRequestHandler.py
+++ b/cura/OAuth2/AuthorizationRequestHandler.py
@@ -5,11 +5,11 @@ from typing import Optional, Callable, Tuple, Dict, Any, List, TYPE_CHECKING
from http.server import BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse
-from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
from cura.OAuth2.Models import AuthenticationResponse, ResponseData, HTTP_STATUS
if TYPE_CHECKING:
from cura.OAuth2.Models import ResponseStatus
+ from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
class AuthorizationRequestHandler(BaseHTTPRequestHandler):
@@ -22,7 +22,7 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
super().__init__(request, client_address, server)
# These values will be injected by the HTTPServer that this handler belongs to.
- self.authorization_helpers = None # type: Optional[AuthorizationHelpers]
+ self.authorization_helpers = None # type: Optional["AuthorizationHelpers"]
self.authorization_callback = None # type: Optional[Callable[[AuthenticationResponse], None]]
self.verification_code = None # type: Optional[str]
@@ -52,7 +52,7 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
# This will cause the server to shut down, so we do it at the very end of the request handling.
self.authorization_callback(token_response)
- def _handleCallback(self, query: Dict[Any, List]) -> Tuple["ResponseData", Optional["AuthenticationResponse"]]:
+ def _handleCallback(self, query: Dict[Any, List]) -> Tuple[ResponseData, Optional[AuthenticationResponse]]:
"""
Handler for the callback URL redirect.
:param query: Dict containing the HTTP query parameters.
diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py
index d1d07b5c91..488a33941d 100644
--- a/cura/OAuth2/LocalAuthorizationServer.py
+++ b/cura/OAuth2/LocalAuthorizationServer.py
@@ -5,13 +5,12 @@ from typing import Optional, Callable, Any, TYPE_CHECKING
from UM.Logger import Logger
-from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
from cura.OAuth2.AuthorizationRequestServer import AuthorizationRequestServer
from cura.OAuth2.AuthorizationRequestHandler import AuthorizationRequestHandler
if TYPE_CHECKING:
from cura.OAuth2.Models import AuthenticationResponse
-
+ from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
class LocalAuthorizationServer:
def __init__(self, auth_helpers: "AuthorizationHelpers",
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 708dd2d41b..7deb712aea 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -29,14 +29,14 @@ SUCCESFULL_AUTH_RESPONSE = AuthenticationResponse(access_token = "beep", refresh
MALFORMED_AUTH_RESPONSE = AuthenticationResponse()
-def test_cleanAuthService():
+def test_cleanAuthService() -> None:
# Ensure that when setting up an AuthorizationService, no data is set.
authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
assert authorization_service.getUserProfile() is None
assert authorization_service.getAccessToken() is None
-def test_failedLogin():
+def test_failedLogin() -> None:
authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
authorization_service.onAuthenticationError.emit = MagicMock()
authorization_service.onAuthStateChanged.emit = MagicMock()
@@ -55,7 +55,7 @@ def test_failedLogin():
assert authorization_service.getAccessToken() is None
-def test_localAuthServer():
+def test_localAuthServer() -> None:
preferences = Preferences()
authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
with patch.object(webbrowser, "open_new") as webrowser_open:
@@ -73,7 +73,7 @@ def test_localAuthServer():
assert stop_auth_server.call_count == 1
-def test_loginAndLogout():
+def test_loginAndLogout() -> None:
preferences = Preferences()
authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
authorization_service.onAuthenticationError.emit = MagicMock()
@@ -103,7 +103,7 @@ def test_loginAndLogout():
assert preferences.getValue("test/auth_data") == "{}"
-def test_wrongServerResponses():
+def test_wrongServerResponses() -> None:
authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
with patch.object(AuthorizationHelpers, "parseJWT", return_value=UserProfile()):
authorization_service._onAuthStateChanged(MALFORMED_AUTH_RESPONSE)
From a8493ee35d5bc68c6b1e55a6248ab78ea64b7257 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Tue, 25 Sep 2018 11:24:37 +0200
Subject: [PATCH 086/390] Give black materials at least some albedo
Otherwise you can't see the diffuse reflections and the entire thing just becomes a black silhouette.
---
plugins/SimulationView/layers3d.shader | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader
index 03e279e9eb..de2b9335d8 100644
--- a/plugins/SimulationView/layers3d.shader
+++ b/plugins/SimulationView/layers3d.shader
@@ -256,6 +256,7 @@ fragment41core =
out vec4 frag_color;
uniform mediump vec4 u_ambientColor;
+ uniform mediump vec4 u_minimumAlbedo;
uniform highp vec3 u_lightPosition;
void main()
@@ -263,7 +264,7 @@ fragment41core =
mediump vec4 finalColor = vec4(0.0);
float alpha = f_color.a;
- finalColor.rgb += f_color.rgb * 0.3;
+ finalColor.rgb += f_color.rgb * 0.2 + u_minimumAlbedo.rgb;
highp vec3 normal = normalize(f_normal);
highp vec3 light_dir = normalize(u_lightPosition - f_vertex);
@@ -285,6 +286,7 @@ u_extruder_opacity = [1.0, 1.0, 1.0, 1.0]
u_specularColor = [0.4, 0.4, 0.4, 1.0]
u_ambientColor = [0.3, 0.3, 0.3, 0.0]
u_diffuseColor = [1.0, 0.79, 0.14, 1.0]
+u_minimumAlbedo = [0.1, 0.1, 0.1, 1.0]
u_shininess = 20.0
u_show_travel_moves = 0
From 987ae730787170f8fb5cd735e257fbe28ee04aa4 Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Tue, 25 Sep 2018 13:15:26 +0200
Subject: [PATCH 087/390] Remove call to undefined function.
---
resources/qml/Menus/SettingVisibilityPresetsMenu.qml | 1 -
1 file changed, 1 deletion(-)
diff --git a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
index 2175cfa402..c34dc2a484 100644
--- a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
+++ b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
@@ -29,7 +29,6 @@ Menu
onTriggered:
{
settingVisibilityPresetsModel.setActivePreset(model.id);
- showSettingVisibilityProfile();
}
}
From 3127108d008ab5547ba5e3f1cf45b474d2e88b91 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Tue, 25 Sep 2018 13:17:14 +0200
Subject: [PATCH 088/390] Only set top/bottom pattern to concentric for initial
layer
I'm taking responsibility for this. I'm changing it as a reaction to #4167 since I think concentric is good for the first layer but not so good for the rest of the layers. That user seems to agree but it hasn't been tested thoroughly. It's my intuition, sorry if it went wrong.
---
resources/definitions/creality_cr10.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/creality_cr10.def.json b/resources/definitions/creality_cr10.def.json
index b727834db3..fb63867163 100644
--- a/resources/definitions/creality_cr10.def.json
+++ b/resources/definitions/creality_cr10.def.json
@@ -37,7 +37,7 @@
"top_bottom_thickness": {
"default_value": 0.6
},
- "top_bottom_pattern": {
+ "top_bottom_pattern_0": {
"default_value": "concentric"
},
"infill_pattern": {
From d5c86365f86a7eee90539a25ebc8613cb9b5dc8f Mon Sep 17 00:00:00 2001
From: THeijmans
Date: Wed, 26 Sep 2018 15:02:25 +0200
Subject: [PATCH 089/390] S5 profile optimizations
Removing the prime blob, equalizing flows and avoiding supports.
---
resources/definitions/ultimaker_s5.def.json | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 115c84c0db..2024acdf73 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -63,7 +63,7 @@
"machine_end_gcode": { "default_value": "" },
"prime_tower_position_x": { "default_value": 345 },
"prime_tower_position_y": { "default_value": 222.5 },
- "prime_blob_enable": { "enabled": true },
+ "prime_blob_enable": { "enabled": false },
"speed_travel":
{
@@ -127,6 +127,7 @@
"retraction_min_travel": { "value": "5" },
"retraction_prime_speed": { "value": "15" },
"skin_overlap": { "value": "10" },
+ "speed_equalize_flow_enabled": { "value": "True" },
"speed_layer_0": { "value": "20" },
"speed_prime_tower": { "value": "speed_topbottom" },
"speed_print": { "value": "35" },
@@ -145,6 +146,7 @@
"switch_extruder_prime_speed": { "value": "15" },
"switch_extruder_retraction_amount": { "value": "8" },
"top_bottom_thickness": { "value": "1" },
+ "travel_avoid_supports": { "value": "True" },
"travel_avoid_distance": { "value": "3 if extruders_enabled_count > 1 else machine_nozzle_tip_outer_diameter / 2 * 1.5" },
"wall_0_inset": { "value": "0" },
"wall_line_width_x": { "value": "round(line_width * 0.3 / 0.35, 2)" },
From 7a681a2ae4260b0777072564e78a499ab0257eca Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 26 Sep 2018 16:54:00 +0200
Subject: [PATCH 090/390] Move Cura custom setting functions to a separate file
---
cura/CuraApplication.py | 16 ++-
cura/Settings/CustomSettingFunctions.py | 134 ++++++++++++++++++++
cura/Settings/ExtruderManager.py | 162 +-----------------------
cura/Settings/UserChangesModel.py | 26 ++--
4 files changed, 161 insertions(+), 177 deletions(-)
create mode 100644 cura/Settings/CustomSettingFunctions.py
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index dbaef4df34..857aafb567 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -107,6 +107,7 @@ from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisi
from cura.Settings.ContainerManager import ContainerManager
from cura.Settings.SidebarCustomMenuItemsModel import SidebarCustomMenuItemsModel
import cura.Settings.cura_empty_instance_containers
+from cura.Settings.CustomSettingFunctions import CustomSettingFunctions
from cura.ObjectsModel import ObjectsModel
@@ -174,6 +175,8 @@ class CuraApplication(QtApplication):
self._single_instance = None
+ self._custom_setting_functions = None
+
self._cura_package_manager = None
self._machine_action_manager = None
@@ -317,6 +320,8 @@ class CuraApplication(QtApplication):
# Adds custom property types, settings types, and extra operators (functions) that need to be registered in
# SettingDefinition and SettingFunction.
def __initializeSettingDefinitionsAndFunctions(self):
+ self._custom_setting_functions = CustomSettingFunctions(self)
+
# Need to do this before ContainerRegistry tries to load the machines
SettingDefinition.addSupportedProperty("settable_per_mesh", DefinitionPropertyType.Any, default = True, read_only = True)
SettingDefinition.addSupportedProperty("settable_per_extruder", DefinitionPropertyType.Any, default = True, read_only = True)
@@ -337,10 +342,10 @@ class CuraApplication(QtApplication):
SettingDefinition.addSettingType("optional_extruder", None, str, None)
SettingDefinition.addSettingType("[int]", None, str, None)
- SettingFunction.registerOperator("extruderValues", ExtruderManager.getExtruderValues)
- SettingFunction.registerOperator("extruderValue", ExtruderManager.getExtruderValue)
- SettingFunction.registerOperator("resolveOrValue", ExtruderManager.getResolveOrValue)
- SettingFunction.registerOperator("defaultExtruderPosition", ExtruderManager.getDefaultExtruderPosition)
+ SettingFunction.registerOperator("extruderValue", self._custom_setting_functions.getValueInExtruder)
+ SettingFunction.registerOperator("extruderValues", self._custom_setting_functions.getValuesInAllExtruders)
+ SettingFunction.registerOperator("resolveOrValue", self._custom_setting_functions.getResolveOrValue)
+ SettingFunction.registerOperator("defaultExtruderPosition", self._custom_setting_functions.getDefaultExtruderPosition)
# Adds all resources and container related resources.
def __addAllResourcesAndContainerResources(self) -> None:
@@ -804,6 +809,9 @@ class CuraApplication(QtApplication):
def getSettingVisibilityPresetsModel(self, *args) -> SettingVisibilityPresetsModel:
return self._setting_visibility_presets_model
+ def getCustomSettingFunctions(self, *args) -> CustomSettingFunctions:
+ return self._custom_setting_functions
+
def getMachineErrorChecker(self, *args) -> MachineErrorChecker:
return self._machine_error_checker
diff --git a/cura/Settings/CustomSettingFunctions.py b/cura/Settings/CustomSettingFunctions.py
new file mode 100644
index 0000000000..fe3ea1a935
--- /dev/null
+++ b/cura/Settings/CustomSettingFunctions.py
@@ -0,0 +1,134 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from typing import Any, List, Optional, TYPE_CHECKING
+
+from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext
+from UM.Settings.SettingFunction import SettingFunction
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+ from cura.Settings.CuraContainerStack import CuraContainerStack
+
+
+#
+# This class contains all Cura-related custom setting functions. Some functions requires information such as the
+# currently active machine, so this is made into a class instead of standalone functions.
+#
+class CustomSettingFunctions:
+
+ def __init__(self, application: "CuraApplication") -> None:
+ self._application = application
+
+ # ================
+ # Custom Functions
+ # ================
+
+ # Gets the default extruder position of the currently active machine.
+ def getDefaultExtruderPosition(self) -> str:
+ machine_manager = self._application.getMachineManager()
+ return machine_manager.defaultExtruderPosition
+
+ # Gets the given setting key from the given extruder position.
+ def getValueInExtruder(self, extruder_position: int, property_key: str,
+ context: Optional["PropertyEvaluationContext"] = None) -> Any:
+ machine_manager = self._application.getMachineManager()
+
+ if extruder_position == -1:
+ extruder_position = int(machine_manager.defaultExtruderPosition)
+
+ global_stack = machine_manager.activeMachine
+ extruder_stack = global_stack.extruders[str(extruder_position)]
+
+ if extruder_stack:
+ value = extruder_stack.getRawProperty(property_key, "value", context = context)
+ if isinstance(value, SettingFunction):
+ value = value(extruder_stack, context = context)
+ else:
+ # Just a value from global.
+ value = global_stack.getProperty(property_key, "value", context = context)
+
+ return value
+
+ # Gets all extruder values as a list for the given property.
+ def getValuesInAllExtruders(self, property_key: str,
+ context: Optional["PropertyEvaluationContext"] = None) -> List[Any]:
+ machine_manager = self._application.getMachineManager()
+ extruder_manager = self._application.getExtruderManager()
+
+ global_stack = machine_manager.activeMachine
+
+ result = []
+ for extruder in extruder_manager.getActiveExtruderStacks():
+ if not extruder.isEnabled:
+ continue
+ # only include values from extruders that are "active" for the current machine instance
+ if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context):
+ continue
+
+ value = extruder.getRawProperty(property_key, "value", context = context)
+
+ if value is None:
+ continue
+
+ if isinstance(value, SettingFunction):
+ value = value(extruder, context= context)
+
+ result.append(value)
+
+ if not result:
+ result.append(global_stack.getProperty(property_key, "value", context = context))
+
+ return result
+
+ # Get the resolve value or value for a given key.
+ def getResolveOrValue(self, property_key: str, context: Optional["PropertyEvaluationContext"] = None) -> Any:
+ machine_manager = self._application.getMachineManager()
+
+ global_stack = machine_manager.activeMachine
+ resolved_value = global_stack.getProperty(property_key, "value", context = context)
+
+ return resolved_value
+
+ # Gets the default setting value from given extruder position. The default value is what excludes the values in
+ # the user_changes container.
+ def getDefaultValueInExtruder(self, extruder_position: int, property_key: str) -> Any:
+ machine_manager = self._application.getMachineManager()
+
+ global_stack = machine_manager.activeMachine
+ extruder_stack = global_stack.extruders[str(extruder_position)]
+
+ context = self.createContextForDefaultValueEvaluation(extruder_stack)
+
+ return self.getValueInExtruder(extruder_position, property_key, context = context)
+
+ # Gets all default setting values as a list from all extruders of the currently active machine.
+ # The default values are those excluding the values in the user_changes container.
+ def getDefaultValuesInAllExtruders(self, property_key: str) -> List[Any]:
+ machine_manager = self._application.getMachineManager()
+
+ global_stack = machine_manager.activeMachine
+
+ context = self.createContextForDefaultValueEvaluation(global_stack)
+
+ return self.getValuesInAllExtruders(property_key, context = context)
+
+ # Gets the resolve value or value for a given key without looking the first container (user container).
+ def getDefaultResolveOrValue(self, property_key: str) -> Any:
+ machine_manager = self._application.getMachineManager()
+
+ global_stack = machine_manager.activeMachine
+
+ context = self.createContextForDefaultValueEvaluation(global_stack)
+ return self.getResolveOrValue(property_key, context = context)
+
+ # Creates a context for evaluating default values (skip the user_changes container).
+ def createContextForDefaultValueEvaluation(self, source_stack: "CuraContainerStack") -> "PropertyEvaluationContext":
+ context = PropertyEvaluationContext(source_stack)
+ context.context["evaluate_from_container_index"] = 1 # skip the user settings container
+ context.context["override_operators"] = {
+ "extruderValue": self.getDefaultValueInExtruder,
+ "extruderValues": self.getDefaultValuesInAllExtruders,
+ "resolveOrValue": self.getDefaultResolveOrValue,
+ }
+ return context
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 803491d1b3..99bd7e9b56 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -12,9 +12,7 @@ from UM.Scene.SceneNode import SceneNode
from UM.Scene.Selection import Selection
from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator
from UM.Settings.ContainerRegistry import ContainerRegistry # Finding containers by ID.
-from UM.Settings.SettingFunction import SettingFunction
from UM.Settings.ContainerStack import ContainerStack
-from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING, Union
@@ -376,86 +374,6 @@ class ExtruderManager(QObject):
extruder_definition = container_registry.findDefinitionContainers(id = expected_extruder_definition_0_id)[0]
extruder_stack_0.definition = extruder_definition
- ## Get all extruder values for a certain setting.
- #
- # This is exposed to SettingFunction so it can be used in value functions.
- #
- # \param key The key of the setting to retrieve values for.
- #
- # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list.
- # If no extruder has the value, the list will contain the global value.
- @staticmethod
- def getExtruderValues(key: str) -> List[Any]:
- global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) #We know that there must be a global stack by the time you're requesting setting values.
-
- result = []
- for extruder in ExtruderManager.getInstance().getActiveExtruderStacks():
- if not extruder.isEnabled:
- continue
- # only include values from extruders that are "active" for the current machine instance
- if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value"):
- continue
-
- value = extruder.getRawProperty(key, "value")
-
- if value is None:
- continue
-
- if isinstance(value, SettingFunction):
- value = value(extruder)
-
- result.append(value)
-
- if not result:
- result.append(global_stack.getProperty(key, "value"))
-
- return result
-
- ## Get all extruder values for a certain setting. This function will skip the user settings container.
- #
- # This is exposed to SettingFunction so it can be used in value functions.
- #
- # \param key The key of the setting to retrieve values for.
- #
- # \return A list of values for all extruders. If an extruder does not have a value, it will not be in the list.
- # If no extruder has the value, the list will contain the global value.
- @staticmethod
- def getDefaultExtruderValues(key: str) -> List[Any]:
- global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()) #We know that there must be a global stack by the time you're requesting setting values.
- context = PropertyEvaluationContext(global_stack)
- context.context["evaluate_from_container_index"] = 1 # skip the user settings container
- context.context["override_operators"] = {
- "extruderValue": ExtruderManager.getDefaultExtruderValue,
- "extruderValues": ExtruderManager.getDefaultExtruderValues,
- "resolveOrValue": ExtruderManager.getDefaultResolveOrValue
- }
-
- result = []
- for extruder in ExtruderManager.getInstance().getActiveExtruderStacks():
- # only include values from extruders that are "active" for the current machine instance
- if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context):
- continue
-
- value = extruder.getRawProperty(key, "value", context = context)
-
- if value is None:
- continue
-
- if isinstance(value, SettingFunction):
- value = value(extruder, context = context)
-
- result.append(value)
-
- if not result:
- result.append(global_stack.getProperty(key, "value", context = context))
-
- return result
-
- ## Return the default extruder position from the machine manager
- @staticmethod
- def getDefaultExtruderPosition() -> str:
- return cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition
-
## Get all extruder values for a certain setting.
#
# This is exposed to qml for display purposes
@@ -464,62 +382,8 @@ class ExtruderManager(QObject):
#
# \return String representing the extruder values
@pyqtSlot(str, result="QVariant")
- def getInstanceExtruderValues(self, key) -> List:
- return ExtruderManager.getExtruderValues(key)
-
- ## Get the value for a setting from a specific extruder.
- #
- # This is exposed to SettingFunction to use in value functions.
- #
- # \param extruder_index The index of the extruder to get the value from.
- # \param key The key of the setting to get the value of.
- #
- # \return The value of the setting for the specified extruder or for the
- # global stack if not found.
- @staticmethod
- def getExtruderValue(extruder_index: int, key: str) -> Any:
- if extruder_index == -1:
- extruder_index = int(cura.CuraApplication.CuraApplication.getInstance().getMachineManager().defaultExtruderPosition)
- extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index)
-
- if extruder:
- value = extruder.getRawProperty(key, "value")
- if isinstance(value, SettingFunction):
- value = value(extruder)
- else:
- # Just a value from global.
- value = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()).getProperty(key, "value")
-
- return value
-
- ## Get the default value from the given extruder. This function will skip the user settings container.
- #
- # This is exposed to SettingFunction to use in value functions.
- #
- # \param extruder_index The index of the extruder to get the value from.
- # \param key The key of the setting to get the value of.
- #
- # \return The value of the setting for the specified extruder or for the
- # global stack if not found.
- @staticmethod
- def getDefaultExtruderValue(extruder_index: int, key: str) -> Any:
- extruder = ExtruderManager.getInstance().getExtruderStack(extruder_index)
- context = PropertyEvaluationContext(extruder)
- context.context["evaluate_from_container_index"] = 1 # skip the user settings container
- context.context["override_operators"] = {
- "extruderValue": ExtruderManager.getDefaultExtruderValue,
- "extruderValues": ExtruderManager.getDefaultExtruderValues,
- "resolveOrValue": ExtruderManager.getDefaultResolveOrValue
- }
-
- if extruder:
- value = extruder.getRawProperty(key, "value", context = context)
- if isinstance(value, SettingFunction):
- value = value(extruder, context = context)
- else: # Just a value from global.
- value = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()).getProperty(key, "value", context = context)
-
- return value
+ def getInstanceExtruderValues(self, key: str) -> List:
+ return self._application.getCustomSettingFunctions().getValuesInAllExtruders(key)
## Get the resolve value or value for a given key
#
@@ -535,28 +399,6 @@ class ExtruderManager(QObject):
return resolved_value
- ## Get the resolve value or value for a given key without looking the first container (user container)
- #
- # This is the effective value for a given key, it is used for values in the global stack.
- # This is exposed to SettingFunction to use in value functions.
- # \param key The key of the setting to get the value of.
- #
- # \return The effective value
- @staticmethod
- def getDefaultResolveOrValue(key: str) -> Any:
- global_stack = cast(GlobalStack, cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack())
- context = PropertyEvaluationContext(global_stack)
- context.context["evaluate_from_container_index"] = 1 # skip the user settings container
- context.context["override_operators"] = {
- "extruderValue": ExtruderManager.getDefaultExtruderValue,
- "extruderValues": ExtruderManager.getDefaultExtruderValues,
- "resolveOrValue": ExtruderManager.getDefaultResolveOrValue
- }
-
- resolved_value = global_stack.getProperty(key, "value", context = context)
-
- return resolved_value
-
__instance = None # type: ExtruderManager
@classmethod
diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py
index 95674e5ecd..d2ea84f79d 100644
--- a/cura/Settings/UserChangesModel.py
+++ b/cura/Settings/UserChangesModel.py
@@ -1,15 +1,17 @@
-from UM.Qt.ListModel import ListModel
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+import os
+from collections import OrderedDict
from PyQt5.QtCore import pyqtSlot, Qt
+
from UM.Application import Application
-from cura.Settings.ExtruderManager import ExtruderManager
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.i18n import i18nCatalog
from UM.Settings.SettingFunction import SettingFunction
-from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext
-from collections import OrderedDict
-import os
+from UM.Qt.ListModel import ListModel
class UserChangesModel(ListModel):
@@ -38,9 +40,13 @@ class UserChangesModel(ListModel):
self._update()
def _update(self):
+ application = Application.getInstance()
+ machine_manager = application.getMachineManager()
+ custom_setting_functions = application.getCustomSettingFunctions()
+
item_dict = OrderedDict()
item_list = []
- global_stack = Application.getInstance().getGlobalContainerStack()
+ global_stack = machine_manager.activeMachine
if not global_stack:
return
@@ -71,13 +77,7 @@ class UserChangesModel(ListModel):
# Override "getExtruderValue" with "getDefaultExtruderValue" so we can get the default values
user_changes = containers.pop(0)
- default_value_resolve_context = PropertyEvaluationContext(stack)
- default_value_resolve_context.context["evaluate_from_container_index"] = 1 # skip the user settings container
- default_value_resolve_context.context["override_operators"] = {
- "extruderValue": ExtruderManager.getDefaultExtruderValue,
- "extruderValues": ExtruderManager.getDefaultExtruderValues,
- "resolveOrValue": ExtruderManager.getDefaultResolveOrValue
- }
+ default_value_resolve_context = custom_setting_functions.createContextForDefaultValueEvaluation(stack)
for setting_key in user_changes.getAllKeys():
original_value = None
From 3c8368827bb9f86fce870d9767a04cba8eaa2a09 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 26 Sep 2018 17:04:15 +0200
Subject: [PATCH 091/390] Remove unused functions in ExtruderManager
---
cura/Settings/ExtruderManager.py | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 99bd7e9b56..86ee546240 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -67,16 +67,6 @@ class ExtruderManager(QObject):
except KeyError: # Extruder index could be -1 if the global tab is selected, or the entry doesn't exist if the machine definition is wrong.
return None
- ## Return extruder count according to extruder trains.
- @pyqtProperty(int, notify = extrudersChanged)
- def extruderCount(self) -> int:
- if not self._application.getGlobalContainerStack():
- return 0 # No active machine, so no extruders.
- try:
- return len(self._extruder_trains[self._application.getGlobalContainerStack().getId()])
- except KeyError:
- return 0
-
## Gets a dict with the extruder stack ids with the extruder number as the key.
@pyqtProperty("QVariantMap", notify = extrudersChanged)
def extruderIds(self) -> Dict[str, str]:
From 067e59a254a66a4939cc0ecf20454a841c5257d0 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 26 Sep 2018 17:06:09 +0200
Subject: [PATCH 092/390] Add logged_in as argument to loginStateChanged
callback
CURA-5744
---
cura/API/Account.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 6bb5b4e50d..c4499fb750 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -24,7 +24,7 @@ i18n_catalog = i18nCatalog("cura")
#
class Account(QObject):
# Signal emitted when user logged in or out.
- loginStateChanged = pyqtSignal()
+ loginStateChanged = pyqtSignal(bool)
def __init__(self, parent = None) -> None:
super().__init__(parent)
@@ -64,7 +64,7 @@ class Account(QObject):
if self._logged_in != logged_in:
self._logged_in = logged_in
- self.loginStateChanged.emit()
+ self.loginStateChanged.emit(logged_in)
@pyqtSlot()
def login(self) -> None:
From 16ff1c371236d8dc01daee4694858b51ee5250e7 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 26 Sep 2018 17:12:00 +0200
Subject: [PATCH 093/390] Add property for the accessToken
CURA-5744
---
cura/API/Account.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index c4499fb750..c30b8d4586 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -87,6 +87,10 @@ class Account(QObject):
return None
return user_profile.profile_image_url
+ @pyqtProperty(str, notify=loginStateChanged)
+ def accessToken(self) -> Optional[str]:
+ return self._authorization_service.getAccessToken()
+
# Get the profile of the logged in user
# @returns None if no user is logged in, a dict containing user_id, username and profile_image_url
@pyqtProperty("QVariantMap", notify = loginStateChanged)
From d5dbf91a4f90892aa81871386589f2d3f35008d4 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 26 Sep 2018 17:23:36 +0200
Subject: [PATCH 094/390] Switch unit test to use decoratior instead of with
waterfall
CURA-5744
---
tests/TestOAuth2.py | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 7deb712aea..312d71fd5f 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -55,22 +55,22 @@ def test_failedLogin() -> None:
assert authorization_service.getAccessToken() is None
-def test_localAuthServer() -> None:
+@patch.object(LocalAuthorizationServer, "stop")
+@patch.object(LocalAuthorizationServer, "start")
+@patch.object(webbrowser, "open_new")
+def test_localAuthServer(webbrowser_open, start_auth_server, stop_auth_server) -> None:
preferences = Preferences()
authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
- with patch.object(webbrowser, "open_new") as webrowser_open:
- with patch.object(LocalAuthorizationServer, "start") as start_auth_server:
- with patch.object(LocalAuthorizationServer, "stop") as stop_auth_server:
- authorization_service.startAuthorizationFlow()
- assert webrowser_open.call_count == 1
+ authorization_service.startAuthorizationFlow()
+ assert webbrowser_open.call_count == 1
- # Ensure that the Authorization service tried to start the server.
- assert start_auth_server.call_count == 1
- assert stop_auth_server.call_count == 0
- authorization_service._onAuthStateChanged(FAILED_AUTH_RESPONSE)
+ # Ensure that the Authorization service tried to start the server.
+ assert start_auth_server.call_count == 1
+ assert stop_auth_server.call_count == 0
+ authorization_service._onAuthStateChanged(FAILED_AUTH_RESPONSE)
- # Ensure that it stopped the server.
- assert stop_auth_server.call_count == 1
+ # Ensure that it stopped the server.
+ assert stop_auth_server.call_count == 1
def test_loginAndLogout() -> None:
From 52ffe39c07cf040e5e44c503807a4075ef4b3fee Mon Sep 17 00:00:00 2001
From: ChrisTerBeke
Date: Thu, 27 Sep 2018 10:33:50 +0200
Subject: [PATCH 095/390] Small fixes in settings
---
cura/API/Account.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index c30b8d4586..7944290f6e 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -36,11 +36,11 @@ class Account(QObject):
OAUTH_SERVER_URL= self._oauth_root,
CALLBACK_PORT=self._callback_port,
CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
- CLIENT_ID="um---------------ultimaker_cura",
+ CLIENT_ID="um---------------ultimaker_cura_drive_plugin",
CLIENT_SCOPES="user.read drive.backups.read drive.backups.write client.package.download",
AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
AUTH_SUCCESS_REDIRECT="{}/auth-success".format(self._cloud_api_root),
- AUTH_FAILED_REDIRECT="{}//auth-error".format(self._cloud_api_root)
+ AUTH_FAILED_REDIRECT="{}/auth-error".format(self._cloud_api_root)
)
self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
From 246d12a596c8122516d15d82742ecc3dca369aad Mon Sep 17 00:00:00 2001
From: ChrisTerBeke
Date: Thu, 27 Sep 2018 10:48:22 +0200
Subject: [PATCH 096/390] Remove client.package.download scope until that is
deployed on production
---
cura/API/Account.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 7944290f6e..e28f943009 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -37,7 +37,7 @@ class Account(QObject):
CALLBACK_PORT=self._callback_port,
CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
CLIENT_ID="um---------------ultimaker_cura_drive_plugin",
- CLIENT_SCOPES="user.read drive.backups.read drive.backups.write client.package.download",
+ CLIENT_SCOPES="user.read drive.backups.read drive.backups.write",
AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
AUTH_SUCCESS_REDIRECT="{}/auth-success".format(self._cloud_api_root),
AUTH_FAILED_REDIRECT="{}/auth-error".format(self._cloud_api_root)
From 1c8804ff2c637425d4b80b5472787e8b1e8d1e3c Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 11:03:17 +0200
Subject: [PATCH 097/390] Changed documentation style to doxygen
CURA-5744
---
cura/OAuth2/AuthorizationHelpers.py | 54 ++++++++--------------
cura/OAuth2/AuthorizationRequestHandler.py | 23 +++------
cura/OAuth2/AuthorizationRequestServer.py | 16 +++----
cura/OAuth2/AuthorizationService.py | 38 +++++++--------
cura/OAuth2/LocalAuthorizationServer.py | 28 +++++------
5 files changed, 62 insertions(+), 97 deletions(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 06cc0a6061..7141b83279 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -13,25 +13,22 @@ from UM.Logger import Logger
from cura.OAuth2.Models import AuthenticationResponse, UserProfile, OAuth2Settings
+# Class containing several helpers to deal with the authorization flow.
class AuthorizationHelpers:
- """Class containing several helpers to deal with the authorization flow."""
-
def __init__(self, settings: "OAuth2Settings") -> None:
self._settings = settings
self._token_url = "{}/token".format(self._settings.OAUTH_SERVER_URL)
@property
+ # The OAuth2 settings object.
def settings(self) -> "OAuth2Settings":
- """Get the OAuth2 settings object."""
return self._settings
+ # Request the access token from the authorization server.
+ # \param authorization_code: The authorization code from the 1st step.
+ # \param verification_code: The verification code needed for the PKCE extension.
+ # \return: An AuthenticationResponse object.
def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str)-> "AuthenticationResponse":
- """
- Request the access token from the authorization server.
- :param authorization_code: The authorization code from the 1st step.
- :param verification_code: The verification code needed for the PKCE extension.
- :return: An AuthenticationResponse object.
- """
return self.parseTokenResponse(requests.post(self._token_url, data={
"client_id": self._settings.CLIENT_ID,
"redirect_uri": self._settings.CALLBACK_URL,
@@ -41,12 +38,10 @@ class AuthorizationHelpers:
"scope": self._settings.CLIENT_SCOPES
}))
+ # Request the access token from the authorization server using a refresh token.
+ # \param refresh_token:
+ # \return: An AuthenticationResponse object.
def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> AuthenticationResponse:
- """
- Request the access token from the authorization server using a refresh token.
- :param refresh_token:
- :return: An AuthenticationResponse object.
- """
return self.parseTokenResponse(requests.post(self._token_url, data={
"client_id": self._settings.CLIENT_ID,
"redirect_uri": self._settings.CALLBACK_URL,
@@ -56,12 +51,10 @@ class AuthorizationHelpers:
}))
@staticmethod
+ # Parse the token response from the authorization server into an AuthenticationResponse object.
+ # \param token_response: The JSON string data response from the authorization server.
+ # \return: An AuthenticationResponse object.
def parseTokenResponse(token_response: requests.models.Response) -> AuthenticationResponse:
- """
- Parse the token response from the authorization server into an AuthenticationResponse object.
- :param token_response: The JSON string data response from the authorization server.
- :return: An AuthenticationResponse object.
- """
token_data = None
try:
@@ -82,12 +75,10 @@ class AuthorizationHelpers:
expires_in=token_data["expires_in"],
scope=token_data["scope"])
+ # Calls the authentication API endpoint to get the token data.
+ # \param access_token: The encoded JWT token.
+ # \return: Dict containing some profile data.
def parseJWT(self, access_token: str) -> Optional["UserProfile"]:
- """
- Calls the authentication API endpoint to get the token data.
- :param access_token: The encoded JWT token.
- :return: Dict containing some profile data.
- """
token_request = requests.get("{}/check-token".format(self._settings.OAUTH_SERVER_URL), headers = {
"Authorization": "Bearer {}".format(access_token)
})
@@ -105,20 +96,15 @@ class AuthorizationHelpers:
)
@staticmethod
+ # Generate a 16-character verification code.
+ # \param code_length: How long should the code be?
def generateVerificationCode(code_length: int = 16) -> str:
- """
- Generate a 16-character verification code.
- :param code_length:
- :return:
- """
return "".join(random.choice("0123456789ABCDEF") for i in range(code_length))
@staticmethod
+ # Generates a base64 encoded sha512 encrypted version of a given string.
+ # \param verification_code:
+ # \return: The encrypted code in base64 format.
def generateVerificationCodeChallenge(verification_code: str) -> str:
- """
- Generates a base64 encoded sha512 encrypted version of a given string.
- :param verification_code:
- :return: The encrypted code in base64 format.
- """
encoded = sha512(verification_code.encode()).digest()
return b64encode(encoded, altchars = b"_-").decode()
diff --git a/cura/OAuth2/AuthorizationRequestHandler.py b/cura/OAuth2/AuthorizationRequestHandler.py
index 3b5b0c34d8..7e0a659a56 100644
--- a/cura/OAuth2/AuthorizationRequestHandler.py
+++ b/cura/OAuth2/AuthorizationRequestHandler.py
@@ -12,12 +12,9 @@ if TYPE_CHECKING:
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+# This handler handles all HTTP requests on the local web server.
+# It also requests the access token for the 2nd stage of the OAuth flow.
class AuthorizationRequestHandler(BaseHTTPRequestHandler):
- """
- This handler handles all HTTP requests on the local web server.
- It also requests the access token for the 2nd stage of the OAuth flow.
- """
-
def __init__(self, request, client_address, server) -> None:
super().__init__(request, client_address, server)
@@ -27,8 +24,6 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
self.verification_code = None # type: Optional[str]
def do_GET(self) -> None:
- """Entry point for GET requests"""
-
# Extract values from the query string.
parsed_url = urlparse(self.path)
query = parse_qs(parsed_url.query)
@@ -52,12 +47,10 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
# This will cause the server to shut down, so we do it at the very end of the request handling.
self.authorization_callback(token_response)
+ # Handler for the callback URL redirect.
+ # \param query: Dict containing the HTTP query parameters.
+ # \return: HTTP ResponseData containing a success page to show to the user.
def _handleCallback(self, query: Dict[Any, List]) -> Tuple[ResponseData, Optional[AuthenticationResponse]]:
- """
- Handler for the callback URL redirect.
- :param query: Dict containing the HTTP query parameters.
- :return: HTTP ResponseData containing a success page to show to the user.
- """
code = self._queryGet(query, "code")
if code and self.authorization_helpers is not None and self.verification_code is not None:
# If the code was returned we get the access token.
@@ -88,12 +81,11 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
), token_response
@staticmethod
+ # Handle all other non-existing server calls.
def _handleNotFound() -> ResponseData:
- """Handle all other non-existing server calls."""
return ResponseData(status=HTTP_STATUS["NOT_FOUND"], content_type="text/html", data_stream=b"Not found.")
def _sendHeaders(self, status: "ResponseStatus", content_type: str, redirect_uri: str = None) -> None:
- """Send out the headers"""
self.send_response(status.code, status.message)
self.send_header("Content-type", content_type)
if redirect_uri:
@@ -101,10 +93,9 @@ class AuthorizationRequestHandler(BaseHTTPRequestHandler):
self.end_headers()
def _sendData(self, data: bytes) -> None:
- """Send out the data"""
self.wfile.write(data)
@staticmethod
+ # Convenience Helper for getting values from a pre-parsed query string
def _queryGet(query_data: Dict[Any, List], key: str, default: Optional[str]=None) -> Optional[str]:
- """Helper for getting values from a pre-parsed query string"""
return query_data.get(key, [default])[0]
diff --git a/cura/OAuth2/AuthorizationRequestServer.py b/cura/OAuth2/AuthorizationRequestServer.py
index 514a4ab5de..288e348ea9 100644
--- a/cura/OAuth2/AuthorizationRequestServer.py
+++ b/cura/OAuth2/AuthorizationRequestServer.py
@@ -8,21 +8,19 @@ if TYPE_CHECKING:
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+# The authorization request callback handler server.
+# This subclass is needed to be able to pass some data to the request handler.
+# This cannot be done on the request handler directly as the HTTPServer creates an instance of the handler after
+# init.
class AuthorizationRequestServer(HTTPServer):
- """
- The authorization request callback handler server.
- This subclass is needed to be able to pass some data to the request handler.
- This cannot be done on the request handler directly as the HTTPServer creates an instance of the handler after init.
- """
-
+ # Set the authorization helpers instance on the request handler.
def setAuthorizationHelpers(self, authorization_helpers: "AuthorizationHelpers") -> None:
- """Set the authorization helpers instance on the request handler."""
self.RequestHandlerClass.authorization_helpers = authorization_helpers # type: ignore
+ # Set the authorization callback on the request handler.
def setAuthorizationCallback(self, authorization_callback: Callable[["AuthenticationResponse"], Any]) -> None:
- """Set the authorization callback on the request handler."""
self.RequestHandlerClass.authorization_callback = authorization_callback # type: ignore
+ # Set the verification code on the request handler.
def setVerificationCode(self, verification_code: str) -> None:
- """Set the verification code on the request handler."""
self.RequestHandlerClass.verification_code = verification_code # type: ignore
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 0f57621a47..04891b8d76 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -38,11 +38,11 @@ class AuthorizationService:
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
self._loadAuthData()
+ # Get the user profile as obtained from the JWT (JSON Web Token).
+ # If the JWT is not yet parsed, calling this will take care of that.
+ # \return UserProfile if a user is logged in, None otherwise.
+ # \sa _parseJWT
def getUserProfile(self) -> Optional["UserProfile"]:
- """
- Get the user data that is stored in the JWT token.
- :return: Dict containing some user data.
- """
if not self._user_profile:
# If no user profile was stored locally, we try to get it from JWT.
self._user_profile = self._parseJWT()
@@ -52,11 +52,9 @@ class AuthorizationService:
return self._user_profile
+ # Tries to parse the JWT (JSON Web Token) data, which it does if all the needed data is there.
+ # \return UserProfile if it was able to parse, None otherwise.
def _parseJWT(self) -> Optional["UserProfile"]:
- """
- Tries to parse the JWT if all the needed data exists.
- :return: UserProfile if found, otherwise None.
- """
if not self._auth_data or self._auth_data.access_token is None:
# If no auth data exists, we should always log in again.
return None
@@ -74,10 +72,8 @@ class AuthorizationService:
return self._auth_helpers.parseJWT(self._auth_data.access_token)
+ # Get the access token as provided by the repsonse data.
def getAccessToken(self) -> Optional[str]:
- """
- Get the access token response data.
- """
if not self.getUserProfile():
# We check if we can get the user profile.
# If we can't get it, that means the access token (JWT) was invalid or expired.
@@ -88,24 +84,22 @@ class AuthorizationService:
return self._auth_data.access_token
+ # Try to refresh the access token. This should be used when it has expired.
def refreshAccessToken(self) -> None:
- """
- Refresh the access token when it expired.
- """
if self._auth_data is None or self._auth_data.refresh_token is None:
Logger.log("w", "Unable to refresh access token, since there is no refresh token.")
return
self._storeAuthData(self._auth_helpers.getAccessTokenUsingRefreshToken(self._auth_data.refresh_token))
self.onAuthStateChanged.emit(logged_in=True)
+ # Delete the authentication data that we have stored locally (eg; logout)
def deleteAuthData(self) -> None:
- """Delete authentication data from preferences and locally."""
- self._storeAuthData()
- self.onAuthStateChanged.emit(logged_in=False)
+ if self._auth_data is not None:
+ self._storeAuthData()
+ self.onAuthStateChanged.emit(logged_in=False)
+ # Start the flow to become authenticated. This will start a new webbrowser tap, prompting the user to login.
def startAuthorizationFlow(self) -> None:
- """Start a new OAuth2 authorization flow."""
-
Logger.log("d", "Starting new OAuth2 flow...")
# Create the tokens needed for the code challenge (PKCE) extension for OAuth2.
@@ -131,8 +125,8 @@ class AuthorizationService:
# Start a local web server to receive the callback URL on.
self._server.start(verification_code)
+ # Callback method for the authentication flow.
def _onAuthStateChanged(self, auth_response: AuthenticationResponse) -> None:
- """Callback method for an authentication flow."""
if auth_response.success:
self._storeAuthData(auth_response)
self.onAuthStateChanged.emit(logged_in=True)
@@ -140,8 +134,8 @@ class AuthorizationService:
self.onAuthenticationError.emit(logged_in=False, error_message=auth_response.err_message)
self._server.stop() # Stop the web server at all times.
+ # Load authentication data from preferences.
def _loadAuthData(self) -> None:
- """Load authentication data from preferences if available."""
self._cura_preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
try:
preferences_data = json.loads(self._cura_preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
@@ -151,8 +145,8 @@ class AuthorizationService:
except ValueError:
Logger.logException("w", "Could not load auth data from preferences")
+ # Store authentication data in preferences.
def _storeAuthData(self, auth_data: Optional[AuthenticationResponse] = None) -> None:
- """Store authentication data in preferences and locally."""
self._auth_data = auth_data
if auth_data:
self._user_profile = self.getUserProfile()
diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py
index 488a33941d..5a282d8135 100644
--- a/cura/OAuth2/LocalAuthorizationServer.py
+++ b/cura/OAuth2/LocalAuthorizationServer.py
@@ -12,16 +12,17 @@ if TYPE_CHECKING:
from cura.OAuth2.Models import AuthenticationResponse
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers
+
class LocalAuthorizationServer:
+ # The local LocalAuthorizationServer takes care of the oauth2 callbacks.
+ # Once the flow is completed, this server should be closed down again by calling stop()
+ # \param auth_helpers: An instance of the authorization helpers class.
+ # \param auth_state_changed_callback: A callback function to be called when the authorization state changes.
+ # \param daemon: Whether the server thread should be run in daemon mode. Note: Daemon threads are abruptly stopped
+ # at shutdown. Their resources (e.g. open files) may never be released.
def __init__(self, auth_helpers: "AuthorizationHelpers",
auth_state_changed_callback: Callable[["AuthenticationResponse"], Any],
daemon: bool) -> None:
- """
- :param auth_helpers: An instance of the authorization helpers class.
- :param auth_state_changed_callback: A callback function to be called when the authorization state changes.
- :param daemon: Whether the server thread should be run in daemon mode. Note: Daemon threads are abruptly stopped
- at shutdown. Their resources (e.g. open files) may never be released.
- """
self._web_server = None # type: Optional[AuthorizationRequestServer]
self._web_server_thread = None # type: Optional[threading.Thread]
self._web_server_port = auth_helpers.settings.CALLBACK_PORT
@@ -29,11 +30,9 @@ class LocalAuthorizationServer:
self._auth_state_changed_callback = auth_state_changed_callback
self._daemon = daemon
+ # Starts the local web server to handle the authorization callback.
+ # \param verification_code: The verification code part of the OAuth2 client identification.
def start(self, verification_code: str) -> None:
- """
- Starts the local web server to handle the authorization callback.
- :param verification_code: The verification code part of the OAuth2 client identification.
- """
if self._web_server:
# If the server is already running (because of a previously aborted auth flow), we don't have to start it.
# We still inject the new verification code though.
@@ -43,12 +42,10 @@ class LocalAuthorizationServer:
if self._web_server_port is None:
raise Exception("Unable to start server without specifying the port.")
- Logger.log("d", "Starting local web server to handle authorization callback on port %s",
- self._web_server_port)
+ Logger.log("d", "Starting local web server to handle authorization callback on port %s", self._web_server_port)
# Create the server and inject the callback and code.
- self._web_server = AuthorizationRequestServer(("0.0.0.0", self._web_server_port),
- AuthorizationRequestHandler)
+ self._web_server = AuthorizationRequestServer(("0.0.0.0", self._web_server_port), AuthorizationRequestHandler)
self._web_server.setAuthorizationHelpers(self._auth_helpers)
self._web_server.setAuthorizationCallback(self._auth_state_changed_callback)
self._web_server.setVerificationCode(verification_code)
@@ -57,9 +54,8 @@ class LocalAuthorizationServer:
self._web_server_thread = threading.Thread(None, self._web_server.serve_forever, daemon = self._daemon)
self._web_server_thread.start()
+ # Stops the web server if it was running. It also does some cleanup.
def stop(self) -> None:
- """ Stops the web server if it was running. Also deletes the objects. """
-
Logger.log("d", "Stopping local oauth2 web server...")
if self._web_server:
From 1717281d2b84f2f60d3695c61a8a6d3f18a75165 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 27 Sep 2018 11:20:24 +0200
Subject: [PATCH 098/390] Always provide extruder_nr for all models
Even if you only have one extruder in your printer. This is more consistent, and probably also faster because executing one set-addition in Python is probably still slower than sending those 20 extra bytes over the socket and parsing them in C++...
Contributes to issue CURA-4410.
---
plugins/CuraEngineBackend/StartSliceJob.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py
index 28e442033b..dd0d9db0a2 100644
--- a/plugins/CuraEngineBackend/StartSliceJob.py
+++ b/plugins/CuraEngineBackend/StartSliceJob.py
@@ -440,8 +440,7 @@ class StartSliceJob(Job):
Job.yieldThread()
# Ensure that the engine is aware what the build extruder is.
- if stack.getProperty("machine_extruder_count", "value") > 1:
- changed_setting_keys.add("extruder_nr")
+ changed_setting_keys.add("extruder_nr")
# Get values for all changed settings
for key in changed_setting_keys:
From 506ec5109d51a2627ec76a3906554c99e3e18970 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 11:37:22 +0200
Subject: [PATCH 099/390] Moved loading of the authentication to the account
CURA-5744
---
cura/API/Account.py | 2 +-
cura/OAuth2/AuthorizationService.py | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index e28f943009..e0cc4013ac 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -44,7 +44,7 @@ class Account(QObject):
)
self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
-
+ self._authorization_service.loadAuthDataFromPreferences()
self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 04891b8d76..a118235499 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -36,7 +36,6 @@ class AuthorizationService:
self._user_profile = None # type: Optional["UserProfile"]
self._cura_preferences = preferences
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
- self._loadAuthData()
# Get the user profile as obtained from the JWT (JSON Web Token).
# If the JWT is not yet parsed, calling this will take care of that.
@@ -135,7 +134,7 @@ class AuthorizationService:
self._server.stop() # Stop the web server at all times.
# Load authentication data from preferences.
- def _loadAuthData(self) -> None:
+ def loadAuthDataFromPreferences(self) -> None:
self._cura_preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
try:
preferences_data = json.loads(self._cura_preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
From 0ccbabd857c7ba651a22044ede777b4c3a230e59 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 11:37:44 +0200
Subject: [PATCH 100/390] Switch SHA512 implementation to use the one from
hashlib
CURA-5744
---
cura/OAuth2/AuthorizationHelpers.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 7141b83279..4d485b3bda 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
import json
import random
-from _sha512 import sha512
+from hashlib import sha512
from base64 import b64encode
from typing import Optional
From 649f1c8961151d0b2fed756793a97a49578a0282 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 11:42:12 +0200
Subject: [PATCH 101/390] Make it optional for the AuthService to have a
preference object
This should make it easier if we ever want to re-use the authService, since
it no longer has a hard link with the Preferences
CURA-5744
---
cura/OAuth2/AuthorizationService.py | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index a118235499..e9e3a7e65b 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -14,6 +14,7 @@ from cura.OAuth2.Models import AuthenticationResponse
if TYPE_CHECKING:
from cura.OAuth2.Models import UserProfile, OAuth2Settings
+ from UM.Preferences import Preferences
class AuthorizationService:
@@ -28,15 +29,18 @@ class AuthorizationService:
# Emit signal when authentication failed.
onAuthenticationError = Signal()
- def __init__(self, preferences, settings: "OAuth2Settings") -> None:
+ def __init__(self, preferences: Optional["Preferences"], settings: "OAuth2Settings") -> None:
self._settings = settings
self._auth_helpers = AuthorizationHelpers(settings)
self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL)
self._auth_data = None # type: Optional[AuthenticationResponse]
self._user_profile = None # type: Optional["UserProfile"]
- self._cura_preferences = preferences
+ self._preferences = preferences
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
+ if self._preferences:
+ self._preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
+
# Get the user profile as obtained from the JWT (JSON Web Token).
# If the JWT is not yet parsed, calling this will take care of that.
# \return UserProfile if a user is logged in, None otherwise.
@@ -135,9 +139,11 @@ class AuthorizationService:
# Load authentication data from preferences.
def loadAuthDataFromPreferences(self) -> None:
- self._cura_preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
+ if self._preferences is None:
+ Logger.logException("e", "Unable to load authentication data, since no preference has been set!")
+ return
try:
- preferences_data = json.loads(self._cura_preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
+ preferences_data = json.loads(self._preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
if preferences_data:
self._auth_data = AuthenticationResponse(**preferences_data)
self.onAuthStateChanged.emit(logged_in=True)
@@ -149,7 +155,7 @@ class AuthorizationService:
self._auth_data = auth_data
if auth_data:
self._user_profile = self.getUserProfile()
- self._cura_preferences.setValue(self._settings.AUTH_DATA_PREFERENCE_KEY, json.dumps(vars(auth_data)))
+ self._preferences.setValue(self._settings.AUTH_DATA_PREFERENCE_KEY, json.dumps(vars(auth_data)))
else:
self._user_profile = None
- self._cura_preferences.resetPreference(self._settings.AUTH_DATA_PREFERENCE_KEY)
+ self._preferences.resetPreference(self._settings.AUTH_DATA_PREFERENCE_KEY)
From b1198ee1b8e8c24db4986599324c2acbbceb9850 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 27 Sep 2018 11:43:18 +0200
Subject: [PATCH 102/390] Remove an if-else block that assumes no ExtruderStack
There is always an ExtruderStack, so the else-block will never be
executed.
---
cura/Settings/CustomSettingFunctions.py | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/cura/Settings/CustomSettingFunctions.py b/cura/Settings/CustomSettingFunctions.py
index fe3ea1a935..03cff6b069 100644
--- a/cura/Settings/CustomSettingFunctions.py
+++ b/cura/Settings/CustomSettingFunctions.py
@@ -40,13 +40,9 @@ class CustomSettingFunctions:
global_stack = machine_manager.activeMachine
extruder_stack = global_stack.extruders[str(extruder_position)]
- if extruder_stack:
- value = extruder_stack.getRawProperty(property_key, "value", context = context)
- if isinstance(value, SettingFunction):
- value = value(extruder_stack, context = context)
- else:
- # Just a value from global.
- value = global_stack.getProperty(property_key, "value", context = context)
+ value = extruder_stack.getRawProperty(property_key, "value", context = context)
+ if isinstance(value, SettingFunction):
+ value = value(extruder_stack, context = context)
return value
From 329b38663eaa0786997aeff092b825e3f5e65176 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 27 Sep 2018 11:43:51 +0200
Subject: [PATCH 103/390] Fix code style
---
cura/Settings/CustomSettingFunctions.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/Settings/CustomSettingFunctions.py b/cura/Settings/CustomSettingFunctions.py
index 03cff6b069..5951ac1e73 100644
--- a/cura/Settings/CustomSettingFunctions.py
+++ b/cura/Settings/CustomSettingFunctions.py
@@ -68,7 +68,7 @@ class CustomSettingFunctions:
continue
if isinstance(value, SettingFunction):
- value = value(extruder, context= context)
+ value = value(extruder, context = context)
result.append(value)
From 202cf698c3061f1dee712b69a18ee8ae256f8310 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 11:56:19 +0200
Subject: [PATCH 104/390] Change callback for succes / failure to the new
location
CURA-5744
---
cura/API/Account.py | 4 ++--
tests/TestOAuth2.py | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index e0cc4013ac..18d9d5df03 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -39,8 +39,8 @@ class Account(QObject):
CLIENT_ID="um---------------ultimaker_cura_drive_plugin",
CLIENT_SCOPES="user.read drive.backups.read drive.backups.write",
AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
- AUTH_SUCCESS_REDIRECT="{}/auth-success".format(self._cloud_api_root),
- AUTH_FAILED_REDIRECT="{}/auth-error".format(self._cloud_api_root)
+ AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root),
+ AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root)
)
self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 312d71fd5f..22bf0656ef 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -18,8 +18,8 @@ OAUTH_SETTINGS = OAuth2Settings(
CLIENT_ID="",
CLIENT_SCOPES="",
AUTH_DATA_PREFERENCE_KEY="test/auth_data",
- AUTH_SUCCESS_REDIRECT="{}/auth-success".format(CLOUD_API_ROOT),
- AUTH_FAILED_REDIRECT="{}/auth-error".format(CLOUD_API_ROOT)
+ AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(OAUTH_ROOT),
+ AUTH_FAILED_REDIRECT="{}/app/auth-error".format(OAUTH_ROOT)
)
FAILED_AUTH_RESPONSE = AuthenticationResponse(success = False, err_message = "FAILURE!")
From 47c5dbaf840cf2f4eca3575b46ea200d3229689e Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 13:07:37 +0200
Subject: [PATCH 105/390] Add extra unit test that tests the storing and
loading of data to the preferences
---
tests/TestOAuth2.py | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 22bf0656ef..78585804f5 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -55,6 +55,23 @@ def test_failedLogin() -> None:
assert authorization_service.getAccessToken() is None
+@patch.object(AuthorizationService, "getUserProfile", return_value=UserProfile())
+def test_storeAuthData(get_user_profile) -> None:
+ preferences = Preferences()
+ authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+
+ # Write stuff to the preferences.
+ authorization_service._storeAuthData(SUCCESFULL_AUTH_RESPONSE)
+ preference_value = preferences.getValue(OAUTH_SETTINGS.AUTH_DATA_PREFERENCE_KEY)
+ # Check that something was actually put in the preferences
+ assert preference_value is not None and preference_value != {}
+
+ # Create a second auth service, so we can load the data.
+ second_auth_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ second_auth_service.loadAuthDataFromPreferences()
+ assert second_auth_service.getAccessToken() == SUCCESFULL_AUTH_RESPONSE.access_token
+
+
@patch.object(LocalAuthorizationServer, "stop")
@patch.object(LocalAuthorizationServer, "start")
@patch.object(webbrowser, "open_new")
From 88ba2ac3451834db5a11169214d410c8aa3f726d Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 27 Sep 2018 13:27:42 +0200
Subject: [PATCH 106/390] Define gcode.gz extension in GCodeGzReader
So if you were to disable the GCodeGzReader plug-in, you will now no longer see the extension in the files you can read.
Fixes #4151.
---
plugins/GCodeGzReader/GCodeGzReader.py | 8 ++++++++
plugins/GCodeReader/GCodeReader.py | 3 ++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/plugins/GCodeGzReader/GCodeGzReader.py b/plugins/GCodeGzReader/GCodeGzReader.py
index 73a08075d2..4d33f00870 100644
--- a/plugins/GCodeGzReader/GCodeGzReader.py
+++ b/plugins/GCodeGzReader/GCodeGzReader.py
@@ -4,8 +4,16 @@
import gzip
from UM.Mesh.MeshReader import MeshReader #The class we're extending/implementing.
+from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType #To add the .gcode.gz files to the MIME type database.
from UM.PluginRegistry import PluginRegistry
+MimeTypeDatabase.addMimeType(
+ MimeType(
+ name = "application/x-cura-compressed-gcode-file",
+ comment = "Cura Compressed GCode File",
+ suffixes = ["gcode.gz"]
+ )
+)
## A file reader that reads gzipped g-code.
#
diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py
index 45ef1e1058..498c425f68 100755
--- a/plugins/GCodeReader/GCodeReader.py
+++ b/plugins/GCodeReader/GCodeReader.py
@@ -1,4 +1,5 @@
# Copyright (c) 2017 Aleph Objects, Inc.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from UM.FileHandler.FileReader import FileReader
@@ -15,7 +16,7 @@ MimeTypeDatabase.addMimeType(
MimeType(
name = "application/x-cura-gcode-file",
comment = "Cura GCode File",
- suffixes = ["gcode", "gcode.gz"]
+ suffixes = ["gcode"]
)
)
From 6d402806ac2cbc914d701b58b50ac6a796c40a39 Mon Sep 17 00:00:00 2001
From: ChrisTerBeke
Date: Thu, 27 Sep 2018 13:35:18 +0200
Subject: [PATCH 107/390] Ensure logged in state is not always set to False
after loading from preferences
---
cura/API/Account.py | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 18d9d5df03..d91276fb56 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -28,6 +28,10 @@ class Account(QObject):
def __init__(self, parent = None) -> None:
super().__init__(parent)
+
+ self._error_message = None # type: Optional[Message]
+ self._logged_in = False
+
self._callback_port = 32118
self._oauth_root = "https://account.ultimaker.com"
self._cloud_api_root = "https://api.ultimaker.com"
@@ -48,9 +52,6 @@ class Account(QObject):
self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
- self._error_message = None # type: Optional[Message]
- self._logged_in = False
-
@pyqtProperty(bool, notify=loginStateChanged)
def isLoggedIn(self) -> bool:
return self._logged_in
From 302f9a95b34fb911aa21fcab57f796c8e9573afa Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Thu, 27 Sep 2018 13:40:46 +0200
Subject: [PATCH 108/390] Cleaned-up printe job info block
Contributes to CL-897, CL-1051
---
.../resources/qml/ClusterControlItem.qml | 14 +-
.../resources/qml/ClusterMonitorItem.qml | 52 +-
.../qml/ConfigurationChangeBlock.qml | 243 +++++++++
.../resources/qml/PrintCoreConfiguration.qml | 166 +++---
.../resources/qml/PrintJobInfoBlock.qml | 481 +++++++++++++++---
.../resources/svg/ultibot.svg | 1 +
.../resources/svg/warning-icon.svg | 5 +-
resources/themes/cura-light/theme.json | 15 +-
8 files changed, 811 insertions(+), 166 deletions(-)
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
create mode 100644 plugins/UM3NetworkPrinting/resources/svg/ultibot.svg
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
index f8ad0e763e..774ab75f0d 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
@@ -111,11 +111,11 @@ Component
{
if(modelData.state == "disabled")
{
- return UM.Theme.getColor("monitor_background_inactive")
+ return UM.Theme.getColor("monitor_tab_background_inactive")
}
else
{
- return UM.Theme.getColor("monitor_background_active")
+ return UM.Theme.getColor("monitor_tab_background_active")
}
}
id: base
@@ -196,7 +196,7 @@ Component
{
if(modelData.state == "disabled")
{
- return UM.Theme.getColor("monitor_text_inactive")
+ return UM.Theme.getColor("monitor_tab_text_inactive")
}
if(modelData.activePrintJob != undefined)
@@ -204,7 +204,7 @@ Component
return UM.Theme.getColor("primary")
}
- return UM.Theme.getColor("monitor_text_inactive")
+ return UM.Theme.getColor("monitor_tab_text_inactive")
}
}
}
@@ -252,7 +252,7 @@ Component
width: parent.width
elide: Text.ElideRight
font: UM.Theme.getFont("default")
- color: UM.Theme.getColor("monitor_text_inactive")
+ color: UM.Theme.getColor("monitor_tab_text_inactive")
}
}
@@ -427,7 +427,7 @@ Component
contentItem: Label
{
text: contextButton.text
- color: UM.Theme.getColor("monitor_text_inactive")
+ color: UM.Theme.getColor("monitor_tab_text_inactive")
font.pixelSize: 25
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
@@ -762,7 +762,7 @@ Component
]
if(inactiveStates.indexOf(state) > -1 && remainingTime > 0)
{
- return UM.Theme.getColor("monitor_text_inactive")
+ return UM.Theme.getColor("monitor_tab_text_inactive")
}
else
{
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
index b55b5c6779..a027043b85 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
@@ -56,35 +56,69 @@ Component
color: UM.Theme.getColor("text")
}
- ScrollView
+ Column
{
- id: queuedPrintJobs
-
+ id: skeletonLoader
+ visible: printJobList.count === 0;
+ width: Math.min(800 * screenScaleFactor, maximumWidth)
anchors
{
top: queuedLabel.bottom
topMargin: UM.Theme.getSize("default_margin").height
horizontalCenter: parent.horizontalCenter
- bottomMargin: 0
+ bottomMargin: UM.Theme.getSize("default_margin").height
+ bottom: parent.bottom
+ }
+ PrintJobInfoBlock
+ {
+ printJob: null // Use as skeleton
+ anchors
+ {
+ left: parent.left
+ right: parent.right
+ rightMargin: UM.Theme.getSize("default_margin").width
+ leftMargin: UM.Theme.getSize("default_margin").width
+ }
+ }
+ PrintJobInfoBlock
+ {
+ printJob: null // Use as skeleton
+ anchors
+ {
+ left: parent.left
+ right: parent.right
+ rightMargin: UM.Theme.getSize("default_margin").width
+ leftMargin: UM.Theme.getSize("default_margin").width
+ }
+ }
+ }
+
+ ScrollView
+ {
+ id: queuedPrintJobs
+ anchors {
+ top: queuedLabel.bottom
+ topMargin: UM.Theme.getSize("default_margin").height
+ horizontalCenter: parent.horizontalCenter
+ bottomMargin: UM.Theme.getSize("default_margin").height
bottom: parent.bottom
}
style: UM.Theme.styles.scrollview
width: Math.min(800 * screenScaleFactor, maximumWidth)
+
ListView
{
+ id: printJobList;
anchors.fill: parent
- //anchors.margins: UM.Theme.getSize("default_margin").height
spacing: UM.Theme.getSize("default_margin").height - 10 // 2x the shadow radius
-
model: OutputDevice.queuedPrintJobs
-
delegate: PrintJobInfoBlock
{
printJob: modelData
anchors.left: parent.left
anchors.right: parent.right
- anchors.rightMargin: UM.Theme.getSize("default_margin").height
- anchors.leftMargin: UM.Theme.getSize("default_margin").height
+ anchors.rightMargin: UM.Theme.getSize("default_margin").width
+ anchors.leftMargin: UM.Theme.getSize("default_margin").width
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
new file mode 100644
index 0000000000..48e2e9ce3c
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
@@ -0,0 +1,243 @@
+import QtQuick 2.2
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.4
+import QtGraphicalEffects 1.0
+import QtQuick.Layouts 1.1
+import QtQuick.Dialogs 1.1
+import UM 1.3 as UM
+
+Rectangle {
+ id: root;
+ property var job: null;
+ property var materialsAreKnown: {
+ var conf0 = job.configuration[0];
+ if (conf0 && !conf0.material.material) {
+ return false;
+ }
+ var conf1 = job.configuration[1];
+ if (conf1 && !conf1.material.material) {
+ return false;
+ }
+ return true;
+ }
+ color: "pink";
+ width: parent.width;
+ height: childrenRect.height;
+
+ Column {
+ width: parent.width;
+ height: childrenRect.height;
+
+ // Config change toggle
+ Rectangle {
+ color: {
+ if(configurationChangeToggle.containsMouse) {
+ return UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ } else {
+ return "transparent";
+ }
+ }
+ width: parent.width;
+ height: UM.Theme.getSize("default_margin").height * 4; // TODO: Theme!
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ top: parent.top;
+ }
+
+ Rectangle {
+ width: parent.width;
+ height: UM.Theme.getSize("default_lining").height;
+ color: "#e6e6e6"; // TODO: Theme!
+ }
+
+ UM.RecolorImage {
+ width: 23; // TODO: Theme!
+ height: 23; // TODO: Theme!
+ anchors {
+ right: configChangeToggleLabel.left;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ sourceSize.width: width;
+ sourceSize.height: height;
+ source: "../svg/warning-icon.svg";
+ color: UM.Theme.getColor("text");
+ }
+
+ Label {
+ id: configChangeToggleLabel;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
+ text: "Configuration change"; // TODO: i18n!
+ }
+
+ UM.RecolorImage {
+ width: 15; // TODO: Theme!
+ height: 15; // TODO: Theme!
+ anchors {
+ left: configChangeToggleLabel.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ sourceSize.width: width;
+ sourceSize.height: height;
+ source: {
+ if (configChangeDetails.visible) {
+ return UM.Theme.getIcon("arrow_top");
+ } else {
+ return UM.Theme.getIcon("arrow_bottom");
+ }
+ }
+ color: UM.Theme.getColor("text");
+ }
+
+ MouseArea {
+ id: configurationChangeToggle;
+ anchors.fill: parent;
+ hoverEnabled: true;
+ onClicked: {
+ configChangeDetails.visible = !configChangeDetails.visible;
+ }
+ }
+ }
+
+ // Config change details
+ Rectangle {
+ id: configChangeDetails
+ color: "transparent";
+ width: parent.width;
+ visible: false;
+ height: visible ? UM.Theme.getSize("monitor_tab_config_override_box").height : 0;
+ Behavior on height { NumberAnimation { duration: 100 } }
+
+ Rectangle {
+ color: "transparent";
+ clip: true;
+ anchors {
+ fill: parent;
+ topMargin: UM.Theme.getSize("wide_margin").height;
+ bottomMargin: UM.Theme.getSize("wide_margin").height;
+ leftMargin: UM.Theme.getSize("wide_margin").height * 4;
+ rightMargin: UM.Theme.getSize("wide_margin").height * 4;
+ }
+
+ Label {
+ anchors.fill: parent;
+ wrapMode: Text.WordWrap;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("large_nonbold");
+ text: {
+ if (root.job.configurationChanges.length === 0) {
+ return "";
+ }
+ var topLine;
+ if (root.materialsAreKnown) {
+ topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(root.job.assignedPrinter.name);
+ } else {
+ topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(root.job.assignedPrinter.name);
+ }
+ var result = "" + topLine +"
";
+ for (var i = 0; i < root.job.configurationChanges.length; i++) {
+ var change = root.job.configurationChanges[i];
+ var text;
+ switch (change.typeOfChange) {
+ case 'material_change':
+ text = catalog.i18nc("@label", "Change material %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName);
+ break;
+ case 'material_insert':
+ text = catalog.i18nc("@label", "Load %3 as material %1 (This cannot be overridden).").arg(change.index + 1).arg(change.targetName);
+ break;
+ case 'print_core_change':
+ text = catalog.i18nc("@label", "Change print core %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName);
+ break;
+ case 'buildplate_change':
+ text = catalog.i18nc("@label", "Change build plate to %1 (This cannot be overridden).").arg(formatBuildPlateType(change.target_name));
+ break;
+ default:
+ text = "";
+ }
+ result += "" + text + "
";
+ }
+ return result;
+ }
+ }
+
+ Button {
+ anchors {
+ bottom: parent.bottom;
+ left: parent.left;
+ }
+ visible: {
+ var length = root.job.configurationChanges.length;
+ for (var i = 0; i < length; i++) {
+ var typeOfChange = root.job.configurationChanges[i].typeOfChange;
+ if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
+ return false;
+ }
+ }
+ return true;
+ }
+ text: catalog.i18nc("@label", "Override");
+ onClicked: {
+ overrideConfirmationDialog.visible = true;
+ }
+ }
+ }
+ }
+ }
+
+ MessageDialog {
+ id: overrideConfirmationDialog;
+ title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
+ icon: StandardIcon.Warning;
+ text: {
+ var printJobName = formatPrintJobName(root.job.name);
+ var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
+ return confirmText;
+ }
+ standardButtons: StandardButton.Yes | StandardButton.No;
+ Component.onCompleted: visible = false;
+ onYes: OutputDevice.forceSendJob(root.job.key);
+ }
+
+ // Utils
+ function formatPrintJobName(name) {
+ var extensions = [ ".gz", ".gcode", ".ufp" ];
+ for (var i = 0; i < extensions.length; i++) {
+ var extension = extensions[i];
+ if (name.slice(-extension.length) === extension) {
+ name = name.substring(0, name.length - extension.length);
+ }
+ }
+ return name;
+ }
+ function materialsAreKnown(job) {
+ var conf0 = job.configuration[0];
+ if (conf0 && !conf0.material.material) {
+ return false;
+ }
+ var conf1 = job.configuration[1];
+ if (conf1 && !conf1.material.material) {
+ return false;
+ }
+ return true;
+ }
+ function formatBuildPlateType(buildPlateType) {
+ var translationText = "";
+ switch (buildPlateType) {
+ case 'glass':
+ translationText = catalog.i18nc("@label", "Glass");
+ break;
+ case 'aluminum':
+ translationText = catalog.i18nc("@label", "Aluminum");
+ break;
+ default:
+ translationText = null;
+ }
+ return translationText;
+ }
+}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
index b2f4e85f9a..ca39d2663d 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
@@ -1,93 +1,119 @@
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
-
import UM 1.2 as UM
-
-Item
-{
+Item {
id: extruderInfo
- property var printCoreConfiguration
- width: Math.round(parent.width / 2)
- height: childrenRect.height
+ property var printCoreConfiguration: null;
- Item
- {
+ width: Math.round(parent.width / 2);
+ height: childrenRect.height;
+
+ // Extruder circle
+ Item {
id: extruderCircle
- width: 30
- height: 30
- anchors.verticalCenter: printAndMaterialLabel.verticalCenter
- opacity:
- {
- if(printCoreConfiguration == null || printCoreConfiguration.activeMaterial == null || printCoreConfiguration.hotendID == null)
- {
- return 0.5
+ width: UM.Theme.getSize("monitor_tab_extruder_circle").width;
+ height: UM.Theme.getSize("monitor_tab_extruder_circle").height;
+ anchors.verticalCenter: parent.verticalCenter;
+
+ // Loading skeleton
+ Rectangle {
+ visible: !extruderInfo.printCoreConfiguration;
+ anchors.fill: parent;
+ radius: Math.round(width / 2);
+ color: UM.Theme.getColor("viewport_background");
+ }
+
+ // Actual content
+ Rectangle {
+ visible: extruderInfo.printCoreConfiguration;
+ anchors.fill: parent;
+ radius: Math.round(width / 2);
+ border.width: UM.Theme.getSize("monitor_tab_thick_lining").width;
+ border.color: UM.Theme.getColor("monitor_tab_lining_active");
+ opacity: {
+ if (printCoreConfiguration == null || printCoreConfiguration.activeMaterial == null || printCoreConfiguration.hotendID == null) {
+ return 0.5;
+ }
+ return 1;
}
- return 1
- }
- Rectangle
- {
- anchors.fill: parent
- radius: Math.round(width / 2)
- border.width: 2
- border.color: "black"
- }
-
- Label
- {
- anchors.centerIn: parent
- font: UM.Theme.getFont("default_bold")
- text: printCoreConfiguration.position + 1
+ Label {
+ anchors.centerIn: parent;
+ font: UM.Theme.getFont("default_bold");
+ text: printCoreConfiguration.position + 1;
+ }
}
}
- Item
- {
- id: printAndMaterialLabel
- anchors
- {
- right: parent.right
- left: extruderCircle.right
- margins: UM.Theme.getSize("default_margin").width
- }
- height: childrenRect.height
+ // Print core and material labels
+ Item {
+ id: materialLabel
- Label
- {
- id: materialLabel
- text:
- {
- if(printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined)
- {
- return printCoreConfiguration.activeMaterial.name
- }
- return ""
- }
- font: UM.Theme.getFont("default")
- elide: Text.ElideRight
- width: parent.width
+ anchors {
+ left: extruderCircle.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ top: parent.top;
+ right: parent.right;
+ }
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+
+ // Loading skeleton
+ Rectangle {
+ visible: !extruderInfo.printCoreConfiguration;
+ anchors.fill: parent;
+ color: UM.Theme.getColor("viewport_background");
}
- Label
- {
- id: printCoreLabel
- text:
- {
- if(printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined)
- {
- return printCoreConfiguration.hotendID
+ // Actual content
+ Label {
+ visible: extruderInfo.printCoreConfiguration;
+ anchors.fill: parent;
+ text: {
+ if (printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) {
+ return printCoreConfiguration.activeMaterial.name;
}
- return ""
+ return "";
}
- anchors.top: materialLabel.bottom
- elide: Text.ElideRight
- width: parent.width
- opacity: 0.6
- font: UM.Theme.getFont("default")
+ font: UM.Theme.getFont("default");
+ elide: Text.ElideRight;
+ }
+ }
+
+ Item {
+ id: printCoreLabel;
+
+ anchors {
+ right: parent.right;
+ left: extruderCircle.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ bottom: parent.bottom;
+ }
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+
+ // Loading skeleton
+ Rectangle {
+ visible: !extruderInfo.printCoreConfiguration;
+ width: parent.width / 3;
+ height: parent.height;
+ color: UM.Theme.getColor("viewport_background");
+ }
+
+ // Actual content
+ Label {
+ visible: extruderInfo.printCoreConfiguration;
+ text: {
+ if (printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) {
+ return printCoreConfiguration.hotendID;
+ }
+ return "";
+ }
+ elide: Text.ElideRight;
+ opacity: 0.6;
+ font: UM.Theme.getFont("default");
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index aa2bcc7906..cb6b0fb4df 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -8,49 +8,51 @@ import QtQuick.Dialogs 1.1
import UM 1.3 as UM
Item {
-
id: root
property var shadowRadius: 5;
property var shadowOffset: 2;
- property var debug: true;
+ property var debug: false;
property var printJob: null;
- property var hasChanges: {
- if (printJob) {
- return printJob.configurationChanges.length !== 0;
- }
- return false;
- }
width: parent.width; // Bubbles downward
height: childrenRect.height + shadowRadius * 2; // Bubbles upward
+ UM.I18nCatalog {
+ id: catalog;
+ name: "cura";
+ }
+
// The actual card (white block)
Rectangle {
-
- color: "white";
+ color: "white"; // TODO: Theme!
height: childrenRect.height;
width: parent.width - shadowRadius * 2;
// 5px margin, but shifted 2px vertically because of the shadow
anchors {
- topMargin: shadowRadius - shadowOffset;
- bottomMargin: shadowRadius + shadowOffset;
- leftMargin: shadowRadius;
- rightMargin: shadowRadius;
+ topMargin: root.shadowRadius - root.shadowOffset;
+ bottomMargin: root.shadowRadius + root.shadowOffset;
+ leftMargin: root.shadowRadius;
+ rightMargin: root.shadowRadius;
+ }
+ layer.enabled: true
+ layer.effect: DropShadow {
+ radius: root.shadowRadius
+ verticalOffset: 2 * screenScaleFactor
+ color: "#3F000000" // 25% shadow
}
Column {
-
width: parent.width;
- height: childrenRect.height
+ height: childrenRect.height;
// Main content
Rectangle {
-
+ id: mainContent;
color: root.debug ? "red" : "transparent";
width: parent.width;
- height: 200;
+ height: 200; // TODO: Theme!
// Left content
Rectangle {
@@ -62,12 +64,114 @@ Item {
bottom: parent.bottom;
margins: UM.Theme.getSize("wide_margin").width
}
+
+ Item {
+ id: printJobName;
+
+ width: parent.width;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+
+ Rectangle {
+ visible: !root.printJob;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ height: parent.height;
+ width: parent.width / 3;
+ }
+ Label {
+ visible: root.printJob;
+ text: root.printJob ? root.printJob.name : ""; // Supress QML warnings
+ font: UM.Theme.getFont("default_bold");
+ elide: Text.ElideRight;
+ anchors.fill: parent;
+ }
+ }
+
+ Item {
+ id: printJobOwnerName;
+
+ width: parent.width;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ anchors {
+ top: printJobName.bottom;
+ topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2);
+ }
+
+ Rectangle {
+ visible: !root.printJob;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ height: parent.height;
+ width: parent.width / 2;
+ }
+ Label {
+ visible: root.printJob;
+ text: root.printJob ? root.printJob.owner : ""; // Supress QML warnings
+ font: UM.Theme.getFont("default");
+ elide: Text.ElideRight;
+ anchors.fill: parent;
+ }
+ }
+
+ Item {
+ id: printJobPreview;
+ property var useUltibot: false;
+ anchors {
+ top: printJobOwnerName.bottom;
+ horizontalCenter: parent.horizontalCenter;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ bottom: parent.bottom;
+ }
+ width: height;
+
+ // Skeleton
+ Rectangle {
+ visible: !root.printJob;
+ anchors.fill: parent;
+ radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ }
+
+ // Actual content
+ Image {
+ id: previewImage;
+ visible: root.printJob;
+ source: root.printJob.previewImageUrl;
+ opacity: root.printJob.state == "error" ? 0.5 : 1.0;
+ anchors.fill: parent;
+ }
+
+ UM.RecolorImage {
+ id: ultiBotImage;
+ anchors.centerIn: printJobPreview;
+ source: "../svg/ultibot.svg";
+ /* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
+ not in order to determine if we show the placeholder (ultibot) image instead. */
+ visible: root.printJob && previewImage.status == Image.Error;
+ width: printJobPreview.width;
+ height: printJobPreview.height;
+ sourceSize.width: width;
+ sourceSize.height: height;
+ color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
+ }
+
+ UM.RecolorImage {
+ id: statusImage;
+ anchors.centerIn: printJobPreview;
+ source: printJob.state == "error" ? "../svg/aborted-icon.svg" : "";
+ visible: source != "";
+ width: 0.5 * printJobPreview.width;
+ height: 0.5 * printJobPreview.height;
+ sourceSize.width: width;
+ sourceSize.height: height;
+ color: "black";
+ }
+ }
}
+ // Divider
Rectangle {
height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
- width: 1
- color: "black";
+ width: UM.Theme.getSize("default_lining").width;
+ color: !root.printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
anchors {
horizontalCenter: parent.horizontalCenter;
verticalCenter: parent.verticalCenter;
@@ -82,80 +186,309 @@ Item {
right: parent.right;
top: parent.top;
bottom: parent.bottom;
- margins: UM.Theme.getSize("wide_margin").width
+ margins: UM.Theme.getSize("wide_margin").width;
}
- }
- }
- // Config change toggle
- Rectangle {
- color: root.debug ? "orange" : "transparent";
- width: parent.width;
- visible: root.hasChanges;
- height: visible ? 40 : 0;
- MouseArea {
- anchors.fill: parent;
- onClicked: {
- configChangeDetails.visible = !configChangeDetails.visible;
- }
- }
- Label {
- id: configChangeToggleLabel;
- anchors {
- horizontalCenter: parent.horizontalCenter;
- verticalCenter: parent.verticalCenter;
- }
- text: "Configuration change";
- }
- UM.RecolorImage {
- width: 15;
- height: 15;
- anchors {
- left: configChangeToggleLabel.right;
- leftMargin: UM.Theme.getSize("default_margin").width;
- verticalCenter: parent.verticalCenter;
- }
- sourceSize.width: width;
- sourceSize.height: height;
- source: {
- if (configChangeDetails.visible) {
- return UM.Theme.getIcon("arrow_top");
- } else {
- return UM.Theme.getIcon("arrow_bottom");
+ Item {
+ id: targetPrinterLabel;
+
+ width: parent.width;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+
+ Rectangle {
+ visible: !root.printJob;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ anchors.fill: parent;
+ }
+ Label {
+ visible: root.printJob;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default_bold");
+ text: {
+ if (root.printJob.assignedPrinter == null) {
+ if (root.printJob.state == "error") {
+ return catalog.i18nc("@label", "Waiting for: Unavailable printer");
+ }
+ return catalog.i18nc("@label", "Waiting for: First available");
+ } else {
+ return catalog.i18nc("@label", "Waiting for: ") + root.printJob.assignedPrinter.name;
+ }
+ }
+ }
+ }
+
+ // Printer family pills
+ Row {
+ id: printerFamilyPills;
+ visible: root.printJob;
+ spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ bottom: extrudersInfo.top;
+ bottomMargin: UM.Theme.getSize("default_margin").height;
+ }
+ height: childrenRect.height;
+ Repeater {
+ model: printJob.compatibleMachineFamilies;
+ delegate: PrinterFamilyPill {
+ text: modelData;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ padding: 3 * screenScaleFactor; // TODO: Theme!
+ }
+ }
+ }
+
+ // Print core & material config
+ Row {
+ id: extrudersInfo;
+ anchors {
+ bottom: parent.bottom;
+ left: parent.left;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ }
+ height: childrenRect.height;
+ spacing: UM.Theme.getSize("default_margin").width;
+ PrintCoreConfiguration {
+ id: leftExtruderInfo;
+ width: Math.round(parent.width / 2) * screenScaleFactor;
+ printCoreConfiguration: root.printJob !== null ? printJob.configuration.extruderConfigurations[0] : null;
+ }
+ PrintCoreConfiguration {
+ id: rightExtruderInfo;
+ width: Math.round(parent.width / 2) * screenScaleFactor;
+ printCoreConfiguration: root.printJob !== null ? printJob.configuration.extruderConfigurations[1] : null;
}
}
- color: "black";
}
}
- // Config change details
Rectangle {
- id: configChangeDetails
- color: root.debug ? "yellow" : "transparent";
+ id: configChangesBox;
width: parent.width;
- visible: false;
- height: visible ? 150 : 0;
- Behavior on height { NumberAnimation { duration: 100 } }
+ height: childrenRect.height;
+ visible: root.printJob && root.printJob.configurationChanges.length !== 0;
+ // Config change toggle
Rectangle {
- color: root.debug ? "lime" : "transparent";
+ id: configChangeToggle;
+ color: {
+ if(configChangeToggleArea.containsMouse) {
+ return UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ } else {
+ return "transparent";
+ }
+ }
+ width: parent.width;
+ height: UM.Theme.getSize("default_margin").height * 4; // TODO: Theme!
anchors {
- fill: parent;
- topMargin: UM.Theme.getSize("wide_margin").height;
- bottomMargin: UM.Theme.getSize("wide_margin").height;
- leftMargin: UM.Theme.getSize("wide_margin").height * 4;
- rightMargin: UM.Theme.getSize("wide_margin").height * 4;
+ left: parent.left;
+ right: parent.right;
+ top: parent.top;
}
+
+ Rectangle {
+ width: parent.width;
+ height: UM.Theme.getSize("default_lining").height;
+ color: "#e6e6e6"; // TODO: Theme!
+ }
+
+ UM.RecolorImage {
+ width: 23; // TODO: Theme!
+ height: 23; // TODO: Theme!
+ anchors {
+ right: configChangeToggleLabel.left;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ sourceSize.width: width;
+ sourceSize.height: height;
+ source: "../svg/warning-icon.svg";
+ color: UM.Theme.getColor("text");
+ }
+
Label {
- wrapMode: Text.WordWrap;
- text: "The assigned printer, UltiSandra, requires the following configuration change(s): Change material 1 from PLA to ABS.";
+ id: configChangeToggleLabel;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
+ text: "Configuration change"; // TODO: i18n!
}
+
+ UM.RecolorImage {
+ width: 15; // TODO: Theme!
+ height: 15; // TODO: Theme!
+ anchors {
+ left: configChangeToggleLabel.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ sourceSize.width: width;
+ sourceSize.height: height;
+ source: {
+ if (configChangeDetails.visible) {
+ return UM.Theme.getIcon("arrow_top");
+ } else {
+ return UM.Theme.getIcon("arrow_bottom");
+ }
+ }
+ color: UM.Theme.getColor("text");
+ }
+
+ MouseArea {
+ id: configChangeToggleArea;
+ anchors.fill: parent;
+ hoverEnabled: true;
+ onClicked: {
+ configChangeDetails.visible = !configChangeDetails.visible;
+ }
+ }
+ }
+
+ // Config change details
+ Rectangle {
+ id: configChangeDetails;
+ color: "transparent";
+ width: parent.width;
+ visible: false;
+ // In case of really massive multi-line configuration changes
+ height: visible ? Math.max(UM.Theme.getSize("monitor_tab_config_override_box").height, childrenRect.height) : 0;
+ Behavior on height { NumberAnimation { duration: 100 } }
+ anchors.top: configChangeToggle.bottom;
+
+ Rectangle {
+ color: "transparent";
+ clip: true;
+ anchors {
+ fill: parent;
+ topMargin: UM.Theme.getSize("wide_margin").height;
+ bottomMargin: UM.Theme.getSize("wide_margin").height;
+ leftMargin: UM.Theme.getSize("wide_margin").height * 4;
+ rightMargin: UM.Theme.getSize("wide_margin").height * 4;
+ }
+
+ Label {
+ anchors.fill: parent;
+ wrapMode: Text.WordWrap;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("large_nonbold");
+ text: {
+ if (root.printJob.configurationChanges.length === 0) {
+ return "";
+ }
+ var topLine;
+ if (materialsAreKnown(root.printJob)) {
+ topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(root.printJob.assignedPrinter.name);
+ } else {
+ topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(root.printJob.assignedPrinter.name);
+ }
+ var result = "" + topLine +"
";
+ for (var i = 0; i < root.printJob.configurationChanges.length; i++) {
+ var change = root.printJob.configurationChanges[i];
+ var text;
+ switch (change.typeOfChange) {
+ case "material_change":
+ text = catalog.i18nc("@label", "Change material %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName);
+ break;
+ case "material_insert":
+ text = catalog.i18nc("@label", "Load %3 as material %1 (This cannot be overridden).").arg(change.index + 1).arg(change.targetName);
+ break;
+ case "print_core_change":
+ text = catalog.i18nc("@label", "Change print core %1 from %2 to %3.").arg(change.index + 1).arg(change.originName).arg(change.targetName);
+ break;
+ case "buildplate_change":
+ text = catalog.i18nc("@label", "Change build plate to %1 (This cannot be overridden).").arg(formatBuildPlateType(change.target_name));
+ break;
+ default:
+ text = "";
+ }
+ result += "" + text + "
";
+ }
+ return result;
+ }
+ }
+
+ Button {
+ anchors {
+ bottom: parent.bottom;
+ left: parent.left;
+ }
+ visible: {
+ var length = root.printJob.configurationChanges.length;
+ for (var i = 0; i < length; i++) {
+ var typeOfChange = root.printJob.configurationChanges[i].typeOfChange;
+ if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
+ return false;
+ }
+ }
+ return true;
+ }
+ text: catalog.i18nc("@label", "Override");
+ onClicked: {
+ overrideConfirmationDialog.visible = true;
+ }
+ }
+ }
+ }
+
+ MessageDialog {
+ id: overrideConfirmationDialog;
+ title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
+ icon: StandardIcon.Warning;
+ text: {
+ var printJobName = formatPrintJobName(root.printJob.name);
+ var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
+ return confirmText;
+ }
+ standardButtons: StandardButton.Yes | StandardButton.No;
+ Component.onCompleted: visible = false;
+ onYes: OutputDevice.forceSendJob(root.printJob.key);
}
}
}
}
+ // Utils
+ function formatPrintJobName(name) {
+ var extensions = [ ".gz", ".gcode", ".ufp" ];
+ for (var i = 0; i < extensions.length; i++) {
+ var extension = extensions[i];
+ if (name.slice(-extension.length) === extension) {
+ name = name.substring(0, name.length - extension.length);
+ }
+ }
+ return name;
+ }
+ function materialsAreKnown(job) {
+ var conf0 = job.configuration[0];
+ if (conf0 && !conf0.material.material) {
+ return false;
+ }
+ var conf1 = job.configuration[1];
+ if (conf1 && !conf1.material.material) {
+ return false;
+ }
+ return true;
+ }
+ function formatBuildPlateType(buildPlateType) {
+ var translationText = "";
+ switch (buildPlateType) {
+ case "glass":
+ translationText = catalog.i18nc("@label", "Glass");
+ break;
+ case "aluminum":
+ translationText = catalog.i18nc("@label", "Aluminum");
+ break;
+ default:
+ translationText = null;
+ }
+ return translationText;
+ }
}
+
+
// Item
// {
// id: base
@@ -458,7 +791,7 @@ Item {
// contentItem: Label
// {
// text: contextButton.text
-// color: UM.Theme.getColor("monitor_text_inactive")
+// color: UM.Theme.getColor("monitor_tab_text_inactive")
// font.pixelSize: 25
// verticalAlignment: Text.AlignVCenter
// horizontalAlignment: Text.AlignHCenter
diff --git a/plugins/UM3NetworkPrinting/resources/svg/ultibot.svg b/plugins/UM3NetworkPrinting/resources/svg/ultibot.svg
new file mode 100644
index 0000000000..be6ca64723
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/svg/ultibot.svg
@@ -0,0 +1 @@
+logobot-placeholder
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg b/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg
index 1e5359a5eb..064d0783e0 100644
--- a/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg
+++ b/plugins/UM3NetworkPrinting/resources/svg/warning-icon.svg
@@ -1 +1,4 @@
-warning-icon
\ No newline at end of file
+
+ warning-icon
+
+
\ No newline at end of file
diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json
index 43d892c34c..390f0ba995 100644
--- a/resources/themes/cura-light/theme.json
+++ b/resources/themes/cura-light/theme.json
@@ -323,10 +323,12 @@
"favorites_header_text_hover": [31, 36, 39, 255],
"favorites_row_selected": [196, 239, 255, 255],
- "monitor_text_inactive": [154, 154, 154, 255],
- "monitor_background_inactive": [240, 240, 240, 255],
- "monitor_background_active": [255, 255, 255, 255],
- "monitor_lining_inactive": [230, 230, 230, 255]
+ "monitor_tab_background_active": [255, 255, 255, 255],
+ "monitor_tab_background_inactive": [240, 240, 240, 255],
+ "monitor_tab_lining_active": [0, 0, 0, 255],
+ "monitor_tab_lining_inactive": [230, 230, 230, 255],
+ "monitor_tab_placeholder_image": [230, 230, 230, 255],
+ "monitor_tab_text_inactive": [154, 154, 154, 255]
},
"sizes": {
@@ -476,6 +478,9 @@
"toolbox_action_button": [8.0, 2.5],
"toolbox_loader": [2.0, 2.0],
- "drop_shadow_radius": [1.0, 1.0]
+ "monitor_tab_config_override_box": [1.0, 14.0],
+ "monitor_tab_extruder_circle": [2.75, 2.75],
+ "monitor_tab_text_line": [1.16, 1.16],
+ "monitor_tab_thick_lining": [0.16, 0.16]
}
}
From f8369703ed4775c6e9ae2f5da3c32451f3c8b4a9 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 13:45:46 +0200
Subject: [PATCH 109/390] Connect signals before loading auth data
CURA-5744
---
cura/API/Account.py | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 18d9d5df03..3f328d71ef 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -42,15 +42,14 @@ class Account(QObject):
AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root),
AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root)
)
-
- self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
- self._authorization_service.loadAuthDataFromPreferences()
- self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
- self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
-
self._error_message = None # type: Optional[Message]
self._logged_in = False
+ self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
+ self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
+ self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
+ self._authorization_service.loadAuthDataFromPreferences()
+
@pyqtProperty(bool, notify=loginStateChanged)
def isLoggedIn(self) -> bool:
return self._logged_in
From 0ce9bf61beb1ed6bf72319b42330cd69251b959e Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 27 Sep 2018 13:58:06 +0200
Subject: [PATCH 110/390] Move MIME type declarations into constructors of
readers
So that if you disable the plug-in, the MIME type declaration is also not added.
Fixes #4151.
---
plugins/GCodeGzReader/GCodeGzReader.py | 15 +++++++--------
plugins/GCodeReader/GCodeReader.py | 16 +++++++++-------
plugins/UFPWriter/UFPWriter.py | 11 +++++++++++
plugins/UFPWriter/__init__.py | 10 ----------
4 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/plugins/GCodeGzReader/GCodeGzReader.py b/plugins/GCodeGzReader/GCodeGzReader.py
index 4d33f00870..d075e4e3b0 100644
--- a/plugins/GCodeGzReader/GCodeGzReader.py
+++ b/plugins/GCodeGzReader/GCodeGzReader.py
@@ -7,20 +7,19 @@ from UM.Mesh.MeshReader import MeshReader #The class we're extending/implementin
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType #To add the .gcode.gz files to the MIME type database.
from UM.PluginRegistry import PluginRegistry
-MimeTypeDatabase.addMimeType(
- MimeType(
- name = "application/x-cura-compressed-gcode-file",
- comment = "Cura Compressed GCode File",
- suffixes = ["gcode.gz"]
- )
-)
-
## A file reader that reads gzipped g-code.
#
# If you're zipping g-code, you might as well use gzip!
class GCodeGzReader(MeshReader):
def __init__(self) -> None:
super().__init__()
+ MimeTypeDatabase.addMimeType(
+ MimeType(
+ name = "application/x-cura-compressed-gcode-file",
+ comment = "Cura Compressed GCode File",
+ suffixes = ["gcode.gz"]
+ )
+ )
self._supported_extensions = [".gcode.gz"]
def _read(self, file_name):
diff --git a/plugins/GCodeReader/GCodeReader.py b/plugins/GCodeReader/GCodeReader.py
index 498c425f68..1bc22a3e62 100755
--- a/plugins/GCodeReader/GCodeReader.py
+++ b/plugins/GCodeReader/GCodeReader.py
@@ -12,13 +12,7 @@ catalog = i18nCatalog("cura")
from . import MarlinFlavorParser, RepRapFlavorParser
-MimeTypeDatabase.addMimeType(
- MimeType(
- name = "application/x-cura-gcode-file",
- comment = "Cura GCode File",
- suffixes = ["gcode"]
- )
-)
+
# Class for loading and parsing G-code files
@@ -30,7 +24,15 @@ class GCodeReader(MeshReader):
def __init__(self) -> None:
super().__init__()
+ MimeTypeDatabase.addMimeType(
+ MimeType(
+ name = "application/x-cura-gcode-file",
+ comment = "Cura GCode File",
+ suffixes = ["gcode"]
+ )
+ )
self._supported_extensions = [".gcode", ".g"]
+
self._flavor_reader = None
Application.getInstance().getPreferences().addPreference("gcodereader/show_caution", True)
diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py
index a85ee489cb..d318a0e77d 100644
--- a/plugins/UFPWriter/UFPWriter.py
+++ b/plugins/UFPWriter/UFPWriter.py
@@ -1,5 +1,6 @@
#Copyright (c) 2018 Ultimaker B.V.
#Cura is released under the terms of the LGPLv3 or higher.
+
from typing import cast
from Charon.VirtualFile import VirtualFile #To open UFP files.
@@ -9,6 +10,7 @@ from io import StringIO #For converting g-code to bytes.
from UM.Application import Application
from UM.Logger import Logger
from UM.Mesh.MeshWriter import MeshWriter #The writer we need to implement.
+from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
from UM.PluginRegistry import PluginRegistry #To get the g-code writer.
from PyQt5.QtCore import QBuffer
@@ -22,6 +24,15 @@ catalog = i18nCatalog("cura")
class UFPWriter(MeshWriter):
def __init__(self):
super().__init__(add_to_recent_files = False)
+
+ MimeTypeDatabase.addMimeType(
+ MimeType(
+ name = "application/x-cura-stl-file",
+ comment = "Cura UFP File",
+ suffixes = ["ufp"]
+ )
+ )
+
self._snapshot = None
Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot)
diff --git a/plugins/UFPWriter/__init__.py b/plugins/UFPWriter/__init__.py
index a2ec99044f..9db6b042f8 100644
--- a/plugins/UFPWriter/__init__.py
+++ b/plugins/UFPWriter/__init__.py
@@ -11,16 +11,6 @@ except ImportError:
from UM.i18n import i18nCatalog #To translate the file format description.
from UM.Mesh.MeshWriter import MeshWriter #For the binary mode flag.
-from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
-
-
-MimeTypeDatabase.addMimeType(
- MimeType(
- name = "application/x-cura-stl-file",
- comment = "Cura UFP File",
- suffixes = ["ufp"]
- )
-)
i18n_catalog = i18nCatalog("cura")
From 853ccbdb71df307d4de6a47981235b5531af3f55 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 14:00:28 +0200
Subject: [PATCH 111/390] Fix mypy typing issue
---
cura/OAuth2/AuthorizationService.py | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index e9e3a7e65b..16f525625e 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -140,7 +140,7 @@ class AuthorizationService:
# Load authentication data from preferences.
def loadAuthDataFromPreferences(self) -> None:
if self._preferences is None:
- Logger.logException("e", "Unable to load authentication data, since no preference has been set!")
+ Logger.log("e", "Unable to load authentication data, since no preference has been set!")
return
try:
preferences_data = json.loads(self._preferences.getValue(self._settings.AUTH_DATA_PREFERENCE_KEY))
@@ -152,6 +152,10 @@ class AuthorizationService:
# Store authentication data in preferences.
def _storeAuthData(self, auth_data: Optional[AuthenticationResponse] = None) -> None:
+ if self._preferences is None:
+ Logger.log("e", "Unable to save authentication data, since no preference has been set!")
+ return
+
self._auth_data = auth_data
if auth_data:
self._user_profile = self.getUserProfile()
From d83241f13aec281e29e08b47bf98be6d94e0d629 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 14:29:09 +0200
Subject: [PATCH 112/390] Add missing typing to number of decorators
---
cura/Scene/ConvexHullDecorator.py | 63 ++++++++++++++++----------
cura/Scene/GCodeListDecorator.py | 14 ++++--
cura/Scene/SliceableObjectDecorator.py | 6 +--
cura/Scene/ZOffsetDecorator.py | 11 +++--
4 files changed, 58 insertions(+), 36 deletions(-)
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index ea54d64642..85d1e8e309 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -13,19 +13,28 @@ from cura.Scene import ConvexHullNode
import numpy
+from typing import TYPE_CHECKING, Any, Optional
+
+
+
+if TYPE_CHECKING:
+ from UM.Scene.SceneNode import SceneNode
+ from cura.Settings.GlobalStack import GlobalStack
+
+
## The convex hull decorator is a scene node decorator that adds the convex hull functionality to a scene node.
# If a scene node has a convex hull decorator, it will have a shadow in which other objects can not be printed.
class ConvexHullDecorator(SceneNodeDecorator):
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
- self._convex_hull_node = None
+ self._convex_hull_node = None # type: Optional["SceneNode"]
self._init2DConvexHullCache()
- self._global_stack = None
+ self._global_stack = None # type: Optional[GlobalStack]
# Make sure the timer is created on the main thread
- self._recompute_convex_hull_timer = None
+ self._recompute_convex_hull_timer = None # type: Optional[QTimer]
Application.getInstance().callLater(self.createRecomputeConvexHullTimer)
self._raft_thickness = 0.0
@@ -39,13 +48,13 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._onGlobalStackChanged()
- def createRecomputeConvexHullTimer(self):
+ def createRecomputeConvexHullTimer(self) -> None:
self._recompute_convex_hull_timer = QTimer()
self._recompute_convex_hull_timer.setInterval(200)
self._recompute_convex_hull_timer.setSingleShot(True)
self._recompute_convex_hull_timer.timeout.connect(self.recomputeConvexHull)
- def setNode(self, node):
+ def setNode(self, node: "SceneNode") -> None:
previous_node = self._node
# Disconnect from previous node signals
if previous_node is not None and node is not previous_node:
@@ -64,7 +73,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
return ConvexHullDecorator()
## Get the unmodified 2D projected convex hull of the node
- def getConvexHull(self):
+ def getConvexHull(self) -> Optional[Polygon]:
if self._node is None:
return None
@@ -78,7 +87,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
return hull
## Get the convex hull of the node with the full head size
- def getConvexHullHeadFull(self):
+ def getConvexHullHeadFull(self) -> Optional[Polygon]:
if self._node is None:
return None
@@ -87,7 +96,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
## Get convex hull of the object + head size
# In case of printing all at once this is the same as the convex hull.
# For one at the time this is area with intersection of mirrored head
- def getConvexHullHead(self):
+ def getConvexHullHead(self) -> Optional[Polygon]:
if self._node is None:
return None
@@ -101,7 +110,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
## Get convex hull of the node
# In case of printing all at once this is the same as the convex hull.
# For one at the time this is the area without the head.
- def getConvexHullBoundary(self):
+ def getConvexHullBoundary(self) -> Optional[Polygon]:
if self._node is None:
return None
@@ -111,13 +120,13 @@ class ConvexHullDecorator(SceneNodeDecorator):
return self._compute2DConvexHull()
return None
- def recomputeConvexHullDelayed(self):
+ def recomputeConvexHullDelayed(self) -> None:
if self._recompute_convex_hull_timer is not None:
self._recompute_convex_hull_timer.start()
else:
self.recomputeConvexHull()
- def recomputeConvexHull(self):
+ def recomputeConvexHull(self) -> None:
controller = Application.getInstance().getController()
root = controller.getScene().getRoot()
if self._node is None or controller.isToolOperationActive() or not self.__isDescendant(root, self._node):
@@ -132,7 +141,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
hull_node = ConvexHullNode.ConvexHullNode(self._node, convex_hull, self._raft_thickness, root)
self._convex_hull_node = hull_node
- def _onSettingValueChanged(self, key, property_name):
+ def _onSettingValueChanged(self, key: str, property_name: str) -> None:
if property_name != "value": #Not the value that was changed.
return
@@ -142,7 +151,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._init2DConvexHullCache() #Invalidate the cache.
self._onChanged()
- def _init2DConvexHullCache(self):
+ def _init2DConvexHullCache(self) -> None:
# Cache for the group code path in _compute2DConvexHull()
self._2d_convex_hull_group_child_polygon = None
self._2d_convex_hull_group_result = None
@@ -152,7 +161,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._2d_convex_hull_mesh_world_transform = None
self._2d_convex_hull_mesh_result = None
- def _compute2DConvexHull(self):
+ def _compute2DConvexHull(self) -> Polygon:
if self._node.callDecoration("isGroup"):
points = numpy.zeros((0, 2), dtype=numpy.int32)
for child in self._node.getChildren():
@@ -228,8 +237,10 @@ class ConvexHullDecorator(SceneNodeDecorator):
return offset_hull
- def _getHeadAndFans(self):
- return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32))
+ def _getHeadAndFans(self) -> Polygon:
+ if self._global_stack:
+ return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32))
+ return Polygon()
def _compute2DConvexHeadFull(self):
return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans())
@@ -245,7 +256,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
## Compensate given 2D polygon with adhesion margin
# \return 2D polygon with added margin
- def _add2DAdhesionMargin(self, poly):
+ def _add2DAdhesionMargin(self, poly: Polygon) -> Polygon:
+ if not self._global_stack:
+ return Polygon()
# Compensate for raft/skirt/brim
# Add extra margin depending on adhesion type
adhesion_type = self._global_stack.getProperty("adhesion_type", "value")
@@ -274,7 +287,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
# \param convex_hull Polygon of the original convex hull.
# \return New Polygon instance that is offset with everything that
# influences the collision area.
- def _offsetHull(self, convex_hull):
+ def _offsetHull(self, convex_hull: Polygon) -> Polygon:
horizontal_expansion = max(
self._getSettingProperty("xy_offset", "value"),
self._getSettingProperty("xy_offset_layer_0", "value")
@@ -295,12 +308,12 @@ class ConvexHullDecorator(SceneNodeDecorator):
else:
return convex_hull
- def _onChanged(self, *args):
+ def _onChanged(self, *args) -> None:
self._raft_thickness = self._build_volume.getRaftThickness()
if not args or args[0] == self._node:
self.recomputeConvexHullDelayed()
- def _onGlobalStackChanged(self):
+ def _onGlobalStackChanged(self) -> None:
if self._global_stack:
self._global_stack.propertyChanged.disconnect(self._onSettingValueChanged)
self._global_stack.containersChanged.disconnect(self._onChanged)
@@ -321,7 +334,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._onChanged()
## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property).
- def _getSettingProperty(self, setting_key, prop = "value"):
+ def _getSettingProperty(self, setting_key: str, prop: str = "value") -> Any:
+ if not self._global_stack:
+ return None
per_mesh_stack = self._node.callDecoration("getStack")
if per_mesh_stack:
return per_mesh_stack.getProperty(setting_key, prop)
@@ -339,8 +354,8 @@ class ConvexHullDecorator(SceneNodeDecorator):
# Limit_to_extruder is set. The global stack handles this then
return self._global_stack.getProperty(setting_key, prop)
- ## Returns true if node is a descendant or the same as the root node.
- def __isDescendant(self, root, node):
+ ## Returns true if node is a descendant or the same as the root node.
+ def __isDescendant(self, root: "SceneNode", node: "SceneNode") -> bool:
if node is None:
return False
if root is node:
diff --git a/cura/Scene/GCodeListDecorator.py b/cura/Scene/GCodeListDecorator.py
index 5738d0a7f2..572fea6ac4 100644
--- a/cura/Scene/GCodeListDecorator.py
+++ b/cura/Scene/GCodeListDecorator.py
@@ -1,13 +1,19 @@
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
+from typing import List
class GCodeListDecorator(SceneNodeDecorator):
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
- self._gcode_list = []
+ self._gcode_list = [] # type: List[str]
- def getGCodeList(self):
+ def getGCodeList(self) -> List[str]:
return self._gcode_list
- def setGCodeList(self, list):
+ def setGCodeList(self, list: List[str]):
self._gcode_list = list
+
+ def __deepcopy__(self, memo) -> "GCodeListDecorator":
+ copied_decorator = GCodeListDecorator()
+ copied_decorator.setGCodeList(self.getGCodeList())
+ return copied_decorator
\ No newline at end of file
diff --git a/cura/Scene/SliceableObjectDecorator.py b/cura/Scene/SliceableObjectDecorator.py
index 1cb589d9c6..982a38d667 100644
--- a/cura/Scene/SliceableObjectDecorator.py
+++ b/cura/Scene/SliceableObjectDecorator.py
@@ -2,11 +2,11 @@ from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
class SliceableObjectDecorator(SceneNodeDecorator):
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
- def isSliceable(self):
+ def isSliceable(self) -> bool:
return True
- def __deepcopy__(self, memo):
+ def __deepcopy__(self, memo) -> "SliceableObjectDecorator":
return type(self)()
diff --git a/cura/Scene/ZOffsetDecorator.py b/cura/Scene/ZOffsetDecorator.py
index d3ee5c8454..b35b17a412 100644
--- a/cura/Scene/ZOffsetDecorator.py
+++ b/cura/Scene/ZOffsetDecorator.py
@@ -1,18 +1,19 @@
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
+
## A decorator that stores the amount an object has been moved below the platform.
class ZOffsetDecorator(SceneNodeDecorator):
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
- self._z_offset = 0
+ self._z_offset = 0.
- def setZOffset(self, offset):
+ def setZOffset(self, offset: float) -> None:
self._z_offset = offset
- def getZOffset(self):
+ def getZOffset(self) -> float:
return self._z_offset
- def __deepcopy__(self, memo):
+ def __deepcopy__(self, memo) -> "ZOffsetDecorator":
copied_decorator = ZOffsetDecorator()
copied_decorator.setZOffset(self.getZOffset())
return copied_decorator
From fc333d53c5b77633a9a303054c4453f476b0bbac Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Thu, 27 Sep 2018 14:54:40 +0200
Subject: [PATCH 113/390] Replaced print job context menu
Contributes to CL-897, CL-1051
---
.../resources/qml/PrintCoreConfiguration.qml | 6 +-
.../resources/qml/PrintJobContextMenu.qml | 199 +++++
.../resources/qml/PrintJobInfoBlock.qml | 744 ++----------------
3 files changed, 253 insertions(+), 696 deletions(-)
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
index ca39d2663d..289b3f3f00 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
@@ -21,7 +21,7 @@ Item {
// Loading skeleton
Rectangle {
- visible: !extruderInfo.printCoreConfiguration;
+ visible: !printCoreConfiguration;
anchors.fill: parent;
radius: Math.round(width / 2);
color: UM.Theme.getColor("viewport_background");
@@ -29,7 +29,7 @@ Item {
// Actual content
Rectangle {
- visible: extruderInfo.printCoreConfiguration;
+ visible: printCoreConfiguration;
anchors.fill: parent;
radius: Math.round(width / 2);
border.width: UM.Theme.getSize("monitor_tab_thick_lining").width;
@@ -44,7 +44,7 @@ Item {
Label {
anchors.centerIn: parent;
font: UM.Theme.getFont("default_bold");
- text: printCoreConfiguration.position + 1;
+ text: printCoreConfiguration ? printCoreConfiguration.position + 1 : 0;
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
new file mode 100644
index 0000000000..74c4bb030c
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -0,0 +1,199 @@
+import QtQuick 2.2
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.4
+import QtGraphicalEffects 1.0
+import QtQuick.Layouts 1.1
+import QtQuick.Dialogs 1.1
+import UM 1.3 as UM
+
+Item {
+ id: root;
+ property var printJob: null;
+
+ Button {
+ id: button;
+ background: Rectangle {
+ color: UM.Theme.getColor("viewport_background");
+ height: button.height;
+ opacity: button.down || button.hovered ? 1 : 0;
+ radius: 0.5 * width;
+ width: button.width;
+ }
+ contentItem: Label {
+ color: UM.Theme.getColor("monitor_tab_text_inactive");
+ font.pixelSize: 25;
+ horizontalAlignment: Text.AlignHCenter;
+ text: button.text;
+ verticalAlignment: Text.AlignVCenter;
+ }
+ height: width;
+ hoverEnabled: true;
+ onClicked: parent.switchPopupState();
+ text: "\u22EE"; //Unicode; Three stacked points.
+ width: 35;
+ }
+
+ Popup {
+ id: popup;
+ clip: true;
+ closePolicy: Popup.CloseOnPressOutside;
+ height: contentItem.height + 2 * padding;
+ padding: 5 * screenScaleFactor; // Because shadow
+ transformOrigin: Popup.Top;
+ visible: false;
+ width: 182 * screenScaleFactor;
+ x: (button.width - width) + 26 * screenScaleFactor;
+ y: button.height + 5 * screenScaleFactor; // Because shadow
+ contentItem: Item {
+ width: popup.width
+ height: childrenRect.height + 36 * screenScaleFactor
+ anchors.topMargin: 10 * screenScaleFactor
+ anchors.bottomMargin: 10 * screenScaleFactor
+ Button {
+ id: sendToTopButton
+ text: catalog.i18nc("@label", "Move to top")
+ onClicked:
+ {
+ sendToTopConfirmationDialog.visible = true;
+ popup.close();
+ }
+ width: parent.width
+ enabled: printJob ? OutputDevice.queuedPrintJobs[0].key != printJob.key : false;
+ visible: enabled
+ anchors.top: parent.top
+ anchors.topMargin: 18 * screenScaleFactor
+ height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
+ hoverEnabled: true
+ background: Rectangle
+ {
+ opacity: sendToTopButton.down || sendToTopButton.hovered ? 1 : 0
+ color: UM.Theme.getColor("viewport_background")
+ }
+ contentItem: Label
+ {
+ text: sendToTopButton.text
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ MessageDialog
+ {
+ id: sendToTopConfirmationDialog
+ title: catalog.i18nc("@window:title", "Move print job to top")
+ icon: StandardIcon.Warning
+ text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
+ standardButtons: StandardButton.Yes | StandardButton.No
+ Component.onCompleted: visible = false
+ onYes: {
+ if (printJob) {
+ OutputDevice.sendJobToTop(printJob.key)
+ }
+ }
+ }
+
+ Button
+ {
+ id: deleteButton
+ text: catalog.i18nc("@label", "Delete")
+ onClicked:
+ {
+ deleteConfirmationDialog.visible = true;
+ popup.close();
+ }
+ width: parent.width
+ height: 39 * screenScaleFactor
+ anchors.top: sendToTopButton.bottom
+ hoverEnabled: true
+ background: Rectangle
+ {
+ opacity: deleteButton.down || deleteButton.hovered ? 1 : 0
+ color: UM.Theme.getColor("viewport_background")
+ }
+ contentItem: Label
+ {
+ text: deleteButton.text
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ MessageDialog
+ {
+ id: deleteConfirmationDialog
+ title: catalog.i18nc("@window:title", "Delete print job")
+ icon: StandardIcon.Warning
+ text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
+ standardButtons: StandardButton.Yes | StandardButton.No
+ Component.onCompleted: visible = false
+ onYes: OutputDevice.deleteJobFromQueue(printJob.key)
+ }
+ }
+
+ background: Item
+ {
+ width: popup.width
+ height: popup.height
+
+ DropShadow
+ {
+ anchors.fill: pointedRectangle
+ radius: 5
+ color: "#3F000000" // 25% shadow
+ source: pointedRectangle
+ transparentBorder: true
+ verticalOffset: 2
+ }
+
+ Item
+ {
+ id: pointedRectangle
+ width: parent.width - 10 * screenScaleFactor // Because of the shadow
+ height: parent.height - 10 * screenScaleFactor // Because of the shadow
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+
+ Rectangle
+ {
+ id: point
+ height: 14 * screenScaleFactor
+ width: 14 * screenScaleFactor
+ color: UM.Theme.getColor("setting_control")
+ transform: Rotation { angle: 45}
+ anchors.right: bloop.right
+ anchors.rightMargin: 24
+ y: 1
+ }
+
+ Rectangle
+ {
+ id: bloop
+ color: UM.Theme.getColor("setting_control")
+ width: parent.width
+ anchors.top: parent.top
+ anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
+ }
+ }
+ }
+
+ exit: Transition
+ {
+ NumberAnimation { property: "visible"; duration: 75; }
+ }
+ enter: Transition
+ {
+ NumberAnimation { property: "visible"; duration: 75; }
+ }
+
+ onClosed: visible = false
+ onOpened: visible = true
+ }
+
+ // Utils
+ function switchPopupState() {
+ popup.visible ? popup.close() : popup.open()
+ }
+}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index cb6b0fb4df..89fb8a2391 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -72,14 +72,14 @@ Item {
height: UM.Theme.getSize("monitor_tab_text_line").height;
Rectangle {
- visible: !root.printJob;
+ visible: !printJob;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
height: parent.height;
width: parent.width / 3;
}
Label {
- visible: root.printJob;
- text: root.printJob ? root.printJob.name : ""; // Supress QML warnings
+ visible: printJob;
+ text: printJob ? printJob.name : ""; // Supress QML warnings
font: UM.Theme.getFont("default_bold");
elide: Text.ElideRight;
anchors.fill: parent;
@@ -97,14 +97,14 @@ Item {
}
Rectangle {
- visible: !root.printJob;
+ visible: !printJob;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
height: parent.height;
width: parent.width / 2;
}
Label {
- visible: root.printJob;
- text: root.printJob ? root.printJob.owner : ""; // Supress QML warnings
+ visible: printJob;
+ text: printJob ? printJob.owner : ""; // Supress QML warnings
font: UM.Theme.getFont("default");
elide: Text.ElideRight;
anchors.fill: parent;
@@ -124,7 +124,7 @@ Item {
// Skeleton
Rectangle {
- visible: !root.printJob;
+ visible: !printJob;
anchors.fill: parent;
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
@@ -133,9 +133,9 @@ Item {
// Actual content
Image {
id: previewImage;
- visible: root.printJob;
- source: root.printJob.previewImageUrl;
- opacity: root.printJob.state == "error" ? 0.5 : 1.0;
+ visible: printJob;
+ source: printJob ? printJob.previewImageUrl : "";
+ opacity: printJob && printJob.state == "error" ? 0.5 : 1.0;
anchors.fill: parent;
}
@@ -145,7 +145,7 @@ Item {
source: "../svg/ultibot.svg";
/* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
not in order to determine if we show the placeholder (ultibot) image instead. */
- visible: root.printJob && previewImage.status == Image.Error;
+ visible: printJob && previewImage.status == Image.Error;
width: printJobPreview.width;
height: printJobPreview.height;
sourceSize.width: width;
@@ -156,7 +156,7 @@ Item {
UM.RecolorImage {
id: statusImage;
anchors.centerIn: printJobPreview;
- source: printJob.state == "error" ? "../svg/aborted-icon.svg" : "";
+ source: printJob && printJob.state == "error" ? "../svg/aborted-icon.svg" : "";
visible: source != "";
width: 0.5 * printJobPreview.width;
height: 0.5 * printJobPreview.height;
@@ -171,7 +171,7 @@ Item {
Rectangle {
height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
width: UM.Theme.getSize("default_lining").width;
- color: !root.printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
+ color: !printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
anchors {
horizontalCenter: parent.horizontalCenter;
verticalCenter: parent.verticalCenter;
@@ -191,28 +191,29 @@ Item {
Item {
id: targetPrinterLabel;
-
width: parent.width;
height: UM.Theme.getSize("monitor_tab_text_line").height;
-
Rectangle {
- visible: !root.printJob;
+ visible: !printJob;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
anchors.fill: parent;
}
Label {
- visible: root.printJob;
+ visible: printJob;
elide: Text.ElideRight;
font: UM.Theme.getFont("default_bold");
text: {
- if (root.printJob.assignedPrinter == null) {
- if (root.printJob.state == "error") {
- return catalog.i18nc("@label", "Waiting for: Unavailable printer");
+ if (printJob) {
+ if (printJob.assignedPrinter == null) {
+ if (printJob.state == "error") {
+ return catalog.i18nc("@label", "Waiting for: Unavailable printer");
+ }
+ return catalog.i18nc("@label", "Waiting for: First available");
+ } else {
+ return catalog.i18nc("@label", "Waiting for: ") + printJob.assignedPrinter.name;
}
- return catalog.i18nc("@label", "Waiting for: First available");
- } else {
- return catalog.i18nc("@label", "Waiting for: ") + root.printJob.assignedPrinter.name;
}
+ return "";
}
}
}
@@ -220,7 +221,7 @@ Item {
// Printer family pills
Row {
id: printerFamilyPills;
- visible: root.printJob;
+ visible: printJob;
spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
anchors {
left: parent.left;
@@ -230,7 +231,7 @@ Item {
}
height: childrenRect.height;
Repeater {
- model: printJob.compatibleMachineFamilies;
+ model: printJob ? printJob.compatibleMachineFamilies : [];
delegate: PrinterFamilyPill {
text: modelData;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
@@ -253,22 +254,34 @@ Item {
PrintCoreConfiguration {
id: leftExtruderInfo;
width: Math.round(parent.width / 2) * screenScaleFactor;
- printCoreConfiguration: root.printJob !== null ? printJob.configuration.extruderConfigurations[0] : null;
+ printCoreConfiguration: printJob !== null ? printJob.configuration.extruderConfigurations[0] : null;
}
PrintCoreConfiguration {
id: rightExtruderInfo;
width: Math.round(parent.width / 2) * screenScaleFactor;
- printCoreConfiguration: root.printJob !== null ? printJob.configuration.extruderConfigurations[1] : null;
+ printCoreConfiguration: printJob !== null ? printJob.configuration.extruderConfigurations[1] : null;
}
}
}
+
+ PrintJobContextMenu {
+ id: contextButton;
+ anchors {
+ right: mainContent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width * 3 + root.shadowRadius;
+ top: mainContent.top;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ }
+ printJob: root.printJob;
+ visible: root.printJob;
+ }
}
Rectangle {
id: configChangesBox;
width: parent.width;
height: childrenRect.height;
- visible: root.printJob && root.printJob.configurationChanges.length !== 0;
+ visible: printJob && printJob.configurationChanges.length !== 0;
// Config change toggle
Rectangle {
@@ -375,18 +388,18 @@ Item {
elide: Text.ElideRight;
font: UM.Theme.getFont("large_nonbold");
text: {
- if (root.printJob.configurationChanges.length === 0) {
+ if (!printJob || printJob.configurationChanges.length === 0) {
return "";
}
var topLine;
- if (materialsAreKnown(root.printJob)) {
- topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(root.printJob.assignedPrinter.name);
+ if (materialsAreKnown(printJob)) {
+ topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(printJob.assignedPrinter.name);
} else {
- topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(root.printJob.assignedPrinter.name);
+ topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printJob.assignedPrinter.name);
}
var result = "" + topLine +"
";
- for (var i = 0; i < root.printJob.configurationChanges.length; i++) {
- var change = root.printJob.configurationChanges[i];
+ for (var i = 0; i < printJob.configurationChanges.length; i++) {
+ var change = printJob.configurationChanges[i];
var text;
switch (change.typeOfChange) {
case "material_change":
@@ -416,9 +429,9 @@ Item {
left: parent.left;
}
visible: {
- var length = root.printJob.configurationChanges.length;
+ var length = printJob.configurationChanges.length;
for (var i = 0; i < length; i++) {
- var typeOfChange = root.printJob.configurationChanges[i].typeOfChange;
+ var typeOfChange = printJob.configurationChanges[i].typeOfChange;
if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
return false;
}
@@ -438,13 +451,13 @@ Item {
title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
icon: StandardIcon.Warning;
text: {
- var printJobName = formatPrintJobName(root.printJob.name);
+ var printJobName = formatPrintJobName(printJob.name);
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
return confirmText;
}
standardButtons: StandardButton.Yes | StandardButton.No;
Component.onCompleted: visible = false;
- onYes: OutputDevice.forceSendJob(root.printJob.key);
+ onYes: OutputDevice.forceSendJob(printJob.key);
}
}
}
@@ -486,658 +499,3 @@ Item {
return translationText;
}
}
-
-
-
-// Item
-// {
-// id: base
-
-// function haveAlert() {
-// return printJob.configurationChanges.length !== 0;
-// }
-
-// function alertHeight() {
-// return haveAlert() ? 230 : 0;
-// }
-
-// function alertText() {
-// if (printJob.configurationChanges.length === 0) {
-// return "";
-// }
-
-// var topLine;
-// if (materialsAreKnown(printJob)) {
-// topLine = catalog.i18nc("@label", "The assigned printer, %1, requires the following configuration change(s):").arg(printJob.assignedPrinter.name);
-// } else {
-// topLine = catalog.i18nc("@label", "The printer %1 is assigned, but the job contains an unknown material configuration.").arg(printJob.assignedPrinter.name);
-// }
-// var result = "" + topLine +"
";
-
-// for (var i=0; i" + text + " ";
-// }
-// return result;
-// }
-
-// function materialsAreKnown(printJob) {
-// var conf0 = printJob.configuration[0];
-// if (conf0 && !conf0.material.material) {
-// return false;
-// }
-
-// var conf1 = printJob.configuration[1];
-// if (conf1 && !conf1.material.material) {
-// return false;
-// }
-
-// return true;
-// }
-
-// function formatBuildPlateType(buildPlateType) {
-// var translationText = "";
-
-// switch (buildPlateType) {
-// case 'glass':
-// translationText = catalog.i18nc("@label", "Glass");
-// break;
-// case 'aluminum':
-// translationText = catalog.i18nc("@label", "Aluminum");
-// break;
-// default:
-// translationText = null;
-// }
-// return translationText;
-// }
-
-// function formatPrintJobName(name) {
-// var extensionsToRemove = [
-// '.gz',
-// '.gcode',
-// '.ufp'
-// ];
-
-// for (var i = 0; i < extensionsToRemove.length; i++) {
-// var extension = extensionsToRemove[i];
-
-// if (name.slice(-extension.length) === extension) {
-// name = name.substring(0, name.length - extension.length);
-// }
-// }
-
-// return name;
-// }
-
-// function isPrintJobForcable(printJob) {
-// var forcable = true;
-
-// for (var i = 0; i < printJob.configurationChanges.length; i++) {
-// var typeOfChange = printJob.configurationChanges[i].typeOfChange;
-// if (typeOfChange === 'material_insert' || typeOfChange === 'buildplate_change') {
-// forcable = false;
-// }
-// }
-
-// return forcable;
-// }
-
-// property var cardHeight: 175
-
-// height: (cardHeight + alertHeight()) * screenScaleFactor
-// property var printJob: null
-// property var shadowRadius: 5 * screenScaleFactor
-// function getPrettyTime(time)
-// {
-// return OutputDevice.formatDuration(time)
-// }
-
-// width: parent.width
-
-// UM.I18nCatalog
-// {
-// id: catalog
-// name: "cura"
-// }
-
-// Rectangle
-// {
-// id: background
-
-// height: (cardHeight + alertHeight()) * screenScaleFactor
-
-// anchors
-// {
-// top: parent.top
-// topMargin: 3 * screenScaleFactor
-// left: parent.left
-// leftMargin: base.shadowRadius
-// rightMargin: base.shadowRadius
-// right: parent.right
-// //bottom: parent.bottom - alertHeight() * screenScaleFactor
-// bottomMargin: base.shadowRadius
-// }
-
-// layer.enabled: true
-// layer.effect: DropShadow
-// {
-// radius: base.shadowRadius
-// verticalOffset: 2 * screenScaleFactor
-// color: "#3F000000" // 25% shadow
-// }
-
-// Rectangle
-// {
-// height: cardHeight * screenScaleFactor
-
-// anchors
-// {
-// top: parent.top
-// left: parent.left
-// right: parent.right
-// // bottom: parent.bottom
-// }
-
-// Item
-// {
-// // Content on the left of the infobox
-// anchors
-// {
-// top: parent.top
-// bottom: parent.bottom
-// left: parent.left
-// right: parent.horizontalCenter
-// margins: UM.Theme.getSize("wide_margin").width
-// rightMargin: UM.Theme.getSize("default_margin").width
-// }
-
-// Label
-// {
-// id: printJobName
-// text: printJob.name
-// font: UM.Theme.getFont("default_bold")
-// width: parent.width
-// elide: Text.ElideRight
-// }
-
-// Label
-// {
-// id: ownerName
-// anchors.top: printJobName.bottom
-// text: printJob.owner
-// font: UM.Theme.getFont("default")
-// opacity: 0.6
-// width: parent.width
-// elide: Text.ElideRight
-// }
-
-// Image
-// {
-// id: printJobPreview
-// source: printJob.previewImageUrl
-// anchors.top: ownerName.bottom
-// anchors.horizontalCenter: parent.horizontalCenter
-// anchors.bottom: totalTimeLabel.bottom
-// width: height
-// opacity: printJob.state == "error" ? 0.5 : 1.0
-// }
-
-// UM.RecolorImage
-// {
-// id: statusImage
-// anchors.centerIn: printJobPreview
-// source: printJob.state == "error" ? "../svg/aborted-icon.svg" : ""
-// visible: source != ""
-// width: 0.5 * printJobPreview.width
-// height: 0.5 * printJobPreview.height
-// sourceSize.width: width
-// sourceSize.height: height
-// color: "black"
-// }
-
-// Label
-// {
-// id: totalTimeLabel
-// anchors.bottom: parent.bottom
-// anchors.right: parent.right
-// font: UM.Theme.getFont("default")
-// text: printJob != null ? getPrettyTime(printJob.timeTotal) : ""
-// elide: Text.ElideRight
-// }
-// }
-
-// Item
-// {
-// // Content on the right side of the infobox.
-// anchors
-// {
-// top: parent.top
-// bottom: parent.bottom
-// left: parent.horizontalCenter
-// right: parent.right
-// margins: 2 * UM.Theme.getSize("default_margin").width
-// leftMargin: UM.Theme.getSize("default_margin").width
-// rightMargin: UM.Theme.getSize("default_margin").width / 2
-// }
-
-// Label
-// {
-// id: targetPrinterLabel
-// elide: Text.ElideRight
-// font: UM.Theme.getFont("default_bold")
-// text:
-// {
-// if(printJob.assignedPrinter == null)
-// {
-// if(printJob.state == "error")
-// {
-// return catalog.i18nc("@label", "Waiting for: Unavailable printer")
-// }
-// return catalog.i18nc("@label", "Waiting for: First available")
-// }
-// else
-// {
-// return catalog.i18nc("@label", "Waiting for: ") + printJob.assignedPrinter.name
-// }
-
-// }
-
-// anchors
-// {
-// left: parent.left
-// right: contextButton.left
-// rightMargin: UM.Theme.getSize("default_margin").width
-// }
-// }
-
-
-// function switchPopupState()
-// {
-// popup.visible ? popup.close() : popup.open()
-// }
-
-// Button
-// {
-// id: contextButton
-// text: "\u22EE" //Unicode; Three stacked points.
-// width: 35
-// height: width
-// anchors
-// {
-// right: parent.right
-// top: parent.top
-// }
-// hoverEnabled: true
-
-// background: Rectangle
-// {
-// opacity: contextButton.down || contextButton.hovered ? 1 : 0
-// width: contextButton.width
-// height: contextButton.height
-// radius: 0.5 * width
-// color: UM.Theme.getColor("viewport_background")
-// }
-// contentItem: Label
-// {
-// text: contextButton.text
-// color: UM.Theme.getColor("monitor_tab_text_inactive")
-// font.pixelSize: 25
-// verticalAlignment: Text.AlignVCenter
-// horizontalAlignment: Text.AlignHCenter
-// }
-
-// onClicked: parent.switchPopupState()
-// }
-
-// Popup
-// {
-// // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
-// id: popup
-// clip: true
-// closePolicy: Popup.CloseOnPressOutside
-// x: (parent.width - width) + 26 * screenScaleFactor
-// y: contextButton.height - 5 * screenScaleFactor // Because shadow
-// width: 182 * screenScaleFactor
-// height: contentItem.height + 2 * padding
-// visible: false
-// padding: 5 * screenScaleFactor // Because shadow
-
-// transformOrigin: Popup.Top
-// contentItem: Item
-// {
-// width: popup.width
-// height: childrenRect.height + 36 * screenScaleFactor
-// anchors.topMargin: 10 * screenScaleFactor
-// anchors.bottomMargin: 10 * screenScaleFactor
-// Button
-// {
-// id: sendToTopButton
-// text: catalog.i18nc("@label", "Move to top")
-// onClicked:
-// {
-// sendToTopConfirmationDialog.visible = true;
-// popup.close();
-// }
-// width: parent.width
-// enabled: OutputDevice.queuedPrintJobs[0].key != printJob.key
-// visible: enabled
-// anchors.top: parent.top
-// anchors.topMargin: 18 * screenScaleFactor
-// height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
-// hoverEnabled: true
-// background: Rectangle
-// {
-// opacity: sendToTopButton.down || sendToTopButton.hovered ? 1 : 0
-// color: UM.Theme.getColor("viewport_background")
-// }
-// contentItem: Label
-// {
-// text: sendToTopButton.text
-// horizontalAlignment: Text.AlignLeft
-// verticalAlignment: Text.AlignVCenter
-// }
-// }
-
-// MessageDialog
-// {
-// id: sendToTopConfirmationDialog
-// title: catalog.i18nc("@window:title", "Move print job to top")
-// icon: StandardIcon.Warning
-// text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name)
-// standardButtons: StandardButton.Yes | StandardButton.No
-// Component.onCompleted: visible = false
-// onYes: OutputDevice.sendJobToTop(printJob.key)
-// }
-
-// Button
-// {
-// id: deleteButton
-// text: catalog.i18nc("@label", "Delete")
-// onClicked:
-// {
-// deleteConfirmationDialog.visible = true;
-// popup.close();
-// }
-// width: parent.width
-// height: 39 * screenScaleFactor
-// anchors.top: sendToTopButton.bottom
-// hoverEnabled: true
-// background: Rectangle
-// {
-// opacity: deleteButton.down || deleteButton.hovered ? 1 : 0
-// color: UM.Theme.getColor("viewport_background")
-// }
-// contentItem: Label
-// {
-// text: deleteButton.text
-// horizontalAlignment: Text.AlignLeft
-// verticalAlignment: Text.AlignVCenter
-// }
-// }
-
-// MessageDialog
-// {
-// id: deleteConfirmationDialog
-// title: catalog.i18nc("@window:title", "Delete print job")
-// icon: StandardIcon.Warning
-// text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name)
-// standardButtons: StandardButton.Yes | StandardButton.No
-// Component.onCompleted: visible = false
-// onYes: OutputDevice.deleteJobFromQueue(printJob.key)
-// }
-// }
-
-// background: Item
-// {
-// width: popup.width
-// height: popup.height
-
-// DropShadow
-// {
-// anchors.fill: pointedRectangle
-// radius: 5
-// color: "#3F000000" // 25% shadow
-// source: pointedRectangle
-// transparentBorder: true
-// verticalOffset: 2
-// }
-
-// Item
-// {
-// id: pointedRectangle
-// width: parent.width - 10 * screenScaleFactor // Because of the shadow
-// height: parent.height - 10 * screenScaleFactor // Because of the shadow
-// anchors.horizontalCenter: parent.horizontalCenter
-// anchors.verticalCenter: parent.verticalCenter
-
-// Rectangle
-// {
-// id: point
-// height: 14 * screenScaleFactor
-// width: 14 * screenScaleFactor
-// color: UM.Theme.getColor("setting_control")
-// transform: Rotation { angle: 45}
-// anchors.right: bloop.right
-// anchors.rightMargin: 24
-// y: 1
-// }
-
-// Rectangle
-// {
-// id: bloop
-// color: UM.Theme.getColor("setting_control")
-// width: parent.width
-// anchors.top: parent.top
-// anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
-// anchors.bottom: parent.bottom
-// anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
-// }
-// }
-// }
-
-// exit: Transition
-// {
-// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
-// NumberAnimation { property: "visible"; duration: 75; }
-// }
-// enter: Transition
-// {
-// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
-// NumberAnimation { property: "visible"; duration: 75; }
-// }
-
-// onClosed: visible = false
-// onOpened: visible = true
-// }
-
-// Row
-// {
-// id: printerFamilyPills
-// spacing: 0.5 * UM.Theme.getSize("default_margin").width
-// anchors
-// {
-// left: parent.left
-// right: parent.right
-// bottom: extrudersInfo.top
-// bottomMargin: UM.Theme.getSize("default_margin").height
-// }
-// height: childrenRect.height
-// Repeater
-// {
-// model: printJob.compatibleMachineFamilies
-
-// delegate: PrinterFamilyPill
-// {
-// text: modelData
-// color: UM.Theme.getColor("viewport_background")
-// padding: 3 * screenScaleFactor
-// }
-// }
-// }
-// // PrintCore && Material config
-// Row
-// {
-// id: extrudersInfo
-// anchors.bottom: parent.bottom
-
-// anchors
-// {
-// left: parent.left
-// right: parent.right
-// }
-// height: childrenRect.height
-
-// spacing: UM.Theme.getSize("default_margin").width
-
-// PrintCoreConfiguration
-// {
-// id: leftExtruderInfo
-// width: Math.round(parent.width / 2) * screenScaleFactor
-// printCoreConfiguration: printJob.configuration.extruderConfigurations[0]
-// }
-
-// PrintCoreConfiguration
-// {
-// id: rightExtruderInfo
-// width: Math.round(parent.width / 2) * screenScaleFactor
-// printCoreConfiguration: printJob.configuration.extruderConfigurations[1]
-// }
-// }
-
-// }
-// }
-// Rectangle
-// {
-// height: cardHeight * screenScaleFactor
-// color: UM.Theme.getColor("viewport_background")
-// width: 2 * screenScaleFactor
-// anchors.top: parent.top
-// anchors.margins: UM.Theme.getSize("default_margin").height
-// anchors.horizontalCenter: parent.horizontalCenter
-// }
-
-// // Alert / Configuration change box
-// Rectangle
-// {
-// height: alertHeight() * screenScaleFactor
-
-// anchors.left: parent.left
-// anchors.right: parent.right
-// anchors.bottom: parent.bottom
-
-// color: "#ff00ff"
-// ColumnLayout
-// {
-// anchors.fill: parent
-// RowLayout
-// {
-// Item
-// {
-// Layout.fillWidth: true
-// }
-
-// Label
-// {
-// font: UM.Theme.getFont("default_bold")
-// text: "Configuration change"
-// }
-
-// UM.RecolorImage
-// {
-// id: collapseIcon
-// width: 15
-// height: 15
-// sourceSize.width: width
-// sourceSize.height: height
-
-// // FIXME
-// source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom")
-// color: "black"
-// }
-
-// Item
-// {
-// Layout.fillWidth: true
-// }
-
-// }
-
-// Rectangle
-// {
-// Layout.fillHeight: true
-// Layout.fillWidth: true
-// color: "red"
-
-// Rectangle
-// {
-// color: "green"
-// width: childrenRect.width
-
-// anchors.horizontalCenter: parent.horizontalCenter
-// anchors.top: parent.top
-// anchors.bottom: parent.bottom
-
-// ColumnLayout
-// {
-// width: childrenRect.width
-
-// anchors.top: parent.top
-// anchors.bottom: parent.bottom
-
-// Text
-// {
-// Layout.alignment: Qt.AlignTop
-
-// textFormat: Text.StyledText
-// font: UM.Theme.getFont("default_bold")
-// text: alertText()
-// }
-
-// Button
-// {
-// visible: isPrintJobForcable(printJob)
-// text: catalog.i18nc("@label", "Override")
-// onClicked: {
-// overrideConfirmationDialog.visible = true;
-// }
-// }
-
-// // Spacer
-// Item
-// {
-// Layout.fillHeight: true
-// }
-// }
-// }
-// }
-// }
-// }
-
-// MessageDialog
-// {
-// id: overrideConfirmationDialog
-// title: catalog.i18nc("@window:title", "Override configuration configuration and start print")
-// icon: StandardIcon.Warning
-// text: {
-// var printJobName = formatPrintJobName(printJob.name);
-// var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
-// return confirmText;
-// }
-
-// standardButtons: StandardButton.Yes | StandardButton.No
-// Component.onCompleted: visible = false
-// onYes: OutputDevice.forceSendJob(printJob.key)
-// }
-// }
-// }
\ No newline at end of file
From 1467e703ae121c3f2fa02ee7258bdeba63f80c5c Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 15:16:46 +0200
Subject: [PATCH 114/390] No longer make BuildVolume set max bounds.
We didn't use it anymore and it added an extra requirement for buildvolume to depend on Application
---
cura/BuildVolume.py | 2 --
1 file changed, 2 deletions(-)
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index 4059283a32..9d2f5c1f90 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -479,8 +479,6 @@ class BuildVolume(SceneNode):
maximum = Vector(max_w - bed_adhesion_size - 1, max_h - self._raft_thickness - self._extra_z_clearance, max_d - disallowed_area_size + bed_adhesion_size - 1)
)
- self._application.getController().getScene()._maximum_bounds = scale_to_max_bounds
-
self.updateNodeBoundaryCheck()
def getBoundingBox(self) -> AxisAlignedBox:
From b58c01400baf563bb537d6bc49511c898b1b9689 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 15:28:53 +0200
Subject: [PATCH 115/390] Updated typing & documentation
---
cura/Scene/ConvexHullDecorator.py | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index 85d1e8e309..a78f559aa1 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -15,8 +15,6 @@ import numpy
from typing import TYPE_CHECKING, Any, Optional
-
-
if TYPE_CHECKING:
from UM.Scene.SceneNode import SceneNode
from cura.Settings.GlobalStack import GlobalStack
@@ -35,10 +33,11 @@ class ConvexHullDecorator(SceneNodeDecorator):
# Make sure the timer is created on the main thread
self._recompute_convex_hull_timer = None # type: Optional[QTimer]
- Application.getInstance().callLater(self.createRecomputeConvexHullTimer)
+
+ if Application.getInstance() is not None:
+ Application.getInstance().callLater(self.createRecomputeConvexHullTimer)
self._raft_thickness = 0.0
- # For raft thickness, DRY
self._build_volume = Application.getInstance().getBuildVolume()
self._build_volume.raftThicknessChanged.connect(self._onChanged)
@@ -72,7 +71,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
def __deepcopy__(self, memo):
return ConvexHullDecorator()
- ## Get the unmodified 2D projected convex hull of the node
+ ## Get the unmodified 2D projected convex hull of the node (if any)
def getConvexHull(self) -> Optional[Polygon]:
if self._node is None:
return None
@@ -120,6 +119,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
return self._compute2DConvexHull()
return None
+ ## The same as recomputeConvexHull, but using a timer if it was set.
def recomputeConvexHullDelayed(self) -> None:
if self._recompute_convex_hull_timer is not None:
self._recompute_convex_hull_timer.start()
@@ -142,13 +142,13 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._convex_hull_node = hull_node
def _onSettingValueChanged(self, key: str, property_name: str) -> None:
- if property_name != "value": #Not the value that was changed.
+ if property_name != "value": # Not the value that was changed.
return
if key in self._affected_settings:
self._onChanged()
if key in self._influencing_settings:
- self._init2DConvexHullCache() #Invalidate the cache.
+ self._init2DConvexHullCache() # Invalidate the cache.
self._onChanged()
def _init2DConvexHullCache(self) -> None:
@@ -161,7 +161,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
self._2d_convex_hull_mesh_world_transform = None
self._2d_convex_hull_mesh_result = None
- def _compute2DConvexHull(self) -> Polygon:
+ def _compute2DConvexHull(self) -> Optional[Polygon]:
if self._node.callDecoration("isGroup"):
points = numpy.zeros((0, 2), dtype=numpy.int32)
for child in self._node.getChildren():
@@ -188,8 +188,6 @@ class ConvexHullDecorator(SceneNodeDecorator):
else:
offset_hull = None
- mesh = None
- world_transform = None
if self._node.getMeshData():
mesh = self._node.getMeshData()
world_transform = self._node.getWorldTransformation()
@@ -242,10 +240,10 @@ class ConvexHullDecorator(SceneNodeDecorator):
return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32))
return Polygon()
- def _compute2DConvexHeadFull(self):
+ def _compute2DConvexHeadFull(self) -> Polygon:
return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans())
- def _compute2DConvexHeadMin(self):
+ def _compute2DConvexHeadMin(self) -> Polygon:
headAndFans = self._getHeadAndFans()
mirrored = headAndFans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically.
head_and_fans = self._getHeadAndFans().intersectionConvexHulls(mirrored)
@@ -276,7 +274,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
else:
raise Exception("Unknown bed adhesion type. Did you forget to update the convex hull calculations for your new bed adhesion type?")
- # adjust head_and_fans with extra margin
+ # Adjust head_and_fans with extra margin
if extra_margin > 0:
extra_margin_polygon = Polygon.approximatedCircle(extra_margin)
poly = poly.getMinkowskiHull(extra_margin_polygon)
@@ -354,7 +352,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
# Limit_to_extruder is set. The global stack handles this then
return self._global_stack.getProperty(setting_key, prop)
- ## Returns true if node is a descendant or the same as the root node.
+ ## Returns True if node is a descendant or the same as the root node.
def __isDescendant(self, root: "SceneNode", node: "SceneNode") -> bool:
if node is None:
return False
From d7901907aff0709c65d0f79439e073c8d3983c8d Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 15:37:08 +0200
Subject: [PATCH 116/390] Fix typing
---
cura/PrinterOutput/ConfigurationModel.py | 16 ++++++++--------
cura/Scene/ConvexHullDecorator.py | 21 +++++++++++++--------
2 files changed, 21 insertions(+), 16 deletions(-)
diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py
index a3d6afd01d..b3e8373745 100644
--- a/cura/PrinterOutput/ConfigurationModel.py
+++ b/cura/PrinterOutput/ConfigurationModel.py
@@ -13,20 +13,20 @@ class ConfigurationModel(QObject):
configurationChanged = pyqtSignal()
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
- self._printer_type = None
+ self._printer_type = ""
self._extruder_configurations = [] # type: List[ExtruderConfigurationModel]
- self._buildplate_configuration = None
+ self._buildplate_configuration = ""
def setPrinterType(self, printer_type):
self._printer_type = printer_type
@pyqtProperty(str, fset = setPrinterType, notify = configurationChanged)
- def printerType(self):
+ def printerType(self) -> str:
return self._printer_type
- def setExtruderConfigurations(self, extruder_configurations):
+ def setExtruderConfigurations(self, extruder_configurations: List[ExtruderConfigurationModel]):
if self._extruder_configurations != extruder_configurations:
self._extruder_configurations = extruder_configurations
@@ -39,16 +39,16 @@ class ConfigurationModel(QObject):
def extruderConfigurations(self):
return self._extruder_configurations
- def setBuildplateConfiguration(self, buildplate_configuration):
+ def setBuildplateConfiguration(self, buildplate_configuration: str) -> None:
self._buildplate_configuration = buildplate_configuration
@pyqtProperty(str, fset = setBuildplateConfiguration, notify = configurationChanged)
- def buildplateConfiguration(self):
+ def buildplateConfiguration(self) -> str:
return self._buildplate_configuration
## This method is intended to indicate whether the configuration is valid or not.
# The method checks if the mandatory fields are or not set
- def isValid(self):
+ def isValid(self) -> bool:
if not self._extruder_configurations:
return False
for configuration in self._extruder_configurations:
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index a78f559aa1..31e21df6bf 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -78,7 +78,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
hull = self._compute2DConvexHull()
- if self._global_stack and self._node:
+ if self._global_stack and self._node and hull is not None:
# Parent can be None if node is just loaded.
if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")):
hull = hull.getMinkowskiHull(Polygon(numpy.array(self._global_stack.getProperty("machine_head_polygon", "value"), numpy.float32)))
@@ -240,17 +240,22 @@ class ConvexHullDecorator(SceneNodeDecorator):
return Polygon(numpy.array(self._global_stack.getHeadAndFansCoordinates(), numpy.float32))
return Polygon()
- def _compute2DConvexHeadFull(self) -> Polygon:
- return self._compute2DConvexHull().getMinkowskiHull(self._getHeadAndFans())
+ def _compute2DConvexHeadFull(self) -> Optional[Polygon]:
+ convex_hull = self._compute2DConvexHeadFull()
+ if convex_hull:
+ return convex_hull.getMinkowskiHull(self._getHeadAndFans())
+ return None
- def _compute2DConvexHeadMin(self) -> Polygon:
- headAndFans = self._getHeadAndFans()
- mirrored = headAndFans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically.
+ def _compute2DConvexHeadMin(self) -> Optional[Polygon]:
+ head_and_fans = self._getHeadAndFans()
+ mirrored = head_and_fans.mirror([0, 0], [0, 1]).mirror([0, 0], [1, 0]) # Mirror horizontally & vertically.
head_and_fans = self._getHeadAndFans().intersectionConvexHulls(mirrored)
# Min head hull is used for the push free
- min_head_hull = self._compute2DConvexHull().getMinkowskiHull(head_and_fans)
- return min_head_hull
+ convex_hull = self._compute2DConvexHeadFull()
+ if convex_hull:
+ return convex_hull.getMinkowskiHull(head_and_fans)
+ return None
## Compensate given 2D polygon with adhesion margin
# \return 2D polygon with added margin
From 889035ebfadb50cb567860b50824a98fc348ac45 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 15:42:12 +0200
Subject: [PATCH 117/390] Fixed typo
---
cura/PrinterOutput/ConfigurationModel.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/PrinterOutput/ConfigurationModel.py b/cura/PrinterOutput/ConfigurationModel.py
index b3e8373745..89e609c913 100644
--- a/cura/PrinterOutput/ConfigurationModel.py
+++ b/cura/PrinterOutput/ConfigurationModel.py
@@ -26,7 +26,7 @@ class ConfigurationModel(QObject):
def printerType(self) -> str:
return self._printer_type
- def setExtruderConfigurations(self, extruder_configurations: List[ExtruderConfigurationModel]):
+ def setExtruderConfigurations(self, extruder_configurations: List["ExtruderConfigurationModel"]):
if self._extruder_configurations != extruder_configurations:
self._extruder_configurations = extruder_configurations
From c15f8aa6935736bb1ed90c877a0fd2399d65d707 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 15:54:23 +0200
Subject: [PATCH 118/390] Move printer type checking to where it belongs;
inside the UM3 plugin.
---
.../PrinterOutput/NetworkedPrinterOutputDevice.py | 15 +--------------
.../src/UM3OutputDevicePlugin.py | 13 +++++++++++++
2 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
index 94f86f19a3..d9c5707a03 100644
--- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
+++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
@@ -53,21 +53,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
self._sending_gcode = False
self._compressing_gcode = False
self._gcode = [] # type: List[str]
-
self._connection_state_before_timeout = None # type: Optional[ConnectionState]
- printer_type = self._properties.get(b"machine", b"").decode("utf-8")
- printer_type_identifiers = {
- "9066": "ultimaker3",
- "9511": "ultimaker3_extended",
- "9051": "ultimaker_s5"
- }
- self._printer_type = "Unknown"
- for key, value in printer_type_identifiers.items():
- if printer_type.startswith(key):
- self._printer_type = value
- break
-
def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None:
raise NotImplementedError("requestWrite needs to be implemented")
@@ -341,7 +328,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
@pyqtProperty(str, constant = True)
def printerType(self) -> str:
- return self._printer_type
+ return self._properties.get(b"printer_type", b"Unknown").decode("utf-8")
## IP adress of this printer
@pyqtProperty(str, constant = True)
diff --git a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py
index f4749a6747..9c070f2de2 100644
--- a/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py
+++ b/plugins/UM3NetworkPrinting/src/UM3OutputDevicePlugin.py
@@ -260,6 +260,19 @@ class UM3OutputDevicePlugin(OutputDevicePlugin):
# or "Legacy" UM3 device.
cluster_size = int(properties.get(b"cluster_size", -1))
+ printer_type = properties.get(b"machine", b"").decode("utf-8")
+ printer_type_identifiers = {
+ "9066": "ultimaker3",
+ "9511": "ultimaker3_extended",
+ "9051": "ultimaker_s5"
+ }
+
+ for key, value in printer_type_identifiers.items():
+ if printer_type.startswith(key):
+ properties[b"printer_type"] = bytes(value, encoding="utf8")
+ break
+ else:
+ properties[b"printer_type"] = b"Unknown"
if cluster_size >= 0:
device = ClusterUM3OutputDevice.ClusterUM3OutputDevice(name, address, properties)
else:
From 7310a677ced78acab279bfc2a8677ebe1b4bd084 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 16:07:18 +0200
Subject: [PATCH 119/390] Clean up more code
This fixes some typing and moves a property to protected, as it should be
---
cura/Machines/ContainerNode.py | 13 +++++--------
cura/Machines/MaterialManager.py | 1 -
.../Models/SettingVisibilityPresetsModel.py | 4 ++--
cura/Machines/QualityChangesGroup.py | 4 ++--
cura/Machines/QualityNode.py | 8 ++++----
5 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py
index 0d44c7c4a3..eef1c63127 100644
--- a/cura/Machines/ContainerNode.py
+++ b/cura/Machines/ContainerNode.py
@@ -9,9 +9,6 @@ from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Logger import Logger
from UM.Settings.InstanceContainer import InstanceContainer
-if TYPE_CHECKING:
- from cura.Machines.QualityGroup import QualityGroup
-
##
# A metadata / container combination. Use getContainer() to get the container corresponding to the metadata.
@@ -24,11 +21,11 @@ if TYPE_CHECKING:
# This is used in Variant, Material, and Quality Managers.
#
class ContainerNode:
- __slots__ = ("_metadata", "container", "children_map")
+ __slots__ = ("_metadata", "_container", "children_map")
def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
self._metadata = metadata
- self.container = None
+ self._container = None # type: Optional[InstanceContainer]
self.children_map = OrderedDict() # type: ignore # This is because it's children are supposed to override it.
## Get an entry value from the metadata
@@ -50,7 +47,7 @@ class ContainerNode:
Logger.log("e", "Cannot get container for a ContainerNode without metadata.")
return None
- if self.container is None:
+ if self._container is None:
container_id = self._metadata["id"]
from UM.Settings.ContainerRegistry import ContainerRegistry
container_list = ContainerRegistry.getInstance().findInstanceContainers(id = container_id)
@@ -59,9 +56,9 @@ class ContainerNode:
error_message = ConfigurationErrorMessage.getInstance()
error_message.addFaultyContainers(container_id)
return None
- self.container = container_list[0]
+ self._container = container_list[0]
- return self.container
+ return self._container
def __str__(self) -> str:
return "%s[%s]" % (self.__class__.__name__, self.getMetaDataEntry("id"))
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index 0ca9047620..be97fbc161 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -21,7 +21,6 @@ from .VariantType import VariantType
if TYPE_CHECKING:
from UM.Settings.DefinitionContainer import DefinitionContainer
- from UM.Settings.InstanceContainer import InstanceContainer
from cura.Settings.GlobalStack import GlobalStack
from cura.Settings.ExtruderStack import ExtruderStack
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index 3062e83889..d5fa51d20a 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -58,7 +58,7 @@ class SettingVisibilityPresetsModel(ListModel):
break
return result
- def _populate(self):
+ def _populate(self) -> None:
from cura.CuraApplication import CuraApplication
items = []
for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset):
@@ -147,7 +147,7 @@ class SettingVisibilityPresetsModel(ListModel):
def activePreset(self) -> str:
return self._active_preset_item["id"]
- def _onPreferencesChanged(self, name: str):
+ def _onPreferencesChanged(self, name: str) -> None:
if name != "general/visible_settings":
return
diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py
index 3dcf2ab1c8..7844b935dc 100644
--- a/cura/Machines/QualityChangesGroup.py
+++ b/cura/Machines/QualityChangesGroup.py
@@ -24,9 +24,9 @@ class QualityChangesGroup(QualityGroup):
ConfigurationErrorMessage.getInstance().addFaultyContainers(node.getMetaDataEntry("id"))
return
- if extruder_position is None: #Then we're a global quality changes profile.
+ if extruder_position is None: # Then we're a global quality changes profile.
self.node_for_global = node
- else: #This is an extruder's quality changes profile.
+ else: # This is an extruder's quality changes profile.
self.nodes_for_extruders[extruder_position] = node
def __str__(self) -> str:
diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py
index a821a1e15d..991388a4bd 100644
--- a/cura/Machines/QualityNode.py
+++ b/cura/Machines/QualityNode.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Dict, cast
+from typing import Optional, Dict, cast, Any
from .ContainerNode import ContainerNode
from .QualityChangesGroup import QualityChangesGroup
@@ -12,21 +12,21 @@ from .QualityChangesGroup import QualityChangesGroup
#
class QualityNode(ContainerNode):
- def __init__(self, metadata: Optional[dict] = None) -> None:
+ def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None:
super().__init__(metadata = metadata)
self.quality_type_map = {} # type: Dict[str, QualityNode] # quality_type -> QualityNode for InstanceContainer
def getChildNode(self, child_key: str) -> Optional["QualityNode"]:
return self.children_map.get(child_key)
- def addQualityMetadata(self, quality_type: str, metadata: dict):
+ def addQualityMetadata(self, quality_type: str, metadata: Dict[str, Any]):
if quality_type not in self.quality_type_map:
self.quality_type_map[quality_type] = QualityNode(metadata)
def getQualityNode(self, quality_type: str) -> Optional["QualityNode"]:
return self.quality_type_map.get(quality_type)
- def addQualityChangesMetadata(self, quality_type: str, metadata: dict):
+ def addQualityChangesMetadata(self, quality_type: str, metadata: Dict[str, Any]):
if quality_type not in self.quality_type_map:
self.quality_type_map[quality_type] = QualityNode()
quality_type_node = self.quality_type_map[quality_type]
From f585afe77bdff9653784242005e1728b972028d3 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 17:31:45 +0200
Subject: [PATCH 120/390] Fix spacing
---
cura/Settings/GlobalStack.py | 1 +
tests/Settings/TestGlobalStack.py | 43 +++++++++++++++++++++++++++++--
2 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index e2f7df41ea..517b45eb98 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -23,6 +23,7 @@ from .CuraContainerStack import CuraContainerStack
if TYPE_CHECKING:
from cura.Settings.ExtruderStack import ExtruderStack
+
## Represents the Global or Machine stack and its related containers.
#
class GlobalStack(CuraContainerStack):
diff --git a/tests/Settings/TestGlobalStack.py b/tests/Settings/TestGlobalStack.py
index f8052aa4bb..0f1579f78b 100755
--- a/tests/Settings/TestGlobalStack.py
+++ b/tests/Settings/TestGlobalStack.py
@@ -15,6 +15,7 @@ import UM.Settings.SettingDefinition #To add settings to the definition.
from cura.Settings.cura_empty_instance_containers import empty_container
+
## Gets an instance container with a specified container type.
#
# \param container_type The type metadata for the instance container.
@@ -24,22 +25,27 @@ def getInstanceContainer(container_type) -> InstanceContainer:
container.setMetaDataEntry("type", container_type)
return container
+
class DefinitionContainerSubClass(DefinitionContainer):
def __init__(self):
super().__init__(container_id = "SubDefinitionContainer")
+
class InstanceContainerSubClass(InstanceContainer):
def __init__(self, container_type):
super().__init__(container_id = "SubInstanceContainer")
self.setMetaDataEntry("type", container_type)
+
#############################START OF TEST CASES################################
+
## Tests whether adding a container is properly forbidden.
def test_addContainer(global_stack):
with pytest.raises(InvalidOperationError):
global_stack.addContainer(unittest.mock.MagicMock())
+
## Tests adding extruders to the global stack.
def test_addExtruder(global_stack):
mock_definition = unittest.mock.MagicMock()
@@ -67,6 +73,7 @@ def test_addExtruder(global_stack):
# global_stack.addExtruder(unittest.mock.MagicMock())
assert len(global_stack.extruders) == 2 #Didn't add the faulty extruder.
+
#Tests setting user changes profiles to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),
@@ -77,6 +84,7 @@ def test_constrainUserChangesInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.userChanges = container
+
#Tests setting user changes profiles.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "user"),
@@ -85,6 +93,7 @@ def test_constrainUserChangesInvalid(container, global_stack):
def test_constrainUserChangesValid(container, global_stack):
global_stack.userChanges = container #Should not give an error.
+
#Tests setting quality changes profiles to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),
@@ -95,6 +104,7 @@ def test_constrainQualityChangesInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.qualityChanges = container
+
#Test setting quality changes profiles.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "quality_changes"),
@@ -103,6 +113,7 @@ def test_constrainQualityChangesInvalid(container, global_stack):
def test_constrainQualityChangesValid(container, global_stack):
global_stack.qualityChanges = container #Should not give an error.
+
#Tests setting quality profiles to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),
@@ -113,6 +124,7 @@ def test_constrainQualityInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.quality = container
+
#Test setting quality profiles.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "quality"),
@@ -121,6 +133,7 @@ def test_constrainQualityInvalid(container, global_stack):
def test_constrainQualityValid(container, global_stack):
global_stack.quality = container #Should not give an error.
+
#Tests setting materials to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),
@@ -131,6 +144,7 @@ def test_constrainMaterialInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.material = container
+
#Test setting materials.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "material"),
@@ -139,6 +153,7 @@ def test_constrainMaterialInvalid(container, global_stack):
def test_constrainMaterialValid(container, global_stack):
global_stack.material = container #Should not give an error.
+
#Tests setting variants to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),
@@ -149,6 +164,7 @@ def test_constrainVariantInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.variant = container
+
#Test setting variants.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "variant"),
@@ -157,6 +173,7 @@ def test_constrainVariantInvalid(container, global_stack):
def test_constrainVariantValid(container, global_stack):
global_stack.variant = container #Should not give an error.
+
#Tests setting definition changes profiles to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong container type"),
@@ -167,6 +184,7 @@ def test_constrainDefinitionChangesInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.definitionChanges = container
+
#Test setting definition changes profiles.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "definition_changes"),
@@ -175,6 +193,7 @@ def test_constrainDefinitionChangesInvalid(container, global_stack):
def test_constrainDefinitionChangesValid(container, global_stack):
global_stack.definitionChanges = container #Should not give an error.
+
#Tests setting definitions to invalid containers.
@pytest.mark.parametrize("container", [
getInstanceContainer(container_type = "wrong class"),
@@ -184,6 +203,7 @@ def test_constrainDefinitionInvalid(container, global_stack):
with pytest.raises(InvalidContainerError): #Invalid container, should raise an error.
global_stack.definition = container
+
#Test setting definitions.
@pytest.mark.parametrize("container", [
DefinitionContainer(container_id = "DefinitionContainer"),
@@ -192,6 +212,7 @@ def test_constrainDefinitionInvalid(container, global_stack):
def test_constrainDefinitionValid(container, global_stack):
global_stack.definition = container #Should not give an error.
+
## Tests whether deserialising completes the missing containers with empty ones. The initial containers are just the
# definition and the definition_changes (that cannot be empty after CURA-5281)
def test_deserializeCompletesEmptyContainers(global_stack):
@@ -207,6 +228,7 @@ def test_deserializeCompletesEmptyContainers(global_stack):
continue
assert global_stack.getContainer(container_type_index) == empty_container #All others need to be empty.
+
## Tests whether an instance container with the wrong type gets removed when deserialising.
def test_deserializeRemovesWrongInstanceContainer(global_stack):
global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = getInstanceContainer(container_type = "wrong type")
@@ -217,6 +239,7 @@ def test_deserializeRemovesWrongInstanceContainer(global_stack):
assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty.
+
## Tests whether a container with the wrong class gets removed when deserialising.
def test_deserializeRemovesWrongContainerClass(global_stack):
global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = DefinitionContainer(container_id = "wrong class")
@@ -227,6 +250,7 @@ def test_deserializeRemovesWrongContainerClass(global_stack):
assert global_stack.quality == global_stack._empty_instance_container #Replaced with empty.
+
## Tests whether an instance container in the definition spot results in an error.
def test_deserializeWrongDefinitionClass(global_stack):
global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Definition] = getInstanceContainer(container_type = "definition") #Correct type but wrong class.
@@ -235,6 +259,7 @@ def test_deserializeWrongDefinitionClass(global_stack):
with pytest.raises(UM.Settings.ContainerStack.InvalidContainerStackError): #Must raise an error that there is no definition container.
global_stack.deserialize("")
+
## Tests whether an instance container with the wrong type is moved into the correct slot by deserialising.
def test_deserializeMoveInstanceContainer(global_stack):
global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Quality] = getInstanceContainer(container_type = "material") #Not in the correct spot.
@@ -246,6 +271,7 @@ def test_deserializeMoveInstanceContainer(global_stack):
assert global_stack.quality == empty_container
assert global_stack.material != empty_container
+
## Tests whether a definition container in the wrong spot is moved into the correct spot by deserialising.
def test_deserializeMoveDefinitionContainer(global_stack):
global_stack._containers[cura.Settings.CuraContainerStack._ContainerIndexes.Material] = DefinitionContainer(container_id = "some definition") #Not in the correct spot.
@@ -256,6 +282,7 @@ def test_deserializeMoveDefinitionContainer(global_stack):
assert global_stack.material == empty_container
assert global_stack.definition != empty_container
+
## Tests whether getProperty properly applies the stack-like behaviour on its containers.
def test_getPropertyFallThrough(global_stack):
#A few instance container mocks to put in the stack.
@@ -298,6 +325,7 @@ def test_getPropertyFallThrough(global_stack):
global_stack.userChanges = mock_layer_heights[container_indexes.UserChanges]
assert global_stack.getProperty("layer_height", "value") == container_indexes.UserChanges
+
## In definitions, test whether having no resolve allows us to find the value.
def test_getPropertyNoResolveInDefinition(global_stack):
value = unittest.mock.MagicMock() #Just sets the value for bed temperature.
@@ -307,6 +335,7 @@ def test_getPropertyNoResolveInDefinition(global_stack):
global_stack.definition = value
assert global_stack.getProperty("material_bed_temperature", "value") == 10 #No resolve, so fall through to value.
+
## In definitions, when the value is asked and there is a resolve function, it must get the resolve first.
def test_getPropertyResolveInDefinition(global_stack):
resolve_and_value = unittest.mock.MagicMock() #Sets the resolve and value for bed temperature.
@@ -316,6 +345,7 @@ def test_getPropertyResolveInDefinition(global_stack):
global_stack.definition = resolve_and_value
assert global_stack.getProperty("material_bed_temperature", "value") == 7.5 #Resolve wins in the definition.
+
## In instance containers, when the value is asked and there is a resolve function, it must get the value first.
def test_getPropertyResolveInInstance(global_stack):
container_indices = cura.Settings.CuraContainerStack._ContainerIndexes
@@ -342,6 +372,7 @@ def test_getPropertyResolveInInstance(global_stack):
global_stack.userChanges = instance_containers[container_indices.UserChanges]
assert global_stack.getProperty("material_bed_temperature", "value") == 5
+
## Tests whether the value in instances gets evaluated before the resolve in definitions.
def test_getPropertyInstancesBeforeResolve(global_stack):
value = unittest.mock.MagicMock() #Sets just the value.
@@ -356,6 +387,7 @@ def test_getPropertyInstancesBeforeResolve(global_stack):
assert global_stack.getProperty("material_bed_temperature", "value") == 10
+
## Tests whether the hasUserValue returns true for settings that are changed in the user-changes container.
def test_hasUserValueUserChanges(global_stack):
container = unittest.mock.MagicMock()
@@ -367,6 +399,7 @@ def test_hasUserValueUserChanges(global_stack):
assert not global_stack.hasUserValue("infill_sparse_density")
assert not global_stack.hasUserValue("")
+
## Tests whether the hasUserValue returns true for settings that are changed in the quality-changes container.
def test_hasUserValueQualityChanges(global_stack):
container = unittest.mock.MagicMock()
@@ -378,6 +411,7 @@ def test_hasUserValueQualityChanges(global_stack):
assert not global_stack.hasUserValue("infill_sparse_density")
assert not global_stack.hasUserValue("")
+
## Tests whether a container in some other place on the stack is correctly not recognised as user value.
def test_hasNoUserValue(global_stack):
container = unittest.mock.MagicMock()
@@ -387,21 +421,25 @@ def test_hasNoUserValue(global_stack):
assert not global_stack.hasUserValue("layer_height") #However this container is quality, so it's not a user value.
+
## Tests whether inserting a container is properly forbidden.
def test_insertContainer(global_stack):
with pytest.raises(InvalidOperationError):
global_stack.insertContainer(0, unittest.mock.MagicMock())
+
## Tests whether removing a container is properly forbidden.
def test_removeContainer(global_stack):
with pytest.raises(InvalidOperationError):
global_stack.removeContainer(unittest.mock.MagicMock())
+
## Tests whether changing the next stack is properly forbidden.
def test_setNextStack(global_stack):
with pytest.raises(InvalidOperationError):
global_stack.setNextStack(unittest.mock.MagicMock())
+
## Tests setting properties directly on the global stack.
@pytest.mark.parametrize("key, property, value", [
("layer_height", "value", 0.1337),
@@ -415,6 +453,7 @@ def test_setPropertyUser(key, property, value, global_stack):
user_changes.getMetaDataEntry = unittest.mock.MagicMock(return_value = "user")
global_stack.userChanges = user_changes
- global_stack.setProperty(key, property, value) #The actual test.
+ global_stack.setProperty(key, property, value) # The actual test.
- global_stack.userChanges.setProperty.assert_called_once_with(key, property, value, None, False) #Make sure that the user container gets a setProperty call.
\ No newline at end of file
+ # Make sure that the user container gets a setProperty call.
+ global_stack.userChanges.setProperty.assert_called_once_with(key, property, value, None, False)
\ No newline at end of file
From dc2c074bc0b5297bf80a20d962bda36cf12c75e5 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Thu, 16 Aug 2018 15:34:05 +0200
Subject: [PATCH 121/390] Verbose output for Linux CI
---
Jenkinsfile | 44 ++++++++++++++++++++++++++++++++++++++++---
cmake/CuraTests.cmake | 2 +-
2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 4f755dcae2..35f07d3987 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -52,10 +52,48 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
// Try and run the unit tests. If this stage fails, we consider the build to be "unstable".
stage('Unit Test') {
- try {
+ if (isUnix()) {
+ // For Linux to show everything
+ def branch = env.BRANCH_NAME
+ if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) {
+ branch = "master"
+ }
+ def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}")
+
+ try {
+ sh """
+ cd ..
+ export PYTHONPATH=.:"${uranium_dir}"
+ ${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/pytest -x --verbose --full-trace --capture=no ./tests
+ """
+ } catch(e) {
+ currentBuild.result = "UNSTABLE"
+ }
+ }
+ else {
+ // For Windows
make('test')
- } catch(e) {
- currentBuild.result = "UNSTABLE"
+ }
+ }
+
+ stage('Code Style') {
+ if (isUnix()) {
+ // For Linux to show everything
+ def branch = env.BRANCH_NAME
+ if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) {
+ branch = "master"
+ }
+ def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}")
+
+ try {
+ sh """
+ cd ..
+ export PYTHONPATH=.:"${uranium_dir}"
+ ${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/python3 run_mypy.py
+ """
+ } catch(e) {
+ currentBuild.result = "UNSTABLE"
+ }
}
}
}
diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake
index 801f054bc3..30794ed608 100644
--- a/cmake/CuraTests.cmake
+++ b/cmake/CuraTests.cmake
@@ -34,7 +34,7 @@ function(cura_add_test)
if (NOT ${test_exists})
add_test(
NAME ${_NAME}
- COMMAND ${PYTHON_EXECUTABLE} -m pytest --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY}
+ COMMAND ${PYTHON_EXECUTABLE} -m pytest --verbose --full-trace --capture=no --no-print-log --junitxml=${CMAKE_BINARY_DIR}/junit-${_NAME}.xml ${_DIRECTORY}
)
set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT LANG=C)
set_tests_properties(${_NAME} PROPERTIES ENVIRONMENT "PYTHONPATH=${_PYTHONPATH}")
From 3b70e5eb6bcbab6da11f6864b85a6a23ae0ccc30 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Thu, 27 Sep 2018 20:01:55 +0200
Subject: [PATCH 122/390] Fix typing
For some reason, my MyPy started acting up once I started using the PythonPath while calling it.
---
cura/CuraApplication.py | 6 +
.../Models/SettingVisibilityPresetsModel.py | 8 +-
cura/Machines/QualityManager.py | 6 +-
cura/OAuth2/AuthorizationHelpers.py | 4 +-
cura/OAuth2/Models.py | 2 +-
cura/Scene/ConvexHullDecorator.py | 135 ++++++++++--------
cura/Settings/ContainerManager.py | 7 +-
cura/Settings/MachineManager.py | 2 +-
plugins/SimulationView/SimulationView.py | 41 +++---
9 files changed, 120 insertions(+), 91 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 5ff4161fea..04c9ea88db 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -61,6 +61,7 @@ from cura.Scene.CuraSceneController import CuraSceneController
from UM.Settings.SettingDefinition import SettingDefinition, DefinitionPropertyType
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.SettingFunction import SettingFunction
+from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
from cura.Settings.MachineNameValidator import MachineNameValidator
from cura.Machines.Models.BuildPlateModel import BuildPlateModel
@@ -242,6 +243,8 @@ class CuraApplication(QtApplication):
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
self._container_registry_class = CuraContainerRegistry
+ # Redefined here in order to please the typing.
+ self._container_registry = None # type: CuraContainerRegistry
from cura.CuraPackageManager import CuraPackageManager
self._package_manager_class = CuraPackageManager
@@ -266,6 +269,9 @@ class CuraApplication(QtApplication):
help = "FOR TESTING ONLY. Trigger an early crash to show the crash dialog.")
self._cli_parser.add_argument("file", nargs = "*", help = "Files to load after starting the application.")
+ def getContainerRegistry(self) -> "CuraContainerRegistry":
+ return self._container_registry
+
def parseCliOptions(self):
super().parseCliOptions()
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index d5fa51d20a..7e098197a9 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional
+from typing import Optional, List, Dict, Union
import os
import urllib.parse
from configparser import ConfigParser
@@ -60,7 +60,7 @@ class SettingVisibilityPresetsModel(ListModel):
def _populate(self) -> None:
from cura.CuraApplication import CuraApplication
- items = []
+ items = [] # type: List[Dict[str, Union[str, int, List[str]]]]
for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset):
try:
mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path)
@@ -79,7 +79,7 @@ class SettingVisibilityPresetsModel(ListModel):
if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
continue
- settings = []
+ settings = [] # type: List[str]
for section in parser.sections():
if section == 'general':
continue
@@ -98,7 +98,7 @@ class SettingVisibilityPresetsModel(ListModel):
except Exception:
Logger.logException("e", "Failed to load setting preset %s", file_path)
- items.sort(key = lambda k: (int(k["weight"]), k["id"]))
+ items.sort(key = lambda k: (int(k["weight"]), k["id"])) # type: ignore
# Put "custom" at the top
items.insert(0, {"id": "custom",
"name": "Custom selection",
diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py
index 21abb5a9cc..d924f4c83e 100644
--- a/cura/Machines/QualityManager.py
+++ b/cura/Machines/QualityManager.py
@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Optional, cast, Dict, List
from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot
from UM.Application import Application
+
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Logger import Logger
from UM.Util import parseBool
@@ -40,7 +41,8 @@ class QualityManager(QObject):
def __init__(self, container_registry: "ContainerRegistry", parent = None) -> None:
super().__init__(parent)
- self._application = Application.getInstance() # type: CuraApplication
+ from cura.CuraApplication import CuraApplication
+ self._application = CuraApplication.getInstance() # type: CuraApplication
self._material_manager = self._application.getMaterialManager()
self._container_registry = container_registry
@@ -458,7 +460,7 @@ class QualityManager(QObject):
# stack and clear the user settings.
@pyqtSlot(str)
def createQualityChanges(self, base_name: str) -> None:
- machine_manager = Application.getInstance().getMachineManager()
+ machine_manager = CuraApplication.getInstance().getMachineManager()
global_stack = machine_manager.activeMachine
if not global_stack:
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 4d485b3bda..6cb53d2252 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -36,7 +36,7 @@ class AuthorizationHelpers:
"code": authorization_code,
"code_verifier": verification_code,
"scope": self._settings.CLIENT_SCOPES
- }))
+ })) # type: ignore
# Request the access token from the authorization server using a refresh token.
# \param refresh_token:
@@ -48,7 +48,7 @@ class AuthorizationHelpers:
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"scope": self._settings.CLIENT_SCOPES
- }))
+ })) # type: ignore
@staticmethod
# Parse the token response from the authorization server into an AuthenticationResponse object.
diff --git a/cura/OAuth2/Models.py b/cura/OAuth2/Models.py
index 796fdf8746..83fc22554f 100644
--- a/cura/OAuth2/Models.py
+++ b/cura/OAuth2/Models.py
@@ -14,7 +14,7 @@ class OAuth2Settings(BaseModel):
CLIENT_ID = None # type: Optional[str]
CLIENT_SCOPES = None # type: Optional[str]
CALLBACK_URL = None # type: Optional[str]
- AUTH_DATA_PREFERENCE_KEY = None # type: Optional[str]
+ AUTH_DATA_PREFERENCE_KEY = "" # type: str
AUTH_SUCCESS_REDIRECT = "https://ultimaker.com" # type: str
AUTH_FAILED_REDIRECT = "https://ultimaker.com" # type: str
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index 31e21df6bf..8532f40890 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -5,9 +5,11 @@ from PyQt5.QtCore import QTimer
from UM.Application import Application
from UM.Math.Polygon import Polygon
+
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
from UM.Settings.ContainerRegistry import ContainerRegistry
+
from cura.Settings.ExtruderManager import ExtruderManager
from cura.Scene import ConvexHullNode
@@ -18,6 +20,8 @@ from typing import TYPE_CHECKING, Any, Optional
if TYPE_CHECKING:
from UM.Scene.SceneNode import SceneNode
from cura.Settings.GlobalStack import GlobalStack
+ from UM.Mesh.MeshData import MeshData
+ from UM.Math.Matrix import Matrix
## The convex hull decorator is a scene node decorator that adds the convex hull functionality to a scene node.
@@ -33,17 +37,17 @@ class ConvexHullDecorator(SceneNodeDecorator):
# Make sure the timer is created on the main thread
self._recompute_convex_hull_timer = None # type: Optional[QTimer]
-
- if Application.getInstance() is not None:
- Application.getInstance().callLater(self.createRecomputeConvexHullTimer)
+ from cura.CuraApplication import CuraApplication
+ if CuraApplication.getInstance() is not None:
+ CuraApplication.getInstance().callLater(self.createRecomputeConvexHullTimer)
self._raft_thickness = 0.0
- self._build_volume = Application.getInstance().getBuildVolume()
+ self._build_volume = CuraApplication.getInstance().getBuildVolume()
self._build_volume.raftThicknessChanged.connect(self._onChanged)
- Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged)
- Application.getInstance().getController().toolOperationStarted.connect(self._onChanged)
- Application.getInstance().getController().toolOperationStopped.connect(self._onChanged)
+ CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged)
+ CuraApplication.getInstance().getController().toolOperationStarted.connect(self._onChanged)
+ CuraApplication.getInstance().getController().toolOperationStopped.connect(self._onChanged)
self._onGlobalStackChanged()
@@ -61,9 +65,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
previous_node.parentChanged.disconnect(self._onChanged)
super().setNode(node)
-
- self._node.transformationChanged.connect(self._onChanged)
- self._node.parentChanged.connect(self._onChanged)
+ # Mypy doesn't understand that self._node is no longer optional, so just use the node.
+ node.transformationChanged.connect(self._onChanged)
+ node.parentChanged.connect(self._onChanged)
self._onChanged()
@@ -78,9 +82,9 @@ class ConvexHullDecorator(SceneNodeDecorator):
hull = self._compute2DConvexHull()
- if self._global_stack and self._node and hull is not None:
+ if self._global_stack and self._node is not None and hull is not None:
# Parent can be None if node is just loaded.
- if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")):
+ if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
hull = hull.getMinkowskiHull(Polygon(numpy.array(self._global_stack.getProperty("machine_head_polygon", "value"), numpy.float32)))
hull = self._add2DAdhesionMargin(hull)
return hull
@@ -92,6 +96,13 @@ class ConvexHullDecorator(SceneNodeDecorator):
return self._compute2DConvexHeadFull()
+ @staticmethod
+ def hasGroupAsParent(node: "SceneNode") -> bool:
+ parent = node.getParent()
+ if parent is None:
+ return False
+ return bool(parent.callDecoration("isGroup"))
+
## Get convex hull of the object + head size
# In case of printing all at once this is the same as the convex hull.
# For one at the time this is area with intersection of mirrored head
@@ -100,8 +111,10 @@ class ConvexHullDecorator(SceneNodeDecorator):
return None
if self._global_stack:
- if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")):
+ if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
head_with_fans = self._compute2DConvexHeadMin()
+ if head_with_fans is None:
+ return None
head_with_fans_with_adhesion_margin = self._add2DAdhesionMargin(head_with_fans)
return head_with_fans_with_adhesion_margin
return None
@@ -114,7 +127,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
return None
if self._global_stack:
- if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and (self._node.getParent() is None or not self._node.getParent().callDecoration("isGroup")):
+ if self._global_stack.getProperty("print_sequence", "value") == "one_at_a_time" and not self.hasGroupAsParent(self._node):
# Printing one at a time and it's not an object in a group
return self._compute2DConvexHull()
return None
@@ -153,15 +166,17 @@ class ConvexHullDecorator(SceneNodeDecorator):
def _init2DConvexHullCache(self) -> None:
# Cache for the group code path in _compute2DConvexHull()
- self._2d_convex_hull_group_child_polygon = None
- self._2d_convex_hull_group_result = None
+ self._2d_convex_hull_group_child_polygon = None # type: Optional[Polygon]
+ self._2d_convex_hull_group_result = None # type: Optional[Polygon]
# Cache for the mesh code path in _compute2DConvexHull()
- self._2d_convex_hull_mesh = None
- self._2d_convex_hull_mesh_world_transform = None
- self._2d_convex_hull_mesh_result = None
+ self._2d_convex_hull_mesh = None # type: Optional[MeshData]
+ self._2d_convex_hull_mesh_world_transform = None # type: Optional[Matrix]
+ self._2d_convex_hull_mesh_result = None # type: Optional[Polygon]
def _compute2DConvexHull(self) -> Optional[Polygon]:
+ if self._node is None:
+ return None
if self._node.callDecoration("isGroup"):
points = numpy.zeros((0, 2), dtype=numpy.int32)
for child in self._node.getChildren():
@@ -187,47 +202,47 @@ class ConvexHullDecorator(SceneNodeDecorator):
return offset_hull
else:
- offset_hull = None
- if self._node.getMeshData():
- mesh = self._node.getMeshData()
- world_transform = self._node.getWorldTransformation()
-
- # Check the cache
- if mesh is self._2d_convex_hull_mesh and world_transform == self._2d_convex_hull_mesh_world_transform:
- return self._2d_convex_hull_mesh_result
-
- vertex_data = mesh.getConvexHullTransformedVertices(world_transform)
- # Don't use data below 0.
- # TODO; We need a better check for this as this gives poor results for meshes with long edges.
- # Do not throw away vertices: the convex hull may be too small and objects can collide.
- # vertex_data = vertex_data[vertex_data[:,1] >= -0.01]
-
- if len(vertex_data) >= 4:
- # Round the vertex data to 1/10th of a mm, then remove all duplicate vertices
- # This is done to greatly speed up further convex hull calculations as the convex hull
- # becomes much less complex when dealing with highly detailed models.
- vertex_data = numpy.round(vertex_data, 1)
-
- vertex_data = vertex_data[:, [0, 2]] # Drop the Y components to project to 2D.
-
- # Grab the set of unique points.
- #
- # This basically finds the unique rows in the array by treating them as opaque groups of bytes
- # which are as long as the 2 float64s in each row, and giving this view to numpy.unique() to munch.
- # See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array
- vertex_byte_view = numpy.ascontiguousarray(vertex_data).view(
- numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1])))
- _, idx = numpy.unique(vertex_byte_view, return_index=True)
- vertex_data = vertex_data[idx] # Select the unique rows by index.
-
- hull = Polygon(vertex_data)
-
- if len(vertex_data) >= 3:
- convex_hull = hull.getConvexHull()
- offset_hull = self._offsetHull(convex_hull)
- else:
+ offset_hull = Polygon([])
+ mesh = self._node.getMeshData()
+ if mesh is None:
return Polygon([]) # Node has no mesh data, so just return an empty Polygon.
+ world_transform = self._node.getWorldTransformation()
+
+ # Check the cache
+ if mesh is self._2d_convex_hull_mesh and world_transform == self._2d_convex_hull_mesh_world_transform:
+ return self._2d_convex_hull_mesh_result
+
+ vertex_data = mesh.getConvexHullTransformedVertices(world_transform)
+ # Don't use data below 0.
+ # TODO; We need a better check for this as this gives poor results for meshes with long edges.
+ # Do not throw away vertices: the convex hull may be too small and objects can collide.
+ # vertex_data = vertex_data[vertex_data[:,1] >= -0.01]
+
+ if len(vertex_data) >= 4: # type: ignore # mypy and numpy don't play along well just yet.
+ # Round the vertex data to 1/10th of a mm, then remove all duplicate vertices
+ # This is done to greatly speed up further convex hull calculations as the convex hull
+ # becomes much less complex when dealing with highly detailed models.
+ vertex_data = numpy.round(vertex_data, 1)
+
+ vertex_data = vertex_data[:, [0, 2]] # Drop the Y components to project to 2D.
+
+ # Grab the set of unique points.
+ #
+ # This basically finds the unique rows in the array by treating them as opaque groups of bytes
+ # which are as long as the 2 float64s in each row, and giving this view to numpy.unique() to munch.
+ # See http://stackoverflow.com/questions/16970982/find-unique-rows-in-numpy-array
+ vertex_byte_view = numpy.ascontiguousarray(vertex_data).view(
+ numpy.dtype((numpy.void, vertex_data.dtype.itemsize * vertex_data.shape[1])))
+ _, idx = numpy.unique(vertex_byte_view, return_index=True)
+ vertex_data = vertex_data[idx] # Select the unique rows by index.
+
+ hull = Polygon(vertex_data)
+
+ if len(vertex_data) >= 3:
+ convex_hull = hull.getConvexHull()
+ offset_hull = self._offsetHull(convex_hull)
+
# Store the result in the cache
self._2d_convex_hull_mesh = mesh
self._2d_convex_hull_mesh_world_transform = world_transform
@@ -338,7 +353,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
## Private convenience function to get a setting from the correct extruder (as defined by limit_to_extruder property).
def _getSettingProperty(self, setting_key: str, prop: str = "value") -> Any:
- if not self._global_stack:
+ if self._global_stack is None or self._node is None:
return None
per_mesh_stack = self._node.callDecoration("getStack")
if per_mesh_stack:
@@ -358,7 +373,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
return self._global_stack.getProperty(setting_key, prop)
## Returns True if node is a descendant or the same as the root node.
- def __isDescendant(self, root: "SceneNode", node: "SceneNode") -> bool:
+ def __isDescendant(self, root: "SceneNode", node: Optional["SceneNode"]) -> bool:
if node is None:
return False
if root is node:
diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py
index e1a1495dac..3cfca1a944 100644
--- a/cura/Settings/ContainerManager.py
+++ b/cura/Settings/ContainerManager.py
@@ -28,10 +28,10 @@ if TYPE_CHECKING:
from cura.Machines.MaterialNode import MaterialNode
from cura.Machines.QualityChangesGroup import QualityChangesGroup
from UM.PluginRegistry import PluginRegistry
- from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.MachineManager import MachineManager
from cura.Machines.MaterialManager import MaterialManager
from cura.Machines.QualityManager import QualityManager
+ from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
catalog = i18nCatalog("cura")
@@ -52,7 +52,7 @@ class ContainerManager(QObject):
self._application = application # type: CuraApplication
self._plugin_registry = self._application.getPluginRegistry() # type: PluginRegistry
- self._container_registry = self._application.getContainerRegistry() # type: ContainerRegistry
+ self._container_registry = self._application.getContainerRegistry() # type: CuraContainerRegistry
self._machine_manager = self._application.getMachineManager() # type: MachineManager
self._material_manager = self._application.getMaterialManager() # type: MaterialManager
self._quality_manager = self._application.getQualityManager() # type: QualityManager
@@ -391,7 +391,8 @@ class ContainerManager(QObject):
continue
mime_type = self._container_registry.getMimeTypeForContainer(container_type)
-
+ if mime_type is None:
+ continue
entry = {
"type": serialize_type,
"mime": mime_type,
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 0059b7aad2..063f894d23 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -1148,7 +1148,7 @@ class MachineManager(QObject):
self._fixQualityChangesGroupToNotSupported(quality_changes_group)
quality_changes_container = self._empty_quality_changes_container
- quality_container = self._empty_quality_container
+ quality_container = self._empty_quality_container # type: Optional[InstanceContainer]
if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer():
quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.getContainer())
if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer():
diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py
index 8d739654d4..edf950e55a 100644
--- a/plugins/SimulationView/SimulationView.py
+++ b/plugins/SimulationView/SimulationView.py
@@ -21,6 +21,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Scene.Selection import Selection
from UM.Signal import Signal
+from UM.View.CompositePass import CompositePass
from UM.View.GL.OpenGL import OpenGL
from UM.View.GL.OpenGLContext import OpenGLContext
@@ -36,7 +37,7 @@ from .SimulationViewProxy import SimulationViewProxy
import numpy
import os.path
-from typing import Optional, TYPE_CHECKING, List
+from typing import Optional, TYPE_CHECKING, List, cast
if TYPE_CHECKING:
from UM.Scene.SceneNode import SceneNode
@@ -64,7 +65,7 @@ class SimulationView(View):
self._minimum_layer_num = 0
self._current_layer_mesh = None
self._current_layer_jumps = None
- self._top_layers_job = None
+ self._top_layers_job = None # type: Optional["_CreateTopLayersJob"]
self._activity = False
self._old_max_layers = 0
@@ -78,10 +79,10 @@ class SimulationView(View):
self._ghost_shader = None # type: Optional["ShaderProgram"]
self._layer_pass = None # type: Optional[SimulationPass]
- self._composite_pass = None # type: Optional[RenderPass]
- self._old_layer_bindings = None
+ self._composite_pass = None # type: Optional[CompositePass]
+ self._old_layer_bindings = None # type: Optional[List[str]]
self._simulationview_composite_shader = None # type: Optional["ShaderProgram"]
- self._old_composite_shader = None
+ self._old_composite_shader = None # type: Optional["ShaderProgram"]
self._global_container_stack = None # type: Optional[ContainerStack]
self._proxy = SimulationViewProxy()
@@ -204,9 +205,11 @@ class SimulationView(View):
if not self._ghost_shader:
self._ghost_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "color.shader"))
- self._ghost_shader.setUniformValue("u_color", Color(*Application.getInstance().getTheme().getColor("layerview_ghost").getRgb()))
+ theme = CuraApplication.getInstance().getTheme()
+ if theme is not None:
+ self._ghost_shader.setUniformValue("u_color", Color(*theme.getColor("layerview_ghost").getRgb()))
- for node in DepthFirstIterator(scene.getRoot()):
+ for node in DepthFirstIterator(scene.getRoot()): # type: ignore
# We do not want to render ConvexHullNode as it conflicts with the bottom layers.
# However, it is somewhat relevant when the node is selected, so do render it then.
if type(node) is ConvexHullNode and not Selection.isSelected(node.getWatchedNode()):
@@ -347,7 +350,7 @@ class SimulationView(View):
self._old_max_layers = self._max_layers
## Recalculate num max layers
new_max_layers = 0
- for node in DepthFirstIterator(scene.getRoot()):
+ for node in DepthFirstIterator(scene.getRoot()): # type: ignore
layer_data = node.callDecoration("getLayerData")
if not layer_data:
continue
@@ -398,7 +401,7 @@ class SimulationView(View):
def calculateMaxPathsOnLayer(self, layer_num: int) -> None:
# Update the currentPath
scene = self.getController().getScene()
- for node in DepthFirstIterator(scene.getRoot()):
+ for node in DepthFirstIterator(scene.getRoot()): # type: ignore
layer_data = node.callDecoration("getLayerData")
if not layer_data:
continue
@@ -474,15 +477,17 @@ class SimulationView(View):
self._onGlobalStackChanged()
if not self._simulationview_composite_shader:
- self._simulationview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(PluginRegistry.getInstance().getPluginPath("SimulationView"), "simulationview_composite.shader"))
- theme = Application.getInstance().getTheme()
- self._simulationview_composite_shader.setUniformValue("u_background_color", Color(*theme.getColor("viewport_background").getRgb()))
- self._simulationview_composite_shader.setUniformValue("u_outline_color", Color(*theme.getColor("model_selection_outline").getRgb()))
+ plugin_path = cast(str, PluginRegistry.getInstance().getPluginPath("SimulationView"))
+ self._simulationview_composite_shader = OpenGL.getInstance().createShaderProgram(os.path.join(plugin_path, "simulationview_composite.shader"))
+ theme = CuraApplication.getInstance().getTheme()
+ if theme is not None:
+ self._simulationview_composite_shader.setUniformValue("u_background_color", Color(*theme.getColor("viewport_background").getRgb()))
+ self._simulationview_composite_shader.setUniformValue("u_outline_color", Color(*theme.getColor("model_selection_outline").getRgb()))
if not self._composite_pass:
- self._composite_pass = self.getRenderer().getRenderPass("composite")
+ self._composite_pass = cast(CompositePass, self.getRenderer().getRenderPass("composite"))
- self._old_layer_bindings = self._composite_pass.getLayerBindings()[:] # make a copy so we can restore to it later
+ self._old_layer_bindings = self._composite_pass.getLayerBindings()[:] # make a copy so we can restore to it later
self._composite_pass.getLayerBindings().append("simulationview")
self._old_composite_shader = self._composite_pass.getCompositeShader()
self._composite_pass.setCompositeShader(self._simulationview_composite_shader)
@@ -496,8 +501,8 @@ class SimulationView(View):
self._nozzle_node.setParent(None)
self.getRenderer().removeRenderPass(self._layer_pass)
if self._composite_pass:
- self._composite_pass.setLayerBindings(self._old_layer_bindings)
- self._composite_pass.setCompositeShader(self._old_composite_shader)
+ self._composite_pass.setLayerBindings(cast(List[str], self._old_layer_bindings))
+ self._composite_pass.setCompositeShader(cast(ShaderProgram, self._old_composite_shader))
return False
@@ -606,7 +611,7 @@ class _CreateTopLayersJob(Job):
def run(self) -> None:
layer_data = None
- for node in DepthFirstIterator(self._scene.getRoot()):
+ for node in DepthFirstIterator(self._scene.getRoot()): # type: ignore
layer_data = node.callDecoration("getLayerData")
if layer_data:
break
From 84bad92f10bbb2175f9b5315338420f0dc63e01f Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 09:57:28 +0200
Subject: [PATCH 123/390] Verbose output for Windows CI
---
Jenkinsfile | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 35f07d3987..274e383ffa 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -72,7 +72,12 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
}
else {
// For Windows
- make('test')
+ try {
+ // This also does code style checks.
+ bat 'ctest -V'
+ } catch(e) {
+ currentBuild.result = "UNSTABLE"
+ }
}
}
From 9bd4ab2faa1065c91d87b33cf9cd90bc74301975 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Fri, 28 Sep 2018 10:46:14 +0200
Subject: [PATCH 124/390] Added unittest for PrintInformation class
---
cura/PrintInformation.py | 12 ++--
tests/TestPrintInformation.py | 107 ++++++++++++++++++++++++++++++++++
2 files changed, 114 insertions(+), 5 deletions(-)
create mode 100644 tests/TestPrintInformation.py
diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py
index 8527da1b8a..85cf6651fa 100644
--- a/cura/PrintInformation.py
+++ b/cura/PrintInformation.py
@@ -10,7 +10,6 @@ from typing import Dict
from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot
-from UM.i18n import i18nCatalog
from UM.Logger import Logger
from UM.Qt.Duration import Duration
from UM.Scene.SceneNode import SceneNode
@@ -52,6 +51,8 @@ class PrintInformation(QObject):
super().__init__(parent)
self._application = application
+ self.UNTITLED_JOB_NAME = "Untitled"
+
self.initializeCuraMessagePrintTimeProperties()
self._material_lengths = {} # indexed by build plate number
@@ -70,12 +71,13 @@ class PrintInformation(QObject):
self._base_name = ""
self._abbr_machine = ""
self._job_name = ""
- self._project_name = ""
self._active_build_plate = 0
self._initVariablesWithBuildPlate(self._active_build_plate)
self._multi_build_plate_model = self._application.getMultiBuildPlateModel()
+ ss = self._multi_build_plate_model.maxBuildPlate
+
self._application.globalContainerStackChanged.connect(self._updateJobName)
self._application.globalContainerStackChanged.connect(self.setToZeroPrintInformation)
self._application.fileLoaded.connect(self.setBaseName)
@@ -300,13 +302,13 @@ class PrintInformation(QObject):
def _updateJobName(self):
if self._base_name == "":
- self._job_name = "Untitled"
+ self._job_name = self.UNTITLED_JOB_NAME
self._is_user_specified_job_name = False
self.jobNameChanged.emit()
return
base_name = self._stripAccents(self._base_name)
- self._setAbbreviatedMachineName()
+ self._defineAbbreviatedMachineName()
# Only update the job name when it's not user-specified.
if not self._is_user_specified_job_name:
@@ -382,7 +384,7 @@ class PrintInformation(QObject):
## Created an acronym-like abbreviated machine name from the currently
# active machine name.
# Called each time the global stack is switched.
- def _setAbbreviatedMachineName(self):
+ def _defineAbbreviatedMachineName(self):
global_container_stack = self._application.getGlobalContainerStack()
if not global_container_stack:
self._abbr_machine = ""
diff --git a/tests/TestPrintInformation.py b/tests/TestPrintInformation.py
new file mode 100644
index 0000000000..a226a437c6
--- /dev/null
+++ b/tests/TestPrintInformation.py
@@ -0,0 +1,107 @@
+
+from cura import PrintInformation
+
+from unittest.mock import MagicMock, patch
+from UM.Application import Application
+from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
+
+
+def getPrintInformation(printer_name) -> PrintInformation:
+
+ mock_application = MagicMock()
+
+ global_container_stack = MagicMock()
+ global_container_stack.definition.getName = MagicMock(return_value=printer_name)
+ mock_application.getGlobalContainerStack = MagicMock(return_value=global_container_stack)
+
+ multiBuildPlateModel = MagicMock()
+ multiBuildPlateModel.maxBuildPlate = 0
+ mock_application.getMultiBuildPlateModel = MagicMock(return_value=multiBuildPlateModel)
+
+ Application.getInstance = MagicMock(return_type=mock_application)
+
+ with patch("json.loads", lambda x: {}):
+ print_information = PrintInformation.PrintInformation(mock_application)
+
+ return print_information
+
+def setup_module():
+ MimeTypeDatabase.addMimeType(
+ MimeType(
+ name="application/vnd.ms-package.3dmanufacturing-3dmodel+xml",
+ comment="3MF",
+ suffixes=["3mf"]
+ )
+ )
+
+ MimeTypeDatabase.addMimeType(
+ MimeType(
+ name="application/x-cura-gcode-file",
+ comment="Cura GCode File",
+ suffixes=["gcode"]
+ )
+ )
+
+
+
+def test_setProjectName():
+
+ print_information = getPrintInformation("ultimaker")
+
+ # Test simple name
+ project_name = ["HelloWorld",".3mf"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] == print_information._job_name
+
+ # Test the name with one dot
+ project_name = ["Hello.World",".3mf"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] == print_information._job_name
+
+ # Test the name with two dot
+ project_name = ["Hello.World.World",".3mf"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] == print_information._job_name
+
+ # Test the name with dot at the beginning
+ project_name = [".Hello.World",".3mf"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] == print_information._job_name
+
+ # Test the name with underline
+ project_name = ["Hello_World",".3mf"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] == print_information._job_name
+
+ # Test gcode extension
+ project_name = ["Hello_World",".gcode"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] == print_information._job_name
+
+ # Test empty project name
+ project_name = ["",""]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert print_information.UNTITLED_JOB_NAME == print_information._job_name
+
+ # Test wrong file extension
+ project_name = ["Hello_World",".test"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert "UM_" + project_name[0] != print_information._job_name
+
+def test_setJobName():
+
+ print_information = getPrintInformation("ultimaker")
+
+ print_information._abbr_machine = "UM"
+ print_information.setJobName("UM_HelloWorld", is_user_specified_job_name=False)
+
+
+def test_defineAbbreviatedMachineName():
+ printer_name = "Test"
+
+ print_information = getPrintInformation(printer_name)
+
+ # Test not ultimaker printer, name suffix should have first letter from the printer name
+ project_name = ["HelloWorld",".3mf"]
+ print_information.setProjectName(project_name[0] + project_name[1])
+ assert printer_name[0] + "_" + project_name[0] == print_information._job_name
\ No newline at end of file
From 9a98341bda96681388aefe2d2728fd7f1328c4e5 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 11:38:42 +0200
Subject: [PATCH 125/390] Fix code-style and typing
---
cura/Settings/MachineManager.py | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 6fd945fc31..911022b6ac 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -4,13 +4,13 @@
import collections
import time
from typing import Any, Callable, List, Dict, TYPE_CHECKING, Optional, cast
-import platform
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.Interfaces import ContainerInterface
from UM.Signal import Signal
+from UM.Platform import Platform
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, QTimer
from UM.FlameProfiler import pyqtSlot
@@ -1543,17 +1543,16 @@ class MachineManager(QObject):
## Get default firmware file name if one is specified in the firmware
@pyqtSlot(result = str)
- def getDefaultFirmwareName(self):
+ def getDefaultFirmwareName(self) -> str:
# Check if there is a valid global container stack
if not self._global_container_stack:
return ""
# The bottom of the containerstack is the machine definition
- machine_id = self._global_container_stack.getBottom().id
machine_has_heated_bed = self._global_container_stack.getProperty("machine_heated_bed", "value")
baudrate = 250000
- if platform.system() == "Linux":
+ if Platform.isLinux():
# Linux prefers a baudrate of 115200 here because older versions of
# pySerial did not support a baudrate of 250000
baudrate = 115200
@@ -1570,5 +1569,5 @@ class MachineManager(QObject):
Logger.log("w", "Firmware file %s not found.", hex_file)
return ""
else:
- Logger.log("w", "There is no firmware for machine %s.", machine_id)
+ Logger.log("w", "There is no firmware for machine %s.", self._global_container_stack.getBottom().id)
return ""
From bc52830c8902f14a53bd40fa009856e545876436 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 11:49:00 +0200
Subject: [PATCH 126/390] Move getDefaultFirmwareName() into GlobalStack
---
cura/Settings/GlobalStack.py | 29 ++++++++++++++++-
cura/Settings/MachineManager.py | 32 -------------------
.../UpgradeFirmwareMachineAction.qml | 2 +-
3 files changed, 29 insertions(+), 34 deletions(-)
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index 517b45eb98..e3ae8c2deb 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -4,7 +4,7 @@
from collections import defaultdict
import threading
from typing import Any, Dict, Optional, Set, TYPE_CHECKING
-from PyQt5.QtCore import pyqtProperty
+from PyQt5.QtCore import pyqtProperty, pyqtSlot
from UM.Decorators import override
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
@@ -13,6 +13,8 @@ from UM.Settings.SettingInstance import InstanceState
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.Interfaces import PropertyEvaluationContext
from UM.Logger import Logger
+from UM.Resources import Resources
+from UM.Platform import Platform
from UM.Util import parseBool
import cura.CuraApplication
@@ -200,6 +202,31 @@ class GlobalStack(CuraContainerStack):
def getHasMachineQuality(self) -> bool:
return parseBool(self.getMetaDataEntry("has_machine_quality", False))
+ ## Get default firmware file name if one is specified in the firmware
+ @pyqtSlot(result = str)
+ def getDefaultFirmwareName(self) -> str:
+ machine_has_heated_bed = self.getProperty("machine_heated_bed", "value")
+
+ baudrate = 250000
+ if Platform.isLinux():
+ # Linux prefers a baudrate of 115200 here because older versions of
+ # pySerial did not support a baudrate of 250000
+ baudrate = 115200
+
+ # If a firmware file is available, it should be specified in the definition for the printer
+ hex_file = self.getMetaDataEntry("firmware_file", None)
+ if machine_has_heated_bed:
+ hex_file = self.getMetaDataEntry("firmware_hbk_file", hex_file)
+
+ if hex_file:
+ try:
+ return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
+ except FileNotFoundError:
+ Logger.log("w", "Firmware file %s not found.", hex_file)
+ return ""
+ else:
+ Logger.log("w", "There is no firmware for machine %s.", self.getBottom().id)
+ return ""
## private:
global_stack_mime = MimeType(
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 911022b6ac..0abb1a5dc2 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -10,7 +10,6 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Settings.InstanceContainer import InstanceContainer
from UM.Settings.Interfaces import ContainerInterface
from UM.Signal import Signal
-from UM.Platform import Platform
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, QTimer
from UM.FlameProfiler import pyqtSlot
@@ -1540,34 +1539,3 @@ class MachineManager(QObject):
with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue):
self.updateMaterialWithVariant(None)
self._updateQualityWithMaterial()
-
- ## Get default firmware file name if one is specified in the firmware
- @pyqtSlot(result = str)
- def getDefaultFirmwareName(self) -> str:
- # Check if there is a valid global container stack
- if not self._global_container_stack:
- return ""
-
- # The bottom of the containerstack is the machine definition
- machine_has_heated_bed = self._global_container_stack.getProperty("machine_heated_bed", "value")
-
- baudrate = 250000
- if Platform.isLinux():
- # Linux prefers a baudrate of 115200 here because older versions of
- # pySerial did not support a baudrate of 250000
- baudrate = 115200
-
- # If a firmware file is available, it should be specified in the definition for the printer
- hex_file = self._global_container_stack.getMetaDataEntry("firmware_file", None)
- if machine_has_heated_bed:
- hex_file = self._global_container_stack.getMetaDataEntry("firmware_hbk_file", hex_file)
-
- if hex_file:
- try:
- return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
- except FileNotFoundError:
- Logger.log("w", "Firmware file %s not found.", hex_file)
- return ""
- else:
- Logger.log("w", "There is no firmware for machine %s.", self._global_container_stack.getBottom().id)
- return ""
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index 0d12f72a0a..469ada7afb 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -51,7 +51,7 @@ Cura.MachineAction
anchors.horizontalCenter: parent.horizontalCenter
width: childrenRect.width
spacing: UM.Theme.getSize("default_margin").width
- property var firmwareName: Cura.MachineManager.getDefaultFirmwareName()
+ property var firmwareName: Cura.MachineManager.activeMachine.getDefaultFirmwareName()
Button
{
id: autoUpgradeButton
From a12c0e8d9eadb1bdf0d8609f1b1ffcfb09e706cc Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 11:51:33 +0200
Subject: [PATCH 127/390] Remove superfluous import
---
cura/Settings/MachineManager.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 0abb1a5dc2..0059b7aad2 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -16,7 +16,6 @@ from UM.FlameProfiler import pyqtSlot
from UM import Util
from UM.Logger import Logger
from UM.Message import Message
-from UM.Resources import Resources
from UM.Settings.SettingFunction import SettingFunction
from UM.Signal import postponeSignals, CompressTechnique
From 4a4b0960520de86f538f7848fed16385740b6881 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 28 Sep 2018 11:53:03 +0200
Subject: [PATCH 128/390] Only send uppercase g-code via custom commands
Because most printers don't understand anything other than uppercase.
Fixes #4178.
---
cura/PrinterOutput/GenericOutputController.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index e6310e5bff..95e65b2f0b 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -66,7 +66,7 @@ class GenericOutputController(PrinterOutputController):
self._output_device.sendCommand("G28 Z")
def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
- self._output_device.sendCommand(command)
+ self._output_device.sendCommand(command.upper()) #Most printers only understand uppercase g-code commands.
def setJobState(self, job: "PrintJobOutputModel", state: str):
if state == "pause":
From ef5f9bb0d45d4a8972b5b975873d0400fce9f794 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 28 Sep 2018 12:01:20 +0200
Subject: [PATCH 129/390] Improve warning when saving g-code before slicing
This terminology is more consistent with what the rest of the interface uses.
Discovered during work on #4112.
---
plugins/GCodeWriter/GCodeWriter.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py
index 5d5e3578cd..3e5bf59e73 100644
--- a/plugins/GCodeWriter/GCodeWriter.py
+++ b/plugins/GCodeWriter/GCodeWriter.py
@@ -70,7 +70,7 @@ class GCodeWriter(MeshWriter):
active_build_plate = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate
scene = Application.getInstance().getController().getScene()
if not hasattr(scene, "gcode_dict"):
- self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving."))
+ self.setInformation(catalog.i18nc("@warning:status", "Please prepare G-code before exporting."))
return False
gcode_dict = getattr(scene, "gcode_dict")
gcode_list = gcode_dict.get(active_build_plate, None)
@@ -86,7 +86,7 @@ class GCodeWriter(MeshWriter):
stream.write(settings)
return True
- self.setInformation(catalog.i18nc("@warning:status", "Please generate G-code before saving."))
+ self.setInformation(catalog.i18nc("@warning:status", "Please prepare G-code before exporting."))
return False
## Create a new container with container 2 as base and container 1 written over it.
From dd150bbab979521c621f37b69b30b367229bedca Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 12:06:57 +0200
Subject: [PATCH 130/390] Resolve circular imports for CuraAPI
---
cura/API/Account.py | 18 ++++++++++-----
cura/API/Backups.py | 10 ++++++---
cura/API/Interface/Settings.py | 13 +++++++----
cura/API/Interface/__init__.py | 11 +++++++--
cura/API/__init__.py | 35 +++++++++++++++++++++++------
cura/Backups/BackupsManager.py | 10 +++++----
cura/CuraApplication.py | 11 ++++-----
cura/OAuth2/AuthorizationService.py | 4 +++-
8 files changed, 81 insertions(+), 31 deletions(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 93738a78e9..bc1ce8c2b9 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -1,15 +1,18 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional, Dict
+from typing import Optional, Dict, TYPE_CHECKING
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty
+from UM.i18n import i18nCatalog
from UM.Message import Message
+
from cura.OAuth2.AuthorizationService import AuthorizationService
from cura.OAuth2.Models import OAuth2Settings
-from UM.Application import Application
-from UM.i18n import i18nCatalog
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+
i18n_catalog = i18nCatalog("cura")
@@ -26,8 +29,9 @@ class Account(QObject):
# Signal emitted when user logged in or out.
loginStateChanged = pyqtSignal(bool)
- def __init__(self, parent = None) -> None:
+ def __init__(self, application: "CuraApplication", parent = None) -> None:
super().__init__(parent)
+ self._application = application
self._error_message = None # type: Optional[Message]
self._logged_in = False
@@ -47,7 +51,11 @@ class Account(QObject):
AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root)
)
- self._authorization_service = AuthorizationService(Application.getInstance().getPreferences(), self._oauth_settings)
+ self._authorization_service = AuthorizationService(self._oauth_settings)
+
+ def initialize(self) -> None:
+ self._authorization_service.initialize(self._application.getPreferences())
+
self._authorization_service.onAuthStateChanged.connect(self._onLoginStateChanged)
self._authorization_service.onAuthenticationError.connect(self._onLoginStateChanged)
self._authorization_service.loadAuthDataFromPreferences()
diff --git a/cura/API/Backups.py b/cura/API/Backups.py
index f31933c844..8e5cd7b83a 100644
--- a/cura/API/Backups.py
+++ b/cura/API/Backups.py
@@ -1,9 +1,12 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Tuple, Optional
+from typing import Tuple, Optional, TYPE_CHECKING
from cura.Backups.BackupsManager import BackupsManager
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+
## The back-ups API provides a version-proof bridge between Cura's
# BackupManager and plug-ins that hook into it.
@@ -13,9 +16,10 @@ from cura.Backups.BackupsManager import BackupsManager
# api = CuraAPI()
# api.backups.createBackup()
# api.backups.restoreBackup(my_zip_file, {"cura_release": "3.1"})``
-
class Backups:
- manager = BackupsManager() # Re-used instance of the backups manager.
+
+ def __init__(self, application: "CuraApplication") -> None:
+ self.manager = BackupsManager(application)
## Create a new back-up using the BackupsManager.
# \return Tuple containing a ZIP file with the back-up data and a dict
diff --git a/cura/API/Interface/Settings.py b/cura/API/Interface/Settings.py
index 2889db7022..371c40c14c 100644
--- a/cura/API/Interface/Settings.py
+++ b/cura/API/Interface/Settings.py
@@ -1,7 +1,11 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from cura.CuraApplication import CuraApplication
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+
## The Interface.Settings API provides a version-proof bridge between Cura's
# (currently) sidebar UI and plug-ins that hook into it.
@@ -19,8 +23,9 @@ from cura.CuraApplication import CuraApplication
# api.interface.settings.addContextMenuItem(data)``
class Settings:
- # Re-used instance of Cura:
- application = CuraApplication.getInstance() # type: CuraApplication
+
+ def __init__(self, application: "CuraApplication") -> None:
+ self.application = application
## Add items to the sidebar context menu.
# \param menu_item dict containing the menu item to add.
@@ -30,4 +35,4 @@ class Settings:
## Get all custom items currently added to the sidebar context menu.
# \return List containing all custom context menu items.
def getContextMenuItems(self) -> list:
- return self.application.getSidebarCustomMenuItems()
\ No newline at end of file
+ return self.application.getSidebarCustomMenuItems()
diff --git a/cura/API/Interface/__init__.py b/cura/API/Interface/__init__.py
index b38118949b..742254a1a4 100644
--- a/cura/API/Interface/__init__.py
+++ b/cura/API/Interface/__init__.py
@@ -1,9 +1,15 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from typing import TYPE_CHECKING
+
from UM.PluginRegistry import PluginRegistry
from cura.API.Interface.Settings import Settings
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+
+
## The Interface class serves as a common root for the specific API
# methods for each interface element.
#
@@ -20,5 +26,6 @@ class Interface:
# For now we use the same API version to be consistent.
VERSION = PluginRegistry.APIVersion
- # API methods specific to the settings portion of the UI
- settings = Settings()
+ def __init__(self, application: "CuraApplication") -> None:
+ # API methods specific to the settings portion of the UI
+ self.settings = Settings(application)
diff --git a/cura/API/__init__.py b/cura/API/__init__.py
index 54f5c1f8b0..e9aba86a41 100644
--- a/cura/API/__init__.py
+++ b/cura/API/__init__.py
@@ -1,5 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from typing import Optional, TYPE_CHECKING
+
from PyQt5.QtCore import QObject, pyqtProperty
from UM.PluginRegistry import PluginRegistry
@@ -7,6 +9,9 @@ from cura.API.Backups import Backups
from cura.API.Interface import Interface
from cura.API.Account import Account
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+
## The official Cura API that plug-ins can use to interact with Cura.
#
@@ -19,14 +24,30 @@ class CuraAPI(QObject):
# For now we use the same API version to be consistent.
VERSION = PluginRegistry.APIVersion
- # Backups API
- backups = Backups()
+ def __init__(self, application: "CuraApplication") -> None:
+ super().__init__(parent = application)
+ self._application = application
- # Interface API
- interface = Interface()
+ # Accounts API
+ self._account = Account(self._application)
- _account = Account()
+ # Backups API
+ self._backups = Backups(self._application)
+
+ # Interface API
+ self._interface = Interface(self._application)
+
+ def initialize(self) -> None:
+ self._account.initialize()
@pyqtProperty(QObject, constant = True)
- def account(self) -> Account:
- return CuraAPI._account
+ def account(self) -> "Account":
+ return self._account
+
+ @property
+ def backups(self) -> "Backups":
+ return self._backups
+
+ @property
+ def interface(self) -> "Interface":
+ return self._interface
\ No newline at end of file
diff --git a/cura/Backups/BackupsManager.py b/cura/Backups/BackupsManager.py
index 67e2a222f1..a4d8528960 100644
--- a/cura/Backups/BackupsManager.py
+++ b/cura/Backups/BackupsManager.py
@@ -1,11 +1,13 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Dict, Optional, Tuple
+from typing import Dict, Optional, Tuple, TYPE_CHECKING
from UM.Logger import Logger
from cura.Backups.Backup import Backup
-from cura.CuraApplication import CuraApplication
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
## The BackupsManager is responsible for managing the creating and restoring of
@@ -13,8 +15,8 @@ from cura.CuraApplication import CuraApplication
#
# Back-ups themselves are represented in a different class.
class BackupsManager:
- def __init__(self):
- self._application = CuraApplication.getInstance()
+ def __init__(self, application: "CuraApplication") -> None:
+ self._application = application
## Get a back-up of the current configuration.
# \return A tuple containing a ZipFile (the actual back-up) and a dict
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 04c9ea88db..9d6a2361a1 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -44,6 +44,7 @@ from UM.Operations.RemoveSceneNodeOperation import RemoveSceneNodeOperation
from UM.Operations.GroupedOperation import GroupedOperation
from UM.Operations.SetTransformOperation import SetTransformOperation
+from cura.API import CuraAPI
from cura.Arranging.Arrange import Arrange
from cura.Arranging.ArrangeObjectsJob import ArrangeObjectsJob
from cura.Arranging.ArrangeObjectsAllBuildPlatesJob import ArrangeObjectsAllBuildPlatesJob
@@ -204,7 +205,7 @@ class CuraApplication(QtApplication):
self._quality_profile_drop_down_menu_model = None
self._custom_quality_profile_drop_down_menu_model = None
- self._cura_API = None
+ self._cura_API = CuraAPI(self)
self._physics = None
self._volume = None
@@ -713,6 +714,9 @@ class CuraApplication(QtApplication):
default_visibility_profile = self._setting_visibility_presets_model.getItem(0)
self.getPreferences().setDefault("general/visible_settings", ";".join(default_visibility_profile["settings"]))
+ # Initialize Cura API
+ self._cura_API.initialize()
+
# Detect in which mode to run and execute that mode
if self._is_headless:
self.runWithoutGUI()
@@ -900,10 +904,7 @@ class CuraApplication(QtApplication):
self._custom_quality_profile_drop_down_menu_model = CustomQualityProfilesDropDownMenuModel(self)
return self._custom_quality_profile_drop_down_menu_model
- def getCuraAPI(self, *args, **kwargs):
- if self._cura_API is None:
- from cura.API import CuraAPI
- self._cura_API = CuraAPI()
+ def getCuraAPI(self, *args, **kwargs) -> "CuraAPI":
return self._cura_API
## Registers objects for the QML engine to use.
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 16f525625e..df068cc43e 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -29,7 +29,7 @@ class AuthorizationService:
# Emit signal when authentication failed.
onAuthenticationError = Signal()
- def __init__(self, preferences: Optional["Preferences"], settings: "OAuth2Settings") -> None:
+ def __init__(self, settings: "OAuth2Settings", preferences: Optional["Preferences"] = None) -> None:
self._settings = settings
self._auth_helpers = AuthorizationHelpers(settings)
self._auth_url = "{}/authorize".format(self._settings.OAUTH_SERVER_URL)
@@ -38,6 +38,8 @@ class AuthorizationService:
self._preferences = preferences
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
+ def initialize(self, preferences: Optional["Preferences"] = None) -> None:
+ self._preferences = preferences
if self._preferences:
self._preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
From b5c893c08e34b0398ba4ab433d0f49ac07467d9d Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Fri, 28 Sep 2018 12:15:33 +0200
Subject: [PATCH 131/390] Rework printer cards
Contributes to CL-1051
---
.../resources/qml/ClusterControlItem.qml | 745 +-----------------
.../resources/qml/PrintJobInfoBlock.qml | 2 +-
.../resources/qml/PrinterCard.qml | 652 +++++++++++++++
.../resources/qml/PrinterCardProgressBar.qml | 119 +++
4 files changed, 807 insertions(+), 711 deletions(-)
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
index 774ab75f0d..bfde2ea7cd 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
@@ -66,12 +66,38 @@ Component
onExited: managePrintersLabel.font.underline = false
}
+ // Skeleton loading
+ Column
+ {
+ id: dummies
+ anchors
+ {
+ top: printingLabel.bottom
+ topMargin: UM.Theme.getSize("default_margin").height
+ left: parent.left
+ leftMargin: UM.Theme.getSize("wide_margin").width
+ right: parent.right
+ rightMargin: UM.Theme.getSize("wide_margin").width
+ }
+ spacing: UM.Theme.getSize("default_margin").height - 10
+
+ PrinterCard
+ {
+ printer: null
+ }
+ PrinterCard
+ {
+ printer: null
+ }
+ }
+
+ // Actual content
ScrollView
{
id: printerScrollView
anchors
{
- top: printingLabel.bottom
+ top: dummies.bottom
left: parent.left
right: parent.right
topMargin: UM.Theme.getSize("default_margin").height
@@ -83,720 +109,19 @@ Component
ListView
{
- id: printer_list
- property var current_index: -1
+ id: printerList
+ property var currentIndex: -1
anchors
{
- top: parent.top
- bottom: parent.bottom
- left: parent.left
- right: parent.right
- leftMargin: 2 * UM.Theme.getSize("default_margin").width
- rightMargin: 2 * UM.Theme.getSize("default_margin").width
+ fill: parent
+ leftMargin: UM.Theme.getSize("wide_margin").width
+ rightMargin: UM.Theme.getSize("wide_margin").width
}
- spacing: UM.Theme.getSize("default_margin").height -10
+ spacing: UM.Theme.getSize("default_margin").height - 10
model: OutputDevice.printers
-
- delegate: Item
+ delegate: PrinterCard
{
- width: parent.width
- height: base.height + 2 * base.shadowRadius // To ensure that the shadow doesn't get cut off.
- Rectangle
- {
- width: parent.width - 2 * shadowRadius
- height: childrenRect.height + UM.Theme.getSize("default_margin").height
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- color:
- {
- if(modelData.state == "disabled")
- {
- return UM.Theme.getColor("monitor_tab_background_inactive")
- }
- else
- {
- return UM.Theme.getColor("monitor_tab_background_active")
- }
- }
- id: base
- property var shadowRadius: 5 * screenScaleFactor
- property var collapsed: true
-
- layer.enabled: true
- layer.effect: DropShadow
- {
- radius: 5 * screenScaleFactor
- verticalOffset: 2
- color: "#3F000000" // 25% shadow
- }
-
- Connections
- {
- target: printer_list
- onCurrent_indexChanged: { base.collapsed = printer_list.current_index != model.index }
- }
-
- Item
- {
- id: printerInfo
- height: machineIcon.height
- anchors
- {
- top: parent.top
- left: parent.left
- right: parent.right
- margins: UM.Theme.getSize("default_margin").width
- }
-
- MouseArea
- {
- anchors.fill: parent
- onClicked:
- {
- if (base.collapsed) {
- printer_list.current_index = model.index
- }
- else
- {
- printer_list.current_index = -1
- }
- }
- }
-
- Item
- {
- id: machineIcon
- // Yeah, this is hardcoded now, but I can't think of a good way to fix this.
- // The UI is going to get another update soon, so it's probably not worth the effort...
- width: 58
- height: 58
- anchors.top: parent.top
- anchors.leftMargin: UM.Theme.getSize("default_margin").width
- anchors.left: parent.left
-
- UM.RecolorImage
- {
- anchors.centerIn: parent
- source:
- {
- switch(modelData.type)
- {
- case "Ultimaker 3":
- return "../svg/UM3-icon.svg"
- case "Ultimaker 3 Extended":
- return "../svg/UM3x-icon.svg"
- case "Ultimaker S5":
- return "../svg/UMs5-icon.svg"
- }
- }
- width: sourceSize.width
- height: sourceSize.height
-
- color:
- {
- if(modelData.state == "disabled")
- {
- return UM.Theme.getColor("monitor_tab_text_inactive")
- }
-
- if(modelData.activePrintJob != undefined)
- {
- return UM.Theme.getColor("primary")
- }
-
- return UM.Theme.getColor("monitor_tab_text_inactive")
- }
- }
- }
- Item
- {
- height: childrenRect.height
- anchors
- {
- right: collapseIcon.left
- rightMargin: UM.Theme.getSize("default_margin").width
- left: machineIcon.right
- leftMargin: UM.Theme.getSize("default_margin").width
-
- verticalCenter: machineIcon.verticalCenter
- }
-
- Label
- {
- id: machineNameLabel
- text: modelData.name
- width: parent.width
- elide: Text.ElideRight
- font: UM.Theme.getFont("default_bold")
- }
-
- Label
- {
- id: activeJobLabel
- text:
- {
- if (modelData.state == "disabled")
- {
- return catalog.i18nc("@label", "Not available")
- } else if (modelData.state == "unreachable")
- {
- return catalog.i18nc("@label", "Unreachable")
- }
- if (modelData.activePrintJob != null)
- {
- return modelData.activePrintJob.name
- }
- return catalog.i18nc("@label", "Available")
- }
- anchors.top: machineNameLabel.bottom
- width: parent.width
- elide: Text.ElideRight
- font: UM.Theme.getFont("default")
- color: UM.Theme.getColor("monitor_tab_text_inactive")
- }
- }
-
- UM.RecolorImage
- {
- id: collapseIcon
- width: 15
- height: 15
- sourceSize.width: width
- sourceSize.height: height
- source: base.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom")
- anchors.verticalCenter: parent.verticalCenter
- anchors.right: parent.right
- anchors.rightMargin: UM.Theme.getSize("default_margin").width
- color: "black"
- }
- }
-
- Item
- {
- id: detailedInfo
- property var printJob: modelData.activePrintJob
- visible: height == childrenRect.height
- anchors.top: printerInfo.bottom
- width: parent.width
- height: !base.collapsed ? childrenRect.height : 0
- opacity: visible ? 1 : 0
- Behavior on height { NumberAnimation { duration: 100 } }
- Behavior on opacity { NumberAnimation { duration: 100 } }
- Rectangle
- {
- id: topSpacer
- color:
- {
- if(modelData.state == "disabled")
- {
- return UM.Theme.getColor("monitor_lining_inactive")
- }
- return UM.Theme.getColor("viewport_background")
- }
- // UM.Theme.getColor("viewport_background")
- height: 1
- anchors
- {
- left: parent.left
- right: parent.right
- margins: UM.Theme.getSize("default_margin").width
- top: parent.top
- topMargin: UM.Theme.getSize("default_margin").width
- }
- }
- PrinterFamilyPill
- {
- id: printerFamilyPill
- color:
- {
- if(modelData.state == "disabled")
- {
- return "transparent"
- }
- return UM.Theme.getColor("viewport_background")
- }
- anchors.top: topSpacer.bottom
- anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- text: modelData.type
- anchors.left: parent.left
- anchors.leftMargin: UM.Theme.getSize("default_margin").width
- padding: 3
- }
- Row
- {
- id: extrudersInfo
- anchors.top: printerFamilyPill.bottom
- anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- anchors.left: parent.left
- anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width
- anchors.right: parent.right
- anchors.rightMargin: 2 * UM.Theme.getSize("default_margin").width
- height: childrenRect.height
- spacing: UM.Theme.getSize("default_margin").width
-
- PrintCoreConfiguration
- {
- id: leftExtruderInfo
- width: Math.round(parent.width / 2)
- printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[0]
- }
-
- PrintCoreConfiguration
- {
- id: rightExtruderInfo
- width: Math.round(parent.width / 2)
- printCoreConfiguration: modelData.printerConfiguration.extruderConfigurations[1]
- }
- }
-
- Rectangle
- {
- id: jobSpacer
- color: UM.Theme.getColor("viewport_background")
- height: 2
- anchors
- {
- left: parent.left
- right: parent.right
- margins: UM.Theme.getSize("default_margin").width
- top: extrudersInfo.bottom
- topMargin: 2 * UM.Theme.getSize("default_margin").height
- }
- }
-
- Item
- {
- id: jobInfo
- property var showJobInfo: modelData.activePrintJob != null && modelData.activePrintJob.state != "queued"
-
- anchors.top: jobSpacer.bottom
- anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.margins: UM.Theme.getSize("default_margin").width
- anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width
- height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height: 0
- visible: showJobInfo
- Label
- {
- id: printJobName
- text: modelData.activePrintJob != null ? modelData.activePrintJob.name : ""
- font: UM.Theme.getFont("default_bold")
- anchors.left: parent.left
- anchors.right: contextButton.left
- anchors.rightMargin: UM.Theme.getSize("default_margin").width
- elide: Text.ElideRight
- }
- Label
- {
- id: ownerName
- anchors.top: printJobName.bottom
- text: modelData.activePrintJob != null ? modelData.activePrintJob.owner : ""
- font: UM.Theme.getFont("default")
- opacity: 0.6
- width: parent.width
- elide: Text.ElideRight
- }
-
- function switchPopupState()
- {
- popup.visible ? popup.close() : popup.open()
- }
-
- Controls2.Button
- {
- id: contextButton
- text: "\u22EE" //Unicode; Three stacked points.
- width: 35
- height: width
- anchors
- {
- right: parent.right
- top: parent.top
- }
- hoverEnabled: true
-
- background: Rectangle
- {
- opacity: contextButton.down || contextButton.hovered ? 1 : 0
- width: contextButton.width
- height: contextButton.height
- radius: 0.5 * width
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: contextButton.text
- color: UM.Theme.getColor("monitor_tab_text_inactive")
- font.pixelSize: 25
- verticalAlignment: Text.AlignVCenter
- horizontalAlignment: Text.AlignHCenter
- }
-
- onClicked: parent.switchPopupState()
- }
-
- Controls2.Popup
- {
- // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
- id: popup
- clip: true
- closePolicy: Popup.CloseOnPressOutside
- x: (parent.width - width) + 26 * screenScaleFactor
- y: contextButton.height - 5 * screenScaleFactor // Because shadow
- width: 182 * screenScaleFactor
- height: contentItem.height + 2 * padding
- visible: false
- padding: 5 * screenScaleFactor // Because shadow
-
- transformOrigin: Popup.Top
- contentItem: Item
- {
- width: popup.width
- height: childrenRect.height + 36 * screenScaleFactor
- anchors.topMargin: 10 * screenScaleFactor
- anchors.bottomMargin: 10 * screenScaleFactor
- Controls2.Button
- {
- id: pauseButton
- text: modelData.activePrintJob != null && modelData.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause")
- onClicked:
- {
- if(modelData.activePrintJob.state == "paused")
- {
- modelData.activePrintJob.setState("print")
- }
- else if(modelData.activePrintJob.state == "printing")
- {
- modelData.activePrintJob.setState("pause")
- }
- popup.close()
- }
- width: parent.width
- enabled: modelData.activePrintJob != null && ["paused", "printing"].indexOf(modelData.activePrintJob.state) >= 0
- visible: enabled
- anchors.top: parent.top
- anchors.topMargin: 18 * screenScaleFactor
- height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
- hoverEnabled: true
- background: Rectangle
- {
- opacity: pauseButton.down || pauseButton.hovered ? 1 : 0
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: pauseButton.text
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- }
- }
-
- Controls2.Button
- {
- id: abortButton
- text: catalog.i18nc("@label", "Abort")
- onClicked:
- {
- abortConfirmationDialog.visible = true;
- popup.close();
- }
- width: parent.width
- height: 39 * screenScaleFactor
- anchors.top: pauseButton.bottom
- hoverEnabled: true
- enabled: modelData.activePrintJob != null && ["paused", "printing", "pre_print"].indexOf(modelData.activePrintJob.state) >= 0
- background: Rectangle
- {
- opacity: abortButton.down || abortButton.hovered ? 1 : 0
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: abortButton.text
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- }
- }
-
- MessageDialog
- {
- id: abortConfirmationDialog
- title: catalog.i18nc("@window:title", "Abort print")
- icon: StandardIcon.Warning
- text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(modelData.activePrintJob.name)
- standardButtons: StandardButton.Yes | StandardButton.No
- Component.onCompleted: visible = false
- onYes: modelData.activePrintJob.setState("abort")
- }
- }
-
- background: Item
- {
- width: popup.width
- height: popup.height
-
- DropShadow
- {
- anchors.fill: pointedRectangle
- radius: 5
- color: "#3F000000" // 25% shadow
- source: pointedRectangle
- transparentBorder: true
- verticalOffset: 2
- }
-
- Item
- {
- id: pointedRectangle
- width: parent.width - 10 * screenScaleFactor // Because of the shadow
- height: parent.height - 10 * screenScaleFactor // Because of the shadow
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
-
- Rectangle
- {
- id: point
- height: 14 * screenScaleFactor
- width: 14 * screenScaleFactor
- color: UM.Theme.getColor("setting_control")
- transform: Rotation { angle: 45}
- anchors.right: bloop.right
- anchors.rightMargin: 24
- y: 1
- }
-
- Rectangle
- {
- id: bloop
- color: UM.Theme.getColor("setting_control")
- width: parent.width
- anchors.top: parent.top
- anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
- }
- }
- }
-
- exit: Transition
- {
- // This applies a default NumberAnimation to any changes a state change makes to x or y properties
- NumberAnimation { property: "visible"; duration: 75; }
- }
- enter: Transition
- {
- // This applies a default NumberAnimation to any changes a state change makes to x or y properties
- NumberAnimation { property: "visible"; duration: 75; }
- }
-
- onClosed: visible = false
- onOpened: visible = true
- }
-
- Image
- {
- id: printJobPreview
- source: modelData.activePrintJob != null ? modelData.activePrintJob.previewImageUrl : ""
- anchors.top: ownerName.bottom
- anchors.horizontalCenter: parent.horizontalCenter
- width: parent.width / 2
- height: width
- opacity:
- {
- if(modelData.activePrintJob == null)
- {
- return 1.0
- }
-
- switch(modelData.activePrintJob.state)
- {
- case "wait_cleanup":
- case "wait_user_action":
- case "paused":
- return 0.5
- default:
- return 1.0
- }
- }
-
-
- }
-
- UM.RecolorImage
- {
- id: statusImage
- anchors.centerIn: printJobPreview
- source:
- {
- if(modelData.activePrintJob == null)
- {
- return ""
- }
- switch(modelData.activePrintJob.state)
- {
- case "paused":
- return "../svg/paused-icon.svg"
- case "wait_cleanup":
- if(modelData.activePrintJob.timeElapsed < modelData.activePrintJob.timeTotal)
- {
- return "../svg/aborted-icon.svg"
- }
- return "../svg/approved-icon.svg"
- case "wait_user_action":
- return "../svg/aborted-icon.svg"
- default:
- return ""
- }
- }
- visible: source != ""
- width: 0.5 * printJobPreview.width
- height: 0.5 * printJobPreview.height
- sourceSize.width: width
- sourceSize.height: height
- color: "black"
- }
-
- CameraButton
- {
- id: showCameraButton
- iconSource: "../svg/camera-icon.svg"
- anchors
- {
- left: parent.left
- bottom: printJobPreview.bottom
- }
- }
- }
- }
-
- ProgressBar
- {
- property var progress:
- {
- if(modelData.activePrintJob == null)
- {
- return 0
- }
- var result = modelData.activePrintJob.timeElapsed / modelData.activePrintJob.timeTotal
- if(result > 1.0)
- {
- result = 1.0
- }
- return result
- }
-
- id: jobProgressBar
- width: parent.width
- value: progress
- anchors.top: detailedInfo.bottom
- anchors.topMargin: UM.Theme.getSize("default_margin").height
-
- visible: modelData.activePrintJob != null && modelData.activePrintJob != undefined
-
- style: ProgressBarStyle
- {
- property var remainingTime:
- {
- if(modelData.activePrintJob == null)
- {
- return 0
- }
- /* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining
- time from ever being less than 0. Negative durations cause strange behavior such
- as displaying "-1h -1m". */
- var activeJob = modelData.activePrintJob
- return Math.max(activeJob.timeTotal - activeJob.timeElapsed, 0);
- }
- property var progressText:
- {
- if(modelData.activePrintJob == null)
- {
- return ""
- }
- switch(modelData.activePrintJob.state)
- {
- case "wait_cleanup":
- if(modelData.activePrintJob.timeTotal > modelData.activePrintJob.timeElapsed)
- {
- return catalog.i18nc("@label:status", "Aborted")
- }
- return catalog.i18nc("@label:status", "Finished")
- case "pre_print":
- case "sent_to_printer":
- return catalog.i18nc("@label:status", "Preparing")
- case "aborted":
- return catalog.i18nc("@label:status", "Aborted")
- case "wait_user_action":
- return catalog.i18nc("@label:status", "Aborted")
- case "pausing":
- return catalog.i18nc("@label:status", "Pausing")
- case "paused":
- return OutputDevice.formatDuration( remainingTime )
- case "resuming":
- return catalog.i18nc("@label:status", "Resuming")
- case "queued":
- return catalog.i18nc("@label:status", "Action required")
- default:
- return OutputDevice.formatDuration( remainingTime )
- }
- }
-
- background: Rectangle
- {
- implicitWidth: 100
- implicitHeight: visible ? 24 : 0
- color: UM.Theme.getColor("viewport_background")
- }
-
- progress: Rectangle
- {
- color:
- {
- var state = modelData.activePrintJob.state
- var inactiveStates = [
- "pausing",
- "paused",
- "resuming",
- "wait_cleanup"
- ]
- if(inactiveStates.indexOf(state) > -1 && remainingTime > 0)
- {
- return UM.Theme.getColor("monitor_tab_text_inactive")
- }
- else
- {
- return UM.Theme.getColor("primary")
- }
- }
- id: progressItem
- function getTextOffset()
- {
- if(progressItem.width + progressLabel.width + 16 < control.width)
- {
- return progressItem.width + UM.Theme.getSize("default_margin").width
- }
- else
- {
- return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width
- }
- }
-
- Label
- {
- id: progressLabel
- anchors.left: parent.left
- anchors.leftMargin: getTextOffset()
- text: progressText
- anchors.verticalCenter: parent.verticalCenter
- color: progressItem.width + progressLabel.width < control.width ? "black" : "white"
- width: contentWidth
- font: UM.Theme.getFont("default")
- }
- }
- }
- }
- }
+ printer: modelData
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 89fb8a2391..3e3f962908 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -40,7 +40,7 @@ Item {
layer.effect: DropShadow {
radius: root.shadowRadius
verticalOffset: 2 * screenScaleFactor
- color: "#3F000000" // 25% shadow
+ color: "#3F000000" // 25% shadow
}
Column {
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
new file mode 100644
index 0000000000..906774d2c2
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -0,0 +1,652 @@
+import QtQuick 2.3
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import QtQuick.Controls 1.4 as LegacyControls
+import UM 1.3 as UM
+
+Item {
+ id: root;
+
+ property var shadowRadius: 5;
+ property var shadowOffset: 2;
+ property var printer: null;
+ property var collapsed: true;
+
+ height: childrenRect.height + shadowRadius * 2; // Bubbles upward
+ width: parent.width; // Bubbles downward
+
+ // The actual card (white block)
+ Rectangle {
+ // 5px margin, but shifted 2px vertically because of the shadow
+ anchors {
+ topMargin: root.shadowRadius - root.shadowOffset;
+ bottomMargin: root.shadowRadius + root.shadowOffset;
+ leftMargin: root.shadowRadius;
+ rightMargin: root.shadowRadius;
+ }
+ color: {
+ if (printer.state == "disabled") {
+ return UM.Theme.getColor("monitor_tab_background_inactive");
+ } else {
+ return UM.Theme.getColor("monitor_tab_background_active");
+ }
+ }
+ height: childrenRect.height;
+ layer.effect: DropShadow {
+ radius: root.shadowRadius;
+ verticalOffset: root.shadowOffset;
+ color: "#3F000000"; // 25% shadow
+ }
+ layer.enabled: true
+ width: parent.width - 2 * shadowRadius;
+
+ // Main card
+ Rectangle {
+ id: mainCard;
+ anchors.top: parent.top;
+ color: "pink";
+ height: childrenRect.height;
+ width: parent.width;
+
+ // Machine icon
+ Item {
+ id: machineIcon;
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("wide_margin").width;
+ margins: UM.Theme.getSize("default_margin").width;
+ top: parent.top;
+ }
+ height: 58;
+ width: 58;
+
+ // Skeleton
+ Rectangle {
+ anchors {
+ fill: parent;
+ // margins: Math.round(UM.Theme.getSize("default_margin").width / 4);
+ }
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
+ visible: !printer;
+ }
+
+ // Content
+ UM.RecolorImage {
+ anchors.centerIn: parent;
+ color: {
+ if (printer.state == "disabled") {
+ return UM.Theme.getColor("monitor_tab_text_inactive");
+ }
+ if (printer.activePrintJob != undefined) {
+ return UM.Theme.getColor("primary");
+ }
+ return UM.Theme.getColor("monitor_tab_text_inactive");
+ }
+ height: sourceSize.height;
+ source: {
+ switch(printer.type) {
+ case "Ultimaker 3":
+ return "../svg/UM3-icon.svg";
+ case "Ultimaker 3 Extended":
+ return "../svg/UM3x-icon.svg";
+ case "Ultimaker S5":
+ return "../svg/UMs5-icon.svg";
+ }
+ }
+ visible: printer;
+ width: sourceSize.width;
+ }
+ }
+
+ // Printer info
+ Item {
+ id: printerInfo;
+ height: childrenRect.height
+ anchors {
+ left: machineIcon.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: collapseIcon.left;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: machineIcon.verticalCenter;
+ }
+
+ // Machine name
+ Item {
+ id: machineNameLabel;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width * 0.3;
+
+ // Skeleton
+ Rectangle {
+ anchors.fill: parent;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ visible: !printer;
+ }
+
+ // Actual content
+ Label {
+ anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default_bold");
+ text: printer.name;
+ visible: printer;
+ width: parent.width;
+ }
+ }
+
+ // Job name
+ Item {
+ id: activeJobLabel;
+ anchors {
+ top: machineNameLabel.bottom;
+ topMargin: Math.round(UM.Theme.getSize("default_margin").height / 2);
+ }
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width * 0.75;
+
+
+ // Skeleton
+ Rectangle {
+ anchors.fill: parent;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ visible: !printer;
+ }
+
+ // Actual content
+ Label {
+ anchors.fill: parent;
+ color: UM.Theme.getColor("monitor_tab_text_inactive");
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
+ text: {
+ if (printer.state == "disabled") {
+ return catalog.i18nc("@label", "Not available");
+ } else if (printer.state == "unreachable") {
+ return catalog.i18nc("@label", "Unreachable");
+ }
+ if (printer.activePrintJob != null) {
+ return printer.activePrintJob.name;
+ }
+ return catalog.i18nc("@label", "Available");
+ }
+ visible: printer;
+ }
+ }
+ }
+
+ // Collapse icon
+ UM.RecolorImage {
+ id: collapseIcon;
+ anchors {
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ color: UM.Theme.getColor("text");
+ height: 15; // TODO: Theme!
+ source: root.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom");
+ sourceSize.height: height;
+ sourceSize.width: width;
+ visible: printer;
+ width: 15; // TODO: Theme!
+ }
+
+ MouseArea {
+ anchors.fill: parent;
+ enabled: printer;
+ onClicked: {
+ console.log(printerInfo.height)
+ if (root.collapsed && model) {
+ printerList.currentIndex = model.index;
+ } else {
+ printerList.currentIndex = -1;
+ }
+ }
+ }
+
+ Connections {
+ target: printerList
+ onCurrentIndexChanged: {
+ root.collapsed = printerList.currentIndex != model.index;
+ }
+ }
+ }
+
+ // Detailed card
+ Rectangle {
+ width: parent.width;
+ height: 0;
+ anchors.top: mainCard.bottom;
+ anchors.bottom: progressBar.top;
+ }
+
+ // Progress bar
+ PrinterCardProgressBar {
+ id: progressBar;
+ anchors {
+ bottom: parent.bottom;
+ }
+ visible: printer && printer.activePrintJob != null && printer.activePrintJob != undefined;
+ width: parent.width;
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // Item
+ // {
+ // id: detailedInfo
+ // property var printJob: printer.activePrintJob
+ // visible: height == childrenRect.height
+ // anchors.top: printerInfo.bottom
+ // width: parent.width
+ // height: !root.collapsed ? childrenRect.height : 0
+ // opacity: visible ? 1 : 0
+ // Behavior on height { NumberAnimation { duration: 100 } }
+ // Behavior on opacity { NumberAnimation { duration: 100 } }
+ // Rectangle
+ // {
+ // id: topSpacer
+ // color:
+ // {
+ // if(printer.state == "disabled")
+ // {
+ // return UM.Theme.getColor("monitor_lining_inactive")
+ // }
+ // return UM.Theme.getColor("viewport_background")
+ // }
+ // // UM.Theme.getColor("viewport_background")
+ // height: 1
+ // anchors
+ // {
+ // left: parent.left
+ // right: parent.right
+ // margins: UM.Theme.getSize("default_margin").width
+ // top: parent.top
+ // topMargin: UM.Theme.getSize("default_margin").width
+ // }
+ // }
+ // PrinterFamilyPill
+ // {
+ // id: printerFamilyPill
+ // color:
+ // {
+ // if(printer.state == "disabled")
+ // {
+ // return "transparent"
+ // }
+ // return UM.Theme.getColor("viewport_background")
+ // }
+ // anchors.top: topSpacer.bottom
+ // anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
+ // text: printer.type
+ // anchors.left: parent.left
+ // anchors.leftMargin: UM.Theme.getSize("default_margin").width
+ // padding: 3
+ // }
+ // Row
+ // {
+ // id: extrudersInfo
+ // anchors.top: printerFamilyPill.bottom
+ // anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
+ // anchors.left: parent.left
+ // anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width
+ // anchors.right: parent.right
+ // anchors.rightMargin: 2 * UM.Theme.getSize("default_margin").width
+ // height: childrenRect.height
+ // spacing: UM.Theme.getSize("default_margin").width
+
+ // PrintCoreConfiguration
+ // {
+ // id: leftExtruderInfo
+ // width: Math.round(parent.width / 2)
+ // printCoreConfiguration: printer.printerConfiguration.extruderConfigurations[0]
+ // }
+
+ // PrintCoreConfiguration
+ // {
+ // id: rightExtruderInfo
+ // width: Math.round(parent.width / 2)
+ // printCoreConfiguration: printer.printerConfiguration.extruderConfigurations[1]
+ // }
+ // }
+
+ // Rectangle
+ // {
+ // id: jobSpacer
+ // color: UM.Theme.getColor("viewport_background")
+ // height: 2
+ // anchors
+ // {
+ // left: parent.left
+ // right: parent.right
+ // margins: UM.Theme.getSize("default_margin").width
+ // top: extrudersInfo.bottom
+ // topMargin: 2 * UM.Theme.getSize("default_margin").height
+ // }
+ // }
+
+ // Item
+ // {
+ // id: jobInfo
+ // property var showJobInfo: printer.activePrintJob != null && printer.activePrintJob.state != "queued"
+
+ // anchors.top: jobSpacer.bottom
+ // anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
+ // anchors.left: parent.left
+ // anchors.right: parent.right
+ // anchors.margins: UM.Theme.getSize("default_margin").width
+ // anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width
+ // height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height: 0
+ // visible: showJobInfo
+ // Label
+ // {
+ // id: printJobName
+ // text: printer.activePrintJob != null ? printer.activePrintJob.name : ""
+ // font: UM.Theme.getFont("default_bold")
+ // anchors.left: parent.left
+ // anchors.right: contextButton.left
+ // anchors.rightMargin: UM.Theme.getSize("default_margin").width
+ // elide: Text.ElideRight
+ // }
+ // Label
+ // {
+ // id: ownerName
+ // anchors.top: printJobName.bottom
+ // text: printer.activePrintJob != null ? printer.activePrintJob.owner : ""
+ // font: UM.Theme.getFont("default")
+ // opacity: 0.6
+ // width: parent.width
+ // elide: Text.ElideRight
+ // }
+
+ // function switchPopupState()
+ // {
+ // popup.visible ? popup.close() : popup.open()
+ // }
+
+ // Button
+ // {
+ // id: contextButton
+ // text: "\u22EE" //Unicode; Three stacked points.
+ // width: 35
+ // height: width
+ // anchors
+ // {
+ // right: parent.right
+ // top: parent.top
+ // }
+ // hoverEnabled: true
+
+ // background: Rectangle
+ // {
+ // opacity: contextButton.down || contextButton.hovered ? 1 : 0
+ // width: contextButton.width
+ // height: contextButton.height
+ // radius: 0.5 * width
+ // color: UM.Theme.getColor("viewport_background")
+ // }
+ // contentItem: Label
+ // {
+ // text: contextButton.text
+ // color: UM.Theme.getColor("monitor_tab_text_inactive")
+ // font.pixelSize: 25
+ // verticalAlignment: Text.AlignVCenter
+ // horizontalAlignment: Text.AlignHCenter
+ // }
+
+ // onClicked: parent.switchPopupState()
+ // }
+
+ // Popup
+ // {
+ // // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
+ // id: popup
+ // clip: true
+ // closePolicy: Popup.CloseOnPressOutside
+ // x: (parent.width - width) + 26 * screenScaleFactor
+ // y: contextButton.height - 5 * screenScaleFactor // Because shadow
+ // width: 182 * screenScaleFactor
+ // height: contentItem.height + 2 * padding
+ // visible: false
+ // padding: 5 * screenScaleFactor // Because shadow
+
+ // transformOrigin: Popup.Top
+ // contentItem: Item
+ // {
+ // width: popup.width
+ // height: childrenRect.height + 36 * screenScaleFactor
+ // anchors.topMargin: 10 * screenScaleFactor
+ // anchors.bottomMargin: 10 * screenScaleFactor
+ // Button
+ // {
+ // id: pauseButton
+ // text: printer.activePrintJob != null && printer.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause")
+ // onClicked:
+ // {
+ // if(printer.activePrintJob.state == "paused")
+ // {
+ // printer.activePrintJob.setState("print")
+ // }
+ // else if(printer.activePrintJob.state == "printing")
+ // {
+ // printer.activePrintJob.setState("pause")
+ // }
+ // popup.close()
+ // }
+ // width: parent.width
+ // enabled: printer.activePrintJob != null && ["paused", "printing"].indexOf(printer.activePrintJob.state) >= 0
+ // visible: enabled
+ // anchors.top: parent.top
+ // anchors.topMargin: 18 * screenScaleFactor
+ // height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
+ // hoverEnabled: true
+ // background: Rectangle
+ // {
+ // opacity: pauseButton.down || pauseButton.hovered ? 1 : 0
+ // color: UM.Theme.getColor("viewport_background")
+ // }
+ // contentItem: Label
+ // {
+ // text: pauseButton.text
+ // horizontalAlignment: Text.AlignLeft
+ // verticalAlignment: Text.AlignVCenter
+ // }
+ // }
+
+ // Button
+ // {
+ // id: abortButton
+ // text: catalog.i18nc("@label", "Abort")
+ // onClicked:
+ // {
+ // abortConfirmationDialog.visible = true;
+ // popup.close();
+ // }
+ // width: parent.width
+ // height: 39 * screenScaleFactor
+ // anchors.top: pauseButton.bottom
+ // hoverEnabled: true
+ // enabled: printer.activePrintJob != null && ["paused", "printing", "pre_print"].indexOf(printer.activePrintJob.state) >= 0
+ // background: Rectangle
+ // {
+ // opacity: abortButton.down || abortButton.hovered ? 1 : 0
+ // color: UM.Theme.getColor("viewport_background")
+ // }
+ // contentItem: Label
+ // {
+ // text: abortButton.text
+ // horizontalAlignment: Text.AlignLeft
+ // verticalAlignment: Text.AlignVCenter
+ // }
+ // }
+
+ // MessageDialog
+ // {
+ // id: abortConfirmationDialog
+ // title: catalog.i18nc("@window:title", "Abort print")
+ // icon: StandardIcon.Warning
+ // text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printer.activePrintJob.name)
+ // standardButtons: StandardButton.Yes | StandardButton.No
+ // Component.onCompleted: visible = false
+ // onYes: printer.activePrintJob.setState("abort")
+ // }
+ // }
+
+ // background: Item
+ // {
+ // width: popup.width
+ // height: popup.height
+
+ // DropShadow
+ // {
+ // anchors.fill: pointedRectangle
+ // radius: 5
+ // color: "#3F000000" // 25% shadow
+ // source: pointedRectangle
+ // transparentBorder: true
+ // verticalOffset: 2
+ // }
+
+ // Item
+ // {
+ // id: pointedRectangle
+ // width: parent.width - 10 * screenScaleFactor // Because of the shadow
+ // height: parent.height - 10 * screenScaleFactor // Because of the shadow
+ // anchors.horizontalCenter: parent.horizontalCenter
+ // anchors.verticalCenter: parent.verticalCenter
+
+ // Rectangle
+ // {
+ // id: point
+ // height: 14 * screenScaleFactor
+ // width: 14 * screenScaleFactor
+ // color: UM.Theme.getColor("setting_control")
+ // transform: Rotation { angle: 45}
+ // anchors.right: bloop.right
+ // anchors.rightMargin: 24
+ // y: 1
+ // }
+
+ // Rectangle
+ // {
+ // id: bloop
+ // color: UM.Theme.getColor("setting_control")
+ // width: parent.width
+ // anchors.top: parent.top
+ // anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
+ // anchors.bottom: parent.bottom
+ // anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
+ // }
+ // }
+ // }
+
+ // exit: Transition
+ // {
+ // // This applies a default NumberAnimation to any changes a state change makes to x or y properties
+ // NumberAnimation { property: "visible"; duration: 75; }
+ // }
+ // enter: Transition
+ // {
+ // // This applies a default NumberAnimation to any changes a state change makes to x or y properties
+ // NumberAnimation { property: "visible"; duration: 75; }
+ // }
+
+ // onClosed: visible = false
+ // onOpened: visible = true
+ // }
+
+ // Image
+ // {
+ // id: printJobPreview
+ // source: printer.activePrintJob != null ? printer.activePrintJob.previewImageUrl : ""
+ // anchors.top: ownerName.bottom
+ // anchors.horizontalCenter: parent.horizontalCenter
+ // width: parent.width / 2
+ // height: width
+ // opacity:
+ // {
+ // if(printer.activePrintJob == null)
+ // {
+ // return 1.0
+ // }
+
+ // switch(printer.activePrintJob.state)
+ // {
+ // case "wait_cleanup":
+ // case "wait_user_action":
+ // case "paused":
+ // return 0.5
+ // default:
+ // return 1.0
+ // }
+ // }
+
+
+ // }
+
+ // UM.RecolorImage
+ // {
+ // id: statusImage
+ // anchors.centerIn: printJobPreview
+ // source:
+ // {
+ // if(printer.activePrintJob == null)
+ // {
+ // return ""
+ // }
+ // switch(printer.activePrintJob.state)
+ // {
+ // case "paused":
+ // return "../svg/paused-icon.svg"
+ // case "wait_cleanup":
+ // if(printer.activePrintJob.timeElapsed < printer.activePrintJob.timeTotal)
+ // {
+ // return "../svg/aborted-icon.svg"
+ // }
+ // return "../svg/approved-icon.svg"
+ // case "wait_user_action":
+ // return "../svg/aborted-icon.svg"
+ // default:
+ // return ""
+ // }
+ // }
+ // visible: source != ""
+ // width: 0.5 * printJobPreview.width
+ // height: 0.5 * printJobPreview.height
+ // sourceSize.width: width
+ // sourceSize.height: height
+ // color: "black"
+ // }
+
+ // CameraButton
+ // {
+ // id: showCameraButton
+ // iconSource: "../svg/camera-icon.svg"
+ // anchors
+ // {
+ // left: parent.left
+ // bottom: printJobPreview.bottom
+ // }
+ // }
+ // }
+ // }
+ // }
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
new file mode 100644
index 0000000000..01bd908c8b
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
@@ -0,0 +1,119 @@
+import QtQuick 2.3
+import QtQuick.Controls.Styles 1.3
+import QtQuick.Controls 1.4
+import UM 1.3 as UM
+
+ProgressBar {
+ property var progress: {
+ if (printer.activePrintJob == null) {
+ return 0;
+ }
+ var result = printer.activePrintJob.timeElapsed / printer.activePrintJob.timeTotal;
+ if (result > 1.0) {
+ result = 1.0;
+ }
+ return result;
+ }
+ value: progress;
+
+ style: ProgressBarStyle {
+ property var remainingTime:
+ {
+ if(printer.activePrintJob == null)
+ {
+ return 0
+ }
+ /* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining
+ time from ever being less than 0. Negative durations cause strange behavior such
+ as displaying "-1h -1m". */
+ var activeJob = printer.activePrintJob
+ return Math.max(activeJob.timeTotal - activeJob.timeElapsed, 0);
+ }
+ property var progressText:
+ {
+ if(printer.activePrintJob == null)
+ {
+ return ""
+ }
+ switch(printer.activePrintJob.state)
+ {
+ case "wait_cleanup":
+ if(printer.activePrintJob.timeTotal > printer.activePrintJob.timeElapsed)
+ {
+ return catalog.i18nc("@label:status", "Aborted")
+ }
+ return catalog.i18nc("@label:status", "Finished")
+ case "pre_print":
+ case "sent_to_printer":
+ return catalog.i18nc("@label:status", "Preparing")
+ case "aborted":
+ return catalog.i18nc("@label:status", "Aborted")
+ case "wait_user_action":
+ return catalog.i18nc("@label:status", "Aborted")
+ case "pausing":
+ return catalog.i18nc("@label:status", "Pausing")
+ case "paused":
+ return OutputDevice.formatDuration( remainingTime )
+ case "resuming":
+ return catalog.i18nc("@label:status", "Resuming")
+ case "queued":
+ return catalog.i18nc("@label:status", "Action required")
+ default:
+ return OutputDevice.formatDuration( remainingTime )
+ }
+ }
+
+ background: Rectangle
+ {
+ implicitWidth: 100
+ implicitHeight: visible ? 24 : 0
+ color: UM.Theme.getColor("viewport_background")
+ }
+
+ progress: Rectangle
+ {
+ color:
+ {
+ var state = printer.activePrintJob.state
+ var inactiveStates = [
+ "pausing",
+ "paused",
+ "resuming",
+ "wait_cleanup"
+ ]
+ if(inactiveStates.indexOf(state) > -1 && remainingTime > 0)
+ {
+ return UM.Theme.getColor("monitor_tab_text_inactive")
+ }
+ else
+ {
+ return UM.Theme.getColor("primary")
+ }
+ }
+ id: progressItem
+ function getTextOffset()
+ {
+ if(progressItem.width + progressLabel.width + 16 < control.width)
+ {
+ return progressItem.width + UM.Theme.getSize("default_margin").width
+ }
+ else
+ {
+ return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width
+ }
+ }
+
+ Label
+ {
+ id: progressLabel
+ anchors.left: parent.left
+ anchors.leftMargin: getTextOffset()
+ text: progressText
+ anchors.verticalCenter: parent.verticalCenter
+ color: progressItem.width + progressLabel.width < control.width ? "black" : "white"
+ width: contentWidth
+ font: UM.Theme.getFont("default")
+ }
+ }
+ }
+}
\ No newline at end of file
From 6e467721700ce3aa79f55cf4bcf364d40aba5da6 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 12:25:03 +0200
Subject: [PATCH 132/390] Fix imports in Backup
---
cura/Backups/Backup.py | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py
index cc47df770e..b9045a59b1 100644
--- a/cura/Backups/Backup.py
+++ b/cura/Backups/Backup.py
@@ -4,18 +4,18 @@
import io
import os
import re
-
import shutil
-
-from typing import Dict, Optional
from zipfile import ZipFile, ZIP_DEFLATED, BadZipfile
+from typing import Dict, Optional, TYPE_CHECKING
from UM import i18nCatalog
from UM.Logger import Logger
from UM.Message import Message
from UM.Platform import Platform
from UM.Resources import Resources
-from cura.CuraApplication import CuraApplication
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
## The back-up class holds all data about a back-up.
@@ -29,7 +29,8 @@ class Backup:
# Re-use translation catalog.
catalog = i18nCatalog("cura")
- def __init__(self, zip_file: bytes = None, meta_data: Dict[str, str] = None) -> None:
+ def __init__(self, application: "CuraApplication", zip_file: bytes = None, meta_data: Dict[str, str] = None) -> None:
+ self.application = application
self.zip_file = zip_file # type: Optional[bytes]
self.meta_data = meta_data # type: Optional[Dict[str, str]]
@@ -41,12 +42,12 @@ class Backup:
Logger.log("d", "Creating backup for Cura %s, using folder %s", cura_release, version_data_dir)
# Ensure all current settings are saved.
- CuraApplication.getInstance().saveSettings()
+ self.application.saveSettings()
# We copy the preferences file to the user data directory in Linux as it's in a different location there.
# When restoring a backup on Linux, we move it back.
if Platform.isLinux():
- preferences_file_name = CuraApplication.getInstance().getApplicationName()
+ preferences_file_name = self.application.getApplicationName()
preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name))
backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name))
Logger.log("d", "Copying preferences file from %s to %s", preferences_file, backup_preferences_file)
@@ -112,7 +113,7 @@ class Backup:
"Tried to restore a Cura backup without having proper data or meta data."))
return False
- current_version = CuraApplication.getInstance().getVersion()
+ current_version = self.application.getVersion()
version_to_restore = self.meta_data.get("cura_release", "master")
if current_version != version_to_restore:
# Cannot restore version older or newer than current because settings might have changed.
@@ -128,7 +129,7 @@ class Backup:
# Under Linux, preferences are stored elsewhere, so we copy the file to there.
if Platform.isLinux():
- preferences_file_name = CuraApplication.getInstance().getApplicationName()
+ preferences_file_name = self.application.getApplicationName()
preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name))
backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name))
Logger.log("d", "Moving preferences file from %s to %s", backup_preferences_file, preferences_file)
From 3a01b63343668781cfcbb2bec84e8ec8d68d19b9 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 12:33:16 +0200
Subject: [PATCH 133/390] Fix refactor and tests
---
cura/Backups/BackupsManager.py | 2 +-
cura/OAuth2/AuthorizationService.py | 3 ++-
tests/TestOAuth2.py | 22 ++++++++++++++--------
3 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/cura/Backups/BackupsManager.py b/cura/Backups/BackupsManager.py
index a4d8528960..6dfb4ae8bd 100644
--- a/cura/Backups/BackupsManager.py
+++ b/cura/Backups/BackupsManager.py
@@ -23,7 +23,7 @@ class BackupsManager:
# containing some metadata (like version).
def createBackup(self) -> Tuple[Optional[bytes], Optional[Dict[str, str]]]:
self._disableAutoSave()
- backup = Backup()
+ backup = Backup(self._application)
backup.makeFromCurrent()
self._enableAutoSave()
# We don't return a Backup here because we want plugins only to interact with our API and not full objects.
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index df068cc43e..65b31f1ed7 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -39,7 +39,8 @@ class AuthorizationService:
self._server = LocalAuthorizationServer(self._auth_helpers, self._onAuthStateChanged, daemon=True)
def initialize(self, preferences: Optional["Preferences"] = None) -> None:
- self._preferences = preferences
+ if preferences is not None:
+ self._preferences = preferences
if self._preferences:
self._preferences.addPreference(self._settings.AUTH_DATA_PREFERENCE_KEY, "{}")
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 78585804f5..608d529e9f 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -31,15 +31,17 @@ MALFORMED_AUTH_RESPONSE = AuthenticationResponse()
def test_cleanAuthService() -> None:
# Ensure that when setting up an AuthorizationService, no data is set.
- authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
+ authorization_service = AuthorizationService(OAUTH_SETTINGS, Preferences())
+ authorization_service.initialize()
assert authorization_service.getUserProfile() is None
assert authorization_service.getAccessToken() is None
def test_failedLogin() -> None:
- authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
+ authorization_service = AuthorizationService(OAUTH_SETTINGS, Preferences())
authorization_service.onAuthenticationError.emit = MagicMock()
authorization_service.onAuthStateChanged.emit = MagicMock()
+ authorization_service.initialize()
# Let the service think there was a failed response
authorization_service._onAuthStateChanged(FAILED_AUTH_RESPONSE)
@@ -58,7 +60,8 @@ def test_failedLogin() -> None:
@patch.object(AuthorizationService, "getUserProfile", return_value=UserProfile())
def test_storeAuthData(get_user_profile) -> None:
preferences = Preferences()
- authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ authorization_service = AuthorizationService(OAUTH_SETTINGS, preferences)
+ authorization_service.initialize()
# Write stuff to the preferences.
authorization_service._storeAuthData(SUCCESFULL_AUTH_RESPONSE)
@@ -67,7 +70,8 @@ def test_storeAuthData(get_user_profile) -> None:
assert preference_value is not None and preference_value != {}
# Create a second auth service, so we can load the data.
- second_auth_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ second_auth_service = AuthorizationService(OAUTH_SETTINGS, preferences)
+ second_auth_service.initialize()
second_auth_service.loadAuthDataFromPreferences()
assert second_auth_service.getAccessToken() == SUCCESFULL_AUTH_RESPONSE.access_token
@@ -77,7 +81,7 @@ def test_storeAuthData(get_user_profile) -> None:
@patch.object(webbrowser, "open_new")
def test_localAuthServer(webbrowser_open, start_auth_server, stop_auth_server) -> None:
preferences = Preferences()
- authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ authorization_service = AuthorizationService(OAUTH_SETTINGS, preferences)
authorization_service.startAuthorizationFlow()
assert webbrowser_open.call_count == 1
@@ -92,9 +96,10 @@ def test_localAuthServer(webbrowser_open, start_auth_server, stop_auth_server) -
def test_loginAndLogout() -> None:
preferences = Preferences()
- authorization_service = AuthorizationService(preferences, OAUTH_SETTINGS)
+ authorization_service = AuthorizationService(OAUTH_SETTINGS, preferences)
authorization_service.onAuthenticationError.emit = MagicMock()
authorization_service.onAuthStateChanged.emit = MagicMock()
+ authorization_service.initialize()
# Let the service think there was a succesfull response
with patch.object(AuthorizationHelpers, "parseJWT", return_value=UserProfile()):
@@ -121,7 +126,8 @@ def test_loginAndLogout() -> None:
def test_wrongServerResponses() -> None:
- authorization_service = AuthorizationService(Preferences(), OAUTH_SETTINGS)
+ authorization_service = AuthorizationService(OAUTH_SETTINGS, Preferences())
+ authorization_service.initialize()
with patch.object(AuthorizationHelpers, "parseJWT", return_value=UserProfile()):
authorization_service._onAuthStateChanged(MALFORMED_AUTH_RESPONSE)
- assert authorization_service.getUserProfile() is None
\ No newline at end of file
+ assert authorization_service.getUserProfile() is None
From 6e2f7e72b699183bab9890bc6802f1fa95a71408 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 12:34:00 +0200
Subject: [PATCH 134/390] Fix missing argument
---
cura/Backups/BackupsManager.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/Backups/BackupsManager.py b/cura/Backups/BackupsManager.py
index 6dfb4ae8bd..a0d3881209 100644
--- a/cura/Backups/BackupsManager.py
+++ b/cura/Backups/BackupsManager.py
@@ -41,7 +41,7 @@ class BackupsManager:
self._disableAutoSave()
- backup = Backup(zip_file = zip_file, meta_data = meta_data)
+ backup = Backup(self._application, zip_file = zip_file, meta_data = meta_data)
restored = backup.restore()
if restored:
# At this point, Cura will need to restart for the changes to take effect.
From a573a598b01445d0f785e4b9256d6c66e96012ab Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 12:40:44 +0200
Subject: [PATCH 135/390] Add typing and appease MYPY
---
cura/PrinterOutput/FirmwareUpdater.py | 23 +++--
cura/PrinterOutput/PrintJobOutputModel.py | 2 +-
cura/PrinterOutput/PrinterOutputController.py | 31 +++---
cura/PrinterOutput/PrinterOutputModel.py | 97 ++++++++++---------
plugins/USBPrinting/AvrFirmwareUpdater.py | 2 +-
plugins/USBPrinting/USBPrinterOutputDevice.py | 4 +-
6 files changed, 83 insertions(+), 76 deletions(-)
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index e7ffc2a2b5..06e019c593 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -5,9 +5,11 @@ from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
from UM.Resources import Resources
from cura.PrinterOutputDevice import PrinterOutputDevice
+from cura.CuraApplication import CuraApplication
from enum import IntEnum
from threading import Thread
+from typing import Any
class FirmwareUpdater(QObject):
firmwareProgressChanged = pyqtSignal()
@@ -19,11 +21,11 @@ class FirmwareUpdater(QObject):
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
self._firmware_view = None
- self._firmware_location = None
+ self._firmware_location = ""
self._firmware_progress = 0
self._firmware_update_state = FirmwareUpdateState.idle
- def updateFirmware(self, file):
+ def updateFirmware(self, file: Any[str, QUrl]) -> None:
# the file path could be url-encoded.
if file.startswith("file://"):
self._firmware_location = QUrl(file).toLocalFile()
@@ -33,10 +35,10 @@ class FirmwareUpdater(QObject):
self.setFirmwareUpdateState(FirmwareUpdateState.updating)
self._update_firmware_thread.start()
- def _updateFirmware(self):
+ def _updateFirmware(self) -> None:
raise NotImplementedError("_updateFirmware needs to be implemented")
- def cleanupAfterUpdate(self):
+ def cleanupAfterUpdate(self) -> None:
# Clean up for next attempt.
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
self._firmware_location = ""
@@ -45,28 +47,29 @@ class FirmwareUpdater(QObject):
## Show firmware interface.
# This will create the view if its not already created.
- def showFirmwareInterface(self):
+ def showFirmwareInterface(self) -> None:
if self._firmware_view is None:
path = Resources.getPath(self.ResourceTypes.QmlFiles, "FirmwareUpdateWindow.qml")
self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
- self._firmware_view.show()
+ if self._firmware_view:
+ self._firmware_view.show()
@pyqtProperty(float, notify = firmwareProgressChanged)
- def firmwareProgress(self):
+ def firmwareProgress(self) -> float:
return self._firmware_progress
@pyqtProperty(int, notify=firmwareUpdateStateChanged)
- def firmwareUpdateState(self):
+ def firmwareUpdateState(self) -> FirmwareUpdateState:
return self._firmware_update_state
- def setFirmwareUpdateState(self, state):
+ def setFirmwareUpdateState(self, state) -> None:
if self._firmware_update_state != state:
self._firmware_update_state = state
self.firmwareUpdateStateChanged.emit()
# Callback function for firmware update progress.
- def _onFirmwareProgress(self, progress, max_progress = 100):
+ def _onFirmwareProgress(self, progress, max_progress = 100) -> None:
self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100
self.firmwareProgressChanged.emit()
diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py
index 7366b95f86..5b8cc39ad8 100644
--- a/cura/PrinterOutput/PrintJobOutputModel.py
+++ b/cura/PrinterOutput/PrintJobOutputModel.py
@@ -91,7 +91,7 @@ class PrintJobOutputModel(QObject):
def assignedPrinter(self):
return self._assigned_printer
- def updateAssignedPrinter(self, assigned_printer: "PrinterOutputModel"):
+ def updateAssignedPrinter(self, assigned_printer: Optional[PrinterOutputModel]):
if self._assigned_printer != assigned_printer:
old_printer = self._assigned_printer
self._assigned_printer = assigned_printer
diff --git a/cura/PrinterOutput/PrinterOutputController.py b/cura/PrinterOutput/PrinterOutputController.py
index dd2276d771..9a29233f95 100644
--- a/cura/PrinterOutput/PrinterOutputController.py
+++ b/cura/PrinterOutput/PrinterOutputController.py
@@ -4,15 +4,18 @@
from UM.Logger import Logger
from UM.Signal import Signal
+from typing import Any
+
MYPY = False
if MYPY:
from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
+ from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice
class PrinterOutputController:
- def __init__(self, output_device):
+ def __init__(self, output_device: PrinterOutputDevice) -> None:
self.can_pause = True
self.can_abort = True
self.can_pre_heat_bed = True
@@ -22,44 +25,44 @@ class PrinterOutputController:
self.can_update_firmware = False
self._output_device = output_device
- def setTargetHotendTemperature(self, printer: "PrinterOutputModel", extruder: "ExtruderOutputModel", temperature: int):
+ def setTargetHotendTemperature(self, printer: "PrinterOutputModel", extruder: "ExtruderOutputModel", temperature: Any[int, float]) -> None:
Logger.log("w", "Set target hotend temperature not implemented in controller")
- def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int):
+ def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int) -> None:
Logger.log("w", "Set target bed temperature not implemented in controller")
- def setJobState(self, job: "PrintJobOutputModel", state: str):
+ def setJobState(self, job: "PrintJobOutputModel", state: str) -> None:
Logger.log("w", "Set job state not implemented in controller")
- def cancelPreheatBed(self, printer: "PrinterOutputModel"):
+ def cancelPreheatBed(self, printer: "PrinterOutputModel") -> None:
Logger.log("w", "Cancel preheat bed not implemented in controller")
- def preheatBed(self, printer: "PrinterOutputModel", temperature, duration):
+ def preheatBed(self, printer: "PrinterOutputModel", temperature, duration) -> None:
Logger.log("w", "Preheat bed not implemented in controller")
- def cancelPreheatHotend(self, extruder: "ExtruderOutputModel"):
+ def cancelPreheatHotend(self, extruder: "ExtruderOutputModel") -> None:
Logger.log("w", "Cancel preheat hotend not implemented in controller")
- def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration):
+ def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration) -> None:
Logger.log("w", "Preheat hotend not implemented in controller")
- def setHeadPosition(self, printer: "PrinterOutputModel", x, y, z, speed):
+ def setHeadPosition(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
Logger.log("w", "Set head position not implemented in controller")
- def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed):
+ def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
Logger.log("w", "Move head not implemented in controller")
- def homeBed(self, printer: "PrinterOutputModel"):
+ def homeBed(self, printer: "PrinterOutputModel") -> None:
Logger.log("w", "Home bed not implemented in controller")
- def homeHead(self, printer: "PrinterOutputModel"):
+ def homeHead(self, printer: "PrinterOutputModel") -> None:
Logger.log("w", "Home head not implemented in controller")
- def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
+ def sendRawCommand(self, printer: "PrinterOutputModel", command: str) -> None:
Logger.log("w", "Custom command not implemented in controller")
canUpdateFirmwareChanged = Signal()
- def setCanUpdateFirmware(self, can_update_firmware: bool):
+ def setCanUpdateFirmware(self, can_update_firmware: bool) -> None:
if can_update_firmware != self.can_update_firmware:
self.can_update_firmware = can_update_firmware
self.canUpdateFirmwareChanged.emit()
\ No newline at end of file
diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py
index 859165aef3..96feef1b55 100644
--- a/cura/PrinterOutput/PrinterOutputModel.py
+++ b/cura/PrinterOutput/PrinterOutputModel.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot
-from typing import Optional
+from typing import List, Dict, Optional
from UM.Math.Vector import Vector
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel
@@ -11,6 +11,7 @@ MYPY = False
if MYPY:
from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
+ from cura.PrinterOutput.NetworkCamera import NetworkCamera
class PrinterOutputModel(QObject):
@@ -44,7 +45,7 @@ class PrinterOutputModel(QObject):
self._printer_state = "unknown"
self._is_preheating = False
self._printer_type = ""
- self._buildplate_name = None
+ self._buildplate_name = ""
self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in
self._extruders]
@@ -52,32 +53,32 @@ class PrinterOutputModel(QObject):
self._camera = None
@pyqtProperty(str, constant = True)
- def firmwareVersion(self):
+ def firmwareVersion(self) -> str:
return self._firmware_version
- def setCamera(self, camera):
+ def setCamera(self, camera: Optional["NetworkCamera"]) -> None:
if self._camera is not camera:
self._camera = camera
self.cameraChanged.emit()
- def updateIsPreheating(self, pre_heating):
+ def updateIsPreheating(self, pre_heating: bool) -> None:
if self._is_preheating != pre_heating:
self._is_preheating = pre_heating
self.isPreheatingChanged.emit()
@pyqtProperty(bool, notify=isPreheatingChanged)
- def isPreheating(self):
+ def isPreheating(self) -> bool:
return self._is_preheating
@pyqtProperty(QObject, notify=cameraChanged)
- def camera(self):
+ def camera(self) -> Optional["NetworkCamera"]:
return self._camera
@pyqtProperty(str, notify = printerTypeChanged)
- def type(self):
+ def type(self) -> str:
return self._printer_type
- def updateType(self, printer_type):
+ def updateType(self, printer_type: str) -> None:
if self._printer_type != printer_type:
self._printer_type = printer_type
self._printer_configuration.printerType = self._printer_type
@@ -85,10 +86,10 @@ class PrinterOutputModel(QObject):
self.configurationChanged.emit()
@pyqtProperty(str, notify = buildplateChanged)
- def buildplate(self):
+ def buildplate(self) -> str:
return self._buildplate_name
- def updateBuildplateName(self, buildplate_name):
+ def updateBuildplateName(self, buildplate_name: str) -> None:
if self._buildplate_name != buildplate_name:
self._buildplate_name = buildplate_name
self._printer_configuration.buildplateConfiguration = self._buildplate_name
@@ -96,66 +97,66 @@ class PrinterOutputModel(QObject):
self.configurationChanged.emit()
@pyqtProperty(str, notify=keyChanged)
- def key(self):
+ def key(self) -> str:
return self._key
- def updateKey(self, key: str):
+ def updateKey(self, key: str) -> None:
if self._key != key:
self._key = key
self.keyChanged.emit()
@pyqtSlot()
- def homeHead(self):
+ def homeHead(self) -> None:
self._controller.homeHead(self)
@pyqtSlot()
- def homeBed(self):
+ def homeBed(self) -> None:
self._controller.homeBed(self)
@pyqtSlot(str)
- def sendRawCommand(self, command: str):
+ def sendRawCommand(self, command: str) -> None:
self._controller.sendRawCommand(self, command)
@pyqtProperty("QVariantList", constant = True)
- def extruders(self):
+ def extruders(self) -> List["ExtruderOutputModel"]:
return self._extruders
@pyqtProperty(QVariant, notify = headPositionChanged)
- def headPosition(self):
+ def headPosition(self) -> Dict[str, float]:
return {"x": self._head_position.x, "y": self._head_position.y, "z": self.head_position.z}
- def updateHeadPosition(self, x, y, z):
+ def updateHeadPosition(self, x: float, y: float, z: float) -> None:
if self._head_position.x != x or self._head_position.y != y or self._head_position.z != z:
self._head_position = Vector(x, y, z)
self.headPositionChanged.emit()
@pyqtProperty(float, float, float)
@pyqtProperty(float, float, float, float)
- def setHeadPosition(self, x, y, z, speed = 3000):
+ def setHeadPosition(self, x: float, y: float, z: float, speed: float = 3000) -> None:
self.updateHeadPosition(x, y, z)
self._controller.setHeadPosition(self, x, y, z, speed)
@pyqtProperty(float)
@pyqtProperty(float, float)
- def setHeadX(self, x, speed = 3000):
+ def setHeadX(self, x: float, speed: float = 3000) -> None:
self.updateHeadPosition(x, self._head_position.y, self._head_position.z)
self._controller.setHeadPosition(self, x, self._head_position.y, self._head_position.z, speed)
@pyqtProperty(float)
@pyqtProperty(float, float)
- def setHeadY(self, y, speed = 3000):
+ def setHeadY(self, y: float, speed: float = 3000) -> None:
self.updateHeadPosition(self._head_position.x, y, self._head_position.z)
self._controller.setHeadPosition(self, self._head_position.x, y, self._head_position.z, speed)
@pyqtProperty(float)
@pyqtProperty(float, float)
- def setHeadZ(self, z, speed = 3000):
+ def setHeadZ(self, z: float, speed:float = 3000) -> None:
self.updateHeadPosition(self._head_position.x, self._head_position.y, z)
self._controller.setHeadPosition(self, self._head_position.x, self._head_position.y, z, speed)
@pyqtSlot(float, float, float)
@pyqtSlot(float, float, float, float)
- def moveHead(self, x = 0, y = 0, z = 0, speed = 3000):
+ def moveHead(self, x: float = 0, y: float = 0, z: float = 0, speed: float = 3000) -> None:
self._controller.moveHead(self, x, y, z, speed)
## Pre-heats the heated bed of the printer.
@@ -164,47 +165,47 @@ class PrinterOutputModel(QObject):
# Celsius.
# \param duration How long the bed should stay warm, in seconds.
@pyqtSlot(float, float)
- def preheatBed(self, temperature, duration):
+ def preheatBed(self, temperature: float, duration: float) -> None:
self._controller.preheatBed(self, temperature, duration)
@pyqtSlot()
- def cancelPreheatBed(self):
+ def cancelPreheatBed(self) -> None:
self._controller.cancelPreheatBed(self)
- def getController(self):
+ def getController(self) -> PrinterOutputController:
return self._controller
@pyqtProperty(str, notify=nameChanged)
- def name(self):
+ def name(self) -> str:
return self._name
- def setName(self, name):
+ def setName(self, name: str) -> None:
self._setName(name)
self.updateName(name)
- def updateName(self, name):
+ def updateName(self, name: str) -> None:
if self._name != name:
self._name = name
self.nameChanged.emit()
## Update the bed temperature. This only changes it locally.
- def updateBedTemperature(self, temperature):
+ def updateBedTemperature(self, temperature: int) -> None:
if self._bed_temperature != temperature:
self._bed_temperature = temperature
self.bedTemperatureChanged.emit()
- def updateTargetBedTemperature(self, temperature):
+ def updateTargetBedTemperature(self, temperature: int) -> None:
if self._target_bed_temperature != temperature:
self._target_bed_temperature = temperature
self.targetBedTemperatureChanged.emit()
## Set the target bed temperature. This ensures that it's actually sent to the remote.
@pyqtSlot(int)
- def setTargetBedTemperature(self, temperature):
+ def setTargetBedTemperature(self, temperature: int) -> None:
self._controller.setTargetBedTemperature(self, temperature)
self.updateTargetBedTemperature(temperature)
- def updateActivePrintJob(self, print_job):
+ def updateActivePrintJob(self, print_job: Optional[PrintJobOutputModel]) -> None:
if self._active_print_job != print_job:
old_print_job = self._active_print_job
@@ -216,83 +217,83 @@ class PrinterOutputModel(QObject):
old_print_job.updateAssignedPrinter(None)
self.activePrintJobChanged.emit()
- def updateState(self, printer_state):
+ def updateState(self, printer_state: str) -> None:
if self._printer_state != printer_state:
self._printer_state = printer_state
self.stateChanged.emit()
@pyqtProperty(QObject, notify = activePrintJobChanged)
- def activePrintJob(self):
+ def activePrintJob(self) -> Optional[PrintJobOutputModel]:
return self._active_print_job
@pyqtProperty(str, notify=stateChanged)
- def state(self):
+ def state(self) -> str:
return self._printer_state
@pyqtProperty(int, notify = bedTemperatureChanged)
- def bedTemperature(self):
+ def bedTemperature(self) -> int:
return self._bed_temperature
@pyqtProperty(int, notify=targetBedTemperatureChanged)
- def targetBedTemperature(self):
+ def targetBedTemperature(self) -> int:
return self._target_bed_temperature
# Does the printer support pre-heating the bed at all
@pyqtProperty(bool, constant=True)
- def canPreHeatBed(self):
+ def canPreHeatBed(self) -> bool:
if self._controller:
return self._controller.can_pre_heat_bed
return False
# Does the printer support pre-heating the bed at all
@pyqtProperty(bool, constant=True)
- def canPreHeatHotends(self):
+ def canPreHeatHotends(self) -> bool:
if self._controller:
return self._controller.can_pre_heat_hotends
return False
# Does the printer support sending raw G-code at all
@pyqtProperty(bool, constant=True)
- def canSendRawGcode(self):
+ def canSendRawGcode(self) -> bool:
if self._controller:
return self._controller.can_send_raw_gcode
return False
# Does the printer support pause at all
@pyqtProperty(bool, constant=True)
- def canPause(self):
+ def canPause(self) -> bool:
if self._controller:
return self._controller.can_pause
return False
# Does the printer support abort at all
@pyqtProperty(bool, constant=True)
- def canAbort(self):
+ def canAbort(self) -> bool:
if self._controller:
return self._controller.can_abort
return False
# Does the printer support manual control at all
@pyqtProperty(bool, constant=True)
- def canControlManually(self):
+ def canControlManually(self) -> bool:
if self._controller:
return self._controller.can_control_manually
return False
# Does the printer support upgrading firmware
@pyqtProperty(bool, notify = canUpdateFirmwareChanged)
- def canUpdateFirmware(self):
+ def canUpdateFirmware(self) -> bool:
if self._controller:
return self._controller.can_update_firmware
return False
# Stub to connect UM.Signal to pyqtSignal
- def _onControllerCanUpdateFirmwareChanged(self):
+ def _onControllerCanUpdateFirmwareChanged(self) -> None:
self.canUpdateFirmwareChanged.emit()
# Returns the configuration (material, variant and buildplate) of the current printer
@pyqtProperty(QObject, notify = configurationChanged)
- def printerConfiguration(self):
+ def printerConfiguration(self) -> Optional[ConfigurationModel]:
if self._printer_configuration.isValid():
return self._printer_configuration
return None
\ No newline at end of file
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index 171c81d557..c3852c46f6 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -10,7 +10,7 @@ class AvrFirmwareUpdater(FirmwareUpdater):
def __init__(self, output_device: PrinterOutputDevice) -> None:
super().__init__(output_device)
- def _updateFirmware(self):
+ def _updateFirmware(self) -> None:
try:
hex_file = intelHex.readHex(self._firmware_location)
assert len(hex_file) > 0
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 4813696ffe..5e18e216bc 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -99,12 +99,12 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
application.triggerNextExitCheck()
@pyqtSlot(str)
- def updateFirmware(self, file):
+ def updateFirmware(self, file: Any[str, QUrl]) -> None:
self._firmware_updater.updateFirmware(file)
## Reset USB device settings
#
- def resetDeviceSettings(self):
+ def resetDeviceSettings(self) -> None:
self._firmware_name = None
## Request the current scene to be sent to a USB-connected printer.
From 6be6d6cfc322630c20db6fbfa5271967324b60d4 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 12:49:53 +0200
Subject: [PATCH 136/390] Fixed missing typing import
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 5e18e216bc..c9fcdbe625 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -21,7 +21,7 @@ from serial import Serial, SerialException, SerialTimeoutException
from threading import Thread, Event
from time import time, sleep
from queue import Queue
-from typing import Union, Optional, List, cast
+from typing import Union, Optional, List, cast, Any
import re
import functools # Used for reduce
From 6ecc9366cb6ee80ad11bab33371dec7799a899ae Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 13:06:09 +0200
Subject: [PATCH 137/390] Fix filename typos
---
resources/definitions/ultimaker_original.def.json | 2 +-
resources/definitions/ultimaker_original_dual.def.json | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json
index bb6a64d8dc..bb21e4b82e 100644
--- a/resources/definitions/ultimaker_original.def.json
+++ b/resources/definitions/ultimaker_original.def.json
@@ -20,7 +20,7 @@
"0": "ultimaker_original_extruder_0"
},
"firmware_file": "MarlinUltimaker-{baudrate}.hex",
- "firmware_hbk_file": "MarlinUltimaker-HKB-{baudrate}.hex"
+ "firmware_hbk_file": "MarlinUltimaker-HBK-{baudrate}.hex"
},
"overrides": {
diff --git a/resources/definitions/ultimaker_original_dual.def.json b/resources/definitions/ultimaker_original_dual.def.json
index c6002ef396..1ffb6e840b 100644
--- a/resources/definitions/ultimaker_original_dual.def.json
+++ b/resources/definitions/ultimaker_original_dual.def.json
@@ -20,7 +20,7 @@
"1": "ultimaker_original_dual_2nd"
},
"firmware_file": "MarlinUltimaker-{baudrate}-dual.hex",
- "firmware_hbk_file": "MarlinUltimaker-HKB-{baudrate}-dual.hex",
+ "firmware_hbk_file": "MarlinUltimaker-HBK-{baudrate}-dual.hex",
"first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"],
"supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"]
},
From b73a71746eb4ac44c6387388c1fac68ddcc618b7 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 13:06:36 +0200
Subject: [PATCH 138/390] Fix missing imports
---
plugins/USBPrinting/AvrFirmwareUpdater.py | 12 ++++++++++--
plugins/USBPrinting/USBPrinterOutputDevice.py | 2 +-
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index c3852c46f6..ab71f70e30 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -1,10 +1,16 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from UM.Logger import Logger
+
+from cura.CuraApplication import CuraApplication
from cura.PrinterOutputDevice import PrinterOutputDevice
from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater, FirmwareUpdateState
from .avr_isp import stk500v2, intelHex
+from serial import SerialException
+
+from time import sleep
class AvrFirmwareUpdater(FirmwareUpdater):
def __init__(self, output_device: PrinterOutputDevice) -> None:
@@ -37,10 +43,12 @@ class AvrFirmwareUpdater(FirmwareUpdater):
self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
try:
programmer.programChip(hex_file)
- except SerialException:
+ except SerialException as e:
+ Logger.log("e", "A serial port exception occured during firmware update: %s" % e)
self.setFirmwareUpdateState(FirmwareUpdateState.io_error)
return
- except:
+ except Exception as e:
+ Logger.log("e", "An unknown exception occured during firmware update: %s" % e)
self.setFirmwareUpdateState(FirmwareUpdateState.unknown_error)
return
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index c9fcdbe625..9ab2a06d50 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -15,7 +15,7 @@ from cura.PrinterOutput.GenericOutputController import GenericOutputController
from .AutoDetectBaudJob import AutoDetectBaudJob
from .AvrFirmwareUpdater import AvrFirmwareUpdater
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty
+from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QUrl
from serial import Serial, SerialException, SerialTimeoutException
from threading import Thread, Event
From a68a591c18c68ab5e8271a4628e5a1f23d7883b1 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Fri, 28 Sep 2018 13:07:18 +0200
Subject: [PATCH 139/390] Correct typo leading to infinite recursion.
---
cura/Scene/ConvexHullDecorator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index 31e21df6bf..aca5d866be 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -241,7 +241,7 @@ class ConvexHullDecorator(SceneNodeDecorator):
return Polygon()
def _compute2DConvexHeadFull(self) -> Optional[Polygon]:
- convex_hull = self._compute2DConvexHeadFull()
+ convex_hull = self._compute2DConvexHull()
if convex_hull:
return convex_hull.getMinkowskiHull(self._getHeadAndFans())
return None
From 09742f0cf51769b46ac8be2402d1db9df10a5061 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 13:09:59 +0200
Subject: [PATCH 140/390] Simplify code
---
cura/Settings/GlobalStack.py | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index e3ae8c2deb..da1ec61254 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -218,16 +218,16 @@ class GlobalStack(CuraContainerStack):
if machine_has_heated_bed:
hex_file = self.getMetaDataEntry("firmware_hbk_file", hex_file)
- if hex_file:
- try:
- return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
- except FileNotFoundError:
- Logger.log("w", "Firmware file %s not found.", hex_file)
- return ""
- else:
+ if not hex_file:
Logger.log("w", "There is no firmware for machine %s.", self.getBottom().id)
return ""
+ try:
+ return Resources.getPath(cura.CuraApplication.CuraApplication.ResourceTypes.Firmware, hex_file.format(baudrate=baudrate))
+ except FileNotFoundError:
+ Logger.log("w", "Firmware file %s not found.", hex_file)
+ return ""
+
## private:
global_stack_mime = MimeType(
name = "application/x-cura-globalstack",
From 9af71f2888c1de1616af67f3241c08544f0958df Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 13:40:39 +0200
Subject: [PATCH 141/390] Fix incorrect typing and issues caused by typing
---
cura/PrinterOutput/FirmwareUpdater.py | 6 +++---
cura/PrinterOutput/GenericOutputController.py | 4 ++--
cura/PrinterOutput/PrintJobOutputModel.py | 2 +-
cura/PrinterOutput/PrinterOutputController.py | 6 +++---
cura/PrinterOutput/PrinterOutputModel.py | 8 ++++----
plugins/USBPrinting/USBPrinterOutputDevice.py | 4 ++--
6 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index 06e019c593..2f200118a9 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -9,7 +9,7 @@ from cura.CuraApplication import CuraApplication
from enum import IntEnum
from threading import Thread
-from typing import Any
+from typing import Union
class FirmwareUpdater(QObject):
firmwareProgressChanged = pyqtSignal()
@@ -25,7 +25,7 @@ class FirmwareUpdater(QObject):
self._firmware_progress = 0
self._firmware_update_state = FirmwareUpdateState.idle
- def updateFirmware(self, file: Any[str, QUrl]) -> None:
+ def updateFirmware(self, file: Union[str, QUrl]) -> None:
# the file path could be url-encoded.
if file.startswith("file://"):
self._firmware_location = QUrl(file).toLocalFile()
@@ -60,7 +60,7 @@ class FirmwareUpdater(QObject):
return self._firmware_progress
@pyqtProperty(int, notify=firmwareUpdateStateChanged)
- def firmwareUpdateState(self) -> FirmwareUpdateState:
+ def firmwareUpdateState(self) -> "FirmwareUpdateState":
return self._firmware_update_state
def setFirmwareUpdateState(self, state) -> None:
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index e6310e5bff..e26fefb520 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Union
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
from PyQt5.QtCore import QTimer
@@ -109,7 +109,7 @@ class GenericOutputController(PrinterOutputController):
self.setTargetBedTemperature(self._preheat_printer, 0)
self._preheat_printer.updateIsPreheating(False)
- def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: int):
+ def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: Union[int, float]) -> None:
self._output_device.sendCommand("M104 S%s T%s" % (temperature, position))
def _onTargetHotendTemperatureChanged(self):
diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py
index 5b8cc39ad8..70878a7573 100644
--- a/cura/PrinterOutput/PrintJobOutputModel.py
+++ b/cura/PrinterOutput/PrintJobOutputModel.py
@@ -91,7 +91,7 @@ class PrintJobOutputModel(QObject):
def assignedPrinter(self):
return self._assigned_printer
- def updateAssignedPrinter(self, assigned_printer: Optional[PrinterOutputModel]):
+ def updateAssignedPrinter(self, assigned_printer: Optional["PrinterOutputModel"]):
if self._assigned_printer != assigned_printer:
old_printer = self._assigned_printer
self._assigned_printer = assigned_printer
diff --git a/cura/PrinterOutput/PrinterOutputController.py b/cura/PrinterOutput/PrinterOutputController.py
index 9a29233f95..cc7b78ac11 100644
--- a/cura/PrinterOutput/PrinterOutputController.py
+++ b/cura/PrinterOutput/PrinterOutputController.py
@@ -4,7 +4,7 @@
from UM.Logger import Logger
from UM.Signal import Signal
-from typing import Any
+from typing import Union
MYPY = False
if MYPY:
@@ -15,7 +15,7 @@ if MYPY:
class PrinterOutputController:
- def __init__(self, output_device: PrinterOutputDevice) -> None:
+ def __init__(self, output_device: "PrinterOutputDevice") -> None:
self.can_pause = True
self.can_abort = True
self.can_pre_heat_bed = True
@@ -25,7 +25,7 @@ class PrinterOutputController:
self.can_update_firmware = False
self._output_device = output_device
- def setTargetHotendTemperature(self, printer: "PrinterOutputModel", extruder: "ExtruderOutputModel", temperature: Any[int, float]) -> None:
+ def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: Union[int, float]) -> None:
Logger.log("w", "Set target hotend temperature not implemented in controller")
def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int) -> None:
diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py
index 96feef1b55..abfee41e80 100644
--- a/cura/PrinterOutput/PrinterOutputModel.py
+++ b/cura/PrinterOutput/PrinterOutputModel.py
@@ -172,7 +172,7 @@ class PrinterOutputModel(QObject):
def cancelPreheatBed(self) -> None:
self._controller.cancelPreheatBed(self)
- def getController(self) -> PrinterOutputController:
+ def getController(self) -> "PrinterOutputController":
return self._controller
@pyqtProperty(str, notify=nameChanged)
@@ -205,7 +205,7 @@ class PrinterOutputModel(QObject):
self._controller.setTargetBedTemperature(self, temperature)
self.updateTargetBedTemperature(temperature)
- def updateActivePrintJob(self, print_job: Optional[PrintJobOutputModel]) -> None:
+ def updateActivePrintJob(self, print_job: Optional["PrintJobOutputModel"]) -> None:
if self._active_print_job != print_job:
old_print_job = self._active_print_job
@@ -223,14 +223,14 @@ class PrinterOutputModel(QObject):
self.stateChanged.emit()
@pyqtProperty(QObject, notify = activePrintJobChanged)
- def activePrintJob(self) -> Optional[PrintJobOutputModel]:
+ def activePrintJob(self) -> Optional["PrintJobOutputModel"]:
return self._active_print_job
@pyqtProperty(str, notify=stateChanged)
def state(self) -> str:
return self._printer_state
- @pyqtProperty(int, notify = bedTemperatureChanged)
+ @pyqtProperty(int, notify=bedTemperatureChanged)
def bedTemperature(self) -> int:
return self._bed_temperature
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 9ab2a06d50..ebfdca2dab 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -21,7 +21,7 @@ from serial import Serial, SerialException, SerialTimeoutException
from threading import Thread, Event
from time import time, sleep
from queue import Queue
-from typing import Union, Optional, List, cast, Any
+from typing import Union, Optional, List, cast
import re
import functools # Used for reduce
@@ -99,7 +99,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
application.triggerNextExitCheck()
@pyqtSlot(str)
- def updateFirmware(self, file: Any[str, QUrl]) -> None:
+ def updateFirmware(self, file: Union[str, QUrl]) -> None:
self._firmware_updater.updateFirmware(file)
## Reset USB device settings
From fa5ee4c5a270111dad13803d4149ec06f49f8e20 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 28 Sep 2018 13:44:18 +0200
Subject: [PATCH 142/390] Fix typo
---
.../UltimakerMachineActions/UpgradeFirmwareMachineAction.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index 469ada7afb..1d0aabcae3 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -16,7 +16,7 @@ Cura.MachineAction
anchors.fill: parent;
property bool printerConnected: Cura.MachineManager.printerConnected
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
- property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : False
+ property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : false
Column
{
From 7ae6800a14ada0b2c2ef81a1deaf0b1484b66e85 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 14:01:28 +0200
Subject: [PATCH 143/390] Fix imports in QualityManager
---
cura/CuraApplication.py | 2 +-
cura/Machines/QualityManager.py | 12 ++++--------
cura/Scene/ConvexHullDecorator.py | 1 -
3 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 04c9ea88db..6fb79403cc 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -681,7 +681,7 @@ class CuraApplication(QtApplication):
Logger.log("i", "Initializing quality manager")
from cura.Machines.QualityManager import QualityManager
- self._quality_manager = QualityManager(container_registry, parent = self)
+ self._quality_manager = QualityManager(self, parent = self)
self._quality_manager.initialize()
Logger.log("i", "Initializing machine manager")
diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py
index d924f4c83e..ce19624c21 100644
--- a/cura/Machines/QualityManager.py
+++ b/cura/Machines/QualityManager.py
@@ -5,8 +5,6 @@ from typing import TYPE_CHECKING, Optional, cast, Dict, List
from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot
-from UM.Application import Application
-
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Logger import Logger
from UM.Util import parseBool
@@ -22,7 +20,6 @@ if TYPE_CHECKING:
from cura.Settings.GlobalStack import GlobalStack
from .QualityChangesGroup import QualityChangesGroup
from cura.CuraApplication import CuraApplication
- from UM.Settings.ContainerRegistry import ContainerRegistry
#
@@ -39,12 +36,11 @@ class QualityManager(QObject):
qualitiesUpdated = pyqtSignal()
- def __init__(self, container_registry: "ContainerRegistry", parent = None) -> None:
+ def __init__(self, application: "CuraApplication", parent = None) -> None:
super().__init__(parent)
- from cura.CuraApplication import CuraApplication
- self._application = CuraApplication.getInstance() # type: CuraApplication
+ self._application = application
self._material_manager = self._application.getMaterialManager()
- self._container_registry = container_registry
+ self._container_registry = self._application.getContainerRegistry()
self._empty_quality_container = self._application.empty_quality_container
self._empty_quality_changes_container = self._application.empty_quality_changes_container
@@ -460,7 +456,7 @@ class QualityManager(QObject):
# stack and clear the user settings.
@pyqtSlot(str)
def createQualityChanges(self, base_name: str) -> None:
- machine_manager = CuraApplication.getInstance().getMachineManager()
+ machine_manager = self._application.getMachineManager()
global_stack = machine_manager.activeMachine
if not global_stack:
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index 8532f40890..bdb4cbcba8 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -9,7 +9,6 @@ from UM.Math.Polygon import Polygon
from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
from UM.Settings.ContainerRegistry import ContainerRegistry
-
from cura.Settings.ExtruderManager import ExtruderManager
from cura.Scene import ConvexHullNode
From 3bc91f15c34814e3de424ec025b2f070ff7a223a Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 14:17:00 +0200
Subject: [PATCH 144/390] Fix mypy complains
---
cura/OAuth2/AuthorizationHelpers.py | 40 +++++++++++++++--------------
1 file changed, 21 insertions(+), 19 deletions(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 6cb53d2252..0a1447297c 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -4,7 +4,7 @@ import json
import random
from hashlib import sha512
from base64 import b64encode
-from typing import Optional
+from typing import Dict, Optional
import requests
@@ -24,37 +24,39 @@ class AuthorizationHelpers:
def settings(self) -> "OAuth2Settings":
return self._settings
+ # Gets a dictionary with data that need to be used for any HTTP authorization request.
+ def getCommonRequestDataDict(self) -> Dict[str, str]:
+ data_dict = {"client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "",
+ "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "",
+ "scope": self._settings.CLIENT_SCOPES if self._settings.CLIENT_SCOPES is not None else "",
+ }
+ return data_dict
+
# Request the access token from the authorization server.
# \param authorization_code: The authorization code from the 1st step.
# \param verification_code: The verification code needed for the PKCE extension.
# \return: An AuthenticationResponse object.
- def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str)-> "AuthenticationResponse":
- return self.parseTokenResponse(requests.post(self._token_url, data={
- "client_id": self._settings.CLIENT_ID,
- "redirect_uri": self._settings.CALLBACK_URL,
- "grant_type": "authorization_code",
- "code": authorization_code,
- "code_verifier": verification_code,
- "scope": self._settings.CLIENT_SCOPES
- })) # type: ignore
+ def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str) -> "AuthenticationResponse":
+ data = self.getCommonRequestDataDict()
+ data["grant_type"] = "authorization_code"
+ data["code"] = authorization_code
+ data["code_verifier"] = verification_code
+ return self.parseTokenResponse(requests.post(self._token_url, data = data)) # type: ignore
# Request the access token from the authorization server using a refresh token.
# \param refresh_token:
# \return: An AuthenticationResponse object.
- def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> AuthenticationResponse:
- return self.parseTokenResponse(requests.post(self._token_url, data={
- "client_id": self._settings.CLIENT_ID,
- "redirect_uri": self._settings.CALLBACK_URL,
- "grant_type": "refresh_token",
- "refresh_token": refresh_token,
- "scope": self._settings.CLIENT_SCOPES
- })) # type: ignore
+ def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> "AuthenticationResponse":
+ data = self.getCommonRequestDataDict()
+ data["grant_type"] = "refresh_token"
+ data["refresh_token"] = refresh_token
+ return self.parseTokenResponse(requests.post(self._token_url, data = data)) # type: ignore
@staticmethod
# Parse the token response from the authorization server into an AuthenticationResponse object.
# \param token_response: The JSON string data response from the authorization server.
# \return: An AuthenticationResponse object.
- def parseTokenResponse(token_response: requests.models.Response) -> AuthenticationResponse:
+ def parseTokenResponse(token_response: requests.models.Response) -> "AuthenticationResponse":
token_data = None
try:
From 5761d28f7f8620c4735c80ea442ec7a6ad4de877 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 14:24:21 +0200
Subject: [PATCH 145/390] Use old data dict code style, more readable
---
cura/OAuth2/AuthorizationHelpers.py | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 0a1447297c..c149f74ab2 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -37,19 +37,27 @@ class AuthorizationHelpers:
# \param verification_code: The verification code needed for the PKCE extension.
# \return: An AuthenticationResponse object.
def getAccessTokenUsingAuthorizationCode(self, authorization_code: str, verification_code: str) -> "AuthenticationResponse":
- data = self.getCommonRequestDataDict()
- data["grant_type"] = "authorization_code"
- data["code"] = authorization_code
- data["code_verifier"] = verification_code
+ data = {
+ "client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "",
+ "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "",
+ "grant_type": "authorization_code",
+ "code": authorization_code,
+ "code_verifier": verification_code,
+ "scope": self._settings.CLIENT_SCOPES if self._settings.CLIENT_SCOPES is not None else "",
+ }
return self.parseTokenResponse(requests.post(self._token_url, data = data)) # type: ignore
# Request the access token from the authorization server using a refresh token.
# \param refresh_token:
# \return: An AuthenticationResponse object.
def getAccessTokenUsingRefreshToken(self, refresh_token: str) -> "AuthenticationResponse":
- data = self.getCommonRequestDataDict()
- data["grant_type"] = "refresh_token"
- data["refresh_token"] = refresh_token
+ data = {
+ "client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "",
+ "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "",
+ "grant_type": "refresh_token",
+ "refresh_token": refresh_token,
+ "scope": self._settings.CLIENT_SCOPES if self._settings.CLIENT_SCOPES is not None else "",
+ }
return self.parseTokenResponse(requests.post(self._token_url, data = data)) # type: ignore
@staticmethod
From 1bee201cfd2db5453e34e06d98ccd166518bfd26 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 14:24:40 +0200
Subject: [PATCH 146/390] Remove unused code
---
cura/OAuth2/AuthorizationHelpers.py | 8 --------
1 file changed, 8 deletions(-)
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index c149f74ab2..f75ad9c9f9 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -24,14 +24,6 @@ class AuthorizationHelpers:
def settings(self) -> "OAuth2Settings":
return self._settings
- # Gets a dictionary with data that need to be used for any HTTP authorization request.
- def getCommonRequestDataDict(self) -> Dict[str, str]:
- data_dict = {"client_id": self._settings.CLIENT_ID if self._settings.CLIENT_ID is not None else "",
- "redirect_uri": self._settings.CALLBACK_URL if self._settings.CALLBACK_URL is not None else "",
- "scope": self._settings.CLIENT_SCOPES if self._settings.CLIENT_SCOPES is not None else "",
- }
- return data_dict
-
# Request the access token from the authorization server.
# \param authorization_code: The authorization code from the 1st step.
# \param verification_code: The verification code needed for the PKCE extension.
From c04c7654c107394be9cadff097c424368fc1aca7 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 28 Sep 2018 14:31:36 +0200
Subject: [PATCH 147/390] Make Backup._application private
---
cura/Backups/Backup.py | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py
index b9045a59b1..82157a163a 100644
--- a/cura/Backups/Backup.py
+++ b/cura/Backups/Backup.py
@@ -30,7 +30,7 @@ class Backup:
catalog = i18nCatalog("cura")
def __init__(self, application: "CuraApplication", zip_file: bytes = None, meta_data: Dict[str, str] = None) -> None:
- self.application = application
+ self._application = application
self.zip_file = zip_file # type: Optional[bytes]
self.meta_data = meta_data # type: Optional[Dict[str, str]]
@@ -42,12 +42,12 @@ class Backup:
Logger.log("d", "Creating backup for Cura %s, using folder %s", cura_release, version_data_dir)
# Ensure all current settings are saved.
- self.application.saveSettings()
+ self._application.saveSettings()
# We copy the preferences file to the user data directory in Linux as it's in a different location there.
# When restoring a backup on Linux, we move it back.
if Platform.isLinux():
- preferences_file_name = self.application.getApplicationName()
+ preferences_file_name = self._application.getApplicationName()
preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name))
backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name))
Logger.log("d", "Copying preferences file from %s to %s", preferences_file, backup_preferences_file)
@@ -113,7 +113,7 @@ class Backup:
"Tried to restore a Cura backup without having proper data or meta data."))
return False
- current_version = self.application.getVersion()
+ current_version = self._application.getVersion()
version_to_restore = self.meta_data.get("cura_release", "master")
if current_version != version_to_restore:
# Cannot restore version older or newer than current because settings might have changed.
@@ -129,7 +129,7 @@ class Backup:
# Under Linux, preferences are stored elsewhere, so we copy the file to there.
if Platform.isLinux():
- preferences_file_name = self.application.getApplicationName()
+ preferences_file_name = self._application.getApplicationName()
preferences_file = Resources.getPath(Resources.Preferences, "{}.cfg".format(preferences_file_name))
backup_preferences_file = os.path.join(version_data_dir, "{}.cfg".format(preferences_file_name))
Logger.log("d", "Moving preferences file from %s to %s", backup_preferences_file, preferences_file)
From 7c01e632df5dc9e335d034c5c2e345e6826375e2 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Fri, 28 Sep 2018 17:00:50 +0200
Subject: [PATCH 148/390] Rework printer cards (cont)
Contributes to CL-1051
---
.../resources/qml/HorizontalLine.qml | 21 +
.../resources/qml/PrintJobInfoBlock.qml | 47 +-
.../resources/qml/PrinterCard.qml | 738 ++++--------------
.../resources/qml/PrinterCardDetails.qml | 370 +++++++++
.../resources/qml/PrinterCardProgressBar.qml | 1 +
.../resources/qml/PrinterFamilyPill.qml | 5 +-
.../resources/qml/PrinterInfoBlock.qml | 83 ++
7 files changed, 641 insertions(+), 624 deletions(-)
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
diff --git a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
new file mode 100644
index 0000000000..a15fb81963
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
@@ -0,0 +1,21 @@
+import QtQuick 2.3
+import QtQuick.Controls 2.0
+import UM 1.3 as UM
+
+Item {
+ id: root;
+ property var enabled: true;
+ width: parent.width;
+ height: childrenRect.height;
+
+ Rectangle {
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ }
+ color: root.enabled ? UM.Theme.getColor("monitor_lining_inactive") : UM.Theme.getColor("monitor_lining_active");
+ height: UM.Theme.getSize("default_lining").height;
+ }
+}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 3e3f962908..8a6a6d297c 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -218,49 +218,10 @@ Item {
}
}
- // Printer family pills
- Row {
- id: printerFamilyPills;
- visible: printJob;
- spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
- anchors {
- left: parent.left;
- right: parent.right;
- bottom: extrudersInfo.top;
- bottomMargin: UM.Theme.getSize("default_margin").height;
- }
- height: childrenRect.height;
- Repeater {
- model: printJob ? printJob.compatibleMachineFamilies : [];
- delegate: PrinterFamilyPill {
- text: modelData;
- color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
- padding: 3 * screenScaleFactor; // TODO: Theme!
- }
- }
- }
-
- // Print core & material config
- Row {
- id: extrudersInfo;
- anchors {
- bottom: parent.bottom;
- left: parent.left;
- right: parent.right;
- rightMargin: UM.Theme.getSize("default_margin").width;
- }
- height: childrenRect.height;
- spacing: UM.Theme.getSize("default_margin").width;
- PrintCoreConfiguration {
- id: leftExtruderInfo;
- width: Math.round(parent.width / 2) * screenScaleFactor;
- printCoreConfiguration: printJob !== null ? printJob.configuration.extruderConfigurations[0] : null;
- }
- PrintCoreConfiguration {
- id: rightExtruderInfo;
- width: Math.round(parent.width / 2) * screenScaleFactor;
- printCoreConfiguration: printJob !== null ? printJob.configuration.extruderConfigurations[1] : null;
- }
+ PrinterInfoBlock {
+ printer: root.printJob.assignedPrinter;
+ printJob: root.printJob;
+ anchors.bottom: parent.bottom;
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index 906774d2c2..3eec298bd2 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -42,611 +42,193 @@ Item {
layer.enabled: true
width: parent.width - 2 * shadowRadius;
- // Main card
- Rectangle {
- id: mainCard;
- anchors.top: parent.top;
- color: "pink";
- height: childrenRect.height;
+ Column {
width: parent.width;
+ height: childrenRect.height;
- // Machine icon
+ // Main card
Item {
- id: machineIcon;
- anchors {
- left: parent.left;
- leftMargin: UM.Theme.getSize("wide_margin").width;
- margins: UM.Theme.getSize("default_margin").width;
- top: parent.top;
- }
- height: 58;
- width: 58;
+ id: mainCard;
+ // color: "pink";
+ height: childrenRect.height;
+ width: parent.width;
- // Skeleton
- Rectangle {
+ // Machine icon
+ Item {
+ id: machineIcon;
anchors {
- fill: parent;
- // margins: Math.round(UM.Theme.getSize("default_margin").width / 4);
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("wide_margin").width;
+ margins: UM.Theme.getSize("default_margin").width;
+ top: parent.top;
}
- color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
- radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
- visible: !printer;
- }
+ height: 58;
+ width: 58;
- // Content
- UM.RecolorImage {
- anchors.centerIn: parent;
- color: {
- if (printer.state == "disabled") {
+ // Skeleton
+ Rectangle {
+ anchors {
+ fill: parent;
+ // margins: Math.round(UM.Theme.getSize("default_margin").width / 4);
+ }
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
+ visible: !printer;
+ }
+
+ // Content
+ UM.RecolorImage {
+ anchors.centerIn: parent;
+ color: {
+ if (printer.state == "disabled") {
+ return UM.Theme.getColor("monitor_tab_text_inactive");
+ }
+ if (printer.activePrintJob != undefined) {
+ return UM.Theme.getColor("primary");
+ }
return UM.Theme.getColor("monitor_tab_text_inactive");
}
- if (printer.activePrintJob != undefined) {
- return UM.Theme.getColor("primary");
+ height: sourceSize.height;
+ source: {
+ switch(printer.type) {
+ case "Ultimaker 3":
+ return "../svg/UM3-icon.svg";
+ case "Ultimaker 3 Extended":
+ return "../svg/UM3x-icon.svg";
+ case "Ultimaker S5":
+ return "../svg/UMs5-icon.svg";
+ }
}
- return UM.Theme.getColor("monitor_tab_text_inactive");
- }
- height: sourceSize.height;
- source: {
- switch(printer.type) {
- case "Ultimaker 3":
- return "../svg/UM3-icon.svg";
- case "Ultimaker 3 Extended":
- return "../svg/UM3x-icon.svg";
- case "Ultimaker S5":
- return "../svg/UMs5-icon.svg";
- }
- }
- visible: printer;
- width: sourceSize.width;
- }
- }
-
- // Printer info
- Item {
- id: printerInfo;
- height: childrenRect.height
- anchors {
- left: machineIcon.right;
- leftMargin: UM.Theme.getSize("default_margin").width;
- right: collapseIcon.left;
- rightMargin: UM.Theme.getSize("default_margin").width;
- verticalCenter: machineIcon.verticalCenter;
- }
-
- // Machine name
- Item {
- id: machineNameLabel;
- height: UM.Theme.getSize("monitor_tab_text_line").height;
- width: parent.width * 0.3;
-
- // Skeleton
- Rectangle {
- anchors.fill: parent;
- color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
- visible: !printer;
- }
-
- // Actual content
- Label {
- anchors.fill: parent;
- elide: Text.ElideRight;
- font: UM.Theme.getFont("default_bold");
- text: printer.name;
visible: printer;
- width: parent.width;
+ width: sourceSize.width;
}
}
- // Job name
+ // Printer info
Item {
- id: activeJobLabel;
+ id: printerInfo;
+ height: childrenRect.height
anchors {
- top: machineNameLabel.bottom;
- topMargin: Math.round(UM.Theme.getSize("default_margin").height / 2);
- }
- height: UM.Theme.getSize("monitor_tab_text_line").height;
- width: parent.width * 0.75;
-
-
- // Skeleton
- Rectangle {
- anchors.fill: parent;
- color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
- visible: !printer;
+ left: machineIcon.right;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: collapseIcon.left;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: machineIcon.verticalCenter;
}
- // Actual content
- Label {
- anchors.fill: parent;
- color: UM.Theme.getColor("monitor_tab_text_inactive");
- elide: Text.ElideRight;
- font: UM.Theme.getFont("default");
- text: {
- if (printer.state == "disabled") {
- return catalog.i18nc("@label", "Not available");
- } else if (printer.state == "unreachable") {
- return catalog.i18nc("@label", "Unreachable");
- }
- if (printer.activePrintJob != null) {
- return printer.activePrintJob.name;
- }
- return catalog.i18nc("@label", "Available");
+ // Machine name
+ Item {
+ id: machineNameLabel;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width * 0.3;
+
+ // Skeleton
+ Rectangle {
+ anchors.fill: parent;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ visible: !printer;
}
- visible: printer;
+
+ // Actual content
+ Label {
+ anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default_bold");
+ text: printer.name;
+ visible: printer;
+ width: parent.width;
+ }
+ }
+
+ // Job name
+ Item {
+ id: activeJobLabel;
+ anchors {
+ top: machineNameLabel.bottom;
+ topMargin: Math.round(UM.Theme.getSize("default_margin").height / 2);
+ }
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width * 0.75;
+
+
+ // Skeleton
+ Rectangle {
+ anchors.fill: parent;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ visible: !printer;
+ }
+
+ // Actual content
+ Label {
+ anchors.fill: parent;
+ color: UM.Theme.getColor("monitor_tab_text_inactive");
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
+ text: {
+ if (printer.state == "disabled") {
+ return catalog.i18nc("@label", "Not available");
+ } else if (printer.state == "unreachable") {
+ return catalog.i18nc("@label", "Unreachable");
+ }
+ if (printer.activePrintJob != null) {
+ return printer.activePrintJob.name;
+ }
+ return catalog.i18nc("@label", "Available");
+ }
+ visible: printer;
+ }
+ }
+ }
+
+ // Collapse icon
+ UM.RecolorImage {
+ id: collapseIcon;
+ anchors {
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ verticalCenter: parent.verticalCenter;
+ }
+ color: UM.Theme.getColor("text");
+ height: 15; // TODO: Theme!
+ source: root.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom");
+ sourceSize.height: height;
+ sourceSize.width: width;
+ visible: printer;
+ width: 15; // TODO: Theme!
+ }
+
+ MouseArea {
+ anchors.fill: parent;
+ enabled: printer;
+ onClicked: {
+ console.log(model.index)
+ if (root.collapsed && model) {
+ printerList.currentIndex = model.index;
+ } else {
+ printerList.currentIndex = -1;
+ }
+ }
+ }
+
+ Connections {
+ target: printerList
+ onCurrentIndexChanged: {
+ root.collapsed = printerList.currentIndex != model.index;
}
}
}
- // Collapse icon
- UM.RecolorImage {
- id: collapseIcon;
- anchors {
- right: parent.right;
- rightMargin: UM.Theme.getSize("default_margin").width;
- verticalCenter: parent.verticalCenter;
- }
- color: UM.Theme.getColor("text");
- height: 15; // TODO: Theme!
- source: root.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom");
- sourceSize.height: height;
- sourceSize.width: width;
+ // Detailed card
+ PrinterCardDetails {
+ collapsed: root.collapsed;
+ printer: printer;
visible: printer;
- width: 15; // TODO: Theme!
}
- MouseArea {
- anchors.fill: parent;
- enabled: printer;
- onClicked: {
- console.log(printerInfo.height)
- if (root.collapsed && model) {
- printerList.currentIndex = model.index;
- } else {
- printerList.currentIndex = -1;
- }
- }
+ // Progress bar
+ PrinterCardProgressBar {
+ visible: printer && printer.activePrintJob != null && printer.activePrintJob != undefined;
}
-
- Connections {
- target: printerList
- onCurrentIndexChanged: {
- root.collapsed = printerList.currentIndex != model.index;
- }
- }
- }
-
- // Detailed card
- Rectangle {
- width: parent.width;
- height: 0;
- anchors.top: mainCard.bottom;
- anchors.bottom: progressBar.top;
- }
-
- // Progress bar
- PrinterCardProgressBar {
- id: progressBar;
- anchors {
- bottom: parent.bottom;
- }
- visible: printer && printer.activePrintJob != null && printer.activePrintJob != undefined;
- width: parent.width;
}
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- // Item
- // {
- // id: detailedInfo
- // property var printJob: printer.activePrintJob
- // visible: height == childrenRect.height
- // anchors.top: printerInfo.bottom
- // width: parent.width
- // height: !root.collapsed ? childrenRect.height : 0
- // opacity: visible ? 1 : 0
- // Behavior on height { NumberAnimation { duration: 100 } }
- // Behavior on opacity { NumberAnimation { duration: 100 } }
- // Rectangle
- // {
- // id: topSpacer
- // color:
- // {
- // if(printer.state == "disabled")
- // {
- // return UM.Theme.getColor("monitor_lining_inactive")
- // }
- // return UM.Theme.getColor("viewport_background")
- // }
- // // UM.Theme.getColor("viewport_background")
- // height: 1
- // anchors
- // {
- // left: parent.left
- // right: parent.right
- // margins: UM.Theme.getSize("default_margin").width
- // top: parent.top
- // topMargin: UM.Theme.getSize("default_margin").width
- // }
- // }
- // PrinterFamilyPill
- // {
- // id: printerFamilyPill
- // color:
- // {
- // if(printer.state == "disabled")
- // {
- // return "transparent"
- // }
- // return UM.Theme.getColor("viewport_background")
- // }
- // anchors.top: topSpacer.bottom
- // anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- // text: printer.type
- // anchors.left: parent.left
- // anchors.leftMargin: UM.Theme.getSize("default_margin").width
- // padding: 3
- // }
- // Row
- // {
- // id: extrudersInfo
- // anchors.top: printerFamilyPill.bottom
- // anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- // anchors.left: parent.left
- // anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width
- // anchors.right: parent.right
- // anchors.rightMargin: 2 * UM.Theme.getSize("default_margin").width
- // height: childrenRect.height
- // spacing: UM.Theme.getSize("default_margin").width
-
- // PrintCoreConfiguration
- // {
- // id: leftExtruderInfo
- // width: Math.round(parent.width / 2)
- // printCoreConfiguration: printer.printerConfiguration.extruderConfigurations[0]
- // }
-
- // PrintCoreConfiguration
- // {
- // id: rightExtruderInfo
- // width: Math.round(parent.width / 2)
- // printCoreConfiguration: printer.printerConfiguration.extruderConfigurations[1]
- // }
- // }
-
- // Rectangle
- // {
- // id: jobSpacer
- // color: UM.Theme.getColor("viewport_background")
- // height: 2
- // anchors
- // {
- // left: parent.left
- // right: parent.right
- // margins: UM.Theme.getSize("default_margin").width
- // top: extrudersInfo.bottom
- // topMargin: 2 * UM.Theme.getSize("default_margin").height
- // }
- // }
-
- // Item
- // {
- // id: jobInfo
- // property var showJobInfo: printer.activePrintJob != null && printer.activePrintJob.state != "queued"
-
- // anchors.top: jobSpacer.bottom
- // anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- // anchors.left: parent.left
- // anchors.right: parent.right
- // anchors.margins: UM.Theme.getSize("default_margin").width
- // anchors.leftMargin: 2 * UM.Theme.getSize("default_margin").width
- // height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height: 0
- // visible: showJobInfo
- // Label
- // {
- // id: printJobName
- // text: printer.activePrintJob != null ? printer.activePrintJob.name : ""
- // font: UM.Theme.getFont("default_bold")
- // anchors.left: parent.left
- // anchors.right: contextButton.left
- // anchors.rightMargin: UM.Theme.getSize("default_margin").width
- // elide: Text.ElideRight
- // }
- // Label
- // {
- // id: ownerName
- // anchors.top: printJobName.bottom
- // text: printer.activePrintJob != null ? printer.activePrintJob.owner : ""
- // font: UM.Theme.getFont("default")
- // opacity: 0.6
- // width: parent.width
- // elide: Text.ElideRight
- // }
-
- // function switchPopupState()
- // {
- // popup.visible ? popup.close() : popup.open()
- // }
-
- // Button
- // {
- // id: contextButton
- // text: "\u22EE" //Unicode; Three stacked points.
- // width: 35
- // height: width
- // anchors
- // {
- // right: parent.right
- // top: parent.top
- // }
- // hoverEnabled: true
-
- // background: Rectangle
- // {
- // opacity: contextButton.down || contextButton.hovered ? 1 : 0
- // width: contextButton.width
- // height: contextButton.height
- // radius: 0.5 * width
- // color: UM.Theme.getColor("viewport_background")
- // }
- // contentItem: Label
- // {
- // text: contextButton.text
- // color: UM.Theme.getColor("monitor_tab_text_inactive")
- // font.pixelSize: 25
- // verticalAlignment: Text.AlignVCenter
- // horizontalAlignment: Text.AlignHCenter
- // }
-
- // onClicked: parent.switchPopupState()
- // }
-
- // Popup
- // {
- // // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
- // id: popup
- // clip: true
- // closePolicy: Popup.CloseOnPressOutside
- // x: (parent.width - width) + 26 * screenScaleFactor
- // y: contextButton.height - 5 * screenScaleFactor // Because shadow
- // width: 182 * screenScaleFactor
- // height: contentItem.height + 2 * padding
- // visible: false
- // padding: 5 * screenScaleFactor // Because shadow
-
- // transformOrigin: Popup.Top
- // contentItem: Item
- // {
- // width: popup.width
- // height: childrenRect.height + 36 * screenScaleFactor
- // anchors.topMargin: 10 * screenScaleFactor
- // anchors.bottomMargin: 10 * screenScaleFactor
- // Button
- // {
- // id: pauseButton
- // text: printer.activePrintJob != null && printer.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause")
- // onClicked:
- // {
- // if(printer.activePrintJob.state == "paused")
- // {
- // printer.activePrintJob.setState("print")
- // }
- // else if(printer.activePrintJob.state == "printing")
- // {
- // printer.activePrintJob.setState("pause")
- // }
- // popup.close()
- // }
- // width: parent.width
- // enabled: printer.activePrintJob != null && ["paused", "printing"].indexOf(printer.activePrintJob.state) >= 0
- // visible: enabled
- // anchors.top: parent.top
- // anchors.topMargin: 18 * screenScaleFactor
- // height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
- // hoverEnabled: true
- // background: Rectangle
- // {
- // opacity: pauseButton.down || pauseButton.hovered ? 1 : 0
- // color: UM.Theme.getColor("viewport_background")
- // }
- // contentItem: Label
- // {
- // text: pauseButton.text
- // horizontalAlignment: Text.AlignLeft
- // verticalAlignment: Text.AlignVCenter
- // }
- // }
-
- // Button
- // {
- // id: abortButton
- // text: catalog.i18nc("@label", "Abort")
- // onClicked:
- // {
- // abortConfirmationDialog.visible = true;
- // popup.close();
- // }
- // width: parent.width
- // height: 39 * screenScaleFactor
- // anchors.top: pauseButton.bottom
- // hoverEnabled: true
- // enabled: printer.activePrintJob != null && ["paused", "printing", "pre_print"].indexOf(printer.activePrintJob.state) >= 0
- // background: Rectangle
- // {
- // opacity: abortButton.down || abortButton.hovered ? 1 : 0
- // color: UM.Theme.getColor("viewport_background")
- // }
- // contentItem: Label
- // {
- // text: abortButton.text
- // horizontalAlignment: Text.AlignLeft
- // verticalAlignment: Text.AlignVCenter
- // }
- // }
-
- // MessageDialog
- // {
- // id: abortConfirmationDialog
- // title: catalog.i18nc("@window:title", "Abort print")
- // icon: StandardIcon.Warning
- // text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printer.activePrintJob.name)
- // standardButtons: StandardButton.Yes | StandardButton.No
- // Component.onCompleted: visible = false
- // onYes: printer.activePrintJob.setState("abort")
- // }
- // }
-
- // background: Item
- // {
- // width: popup.width
- // height: popup.height
-
- // DropShadow
- // {
- // anchors.fill: pointedRectangle
- // radius: 5
- // color: "#3F000000" // 25% shadow
- // source: pointedRectangle
- // transparentBorder: true
- // verticalOffset: 2
- // }
-
- // Item
- // {
- // id: pointedRectangle
- // width: parent.width - 10 * screenScaleFactor // Because of the shadow
- // height: parent.height - 10 * screenScaleFactor // Because of the shadow
- // anchors.horizontalCenter: parent.horizontalCenter
- // anchors.verticalCenter: parent.verticalCenter
-
- // Rectangle
- // {
- // id: point
- // height: 14 * screenScaleFactor
- // width: 14 * screenScaleFactor
- // color: UM.Theme.getColor("setting_control")
- // transform: Rotation { angle: 45}
- // anchors.right: bloop.right
- // anchors.rightMargin: 24
- // y: 1
- // }
-
- // Rectangle
- // {
- // id: bloop
- // color: UM.Theme.getColor("setting_control")
- // width: parent.width
- // anchors.top: parent.top
- // anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
- // anchors.bottom: parent.bottom
- // anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
- // }
- // }
- // }
-
- // exit: Transition
- // {
- // // This applies a default NumberAnimation to any changes a state change makes to x or y properties
- // NumberAnimation { property: "visible"; duration: 75; }
- // }
- // enter: Transition
- // {
- // // This applies a default NumberAnimation to any changes a state change makes to x or y properties
- // NumberAnimation { property: "visible"; duration: 75; }
- // }
-
- // onClosed: visible = false
- // onOpened: visible = true
- // }
-
- // Image
- // {
- // id: printJobPreview
- // source: printer.activePrintJob != null ? printer.activePrintJob.previewImageUrl : ""
- // anchors.top: ownerName.bottom
- // anchors.horizontalCenter: parent.horizontalCenter
- // width: parent.width / 2
- // height: width
- // opacity:
- // {
- // if(printer.activePrintJob == null)
- // {
- // return 1.0
- // }
-
- // switch(printer.activePrintJob.state)
- // {
- // case "wait_cleanup":
- // case "wait_user_action":
- // case "paused":
- // return 0.5
- // default:
- // return 1.0
- // }
- // }
-
-
- // }
-
- // UM.RecolorImage
- // {
- // id: statusImage
- // anchors.centerIn: printJobPreview
- // source:
- // {
- // if(printer.activePrintJob == null)
- // {
- // return ""
- // }
- // switch(printer.activePrintJob.state)
- // {
- // case "paused":
- // return "../svg/paused-icon.svg"
- // case "wait_cleanup":
- // if(printer.activePrintJob.timeElapsed < printer.activePrintJob.timeTotal)
- // {
- // return "../svg/aborted-icon.svg"
- // }
- // return "../svg/approved-icon.svg"
- // case "wait_user_action":
- // return "../svg/aborted-icon.svg"
- // default:
- // return ""
- // }
- // }
- // visible: source != ""
- // width: 0.5 * printJobPreview.width
- // height: 0.5 * printJobPreview.height
- // sourceSize.width: width
- // sourceSize.height: height
- // color: "black"
- // }
-
- // CameraButton
- // {
- // id: showCameraButton
- // iconSource: "../svg/camera-icon.svg"
- // anchors
- // {
- // left: parent.left
- // bottom: printJobPreview.bottom
- // }
- // }
- // }
- // }
- // }
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
new file mode 100644
index 0000000000..8cc10b5b6b
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -0,0 +1,370 @@
+import QtQuick 2.3
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import QtQuick.Controls 1.4 as LegacyControls
+import UM 1.3 as UM
+
+Item {
+ id: root;
+
+ property var printer: null;
+ property var printJob: printer.activePrintJob;
+ property var collapsed: true;
+
+ Behavior on height { NumberAnimation { duration: 100 } }
+ Behavior on opacity { NumberAnimation { duration: 100 } }
+
+ width: parent.width;
+ height: collapsed ? 0 : childrenRect.height;
+ opacity: collapsed ? 0 : 1;
+
+ Column {
+ height: childrenRect.height;
+ width: parent.width;
+
+ spacing: UM.Theme.getSize("default_margin").height;
+
+ HorizontalLine { enabled: printer.state !== "disabled" }
+
+ PrinterInfoBlock {
+ printer: root.printer;
+ printJob: root.printer.activePrintJob;
+ }
+
+ HorizontalLine { enabled: printer.state !== "disabled" }
+
+ Rectangle {
+ color: "orange";
+ width: parent.width;
+ height: 100;
+ }
+
+ Item {
+ id: jobInfoSection;
+
+ property var job: root.printer ? root.printer.activePrintJob : null;
+
+ Component.onCompleted: {
+ console.log(job)
+ }
+ height: visible ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height : 0;
+ width: parent.width;
+ visible: job && job.state != "queued";
+
+ anchors.left: parent.left;
+ // anchors.right: contextButton.left;
+ // anchors.rightMargin: UM.Theme.getSize("default_margin").width;
+
+ Label {
+ id: printJobName;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default_bold");
+ text: job ? job.name : "";
+ }
+
+ Label {
+ id: ownerName;
+ anchors.top: job.bottom;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
+ opacity: 0.6;
+ text: job ? job.owner : "";
+ width: parent.width;
+ }
+ }
+ }
+}
+
+
+// Item {
+// id: jobInfo;
+// property var showJobInfo: {
+// return printer.activePrintJob != null && printer.activePrintJob.state != "queued"
+// }
+
+// // anchors {
+// // top: jobSpacer.bottom
+// // topMargin: 2 * UM.Theme.getSize("default_margin").height
+// // left: parent.left
+// // right: parent.right
+// // margins: UM.Theme.getSize("default_margin").width
+// // leftMargin: 2 * UM.Theme.getSize("default_margin").width
+// // }
+
+// height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height : 0;
+// visible: showJobInfo;
+
+
+// function switchPopupState()
+// {
+// popup.visible ? popup.close() : popup.open()
+// }
+
+// Button
+// {
+// id: contextButton
+// text: "\u22EE" //Unicode; Three stacked points.
+// width: 35
+// height: width
+// anchors
+// {
+// right: parent.right
+// top: parent.top
+// }
+// hoverEnabled: true
+
+// background: Rectangle
+// {
+// opacity: contextButton.down || contextButton.hovered ? 1 : 0
+// width: contextButton.width
+// height: contextButton.height
+// radius: 0.5 * width
+// color: UM.Theme.getColor("viewport_background")
+// }
+// contentItem: Label
+// {
+// text: contextButton.text
+// color: UM.Theme.getColor("monitor_tab_text_inactive")
+// font.pixelSize: 25
+// verticalAlignment: Text.AlignVCenter
+// horizontalAlignment: Text.AlignHCenter
+// }
+
+// onClicked: parent.switchPopupState()
+// }
+
+// Popup
+// {
+// // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
+// id: popup
+// clip: true
+// closePolicy: Popup.CloseOnPressOutside
+// x: (parent.width - width) + 26 * screenScaleFactor
+// y: contextButton.height - 5 * screenScaleFactor // Because shadow
+// width: 182 * screenScaleFactor
+// height: contentItem.height + 2 * padding
+// visible: false
+// padding: 5 * screenScaleFactor // Because shadow
+
+// transformOrigin: Popup.Top
+// contentItem: Item
+// {
+// width: popup.width
+// height: childrenRect.height + 36 * screenScaleFactor
+// anchors.topMargin: 10 * screenScaleFactor
+// anchors.bottomMargin: 10 * screenScaleFactor
+// Button
+// {
+// id: pauseButton
+// text: printer.activePrintJob != null && printer.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause")
+// onClicked:
+// {
+// if(printer.activePrintJob.state == "paused")
+// {
+// printer.activePrintJob.setState("print")
+// }
+// else if(printer.activePrintJob.state == "printing")
+// {
+// printer.activePrintJob.setState("pause")
+// }
+// popup.close()
+// }
+// width: parent.width
+// enabled: printer.activePrintJob != null && ["paused", "printing"].indexOf(printer.activePrintJob.state) >= 0
+// visible: enabled
+// anchors.top: parent.top
+// anchors.topMargin: 18 * screenScaleFactor
+// height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
+// hoverEnabled: true
+// background: Rectangle
+// {
+// opacity: pauseButton.down || pauseButton.hovered ? 1 : 0
+// color: UM.Theme.getColor("viewport_background")
+// }
+// contentItem: Label
+// {
+// text: pauseButton.text
+// horizontalAlignment: Text.AlignLeft
+// verticalAlignment: Text.AlignVCenter
+// }
+// }
+
+// Button
+// {
+// id: abortButton
+// text: catalog.i18nc("@label", "Abort")
+// onClicked:
+// {
+// abortConfirmationDialog.visible = true;
+// popup.close();
+// }
+// width: parent.width
+// height: 39 * screenScaleFactor
+// anchors.top: pauseButton.bottom
+// hoverEnabled: true
+// enabled: printer.activePrintJob != null && ["paused", "printing", "pre_print"].indexOf(printer.activePrintJob.state) >= 0
+// background: Rectangle
+// {
+// opacity: abortButton.down || abortButton.hovered ? 1 : 0
+// color: UM.Theme.getColor("viewport_background")
+// }
+// contentItem: Label
+// {
+// text: abortButton.text
+// horizontalAlignment: Text.AlignLeft
+// verticalAlignment: Text.AlignVCenter
+// }
+// }
+
+// MessageDialog
+// {
+// id: abortConfirmationDialog
+// title: catalog.i18nc("@window:title", "Abort print")
+// icon: StandardIcon.Warning
+// text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printer.activePrintJob.name)
+// standardButtons: StandardButton.Yes | StandardButton.No
+// Component.onCompleted: visible = false
+// onYes: printer.activePrintJob.setState("abort")
+// }
+// }
+
+// background: Item
+// {
+// width: popup.width
+// height: popup.height
+
+// DropShadow
+// {
+// anchors.fill: pointedRectangle
+// radius: 5
+// color: "#3F000000" // 25% shadow
+// source: pointedRectangle
+// transparentBorder: true
+// verticalOffset: 2
+// }
+
+// Item
+// {
+// id: pointedRectangle
+// width: parent.width - 10 * screenScaleFactor // Because of the shadow
+// height: parent.height - 10 * screenScaleFactor // Because of the shadow
+// anchors.horizontalCenter: parent.horizontalCenter
+// anchors.verticalCenter: parent.verticalCenter
+
+// Rectangle
+// {
+// id: point
+// height: 14 * screenScaleFactor
+// width: 14 * screenScaleFactor
+// color: UM.Theme.getColor("setting_control")
+// transform: Rotation { angle: 45}
+// anchors.right: bloop.right
+// anchors.rightMargin: 24
+// y: 1
+// }
+
+// Rectangle
+// {
+// id: bloop
+// color: UM.Theme.getColor("setting_control")
+// width: parent.width
+// anchors.top: parent.top
+// anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
+// anchors.bottom: parent.bottom
+// anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
+// }
+// }
+// }
+
+// exit: Transition
+// {
+// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
+// NumberAnimation { property: "visible"; duration: 75; }
+// }
+// enter: Transition
+// {
+// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
+// NumberAnimation { property: "visible"; duration: 75; }
+// }
+
+// onClosed: visible = false
+// onOpened: visible = true
+// }
+
+// Image
+// {
+// id: printJobPreview
+// source: printer.activePrintJob != null ? printer.activePrintJob.previewImageUrl : ""
+// anchors.top: ownerName.bottom
+// anchors.horizontalCenter: parent.horizontalCenter
+// width: parent.width / 2
+// height: width
+// opacity:
+// {
+// if(printer.activePrintJob == null)
+// {
+// return 1.0
+// }
+
+// switch(printer.activePrintJob.state)
+// {
+// case "wait_cleanup":
+// case "wait_user_action":
+// case "paused":
+// return 0.5
+// default:
+// return 1.0
+// }
+// }
+
+
+// }
+
+// UM.RecolorImage
+// {
+// id: statusImage
+// anchors.centerIn: printJobPreview
+// source:
+// {
+// if(printer.activePrintJob == null)
+// {
+// return ""
+// }
+// switch(printer.activePrintJob.state)
+// {
+// case "paused":
+// return "../svg/paused-icon.svg"
+// case "wait_cleanup":
+// if(printer.activePrintJob.timeElapsed < printer.activePrintJob.timeTotal)
+// {
+// return "../svg/aborted-icon.svg"
+// }
+// return "../svg/approved-icon.svg"
+// case "wait_user_action":
+// return "../svg/aborted-icon.svg"
+// default:
+// return ""
+// }
+// }
+// visible: source != ""
+// width: 0.5 * printJobPreview.width
+// height: 0.5 * printJobPreview.height
+// sourceSize.width: width
+// sourceSize.height: height
+// color: "black"
+// }
+
+// CameraButton
+// {
+// id: showCameraButton
+// iconSource: "../svg/camera-icon.svg"
+// anchors
+// {
+// left: parent.left
+// bottom: printJobPreview.bottom
+// }
+// }
+// }
+// }
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
index 01bd908c8b..a89ffd51d8 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
@@ -15,6 +15,7 @@ ProgressBar {
return result;
}
value: progress;
+ width: parent.width;
style: ProgressBarStyle {
property var remainingTime:
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
index b785cd02b7..24bc82224d 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
@@ -4,9 +4,8 @@ import UM 1.2 as UM
Item
{
- property alias color: background.color
property alias text: familyNameLabel.text
- property var padding: 0
+ property var padding: 3 * screenScaleFactor; // TODO: Theme!
implicitHeight: familyNameLabel.contentHeight + 2 * padding // Apply the padding to top and bottom.
implicitWidth: familyNameLabel.contentWidth + implicitHeight // The extra height is added to ensure the radius doesn't cut something off.
Rectangle
@@ -14,7 +13,7 @@ Item
id: background
height: parent.height
width: parent.width
- color: parent.color
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
anchors.right: parent.right
anchors.horizontalCenter: parent.horizontalCenter
radius: 0.5 * height
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
new file mode 100644
index 0000000000..1b3a83d024
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -0,0 +1,83 @@
+import QtQuick 2.3
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import QtQuick.Controls 1.4 as LegacyControls
+import UM 1.3 as UM
+
+// Includes printer type pill and extuder configurations
+
+Item {
+ id: root;
+
+ property var printer: null;
+ property var printJob: null;
+
+ width: parent.width;
+ height: childrenRect.height;
+
+ // Printer family pills
+ Row {
+ id: printerFamilyPills;
+
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ bottom: extrudersInfo.top;
+ bottomMargin: UM.Theme.getSize("default_margin").height;
+ }
+ height: childrenRect.height;
+ spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
+ width: parent.width;
+
+ Repeater {
+ id: compatiblePills;
+ visible: printJob;
+ model: printJob ? printJob.compatibleMachineFamilies : [];
+ delegate: PrinterFamilyPill { text: modelData; }
+ }
+
+ PrinterFamilyPill {
+ visible: !compatiblePills.visible && printer;
+ text: printer.type;
+ }
+ }
+
+ // Extruder info
+ Row {
+ id: extrudersInfo;
+
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ }
+ height: childrenRect.height;
+ spacing: UM.Theme.getSize("default_margin").width;
+ width: parent.width;
+
+ PrintCoreConfiguration {
+ width: Math.round(parent.width / 2) * screenScaleFactor;
+ printCoreConfiguration: getExtruderConfig(0);
+ }
+
+ PrintCoreConfiguration {
+ width: Math.round(parent.width / 2) * screenScaleFactor;
+ printCoreConfiguration: getExtruderConfig(1);
+ }
+ }
+
+ function getExtruderConfig( i ) {
+ if (root.printJob) {
+ // Use more-specific print job if possible
+ return root.printJob.configuration.extruderConfigurations[i];
+ } else {
+ if (root.printer) {
+ return root.printer.printerConfiguration.extruderConfigurations[i];
+ } else {
+ return null;
+ }
+ }
+ }
+}
\ No newline at end of file
From b15b8e43949506a1904f88fea7714ff718f5bef7 Mon Sep 17 00:00:00 2001
From: ValentinPitre
Date: Sun, 30 Sep 2018 23:10:29 +0200
Subject: [PATCH 149/390] add variants to Tizyx K25
---
resources/definitions/tizyx_k25.def.json | 2 ++
.../quality/tizyx_k25/tizyx_k25_normal.inst.cfg | 2 --
resources/variants/tizyx_k25_0.2.inst.cfg | 12 ++++++++++++
resources/variants/tizyx_k25_0.3.inst.cfg | 12 ++++++++++++
resources/variants/tizyx_k25_0.4.inst.cfg | 12 ++++++++++++
resources/variants/tizyx_k25_0.5.inst.cfg | 13 +++++++++++++
resources/variants/tizyx_k25_0.6.inst.cfg | 12 ++++++++++++
resources/variants/tizyx_k25_0.8.inst.cfg | 12 ++++++++++++
resources/variants/tizyx_k25_1.0.inst.cfg | 12 ++++++++++++
9 files changed, 87 insertions(+), 2 deletions(-)
create mode 100644 resources/variants/tizyx_k25_0.2.inst.cfg
create mode 100644 resources/variants/tizyx_k25_0.3.inst.cfg
create mode 100644 resources/variants/tizyx_k25_0.4.inst.cfg
create mode 100644 resources/variants/tizyx_k25_0.5.inst.cfg
create mode 100644 resources/variants/tizyx_k25_0.6.inst.cfg
create mode 100644 resources/variants/tizyx_k25_0.8.inst.cfg
create mode 100644 resources/variants/tizyx_k25_1.0.inst.cfg
diff --git a/resources/definitions/tizyx_k25.def.json b/resources/definitions/tizyx_k25.def.json
index 94a20b371e..d6a5ff5ecd 100644
--- a/resources/definitions/tizyx_k25.def.json
+++ b/resources/definitions/tizyx_k25.def.json
@@ -14,6 +14,8 @@
"preferred_material": "tizyx_pla",
"has_machine_quality": true,
"has_materials": true,
+ "has_variants": true,
+ "preferred_variant_name": "0.4 mm",
"machine_extruder_trains":
{
"0": "tizyx_k25_extruder_0"
diff --git a/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg b/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg
index 8c6349d27a..8b066f139f 100644
--- a/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg
+++ b/resources/quality/tizyx_k25/tizyx_k25_normal.inst.cfg
@@ -17,8 +17,6 @@ cool_fan_speed_0 = 100
fill_outline_gaps = True
infill_angles = [0,90 ]
infill_sparse_density = 15
-layer_height = 0.2
-layer_height_0 = 0.25
material_diameter = 1.75
retraction_amount = 2.5
retraction_min_travel = 2
diff --git a/resources/variants/tizyx_k25_0.2.inst.cfg b/resources/variants/tizyx_k25_0.2.inst.cfg
new file mode 100644
index 0000000000..a87f5a0b25
--- /dev/null
+++ b/resources/variants/tizyx_k25_0.2.inst.cfg
@@ -0,0 +1,12 @@
+[general]
+name = 0.2 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.2
diff --git a/resources/variants/tizyx_k25_0.3.inst.cfg b/resources/variants/tizyx_k25_0.3.inst.cfg
new file mode 100644
index 0000000000..f6be2713d3
--- /dev/null
+++ b/resources/variants/tizyx_k25_0.3.inst.cfg
@@ -0,0 +1,12 @@
+[general]
+name = 0.3 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.3
diff --git a/resources/variants/tizyx_k25_0.4.inst.cfg b/resources/variants/tizyx_k25_0.4.inst.cfg
new file mode 100644
index 0000000000..1fd0939268
--- /dev/null
+++ b/resources/variants/tizyx_k25_0.4.inst.cfg
@@ -0,0 +1,12 @@
+[general]
+name = 0.4 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.4
diff --git a/resources/variants/tizyx_k25_0.5.inst.cfg b/resources/variants/tizyx_k25_0.5.inst.cfg
new file mode 100644
index 0000000000..ed426f1c5c
--- /dev/null
+++ b/resources/variants/tizyx_k25_0.5.inst.cfg
@@ -0,0 +1,13 @@
+[general]
+name = 0.5 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.5
+
diff --git a/resources/variants/tizyx_k25_0.6.inst.cfg b/resources/variants/tizyx_k25_0.6.inst.cfg
new file mode 100644
index 0000000000..876f773d96
--- /dev/null
+++ b/resources/variants/tizyx_k25_0.6.inst.cfg
@@ -0,0 +1,12 @@
+[general]
+name = 0.6 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.6
diff --git a/resources/variants/tizyx_k25_0.8.inst.cfg b/resources/variants/tizyx_k25_0.8.inst.cfg
new file mode 100644
index 0000000000..fd9516106a
--- /dev/null
+++ b/resources/variants/tizyx_k25_0.8.inst.cfg
@@ -0,0 +1,12 @@
+[general]
+name = 0.8 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.8
diff --git a/resources/variants/tizyx_k25_1.0.inst.cfg b/resources/variants/tizyx_k25_1.0.inst.cfg
new file mode 100644
index 0000000000..d310dfd0cf
--- /dev/null
+++ b/resources/variants/tizyx_k25_1.0.inst.cfg
@@ -0,0 +1,12 @@
+[general]
+name = 1.0 mm
+version = 4
+definition = tizyx_k25
+
+[metadata]
+setting_version = 4
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 1.0
From 046fca5d0faa8af26bf886fb1a765be20a37d22d Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Thu, 27 Sep 2018 19:31:45 +0200
Subject: [PATCH 150/390] Align the "Enable Gradual" text with the
corresponding checkbox.
---
resources/qml/SidebarSimple.qml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/resources/qml/SidebarSimple.qml b/resources/qml/SidebarSimple.qml
index e962d7fc8f..ec673f2823 100644
--- a/resources/qml/SidebarSimple.qml
+++ b/resources/qml/SidebarSimple.qml
@@ -784,8 +784,10 @@ Item
Label {
id: gradualInfillLabel
+ height: parent.height
anchors.left: enableGradualInfillCheckBox.right
anchors.leftMargin: Math.round(UM.Theme.getSize("sidebar_margin").width / 2)
+ verticalAlignment: Text.AlignVCenter;
text: catalog.i18nc("@label", "Enable gradual")
font: UM.Theme.getFont("default")
color: UM.Theme.getColor("text")
From f69005fef989a9c9af7834ce931fa343d2989cd6 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Mon, 1 Oct 2018 11:24:31 +0200
Subject: [PATCH 151/390] Rename to CuraFormulaFunctions
to avoid confusion with "SettingFunction" in Uranium.
---
cura/CuraApplication.py | 18 +++++++++---------
...ingFunctions.py => CuraFormulaFunctions.py} | 6 +++---
cura/Settings/ExtruderManager.py | 2 +-
cura/Settings/UserChangesModel.py | 4 ++--
4 files changed, 15 insertions(+), 15 deletions(-)
rename cura/Settings/{CustomSettingFunctions.py => CuraFormulaFunctions.py} (95%)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 857aafb567..b40b65358b 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -107,7 +107,7 @@ from cura.Settings.MaterialSettingsVisibilityHandler import MaterialSettingsVisi
from cura.Settings.ContainerManager import ContainerManager
from cura.Settings.SidebarCustomMenuItemsModel import SidebarCustomMenuItemsModel
import cura.Settings.cura_empty_instance_containers
-from cura.Settings.CustomSettingFunctions import CustomSettingFunctions
+from cura.Settings.CuraFormulaFunctions import CuraFormulaFunctions
from cura.ObjectsModel import ObjectsModel
@@ -175,7 +175,7 @@ class CuraApplication(QtApplication):
self._single_instance = None
- self._custom_setting_functions = None
+ self._cura_formula_functions = None
self._cura_package_manager = None
@@ -320,7 +320,7 @@ class CuraApplication(QtApplication):
# Adds custom property types, settings types, and extra operators (functions) that need to be registered in
# SettingDefinition and SettingFunction.
def __initializeSettingDefinitionsAndFunctions(self):
- self._custom_setting_functions = CustomSettingFunctions(self)
+ self._cura_formula_functions = CuraFormulaFunctions(self)
# Need to do this before ContainerRegistry tries to load the machines
SettingDefinition.addSupportedProperty("settable_per_mesh", DefinitionPropertyType.Any, default = True, read_only = True)
@@ -342,10 +342,10 @@ class CuraApplication(QtApplication):
SettingDefinition.addSettingType("optional_extruder", None, str, None)
SettingDefinition.addSettingType("[int]", None, str, None)
- SettingFunction.registerOperator("extruderValue", self._custom_setting_functions.getValueInExtruder)
- SettingFunction.registerOperator("extruderValues", self._custom_setting_functions.getValuesInAllExtruders)
- SettingFunction.registerOperator("resolveOrValue", self._custom_setting_functions.getResolveOrValue)
- SettingFunction.registerOperator("defaultExtruderPosition", self._custom_setting_functions.getDefaultExtruderPosition)
+ SettingFunction.registerOperator("extruderValue", self._cura_formula_functions.getValueInExtruder)
+ SettingFunction.registerOperator("extruderValues", self._cura_formula_functions.getValuesInAllExtruders)
+ SettingFunction.registerOperator("resolveOrValue", self._cura_formula_functions.getResolveOrValue)
+ SettingFunction.registerOperator("defaultExtruderPosition", self._cura_formula_functions.getDefaultExtruderPosition)
# Adds all resources and container related resources.
def __addAllResourcesAndContainerResources(self) -> None:
@@ -809,8 +809,8 @@ class CuraApplication(QtApplication):
def getSettingVisibilityPresetsModel(self, *args) -> SettingVisibilityPresetsModel:
return self._setting_visibility_presets_model
- def getCustomSettingFunctions(self, *args) -> CustomSettingFunctions:
- return self._custom_setting_functions
+ def getCuraFormulaFunctions(self, *args) -> "CuraFormulaFunctions":
+ return self._cura_formula_functions
def getMachineErrorChecker(self, *args) -> MachineErrorChecker:
return self._machine_error_checker
diff --git a/cura/Settings/CustomSettingFunctions.py b/cura/Settings/CuraFormulaFunctions.py
similarity index 95%
rename from cura/Settings/CustomSettingFunctions.py
rename to cura/Settings/CuraFormulaFunctions.py
index 5951ac1e73..1db01857f8 100644
--- a/cura/Settings/CustomSettingFunctions.py
+++ b/cura/Settings/CuraFormulaFunctions.py
@@ -12,10 +12,10 @@ if TYPE_CHECKING:
#
-# This class contains all Cura-related custom setting functions. Some functions requires information such as the
-# currently active machine, so this is made into a class instead of standalone functions.
+# This class contains all Cura-related custom functions that can be used in formulas. Some functions requires
+# information such as the currently active machine, so this is made into a class instead of standalone functions.
#
-class CustomSettingFunctions:
+class CuraFormulaFunctions:
def __init__(self, application: "CuraApplication") -> None:
self._application = application
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 86ee546240..ee5cf93fab 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -373,7 +373,7 @@ class ExtruderManager(QObject):
# \return String representing the extruder values
@pyqtSlot(str, result="QVariant")
def getInstanceExtruderValues(self, key: str) -> List:
- return self._application.getCustomSettingFunctions().getValuesInAllExtruders(key)
+ return self._application.getCuraFormulaFunctions().getValuesInAllExtruders(key)
## Get the resolve value or value for a given key
#
diff --git a/cura/Settings/UserChangesModel.py b/cura/Settings/UserChangesModel.py
index d2ea84f79d..9a26e5607e 100644
--- a/cura/Settings/UserChangesModel.py
+++ b/cura/Settings/UserChangesModel.py
@@ -42,7 +42,7 @@ class UserChangesModel(ListModel):
def _update(self):
application = Application.getInstance()
machine_manager = application.getMachineManager()
- custom_setting_functions = application.getCustomSettingFunctions()
+ cura_formula_functions = application.getCuraFormulaFunctions()
item_dict = OrderedDict()
item_list = []
@@ -77,7 +77,7 @@ class UserChangesModel(ListModel):
# Override "getExtruderValue" with "getDefaultExtruderValue" so we can get the default values
user_changes = containers.pop(0)
- default_value_resolve_context = custom_setting_functions.createContextForDefaultValueEvaluation(stack)
+ default_value_resolve_context = cura_formula_functions.createContextForDefaultValueEvaluation(stack)
for setting_key in user_changes.getAllKeys():
original_value = None
From 3f8b7fb6aff9b0e3afa1fe0598becf639c2e604a Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Mon, 1 Oct 2018 11:30:21 +0200
Subject: [PATCH 152/390] Fix: Switches to 'Prepare' always go through
'Recomended' mode CURA-5731
---
resources/qml/PrepareSidebar.qml | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/resources/qml/PrepareSidebar.qml b/resources/qml/PrepareSidebar.qml
index 78b6a22ef9..fe0fb033f7 100644
--- a/resources/qml/PrepareSidebar.qml
+++ b/resources/qml/PrepareSidebar.qml
@@ -14,7 +14,7 @@ Rectangle
{
id: base
- property int currentModeIndex
+ property int currentModeIndex: -1
property bool hideSettings: PrintInformation.preSliced
property bool hideView: Cura.MachineManager.activeMachineName == ""
@@ -262,7 +262,6 @@ Rectangle
ListView
{
id: modesList
- property var index: 0
model: modesListModel
delegate: wizardDelegate
anchors.top: parent.top
@@ -582,13 +581,17 @@ Rectangle
tooltipText: catalog.i18nc("@tooltip", "Custom Print Setup Print with finegrained control over every last bit of the slicing process."),
item: sidebarAdvanced
})
- sidebarContents.replace(modesListModel.get(base.currentModeIndex).item, { "immediate": true })
var index = Math.round(UM.Preferences.getValue("cura/active_mode"))
- if(index)
+
+ if(index != null && !isNaN(index))
{
currentModeIndex = index;
}
+ else
+ {
+ currentModeIndex = 0;
+ }
}
UM.SettingPropertyProvider
From fc9f05fc8b434630759d00a47a0eba51c93319bd Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 1 Oct 2018 11:32:55 +0200
Subject: [PATCH 153/390] Moved SettingVisibilityPreset loading to it's own
class
Since there was so much debate regarding the unit testing of the visiblity presets, i had another look at it.
The old version was almost untestable because all functionalities were mushed together into a single class.
CURA-5734
---
cura/CuraApplication.py | 4 +-
.../Models/SettingVisibilityPresetsModel.py | 128 ++++++++----------
cura/Settings/SettingVisibilityPreset.py | 87 ++++++++++++
.../Menus/SettingVisibilityPresetsMenu.qml | 8 +-
.../qml/Preferences/SettingVisibilityPage.qml | 17 ++-
5 files changed, 154 insertions(+), 90 deletions(-)
create mode 100644 cura/Settings/SettingVisibilityPreset.py
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index dbaef4df34..18f86959a7 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -701,10 +701,8 @@ class CuraApplication(QtApplication):
self._print_information = PrintInformation.PrintInformation(self)
self._cura_actions = CuraActions.CuraActions(self)
- # Initialize setting visibility presets model
+ # Initialize setting visibility presets model.
self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self)
- default_visibility_profile = self._setting_visibility_presets_model.getItem(0)
- self.getPreferences().setDefault("general/visible_settings", ";".join(default_visibility_profile["settings"]))
# Detect in which mode to run and execute that mode
if self._is_headless:
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index d5fa51d20a..38c6176e4e 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -1,12 +1,13 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import Optional
+from typing import Optional, List
import os
import urllib.parse
from configparser import ConfigParser
-from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal, pyqtSlot
+from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal, pyqtSlot, QObject
+
from UM.Application import Application
from UM.Logger import Logger
@@ -15,121 +16,101 @@ from UM.Resources import Resources
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError
from UM.i18n import i18nCatalog
+from cura.Settings.SettingVisibilityPreset import SettingVisibilityPreset
+
catalog = i18nCatalog("cura")
-class SettingVisibilityPresetsModel(ListModel):
- IdRole = Qt.UserRole + 1
- NameRole = Qt.UserRole + 2
- SettingsRole = Qt.UserRole + 3
+class SettingVisibilityPresetsModel(QObject):
+ onItemsChanged = pyqtSignal()
+ activePresetChanged = pyqtSignal()
def __init__(self, parent = None):
super().__init__(parent)
- self.addRoleName(self.IdRole, "id")
- self.addRoleName(self.NameRole, "name")
- self.addRoleName(self.SettingsRole, "settings")
+ self._items = [] # type: List[SettingVisibilityPreset]
self._populate()
- basic_item = self.items[1]
- basic_visibile_settings = ";".join(basic_item["settings"])
+
+ basic_item = self._getVisibilityPresetById("basic")
+ basic_visibile_settings = ";".join(basic_item.settings)
self._preferences = Application.getInstance().getPreferences()
+
# Preference to store which preset is currently selected
self._preferences.addPreference("cura/active_setting_visibility_preset", "basic")
+
# Preference that stores the "custom" set so it can always be restored (even after a restart)
self._preferences.addPreference("cura/custom_visible_settings", basic_visibile_settings)
self._preferences.preferenceChanged.connect(self._onPreferencesChanged)
- self._active_preset_item = self._getItem(self._preferences.getValue("cura/active_setting_visibility_preset"))
+ self._active_preset_item = self._getVisibilityPresetById(self._preferences.getValue("cura/active_setting_visibility_preset"))
+
# Initialize visible settings if it is not done yet
visible_settings = self._preferences.getValue("general/visible_settings")
if not visible_settings:
- self._preferences.setValue("general/visible_settings", ";".join(self._active_preset_item["settings"]))
+ self._preferences.setValue("general/visible_settings", ";".join(self._active_preset_item.settings))
+
else:
self._onPreferencesChanged("general/visible_settings")
self.activePresetChanged.emit()
- def _getItem(self, item_id: str) -> Optional[dict]:
+ def _getVisibilityPresetById(self, item_id: str) -> Optional[SettingVisibilityPreset]:
result = None
- for item in self.items:
- if item["id"] == item_id:
+ for item in self._items:
+ if item.id == item_id:
result = item
break
return result
def _populate(self) -> None:
from cura.CuraApplication import CuraApplication
- items = []
+ items = [] # type: List[SettingVisibilityPreset]
+
+ custom_preset = SettingVisibilityPreset(id = "custom", name = "Custom selection", weight = -100)
+ items.append(custom_preset)
for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset):
+ setting_visibility_preset = SettingVisibilityPreset()
try:
- mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path)
- except MimeTypeNotFoundError:
- Logger.log("e", "Could not determine mime type of file %s", file_path)
- continue
-
- item_id = urllib.parse.unquote_plus(mime_type.stripExtension(os.path.basename(file_path)))
- if not os.path.isfile(file_path):
- Logger.log("e", "[%s] is not a file", file_path)
- continue
-
- parser = ConfigParser(allow_no_value = True) # accept options without any value,
- try:
- parser.read([file_path])
- if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
- continue
-
- settings = []
- for section in parser.sections():
- if section == 'general':
- continue
-
- settings.append(section)
- for option in parser[section].keys():
- settings.append(option)
-
- items.append({
- "id": item_id,
- "name": catalog.i18nc("@action:inmenu", parser["general"]["name"]),
- "weight": parser["general"]["weight"],
- "settings": settings,
- })
-
+ setting_visibility_preset.loadFromFile(file_path)
except Exception:
Logger.logException("e", "Failed to load setting preset %s", file_path)
- items.sort(key = lambda k: (int(k["weight"]), k["id"]))
- # Put "custom" at the top
- items.insert(0, {"id": "custom",
- "name": "Custom selection",
- "weight": -100,
- "settings": []})
+ items.append(setting_visibility_preset)
+
+ # Sort them on weight (and if that fails, use ID)
+ items.sort(key = lambda k: (int(k.weight), k.id))
self.setItems(items)
+ @pyqtProperty("QVariantList", notify = onItemsChanged)
+ def items(self):
+ return self._items
+
+ def setItems(self, items: List[SettingVisibilityPreset]) -> None:
+ if self._items != items:
+ self._items = items
+ self.onItemsChanged.emit()
+
@pyqtSlot(str)
- def setActivePreset(self, preset_id: str):
- if preset_id == self._active_preset_item["id"]:
+ def setActivePreset(self, preset_id: str) -> None:
+ if preset_id == self._active_preset_item.id:
Logger.log("d", "Same setting visibility preset [%s] selected, do nothing.", preset_id)
return
- preset_item = None
- for item in self.items:
- if item["id"] == preset_id:
- preset_item = item
- break
+ preset_item = self._getVisibilityPresetById(preset_id)
if preset_item is None:
Logger.log("w", "Tried to set active preset to unknown id [%s]", preset_id)
return
- need_to_save_to_custom = self._active_preset_item["id"] == "custom" and preset_id != "custom"
+ need_to_save_to_custom = self._active_preset_item.id == "custom" and preset_id != "custom"
if need_to_save_to_custom:
# Save the current visibility settings to custom
current_visibility_string = self._preferences.getValue("general/visible_settings")
if current_visibility_string:
self._preferences.setValue("cura/custom_visible_settings", current_visibility_string)
- new_visibility_string = ";".join(preset_item["settings"])
+ new_visibility_string = ";".join(preset_item.settings)
if preset_id == "custom":
# Get settings from the stored custom data
new_visibility_string = self._preferences.getValue("cura/custom_visible_settings")
@@ -141,11 +122,9 @@ class SettingVisibilityPresetsModel(ListModel):
self._active_preset_item = preset_item
self.activePresetChanged.emit()
- activePresetChanged = pyqtSignal()
-
@pyqtProperty(str, notify = activePresetChanged)
def activePreset(self) -> str:
- return self._active_preset_item["id"]
+ return self._active_preset_item.id
def _onPreferencesChanged(self, name: str) -> None:
if name != "general/visible_settings":
@@ -158,25 +137,26 @@ class SettingVisibilityPresetsModel(ListModel):
visibility_set = set(visibility_string.split(";"))
matching_preset_item = None
- for item in self.items:
- if item["id"] == "custom":
+ for item in self._items:
+ if item.id == "custom":
continue
- if set(item["settings"]) == visibility_set:
+ if set(item.settings) == visibility_set:
matching_preset_item = item
break
item_to_set = self._active_preset_item
if matching_preset_item is None:
# The new visibility setup is "custom" should be custom
- if self._active_preset_item["id"] == "custom":
+ if self._active_preset_item.id == "custom":
# We are already in custom, just save the settings
self._preferences.setValue("cura/custom_visible_settings", visibility_string)
else:
- item_to_set = self.items[0] # 0 is custom
+ # We need to move to custom preset.
+ item_to_set = self._getVisibilityPresetById("custom")
else:
item_to_set = matching_preset_item
- if self._active_preset_item is None or self._active_preset_item["id"] != item_to_set["id"]:
+ if self._active_preset_item is None or self._active_preset_item.id != item_to_set.id:
self._active_preset_item = item_to_set
- self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item["id"])
+ self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item.id)
self.activePresetChanged.emit()
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
new file mode 100644
index 0000000000..8b175a0d01
--- /dev/null
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -0,0 +1,87 @@
+import os
+import urllib.parse
+from configparser import ConfigParser
+from typing import List
+
+from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
+
+from UM.Logger import Logger
+from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError
+
+
+class SettingVisibilityPreset(QObject):
+ onSettingsChanged = pyqtSignal()
+ onNameChanged = pyqtSignal()
+ onWeightChanged = pyqtSignal()
+ onIdChanged = pyqtSignal()
+
+ def __init__(self, id: str = "", name: str = "" , weight: int = 0, parent = None) -> None:
+ super().__init__(parent)
+ self._settings = [] # type: List[str]
+ self._id = id
+ self._weight = weight
+ self._name = name
+
+ @pyqtProperty("QStringList", notify = onSettingsChanged)
+ def settings(self) -> List[str]:
+ return self._settings
+
+ @pyqtProperty(str, notify=onIdChanged)
+ def id(self) -> str:
+ return self._id
+
+ @pyqtProperty(int, notify=onWeightChanged)
+ def weight(self) -> int:
+ return self._weight
+
+ @pyqtProperty(str, notify=onNameChanged)
+ def name(self) -> str:
+ return self._name
+
+ def setName(self, name: str) -> None:
+ if name != self._name:
+ self._name = name
+ self.onNameChanged.emit()
+
+ def setId(self, id: int) -> None:
+ if id != self._id:
+ self._id = id
+ self.onIdChanged.emit()
+
+ def setWeight(self, weight: str) -> None:
+ if weight != self._weight:
+ self._weight = weight
+ self.onWeightChanged.emit()
+
+ def setSettings(self, settings: List[str]) -> None:
+ if settings != self._settings:
+ self._settings = settings
+ self.onSettingsChanged.emit()
+
+ def loadFromFile(self, file_path: str) -> None:
+ mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path)
+
+ item_id = urllib.parse.unquote_plus(mime_type.stripExtension(os.path.basename(file_path)))
+ if not os.path.isfile(file_path):
+ Logger.log("e", "[%s] is not a file", file_path)
+ return None
+
+ parser = ConfigParser(allow_no_value=True) # Accept options without any value,
+
+ parser.read([file_path])
+ if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
+ return None
+
+ settings = [] # type: List[str]
+ for section in parser.sections():
+ if section == "general":
+ continue
+
+ settings.append(section)
+ for option in parser[section].keys():
+ settings.append(option)
+ self.setSettings(settings)
+ self.setId(item_id)
+ self.setName(parser["general"]["name"])
+ self.setWeight(parser["general"]["weight"])
+
diff --git a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
index c34dc2a484..fecabfa860 100644
--- a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
+++ b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
@@ -18,17 +18,17 @@ Menu
Instantiator
{
- model: settingVisibilityPresetsModel
+ model: settingVisibilityPresetsModel.items
MenuItem
{
- text: model.name
+ text: modelData.name
checkable: true
- checked: model.id == settingVisibilityPresetsModel.activePreset
+ checked: modelData.id == settingVisibilityPresetsModel.activePreset
exclusiveGroup: group
onTriggered:
{
- settingVisibilityPresetsModel.setActivePreset(model.id);
+ settingVisibilityPresetsModel.setActivePreset(modelData.id);
}
}
diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml
index 0f39a3c047..90c805f854 100644
--- a/resources/qml/Preferences/SettingVisibilityPage.qml
+++ b/resources/qml/Preferences/SettingVisibilityPage.qml
@@ -110,24 +110,23 @@ UM.PreferencesPage
right: parent.right
}
- model: settingVisibilityPresetsModel
+ model: settingVisibilityPresetsModel.items
textRole: "name"
currentIndex:
{
- // Load previously selected preset.
- var index = settingVisibilityPresetsModel.find("id", settingVisibilityPresetsModel.activePreset)
- if (index == -1)
- {
- return 0
+ for(var i = 0; i < settingVisibilityPresetsModel.items.length; ++i) {
+ if(settingVisibilityPresetsModel.items[i].id == settingVisibilityPresetsModel.activePreset) {
+ currentIndex = i;
+ return;
+ }
}
-
- return index
+ return -1
}
onActivated:
{
- var preset_id = settingVisibilityPresetsModel.getItem(index).id;
+ var preset_id = settingVisibilityPresetsModel.items[index].id;
settingVisibilityPresetsModel.setActivePreset(preset_id);
}
}
From 7e7afa7c063de3af0b28b40aa5fe1b769872daf5 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 1 Oct 2018 11:51:07 +0200
Subject: [PATCH 154/390] Ensure that the SettingVisibilityPresetsModel doesn't
have duplicated settings
CURA-5734
---
cura/Machines/Models/SettingVisibilityPresetsModel.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index 38c6176e4e..cd0233747d 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -81,7 +81,8 @@ class SettingVisibilityPresetsModel(QObject):
# Sort them on weight (and if that fails, use ID)
items.sort(key = lambda k: (int(k.weight), k.id))
- self.setItems(items)
+ # Set items and ensure there are no duplicated values
+ self.setItems(list(set(items)))
@pyqtProperty("QVariantList", notify = onItemsChanged)
def items(self):
From edb5de99542cae94d97a861cd8725d216985919a Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 1 Oct 2018 14:50:53 +0200
Subject: [PATCH 155/390] Added unit test for settingvisibility presets
CURA-5734
---
cura/CuraApplication.py | 2 +-
.../Models/SettingVisibilityPresetsModel.py | 19 ++--
cura/Settings/SettingVisibilityPreset.py | 4 +-
.../Settings/TestSettingVisibilityPresets.py | 90 +++++++++++++++++++
.../setting_visiblity_preset_test.cfg | 11 +++
5 files changed, 113 insertions(+), 13 deletions(-)
create mode 100644 tests/Settings/TestSettingVisibilityPresets.py
create mode 100644 tests/Settings/setting_visiblity_preset_test.cfg
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 18f86959a7..989ed27dea 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -702,7 +702,7 @@ class CuraApplication(QtApplication):
self._cura_actions = CuraActions.CuraActions(self)
# Initialize setting visibility presets model.
- self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self)
+ self._setting_visibility_presets_model = SettingVisibilityPresetsModel(self.getPreferences(), parent = self)
# Detect in which mode to run and execute that mode
if self._is_headless:
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index cd0233747d..8ce87f4640 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -25,16 +25,16 @@ class SettingVisibilityPresetsModel(QObject):
onItemsChanged = pyqtSignal()
activePresetChanged = pyqtSignal()
- def __init__(self, parent = None):
+ def __init__(self, preferences, parent = None):
super().__init__(parent)
self._items = [] # type: List[SettingVisibilityPreset]
self._populate()
- basic_item = self._getVisibilityPresetById("basic")
+ basic_item = self.getVisibilityPresetById("basic")
basic_visibile_settings = ";".join(basic_item.settings)
- self._preferences = Application.getInstance().getPreferences()
+ self._preferences = preferences
# Preference to store which preset is currently selected
self._preferences.addPreference("cura/active_setting_visibility_preset", "basic")
@@ -43,19 +43,19 @@ class SettingVisibilityPresetsModel(QObject):
self._preferences.addPreference("cura/custom_visible_settings", basic_visibile_settings)
self._preferences.preferenceChanged.connect(self._onPreferencesChanged)
- self._active_preset_item = self._getVisibilityPresetById(self._preferences.getValue("cura/active_setting_visibility_preset"))
+ self._active_preset_item = self.getVisibilityPresetById(self._preferences.getValue("cura/active_setting_visibility_preset"))
# Initialize visible settings if it is not done yet
visible_settings = self._preferences.getValue("general/visible_settings")
+
if not visible_settings:
self._preferences.setValue("general/visible_settings", ";".join(self._active_preset_item.settings))
-
else:
self._onPreferencesChanged("general/visible_settings")
self.activePresetChanged.emit()
- def _getVisibilityPresetById(self, item_id: str) -> Optional[SettingVisibilityPreset]:
+ def getVisibilityPresetById(self, item_id: str) -> Optional[SettingVisibilityPreset]:
result = None
for item in self._items:
if item.id == item_id:
@@ -81,8 +81,7 @@ class SettingVisibilityPresetsModel(QObject):
# Sort them on weight (and if that fails, use ID)
items.sort(key = lambda k: (int(k.weight), k.id))
- # Set items and ensure there are no duplicated values
- self.setItems(list(set(items)))
+ self.setItems(items)
@pyqtProperty("QVariantList", notify = onItemsChanged)
def items(self):
@@ -99,7 +98,7 @@ class SettingVisibilityPresetsModel(QObject):
Logger.log("d", "Same setting visibility preset [%s] selected, do nothing.", preset_id)
return
- preset_item = self._getVisibilityPresetById(preset_id)
+ preset_item = self.getVisibilityPresetById(preset_id)
if preset_item is None:
Logger.log("w", "Tried to set active preset to unknown id [%s]", preset_id)
return
@@ -153,7 +152,7 @@ class SettingVisibilityPresetsModel(QObject):
self._preferences.setValue("cura/custom_visible_settings", visibility_string)
else:
# We need to move to custom preset.
- item_to_set = self._getVisibilityPresetById("custom")
+ item_to_set = self.getVisibilityPresetById("custom")
else:
item_to_set = matching_preset_item
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
index 8b175a0d01..23bbbad951 100644
--- a/cura/Settings/SettingVisibilityPreset.py
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -54,8 +54,8 @@ class SettingVisibilityPreset(QObject):
self.onWeightChanged.emit()
def setSettings(self, settings: List[str]) -> None:
- if settings != self._settings:
- self._settings = settings
+ if set(settings) != set(self._settings):
+ self._settings = list(set(settings)) # filter out non unique
self.onSettingsChanged.emit()
def loadFromFile(self, file_path: str) -> None:
diff --git a/tests/Settings/TestSettingVisibilityPresets.py b/tests/Settings/TestSettingVisibilityPresets.py
new file mode 100644
index 0000000000..bdc3fdc43e
--- /dev/null
+++ b/tests/Settings/TestSettingVisibilityPresets.py
@@ -0,0 +1,90 @@
+from unittest.mock import MagicMock
+
+from UM.Preferences import Preferences
+import os.path
+
+from UM.Preferences import Preferences
+from UM.Resources import Resources
+from cura.CuraApplication import CuraApplication
+from cura.Machines.Models.SettingVisibilityPresetsModel import SettingVisibilityPresetsModel
+from cura.Settings.SettingVisibilityPreset import SettingVisibilityPreset
+
+setting_visibility_preset_test_settings = set(["test", "zomg", "derp", "yay", "whoo"])
+
+Resources.addSearchPath(os.path.abspath(os.path.join(os.path.join(os.path.dirname(__file__)), "../..", "resources")))
+Resources.addStorageType(CuraApplication.ResourceTypes.SettingVisibilityPreset, "setting_visibility")
+
+
+def test_settingVisibilityPreset():
+ # Simple creation test. This is seperated from the visibilityFromPrevious, since we can't check for the contents
+ # of the other profiles, since they might change over time.
+ visibility_preset = SettingVisibilityPreset()
+
+ visibility_preset.loadFromFile(os.path.join(os.path.dirname(os.path.abspath(__file__)), "setting_visiblity_preset_test.cfg"))
+ assert setting_visibility_preset_test_settings == set(visibility_preset.settings)
+
+ assert visibility_preset.name == "test"
+ assert visibility_preset.weight == '1'
+ assert visibility_preset.settings.count("yay") == 1 # It's in the file twice but we should load it once.
+
+def test_visibilityFromPrevious():
+ # This test checks that all settings in basic are in advanced and all settings in advanced are in expert.
+
+ visibility_model = SettingVisibilityPresetsModel(Preferences())
+
+ basic_visibility = visibility_model.getVisibilityPresetById("basic")
+ advanced_visibility = visibility_model.getVisibilityPresetById("advanced")
+ expert_visibility = visibility_model.getVisibilityPresetById("expert")
+
+ # Check if there are settings that are in basic, but not in advanced.
+ settings_not_in_advanced = set(basic_visibility.settings) - set(advanced_visibility.settings)
+ assert len(settings_not_in_advanced) == 0 # All settings in basic should be in advanced
+
+ # Check if there are settings that are in advanced, but not in expert.
+ settings_not_in_expert = set(advanced_visibility.settings) - set(expert_visibility.settings)
+ assert len(settings_not_in_expert) == 0 # All settings in advanced should be in expert.
+
+
+def test_setActivePreset():
+ preferences = Preferences()
+ visibility_model = SettingVisibilityPresetsModel(preferences)
+ visibility_model.activePresetChanged = MagicMock()
+ # Ensure that we start of with basic (since we didn't change anyting just yet!)
+ assert visibility_model.activePreset == "basic"
+
+ # Everything should be the same.
+ visibility_model.setActivePreset("basic")
+ assert visibility_model.activePreset == "basic"
+ assert visibility_model.activePresetChanged.emit.call_count == 0 # No events should be sent.
+
+ # Change it to existing type (should work...)
+ visibility_model.setActivePreset("advanced")
+ assert visibility_model.activePreset == "advanced"
+ assert visibility_model.activePresetChanged.emit.call_count == 1
+
+ # Change to unknown preset. Shouldn't do anything.
+ visibility_model.setActivePreset("OMGZOMGNOPE")
+ assert visibility_model.activePreset == "advanced"
+ assert visibility_model.activePresetChanged.emit.call_count == 1
+
+
+def test_preferenceChanged():
+ preferences = Preferences()
+ # Set the visible_settings to something silly
+ preferences.addPreference("general/visible_settings", "omgzomg")
+ visibility_model = SettingVisibilityPresetsModel(preferences)
+ visibility_model.activePresetChanged = MagicMock()
+
+ assert visibility_model.activePreset == "custom" # This should make the model start at "custom
+ assert visibility_model.activePresetChanged.emit.call_count == 0
+
+
+ basic_visibility = visibility_model.getVisibilityPresetById("basic")
+ new_visibility_string = ";".join(basic_visibility.settings)
+ preferences.setValue("general/visible_settings", new_visibility_string)
+
+ # Fake a signal emit (since we didn't create the application, our own signals are not fired)
+ visibility_model._onPreferencesChanged("general/visible_settings")
+ # Set the visibility settings to basic
+ assert visibility_model.activePreset == "basic"
+ assert visibility_model.activePresetChanged.emit.call_count == 1
diff --git a/tests/Settings/setting_visiblity_preset_test.cfg b/tests/Settings/setting_visiblity_preset_test.cfg
new file mode 100644
index 0000000000..0a89bf6b14
--- /dev/null
+++ b/tests/Settings/setting_visiblity_preset_test.cfg
@@ -0,0 +1,11 @@
+[general]
+name = test
+weight = 1
+
+[test]
+zomg
+derp
+yay
+
+[whoo]
+yay
\ No newline at end of file
From fe9db9a26010b0b7f6170be0865f853c74468172 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 1 Oct 2018 14:51:11 +0200
Subject: [PATCH 156/390] Removed the old setting check script
CURA-5734
---
scripts/check_setting_visibility.py | 239 ----------------------------
1 file changed, 239 deletions(-)
delete mode 100755 scripts/check_setting_visibility.py
diff --git a/scripts/check_setting_visibility.py b/scripts/check_setting_visibility.py
deleted file mode 100755
index 8fb5d5b293..0000000000
--- a/scripts/check_setting_visibility.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/env python3
-#
-# This script checks the correctness of the list of visibility settings
-#
-import collections
-import configparser
-import json
-import os
-import sys
-from typing import Any, Dict, List
-
-# Directory where this python file resides
-SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
-
-
-#
-# This class
-#
-class SettingVisibilityInspection:
-
- def __init__(self) -> None:
- # The order of settings type. If the setting is in basic list then it also should be in expert
- self._setting_visibility_order = ["basic", "advanced", "expert"]
-
- # This is dictionary with categories as keys and all setting keys as values.
- self.all_settings_keys = {} # type: Dict[str, List[str]]
-
- # Load all Cura setting keys from the given fdmprinter.json file
- def loadAllCuraSettingKeys(self, fdmprinter_json_path: str) -> None:
- with open(fdmprinter_json_path, "r", encoding = "utf-8") as f:
- json_data = json.load(f)
-
- # Get all settings keys in each category
- for key, data in json_data["settings"].items(): # top level settings are categories
- if "type" in data and data["type"] == "category":
- self.all_settings_keys[key] = []
- self._flattenSettings(data["children"], key) # actual settings are children of top level category-settings
-
- def _flattenSettings(self, settings: Dict[str, str], category: str) -> None:
- for key, setting in settings.items():
- if "type" in setting and setting["type"] != "category":
- self.all_settings_keys[category].append(key)
-
- if "children" in setting:
- self._flattenSettings(setting["children"], category)
-
- # Loads the given setting visibility file and returns a dict with categories as keys and a list of setting keys as
- # values.
- def _loadSettingVisibilityConfigFile(self, file_name: str) -> Dict[str, List[str]]:
- with open(file_name, "r", encoding = "utf-8") as f:
- parser = configparser.ConfigParser(allow_no_value = True)
- parser.read_file(f)
-
- data_dict = {}
- for category, option_dict in parser.items():
- if category in (parser.default_section, "general"):
- continue
-
- data_dict[category] = []
- for key in option_dict:
- data_dict[category].append(key)
-
- return data_dict
-
- def validateSettingsVisibility(self, setting_visibility_files: Dict[str, str]) -> Dict[str, Dict[str, Any]]:
- # First load all setting visibility files into the dict "setting_visibility_dict" in the following structure:
- # -> ->
- # "basic" -> "info"
- setting_visibility_dict = {} # type: Dict[str, Dict[str, List[str]]]
- for visibility_name, file_path in setting_visibility_files.items():
- setting_visibility_dict[visibility_name] = self._loadSettingVisibilityConfigFile(file_path)
-
- # The result is in the format:
- # -> dict
- # "basic" -> "file_name": "basic.cfg"
- # "is_valid": True / False
- # "invalid_categories": List[str]
- # "invalid_settings": Dict[category -> List[str]]
- # "missing_categories_from_previous": List[str]
- # "missing_settings_from_previous": Dict[category -> List[str]]
- all_result_dict = dict() # type: Dict[str, Dict[str, Any]]
-
- previous_result = None
- previous_visibility_dict = None
- is_all_valid = True
- for visibility_name in self._setting_visibility_order:
- invalid_categories = []
- invalid_settings = collections.defaultdict(list)
-
- this_visibility_dict = setting_visibility_dict[visibility_name]
- # Check if categories and keys exist at all
- for category, key_list in this_visibility_dict.items():
- if category not in self.all_settings_keys:
- invalid_categories.append(category)
- continue # If this category doesn't exist at all, not need to check for details
-
- for key in key_list:
- if key not in self.all_settings_keys[category]:
- invalid_settings[category].append(key)
-
- is_settings_valid = len(invalid_categories) == 0 and len(invalid_settings) == 0
- file_path = setting_visibility_files[visibility_name]
- result_dict = {"file_name": os.path.basename(file_path),
- "is_valid": is_settings_valid,
- "invalid_categories": invalid_categories,
- "invalid_settings": invalid_settings,
- "missing_categories_from_previous": list(),
- "missing_settings_from_previous": dict(),
- }
-
- # If this is not the first item in the list, check if the settings are defined in the previous
- # visibility file.
- # A visibility with more details SHOULD add more settings. It SHOULD NOT remove any settings defined
- # in the less detailed visibility.
- if previous_visibility_dict is not None:
- missing_categories_from_previous = []
- missing_settings_from_previous = collections.defaultdict(list)
-
- for prev_category, prev_key_list in previous_visibility_dict.items():
- # Skip the categories that are invalid
- if prev_category in previous_result["invalid_categories"]:
- continue
- if prev_category not in this_visibility_dict:
- missing_categories_from_previous.append(prev_category)
- continue
-
- this_key_list = this_visibility_dict[prev_category]
- for key in prev_key_list:
- # Skip the settings that are invalid
- if key in previous_result["invalid_settings"][prev_category]:
- continue
-
- if key not in this_key_list:
- missing_settings_from_previous[prev_category].append(key)
-
- result_dict["missing_categories_from_previous"] = missing_categories_from_previous
- result_dict["missing_settings_from_previous"] = missing_settings_from_previous
- is_settings_valid = len(missing_categories_from_previous) == 0 and len(missing_settings_from_previous) == 0
- result_dict["is_valid"] = result_dict["is_valid"] and is_settings_valid
-
- # Update the complete result dict
- all_result_dict[visibility_name] = result_dict
- previous_result = result_dict
- previous_visibility_dict = this_visibility_dict
-
- is_all_valid = is_all_valid and result_dict["is_valid"]
-
- all_result_dict["all_results"] = {"is_valid": is_all_valid}
-
- return all_result_dict
-
- def printResults(self, all_result_dict: Dict[str, Dict[str, Any]]) -> None:
- print("")
- print("Setting Visibility Check Results:")
-
- prev_visibility_name = None
- for visibility_name in self._setting_visibility_order:
- if visibility_name not in all_result_dict:
- continue
-
- result_dict = all_result_dict[visibility_name]
- print("=============================")
- result_str = "OK" if result_dict["is_valid"] else "INVALID"
- print("[%s] : [%s] : %s" % (visibility_name, result_dict["file_name"], result_str))
-
- if result_dict["is_valid"]:
- continue
-
- # Print details of invalid settings
- if result_dict["invalid_categories"]:
- print("It has the following non-existing CATEGORIES:")
- for category in result_dict["invalid_categories"]:
- print(" - [%s]" % category)
-
- if result_dict["invalid_settings"]:
- print("")
- print("It has the following non-existing SETTINGS:")
- for category, key_list in result_dict["invalid_settings"].items():
- for key in key_list:
- print(" - [%s / %s]" % (category, key))
-
- if prev_visibility_name is not None:
- if result_dict["missing_categories_from_previous"]:
- print("")
- print("The following CATEGORIES are defined in the previous visibility [%s] but not here:" % prev_visibility_name)
- for category in result_dict["missing_categories_from_previous"]:
- print(" - [%s]" % category)
-
- if result_dict["missing_settings_from_previous"]:
- print("")
- print("The following SETTINGS are defined in the previous visibility [%s] but not here:" % prev_visibility_name)
- for category, key_list in result_dict["missing_settings_from_previous"].items():
- for key in key_list:
- print(" - [%s / %s]" % (category, key))
-
- print("")
- prev_visibility_name = visibility_name
-
-
-#
-# Returns a dictionary of setting visibility .CFG files in the given search directory.
-# The dict has the name of the visibility type as the key (such as "basic", "advanced", "expert"), and
-# the actual file path (absolute path).
-#
-def getAllSettingVisiblityFiles(search_dir: str) -> Dict[str, str]:
- visibility_file_dict = dict()
- extension = ".cfg"
- for file_name in os.listdir(search_dir):
- file_path = os.path.join(search_dir, file_name)
-
- # Only check files that has the .cfg extension
- if not os.path.isfile(file_path):
- continue
- if not file_path.endswith(extension):
- continue
-
- base_filename = os.path.basename(file_name)[:-len(extension)]
- visibility_file_dict[base_filename] = file_path
- return visibility_file_dict
-
-
-def main() -> None:
- setting_visibility_files_dir = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "setting_visibility"))
- fdmprinter_def_path = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "resources", "definitions", "fdmprinter.def.json"))
-
- setting_visibility_files_dict = getAllSettingVisiblityFiles(setting_visibility_files_dir)
-
- inspector = SettingVisibilityInspection()
- inspector.loadAllCuraSettingKeys(fdmprinter_def_path)
-
- check_result = inspector.validateSettingsVisibility(setting_visibility_files_dict)
- is_result_valid = check_result["all_results"]["is_valid"]
- inspector.printResults(check_result)
-
- sys.exit(0 if is_result_valid else 1)
-
-
-if __name__ == "__main__":
- main()
From 4def636fc97dca16fab99edd30e8bdb9d37a17aa Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 1 Oct 2018 14:54:08 +0200
Subject: [PATCH 157/390] Minor codecleanup (Typing & removing unused imports)
CURA-5734
---
cura/Machines/Models/SettingVisibilityPresetsModel.py | 9 +--------
cura/Settings/SettingVisibilityPreset.py | 10 +++++-----
tests/Settings/TestSettingVisibilityPresets.py | 2 +-
3 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index 8ce87f4640..b5f7fa8626 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -2,18 +2,11 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, List
-import os
-import urllib.parse
-from configparser import ConfigParser
-from PyQt5.QtCore import pyqtProperty, Qt, pyqtSignal, pyqtSlot, QObject
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
-
-from UM.Application import Application
from UM.Logger import Logger
-from UM.Qt.ListModel import ListModel
from UM.Resources import Resources
-from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError
from UM.i18n import i18nCatalog
from cura.Settings.SettingVisibilityPreset import SettingVisibilityPreset
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
index 23bbbad951..b1828362d1 100644
--- a/cura/Settings/SettingVisibilityPreset.py
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -6,7 +6,7 @@ from typing import List
from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
from UM.Logger import Logger
-from UM.MimeTypeDatabase import MimeTypeDatabase, MimeTypeNotFoundError
+from UM.MimeTypeDatabase import MimeTypeDatabase
class SettingVisibilityPreset(QObject):
@@ -15,7 +15,7 @@ class SettingVisibilityPreset(QObject):
onWeightChanged = pyqtSignal()
onIdChanged = pyqtSignal()
- def __init__(self, id: str = "", name: str = "" , weight: int = 0, parent = None) -> None:
+ def __init__(self, id: str = "", name: str = "", weight: int = 0, parent = None) -> None:
super().__init__(parent)
self._settings = [] # type: List[str]
self._id = id
@@ -43,12 +43,12 @@ class SettingVisibilityPreset(QObject):
self._name = name
self.onNameChanged.emit()
- def setId(self, id: int) -> None:
+ def setId(self, id: str) -> None:
if id != self._id:
self._id = id
self.onIdChanged.emit()
- def setWeight(self, weight: str) -> None:
+ def setWeight(self, weight: int) -> None:
if weight != self._weight:
self._weight = weight
self.onWeightChanged.emit()
@@ -83,5 +83,5 @@ class SettingVisibilityPreset(QObject):
self.setSettings(settings)
self.setId(item_id)
self.setName(parser["general"]["name"])
- self.setWeight(parser["general"]["weight"])
+ self.setWeight(int(parser["general"]["weight"]))
diff --git a/tests/Settings/TestSettingVisibilityPresets.py b/tests/Settings/TestSettingVisibilityPresets.py
index bdc3fdc43e..68e8a6eb7b 100644
--- a/tests/Settings/TestSettingVisibilityPresets.py
+++ b/tests/Settings/TestSettingVisibilityPresets.py
@@ -24,7 +24,7 @@ def test_settingVisibilityPreset():
assert setting_visibility_preset_test_settings == set(visibility_preset.settings)
assert visibility_preset.name == "test"
- assert visibility_preset.weight == '1'
+ assert visibility_preset.weight == 1
assert visibility_preset.settings.count("yay") == 1 # It's in the file twice but we should load it once.
def test_visibilityFromPrevious():
From acb7df710c6f810c1ddba90258359f7a922028b6 Mon Sep 17 00:00:00 2001
From: ChrisTerBeke
Date: Mon, 1 Oct 2018 15:37:28 +0200
Subject: [PATCH 158/390] Fix getting cura application instance
---
cura/Backups/Backup.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py
index 82157a163a..897d5fa979 100644
--- a/cura/Backups/Backup.py
+++ b/cura/Backups/Backup.py
@@ -36,7 +36,7 @@ class Backup:
## Create a back-up from the current user config folder.
def makeFromCurrent(self) -> None:
- cura_release = CuraApplication.getInstance().getVersion()
+ cura_release = self._application.getVersion()
version_data_dir = Resources.getDataStoragePath()
Logger.log("d", "Creating backup for Cura %s, using folder %s", cura_release, version_data_dir)
@@ -59,7 +59,7 @@ class Backup:
if archive is None:
return
files = archive.namelist()
-
+
# Count the metadata items. We do this in a rather naive way at the moment.
machine_count = len([s for s in files if "machine_instances/" in s]) - 1
material_count = len([s for s in files if "materials/" in s]) - 1
From 97fa5094ce3852d1527d404fd82c97578635e47c Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Mon, 1 Oct 2018 16:24:51 +0200
Subject: [PATCH 159/390] Monitor tab refactor + skeleton loading
Contributes to CL-1051
---
.../resources/qml/ClusterControlItem.qml | 10 +-
.../resources/qml/HorizontalLine.qml | 18 +-
.../resources/qml/PrintJobContextMenu.qml | 289 +++++++-------
.../resources/qml/PrintJobContextMenuItem.qml | 20 +
.../resources/qml/PrintJobPreview.qml | 68 ++++
.../resources/qml/PrintJobTitle.qml | 53 +++
.../resources/qml/PrinterCard.qml | 14 +-
.../resources/qml/PrinterCardDetails.qml | 376 ++----------------
.../resources/qml/PrinterInfoBlock.qml | 5 +-
9 files changed, 348 insertions(+), 505 deletions(-)
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
create mode 100644 plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
index bfde2ea7cd..3dfabdfb86 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
@@ -69,7 +69,8 @@ Component
// Skeleton loading
Column
{
- id: dummies
+ id: skeletonLoader
+ visible: printerList.count === 0;
anchors
{
top: printingLabel.bottom
@@ -97,12 +98,11 @@ Component
id: printerScrollView
anchors
{
- top: dummies.bottom
+ top: printingLabel.bottom
+ topMargin: UM.Theme.getSize("default_margin").height
left: parent.left
right: parent.right
- topMargin: UM.Theme.getSize("default_margin").height
- bottom: parent.bottom
- bottomMargin: UM.Theme.getSize("default_margin").height
+ bottom: parent.bottom;
}
style: UM.Theme.styles.scrollview
diff --git a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
index a15fb81963..fcf2330fe7 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
@@ -2,20 +2,8 @@ import QtQuick 2.3
import QtQuick.Controls 2.0
import UM 1.3 as UM
-Item {
- id: root;
- property var enabled: true;
+Rectangle {
+ color: UM.Theme.getColor("monitor_tab_lining_inactive"); // TODO: Maybe theme separately? Maybe not.
+ height: UM.Theme.getSize("default_lining").height;
width: parent.width;
- height: childrenRect.height;
-
- Rectangle {
- anchors {
- left: parent.left;
- leftMargin: UM.Theme.getSize("default_margin").width;
- right: parent.right;
- rightMargin: UM.Theme.getSize("default_margin").width;
- }
- color: root.enabled ? UM.Theme.getColor("monitor_lining_inactive") : UM.Theme.getColor("monitor_lining_active");
- height: UM.Theme.getSize("default_lining").height;
- }
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index 74c4bb030c..8d523c322a 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -9,7 +9,9 @@ import UM 1.3 as UM
Item {
id: root;
+
property var printJob: null;
+ property var running: isRunning(printJob);
Button {
id: button;
@@ -36,164 +38,165 @@ Item {
Popup {
id: popup;
+ background: Item {
+ height: popup.height;
+ width: popup.width;
+
+ DropShadow {
+ anchors.fill: pointedRectangle;
+ color: "#3F000000"; // 25% shadow
+ radius: 5;
+ source: pointedRectangle;
+ transparentBorder: true;
+ verticalOffset: 2;
+ }
+
+ Item {
+ id: pointedRectangle
+ width: parent.width - 10 * screenScaleFactor; // Because of the shadow
+ height: parent.height - 10 * screenScaleFactor; // Because of the shadow
+ anchors.horizontalCenter: parent.horizontalCenter;
+ anchors.verticalCenter: parent.verticalCenter;
+
+ Rectangle {
+ id: point
+ anchors.right: bloop.right;
+ anchors.rightMargin: 24;
+ color: UM.Theme.getColor("setting_control");
+ height: 14 * screenScaleFactor;
+ transform: Rotation {
+ angle: 45;
+ }
+ width: 14 * screenScaleFactor;
+ y: 1;
+ }
+
+ Rectangle {
+ id: bloop
+ anchors {
+ bottom: parent.bottom;
+ bottomMargin: 8 * screenScaleFactor; // Because of the shadow
+ top: parent.top;
+ topMargin: 8 * screenScaleFactor; // Because of the shadow + point
+ }
+ color: UM.Theme.getColor("setting_control");
+ width: parent.width;
+ }
+ }
+ }
clip: true;
closePolicy: Popup.CloseOnPressOutside;
+ contentItem: Column {
+ id: popupOptions;
+ anchors {
+ top: parent.top;
+ topMargin: UM.Theme.getSize("default_margin").height + 10 * screenScaleFactor; // Account for the point of the box
+ }
+ height: childrenRect.height + spacing * popupOptions.children.length + UM.Theme.getSize("default_margin").height;
+ spacing: Math.floor(UM.Theme.getSize("default_margin").height / 2);
+ width: parent.width;
+
+ PrintJobContextMenuItem {
+ enabled: printJob && !running ? OutputDevice.queuedPrintJobs[0].key != printJob.key : false;
+ onClicked: {
+ sendToTopConfirmationDialog.visible = true;
+ popup.close();
+ }
+ text: catalog.i18nc("@label", "Move to top");
+ }
+
+ PrintJobContextMenuItem {
+ enabled: printJob && !running;
+ onClicked: {
+ deleteConfirmationDialog.visible = true;
+ popup.close();
+ }
+ text: catalog.i18nc("@label", "Delete");
+ }
+
+ PrintJobContextMenuItem {
+ enabled: printJob && running;
+ onClicked: {
+ if (printJob.state == "paused") {
+ printJob.setState("print");
+ } else if(printJob.state == "printing") {
+ printJob.setState("pause");
+ }
+ popup.close();
+ }
+ text: printJob && printJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause");
+ }
+
+ PrintJobContextMenuItem {
+ enabled: printJob && running;
+ onClicked: {
+ abortConfirmationDialog.visible = true;
+ popup.close();
+ }
+ text: catalog.i18nc("@label", "Abort");
+ }
+ }
+ enter: Transition {
+ NumberAnimation {
+ duration: 75;
+ property: "visible";
+ }
+ }
+ exit: Transition {
+ NumberAnimation {
+ duration: 75;
+ property: "visible";
+ }
+ }
height: contentItem.height + 2 * padding;
+ onClosed: visible = false;
+ onOpened: visible = true;
padding: 5 * screenScaleFactor; // Because shadow
transformOrigin: Popup.Top;
visible: false;
width: 182 * screenScaleFactor;
x: (button.width - width) + 26 * screenScaleFactor;
y: button.height + 5 * screenScaleFactor; // Because shadow
- contentItem: Item {
- width: popup.width
- height: childrenRect.height + 36 * screenScaleFactor
- anchors.topMargin: 10 * screenScaleFactor
- anchors.bottomMargin: 10 * screenScaleFactor
- Button {
- id: sendToTopButton
- text: catalog.i18nc("@label", "Move to top")
- onClicked:
- {
- sendToTopConfirmationDialog.visible = true;
- popup.close();
- }
- width: parent.width
- enabled: printJob ? OutputDevice.queuedPrintJobs[0].key != printJob.key : false;
- visible: enabled
- anchors.top: parent.top
- anchors.topMargin: 18 * screenScaleFactor
- height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
- hoverEnabled: true
- background: Rectangle
- {
- opacity: sendToTopButton.down || sendToTopButton.hovered ? 1 : 0
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: sendToTopButton.text
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- }
- }
+ }
- MessageDialog
- {
- id: sendToTopConfirmationDialog
- title: catalog.i18nc("@window:title", "Move print job to top")
- icon: StandardIcon.Warning
- text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
- standardButtons: StandardButton.Yes | StandardButton.No
- Component.onCompleted: visible = false
- onYes: {
- if (printJob) {
- OutputDevice.sendJobToTop(printJob.key)
- }
- }
- }
+ MessageDialog {
+ id: sendToTopConfirmationDialog;
+ Component.onCompleted: visible = false;
+ icon: StandardIcon.Warning;
+ onYes: OutputDevice.sendJobToTop(printJob.key);
+ standardButtons: StandardButton.Yes | StandardButton.No;
+ text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
+ title: catalog.i18nc("@window:title", "Move print job to top");
+ }
- Button
- {
- id: deleteButton
- text: catalog.i18nc("@label", "Delete")
- onClicked:
- {
- deleteConfirmationDialog.visible = true;
- popup.close();
- }
- width: parent.width
- height: 39 * screenScaleFactor
- anchors.top: sendToTopButton.bottom
- hoverEnabled: true
- background: Rectangle
- {
- opacity: deleteButton.down || deleteButton.hovered ? 1 : 0
- color: UM.Theme.getColor("viewport_background")
- }
- contentItem: Label
- {
- text: deleteButton.text
- horizontalAlignment: Text.AlignLeft
- verticalAlignment: Text.AlignVCenter
- }
- }
+ MessageDialog {
+ id: deleteConfirmationDialog;
+ Component.onCompleted: visible = false;
+ icon: StandardIcon.Warning;
+ onYes: OutputDevice.deleteJobFromQueue(printJob.key);
+ standardButtons: StandardButton.Yes | StandardButton.No;
+ text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
+ title: catalog.i18nc("@window:title", "Delete print job");
+ }
- MessageDialog
- {
- id: deleteConfirmationDialog
- title: catalog.i18nc("@window:title", "Delete print job")
- icon: StandardIcon.Warning
- text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
- standardButtons: StandardButton.Yes | StandardButton.No
- Component.onCompleted: visible = false
- onYes: OutputDevice.deleteJobFromQueue(printJob.key)
- }
- }
-
- background: Item
- {
- width: popup.width
- height: popup.height
-
- DropShadow
- {
- anchors.fill: pointedRectangle
- radius: 5
- color: "#3F000000" // 25% shadow
- source: pointedRectangle
- transparentBorder: true
- verticalOffset: 2
- }
-
- Item
- {
- id: pointedRectangle
- width: parent.width - 10 * screenScaleFactor // Because of the shadow
- height: parent.height - 10 * screenScaleFactor // Because of the shadow
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
-
- Rectangle
- {
- id: point
- height: 14 * screenScaleFactor
- width: 14 * screenScaleFactor
- color: UM.Theme.getColor("setting_control")
- transform: Rotation { angle: 45}
- anchors.right: bloop.right
- anchors.rightMargin: 24
- y: 1
- }
-
- Rectangle
- {
- id: bloop
- color: UM.Theme.getColor("setting_control")
- width: parent.width
- anchors.top: parent.top
- anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
- anchors.bottom: parent.bottom
- anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
- }
- }
- }
-
- exit: Transition
- {
- NumberAnimation { property: "visible"; duration: 75; }
- }
- enter: Transition
- {
- NumberAnimation { property: "visible"; duration: 75; }
- }
-
- onClosed: visible = false
- onOpened: visible = true
+ MessageDialog {
+ id: abortConfirmationDialog;
+ Component.onCompleted: visible = false;
+ icon: StandardIcon.Warning;
+ onYes: printJob.setState("abort");
+ standardButtons: StandardButton.Yes | StandardButton.No;
+ text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "";
+ title: catalog.i18nc("@window:title", "Abort print");
}
// Utils
function switchPopupState() {
- popup.visible ? popup.close() : popup.open()
+ popup.visible ? popup.close() : popup.open();
+ }
+ function isRunning(job) {
+ if (!job) {
+ return false;
+ }
+ return ["paused", "printing", "pre_print"].indexOf(job.state) !== -1;
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml
new file mode 100644
index 0000000000..e20f5fd1a1
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml
@@ -0,0 +1,20 @@
+import QtQuick 2.2
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.4
+import UM 1.3 as UM
+
+Button {
+ background: Rectangle {
+ opacity: parent.down || parent.hovered ? 1 : 0;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ }
+ contentItem: Label {
+ text: parent.text
+ horizontalAlignment: Text.AlignLeft;
+ verticalAlignment: Text.AlignVCenter;
+ }
+ height: 39 * screenScaleFactor; // TODO: Theme!
+ hoverEnabled: true;
+ visible: enabled;
+ width: parent.width;
+}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
new file mode 100644
index 0000000000..7fae974d8f
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
@@ -0,0 +1,68 @@
+import QtQuick 2.3
+import QtQuick.Dialogs 1.1
+import QtQuick.Controls 2.0
+import QtQuick.Controls.Styles 1.3
+import QtGraphicalEffects 1.0
+import QtQuick.Controls 1.4 as LegacyControls
+import UM 1.3 as UM
+
+// Includes print job name, owner, and preview
+
+Item {
+ property var job: null;
+ property var useUltibot: false;
+ height: 100;
+ width: height;
+
+ // Skeleton
+ Rectangle {
+ visible: !job;
+ anchors.fill: parent;
+ radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
+ color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ }
+
+ // Actual content
+ Image {
+ id: previewImage;
+ visible: job;
+ source: job ? job.previewImageUrl : "";
+ opacity: {
+ if (job == null) {
+ return 1.0;
+ }
+ var states = ["wait_cleanup", "wait_user_action", "error", "paused"];
+ if (states.indexOf(job.state) !== -1) {
+ return 0.5;
+ }
+ return 1.0;
+ }
+ anchors.fill: parent;
+ }
+
+ UM.RecolorImage {
+ id: ultibotImage;
+ anchors.centerIn: parent;
+ source: "../svg/ultibot.svg";
+ /* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
+ not in order to determine if we show the placeholder (ultibot) image instead. */
+ visible: job && previewImage.status == Image.Error;
+ width: parent.width;
+ height: parent.height;
+ sourceSize.width: width;
+ sourceSize.height: height;
+ color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
+ }
+
+ UM.RecolorImage {
+ id: statusImage;
+ anchors.centerIn: parent;
+ source: job && job.state == "error" ? "../svg/aborted-icon.svg" : "";
+ visible: source != "";
+ width: 0.5 * parent.width;
+ height: 0.5 * parent.height;
+ sourceSize.width: width;
+ sourceSize.height: height;
+ color: "black";
+ }
+}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
new file mode 100644
index 0000000000..604b5ce862
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
@@ -0,0 +1,53 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
+import QtQuick 2.3
+import QtQuick.Controls 2.0
+import UM 1.3 as UM
+
+Column {
+ property var job: null;
+ height: childrenRect.height;
+ spacing: Math.floor( UM.Theme.getSize("default_margin").height / 2); // TODO: Use explicit theme size
+ width: parent.width;
+
+ Item {
+ id: jobName;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width;
+
+ Rectangle {
+ visible: !job;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Use explicit theme color
+ height: parent.height;
+ width: parent.width / 3;
+ }
+ Label {
+ visible: job;
+ text: job ? job.name : "";
+ font: UM.Theme.getFont("default_bold");
+ elide: Text.ElideRight;
+ anchors.fill: parent;
+ }
+ }
+
+ Item {
+ id: ownerName;
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width;
+
+ Rectangle {
+ visible: !job;
+ color: UM.Theme.getColor("viewport_background"); // TODO: Use explicit theme color
+ height: parent.height;
+ width: parent.width / 2;
+ }
+ Label {
+ visible: job;
+ text: job ? job.owner : "";
+ font: UM.Theme.getFont("default");
+ elide: Text.ElideRight;
+ anchors.fill: parent;
+ }
+ }
+}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index 3eec298bd2..29a90960ba 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -49,8 +49,8 @@ Item {
// Main card
Item {
id: mainCard;
- // color: "pink";
- height: childrenRect.height;
+ // I don't know why the extra height is needed but it is in order to look proportional.
+ height: childrenRect.height + 2;
width: parent.width;
// Machine icon
@@ -201,8 +201,7 @@ Item {
anchors.fill: parent;
enabled: printer;
onClicked: {
- console.log(model.index)
- if (root.collapsed && model) {
+ if (model && root.collapsed) {
printerList.currentIndex = model.index;
} else {
printerList.currentIndex = -1;
@@ -213,6 +212,9 @@ Item {
Connections {
target: printerList
onCurrentIndexChanged: {
+ if (!model) {
+ return;
+ }
root.collapsed = printerList.currentIndex != model.index;
}
}
@@ -221,8 +223,8 @@ Item {
// Detailed card
PrinterCardDetails {
collapsed: root.collapsed;
- printer: printer;
- visible: printer;
+ printer: root.printer;
+ visible: root.printer;
}
// Progress bar
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
index 8cc10b5b6b..411c76d97a 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -7,10 +7,9 @@ import QtQuick.Controls 1.4 as LegacyControls
import UM 1.3 as UM
Item {
- id: root;
property var printer: null;
- property var printJob: printer.activePrintJob;
+ property var printJob: printer ? printer.activePrintJob : null;
property var collapsed: true;
Behavior on height { NumberAnimation { duration: 100 } }
@@ -21,350 +20,59 @@ Item {
opacity: collapsed ? 0 : 1;
Column {
- height: childrenRect.height;
+ id: contentColumn;
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ }
+ height: childrenRect.height + UM.Theme.getSize("wide_margin").height;
+ spacing: UM.Theme.getSize("default_margin").height;
width: parent.width;
- spacing: UM.Theme.getSize("default_margin").height;
-
- HorizontalLine { enabled: printer.state !== "disabled" }
+ HorizontalLine {}
PrinterInfoBlock {
printer: root.printer;
printJob: root.printer.activePrintJob;
}
- HorizontalLine { enabled: printer.state !== "disabled" }
+ HorizontalLine {}
- Rectangle {
- color: "orange";
+ Row {
width: parent.width;
- height: 100;
+ height: childrenRect.height;
+
+ PrintJobTitle {
+ job: root.printer.activePrintJob;
+ }
+ PrintJobContextMenu {
+ id: contextButton;
+ anchors {
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("wide_margin").width;
+ }
+ printJob: root.printer.activePrintJob;
+ visible: root.printer.activePrintJob;
+ }
}
+
- Item {
- id: jobInfoSection;
-
- property var job: root.printer ? root.printer.activePrintJob : null;
-
- Component.onCompleted: {
- console.log(job)
- }
- height: visible ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height : 0;
- width: parent.width;
- visible: job && job.state != "queued";
-
- anchors.left: parent.left;
- // anchors.right: contextButton.left;
- // anchors.rightMargin: UM.Theme.getSize("default_margin").width;
-
- Label {
- id: printJobName;
- elide: Text.ElideRight;
- font: UM.Theme.getFont("default_bold");
- text: job ? job.name : "";
- }
-
- Label {
- id: ownerName;
- anchors.top: job.bottom;
- elide: Text.ElideRight;
- font: UM.Theme.getFont("default");
- opacity: 0.6;
- text: job ? job.owner : "";
- width: parent.width;
- }
+ PrintJobPreview {
+ job: root.printer.activePrintJob;
+ anchors.horizontalCenter: parent.horizontalCenter;
}
}
+
+ CameraButton {
+ id: showCameraButton;
+ anchors {
+ bottom: contentColumn.bottom;
+ bottomMargin: Math.round(1.5 * UM.Theme.getSize("default_margin").height);
+ left: contentColumn.left;
+ leftMargin: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
+ }
+ iconSource: "../svg/camera-icon.svg";
+ }
}
-
-
-// Item {
-// id: jobInfo;
-// property var showJobInfo: {
-// return printer.activePrintJob != null && printer.activePrintJob.state != "queued"
-// }
-
-// // anchors {
-// // top: jobSpacer.bottom
-// // topMargin: 2 * UM.Theme.getSize("default_margin").height
-// // left: parent.left
-// // right: parent.right
-// // margins: UM.Theme.getSize("default_margin").width
-// // leftMargin: 2 * UM.Theme.getSize("default_margin").width
-// // }
-
-// height: showJobInfo ? childrenRect.height + 2 * UM.Theme.getSize("default_margin").height : 0;
-// visible: showJobInfo;
-
-
-// function switchPopupState()
-// {
-// popup.visible ? popup.close() : popup.open()
-// }
-
-// Button
-// {
-// id: contextButton
-// text: "\u22EE" //Unicode; Three stacked points.
-// width: 35
-// height: width
-// anchors
-// {
-// right: parent.right
-// top: parent.top
-// }
-// hoverEnabled: true
-
-// background: Rectangle
-// {
-// opacity: contextButton.down || contextButton.hovered ? 1 : 0
-// width: contextButton.width
-// height: contextButton.height
-// radius: 0.5 * width
-// color: UM.Theme.getColor("viewport_background")
-// }
-// contentItem: Label
-// {
-// text: contextButton.text
-// color: UM.Theme.getColor("monitor_tab_text_inactive")
-// font.pixelSize: 25
-// verticalAlignment: Text.AlignVCenter
-// horizontalAlignment: Text.AlignHCenter
-// }
-
-// onClicked: parent.switchPopupState()
-// }
-
-// Popup
-// {
-// // TODO Change once updating to Qt5.10 - The 'opened' property is in 5.10 but the behavior is now implemented with the visible property
-// id: popup
-// clip: true
-// closePolicy: Popup.CloseOnPressOutside
-// x: (parent.width - width) + 26 * screenScaleFactor
-// y: contextButton.height - 5 * screenScaleFactor // Because shadow
-// width: 182 * screenScaleFactor
-// height: contentItem.height + 2 * padding
-// visible: false
-// padding: 5 * screenScaleFactor // Because shadow
-
-// transformOrigin: Popup.Top
-// contentItem: Item
-// {
-// width: popup.width
-// height: childrenRect.height + 36 * screenScaleFactor
-// anchors.topMargin: 10 * screenScaleFactor
-// anchors.bottomMargin: 10 * screenScaleFactor
-// Button
-// {
-// id: pauseButton
-// text: printer.activePrintJob != null && printer.activePrintJob.state == "paused" ? catalog.i18nc("@label", "Resume") : catalog.i18nc("@label", "Pause")
-// onClicked:
-// {
-// if(printer.activePrintJob.state == "paused")
-// {
-// printer.activePrintJob.setState("print")
-// }
-// else if(printer.activePrintJob.state == "printing")
-// {
-// printer.activePrintJob.setState("pause")
-// }
-// popup.close()
-// }
-// width: parent.width
-// enabled: printer.activePrintJob != null && ["paused", "printing"].indexOf(printer.activePrintJob.state) >= 0
-// visible: enabled
-// anchors.top: parent.top
-// anchors.topMargin: 18 * screenScaleFactor
-// height: visible ? 39 * screenScaleFactor : 0 * screenScaleFactor
-// hoverEnabled: true
-// background: Rectangle
-// {
-// opacity: pauseButton.down || pauseButton.hovered ? 1 : 0
-// color: UM.Theme.getColor("viewport_background")
-// }
-// contentItem: Label
-// {
-// text: pauseButton.text
-// horizontalAlignment: Text.AlignLeft
-// verticalAlignment: Text.AlignVCenter
-// }
-// }
-
-// Button
-// {
-// id: abortButton
-// text: catalog.i18nc("@label", "Abort")
-// onClicked:
-// {
-// abortConfirmationDialog.visible = true;
-// popup.close();
-// }
-// width: parent.width
-// height: 39 * screenScaleFactor
-// anchors.top: pauseButton.bottom
-// hoverEnabled: true
-// enabled: printer.activePrintJob != null && ["paused", "printing", "pre_print"].indexOf(printer.activePrintJob.state) >= 0
-// background: Rectangle
-// {
-// opacity: abortButton.down || abortButton.hovered ? 1 : 0
-// color: UM.Theme.getColor("viewport_background")
-// }
-// contentItem: Label
-// {
-// text: abortButton.text
-// horizontalAlignment: Text.AlignLeft
-// verticalAlignment: Text.AlignVCenter
-// }
-// }
-
-// MessageDialog
-// {
-// id: abortConfirmationDialog
-// title: catalog.i18nc("@window:title", "Abort print")
-// icon: StandardIcon.Warning
-// text: catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printer.activePrintJob.name)
-// standardButtons: StandardButton.Yes | StandardButton.No
-// Component.onCompleted: visible = false
-// onYes: printer.activePrintJob.setState("abort")
-// }
-// }
-
-// background: Item
-// {
-// width: popup.width
-// height: popup.height
-
-// DropShadow
-// {
-// anchors.fill: pointedRectangle
-// radius: 5
-// color: "#3F000000" // 25% shadow
-// source: pointedRectangle
-// transparentBorder: true
-// verticalOffset: 2
-// }
-
-// Item
-// {
-// id: pointedRectangle
-// width: parent.width - 10 * screenScaleFactor // Because of the shadow
-// height: parent.height - 10 * screenScaleFactor // Because of the shadow
-// anchors.horizontalCenter: parent.horizontalCenter
-// anchors.verticalCenter: parent.verticalCenter
-
-// Rectangle
-// {
-// id: point
-// height: 14 * screenScaleFactor
-// width: 14 * screenScaleFactor
-// color: UM.Theme.getColor("setting_control")
-// transform: Rotation { angle: 45}
-// anchors.right: bloop.right
-// anchors.rightMargin: 24
-// y: 1
-// }
-
-// Rectangle
-// {
-// id: bloop
-// color: UM.Theme.getColor("setting_control")
-// width: parent.width
-// anchors.top: parent.top
-// anchors.topMargin: 8 * screenScaleFactor // Because of the shadow + point
-// anchors.bottom: parent.bottom
-// anchors.bottomMargin: 8 * screenScaleFactor // Because of the shadow
-// }
-// }
-// }
-
-// exit: Transition
-// {
-// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
-// NumberAnimation { property: "visible"; duration: 75; }
-// }
-// enter: Transition
-// {
-// // This applies a default NumberAnimation to any changes a state change makes to x or y properties
-// NumberAnimation { property: "visible"; duration: 75; }
-// }
-
-// onClosed: visible = false
-// onOpened: visible = true
-// }
-
-// Image
-// {
-// id: printJobPreview
-// source: printer.activePrintJob != null ? printer.activePrintJob.previewImageUrl : ""
-// anchors.top: ownerName.bottom
-// anchors.horizontalCenter: parent.horizontalCenter
-// width: parent.width / 2
-// height: width
-// opacity:
-// {
-// if(printer.activePrintJob == null)
-// {
-// return 1.0
-// }
-
-// switch(printer.activePrintJob.state)
-// {
-// case "wait_cleanup":
-// case "wait_user_action":
-// case "paused":
-// return 0.5
-// default:
-// return 1.0
-// }
-// }
-
-
-// }
-
-// UM.RecolorImage
-// {
-// id: statusImage
-// anchors.centerIn: printJobPreview
-// source:
-// {
-// if(printer.activePrintJob == null)
-// {
-// return ""
-// }
-// switch(printer.activePrintJob.state)
-// {
-// case "paused":
-// return "../svg/paused-icon.svg"
-// case "wait_cleanup":
-// if(printer.activePrintJob.timeElapsed < printer.activePrintJob.timeTotal)
-// {
-// return "../svg/aborted-icon.svg"
-// }
-// return "../svg/approved-icon.svg"
-// case "wait_user_action":
-// return "../svg/aborted-icon.svg"
-// default:
-// return ""
-// }
-// }
-// visible: source != ""
-// width: 0.5 * printJobPreview.width
-// height: 0.5 * printJobPreview.height
-// sourceSize.width: width
-// sourceSize.height: height
-// color: "black"
-// }
-
-// CameraButton
-// {
-// id: showCameraButton
-// iconSource: "../svg/camera-icon.svg"
-// anchors
-// {
-// left: parent.left
-// bottom: printJobPreview.bottom
-// }
-// }
-// }
-// }
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
index 1b3a83d024..d116df8b28 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -24,8 +24,7 @@ Item {
anchors {
left: parent.left;
right: parent.right;
- bottom: extrudersInfo.top;
- bottomMargin: UM.Theme.getSize("default_margin").height;
+
}
height: childrenRect.height;
spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
@@ -52,6 +51,8 @@ Item {
left: parent.left;
right: parent.right;
rightMargin: UM.Theme.getSize("default_margin").width;
+ top: printerFamilyPills.bottom;
+ topMargin: UM.Theme.getSize("default_margin").height;
}
height: childrenRect.height;
spacing: UM.Theme.getSize("default_margin").width;
From 00ce3b0083fd159b2903b1021dc80e2db1e0c101 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Mon, 1 Oct 2018 16:32:30 +0200
Subject: [PATCH 160/390] Review feedback
Contributes to CL-1051
---
.../resources/qml/PrintJobInfoBlock.qml | 17 ++++++-----------
.../resources/qml/PrinterInfoBlock.qml | 10 ++++------
2 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 8a6a6d297c..c97f16b29c 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -48,15 +48,13 @@ Item {
height: childrenRect.height;
// Main content
- Rectangle {
+ Item {
id: mainContent;
- color: root.debug ? "red" : "transparent";
width: parent.width;
height: 200; // TODO: Theme!
// Left content
- Rectangle {
- color: root.debug ? "lightblue" : "transparent";
+ Item {
anchors {
left: parent.left;
right: parent.horizontalCenter;
@@ -179,8 +177,7 @@ Item {
}
// Right content
- Rectangle {
- color: root.debug ? "blue" : "transparent";
+ Item {
anchors {
left: parent.horizontalCenter;
right: parent.right;
@@ -238,7 +235,7 @@ Item {
}
}
- Rectangle {
+ Item {
id: configChangesBox;
width: parent.width;
height: childrenRect.height;
@@ -322,9 +319,8 @@ Item {
}
// Config change details
- Rectangle {
+ Item {
id: configChangeDetails;
- color: "transparent";
width: parent.width;
visible: false;
// In case of really massive multi-line configuration changes
@@ -332,8 +328,7 @@ Item {
Behavior on height { NumberAnimation { duration: 100 } }
anchors.top: configChangeToggle.bottom;
- Rectangle {
- color: "transparent";
+ Item {
clip: true;
anchors {
fill: parent;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
index d116df8b28..ded249b9c9 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -73,12 +73,10 @@ Item {
if (root.printJob) {
// Use more-specific print job if possible
return root.printJob.configuration.extruderConfigurations[i];
- } else {
- if (root.printer) {
- return root.printer.printerConfiguration.extruderConfigurations[i];
- } else {
- return null;
- }
}
+ if (root.printer) {
+ return root.printer.printerConfiguration.extruderConfigurations[i];
+ }
+ return null;
}
}
\ No newline at end of file
From ae9faadca6d6587e711cc0915da5a92808d3a584 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Mon, 1 Oct 2018 16:36:22 +0200
Subject: [PATCH 161/390] Add i18nc string
Contributes to CL-1051
---
plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index c97f16b29c..9bee5499da 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -285,7 +285,7 @@ Item {
horizontalCenter: parent.horizontalCenter;
verticalCenter: parent.verticalCenter;
}
- text: "Configuration change"; // TODO: i18n!
+ text: catalog.i18nc("@label", "Configuration change");
}
UM.RecolorImage {
From 82cddf07ad469ccec269999584ee07e2f47f53eb Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Mon, 1 Oct 2018 17:12:05 +0200
Subject: [PATCH 162/390] Move ConfigurationChangeModel to plugin
Contributes to CL-897
---
cura/PrinterOutput/PrintJobOutputModel.py | 17 +----------
.../src/ClusterUM3OutputDevice.py | 24 +++++++--------
.../src}/ConfigurationChangeModel.py | 0
.../src/UM3PrintJobOutputModel.py | 29 +++++++++++++++++++
4 files changed, 42 insertions(+), 28 deletions(-)
rename {cura/PrinterOutput => plugins/UM3NetworkPrinting/src}/ConfigurationChangeModel.py (100%)
create mode 100644 plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py
diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py
index c194f5df32..ce3c20fcfb 100644
--- a/cura/PrinterOutput/PrintJobOutputModel.py
+++ b/cura/PrinterOutput/PrintJobOutputModel.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
@@ -12,9 +12,6 @@ if TYPE_CHECKING:
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
-from cura.PrinterOutput.ConfigurationChangeModel import ConfigurationChangeModel
-
-
class PrintJobOutputModel(QObject):
stateChanged = pyqtSignal()
timeTotalChanged = pyqtSignal()
@@ -26,7 +23,6 @@ class PrintJobOutputModel(QObject):
configurationChanged = pyqtSignal()
previewImageChanged = pyqtSignal()
compatibleMachineFamiliesChanged = pyqtSignal()
- configurationChangesChanged = pyqtSignal()
def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None:
super().__init__(parent)
@@ -44,7 +40,6 @@ class PrintJobOutputModel(QObject):
self._preview_image_id = 0
self._preview_image = None # type: Optional[QImage]
- self._configuration_changes = [] # type: List[ConfigurationChangeModel]
@pyqtProperty("QStringList", notify=compatibleMachineFamiliesChanged)
def compatibleMachineFamilies(self):
@@ -152,13 +147,3 @@ class PrintJobOutputModel(QObject):
@pyqtSlot(str)
def setState(self, state):
self._output_controller.setJobState(self, state)
-
- @pyqtProperty("QVariantList", notify=configurationChangesChanged)
- def configurationChanges(self) -> List[ConfigurationChangeModel]:
- return self._configuration_changes
-
- def updateConfigurationChanges(self, changes: List[ConfigurationChangeModel]) -> None:
- if len(self._configuration_changes) == 0 and len(changes) == 0:
- return
- self._configuration_changes = changes
- self.configurationChangesChanged.emit()
diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
index 79040373ae..88ac1c1e76 100644
--- a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
@@ -17,17 +17,17 @@ from UM.Scene.SceneNode import SceneNode # For typing.
from UM.Version import Version # To check against firmware versions for support.
from cura.CuraApplication import CuraApplication
-from cura.PrinterOutput.ConfigurationChangeModel import ConfigurationChangeModel
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
from cura.PrinterOutput.ExtruderConfigurationModel import ExtruderConfigurationModel
from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
-from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel
from cura.PrinterOutput.NetworkCamera import NetworkCamera
from .ClusterUM3PrinterOutputController import ClusterUM3PrinterOutputController
from .SendMaterialJob import SendMaterialJob
+from .ConfigurationChangeModel import ConfigurationChangeModel
+from .UM3PrintJobOutputModel import UM3PrintJobOutputModel
from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
from PyQt5.QtGui import QDesktopServices, QImage
@@ -61,7 +61,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
self._dummy_lambdas = ("", {}, io.BytesIO()) #type: Tuple[str, Dict, Union[io.StringIO, io.BytesIO]]
- self._print_jobs = [] # type: List[PrintJobOutputModel]
+ self._print_jobs = [] # type: List[UM3PrintJobOutputModel]
self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterMonitorItem.qml")
self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterControlItem.qml")
@@ -91,7 +91,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
self._printer_uuid_to_unique_name_mapping = {} # type: Dict[str, str]
- self._finished_jobs = [] # type: List[PrintJobOutputModel]
+ self._finished_jobs = [] # type: List[UM3PrintJobOutputModel]
self._cluster_size = int(properties.get(b"cluster_size", 0)) # type: int
@@ -350,15 +350,15 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
QDesktopServices.openUrl(QUrl("http://" + self._address + "/printers"))
@pyqtProperty("QVariantList", notify = printJobsChanged)
- def printJobs(self)-> List[PrintJobOutputModel]:
+ def printJobs(self)-> List[UM3PrintJobOutputModel]:
return self._print_jobs
@pyqtProperty("QVariantList", notify = printJobsChanged)
- def queuedPrintJobs(self) -> List[PrintJobOutputModel]:
+ def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]:
return [print_job for print_job in self._print_jobs if print_job.state == "queued" or print_job.state == "error"]
@pyqtProperty("QVariantList", notify = printJobsChanged)
- def activePrintJobs(self) -> List[PrintJobOutputModel]:
+ def activePrintJobs(self) -> List[UM3PrintJobOutputModel]:
return [print_job for print_job in self._print_jobs if print_job.assignedPrinter is not None and print_job.state != "queued"]
@pyqtProperty("QVariantList", notify = clusterPrintersChanged)
@@ -543,8 +543,8 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
self._printers.append(printer)
return printer
- def _createPrintJobModel(self, data: Dict[str, Any]) -> PrintJobOutputModel:
- print_job = PrintJobOutputModel(output_controller=ClusterUM3PrinterOutputController(self),
+ def _createPrintJobModel(self, data: Dict[str, Any]) -> UM3PrintJobOutputModel:
+ print_job = UM3PrintJobOutputModel(output_controller=ClusterUM3PrinterOutputController(self),
key=data["uuid"], name= data["name"])
configuration = ConfigurationModel()
@@ -564,7 +564,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
print_job.stateChanged.connect(self._printJobStateChanged)
return print_job
- def _updatePrintJob(self, print_job: PrintJobOutputModel, data: Dict[str, Any]) -> None:
+ def _updatePrintJob(self, print_job: UM3PrintJobOutputModel, data: Dict[str, Any]) -> None:
print_job.updateTimeTotal(data["time_total"])
print_job.updateTimeElapsed(data["time_elapsed"])
impediments_to_printing = data.get("impediments_to_printing", [])
@@ -647,7 +647,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
material = self._createMaterialOutputModel(material_data)
extruder.updateActiveMaterial(material)
- def _removeJob(self, job: PrintJobOutputModel) -> bool:
+ def _removeJob(self, job: UM3PrintJobOutputModel) -> bool:
if job not in self._print_jobs:
return False
@@ -691,7 +691,7 @@ def checkValidGetReply(reply: QNetworkReply) -> bool:
return True
-def findByKey(lst: List[Union[PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[PrintJobOutputModel]:
+def findByKey(lst: List[Union[UM3PrintJobOutputModel, PrinterOutputModel]], key: str) -> Optional[UM3PrintJobOutputModel]:
for item in lst:
if item.key == key:
return item
diff --git a/cura/PrinterOutput/ConfigurationChangeModel.py b/plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py
similarity index 100%
rename from cura/PrinterOutput/ConfigurationChangeModel.py
rename to plugins/UM3NetworkPrinting/src/ConfigurationChangeModel.py
diff --git a/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py b/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py
new file mode 100644
index 0000000000..2ac3e6ba4f
--- /dev/null
+++ b/plugins/UM3NetworkPrinting/src/UM3PrintJobOutputModel.py
@@ -0,0 +1,29 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
+from typing import Optional, TYPE_CHECKING, List
+from PyQt5.QtCore import QUrl
+from PyQt5.QtGui import QImage
+
+from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
+
+from .ConfigurationChangeModel import ConfigurationChangeModel
+
+
+class UM3PrintJobOutputModel(PrintJobOutputModel):
+ configurationChangesChanged = pyqtSignal()
+
+ def __init__(self, output_controller: "PrinterOutputController", key: str = "", name: str = "", parent=None) -> None:
+ super().__init__(output_controller, key, name, parent)
+ self._configuration_changes = [] # type: List[ConfigurationChangeModel]
+
+ @pyqtProperty("QVariantList", notify=configurationChangesChanged)
+ def configurationChanges(self) -> List[ConfigurationChangeModel]:
+ return self._configuration_changes
+
+ def updateConfigurationChanges(self, changes: List[ConfigurationChangeModel]) -> None:
+ if len(self._configuration_changes) == 0 and len(changes) == 0:
+ return
+ self._configuration_changes = changes
+ self.configurationChangesChanged.emit()
From 8994aad52d8e85176628b8effe4b8ddcda4e682e Mon Sep 17 00:00:00 2001
From: ValentinPitre
Date: Mon, 1 Oct 2018 22:42:20 +0200
Subject: [PATCH 163/390] fix setting versions numbers
---
resources/variants/tizyx_k25_0.2.inst.cfg | 2 +-
resources/variants/tizyx_k25_0.3.inst.cfg | 2 +-
resources/variants/tizyx_k25_0.4.inst.cfg | 2 +-
resources/variants/tizyx_k25_0.5.inst.cfg | 2 +-
resources/variants/tizyx_k25_0.6.inst.cfg | 2 +-
resources/variants/tizyx_k25_0.8.inst.cfg | 2 +-
resources/variants/tizyx_k25_1.0.inst.cfg | 2 +-
7 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/resources/variants/tizyx_k25_0.2.inst.cfg b/resources/variants/tizyx_k25_0.2.inst.cfg
index a87f5a0b25..cd9f1bcbd1 100644
--- a/resources/variants/tizyx_k25_0.2.inst.cfg
+++ b/resources/variants/tizyx_k25_0.2.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
diff --git a/resources/variants/tizyx_k25_0.3.inst.cfg b/resources/variants/tizyx_k25_0.3.inst.cfg
index f6be2713d3..8b34d23bf6 100644
--- a/resources/variants/tizyx_k25_0.3.inst.cfg
+++ b/resources/variants/tizyx_k25_0.3.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
diff --git a/resources/variants/tizyx_k25_0.4.inst.cfg b/resources/variants/tizyx_k25_0.4.inst.cfg
index 1fd0939268..c147eb0ad0 100644
--- a/resources/variants/tizyx_k25_0.4.inst.cfg
+++ b/resources/variants/tizyx_k25_0.4.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
diff --git a/resources/variants/tizyx_k25_0.5.inst.cfg b/resources/variants/tizyx_k25_0.5.inst.cfg
index ed426f1c5c..14102fb2c7 100644
--- a/resources/variants/tizyx_k25_0.5.inst.cfg
+++ b/resources/variants/tizyx_k25_0.5.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
diff --git a/resources/variants/tizyx_k25_0.6.inst.cfg b/resources/variants/tizyx_k25_0.6.inst.cfg
index 876f773d96..00f69f71f4 100644
--- a/resources/variants/tizyx_k25_0.6.inst.cfg
+++ b/resources/variants/tizyx_k25_0.6.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
diff --git a/resources/variants/tizyx_k25_0.8.inst.cfg b/resources/variants/tizyx_k25_0.8.inst.cfg
index fd9516106a..c80f5e70d2 100644
--- a/resources/variants/tizyx_k25_0.8.inst.cfg
+++ b/resources/variants/tizyx_k25_0.8.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
diff --git a/resources/variants/tizyx_k25_1.0.inst.cfg b/resources/variants/tizyx_k25_1.0.inst.cfg
index d310dfd0cf..ce8593b1e8 100644
--- a/resources/variants/tizyx_k25_1.0.inst.cfg
+++ b/resources/variants/tizyx_k25_1.0.inst.cfg
@@ -4,7 +4,7 @@ version = 4
definition = tizyx_k25
[metadata]
-setting_version = 4
+setting_version = 5
type = variant
hardware_type = nozzle
From 18361b94343dd1f443aa4074c6f8c5e28b38c904 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Tue, 2 Oct 2018 10:31:05 +0200
Subject: [PATCH 164/390] Ensure that CuraAPI can be called in the same way as
before
This should prevent another API break.
CURA-5744
---
cura/API/__init__.py | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/cura/API/__init__.py b/cura/API/__init__.py
index e9aba86a41..ad07452c1a 100644
--- a/cura/API/__init__.py
+++ b/cura/API/__init__.py
@@ -23,10 +23,22 @@ class CuraAPI(QObject):
# For now we use the same API version to be consistent.
VERSION = PluginRegistry.APIVersion
+ __instance = None # type: "CuraAPI"
+ _application = None # type: CuraApplication
- def __init__(self, application: "CuraApplication") -> None:
- super().__init__(parent = application)
- self._application = application
+ # This is done to ensure that the first time an instance is created, it's forced that the application is set.
+ # The main reason for this is that we want to prevent consumers of API to have a dependency on CuraApplication.
+ # Since the API is intended to be used by plugins, the cura application should have already created this.
+ def __new__(cls, application: Optional["CuraApplication"] = None):
+ if cls.__instance is None:
+ if application is None:
+ raise Exception("Upon first time creation, the application must be set.")
+ cls.__instance = super(CuraAPI, cls).__new__(cls)
+ cls._application = application
+ return cls.__instance
+
+ def __init__(self, application: Optional["CuraApplication"] = None) -> None:
+ super().__init__(parent = CuraAPI._application)
# Accounts API
self._account = Account(self._application)
From 3908781f6f7d7072f71ae7011731c62d6c6583bc Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Tue, 2 Oct 2018 17:08:39 +0200
Subject: [PATCH 165/390] Fix this sh*t
Sorry, I kind of dropped the ball before.
---
cura/PrinterOutput/FirmwareUpdater.py | 38 ++++++++++++++---------
plugins/USBPrinting/AvrFirmwareUpdater.py | 20 +++++++-----
2 files changed, 35 insertions(+), 23 deletions(-)
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index 2f200118a9..88169b1d75 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -16,6 +16,8 @@ class FirmwareUpdater(QObject):
firmwareUpdateStateChanged = pyqtSignal()
def __init__(self, output_device: PrinterOutputDevice) -> None:
+ super().__init__()
+
self._output_device = output_device
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
@@ -31,29 +33,35 @@ class FirmwareUpdater(QObject):
self._firmware_location = QUrl(file).toLocalFile()
else:
self._firmware_location = file
- self.showFirmwareInterface()
- self.setFirmwareUpdateState(FirmwareUpdateState.updating)
+ self._showFirmwareInterface()
+ self._setFirmwareUpdateState(FirmwareUpdateState.updating)
+
self._update_firmware_thread.start()
def _updateFirmware(self) -> None:
raise NotImplementedError("_updateFirmware needs to be implemented")
- def cleanupAfterUpdate(self) -> None:
+ ## Show firmware interface.
+ # This will create the view if its not already created.
+ def _showFirmwareInterface(self) -> None:
+ if self._firmware_view is None:
+ path = Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "FirmwareUpdateWindow.qml")
+ self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
+
+ if not self._firmware_view:
+ return
+
+ self._onFirmwareProgress(0)
+ self._setFirmwareUpdateState(FirmwareUpdateState.idle)
+ self._firmware_view.show()
+
+ ## Cleanup after a succesful update
+ def _cleanupAfterUpdate(self) -> None:
# Clean up for next attempt.
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
self._firmware_location = ""
self._onFirmwareProgress(100)
- self.setFirmwareUpdateState(FirmwareUpdateState.completed)
-
- ## Show firmware interface.
- # This will create the view if its not already created.
- def showFirmwareInterface(self) -> None:
- if self._firmware_view is None:
- path = Resources.getPath(self.ResourceTypes.QmlFiles, "FirmwareUpdateWindow.qml")
- self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
-
- if self._firmware_view:
- self._firmware_view.show()
+ self._setFirmwareUpdateState(FirmwareUpdateState.completed)
@pyqtProperty(float, notify = firmwareProgressChanged)
def firmwareProgress(self) -> float:
@@ -63,7 +71,7 @@ class FirmwareUpdater(QObject):
def firmwareUpdateState(self) -> "FirmwareUpdateState":
return self._firmware_update_state
- def setFirmwareUpdateState(self, state) -> None:
+ def _setFirmwareUpdateState(self, state) -> None:
if self._firmware_update_state != state:
self._firmware_update_state = state
self.firmwareUpdateStateChanged.emit()
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index ab71f70e30..505e1ddb7e 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -22,39 +22,43 @@ class AvrFirmwareUpdater(FirmwareUpdater):
assert len(hex_file) > 0
except (FileNotFoundError, AssertionError):
Logger.log("e", "Unable to read provided hex file. Could not update firmware.")
- self.setFirmwareUpdateState(FirmwareUpdateState.firmware_not_found_error)
+ self._setFirmwareUpdateState(FirmwareUpdateState.firmware_not_found_error)
return
programmer = stk500v2.Stk500v2()
programmer.progress_callback = self._onFirmwareProgress
+ # Ensure that other connections are closed.
+ if self._output_device.isConnected():
+ self._output_device.close()
+
try:
- programmer.connect(self._serial_port)
+ programmer.connect(self._output_device._serial_port)
except:
programmer.close()
Logger.logException("e", "Failed to update firmware")
- self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
+ self._setFirmwareUpdateState(FirmwareUpdateState.communication_error)
return
# Give programmer some time to connect. Might need more in some cases, but this worked in all tested cases.
sleep(1)
if not programmer.isConnected():
Logger.log("e", "Unable to connect with serial. Could not update firmware")
- self.setFirmwareUpdateState(FirmwareUpdateState.communication_error)
+ self._setFirmwareUpdateState(FirmwareUpdateState.communication_error)
try:
programmer.programChip(hex_file)
except SerialException as e:
Logger.log("e", "A serial port exception occured during firmware update: %s" % e)
- self.setFirmwareUpdateState(FirmwareUpdateState.io_error)
+ self._setFirmwareUpdateState(FirmwareUpdateState.io_error)
return
except Exception as e:
Logger.log("e", "An unknown exception occured during firmware update: %s" % e)
- self.setFirmwareUpdateState(FirmwareUpdateState.unknown_error)
+ self._setFirmwareUpdateState(FirmwareUpdateState.unknown_error)
return
programmer.close()
# Try to re-connect with the machine again, which must be done on the Qt thread, so we use call later.
- CuraApplication.getInstance().callLater(self.connect)
+ CuraApplication.getInstance().callLater(self._output_device.connect)
- self.cleanupAfterUpdate()
+ self._cleanupAfterUpdate()
From b4e186ce789c920ab4a1387910ea4a89ad3ce843 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Tue, 2 Oct 2018 17:14:22 +0200
Subject: [PATCH 166/390] Disable close button while updating firmware
---
resources/qml/FirmwareUpdateWindow.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/qml/FirmwareUpdateWindow.qml b/resources/qml/FirmwareUpdateWindow.qml
index e0f9de314e..c71d70fc97 100644
--- a/resources/qml/FirmwareUpdateWindow.qml
+++ b/resources/qml/FirmwareUpdateWindow.qml
@@ -82,7 +82,7 @@ UM.Dialog
Button
{
text: catalog.i18nc("@action:button","Close");
- enabled: manager.firmwareUpdateCompleteStatus;
+ enabled: manager.firmwareUpdateState != 1;
onClicked: base.visible = false;
}
]
From 718ac0a30731dec368422b5d230945ee09f5595e Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 09:17:51 +0200
Subject: [PATCH 167/390] Create firmware update progress window from QML
---
cura/PrinterOutput/FirmwareUpdater.py | 27 +----
cura/PrinterOutputDevice.py | 7 +-
.../UpgradeFirmwareMachineAction.py | 43 ++++++-
.../UpgradeFirmwareMachineAction.qml | 107 ++++++++++++++++--
resources/qml/FirmwareUpdateWindow.qml | 89 ---------------
5 files changed, 151 insertions(+), 122 deletions(-)
delete mode 100644 resources/qml/FirmwareUpdateWindow.qml
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index 88169b1d75..92e92437ad 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -3,26 +3,25 @@
from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
-from UM.Resources import Resources
-from cura.PrinterOutputDevice import PrinterOutputDevice
-from cura.CuraApplication import CuraApplication
-
from enum import IntEnum
from threading import Thread
from typing import Union
+MYPY = False
+if MYPY:
+ from cura.PrinterOutputDevice import PrinterOutputDevice
+
class FirmwareUpdater(QObject):
firmwareProgressChanged = pyqtSignal()
firmwareUpdateStateChanged = pyqtSignal()
- def __init__(self, output_device: PrinterOutputDevice) -> None:
+ def __init__(self, output_device: "PrinterOutputDevice") -> None:
super().__init__()
self._output_device = output_device
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
- self._firmware_view = None
self._firmware_location = ""
self._firmware_progress = 0
self._firmware_update_state = FirmwareUpdateState.idle
@@ -33,7 +32,7 @@ class FirmwareUpdater(QObject):
self._firmware_location = QUrl(file).toLocalFile()
else:
self._firmware_location = file
- self._showFirmwareInterface()
+
self._setFirmwareUpdateState(FirmwareUpdateState.updating)
self._update_firmware_thread.start()
@@ -41,20 +40,6 @@ class FirmwareUpdater(QObject):
def _updateFirmware(self) -> None:
raise NotImplementedError("_updateFirmware needs to be implemented")
- ## Show firmware interface.
- # This will create the view if its not already created.
- def _showFirmwareInterface(self) -> None:
- if self._firmware_view is None:
- path = Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "FirmwareUpdateWindow.qml")
- self._firmware_view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
-
- if not self._firmware_view:
- return
-
- self._onFirmwareProgress(0)
- self._setFirmwareUpdateState(FirmwareUpdateState.idle)
- self._firmware_view.show()
-
## Cleanup after a succesful update
def _cleanupAfterUpdate(self) -> None:
# Clean up for next attempt.
diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py
index 5ea65adb8e..c63f9c35b5 100644
--- a/cura/PrinterOutputDevice.py
+++ b/cura/PrinterOutputDevice.py
@@ -20,6 +20,7 @@ MYPY = False
if MYPY:
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
+ from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater
i18n_catalog = i18nCatalog("cura")
@@ -83,6 +84,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
self._connection_state = ConnectionState.closed #type: ConnectionState
+ self._firmware_updater = None #type: Optional[FirmwareUpdater]
self._firmware_name = None #type: Optional[str]
self._address = "" #type: str
self._connection_text = "" #type: str
@@ -225,4 +227,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
#
# This name can be used to define device type
def getFirmwareName(self) -> Optional[str]:
- return self._firmware_name
\ No newline at end of file
+ return self._firmware_name
+
+ def getFirmwareUpdater(self) -> Optional["FirmwareUpdater"]:
+ return self._firmware_updater
\ No newline at end of file
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
index 1f0e640f04..671ed22d5a 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
@@ -1,19 +1,58 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
from UM.Application import Application
from UM.Settings.DefinitionContainer import DefinitionContainer
from cura.MachineAction import MachineAction
from UM.i18n import i18nCatalog
from UM.Settings.ContainerRegistry import ContainerRegistry
+from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject
+from typing import Optional
+
+MYPY = False
+if MYPY:
+ from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater
+
catalog = i18nCatalog("cura")
## Upgrade the firmware of a machine by USB with this action.
class UpgradeFirmwareMachineAction(MachineAction):
- def __init__(self):
+ def __init__(self) -> None:
super().__init__("UpgradeFirmware", catalog.i18nc("@action", "Upgrade Firmware"))
self._qml_url = "UpgradeFirmwareMachineAction.qml"
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
- def _onContainerAdded(self, container):
+ self._active_output_device = None
+
+ Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
+
+ def _onEngineCreated(self) -> None:
+ Application.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
+
+ def _onContainerAdded(self, container) -> None:
# Add this action as a supported action to all machine definitions if they support USB connection
if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine" and container.getMetaDataEntry("supports_usb_connection"):
Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
+
+ def _onOutputDevicesChanged(self) -> None:
+ if self._active_output_device:
+ self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.disconnect(self._onControllerCanUpdateFirmwareChanged)
+ output_devices = Application.getInstance().getMachineManager().printerOutputDevices
+ print(output_devices)
+ self._active_output_device = output_devices[0] if output_devices else None
+ if self._active_output_device:
+ self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged)
+
+ self.outputDeviceCanUpdateFirmwareChanged.emit()
+
+ def _onControllerCanUpdateFirmwareChanged(self) -> None:
+ self.outputDeviceCanUpdateFirmwareChanged.emit()
+
+ outputDeviceCanUpdateFirmwareChanged = pyqtSignal()
+ @pyqtProperty(QObject, notify = outputDeviceCanUpdateFirmwareChanged)
+ def firmwareUpdater(self) -> Optional["firmwareUpdater"]:
+ if self._active_output_device and self._active_output_device.activePrinter.getController().can_update_firmware:
+ return self._active_output_device.getFirmwareUpdater()
+
+ return None
\ No newline at end of file
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index 1d0aabcae3..1c1f39edd0 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 Ultimaker B.V.
+// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
@@ -59,7 +59,8 @@ Cura.MachineAction
enabled: parent.firmwareName != "" && canUpdateFirmware
onClicked:
{
- activeOutputDevice.updateFirmware(parent.firmwareName)
+ firmwareUpdateWindow.visible = true;
+ activeOutputDevice.updateFirmware(parent.firmwareName);
}
}
Button
@@ -78,7 +79,7 @@ Cura.MachineAction
{
width: parent.width
wrapMode: Text.WordWrap
- visible: !printerConnected
+ visible: !printerConnected && !firmwareUpdateWindow.visible
text: catalog.i18nc("@label", "Firmware can not be upgraded because there is no connection with the printer.");
}
@@ -89,14 +90,102 @@ Cura.MachineAction
visible: printerConnected && !canUpdateFirmware
text: catalog.i18nc("@label", "Firmware can not be upgraded because the connection with the printer does not support upgrading firmware.");
}
+ }
- FileDialog
+ FileDialog
+ {
+ id: customFirmwareDialog
+ title: catalog.i18nc("@title:window", "Select custom firmware")
+ nameFilters: "Firmware image files (*.hex)"
+ selectExisting: true
+ onAccepted:
{
- id: customFirmwareDialog
- title: catalog.i18nc("@title:window", "Select custom firmware")
- nameFilters: "Firmware image files (*.hex)"
- selectExisting: true
- onAccepted: activeOutputDevice.updateFirmware(fileUrl)
+ firmwareUpdateWindow.visible = true;
+ activeOutputDevice.updateFirmware(fileUrl);
}
}
+
+ UM.Dialog
+ {
+ id: firmwareUpdateWindow
+
+ width: minimumWidth
+ minimumWidth: 500 * screenScaleFactor
+ height: minimumHeight
+ minimumHeight: 100 * screenScaleFactor
+
+ modality: Qt.ApplicationModal
+
+ title: catalog.i18nc("@title:window","Firmware Update")
+
+ Column
+ {
+ anchors.fill: parent
+
+ Label
+ {
+ anchors
+ {
+ left: parent.left
+ right: parent.right
+ }
+
+ text: {
+ if(manager.firmwareUpdater == null)
+ {
+ return "";
+ }
+ switch (manager.firmwareUpdater.firmwareUpdateState)
+ {
+ case 0:
+ return ""; //Not doing anything (eg; idling)
+ case 1:
+ return catalog.i18nc("@label","Updating firmware.");
+ case 2:
+ return catalog.i18nc("@label","Firmware update completed.");
+ case 3:
+ return catalog.i18nc("@label","Firmware update failed due to an unknown error.");
+ case 4:
+ return catalog.i18nc("@label","Firmware update failed due to an communication error.");
+ case 5:
+ return catalog.i18nc("@label","Firmware update failed due to an input/output error.");
+ case 6:
+ return catalog.i18nc("@label","Firmware update failed due to missing firmware.");
+ }
+ }
+
+ wrapMode: Text.Wrap
+ }
+
+ ProgressBar
+ {
+ id: prog
+ value: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareProgress : 0
+ minimumValue: 0
+ maximumValue: 100
+ indeterminate:
+ {
+ if(manager.firmwareUpdater == null)
+ {
+ return false;
+ }
+ return manager.firmwareUpdater.firmwareProgress < 1 && manager.firmwareUpdater.firmwareProgress > 0;
+ }
+ anchors
+ {
+ left: parent.left;
+ right: parent.right;
+ }
+ }
+ }
+
+ rightButtons: [
+ Button
+ {
+ text: catalog.i18nc("@action:button","Close");
+ enabled: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareUpdateState != 1 : true;
+ onClicked: firmwareUpdateWindow.visible = false;
+ }
+ ]
+ }
}
\ No newline at end of file
diff --git a/resources/qml/FirmwareUpdateWindow.qml b/resources/qml/FirmwareUpdateWindow.qml
deleted file mode 100644
index c71d70fc97..0000000000
--- a/resources/qml/FirmwareUpdateWindow.qml
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (c) 2017 Ultimaker B.V.
-// Cura is released under the terms of the LGPLv3 or higher.
-
-import QtQuick 2.2
-import QtQuick.Window 2.2
-import QtQuick.Controls 1.2
-
-import UM 1.1 as UM
-
-UM.Dialog
-{
- id: base;
-
- width: minimumWidth;
- minimumWidth: 500 * screenScaleFactor;
- height: minimumHeight;
- minimumHeight: 100 * screenScaleFactor;
-
- visible: true;
- modality: Qt.ApplicationModal;
-
- title: catalog.i18nc("@title:window","Firmware Update");
-
- Column
- {
- anchors.fill: parent;
-
- Label
- {
- anchors
- {
- left: parent.left;
- right: parent.right;
- }
-
- text: {
- switch (manager.firmwareUpdateState)
- {
- case 0:
- return "" //Not doing anything (eg; idling)
- case 1:
- return catalog.i18nc("@label","Updating firmware.")
- case 2:
- return catalog.i18nc("@label","Firmware update completed.")
- case 3:
- return catalog.i18nc("@label","Firmware update failed due to an unknown error.")
- case 4:
- return catalog.i18nc("@label","Firmware update failed due to an communication error.")
- case 5:
- return catalog.i18nc("@label","Firmware update failed due to an input/output error.")
- case 6:
- return catalog.i18nc("@label","Firmware update failed due to missing firmware.")
- }
- }
-
- wrapMode: Text.Wrap;
- }
-
- ProgressBar
- {
- id: prog
- value: manager.firmwareProgress
- minimumValue: 0
- maximumValue: 100
- indeterminate: manager.firmwareProgress < 1 && manager.firmwareProgress > 0
- anchors
- {
- left: parent.left;
- right: parent.right;
- }
- }
-
- SystemPalette
- {
- id: palette;
- }
-
- UM.I18nCatalog { id: catalog; name: "cura"; }
- }
-
- rightButtons: [
- Button
- {
- text: catalog.i18nc("@action:button","Close");
- enabled: manager.firmwareUpdateState != 1;
- onClicked: base.visible = false;
- }
- ]
-}
From 2c5095befb5b0eda3e39130fa097839ae43d5c02 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Wed, 3 Oct 2018 09:43:13 +0200
Subject: [PATCH 168/390] Add copyright headers
---
plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml | 3 +++
.../UM3NetworkPrinting/resources/qml/ClusterControlItem.qml | 3 +++
.../UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml | 3 +++
.../resources/qml/ConfigurationChangeBlock.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml | 3 +++
.../resources/qml/PrintCoreConfiguration.qml | 3 +++
.../UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml | 3 +++
.../resources/qml/PrintJobContextMenuItem.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml | 3 +++
.../UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml | 3 +++
.../resources/qml/PrinterCardProgressBar.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml | 3 +++
.../UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml | 3 +++
plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml | 3 +++
19 files changed, 57 insertions(+)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml
index 1ceebccf89..c8c40541bc 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.3
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
index 3dfabdfb86..a42d8a2d6c 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Dialogs 1.1
import QtQuick.Controls 1.4
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
index a027043b85..06b8e9f2be 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
index 48e2e9ce3c..f4eda3f75c 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml
index b5b80a3010..58443115a9 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/DiscoverUM3Action.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import UM 1.2 as UM
import Cura 1.0 as Cura
diff --git a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
index fcf2330fe7..e9cee177fa 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/HorizontalLine.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Controls 2.0
import UM 1.3 as UM
diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml
index bbbc3feee6..091b1fc1fa 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
index 289b3f3f00..151ae7ab36 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index 8d523c322a..0c185386b2 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml
index e20f5fd1a1..3a55978a3f 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenuItem.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 9bee5499da..4ffcb8342e 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
index 7fae974d8f..2bec0906a8 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index 29a90960ba..c13a4c4b93 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
index 411c76d97a..7cce0d5c0d 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
index a89ffd51d8..809a3c651a 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Controls.Styles 1.3
import QtQuick.Controls 1.4
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
index 24bc82224d..118da2f42b 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Controls 1.4
import UM 1.2 as UM
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
index ded249b9c9..51d9e1f462 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.3
import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml
index d0213a4571..5e5c972fbe 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
diff --git a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
index a19d1be60d..6af4b2c6a6 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
@@ -1,3 +1,6 @@
+// Copyright (c) 2018 Ultimaker B.V.
+// Cura is released under the terms of the LGPLv3 or higher.
+
import UM 1.2 as UM
import Cura 1.0 as Cura
From 51e7b6c3880d677ef7e4d041c9825cc2486d1d67 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Wed, 3 Oct 2018 10:30:48 +0200
Subject: [PATCH 169/390] Change font style for active material in preferences
CURA-5747
---
resources/qml/Preferences/Materials/MaterialsSlot.qml | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml
index a474b52838..c75c34b81a 100644
--- a/resources/qml/Preferences/Materials/MaterialsSlot.qml
+++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml
@@ -41,6 +41,15 @@ Rectangle
anchors.left: swatch.right
anchors.verticalCenter: materialSlot.verticalCenter
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
+ font.italic:
+ {
+ var selected_material = Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex]
+ if(selected_material == material.root_material_id)
+ {
+ return true
+ }
+ return false
+ }
}
MouseArea
{
From 5ca0c599e928394435c8f8d88d38cd1a649deef7 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Wed, 3 Oct 2018 10:55:38 +0200
Subject: [PATCH 170/390] Review feedback
Now with unified style as agreed upon by Simon & Ian.
Rules:
- ID before all other props.
- All props before children.
- All props after ID in alphabetical order.
- Empty line between children.
- Semi-colons.
Note: I didn't touch the DiscoverUM3Action because that's it's whole own UI part.
---
.../resources/qml/CameraButton.qml | 57 ++---
.../resources/qml/ClusterControlItem.qml | 170 ++++++-------
.../resources/qml/ClusterMonitorItem.qml | 228 +++++++++---------
.../qml/ConfigurationChangeBlock.qml | 77 +++---
.../resources/qml/MonitorItem.qml | 63 ++---
.../resources/qml/PrintCoreConfiguration.qml | 49 ++--
.../resources/qml/PrintJobContextMenu.qml | 24 +-
.../resources/qml/PrintJobInfoBlock.qml | 170 ++++++-------
.../resources/qml/PrintJobPreview.qml | 26 +-
.../resources/qml/PrintJobTitle.qml | 22 +-
.../resources/qml/PrintWindow.qml | 171 ++++++-------
.../resources/qml/PrinterCard.qml | 29 +--
.../resources/qml/PrinterCardDetails.qml | 7 +-
.../resources/qml/PrinterCardProgressBar.qml | 121 ++++------
.../resources/qml/PrinterFamilyPill.qml | 37 +--
.../resources/qml/PrinterInfoBlock.qml | 13 +-
.../resources/qml/PrinterVideoStream.qml | 96 +++-----
.../resources/qml/UM3InfoComponents.qml | 182 +++++++-------
18 files changed, 721 insertions(+), 821 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml
index c8c40541bc..4b78448a8d 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/CameraButton.qml
@@ -4,46 +4,37 @@
import QtQuick 2.3
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.3
-import QtQuick.Controls 2.0 as Controls2
-import QtGraphicalEffects 1.0
-
import UM 1.3 as UM
import Cura 1.0 as Cura
-Rectangle
-{
- property var iconSource: null
+Rectangle {
+ property var iconSource: null;
+ color: clickArea.containsMouse ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary");
+ height: width;
+ radius: 0.5 * width;
+ width: 36 * screenScaleFactor;
- width: 36 * screenScaleFactor
- height: width
- radius: 0.5 * width
- color: clickArea.containsMouse ? UM.Theme.getColor("primary_hover") : UM.Theme.getColor("primary")
-
- UM.RecolorImage
- {
- id: icon
- width: parent.width / 2
- height: width
- anchors.verticalCenter: parent.verticalCenter
- anchors.horizontalCenter: parent.horizontalCenter
- color: UM.Theme.getColor("primary_text")
- source: iconSource
+ UM.RecolorImage {
+ id: icon;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
+ color: UM.Theme.getColor("primary_text");
+ height: width;
+ source: iconSource;
+ width: parent.width / 2;
}
- MouseArea
- {
- id: clickArea
- anchors.fill:parent
- hoverEnabled: true
- onClicked:
- {
- if (OutputDevice.activeCamera !== null)
- {
+ MouseArea {
+ id: clickArea;
+ anchors.fill: parent;
+ hoverEnabled: true;
+ onClicked: {
+ if (OutputDevice.activeCamera !== null) {
OutputDevice.setActiveCamera(null)
- }
- else
- {
- OutputDevice.setActiveCamera(modelData.camera)
+ } else {
+ OutputDevice.setActiveCamera(modelData.camera);
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
index a42d8a2d6c..3da155cfad 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterControlItem.qml
@@ -2,130 +2,108 @@
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.3
-import QtQuick.Dialogs 1.1
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.3
-import QtGraphicalEffects 1.0
-
-import QtQuick.Controls 2.0 as Controls2
-
import UM 1.3 as UM
import Cura 1.0 as Cura
+Component {
+ Rectangle {
+ id: base;
+ property var lineColor: "#DCDCDC"; // TODO: Should be linked to theme.
+ property var shadowRadius: 5 * screenScaleFactor;
+ property var cornerRadius: 4 * screenScaleFactor; // TODO: Should be linked to theme.
+ anchors.fill: parent;
+ color: "white";
+ visible: OutputDevice != null;
-Component
-{
- Rectangle
- {
- id: base
- property var lineColor: "#DCDCDC" // TODO: Should be linked to theme.
- property var shadowRadius: 5 * screenScaleFactor
- property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme.
- visible: OutputDevice != null
- anchors.fill: parent
- color: "white"
-
- UM.I18nCatalog
- {
- id: catalog
- name: "cura"
+ UM.I18nCatalog {
+ id: catalog;
+ name: "cura";
}
- Label
- {
- id: printingLabel
- font: UM.Theme.getFont("large")
- anchors
- {
- margins: 2 * UM.Theme.getSize("default_margin").width
- leftMargin: 4 * UM.Theme.getSize("default_margin").width
- top: parent.top
- left: parent.left
- right: parent.right
+ Label {
+ id: printingLabel;
+ anchors {
+ left: parent.left;
+ leftMargin: 4 * UM.Theme.getSize("default_margin").width;
+ margins: 2 * UM.Theme.getSize("default_margin").width;
+ right: parent.right;
+ top: parent.top;
}
-
- text: catalog.i18nc("@label", "Printing")
- elide: Text.ElideRight
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("large");
+ text: catalog.i18nc("@label", "Printing");
}
- Label
- {
- id: managePrintersLabel
- anchors.rightMargin: 4 * UM.Theme.getSize("default_margin").width
- anchors.right: printerScrollView.right
- anchors.bottom: printingLabel.bottom
- text: catalog.i18nc("@label link to connect manager", "Manage printers")
- font: UM.Theme.getFont("default")
- color: UM.Theme.getColor("primary")
- linkColor: UM.Theme.getColor("primary")
+ Label {
+ id: managePrintersLabel;
+ anchors {
+ bottom: printingLabel.bottom;
+ right: printerScrollView.right;
+ rightMargin: 4 * UM.Theme.getSize("default_margin").width;
+ }
+ color: UM.Theme.getColor("primary");
+ font: UM.Theme.getFont("default");
+ linkColor: UM.Theme.getColor("primary");
+ text: catalog.i18nc("@label link to connect manager", "Manage printers");
}
- MouseArea
- {
- anchors.fill: managePrintersLabel
- hoverEnabled: true
- onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel()
- onEntered: managePrintersLabel.font.underline = true
- onExited: managePrintersLabel.font.underline = false
+ MouseArea {
+ anchors.fill: managePrintersLabel;
+ hoverEnabled: true;
+ onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel();
+ onEntered: managePrintersLabel.font.underline = true;
+ onExited: managePrintersLabel.font.underline = false;
}
// Skeleton loading
- Column
- {
- id: skeletonLoader
+ Column {
+ id: skeletonLoader;
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("wide_margin").width;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("wide_margin").width;
+ top: printingLabel.bottom;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ }
+ spacing: UM.Theme.getSize("default_margin").height - 10;
visible: printerList.count === 0;
- anchors
- {
- top: printingLabel.bottom
- topMargin: UM.Theme.getSize("default_margin").height
- left: parent.left
- leftMargin: UM.Theme.getSize("wide_margin").width
- right: parent.right
- rightMargin: UM.Theme.getSize("wide_margin").width
- }
- spacing: UM.Theme.getSize("default_margin").height - 10
- PrinterCard
- {
- printer: null
+ PrinterCard {
+ printer: null;
}
- PrinterCard
- {
- printer: null
+ PrinterCard {
+ printer: null;
}
}
// Actual content
- ScrollView
- {
- id: printerScrollView
- anchors
- {
- top: printingLabel.bottom
- topMargin: UM.Theme.getSize("default_margin").height
- left: parent.left
- right: parent.right
+ ScrollView {
+ id: printerScrollView;
+ anchors {
bottom: parent.bottom;
+ left: parent.left;
+ right: parent.right;
+ top: printingLabel.bottom;
+ topMargin: UM.Theme.getSize("default_margin").height;
}
+ style: UM.Theme.styles.scrollview;
- style: UM.Theme.styles.scrollview
-
- ListView
- {
- id: printerList
- property var currentIndex: -1
- anchors
- {
- fill: parent
- leftMargin: UM.Theme.getSize("wide_margin").width
- rightMargin: UM.Theme.getSize("wide_margin").width
+ ListView {
+ id: printerList;
+ property var currentIndex: -1;
+ anchors {
+ fill: parent;
+ leftMargin: UM.Theme.getSize("wide_margin").width;
+ rightMargin: UM.Theme.getSize("wide_margin").width;
}
- spacing: UM.Theme.getSize("default_margin").height - 10
- model: OutputDevice.printers
- delegate: PrinterCard
- {
- printer: modelData
+ delegate: PrinterCard {
+ printer: modelData;
}
+ model: OutputDevice.printers;
+ spacing: UM.Theme.getSize("default_margin").height - 10;
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
index 06b8e9f2be..778a6da2eb 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
@@ -4,141 +4,129 @@
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
-
import UM 1.3 as UM
import Cura 1.0 as Cura
-Component
-{
- Rectangle
- {
- id: monitorFrame
- width: maximumWidth
- height: maximumHeight
- color: UM.Theme.getColor("viewport_background")
- property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight")
- property var lineColor: "#DCDCDC" // TODO: Should be linked to theme.
- property var cornerRadius: 4 * screenScaleFactor // TODO: Should be linked to theme.
-
- UM.I18nCatalog
- {
- id: catalog
- name: "cura"
- }
-
- Label
- {
- id: manageQueueLabel
- anchors.rightMargin: 3 * UM.Theme.getSize("default_margin").width
- anchors.right: queuedPrintJobs.right
- anchors.bottom: queuedLabel.bottom
- text: catalog.i18nc("@label link to connect manager", "Manage queue")
- font: UM.Theme.getFont("default")
- color: UM.Theme.getColor("primary")
- linkColor: UM.Theme.getColor("primary")
- }
-
- MouseArea
- {
- anchors.fill: manageQueueLabel
- hoverEnabled: true
- onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel()
- onEntered: manageQueueLabel.font.underline = true
- onExited: manageQueueLabel.font.underline = false
- }
-
- Label
- {
- id: queuedLabel
- anchors.left: queuedPrintJobs.left
- anchors.top: parent.top
- anchors.topMargin: 2 * UM.Theme.getSize("default_margin").height
- anchors.leftMargin: 3 * UM.Theme.getSize("default_margin").width + 5
- text: catalog.i18nc("@label", "Queued")
- font: UM.Theme.getFont("large")
- color: UM.Theme.getColor("text")
- }
-
- Column
- {
- id: skeletonLoader
- visible: printJobList.count === 0;
- width: Math.min(800 * screenScaleFactor, maximumWidth)
- anchors
- {
- top: queuedLabel.bottom
- topMargin: UM.Theme.getSize("default_margin").height
- horizontalCenter: parent.horizontalCenter
- bottomMargin: UM.Theme.getSize("default_margin").height
- bottom: parent.bottom
- }
- PrintJobInfoBlock
- {
- printJob: null // Use as skeleton
- anchors
- {
- left: parent.left
- right: parent.right
- rightMargin: UM.Theme.getSize("default_margin").width
- leftMargin: UM.Theme.getSize("default_margin").width
- }
- }
- PrintJobInfoBlock
- {
- printJob: null // Use as skeleton
- anchors
- {
- left: parent.left
- right: parent.right
- rightMargin: UM.Theme.getSize("default_margin").width
- leftMargin: UM.Theme.getSize("default_margin").width
- }
+Component {
+ Rectangle {
+ id: monitorFrame;
+ property var emphasisColor: UM.Theme.getColor("setting_control_border_highlight");
+ property var lineColor: "#DCDCDC"; // TODO: Should be linked to theme.
+ property var cornerRadius: 4 * screenScaleFactor; // TODO: Should be linked to theme.
+ color: UM.Theme.getColor("viewport_background");
+ height: maximumHeight;
+ onVisibleChanged: {
+ if (monitorFrame != null && !monitorFrame.visible) {
+ OutputDevice.setActiveCamera(null);
}
}
+ width: maximumWidth;
- ScrollView
- {
- id: queuedPrintJobs
+ UM.I18nCatalog {
+ id: catalog;
+ name: "cura";
+ }
+
+ Label {
+ id: manageQueueLabel;
anchors {
- top: queuedLabel.bottom
- topMargin: UM.Theme.getSize("default_margin").height
- horizontalCenter: parent.horizontalCenter
- bottomMargin: UM.Theme.getSize("default_margin").height
- bottom: parent.bottom
+ bottom: queuedLabel.bottom;
+ right: queuedPrintJobs.right;
+ rightMargin: 3 * UM.Theme.getSize("default_margin").width;
}
- style: UM.Theme.styles.scrollview
- width: Math.min(800 * screenScaleFactor, maximumWidth)
+ color: UM.Theme.getColor("primary");
+ font: UM.Theme.getFont("default");
+ linkColor: UM.Theme.getColor("primary");
+ text: catalog.i18nc("@label link to connect manager", "Manage queue");
+ }
- ListView
- {
- id: printJobList;
- anchors.fill: parent
- spacing: UM.Theme.getSize("default_margin").height - 10 // 2x the shadow radius
- model: OutputDevice.queuedPrintJobs
- delegate: PrintJobInfoBlock
- {
- printJob: modelData
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.rightMargin: UM.Theme.getSize("default_margin").width
- anchors.leftMargin: UM.Theme.getSize("default_margin").width
+ MouseArea {
+ anchors.fill: manageQueueLabel;
+ hoverEnabled: true;
+ onClicked: Cura.MachineManager.printerOutputDevices[0].openPrintJobControlPanel();
+ onEntered: manageQueueLabel.font.underline = true;
+ onExited: manageQueueLabel.font.underline = false;
+ }
+
+ Label {
+ id: queuedLabel;
+ anchors {
+ left: queuedPrintJobs.left;
+ leftMargin: 3 * UM.Theme.getSize("default_margin").width + 5;
+ top: parent.top;
+ topMargin: 2 * UM.Theme.getSize("default_margin").height;
+ }
+ color: UM.Theme.getColor("text");
+ font: UM.Theme.getFont("large");
+ text: catalog.i18nc("@label", "Queued");
+ }
+
+ Column {
+ id: skeletonLoader;
+ anchors {
+ bottom: parent.bottom;
+ bottomMargin: UM.Theme.getSize("default_margin").height;
+ horizontalCenter: parent.horizontalCenter;
+ top: queuedLabel.bottom;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ }
+ visible: printJobList.count === 0;
+ width: Math.min(800 * screenScaleFactor, maximumWidth);
+
+ PrintJobInfoBlock {
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
}
+ printJob: null; // Use as skeleton
+ }
+
+ PrintJobInfoBlock {
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ }
+ printJob: null; // Use as skeleton
}
}
- PrinterVideoStream
- {
- visible: OutputDevice.activeCamera != null
- anchors.fill: parent
- camera: OutputDevice.activeCamera
+ ScrollView {
+ id: queuedPrintJobs;
+ anchors {
+ top: queuedLabel.bottom;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ horizontalCenter: parent.horizontalCenter;
+ bottomMargin: UM.Theme.getSize("default_margin").height;
+ bottom: parent.bottom;
+ }
+ style: UM.Theme.styles.scrollview;
+ width: Math.min(800 * screenScaleFactor, maximumWidth);
+
+ ListView {
+ id: printJobList;
+ anchors.fill: parent;
+ delegate: PrintJobInfoBlock; {
+ anchors {
+ left: parent.left;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ right: parent.right;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ }
+ printJob: modelData;
+ }
+ model: OutputDevice.queuedPrintJobs;
+ spacing: UM.Theme.getSize("default_margin").height - 10; // 2x the shadow radius
+ }
}
- onVisibleChanged:
- {
- if (monitorFrame != null && !monitorFrame.visible)
- {
- OutputDevice.setActiveCamera(null)
- }
+ PrinterVideoStream {
+ anchors.fill: parent;
+ camera: OutputDevice.activeCamera;
+ visible: OutputDevice.activeCamera != null;
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
index f4eda3f75c..250449a763 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
@@ -10,7 +10,7 @@ import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.1
import UM 1.3 as UM
-Rectangle {
+Item {
id: root;
property var job: null;
property var materialsAreKnown: {
@@ -24,7 +24,6 @@ Rectangle {
}
return true;
}
- color: "pink";
width: parent.width;
height: childrenRect.height;
@@ -34,6 +33,11 @@ Rectangle {
// Config change toggle
Rectangle {
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ top: parent.top;
+ }
color: {
if(configurationChangeToggle.containsMouse) {
return UM.Theme.getColor("viewport_background"); // TODO: Theme!
@@ -41,32 +45,29 @@ Rectangle {
return "transparent";
}
}
- width: parent.width;
height: UM.Theme.getSize("default_margin").height * 4; // TODO: Theme!
- anchors {
- left: parent.left;
- right: parent.right;
- top: parent.top;
- }
+ width: parent.width;
Rectangle {
- width: parent.width;
- height: UM.Theme.getSize("default_lining").height;
color: "#e6e6e6"; // TODO: Theme!
+ height: UM.Theme.getSize("default_lining").height;
+ width: parent.width;
}
UM.RecolorImage {
- width: 23; // TODO: Theme!
- height: 23; // TODO: Theme!
anchors {
right: configChangeToggleLabel.left;
rightMargin: UM.Theme.getSize("default_margin").width;
verticalCenter: parent.verticalCenter;
}
- sourceSize.width: width;
- sourceSize.height: height;
- source: "../svg/warning-icon.svg";
color: UM.Theme.getColor("text");
+ height: 23 * screenScaleFactor; // TODO: Theme!
+ source: "../svg/warning-icon.svg";
+ sourceSize {
+ width: width;
+ height: height;
+ }
+ width: 23 * screenScaleFactor; // TODO: Theme!
}
Label {
@@ -79,15 +80,13 @@ Rectangle {
}
UM.RecolorImage {
- width: 15; // TODO: Theme!
- height: 15; // TODO: Theme!
anchors {
left: configChangeToggleLabel.right;
leftMargin: UM.Theme.getSize("default_margin").width;
verticalCenter: parent.verticalCenter;
}
- sourceSize.width: width;
- sourceSize.height: height;
+ color: UM.Theme.getColor("text");
+ height: 15 * screenScaleFactor; // TODO: Theme!
source: {
if (configChangeDetails.visible) {
return UM.Theme.getIcon("arrow_top");
@@ -95,7 +94,11 @@ Rectangle {
return UM.Theme.getIcon("arrow_bottom");
}
}
- color: UM.Theme.getColor("text");
+ sourceSize {
+ width: width;
+ height: height;
+ }
+ width: 15 * screenScaleFactor; // TODO: Theme!
}
MouseArea {
@@ -111,26 +114,25 @@ Rectangle {
// Config change details
Rectangle {
id: configChangeDetails
- color: "transparent";
- width: parent.width;
- visible: false;
- height: visible ? UM.Theme.getSize("monitor_tab_config_override_box").height : 0;
Behavior on height { NumberAnimation { duration: 100 } }
+ color: "transparent";
+ height: visible ? UM.Theme.getSize("monitor_tab_config_override_box").height : 0;
+ visible: false;
+ width: parent.width;
Rectangle {
- color: "transparent";
- clip: true;
anchors {
- fill: parent;
- topMargin: UM.Theme.getSize("wide_margin").height;
bottomMargin: UM.Theme.getSize("wide_margin").height;
+ fill: parent;
leftMargin: UM.Theme.getSize("wide_margin").height * 4;
rightMargin: UM.Theme.getSize("wide_margin").height * 4;
+ topMargin: UM.Theme.getSize("wide_margin").height;
}
+ color: "transparent";
+ clip: true;
Label {
anchors.fill: parent;
- wrapMode: Text.WordWrap;
elide: Text.ElideRight;
font: UM.Theme.getFont("large_nonbold");
text: {
@@ -167,6 +169,7 @@ Rectangle {
}
return result;
}
+ wrapMode: Text.WordWrap;
}
Button {
@@ -174,6 +177,10 @@ Rectangle {
bottom: parent.bottom;
left: parent.left;
}
+ onClicked: {
+ overrideConfirmationDialog.visible = true;
+ }
+ text: catalog.i18nc("@label", "Override");
visible: {
var length = root.job.configurationChanges.length;
for (var i = 0; i < length; i++) {
@@ -184,10 +191,6 @@ Rectangle {
}
return true;
}
- text: catalog.i18nc("@label", "Override");
- onClicked: {
- overrideConfirmationDialog.visible = true;
- }
}
}
}
@@ -195,16 +198,16 @@ Rectangle {
MessageDialog {
id: overrideConfirmationDialog;
- title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
+ Component.onCompleted: visible = false;
icon: StandardIcon.Warning;
+ onYes: OutputDevice.forceSendJob(root.job.key);
+ standardButtons: StandardButton.Yes | StandardButton.No;
text: {
var printJobName = formatPrintJobName(root.job.name);
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
return confirmText;
}
- standardButtons: StandardButton.Yes | StandardButton.No;
- Component.onCompleted: visible = false;
- onYes: OutputDevice.forceSendJob(root.job.key);
+ title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
}
// Utils
diff --git a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml
index 091b1fc1fa..4b863ff9ed 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/MonitorItem.qml
@@ -2,56 +2,45 @@
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
-
-
import UM 1.3 as UM
import Cura 1.0 as Cura
-Component
-{
- Item
- {
- width: maximumWidth
- height: maximumHeight
- Image
- {
- id: cameraImage
- width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth)
- height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width)
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- z: 1
- Component.onCompleted:
- {
- if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null)
- {
- OutputDevice.activePrinter.camera.start()
+Component {
+ Item {
+ height: maximumHeight;
+ width: maximumWidth;
+
+ Image {
+ id: cameraImage;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
+ Component.onCompleted: {
+ if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) {
+ OutputDevice.activePrinter.camera.start();
}
}
- onVisibleChanged:
- {
- if(visible)
- {
- if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null)
- {
- OutputDevice.activePrinter.camera.start()
+ height: Math.floor((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width);
+ onVisibleChanged: {
+ if (visible) {
+ if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) {
+ OutputDevice.activePrinter.camera.start();
}
- } else
- {
- if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null)
- {
- OutputDevice.activePrinter.camera.stop()
+ } else {
+ if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null) {
+ OutputDevice.activePrinter.camera.stop();
}
}
}
- source:
- {
- if(OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage)
- {
+ source: {
+ if (OutputDevice.activePrinter != null && OutputDevice.activePrinter.camera != null && OutputDevice.activePrinter.camera.latestImage) {
return OutputDevice.activePrinter.camera.latestImage;
}
return "";
}
+ width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth);
+ z: 1;
}
}
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
index 151ae7ab36..bede597287 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
@@ -7,34 +7,29 @@ import QtQuick.Controls.Styles 1.4
import UM 1.2 as UM
Item {
- id: extruderInfo
-
+ id: extruderInfo;
property var printCoreConfiguration: null;
-
- width: Math.round(parent.width / 2);
height: childrenRect.height;
+ width: Math.round(parent.width / 2);
// Extruder circle
Item {
- id: extruderCircle
-
- width: UM.Theme.getSize("monitor_tab_extruder_circle").width;
- height: UM.Theme.getSize("monitor_tab_extruder_circle").height;
+ id: extruderCircle;
anchors.verticalCenter: parent.verticalCenter;
+ height: UM.Theme.getSize("monitor_tab_extruder_circle").height;
+ width: UM.Theme.getSize("monitor_tab_extruder_circle").width;
// Loading skeleton
Rectangle {
- visible: !printCoreConfiguration;
anchors.fill: parent;
- radius: Math.round(width / 2);
color: UM.Theme.getColor("viewport_background");
+ radius: Math.round(width / 2);
+ visible: !printCoreConfiguration;
}
// Actual content
Rectangle {
- visible: printCoreConfiguration;
anchors.fill: parent;
- radius: Math.round(width / 2);
border.width: UM.Theme.getSize("monitor_tab_thick_lining").width;
border.color: UM.Theme.getColor("monitor_tab_lining_active");
opacity: {
@@ -43,6 +38,8 @@ Item {
}
return 1;
}
+ radius: Math.round(width / 2);
+ visible: printCoreConfiguration;
Label {
anchors.centerIn: parent;
@@ -55,68 +52,66 @@ Item {
// Print core and material labels
Item {
id: materialLabel
-
anchors {
left: extruderCircle.right;
leftMargin: UM.Theme.getSize("default_margin").width;
- top: parent.top;
right: parent.right;
+ top: parent.top;
}
height: UM.Theme.getSize("monitor_tab_text_line").height;
// Loading skeleton
Rectangle {
- visible: !extruderInfo.printCoreConfiguration;
anchors.fill: parent;
color: UM.Theme.getColor("viewport_background");
+ visible: !extruderInfo.printCoreConfiguration;
}
// Actual content
Label {
- visible: extruderInfo.printCoreConfiguration;
anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
text: {
if (printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) {
return printCoreConfiguration.activeMaterial.name;
}
return "";
}
- font: UM.Theme.getFont("default");
- elide: Text.ElideRight;
+ visible: extruderInfo.printCoreConfiguration;
}
}
Item {
id: printCoreLabel;
-
anchors {
- right: parent.right;
+ bottom: parent.bottom;
left: extruderCircle.right;
leftMargin: UM.Theme.getSize("default_margin").width;
- bottom: parent.bottom;
+ right: parent.right;
}
height: UM.Theme.getSize("monitor_tab_text_line").height;
// Loading skeleton
Rectangle {
+ color: UM.Theme.getColor("viewport_background");
+ height: parent.height;
visible: !extruderInfo.printCoreConfiguration;
width: parent.width / 3;
- height: parent.height;
- color: UM.Theme.getColor("viewport_background");
}
// Actual content
Label {
- visible: extruderInfo.printCoreConfiguration;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
+ opacity: 0.6;
text: {
if (printCoreConfiguration != undefined && printCoreConfiguration.hotendID != undefined) {
return printCoreConfiguration.hotendID;
}
return "";
}
- elide: Text.ElideRight;
- opacity: 0.6;
- font: UM.Theme.getFont("default");
+ visible: extruderInfo.printCoreConfiguration;
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index 0c185386b2..dc613ff9ef 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -2,17 +2,13 @@
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
-import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
import QtGraphicalEffects 1.0
-import QtQuick.Layouts 1.1
-import QtQuick.Dialogs 1.1
import UM 1.3 as UM
Item {
id: root;
-
property var printJob: null;
property var running: isRunning(printJob);
@@ -55,16 +51,20 @@ Item {
}
Item {
- id: pointedRectangle
- width: parent.width - 10 * screenScaleFactor; // Because of the shadow
+ id: pointedRectangle;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ verticalCenter: parent.verticalCenter;
+ }
height: parent.height - 10 * screenScaleFactor; // Because of the shadow
- anchors.horizontalCenter: parent.horizontalCenter;
- anchors.verticalCenter: parent.verticalCenter;
+ width: parent.width - 10 * screenScaleFactor; // Because of the shadow
Rectangle {
- id: point
- anchors.right: bloop.right;
- anchors.rightMargin: 24;
+ id: point;
+ anchors {
+ right: bloop.right;
+ rightMargin: 24;
+ }
color: UM.Theme.getColor("setting_control");
height: 14 * screenScaleFactor;
transform: Rotation {
@@ -75,7 +75,7 @@ Item {
}
Rectangle {
- id: bloop
+ id: bloop;
anchors {
bottom: parent.bottom;
bottomMargin: 8 * screenScaleFactor; // Because of the shadow
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 4ffcb8342e..335ee2ba47 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -11,13 +11,11 @@ import QtQuick.Dialogs 1.1
import UM 1.3 as UM
Item {
- id: root
-
- property var shadowRadius: 5;
- property var shadowOffset: 2;
+ id: root;
+ property var shadowRadius: 5 * screenScaleFactor;
+ property var shadowOffset: 2 * screenScaleFactor;
property var debug: false;
property var printJob: null;
-
width: parent.width; // Bubbles downward
height: childrenRect.height + shadowRadius * 2; // Bubbles upward
@@ -28,87 +26,84 @@ Item {
// The actual card (white block)
Rectangle {
- color: "white"; // TODO: Theme!
- height: childrenRect.height;
- width: parent.width - shadowRadius * 2;
-
// 5px margin, but shifted 2px vertically because of the shadow
anchors {
- topMargin: root.shadowRadius - root.shadowOffset;
bottomMargin: root.shadowRadius + root.shadowOffset;
leftMargin: root.shadowRadius;
rightMargin: root.shadowRadius;
+ topMargin: root.shadowRadius - root.shadowOffset;
}
+ color: "white"; // TODO: Theme!
+ height: childrenRect.height;
layer.enabled: true
layer.effect: DropShadow {
radius: root.shadowRadius
verticalOffset: 2 * screenScaleFactor
color: "#3F000000" // 25% shadow
}
+ width: parent.width - shadowRadius * 2;
Column {
- width: parent.width;
height: childrenRect.height;
+ width: parent.width;
// Main content
Item {
id: mainContent;
+ height: 200 * screenScaleFactor; // TODO: Theme!
width: parent.width;
- height: 200; // TODO: Theme!
// Left content
Item {
anchors {
+ bottom: parent.bottom;
left: parent.left;
+ margins: UM.Theme.getSize("wide_margin").width;
right: parent.horizontalCenter;
top: parent.top;
- bottom: parent.bottom;
- margins: UM.Theme.getSize("wide_margin").width
}
Item {
id: printJobName;
-
width: parent.width;
height: UM.Theme.getSize("monitor_tab_text_line").height;
Rectangle {
- visible: !printJob;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
height: parent.height;
+ visible: !printJob;
width: parent.width / 3;
}
Label {
- visible: printJob;
- text: printJob ? printJob.name : ""; // Supress QML warnings
- font: UM.Theme.getFont("default_bold");
- elide: Text.ElideRight;
anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default_bold");
+ text: printJob ? printJob.name : ""; // Supress QML warnings
+ visible: printJob;
}
}
Item {
id: printJobOwnerName;
-
- width: parent.width;
- height: UM.Theme.getSize("monitor_tab_text_line").height;
anchors {
top: printJobName.bottom;
topMargin: Math.floor(UM.Theme.getSize("default_margin").height / 2);
}
+ height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width;
Rectangle {
- visible: !printJob;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
height: parent.height;
+ visible: !printJob;
width: parent.width / 2;
}
Label {
- visible: printJob;
- text: printJob ? printJob.owner : ""; // Supress QML warnings
- font: UM.Theme.getFont("default");
- elide: Text.ElideRight;
anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
+ text: printJob ? printJob.owner : ""; // Supress QML warnings
+ visible: printJob;
}
}
@@ -116,90 +111,96 @@ Item {
id: printJobPreview;
property var useUltibot: false;
anchors {
- top: printJobOwnerName.bottom;
- horizontalCenter: parent.horizontalCenter;
- topMargin: UM.Theme.getSize("default_margin").height;
bottom: parent.bottom;
+ horizontalCenter: parent.horizontalCenter;
+ top: printJobOwnerName.bottom;
+ topMargin: UM.Theme.getSize("default_margin").height;
}
width: height;
// Skeleton
Rectangle {
- visible: !printJob;
anchors.fill: parent;
- radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
+ visible: !printJob;
}
// Actual content
Image {
id: previewImage;
- visible: printJob;
- source: printJob ? printJob.previewImageUrl : "";
- opacity: printJob && printJob.state == "error" ? 0.5 : 1.0;
anchors.fill: parent;
+ opacity: printJob && printJob.state == "error" ? 0.5 : 1.0;
+ source: printJob ? printJob.previewImageUrl : "";
+ visible: printJob;
}
UM.RecolorImage {
id: ultiBotImage;
+
anchors.centerIn: printJobPreview;
+ color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
+ height: printJobPreview.height;
source: "../svg/ultibot.svg";
+ sourceSize {
+ height: height;
+ width: width;
+ }
/* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
not in order to determine if we show the placeholder (ultibot) image instead. */
visible: printJob && previewImage.status == Image.Error;
width: printJobPreview.width;
- height: printJobPreview.height;
- sourceSize.width: width;
- sourceSize.height: height;
- color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
}
UM.RecolorImage {
id: statusImage;
anchors.centerIn: printJobPreview;
+ color: "black";
+ height: 0.5 * printJobPreview.height;
source: printJob && printJob.state == "error" ? "../svg/aborted-icon.svg" : "";
+ sourceSize {
+ height: height;
+ width: width;
+ }
visible: source != "";
width: 0.5 * printJobPreview.width;
- height: 0.5 * printJobPreview.height;
- sourceSize.width: width;
- sourceSize.height: height;
- color: "black";
}
}
}
// Divider
Rectangle {
- height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
- width: UM.Theme.getSize("default_lining").width;
- color: !printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
anchors {
horizontalCenter: parent.horizontalCenter;
verticalCenter: parent.verticalCenter;
}
+ color: !printJob ? UM.Theme.getColor("viewport_background") : "#e6e6e6"; // TODO: Theme!
+ height: parent.height - 2 * UM.Theme.getSize("default_margin").height;
+ width: UM.Theme.getSize("default_lining").width;
}
// Right content
Item {
anchors {
+ bottom: parent.bottom;
left: parent.horizontalCenter;
+ margins: UM.Theme.getSize("wide_margin").width;
right: parent.right;
top: parent.top;
- bottom: parent.bottom;
- margins: UM.Theme.getSize("wide_margin").width;
}
Item {
id: targetPrinterLabel;
- width: parent.width;
height: UM.Theme.getSize("monitor_tab_text_line").height;
+ width: parent.width;
+
Rectangle {
visible: !printJob;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
anchors.fill: parent;
}
+
Label {
- visible: printJob;
elide: Text.ElideRight;
font: UM.Theme.getFont("default_bold");
text: {
@@ -215,13 +216,14 @@ Item {
}
return "";
}
+ visible: printJob;
}
}
PrinterInfoBlock {
+ anchors.bottom: parent.bottom;
printer: root.printJob.assignedPrinter;
printJob: root.printJob;
- anchors.bottom: parent.bottom;
}
}
@@ -240,15 +242,15 @@ Item {
Item {
id: configChangesBox;
- width: parent.width;
height: childrenRect.height;
visible: printJob && printJob.configurationChanges.length !== 0;
+ width: parent.width;
// Config change toggle
Rectangle {
id: configChangeToggle;
color: {
- if(configChangeToggleArea.containsMouse) {
+ if (configChangeToggleArea.containsMouse) {
return UM.Theme.getColor("viewport_background"); // TODO: Theme!
} else {
return "transparent";
@@ -263,23 +265,25 @@ Item {
}
Rectangle {
- width: parent.width;
- height: UM.Theme.getSize("default_lining").height;
color: "#e6e6e6"; // TODO: Theme!
+ height: UM.Theme.getSize("default_lining").height;
+ width: parent.width;
}
UM.RecolorImage {
- width: 23; // TODO: Theme!
- height: 23; // TODO: Theme!
anchors {
right: configChangeToggleLabel.left;
rightMargin: UM.Theme.getSize("default_margin").width;
verticalCenter: parent.verticalCenter;
}
- sourceSize.width: width;
- sourceSize.height: height;
- source: "../svg/warning-icon.svg";
color: UM.Theme.getColor("text");
+ height: 23 * screenScaleFactor; // TODO: Theme!
+ source: "../svg/warning-icon.svg";
+ sourceSize {
+ height: height;
+ width: width;
+ }
+ width: 23 * screenScaleFactor; // TODO: Theme!
}
Label {
@@ -292,15 +296,13 @@ Item {
}
UM.RecolorImage {
- width: 15; // TODO: Theme!
- height: 15; // TODO: Theme!
anchors {
left: configChangeToggleLabel.right;
leftMargin: UM.Theme.getSize("default_margin").width;
verticalCenter: parent.verticalCenter;
}
- sourceSize.width: width;
- sourceSize.height: height;
+ color: UM.Theme.getColor("text");
+ height: 15 * screenScaleFactor; // TODO: Theme!
source: {
if (configChangeDetails.visible) {
return UM.Theme.getIcon("arrow_top");
@@ -308,7 +310,11 @@ Item {
return UM.Theme.getIcon("arrow_bottom");
}
}
- color: UM.Theme.getColor("text");
+ sourceSize {
+ width: width;
+ height: height;
+ }
+ width: 15 * screenScaleFactor; // TODO: Theme!
}
MouseArea {
@@ -324,26 +330,25 @@ Item {
// Config change details
Item {
id: configChangeDetails;
- width: parent.width;
- visible: false;
+ anchors.top: configChangeToggle.bottom;
+ Behavior on height { NumberAnimation { duration: 100 } }
// In case of really massive multi-line configuration changes
height: visible ? Math.max(UM.Theme.getSize("monitor_tab_config_override_box").height, childrenRect.height) : 0;
- Behavior on height { NumberAnimation { duration: 100 } }
- anchors.top: configChangeToggle.bottom;
+ visible: false;
+ width: parent.width;
Item {
- clip: true;
anchors {
- fill: parent;
- topMargin: UM.Theme.getSize("wide_margin").height;
bottomMargin: UM.Theme.getSize("wide_margin").height;
+ fill: parent;
leftMargin: UM.Theme.getSize("wide_margin").height * 4;
rightMargin: UM.Theme.getSize("wide_margin").height * 4;
+ topMargin: UM.Theme.getSize("wide_margin").height;
}
+ clip: true;
Label {
anchors.fill: parent;
- wrapMode: Text.WordWrap;
elide: Text.ElideRight;
font: UM.Theme.getFont("large_nonbold");
text: {
@@ -380,6 +385,7 @@ Item {
}
return result;
}
+ wrapMode: Text.WordWrap;
}
Button {
@@ -387,6 +393,10 @@ Item {
bottom: parent.bottom;
left: parent.left;
}
+ onClicked: {
+ overrideConfirmationDialog.visible = true;
+ }
+ text: catalog.i18nc("@label", "Override");
visible: {
var length = printJob.configurationChanges.length;
for (var i = 0; i < length; i++) {
@@ -397,26 +407,22 @@ Item {
}
return true;
}
- text: catalog.i18nc("@label", "Override");
- onClicked: {
- overrideConfirmationDialog.visible = true;
- }
}
}
}
MessageDialog {
id: overrideConfirmationDialog;
- title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
+ Component.onCompleted: visible = false;
icon: StandardIcon.Warning;
+ onYes: OutputDevice.forceSendJob(printJob.key);
+ standardButtons: StandardButton.Yes | StandardButton.No;
text: {
var printJobName = formatPrintJobName(printJob.name);
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
return confirmText;
}
- standardButtons: StandardButton.Yes | StandardButton.No;
- Component.onCompleted: visible = false;
- onYes: OutputDevice.forceSendJob(printJob.key);
+ title: catalog.i18nc("@window:title", "Override configuration configuration and start print");
}
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
index 2bec0906a8..8d80377e99 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobPreview.qml
@@ -14,15 +14,15 @@ import UM 1.3 as UM
Item {
property var job: null;
property var useUltibot: false;
- height: 100;
+ height: 100 * screenScaleFactor;
width: height;
// Skeleton
Rectangle {
- visible: !job;
anchors.fill: parent;
- radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
+ radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
+ visible: !job;
}
// Actual content
@@ -46,26 +46,30 @@ Item {
UM.RecolorImage {
id: ultibotImage;
anchors.centerIn: parent;
+ color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
+ height: parent.height;
source: "../svg/ultibot.svg";
+ sourceSize {
+ height: height;
+ width: width;
+ }
/* Since print jobs ALWAYS have an image url, we have to check if that image URL errors or
not in order to determine if we show the placeholder (ultibot) image instead. */
visible: job && previewImage.status == Image.Error;
width: parent.width;
- height: parent.height;
- sourceSize.width: width;
- sourceSize.height: height;
- color: UM.Theme.getColor("monitor_tab_placeholder_image"); // TODO: Theme!
}
UM.RecolorImage {
id: statusImage;
anchors.centerIn: parent;
+ color: "black"; // TODO: Theme!
+ height: 0.5 * parent.height;
source: job && job.state == "error" ? "../svg/aborted-icon.svg" : "";
+ sourceSize {
+ height: height;
+ width: width;
+ }
visible: source != "";
width: 0.5 * parent.width;
- height: 0.5 * parent.height;
- sourceSize.width: width;
- sourceSize.height: height;
- color: "black";
}
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
index 604b5ce862..9dc7dff62e 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
@@ -17,17 +17,18 @@ Column {
width: parent.width;
Rectangle {
- visible: !job;
color: UM.Theme.getColor("viewport_background"); // TODO: Use explicit theme color
height: parent.height;
+ visible: !job;
width: parent.width / 3;
}
+
Label {
- visible: job;
- text: job ? job.name : "";
- font: UM.Theme.getFont("default_bold");
- elide: Text.ElideRight;
anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default_bold");
+ text: job ? job.name : "";
+ visible: job;
}
}
@@ -37,17 +38,18 @@ Column {
width: parent.width;
Rectangle {
- visible: !job;
color: UM.Theme.getColor("viewport_background"); // TODO: Use explicit theme color
height: parent.height;
+ visible: !job;
width: parent.width / 2;
}
+
Label {
- visible: job;
- text: job ? job.owner : "";
- font: UM.Theme.getFont("default");
- elide: Text.ElideRight;
anchors.fill: parent;
+ elide: Text.ElideRight;
+ font: UM.Theme.getFont("default");
+ text: job ? job.owner : "";
+ visible: job;
}
}
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml
index 9793b218fc..a28167d260 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintWindow.qml
@@ -4,112 +4,101 @@
import QtQuick 2.2
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
-
import UM 1.1 as UM
-UM.Dialog
-{
+UM.Dialog {
id: base;
-
- minimumWidth: 500 * screenScaleFactor
- minimumHeight: 140 * screenScaleFactor
- maximumWidth: minimumWidth
- maximumHeight: minimumHeight
- width: minimumWidth
- height: minimumHeight
-
- visible: true
- modality: Qt.ApplicationModal
- onVisibleChanged:
- {
- if(visible)
- {
- resetPrintersModel()
- }
- else
- {
- OutputDevice.cancelPrintSelection()
- }
+ property var printersModel: {
+ return ListModel{};
}
- title: catalog.i18nc("@title:window", "Print over network")
-
- property var printersModel: ListModel{}
- function resetPrintersModel() {
- printersModel.clear()
- printersModel.append({ name: "Automatic", key: ""})
-
- for (var index in OutputDevice.printers)
- {
- printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key})
- }
- }
-
- Column
- {
- id: printerSelection
- anchors.fill: parent
- anchors.top: parent.top
- anchors.topMargin: UM.Theme.getSize("default_margin").height
- anchors.leftMargin: UM.Theme.getSize("default_margin").width
- anchors.rightMargin: UM.Theme.getSize("default_margin").width
- height: 50 * screenScaleFactor
- Label
- {
- id: manualPrinterSelectionLabel
- anchors
- {
- left: parent.left
- topMargin: UM.Theme.getSize("default_margin").height
- right: parent.right
- }
- text: catalog.i18nc("@label", "Printer selection")
- wrapMode: Text.Wrap
- height: 20 * screenScaleFactor
- }
-
- ComboBox
- {
- id: printerSelectionCombobox
- model: base.printersModel
- textRole: "name"
-
- width: parent.width
- height: 40 * screenScaleFactor
- Behavior on height { NumberAnimation { duration: 100 } }
- }
-
- SystemPalette
- {
- id: palette
- }
-
- UM.I18nCatalog { id: catalog; name: "cura"; }
- }
-
+ height: minimumHeight;
leftButtons: [
- Button
- {
- text: catalog.i18nc("@action:button","Cancel")
- enabled: true
+ Button {
+ enabled: true;
onClicked: {
base.visible = false;
- printerSelectionCombobox.currentIndex = 0
- OutputDevice.cancelPrintSelection()
+ printerSelectionCombobox.currentIndex = 0;
+ OutputDevice.cancelPrintSelection();
}
+ text: catalog.i18nc("@action:button","Cancel");
}
]
-
+ maximumHeight: minimumHeight;
+ maximumWidth: minimumWidth;
+ minimumHeight: 140 * screenScaleFactor;
+ minimumWidth: 500 * screenScaleFactor;
+ modality: Qt.ApplicationModal;
+ onVisibleChanged: {
+ if (visible) {
+ resetPrintersModel();
+ } else {
+ OutputDevice.cancelPrintSelection();
+ }
+ }
rightButtons: [
- Button
- {
- text: catalog.i18nc("@action:button","Print")
- enabled: true
+ Button {
+ enabled: true;
onClicked: {
base.visible = false;
- OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key)
+ OutputDevice.selectPrinter(printerSelectionCombobox.model.get(printerSelectionCombobox.currentIndex).key);
// reset to defaults
- printerSelectionCombobox.currentIndex = 0
+ printerSelectionCombobox.currentIndex = 0;
}
+ text: catalog.i18nc("@action:button","Print");
}
]
+ title: catalog.i18nc("@title:window", "Print over network");
+ visible: true;
+ width: minimumWidth;
+
+ Column {
+ id: printerSelection;
+ anchors {
+ fill: parent;
+ leftMargin: UM.Theme.getSize("default_margin").width;
+ rightMargin: UM.Theme.getSize("default_margin").width;
+ top: parent.top;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ }
+ height: 50 * screenScaleFactor;
+
+ SystemPalette {
+ id: palette;
+ }
+
+ UM.I18nCatalog {
+ id: catalog;
+ name: "cura";
+ }
+
+ Label {
+ id: manualPrinterSelectionLabel;
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ topMargin: UM.Theme.getSize("default_margin").height;
+ }
+ height: 20 * screenScaleFactor;
+ text: catalog.i18nc("@label", "Printer selection");
+ wrapMode: Text.Wrap;
+ }
+
+ ComboBox {
+ id: printerSelectionCombobox;
+ Behavior on height { NumberAnimation { duration: 100 } }
+ height: 40 * screenScaleFactor;
+ model: base.printersModel;
+ textRole: "name";
+ width: parent.width;
+ }
+ }
+
+ // Utils
+ function resetPrintersModel() {
+ printersModel.clear();
+ printersModel.append({ name: "Automatic", key: ""});
+ for (var index in OutputDevice.printers) {
+ printersModel.append({name: OutputDevice.printers[index].name, key: OutputDevice.printers[index].key});
+ }
+ }
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index c13a4c4b93..ebfe160e06 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -6,17 +6,14 @@ import QtQuick.Dialogs 1.1
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.3
import QtGraphicalEffects 1.0
-import QtQuick.Controls 1.4 as LegacyControls
import UM 1.3 as UM
Item {
id: root;
-
property var shadowRadius: 5;
property var shadowOffset: 2;
property var printer: null;
property var collapsed: true;
-
height: childrenRect.height + shadowRadius * 2; // Bubbles upward
width: parent.width; // Bubbles downward
@@ -24,10 +21,10 @@ Item {
Rectangle {
// 5px margin, but shifted 2px vertically because of the shadow
anchors {
- topMargin: root.shadowRadius - root.shadowOffset;
bottomMargin: root.shadowRadius + root.shadowOffset;
leftMargin: root.shadowRadius;
rightMargin: root.shadowRadius;
+ topMargin: root.shadowRadius - root.shadowOffset;
}
color: {
if (printer.state == "disabled") {
@@ -46,8 +43,8 @@ Item {
width: parent.width - 2 * shadowRadius;
Column {
- width: parent.width;
height: childrenRect.height;
+ width: parent.width;
// Main card
Item {
@@ -65,15 +62,12 @@ Item {
margins: UM.Theme.getSize("default_margin").width;
top: parent.top;
}
- height: 58;
- width: 58;
+ height: 58 * screenScaleFactor;
+ width: 58 * screenScaleFactor;
// Skeleton
Rectangle {
- anchors {
- fill: parent;
- // margins: Math.round(UM.Theme.getSize("default_margin").width / 4);
- }
+ anchors.fill: parent;
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
radius: UM.Theme.getSize("default_margin").width; // TODO: Theme!
visible: !printer;
@@ -153,7 +147,6 @@ Item {
height: UM.Theme.getSize("monitor_tab_text_line").height;
width: parent.width * 0.75;
-
// Skeleton
Rectangle {
anchors.fill: parent;
@@ -192,12 +185,14 @@ Item {
verticalCenter: parent.verticalCenter;
}
color: UM.Theme.getColor("text");
- height: 15; // TODO: Theme!
+ height: 15 * screenScaleFactor; // TODO: Theme!
source: root.collapsed ? UM.Theme.getIcon("arrow_left") : UM.Theme.getIcon("arrow_bottom");
- sourceSize.height: height;
- sourceSize.width: width;
+ sourceSize {
+ height: height;
+ width: width;
+ }
visible: printer;
- width: 15; // TODO: Theme!
+ width: 15 * screenScaleFactor; // TODO: Theme!
}
MouseArea {
@@ -213,7 +208,7 @@ Item {
}
Connections {
- target: printerList
+ target: printerList;
onCurrentIndexChanged: {
if (!model) {
return;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
index 7cce0d5c0d..0971776cc6 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -10,17 +10,14 @@ import QtQuick.Controls 1.4 as LegacyControls
import UM 1.3 as UM
Item {
-
property var printer: null;
property var printJob: printer ? printer.activePrintJob : null;
property var collapsed: true;
-
Behavior on height { NumberAnimation { duration: 100 } }
Behavior on opacity { NumberAnimation { duration: 100 } }
-
- width: parent.width;
height: collapsed ? 0 : childrenRect.height;
opacity: collapsed ? 0 : 1;
+ width: parent.width;
Column {
id: contentColumn;
@@ -44,8 +41,8 @@ Item {
HorizontalLine {}
Row {
- width: parent.width;
height: childrenRect.height;
+ width: parent.width;
PrintJobTitle {
job: root.printer.activePrintJob;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
index 809a3c651a..4fac99f7a2 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
@@ -17,107 +17,90 @@ ProgressBar {
}
return result;
}
- value: progress;
- width: parent.width;
-
style: ProgressBarStyle {
- property var remainingTime:
- {
- if(printer.activePrintJob == null)
- {
- return 0
+ property var remainingTime: {
+ if (printer.activePrintJob == null) {
+ return 0;
}
/* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining
time from ever being less than 0. Negative durations cause strange behavior such
as displaying "-1h -1m". */
- var activeJob = printer.activePrintJob
+ var activeJob = printer.activePrintJob;
return Math.max(activeJob.timeTotal - activeJob.timeElapsed, 0);
}
- property var progressText:
- {
- if(printer.activePrintJob == null)
- {
- return ""
+ property var progressText: {
+ if (printer.activePrintJob == null) {
+ return "";
}
- switch(printer.activePrintJob.state)
- {
+ switch (printer.activePrintJob.state) {
case "wait_cleanup":
- if(printer.activePrintJob.timeTotal > printer.activePrintJob.timeElapsed)
- {
- return catalog.i18nc("@label:status", "Aborted")
+ if (printer.activePrintJob.timeTotal > printer.activePrintJob.timeElapsed) {
+ return catalog.i18nc("@label:status", "Aborted");
}
- return catalog.i18nc("@label:status", "Finished")
+ return catalog.i18nc("@label:status", "Finished");
case "pre_print":
case "sent_to_printer":
- return catalog.i18nc("@label:status", "Preparing")
+ return catalog.i18nc("@label:status", "Preparing");
case "aborted":
- return catalog.i18nc("@label:status", "Aborted")
+ return catalog.i18nc("@label:status", "Aborted");
case "wait_user_action":
- return catalog.i18nc("@label:status", "Aborted")
+ return catalog.i18nc("@label:status", "Aborted");
case "pausing":
- return catalog.i18nc("@label:status", "Pausing")
+ return catalog.i18nc("@label:status", "Pausing");
case "paused":
- return OutputDevice.formatDuration( remainingTime )
+ return OutputDevice.formatDuration( remainingTime );
case "resuming":
- return catalog.i18nc("@label:status", "Resuming")
+ return catalog.i18nc("@label:status", "Resuming");
case "queued":
- return catalog.i18nc("@label:status", "Action required")
+ return catalog.i18nc("@label:status", "Action required");
default:
- return OutputDevice.formatDuration( remainingTime )
+ return OutputDevice.formatDuration( remainingTime );
}
}
-
- background: Rectangle
- {
- implicitWidth: 100
- implicitHeight: visible ? 24 : 0
- color: UM.Theme.getColor("viewport_background")
+ background: Rectangle {
+ color: UM.Theme.getColor("viewport_background");
+ implicitHeight: visible ? 24 : 0;
+ implicitWidth: 100;
}
-
- progress: Rectangle
- {
- color:
- {
+ progress: Rectangle {
+ id: progressItem;
+ color: {
var state = printer.activePrintJob.state
var inactiveStates = [
"pausing",
"paused",
"resuming",
"wait_cleanup"
- ]
- if(inactiveStates.indexOf(state) > -1 && remainingTime > 0)
- {
- return UM.Theme.getColor("monitor_tab_text_inactive")
- }
- else
- {
- return UM.Theme.getColor("primary")
- }
- }
- id: progressItem
- function getTextOffset()
- {
- if(progressItem.width + progressLabel.width + 16 < control.width)
- {
- return progressItem.width + UM.Theme.getSize("default_margin").width
- }
- else
- {
- return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width
+ ];
+ if (inactiveStates.indexOf(state) > -1 && remainingTime > 0) {
+ return UM.Theme.getColor("monitor_tab_text_inactive");
+ } else {
+ return UM.Theme.getColor("primary");
}
}
- Label
- {
- id: progressLabel
- anchors.left: parent.left
- anchors.leftMargin: getTextOffset()
- text: progressText
- anchors.verticalCenter: parent.verticalCenter
- color: progressItem.width + progressLabel.width < control.width ? "black" : "white"
- width: contentWidth
- font: UM.Theme.getFont("default")
+ Label {
+ id: progressLabel;
+ anchors {
+ left: parent.left;
+ leftMargin: getTextOffset();
+ }
+ text: progressText;
+ anchors.verticalCenter: parent.verticalCenter;
+ color: progressItem.width + progressLabel.width < control.width ? "black" : "white";
+ width: contentWidth;
+ font: UM.Theme.getFont("default");
+ }
+
+ function getTextOffset() {
+ if (progressItem.width + progressLabel.width + 16 < control.width) {
+ return progressItem.width + UM.Theme.getSize("default_margin").width;
+ } else {
+ return progressItem.width - progressLabel.width - UM.Theme.getSize("default_margin").width;
+ }
}
}
}
+ value: progress;
+ width: parent.width;
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
index 118da2f42b..24de732faf 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterFamilyPill.qml
@@ -5,26 +5,27 @@ import QtQuick 2.2
import QtQuick.Controls 1.4
import UM 1.2 as UM
-Item
-{
- property alias text: familyNameLabel.text
+Item {
+ property alias text: familyNameLabel.text;
property var padding: 3 * screenScaleFactor; // TODO: Theme!
- implicitHeight: familyNameLabel.contentHeight + 2 * padding // Apply the padding to top and bottom.
- implicitWidth: familyNameLabel.contentWidth + implicitHeight // The extra height is added to ensure the radius doesn't cut something off.
- Rectangle
- {
- id: background
- height: parent.height
- width: parent.width
+ implicitHeight: familyNameLabel.contentHeight + 2 * padding; // Apply the padding to top and bottom.
+ implicitWidth: familyNameLabel.contentWidth + implicitHeight; // The extra height is added to ensure the radius doesn't cut something off.
+
+ Rectangle {
+ id: background;
+ anchors {
+ horizontalCenter: parent.horizontalCenter;
+ right: parent.right;
+ }
color: UM.Theme.getColor("viewport_background"); // TODO: Theme!
- anchors.right: parent.right
- anchors.horizontalCenter: parent.horizontalCenter
- radius: 0.5 * height
+ height: parent.height;
+ radius: 0.5 * height;
+ width: parent.width;
}
- Label
- {
- id: familyNameLabel
- anchors.centerIn: parent
- text: ""
+
+ Label {
+ id: familyNameLabel;
+ anchors.centerIn: parent;
+ text: "";
}
}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
index 51d9e1f462..b054eb458f 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -13,17 +13,14 @@ import UM 1.3 as UM
Item {
id: root;
-
property var printer: null;
property var printJob: null;
-
width: parent.width;
height: childrenRect.height;
// Printer family pills
Row {
id: printerFamilyPills;
-
anchors {
left: parent.left;
right: parent.right;
@@ -35,21 +32,23 @@ Item {
Repeater {
id: compatiblePills;
- visible: printJob;
+ delegate: PrinterFamilyPill {
+ text: modelData;
+ }
model: printJob ? printJob.compatibleMachineFamilies : [];
- delegate: PrinterFamilyPill { text: modelData; }
+ visible: printJob;
+
}
PrinterFamilyPill {
- visible: !compatiblePills.visible && printer;
text: printer.type;
+ visible: !compatiblePills.visible && printer;
}
}
// Extruder info
Row {
id: extrudersInfo;
-
anchors {
left: parent.left;
right: parent.right;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml
index 5e5c972fbe..b9e2525dd5 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml
@@ -4,84 +4,66 @@
import QtQuick 2.2
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
-
import UM 1.3 as UM
+Item {
+ property var camera: null;
-Item
-{
- property var camera: null
-
- Rectangle
- {
- anchors.fill:parent
- color: UM.Theme.getColor("viewport_overlay")
- opacity: 0.5
+ Rectangle {
+ anchors.fill:parent;
+ color: UM.Theme.getColor("viewport_overlay");
+ opacity: 0.5;
}
- MouseArea
- {
- anchors.fill: parent
- onClicked: OutputDevice.setActiveCamera(null)
- z: 0
+ MouseArea {
+ anchors.fill: parent;
+ onClicked: OutputDevice.setActiveCamera(null);
+ z: 0;
}
- CameraButton
- {
- id: closeCameraButton
- iconSource: UM.Theme.getIcon("cross1")
- anchors
- {
- top: cameraImage.top
- topMargin: UM.Theme.getSize("default_margin").height
+ CameraButton {
+ id: closeCameraButton;
+ anchors {
right: cameraImage.right
rightMargin: UM.Theme.getSize("default_margin").width
+ top: cameraImage.top
+ topMargin: UM.Theme.getSize("default_margin").height
}
- z: 999
+ iconSource: UM.Theme.getIcon("cross1");
+ z: 999;
}
- Image
- {
+ Image {
id: cameraImage
- width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth)
- height: Math.round((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width)
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.verticalCenter: parent.verticalCenter
- z: 1
- onVisibleChanged:
- {
- if(visible)
- {
- if(camera != null)
- {
- camera.start()
+ anchors.horizontalCenter: parent.horizontalCenter;
+ anchors.verticalCenter: parent.verticalCenter;
+ height: Math.round((sourceSize.height === 0 ? 600 * screenScaleFactor : sourceSize.height) * width / sourceSize.width);
+ onVisibleChanged: {
+ if (visible) {
+ if (camera != null) {
+ camera.start();
}
- } else
- {
- if(camera != null)
- {
- camera.stop()
+ } else {
+ if (camera != null) {
+ camera.stop();
}
}
}
-
- source:
- {
- if(camera != null && camera.latestImage != null)
- {
+ source: {
+ if (camera != null && camera.latestImage != null) {
return camera.latestImage;
}
return "";
}
- }
-
- MouseArea
- {
- anchors.fill: cameraImage
- onClicked:
- {
- OutputDevice.setActiveCamera(null)
- }
+ width: Math.min(sourceSize.width === 0 ? 800 * screenScaleFactor : sourceSize.width, maximumWidth);
z: 1
}
+
+ MouseArea {
+ anchors.fill: cameraImage;
+ onClicked: {
+ OutputDevice.setActiveCamera(null);
+ }
+ z: 1;
+ }
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
index 6af4b2c6a6..105143c851 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/UM3InfoComponents.qml
@@ -1,128 +1,126 @@
// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
-import UM 1.2 as UM
-import Cura 1.0 as Cura
-
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Layouts 1.1
import QtQuick.Window 2.1
+import UM 1.2 as UM
+import Cura 1.0 as Cura
-Item
-{
- id: base
+Item {
+ id: base;
+ property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId;
+ property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null;
+ property bool printerConnected: Cura.MachineManager.printerConnected;
+ property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands;
+ property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5); // AuthState.AuthenticationRequested or AuthenticationReceived.
- property string activeQualityDefinitionId: Cura.MachineManager.activeQualityDefinitionId
- property bool isUM3: activeQualityDefinitionId == "ultimaker3" || activeQualityDefinitionId.match("ultimaker_") != null
- property bool printerConnected: Cura.MachineManager.printerConnected
- property bool printerAcceptsCommands: printerConnected && Cura.MachineManager.printerOutputDevices[0].acceptsCommands
- property bool authenticationRequested: printerConnected && (Cura.MachineManager.printerOutputDevices[0].authenticationState == 2 || Cura.MachineManager.printerOutputDevices[0].authenticationState == 5) // AuthState.AuthenticationRequested or AuthenticationReceived.
+ UM.I18nCatalog {
+ id: catalog;
+ name: "cura";
+ }
- Row
- {
- objectName: "networkPrinterConnectButton"
- visible: isUM3
- spacing: UM.Theme.getSize("default_margin").width
+ Row {
+ objectName: "networkPrinterConnectButton";
+ spacing: UM.Theme.getSize("default_margin").width;
+ visible: isUM3;
- Button
- {
- height: UM.Theme.getSize("save_button_save_to_button").height
- tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer")
- text: catalog.i18nc("@action:button", "Request Access")
- style: UM.Theme.styles.sidebar_action_button
- onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication()
- visible: printerConnected && !printerAcceptsCommands && !authenticationRequested
+ Button {
+ height: UM.Theme.getSize("save_button_save_to_button").height;
+ onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication();
+ style: UM.Theme.styles.sidebar_action_button;
+ text: catalog.i18nc("@action:button", "Request Access");
+ tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer");
+ visible: printerConnected && !printerAcceptsCommands && !authenticationRequested;
}
- Button
- {
- height: UM.Theme.getSize("save_button_save_to_button").height
- tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer")
- text: catalog.i18nc("@action:button", "Connect")
- style: UM.Theme.styles.sidebar_action_button
- onClicked: connectActionDialog.show()
- visible: !printerConnected
+ Button {
+ height: UM.Theme.getSize("save_button_save_to_button").height;
+ onClicked: connectActionDialog.show();
+ style: UM.Theme.styles.sidebar_action_button;
+ text: catalog.i18nc("@action:button", "Connect");
+ tooltip: catalog.i18nc("@info:tooltip", "Connect to a printer");
+ visible: !printerConnected;
}
}
- UM.Dialog
- {
- id: connectActionDialog
- Loader
- {
- anchors.fill: parent
- source: "DiscoverUM3Action.qml"
+ UM.Dialog {
+ id: connectActionDialog;
+ rightButtons: Button {
+ iconName: "dialog-close";
+ onClicked: connectActionDialog.reject();
+ text: catalog.i18nc("@action:button", "Close");
}
- rightButtons: Button
- {
- text: catalog.i18nc("@action:button", "Close")
- iconName: "dialog-close"
- onClicked: connectActionDialog.reject()
+
+ Loader {
+ anchors.fill: parent;
+ source: "DiscoverUM3Action.qml";
}
}
+ Column {
+ anchors.fill: parent;
+ objectName: "networkPrinterConnectionInfo";
+ spacing: UM.Theme.getSize("default_margin").width;
+ visible: isUM3;
- Column
- {
- objectName: "networkPrinterConnectionInfo"
- visible: isUM3
- spacing: UM.Theme.getSize("default_margin").width
- anchors.fill: parent
-
- Button
- {
- tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer")
- text: catalog.i18nc("@action:button", "Request Access")
- onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication()
- visible: printerConnected && !printerAcceptsCommands && !authenticationRequested
+ Button {
+ onClicked: Cura.MachineManager.printerOutputDevices[0].requestAuthentication();
+ text: catalog.i18nc("@action:button", "Request Access");
+ tooltip: catalog.i18nc("@info:tooltip", "Send access request to the printer");
+ visible: printerConnected && !printerAcceptsCommands && !authenticationRequested;
}
- Row
- {
- visible: printerConnected
- spacing: UM.Theme.getSize("default_margin").width
+ Row {
+ anchors {
+ left: parent.left;
+ right: parent.right;
+ }
+ height: childrenRect.height;
+ spacing: UM.Theme.getSize("default_margin").width;
+ visible: printerConnected;
- anchors.left: parent.left
- anchors.right: parent.right
- height: childrenRect.height
+ Column {
+ Repeater {
+ model: Cura.ExtrudersModel {
+ simpleNames: true;
+ }
- Column
- {
- Repeater
- {
- model: Cura.ExtrudersModel { simpleNames: true }
- Label { text: model.name }
+ Label {
+ text: model.name;
+ }
}
}
- Column
- {
- Repeater
- {
- id: nozzleColumn
- model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null
- Label { text: nozzleColumn.model[index] }
+
+ Column {
+ Repeater {
+ id: nozzleColumn;
+ model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].hotendIds : null;
+
+ Label {
+ text: nozzleColumn.model[index];
+ }
}
}
- Column
- {
- Repeater
- {
- id: materialColumn
- model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null
- Label { text: materialColumn.model[index] }
+
+ Column {
+ Repeater {
+ id: materialColumn;
+ model: printerConnected ? Cura.MachineManager.printerOutputDevices[0].materialNames : null;
+
+ Label {
+ text: materialColumn.model[index];
+ }
}
}
}
- Button
- {
- tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura")
- text: catalog.i18nc("@action:button", "Activate Configuration")
- visible: false // printerConnected && !isClusterPrinter()
- onClicked: manager.loadConfigurationFromPrinter()
+ Button {
+ onClicked: manager.loadConfigurationFromPrinter();
+ text: catalog.i18nc("@action:button", "Activate Configuration");
+ tooltip: catalog.i18nc("@info:tooltip", "Load the configuration of the printer into Cura");
+ visible: false; // printerConnected && !isClusterPrinter()
}
}
-
- UM.I18nCatalog{id: catalog; name:"cura"}
}
From 7f370a75745c4932b1ed6313e986e0f9521842c3 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Wed, 3 Oct 2018 12:28:35 +0200
Subject: [PATCH 171/390] Clean-up mistakes
Oops!
---
plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml | 2 +-
.../UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
index 778a6da2eb..6148a53343 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
@@ -109,7 +109,7 @@ Component {
ListView {
id: printJobList;
anchors.fill: parent;
- delegate: PrintJobInfoBlock; {
+ delegate: PrintJobInfoBlock {
anchors {
left: parent.left;
leftMargin: UM.Theme.getSize("default_margin").width;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index dc613ff9ef..41d28c89f1 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -4,6 +4,7 @@
import QtQuick 2.2
import QtQuick.Controls 2.0
import QtQuick.Controls.Styles 1.4
+import QtQuick.Dialogs 1.1
import QtGraphicalEffects 1.0
import UM 1.3 as UM
From 959f698b038a189238c59eff69035a446382d74a Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Wed, 3 Oct 2018 13:23:37 +0200
Subject: [PATCH 172/390] Update date format CURA-5762
---
plugins/Toolbox/resources/qml/ToolboxDetailPage.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
index cba55051f5..e9aaf39226 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
@@ -126,7 +126,7 @@ Item
return ""
}
var date = new Date(details.last_updated)
- return date.toLocaleString(UM.Preferences.getValue("general/language"))
+ return date.toLocaleDateString(UM.Preferences.getValue("general/language"))
}
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text")
From f3fdb46dbaa37a515f31a322df75f1999726efda Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 3 Oct 2018 13:33:30 +0200
Subject: [PATCH 173/390] Add missing types
---
cura/CuraApplication.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index b40b65358b..eb5abf79d6 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -4,7 +4,7 @@
import os
import sys
import time
-from typing import cast, TYPE_CHECKING
+from typing import cast, TYPE_CHECKING, Optional
import numpy
@@ -175,7 +175,7 @@ class CuraApplication(QtApplication):
self._single_instance = None
- self._cura_formula_functions = None
+ self._cura_formula_functions = None # type: Optional[CuraFormulaFunctions]
self._cura_package_manager = None
@@ -810,6 +810,8 @@ class CuraApplication(QtApplication):
return self._setting_visibility_presets_model
def getCuraFormulaFunctions(self, *args) -> "CuraFormulaFunctions":
+ if self._cura_formula_functions is None:
+ self._cura_formula_functions = CuraFormulaFunctions(self)
return self._cura_formula_functions
def getMachineErrorChecker(self, *args) -> MachineErrorChecker:
From cf3d7df8a6998c9982b1a2a1e5136898c96e0b2e Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 13:59:46 +0200
Subject: [PATCH 174/390] Fix showing progress
---
.../UpgradeFirmwareMachineAction.py | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
index 671ed22d5a..478ea9b6bb 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
@@ -6,6 +6,7 @@ from UM.Settings.DefinitionContainer import DefinitionContainer
from cura.MachineAction import MachineAction
from UM.i18n import i18nCatalog
from UM.Settings.ContainerRegistry import ContainerRegistry
+from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdateState
from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject
from typing import Optional
@@ -13,6 +14,7 @@ from typing import Optional
MYPY = False
if MYPY:
from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater
+ from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice
catalog = i18nCatalog("cura")
@@ -23,7 +25,8 @@ class UpgradeFirmwareMachineAction(MachineAction):
self._qml_url = "UpgradeFirmwareMachineAction.qml"
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
- self._active_output_device = None
+ self._active_output_device = None #type: Optional[PrinterOutputDevice]
+ self._active_firmware_updater = None #type: Optional[FirmwareUpdater]
Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
@@ -38,9 +41,10 @@ class UpgradeFirmwareMachineAction(MachineAction):
def _onOutputDevicesChanged(self) -> None:
if self._active_output_device:
self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.disconnect(self._onControllerCanUpdateFirmwareChanged)
+
output_devices = Application.getInstance().getMachineManager().printerOutputDevices
- print(output_devices)
self._active_output_device = output_devices[0] if output_devices else None
+
if self._active_output_device:
self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged)
@@ -53,6 +57,12 @@ class UpgradeFirmwareMachineAction(MachineAction):
@pyqtProperty(QObject, notify = outputDeviceCanUpdateFirmwareChanged)
def firmwareUpdater(self) -> Optional["firmwareUpdater"]:
if self._active_output_device and self._active_output_device.activePrinter.getController().can_update_firmware:
- return self._active_output_device.getFirmwareUpdater()
+ self._active_firmware_updater = self._active_output_device.getFirmwareUpdater()
+ return self._active_firmware_updater
- return None
\ No newline at end of file
+ elif self._active_firmware_updater and self._active_firmware_updater.firmwareUpdateState not in [FirmwareUpdateState.idle, FirmwareUpdateState.completed]:
+ # During a firmware update, the PrinterOutputDevice is disconnected but the FirmwareUpdater is still there
+ return self._active_firmware_updater
+
+ self._active_firmware_updater = None
+ return None
From 254106bb264699174a8edcfc20e50e22c455ef32 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 3 Oct 2018 15:37:52 +0200
Subject: [PATCH 175/390] Format date strings to ISO YYYY/MM/DD in Toolbox
CURA-5762
---
.../Toolbox/resources/qml/ToolboxDetailPage.qml | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
index e9aaf39226..af08bbe288 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
@@ -125,11 +125,22 @@ Item
{
return ""
}
- var date = new Date(details.last_updated)
- return date.toLocaleDateString(UM.Preferences.getValue("general/language"))
+ var date = new Date(details.last_updated);
+ var date_text = formatDateToISOString(date);
+ return date_text;
}
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text")
+
+ function formatDateToISOString(date) {
+ var day = String(date.getDate());
+ day = (day.length < 2) ? "0" + day : day;
+ var month = String(date.getMonth());
+ month = (month.length < 2) ? "0" + month : month;
+ var year = String(date.getFullYear());
+
+ return year + '/' + month + '/' + day;
+ }
}
Label
{
From 2e529452ddf9e8068b819438e0fd51cf1b9194fc Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 3 Oct 2018 15:58:16 +0200
Subject: [PATCH 176/390] Moved the actual adding of containers by script to
initialize
This ensures that when loading scripts (and checking they are valid) we don't start adding unneeded containers
---
plugins/PostProcessingPlugin/PostProcessingPlugin.py | 2 ++
plugins/PostProcessingPlugin/Script.py | 9 +++++----
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py
index b28a028325..78aa690106 100644
--- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py
+++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py
@@ -189,6 +189,7 @@ class PostProcessingPlugin(QObject, Extension):
def addScriptToList(self, key):
Logger.log("d", "Adding script %s to list.", key)
new_script = self._loaded_scripts[key]()
+ new_script.initialize()
self._script_list.append(new_script)
self.setSelectedScriptIndex(len(self._script_list) - 1)
self.scriptListChanged.emit()
@@ -220,6 +221,7 @@ class PostProcessingPlugin(QObject, Extension):
Logger.log("e", "Unknown post-processing script {script_name} was encountered in this global stack.".format(script_name = script_name))
continue
new_script = self._loaded_scripts[script_name]()
+ new_script.initialize()
for setting_key, setting_value in settings.items(): #Put all setting values into the script.
new_script._instance.setProperty(setting_key, "value", setting_value)
self._script_list.append(new_script)
diff --git a/plugins/PostProcessingPlugin/Script.py b/plugins/PostProcessingPlugin/Script.py
index 7e430a5c78..b5211401c1 100644
--- a/plugins/PostProcessingPlugin/Script.py
+++ b/plugins/PostProcessingPlugin/Script.py
@@ -26,14 +26,14 @@ class Script:
self._settings = None
self._stack = None
+ def initialize(self):
setting_data = self.getSettingData()
- self._stack = ContainerStack(stack_id = str(id(self)))
+ self._stack = ContainerStack(stack_id=str(id(self)))
self._stack.setDirty(False) # This stack does not need to be saved.
-
## Check if the definition of this script already exists. If not, add it to the registry.
if "key" in setting_data:
- definitions = ContainerRegistry.getInstance().findDefinitionContainers(id = setting_data["key"])
+ definitions = ContainerRegistry.getInstance().findDefinitionContainers(id=setting_data["key"])
if definitions:
# Definition was found
self._definition = definitions[0]
@@ -48,7 +48,8 @@ class Script:
self._stack.addContainer(self._definition)
self._instance = InstanceContainer(container_id="ScriptInstanceContainer")
self._instance.setDefinition(self._definition.getId())
- self._instance.setMetaDataEntry("setting_version", self._definition.getMetaDataEntry("setting_version", default = 0))
+ self._instance.setMetaDataEntry("setting_version",
+ self._definition.getMetaDataEntry("setting_version", default=0))
self._stack.addContainer(self._instance)
self._stack.propertyChanged.connect(self._onPropertyChanged)
From e3721fe539cc2f94ca45270c909cc1ebb3c78a4d Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Wed, 3 Oct 2018 16:27:13 +0200
Subject: [PATCH 177/390] Revert "Format date strings to ISO YYYY/MM/DD in
Toolbox"
This reverts commit 254106bb264699174a8edcfc20e50e22c455ef32.
---
.../Toolbox/resources/qml/ToolboxDetailPage.qml | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
index af08bbe288..e9aaf39226 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
@@ -125,22 +125,11 @@ Item
{
return ""
}
- var date = new Date(details.last_updated);
- var date_text = formatDateToISOString(date);
- return date_text;
+ var date = new Date(details.last_updated)
+ return date.toLocaleDateString(UM.Preferences.getValue("general/language"))
}
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text")
-
- function formatDateToISOString(date) {
- var day = String(date.getDate());
- day = (day.length < 2) ? "0" + day : day;
- var month = String(date.getMonth());
- month = (month.length < 2) ? "0" + month : month;
- var year = String(date.getFullYear());
-
- return year + '/' + month + '/' + day;
- }
}
Label
{
From a4e02a6eaef9018ab714c7d8d2190252d325790a Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Wed, 3 Oct 2018 16:27:30 +0200
Subject: [PATCH 178/390] Revert "Update date format"
This reverts commit 959f698b038a189238c59eff69035a446382d74a.
---
plugins/Toolbox/resources/qml/ToolboxDetailPage.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
index e9aaf39226..cba55051f5 100644
--- a/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxDetailPage.qml
@@ -126,7 +126,7 @@ Item
return ""
}
var date = new Date(details.last_updated)
- return date.toLocaleDateString(UM.Preferences.getValue("general/language"))
+ return date.toLocaleString(UM.Preferences.getValue("general/language"))
}
font: UM.Theme.getFont("very_small")
color: UM.Theme.getColor("text")
From adf8285d20d4fd7236e1ab8835f2c7bd2ef1ed34 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 3 Oct 2018 16:36:58 +0200
Subject: [PATCH 179/390] Typing fixes
Since I was stupid enough to touch it, I was also forced to boyscout the code.
---
.../PostProcessingPlugin.py | 141 ++++++++++--------
plugins/PostProcessingPlugin/Script.py | 54 ++++---
2 files changed, 115 insertions(+), 80 deletions(-)
diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py
index 78aa690106..1a1ea92d10 100644
--- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py
+++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py
@@ -2,6 +2,7 @@
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
+from typing import Dict, Type, TYPE_CHECKING, List, Optional, cast
from UM.PluginRegistry import PluginRegistry
from UM.Resources import Resources
@@ -9,55 +10,62 @@ from UM.Application import Application
from UM.Extension import Extension
from UM.Logger import Logger
-import configparser #The script lists are stored in metadata as serialised config files.
-import io #To allow configparser to write to a string.
+import configparser # The script lists are stored in metadata as serialised config files.
+import io # To allow configparser to write to a string.
import os.path
import pkgutil
import sys
import importlib.util
from UM.i18n import i18nCatalog
+from cura.CuraApplication import CuraApplication
+
i18n_catalog = i18nCatalog("cura")
+if TYPE_CHECKING:
+ from .Script import Script
+
## The post processing plugin is an Extension type plugin that enables pre-written scripts to post process generated
# g-code files.
class PostProcessingPlugin(QObject, Extension):
- def __init__(self, parent = None):
- super().__init__(parent)
+ def __init__(self, parent = None) -> None:
+ QObject.__init__(self, parent)
+ Extension.__init__(self)
self.addMenuItem(i18n_catalog.i18n("Modify G-Code"), self.showPopup)
self._view = None
# Loaded scripts are all scripts that can be used
- self._loaded_scripts = {}
- self._script_labels = {}
+ self._loaded_scripts = {} # type: Dict[str, Type[Script]]
+ self._script_labels = {} # type: Dict[str, str]
# Script list contains instances of scripts in loaded_scripts.
# There can be duplicates, which will be executed in sequence.
- self._script_list = []
+ self._script_list = [] # type: List[Script]
self._selected_script_index = -1
Application.getInstance().getOutputDeviceManager().writeStarted.connect(self.execute)
- Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) #When the current printer changes, update the list of scripts.
- Application.getInstance().mainWindowChanged.connect(self._createView) #When the main window is created, create the view so that we can display the post-processing icon if necessary.
+ Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged) # When the current printer changes, update the list of scripts.
+ CuraApplication.getInstance().mainWindowChanged.connect(self._createView) # When the main window is created, create the view so that we can display the post-processing icon if necessary.
selectedIndexChanged = pyqtSignal()
- @pyqtProperty("QVariant", notify = selectedIndexChanged)
- def selectedScriptDefinitionId(self):
+
+ @pyqtProperty(str, notify = selectedIndexChanged)
+ def selectedScriptDefinitionId(self) -> Optional[str]:
try:
return self._script_list[self._selected_script_index].getDefinitionId()
except:
return ""
- @pyqtProperty("QVariant", notify=selectedIndexChanged)
- def selectedScriptStackId(self):
+ @pyqtProperty(str, notify=selectedIndexChanged)
+ def selectedScriptStackId(self) -> Optional[str]:
try:
return self._script_list[self._selected_script_index].getStackId()
except:
return ""
## Execute all post-processing scripts on the gcode.
- def execute(self, output_device):
+ def execute(self, output_device) -> None:
scene = Application.getInstance().getController().getScene()
# If the scene does not have a gcode, do nothing
if not hasattr(scene, "gcode_dict"):
@@ -67,7 +75,7 @@ class PostProcessingPlugin(QObject, Extension):
return
# get gcode list for the active build plate
- active_build_plate_id = Application.getInstance().getMultiBuildPlateModel().activeBuildPlate
+ active_build_plate_id = CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate
gcode_list = gcode_dict[active_build_plate_id]
if not gcode_list:
return
@@ -86,16 +94,17 @@ class PostProcessingPlugin(QObject, Extension):
Logger.log("e", "Already post processed")
@pyqtSlot(int)
- def setSelectedScriptIndex(self, index):
- self._selected_script_index = index
- self.selectedIndexChanged.emit()
+ def setSelectedScriptIndex(self, index: int) -> None:
+ if self._selected_script_index != index:
+ self._selected_script_index = index
+ self.selectedIndexChanged.emit()
@pyqtProperty(int, notify = selectedIndexChanged)
- def selectedScriptIndex(self):
+ def selectedScriptIndex(self) -> int:
return self._selected_script_index
@pyqtSlot(int, int)
- def moveScript(self, index, new_index):
+ def moveScript(self, index: int, new_index: int) -> None:
if new_index < 0 or new_index > len(self._script_list) - 1:
return # nothing needs to be done
else:
@@ -107,7 +116,7 @@ class PostProcessingPlugin(QObject, Extension):
## Remove a script from the active script list by index.
@pyqtSlot(int)
- def removeScriptByIndex(self, index):
+ def removeScriptByIndex(self, index: int) -> None:
self._script_list.pop(index)
if len(self._script_list) - 1 < self._selected_script_index:
self._selected_script_index = len(self._script_list) - 1
@@ -118,14 +127,16 @@ class PostProcessingPlugin(QObject, Extension):
## Load all scripts from all paths where scripts can be found.
#
# This should probably only be done on init.
- def loadAllScripts(self):
- if self._loaded_scripts: #Already loaded.
+ def loadAllScripts(self) -> None:
+ if self._loaded_scripts: # Already loaded.
return
- #The PostProcessingPlugin path is for built-in scripts.
- #The Resources path is where the user should store custom scripts.
- #The Preferences path is legacy, where the user may previously have stored scripts.
+ # The PostProcessingPlugin path is for built-in scripts.
+ # The Resources path is where the user should store custom scripts.
+ # The Preferences path is legacy, where the user may previously have stored scripts.
for root in [PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), Resources.getStoragePath(Resources.Resources), Resources.getStoragePath(Resources.Preferences)]:
+ if root is None:
+ continue
path = os.path.join(root, "scripts")
if not os.path.isdir(path):
try:
@@ -139,7 +150,7 @@ class PostProcessingPlugin(QObject, Extension):
## Load all scripts from provided path.
# This should probably only be done on init.
# \param path Path to check for scripts.
- def loadScripts(self, path):
+ def loadScripts(self, path: str) -> None:
## Load all scripts in the scripts folders
scripts = pkgutil.iter_modules(path = [path])
for loader, script_name, ispkg in scripts:
@@ -148,6 +159,8 @@ class PostProcessingPlugin(QObject, Extension):
try:
spec = importlib.util.spec_from_file_location(__name__ + "." + script_name, os.path.join(path, script_name + ".py"))
loaded_script = importlib.util.module_from_spec(spec)
+ if spec.loader is None:
+ continue
spec.loader.exec_module(loaded_script)
sys.modules[script_name] = loaded_script #TODO: This could be a security risk. Overwrite any module with a user-provided name?
@@ -172,21 +185,21 @@ class PostProcessingPlugin(QObject, Extension):
loadedScriptListChanged = pyqtSignal()
@pyqtProperty("QVariantList", notify = loadedScriptListChanged)
- def loadedScriptList(self):
+ def loadedScriptList(self) -> List[str]:
return sorted(list(self._loaded_scripts.keys()))
@pyqtSlot(str, result = str)
- def getScriptLabelByKey(self, key):
- return self._script_labels[key]
+ def getScriptLabelByKey(self, key: str) -> Optional[str]:
+ return self._script_labels.get(key)
scriptListChanged = pyqtSignal()
- @pyqtProperty("QVariantList", notify = scriptListChanged)
- def scriptList(self):
+ @pyqtProperty("QStringList", notify = scriptListChanged)
+ def scriptList(self) -> List[str]:
script_list = [script.getSettingData()["key"] for script in self._script_list]
return script_list
@pyqtSlot(str)
- def addScriptToList(self, key):
+ def addScriptToList(self, key: str) -> None:
Logger.log("d", "Adding script %s to list.", key)
new_script = self._loaded_scripts[key]()
new_script.initialize()
@@ -197,82 +210,89 @@ class PostProcessingPlugin(QObject, Extension):
## When the global container stack is changed, swap out the list of active
# scripts.
- def _onGlobalContainerStackChanged(self):
+ def _onGlobalContainerStackChanged(self) -> None:
self.loadAllScripts()
new_stack = Application.getInstance().getGlobalContainerStack()
+ if new_stack is None:
+ return
self._script_list.clear()
- if not new_stack.getMetaDataEntry("post_processing_scripts"): #Missing or empty.
- self.scriptListChanged.emit() #Even emit this if it didn't change. We want it to write the empty list to the stack's metadata.
+ if not new_stack.getMetaDataEntry("post_processing_scripts"): # Missing or empty.
+ self.scriptListChanged.emit() # Even emit this if it didn't change. We want it to write the empty list to the stack's metadata.
return
self._script_list.clear()
scripts_list_strs = new_stack.getMetaDataEntry("post_processing_scripts")
- for script_str in scripts_list_strs.split("\n"): #Encoded config files should never contain three newlines in a row. At most 2, just before section headers.
- if not script_str: #There were no scripts in this one (or a corrupt file caused more than 3 consecutive newlines here).
+ for script_str in scripts_list_strs.split("\n"): # Encoded config files should never contain three newlines in a row. At most 2, just before section headers.
+ if not script_str: # There were no scripts in this one (or a corrupt file caused more than 3 consecutive newlines here).
continue
- script_str = script_str.replace(r"\\\n", "\n").replace(r"\\\\", "\\\\") #Unescape escape sequences.
+ script_str = script_str.replace(r"\\\n", "\n").replace(r"\\\\", "\\\\") # Unescape escape sequences.
script_parser = configparser.ConfigParser(interpolation = None)
- script_parser.optionxform = str #Don't transform the setting keys as they are case-sensitive.
+ script_parser.optionxform = str # type: ignore # Don't transform the setting keys as they are case-sensitive.
script_parser.read_string(script_str)
- for script_name, settings in script_parser.items(): #There should only be one, really! Otherwise we can't guarantee the order or allow multiple uses of the same script.
- if script_name == "DEFAULT": #ConfigParser always has a DEFAULT section, but we don't fill it. Ignore this one.
+ for script_name, settings in script_parser.items(): # There should only be one, really! Otherwise we can't guarantee the order or allow multiple uses of the same script.
+ if script_name == "DEFAULT": # ConfigParser always has a DEFAULT section, but we don't fill it. Ignore this one.
continue
- if script_name not in self._loaded_scripts: #Don't know this post-processing plug-in.
+ if script_name not in self._loaded_scripts: # Don't know this post-processing plug-in.
Logger.log("e", "Unknown post-processing script {script_name} was encountered in this global stack.".format(script_name = script_name))
continue
new_script = self._loaded_scripts[script_name]()
new_script.initialize()
- for setting_key, setting_value in settings.items(): #Put all setting values into the script.
- new_script._instance.setProperty(setting_key, "value", setting_value)
+ for setting_key, setting_value in settings.items(): # Put all setting values into the script.
+ if new_script._instance is not None:
+ new_script._instance.setProperty(setting_key, "value", setting_value)
self._script_list.append(new_script)
self.setSelectedScriptIndex(0)
self.scriptListChanged.emit()
@pyqtSlot()
- def writeScriptsToStack(self):
- script_list_strs = []
+ def writeScriptsToStack(self) -> None:
+ script_list_strs = [] # type: List[str]
for script in self._script_list:
- parser = configparser.ConfigParser(interpolation = None) #We'll encode the script as a config with one section. The section header is the key and its values are the settings.
- parser.optionxform = str #Don't transform the setting keys as they are case-sensitive.
+ parser = configparser.ConfigParser(interpolation = None) # We'll encode the script as a config with one section. The section header is the key and its values are the settings.
+ parser.optionxform = str # type: ignore # Don't transform the setting keys as they are case-sensitive.
script_name = script.getSettingData()["key"]
parser.add_section(script_name)
for key in script.getSettingData()["settings"]:
value = script.getSettingValueByKey(key)
parser[script_name][key] = str(value)
- serialized = io.StringIO() #ConfigParser can only write to streams. Fine.
+ serialized = io.StringIO() # ConfigParser can only write to streams. Fine.
parser.write(serialized)
serialized.seek(0)
script_str = serialized.read()
- script_str = script_str.replace("\\\\", r"\\\\").replace("\n", r"\\\n") #Escape newlines because configparser sees those as section delimiters.
+ script_str = script_str.replace("\\\\", r"\\\\").replace("\n", r"\\\n") # Escape newlines because configparser sees those as section delimiters.
script_list_strs.append(script_str)
- script_list_strs = "\n".join(script_list_strs) #ConfigParser should never output three newlines in a row when serialised, so it's a safe delimiter.
+ script_list_string = "\n".join(script_list_strs) # ConfigParser should never output three newlines in a row when serialised, so it's a safe delimiter.
global_stack = Application.getInstance().getGlobalContainerStack()
+ if global_stack is None:
+ return
+
if "post_processing_scripts" not in global_stack.getMetaData():
global_stack.setMetaDataEntry("post_processing_scripts", "")
- Application.getInstance().getGlobalContainerStack().setMetaDataEntry("post_processing_scripts", script_list_strs)
+
+ global_stack.setMetaDataEntry("post_processing_scripts", script_list_string)
## Creates the view used by show popup. The view is saved because of the fairly aggressive garbage collection.
- def _createView(self):
+ def _createView(self) -> None:
Logger.log("d", "Creating post processing plugin view.")
self.loadAllScripts()
# Create the plugin dialog component
- path = os.path.join(PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin"), "PostProcessingPlugin.qml")
- self._view = Application.getInstance().createQmlComponent(path, {"manager": self})
+ path = os.path.join(cast(str, PluginRegistry.getInstance().getPluginPath("PostProcessingPlugin")), "PostProcessingPlugin.qml")
+ self._view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
if self._view is None:
Logger.log("e", "Not creating PostProcessing button near save button because the QML component failed to be created.")
return
Logger.log("d", "Post processing view created.")
# Create the save button component
- Application.getInstance().addAdditionalComponent("saveButton", self._view.findChild(QObject, "postProcessingSaveAreaButton"))
+ CuraApplication.getInstance().addAdditionalComponent("saveButton", self._view.findChild(QObject, "postProcessingSaveAreaButton"))
## Show the (GUI) popup of the post processing plugin.
- def showPopup(self):
+ def showPopup(self) -> None:
if self._view is None:
self._createView()
if self._view is None:
@@ -284,8 +304,9 @@ class PostProcessingPlugin(QObject, Extension):
# To do this we use the global container stack propertyChanged.
# Re-slicing is necessary for setting changes in this plugin, because the changes
# are applied only once per "fresh" gcode
- def _propertyChanged(self):
+ def _propertyChanged(self) -> None:
global_container_stack = Application.getInstance().getGlobalContainerStack()
- global_container_stack.propertyChanged.emit("post_processing_plugin", "value")
+ if global_container_stack is not None:
+ global_container_stack.propertyChanged.emit("post_processing_plugin", "value")
diff --git a/plugins/PostProcessingPlugin/Script.py b/plugins/PostProcessingPlugin/Script.py
index b5211401c1..e502f107f9 100644
--- a/plugins/PostProcessingPlugin/Script.py
+++ b/plugins/PostProcessingPlugin/Script.py
@@ -1,6 +1,8 @@
# Copyright (c) 2015 Jaime van Kessel
# Copyright (c) 2018 Ultimaker B.V.
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
+from typing import Optional, Any, Dict, TYPE_CHECKING, List
+
from UM.Signal import Signal, signalemitter
from UM.i18n import i18nCatalog
@@ -17,16 +19,20 @@ import json
import collections
i18n_catalog = i18nCatalog("cura")
+if TYPE_CHECKING:
+ from UM.Settings.Interfaces import DefinitionContainerInterface
+
## Base class for scripts. All scripts should inherit the script class.
@signalemitter
class Script:
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
- self._settings = None
- self._stack = None
+ self._stack = None # type: Optional[ContainerStack]
+ self._definition = None # type: Optional[DefinitionContainerInterface]
+ self._instance = None # type: Optional[InstanceContainer]
- def initialize(self):
+ def initialize(self) -> None:
setting_data = self.getSettingData()
self._stack = ContainerStack(stack_id=str(id(self)))
self._stack.setDirty(False) # This stack does not need to be saved.
@@ -45,6 +51,8 @@ class Script:
except ContainerFormatError:
self._definition = None
return
+ if self._definition is None:
+ return
self._stack.addContainer(self._definition)
self._instance = InstanceContainer(container_id="ScriptInstanceContainer")
self._instance.setDefinition(self._definition.getId())
@@ -58,16 +66,17 @@ class Script:
settingsLoaded = Signal()
valueChanged = Signal() # Signal emitted whenever a value of a setting is changed
- def _onPropertyChanged(self, key, property_name):
+ def _onPropertyChanged(self, key: str, property_name: str) -> None:
if property_name == "value":
self.valueChanged.emit()
# Property changed: trigger reslice
# To do this we use the global container stack propertyChanged.
- # Reslicing is necessary for setting changes in this plugin, because the changes
+ # Re-slicing is necessary for setting changes in this plugin, because the changes
# are applied only once per "fresh" gcode
global_container_stack = Application.getInstance().getGlobalContainerStack()
- global_container_stack.propertyChanged.emit(key, property_name)
+ if global_container_stack is not None:
+ global_container_stack.propertyChanged.emit(key, property_name)
## Needs to return a dict that can be used to construct a settingcategory file.
# See the example script for an example.
@@ -75,30 +84,35 @@ class Script:
# Scripts can either override getSettingData directly, or use getSettingDataString
# to return a string that will be parsed as json. The latter has the benefit over
# returning a dict in that the order of settings is maintained.
- def getSettingData(self):
- setting_data = self.getSettingDataString()
- if type(setting_data) == str:
- setting_data = json.loads(setting_data, object_pairs_hook = collections.OrderedDict)
+ def getSettingData(self) -> Dict[str, Any]:
+ setting_data_as_string = self.getSettingDataString()
+ setting_data = json.loads(setting_data_as_string, object_pairs_hook = collections.OrderedDict)
return setting_data
- def getSettingDataString(self):
+ def getSettingDataString(self) -> str:
raise NotImplementedError()
- def getDefinitionId(self):
+ def getDefinitionId(self) -> Optional[str]:
if self._stack:
- return self._stack.getBottom().getId()
+ bottom = self._stack.getBottom()
+ if bottom is not None:
+ return bottom.getId()
+ return None
- def getStackId(self):
+ def getStackId(self) -> Optional[str]:
if self._stack:
return self._stack.getId()
+ return None
## Convenience function that retrieves value of a setting from the stack.
- def getSettingValueByKey(self, key):
- return self._stack.getProperty(key, "value")
+ def getSettingValueByKey(self, key: str) -> Any:
+ if self._stack is not None:
+ return self._stack.getProperty(key, "value")
+ return None
## Convenience function that finds the value in a line of g-code.
# When requesting key = x from line "G1 X100" the value 100 is returned.
- def getValue(self, line, key, default = None):
+ def getValue(self, line: str, key: str, default = None) -> Any:
if not key in line or (';' in line and line.find(key) > line.find(';')):
return default
sub_part = line[line.find(key) + 1:]
@@ -126,7 +140,7 @@ class Script:
# \param line The original g-code line that must be modified. If not
# provided, an entirely new g-code line will be produced.
# \return A line of g-code with the desired parameters filled in.
- def putValue(self, line = "", **kwargs):
+ def putValue(self, line: str = "", **kwargs) -> str:
#Strip the comment.
comment = ""
if ";" in line:
@@ -167,5 +181,5 @@ class Script:
## This is called when the script is executed.
# It gets a list of g-code strings and needs to return a (modified) list.
- def execute(self, data):
+ def execute(self, data: List[str]) -> List[str]:
raise NotImplementedError()
From 7d7de32dbdd16ceb87a0bb7651a0ab43ebc5317b Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 3 Oct 2018 16:53:07 +0200
Subject: [PATCH 180/390] Add ExtruderStack to GlobalStack in single extrusion
machine fix
---
cura/Settings/ExtruderManager.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 9089ba96e9..2514e17075 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -374,6 +374,8 @@ class ExtruderManager(QObject):
extruder_definition = container_registry.findDefinitionContainers(id = expected_extruder_definition_0_id)[0]
extruder_stack_0.definition = extruder_definition
+ extruder_stack_0.setNextStack(global_stack)
+
## Get all extruder values for a certain setting.
#
# This is exposed to qml for display purposes
From 4ca63f84b815518f3bcc94eb37ed4e086630dd1d Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Tue, 2 Oct 2018 15:53:06 +0200
Subject: [PATCH 181/390] Add missing quote.
Contributes to CURA-5741.
---
resources/i18n/pl_PL/fdmprinter.def.json.po | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/i18n/pl_PL/fdmprinter.def.json.po b/resources/i18n/pl_PL/fdmprinter.def.json.po
index 53aa32009e..a8b07e032c 100644
--- a/resources/i18n/pl_PL/fdmprinter.def.json.po
+++ b/resources/i18n/pl_PL/fdmprinter.def.json.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Cura 3.5\n"
-"Report-Msgid-Bugs-To: r.dulek@ultimaker.com
+"Report-Msgid-Bugs-To: r.dulek@ultimaker.com"
"POT-Creation-Date: 2018-09-19 17:07+0000\n"
"PO-Revision-Date: 2018-09-21 21:52+0200\n"
"Last-Translator: 'Jaguś' Paweł Jagusiak, Andrzej 'anraf1001' Rafalski and Jakub 'drzejkopf' Świeciński\n"
From d91d0fab10f1e26698599d1aa426c2d99ef5bbd3 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 3 Oct 2018 17:27:01 +0200
Subject: [PATCH 182/390] Fix SimulationView: missing import
---
plugins/SimulationView/SimulationView.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py
index aafbca0247..0ae8b4d9e4 100644
--- a/plugins/SimulationView/SimulationView.py
+++ b/plugins/SimulationView/SimulationView.py
@@ -24,7 +24,7 @@ from UM.Signal import Signal
from UM.View.CompositePass import CompositePass
from UM.View.GL.OpenGL import OpenGL
from UM.View.GL.OpenGLContext import OpenGLContext
-
+from UM.View.GL.ShaderProgram import ShaderProgram
from UM.View.View import View
from UM.i18n import i18nCatalog
@@ -42,8 +42,6 @@ from typing import Optional, TYPE_CHECKING, List, cast
if TYPE_CHECKING:
from UM.Scene.SceneNode import SceneNode
from UM.Scene.Scene import Scene
- from UM.View.GL.ShaderProgram import ShaderProgram
- from UM.View.RenderPass import RenderPass
from UM.Settings.ContainerStack import ContainerStack
catalog = i18nCatalog("cura")
From 61ffdf23d70d79857156020dcd1508496d036511 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 14:10:02 +0200
Subject: [PATCH 183/390] Fix MYPY/typing errors
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 3 +++
.../UpgradeFirmwareMachineAction.py | 12 ++++++------
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 15136491f8..1fd2fdeb5c 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -100,6 +100,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
@pyqtSlot(str)
def updateFirmware(self, file: Union[str, QUrl]) -> None:
+ if not self._firmware_updater:
+ return
+
self._firmware_updater.updateFirmware(file)
## Reset USB device settings
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
index 478ea9b6bb..8d03a15b38 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from UM.Application import Application
+from cura.CuraApplication import CuraApplication
from UM.Settings.DefinitionContainer import DefinitionContainer
from cura.MachineAction import MachineAction
from UM.i18n import i18nCatalog
@@ -28,21 +28,21 @@ class UpgradeFirmwareMachineAction(MachineAction):
self._active_output_device = None #type: Optional[PrinterOutputDevice]
self._active_firmware_updater = None #type: Optional[FirmwareUpdater]
- Application.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
+ CuraApplication.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
def _onEngineCreated(self) -> None:
- Application.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
+ CuraApplication.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
def _onContainerAdded(self, container) -> None:
# Add this action as a supported action to all machine definitions if they support USB connection
if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine" and container.getMetaDataEntry("supports_usb_connection"):
- Application.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
+ CuraApplication.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
def _onOutputDevicesChanged(self) -> None:
if self._active_output_device:
self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.disconnect(self._onControllerCanUpdateFirmwareChanged)
- output_devices = Application.getInstance().getMachineManager().printerOutputDevices
+ output_devices = CuraApplication.getInstance().getMachineManager().printerOutputDevices
self._active_output_device = output_devices[0] if output_devices else None
if self._active_output_device:
@@ -55,7 +55,7 @@ class UpgradeFirmwareMachineAction(MachineAction):
outputDeviceCanUpdateFirmwareChanged = pyqtSignal()
@pyqtProperty(QObject, notify = outputDeviceCanUpdateFirmwareChanged)
- def firmwareUpdater(self) -> Optional["firmwareUpdater"]:
+ def firmwareUpdater(self) -> Optional["FirmwareUpdater"]:
if self._active_output_device and self._active_output_device.activePrinter.getController().can_update_firmware:
self._active_firmware_updater = self._active_output_device.getFirmwareUpdater()
return self._active_firmware_updater
From b7542a8ef8ff17491c1366e7ca5532ebc9e0c526 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 20:55:51 +0200
Subject: [PATCH 184/390] Move Firmware Updater into a plugin of its own
---
.../FirmwareUpdaterMachineAction.py} | 4 ++--
.../FirmwareUpdaterMachineAction.qml} | 18 +++++++++---------
plugins/FirmwareUpdater/__init__.py | 13 +++++++++++++
plugins/FirmwareUpdater/plugin.json | 8 ++++++++
plugins/UltimakerMachineActions/__init__.py | 5 -----
resources/bundled_packages/cura.json | 17 +++++++++++++++++
6 files changed, 49 insertions(+), 16 deletions(-)
rename plugins/{UltimakerMachineActions/UpgradeFirmwareMachineAction.py => FirmwareUpdater/FirmwareUpdaterMachineAction.py} (96%)
rename plugins/{UltimakerMachineActions/UpgradeFirmwareMachineAction.qml => FirmwareUpdater/FirmwareUpdaterMachineAction.qml} (92%)
create mode 100644 plugins/FirmwareUpdater/__init__.py
create mode 100644 plugins/FirmwareUpdater/plugin.json
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
similarity index 96%
rename from plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
rename to plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
index 8d03a15b38..4faa3abc64 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.py
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
@@ -19,10 +19,10 @@ if MYPY:
catalog = i18nCatalog("cura")
## Upgrade the firmware of a machine by USB with this action.
-class UpgradeFirmwareMachineAction(MachineAction):
+class FirmwareUpdaterMachineAction(MachineAction):
def __init__(self) -> None:
super().__init__("UpgradeFirmware", catalog.i18nc("@action", "Upgrade Firmware"))
- self._qml_url = "UpgradeFirmwareMachineAction.qml"
+ self._qml_url = "FirmwareUpdaterMachineAction.qml"
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
self._active_output_device = None #type: Optional[PrinterOutputDevice]
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml
similarity index 92%
rename from plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
rename to plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml
index 1c1f39edd0..ab5bb89347 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml
@@ -20,7 +20,7 @@ Cura.MachineAction
Column
{
- id: upgradeFirmwareMachineAction
+ id: firmwareUpdaterMachineAction
anchors.fill: parent;
UM.I18nCatalog { id: catalog; name:"cura"}
spacing: UM.Theme.getSize("default_margin").height
@@ -28,7 +28,7 @@ Cura.MachineAction
Label
{
width: parent.width
- text: catalog.i18nc("@title", "Upgrade Firmware")
+ text: catalog.i18nc("@title", "Update Firmware")
wrapMode: Text.WordWrap
font.pointSize: 18
}
@@ -59,7 +59,7 @@ Cura.MachineAction
enabled: parent.firmwareName != "" && canUpdateFirmware
onClicked:
{
- firmwareUpdateWindow.visible = true;
+ updateProgressDialog.visible = true;
activeOutputDevice.updateFirmware(parent.firmwareName);
}
}
@@ -79,8 +79,8 @@ Cura.MachineAction
{
width: parent.width
wrapMode: Text.WordWrap
- visible: !printerConnected && !firmwareUpdateWindow.visible
- text: catalog.i18nc("@label", "Firmware can not be upgraded because there is no connection with the printer.");
+ visible: !printerConnected && !updateProgressDialog.visible
+ text: catalog.i18nc("@label", "Firmware can not be updated because there is no connection with the printer.");
}
Label
@@ -88,7 +88,7 @@ Cura.MachineAction
width: parent.width
wrapMode: Text.WordWrap
visible: printerConnected && !canUpdateFirmware
- text: catalog.i18nc("@label", "Firmware can not be upgraded because the connection with the printer does not support upgrading firmware.");
+ text: catalog.i18nc("@label", "Firmware can not be updated because the connection with the printer does not support upgrading firmware.");
}
}
@@ -100,14 +100,14 @@ Cura.MachineAction
selectExisting: true
onAccepted:
{
- firmwareUpdateWindow.visible = true;
+ updateProgressDialog.visible = true;
activeOutputDevice.updateFirmware(fileUrl);
}
}
UM.Dialog
{
- id: firmwareUpdateWindow
+ id: updateProgressDialog
width: minimumWidth
minimumWidth: 500 * screenScaleFactor
@@ -184,7 +184,7 @@ Cura.MachineAction
{
text: catalog.i18nc("@action:button","Close");
enabled: (manager.firmwareUpdater != null) ? manager.firmwareUpdater.firmwareUpdateState != 1 : true;
- onClicked: firmwareUpdateWindow.visible = false;
+ onClicked: updateProgressDialog.visible = false;
}
]
}
diff --git a/plugins/FirmwareUpdater/__init__.py b/plugins/FirmwareUpdater/__init__.py
new file mode 100644
index 0000000000..58c351a4ea
--- /dev/null
+++ b/plugins/FirmwareUpdater/__init__.py
@@ -0,0 +1,13 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from . import FirmwareUpdaterMachineAction
+
+def getMetaData():
+ return {
+ }
+
+def register(app):
+ return { "machine_action": [
+ FirmwareUpdaterMachineAction.FirmwareUpdaterMachineAction(),
+ ]}
diff --git a/plugins/FirmwareUpdater/plugin.json b/plugins/FirmwareUpdater/plugin.json
new file mode 100644
index 0000000000..3e09eab2b5
--- /dev/null
+++ b/plugins/FirmwareUpdater/plugin.json
@@ -0,0 +1,8 @@
+{
+ "name": "Firmware Updater",
+ "author": "Ultimaker B.V.",
+ "version": "1.0.0",
+ "description": "Provides a machine actions for updating firmware.",
+ "api": 5,
+ "i18n-catalog": "cura"
+}
diff --git a/plugins/UltimakerMachineActions/__init__.py b/plugins/UltimakerMachineActions/__init__.py
index 495f212736..30493536ce 100644
--- a/plugins/UltimakerMachineActions/__init__.py
+++ b/plugins/UltimakerMachineActions/__init__.py
@@ -2,13 +2,9 @@
# Cura is released under the terms of the LGPLv3 or higher.
from . import BedLevelMachineAction
-from . import UpgradeFirmwareMachineAction
from . import UMOUpgradeSelection
from . import UM2UpgradeSelection
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
-
def getMetaData():
return {
}
@@ -16,7 +12,6 @@ def getMetaData():
def register(app):
return { "machine_action": [
BedLevelMachineAction.BedLevelMachineAction(),
- UpgradeFirmwareMachineAction.UpgradeFirmwareMachineAction(),
UMOUpgradeSelection.UMOUpgradeSelection(),
UM2UpgradeSelection.UM2UpgradeSelection()
]}
diff --git a/resources/bundled_packages/cura.json b/resources/bundled_packages/cura.json
index 7107bbe4f0..ad97f3595b 100644
--- a/resources/bundled_packages/cura.json
+++ b/resources/bundled_packages/cura.json
@@ -118,6 +118,23 @@
}
}
},
+ "FirmwareUpdater": {
+ "package_info": {
+ "package_id": "FirmwareUpdater",
+ "package_type": "plugin",
+ "display_name": "Firmware Updater",
+ "description": "Provides a machine actions for updating firmware.",
+ "package_version": "1.0.0",
+ "sdk_version": 5,
+ "website": "https://ultimaker.com",
+ "author": {
+ "author_id": "Ultimaker",
+ "display_name": "Ultimaker B.V.",
+ "email": "plugins@ultimaker.com",
+ "website": "https://ultimaker.com"
+ }
+ }
+ },
"GCodeGzReader": {
"package_info": {
"package_id": "GCodeGzReader",
From c2558f91dd26095ddb5d019f1fa07e1e5b67c1e1 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 21:00:23 +0200
Subject: [PATCH 185/390] Remove UpgradeFirmware as supported machine action...
because the plugin adds itself as a supported action
---
resources/definitions/makeit_pro_l.def.json | 1 -
resources/definitions/makeit_pro_m.def.json | 1 -
resources/definitions/tam.def.json | 1 -
resources/definitions/ultimaker2.def.json | 2 +-
resources/definitions/ultimaker2_extended_plus.def.json | 1 -
resources/definitions/ultimaker2_go.def.json | 1 -
resources/definitions/ultimaker2_plus.def.json | 1 -
resources/definitions/ultimaker_original.def.json | 2 +-
resources/definitions/ultimaker_original_dual.def.json | 2 +-
resources/definitions/ultimaker_original_plus.def.json | 2 +-
resources/definitions/wanhao_d6.def.json | 3 ---
11 files changed, 4 insertions(+), 13 deletions(-)
diff --git a/resources/definitions/makeit_pro_l.def.json b/resources/definitions/makeit_pro_l.def.json
index 2f9173c90e..d40d63f97b 100644
--- a/resources/definitions/makeit_pro_l.def.json
+++ b/resources/definitions/makeit_pro_l.def.json
@@ -8,7 +8,6 @@
"manufacturer": "NA",
"file_formats": "text/x-gcode",
"has_materials": false,
- "supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ],
"machine_extruder_trains":
{
"0": "makeit_l_dual_1st",
diff --git a/resources/definitions/makeit_pro_m.def.json b/resources/definitions/makeit_pro_m.def.json
index 0cd7b42df3..1f0381df86 100644
--- a/resources/definitions/makeit_pro_m.def.json
+++ b/resources/definitions/makeit_pro_m.def.json
@@ -8,7 +8,6 @@
"manufacturer": "NA",
"file_formats": "text/x-gcode",
"has_materials": false,
- "supported_actions": [ "MachineSettingsAction", "UpgradeFirmware" ],
"machine_extruder_trains":
{
"0": "makeit_dual_1st",
diff --git a/resources/definitions/tam.def.json b/resources/definitions/tam.def.json
index 9865abedda..0ed8d657a2 100644
--- a/resources/definitions/tam.def.json
+++ b/resources/definitions/tam.def.json
@@ -10,7 +10,6 @@
"platform": "tam_series1.stl",
"platform_offset": [-580.0, -6.23, 253.5],
"has_materials": false,
- "supported_actions": ["UpgradeFirmware"],
"machine_extruder_trains":
{
"0": "tam_extruder_0"
diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json
index f367558df0..bbe61d49fb 100644
--- a/resources/definitions/ultimaker2.def.json
+++ b/resources/definitions/ultimaker2.def.json
@@ -17,7 +17,7 @@
"preferred_variant_name": "0.4 mm",
"exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white"],
"first_start_actions": ["UM2UpgradeSelection"],
- "supported_actions":["UM2UpgradeSelection", "UpgradeFirmware"],
+ "supported_actions":["UM2UpgradeSelection"],
"machine_extruder_trains":
{
"0": "ultimaker2_extruder_0"
diff --git a/resources/definitions/ultimaker2_extended_plus.def.json b/resources/definitions/ultimaker2_extended_plus.def.json
index c296ecd43e..0242115057 100644
--- a/resources/definitions/ultimaker2_extended_plus.def.json
+++ b/resources/definitions/ultimaker2_extended_plus.def.json
@@ -10,7 +10,6 @@
"file_formats": "text/x-gcode",
"platform": "ultimaker2_platform.obj",
"platform_texture": "Ultimaker2ExtendedPlusbackplate.png",
- "supported_actions": ["UpgradeFirmware"],
"machine_extruder_trains":
{
"0": "ultimaker2_extended_plus_extruder_0"
diff --git a/resources/definitions/ultimaker2_go.def.json b/resources/definitions/ultimaker2_go.def.json
index 5301fd7db9..e2ad2b00a1 100644
--- a/resources/definitions/ultimaker2_go.def.json
+++ b/resources/definitions/ultimaker2_go.def.json
@@ -13,7 +13,6 @@
"platform_texture": "Ultimaker2Gobackplate.png",
"platform_offset": [0, 0, 0],
"first_start_actions": [],
- "supported_actions": ["UpgradeFirmware"],
"machine_extruder_trains":
{
"0": "ultimaker2_go_extruder_0"
diff --git a/resources/definitions/ultimaker2_plus.def.json b/resources/definitions/ultimaker2_plus.def.json
index 45019789bf..bf48353f59 100644
--- a/resources/definitions/ultimaker2_plus.def.json
+++ b/resources/definitions/ultimaker2_plus.def.json
@@ -15,7 +15,6 @@
"has_machine_materials": true,
"has_machine_quality": true,
"first_start_actions": [],
- "supported_actions": ["UpgradeFirmware"],
"machine_extruder_trains":
{
"0": "ultimaker2_plus_extruder_0"
diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json
index bb21e4b82e..4714fc1217 100644
--- a/resources/definitions/ultimaker_original.def.json
+++ b/resources/definitions/ultimaker_original.def.json
@@ -14,7 +14,7 @@
"has_machine_quality": true,
"exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white"],
"first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"],
- "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"],
+ "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"],
"machine_extruder_trains":
{
"0": "ultimaker_original_extruder_0"
diff --git a/resources/definitions/ultimaker_original_dual.def.json b/resources/definitions/ultimaker_original_dual.def.json
index 1ffb6e840b..0dc1cb3d2d 100644
--- a/resources/definitions/ultimaker_original_dual.def.json
+++ b/resources/definitions/ultimaker_original_dual.def.json
@@ -22,7 +22,7 @@
"firmware_file": "MarlinUltimaker-{baudrate}-dual.hex",
"firmware_hbk_file": "MarlinUltimaker-HBK-{baudrate}-dual.hex",
"first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"],
- "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"]
+ "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"]
},
"overrides": {
diff --git a/resources/definitions/ultimaker_original_plus.def.json b/resources/definitions/ultimaker_original_plus.def.json
index 46d95f8028..01523f34b7 100644
--- a/resources/definitions/ultimaker_original_plus.def.json
+++ b/resources/definitions/ultimaker_original_plus.def.json
@@ -12,7 +12,7 @@
"platform_texture": "UltimakerPlusbackplate.png",
"quality_definition": "ultimaker_original",
"first_start_actions": ["UMOCheckup", "BedLevel"],
- "supported_actions": ["UMOCheckup", "BedLevel", "UpgradeFirmware"],
+ "supported_actions": ["UMOCheckup", "BedLevel"],
"machine_extruder_trains":
{
"0": "ultimaker_original_plus_extruder_0"
diff --git a/resources/definitions/wanhao_d6.def.json b/resources/definitions/wanhao_d6.def.json
index 6164f4d016..e269615c4a 100644
--- a/resources/definitions/wanhao_d6.def.json
+++ b/resources/definitions/wanhao_d6.def.json
@@ -18,9 +18,6 @@
0,
-28,
0
- ],
- "supported_actions": [
- "UpgradeFirmware"
]
},
"overrides": {
From 9ac744b9ba33cacf767f9b9ba3873fef3bdb50bf Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 22:00:24 +0200
Subject: [PATCH 186/390] Remove unnecessary import and declaration of i18n in
plugins
---
plugins/3MFWriter/__init__.py | 2 +-
plugins/ChangeLogPlugin/__init__.py | 2 --
plugins/FirmwareUpdateChecker/__init__.py | 4 ----
plugins/MachineSettingsAction/__init__.py | 2 --
plugins/ModelChecker/__init__.py | 5 +----
plugins/MonitorStage/__init__.py | 1 +
plugins/PostProcessingPlugin/__init__.py | 6 +++---
plugins/RemovableDriveOutputDevice/__init__.py | 6 ++----
plugins/SliceInfoPlugin/__init__.py | 7 +++----
plugins/UM3NetworkPrinting/__init__.py | 3 ---
plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py | 3 ---
plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py | 3 ---
plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py | 3 ---
plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py | 3 ---
plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py | 1 -
plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py | 1 -
plugins/XmlMaterialProfile/__init__.py | 3 ---
17 files changed, 11 insertions(+), 44 deletions(-)
diff --git a/plugins/3MFWriter/__init__.py b/plugins/3MFWriter/__init__.py
index 4b8a03888d..eff1648489 100644
--- a/plugins/3MFWriter/__init__.py
+++ b/plugins/3MFWriter/__init__.py
@@ -12,7 +12,7 @@ from . import ThreeMFWorkspaceWriter
from UM.i18n import i18nCatalog
from UM.Platform import Platform
-i18n_catalog = i18nCatalog("uranium")
+i18n_catalog = i18nCatalog("cura")
def getMetaData():
workspace_extension = "3mf"
diff --git a/plugins/ChangeLogPlugin/__init__.py b/plugins/ChangeLogPlugin/__init__.py
index 97d9e411e5..a5452b60c8 100644
--- a/plugins/ChangeLogPlugin/__init__.py
+++ b/plugins/ChangeLogPlugin/__init__.py
@@ -3,8 +3,6 @@
from . import ChangeLog
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
def getMetaData():
return {}
diff --git a/plugins/FirmwareUpdateChecker/__init__.py b/plugins/FirmwareUpdateChecker/__init__.py
index 3fae15e826..892c9c0320 100644
--- a/plugins/FirmwareUpdateChecker/__init__.py
+++ b/plugins/FirmwareUpdateChecker/__init__.py
@@ -1,12 +1,8 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from UM.i18n import i18nCatalog
-
from . import FirmwareUpdateChecker
-i18n_catalog = i18nCatalog("cura")
-
def getMetaData():
return {}
diff --git a/plugins/MachineSettingsAction/__init__.py b/plugins/MachineSettingsAction/__init__.py
index b1c4a75fec..ff80a12551 100644
--- a/plugins/MachineSettingsAction/__init__.py
+++ b/plugins/MachineSettingsAction/__init__.py
@@ -3,8 +3,6 @@
from . import MachineSettingsAction
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
def getMetaData():
return {}
diff --git a/plugins/ModelChecker/__init__.py b/plugins/ModelChecker/__init__.py
index 5f4d443729..dffee21723 100644
--- a/plugins/ModelChecker/__init__.py
+++ b/plugins/ModelChecker/__init__.py
@@ -1,11 +1,8 @@
# Copyright (c) 2018 Ultimaker B.V.
-# This example is released under the terms of the AGPLv3 or higher.
+# Cura is released under the terms of the LGPLv3 or higher.
from . import ModelChecker
-from UM.i18n import i18nCatalog
-i18n_catalog = i18nCatalog("cura")
-
def getMetaData():
return {}
diff --git a/plugins/MonitorStage/__init__.py b/plugins/MonitorStage/__init__.py
index 884d43a8af..bdaf53a36c 100644
--- a/plugins/MonitorStage/__init__.py
+++ b/plugins/MonitorStage/__init__.py
@@ -3,6 +3,7 @@
from . import MonitorStage
+
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
diff --git a/plugins/PostProcessingPlugin/__init__.py b/plugins/PostProcessingPlugin/__init__.py
index 85f1126136..8064d1132a 100644
--- a/plugins/PostProcessingPlugin/__init__.py
+++ b/plugins/PostProcessingPlugin/__init__.py
@@ -2,10 +2,10 @@
# The PostProcessingPlugin is released under the terms of the AGPLv3 or higher.
from . import PostProcessingPlugin
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
+
+
def getMetaData():
return {}
-
+
def register(app):
return {"extension": PostProcessingPlugin.PostProcessingPlugin()}
\ No newline at end of file
diff --git a/plugins/RemovableDriveOutputDevice/__init__.py b/plugins/RemovableDriveOutputDevice/__init__.py
index dc547b7bcc..1758801f8a 100644
--- a/plugins/RemovableDriveOutputDevice/__init__.py
+++ b/plugins/RemovableDriveOutputDevice/__init__.py
@@ -3,12 +3,10 @@
from UM.Platform import Platform
from UM.Logger import Logger
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
+
def getMetaData():
- return {
- }
+ return {}
def register(app):
if Platform.isWindows():
diff --git a/plugins/SliceInfoPlugin/__init__.py b/plugins/SliceInfoPlugin/__init__.py
index 7f1dfa5336..440ca8ec40 100644
--- a/plugins/SliceInfoPlugin/__init__.py
+++ b/plugins/SliceInfoPlugin/__init__.py
@@ -1,12 +1,11 @@
# Copyright (c) 2015 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+
from . import SliceInfo
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
+
def getMetaData():
- return {
- }
+ return {}
def register(app):
return { "extension": SliceInfo.SliceInfo()}
\ No newline at end of file
diff --git a/plugins/UM3NetworkPrinting/__init__.py b/plugins/UM3NetworkPrinting/__init__.py
index 7f2b34223c..e2ad5a2b12 100644
--- a/plugins/UM3NetworkPrinting/__init__.py
+++ b/plugins/UM3NetworkPrinting/__init__.py
@@ -2,9 +2,6 @@
# Cura is released under the terms of the LGPLv3 or higher.
from .src import DiscoverUM3Action
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
-
from .src import UM3OutputDevicePlugin
def getMetaData():
diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py
index 435621ec54..609781ebfe 100644
--- a/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade21to22/__init__.py
@@ -3,9 +3,6 @@
from . import VersionUpgrade21to22
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
-
upgrade = VersionUpgrade21to22.VersionUpgrade21to22()
def getMetaData():
diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py
index fbdbf92a4b..278b660ec1 100644
--- a/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade22to24/__init__.py
@@ -3,9 +3,6 @@
from . import VersionUpgrade
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
-
upgrade = VersionUpgrade.VersionUpgrade22to24()
def getMetaData():
diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py
index 1419325cc1..67aa73233f 100644
--- a/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade25to26/__init__.py
@@ -3,9 +3,6 @@
from . import VersionUpgrade25to26
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
-
upgrade = VersionUpgrade25to26.VersionUpgrade25to26()
def getMetaData():
diff --git a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py
index 79ed5e8b68..0e26ca8bbf 100644
--- a/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade26to27/__init__.py
@@ -3,9 +3,6 @@
from . import VersionUpgrade26to27
-from UM.i18n import i18nCatalog
-catalog = i18nCatalog("cura")
-
upgrade = VersionUpgrade26to27.VersionUpgrade26to27()
def getMetaData():
diff --git a/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py b/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py
index 4faa1290b5..8213f195d5 100644
--- a/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade33to34/__init__.py
@@ -5,7 +5,6 @@ from . import VersionUpgrade33to34
upgrade = VersionUpgrade33to34.VersionUpgrade33to34()
-
def getMetaData():
return {
"version_upgrade": {
diff --git a/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py
index 9d3410e40d..de0fdccb7d 100644
--- a/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py
+++ b/plugins/VersionUpgrade/VersionUpgrade34to35/__init__.py
@@ -5,7 +5,6 @@ from . import VersionUpgrade34to35
upgrade = VersionUpgrade34to35.VersionUpgrade34to35()
-
def getMetaData():
return {
"version_upgrade": {
diff --git a/plugins/XmlMaterialProfile/__init__.py b/plugins/XmlMaterialProfile/__init__.py
index 70a359ee76..e8bde78424 100644
--- a/plugins/XmlMaterialProfile/__init__.py
+++ b/plugins/XmlMaterialProfile/__init__.py
@@ -5,10 +5,7 @@ from . import XmlMaterialProfile
from . import XmlMaterialUpgrader
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
-from UM.i18n import i18nCatalog
-
-catalog = i18nCatalog("cura")
upgrader = XmlMaterialUpgrader.XmlMaterialUpgrader()
From 477862d779b5f590ec16d223e917582579c7972c Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Wed, 3 Oct 2018 23:07:37 +0200
Subject: [PATCH 187/390] Fix code style and unused imports
---
plugins/FirmwareUpdater/__init__.py | 5 ++---
plugins/USBPrinting/__init__.py | 3 ---
plugins/UltimakerMachineActions/__init__.py | 5 ++---
3 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/plugins/FirmwareUpdater/__init__.py b/plugins/FirmwareUpdater/__init__.py
index 58c351a4ea..5a008d7d15 100644
--- a/plugins/FirmwareUpdater/__init__.py
+++ b/plugins/FirmwareUpdater/__init__.py
@@ -4,10 +4,9 @@
from . import FirmwareUpdaterMachineAction
def getMetaData():
- return {
- }
+ return {}
def register(app):
return { "machine_action": [
- FirmwareUpdaterMachineAction.FirmwareUpdaterMachineAction(),
+ FirmwareUpdaterMachineAction.FirmwareUpdaterMachineAction()
]}
diff --git a/plugins/USBPrinting/__init__.py b/plugins/USBPrinting/__init__.py
index 0cb68d3865..075ad2943b 100644
--- a/plugins/USBPrinting/__init__.py
+++ b/plugins/USBPrinting/__init__.py
@@ -2,9 +2,6 @@
# Cura is released under the terms of the LGPLv3 or higher.
from . import USBPrinterOutputDeviceManager
-from PyQt5.QtQml import qmlRegisterSingletonType
-from UM.i18n import i18nCatalog
-i18n_catalog = i18nCatalog("cura")
def getMetaData():
diff --git a/plugins/UltimakerMachineActions/__init__.py b/plugins/UltimakerMachineActions/__init__.py
index 30493536ce..e87949580a 100644
--- a/plugins/UltimakerMachineActions/__init__.py
+++ b/plugins/UltimakerMachineActions/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from . import BedLevelMachineAction
@@ -6,8 +6,7 @@ from . import UMOUpgradeSelection
from . import UM2UpgradeSelection
def getMetaData():
- return {
- }
+ return {}
def register(app):
return { "machine_action": [
From 436860f84167a7544a17a141e987c13a38e420a5 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Thu, 4 Oct 2018 11:36:02 +0200
Subject: [PATCH 188/390] Don't show prime tower shadow if only one extruder is
enabled CURA-5740
---
cura/BuildVolume.py | 30 ++++++++++++++++--------------
1 file changed, 16 insertions(+), 14 deletions(-)
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index 9d2f5c1f90..547c3dae71 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -718,21 +718,23 @@ class BuildVolume(SceneNode):
# Add prime tower location as disallowed area.
if len(used_extruders) > 1: #No prime tower in single-extrusion.
- prime_tower_collision = False
- prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders)
- for extruder_id in prime_tower_areas:
- for prime_tower_area in prime_tower_areas[extruder_id]:
- for area in result_areas[extruder_id]:
- if prime_tower_area.intersectsPolygon(area) is not None:
- prime_tower_collision = True
+
+ if len([x for x in used_extruders if x.isEnabled == True]) > 1: #No prime tower if only one extruder is enabled
+ prime_tower_collision = False
+ prime_tower_areas = self._computeDisallowedAreasPrinted(used_extruders)
+ for extruder_id in prime_tower_areas:
+ for prime_tower_area in prime_tower_areas[extruder_id]:
+ for area in result_areas[extruder_id]:
+ if prime_tower_area.intersectsPolygon(area) is not None:
+ prime_tower_collision = True
+ break
+ if prime_tower_collision: #Already found a collision.
break
- if prime_tower_collision: #Already found a collision.
- break
- if not prime_tower_collision:
- result_areas[extruder_id].extend(prime_tower_areas[extruder_id])
- result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id])
- else:
- self._error_areas.extend(prime_tower_areas[extruder_id])
+ if not prime_tower_collision:
+ result_areas[extruder_id].extend(prime_tower_areas[extruder_id])
+ result_areas_no_brim[extruder_id].extend(prime_tower_areas[extruder_id])
+ else:
+ self._error_areas.extend(prime_tower_areas[extruder_id])
self._has_errors = len(self._error_areas) > 0
From 28dc32adaba8e9bae6361ba06fb0872b4a275530 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Thu, 4 Oct 2018 11:47:51 +0200
Subject: [PATCH 189/390] Fix typing in GenericOutputController
---
cura/PrinterOutput/GenericOutputController.py | 65 ++++++++++---------
1 file changed, 36 insertions(+), 29 deletions(-)
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index c8caa85caf..9434feea62 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import TYPE_CHECKING, Union
+from typing import TYPE_CHECKING, Set, Union, Optional
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
from PyQt5.QtCore import QTimer
@@ -9,27 +9,28 @@ from PyQt5.QtCore import QTimer
if TYPE_CHECKING:
from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
+ from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice
from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel
class GenericOutputController(PrinterOutputController):
- def __init__(self, output_device):
+ def __init__(self, output_device: "PrinterOutputDevice") -> None:
super().__init__(output_device)
self._preheat_bed_timer = QTimer()
self._preheat_bed_timer.setSingleShot(True)
self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished)
- self._preheat_printer = None
+ self._preheat_printer = None #type: Optional[PrinterOutputModel]
self._preheat_hotends_timer = QTimer()
self._preheat_hotends_timer.setSingleShot(True)
self._preheat_hotends_timer.timeout.connect(self._onPreheatHotendsTimerFinished)
- self._preheat_hotends = set()
+ self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
self._output_device.printersChanged.connect(self._onPrintersChanged)
- self._active_printer = None
+ self._active_printer = None #type: Optional[PrinterOutputModel]
- def _onPrintersChanged(self):
+ def _onPrintersChanged(self) -> None:
if self._active_printer:
self._active_printer.stateChanged.disconnect(self._onPrinterStateChanged)
self._active_printer.targetBedTemperatureChanged.disconnect(self._onTargetBedTemperatureChanged)
@@ -43,32 +44,33 @@ class GenericOutputController(PrinterOutputController):
for extruder in self._active_printer.extruders:
extruder.targetHotendTemperatureChanged.connect(self._onTargetHotendTemperatureChanged)
- def _onPrinterStateChanged(self):
- if self._active_printer.state != "idle":
+ def _onPrinterStateChanged(self) -> None:
+ if self._active_printer and self._active_printer.state != "idle":
if self._preheat_bed_timer.isActive():
self._preheat_bed_timer.stop()
- self._preheat_printer.updateIsPreheating(False)
+ if self._preheat_printer:
+ self._preheat_printer.updateIsPreheating(False)
if self._preheat_hotends_timer.isActive():
self._preheat_hotends_timer.stop()
for extruder in self._preheat_hotends:
extruder.updateIsPreheating(False)
- self._preheat_hotends = set()
+ self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
- def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed):
+ def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
self._output_device.sendCommand("G91")
self._output_device.sendCommand("G0 X%s Y%s Z%s F%s" % (x, y, z, speed))
self._output_device.sendCommand("G90")
- def homeHead(self, printer):
+ def homeHead(self, printer: "PrinterOutputModel") -> None:
self._output_device.sendCommand("G28 X Y")
- def homeBed(self, printer):
+ def homeBed(self, printer: "PrinterOutputModel") -> None:
self._output_device.sendCommand("G28 Z")
- def sendRawCommand(self, printer: "PrinterOutputModel", command: str):
+ def sendRawCommand(self, printer: "PrinterOutputModel", command: str) -> None:
self._output_device.sendCommand(command.upper()) #Most printers only understand uppercase g-code commands.
- def setJobState(self, job: "PrintJobOutputModel", state: str):
+ def setJobState(self, job: "PrintJobOutputModel", state: str) -> None:
if state == "pause":
self._output_device.pausePrint()
job.updateState("paused")
@@ -79,15 +81,15 @@ class GenericOutputController(PrinterOutputController):
self._output_device.cancelPrint()
pass
- def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int):
+ def setTargetBedTemperature(self, printer: "PrinterOutputModel", temperature: int) -> None:
self._output_device.sendCommand("M140 S%s" % temperature)
- def _onTargetBedTemperatureChanged(self):
- if self._preheat_bed_timer.isActive() and self._preheat_printer.targetBedTemperature == 0:
+ def _onTargetBedTemperatureChanged(self) -> None:
+ if self._preheat_bed_timer.isActive() and self._preheat_printer and self._preheat_printer.targetBedTemperature == 0:
self._preheat_bed_timer.stop()
self._preheat_printer.updateIsPreheating(False)
- def preheatBed(self, printer: "PrinterOutputModel", temperature, duration):
+ def preheatBed(self, printer: "PrinterOutputModel", temperature, duration) -> None:
try:
temperature = round(temperature) # The API doesn't allow floating point.
duration = round(duration)
@@ -100,21 +102,25 @@ class GenericOutputController(PrinterOutputController):
self._preheat_printer = printer
printer.updateIsPreheating(True)
- def cancelPreheatBed(self, printer: "PrinterOutputModel"):
+ def cancelPreheatBed(self, printer: "PrinterOutputModel") -> None:
self.setTargetBedTemperature(printer, temperature=0)
self._preheat_bed_timer.stop()
printer.updateIsPreheating(False)
- def _onPreheatBedTimerFinished(self):
+ def _onPreheatBedTimerFinished(self) -> None:
+ if not self._preheat_printer:
+ return
self.setTargetBedTemperature(self._preheat_printer, 0)
self._preheat_printer.updateIsPreheating(False)
def setTargetHotendTemperature(self, printer: "PrinterOutputModel", position: int, temperature: Union[int, float]) -> None:
self._output_device.sendCommand("M104 S%s T%s" % (temperature, position))
- def _onTargetHotendTemperatureChanged(self):
+ def _onTargetHotendTemperatureChanged(self) -> None:
if not self._preheat_hotends_timer.isActive():
return
+ if not self._active_printer:
+ return
for extruder in self._active_printer.extruders:
if extruder in self._preheat_hotends and extruder.targetHotendTemperature == 0:
@@ -123,7 +129,7 @@ class GenericOutputController(PrinterOutputController):
if not self._preheat_hotends:
self._preheat_hotends_timer.stop()
- def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration):
+ def preheatHotend(self, extruder: "ExtruderOutputModel", temperature, duration) -> None:
position = extruder.getPosition()
number_of_extruders = len(extruder.getPrinter().extruders)
if position >= number_of_extruders:
@@ -141,7 +147,7 @@ class GenericOutputController(PrinterOutputController):
self._preheat_hotends.add(extruder)
extruder.updateIsPreheating(True)
- def cancelPreheatHotend(self, extruder: "ExtruderOutputModel"):
+ def cancelPreheatHotend(self, extruder: "ExtruderOutputModel") -> None:
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), temperature=0)
if extruder in self._preheat_hotends:
extruder.updateIsPreheating(False)
@@ -149,21 +155,22 @@ class GenericOutputController(PrinterOutputController):
if not self._preheat_hotends and self._preheat_hotends_timer.isActive():
self._preheat_hotends_timer.stop()
- def _onPreheatHotendsTimerFinished(self):
+ def _onPreheatHotendsTimerFinished(self) -> None:
for extruder in self._preheat_hotends:
self.setTargetHotendTemperature(extruder.getPrinter(), extruder.getPosition(), 0)
- self._preheat_hotends = set()
+ self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
# Cancel any ongoing preheating timers, without setting back the temperature to 0
# This can be used eg at the start of a print
- def stopPreheatTimers(self):
+ def stopPreheatTimers(self) -> None:
if self._preheat_hotends_timer.isActive():
for extruder in self._preheat_hotends:
extruder.updateIsPreheating(False)
- self._preheat_hotends = set()
+ self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
self._preheat_hotends_timer.stop()
if self._preheat_bed_timer.isActive():
- self._preheat_printer.updateIsPreheating(False)
+ if self._preheat_printer:
+ self._preheat_printer.updateIsPreheating(False)
self._preheat_bed_timer.stop()
From 5b2dc804cac706537f7daf5bd0d6c24bf4e3b5d8 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Thu, 4 Oct 2018 12:32:42 +0200
Subject: [PATCH 190/390] Fix a crash when adding a printer part of a cluster
---
plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
index 4faa3abc64..4a172b6557 100644
--- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
@@ -39,13 +39,13 @@ class FirmwareUpdaterMachineAction(MachineAction):
CuraApplication.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
def _onOutputDevicesChanged(self) -> None:
- if self._active_output_device:
+ if self._active_output_device and self._active_output_device.activePrinter:
self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.disconnect(self._onControllerCanUpdateFirmwareChanged)
output_devices = CuraApplication.getInstance().getMachineManager().printerOutputDevices
self._active_output_device = output_devices[0] if output_devices else None
- if self._active_output_device:
+ if self._active_output_device and self._active_output_device.activePrinter:
self._active_output_device.activePrinter.getController().canUpdateFirmwareChanged.connect(self._onControllerCanUpdateFirmwareChanged)
self.outputDeviceCanUpdateFirmwareChanged.emit()
From 04bca109ba67404081f069da488832c027a51571 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Thu, 4 Oct 2018 12:48:35 +0200
Subject: [PATCH 191/390] Fix update/upgrade consistency
---
plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
index 4a172b6557..981fb819eb 100644
--- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
@@ -21,7 +21,7 @@ catalog = i18nCatalog("cura")
## Upgrade the firmware of a machine by USB with this action.
class FirmwareUpdaterMachineAction(MachineAction):
def __init__(self) -> None:
- super().__init__("UpgradeFirmware", catalog.i18nc("@action", "Upgrade Firmware"))
+ super().__init__("UpgradeFirmware", catalog.i18nc("@action", "Update Firmware"))
self._qml_url = "FirmwareUpdaterMachineAction.qml"
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
From 110d2daa81e6e28cbfe420974cbeefb4c561e921 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 4 Oct 2018 15:54:22 +0200
Subject: [PATCH 192/390] [CURA-5775] The snaphot-creation of the UFP-writer
should only be called when writing to UFP-files.
---
plugins/UFPWriter/UFPWriter.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py
index d318a0e77d..b3088fc863 100644
--- a/plugins/UFPWriter/UFPWriter.py
+++ b/plugins/UFPWriter/UFPWriter.py
@@ -27,14 +27,13 @@ class UFPWriter(MeshWriter):
MimeTypeDatabase.addMimeType(
MimeType(
- name = "application/x-cura-stl-file",
+ name = "application/x-ufp",
comment = "Cura UFP File",
suffixes = ["ufp"]
)
)
self._snapshot = None
- Application.getInstance().getOutputDeviceManager().writeStarted.connect(self._createSnapshot)
def _createSnapshot(self, *args):
# must be called from the main thread because of OpenGL
@@ -62,6 +61,8 @@ class UFPWriter(MeshWriter):
gcode.write(gcode_textio.getvalue().encode("UTF-8"))
archive.addRelation(virtual_path = "/3D/model.gcode", relation_type = "http://schemas.ultimaker.org/package/2018/relationships/gcode")
+ self._createSnapshot()
+
#Store the thumbnail.
if self._snapshot:
archive.addContentType(extension = "png", mime_type = "image/png")
From 866110d70c4379ab86131b2a031da69bed4c4fe7 Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Thu, 4 Oct 2018 18:03:01 +0200
Subject: [PATCH 193/390] Take into account that can be empty layers below the
model when the setting Remove empty layers is disabled.
The empty layers are skipped if they are at the bottom. Also keeps the
models printed with raft showing correclty.
Contributes to CURA-5768.
---
.../ProcessSlicedLayersJob.py | 33 +++++++++++++------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py
index 3953625c7e..594bf3a43e 100644
--- a/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py
+++ b/plugins/CuraEngineBackend/ProcessSlicedLayersJob.py
@@ -2,6 +2,7 @@
#Cura is released under the terms of the LGPLv3 or higher.
import gc
+import sys
from UM.Job import Job
from UM.Application import Application
@@ -95,23 +96,35 @@ class ProcessSlicedLayersJob(Job):
layer_count = len(self._layers)
# Find the minimum layer number
+ # When disabling the remove empty first layers setting, the minimum layer number will be a positive
+ # value. In that case the first empty layers will be discarded and start processing layers from the
+ # first layer with data.
# When using a raft, the raft layers are sent as layers < 0. Instead of allowing layers < 0, we
- # instead simply offset all other layers so the lowest layer is always 0. It could happens that
- # the first raft layer has value -8 but there are just 4 raft (negative) layers.
- min_layer_number = 0
+ # simply offset all other layers so the lowest layer is always 0. It could happens that the first
+ # raft layer has value -8 but there are just 4 raft (negative) layers.
+ min_layer_number = sys.maxsize
negative_layers = 0
for layer in self._layers:
- if layer.id < min_layer_number:
- min_layer_number = layer.id
- if layer.id < 0:
- negative_layers += 1
+ if layer.repeatedMessageCount("path_segment") > 0:
+ if layer.id < min_layer_number:
+ min_layer_number = layer.id
+ if layer.id < 0:
+ negative_layers += 1
current_layer = 0
for layer in self._layers:
- # Negative layers are offset by the minimum layer number, but the positive layers are just
- # offset by the number of negative layers so there is no layer gap between raft and model
- abs_layer_number = layer.id + abs(min_layer_number) if layer.id < 0 else layer.id + negative_layers
+ # If the layer is below the minimum, it means that there is no data, so that we don't create a layer
+ # data. However, if there are empty layers in between, we compute them.
+ if layer.id < min_layer_number:
+ continue
+
+ # Layers are offset by the minimum layer number. In case the raft (negative layers) is being used,
+ # then the absolute layer number is adjusted by removing the empty layers that can be in between raft
+ # and the model
+ abs_layer_number = layer.id - min_layer_number
+ if layer.id >= 0 and negative_layers != 0:
+ abs_layer_number += (min_layer_number + negative_layers)
layer_data.addLayer(abs_layer_number)
this_layer = layer_data.getLayer(abs_layer_number)
From 8eca0c574ac60ec5b4995837676461eb8eeced85 Mon Sep 17 00:00:00 2001
From: Sacha Telgenhof Oude Koehorst
Date: Fri, 5 Oct 2018 13:25:15 +0900
Subject: [PATCH 194/390] Altered the mesh bed so the Ender-3 logo is more
noticeable.
---
resources/meshes/creality_ender3_platform.stl | 25156 ++++++++--------
1 file changed, 12578 insertions(+), 12578 deletions(-)
diff --git a/resources/meshes/creality_ender3_platform.stl b/resources/meshes/creality_ender3_platform.stl
index e4f9b1fd89..2b6540bdd3 100644
--- a/resources/meshes/creality_ender3_platform.stl
+++ b/resources/meshes/creality_ender3_platform.stl
@@ -1,1673 +1,1673 @@
solid OpenSCAD_Model
facet normal 0 0 1
outer loop
- vertex 19.3736 -10.7173 -0.1
- vertex 19.6895 -11.13 -0.1
- vertex 19.6819 -11.0243 -0.1
+ vertex 19.3736 -10.7173 -0.2
+ vertex 19.6895 -11.13 -0.2
+ vertex 19.6819 -11.0243 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4763 -10.749 -0.1
- vertex 19.6819 -11.0243 -0.1
- vertex 19.6583 -10.9333 -0.1
+ vertex 19.4763 -10.749 -0.2
+ vertex 19.6819 -11.0243 -0.2
+ vertex 19.6583 -10.9333 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.557 -10.7956 -0.1
- vertex 19.6583 -10.9333 -0.1
- vertex 19.6172 -10.8571 -0.1
+ vertex 19.557 -10.7956 -0.2
+ vertex 19.6583 -10.9333 -0.2
+ vertex 19.6172 -10.8571 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6895 -11.13 -0.1
- vertex 19.3736 -10.7173 -0.1
- vertex 19.6598 -11.2975 -0.1
+ vertex 19.6895 -11.13 -0.2
+ vertex 19.3736 -10.7173 -0.2
+ vertex 19.6598 -11.2975 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6583 -10.9333 -0.1
- vertex 19.557 -10.7956 -0.1
- vertex 19.4763 -10.749 -0.1
+ vertex 19.6583 -10.9333 -0.2
+ vertex 19.557 -10.7956 -0.2
+ vertex 19.4763 -10.749 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6819 -11.0243 -0.1
- vertex 19.4763 -10.749 -0.1
- vertex 19.3736 -10.7173 -0.1
+ vertex 19.6819 -11.0243 -0.2
+ vertex 19.4763 -10.749 -0.2
+ vertex 19.3736 -10.7173 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.0963 -10.6988 -0.1
- vertex 19.6598 -11.2975 -0.1
- vertex 19.3736 -10.7173 -0.1
+ vertex 19.0963 -10.6988 -0.2
+ vertex 19.6598 -11.2975 -0.2
+ vertex 19.3736 -10.7173 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6598 -11.2975 -0.1
- vertex 19.0963 -10.6988 -0.1
- vertex 19.5653 -11.6083 -0.1
+ vertex 19.6598 -11.2975 -0.2
+ vertex 19.0963 -10.6988 -0.2
+ vertex 19.5653 -11.6083 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.7132 -10.7406 -0.1
- vertex 19.5653 -11.6083 -0.1
- vertex 19.0963 -10.6988 -0.1
+ vertex 18.7132 -10.7406 -0.2
+ vertex 19.5653 -11.6083 -0.2
+ vertex 19.0963 -10.6988 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.2126 -10.843 -0.1
- vertex 19.5653 -11.6083 -0.1
- vertex 18.7132 -10.7406 -0.1
+ vertex 18.2126 -10.843 -0.2
+ vertex 19.5653 -11.6083 -0.2
+ vertex 18.7132 -10.7406 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.5653 -11.6083 -0.1
- vertex 18.2126 -10.843 -0.1
- vertex 19.1479 -12.7477 -0.1
+ vertex 19.5653 -11.6083 -0.2
+ vertex 18.2126 -10.843 -0.2
+ vertex 19.1479 -12.7477 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 17.5824 -11.0066 -0.1
- vertex 19.1479 -12.7477 -0.1
- vertex 18.2126 -10.843 -0.1
+ vertex 17.5824 -11.0066 -0.2
+ vertex 19.1479 -12.7477 -0.2
+ vertex 18.2126 -10.843 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 16.811 -11.2316 -0.1
- vertex 19.1479 -12.7477 -0.1
- vertex 17.5824 -11.0066 -0.1
+ vertex 16.811 -11.2316 -0.2
+ vertex 19.1479 -12.7477 -0.2
+ vertex 17.5824 -11.0066 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.1479 -12.7477 -0.1
- vertex 16.811 -11.2316 -0.1
- vertex 18.3699 -14.7241 -0.1
+ vertex 19.1479 -12.7477 -0.2
+ vertex 16.811 -11.2316 -0.2
+ vertex 18.3699 -14.7241 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.1363 -14.3424 -0.1
- vertex 18.3699 -14.7241 -0.1
- vertex 16.811 -11.2316 -0.1
+ vertex 14.1363 -14.3424 -0.2
+ vertex 18.3699 -14.7241 -0.2
+ vertex 16.811 -11.2316 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.0967 -14.5873 -0.1
- vertex 18.3699 -14.7241 -0.1
- vertex 14.1362 -14.4186 -0.1
+ vertex 14.0967 -14.5873 -0.2
+ vertex 18.3699 -14.7241 -0.2
+ vertex 14.1362 -14.4186 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.3699 -14.7241 -0.1
- vertex 14.1363 -14.3424 -0.1
- vertex 14.1362 -14.4186 -0.1
+ vertex 18.3699 -14.7241 -0.2
+ vertex 14.1363 -14.3424 -0.2
+ vertex 14.1362 -14.4186 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.7217 -12.1451 -0.1
- vertex 14.1363 -14.3424 -0.1
- vertex 16.811 -11.2316 -0.1
+ vertex 13.7217 -12.1451 -0.2
+ vertex 14.1363 -14.3424 -0.2
+ vertex 16.811 -11.2316 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.1363 -14.3424 -0.1
- vertex 13.7217 -12.1451 -0.1
- vertex 14.0881 -14.3092 -0.1
+ vertex 14.1363 -14.3424 -0.2
+ vertex 13.7217 -12.1451 -0.2
+ vertex 14.0881 -14.3092 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.0881 -14.3092 -0.1
- vertex 13.7217 -12.1451 -0.1
- vertex 14.0003 -14.2763 -0.1
+ vertex 14.0881 -14.3092 -0.2
+ vertex 13.7217 -12.1451 -0.2
+ vertex 14.0003 -14.2763 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.0003 -14.2763 -0.1
- vertex 13.7217 -12.1451 -0.1
- vertex 13.7222 -14.2141 -0.1
+ vertex 14.0003 -14.2763 -0.2
+ vertex 13.7217 -12.1451 -0.2
+ vertex 13.7222 -14.2141 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.4022 -12.26 -0.1
- vertex 13.7222 -14.2141 -0.1
- vertex 13.7217 -12.1451 -0.1
+ vertex 13.4022 -12.26 -0.2
+ vertex 13.7222 -14.2141 -0.2
+ vertex 13.7217 -12.1451 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.1153 -12.4148 -0.1
- vertex 13.7222 -14.2141 -0.1
- vertex 13.4022 -12.26 -0.1
+ vertex 13.1153 -12.4148 -0.2
+ vertex 13.7222 -14.2141 -0.2
+ vertex 13.4022 -12.26 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.7222 -14.2141 -0.1
- vertex 13.1153 -12.4148 -0.1
- vertex 13.3346 -14.1615 -0.1
+ vertex 13.7222 -14.2141 -0.2
+ vertex 13.1153 -12.4148 -0.2
+ vertex 13.3346 -14.1615 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.8673 -12.6015 -0.1
- vertex 13.3346 -14.1615 -0.1
- vertex 13.1153 -12.4148 -0.1
+ vertex 12.8673 -12.6015 -0.2
+ vertex 13.3346 -14.1615 -0.2
+ vertex 13.1153 -12.4148 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.6645 -12.8127 -0.1
- vertex 13.3346 -14.1615 -0.1
- vertex 12.8673 -12.6015 -0.1
+ vertex 12.6645 -12.8127 -0.2
+ vertex 13.3346 -14.1615 -0.2
+ vertex 12.8673 -12.6015 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.513 -13.0405 -0.1
- vertex 13.3346 -14.1615 -0.1
- vertex 12.6645 -12.8127 -0.1
+ vertex 12.513 -13.0405 -0.2
+ vertex 13.3346 -14.1615 -0.2
+ vertex 12.6645 -12.8127 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.3346 -14.1615 -0.1
- vertex 12.513 -13.0405 -0.1
- vertex 12.8698 -14.1239 -0.1
+ vertex 13.3346 -14.1615 -0.2
+ vertex 12.513 -13.0405 -0.2
+ vertex 12.8698 -14.1239 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.419 -13.2773 -0.1
- vertex 12.8698 -14.1239 -0.1
- vertex 12.513 -13.0405 -0.1
+ vertex 12.419 -13.2773 -0.2
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.513 -13.0405 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.3889 -13.5153 -0.1
- vertex 12.8698 -14.1239 -0.1
- vertex 12.419 -13.2773 -0.1
+ vertex 12.3889 -13.5153 -0.2
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.419 -13.2773 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 12.3997 -13.6324 -0.1
- vertex 12.8698 -14.1239 -0.1
- vertex 12.3889 -13.5153 -0.1
+ vertex 12.3997 -13.6324 -0.2
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.3889 -13.5153 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 12.5013 -13.8876 -0.1
- vertex 12.8698 -14.1239 -0.1
- vertex 12.3997 -13.6324 -0.1
+ vertex 12.5013 -13.8876 -0.2
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.3997 -13.6324 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.8698 -14.1239 -0.1
- vertex 12.6087 -14.0056 -0.1
- vertex 12.7363 -14.0885 -0.1
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.6087 -14.0056 -0.2
+ vertex 12.7363 -14.0885 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.8698 -14.1239 -0.1
- vertex 12.5013 -13.8876 -0.1
- vertex 12.6087 -14.0056 -0.1
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.5013 -13.8876 -0.2
+ vertex 12.6087 -14.0056 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.5013 -13.8876 -0.1
- vertex 12.3997 -13.6324 -0.1
- vertex 12.4287 -13.7469 -0.1
+ vertex 12.5013 -13.8876 -0.2
+ vertex 12.3997 -13.6324 -0.2
+ vertex 12.4287 -13.7469 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.9185 -15.1524 -0.1
- vertex 18.3699 -14.7241 -0.1
- vertex 14.0967 -14.5873 -0.1
+ vertex 13.9185 -15.1524 -0.2
+ vertex 18.3699 -14.7241 -0.2
+ vertex 14.0967 -14.5873 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.3699 -14.7241 -0.1
- vertex 13.9185 -15.1524 -0.1
- vertex 17.1638 -17.7131 -0.1
+ vertex 18.3699 -14.7241 -0.2
+ vertex 13.9185 -15.1524 -0.2
+ vertex 17.1638 -17.7131 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.6397 -15.9386 -0.1
- vertex 17.1638 -17.7131 -0.1
- vertex 13.9185 -15.1524 -0.1
+ vertex 13.6397 -15.9386 -0.2
+ vertex 17.1638 -17.7131 -0.2
+ vertex 13.9185 -15.1524 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.2984 -16.8469 -0.1
- vertex 17.1638 -17.7131 -0.1
- vertex 13.6397 -15.9386 -0.1
+ vertex 13.2984 -16.8469 -0.2
+ vertex 17.1638 -17.7131 -0.2
+ vertex 13.6397 -15.9386 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.5806 -18.6336 -0.1
- vertex 17.1638 -17.7131 -0.1
- vertex 13.2984 -16.8469 -0.1
+ vertex 12.5806 -18.6336 -0.2
+ vertex 17.1638 -17.7131 -0.2
+ vertex 13.2984 -16.8469 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.2803 -19.3138 -0.1
- vertex 17.1638 -17.7131 -0.1
- vertex 12.5806 -18.6336 -0.1
+ vertex 12.2803 -19.3138 -0.2
+ vertex 17.1638 -17.7131 -0.2
+ vertex 12.5806 -18.6336 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.1638 -17.7131 -0.1
- vertex 12.2803 -19.3138 -0.1
- vertex 14.5952 -23.8342 -0.1
+ vertex 17.1638 -17.7131 -0.2
+ vertex 12.2803 -19.3138 -0.2
+ vertex 14.5952 -23.8342 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.0697 -19.7199 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 12.2803 -19.3138 -0.1
+ vertex 12.0697 -19.7199 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 12.2803 -19.3138 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.0185 -19.7802 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 12.0697 -19.7199 -0.1
+ vertex 12.0185 -19.7802 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 12.0697 -19.7199 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.9563 -19.8175 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 12.0185 -19.7802 -0.1
+ vertex 11.9563 -19.8175 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 12.0185 -19.7802 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 10.1598 -23.7848 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 10.1807 -23.3758 -0.1
+ vertex 10.1598 -23.7848 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 10.1807 -23.3758 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 10.1103 -22.7594 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 11.9563 -19.8175 -0.1
+ vertex 10.1103 -22.7594 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 11.9563 -19.8175 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.1103 -22.7594 -0.1
- vertex 11.9563 -19.8175 -0.1
- vertex 11.881 -19.8313 -0.1
+ vertex 10.1103 -22.7594 -0.2
+ vertex 11.9563 -19.8175 -0.2
+ vertex 11.881 -19.8313 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.99008 -22.4166 -0.1
- vertex 11.881 -19.8313 -0.1
- vertex 11.7902 -19.8211 -0.1
+ vertex 9.99008 -22.4166 -0.2
+ vertex 11.881 -19.8313 -0.2
+ vertex 11.7902 -19.8211 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.81668 -22.1284 -0.1
- vertex 11.7902 -19.8211 -0.1
- vertex 11.5538 -19.7266 -0.1
+ vertex 9.81668 -22.1284 -0.2
+ vertex 11.7902 -19.8211 -0.2
+ vertex 11.5538 -19.7266 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.95745 -24.7805 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 10.0892 -24.2416 -0.1
+ vertex 9.95745 -24.7805 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 10.0892 -24.2416 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.59484 -21.895 -0.1
- vertex 11.5538 -19.7266 -0.1
- vertex 11.2294 -19.5302 -0.1
+ vertex 9.59484 -21.895 -0.2
+ vertex 11.5538 -19.7266 -0.2
+ vertex 11.2294 -19.5302 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.5952 -23.8342 -0.1
- vertex 9.95745 -24.7805 -0.1
- vertex 12.8097 -28.1484 -0.1
+ vertex 14.5952 -23.8342 -0.2
+ vertex 9.95745 -24.7805 -0.2
+ vertex 12.8097 -28.1484 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.46723 -21.7989 -0.1
- vertex 11.2294 -19.5302 -0.1
- vertex 11.0203 -19.4009 -0.1
+ vertex 9.46723 -21.7989 -0.2
+ vertex 11.2294 -19.5302 -0.2
+ vertex 11.0203 -19.4009 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 9.75283 -25.4359 -0.1
- vertex 12.8097 -28.1484 -0.1
- vertex 9.95745 -24.7805 -0.1
+ vertex 9.75283 -25.4359 -0.2
+ vertex 12.8097 -28.1484 -0.2
+ vertex 9.95745 -24.7805 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.46723 -21.7989 -0.1
- vertex 11.0203 -19.4009 -0.1
- vertex 10.8168 -19.3006 -0.1
+ vertex 9.46723 -21.7989 -0.2
+ vertex 11.0203 -19.4009 -0.2
+ vertex 10.8168 -19.3006 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 9.46376 -26.2422 -0.1
- vertex 12.8097 -28.1484 -0.1
- vertex 9.75283 -25.4359 -0.1
+ vertex 9.46376 -26.2422 -0.2
+ vertex 12.8097 -28.1484 -0.2
+ vertex 9.75283 -25.4359 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 9.07864 -27.2338 -0.1
- vertex 12.8097 -28.1484 -0.1
- vertex 9.46376 -26.2422 -0.1
+ vertex 9.07864 -27.2338 -0.2
+ vertex 12.8097 -28.1484 -0.2
+ vertex 9.46376 -26.2422 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.8097 -28.1484 -0.1
- vertex 9.07864 -27.2338 -0.1
- vertex 12.0447 -30.0547 -0.1
+ vertex 12.8097 -28.1484 -0.2
+ vertex 9.07864 -27.2338 -0.2
+ vertex 12.0447 -30.0547 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.46723 -21.7989 -0.1
- vertex 10.8168 -19.3006 -0.1
- vertex 10.602 -19.227 -0.1
+ vertex 9.46723 -21.7989 -0.2
+ vertex 10.8168 -19.3006 -0.2
+ vertex 10.602 -19.227 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.6919 -34.4621 -0.1
- vertex 12.2468 -35.1875 -0.1
- vertex 12.2214 -34.9805 -0.1
+ vertex 11.6919 -34.4621 -0.2
+ vertex 12.2468 -35.1875 -0.2
+ vertex 12.2214 -34.9805 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.6919 -34.4621 -0.1
- vertex 12.2214 -34.9805 -0.1
- vertex 12.1503 -34.7994 -0.1
+ vertex 11.6919 -34.4621 -0.2
+ vertex 12.2214 -34.9805 -0.2
+ vertex 12.1503 -34.7994 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.4668 -34.4353 -0.1
- vertex 12.2468 -35.1875 -0.1
- vertex 11.6919 -34.4621 -0.1
+ vertex 11.4668 -34.4353 -0.2
+ vertex 12.2468 -35.1875 -0.2
+ vertex 11.6919 -34.4621 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.2239 -35.4151 -0.1
- vertex 11.4668 -34.4353 -0.1
- vertex 12.1496 -35.6584 -0.1
+ vertex 12.2239 -35.4151 -0.2
+ vertex 11.4668 -34.4353 -0.2
+ vertex 12.1496 -35.6584 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8827 -34.5351 -0.1
- vertex 12.1503 -34.7994 -0.1
- vertex 12.0364 -34.6492 -0.1
+ vertex 11.8827 -34.5351 -0.2
+ vertex 12.1503 -34.7994 -0.2
+ vertex 12.0364 -34.6492 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.2468 -35.1875 -0.1
- vertex 11.4668 -34.4353 -0.1
- vertex 12.2239 -35.4151 -0.1
+ vertex 12.2468 -35.1875 -0.2
+ vertex 11.4668 -34.4353 -0.2
+ vertex 12.2239 -35.4151 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.1503 -34.7994 -0.1
- vertex 11.8827 -34.5351 -0.1
- vertex 11.6919 -34.4621 -0.1
+ vertex 12.1503 -34.7994 -0.2
+ vertex 11.8827 -34.5351 -0.2
+ vertex 11.6919 -34.4621 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.1496 -35.6584 -0.1
- vertex 11.4668 -34.4353 -0.1
- vertex 12.0956 -35.7642 -0.1
+ vertex 12.1496 -35.6584 -0.2
+ vertex 11.4668 -34.4353 -0.2
+ vertex 12.0956 -35.7642 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.0956 -35.7642 -0.1
- vertex 11.4668 -34.4353 -0.1
- vertex 12.0181 -35.8752 -0.1
+ vertex 12.0956 -35.7642 -0.2
+ vertex 11.4668 -34.4353 -0.2
+ vertex 12.0181 -35.8752 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.143 -34.4171 -0.1
- vertex 12.0181 -35.8752 -0.1
- vertex 11.4668 -34.4353 -0.1
+ vertex 11.143 -34.4171 -0.2
+ vertex 12.0181 -35.8752 -0.2
+ vertex 11.4668 -34.4353 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.0181 -35.8752 -0.1
- vertex 11.143 -34.4171 -0.1
- vertex 11.8034 -36.1064 -0.1
+ vertex 12.0181 -35.8752 -0.2
+ vertex 11.143 -34.4171 -0.2
+ vertex 11.8034 -36.1064 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8034 -36.1064 -0.1
- vertex 11.143 -34.4171 -0.1
- vertex 11.5264 -36.339 -0.1
+ vertex 11.8034 -36.1064 -0.2
+ vertex 11.143 -34.4171 -0.2
+ vertex 11.5264 -36.339 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.016 -34.3915 -0.1
- vertex 11.5264 -36.339 -0.1
- vertex 11.143 -34.4171 -0.1
+ vertex 11.016 -34.3915 -0.2
+ vertex 11.5264 -36.339 -0.2
+ vertex 11.143 -34.4171 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5264 -36.339 -0.1
- vertex 11.016 -34.3915 -0.1
- vertex 11.208 -36.5595 -0.1
+ vertex 11.5264 -36.339 -0.2
+ vertex 11.016 -34.3915 -0.2
+ vertex 11.208 -36.5595 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9123 -34.3507 -0.1
- vertex 11.208 -36.5595 -0.1
- vertex 11.016 -34.3915 -0.1
+ vertex 10.9123 -34.3507 -0.2
+ vertex 11.208 -36.5595 -0.2
+ vertex 11.016 -34.3915 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9123 -34.3507 -0.1
- vertex 10.8691 -36.7549 -0.1
- vertex 11.208 -36.5595 -0.1
+ vertex 10.9123 -34.3507 -0.2
+ vertex 10.8691 -36.7549 -0.2
+ vertex 11.208 -36.5595 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.5307 -36.9119 -0.1
- vertex 10.9123 -34.3507 -0.1
- vertex 10.832 -34.2912 -0.1
+ vertex 10.5307 -36.9119 -0.2
+ vertex 10.9123 -34.3507 -0.2
+ vertex 10.832 -34.2912 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.71926 -37.0921 -0.1
- vertex 10.832 -34.2912 -0.1
- vertex 10.775 -34.2097 -0.1
+ vertex 9.71926 -37.0921 -0.2
+ vertex 10.832 -34.2912 -0.2
+ vertex 10.775 -34.2097 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.94379 -37.3156 -0.1
- vertex 10.775 -34.2097 -0.1
- vertex 10.7415 -34.103 -0.1
+ vertex 8.94379 -37.3156 -0.2
+ vertex 10.775 -34.2097 -0.2
+ vertex 10.7415 -34.103 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.63949 -32.8952 -0.1
- vertex 10.7415 -34.103 -0.1
- vertex 10.7315 -33.9677 -0.1
+ vertex 6.63949 -32.8952 -0.2
+ vertex 10.7415 -34.103 -0.2
+ vertex 10.7315 -33.9677 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9123 -34.3507 -0.1
- vertex 10.5307 -36.9119 -0.1
- vertex 10.8691 -36.7549 -0.1
+ vertex 10.9123 -34.3507 -0.2
+ vertex 10.5307 -36.9119 -0.2
+ vertex 10.8691 -36.7549 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.97377 -29.9101 -0.1
- vertex 12.0447 -30.0547 -0.1
- vertex 9.07864 -27.2338 -0.1
+ vertex 7.97377 -29.9101 -0.2
+ vertex 12.0447 -30.0547 -0.2
+ vertex 9.07864 -27.2338 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.46723 -21.7989 -0.1
- vertex 10.602 -19.227 -0.1
- vertex 10.3591 -19.1774 -0.1
+ vertex 9.46723 -21.7989 -0.2
+ vertex 10.602 -19.227 -0.2
+ vertex 10.3591 -19.1774 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.0892 -24.2416 -0.1
- vertex 14.5952 -23.8342 -0.1
- vertex 10.1598 -23.7848 -0.1
+ vertex 10.0892 -24.2416 -0.2
+ vertex 14.5952 -23.8342 -0.2
+ vertex 10.1598 -23.7848 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.0447 -30.0547 -0.1
- vertex 7.97377 -29.9101 -0.1
- vertex 11.5005 -31.4602 -0.1
+ vertex 12.0447 -30.0547 -0.2
+ vertex 7.97377 -29.9101 -0.2
+ vertex 11.5005 -31.4602 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.5952 -23.8342 -0.1
- vertex 10.149 -22.9513 -0.1
- vertex 10.1807 -23.3758 -0.1
+ vertex 14.5952 -23.8342 -0.2
+ vertex 10.149 -22.9513 -0.2
+ vertex 10.1807 -23.3758 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.5952 -23.8342 -0.1
- vertex 10.1103 -22.7594 -0.1
- vertex 10.149 -22.9513 -0.1
+ vertex 14.5952 -23.8342 -0.2
+ vertex 10.1103 -22.7594 -0.2
+ vertex 10.149 -22.9513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.46723 -21.7989 -0.1
- vertex 10.3591 -19.1774 -0.1
- vertex 10.0711 -19.1496 -0.1
+ vertex 9.46723 -21.7989 -0.2
+ vertex 10.3591 -19.1774 -0.2
+ vertex 10.0711 -19.1496 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.881 -19.8313 -0.1
- vertex 10.0571 -22.5812 -0.1
- vertex 10.1103 -22.7594 -0.1
+ vertex 11.881 -19.8313 -0.2
+ vertex 10.0571 -22.5812 -0.2
+ vertex 10.1103 -22.7594 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.881 -19.8313 -0.1
- vertex 9.99008 -22.4166 -0.1
- vertex 10.0571 -22.5812 -0.1
+ vertex 11.881 -19.8313 -0.2
+ vertex 9.99008 -22.4166 -0.2
+ vertex 10.0571 -22.5812 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.7902 -19.8211 -0.1
- vertex 9.90973 -22.2656 -0.1
- vertex 9.99008 -22.4166 -0.1
+ vertex 11.7902 -19.8211 -0.2
+ vertex 9.90973 -22.2656 -0.2
+ vertex 9.99008 -22.4166 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.7902 -19.8211 -0.1
- vertex 9.81668 -22.1284 -0.1
- vertex 9.90973 -22.2656 -0.1
+ vertex 11.7902 -19.8211 -0.2
+ vertex 9.81668 -22.1284 -0.2
+ vertex 9.90973 -22.2656 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.18157 -21.6481 -0.1
- vertex 10.0711 -19.1496 -0.1
- vertex 9.72114 -19.1409 -0.1
+ vertex 9.18157 -21.6481 -0.2
+ vertex 10.0711 -19.1496 -0.2
+ vertex 9.72114 -19.1409 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5538 -19.7266 -0.1
- vertex 9.71152 -22.0048 -0.1
- vertex 9.81668 -22.1284 -0.1
+ vertex 11.5538 -19.7266 -0.2
+ vertex 9.71152 -22.0048 -0.2
+ vertex 9.81668 -22.1284 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5538 -19.7266 -0.1
- vertex 9.59484 -21.895 -0.1
- vertex 9.71152 -22.0048 -0.1
+ vertex 11.5538 -19.7266 -0.2
+ vertex 9.59484 -21.895 -0.2
+ vertex 9.71152 -22.0048 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.2294 -19.5302 -0.1
- vertex 9.46723 -21.7989 -0.1
- vertex 9.59484 -21.895 -0.1
+ vertex 11.2294 -19.5302 -0.2
+ vertex 9.46723 -21.7989 -0.2
+ vertex 9.59484 -21.895 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.0711 -19.1496 -0.1
- vertex 9.18157 -21.6481 -0.1
- vertex 9.46723 -21.7989 -0.1
+ vertex 10.0711 -19.1496 -0.2
+ vertex 9.18157 -21.6481 -0.2
+ vertex 9.46723 -21.7989 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.72114 -19.1409 -0.1
- vertex 8.85925 -21.5524 -0.1
- vertex 9.18157 -21.6481 -0.1
+ vertex 9.72114 -19.1409 -0.2
+ vertex 8.85925 -21.5524 -0.2
+ vertex 9.18157 -21.6481 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 8.76754 -19.1712 -0.1
- vertex 8.85925 -21.5524 -0.1
- vertex 9.72114 -19.1409 -0.1
+ vertex 8.76754 -19.1712 -0.2
+ vertex 8.85925 -21.5524 -0.2
+ vertex 9.72114 -19.1409 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.76754 -19.1712 -0.1
- vertex 8.50498 -21.5121 -0.1
- vertex 8.85925 -21.5524 -0.1
+ vertex 8.76754 -19.1712 -0.2
+ vertex 8.50498 -21.5121 -0.2
+ vertex 8.85925 -21.5524 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.80885 -19.2424 -0.1
- vertex 8.50498 -21.5121 -0.1
- vertex 8.76754 -19.1712 -0.1
+ vertex 7.80885 -19.2424 -0.2
+ vertex 8.50498 -21.5121 -0.2
+ vertex 8.76754 -19.1712 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.50498 -21.5121 -0.1
- vertex 7.80885 -19.2424 -0.1
- vertex 8.12348 -21.5274 -0.1
+ vertex 8.50498 -21.5121 -0.2
+ vertex 7.80885 -19.2424 -0.2
+ vertex 8.12348 -21.5274 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.42262 -19.2967 -0.1
- vertex 8.12348 -21.5274 -0.1
- vertex 7.80885 -19.2424 -0.1
+ vertex 7.42262 -19.2967 -0.2
+ vertex 8.12348 -21.5274 -0.2
+ vertex 7.80885 -19.2424 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.12348 -21.5274 -0.1
- vertex 7.42262 -19.2967 -0.1
- vertex 7.71946 -21.5983 -0.1
+ vertex 8.12348 -21.5274 -0.2
+ vertex 7.42262 -19.2967 -0.2
+ vertex 7.71946 -21.5983 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.07441 -19.3694 -0.1
- vertex 7.71946 -21.5983 -0.1
- vertex 7.42262 -19.2967 -0.1
+ vertex 7.07441 -19.3694 -0.2
+ vertex 7.71946 -21.5983 -0.2
+ vertex 7.42262 -19.2967 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.74616 -19.4649 -0.1
- vertex 7.71946 -21.5983 -0.1
- vertex 7.07441 -19.3694 -0.1
+ vertex 6.74616 -19.4649 -0.2
+ vertex 7.71946 -21.5983 -0.2
+ vertex 7.07441 -19.3694 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.71946 -21.5983 -0.1
- vertex 6.74616 -19.4649 -0.1
- vertex 7.29763 -21.7251 -0.1
+ vertex 7.71946 -21.5983 -0.2
+ vertex 6.74616 -19.4649 -0.2
+ vertex 7.29763 -21.7251 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.41984 -19.5879 -0.1
- vertex 7.29763 -21.7251 -0.1
- vertex 6.74616 -19.4649 -0.1
+ vertex 6.41984 -19.5879 -0.2
+ vertex 7.29763 -21.7251 -0.2
+ vertex 6.74616 -19.4649 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.07737 -19.7427 -0.1
- vertex 7.29763 -21.7251 -0.1
- vertex 6.41984 -19.5879 -0.1
+ vertex 6.07737 -19.7427 -0.2
+ vertex 7.29763 -21.7251 -0.2
+ vertex 6.41984 -19.5879 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.29763 -21.7251 -0.1
- vertex 6.07737 -19.7427 -0.1
- vertex 6.8627 -21.9079 -0.1
+ vertex 7.29763 -21.7251 -0.2
+ vertex 6.07737 -19.7427 -0.2
+ vertex 6.8627 -21.9079 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 5.70074 -19.9339 -0.1
- vertex 6.8627 -21.9079 -0.1
- vertex 6.07737 -19.7427 -0.1
+ vertex 5.70074 -19.9339 -0.2
+ vertex 6.8627 -21.9079 -0.2
+ vertex 6.07737 -19.7427 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.8627 -21.9079 -0.1
- vertex 5.70074 -19.9339 -0.1
- vertex 6.41939 -22.1469 -0.1
+ vertex 6.8627 -21.9079 -0.2
+ vertex 5.70074 -19.9339 -0.2
+ vertex 6.41939 -22.1469 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 5.20766 -20.2058 -0.1
- vertex 6.41939 -22.1469 -0.1
- vertex 5.70074 -19.9339 -0.1
+ vertex 5.20766 -20.2058 -0.2
+ vertex 6.41939 -22.1469 -0.2
+ vertex 5.70074 -19.9339 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.41939 -22.1469 -0.1
- vertex 5.20766 -20.2058 -0.1
- vertex 5.97241 -22.4422 -0.1
+ vertex 6.41939 -22.1469 -0.2
+ vertex 5.20766 -20.2058 -0.2
+ vertex 5.97241 -22.4422 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.71458 -20.5006 -0.1
- vertex 5.97241 -22.4422 -0.1
- vertex 5.20766 -20.2058 -0.1
+ vertex 4.71458 -20.5006 -0.2
+ vertex 5.97241 -22.4422 -0.2
+ vertex 5.20766 -20.2058 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.22328 -20.8168 -0.1
- vertex 5.97241 -22.4422 -0.1
- vertex 4.71458 -20.5006 -0.1
+ vertex 4.22328 -20.8168 -0.2
+ vertex 5.97241 -22.4422 -0.2
+ vertex 4.71458 -20.5006 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.97241 -22.4422 -0.1
- vertex 4.22328 -20.8168 -0.1
- vertex 5.52647 -22.794 -0.1
+ vertex 5.97241 -22.4422 -0.2
+ vertex 4.22328 -20.8168 -0.2
+ vertex 5.52647 -22.794 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 3.73558 -21.1527 -0.1
- vertex 5.52647 -22.794 -0.1
- vertex 4.22328 -20.8168 -0.1
+ vertex 3.73558 -21.1527 -0.2
+ vertex 5.52647 -22.794 -0.2
+ vertex 4.22328 -20.8168 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.52647 -22.794 -0.1
- vertex 3.73558 -21.1527 -0.1
- vertex 5.08628 -23.2024 -0.1
+ vertex 5.52647 -22.794 -0.2
+ vertex 3.73558 -21.1527 -0.2
+ vertex 5.08628 -23.2024 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 3.25328 -21.5067 -0.1
- vertex 5.08628 -23.2024 -0.1
- vertex 3.73558 -21.1527 -0.1
+ vertex 3.25328 -21.5067 -0.2
+ vertex 5.08628 -23.2024 -0.2
+ vertex 3.73558 -21.1527 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.08628 -23.2024 -0.1
- vertex 3.25328 -21.5067 -0.1
- vertex 4.45147 -23.8871 -0.1
+ vertex 5.08628 -23.2024 -0.2
+ vertex 3.25328 -21.5067 -0.2
+ vertex 4.45147 -23.8871 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 2.77819 -21.8771 -0.1
- vertex 4.45147 -23.8871 -0.1
- vertex 3.25328 -21.5067 -0.1
+ vertex 2.77819 -21.8771 -0.2
+ vertex 4.45147 -23.8871 -0.2
+ vertex 3.25328 -21.5067 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 2.31211 -22.2625 -0.1
- vertex 4.45147 -23.8871 -0.1
- vertex 2.77819 -21.8771 -0.1
+ vertex 2.31211 -22.2625 -0.2
+ vertex 4.45147 -23.8871 -0.2
+ vertex 2.77819 -21.8771 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.45147 -23.8871 -0.1
- vertex 2.31211 -22.2625 -0.1
- vertex 3.85887 -24.6213 -0.1
+ vertex 4.45147 -23.8871 -0.2
+ vertex 2.31211 -22.2625 -0.2
+ vertex 3.85887 -24.6213 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.85684 -22.661 -0.1
- vertex 3.85887 -24.6213 -0.1
- vertex 2.31211 -22.2625 -0.1
+ vertex 1.85684 -22.661 -0.2
+ vertex 3.85887 -24.6213 -0.2
+ vertex 2.31211 -22.2625 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.4142 -23.0712 -0.1
- vertex 3.85887 -24.6213 -0.1
- vertex 1.85684 -22.661 -0.1
+ vertex 1.4142 -23.0712 -0.2
+ vertex 3.85887 -24.6213 -0.2
+ vertex 1.85684 -22.661 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.85887 -24.6213 -0.1
- vertex 1.4142 -23.0712 -0.1
- vertex 3.31148 -25.3951 -0.1
+ vertex 3.85887 -24.6213 -0.2
+ vertex 1.4142 -23.0712 -0.2
+ vertex 3.31148 -25.3951 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.985991 -23.4913 -0.1
- vertex 3.31148 -25.3951 -0.1
- vertex 1.4142 -23.0712 -0.1
+ vertex 0.985991 -23.4913 -0.2
+ vertex 3.31148 -25.3951 -0.2
+ vertex 1.4142 -23.0712 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.574011 -23.9198 -0.1
- vertex 3.31148 -25.3951 -0.1
- vertex 0.985991 -23.4913 -0.1
+ vertex 0.574011 -23.9198 -0.2
+ vertex 3.31148 -25.3951 -0.2
+ vertex 0.985991 -23.4913 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.31148 -25.3951 -0.1
- vertex 0.574011 -23.9198 -0.1
- vertex 2.81229 -26.1986 -0.1
+ vertex 3.31148 -25.3951 -0.2
+ vertex 0.574011 -23.9198 -0.2
+ vertex 2.81229 -26.1986 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.18007 -24.355 -0.1
- vertex 2.81229 -26.1986 -0.1
- vertex 0.574011 -23.9198 -0.1
+ vertex 0.18007 -24.355 -0.2
+ vertex 2.81229 -26.1986 -0.2
+ vertex 0.574011 -23.9198 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -0.194025 -24.7953 -0.1
- vertex 2.81229 -26.1986 -0.1
- vertex 0.18007 -24.355 -0.1
+ vertex -0.194025 -24.7953 -0.2
+ vertex 2.81229 -26.1986 -0.2
+ vertex 0.18007 -24.355 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.81229 -26.1986 -0.1
- vertex -0.194025 -24.7953 -0.1
- vertex 2.36428 -27.0218 -0.1
+ vertex 2.81229 -26.1986 -0.2
+ vertex -0.194025 -24.7953 -0.2
+ vertex 2.36428 -27.0218 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -0.546472 -25.2391 -0.1
- vertex 2.36428 -27.0218 -0.1
- vertex -0.194025 -24.7953 -0.1
+ vertex -0.546472 -25.2391 -0.2
+ vertex 2.36428 -27.0218 -0.2
+ vertex -0.194025 -24.7953 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -0.875463 -25.6847 -0.1
- vertex 2.36428 -27.0218 -0.1
- vertex -0.546472 -25.2391 -0.1
+ vertex -0.875463 -25.6847 -0.2
+ vertex 2.36428 -27.0218 -0.2
+ vertex -0.546472 -25.2391 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.36428 -27.0218 -0.1
- vertex -0.875463 -25.6847 -0.1
- vertex 1.97046 -27.8549 -0.1
+ vertex 2.36428 -27.0218 -0.2
+ vertex -0.875463 -25.6847 -0.2
+ vertex 1.97046 -27.8549 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -1.17919 -26.1306 -0.1
- vertex 1.97046 -27.8549 -0.1
- vertex -0.875463 -25.6847 -0.1
+ vertex -1.17919 -26.1306 -0.2
+ vertex 1.97046 -27.8549 -0.2
+ vertex -0.875463 -25.6847 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -1.45361 -26.5684 -0.1
- vertex 1.97046 -27.8549 -0.1
- vertex -1.17919 -26.1306 -0.1
+ vertex -1.45361 -26.5684 -0.2
+ vertex 1.97046 -27.8549 -0.2
+ vertex -1.17919 -26.1306 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5005 -31.4602 -0.1
- vertex 7.97377 -29.9101 -0.1
- vertex 11.1661 -32.3709 -0.1
+ vertex 11.5005 -31.4602 -0.2
+ vertex 7.97377 -29.9101 -0.2
+ vertex 11.1661 -32.3709 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.44603 -31.1479 -0.1
- vertex 11.1661 -32.3709 -0.1
- vertex 7.97377 -29.9101 -0.1
+ vertex 7.44603 -31.1479 -0.2
+ vertex 11.1661 -32.3709 -0.2
+ vertex 7.97377 -29.9101 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.1661 -32.3709 -0.1
- vertex 7.44603 -31.1479 -0.1
- vertex 10.9267 -33.0747 -0.1
+ vertex 11.1661 -32.3709 -0.2
+ vertex 7.44603 -31.1479 -0.2
+ vertex 10.9267 -33.0747 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.00854 -32.1311 -0.1
- vertex 10.9267 -33.0747 -0.1
- vertex 7.44603 -31.1479 -0.1
+ vertex 7.00854 -32.1311 -0.2
+ vertex 10.9267 -33.0747 -0.2
+ vertex 7.44603 -31.1479 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9267 -33.0747 -0.1
- vertex 7.00854 -32.1311 -0.1
- vertex 10.7819 -33.5982 -0.1
+ vertex 10.9267 -33.0747 -0.2
+ vertex 7.00854 -32.1311 -0.2
+ vertex 10.7819 -33.5982 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.7819 -33.5982 -0.1
- vertex 7.00854 -32.1311 -0.1
- vertex 10.7449 -33.8005 -0.1
+ vertex 10.7819 -33.5982 -0.2
+ vertex 7.00854 -32.1311 -0.2
+ vertex 10.7449 -33.8005 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.63949 -32.8952 -0.1
- vertex 10.7449 -33.8005 -0.1
- vertex 7.00854 -32.1311 -0.1
+ vertex 6.63949 -32.8952 -0.2
+ vertex 10.7449 -33.8005 -0.2
+ vertex 7.00854 -32.1311 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.7449 -33.8005 -0.1
- vertex 6.63949 -32.8952 -0.1
- vertex 10.7315 -33.9677 -0.1
+ vertex 10.7449 -33.8005 -0.2
+ vertex 6.63949 -32.8952 -0.2
+ vertex 10.7315 -33.9677 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.7415 -34.103 -0.1
- vertex 6.63949 -32.8952 -0.1
- vertex 6.31707 -33.4759 -0.1
+ vertex 10.7415 -34.103 -0.2
+ vertex 6.63949 -32.8952 -0.2
+ vertex 6.31707 -33.4759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.832 -34.2912 -0.1
- vertex 9.93892 -37.0575 -0.1
- vertex 10.2137 -37.0171 -0.1
+ vertex 10.832 -34.2912 -0.2
+ vertex 9.93892 -37.0575 -0.2
+ vertex 10.2137 -37.0171 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.832 -34.2912 -0.1
- vertex 10.2137 -37.0171 -0.1
- vertex 10.5307 -36.9119 -0.1
+ vertex 10.832 -34.2912 -0.2
+ vertex 10.2137 -37.0171 -0.2
+ vertex 10.5307 -36.9119 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.832 -34.2912 -0.1
- vertex 9.71926 -37.0921 -0.1
- vertex 9.93892 -37.0575 -0.1
+ vertex 10.832 -34.2912 -0.2
+ vertex 9.71926 -37.0921 -0.2
+ vertex 9.93892 -37.0575 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.775 -34.2097 -0.1
- vertex 9.37163 -37.1827 -0.1
- vertex 9.71926 -37.0921 -0.1
+ vertex 10.775 -34.2097 -0.2
+ vertex 9.37163 -37.1827 -0.2
+ vertex 9.71926 -37.0921 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 8.94379 -37.3156 -0.1
- vertex 10.7415 -34.103 -0.1
- vertex 6.31707 -33.4759 -0.1
+ vertex 8.94379 -37.3156 -0.2
+ vertex 10.7415 -34.103 -0.2
+ vertex 6.31707 -33.4759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.775 -34.2097 -0.1
- vertex 8.94379 -37.3156 -0.1
- vertex 9.37163 -37.1827 -0.1
+ vertex 10.775 -34.2097 -0.2
+ vertex 8.94379 -37.3156 -0.2
+ vertex 9.37163 -37.1827 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.01946 -33.9088 -0.1
- vertex 8.94379 -37.3156 -0.1
- vertex 6.31707 -33.4759 -0.1
+ vertex 6.01946 -33.9088 -0.2
+ vertex 8.94379 -37.3156 -0.2
+ vertex 6.31707 -33.4759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.94379 -37.3156 -0.1
- vertex 6.01946 -33.9088 -0.1
- vertex 8.4835 -37.477 -0.1
+ vertex 8.94379 -37.3156 -0.2
+ vertex 6.01946 -33.9088 -0.2
+ vertex 8.4835 -37.477 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 5.87315 -34.0811 -0.1
- vertex 8.4835 -37.477 -0.1
- vertex 6.01946 -33.9088 -0.1
+ vertex 5.87315 -34.0811 -0.2
+ vertex 8.4835 -37.477 -0.2
+ vertex 6.01946 -33.9088 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 5.72486 -34.2297 -0.1
- vertex 8.4835 -37.477 -0.1
- vertex 5.87315 -34.0811 -0.1
+ vertex 5.72486 -34.2297 -0.2
+ vertex 8.4835 -37.477 -0.2
+ vertex 5.87315 -34.0811 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.4835 -37.477 -0.1
- vertex 5.72486 -34.2297 -0.1
- vertex 7.35232 -37.8908 -0.1
+ vertex 8.4835 -37.477 -0.2
+ vertex 5.72486 -34.2297 -0.2
+ vertex 7.35232 -37.8908 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 5.41146 -34.4742 -0.1
- vertex 7.35232 -37.8908 -0.1
- vertex 5.72486 -34.2297 -0.1
+ vertex 5.41146 -34.4742 -0.2
+ vertex 7.35232 -37.8908 -0.2
+ vertex 5.72486 -34.2297 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.69132 -37.3222 -0.1
- vertex 7.35232 -37.8908 -0.1
- vertex 5.41146 -34.4742 -0.1
+ vertex 4.69132 -37.3222 -0.2
+ vertex 7.35232 -37.8908 -0.2
+ vertex 5.41146 -34.4742 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.35232 -37.8908 -0.1
- vertex 4.69132 -37.3222 -0.1
- vertex 6.47346 -38.1927 -0.1
+ vertex 7.35232 -37.8908 -0.2
+ vertex 4.69132 -37.3222 -0.2
+ vertex 6.47346 -38.1927 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 4.72035 -37.4346 -0.1
- vertex 6.47346 -38.1927 -0.1
- vertex 4.69132 -37.3222 -0.1
+ vertex 4.72035 -37.4346 -0.2
+ vertex 6.47346 -38.1927 -0.2
+ vertex 4.69132 -37.3222 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.47346 -38.1927 -0.1
- vertex 4.72035 -37.4346 -0.1
- vertex 5.81563 -38.3852 -0.1
+ vertex 6.47346 -38.1927 -0.2
+ vertex 4.72035 -37.4346 -0.2
+ vertex 5.81563 -38.3852 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 4.74716 -37.8041 -0.1
- vertex 5.81563 -38.3852 -0.1
- vertex 4.72035 -37.4346 -0.1
+ vertex 4.74716 -37.8041 -0.2
+ vertex 5.81563 -38.3852 -0.2
+ vertex 4.72035 -37.4346 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.69132 -37.3222 -0.1
- vertex 5.41146 -34.4742 -0.1
- vertex 5.05744 -34.678 -0.1
+ vertex 4.69132 -37.3222 -0.2
+ vertex 5.41146 -34.4742 -0.2
+ vertex 5.05744 -34.678 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.55983 -38.4413 -0.1
- vertex 4.74716 -37.8041 -0.1
- vertex 5.34756 -38.4712 -0.1
+ vertex 5.55983 -38.4413 -0.2
+ vertex 4.74716 -37.8041 -0.2
+ vertex 5.34756 -38.4712 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 4.76904 -38.117 -0.1
- vertex 5.34756 -38.4712 -0.1
- vertex 4.74716 -37.8041 -0.1
+ vertex 4.76904 -38.117 -0.2
+ vertex 5.34756 -38.4712 -0.2
+ vertex 4.74716 -37.8041 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.34756 -38.4712 -0.1
- vertex 4.76904 -38.117 -0.1
- vertex 5.17491 -38.475 -0.1
+ vertex 5.34756 -38.4712 -0.2
+ vertex 4.76904 -38.117 -0.2
+ vertex 5.17491 -38.475 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.17491 -38.475 -0.1
- vertex 4.76904 -38.117 -0.1
- vertex 5.03796 -38.4533 -0.1
+ vertex 5.17491 -38.475 -0.2
+ vertex 4.76904 -38.117 -0.2
+ vertex 5.03796 -38.4533 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.03796 -38.4533 -0.1
- vertex 4.80226 -38.2378 -0.1
- vertex 4.93281 -38.4063 -0.1
+ vertex 5.03796 -38.4533 -0.2
+ vertex 4.80226 -38.2378 -0.2
+ vertex 4.93281 -38.4063 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.93281 -38.4063 -0.1
- vertex 4.80226 -38.2378 -0.1
- vertex 4.85555 -38.3343 -0.1
+ vertex 4.93281 -38.4063 -0.2
+ vertex 4.80226 -38.2378 -0.2
+ vertex 4.85555 -38.3343 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 4.80226 -38.2378 -0.1
- vertex 5.03796 -38.4533 -0.1
- vertex 4.76904 -38.117 -0.1
+ vertex 4.80226 -38.2378 -0.2
+ vertex 5.03796 -38.4533 -0.2
+ vertex 4.76904 -38.117 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.81563 -38.3852 -0.1
- vertex 4.74716 -37.8041 -0.1
- vertex 5.55983 -38.4413 -0.1
+ vertex 5.81563 -38.3852 -0.2
+ vertex 4.74716 -37.8041 -0.2
+ vertex 5.55983 -38.4413 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.05744 -34.678 -0.1
- vertex 4.65588 -37.2809 -0.1
- vertex 4.69132 -37.3222 -0.1
+ vertex 5.05744 -34.678 -0.2
+ vertex 4.65588 -37.2809 -0.2
+ vertex 4.69132 -37.3222 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.59905 -34.8756 -0.1
- vertex 4.65588 -37.2809 -0.1
- vertex 5.05744 -34.678 -0.1
+ vertex 4.59905 -34.8756 -0.2
+ vertex 4.65588 -37.2809 -0.2
+ vertex 5.05744 -34.678 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.12685 -35.011 -0.1
- vertex 4.65588 -37.2809 -0.1
- vertex 4.59905 -34.8756 -0.1
+ vertex 4.12685 -35.011 -0.2
+ vertex 4.65588 -37.2809 -0.2
+ vertex 4.59905 -34.8756 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 3.65273 -35.0844 -0.1
- vertex 4.65588 -37.2809 -0.1
- vertex 4.12685 -35.011 -0.1
+ vertex 3.65273 -35.0844 -0.2
+ vertex 4.65588 -37.2809 -0.2
+ vertex 4.12685 -35.011 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.65588 -37.2809 -0.1
- vertex 3.65273 -35.0844 -0.1
- vertex 4.26446 -37.4494 -0.1
+ vertex 4.65588 -37.2809 -0.2
+ vertex 3.65273 -35.0844 -0.2
+ vertex 4.26446 -37.4494 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 3.18861 -35.0966 -0.1
- vertex 4.26446 -37.4494 -0.1
- vertex 3.65273 -35.0844 -0.1
+ vertex 3.18861 -35.0966 -0.2
+ vertex 4.26446 -37.4494 -0.2
+ vertex 3.65273 -35.0844 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.26446 -37.4494 -0.1
- vertex 3.18861 -35.0966 -0.1
- vertex 3.45158 -37.8545 -0.1
+ vertex 4.26446 -37.4494 -0.2
+ vertex 3.18861 -35.0966 -0.2
+ vertex 3.45158 -37.8545 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.7464 -35.0478 -0.1
- vertex 3.45158 -37.8545 -0.1
- vertex 3.18861 -35.0966 -0.1
+ vertex 2.7464 -35.0478 -0.2
+ vertex 3.45158 -37.8545 -0.2
+ vertex 3.18861 -35.0966 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.45158 -37.8545 -0.1
- vertex 2.7464 -35.0478 -0.1
- vertex 3.20396 -37.9704 -0.1
+ vertex 3.45158 -37.8545 -0.2
+ vertex 2.7464 -35.0478 -0.2
+ vertex 3.20396 -37.9704 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.20396 -37.9704 -0.1
- vertex 2.7464 -35.0478 -0.1
- vertex 2.93102 -38.0768 -0.1
+ vertex 3.20396 -37.9704 -0.2
+ vertex 2.7464 -35.0478 -0.2
+ vertex 2.93102 -38.0768 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.53723 -35.0007 -0.1
- vertex 2.93102 -38.0768 -0.1
- vertex 2.7464 -35.0478 -0.1
+ vertex 2.53723 -35.0007 -0.2
+ vertex 2.93102 -38.0768 -0.2
+ vertex 2.7464 -35.0478 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.32439 -38.26 -0.1
- vertex 2.53723 -35.0007 -0.1
- vertex 2.33801 -34.9386 -0.1
+ vertex 2.32439 -38.26 -0.2
+ vertex 2.53723 -35.0007 -0.2
+ vertex 2.33801 -34.9386 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.53723 -35.0007 -0.1
- vertex 2.32439 -38.26 -0.1
- vertex 2.93102 -38.0768 -0.1
+ vertex 2.53723 -35.0007 -0.2
+ vertex 2.32439 -38.26 -0.2
+ vertex 2.93102 -38.0768 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.66207 -38.4009 -0.1
- vertex 2.33801 -34.9386 -0.1
- vertex 2.15022 -34.8616 -0.1
+ vertex 1.66207 -38.4009 -0.2
+ vertex 2.33801 -34.9386 -0.2
+ vertex 2.15022 -34.8616 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.66207 -38.4009 -0.1
- vertex 2.15022 -34.8616 -0.1
- vertex 1.97535 -34.7696 -0.1
+ vertex 1.66207 -38.4009 -0.2
+ vertex 2.15022 -34.8616 -0.2
+ vertex 1.97535 -34.7696 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.974434 -38.4962 -0.1
- vertex 1.97535 -34.7696 -0.1
- vertex 1.8149 -34.6627 -0.1
+ vertex 0.974434 -38.4962 -0.2
+ vertex 1.97535 -34.7696 -0.2
+ vertex 1.8149 -34.6627 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.291868 -38.543 -0.1
- vertex 1.8149 -34.6627 -0.1
- vertex 1.67035 -34.5411 -0.1
+ vertex 0.291868 -38.543 -0.2
+ vertex 1.8149 -34.6627 -0.2
+ vertex 1.67035 -34.5411 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.33801 -34.9386 -0.1
- vertex 1.66207 -38.4009 -0.1
- vertex 2.32439 -38.26 -0.1
+ vertex 2.33801 -34.9386 -0.2
+ vertex 1.66207 -38.4009 -0.2
+ vertex 2.32439 -38.26 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.355246 -38.538 -0.1
- vertex 1.67035 -34.5411 -0.1
- vertex 1.50339 -34.3603 -0.1
+ vertex -0.355246 -38.538 -0.2
+ vertex 1.67035 -34.5411 -0.2
+ vertex 1.50339 -34.3603 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.66982 -37.4742 -0.1
- vertex 1.50339 -34.3603 -0.1
- vertex 1.35782 -34.1559 -0.1
+ vertex -2.66982 -37.4742 -0.2
+ vertex 1.50339 -34.3603 -0.2
+ vertex 1.35782 -34.1559 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.25661 -36.6145 -0.1
- vertex 1.35782 -34.1559 -0.1
- vertex 1.23329 -33.9292 -0.1
+ vertex -3.25661 -36.6145 -0.2
+ vertex 1.35782 -34.1559 -0.2
+ vertex 1.23329 -33.9292 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.68783 -35.5721 -0.1
- vertex 1.23329 -33.9292 -0.1
- vertex 1.1294 -33.6813 -0.1
+ vertex -3.68783 -35.5721 -0.2
+ vertex 1.23329 -33.9292 -0.2
+ vertex 1.1294 -33.6813 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.87516 -34.8013 -0.1
- vertex 1.1294 -33.6813 -0.1
- vertex 1.04578 -33.4136 -0.1
+ vertex -3.87516 -34.8013 -0.2
+ vertex 1.1294 -33.6813 -0.2
+ vertex 1.04578 -33.4136 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.97277 -33.9877 -0.1
- vertex 1.04578 -33.4136 -0.1
- vertex 0.982074 -33.1272 -0.1
+ vertex -3.97277 -33.9877 -0.2
+ vertex 1.04578 -33.4136 -0.2
+ vertex 0.982074 -33.1272 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.97535 -34.7696 -0.1
- vertex 0.974434 -38.4962 -0.1
- vertex 1.66207 -38.4009 -0.1
+ vertex 1.97535 -34.7696 -0.2
+ vertex 0.974434 -38.4962 -0.2
+ vertex 1.66207 -38.4009 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.97004 -33.2395 -0.1
- vertex 0.982074 -33.1272 -0.1
- vertex 0.937893 -32.8234 -0.1
+ vertex -3.97004 -33.2395 -0.2
+ vertex 0.982074 -33.1272 -0.2
+ vertex 0.937893 -32.8234 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.8527 -32.4651 -0.1
- vertex 0.937893 -32.8234 -0.1
- vertex 0.912865 -32.5034 -0.1
+ vertex -3.8527 -32.4651 -0.2
+ vertex 0.937893 -32.8234 -0.2
+ vertex 0.912865 -32.5034 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.75417 -32.0301 -0.1
- vertex 0.912865 -32.5034 -0.1
- vertex 0.906618 -32.1685 -0.1
+ vertex -3.75417 -32.0301 -0.2
+ vertex 0.912865 -32.5034 -0.2
+ vertex 0.906618 -32.1685 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.97046 -27.8549 -0.1
- vertex -1.45361 -26.5684 -0.1
- vertex 1.63381 -28.6878 -0.1
+ vertex 1.97046 -27.8549 -0.2
+ vertex -1.45361 -26.5684 -0.2
+ vertex 1.63381 -28.6878 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -1.72295 -27.0315 -0.1
- vertex 1.63381 -28.6878 -0.1
- vertex -1.45361 -26.5684 -0.1
+ vertex -1.72295 -27.0315 -0.2
+ vertex 1.63381 -28.6878 -0.2
+ vertex -1.45361 -26.5684 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -2.23947 -28.0146 -0.1
- vertex 1.63381 -28.6878 -0.1
- vertex -1.72295 -27.0315 -0.1
+ vertex -2.23947 -28.0146 -0.2
+ vertex 1.63381 -28.6878 -0.2
+ vertex -1.72295 -27.0315 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.63381 -28.6878 -0.1
- vertex -2.23947 -28.0146 -0.1
- vertex 1.35733 -29.5107 -0.1
+ vertex 1.63381 -28.6878 -0.2
+ vertex -2.23947 -28.0146 -0.2
+ vertex 1.35733 -29.5107 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -2.71481 -29.043 -0.1
- vertex 1.35733 -29.5107 -0.1
- vertex -2.23947 -28.0146 -0.1
+ vertex -2.71481 -29.043 -0.2
+ vertex 1.35733 -29.5107 -0.2
+ vertex -2.23947 -28.0146 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.35733 -29.5107 -0.1
- vertex -2.71481 -29.043 -0.1
- vertex 1.144 -30.3137 -0.1
+ vertex 1.35733 -29.5107 -0.2
+ vertex -2.71481 -29.043 -0.2
+ vertex 1.144 -30.3137 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.144 -30.3137 -0.1
- vertex -2.71481 -29.043 -0.1
- vertex 0.99682 -31.0867 -0.1
+ vertex 1.144 -30.3137 -0.2
+ vertex -2.71481 -29.043 -0.2
+ vertex 0.99682 -31.0867 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -3.135 -30.0798 -0.1
- vertex 0.99682 -31.0867 -0.1
- vertex -2.71481 -29.043 -0.1
+ vertex -3.135 -30.0798 -0.2
+ vertex 0.99682 -31.0867 -0.2
+ vertex -2.71481 -29.043 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.99682 -31.0867 -0.1
- vertex -3.135 -30.0798 -0.1
- vertex 0.918778 -31.8199 -0.1
+ vertex 0.99682 -31.0867 -0.2
+ vertex -3.135 -30.0798 -0.2
+ vertex 0.918778 -31.8199 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -3.4861 -31.0878 -0.1
- vertex 0.918778 -31.8199 -0.1
- vertex -3.135 -30.0798 -0.1
+ vertex -3.4861 -31.0878 -0.2
+ vertex 0.918778 -31.8199 -0.2
+ vertex -3.135 -30.0798 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.918778 -31.8199 -0.1
- vertex -3.4861 -31.0878 -0.1
- vertex 0.906618 -32.1685 -0.1
+ vertex 0.918778 -31.8199 -0.2
+ vertex -3.4861 -31.0878 -0.2
+ vertex 0.906618 -32.1685 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -3.75417 -32.0301 -0.1
- vertex 0.906618 -32.1685 -0.1
- vertex -3.4861 -31.0878 -0.1
+ vertex -3.75417 -32.0301 -0.2
+ vertex 0.906618 -32.1685 -0.2
+ vertex -3.4861 -31.0878 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.912865 -32.5034 -0.1
- vertex -3.75417 -32.0301 -0.1
- vertex -3.8527 -32.4651 -0.1
+ vertex 0.912865 -32.5034 -0.2
+ vertex -3.75417 -32.0301 -0.2
+ vertex -3.8527 -32.4651 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.937893 -32.8234 -0.1
- vertex -3.8527 -32.4651 -0.1
- vertex -3.92523 -32.8697 -0.1
+ vertex 0.937893 -32.8234 -0.2
+ vertex -3.8527 -32.4651 -0.2
+ vertex -3.92523 -32.8697 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.937893 -32.8234 -0.1
- vertex -3.92523 -32.8697 -0.1
- vertex -3.97004 -33.2395 -0.1
+ vertex 0.937893 -32.8234 -0.2
+ vertex -3.92523 -32.8697 -0.2
+ vertex -3.97004 -33.2395 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.04578 -33.4136 -0.1
- vertex -3.97277 -33.9877 -0.1
- vertex -3.93569 -34.3989 -0.1
+ vertex 1.04578 -33.4136 -0.2
+ vertex -3.97277 -33.9877 -0.2
+ vertex -3.93569 -34.3989 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.04578 -33.4136 -0.1
- vertex -3.93569 -34.3989 -0.1
- vertex -3.87516 -34.8013 -0.1
+ vertex 1.04578 -33.4136 -0.2
+ vertex -3.93569 -34.3989 -0.2
+ vertex -3.87516 -34.8013 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.1294 -33.6813 -0.1
- vertex -3.87516 -34.8013 -0.1
- vertex -3.79219 -35.193 -0.1
+ vertex 1.1294 -33.6813 -0.2
+ vertex -3.87516 -34.8013 -0.2
+ vertex -3.79219 -35.193 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.8149 -34.6627 -0.1
- vertex 0.291868 -38.543 -0.1
- vertex 0.974434 -38.4962 -0.1
+ vertex 1.8149 -34.6627 -0.2
+ vertex 0.291868 -38.543 -0.2
+ vertex 0.974434 -38.4962 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.23329 -33.9292 -0.1
- vertex -3.56309 -35.9367 -0.1
- vertex -3.41901 -36.2848 -0.1
+ vertex 1.23329 -33.9292 -0.2
+ vertex -3.56309 -35.9367 -0.2
+ vertex -3.41901 -36.2848 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.23329 -33.9292 -0.1
- vertex -3.41901 -36.2848 -0.1
- vertex -3.25661 -36.6145 -0.1
+ vertex 1.23329 -33.9292 -0.2
+ vertex -3.41901 -36.2848 -0.2
+ vertex -3.25661 -36.6145 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.35782 -34.1559 -0.1
- vertex -3.25661 -36.6145 -0.1
- vertex -3.07693 -36.924 -0.1
+ vertex 1.35782 -34.1559 -0.2
+ vertex -3.25661 -36.6145 -0.2
+ vertex -3.07693 -36.924 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.35782 -34.1559 -0.1
- vertex -3.07693 -36.924 -0.1
- vertex -2.88099 -37.2112 -0.1
+ vertex 1.35782 -34.1559 -0.2
+ vertex -3.07693 -36.924 -0.2
+ vertex -2.88099 -37.2112 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.35782 -34.1559 -0.1
- vertex -2.88099 -37.2112 -0.1
- vertex -2.66982 -37.4742 -0.1
+ vertex 1.35782 -34.1559 -0.2
+ vertex -2.88099 -37.2112 -0.2
+ vertex -2.66982 -37.4742 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.50339 -34.3603 -0.1
- vertex -2.20592 -37.9202 -0.1
- vertex -0.936529 -38.478 -0.1
+ vertex 1.50339 -34.3603 -0.2
+ vertex -2.20592 -37.9202 -0.2
+ vertex -0.936529 -38.478 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.19299 -38.4265 -0.1
- vertex -2.20592 -37.9202 -0.1
- vertex -1.4216 -38.36 -0.1
+ vertex -1.19299 -38.4265 -0.2
+ vertex -2.20592 -37.9202 -0.2
+ vertex -1.4216 -38.36 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.69347 -38.2465 -0.1
- vertex -2.20592 -37.9202 -0.1
- vertex -1.95525 -38.0993 -0.1
+ vertex -1.69347 -38.2465 -0.2
+ vertex -2.20592 -37.9202 -0.2
+ vertex -1.95525 -38.0993 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.4216 -38.36 -0.1
- vertex -2.20592 -37.9202 -0.1
- vertex -1.69347 -38.2465 -0.1
+ vertex -1.4216 -38.36 -0.2
+ vertex -2.20592 -37.9202 -0.2
+ vertex -1.69347 -38.2465 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.936529 -38.478 -0.1
- vertex -2.20592 -37.9202 -0.1
- vertex -1.19299 -38.4265 -0.1
+ vertex -0.936529 -38.478 -0.2
+ vertex -2.20592 -37.9202 -0.2
+ vertex -1.19299 -38.4265 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.50339 -34.3603 -0.1
- vertex -2.44446 -37.7112 -0.1
- vertex -2.20592 -37.9202 -0.1
+ vertex 1.50339 -34.3603 -0.2
+ vertex -2.44446 -37.7112 -0.2
+ vertex -2.20592 -37.9202 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.50339 -34.3603 -0.1
- vertex -0.936529 -38.478 -0.1
- vertex -0.355246 -38.538 -0.1
+ vertex 1.50339 -34.3603 -0.2
+ vertex -0.936529 -38.478 -0.2
+ vertex -0.355246 -38.538 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.50339 -34.3603 -0.1
- vertex -2.66982 -37.4742 -0.1
- vertex -2.44446 -37.7112 -0.1
+ vertex 1.50339 -34.3603 -0.2
+ vertex -2.66982 -37.4742 -0.2
+ vertex -2.44446 -37.7112 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.1294 -33.6813 -0.1
- vertex -3.79219 -35.193 -0.1
- vertex -3.68783 -35.5721 -0.1
+ vertex 1.1294 -33.6813 -0.2
+ vertex -3.79219 -35.193 -0.2
+ vertex -3.68783 -35.5721 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.67035 -34.5411 -0.1
- vertex -0.355246 -38.538 -0.1
- vertex 0.291868 -38.543 -0.1
+ vertex 1.67035 -34.5411 -0.2
+ vertex -0.355246 -38.538 -0.2
+ vertex 0.291868 -38.543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.982074 -33.1272 -0.1
- vertex -3.97004 -33.2395 -0.1
- vertex -3.98536 -33.5697 -0.1
+ vertex 0.982074 -33.1272 -0.2
+ vertex -3.97004 -33.2395 -0.2
+ vertex -3.98536 -33.5697 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.23329 -33.9292 -0.1
- vertex -3.68783 -35.5721 -0.1
- vertex -3.56309 -35.9367 -0.1
+ vertex 1.23329 -33.9292 -0.2
+ vertex -3.68783 -35.5721 -0.2
+ vertex -3.56309 -35.9367 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.982074 -33.1272 -0.1
- vertex -3.98536 -33.5697 -0.1
- vertex -3.97277 -33.9877 -0.1
+ vertex 0.982074 -33.1272 -0.2
+ vertex -3.98536 -33.5697 -0.2
+ vertex -3.97277 -33.9877 -0.2
endloop
endfacet
facet normal -0.2949 -0.955528 0
outer loop
- vertex 19.3736 -10.7173 -0.1
+ vertex 19.3736 -10.7173 -0.2
vertex 19.4763 -10.749 0
vertex 19.3736 -10.7173 0
endloop
@@ -1675,13 +1675,13 @@ solid OpenSCAD_Model
facet normal -0.2949 -0.955528 -0
outer loop
vertex 19.4763 -10.749 0
- vertex 19.3736 -10.7173 -0.1
- vertex 19.4763 -10.749 -0.1
+ vertex 19.3736 -10.7173 -0.2
+ vertex 19.4763 -10.749 -0.2
endloop
endfacet
facet normal -0.500051 -0.865996 0
outer loop
- vertex 19.4763 -10.749 -0.1
+ vertex 19.4763 -10.749 -0.2
vertex 19.557 -10.7956 0
vertex 19.4763 -10.749 0
endloop
@@ -1689,307 +1689,307 @@ solid OpenSCAD_Model
facet normal -0.500051 -0.865996 -0
outer loop
vertex 19.557 -10.7956 0
- vertex 19.4763 -10.749 -0.1
- vertex 19.557 -10.7956 -0.1
+ vertex 19.4763 -10.749 -0.2
+ vertex 19.557 -10.7956 -0.2
endloop
endfacet
facet normal -0.714409 -0.699729 0
outer loop
- vertex 19.6172 -10.8571 -0.1
+ vertex 19.6172 -10.8571 -0.2
vertex 19.557 -10.7956 0
- vertex 19.557 -10.7956 -0.1
+ vertex 19.557 -10.7956 -0.2
endloop
endfacet
facet normal -0.714409 -0.699729 0
outer loop
vertex 19.557 -10.7956 0
- vertex 19.6172 -10.8571 -0.1
+ vertex 19.6172 -10.8571 -0.2
vertex 19.6172 -10.8571 0
endloop
endfacet
facet normal -0.879991 -0.47499 0
outer loop
- vertex 19.6583 -10.9333 -0.1
+ vertex 19.6583 -10.9333 -0.2
vertex 19.6172 -10.8571 0
- vertex 19.6172 -10.8571 -0.1
+ vertex 19.6172 -10.8571 -0.2
endloop
endfacet
facet normal -0.879991 -0.47499 0
outer loop
vertex 19.6172 -10.8571 0
- vertex 19.6583 -10.9333 -0.1
+ vertex 19.6583 -10.9333 -0.2
vertex 19.6583 -10.9333 0
endloop
endfacet
facet normal -0.967951 -0.251138 0
outer loop
- vertex 19.6819 -11.0243 -0.1
+ vertex 19.6819 -11.0243 -0.2
vertex 19.6583 -10.9333 0
- vertex 19.6583 -10.9333 -0.1
+ vertex 19.6583 -10.9333 -0.2
endloop
endfacet
facet normal -0.967951 -0.251138 0
outer loop
vertex 19.6583 -10.9333 0
- vertex 19.6819 -11.0243 -0.1
+ vertex 19.6819 -11.0243 -0.2
vertex 19.6819 -11.0243 0
endloop
endfacet
facet normal -0.997465 -0.0711569 0
outer loop
- vertex 19.6895 -11.13 -0.1
+ vertex 19.6895 -11.13 -0.2
vertex 19.6819 -11.0243 0
- vertex 19.6819 -11.0243 -0.1
+ vertex 19.6819 -11.0243 -0.2
endloop
endfacet
facet normal -0.997465 -0.0711569 0
outer loop
vertex 19.6819 -11.0243 0
- vertex 19.6895 -11.13 -0.1
+ vertex 19.6895 -11.13 -0.2
vertex 19.6895 -11.13 0
endloop
endfacet
facet normal -0.984705 0.17423 0
outer loop
- vertex 19.6598 -11.2975 -0.1
+ vertex 19.6598 -11.2975 -0.2
vertex 19.6895 -11.13 0
- vertex 19.6895 -11.13 -0.1
+ vertex 19.6895 -11.13 -0.2
endloop
endfacet
facet normal -0.984705 0.17423 0
outer loop
vertex 19.6895 -11.13 0
- vertex 19.6598 -11.2975 -0.1
+ vertex 19.6598 -11.2975 -0.2
vertex 19.6598 -11.2975 0
endloop
endfacet
facet normal -0.956743 0.290933 0
outer loop
- vertex 19.5653 -11.6083 -0.1
+ vertex 19.5653 -11.6083 -0.2
vertex 19.6598 -11.2975 0
- vertex 19.6598 -11.2975 -0.1
+ vertex 19.6598 -11.2975 -0.2
endloop
endfacet
facet normal -0.956743 0.290933 0
outer loop
vertex 19.6598 -11.2975 0
- vertex 19.5653 -11.6083 -0.1
+ vertex 19.5653 -11.6083 -0.2
vertex 19.5653 -11.6083 0
endloop
endfacet
facet normal -0.93899 0.343946 0
outer loop
- vertex 19.1479 -12.7477 -0.1
+ vertex 19.1479 -12.7477 -0.2
vertex 19.5653 -11.6083 0
- vertex 19.5653 -11.6083 -0.1
+ vertex 19.5653 -11.6083 -0.2
endloop
endfacet
facet normal -0.93899 0.343946 0
outer loop
vertex 19.5653 -11.6083 0
- vertex 19.1479 -12.7477 -0.1
+ vertex 19.1479 -12.7477 -0.2
vertex 19.1479 -12.7477 0
endloop
endfacet
facet normal -0.930496 0.366302 0
outer loop
- vertex 18.3699 -14.7241 -0.1
+ vertex 18.3699 -14.7241 -0.2
vertex 19.1479 -12.7477 0
- vertex 19.1479 -12.7477 -0.1
+ vertex 19.1479 -12.7477 -0.2
endloop
endfacet
facet normal -0.930496 0.366302 0
outer loop
vertex 19.1479 -12.7477 0
- vertex 18.3699 -14.7241 -0.1
+ vertex 18.3699 -14.7241 -0.2
vertex 18.3699 -14.7241 0
endloop
endfacet
facet normal -0.92735 0.374196 0
outer loop
- vertex 17.1638 -17.7131 -0.1
+ vertex 17.1638 -17.7131 -0.2
vertex 18.3699 -14.7241 0
- vertex 18.3699 -14.7241 -0.1
+ vertex 18.3699 -14.7241 -0.2
endloop
endfacet
facet normal -0.92735 0.374196 0
outer loop
vertex 18.3699 -14.7241 0
- vertex 17.1638 -17.7131 -0.1
+ vertex 17.1638 -17.7131 -0.2
vertex 17.1638 -17.7131 0
endloop
endfacet
facet normal -0.922106 0.386938 0
outer loop
- vertex 14.5952 -23.8342 -0.1
+ vertex 14.5952 -23.8342 -0.2
vertex 17.1638 -17.7131 0
- vertex 17.1638 -17.7131 -0.1
+ vertex 17.1638 -17.7131 -0.2
endloop
endfacet
facet normal -0.922106 0.386938 0
outer loop
vertex 17.1638 -17.7131 0
- vertex 14.5952 -23.8342 -0.1
+ vertex 14.5952 -23.8342 -0.2
vertex 14.5952 -23.8342 0
endloop
endfacet
facet normal -0.923985 0.382428 0
outer loop
- vertex 12.8097 -28.1484 -0.1
+ vertex 12.8097 -28.1484 -0.2
vertex 14.5952 -23.8342 0
- vertex 14.5952 -23.8342 -0.1
+ vertex 14.5952 -23.8342 -0.2
endloop
endfacet
facet normal -0.923985 0.382428 0
outer loop
vertex 14.5952 -23.8342 0
- vertex 12.8097 -28.1484 -0.1
+ vertex 12.8097 -28.1484 -0.2
vertex 12.8097 -28.1484 0
endloop
endfacet
facet normal -0.928075 0.372394 0
outer loop
- vertex 12.0447 -30.0547 -0.1
+ vertex 12.0447 -30.0547 -0.2
vertex 12.8097 -28.1484 0
- vertex 12.8097 -28.1484 -0.1
+ vertex 12.8097 -28.1484 -0.2
endloop
endfacet
facet normal -0.928075 0.372394 0
outer loop
vertex 12.8097 -28.1484 0
- vertex 12.0447 -30.0547 -0.1
+ vertex 12.0447 -30.0547 -0.2
vertex 12.0447 -30.0547 0
endloop
endfacet
facet normal -0.932522 0.361114 0
outer loop
- vertex 11.5005 -31.4602 -0.1
+ vertex 11.5005 -31.4602 -0.2
vertex 12.0447 -30.0547 0
- vertex 12.0447 -30.0547 -0.1
+ vertex 12.0447 -30.0547 -0.2
endloop
endfacet
facet normal -0.932522 0.361114 0
outer loop
vertex 12.0447 -30.0547 0
- vertex 11.5005 -31.4602 -0.1
+ vertex 11.5005 -31.4602 -0.2
vertex 11.5005 -31.4602 0
endloop
endfacet
facet normal -0.938737 0.344634 0
outer loop
- vertex 11.1661 -32.3709 -0.1
+ vertex 11.1661 -32.3709 -0.2
vertex 11.5005 -31.4602 0
- vertex 11.5005 -31.4602 -0.1
+ vertex 11.5005 -31.4602 -0.2
endloop
endfacet
facet normal -0.938737 0.344634 0
outer loop
vertex 11.5005 -31.4602 0
- vertex 11.1661 -32.3709 -0.1
+ vertex 11.1661 -32.3709 -0.2
vertex 11.1661 -32.3709 0
endloop
endfacet
facet normal -0.946728 0.322034 0
outer loop
- vertex 10.9267 -33.0747 -0.1
+ vertex 10.9267 -33.0747 -0.2
vertex 11.1661 -32.3709 0
- vertex 11.1661 -32.3709 -0.1
+ vertex 11.1661 -32.3709 -0.2
endloop
endfacet
facet normal -0.946728 0.322034 0
outer loop
vertex 11.1661 -32.3709 0
- vertex 10.9267 -33.0747 -0.1
+ vertex 10.9267 -33.0747 -0.2
vertex 10.9267 -33.0747 0
endloop
endfacet
facet normal -0.963806 0.266603 0
outer loop
- vertex 10.7819 -33.5982 -0.1
+ vertex 10.7819 -33.5982 -0.2
vertex 10.9267 -33.0747 0
- vertex 10.9267 -33.0747 -0.1
+ vertex 10.9267 -33.0747 -0.2
endloop
endfacet
facet normal -0.963806 0.266603 0
outer loop
vertex 10.9267 -33.0747 0
- vertex 10.7819 -33.5982 -0.1
+ vertex 10.7819 -33.5982 -0.2
vertex 10.7819 -33.5982 0
endloop
endfacet
facet normal -0.983685 0.179901 0
outer loop
- vertex 10.7449 -33.8005 -0.1
+ vertex 10.7449 -33.8005 -0.2
vertex 10.7819 -33.5982 0
- vertex 10.7819 -33.5982 -0.1
+ vertex 10.7819 -33.5982 -0.2
endloop
endfacet
facet normal -0.983685 0.179901 0
outer loop
vertex 10.7819 -33.5982 0
- vertex 10.7449 -33.8005 -0.1
+ vertex 10.7449 -33.8005 -0.2
vertex 10.7449 -33.8005 0
endloop
endfacet
facet normal -0.996773 0.0802779 0
outer loop
- vertex 10.7315 -33.9677 -0.1
+ vertex 10.7315 -33.9677 -0.2
vertex 10.7449 -33.8005 0
- vertex 10.7449 -33.8005 -0.1
+ vertex 10.7449 -33.8005 -0.2
endloop
endfacet
facet normal -0.996773 0.0802779 0
outer loop
vertex 10.7449 -33.8005 0
- vertex 10.7315 -33.9677 -0.1
+ vertex 10.7315 -33.9677 -0.2
vertex 10.7315 -33.9677 0
endloop
endfacet
facet normal -0.997256 -0.0740364 0
outer loop
- vertex 10.7415 -34.103 -0.1
+ vertex 10.7415 -34.103 -0.2
vertex 10.7315 -33.9677 0
- vertex 10.7315 -33.9677 -0.1
+ vertex 10.7315 -33.9677 -0.2
endloop
endfacet
facet normal -0.997256 -0.0740364 0
outer loop
vertex 10.7315 -33.9677 0
- vertex 10.7415 -34.103 -0.1
+ vertex 10.7415 -34.103 -0.2
vertex 10.7415 -34.103 0
endloop
endfacet
facet normal -0.954067 -0.299593 0
outer loop
- vertex 10.775 -34.2097 -0.1
+ vertex 10.775 -34.2097 -0.2
vertex 10.7415 -34.103 0
- vertex 10.7415 -34.103 -0.1
+ vertex 10.7415 -34.103 -0.2
endloop
endfacet
facet normal -0.954067 -0.299593 0
outer loop
vertex 10.7415 -34.103 0
- vertex 10.775 -34.2097 -0.1
+ vertex 10.775 -34.2097 -0.2
vertex 10.775 -34.2097 0
endloop
endfacet
facet normal -0.81961 -0.572921 0
outer loop
- vertex 10.832 -34.2912 -0.1
+ vertex 10.832 -34.2912 -0.2
vertex 10.775 -34.2097 0
- vertex 10.775 -34.2097 -0.1
+ vertex 10.775 -34.2097 -0.2
endloop
endfacet
facet normal -0.81961 -0.572921 0
outer loop
vertex 10.775 -34.2097 0
- vertex 10.832 -34.2912 -0.1
+ vertex 10.832 -34.2912 -0.2
vertex 10.832 -34.2912 0
endloop
endfacet
facet normal -0.595252 -0.803539 0
outer loop
- vertex 10.832 -34.2912 -0.1
+ vertex 10.832 -34.2912 -0.2
vertex 10.9123 -34.3507 0
vertex 10.832 -34.2912 0
endloop
@@ -1997,13 +1997,13 @@ solid OpenSCAD_Model
facet normal -0.595252 -0.803539 -0
outer loop
vertex 10.9123 -34.3507 0
- vertex 10.832 -34.2912 -0.1
- vertex 10.9123 -34.3507 -0.1
+ vertex 10.832 -34.2912 -0.2
+ vertex 10.9123 -34.3507 -0.2
endloop
endfacet
facet normal -0.366659 -0.930355 0
outer loop
- vertex 10.9123 -34.3507 -0.1
+ vertex 10.9123 -34.3507 -0.2
vertex 11.016 -34.3915 0
vertex 10.9123 -34.3507 0
endloop
@@ -2011,13 +2011,13 @@ solid OpenSCAD_Model
facet normal -0.366659 -0.930355 -0
outer loop
vertex 11.016 -34.3915 0
- vertex 10.9123 -34.3507 -0.1
- vertex 11.016 -34.3915 -0.1
+ vertex 10.9123 -34.3507 -0.2
+ vertex 11.016 -34.3915 -0.2
endloop
endfacet
facet normal -0.197016 -0.9804 0
outer loop
- vertex 11.016 -34.3915 -0.1
+ vertex 11.016 -34.3915 -0.2
vertex 11.143 -34.4171 0
vertex 11.016 -34.3915 0
endloop
@@ -2025,13 +2025,13 @@ solid OpenSCAD_Model
facet normal -0.197016 -0.9804 -0
outer loop
vertex 11.143 -34.4171 0
- vertex 11.016 -34.3915 -0.1
- vertex 11.143 -34.4171 -0.1
+ vertex 11.016 -34.3915 -0.2
+ vertex 11.143 -34.4171 -0.2
endloop
endfacet
facet normal -0.0562764 -0.998415 0
outer loop
- vertex 11.143 -34.4171 -0.1
+ vertex 11.143 -34.4171 -0.2
vertex 11.4668 -34.4353 0
vertex 11.143 -34.4171 0
endloop
@@ -2039,13 +2039,13 @@ solid OpenSCAD_Model
facet normal -0.0562764 -0.998415 -0
outer loop
vertex 11.4668 -34.4353 0
- vertex 11.143 -34.4171 -0.1
- vertex 11.4668 -34.4353 -0.1
+ vertex 11.143 -34.4171 -0.2
+ vertex 11.4668 -34.4353 -0.2
endloop
endfacet
facet normal -0.118118 -0.993 0
outer loop
- vertex 11.4668 -34.4353 -0.1
+ vertex 11.4668 -34.4353 -0.2
vertex 11.6919 -34.4621 0
vertex 11.4668 -34.4353 0
endloop
@@ -2053,13 +2053,13 @@ solid OpenSCAD_Model
facet normal -0.118118 -0.993 -0
outer loop
vertex 11.6919 -34.4621 0
- vertex 11.4668 -34.4353 -0.1
- vertex 11.6919 -34.4621 -0.1
+ vertex 11.4668 -34.4353 -0.2
+ vertex 11.6919 -34.4621 -0.2
endloop
endfacet
facet normal -0.357337 -0.933976 0
outer loop
- vertex 11.6919 -34.4621 -0.1
+ vertex 11.6919 -34.4621 -0.2
vertex 11.8827 -34.5351 0
vertex 11.6919 -34.4621 0
endloop
@@ -2067,13 +2067,13 @@ solid OpenSCAD_Model
facet normal -0.357337 -0.933976 -0
outer loop
vertex 11.8827 -34.5351 0
- vertex 11.6919 -34.4621 -0.1
- vertex 11.8827 -34.5351 -0.1
+ vertex 11.6919 -34.4621 -0.2
+ vertex 11.8827 -34.5351 -0.2
endloop
endfacet
facet normal -0.596054 -0.802944 0
outer loop
- vertex 11.8827 -34.5351 -0.1
+ vertex 11.8827 -34.5351 -0.2
vertex 12.0364 -34.6492 0
vertex 11.8827 -34.5351 0
endloop
@@ -2081,125 +2081,125 @@ solid OpenSCAD_Model
facet normal -0.596054 -0.802944 -0
outer loop
vertex 12.0364 -34.6492 0
- vertex 11.8827 -34.5351 -0.1
- vertex 12.0364 -34.6492 -0.1
+ vertex 11.8827 -34.5351 -0.2
+ vertex 12.0364 -34.6492 -0.2
endloop
endfacet
facet normal -0.796902 -0.604109 0
outer loop
- vertex 12.1503 -34.7994 -0.1
+ vertex 12.1503 -34.7994 -0.2
vertex 12.0364 -34.6492 0
- vertex 12.0364 -34.6492 -0.1
+ vertex 12.0364 -34.6492 -0.2
endloop
endfacet
facet normal -0.796902 -0.604109 0
outer loop
vertex 12.0364 -34.6492 0
- vertex 12.1503 -34.7994 -0.1
+ vertex 12.1503 -34.7994 -0.2
vertex 12.1503 -34.7994 0
endloop
endfacet
facet normal -0.930863 -0.365367 0
outer loop
- vertex 12.2214 -34.9805 -0.1
+ vertex 12.2214 -34.9805 -0.2
vertex 12.1503 -34.7994 0
- vertex 12.1503 -34.7994 -0.1
+ vertex 12.1503 -34.7994 -0.2
endloop
endfacet
facet normal -0.930863 -0.365367 0
outer loop
vertex 12.1503 -34.7994 0
- vertex 12.2214 -34.9805 -0.1
+ vertex 12.2214 -34.9805 -0.2
vertex 12.2214 -34.9805 0
endloop
endfacet
facet normal -0.992505 -0.122206 0
outer loop
- vertex 12.2468 -35.1875 -0.1
+ vertex 12.2468 -35.1875 -0.2
vertex 12.2214 -34.9805 0
- vertex 12.2214 -34.9805 -0.1
+ vertex 12.2214 -34.9805 -0.2
endloop
endfacet
facet normal -0.992505 -0.122206 0
outer loop
vertex 12.2214 -34.9805 0
- vertex 12.2468 -35.1875 -0.1
+ vertex 12.2468 -35.1875 -0.2
vertex 12.2468 -35.1875 0
endloop
endfacet
facet normal -0.994949 0.100386 0
outer loop
- vertex 12.2239 -35.4151 -0.1
+ vertex 12.2239 -35.4151 -0.2
vertex 12.2468 -35.1875 0
- vertex 12.2468 -35.1875 -0.1
+ vertex 12.2468 -35.1875 -0.2
endloop
endfacet
facet normal -0.994949 0.100386 0
outer loop
vertex 12.2468 -35.1875 0
- vertex 12.2239 -35.4151 -0.1
+ vertex 12.2239 -35.4151 -0.2
vertex 12.2239 -35.4151 0
endloop
endfacet
facet normal -0.956433 0.291953 0
outer loop
- vertex 12.1496 -35.6584 -0.1
+ vertex 12.1496 -35.6584 -0.2
vertex 12.2239 -35.4151 0
- vertex 12.2239 -35.4151 -0.1
+ vertex 12.2239 -35.4151 -0.2
endloop
endfacet
facet normal -0.956433 0.291953 0
outer loop
vertex 12.2239 -35.4151 0
- vertex 12.1496 -35.6584 -0.1
+ vertex 12.1496 -35.6584 -0.2
vertex 12.1496 -35.6584 0
endloop
endfacet
facet normal -0.890412 0.455156 0
outer loop
- vertex 12.0956 -35.7642 -0.1
+ vertex 12.0956 -35.7642 -0.2
vertex 12.1496 -35.6584 0
- vertex 12.1496 -35.6584 -0.1
+ vertex 12.1496 -35.6584 -0.2
endloop
endfacet
facet normal -0.890412 0.455156 0
outer loop
vertex 12.1496 -35.6584 0
- vertex 12.0956 -35.7642 -0.1
+ vertex 12.0956 -35.7642 -0.2
vertex 12.0956 -35.7642 0
endloop
endfacet
facet normal -0.820093 0.572231 0
outer loop
- vertex 12.0181 -35.8752 -0.1
+ vertex 12.0181 -35.8752 -0.2
vertex 12.0956 -35.7642 0
- vertex 12.0956 -35.7642 -0.1
+ vertex 12.0956 -35.7642 -0.2
endloop
endfacet
facet normal -0.820093 0.572231 0
outer loop
vertex 12.0956 -35.7642 0
- vertex 12.0181 -35.8752 -0.1
+ vertex 12.0181 -35.8752 -0.2
vertex 12.0181 -35.8752 0
endloop
endfacet
facet normal -0.732832 0.680409 0
outer loop
- vertex 11.8034 -36.1064 -0.1
+ vertex 11.8034 -36.1064 -0.2
vertex 12.0181 -35.8752 0
- vertex 12.0181 -35.8752 -0.1
+ vertex 12.0181 -35.8752 -0.2
endloop
endfacet
facet normal -0.732832 0.680409 0
outer loop
vertex 12.0181 -35.8752 0
- vertex 11.8034 -36.1064 -0.1
+ vertex 11.8034 -36.1064 -0.2
vertex 11.8034 -36.1064 0
endloop
endfacet
facet normal -0.642938 0.765918 0
outer loop
- vertex 11.8034 -36.1064 -0.1
+ vertex 11.8034 -36.1064 -0.2
vertex 11.5264 -36.339 0
vertex 11.8034 -36.1064 0
endloop
@@ -2207,13 +2207,13 @@ solid OpenSCAD_Model
facet normal -0.642938 0.765918 0
outer loop
vertex 11.5264 -36.339 0
- vertex 11.8034 -36.1064 -0.1
- vertex 11.5264 -36.339 -0.1
+ vertex 11.8034 -36.1064 -0.2
+ vertex 11.5264 -36.339 -0.2
endloop
endfacet
facet normal -0.569468 0.822014 0
outer loop
- vertex 11.5264 -36.339 -0.1
+ vertex 11.5264 -36.339 -0.2
vertex 11.208 -36.5595 0
vertex 11.5264 -36.339 0
endloop
@@ -2221,13 +2221,13 @@ solid OpenSCAD_Model
facet normal -0.569468 0.822014 0
outer loop
vertex 11.208 -36.5595 0
- vertex 11.5264 -36.339 -0.1
- vertex 11.208 -36.5595 -0.1
+ vertex 11.5264 -36.339 -0.2
+ vertex 11.208 -36.5595 -0.2
endloop
endfacet
facet normal -0.499497 0.866315 0
outer loop
- vertex 11.208 -36.5595 -0.1
+ vertex 11.208 -36.5595 -0.2
vertex 10.8691 -36.7549 0
vertex 11.208 -36.5595 0
endloop
@@ -2235,13 +2235,13 @@ solid OpenSCAD_Model
facet normal -0.499497 0.866315 0
outer loop
vertex 10.8691 -36.7549 0
- vertex 11.208 -36.5595 -0.1
- vertex 10.8691 -36.7549 -0.1
+ vertex 11.208 -36.5595 -0.2
+ vertex 10.8691 -36.7549 -0.2
endloop
endfacet
facet normal -0.420709 0.907196 0
outer loop
- vertex 10.8691 -36.7549 -0.1
+ vertex 10.8691 -36.7549 -0.2
vertex 10.5307 -36.9119 0
vertex 10.8691 -36.7549 0
endloop
@@ -2249,13 +2249,13 @@ solid OpenSCAD_Model
facet normal -0.420709 0.907196 0
outer loop
vertex 10.5307 -36.9119 0
- vertex 10.8691 -36.7549 -0.1
- vertex 10.5307 -36.9119 -0.1
+ vertex 10.8691 -36.7549 -0.2
+ vertex 10.5307 -36.9119 -0.2
endloop
endfacet
facet normal -0.315116 0.949053 0
outer loop
- vertex 10.5307 -36.9119 -0.1
+ vertex 10.5307 -36.9119 -0.2
vertex 10.2137 -37.0171 0
vertex 10.5307 -36.9119 0
endloop
@@ -2263,13 +2263,13 @@ solid OpenSCAD_Model
facet normal -0.315116 0.949053 0
outer loop
vertex 10.2137 -37.0171 0
- vertex 10.5307 -36.9119 -0.1
- vertex 10.2137 -37.0171 -0.1
+ vertex 10.5307 -36.9119 -0.2
+ vertex 10.2137 -37.0171 -0.2
endloop
endfacet
facet normal -0.145343 0.989381 0
outer loop
- vertex 10.2137 -37.0171 -0.1
+ vertex 10.2137 -37.0171 -0.2
vertex 9.93892 -37.0575 0
vertex 10.2137 -37.0171 0
endloop
@@ -2277,13 +2277,13 @@ solid OpenSCAD_Model
facet normal -0.145343 0.989381 0
outer loop
vertex 9.93892 -37.0575 0
- vertex 10.2137 -37.0171 -0.1
- vertex 9.93892 -37.0575 -0.1
+ vertex 10.2137 -37.0171 -0.2
+ vertex 9.93892 -37.0575 -0.2
endloop
endfacet
facet normal -0.15554 0.98783 0
outer loop
- vertex 9.93892 -37.0575 -0.1
+ vertex 9.93892 -37.0575 -0.2
vertex 9.71926 -37.0921 0
vertex 9.93892 -37.0575 0
endloop
@@ -2291,13 +2291,13 @@ solid OpenSCAD_Model
facet normal -0.15554 0.98783 0
outer loop
vertex 9.71926 -37.0921 0
- vertex 9.93892 -37.0575 -0.1
- vertex 9.71926 -37.0921 -0.1
+ vertex 9.93892 -37.0575 -0.2
+ vertex 9.71926 -37.0921 -0.2
endloop
endfacet
facet normal -0.252236 0.967666 0
outer loop
- vertex 9.71926 -37.0921 -0.1
+ vertex 9.71926 -37.0921 -0.2
vertex 9.37163 -37.1827 0
vertex 9.71926 -37.0921 0
endloop
@@ -2305,13 +2305,13 @@ solid OpenSCAD_Model
facet normal -0.252236 0.967666 0
outer loop
vertex 9.37163 -37.1827 0
- vertex 9.71926 -37.0921 -0.1
- vertex 9.37163 -37.1827 -0.1
+ vertex 9.71926 -37.0921 -0.2
+ vertex 9.37163 -37.1827 -0.2
endloop
endfacet
facet normal -0.296619 0.954996 0
outer loop
- vertex 9.37163 -37.1827 -0.1
+ vertex 9.37163 -37.1827 -0.2
vertex 8.94379 -37.3156 0
vertex 9.37163 -37.1827 0
endloop
@@ -2319,13 +2319,13 @@ solid OpenSCAD_Model
facet normal -0.296619 0.954996 0
outer loop
vertex 8.94379 -37.3156 0
- vertex 9.37163 -37.1827 -0.1
- vertex 8.94379 -37.3156 -0.1
+ vertex 9.37163 -37.1827 -0.2
+ vertex 8.94379 -37.3156 -0.2
endloop
endfacet
facet normal -0.330869 0.943677 0
outer loop
- vertex 8.94379 -37.3156 -0.1
+ vertex 8.94379 -37.3156 -0.2
vertex 8.4835 -37.477 0
vertex 8.94379 -37.3156 0
endloop
@@ -2333,13 +2333,13 @@ solid OpenSCAD_Model
facet normal -0.330869 0.943677 0
outer loop
vertex 8.4835 -37.477 0
- vertex 8.94379 -37.3156 -0.1
- vertex 8.4835 -37.477 -0.1
+ vertex 8.94379 -37.3156 -0.2
+ vertex 8.4835 -37.477 -0.2
endloop
endfacet
facet normal -0.343608 0.939113 0
outer loop
- vertex 8.4835 -37.477 -0.1
+ vertex 8.4835 -37.477 -0.2
vertex 7.35232 -37.8908 0
vertex 8.4835 -37.477 0
endloop
@@ -2347,13 +2347,13 @@ solid OpenSCAD_Model
facet normal -0.343608 0.939113 0
outer loop
vertex 7.35232 -37.8908 0
- vertex 8.4835 -37.477 -0.1
- vertex 7.35232 -37.8908 -0.1
+ vertex 8.4835 -37.477 -0.2
+ vertex 7.35232 -37.8908 -0.2
endloop
endfacet
facet normal -0.324819 0.945776 0
outer loop
- vertex 7.35232 -37.8908 -0.1
+ vertex 7.35232 -37.8908 -0.2
vertex 6.47346 -38.1927 0
vertex 7.35232 -37.8908 0
endloop
@@ -2361,13 +2361,13 @@ solid OpenSCAD_Model
facet normal -0.324819 0.945776 0
outer loop
vertex 6.47346 -38.1927 0
- vertex 7.35232 -37.8908 -0.1
- vertex 6.47346 -38.1927 -0.1
+ vertex 7.35232 -37.8908 -0.2
+ vertex 6.47346 -38.1927 -0.2
endloop
endfacet
facet normal -0.280895 0.959739 0
outer loop
- vertex 6.47346 -38.1927 -0.1
+ vertex 6.47346 -38.1927 -0.2
vertex 5.81563 -38.3852 0
vertex 6.47346 -38.1927 0
endloop
@@ -2375,13 +2375,13 @@ solid OpenSCAD_Model
facet normal -0.280895 0.959739 0
outer loop
vertex 5.81563 -38.3852 0
- vertex 6.47346 -38.1927 -0.1
- vertex 5.81563 -38.3852 -0.1
+ vertex 6.47346 -38.1927 -0.2
+ vertex 5.81563 -38.3852 -0.2
endloop
endfacet
facet normal -0.214328 0.976762 0
outer loop
- vertex 5.81563 -38.3852 -0.1
+ vertex 5.81563 -38.3852 -0.2
vertex 5.55983 -38.4413 0
vertex 5.81563 -38.3852 0
endloop
@@ -2389,13 +2389,13 @@ solid OpenSCAD_Model
facet normal -0.214328 0.976762 0
outer loop
vertex 5.55983 -38.4413 0
- vertex 5.81563 -38.3852 -0.1
- vertex 5.55983 -38.4413 -0.1
+ vertex 5.81563 -38.3852 -0.2
+ vertex 5.55983 -38.4413 -0.2
endloop
endfacet
facet normal -0.139165 0.990269 0
outer loop
- vertex 5.55983 -38.4413 -0.1
+ vertex 5.55983 -38.4413 -0.2
vertex 5.34756 -38.4712 0
vertex 5.55983 -38.4413 0
endloop
@@ -2403,13 +2403,13 @@ solid OpenSCAD_Model
facet normal -0.139165 0.990269 0
outer loop
vertex 5.34756 -38.4712 0
- vertex 5.55983 -38.4413 -0.1
- vertex 5.34756 -38.4712 -0.1
+ vertex 5.55983 -38.4413 -0.2
+ vertex 5.34756 -38.4712 -0.2
endloop
endfacet
facet normal -0.0224422 0.999748 0
outer loop
- vertex 5.34756 -38.4712 -0.1
+ vertex 5.34756 -38.4712 -0.2
vertex 5.17491 -38.475 0
vertex 5.34756 -38.4712 0
endloop
@@ -2417,13 +2417,13 @@ solid OpenSCAD_Model
facet normal -0.0224422 0.999748 0
outer loop
vertex 5.17491 -38.475 0
- vertex 5.34756 -38.4712 -0.1
- vertex 5.17491 -38.475 -0.1
+ vertex 5.34756 -38.4712 -0.2
+ vertex 5.17491 -38.475 -0.2
endloop
endfacet
facet normal 0.156812 0.987628 -0
outer loop
- vertex 5.17491 -38.475 -0.1
+ vertex 5.17491 -38.475 -0.2
vertex 5.03796 -38.4533 0
vertex 5.17491 -38.475 0
endloop
@@ -2431,13 +2431,13 @@ solid OpenSCAD_Model
facet normal 0.156812 0.987628 0
outer loop
vertex 5.03796 -38.4533 0
- vertex 5.17491 -38.475 -0.1
- vertex 5.03796 -38.4533 -0.1
+ vertex 5.17491 -38.475 -0.2
+ vertex 5.03796 -38.4533 -0.2
endloop
endfacet
facet normal 0.408161 0.91291 -0
outer loop
- vertex 5.03796 -38.4533 -0.1
+ vertex 5.03796 -38.4533 -0.2
vertex 4.93281 -38.4063 0
vertex 5.03796 -38.4533 0
endloop
@@ -2445,13 +2445,13 @@ solid OpenSCAD_Model
facet normal 0.408161 0.91291 0
outer loop
vertex 4.93281 -38.4063 0
- vertex 5.03796 -38.4533 -0.1
- vertex 4.93281 -38.4063 -0.1
+ vertex 5.03796 -38.4533 -0.2
+ vertex 4.93281 -38.4063 -0.2
endloop
endfacet
facet normal 0.681473 0.731843 -0
outer loop
- vertex 4.93281 -38.4063 -0.1
+ vertex 4.93281 -38.4063 -0.2
vertex 4.85555 -38.3343 0
vertex 4.93281 -38.4063 0
endloop
@@ -2459,97 +2459,97 @@ solid OpenSCAD_Model
facet normal 0.681473 0.731843 0
outer loop
vertex 4.85555 -38.3343 0
- vertex 4.93281 -38.4063 -0.1
- vertex 4.85555 -38.3343 -0.1
+ vertex 4.93281 -38.4063 -0.2
+ vertex 4.85555 -38.3343 -0.2
endloop
endfacet
facet normal 0.875472 0.48327 0
outer loop
vertex 4.85555 -38.3343 0
- vertex 4.80226 -38.2378 -0.1
+ vertex 4.80226 -38.2378 -0.2
vertex 4.80226 -38.2378 0
endloop
endfacet
facet normal 0.875472 0.48327 0
outer loop
- vertex 4.80226 -38.2378 -0.1
+ vertex 4.80226 -38.2378 -0.2
vertex 4.85555 -38.3343 0
- vertex 4.85555 -38.3343 -0.1
+ vertex 4.85555 -38.3343 -0.2
endloop
endfacet
facet normal 0.964192 0.265205 0
outer loop
vertex 4.80226 -38.2378 0
- vertex 4.76904 -38.117 -0.1
+ vertex 4.76904 -38.117 -0.2
vertex 4.76904 -38.117 0
endloop
endfacet
facet normal 0.964192 0.265205 0
outer loop
- vertex 4.76904 -38.117 -0.1
+ vertex 4.76904 -38.117 -0.2
vertex 4.80226 -38.2378 0
- vertex 4.80226 -38.2378 -0.1
+ vertex 4.80226 -38.2378 -0.2
endloop
endfacet
facet normal 0.997564 0.069762 0
outer loop
vertex 4.76904 -38.117 0
- vertex 4.74716 -37.8041 -0.1
+ vertex 4.74716 -37.8041 -0.2
vertex 4.74716 -37.8041 0
endloop
endfacet
facet normal 0.997564 0.069762 0
outer loop
- vertex 4.74716 -37.8041 -0.1
+ vertex 4.74716 -37.8041 -0.2
vertex 4.76904 -38.117 0
- vertex 4.76904 -38.117 -0.1
+ vertex 4.76904 -38.117 -0.2
endloop
endfacet
facet normal 0.997378 0.0723715 0
outer loop
vertex 4.74716 -37.8041 0
- vertex 4.72035 -37.4346 -0.1
+ vertex 4.72035 -37.4346 -0.2
vertex 4.72035 -37.4346 0
endloop
endfacet
facet normal 0.997378 0.0723715 0
outer loop
- vertex 4.72035 -37.4346 -0.1
+ vertex 4.72035 -37.4346 -0.2
vertex 4.74716 -37.8041 0
- vertex 4.74716 -37.8041 -0.1
+ vertex 4.74716 -37.8041 -0.2
endloop
endfacet
facet normal 0.968245 0.250005 0
outer loop
vertex 4.72035 -37.4346 0
- vertex 4.69132 -37.3222 -0.1
+ vertex 4.69132 -37.3222 -0.2
vertex 4.69132 -37.3222 0
endloop
endfacet
facet normal 0.968245 0.250005 0
outer loop
- vertex 4.69132 -37.3222 -0.1
+ vertex 4.69132 -37.3222 -0.2
vertex 4.72035 -37.4346 0
- vertex 4.72035 -37.4346 -0.1
+ vertex 4.72035 -37.4346 -0.2
endloop
endfacet
facet normal 0.758745 0.651387 0
outer loop
vertex 4.69132 -37.3222 0
- vertex 4.65588 -37.2809 -0.1
+ vertex 4.65588 -37.2809 -0.2
vertex 4.65588 -37.2809 0
endloop
endfacet
facet normal 0.758745 0.651387 0
outer loop
- vertex 4.65588 -37.2809 -0.1
+ vertex 4.65588 -37.2809 -0.2
vertex 4.69132 -37.3222 0
- vertex 4.69132 -37.3222 -0.1
+ vertex 4.69132 -37.3222 -0.2
endloop
endfacet
facet normal -0.395389 0.918514 0
outer loop
- vertex 4.65588 -37.2809 -0.1
+ vertex 4.65588 -37.2809 -0.2
vertex 4.26446 -37.4494 0
vertex 4.65588 -37.2809 0
endloop
@@ -2557,13 +2557,13 @@ solid OpenSCAD_Model
facet normal -0.395389 0.918514 0
outer loop
vertex 4.26446 -37.4494 0
- vertex 4.65588 -37.2809 -0.1
- vertex 4.26446 -37.4494 -0.1
+ vertex 4.65588 -37.2809 -0.2
+ vertex 4.26446 -37.4494 -0.2
endloop
endfacet
facet normal -0.446029 0.895018 0
outer loop
- vertex 4.26446 -37.4494 -0.1
+ vertex 4.26446 -37.4494 -0.2
vertex 3.45158 -37.8545 0
vertex 4.26446 -37.4494 0
endloop
@@ -2571,13 +2571,13 @@ solid OpenSCAD_Model
facet normal -0.446029 0.895018 0
outer loop
vertex 3.45158 -37.8545 0
- vertex 4.26446 -37.4494 -0.1
- vertex 3.45158 -37.8545 -0.1
+ vertex 4.26446 -37.4494 -0.2
+ vertex 3.45158 -37.8545 -0.2
endloop
endfacet
facet normal -0.42381 0.905751 0
outer loop
- vertex 3.45158 -37.8545 -0.1
+ vertex 3.45158 -37.8545 -0.2
vertex 3.20396 -37.9704 0
vertex 3.45158 -37.8545 0
endloop
@@ -2585,13 +2585,13 @@ solid OpenSCAD_Model
facet normal -0.42381 0.905751 0
outer loop
vertex 3.20396 -37.9704 0
- vertex 3.45158 -37.8545 -0.1
- vertex 3.20396 -37.9704 -0.1
+ vertex 3.45158 -37.8545 -0.2
+ vertex 3.20396 -37.9704 -0.2
endloop
endfacet
facet normal -0.363414 0.931628 0
outer loop
- vertex 3.20396 -37.9704 -0.1
+ vertex 3.20396 -37.9704 -0.2
vertex 2.93102 -38.0768 0
vertex 3.20396 -37.9704 0
endloop
@@ -2599,13 +2599,13 @@ solid OpenSCAD_Model
facet normal -0.363414 0.931628 0
outer loop
vertex 2.93102 -38.0768 0
- vertex 3.20396 -37.9704 -0.1
- vertex 2.93102 -38.0768 -0.1
+ vertex 3.20396 -37.9704 -0.2
+ vertex 2.93102 -38.0768 -0.2
endloop
endfacet
facet normal -0.289057 0.957312 0
outer loop
- vertex 2.93102 -38.0768 -0.1
+ vertex 2.93102 -38.0768 -0.2
vertex 2.32439 -38.26 0
vertex 2.93102 -38.0768 0
endloop
@@ -2613,13 +2613,13 @@ solid OpenSCAD_Model
facet normal -0.289057 0.957312 0
outer loop
vertex 2.32439 -38.26 0
- vertex 2.93102 -38.0768 -0.1
- vertex 2.32439 -38.26 -0.1
+ vertex 2.93102 -38.0768 -0.2
+ vertex 2.32439 -38.26 -0.2
endloop
endfacet
facet normal -0.208009 0.978127 0
outer loop
- vertex 2.32439 -38.26 -0.1
+ vertex 2.32439 -38.26 -0.2
vertex 1.66207 -38.4009 0
vertex 2.32439 -38.26 0
endloop
@@ -2627,13 +2627,13 @@ solid OpenSCAD_Model
facet normal -0.208009 0.978127 0
outer loop
vertex 1.66207 -38.4009 0
- vertex 2.32439 -38.26 -0.1
- vertex 1.66207 -38.4009 -0.1
+ vertex 2.32439 -38.26 -0.2
+ vertex 1.66207 -38.4009 -0.2
endloop
endfacet
facet normal -0.13739 0.990517 0
outer loop
- vertex 1.66207 -38.4009 -0.1
+ vertex 1.66207 -38.4009 -0.2
vertex 0.974434 -38.4962 0
vertex 1.66207 -38.4009 0
endloop
@@ -2641,13 +2641,13 @@ solid OpenSCAD_Model
facet normal -0.13739 0.990517 0
outer loop
vertex 0.974434 -38.4962 0
- vertex 1.66207 -38.4009 -0.1
- vertex 0.974434 -38.4962 -0.1
+ vertex 1.66207 -38.4009 -0.2
+ vertex 0.974434 -38.4962 -0.2
endloop
endfacet
facet normal -0.0683412 0.997662 0
outer loop
- vertex 0.974434 -38.4962 -0.1
+ vertex 0.974434 -38.4962 -0.2
vertex 0.291868 -38.543 0
vertex 0.974434 -38.4962 0
endloop
@@ -2655,13 +2655,13 @@ solid OpenSCAD_Model
facet normal -0.0683412 0.997662 0
outer loop
vertex 0.291868 -38.543 0
- vertex 0.974434 -38.4962 -0.1
- vertex 0.291868 -38.543 -0.1
+ vertex 0.974434 -38.4962 -0.2
+ vertex 0.291868 -38.543 -0.2
endloop
endfacet
facet normal 0.00775161 0.99997 -0
outer loop
- vertex 0.291868 -38.543 -0.1
+ vertex 0.291868 -38.543 -0.2
vertex -0.355246 -38.538 0
vertex 0.291868 -38.543 0
endloop
@@ -2669,13 +2669,13 @@ solid OpenSCAD_Model
facet normal 0.00775161 0.99997 0
outer loop
vertex -0.355246 -38.538 0
- vertex 0.291868 -38.543 -0.1
- vertex -0.355246 -38.538 -0.1
+ vertex 0.291868 -38.543 -0.2
+ vertex -0.355246 -38.538 -0.2
endloop
endfacet
facet normal 0.10258 0.994725 -0
outer loop
- vertex -0.355246 -38.538 -0.1
+ vertex -0.355246 -38.538 -0.2
vertex -0.936529 -38.478 0
vertex -0.355246 -38.538 0
endloop
@@ -2683,13 +2683,13 @@ solid OpenSCAD_Model
facet normal 0.10258 0.994725 0
outer loop
vertex -0.936529 -38.478 0
- vertex -0.355246 -38.538 -0.1
- vertex -0.936529 -38.478 -0.1
+ vertex -0.355246 -38.538 -0.2
+ vertex -0.936529 -38.478 -0.2
endloop
endfacet
facet normal 0.197071 0.980389 -0
outer loop
- vertex -0.936529 -38.478 -0.1
+ vertex -0.936529 -38.478 -0.2
vertex -1.19299 -38.4265 0
vertex -0.936529 -38.478 0
endloop
@@ -2697,13 +2697,13 @@ solid OpenSCAD_Model
facet normal 0.197071 0.980389 0
outer loop
vertex -1.19299 -38.4265 0
- vertex -0.936529 -38.478 -0.1
- vertex -1.19299 -38.4265 -0.1
+ vertex -0.936529 -38.478 -0.2
+ vertex -1.19299 -38.4265 -0.2
endloop
endfacet
facet normal 0.279186 0.960237 -0
outer loop
- vertex -1.19299 -38.4265 -0.1
+ vertex -1.19299 -38.4265 -0.2
vertex -1.4216 -38.36 0
vertex -1.19299 -38.4265 0
endloop
@@ -2711,13 +2711,13 @@ solid OpenSCAD_Model
facet normal 0.279186 0.960237 0
outer loop
vertex -1.4216 -38.36 0
- vertex -1.19299 -38.4265 -0.1
- vertex -1.4216 -38.36 -0.1
+ vertex -1.19299 -38.4265 -0.2
+ vertex -1.4216 -38.36 -0.2
endloop
endfacet
facet normal 0.385209 0.92283 -0
outer loop
- vertex -1.4216 -38.36 -0.1
+ vertex -1.4216 -38.36 -0.2
vertex -1.69347 -38.2465 0
vertex -1.4216 -38.36 0
endloop
@@ -2725,13 +2725,13 @@ solid OpenSCAD_Model
facet normal 0.385209 0.92283 0
outer loop
vertex -1.69347 -38.2465 0
- vertex -1.4216 -38.36 -0.1
- vertex -1.69347 -38.2465 -0.1
+ vertex -1.4216 -38.36 -0.2
+ vertex -1.69347 -38.2465 -0.2
endloop
endfacet
facet normal 0.490243 0.871586 -0
outer loop
- vertex -1.69347 -38.2465 -0.1
+ vertex -1.69347 -38.2465 -0.2
vertex -1.95525 -38.0993 0
vertex -1.69347 -38.2465 0
endloop
@@ -2739,13 +2739,13 @@ solid OpenSCAD_Model
facet normal 0.490243 0.871586 0
outer loop
vertex -1.95525 -38.0993 0
- vertex -1.69347 -38.2465 -0.1
- vertex -1.95525 -38.0993 -0.1
+ vertex -1.69347 -38.2465 -0.2
+ vertex -1.95525 -38.0993 -0.2
endloop
endfacet
facet normal 0.581299 0.81369 -0
outer loop
- vertex -1.95525 -38.0993 -0.1
+ vertex -1.95525 -38.0993 -0.2
vertex -2.20592 -37.9202 0
vertex -1.95525 -38.0993 0
endloop
@@ -2753,13 +2753,13 @@ solid OpenSCAD_Model
facet normal 0.581299 0.81369 0
outer loop
vertex -2.20592 -37.9202 0
- vertex -1.95525 -38.0993 -0.1
- vertex -2.20592 -37.9202 -0.1
+ vertex -1.95525 -38.0993 -0.2
+ vertex -2.20592 -37.9202 -0.2
endloop
endfacet
facet normal 0.65901 0.752134 -0
outer loop
- vertex -2.20592 -37.9202 -0.1
+ vertex -2.20592 -37.9202 -0.2
vertex -2.44446 -37.7112 0
vertex -2.20592 -37.9202 0
endloop
@@ -2767,419 +2767,419 @@ solid OpenSCAD_Model
facet normal 0.65901 0.752134 0
outer loop
vertex -2.44446 -37.7112 0
- vertex -2.20592 -37.9202 -0.1
- vertex -2.44446 -37.7112 -0.1
+ vertex -2.20592 -37.9202 -0.2
+ vertex -2.44446 -37.7112 -0.2
endloop
endfacet
facet normal 0.724655 0.689112 0
outer loop
vertex -2.44446 -37.7112 0
- vertex -2.66982 -37.4742 -0.1
+ vertex -2.66982 -37.4742 -0.2
vertex -2.66982 -37.4742 0
endloop
endfacet
facet normal 0.724655 0.689112 0
outer loop
- vertex -2.66982 -37.4742 -0.1
+ vertex -2.66982 -37.4742 -0.2
vertex -2.44446 -37.7112 0
- vertex -2.44446 -37.7112 -0.1
+ vertex -2.44446 -37.7112 -0.2
endloop
endfacet
facet normal 0.779827 0.625996 0
outer loop
vertex -2.66982 -37.4742 0
- vertex -2.88099 -37.2112 -0.1
+ vertex -2.88099 -37.2112 -0.2
vertex -2.88099 -37.2112 0
endloop
endfacet
facet normal 0.779827 0.625996 0
outer loop
- vertex -2.88099 -37.2112 -0.1
+ vertex -2.88099 -37.2112 -0.2
vertex -2.66982 -37.4742 0
- vertex -2.66982 -37.4742 -0.1
+ vertex -2.66982 -37.4742 -0.2
endloop
endfacet
facet normal 0.826071 0.563566 0
outer loop
vertex -2.88099 -37.2112 0
- vertex -3.07693 -36.924 -0.1
+ vertex -3.07693 -36.924 -0.2
vertex -3.07693 -36.924 0
endloop
endfacet
facet normal 0.826071 0.563566 0
outer loop
- vertex -3.07693 -36.924 -0.1
+ vertex -3.07693 -36.924 -0.2
vertex -2.88099 -37.2112 0
- vertex -2.88099 -37.2112 -0.1
+ vertex -2.88099 -37.2112 -0.2
endloop
endfacet
facet normal 0.864772 0.502165 0
outer loop
vertex -3.07693 -36.924 0
- vertex -3.25661 -36.6145 -0.1
+ vertex -3.25661 -36.6145 -0.2
vertex -3.25661 -36.6145 0
endloop
endfacet
facet normal 0.864772 0.502165 0
outer loop
- vertex -3.25661 -36.6145 -0.1
+ vertex -3.25661 -36.6145 -0.2
vertex -3.07693 -36.924 0
- vertex -3.07693 -36.924 -0.1
+ vertex -3.07693 -36.924 -0.2
endloop
endfacet
facet normal 0.897098 0.441832 0
outer loop
vertex -3.25661 -36.6145 0
- vertex -3.41901 -36.2848 -0.1
+ vertex -3.41901 -36.2848 -0.2
vertex -3.41901 -36.2848 0
endloop
endfacet
facet normal 0.897098 0.441832 0
outer loop
- vertex -3.41901 -36.2848 -0.1
+ vertex -3.41901 -36.2848 -0.2
vertex -3.25661 -36.6145 0
- vertex -3.25661 -36.6145 -0.1
+ vertex -3.25661 -36.6145 -0.2
endloop
endfacet
facet normal 0.923982 0.382435 0
outer loop
vertex -3.41901 -36.2848 0
- vertex -3.56309 -35.9367 -0.1
+ vertex -3.56309 -35.9367 -0.2
vertex -3.56309 -35.9367 0
endloop
endfacet
facet normal 0.923982 0.382435 0
outer loop
- vertex -3.56309 -35.9367 -0.1
+ vertex -3.56309 -35.9367 -0.2
vertex -3.41901 -36.2848 0
- vertex -3.41901 -36.2848 -0.1
+ vertex -3.41901 -36.2848 -0.2
endloop
endfacet
facet normal 0.946149 0.323732 0
outer loop
vertex -3.56309 -35.9367 0
- vertex -3.68783 -35.5721 -0.1
+ vertex -3.68783 -35.5721 -0.2
vertex -3.68783 -35.5721 0
endloop
endfacet
facet normal 0.946149 0.323732 0
outer loop
- vertex -3.68783 -35.5721 -0.1
+ vertex -3.68783 -35.5721 -0.2
vertex -3.56309 -35.9367 0
- vertex -3.56309 -35.9367 -0.1
+ vertex -3.56309 -35.9367 -0.2
endloop
endfacet
facet normal 0.964131 0.265426 0
outer loop
vertex -3.68783 -35.5721 0
- vertex -3.79219 -35.193 -0.1
+ vertex -3.79219 -35.193 -0.2
vertex -3.79219 -35.193 0
endloop
endfacet
facet normal 0.964131 0.265426 0
outer loop
- vertex -3.79219 -35.193 -0.1
+ vertex -3.79219 -35.193 -0.2
vertex -3.68783 -35.5721 0
- vertex -3.68783 -35.5721 -0.1
+ vertex -3.68783 -35.5721 -0.2
endloop
endfacet
facet normal 0.978298 0.207204 0
outer loop
vertex -3.79219 -35.193 0
- vertex -3.87516 -34.8013 -0.1
+ vertex -3.87516 -34.8013 -0.2
vertex -3.87516 -34.8013 0
endloop
endfacet
facet normal 0.978298 0.207204 0
outer loop
- vertex -3.87516 -34.8013 -0.1
+ vertex -3.87516 -34.8013 -0.2
vertex -3.79219 -35.193 0
- vertex -3.79219 -35.193 -0.1
+ vertex -3.79219 -35.193 -0.2
endloop
endfacet
facet normal 0.988873 0.148763 0
outer loop
vertex -3.87516 -34.8013 0
- vertex -3.93569 -34.3989 -0.1
+ vertex -3.93569 -34.3989 -0.2
vertex -3.93569 -34.3989 0
endloop
endfacet
facet normal 0.988873 0.148763 0
outer loop
- vertex -3.93569 -34.3989 -0.1
+ vertex -3.93569 -34.3989 -0.2
vertex -3.87516 -34.8013 0
- vertex -3.87516 -34.8013 -0.1
+ vertex -3.87516 -34.8013 -0.2
endloop
endfacet
facet normal 0.995959 0.0898073 0
outer loop
vertex -3.93569 -34.3989 0
- vertex -3.97277 -33.9877 -0.1
+ vertex -3.97277 -33.9877 -0.2
vertex -3.97277 -33.9877 0
endloop
endfacet
facet normal 0.995959 0.0898073 0
outer loop
- vertex -3.97277 -33.9877 -0.1
+ vertex -3.97277 -33.9877 -0.2
vertex -3.93569 -34.3989 0
- vertex -3.93569 -34.3989 -0.1
+ vertex -3.93569 -34.3989 -0.2
endloop
endfacet
facet normal 0.999547 0.0300979 0
outer loop
vertex -3.97277 -33.9877 0
- vertex -3.98536 -33.5697 -0.1
+ vertex -3.98536 -33.5697 -0.2
vertex -3.98536 -33.5697 0
endloop
endfacet
facet normal 0.999547 0.0300979 0
outer loop
- vertex -3.98536 -33.5697 -0.1
+ vertex -3.98536 -33.5697 -0.2
vertex -3.97277 -33.9877 0
- vertex -3.97277 -33.9877 -0.1
+ vertex -3.97277 -33.9877 -0.2
endloop
endfacet
facet normal 0.998925 -0.0463463 0
outer loop
vertex -3.98536 -33.5697 0
- vertex -3.97004 -33.2395 -0.1
+ vertex -3.97004 -33.2395 -0.2
vertex -3.97004 -33.2395 0
endloop
endfacet
facet normal 0.998925 -0.0463463 0
outer loop
- vertex -3.97004 -33.2395 -0.1
+ vertex -3.97004 -33.2395 -0.2
vertex -3.98536 -33.5697 0
- vertex -3.98536 -33.5697 -0.1
+ vertex -3.98536 -33.5697 -0.2
endloop
endfacet
facet normal 0.99274 -0.120283 0
outer loop
vertex -3.97004 -33.2395 0
- vertex -3.92523 -32.8697 -0.1
+ vertex -3.92523 -32.8697 -0.2
vertex -3.92523 -32.8697 0
endloop
endfacet
facet normal 0.99274 -0.120283 0
outer loop
- vertex -3.92523 -32.8697 -0.1
+ vertex -3.92523 -32.8697 -0.2
vertex -3.97004 -33.2395 0
- vertex -3.97004 -33.2395 -0.1
+ vertex -3.97004 -33.2395 -0.2
endloop
endfacet
facet normal 0.984312 -0.176435 0
outer loop
vertex -3.92523 -32.8697 0
- vertex -3.8527 -32.4651 -0.1
+ vertex -3.8527 -32.4651 -0.2
vertex -3.8527 -32.4651 0
endloop
endfacet
facet normal 0.984312 -0.176435 0
outer loop
- vertex -3.8527 -32.4651 -0.1
+ vertex -3.8527 -32.4651 -0.2
vertex -3.92523 -32.8697 0
- vertex -3.92523 -32.8697 -0.1
+ vertex -3.92523 -32.8697 -0.2
endloop
endfacet
facet normal 0.975291 -0.220925 0
outer loop
vertex -3.8527 -32.4651 0
- vertex -3.75417 -32.0301 -0.1
+ vertex -3.75417 -32.0301 -0.2
vertex -3.75417 -32.0301 0
endloop
endfacet
facet normal 0.975291 -0.220925 0
outer loop
- vertex -3.75417 -32.0301 -0.1
+ vertex -3.75417 -32.0301 -0.2
vertex -3.8527 -32.4651 0
- vertex -3.8527 -32.4651 -0.1
+ vertex -3.8527 -32.4651 -0.2
endloop
endfacet
facet normal 0.96184 -0.273613 0
outer loop
vertex -3.75417 -32.0301 0
- vertex -3.4861 -31.0878 -0.1
+ vertex -3.4861 -31.0878 -0.2
vertex -3.4861 -31.0878 0
endloop
endfacet
facet normal 0.96184 -0.273613 0
outer loop
- vertex -3.4861 -31.0878 -0.1
+ vertex -3.4861 -31.0878 -0.2
vertex -3.75417 -32.0301 0
- vertex -3.75417 -32.0301 -0.1
+ vertex -3.75417 -32.0301 -0.2
endloop
endfacet
facet normal 0.944354 -0.328931 0
outer loop
vertex -3.4861 -31.0878 0
- vertex -3.135 -30.0798 -0.1
+ vertex -3.135 -30.0798 -0.2
vertex -3.135 -30.0798 0
endloop
endfacet
facet normal 0.944354 -0.328931 0
outer loop
- vertex -3.135 -30.0798 -0.1
+ vertex -3.135 -30.0798 -0.2
vertex -3.4861 -31.0878 0
- vertex -3.4861 -31.0878 -0.1
+ vertex -3.4861 -31.0878 -0.2
endloop
endfacet
facet normal 0.926769 -0.375632 0
outer loop
vertex -3.135 -30.0798 0
- vertex -2.71481 -29.043 -0.1
+ vertex -2.71481 -29.043 -0.2
vertex -2.71481 -29.043 0
endloop
endfacet
facet normal 0.926769 -0.375632 0
outer loop
- vertex -2.71481 -29.043 -0.1
+ vertex -2.71481 -29.043 -0.2
vertex -3.135 -30.0798 0
- vertex -3.135 -30.0798 -0.1
+ vertex -3.135 -30.0798 -0.2
endloop
endfacet
facet normal 0.907733 -0.419549 0
outer loop
vertex -2.71481 -29.043 0
- vertex -2.23947 -28.0146 -0.1
+ vertex -2.23947 -28.0146 -0.2
vertex -2.23947 -28.0146 0
endloop
endfacet
facet normal 0.907733 -0.419549 0
outer loop
- vertex -2.23947 -28.0146 -0.1
+ vertex -2.23947 -28.0146 -0.2
vertex -2.71481 -29.043 0
- vertex -2.71481 -29.043 -0.1
+ vertex -2.71481 -29.043 -0.2
endloop
endfacet
facet normal 0.885263 -0.46509 0
outer loop
vertex -2.23947 -28.0146 0
- vertex -1.72295 -27.0315 -0.1
+ vertex -1.72295 -27.0315 -0.2
vertex -1.72295 -27.0315 0
endloop
endfacet
facet normal 0.885263 -0.46509 0
outer loop
- vertex -1.72295 -27.0315 -0.1
+ vertex -1.72295 -27.0315 -0.2
vertex -2.23947 -28.0146 0
- vertex -2.23947 -28.0146 -0.1
+ vertex -2.23947 -28.0146 -0.2
endloop
endfacet
facet normal 0.8644 -0.502806 0
outer loop
vertex -1.72295 -27.0315 0
- vertex -1.45361 -26.5684 -0.1
+ vertex -1.45361 -26.5684 -0.2
vertex -1.45361 -26.5684 0
endloop
endfacet
facet normal 0.8644 -0.502806 0
outer loop
- vertex -1.45361 -26.5684 -0.1
+ vertex -1.45361 -26.5684 -0.2
vertex -1.72295 -27.0315 0
- vertex -1.72295 -27.0315 -0.1
+ vertex -1.72295 -27.0315 -0.2
endloop
endfacet
facet normal 0.847345 -0.531043 0
outer loop
vertex -1.45361 -26.5684 0
- vertex -1.17919 -26.1306 -0.1
+ vertex -1.17919 -26.1306 -0.2
vertex -1.17919 -26.1306 0
endloop
endfacet
facet normal 0.847345 -0.531043 0
outer loop
- vertex -1.17919 -26.1306 -0.1
+ vertex -1.17919 -26.1306 -0.2
vertex -1.45361 -26.5684 0
- vertex -1.45361 -26.5684 -0.1
+ vertex -1.45361 -26.5684 -0.2
endloop
endfacet
facet normal 0.82644 -0.563025 0
outer loop
vertex -1.17919 -26.1306 0
- vertex -0.875463 -25.6847 -0.1
+ vertex -0.875463 -25.6847 -0.2
vertex -0.875463 -25.6847 0
endloop
endfacet
facet normal 0.82644 -0.563025 0
outer loop
- vertex -0.875463 -25.6847 -0.1
+ vertex -0.875463 -25.6847 -0.2
vertex -1.17919 -26.1306 0
- vertex -1.17919 -26.1306 -0.1
+ vertex -1.17919 -26.1306 -0.2
endloop
endfacet
facet normal 0.8045 -0.593952 0
outer loop
vertex -0.875463 -25.6847 0
- vertex -0.546472 -25.2391 -0.1
+ vertex -0.546472 -25.2391 -0.2
vertex -0.546472 -25.2391 0
endloop
endfacet
facet normal 0.8045 -0.593952 0
outer loop
- vertex -0.546472 -25.2391 -0.1
+ vertex -0.546472 -25.2391 -0.2
vertex -0.875463 -25.6847 0
- vertex -0.875463 -25.6847 -0.1
+ vertex -0.875463 -25.6847 -0.2
endloop
endfacet
facet normal 0.783077 -0.621924 0
outer loop
vertex -0.546472 -25.2391 0
- vertex -0.194025 -24.7953 -0.1
+ vertex -0.194025 -24.7953 -0.2
vertex -0.194025 -24.7953 0
endloop
endfacet
facet normal 0.783077 -0.621924 0
outer loop
- vertex -0.194025 -24.7953 -0.1
+ vertex -0.194025 -24.7953 -0.2
vertex -0.546472 -25.2391 0
- vertex -0.546472 -25.2391 -0.1
+ vertex -0.546472 -25.2391 -0.2
endloop
endfacet
facet normal 0.762077 -0.647486 0
outer loop
vertex -0.194025 -24.7953 0
- vertex 0.18007 -24.355 -0.1
+ vertex 0.18007 -24.355 -0.2
vertex 0.18007 -24.355 0
endloop
endfacet
facet normal 0.762077 -0.647486 0
outer loop
- vertex 0.18007 -24.355 -0.1
+ vertex 0.18007 -24.355 -0.2
vertex -0.194025 -24.7953 0
- vertex -0.194025 -24.7953 -0.1
+ vertex -0.194025 -24.7953 -0.2
endloop
endfacet
facet normal 0.74138 -0.671085 0
outer loop
vertex 0.18007 -24.355 0
- vertex 0.574011 -23.9198 -0.1
+ vertex 0.574011 -23.9198 -0.2
vertex 0.574011 -23.9198 0
endloop
endfacet
facet normal 0.74138 -0.671085 0
outer loop
- vertex 0.574011 -23.9198 -0.1
+ vertex 0.574011 -23.9198 -0.2
vertex 0.18007 -24.355 0
- vertex 0.18007 -24.355 -0.1
+ vertex 0.18007 -24.355 -0.2
endloop
endfacet
facet normal 0.720855 -0.693086 0
outer loop
vertex 0.574011 -23.9198 0
- vertex 0.985991 -23.4913 -0.1
+ vertex 0.985991 -23.4913 -0.2
vertex 0.985991 -23.4913 0
endloop
endfacet
facet normal 0.720855 -0.693086 0
outer loop
- vertex 0.985991 -23.4913 -0.1
+ vertex 0.985991 -23.4913 -0.2
vertex 0.574011 -23.9198 0
- vertex 0.574011 -23.9198 -0.1
+ vertex 0.574011 -23.9198 -0.2
endloop
endfacet
facet normal 0.700344 -0.713805 0
outer loop
- vertex 0.985991 -23.4913 -0.1
+ vertex 0.985991 -23.4913 -0.2
vertex 1.4142 -23.0712 0
vertex 0.985991 -23.4913 0
endloop
@@ -3187,13 +3187,13 @@ solid OpenSCAD_Model
facet normal 0.700344 -0.713805 0
outer loop
vertex 1.4142 -23.0712 0
- vertex 0.985991 -23.4913 -0.1
- vertex 1.4142 -23.0712 -0.1
+ vertex 0.985991 -23.4913 -0.2
+ vertex 1.4142 -23.0712 -0.2
endloop
endfacet
facet normal 0.679685 -0.733504 0
outer loop
- vertex 1.4142 -23.0712 -0.1
+ vertex 1.4142 -23.0712 -0.2
vertex 1.85684 -22.661 0
vertex 1.4142 -23.0712 0
endloop
@@ -3201,13 +3201,13 @@ solid OpenSCAD_Model
facet normal 0.679685 -0.733504 0
outer loop
vertex 1.85684 -22.661 0
- vertex 1.4142 -23.0712 -0.1
- vertex 1.85684 -22.661 -0.1
+ vertex 1.4142 -23.0712 -0.2
+ vertex 1.85684 -22.661 -0.2
endloop
endfacet
facet normal 0.658698 -0.752407 0
outer loop
- vertex 1.85684 -22.661 -0.1
+ vertex 1.85684 -22.661 -0.2
vertex 2.31211 -22.2625 0
vertex 1.85684 -22.661 0
endloop
@@ -3215,13 +3215,13 @@ solid OpenSCAD_Model
facet normal 0.658698 -0.752407 0
outer loop
vertex 2.31211 -22.2625 0
- vertex 1.85684 -22.661 -0.1
- vertex 2.31211 -22.2625 -0.1
+ vertex 1.85684 -22.661 -0.2
+ vertex 2.31211 -22.2625 -0.2
endloop
endfacet
facet normal 0.637189 -0.770708 0
outer loop
- vertex 2.31211 -22.2625 -0.1
+ vertex 2.31211 -22.2625 -0.2
vertex 2.77819 -21.8771 0
vertex 2.31211 -22.2625 0
endloop
@@ -3229,13 +3229,13 @@ solid OpenSCAD_Model
facet normal 0.637189 -0.770708 0
outer loop
vertex 2.77819 -21.8771 0
- vertex 2.31211 -22.2625 -0.1
- vertex 2.77819 -21.8771 -0.1
+ vertex 2.31211 -22.2625 -0.2
+ vertex 2.77819 -21.8771 -0.2
endloop
endfacet
facet normal 0.614941 -0.788573 0
outer loop
- vertex 2.77819 -21.8771 -0.1
+ vertex 2.77819 -21.8771 -0.2
vertex 3.25328 -21.5067 0
vertex 2.77819 -21.8771 0
endloop
@@ -3243,13 +3243,13 @@ solid OpenSCAD_Model
facet normal 0.614941 -0.788573 0
outer loop
vertex 3.25328 -21.5067 0
- vertex 2.77819 -21.8771 -0.1
- vertex 3.25328 -21.5067 -0.1
+ vertex 2.77819 -21.8771 -0.2
+ vertex 3.25328 -21.5067 -0.2
endloop
endfacet
facet normal 0.591711 -0.80615 0
outer loop
- vertex 3.25328 -21.5067 -0.1
+ vertex 3.25328 -21.5067 -0.2
vertex 3.73558 -21.1527 0
vertex 3.25328 -21.5067 0
endloop
@@ -3257,13 +3257,13 @@ solid OpenSCAD_Model
facet normal 0.591711 -0.80615 0
outer loop
vertex 3.73558 -21.1527 0
- vertex 3.25328 -21.5067 -0.1
- vertex 3.73558 -21.1527 -0.1
+ vertex 3.25328 -21.5067 -0.2
+ vertex 3.73558 -21.1527 -0.2
endloop
endfacet
facet normal 0.567228 -0.823561 0
outer loop
- vertex 3.73558 -21.1527 -0.1
+ vertex 3.73558 -21.1527 -0.2
vertex 4.22328 -20.8168 0
vertex 3.73558 -21.1527 0
endloop
@@ -3271,13 +3271,13 @@ solid OpenSCAD_Model
facet normal 0.567228 -0.823561 0
outer loop
vertex 4.22328 -20.8168 0
- vertex 3.73558 -21.1527 -0.1
- vertex 4.22328 -20.8168 -0.1
+ vertex 3.73558 -21.1527 -0.2
+ vertex 4.22328 -20.8168 -0.2
endloop
endfacet
facet normal 0.541167 -0.840915 0
outer loop
- vertex 4.22328 -20.8168 -0.1
+ vertex 4.22328 -20.8168 -0.2
vertex 4.71458 -20.5006 0
vertex 4.22328 -20.8168 0
endloop
@@ -3285,13 +3285,13 @@ solid OpenSCAD_Model
facet normal 0.541167 -0.840915 0
outer loop
vertex 4.71458 -20.5006 0
- vertex 4.22328 -20.8168 -0.1
- vertex 4.71458 -20.5006 -0.1
+ vertex 4.22328 -20.8168 -0.2
+ vertex 4.71458 -20.5006 -0.2
endloop
endfacet
facet normal 0.513171 -0.858287 0
outer loop
- vertex 4.71458 -20.5006 -0.1
+ vertex 4.71458 -20.5006 -0.2
vertex 5.20766 -20.2058 0
vertex 4.71458 -20.5006 0
endloop
@@ -3299,13 +3299,13 @@ solid OpenSCAD_Model
facet normal 0.513171 -0.858287 0
outer loop
vertex 5.20766 -20.2058 0
- vertex 4.71458 -20.5006 -0.1
- vertex 5.20766 -20.2058 -0.1
+ vertex 4.71458 -20.5006 -0.2
+ vertex 5.20766 -20.2058 -0.2
endloop
endfacet
facet normal 0.482795 -0.875733 0
outer loop
- vertex 5.20766 -20.2058 -0.1
+ vertex 5.20766 -20.2058 -0.2
vertex 5.70074 -19.9339 0
vertex 5.20766 -20.2058 0
endloop
@@ -3313,13 +3313,13 @@ solid OpenSCAD_Model
facet normal 0.482795 -0.875733 0
outer loop
vertex 5.70074 -19.9339 0
- vertex 5.20766 -20.2058 -0.1
- vertex 5.70074 -19.9339 -0.1
+ vertex 5.20766 -20.2058 -0.2
+ vertex 5.70074 -19.9339 -0.2
endloop
endfacet
facet normal 0.452672 -0.891677 0
outer loop
- vertex 5.70074 -19.9339 -0.1
+ vertex 5.70074 -19.9339 -0.2
vertex 6.07737 -19.7427 0
vertex 5.70074 -19.9339 0
endloop
@@ -3327,13 +3327,13 @@ solid OpenSCAD_Model
facet normal 0.452672 -0.891677 0
outer loop
vertex 6.07737 -19.7427 0
- vertex 5.70074 -19.9339 -0.1
- vertex 6.07737 -19.7427 -0.1
+ vertex 5.70074 -19.9339 -0.2
+ vertex 6.07737 -19.7427 -0.2
endloop
endfacet
facet normal 0.411982 -0.911192 0
outer loop
- vertex 6.07737 -19.7427 -0.1
+ vertex 6.07737 -19.7427 -0.2
vertex 6.41984 -19.5879 0
vertex 6.07737 -19.7427 0
endloop
@@ -3341,13 +3341,13 @@ solid OpenSCAD_Model
facet normal 0.411982 -0.911192 0
outer loop
vertex 6.41984 -19.5879 0
- vertex 6.07737 -19.7427 -0.1
- vertex 6.41984 -19.5879 -0.1
+ vertex 6.07737 -19.7427 -0.2
+ vertex 6.41984 -19.5879 -0.2
endloop
endfacet
facet normal 0.352601 -0.935774 0
outer loop
- vertex 6.41984 -19.5879 -0.1
+ vertex 6.41984 -19.5879 -0.2
vertex 6.74616 -19.4649 0
vertex 6.41984 -19.5879 0
endloop
@@ -3355,13 +3355,13 @@ solid OpenSCAD_Model
facet normal 0.352601 -0.935774 0
outer loop
vertex 6.74616 -19.4649 0
- vertex 6.41984 -19.5879 -0.1
- vertex 6.74616 -19.4649 -0.1
+ vertex 6.41984 -19.5879 -0.2
+ vertex 6.74616 -19.4649 -0.2
endloop
endfacet
facet normal 0.279545 -0.960133 0
outer loop
- vertex 6.74616 -19.4649 -0.1
+ vertex 6.74616 -19.4649 -0.2
vertex 7.07441 -19.3694 0
vertex 6.74616 -19.4649 0
endloop
@@ -3369,13 +3369,13 @@ solid OpenSCAD_Model
facet normal 0.279545 -0.960133 0
outer loop
vertex 7.07441 -19.3694 0
- vertex 6.74616 -19.4649 -0.1
- vertex 7.07441 -19.3694 -0.1
+ vertex 6.74616 -19.4649 -0.2
+ vertex 7.07441 -19.3694 -0.2
endloop
endfacet
facet normal 0.204293 -0.97891 0
outer loop
- vertex 7.07441 -19.3694 -0.1
+ vertex 7.07441 -19.3694 -0.2
vertex 7.42262 -19.2967 0
vertex 7.07441 -19.3694 0
endloop
@@ -3383,13 +3383,13 @@ solid OpenSCAD_Model
facet normal 0.204293 -0.97891 0
outer loop
vertex 7.42262 -19.2967 0
- vertex 7.07441 -19.3694 -0.1
- vertex 7.42262 -19.2967 -0.1
+ vertex 7.07441 -19.3694 -0.2
+ vertex 7.42262 -19.2967 -0.2
endloop
endfacet
facet normal 0.139108 -0.990277 0
outer loop
- vertex 7.42262 -19.2967 -0.1
+ vertex 7.42262 -19.2967 -0.2
vertex 7.80885 -19.2424 0
vertex 7.42262 -19.2967 0
endloop
@@ -3397,13 +3397,13 @@ solid OpenSCAD_Model
facet normal 0.139108 -0.990277 0
outer loop
vertex 7.80885 -19.2424 0
- vertex 7.42262 -19.2967 -0.1
- vertex 7.80885 -19.2424 -0.1
+ vertex 7.42262 -19.2967 -0.2
+ vertex 7.80885 -19.2424 -0.2
endloop
endfacet
facet normal 0.0740931 -0.997251 0
outer loop
- vertex 7.80885 -19.2424 -0.1
+ vertex 7.80885 -19.2424 -0.2
vertex 8.76754 -19.1712 0
vertex 7.80885 -19.2424 0
endloop
@@ -3411,13 +3411,13 @@ solid OpenSCAD_Model
facet normal 0.0740931 -0.997251 0
outer loop
vertex 8.76754 -19.1712 0
- vertex 7.80885 -19.2424 -0.1
- vertex 8.76754 -19.1712 -0.1
+ vertex 7.80885 -19.2424 -0.2
+ vertex 8.76754 -19.1712 -0.2
endloop
endfacet
facet normal 0.0317962 -0.999494 0
outer loop
- vertex 8.76754 -19.1712 -0.1
+ vertex 8.76754 -19.1712 -0.2
vertex 9.72114 -19.1409 0
vertex 8.76754 -19.1712 0
endloop
@@ -3425,13 +3425,13 @@ solid OpenSCAD_Model
facet normal 0.0317962 -0.999494 0
outer loop
vertex 9.72114 -19.1409 0
- vertex 8.76754 -19.1712 -0.1
- vertex 9.72114 -19.1409 -0.1
+ vertex 8.76754 -19.1712 -0.2
+ vertex 9.72114 -19.1409 -0.2
endloop
endfacet
facet normal -0.0248159 -0.999692 0
outer loop
- vertex 9.72114 -19.1409 -0.1
+ vertex 9.72114 -19.1409 -0.2
vertex 10.0711 -19.1496 0
vertex 9.72114 -19.1409 0
endloop
@@ -3439,13 +3439,13 @@ solid OpenSCAD_Model
facet normal -0.0248159 -0.999692 -0
outer loop
vertex 10.0711 -19.1496 0
- vertex 9.72114 -19.1409 -0.1
- vertex 10.0711 -19.1496 -0.1
+ vertex 9.72114 -19.1409 -0.2
+ vertex 10.0711 -19.1496 -0.2
endloop
endfacet
facet normal -0.0963554 -0.995347 0
outer loop
- vertex 10.0711 -19.1496 -0.1
+ vertex 10.0711 -19.1496 -0.2
vertex 10.3591 -19.1774 0
vertex 10.0711 -19.1496 0
endloop
@@ -3453,13 +3453,13 @@ solid OpenSCAD_Model
facet normal -0.0963554 -0.995347 -0
outer loop
vertex 10.3591 -19.1774 0
- vertex 10.0711 -19.1496 -0.1
- vertex 10.3591 -19.1774 -0.1
+ vertex 10.0711 -19.1496 -0.2
+ vertex 10.3591 -19.1774 -0.2
endloop
endfacet
facet normal -0.199823 -0.979832 0
outer loop
- vertex 10.3591 -19.1774 -0.1
+ vertex 10.3591 -19.1774 -0.2
vertex 10.602 -19.227 0
vertex 10.3591 -19.1774 0
endloop
@@ -3467,13 +3467,13 @@ solid OpenSCAD_Model
facet normal -0.199823 -0.979832 -0
outer loop
vertex 10.602 -19.227 0
- vertex 10.3591 -19.1774 -0.1
- vertex 10.602 -19.227 -0.1
+ vertex 10.3591 -19.1774 -0.2
+ vertex 10.602 -19.227 -0.2
endloop
endfacet
facet normal -0.324456 -0.945901 0
outer loop
- vertex 10.602 -19.227 -0.1
+ vertex 10.602 -19.227 -0.2
vertex 10.8168 -19.3006 0
vertex 10.602 -19.227 0
endloop
@@ -3481,13 +3481,13 @@ solid OpenSCAD_Model
facet normal -0.324456 -0.945901 -0
outer loop
vertex 10.8168 -19.3006 0
- vertex 10.602 -19.227 -0.1
- vertex 10.8168 -19.3006 -0.1
+ vertex 10.602 -19.227 -0.2
+ vertex 10.8168 -19.3006 -0.2
endloop
endfacet
facet normal -0.441937 -0.897046 0
outer loop
- vertex 10.8168 -19.3006 -0.1
+ vertex 10.8168 -19.3006 -0.2
vertex 11.0203 -19.4009 0
vertex 10.8168 -19.3006 0
endloop
@@ -3495,13 +3495,13 @@ solid OpenSCAD_Model
facet normal -0.441937 -0.897046 -0
outer loop
vertex 11.0203 -19.4009 0
- vertex 10.8168 -19.3006 -0.1
- vertex 11.0203 -19.4009 -0.1
+ vertex 10.8168 -19.3006 -0.2
+ vertex 11.0203 -19.4009 -0.2
endloop
endfacet
facet normal -0.525875 -0.850562 0
outer loop
- vertex 11.0203 -19.4009 -0.1
+ vertex 11.0203 -19.4009 -0.2
vertex 11.2294 -19.5302 0
vertex 11.0203 -19.4009 0
endloop
@@ -3509,13 +3509,13 @@ solid OpenSCAD_Model
facet normal -0.525875 -0.850562 -0
outer loop
vertex 11.2294 -19.5302 0
- vertex 11.0203 -19.4009 -0.1
- vertex 11.2294 -19.5302 -0.1
+ vertex 11.0203 -19.4009 -0.2
+ vertex 11.2294 -19.5302 -0.2
endloop
endfacet
facet normal -0.518008 -0.855376 0
outer loop
- vertex 11.2294 -19.5302 -0.1
+ vertex 11.2294 -19.5302 -0.2
vertex 11.5538 -19.7266 0
vertex 11.2294 -19.5302 0
endloop
@@ -3523,13 +3523,13 @@ solid OpenSCAD_Model
facet normal -0.518008 -0.855376 -0
outer loop
vertex 11.5538 -19.7266 0
- vertex 11.2294 -19.5302 -0.1
- vertex 11.5538 -19.7266 -0.1
+ vertex 11.2294 -19.5302 -0.2
+ vertex 11.5538 -19.7266 -0.2
endloop
endfacet
facet normal -0.370976 -0.928642 0
outer loop
- vertex 11.5538 -19.7266 -0.1
+ vertex 11.5538 -19.7266 -0.2
vertex 11.7902 -19.8211 0
vertex 11.5538 -19.7266 0
endloop
@@ -3537,13 +3537,13 @@ solid OpenSCAD_Model
facet normal -0.370976 -0.928642 -0
outer loop
vertex 11.7902 -19.8211 0
- vertex 11.5538 -19.7266 -0.1
- vertex 11.7902 -19.8211 -0.1
+ vertex 11.5538 -19.7266 -0.2
+ vertex 11.7902 -19.8211 -0.2
endloop
endfacet
facet normal -0.111982 -0.99371 0
outer loop
- vertex 11.7902 -19.8211 -0.1
+ vertex 11.7902 -19.8211 -0.2
vertex 11.881 -19.8313 0
vertex 11.7902 -19.8211 0
endloop
@@ -3551,13 +3551,13 @@ solid OpenSCAD_Model
facet normal -0.111982 -0.99371 -0
outer loop
vertex 11.881 -19.8313 0
- vertex 11.7902 -19.8211 -0.1
- vertex 11.881 -19.8313 -0.1
+ vertex 11.7902 -19.8211 -0.2
+ vertex 11.881 -19.8313 -0.2
endloop
endfacet
facet normal 0.179863 -0.983692 0
outer loop
- vertex 11.881 -19.8313 -0.1
+ vertex 11.881 -19.8313 -0.2
vertex 11.9563 -19.8175 0
vertex 11.881 -19.8313 0
endloop
@@ -3565,13 +3565,13 @@ solid OpenSCAD_Model
facet normal 0.179863 -0.983692 0
outer loop
vertex 11.9563 -19.8175 0
- vertex 11.881 -19.8313 -0.1
- vertex 11.9563 -19.8175 -0.1
+ vertex 11.881 -19.8313 -0.2
+ vertex 11.9563 -19.8175 -0.2
endloop
endfacet
facet normal 0.514293 -0.857615 0
outer loop
- vertex 11.9563 -19.8175 -0.1
+ vertex 11.9563 -19.8175 -0.2
vertex 12.0185 -19.7802 0
vertex 11.9563 -19.8175 0
endloop
@@ -3579,139 +3579,139 @@ solid OpenSCAD_Model
facet normal 0.514293 -0.857615 0
outer loop
vertex 12.0185 -19.7802 0
- vertex 11.9563 -19.8175 -0.1
- vertex 12.0185 -19.7802 -0.1
+ vertex 11.9563 -19.8175 -0.2
+ vertex 12.0185 -19.7802 -0.2
endloop
endfacet
facet normal 0.762299 -0.647226 0
outer loop
vertex 12.0185 -19.7802 0
- vertex 12.0697 -19.7199 -0.1
+ vertex 12.0697 -19.7199 -0.2
vertex 12.0697 -19.7199 0
endloop
endfacet
facet normal 0.762299 -0.647226 0
outer loop
- vertex 12.0697 -19.7199 -0.1
+ vertex 12.0697 -19.7199 -0.2
vertex 12.0185 -19.7802 0
- vertex 12.0185 -19.7802 -0.1
+ vertex 12.0185 -19.7802 -0.2
endloop
endfacet
facet normal 0.887752 -0.460323 0
outer loop
vertex 12.0697 -19.7199 0
- vertex 12.2803 -19.3138 -0.1
+ vertex 12.2803 -19.3138 -0.2
vertex 12.2803 -19.3138 0
endloop
endfacet
facet normal 0.887752 -0.460323 0
outer loop
- vertex 12.2803 -19.3138 -0.1
+ vertex 12.2803 -19.3138 -0.2
vertex 12.0697 -19.7199 0
- vertex 12.0697 -19.7199 -0.1
+ vertex 12.0697 -19.7199 -0.2
endloop
endfacet
facet normal 0.914794 -0.403921 0
outer loop
vertex 12.2803 -19.3138 0
- vertex 12.5806 -18.6336 -0.1
+ vertex 12.5806 -18.6336 -0.2
vertex 12.5806 -18.6336 0
endloop
endfacet
facet normal 0.914794 -0.403921 0
outer loop
- vertex 12.5806 -18.6336 -0.1
+ vertex 12.5806 -18.6336 -0.2
vertex 12.2803 -19.3138 0
- vertex 12.2803 -19.3138 -0.1
+ vertex 12.2803 -19.3138 -0.2
endloop
endfacet
facet normal 0.927919 -0.372782 0
outer loop
vertex 12.5806 -18.6336 0
- vertex 13.2984 -16.8469 -0.1
+ vertex 13.2984 -16.8469 -0.2
vertex 13.2984 -16.8469 0
endloop
endfacet
facet normal 0.927919 -0.372782 0
outer loop
- vertex 13.2984 -16.8469 -0.1
+ vertex 13.2984 -16.8469 -0.2
vertex 12.5806 -18.6336 0
- vertex 12.5806 -18.6336 -0.1
+ vertex 12.5806 -18.6336 -0.2
endloop
endfacet
facet normal 0.936103 -0.351727 0
outer loop
vertex 13.2984 -16.8469 0
- vertex 13.6397 -15.9386 -0.1
+ vertex 13.6397 -15.9386 -0.2
vertex 13.6397 -15.9386 0
endloop
endfacet
facet normal 0.936103 -0.351727 0
outer loop
- vertex 13.6397 -15.9386 -0.1
+ vertex 13.6397 -15.9386 -0.2
vertex 13.2984 -16.8469 0
- vertex 13.2984 -16.8469 -0.1
+ vertex 13.2984 -16.8469 -0.2
endloop
endfacet
facet normal 0.9425 -0.334207 0
outer loop
vertex 13.6397 -15.9386 0
- vertex 13.9185 -15.1524 -0.1
+ vertex 13.9185 -15.1524 -0.2
vertex 13.9185 -15.1524 0
endloop
endfacet
facet normal 0.9425 -0.334207 0
outer loop
- vertex 13.9185 -15.1524 -0.1
+ vertex 13.9185 -15.1524 -0.2
vertex 13.6397 -15.9386 0
- vertex 13.6397 -15.9386 -0.1
+ vertex 13.6397 -15.9386 -0.2
endloop
endfacet
facet normal 0.953687 -0.300802 0
outer loop
vertex 13.9185 -15.1524 0
- vertex 14.0967 -14.5873 -0.1
+ vertex 14.0967 -14.5873 -0.2
vertex 14.0967 -14.5873 0
endloop
endfacet
facet normal 0.953687 -0.300802 0
outer loop
- vertex 14.0967 -14.5873 -0.1
+ vertex 14.0967 -14.5873 -0.2
vertex 13.9185 -15.1524 0
- vertex 13.9185 -15.1524 -0.1
+ vertex 13.9185 -15.1524 -0.2
endloop
endfacet
facet normal 0.97364 -0.22809 0
outer loop
vertex 14.0967 -14.5873 0
- vertex 14.1362 -14.4186 -0.1
+ vertex 14.1362 -14.4186 -0.2
vertex 14.1362 -14.4186 0
endloop
endfacet
facet normal 0.97364 -0.22809 0
outer loop
- vertex 14.1362 -14.4186 -0.1
+ vertex 14.1362 -14.4186 -0.2
vertex 14.0967 -14.5873 0
- vertex 14.0967 -14.5873 -0.1
+ vertex 14.0967 -14.5873 -0.2
endloop
endfacet
facet normal 0.999999 -0.00127602 0
outer loop
vertex 14.1362 -14.4186 0
- vertex 14.1363 -14.3424 -0.1
+ vertex 14.1363 -14.3424 -0.2
vertex 14.1363 -14.3424 0
endloop
endfacet
facet normal 0.999999 -0.00127602 0
outer loop
- vertex 14.1363 -14.3424 -0.1
+ vertex 14.1363 -14.3424 -0.2
vertex 14.1362 -14.4186 0
- vertex 14.1362 -14.4186 -0.1
+ vertex 14.1362 -14.4186 -0.2
endloop
endfacet
facet normal 0.566913 0.823778 -0
outer loop
- vertex 14.1363 -14.3424 -0.1
+ vertex 14.1363 -14.3424 -0.2
vertex 14.0881 -14.3092 0
vertex 14.1363 -14.3424 0
endloop
@@ -3719,13 +3719,13 @@ solid OpenSCAD_Model
facet normal 0.566913 0.823778 0
outer loop
vertex 14.0881 -14.3092 0
- vertex 14.1363 -14.3424 -0.1
- vertex 14.0881 -14.3092 -0.1
+ vertex 14.1363 -14.3424 -0.2
+ vertex 14.0881 -14.3092 -0.2
endloop
endfacet
facet normal 0.351025 0.936366 -0
outer loop
- vertex 14.0881 -14.3092 -0.1
+ vertex 14.0881 -14.3092 -0.2
vertex 14.0003 -14.2763 0
vertex 14.0881 -14.3092 0
endloop
@@ -3733,13 +3733,13 @@ solid OpenSCAD_Model
facet normal 0.351025 0.936366 0
outer loop
vertex 14.0003 -14.2763 0
- vertex 14.0881 -14.3092 -0.1
- vertex 14.0003 -14.2763 -0.1
+ vertex 14.0881 -14.3092 -0.2
+ vertex 14.0003 -14.2763 -0.2
endloop
endfacet
facet normal 0.218251 0.975893 -0
outer loop
- vertex 14.0003 -14.2763 -0.1
+ vertex 14.0003 -14.2763 -0.2
vertex 13.7222 -14.2141 0
vertex 14.0003 -14.2763 0
endloop
@@ -3747,13 +3747,13 @@ solid OpenSCAD_Model
facet normal 0.218251 0.975893 0
outer loop
vertex 13.7222 -14.2141 0
- vertex 14.0003 -14.2763 -0.1
- vertex 13.7222 -14.2141 -0.1
+ vertex 14.0003 -14.2763 -0.2
+ vertex 13.7222 -14.2141 -0.2
endloop
endfacet
facet normal 0.134641 0.990894 -0
outer loop
- vertex 13.7222 -14.2141 -0.1
+ vertex 13.7222 -14.2141 -0.2
vertex 13.3346 -14.1615 0
vertex 13.7222 -14.2141 0
endloop
@@ -3761,13 +3761,13 @@ solid OpenSCAD_Model
facet normal 0.134641 0.990894 0
outer loop
vertex 13.3346 -14.1615 0
- vertex 13.7222 -14.2141 -0.1
- vertex 13.3346 -14.1615 -0.1
+ vertex 13.7222 -14.2141 -0.2
+ vertex 13.3346 -14.1615 -0.2
endloop
endfacet
facet normal 0.0805571 0.99675 -0
outer loop
- vertex 13.3346 -14.1615 -0.1
+ vertex 13.3346 -14.1615 -0.2
vertex 12.8698 -14.1239 0
vertex 13.3346 -14.1615 0
endloop
@@ -3775,13 +3775,13 @@ solid OpenSCAD_Model
facet normal 0.0805571 0.99675 0
outer loop
vertex 12.8698 -14.1239 0
- vertex 13.3346 -14.1615 -0.1
- vertex 12.8698 -14.1239 -0.1
+ vertex 13.3346 -14.1615 -0.2
+ vertex 12.8698 -14.1239 -0.2
endloop
endfacet
facet normal 0.256285 0.966601 -0
outer loop
- vertex 12.8698 -14.1239 -0.1
+ vertex 12.8698 -14.1239 -0.2
vertex 12.7363 -14.0885 0
vertex 12.8698 -14.1239 0
endloop
@@ -3789,13 +3789,13 @@ solid OpenSCAD_Model
facet normal 0.256285 0.966601 0
outer loop
vertex 12.7363 -14.0885 0
- vertex 12.8698 -14.1239 -0.1
- vertex 12.7363 -14.0885 -0.1
+ vertex 12.8698 -14.1239 -0.2
+ vertex 12.7363 -14.0885 -0.2
endloop
endfacet
facet normal 0.544571 0.838715 -0
outer loop
- vertex 12.7363 -14.0885 -0.1
+ vertex 12.7363 -14.0885 -0.2
vertex 12.6087 -14.0056 0
vertex 12.7363 -14.0885 0
endloop
@@ -3803,125 +3803,125 @@ solid OpenSCAD_Model
facet normal 0.544571 0.838715 0
outer loop
vertex 12.6087 -14.0056 0
- vertex 12.7363 -14.0885 -0.1
- vertex 12.6087 -14.0056 -0.1
+ vertex 12.7363 -14.0885 -0.2
+ vertex 12.6087 -14.0056 -0.2
endloop
endfacet
facet normal 0.739657 0.672985 0
outer loop
vertex 12.6087 -14.0056 0
- vertex 12.5013 -13.8876 -0.1
+ vertex 12.5013 -13.8876 -0.2
vertex 12.5013 -13.8876 0
endloop
endfacet
facet normal 0.739657 0.672985 0
outer loop
- vertex 12.5013 -13.8876 -0.1
+ vertex 12.5013 -13.8876 -0.2
vertex 12.6087 -14.0056 0
- vertex 12.6087 -14.0056 -0.1
+ vertex 12.6087 -14.0056 -0.2
endloop
endfacet
facet normal 0.888712 0.458466 0
outer loop
vertex 12.5013 -13.8876 0
- vertex 12.4287 -13.7469 -0.1
+ vertex 12.4287 -13.7469 -0.2
vertex 12.4287 -13.7469 0
endloop
endfacet
facet normal 0.888712 0.458466 0
outer loop
- vertex 12.4287 -13.7469 -0.1
+ vertex 12.4287 -13.7469 -0.2
vertex 12.5013 -13.8876 0
- vertex 12.5013 -13.8876 -0.1
+ vertex 12.5013 -13.8876 -0.2
endloop
endfacet
facet normal 0.969282 0.245953 0
outer loop
vertex 12.4287 -13.7469 0
- vertex 12.3997 -13.6324 -0.1
+ vertex 12.3997 -13.6324 -0.2
vertex 12.3997 -13.6324 0
endloop
endfacet
facet normal 0.969282 0.245953 0
outer loop
- vertex 12.3997 -13.6324 -0.1
+ vertex 12.3997 -13.6324 -0.2
vertex 12.4287 -13.7469 0
- vertex 12.4287 -13.7469 -0.1
+ vertex 12.4287 -13.7469 -0.2
endloop
endfacet
facet normal 0.995788 0.0916817 0
outer loop
vertex 12.3997 -13.6324 0
- vertex 12.3889 -13.5153 -0.1
+ vertex 12.3889 -13.5153 -0.2
vertex 12.3889 -13.5153 0
endloop
endfacet
facet normal 0.995788 0.0916817 0
outer loop
- vertex 12.3889 -13.5153 -0.1
+ vertex 12.3889 -13.5153 -0.2
vertex 12.3997 -13.6324 0
- vertex 12.3997 -13.6324 -0.1
+ vertex 12.3997 -13.6324 -0.2
endloop
endfacet
facet normal 0.99207 -0.12569 0
outer loop
vertex 12.3889 -13.5153 0
- vertex 12.419 -13.2773 -0.1
+ vertex 12.419 -13.2773 -0.2
vertex 12.419 -13.2773 0
endloop
endfacet
facet normal 0.99207 -0.12569 0
outer loop
- vertex 12.419 -13.2773 -0.1
+ vertex 12.419 -13.2773 -0.2
vertex 12.3889 -13.5153 0
- vertex 12.3889 -13.5153 -0.1
+ vertex 12.3889 -13.5153 -0.2
endloop
endfacet
facet normal 0.929521 -0.368768 0
outer loop
vertex 12.419 -13.2773 0
- vertex 12.513 -13.0405 -0.1
+ vertex 12.513 -13.0405 -0.2
vertex 12.513 -13.0405 0
endloop
endfacet
facet normal 0.929521 -0.368768 0
outer loop
- vertex 12.513 -13.0405 -0.1
+ vertex 12.513 -13.0405 -0.2
vertex 12.419 -13.2773 0
- vertex 12.419 -13.2773 -0.1
+ vertex 12.419 -13.2773 -0.2
endloop
endfacet
facet normal 0.832694 -0.553733 0
outer loop
vertex 12.513 -13.0405 0
- vertex 12.6645 -12.8127 -0.1
+ vertex 12.6645 -12.8127 -0.2
vertex 12.6645 -12.8127 0
endloop
endfacet
facet normal 0.832694 -0.553733 0
outer loop
- vertex 12.6645 -12.8127 -0.1
+ vertex 12.6645 -12.8127 -0.2
vertex 12.513 -13.0405 0
- vertex 12.513 -13.0405 -0.1
+ vertex 12.513 -13.0405 -0.2
endloop
endfacet
facet normal 0.721168 -0.69276 0
outer loop
vertex 12.6645 -12.8127 0
- vertex 12.8673 -12.6015 -0.1
+ vertex 12.8673 -12.6015 -0.2
vertex 12.8673 -12.6015 0
endloop
endfacet
facet normal 0.721168 -0.69276 0
outer loop
- vertex 12.8673 -12.6015 -0.1
+ vertex 12.8673 -12.6015 -0.2
vertex 12.6645 -12.8127 0
- vertex 12.6645 -12.8127 -0.1
+ vertex 12.6645 -12.8127 -0.2
endloop
endfacet
facet normal 0.601691 -0.798729 0
outer loop
- vertex 12.8673 -12.6015 -0.1
+ vertex 12.8673 -12.6015 -0.2
vertex 13.1153 -12.4148 0
vertex 12.8673 -12.6015 0
endloop
@@ -3929,13 +3929,13 @@ solid OpenSCAD_Model
facet normal 0.601691 -0.798729 0
outer loop
vertex 13.1153 -12.4148 0
- vertex 12.8673 -12.6015 -0.1
- vertex 13.1153 -12.4148 -0.1
+ vertex 12.8673 -12.6015 -0.2
+ vertex 13.1153 -12.4148 -0.2
endloop
endfacet
facet normal 0.474719 -0.880138 0
outer loop
- vertex 13.1153 -12.4148 -0.1
+ vertex 13.1153 -12.4148 -0.2
vertex 13.4022 -12.26 0
vertex 13.1153 -12.4148 0
endloop
@@ -3943,13 +3943,13 @@ solid OpenSCAD_Model
facet normal 0.474719 -0.880138 0
outer loop
vertex 13.4022 -12.26 0
- vertex 13.1153 -12.4148 -0.1
- vertex 13.4022 -12.26 -0.1
+ vertex 13.1153 -12.4148 -0.2
+ vertex 13.4022 -12.26 -0.2
endloop
endfacet
facet normal 0.33852 -0.940959 0
outer loop
- vertex 13.4022 -12.26 -0.1
+ vertex 13.4022 -12.26 -0.2
vertex 13.7217 -12.1451 0
vertex 13.4022 -12.26 0
endloop
@@ -3957,13 +3957,13 @@ solid OpenSCAD_Model
facet normal 0.33852 -0.940959 0
outer loop
vertex 13.7217 -12.1451 0
- vertex 13.4022 -12.26 -0.1
- vertex 13.7217 -12.1451 -0.1
+ vertex 13.4022 -12.26 -0.2
+ vertex 13.7217 -12.1451 -0.2
endloop
endfacet
facet normal 0.283558 -0.958955 0
outer loop
- vertex 13.7217 -12.1451 -0.1
+ vertex 13.7217 -12.1451 -0.2
vertex 16.811 -11.2316 0
vertex 13.7217 -12.1451 0
endloop
@@ -3971,13 +3971,13 @@ solid OpenSCAD_Model
facet normal 0.283558 -0.958955 0
outer loop
vertex 16.811 -11.2316 0
- vertex 13.7217 -12.1451 -0.1
- vertex 16.811 -11.2316 -0.1
+ vertex 13.7217 -12.1451 -0.2
+ vertex 16.811 -11.2316 -0.2
endloop
endfacet
facet normal 0.280008 -0.959998 0
outer loop
- vertex 16.811 -11.2316 -0.1
+ vertex 16.811 -11.2316 -0.2
vertex 17.5824 -11.0066 0
vertex 16.811 -11.2316 0
endloop
@@ -3985,13 +3985,13 @@ solid OpenSCAD_Model
facet normal 0.280008 -0.959998 0
outer loop
vertex 17.5824 -11.0066 0
- vertex 16.811 -11.2316 -0.1
- vertex 17.5824 -11.0066 -0.1
+ vertex 16.811 -11.2316 -0.2
+ vertex 17.5824 -11.0066 -0.2
endloop
endfacet
facet normal 0.251173 -0.967942 0
outer loop
- vertex 17.5824 -11.0066 -0.1
+ vertex 17.5824 -11.0066 -0.2
vertex 18.2126 -10.843 0
vertex 17.5824 -11.0066 0
endloop
@@ -3999,13 +3999,13 @@ solid OpenSCAD_Model
facet normal 0.251173 -0.967942 0
outer loop
vertex 18.2126 -10.843 0
- vertex 17.5824 -11.0066 -0.1
- vertex 18.2126 -10.843 -0.1
+ vertex 17.5824 -11.0066 -0.2
+ vertex 18.2126 -10.843 -0.2
endloop
endfacet
facet normal 0.200442 -0.979706 0
outer loop
- vertex 18.2126 -10.843 -0.1
+ vertex 18.2126 -10.843 -0.2
vertex 18.7132 -10.7406 0
vertex 18.2126 -10.843 0
endloop
@@ -4013,13 +4013,13 @@ solid OpenSCAD_Model
facet normal 0.200442 -0.979706 0
outer loop
vertex 18.7132 -10.7406 0
- vertex 18.2126 -10.843 -0.1
- vertex 18.7132 -10.7406 -0.1
+ vertex 18.2126 -10.843 -0.2
+ vertex 18.7132 -10.7406 -0.2
endloop
endfacet
facet normal 0.10841 -0.994106 0
outer loop
- vertex 18.7132 -10.7406 -0.1
+ vertex 18.7132 -10.7406 -0.2
vertex 19.0963 -10.6988 0
vertex 18.7132 -10.7406 0
endloop
@@ -4027,13 +4027,13 @@ solid OpenSCAD_Model
facet normal 0.10841 -0.994106 0
outer loop
vertex 19.0963 -10.6988 0
- vertex 18.7132 -10.7406 -0.1
- vertex 19.0963 -10.6988 -0.1
+ vertex 18.7132 -10.7406 -0.2
+ vertex 19.0963 -10.6988 -0.2
endloop
endfacet
facet normal -0.0664596 -0.997789 0
outer loop
- vertex 19.0963 -10.6988 -0.1
+ vertex 19.0963 -10.6988 -0.2
vertex 19.3736 -10.7173 0
vertex 19.0963 -10.6988 0
endloop
@@ -4041,13 +4041,13 @@ solid OpenSCAD_Model
facet normal -0.0664596 -0.997789 -0
outer loop
vertex 19.3736 -10.7173 0
- vertex 19.0963 -10.6988 -0.1
- vertex 19.3736 -10.7173 -0.1
+ vertex 19.0963 -10.6988 -0.2
+ vertex 19.3736 -10.7173 -0.2
endloop
endfacet
facet normal -0.172939 0.984933 0
outer loop
- vertex 8.12348 -21.5274 -0.1
+ vertex 8.12348 -21.5274 -0.2
vertex 7.71946 -21.5983 0
vertex 8.12348 -21.5274 0
endloop
@@ -4055,13 +4055,13 @@ solid OpenSCAD_Model
facet normal -0.172939 0.984933 0
outer loop
vertex 7.71946 -21.5983 0
- vertex 8.12348 -21.5274 -0.1
- vertex 7.71946 -21.5983 -0.1
+ vertex 8.12348 -21.5274 -0.2
+ vertex 7.71946 -21.5983 -0.2
endloop
endfacet
facet normal -0.287852 0.957675 0
outer loop
- vertex 7.71946 -21.5983 -0.1
+ vertex 7.71946 -21.5983 -0.2
vertex 7.29763 -21.7251 0
vertex 7.71946 -21.5983 0
endloop
@@ -4069,13 +4069,13 @@ solid OpenSCAD_Model
facet normal -0.287852 0.957675 0
outer loop
vertex 7.29763 -21.7251 0
- vertex 7.71946 -21.5983 -0.1
- vertex 7.29763 -21.7251 -0.1
+ vertex 7.71946 -21.5983 -0.2
+ vertex 7.29763 -21.7251 -0.2
endloop
endfacet
facet normal -0.387479 0.921879 0
outer loop
- vertex 7.29763 -21.7251 -0.1
+ vertex 7.29763 -21.7251 -0.2
vertex 6.8627 -21.9079 0
vertex 7.29763 -21.7251 0
endloop
@@ -4083,13 +4083,13 @@ solid OpenSCAD_Model
facet normal -0.387479 0.921879 0
outer loop
vertex 6.8627 -21.9079 0
- vertex 7.29763 -21.7251 -0.1
- vertex 6.8627 -21.9079 -0.1
+ vertex 7.29763 -21.7251 -0.2
+ vertex 6.8627 -21.9079 -0.2
endloop
endfacet
facet normal -0.474518 0.880246 0
outer loop
- vertex 6.8627 -21.9079 -0.1
+ vertex 6.8627 -21.9079 -0.2
vertex 6.41939 -22.1469 0
vertex 6.8627 -21.9079 0
endloop
@@ -4097,13 +4097,13 @@ solid OpenSCAD_Model
facet normal -0.474518 0.880246 0
outer loop
vertex 6.41939 -22.1469 0
- vertex 6.8627 -21.9079 -0.1
- vertex 6.41939 -22.1469 -0.1
+ vertex 6.8627 -21.9079 -0.2
+ vertex 6.41939 -22.1469 -0.2
endloop
endfacet
facet normal -0.551235 0.83435 0
outer loop
- vertex 6.41939 -22.1469 -0.1
+ vertex 6.41939 -22.1469 -0.2
vertex 5.97241 -22.4422 0
vertex 6.41939 -22.1469 0
endloop
@@ -4111,13 +4111,13 @@ solid OpenSCAD_Model
facet normal -0.551235 0.83435 0
outer loop
vertex 5.97241 -22.4422 0
- vertex 6.41939 -22.1469 -0.1
- vertex 5.97241 -22.4422 -0.1
+ vertex 6.41939 -22.1469 -0.2
+ vertex 5.97241 -22.4422 -0.2
endloop
endfacet
facet normal -0.619368 0.785101 0
outer loop
- vertex 5.97241 -22.4422 -0.1
+ vertex 5.97241 -22.4422 -0.2
vertex 5.52647 -22.794 0
vertex 5.97241 -22.4422 0
endloop
@@ -4125,13 +4125,13 @@ solid OpenSCAD_Model
facet normal -0.619368 0.785101 0
outer loop
vertex 5.52647 -22.794 0
- vertex 5.97241 -22.4422 -0.1
- vertex 5.52647 -22.794 -0.1
+ vertex 5.97241 -22.4422 -0.2
+ vertex 5.52647 -22.794 -0.2
endloop
endfacet
facet normal -0.680193 0.733033 0
outer loop
- vertex 5.52647 -22.794 -0.1
+ vertex 5.52647 -22.794 -0.2
vertex 5.08628 -23.2024 0
vertex 5.52647 -22.794 0
endloop
@@ -4139,307 +4139,307 @@ solid OpenSCAD_Model
facet normal -0.680193 0.733033 0
outer loop
vertex 5.08628 -23.2024 0
- vertex 5.52647 -22.794 -0.1
- vertex 5.08628 -23.2024 -0.1
+ vertex 5.52647 -22.794 -0.2
+ vertex 5.08628 -23.2024 -0.2
endloop
endfacet
facet normal -0.733294 0.679911 0
outer loop
- vertex 4.45147 -23.8871 -0.1
+ vertex 4.45147 -23.8871 -0.2
vertex 5.08628 -23.2024 0
- vertex 5.08628 -23.2024 -0.1
+ vertex 5.08628 -23.2024 -0.2
endloop
endfacet
facet normal -0.733294 0.679911 0
outer loop
vertex 5.08628 -23.2024 0
- vertex 4.45147 -23.8871 -0.1
+ vertex 4.45147 -23.8871 -0.2
vertex 4.45147 -23.8871 0
endloop
endfacet
facet normal -0.778151 0.628077 0
outer loop
- vertex 3.85887 -24.6213 -0.1
+ vertex 3.85887 -24.6213 -0.2
vertex 4.45147 -23.8871 0
- vertex 4.45147 -23.8871 -0.1
+ vertex 4.45147 -23.8871 -0.2
endloop
endfacet
facet normal -0.778151 0.628077 0
outer loop
vertex 4.45147 -23.8871 0
- vertex 3.85887 -24.6213 -0.1
+ vertex 3.85887 -24.6213 -0.2
vertex 3.85887 -24.6213 0
endloop
endfacet
facet normal -0.816383 0.577511 0
outer loop
- vertex 3.31148 -25.3951 -0.1
+ vertex 3.31148 -25.3951 -0.2
vertex 3.85887 -24.6213 0
- vertex 3.85887 -24.6213 -0.1
+ vertex 3.85887 -24.6213 -0.2
endloop
endfacet
facet normal -0.816383 0.577511 0
outer loop
vertex 3.85887 -24.6213 0
- vertex 3.31148 -25.3951 -0.1
+ vertex 3.31148 -25.3951 -0.2
vertex 3.31148 -25.3951 0
endloop
endfacet
facet normal -0.849413 0.527728 0
outer loop
- vertex 2.81229 -26.1986 -0.1
+ vertex 2.81229 -26.1986 -0.2
vertex 3.31148 -25.3951 0
- vertex 3.31148 -25.3951 -0.1
+ vertex 3.31148 -25.3951 -0.2
endloop
endfacet
facet normal -0.849413 0.527728 0
outer loop
vertex 3.31148 -25.3951 0
- vertex 2.81229 -26.1986 -0.1
+ vertex 2.81229 -26.1986 -0.2
vertex 2.81229 -26.1986 0
endloop
endfacet
facet normal -0.878359 0.478001 0
outer loop
- vertex 2.36428 -27.0218 -0.1
+ vertex 2.36428 -27.0218 -0.2
vertex 2.81229 -26.1986 0
- vertex 2.81229 -26.1986 -0.1
+ vertex 2.81229 -26.1986 -0.2
endloop
endfacet
facet normal -0.878359 0.478001 0
outer loop
vertex 2.81229 -26.1986 0
- vertex 2.36428 -27.0218 -0.1
+ vertex 2.36428 -27.0218 -0.2
vertex 2.36428 -27.0218 0
endloop
endfacet
facet normal -0.904067 0.427391 0
outer loop
- vertex 1.97046 -27.8549 -0.1
+ vertex 1.97046 -27.8549 -0.2
vertex 2.36428 -27.0218 0
- vertex 2.36428 -27.0218 -0.1
+ vertex 2.36428 -27.0218 -0.2
endloop
endfacet
facet normal -0.904067 0.427391 0
outer loop
vertex 2.36428 -27.0218 0
- vertex 1.97046 -27.8549 -0.1
+ vertex 1.97046 -27.8549 -0.2
vertex 1.97046 -27.8549 0
endloop
endfacet
facet normal -0.927139 0.374717 0
outer loop
- vertex 1.63381 -28.6878 -0.1
+ vertex 1.63381 -28.6878 -0.2
vertex 1.97046 -27.8549 0
- vertex 1.97046 -27.8549 -0.1
+ vertex 1.97046 -27.8549 -0.2
endloop
endfacet
facet normal -0.927139 0.374717 0
outer loop
vertex 1.97046 -27.8549 0
- vertex 1.63381 -28.6878 -0.1
+ vertex 1.63381 -28.6878 -0.2
vertex 1.63381 -28.6878 0
endloop
endfacet
facet normal -0.947927 0.318489 0
outer loop
- vertex 1.35733 -29.5107 -0.1
+ vertex 1.35733 -29.5107 -0.2
vertex 1.63381 -28.6878 0
- vertex 1.63381 -28.6878 -0.1
+ vertex 1.63381 -28.6878 -0.2
endloop
endfacet
facet normal -0.947927 0.318489 0
outer loop
vertex 1.63381 -28.6878 0
- vertex 1.35733 -29.5107 -0.1
+ vertex 1.35733 -29.5107 -0.2
vertex 1.35733 -29.5107 0
endloop
endfacet
facet normal -0.966471 0.256775 0
outer loop
- vertex 1.144 -30.3137 -0.1
+ vertex 1.144 -30.3137 -0.2
vertex 1.35733 -29.5107 0
- vertex 1.35733 -29.5107 -0.1
+ vertex 1.35733 -29.5107 -0.2
endloop
endfacet
facet normal -0.966471 0.256775 0
outer loop
vertex 1.35733 -29.5107 0
- vertex 1.144 -30.3137 -0.1
+ vertex 1.144 -30.3137 -0.2
vertex 1.144 -30.3137 0
endloop
endfacet
facet normal -0.982354 0.187033 0
outer loop
- vertex 0.99682 -31.0867 -0.1
+ vertex 0.99682 -31.0867 -0.2
vertex 1.144 -30.3137 0
- vertex 1.144 -30.3137 -0.1
+ vertex 1.144 -30.3137 -0.2
endloop
endfacet
facet normal -0.982354 0.187033 0
outer loop
vertex 1.144 -30.3137 0
- vertex 0.99682 -31.0867 -0.1
+ vertex 0.99682 -31.0867 -0.2
vertex 0.99682 -31.0867 0
endloop
endfacet
facet normal -0.994383 0.105841 0
outer loop
- vertex 0.918778 -31.8199 -0.1
+ vertex 0.918778 -31.8199 -0.2
vertex 0.99682 -31.0867 0
- vertex 0.99682 -31.0867 -0.1
+ vertex 0.99682 -31.0867 -0.2
endloop
endfacet
facet normal -0.994383 0.105841 0
outer loop
vertex 0.99682 -31.0867 0
- vertex 0.918778 -31.8199 -0.1
+ vertex 0.918778 -31.8199 -0.2
vertex 0.918778 -31.8199 0
endloop
endfacet
facet normal -0.999392 0.0348629 0
outer loop
- vertex 0.906618 -32.1685 -0.1
+ vertex 0.906618 -32.1685 -0.2
vertex 0.918778 -31.8199 0
- vertex 0.918778 -31.8199 -0.1
+ vertex 0.918778 -31.8199 -0.2
endloop
endfacet
facet normal -0.999392 0.0348629 0
outer loop
vertex 0.918778 -31.8199 0
- vertex 0.906618 -32.1685 -0.1
+ vertex 0.906618 -32.1685 -0.2
vertex 0.906618 -32.1685 0
endloop
endfacet
facet normal -0.999826 -0.0186499 0
outer loop
- vertex 0.912865 -32.5034 -0.1
+ vertex 0.912865 -32.5034 -0.2
vertex 0.906618 -32.1685 0
- vertex 0.906618 -32.1685 -0.1
+ vertex 0.906618 -32.1685 -0.2
endloop
endfacet
facet normal -0.999826 -0.0186499 0
outer loop
vertex 0.906618 -32.1685 0
- vertex 0.912865 -32.5034 -0.1
+ vertex 0.912865 -32.5034 -0.2
vertex 0.912865 -32.5034 0
endloop
endfacet
facet normal -0.996955 -0.077982 0
outer loop
- vertex 0.937893 -32.8234 -0.1
+ vertex 0.937893 -32.8234 -0.2
vertex 0.912865 -32.5034 0
- vertex 0.912865 -32.5034 -0.1
+ vertex 0.912865 -32.5034 -0.2
endloop
endfacet
facet normal -0.996955 -0.077982 0
outer loop
vertex 0.912865 -32.5034 0
- vertex 0.937893 -32.8234 -0.1
+ vertex 0.937893 -32.8234 -0.2
vertex 0.937893 -32.8234 0
endloop
endfacet
facet normal -0.98959 -0.143913 0
outer loop
- vertex 0.982074 -33.1272 -0.1
+ vertex 0.982074 -33.1272 -0.2
vertex 0.937893 -32.8234 0
- vertex 0.937893 -32.8234 -0.1
+ vertex 0.937893 -32.8234 -0.2
endloop
endfacet
facet normal -0.98959 -0.143913 0
outer loop
vertex 0.937893 -32.8234 0
- vertex 0.982074 -33.1272 -0.1
+ vertex 0.982074 -33.1272 -0.2
vertex 0.982074 -33.1272 0
endloop
endfacet
facet normal -0.97614 -0.217144 0
outer loop
- vertex 1.04578 -33.4136 -0.1
+ vertex 1.04578 -33.4136 -0.2
vertex 0.982074 -33.1272 0
- vertex 0.982074 -33.1272 -0.1
+ vertex 0.982074 -33.1272 -0.2
endloop
endfacet
facet normal -0.97614 -0.217144 0
outer loop
vertex 0.982074 -33.1272 0
- vertex 1.04578 -33.4136 -0.1
+ vertex 1.04578 -33.4136 -0.2
vertex 1.04578 -33.4136 0
endloop
endfacet
facet normal -0.954541 -0.298078 0
outer loop
- vertex 1.1294 -33.6813 -0.1
+ vertex 1.1294 -33.6813 -0.2
vertex 1.04578 -33.4136 0
- vertex 1.04578 -33.4136 -0.1
+ vertex 1.04578 -33.4136 -0.2
endloop
endfacet
facet normal -0.954541 -0.298078 0
outer loop
vertex 1.04578 -33.4136 0
- vertex 1.1294 -33.6813 -0.1
+ vertex 1.1294 -33.6813 -0.2
vertex 1.1294 -33.6813 0
endloop
endfacet
facet normal -0.922268 -0.38655 0
outer loop
- vertex 1.23329 -33.9292 -0.1
+ vertex 1.23329 -33.9292 -0.2
vertex 1.1294 -33.6813 0
- vertex 1.1294 -33.6813 -0.1
+ vertex 1.1294 -33.6813 -0.2
endloop
endfacet
facet normal -0.922268 -0.38655 0
outer loop
vertex 1.1294 -33.6813 0
- vertex 1.23329 -33.9292 -0.1
+ vertex 1.23329 -33.9292 -0.2
vertex 1.23329 -33.9292 0
endloop
endfacet
facet normal -0.876493 -0.481415 0
outer loop
- vertex 1.35782 -34.1559 -0.1
+ vertex 1.35782 -34.1559 -0.2
vertex 1.23329 -33.9292 0
- vertex 1.23329 -33.9292 -0.1
+ vertex 1.23329 -33.9292 -0.2
endloop
endfacet
facet normal -0.876493 -0.481415 0
outer loop
vertex 1.23329 -33.9292 0
- vertex 1.35782 -34.1559 -0.1
+ vertex 1.35782 -34.1559 -0.2
vertex 1.35782 -34.1559 0
endloop
endfacet
facet normal -0.814521 -0.580134 0
outer loop
- vertex 1.50339 -34.3603 -0.1
+ vertex 1.50339 -34.3603 -0.2
vertex 1.35782 -34.1559 0
- vertex 1.35782 -34.1559 -0.1
+ vertex 1.35782 -34.1559 -0.2
endloop
endfacet
facet normal -0.814521 -0.580134 0
outer loop
vertex 1.35782 -34.1559 0
- vertex 1.50339 -34.3603 -0.1
+ vertex 1.50339 -34.3603 -0.2
vertex 1.50339 -34.3603 0
endloop
endfacet
facet normal -0.734597 -0.678504 0
outer loop
- vertex 1.67035 -34.5411 -0.1
+ vertex 1.67035 -34.5411 -0.2
vertex 1.50339 -34.3603 0
- vertex 1.50339 -34.3603 -0.1
+ vertex 1.50339 -34.3603 -0.2
endloop
endfacet
facet normal -0.734597 -0.678504 0
outer loop
vertex 1.50339 -34.3603 0
- vertex 1.67035 -34.5411 -0.1
+ vertex 1.67035 -34.5411 -0.2
vertex 1.67035 -34.5411 0
endloop
endfacet
facet normal -0.643892 -0.765116 0
outer loop
- vertex 1.67035 -34.5411 -0.1
+ vertex 1.67035 -34.5411 -0.2
vertex 1.8149 -34.6627 0
vertex 1.67035 -34.5411 0
endloop
@@ -4447,13 +4447,13 @@ solid OpenSCAD_Model
facet normal -0.643892 -0.765116 -0
outer loop
vertex 1.8149 -34.6627 0
- vertex 1.67035 -34.5411 -0.1
- vertex 1.8149 -34.6627 -0.1
+ vertex 1.67035 -34.5411 -0.2
+ vertex 1.8149 -34.6627 -0.2
endloop
endfacet
facet normal -0.554297 -0.832319 0
outer loop
- vertex 1.8149 -34.6627 -0.1
+ vertex 1.8149 -34.6627 -0.2
vertex 1.97535 -34.7696 0
vertex 1.8149 -34.6627 0
endloop
@@ -4461,13 +4461,13 @@ solid OpenSCAD_Model
facet normal -0.554297 -0.832319 -0
outer loop
vertex 1.97535 -34.7696 0
- vertex 1.8149 -34.6627 -0.1
- vertex 1.97535 -34.7696 -0.1
+ vertex 1.8149 -34.6627 -0.2
+ vertex 1.97535 -34.7696 -0.2
endloop
endfacet
facet normal -0.465589 -0.885001 0
outer loop
- vertex 1.97535 -34.7696 -0.1
+ vertex 1.97535 -34.7696 -0.2
vertex 2.15022 -34.8616 0
vertex 1.97535 -34.7696 0
endloop
@@ -4475,13 +4475,13 @@ solid OpenSCAD_Model
facet normal -0.465589 -0.885001 -0
outer loop
vertex 2.15022 -34.8616 0
- vertex 1.97535 -34.7696 -0.1
- vertex 2.15022 -34.8616 -0.1
+ vertex 1.97535 -34.7696 -0.2
+ vertex 2.15022 -34.8616 -0.2
endloop
endfacet
facet normal -0.379703 -0.925108 0
outer loop
- vertex 2.15022 -34.8616 -0.1
+ vertex 2.15022 -34.8616 -0.2
vertex 2.33801 -34.9386 0
vertex 2.15022 -34.8616 0
endloop
@@ -4489,13 +4489,13 @@ solid OpenSCAD_Model
facet normal -0.379703 -0.925108 -0
outer loop
vertex 2.33801 -34.9386 0
- vertex 2.15022 -34.8616 -0.1
- vertex 2.33801 -34.9386 -0.1
+ vertex 2.15022 -34.8616 -0.2
+ vertex 2.33801 -34.9386 -0.2
endloop
endfacet
facet normal -0.297589 -0.954694 0
outer loop
- vertex 2.33801 -34.9386 -0.1
+ vertex 2.33801 -34.9386 -0.2
vertex 2.53723 -35.0007 0
vertex 2.33801 -34.9386 0
endloop
@@ -4503,13 +4503,13 @@ solid OpenSCAD_Model
facet normal -0.297589 -0.954694 -0
outer loop
vertex 2.53723 -35.0007 0
- vertex 2.33801 -34.9386 -0.1
- vertex 2.53723 -35.0007 -0.1
+ vertex 2.33801 -34.9386 -0.2
+ vertex 2.53723 -35.0007 -0.2
endloop
endfacet
facet normal -0.219494 -0.975614 0
outer loop
- vertex 2.53723 -35.0007 -0.1
+ vertex 2.53723 -35.0007 -0.2
vertex 2.7464 -35.0478 0
vertex 2.53723 -35.0007 0
endloop
@@ -4517,13 +4517,13 @@ solid OpenSCAD_Model
facet normal -0.219494 -0.975614 -0
outer loop
vertex 2.7464 -35.0478 0
- vertex 2.53723 -35.0007 -0.1
- vertex 2.7464 -35.0478 -0.1
+ vertex 2.53723 -35.0007 -0.2
+ vertex 2.7464 -35.0478 -0.2
endloop
endfacet
facet normal -0.109599 -0.993976 0
outer loop
- vertex 2.7464 -35.0478 -0.1
+ vertex 2.7464 -35.0478 -0.2
vertex 3.18861 -35.0966 0
vertex 2.7464 -35.0478 0
endloop
@@ -4531,13 +4531,13 @@ solid OpenSCAD_Model
facet normal -0.109599 -0.993976 -0
outer loop
vertex 3.18861 -35.0966 0
- vertex 2.7464 -35.0478 -0.1
- vertex 3.18861 -35.0966 -0.1
+ vertex 2.7464 -35.0478 -0.2
+ vertex 3.18861 -35.0966 -0.2
endloop
endfacet
facet normal 0.0261117 -0.999659 0
outer loop
- vertex 3.18861 -35.0966 -0.1
+ vertex 3.18861 -35.0966 -0.2
vertex 3.65273 -35.0844 0
vertex 3.18861 -35.0966 0
endloop
@@ -4545,13 +4545,13 @@ solid OpenSCAD_Model
facet normal 0.0261117 -0.999659 0
outer loop
vertex 3.65273 -35.0844 0
- vertex 3.18861 -35.0966 -0.1
- vertex 3.65273 -35.0844 -0.1
+ vertex 3.18861 -35.0966 -0.2
+ vertex 3.65273 -35.0844 -0.2
endloop
endfacet
facet normal 0.153159 -0.988202 0
outer loop
- vertex 3.65273 -35.0844 -0.1
+ vertex 3.65273 -35.0844 -0.2
vertex 4.12685 -35.011 0
vertex 3.65273 -35.0844 0
endloop
@@ -4559,13 +4559,13 @@ solid OpenSCAD_Model
facet normal 0.153159 -0.988202 0
outer loop
vertex 4.12685 -35.011 0
- vertex 3.65273 -35.0844 -0.1
- vertex 4.12685 -35.011 -0.1
+ vertex 3.65273 -35.0844 -0.2
+ vertex 4.12685 -35.011 -0.2
endloop
endfacet
facet normal 0.275485 -0.961305 0
outer loop
- vertex 4.12685 -35.011 -0.1
+ vertex 4.12685 -35.011 -0.2
vertex 4.59905 -34.8756 0
vertex 4.12685 -35.011 0
endloop
@@ -4573,13 +4573,13 @@ solid OpenSCAD_Model
facet normal 0.275485 -0.961305 0
outer loop
vertex 4.59905 -34.8756 0
- vertex 4.12685 -35.011 -0.1
- vertex 4.59905 -34.8756 -0.1
+ vertex 4.12685 -35.011 -0.2
+ vertex 4.59905 -34.8756 -0.2
endloop
endfacet
facet normal 0.39595 -0.918272 0
outer loop
- vertex 4.59905 -34.8756 -0.1
+ vertex 4.59905 -34.8756 -0.2
vertex 5.05744 -34.678 0
vertex 4.59905 -34.8756 0
endloop
@@ -4587,13 +4587,13 @@ solid OpenSCAD_Model
facet normal 0.39595 -0.918272 0
outer loop
vertex 5.05744 -34.678 0
- vertex 4.59905 -34.8756 -0.1
- vertex 5.05744 -34.678 -0.1
+ vertex 4.59905 -34.8756 -0.2
+ vertex 5.05744 -34.678 -0.2
endloop
endfacet
facet normal 0.498797 -0.866719 0
outer loop
- vertex 5.05744 -34.678 -0.1
+ vertex 5.05744 -34.678 -0.2
vertex 5.41146 -34.4742 0
vertex 5.05744 -34.678 0
endloop
@@ -4601,13 +4601,13 @@ solid OpenSCAD_Model
facet normal 0.498797 -0.866719 0
outer loop
vertex 5.41146 -34.4742 0
- vertex 5.05744 -34.678 -0.1
- vertex 5.41146 -34.4742 -0.1
+ vertex 5.05744 -34.678 -0.2
+ vertex 5.41146 -34.4742 -0.2
endloop
endfacet
facet normal 0.615093 -0.788455 0
outer loop
- vertex 5.41146 -34.4742 -0.1
+ vertex 5.41146 -34.4742 -0.2
vertex 5.72486 -34.2297 0
vertex 5.41146 -34.4742 0
endloop
@@ -4615,307 +4615,307 @@ solid OpenSCAD_Model
facet normal 0.615093 -0.788455 0
outer loop
vertex 5.72486 -34.2297 0
- vertex 5.41146 -34.4742 -0.1
- vertex 5.72486 -34.2297 -0.1
+ vertex 5.41146 -34.4742 -0.2
+ vertex 5.72486 -34.2297 -0.2
endloop
endfacet
facet normal 0.708025 -0.706188 0
outer loop
vertex 5.72486 -34.2297 0
- vertex 5.87315 -34.0811 -0.1
+ vertex 5.87315 -34.0811 -0.2
vertex 5.87315 -34.0811 0
endloop
endfacet
facet normal 0.708025 -0.706188 0
outer loop
- vertex 5.87315 -34.0811 -0.1
+ vertex 5.87315 -34.0811 -0.2
vertex 5.72486 -34.2297 0
- vertex 5.72486 -34.2297 -0.1
+ vertex 5.72486 -34.2297 -0.2
endloop
endfacet
facet normal 0.762128 -0.647427 0
outer loop
vertex 5.87315 -34.0811 0
- vertex 6.01946 -33.9088 -0.1
+ vertex 6.01946 -33.9088 -0.2
vertex 6.01946 -33.9088 0
endloop
endfacet
facet normal 0.762128 -0.647427 0
outer loop
- vertex 6.01946 -33.9088 -0.1
+ vertex 6.01946 -33.9088 -0.2
vertex 5.87315 -34.0811 0
- vertex 5.87315 -34.0811 -0.1
+ vertex 5.87315 -34.0811 -0.2
endloop
endfacet
facet normal 0.824099 -0.566446 0
outer loop
vertex 6.01946 -33.9088 0
- vertex 6.31707 -33.4759 -0.1
+ vertex 6.31707 -33.4759 -0.2
vertex 6.31707 -33.4759 0
endloop
endfacet
facet normal 0.824099 -0.566446 0
outer loop
- vertex 6.31707 -33.4759 -0.1
+ vertex 6.31707 -33.4759 -0.2
vertex 6.01946 -33.9088 0
- vertex 6.01946 -33.9088 -0.1
+ vertex 6.01946 -33.9088 -0.2
endloop
endfacet
facet normal 0.874277 -0.485427 0
outer loop
vertex 6.31707 -33.4759 0
- vertex 6.63949 -32.8952 -0.1
+ vertex 6.63949 -32.8952 -0.2
vertex 6.63949 -32.8952 0
endloop
endfacet
facet normal 0.874277 -0.485427 0
outer loop
- vertex 6.63949 -32.8952 -0.1
+ vertex 6.63949 -32.8952 -0.2
vertex 6.31707 -33.4759 0
- vertex 6.31707 -33.4759 -0.1
+ vertex 6.31707 -33.4759 -0.2
endloop
endfacet
facet normal 0.900468 -0.434923 0
outer loop
vertex 6.63949 -32.8952 0
- vertex 7.00854 -32.1311 -0.1
+ vertex 7.00854 -32.1311 -0.2
vertex 7.00854 -32.1311 0
endloop
endfacet
facet normal 0.900468 -0.434923 0
outer loop
- vertex 7.00854 -32.1311 -0.1
+ vertex 7.00854 -32.1311 -0.2
vertex 6.63949 -32.8952 0
- vertex 6.63949 -32.8952 -0.1
+ vertex 6.63949 -32.8952 -0.2
endloop
endfacet
facet normal 0.913625 -0.406558 0
outer loop
vertex 7.00854 -32.1311 0
- vertex 7.44603 -31.1479 -0.1
+ vertex 7.44603 -31.1479 -0.2
vertex 7.44603 -31.1479 0
endloop
endfacet
facet normal 0.913625 -0.406558 0
outer loop
- vertex 7.44603 -31.1479 -0.1
+ vertex 7.44603 -31.1479 -0.2
vertex 7.00854 -32.1311 0
- vertex 7.00854 -32.1311 -0.1
+ vertex 7.00854 -32.1311 -0.2
endloop
endfacet
facet normal 0.919886 -0.392186 0
outer loop
vertex 7.44603 -31.1479 0
- vertex 7.97377 -29.9101 -0.1
+ vertex 7.97377 -29.9101 -0.2
vertex 7.97377 -29.9101 0
endloop
endfacet
facet normal 0.919886 -0.392186 0
outer loop
- vertex 7.97377 -29.9101 -0.1
+ vertex 7.97377 -29.9101 -0.2
vertex 7.44603 -31.1479 0
- vertex 7.44603 -31.1479 -0.1
+ vertex 7.44603 -31.1479 -0.2
endloop
endfacet
facet normal 0.924332 -0.381588 0
outer loop
vertex 7.97377 -29.9101 0
- vertex 9.07864 -27.2338 -0.1
+ vertex 9.07864 -27.2338 -0.2
vertex 9.07864 -27.2338 0
endloop
endfacet
facet normal 0.924332 -0.381588 0
outer loop
- vertex 9.07864 -27.2338 -0.1
+ vertex 9.07864 -27.2338 -0.2
vertex 7.97377 -29.9101 0
- vertex 7.97377 -29.9101 -0.1
+ vertex 7.97377 -29.9101 -0.2
endloop
endfacet
facet normal 0.932155 -0.362059 0
outer loop
vertex 9.07864 -27.2338 0
- vertex 9.46376 -26.2422 -0.1
+ vertex 9.46376 -26.2422 -0.2
vertex 9.46376 -26.2422 0
endloop
endfacet
facet normal 0.932155 -0.362059 0
outer loop
- vertex 9.46376 -26.2422 -0.1
+ vertex 9.46376 -26.2422 -0.2
vertex 9.07864 -27.2338 0
- vertex 9.07864 -27.2338 -0.1
+ vertex 9.07864 -27.2338 -0.2
endloop
endfacet
facet normal 0.941332 -0.337483 0
outer loop
vertex 9.46376 -26.2422 0
- vertex 9.75283 -25.4359 -0.1
+ vertex 9.75283 -25.4359 -0.2
vertex 9.75283 -25.4359 0
endloop
endfacet
facet normal 0.941332 -0.337483 0
outer loop
- vertex 9.75283 -25.4359 -0.1
+ vertex 9.75283 -25.4359 -0.2
vertex 9.46376 -26.2422 0
- vertex 9.46376 -26.2422 -0.1
+ vertex 9.46376 -26.2422 -0.2
endloop
endfacet
facet normal 0.954562 -0.298012 0
outer loop
vertex 9.75283 -25.4359 0
- vertex 9.95745 -24.7805 -0.1
+ vertex 9.95745 -24.7805 -0.2
vertex 9.95745 -24.7805 0
endloop
endfacet
facet normal 0.954562 -0.298012 0
outer loop
- vertex 9.95745 -24.7805 -0.1
+ vertex 9.95745 -24.7805 -0.2
vertex 9.75283 -25.4359 0
- vertex 9.75283 -25.4359 -0.1
+ vertex 9.75283 -25.4359 -0.2
endloop
endfacet
facet normal 0.971378 -0.237537 0
outer loop
vertex 9.95745 -24.7805 0
- vertex 10.0892 -24.2416 -0.1
+ vertex 10.0892 -24.2416 -0.2
vertex 10.0892 -24.2416 0
endloop
endfacet
facet normal 0.971378 -0.237537 0
outer loop
- vertex 10.0892 -24.2416 -0.1
+ vertex 10.0892 -24.2416 -0.2
vertex 9.95745 -24.7805 0
- vertex 9.95745 -24.7805 -0.1
+ vertex 9.95745 -24.7805 -0.2
endloop
endfacet
facet normal 0.98828 -0.15265 0
outer loop
vertex 10.0892 -24.2416 0
- vertex 10.1598 -23.7848 -0.1
+ vertex 10.1598 -23.7848 -0.2
vertex 10.1598 -23.7848 0
endloop
endfacet
facet normal 0.98828 -0.15265 0
outer loop
- vertex 10.1598 -23.7848 -0.1
+ vertex 10.1598 -23.7848 -0.2
vertex 10.0892 -24.2416 0
- vertex 10.0892 -24.2416 -0.1
+ vertex 10.0892 -24.2416 -0.2
endloop
endfacet
facet normal 0.998693 -0.0511194 0
outer loop
vertex 10.1598 -23.7848 0
- vertex 10.1807 -23.3758 -0.1
+ vertex 10.1807 -23.3758 -0.2
vertex 10.1807 -23.3758 0
endloop
endfacet
facet normal 0.998693 -0.0511194 0
outer loop
- vertex 10.1807 -23.3758 -0.1
+ vertex 10.1807 -23.3758 -0.2
vertex 10.1598 -23.7848 0
- vertex 10.1598 -23.7848 -0.1
+ vertex 10.1598 -23.7848 -0.2
endloop
endfacet
facet normal 0.997227 0.0744219 0
outer loop
vertex 10.1807 -23.3758 0
- vertex 10.149 -22.9513 -0.1
+ vertex 10.149 -22.9513 -0.2
vertex 10.149 -22.9513 0
endloop
endfacet
facet normal 0.997227 0.0744219 0
outer loop
- vertex 10.149 -22.9513 -0.1
+ vertex 10.149 -22.9513 -0.2
vertex 10.1807 -23.3758 0
- vertex 10.1807 -23.3758 -0.1
+ vertex 10.1807 -23.3758 -0.2
endloop
endfacet
facet normal 0.980241 0.197806 0
outer loop
vertex 10.149 -22.9513 0
- vertex 10.1103 -22.7594 -0.1
+ vertex 10.1103 -22.7594 -0.2
vertex 10.1103 -22.7594 0
endloop
endfacet
facet normal 0.980241 0.197806 0
outer loop
- vertex 10.1103 -22.7594 -0.1
+ vertex 10.1103 -22.7594 -0.2
vertex 10.149 -22.9513 0
- vertex 10.149 -22.9513 -0.1
+ vertex 10.149 -22.9513 -0.2
endloop
endfacet
facet normal 0.958253 0.285922 0
outer loop
vertex 10.1103 -22.7594 0
- vertex 10.0571 -22.5812 -0.1
+ vertex 10.0571 -22.5812 -0.2
vertex 10.0571 -22.5812 0
endloop
endfacet
facet normal 0.958253 0.285922 0
outer loop
- vertex 10.0571 -22.5812 -0.1
+ vertex 10.0571 -22.5812 -0.2
vertex 10.1103 -22.7594 0
- vertex 10.1103 -22.7594 -0.1
+ vertex 10.1103 -22.7594 -0.2
endloop
endfacet
facet normal 0.926088 0.377307 0
outer loop
vertex 10.0571 -22.5812 0
- vertex 9.99008 -22.4166 -0.1
+ vertex 9.99008 -22.4166 -0.2
vertex 9.99008 -22.4166 0
endloop
endfacet
facet normal 0.926088 0.377307 0
outer loop
- vertex 9.99008 -22.4166 -0.1
+ vertex 9.99008 -22.4166 -0.2
vertex 10.0571 -22.5812 0
- vertex 10.0571 -22.5812 -0.1
+ vertex 10.0571 -22.5812 -0.2
endloop
endfacet
facet normal 0.882715 0.469908 0
outer loop
vertex 9.99008 -22.4166 0
- vertex 9.90973 -22.2656 -0.1
+ vertex 9.90973 -22.2656 -0.2
vertex 9.90973 -22.2656 0
endloop
endfacet
facet normal 0.882715 0.469908 0
outer loop
- vertex 9.90973 -22.2656 -0.1
+ vertex 9.90973 -22.2656 -0.2
vertex 9.99008 -22.4166 0
- vertex 9.99008 -22.4166 -0.1
+ vertex 9.99008 -22.4166 -0.2
endloop
endfacet
facet normal 0.827725 0.561134 0
outer loop
vertex 9.90973 -22.2656 0
- vertex 9.81668 -22.1284 -0.1
+ vertex 9.81668 -22.1284 -0.2
vertex 9.81668 -22.1284 0
endloop
endfacet
facet normal 0.827725 0.561134 0
outer loop
- vertex 9.81668 -22.1284 -0.1
+ vertex 9.81668 -22.1284 -0.2
vertex 9.90973 -22.2656 0
- vertex 9.90973 -22.2656 -0.1
+ vertex 9.90973 -22.2656 -0.2
endloop
endfacet
facet normal 0.761518 0.648143 0
outer loop
vertex 9.81668 -22.1284 0
- vertex 9.71152 -22.0048 -0.1
+ vertex 9.71152 -22.0048 -0.2
vertex 9.71152 -22.0048 0
endloop
endfacet
facet normal 0.761518 0.648143 0
outer loop
- vertex 9.71152 -22.0048 -0.1
+ vertex 9.71152 -22.0048 -0.2
vertex 9.81668 -22.1284 0
- vertex 9.81668 -22.1284 -0.1
+ vertex 9.81668 -22.1284 -0.2
endloop
endfacet
facet normal 0.685415 0.728153 -0
outer loop
- vertex 9.71152 -22.0048 -0.1
+ vertex 9.71152 -22.0048 -0.2
vertex 9.59484 -21.895 0
vertex 9.71152 -22.0048 0
endloop
@@ -4923,13 +4923,13 @@ solid OpenSCAD_Model
facet normal 0.685415 0.728153 0
outer loop
vertex 9.59484 -21.895 0
- vertex 9.71152 -22.0048 -0.1
- vertex 9.59484 -21.895 -0.1
+ vertex 9.71152 -22.0048 -0.2
+ vertex 9.59484 -21.895 -0.2
endloop
endfacet
facet normal 0.601514 0.798862 -0
outer loop
- vertex 9.59484 -21.895 -0.1
+ vertex 9.59484 -21.895 -0.2
vertex 9.46723 -21.7989 0
vertex 9.59484 -21.895 0
endloop
@@ -4937,13 +4937,13 @@ solid OpenSCAD_Model
facet normal 0.601514 0.798862 0
outer loop
vertex 9.46723 -21.7989 0
- vertex 9.59484 -21.895 -0.1
- vertex 9.46723 -21.7989 -0.1
+ vertex 9.59484 -21.895 -0.2
+ vertex 9.46723 -21.7989 -0.2
endloop
endfacet
facet normal 0.467006 0.884254 -0
outer loop
- vertex 9.46723 -21.7989 -0.1
+ vertex 9.46723 -21.7989 -0.2
vertex 9.18157 -21.6481 0
vertex 9.46723 -21.7989 0
endloop
@@ -4951,13 +4951,13 @@ solid OpenSCAD_Model
facet normal 0.467006 0.884254 0
outer loop
vertex 9.18157 -21.6481 0
- vertex 9.46723 -21.7989 -0.1
- vertex 9.18157 -21.6481 -0.1
+ vertex 9.46723 -21.7989 -0.2
+ vertex 9.18157 -21.6481 -0.2
endloop
endfacet
facet normal 0.284506 0.958674 -0
outer loop
- vertex 9.18157 -21.6481 -0.1
+ vertex 9.18157 -21.6481 -0.2
vertex 8.85925 -21.5524 0
vertex 9.18157 -21.6481 0
endloop
@@ -4965,13 +4965,13 @@ solid OpenSCAD_Model
facet normal 0.284506 0.958674 0
outer loop
vertex 8.85925 -21.5524 0
- vertex 9.18157 -21.6481 -0.1
- vertex 8.85925 -21.5524 -0.1
+ vertex 9.18157 -21.6481 -0.2
+ vertex 8.85925 -21.5524 -0.2
endloop
endfacet
facet normal 0.112981 0.993597 -0
outer loop
- vertex 8.85925 -21.5524 -0.1
+ vertex 8.85925 -21.5524 -0.2
vertex 8.50498 -21.5121 0
vertex 8.85925 -21.5524 0
endloop
@@ -4979,13 +4979,13 @@ solid OpenSCAD_Model
facet normal 0.112981 0.993597 0
outer loop
vertex 8.50498 -21.5121 0
- vertex 8.85925 -21.5524 -0.1
- vertex 8.50498 -21.5121 -0.1
+ vertex 8.85925 -21.5524 -0.2
+ vertex 8.50498 -21.5121 -0.2
endloop
endfacet
facet normal -0.039935 0.999202 0
outer loop
- vertex 8.50498 -21.5121 -0.1
+ vertex 8.50498 -21.5121 -0.2
vertex 8.12348 -21.5274 0
vertex 8.50498 -21.5121 0
endloop
@@ -4993,1301 +4993,1301 @@ solid OpenSCAD_Model
facet normal -0.039935 0.999202 0
outer loop
vertex 8.12348 -21.5274 0
- vertex 8.50498 -21.5121 -0.1
- vertex 8.12348 -21.5274 -0.1
+ vertex 8.50498 -21.5121 -0.2
+ vertex 8.12348 -21.5274 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.1179 -30.7807 -0.1
- vertex 30.2299 -31.0524 -0.1
- vertex 30.2187 -30.9454 -0.1
+ vertex 30.1179 -30.7807 -0.2
+ vertex 30.2299 -31.0524 -0.2
+ vertex 30.2187 -30.9454 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.1179 -30.7807 -0.1
- vertex 30.2187 -30.9454 -0.1
- vertex 30.1812 -30.855 -0.1
+ vertex 30.1179 -30.7807 -0.2
+ vertex 30.2187 -30.9454 -0.2
+ vertex 30.1812 -30.855 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.2299 -31.0524 -0.1
- vertex 30.1179 -30.7807 -0.1
- vertex 30.2146 -31.1764 -0.1
+ vertex 30.2299 -31.0524 -0.2
+ vertex 30.1179 -30.7807 -0.2
+ vertex 30.2146 -31.1764 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.2146 -31.1764 -0.1
- vertex 30.1179 -30.7807 -0.1
- vertex 30.1726 -31.3179 -0.1
+ vertex 30.2146 -31.1764 -0.2
+ vertex 30.1179 -30.7807 -0.2
+ vertex 30.1726 -31.3179 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.9008 -30.6099 -0.1
- vertex 30.1726 -31.3179 -0.1
- vertex 30.1179 -30.7807 -0.1
+ vertex 29.9008 -30.6099 -0.2
+ vertex 30.1726 -31.3179 -0.2
+ vertex 30.1179 -30.7807 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.1726 -31.3179 -0.1
- vertex 29.9008 -30.6099 -0.1
- vertex 30.1034 -31.4773 -0.1
+ vertex 30.1726 -31.3179 -0.2
+ vertex 29.9008 -30.6099 -0.2
+ vertex 30.1034 -31.4773 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.7002 -30.4984 -0.1
- vertex 30.1034 -31.4773 -0.1
- vertex 29.9008 -30.6099 -0.1
+ vertex 29.7002 -30.4984 -0.2
+ vertex 30.1034 -31.4773 -0.2
+ vertex 29.9008 -30.6099 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.1034 -31.4773 -0.1
- vertex 29.7002 -30.4984 -0.1
- vertex 29.0845 -30.5466 -0.1
+ vertex 30.1034 -31.4773 -0.2
+ vertex 29.7002 -30.4984 -0.2
+ vertex 29.0845 -30.5466 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.8369 -30.6989 -0.1
- vertex 30.1034 -31.4773 -0.1
- vertex 29.0845 -30.5466 -0.1
+ vertex 28.8369 -30.6989 -0.2
+ vertex 30.1034 -31.4773 -0.2
+ vertex 29.0845 -30.5466 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 29.3033 -30.4642 -0.1
- vertex 29.7002 -30.4984 -0.1
- vertex 29.5048 -30.449 -0.1
+ vertex 29.3033 -30.4642 -0.2
+ vertex 29.7002 -30.4984 -0.2
+ vertex 29.5048 -30.449 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.7002 -30.4984 -0.1
- vertex 29.3033 -30.4642 -0.1
- vertex 29.0845 -30.5466 -0.1
+ vertex 29.7002 -30.4984 -0.2
+ vertex 29.3033 -30.4642 -0.2
+ vertex 29.0845 -30.5466 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.1034 -31.4773 -0.1
- vertex 28.8369 -30.6989 -0.1
- vertex 29.8827 -31.8517 -0.1
+ vertex 30.1034 -31.4773 -0.2
+ vertex 28.8369 -30.6989 -0.2
+ vertex 29.8827 -31.8517 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.5495 -30.9236 -0.1
- vertex 29.8827 -31.8517 -0.1
- vertex 28.8369 -30.6989 -0.1
+ vertex 28.5495 -30.9236 -0.2
+ vertex 29.8827 -31.8517 -0.2
+ vertex 28.8369 -30.6989 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.8827 -31.8517 -0.1
- vertex 28.5495 -30.9236 -0.1
- vertex 29.5499 -32.3032 -0.1
+ vertex 29.8827 -31.8517 -0.2
+ vertex 28.5495 -30.9236 -0.2
+ vertex 29.5499 -32.3032 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.2108 -31.2235 -0.1
- vertex 29.5499 -32.3032 -0.1
- vertex 28.5495 -30.9236 -0.1
+ vertex 28.2108 -31.2235 -0.2
+ vertex 29.5499 -32.3032 -0.2
+ vertex 28.5495 -30.9236 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.5499 -32.3032 -0.1
- vertex 28.2108 -31.2235 -0.1
- vertex 29.1028 -32.8352 -0.1
+ vertex 29.5499 -32.3032 -0.2
+ vertex 28.2108 -31.2235 -0.2
+ vertex 29.1028 -32.8352 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 27.276 -32.055 -0.1
- vertex 29.1028 -32.8352 -0.1
- vertex 28.2108 -31.2235 -0.1
+ vertex 27.276 -32.055 -0.2
+ vertex 29.1028 -32.8352 -0.2
+ vertex 28.2108 -31.2235 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.1028 -32.8352 -0.1
- vertex 27.276 -32.055 -0.1
- vertex 28.539 -33.4515 -0.1
+ vertex 29.1028 -32.8352 -0.2
+ vertex 27.276 -32.055 -0.2
+ vertex 28.539 -33.4515 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 28.539 -33.4515 -0.1
- vertex 27.276 -32.055 -0.1
- vertex 27.856 -34.1555 -0.1
+ vertex 28.539 -33.4515 -0.2
+ vertex 27.276 -32.055 -0.2
+ vertex 27.856 -34.1555 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 26.4309 -32.7448 -0.1
- vertex 27.856 -34.1555 -0.1
- vertex 27.276 -32.055 -0.1
+ vertex 26.4309 -32.7448 -0.2
+ vertex 27.856 -34.1555 -0.2
+ vertex 27.276 -32.055 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.856 -34.1555 -0.1
- vertex 26.4309 -32.7448 -0.1
- vertex 27.3514 -34.6537 -0.1
+ vertex 27.856 -34.1555 -0.2
+ vertex 26.4309 -32.7448 -0.2
+ vertex 27.3514 -34.6537 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.6577 -33.3022 -0.1
- vertex 27.3514 -34.6537 -0.1
- vertex 26.4309 -32.7448 -0.1
+ vertex 25.6577 -33.3022 -0.2
+ vertex 27.3514 -34.6537 -0.2
+ vertex 26.4309 -32.7448 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3514 -34.6537 -0.1
- vertex 25.6577 -33.3022 -0.1
- vertex 26.8832 -35.0925 -0.1
+ vertex 27.3514 -34.6537 -0.2
+ vertex 25.6577 -33.3022 -0.2
+ vertex 26.8832 -35.0925 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.2926 -33.5342 -0.1
- vertex 26.8832 -35.0925 -0.1
- vertex 25.6577 -33.3022 -0.1
+ vertex 25.2926 -33.5342 -0.2
+ vertex 26.8832 -35.0925 -0.2
+ vertex 25.6577 -33.3022 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.8832 -35.0925 -0.1
- vertex 25.2926 -33.5342 -0.1
- vertex 26.4377 -35.4824 -0.1
+ vertex 26.8832 -35.0925 -0.2
+ vertex 25.2926 -33.5342 -0.2
+ vertex 26.4377 -35.4824 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.9388 -33.7368 -0.1
- vertex 26.4377 -35.4824 -0.1
- vertex 25.2926 -33.5342 -0.1
+ vertex 24.9388 -33.7368 -0.2
+ vertex 26.4377 -35.4824 -0.2
+ vertex 25.2926 -33.5342 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.4377 -35.4824 -0.1
- vertex 24.9388 -33.7368 -0.1
- vertex 26.0012 -35.834 -0.1
+ vertex 26.4377 -35.4824 -0.2
+ vertex 24.9388 -33.7368 -0.2
+ vertex 26.0012 -35.834 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.5942 -33.911 -0.1
- vertex 26.0012 -35.834 -0.1
- vertex 24.9388 -33.7368 -0.1
+ vertex 24.5942 -33.911 -0.2
+ vertex 26.0012 -35.834 -0.2
+ vertex 24.9388 -33.7368 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.0012 -35.834 -0.1
- vertex 24.5942 -33.911 -0.1
- vertex 25.5601 -36.1579 -0.1
+ vertex 26.0012 -35.834 -0.2
+ vertex 24.5942 -33.911 -0.2
+ vertex 25.5601 -36.1579 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.2566 -34.0582 -0.1
- vertex 25.5601 -36.1579 -0.1
- vertex 24.5942 -33.911 -0.1
+ vertex 24.2566 -34.0582 -0.2
+ vertex 25.5601 -36.1579 -0.2
+ vertex 24.5942 -33.911 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.5601 -36.1579 -0.1
- vertex 24.2566 -34.0582 -0.1
- vertex 25.1006 -36.4644 -0.1
+ vertex 25.5601 -36.1579 -0.2
+ vertex 24.2566 -34.0582 -0.2
+ vertex 25.1006 -36.4644 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.9237 -34.1793 -0.1
- vertex 25.1006 -36.4644 -0.1
- vertex 24.2566 -34.0582 -0.1
+ vertex 23.9237 -34.1793 -0.2
+ vertex 25.1006 -36.4644 -0.2
+ vertex 24.2566 -34.0582 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.1006 -36.4644 -0.1
- vertex 23.9237 -34.1793 -0.1
- vertex 24.6091 -36.7642 -0.1
+ vertex 25.1006 -36.4644 -0.2
+ vertex 23.9237 -34.1793 -0.2
+ vertex 24.6091 -36.7642 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.5933 -34.2758 -0.1
- vertex 24.6091 -36.7642 -0.1
- vertex 23.9237 -34.1793 -0.1
+ vertex 23.5933 -34.2758 -0.2
+ vertex 24.6091 -36.7642 -0.2
+ vertex 23.9237 -34.1793 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.2634 -34.3487 -0.1
- vertex 24.6091 -36.7642 -0.1
- vertex 23.5933 -34.2758 -0.1
+ vertex 23.2634 -34.3487 -0.2
+ vertex 24.6091 -36.7642 -0.2
+ vertex 23.5933 -34.2758 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.6091 -36.7642 -0.1
- vertex 23.2634 -34.3487 -0.1
- vertex 24.0719 -37.0678 -0.1
+ vertex 24.6091 -36.7642 -0.2
+ vertex 23.2634 -34.3487 -0.2
+ vertex 24.0719 -37.0678 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.9315 -34.3992 -0.1
- vertex 24.0719 -37.0678 -0.1
- vertex 23.2634 -34.3487 -0.1
+ vertex 22.9315 -34.3992 -0.2
+ vertex 24.0719 -37.0678 -0.2
+ vertex 23.2634 -34.3487 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.0719 -37.0678 -0.1
- vertex 22.9315 -34.3992 -0.1
- vertex 23.2902 -37.4839 -0.1
+ vertex 24.0719 -37.0678 -0.2
+ vertex 22.9315 -34.3992 -0.2
+ vertex 23.2902 -37.4839 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.5956 -34.4285 -0.1
- vertex 23.2902 -37.4839 -0.1
- vertex 22.9315 -34.3992 -0.1
+ vertex 22.5956 -34.4285 -0.2
+ vertex 23.2902 -37.4839 -0.2
+ vertex 22.9315 -34.3992 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.2534 -34.4379 -0.1
- vertex 23.2902 -37.4839 -0.1
- vertex 22.5956 -34.4285 -0.1
+ vertex 22.2534 -34.4379 -0.2
+ vertex 23.2902 -37.4839 -0.2
+ vertex 22.5956 -34.4285 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.2902 -37.4839 -0.1
- vertex 22.2534 -34.4379 -0.1
- vertex 22.6041 -37.8201 -0.1
+ vertex 23.2902 -37.4839 -0.2
+ vertex 22.2534 -34.4379 -0.2
+ vertex 22.6041 -37.8201 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.8355 -34.4151 -0.1
- vertex 22.6041 -37.8201 -0.1
- vertex 22.2534 -34.4379 -0.1
+ vertex 21.8355 -34.4151 -0.2
+ vertex 22.6041 -37.8201 -0.2
+ vertex 22.2534 -34.4379 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.6041 -37.8201 -0.1
- vertex 21.8355 -34.4151 -0.1
- vertex 21.9889 -38.084 -0.1
+ vertex 22.6041 -37.8201 -0.2
+ vertex 21.8355 -34.4151 -0.2
+ vertex 21.9889 -38.084 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.43 -34.349 -0.1
- vertex 21.9889 -38.084 -0.1
- vertex 21.8355 -34.4151 -0.1
+ vertex 21.43 -34.349 -0.2
+ vertex 21.9889 -38.084 -0.2
+ vertex 21.8355 -34.4151 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.43 -34.349 -0.1
- vertex 21.4197 -38.2833 -0.1
- vertex 21.9889 -38.084 -0.1
+ vertex 21.43 -34.349 -0.2
+ vertex 21.4197 -38.2833 -0.2
+ vertex 21.9889 -38.084 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.0421 -34.2419 -0.1
- vertex 21.4197 -38.2833 -0.1
- vertex 21.43 -34.349 -0.1
+ vertex 21.0421 -34.2419 -0.2
+ vertex 21.4197 -38.2833 -0.2
+ vertex 21.43 -34.349 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.0421 -34.2419 -0.1
- vertex 20.8717 -38.4255 -0.1
- vertex 21.4197 -38.2833 -0.1
+ vertex 21.0421 -34.2419 -0.2
+ vertex 20.8717 -38.4255 -0.2
+ vertex 21.4197 -38.2833 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3202 -38.5182 -0.1
- vertex 21.0421 -34.2419 -0.1
- vertex 20.6768 -34.0963 -0.1
+ vertex 20.3202 -38.5182 -0.2
+ vertex 21.0421 -34.2419 -0.2
+ vertex 20.6768 -34.0963 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7403 -38.5689 -0.1
- vertex 20.6768 -34.0963 -0.1
- vertex 20.3392 -33.9144 -0.1
+ vertex 19.7403 -38.5689 -0.2
+ vertex 20.6768 -34.0963 -0.2
+ vertex 20.3392 -33.9144 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.0421 -34.2419 -0.1
- vertex 20.3202 -38.5182 -0.1
- vertex 20.8717 -38.4255 -0.1
+ vertex 21.0421 -34.2419 -0.2
+ vertex 20.3202 -38.5182 -0.2
+ vertex 20.8717 -38.4255 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.4669 -38.5591 -0.1
- vertex 20.3392 -33.9144 -0.1
- vertex 20.0345 -33.6987 -0.1
+ vertex 18.4669 -38.5591 -0.2
+ vertex 20.3392 -33.9144 -0.2
+ vertex 20.0345 -33.6987 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.8529 -38.0675 -0.1
- vertex 20.0345 -33.6987 -0.1
- vertex 19.7677 -33.4516 -0.1
+ vertex 16.8529 -38.0675 -0.2
+ vertex 20.0345 -33.6987 -0.2
+ vertex 19.7677 -33.4516 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.6768 -34.0963 -0.1
- vertex 19.7403 -38.5689 -0.1
- vertex 20.3202 -38.5182 -0.1
+ vertex 20.6768 -34.0963 -0.2
+ vertex 19.7403 -38.5689 -0.2
+ vertex 20.3202 -38.5182 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.927 -35.9398 -0.1
- vertex 19.7677 -33.4516 -0.1
- vertex 19.5439 -33.1754 -0.1
+ vertex 14.927 -35.9398 -0.2
+ vertex 19.7677 -33.4516 -0.2
+ vertex 19.5439 -33.1754 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.6774 -34.4466 -0.1
- vertex 19.5439 -33.1754 -0.1
- vertex 19.466 -33.0295 -0.1
+ vertex 14.6774 -34.4466 -0.2
+ vertex 19.5439 -33.1754 -0.2
+ vertex 19.466 -33.0295 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.6656 -33.913 -0.1
- vertex 19.466 -33.0295 -0.1
- vertex 19.403 -32.8415 -0.1
+ vertex 14.6656 -33.913 -0.2
+ vertex 19.466 -33.0295 -0.2
+ vertex 19.403 -32.8415 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.73 -32.8205 -0.1
- vertex 19.403 -32.8415 -0.1
- vertex 19.3545 -32.6156 -0.1
+ vertex 14.73 -32.8205 -0.2
+ vertex 19.403 -32.8415 -0.2
+ vertex 19.3545 -32.6156 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.8056 -32.2631 -0.1
- vertex 19.3545 -32.6156 -0.1
- vertex 19.3203 -32.3556 -0.1
+ vertex 14.8056 -32.2631 -0.2
+ vertex 19.3545 -32.6156 -0.2
+ vertex 19.3203 -32.3556 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3392 -33.9144 -0.1
- vertex 19.1073 -38.5852 -0.1
- vertex 19.7403 -38.5689 -0.1
+ vertex 20.3392 -33.9144 -0.2
+ vertex 19.1073 -38.5852 -0.2
+ vertex 19.7403 -38.5689 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9098 -31.6993 -0.1
- vertex 19.3203 -32.3556 -0.1
- vertex 19.2935 -31.7496 -0.1
+ vertex 14.9098 -31.6993 -0.2
+ vertex 19.3203 -32.3556 -0.2
+ vertex 19.2935 -31.7496 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.4186 -23.1088 -0.1
- vertex 32.0619 -22.7991 -0.1
- vertex 32.0349 -22.2828 -0.1
+ vertex 27.4186 -23.1088 -0.2
+ vertex 32.0619 -22.7991 -0.2
+ vertex 32.0349 -22.2828 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 32.0619 -22.7991 -0.1
- vertex 27.4186 -23.1088 -0.1
- vertex 32.0372 -23.3848 -0.1
+ vertex 32.0619 -22.7991 -0.2
+ vertex 27.4186 -23.1088 -0.2
+ vertex 32.0372 -23.3848 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3785 -22.8574 -0.1
- vertex 32.0349 -22.2828 -0.1
- vertex 31.9549 -21.8223 -0.1
+ vertex 27.3785 -22.8574 -0.2
+ vertex 32.0349 -22.2828 -0.2
+ vertex 31.9549 -21.8223 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 27.4312 -23.3865 -0.1
- vertex 32.0372 -23.3848 -0.1
- vertex 27.4186 -23.1088 -0.1
+ vertex 27.4312 -23.3865 -0.2
+ vertex 32.0372 -23.3848 -0.2
+ vertex 27.4186 -23.1088 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3785 -22.8574 -0.1
- vertex 31.9549 -21.8223 -0.1
- vertex 31.8204 -21.404 -0.1
+ vertex 27.3785 -22.8574 -0.2
+ vertex 31.9549 -21.8223 -0.2
+ vertex 31.8204 -21.404 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 27.4161 -23.6904 -0.1
- vertex 31.9625 -24.0535 -0.1
- vertex 27.4312 -23.3865 -0.1
+ vertex 27.4161 -23.6904 -0.2
+ vertex 31.9625 -24.0535 -0.2
+ vertex 27.4312 -23.3865 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3785 -22.8574 -0.1
- vertex 31.8204 -21.404 -0.1
- vertex 31.6298 -21.0145 -0.1
+ vertex 27.3785 -22.8574 -0.2
+ vertex 31.8204 -21.404 -0.2
+ vertex 31.6298 -21.0145 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.9625 -24.0535 -0.1
- vertex 27.4161 -23.6904 -0.1
- vertex 31.8392 -24.8188 -0.1
+ vertex 31.9625 -24.0535 -0.2
+ vertex 27.4161 -23.6904 -0.2
+ vertex 31.8392 -24.8188 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 27.373 -24.0204 -0.1
- vertex 31.8392 -24.8188 -0.1
- vertex 27.4161 -23.6904 -0.1
+ vertex 27.373 -24.0204 -0.2
+ vertex 31.8392 -24.8188 -0.2
+ vertex 27.4161 -23.6904 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.8392 -24.8188 -0.1
- vertex 27.2401 -24.8188 -0.1
- vertex 31.6784 -25.7224 -0.1
+ vertex 31.8392 -24.8188 -0.2
+ vertex 27.2401 -24.8188 -0.2
+ vertex 31.6784 -25.7224 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3785 -22.8574 -0.1
- vertex 31.6298 -21.0145 -0.1
- vertex 31.3816 -20.64 -0.1
+ vertex 27.3785 -22.8574 -0.2
+ vertex 31.6298 -21.0145 -0.2
+ vertex 31.3816 -20.64 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.2401 -24.8188 -0.1
- vertex 31.8392 -24.8188 -0.1
- vertex 27.373 -24.0204 -0.1
+ vertex 27.2401 -24.8188 -0.2
+ vertex 31.8392 -24.8188 -0.2
+ vertex 27.373 -24.0204 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3111 -22.6325 -0.1
- vertex 31.3816 -20.64 -0.1
- vertex 31.074 -20.2742 -0.1
+ vertex 27.3111 -22.6325 -0.2
+ vertex 31.3816 -20.64 -0.2
+ vertex 31.074 -20.2742 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 29.58 -27.3827 -0.1
- vertex 31.6784 -25.7224 -0.1
- vertex 27.2401 -24.8188 -0.1
+ vertex 29.58 -27.3827 -0.2
+ vertex 31.6784 -25.7224 -0.2
+ vertex 27.2401 -24.8188 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 30.0709 -27.3331 -0.1
- vertex 31.6784 -25.7224 -0.1
- vertex 29.58 -27.3827 -0.1
+ vertex 30.0709 -27.3331 -0.2
+ vertex 31.6784 -25.7224 -0.2
+ vertex 29.58 -27.3827 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3111 -22.6325 -0.1
- vertex 31.074 -20.2742 -0.1
- vertex 30.7365 -19.9631 -0.1
+ vertex 27.3111 -22.6325 -0.2
+ vertex 31.074 -20.2742 -0.2
+ vertex 30.7365 -19.9631 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 30.4717 -27.2602 -0.1
- vertex 31.6003 -26.0834 -0.1
- vertex 30.0709 -27.3331 -0.1
+ vertex 30.4717 -27.2602 -0.2
+ vertex 31.6003 -26.0834 -0.2
+ vertex 30.0709 -27.3331 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3111 -22.6325 -0.1
- vertex 30.7365 -19.9631 -0.1
- vertex 30.3649 -19.705 -0.1
+ vertex 27.3111 -22.6325 -0.2
+ vertex 30.7365 -19.9631 -0.2
+ vertex 30.3649 -19.705 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 30.7934 -27.1595 -0.1
- vertex 31.5092 -26.3899 -0.1
- vertex 30.4717 -27.2602 -0.1
+ vertex 30.7934 -27.1595 -0.2
+ vertex 31.5092 -26.3899 -0.2
+ vertex 30.4717 -27.2602 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.2166 -22.4344 -0.1
- vertex 30.3649 -19.705 -0.1
- vertex 29.9546 -19.4981 -0.1
+ vertex 27.2166 -22.4344 -0.2
+ vertex 30.3649 -19.705 -0.2
+ vertex 29.9546 -19.4981 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 31.047 -27.0266 -0.1
- vertex 31.3939 -26.6463 -0.1
- vertex 30.7934 -27.1595 -0.1
+ vertex 31.047 -27.0266 -0.2
+ vertex 31.3939 -26.6463 -0.2
+ vertex 30.7934 -27.1595 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.2166 -22.4344 -0.1
- vertex 29.9546 -19.4981 -0.1
- vertex 29.5013 -19.3404 -0.1
+ vertex 27.2166 -22.4344 -0.2
+ vertex 29.9546 -19.4981 -0.2
+ vertex 29.5013 -19.3404 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.2166 -22.4344 -0.1
- vertex 29.5013 -19.3404 -0.1
- vertex 29.0007 -19.2301 -0.1
+ vertex 27.2166 -22.4344 -0.2
+ vertex 29.5013 -19.3404 -0.2
+ vertex 29.0007 -19.2301 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.3939 -26.6463 -0.1
- vertex 31.047 -27.0266 -0.1
- vertex 31.2435 -26.857 -0.1
+ vertex 31.3939 -26.6463 -0.2
+ vertex 31.047 -27.0266 -0.2
+ vertex 31.2435 -26.857 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.0952 -22.2631 -0.1
- vertex 29.0007 -19.2301 -0.1
- vertex 28.4483 -19.1654 -0.1
+ vertex 27.0952 -22.2631 -0.2
+ vertex 29.0007 -19.2301 -0.2
+ vertex 28.4483 -19.1654 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9471 -22.1189 -0.1
- vertex 28.4483 -19.1654 -0.1
- vertex 27.8398 -19.1444 -0.1
+ vertex 26.9471 -22.1189 -0.2
+ vertex 28.4483 -19.1654 -0.2
+ vertex 27.8398 -19.1444 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 32.0372 -23.3848 -0.1
- vertex 27.4312 -23.3865 -0.1
- vertex 31.9625 -24.0535 -0.1
+ vertex 32.0372 -23.3848 -0.2
+ vertex 27.4312 -23.3865 -0.2
+ vertex 31.9625 -24.0535 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.6003 -26.0834 -0.1
- vertex 30.4717 -27.2602 -0.1
- vertex 31.5092 -26.3899 -0.1
+ vertex 31.6003 -26.0834 -0.2
+ vertex 30.4717 -27.2602 -0.2
+ vertex 31.5092 -26.3899 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.5092 -26.3899 -0.1
- vertex 30.7934 -27.1595 -0.1
- vertex 31.3939 -26.6463 -0.1
+ vertex 31.5092 -26.3899 -0.2
+ vertex 30.7934 -27.1595 -0.2
+ vertex 31.3939 -26.6463 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 32.0349 -22.2828 -0.1
- vertex 27.3785 -22.8574 -0.1
- vertex 27.4186 -23.1088 -0.1
+ vertex 32.0349 -22.2828 -0.2
+ vertex 27.3785 -22.8574 -0.2
+ vertex 27.4186 -23.1088 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.3816 -20.64 -0.1
- vertex 27.3111 -22.6325 -0.1
- vertex 27.3785 -22.8574 -0.1
+ vertex 31.3816 -20.64 -0.2
+ vertex 27.3111 -22.6325 -0.2
+ vertex 27.3785 -22.8574 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.3649 -19.705 -0.1
- vertex 27.2166 -22.4344 -0.1
- vertex 27.3111 -22.6325 -0.1
+ vertex 30.3649 -19.705 -0.2
+ vertex 27.2166 -22.4344 -0.2
+ vertex 27.3111 -22.6325 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.7726 -22.0019 -0.1
- vertex 27.8398 -19.1444 -0.1
- vertex 27.1629 -19.1581 -0.1
+ vertex 26.7726 -22.0019 -0.2
+ vertex 27.8398 -19.1444 -0.2
+ vertex 27.1629 -19.1581 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.0007 -19.2301 -0.1
- vertex 27.0952 -22.2631 -0.1
- vertex 27.2166 -22.4344 -0.1
+ vertex 29.0007 -19.2301 -0.2
+ vertex 27.0952 -22.2631 -0.2
+ vertex 27.2166 -22.4344 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 28.4483 -19.1654 -0.1
- vertex 26.9471 -22.1189 -0.1
- vertex 27.0952 -22.2631 -0.1
+ vertex 28.4483 -19.1654 -0.2
+ vertex 26.9471 -22.1189 -0.2
+ vertex 27.0952 -22.2631 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.8398 -19.1444 -0.1
- vertex 26.7726 -22.0019 -0.1
- vertex 26.9471 -22.1189 -0.1
+ vertex 27.8398 -19.1444 -0.2
+ vertex 26.7726 -22.0019 -0.2
+ vertex 26.9471 -22.1189 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.1629 -19.1581 -0.1
- vertex 26.5717 -21.9122 -0.1
- vertex 26.7726 -22.0019 -0.1
+ vertex 27.1629 -19.1581 -0.2
+ vertex 26.5717 -21.9122 -0.2
+ vertex 26.7726 -22.0019 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 26.5531 -19.2026 -0.1
- vertex 26.5717 -21.9122 -0.1
- vertex 27.1629 -19.1581 -0.1
+ vertex 26.5531 -19.2026 -0.2
+ vertex 26.5717 -21.9122 -0.2
+ vertex 27.1629 -19.1581 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.5531 -19.2026 -0.1
- vertex 26.3449 -21.8501 -0.1
- vertex 26.5717 -21.9122 -0.1
+ vertex 26.5531 -19.2026 -0.2
+ vertex 26.3449 -21.8501 -0.2
+ vertex 26.5717 -21.9122 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.9886 -19.284 -0.1
- vertex 26.3449 -21.8501 -0.1
- vertex 26.5531 -19.2026 -0.1
+ vertex 25.9886 -19.284 -0.2
+ vertex 26.3449 -21.8501 -0.2
+ vertex 26.5531 -19.2026 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.3449 -21.8501 -0.1
- vertex 25.9886 -19.284 -0.1
- vertex 26.0922 -21.8157 -0.1
+ vertex 26.3449 -21.8501 -0.2
+ vertex 25.9886 -19.284 -0.2
+ vertex 26.0922 -21.8157 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.4477 -19.4082 -0.1
- vertex 26.0922 -21.8157 -0.1
- vertex 25.9886 -19.284 -0.1
+ vertex 25.4477 -19.4082 -0.2
+ vertex 26.0922 -21.8157 -0.2
+ vertex 25.9886 -19.284 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.0922 -21.8157 -0.1
- vertex 25.4477 -19.4082 -0.1
- vertex 25.8138 -21.8092 -0.1
+ vertex 26.0922 -21.8157 -0.2
+ vertex 25.4477 -19.4082 -0.2
+ vertex 25.8138 -21.8092 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.8138 -21.8092 -0.1
- vertex 25.4477 -19.4082 -0.1
- vertex 25.51 -21.8307 -0.1
+ vertex 25.8138 -21.8092 -0.2
+ vertex 25.4477 -19.4082 -0.2
+ vertex 25.51 -21.8307 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.9086 -19.5812 -0.1
- vertex 25.51 -21.8307 -0.1
- vertex 25.4477 -19.4082 -0.1
+ vertex 24.9086 -19.5812 -0.2
+ vertex 25.51 -21.8307 -0.2
+ vertex 25.4477 -19.4082 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.51 -21.8307 -0.1
- vertex 24.9086 -19.5812 -0.1
- vertex 25.181 -21.8805 -0.1
+ vertex 25.51 -21.8307 -0.2
+ vertex 24.9086 -19.5812 -0.2
+ vertex 25.181 -21.8805 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.3497 -19.8089 -0.1
- vertex 25.181 -21.8805 -0.1
- vertex 24.9086 -19.5812 -0.1
+ vertex 24.3497 -19.8089 -0.2
+ vertex 25.181 -21.8805 -0.2
+ vertex 24.9086 -19.5812 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.181 -21.8805 -0.1
- vertex 24.3497 -19.8089 -0.1
- vertex 24.827 -21.9586 -0.1
+ vertex 25.181 -21.8805 -0.2
+ vertex 24.3497 -19.8089 -0.2
+ vertex 24.827 -21.9586 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.7493 -20.0973 -0.1
- vertex 24.827 -21.9586 -0.1
- vertex 24.3497 -19.8089 -0.1
+ vertex 23.7493 -20.0973 -0.2
+ vertex 24.827 -21.9586 -0.2
+ vertex 24.3497 -19.8089 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.827 -21.9586 -0.1
- vertex 23.7493 -20.0973 -0.1
- vertex 24.5319 -22.0421 -0.1
+ vertex 24.827 -21.9586 -0.2
+ vertex 23.7493 -20.0973 -0.2
+ vertex 24.5319 -22.0421 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.5319 -22.0421 -0.1
- vertex 23.7493 -20.0973 -0.1
- vertex 24.2621 -22.1397 -0.1
+ vertex 24.5319 -22.0421 -0.2
+ vertex 23.7493 -20.0973 -0.2
+ vertex 24.2621 -22.1397 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.0854 -20.4525 -0.1
- vertex 24.2621 -22.1397 -0.1
- vertex 23.7493 -20.0973 -0.1
+ vertex 23.0854 -20.4525 -0.2
+ vertex 24.2621 -22.1397 -0.2
+ vertex 23.7493 -20.0973 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.2621 -22.1397 -0.1
- vertex 23.0854 -20.4525 -0.1
- vertex 24.0091 -22.2567 -0.1
+ vertex 24.2621 -22.1397 -0.2
+ vertex 23.0854 -20.4525 -0.2
+ vertex 24.0091 -22.2567 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.0091 -22.2567 -0.1
- vertex 23.0854 -20.4525 -0.1
- vertex 23.7644 -22.3987 -0.1
+ vertex 24.0091 -22.2567 -0.2
+ vertex 23.0854 -20.4525 -0.2
+ vertex 23.7644 -22.3987 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.3543 -20.8886 -0.1
- vertex 23.7644 -22.3987 -0.1
- vertex 23.0854 -20.4525 -0.1
+ vertex 22.3543 -20.8886 -0.2
+ vertex 23.7644 -22.3987 -0.2
+ vertex 23.0854 -20.4525 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.7644 -22.3987 -0.1
- vertex 22.3543 -20.8886 -0.1
- vertex 23.5194 -22.5712 -0.1
+ vertex 23.7644 -22.3987 -0.2
+ vertex 22.3543 -20.8886 -0.2
+ vertex 23.5194 -22.5712 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.5194 -22.5712 -0.1
- vertex 22.3543 -20.8886 -0.1
- vertex 23.2657 -22.7795 -0.1
+ vertex 23.5194 -22.5712 -0.2
+ vertex 22.3543 -20.8886 -0.2
+ vertex 23.2657 -22.7795 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 21.6485 -21.3703 -0.1
- vertex 23.2657 -22.7795 -0.1
- vertex 22.3543 -20.8886 -0.1
+ vertex 21.6485 -21.3703 -0.2
+ vertex 23.2657 -22.7795 -0.2
+ vertex 22.3543 -20.8886 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.2657 -22.7795 -0.1
- vertex 21.6485 -21.3703 -0.1
- vertex 22.6979 -23.3258 -0.1
+ vertex 23.2657 -22.7795 -0.2
+ vertex 21.6485 -21.3703 -0.2
+ vertex 22.6979 -23.3258 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 20.9665 -21.899 -0.1
- vertex 22.6979 -23.3258 -0.1
- vertex 21.6485 -21.3703 -0.1
+ vertex 20.9665 -21.899 -0.2
+ vertex 22.6979 -23.3258 -0.2
+ vertex 21.6485 -21.3703 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.6979 -23.3258 -0.1
- vertex 20.9665 -21.899 -0.1
- vertex 22.2832 -23.7683 -0.1
+ vertex 22.6979 -23.3258 -0.2
+ vertex 20.9665 -21.899 -0.2
+ vertex 22.2832 -23.7683 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 20.3071 -22.4759 -0.1
- vertex 22.2832 -23.7683 -0.1
- vertex 20.9665 -21.899 -0.1
+ vertex 20.3071 -22.4759 -0.2
+ vertex 22.2832 -23.7683 -0.2
+ vertex 20.9665 -21.899 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.2832 -23.7683 -0.1
- vertex 20.3071 -22.4759 -0.1
- vertex 21.9437 -24.1601 -0.1
+ vertex 22.2832 -23.7683 -0.2
+ vertex 20.3071 -22.4759 -0.2
+ vertex 21.9437 -24.1601 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.9437 -24.1601 -0.1
- vertex 20.3071 -22.4759 -0.1
- vertex 21.7143 -24.4589 -0.1
+ vertex 21.9437 -24.1601 -0.2
+ vertex 20.3071 -22.4759 -0.2
+ vertex 21.7143 -24.4589 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.6689 -23.1024 -0.1
- vertex 21.7143 -24.4589 -0.1
- vertex 20.3071 -22.4759 -0.1
+ vertex 19.6689 -23.1024 -0.2
+ vertex 21.7143 -24.4589 -0.2
+ vertex 20.3071 -22.4759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 31.6784 -25.7224 -0.1
- vertex 30.0709 -27.3331 -0.1
- vertex 31.6003 -26.0834 -0.1
+ vertex 31.6784 -25.7224 -0.2
+ vertex 30.0709 -27.3331 -0.2
+ vertex 31.6003 -26.0834 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.58 -27.3827 -0.1
- vertex 27.2401 -24.8188 -0.1
- vertex 28.988 -27.4135 -0.1
+ vertex 29.58 -27.3827 -0.2
+ vertex 27.2401 -24.8188 -0.2
+ vertex 28.988 -27.4135 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 28.988 -27.4135 -0.1
- vertex 27.2401 -24.8188 -0.1
- vertex 27.4568 -27.4364 -0.1
+ vertex 28.988 -27.4135 -0.2
+ vertex 27.2401 -24.8188 -0.2
+ vertex 27.4568 -27.4364 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.2401 -24.8188 -0.1
- vertex 25.3891 -27.4375 -0.1
- vertex 27.4568 -27.4364 -0.1
+ vertex 27.2401 -24.8188 -0.2
+ vertex 25.3891 -27.4375 -0.2
+ vertex 27.4568 -27.4364 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.435 -24.8188 -0.1
- vertex 25.3891 -27.4375 -0.1
- vertex 27.2401 -24.8188 -0.1
+ vertex 24.435 -24.8188 -0.2
+ vertex 25.3891 -27.4375 -0.2
+ vertex 27.2401 -24.8188 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.3459 -24.8032 -0.1
- vertex 25.3891 -27.4375 -0.1
- vertex 24.435 -24.8188 -0.1
+ vertex 23.3459 -24.8032 -0.2
+ vertex 25.3891 -27.4375 -0.2
+ vertex 24.435 -24.8188 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.454 -24.761 -0.1
- vertex 25.3891 -27.4375 -0.1
- vertex 23.3459 -24.8032 -0.1
+ vertex 22.454 -24.761 -0.2
+ vertex 25.3891 -27.4375 -0.2
+ vertex 23.3459 -24.8032 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.1247 -27.4424 -0.1
- vertex 22.454 -24.761 -0.1
- vertex 21.8514 -24.6984 -0.1
+ vertex 20.1247 -27.4424 -0.2
+ vertex 22.454 -24.761 -0.2
+ vertex 21.8514 -24.6984 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.1247 -27.4424 -0.1
- vertex 21.8514 -24.6984 -0.1
- vertex 21.6873 -24.6616 -0.1
+ vertex 20.1247 -27.4424 -0.2
+ vertex 21.8514 -24.6984 -0.2
+ vertex 21.6873 -24.6616 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.1247 -27.4424 -0.1
- vertex 21.6873 -24.6616 -0.1
- vertex 21.63 -24.6221 -0.1
+ vertex 20.1247 -27.4424 -0.2
+ vertex 21.6873 -24.6616 -0.2
+ vertex 21.63 -24.6221 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.7143 -24.4589 -0.1
- vertex 19.6689 -23.1024 -0.1
- vertex 21.6518 -24.5601 -0.1
+ vertex 21.7143 -24.4589 -0.2
+ vertex 19.6689 -23.1024 -0.2
+ vertex 21.6518 -24.5601 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.454 -24.761 -0.1
- vertex 20.1247 -27.4424 -0.1
- vertex 25.3891 -27.4375 -0.1
+ vertex 22.454 -24.761 -0.2
+ vertex 20.1247 -27.4424 -0.2
+ vertex 25.3891 -27.4375 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.6518 -24.5601 -0.1
- vertex 19.6689 -23.1024 -0.1
- vertex 21.63 -24.6221 -0.1
+ vertex 21.6518 -24.5601 -0.2
+ vertex 19.6689 -23.1024 -0.2
+ vertex 21.63 -24.6221 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.0503 -23.7798 -0.1
- vertex 21.63 -24.6221 -0.1
- vertex 19.6689 -23.1024 -0.1
+ vertex 19.0503 -23.7798 -0.2
+ vertex 21.63 -24.6221 -0.2
+ vertex 19.6689 -23.1024 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.4501 -24.5093 -0.1
- vertex 21.63 -24.6221 -0.1
- vertex 19.0503 -23.7798 -0.1
+ vertex 18.4501 -24.5093 -0.2
+ vertex 21.63 -24.6221 -0.2
+ vertex 19.0503 -23.7798 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.63 -24.6221 -0.1
- vertex 18.4501 -24.5093 -0.1
- vertex 20.1247 -27.4424 -0.1
+ vertex 21.63 -24.6221 -0.2
+ vertex 18.4501 -24.5093 -0.2
+ vertex 20.1247 -27.4424 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 17.8667 -25.2923 -0.1
- vertex 20.1247 -27.4424 -0.1
- vertex 18.4501 -24.5093 -0.1
+ vertex 17.8667 -25.2923 -0.2
+ vertex 20.1247 -27.4424 -0.2
+ vertex 18.4501 -24.5093 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 17.4656 -25.8764 -0.1
- vertex 20.1247 -27.4424 -0.1
- vertex 17.8667 -25.2923 -0.1
+ vertex 17.4656 -25.8764 -0.2
+ vertex 20.1247 -27.4424 -0.2
+ vertex 17.8667 -25.2923 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 17.0901 -26.4624 -0.1
- vertex 20.1247 -27.4424 -0.1
- vertex 17.4656 -25.8764 -0.1
+ vertex 17.0901 -26.4624 -0.2
+ vertex 20.1247 -27.4424 -0.2
+ vertex 17.4656 -25.8764 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.1247 -27.4424 -0.1
- vertex 17.0901 -26.4624 -0.1
- vertex 19.9171 -28.0436 -0.1
+ vertex 20.1247 -27.4424 -0.2
+ vertex 17.0901 -26.4624 -0.2
+ vertex 19.9171 -28.0436 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 16.7406 -27.0496 -0.1
- vertex 19.9171 -28.0436 -0.1
- vertex 17.0901 -26.4624 -0.1
+ vertex 16.7406 -27.0496 -0.2
+ vertex 19.9171 -28.0436 -0.2
+ vertex 17.0901 -26.4624 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.9171 -28.0436 -0.1
- vertex 16.7406 -27.0496 -0.1
- vertex 19.6992 -28.7679 -0.1
+ vertex 19.9171 -28.0436 -0.2
+ vertex 16.7406 -27.0496 -0.2
+ vertex 19.6992 -28.7679 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 16.4172 -27.6373 -0.1
- vertex 19.6992 -28.7679 -0.1
- vertex 16.7406 -27.0496 -0.1
+ vertex 16.4172 -27.6373 -0.2
+ vertex 19.6992 -28.7679 -0.2
+ vertex 16.7406 -27.0496 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6992 -28.7679 -0.1
- vertex 16.4172 -27.6373 -0.1
- vertex 19.5256 -29.5327 -0.1
+ vertex 19.6992 -28.7679 -0.2
+ vertex 16.4172 -27.6373 -0.2
+ vertex 19.5256 -29.5327 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 16.1203 -28.2246 -0.1
- vertex 19.5256 -29.5327 -0.1
- vertex 16.4172 -27.6373 -0.1
+ vertex 16.1203 -28.2246 -0.2
+ vertex 19.5256 -29.5327 -0.2
+ vertex 16.4172 -27.6373 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.8502 -28.8109 -0.1
- vertex 19.5256 -29.5327 -0.1
- vertex 16.1203 -28.2246 -0.1
+ vertex 15.8502 -28.8109 -0.2
+ vertex 19.5256 -29.5327 -0.2
+ vertex 16.1203 -28.2246 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.5256 -29.5327 -0.1
- vertex 15.8502 -28.8109 -0.1
- vertex 19.3985 -30.306 -0.1
+ vertex 19.5256 -29.5327 -0.2
+ vertex 15.8502 -28.8109 -0.2
+ vertex 19.3985 -30.306 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.6071 -29.3953 -0.1
- vertex 19.3985 -30.306 -0.1
- vertex 15.8502 -28.8109 -0.1
+ vertex 15.6071 -29.3953 -0.2
+ vertex 19.3985 -30.306 -0.2
+ vertex 15.8502 -28.8109 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.3912 -29.9771 -0.1
- vertex 19.3985 -30.306 -0.1
- vertex 15.6071 -29.3953 -0.1
+ vertex 15.3912 -29.9771 -0.2
+ vertex 19.3985 -30.306 -0.2
+ vertex 15.6071 -29.3953 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3985 -30.306 -0.1
- vertex 15.3912 -29.9771 -0.1
- vertex 19.3204 -31.0557 -0.1
+ vertex 19.3985 -30.306 -0.2
+ vertex 15.3912 -29.9771 -0.2
+ vertex 19.3204 -31.0557 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.2028 -30.5555 -0.1
- vertex 19.3204 -31.0557 -0.1
- vertex 15.3912 -29.9771 -0.1
+ vertex 15.2028 -30.5555 -0.2
+ vertex 19.3204 -31.0557 -0.2
+ vertex 15.3912 -29.9771 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3204 -31.0557 -0.1
- vertex 15.2028 -30.5555 -0.1
- vertex 19.2935 -31.7496 -0.1
+ vertex 19.3204 -31.0557 -0.2
+ vertex 15.2028 -30.5555 -0.2
+ vertex 19.2935 -31.7496 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.0423 -31.1299 -0.1
- vertex 19.2935 -31.7496 -0.1
- vertex 15.2028 -30.5555 -0.1
+ vertex 15.0423 -31.1299 -0.2
+ vertex 19.2935 -31.7496 -0.2
+ vertex 15.2028 -30.5555 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.9098 -31.6993 -0.1
- vertex 19.2935 -31.7496 -0.1
- vertex 15.0423 -31.1299 -0.1
+ vertex 14.9098 -31.6993 -0.2
+ vertex 19.2935 -31.7496 -0.2
+ vertex 15.0423 -31.1299 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3203 -32.3556 -0.1
- vertex 14.9098 -31.6993 -0.1
- vertex 14.8056 -32.2631 -0.1
+ vertex 19.3203 -32.3556 -0.2
+ vertex 14.9098 -31.6993 -0.2
+ vertex 14.8056 -32.2631 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3545 -32.6156 -0.1
- vertex 14.8056 -32.2631 -0.1
- vertex 14.73 -32.8205 -0.1
+ vertex 19.3545 -32.6156 -0.2
+ vertex 14.8056 -32.2631 -0.2
+ vertex 14.73 -32.8205 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.403 -32.8415 -0.1
- vertex 14.73 -32.8205 -0.1
- vertex 14.6832 -33.3707 -0.1
+ vertex 19.403 -32.8415 -0.2
+ vertex 14.73 -32.8205 -0.2
+ vertex 14.6832 -33.3707 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.403 -32.8415 -0.1
- vertex 14.6832 -33.3707 -0.1
- vertex 14.6656 -33.913 -0.1
+ vertex 19.403 -32.8415 -0.2
+ vertex 14.6832 -33.3707 -0.2
+ vertex 14.6656 -33.913 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.466 -33.0295 -0.1
- vertex 14.6656 -33.913 -0.1
- vertex 14.6774 -34.4466 -0.1
+ vertex 19.466 -33.0295 -0.2
+ vertex 14.6656 -33.913 -0.2
+ vertex 14.6774 -34.4466 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.5439 -33.1754 -0.1
- vertex 14.6774 -34.4466 -0.1
- vertex 14.7369 -35.0944 -0.1
+ vertex 19.5439 -33.1754 -0.2
+ vertex 14.6774 -34.4466 -0.2
+ vertex 14.7369 -35.0944 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3392 -33.9144 -0.1
- vertex 18.4669 -38.5591 -0.1
- vertex 19.1073 -38.5852 -0.1
+ vertex 20.3392 -33.9144 -0.2
+ vertex 18.4669 -38.5591 -0.2
+ vertex 19.1073 -38.5852 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0345 -33.6987 -0.1
- vertex 18.1792 -38.5233 -0.1
- vertex 18.4669 -38.5591 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 18.1792 -38.5233 -0.2
+ vertex 18.4669 -38.5591 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0345 -33.6987 -0.1
- vertex 17.9062 -38.4707 -0.1
- vertex 18.1792 -38.5233 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 17.9062 -38.4707 -0.2
+ vertex 18.1792 -38.5233 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0345 -33.6987 -0.1
- vertex 17.6424 -38.4 -0.1
- vertex 17.9062 -38.4707 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 17.6424 -38.4 -0.2
+ vertex 17.9062 -38.4707 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0345 -33.6987 -0.1
- vertex 17.3825 -38.3101 -0.1
- vertex 17.6424 -38.4 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 17.3825 -38.3101 -0.2
+ vertex 17.6424 -38.4 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0345 -33.6987 -0.1
- vertex 17.1211 -38.1997 -0.1
- vertex 17.3825 -38.3101 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 17.1211 -38.1997 -0.2
+ vertex 17.3825 -38.3101 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0345 -33.6987 -0.1
- vertex 16.8529 -38.0675 -0.1
- vertex 17.1211 -38.1997 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 16.8529 -38.0675 -0.2
+ vertex 17.1211 -38.1997 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.5439 -33.1754 -0.1
- vertex 14.7369 -35.0944 -0.1
- vertex 14.8496 -35.6738 -0.1
+ vertex 19.5439 -33.1754 -0.2
+ vertex 14.7369 -35.0944 -0.2
+ vertex 14.8496 -35.6738 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 16.342 -37.7658 -0.1
- vertex 16.8529 -38.0675 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 16.342 -37.7658 -0.2
+ vertex 16.8529 -38.0675 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.5439 -33.1754 -0.1
- vertex 14.8496 -35.6738 -0.1
- vertex 14.927 -35.9398 -0.1
+ vertex 19.5439 -33.1754 -0.2
+ vertex 14.8496 -35.6738 -0.2
+ vertex 14.927 -35.9398 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 16.1153 -37.6039 -0.1
- vertex 16.342 -37.7658 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 16.1153 -37.6039 -0.2
+ vertex 16.342 -37.7658 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.907 -37.4336 -0.1
- vertex 16.1153 -37.6039 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.907 -37.4336 -0.2
+ vertex 16.1153 -37.6039 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.7167 -37.2541 -0.1
- vertex 15.907 -37.4336 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.7167 -37.2541 -0.2
+ vertex 15.907 -37.4336 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.544 -37.0647 -0.1
- vertex 15.7167 -37.2541 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.544 -37.0647 -0.2
+ vertex 15.7167 -37.2541 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.3884 -36.8644 -0.1
- vertex 15.544 -37.0647 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.3884 -36.8644 -0.2
+ vertex 15.544 -37.0647 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.2493 -36.6526 -0.1
- vertex 15.3884 -36.8644 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.2493 -36.6526 -0.2
+ vertex 15.3884 -36.8644 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.1264 -36.4284 -0.1
- vertex 15.2493 -36.6526 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.1264 -36.4284 -0.2
+ vertex 15.2493 -36.6526 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 14.927 -35.9398 -0.1
- vertex 15.0191 -36.1911 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 14.927 -35.9398 -0.2
+ vertex 15.0191 -36.1911 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7677 -33.4516 -0.1
- vertex 15.0191 -36.1911 -0.1
- vertex 15.1264 -36.4284 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 15.0191 -36.1911 -0.2
+ vertex 15.1264 -36.4284 -0.2
endloop
endfacet
facet normal -0.116346 -0.993209 0
outer loop
- vertex 28.4483 -19.1654 -0.1
+ vertex 28.4483 -19.1654 -0.2
vertex 29.0007 -19.2301 0
vertex 28.4483 -19.1654 0
endloop
@@ -6295,13 +6295,13 @@ solid OpenSCAD_Model
facet normal -0.116346 -0.993209 -0
outer loop
vertex 29.0007 -19.2301 0
- vertex 28.4483 -19.1654 -0.1
- vertex 29.0007 -19.2301 -0.1
+ vertex 28.4483 -19.1654 -0.2
+ vertex 29.0007 -19.2301 -0.2
endloop
endfacet
facet normal -0.215114 -0.976589 0
outer loop
- vertex 29.0007 -19.2301 -0.1
+ vertex 29.0007 -19.2301 -0.2
vertex 29.5013 -19.3404 0
vertex 29.0007 -19.2301 0
endloop
@@ -6309,13 +6309,13 @@ solid OpenSCAD_Model
facet normal -0.215114 -0.976589 -0
outer loop
vertex 29.5013 -19.3404 0
- vertex 29.0007 -19.2301 -0.1
- vertex 29.5013 -19.3404 -0.1
+ vertex 29.0007 -19.2301 -0.2
+ vertex 29.5013 -19.3404 -0.2
endloop
endfacet
facet normal -0.328588 -0.944473 0
outer loop
- vertex 29.5013 -19.3404 -0.1
+ vertex 29.5013 -19.3404 -0.2
vertex 29.9546 -19.4981 0
vertex 29.5013 -19.3404 0
endloop
@@ -6323,13 +6323,13 @@ solid OpenSCAD_Model
facet normal -0.328588 -0.944473 -0
outer loop
vertex 29.9546 -19.4981 0
- vertex 29.5013 -19.3404 -0.1
- vertex 29.9546 -19.4981 -0.1
+ vertex 29.5013 -19.3404 -0.2
+ vertex 29.9546 -19.4981 -0.2
endloop
endfacet
facet normal -0.450382 -0.892836 0
outer loop
- vertex 29.9546 -19.4981 -0.1
+ vertex 29.9546 -19.4981 -0.2
vertex 30.3649 -19.705 0
vertex 29.9546 -19.4981 0
endloop
@@ -6337,13 +6337,13 @@ solid OpenSCAD_Model
facet normal -0.450382 -0.892836 -0
outer loop
vertex 30.3649 -19.705 0
- vertex 29.9546 -19.4981 -0.1
- vertex 30.3649 -19.705 -0.1
+ vertex 29.9546 -19.4981 -0.2
+ vertex 30.3649 -19.705 -0.2
endloop
endfacet
facet normal -0.570354 -0.821399 0
outer loop
- vertex 30.3649 -19.705 -0.1
+ vertex 30.3649 -19.705 -0.2
vertex 30.7365 -19.9631 0
vertex 30.3649 -19.705 0
endloop
@@ -6351,13 +6351,13 @@ solid OpenSCAD_Model
facet normal -0.570354 -0.821399 -0
outer loop
vertex 30.7365 -19.9631 0
- vertex 30.3649 -19.705 -0.1
- vertex 30.7365 -19.9631 -0.1
+ vertex 30.3649 -19.705 -0.2
+ vertex 30.7365 -19.9631 -0.2
endloop
endfacet
facet normal -0.677745 -0.735297 0
outer loop
- vertex 30.7365 -19.9631 -0.1
+ vertex 30.7365 -19.9631 -0.2
vertex 31.074 -20.2742 0
vertex 30.7365 -19.9631 0
endloop
@@ -6365,209 +6365,209 @@ solid OpenSCAD_Model
facet normal -0.677745 -0.735297 -0
outer loop
vertex 31.074 -20.2742 0
- vertex 30.7365 -19.9631 -0.1
- vertex 31.074 -20.2742 -0.1
+ vertex 30.7365 -19.9631 -0.2
+ vertex 31.074 -20.2742 -0.2
endloop
endfacet
facet normal -0.765393 -0.643563 0
outer loop
- vertex 31.3816 -20.64 -0.1
+ vertex 31.3816 -20.64 -0.2
vertex 31.074 -20.2742 0
- vertex 31.074 -20.2742 -0.1
+ vertex 31.074 -20.2742 -0.2
endloop
endfacet
facet normal -0.765393 -0.643563 0
outer loop
vertex 31.074 -20.2742 0
- vertex 31.3816 -20.64 -0.1
+ vertex 31.3816 -20.64 -0.2
vertex 31.3816 -20.64 0
endloop
endfacet
facet normal -0.833589 -0.552384 0
outer loop
- vertex 31.6298 -21.0145 -0.1
+ vertex 31.6298 -21.0145 -0.2
vertex 31.3816 -20.64 0
- vertex 31.3816 -20.64 -0.1
+ vertex 31.3816 -20.64 -0.2
endloop
endfacet
facet normal -0.833589 -0.552384 0
outer loop
vertex 31.3816 -20.64 0
- vertex 31.6298 -21.0145 -0.1
+ vertex 31.6298 -21.0145 -0.2
vertex 31.6298 -21.0145 0
endloop
endfacet
facet normal -0.898247 -0.439492 0
outer loop
- vertex 31.8204 -21.404 -0.1
+ vertex 31.8204 -21.404 -0.2
vertex 31.6298 -21.0145 0
- vertex 31.6298 -21.0145 -0.1
+ vertex 31.6298 -21.0145 -0.2
endloop
endfacet
facet normal -0.898247 -0.439492 0
outer loop
vertex 31.6298 -21.0145 0
- vertex 31.8204 -21.404 -0.1
+ vertex 31.8204 -21.404 -0.2
vertex 31.8204 -21.404 0
endloop
endfacet
facet normal -0.951943 -0.306275 0
outer loop
- vertex 31.9549 -21.8223 -0.1
+ vertex 31.9549 -21.8223 -0.2
vertex 31.8204 -21.404 0
- vertex 31.8204 -21.404 -0.1
+ vertex 31.8204 -21.404 -0.2
endloop
endfacet
facet normal -0.951943 -0.306275 0
outer loop
vertex 31.8204 -21.404 0
- vertex 31.9549 -21.8223 -0.1
+ vertex 31.9549 -21.8223 -0.2
vertex 31.9549 -21.8223 0
endloop
endfacet
facet normal -0.985239 -0.171183 0
outer loop
- vertex 32.0349 -22.2828 -0.1
+ vertex 32.0349 -22.2828 -0.2
vertex 31.9549 -21.8223 0
- vertex 31.9549 -21.8223 -0.1
+ vertex 31.9549 -21.8223 -0.2
endloop
endfacet
facet normal -0.985239 -0.171183 0
outer loop
vertex 31.9549 -21.8223 0
- vertex 32.0349 -22.2828 -0.1
+ vertex 32.0349 -22.2828 -0.2
vertex 32.0349 -22.2828 0
endloop
endfacet
facet normal -0.998641 -0.0521185 0
outer loop
- vertex 32.0619 -22.7991 -0.1
+ vertex 32.0619 -22.7991 -0.2
vertex 32.0349 -22.2828 0
- vertex 32.0349 -22.2828 -0.1
+ vertex 32.0349 -22.2828 -0.2
endloop
endfacet
facet normal -0.998641 -0.0521185 0
outer loop
vertex 32.0349 -22.2828 0
- vertex 32.0619 -22.7991 -0.1
+ vertex 32.0619 -22.7991 -0.2
vertex 32.0619 -22.7991 0
endloop
endfacet
facet normal -0.999117 0.0420155 0
outer loop
- vertex 32.0372 -23.3848 -0.1
+ vertex 32.0372 -23.3848 -0.2
vertex 32.0619 -22.7991 0
- vertex 32.0619 -22.7991 -0.1
+ vertex 32.0619 -22.7991 -0.2
endloop
endfacet
facet normal -0.999117 0.0420155 0
outer loop
vertex 32.0619 -22.7991 0
- vertex 32.0372 -23.3848 -0.1
+ vertex 32.0372 -23.3848 -0.2
vertex 32.0372 -23.3848 0
endloop
endfacet
facet normal -0.993814 0.111054 0
outer loop
- vertex 31.9625 -24.0535 -0.1
+ vertex 31.9625 -24.0535 -0.2
vertex 32.0372 -23.3848 0
- vertex 32.0372 -23.3848 -0.1
+ vertex 32.0372 -23.3848 -0.2
endloop
endfacet
facet normal -0.993814 0.111054 0
outer loop
vertex 32.0372 -23.3848 0
- vertex 31.9625 -24.0535 -0.1
+ vertex 31.9625 -24.0535 -0.2
vertex 31.9625 -24.0535 0
endloop
endfacet
facet normal -0.98726 0.159117 0
outer loop
- vertex 31.8392 -24.8188 -0.1
+ vertex 31.8392 -24.8188 -0.2
vertex 31.9625 -24.0535 0
- vertex 31.9625 -24.0535 -0.1
+ vertex 31.9625 -24.0535 -0.2
endloop
endfacet
facet normal -0.98726 0.159117 0
outer loop
vertex 31.9625 -24.0535 0
- vertex 31.8392 -24.8188 -0.1
+ vertex 31.8392 -24.8188 -0.2
vertex 31.8392 -24.8188 0
endloop
endfacet
facet normal -0.984533 0.175198 0
outer loop
- vertex 31.6784 -25.7224 -0.1
+ vertex 31.6784 -25.7224 -0.2
vertex 31.8392 -24.8188 0
- vertex 31.8392 -24.8188 -0.1
+ vertex 31.8392 -24.8188 -0.2
endloop
endfacet
facet normal -0.984533 0.175198 0
outer loop
vertex 31.8392 -24.8188 0
- vertex 31.6784 -25.7224 -0.1
+ vertex 31.6784 -25.7224 -0.2
vertex 31.6784 -25.7224 0
endloop
endfacet
facet normal -0.977413 0.211338 0
outer loop
- vertex 31.6003 -26.0834 -0.1
+ vertex 31.6003 -26.0834 -0.2
vertex 31.6784 -25.7224 0
- vertex 31.6784 -25.7224 -0.1
+ vertex 31.6784 -25.7224 -0.2
endloop
endfacet
facet normal -0.977413 0.211338 0
outer loop
vertex 31.6784 -25.7224 0
- vertex 31.6003 -26.0834 -0.1
+ vertex 31.6003 -26.0834 -0.2
vertex 31.6003 -26.0834 0
endloop
endfacet
facet normal -0.958488 0.285133 0
outer loop
- vertex 31.5092 -26.3899 -0.1
+ vertex 31.5092 -26.3899 -0.2
vertex 31.6003 -26.0834 0
- vertex 31.6003 -26.0834 -0.1
+ vertex 31.6003 -26.0834 -0.2
endloop
endfacet
facet normal -0.958488 0.285133 0
outer loop
vertex 31.6003 -26.0834 0
- vertex 31.5092 -26.3899 -0.1
+ vertex 31.5092 -26.3899 -0.2
vertex 31.5092 -26.3899 0
endloop
endfacet
facet normal -0.912047 0.410085 0
outer loop
- vertex 31.3939 -26.6463 -0.1
+ vertex 31.3939 -26.6463 -0.2
vertex 31.5092 -26.3899 0
- vertex 31.5092 -26.3899 -0.1
+ vertex 31.5092 -26.3899 -0.2
endloop
endfacet
facet normal -0.912047 0.410085 0
outer loop
vertex 31.5092 -26.3899 0
- vertex 31.3939 -26.6463 -0.1
+ vertex 31.3939 -26.6463 -0.2
vertex 31.3939 -26.6463 0
endloop
endfacet
facet normal -0.814021 0.580836 0
outer loop
- vertex 31.2435 -26.857 -0.1
+ vertex 31.2435 -26.857 -0.2
vertex 31.3939 -26.6463 0
- vertex 31.3939 -26.6463 -0.1
+ vertex 31.3939 -26.6463 -0.2
endloop
endfacet
facet normal -0.814021 0.580836 0
outer loop
vertex 31.3939 -26.6463 0
- vertex 31.2435 -26.857 -0.1
+ vertex 31.2435 -26.857 -0.2
vertex 31.2435 -26.857 0
endloop
endfacet
facet normal -0.653404 0.75701 0
outer loop
- vertex 31.2435 -26.857 -0.1
+ vertex 31.2435 -26.857 -0.2
vertex 31.047 -27.0266 0
vertex 31.2435 -26.857 0
endloop
@@ -6575,13 +6575,13 @@ solid OpenSCAD_Model
facet normal -0.653404 0.75701 0
outer loop
vertex 31.047 -27.0266 0
- vertex 31.2435 -26.857 -0.1
- vertex 31.047 -27.0266 -0.1
+ vertex 31.2435 -26.857 -0.2
+ vertex 31.047 -27.0266 -0.2
endloop
endfacet
facet normal -0.464184 0.885739 0
outer loop
- vertex 31.047 -27.0266 -0.1
+ vertex 31.047 -27.0266 -0.2
vertex 30.7934 -27.1595 0
vertex 31.047 -27.0266 0
endloop
@@ -6589,13 +6589,13 @@ solid OpenSCAD_Model
facet normal -0.464184 0.885739 0
outer loop
vertex 30.7934 -27.1595 0
- vertex 31.047 -27.0266 -0.1
- vertex 30.7934 -27.1595 -0.1
+ vertex 31.047 -27.0266 -0.2
+ vertex 30.7934 -27.1595 -0.2
endloop
endfacet
facet normal -0.298657 0.954361 0
outer loop
- vertex 30.7934 -27.1595 -0.1
+ vertex 30.7934 -27.1595 -0.2
vertex 30.4717 -27.2602 0
vertex 30.7934 -27.1595 0
endloop
@@ -6603,13 +6603,13 @@ solid OpenSCAD_Model
facet normal -0.298657 0.954361 0
outer loop
vertex 30.4717 -27.2602 0
- vertex 30.7934 -27.1595 -0.1
- vertex 30.4717 -27.2602 -0.1
+ vertex 30.7934 -27.1595 -0.2
+ vertex 30.4717 -27.2602 -0.2
endloop
endfacet
facet normal -0.17896 0.983856 0
outer loop
- vertex 30.4717 -27.2602 -0.1
+ vertex 30.4717 -27.2602 -0.2
vertex 30.0709 -27.3331 0
vertex 30.4717 -27.2602 0
endloop
@@ -6617,13 +6617,13 @@ solid OpenSCAD_Model
facet normal -0.17896 0.983856 0
outer loop
vertex 30.0709 -27.3331 0
- vertex 30.4717 -27.2602 -0.1
- vertex 30.0709 -27.3331 -0.1
+ vertex 30.4717 -27.2602 -0.2
+ vertex 30.0709 -27.3331 -0.2
endloop
endfacet
facet normal -0.100534 0.994934 0
outer loop
- vertex 30.0709 -27.3331 -0.1
+ vertex 30.0709 -27.3331 -0.2
vertex 29.58 -27.3827 0
vertex 30.0709 -27.3331 0
endloop
@@ -6631,13 +6631,13 @@ solid OpenSCAD_Model
facet normal -0.100534 0.994934 0
outer loop
vertex 29.58 -27.3827 0
- vertex 30.0709 -27.3331 -0.1
- vertex 29.58 -27.3827 -0.1
+ vertex 30.0709 -27.3331 -0.2
+ vertex 29.58 -27.3827 -0.2
endloop
endfacet
facet normal -0.0519093 0.998652 0
outer loop
- vertex 29.58 -27.3827 -0.1
+ vertex 29.58 -27.3827 -0.2
vertex 28.988 -27.4135 0
vertex 29.58 -27.3827 0
endloop
@@ -6645,13 +6645,13 @@ solid OpenSCAD_Model
facet normal -0.0519093 0.998652 0
outer loop
vertex 28.988 -27.4135 0
- vertex 29.58 -27.3827 -0.1
- vertex 28.988 -27.4135 -0.1
+ vertex 29.58 -27.3827 -0.2
+ vertex 28.988 -27.4135 -0.2
endloop
endfacet
facet normal -0.014953 0.999888 0
outer loop
- vertex 28.988 -27.4135 -0.1
+ vertex 28.988 -27.4135 -0.2
vertex 27.4568 -27.4364 0
vertex 28.988 -27.4135 0
endloop
@@ -6659,13 +6659,13 @@ solid OpenSCAD_Model
facet normal -0.014953 0.999888 0
outer loop
vertex 27.4568 -27.4364 0
- vertex 28.988 -27.4135 -0.1
- vertex 27.4568 -27.4364 -0.1
+ vertex 28.988 -27.4135 -0.2
+ vertex 27.4568 -27.4364 -0.2
endloop
endfacet
facet normal -0.000556252 1 0
outer loop
- vertex 27.4568 -27.4364 -0.1
+ vertex 27.4568 -27.4364 -0.2
vertex 25.3891 -27.4375 0
vertex 27.4568 -27.4364 0
endloop
@@ -6673,13 +6673,13 @@ solid OpenSCAD_Model
facet normal -0.000556252 1 0
outer loop
vertex 25.3891 -27.4375 0
- vertex 27.4568 -27.4364 -0.1
- vertex 25.3891 -27.4375 -0.1
+ vertex 27.4568 -27.4364 -0.2
+ vertex 25.3891 -27.4375 -0.2
endloop
endfacet
facet normal -0.00092424 1 0
outer loop
- vertex 25.3891 -27.4375 -0.1
+ vertex 25.3891 -27.4375 -0.2
vertex 20.1247 -27.4424 0
vertex 25.3891 -27.4375 0
endloop
@@ -6687,181 +6687,181 @@ solid OpenSCAD_Model
facet normal -0.00092424 1 0
outer loop
vertex 20.1247 -27.4424 0
- vertex 25.3891 -27.4375 -0.1
- vertex 20.1247 -27.4424 -0.1
+ vertex 25.3891 -27.4375 -0.2
+ vertex 20.1247 -27.4424 -0.2
endloop
endfacet
facet normal -0.945282 0.326254 0
outer loop
- vertex 19.9171 -28.0436 -0.1
+ vertex 19.9171 -28.0436 -0.2
vertex 20.1247 -27.4424 0
- vertex 20.1247 -27.4424 -0.1
+ vertex 20.1247 -27.4424 -0.2
endloop
endfacet
facet normal -0.945282 0.326254 0
outer loop
vertex 20.1247 -27.4424 0
- vertex 19.9171 -28.0436 -0.1
+ vertex 19.9171 -28.0436 -0.2
vertex 19.9171 -28.0436 0
endloop
endfacet
facet normal -0.957593 0.288124 0
outer loop
- vertex 19.6992 -28.7679 -0.1
+ vertex 19.6992 -28.7679 -0.2
vertex 19.9171 -28.0436 0
- vertex 19.9171 -28.0436 -0.1
+ vertex 19.9171 -28.0436 -0.2
endloop
endfacet
facet normal -0.957593 0.288124 0
outer loop
vertex 19.9171 -28.0436 0
- vertex 19.6992 -28.7679 -0.1
+ vertex 19.6992 -28.7679 -0.2
vertex 19.6992 -28.7679 0
endloop
endfacet
facet normal -0.97518 0.221412 0
outer loop
- vertex 19.5256 -29.5327 -0.1
+ vertex 19.5256 -29.5327 -0.2
vertex 19.6992 -28.7679 0
- vertex 19.6992 -28.7679 -0.1
+ vertex 19.6992 -28.7679 -0.2
endloop
endfacet
facet normal -0.97518 0.221412 0
outer loop
vertex 19.6992 -28.7679 0
- vertex 19.5256 -29.5327 -0.1
+ vertex 19.5256 -29.5327 -0.2
vertex 19.5256 -29.5327 0
endloop
endfacet
facet normal -0.986769 0.16213 0
outer loop
- vertex 19.3985 -30.306 -0.1
+ vertex 19.3985 -30.306 -0.2
vertex 19.5256 -29.5327 0
- vertex 19.5256 -29.5327 -0.1
+ vertex 19.5256 -29.5327 -0.2
endloop
endfacet
facet normal -0.986769 0.16213 0
outer loop
vertex 19.5256 -29.5327 0
- vertex 19.3985 -30.306 -0.1
+ vertex 19.3985 -30.306 -0.2
vertex 19.3985 -30.306 0
endloop
endfacet
facet normal -0.994613 0.103657 0
outer loop
- vertex 19.3204 -31.0557 -0.1
+ vertex 19.3204 -31.0557 -0.2
vertex 19.3985 -30.306 0
- vertex 19.3985 -30.306 -0.1
+ vertex 19.3985 -30.306 -0.2
endloop
endfacet
facet normal -0.994613 0.103657 0
outer loop
vertex 19.3985 -30.306 0
- vertex 19.3204 -31.0557 -0.1
+ vertex 19.3204 -31.0557 -0.2
vertex 19.3204 -31.0557 0
endloop
endfacet
facet normal -0.999252 0.0386793 0
outer loop
- vertex 19.2935 -31.7496 -0.1
+ vertex 19.2935 -31.7496 -0.2
vertex 19.3204 -31.0557 0
- vertex 19.3204 -31.0557 -0.1
+ vertex 19.3204 -31.0557 -0.2
endloop
endfacet
facet normal -0.999252 0.0386793 0
outer loop
vertex 19.3204 -31.0557 0
- vertex 19.2935 -31.7496 -0.1
+ vertex 19.2935 -31.7496 -0.2
vertex 19.2935 -31.7496 0
endloop
endfacet
facet normal -0.999028 -0.0440878 0
outer loop
- vertex 19.3203 -32.3556 -0.1
+ vertex 19.3203 -32.3556 -0.2
vertex 19.2935 -31.7496 0
- vertex 19.2935 -31.7496 -0.1
+ vertex 19.2935 -31.7496 -0.2
endloop
endfacet
facet normal -0.999028 -0.0440878 0
outer loop
vertex 19.2935 -31.7496 0
- vertex 19.3203 -32.3556 -0.1
+ vertex 19.3203 -32.3556 -0.2
vertex 19.3203 -32.3556 0
endloop
endfacet
facet normal -0.991457 -0.130433 0
outer loop
- vertex 19.3545 -32.6156 -0.1
+ vertex 19.3545 -32.6156 -0.2
vertex 19.3203 -32.3556 0
- vertex 19.3203 -32.3556 -0.1
+ vertex 19.3203 -32.3556 -0.2
endloop
endfacet
facet normal -0.991457 -0.130433 0
outer loop
vertex 19.3203 -32.3556 0
- vertex 19.3545 -32.6156 -0.1
+ vertex 19.3545 -32.6156 -0.2
vertex 19.3545 -32.6156 0
endloop
endfacet
facet normal -0.977754 -0.209757 0
outer loop
- vertex 19.403 -32.8415 -0.1
+ vertex 19.403 -32.8415 -0.2
vertex 19.3545 -32.6156 0
- vertex 19.3545 -32.6156 -0.1
+ vertex 19.3545 -32.6156 -0.2
endloop
endfacet
facet normal -0.977754 -0.209757 0
outer loop
vertex 19.3545 -32.6156 0
- vertex 19.403 -32.8415 -0.1
+ vertex 19.403 -32.8415 -0.2
vertex 19.403 -32.8415 0
endloop
endfacet
facet normal -0.948071 -0.31806 0
outer loop
- vertex 19.466 -33.0295 -0.1
+ vertex 19.466 -33.0295 -0.2
vertex 19.403 -32.8415 0
- vertex 19.403 -32.8415 -0.1
+ vertex 19.403 -32.8415 -0.2
endloop
endfacet
facet normal -0.948071 -0.31806 0
outer loop
vertex 19.403 -32.8415 0
- vertex 19.466 -33.0295 -0.1
+ vertex 19.466 -33.0295 -0.2
vertex 19.466 -33.0295 0
endloop
endfacet
facet normal -0.882102 -0.471058 0
outer loop
- vertex 19.5439 -33.1754 -0.1
+ vertex 19.5439 -33.1754 -0.2
vertex 19.466 -33.0295 0
- vertex 19.466 -33.0295 -0.1
+ vertex 19.466 -33.0295 -0.2
endloop
endfacet
facet normal -0.882102 -0.471058 0
outer loop
vertex 19.466 -33.0295 0
- vertex 19.5439 -33.1754 -0.1
+ vertex 19.5439 -33.1754 -0.2
vertex 19.5439 -33.1754 0
endloop
endfacet
facet normal -0.777019 -0.629477 0
outer loop
- vertex 19.7677 -33.4516 -0.1
+ vertex 19.7677 -33.4516 -0.2
vertex 19.5439 -33.1754 0
- vertex 19.5439 -33.1754 -0.1
+ vertex 19.5439 -33.1754 -0.2
endloop
endfacet
facet normal -0.777019 -0.629477 0
outer loop
vertex 19.5439 -33.1754 0
- vertex 19.7677 -33.4516 -0.1
+ vertex 19.7677 -33.4516 -0.2
vertex 19.7677 -33.4516 0
endloop
endfacet
facet normal -0.679559 -0.73362 0
outer loop
- vertex 19.7677 -33.4516 -0.1
+ vertex 19.7677 -33.4516 -0.2
vertex 20.0345 -33.6987 0
vertex 19.7677 -33.4516 0
endloop
@@ -6869,13 +6869,13 @@ solid OpenSCAD_Model
facet normal -0.679559 -0.73362 -0
outer loop
vertex 20.0345 -33.6987 0
- vertex 19.7677 -33.4516 -0.1
- vertex 20.0345 -33.6987 -0.1
+ vertex 19.7677 -33.4516 -0.2
+ vertex 20.0345 -33.6987 -0.2
endloop
endfacet
facet normal -0.577724 -0.816232 0
outer loop
- vertex 20.0345 -33.6987 -0.1
+ vertex 20.0345 -33.6987 -0.2
vertex 20.3392 -33.9144 0
vertex 20.0345 -33.6987 0
endloop
@@ -6883,13 +6883,13 @@ solid OpenSCAD_Model
facet normal -0.577724 -0.816232 -0
outer loop
vertex 20.3392 -33.9144 0
- vertex 20.0345 -33.6987 -0.1
- vertex 20.3392 -33.9144 -0.1
+ vertex 20.0345 -33.6987 -0.2
+ vertex 20.3392 -33.9144 -0.2
endloop
endfacet
facet normal -0.474279 -0.880374 0
outer loop
- vertex 20.3392 -33.9144 -0.1
+ vertex 20.3392 -33.9144 -0.2
vertex 20.6768 -34.0963 0
vertex 20.3392 -33.9144 0
endloop
@@ -6897,13 +6897,13 @@ solid OpenSCAD_Model
facet normal -0.474279 -0.880374 -0
outer loop
vertex 20.6768 -34.0963 0
- vertex 20.3392 -33.9144 -0.1
- vertex 20.6768 -34.0963 -0.1
+ vertex 20.3392 -33.9144 -0.2
+ vertex 20.6768 -34.0963 -0.2
endloop
endfacet
facet normal -0.370342 -0.928896 0
outer loop
- vertex 20.6768 -34.0963 -0.1
+ vertex 20.6768 -34.0963 -0.2
vertex 21.0421 -34.2419 0
vertex 20.6768 -34.0963 0
endloop
@@ -6911,13 +6911,13 @@ solid OpenSCAD_Model
facet normal -0.370342 -0.928896 -0
outer loop
vertex 21.0421 -34.2419 0
- vertex 20.6768 -34.0963 -0.1
- vertex 21.0421 -34.2419 -0.1
+ vertex 20.6768 -34.0963 -0.2
+ vertex 21.0421 -34.2419 -0.2
endloop
endfacet
facet normal -0.266037 -0.963963 0
outer loop
- vertex 21.0421 -34.2419 -0.1
+ vertex 21.0421 -34.2419 -0.2
vertex 21.43 -34.349 0
vertex 21.0421 -34.2419 0
endloop
@@ -6925,13 +6925,13 @@ solid OpenSCAD_Model
facet normal -0.266037 -0.963963 -0
outer loop
vertex 21.43 -34.349 0
- vertex 21.0421 -34.2419 -0.1
- vertex 21.43 -34.349 -0.1
+ vertex 21.0421 -34.2419 -0.2
+ vertex 21.43 -34.349 -0.2
endloop
endfacet
facet normal -0.160906 -0.98697 0
outer loop
- vertex 21.43 -34.349 -0.1
+ vertex 21.43 -34.349 -0.2
vertex 21.8355 -34.4151 0
vertex 21.43 -34.349 0
endloop
@@ -6939,13 +6939,13 @@ solid OpenSCAD_Model
facet normal -0.160906 -0.98697 -0
outer loop
vertex 21.8355 -34.4151 0
- vertex 21.43 -34.349 -0.1
- vertex 21.8355 -34.4151 -0.1
+ vertex 21.43 -34.349 -0.2
+ vertex 21.8355 -34.4151 -0.2
endloop
endfacet
facet normal -0.0544036 -0.998519 0
outer loop
- vertex 21.8355 -34.4151 -0.1
+ vertex 21.8355 -34.4151 -0.2
vertex 22.2534 -34.4379 0
vertex 21.8355 -34.4151 0
endloop
@@ -6953,13 +6953,13 @@ solid OpenSCAD_Model
facet normal -0.0544036 -0.998519 -0
outer loop
vertex 22.2534 -34.4379 0
- vertex 21.8355 -34.4151 -0.1
- vertex 22.2534 -34.4379 -0.1
+ vertex 21.8355 -34.4151 -0.2
+ vertex 22.2534 -34.4379 -0.2
endloop
endfacet
facet normal 0.0273252 -0.999627 0
outer loop
- vertex 22.2534 -34.4379 -0.1
+ vertex 22.2534 -34.4379 -0.2
vertex 22.5956 -34.4285 0
vertex 22.2534 -34.4379 0
endloop
@@ -6967,13 +6967,13 @@ solid OpenSCAD_Model
facet normal 0.0273252 -0.999627 0
outer loop
vertex 22.5956 -34.4285 0
- vertex 22.2534 -34.4379 -0.1
- vertex 22.5956 -34.4285 -0.1
+ vertex 22.2534 -34.4379 -0.2
+ vertex 22.5956 -34.4285 -0.2
endloop
endfacet
facet normal 0.0869987 -0.996208 0
outer loop
- vertex 22.5956 -34.4285 -0.1
+ vertex 22.5956 -34.4285 -0.2
vertex 22.9315 -34.3992 0
vertex 22.5956 -34.4285 0
endloop
@@ -6981,13 +6981,13 @@ solid OpenSCAD_Model
facet normal 0.0869987 -0.996208 0
outer loop
vertex 22.9315 -34.3992 0
- vertex 22.5956 -34.4285 -0.1
- vertex 22.9315 -34.3992 -0.1
+ vertex 22.5956 -34.4285 -0.2
+ vertex 22.9315 -34.3992 -0.2
endloop
endfacet
facet normal 0.150489 -0.988612 0
outer loop
- vertex 22.9315 -34.3992 -0.1
+ vertex 22.9315 -34.3992 -0.2
vertex 23.2634 -34.3487 0
vertex 22.9315 -34.3992 0
endloop
@@ -6995,13 +6995,13 @@ solid OpenSCAD_Model
facet normal 0.150489 -0.988612 0
outer loop
vertex 23.2634 -34.3487 0
- vertex 22.9315 -34.3992 -0.1
- vertex 23.2634 -34.3487 -0.1
+ vertex 22.9315 -34.3992 -0.2
+ vertex 23.2634 -34.3487 -0.2
endloop
endfacet
facet normal 0.215659 -0.976469 0
outer loop
- vertex 23.2634 -34.3487 -0.1
+ vertex 23.2634 -34.3487 -0.2
vertex 23.5933 -34.2758 0
vertex 23.2634 -34.3487 0
endloop
@@ -7009,13 +7009,13 @@ solid OpenSCAD_Model
facet normal 0.215659 -0.976469 0
outer loop
vertex 23.5933 -34.2758 0
- vertex 23.2634 -34.3487 -0.1
- vertex 23.5933 -34.2758 -0.1
+ vertex 23.2634 -34.3487 -0.2
+ vertex 23.5933 -34.2758 -0.2
endloop
endfacet
facet normal 0.280239 -0.95993 0
outer loop
- vertex 23.5933 -34.2758 -0.1
+ vertex 23.5933 -34.2758 -0.2
vertex 23.9237 -34.1793 0
vertex 23.5933 -34.2758 0
endloop
@@ -7023,13 +7023,13 @@ solid OpenSCAD_Model
facet normal 0.280239 -0.95993 0
outer loop
vertex 23.9237 -34.1793 0
- vertex 23.5933 -34.2758 -0.1
- vertex 23.9237 -34.1793 -0.1
+ vertex 23.5933 -34.2758 -0.2
+ vertex 23.9237 -34.1793 -0.2
endloop
endfacet
facet normal 0.342076 -0.939672 0
outer loop
- vertex 23.9237 -34.1793 -0.1
+ vertex 23.9237 -34.1793 -0.2
vertex 24.2566 -34.0582 0
vertex 23.9237 -34.1793 0
endloop
@@ -7037,13 +7037,13 @@ solid OpenSCAD_Model
facet normal 0.342076 -0.939672 0
outer loop
vertex 24.2566 -34.0582 0
- vertex 23.9237 -34.1793 -0.1
- vertex 24.2566 -34.0582 -0.1
+ vertex 23.9237 -34.1793 -0.2
+ vertex 24.2566 -34.0582 -0.2
endloop
endfacet
facet normal 0.399452 -0.916754 0
outer loop
- vertex 24.2566 -34.0582 -0.1
+ vertex 24.2566 -34.0582 -0.2
vertex 24.5942 -33.911 0
vertex 24.2566 -34.0582 0
endloop
@@ -7051,13 +7051,13 @@ solid OpenSCAD_Model
facet normal 0.399452 -0.916754 0
outer loop
vertex 24.5942 -33.911 0
- vertex 24.2566 -34.0582 -0.1
- vertex 24.5942 -33.911 -0.1
+ vertex 24.2566 -34.0582 -0.2
+ vertex 24.5942 -33.911 -0.2
endloop
endfacet
facet normal 0.451238 -0.892404 0
outer loop
- vertex 24.5942 -33.911 -0.1
+ vertex 24.5942 -33.911 -0.2
vertex 24.9388 -33.7368 0
vertex 24.5942 -33.911 0
endloop
@@ -7065,13 +7065,13 @@ solid OpenSCAD_Model
facet normal 0.451238 -0.892404 0
outer loop
vertex 24.9388 -33.7368 0
- vertex 24.5942 -33.911 -0.1
- vertex 24.9388 -33.7368 -0.1
+ vertex 24.5942 -33.911 -0.2
+ vertex 24.9388 -33.7368 -0.2
endloop
endfacet
facet normal 0.496895 -0.867811 0
outer loop
- vertex 24.9388 -33.7368 -0.1
+ vertex 24.9388 -33.7368 -0.2
vertex 25.2926 -33.5342 0
vertex 24.9388 -33.7368 0
endloop
@@ -7079,13 +7079,13 @@ solid OpenSCAD_Model
facet normal 0.496895 -0.867811 0
outer loop
vertex 25.2926 -33.5342 0
- vertex 24.9388 -33.7368 -0.1
- vertex 25.2926 -33.5342 -0.1
+ vertex 24.9388 -33.7368 -0.2
+ vertex 25.2926 -33.5342 -0.2
endloop
endfacet
facet normal 0.536389 -0.843971 0
outer loop
- vertex 25.2926 -33.5342 -0.1
+ vertex 25.2926 -33.5342 -0.2
vertex 25.6577 -33.3022 0
vertex 25.2926 -33.5342 0
endloop
@@ -7093,13 +7093,13 @@ solid OpenSCAD_Model
facet normal 0.536389 -0.843971 0
outer loop
vertex 25.6577 -33.3022 0
- vertex 25.2926 -33.5342 -0.1
- vertex 25.6577 -33.3022 -0.1
+ vertex 25.2926 -33.5342 -0.2
+ vertex 25.6577 -33.3022 -0.2
endloop
endfacet
facet normal 0.584792 -0.811183 0
outer loop
- vertex 25.6577 -33.3022 -0.1
+ vertex 25.6577 -33.3022 -0.2
vertex 26.4309 -32.7448 0
vertex 25.6577 -33.3022 0
endloop
@@ -7107,13 +7107,13 @@ solid OpenSCAD_Model
facet normal 0.584792 -0.811183 0
outer loop
vertex 26.4309 -32.7448 0
- vertex 25.6577 -33.3022 -0.1
- vertex 26.4309 -32.7448 -0.1
+ vertex 25.6577 -33.3022 -0.2
+ vertex 26.4309 -32.7448 -0.2
endloop
endfacet
facet normal 0.632266 -0.774751 0
outer loop
- vertex 26.4309 -32.7448 -0.1
+ vertex 26.4309 -32.7448 -0.2
vertex 27.276 -32.055 0
vertex 26.4309 -32.7448 0
endloop
@@ -7121,13 +7121,13 @@ solid OpenSCAD_Model
facet normal 0.632266 -0.774751 0
outer loop
vertex 27.276 -32.055 0
- vertex 26.4309 -32.7448 -0.1
- vertex 27.276 -32.055 -0.1
+ vertex 26.4309 -32.7448 -0.2
+ vertex 27.276 -32.055 -0.2
endloop
endfacet
facet normal 0.66466 -0.747146 0
outer loop
- vertex 27.276 -32.055 -0.1
+ vertex 27.276 -32.055 -0.2
vertex 28.2108 -31.2235 0
vertex 27.276 -32.055 0
endloop
@@ -7135,13 +7135,13 @@ solid OpenSCAD_Model
facet normal 0.66466 -0.747146 0
outer loop
vertex 28.2108 -31.2235 0
- vertex 27.276 -32.055 -0.1
- vertex 28.2108 -31.2235 -0.1
+ vertex 27.276 -32.055 -0.2
+ vertex 28.2108 -31.2235 -0.2
endloop
endfacet
facet normal 0.662871 -0.748733 0
outer loop
- vertex 28.2108 -31.2235 -0.1
+ vertex 28.2108 -31.2235 -0.2
vertex 28.5495 -30.9236 0
vertex 28.2108 -31.2235 0
endloop
@@ -7149,13 +7149,13 @@ solid OpenSCAD_Model
facet normal 0.662871 -0.748733 0
outer loop
vertex 28.5495 -30.9236 0
- vertex 28.2108 -31.2235 -0.1
- vertex 28.5495 -30.9236 -0.1
+ vertex 28.2108 -31.2235 -0.2
+ vertex 28.5495 -30.9236 -0.2
endloop
endfacet
facet normal 0.615947 -0.787787 0
outer loop
- vertex 28.5495 -30.9236 -0.1
+ vertex 28.5495 -30.9236 -0.2
vertex 28.8369 -30.6989 0
vertex 28.5495 -30.9236 0
endloop
@@ -7163,13 +7163,13 @@ solid OpenSCAD_Model
facet normal 0.615947 -0.787787 0
outer loop
vertex 28.8369 -30.6989 0
- vertex 28.5495 -30.9236 -0.1
- vertex 28.8369 -30.6989 -0.1
+ vertex 28.5495 -30.9236 -0.2
+ vertex 28.8369 -30.6989 -0.2
endloop
endfacet
facet normal 0.524001 -0.851718 0
outer loop
- vertex 28.8369 -30.6989 -0.1
+ vertex 28.8369 -30.6989 -0.2
vertex 29.0845 -30.5466 0
vertex 28.8369 -30.6989 0
endloop
@@ -7177,13 +7177,13 @@ solid OpenSCAD_Model
facet normal 0.524001 -0.851718 0
outer loop
vertex 29.0845 -30.5466 0
- vertex 28.8369 -30.6989 -0.1
- vertex 29.0845 -30.5466 -0.1
+ vertex 28.8369 -30.6989 -0.2
+ vertex 29.0845 -30.5466 -0.2
endloop
endfacet
facet normal 0.352437 -0.935836 0
outer loop
- vertex 29.0845 -30.5466 -0.1
+ vertex 29.0845 -30.5466 -0.2
vertex 29.3033 -30.4642 0
vertex 29.0845 -30.5466 0
endloop
@@ -7191,13 +7191,13 @@ solid OpenSCAD_Model
facet normal 0.352437 -0.935836 0
outer loop
vertex 29.3033 -30.4642 0
- vertex 29.0845 -30.5466 -0.1
- vertex 29.3033 -30.4642 -0.1
+ vertex 29.0845 -30.5466 -0.2
+ vertex 29.3033 -30.4642 -0.2
endloop
endfacet
facet normal 0.0751321 -0.997174 0
outer loop
- vertex 29.3033 -30.4642 -0.1
+ vertex 29.3033 -30.4642 -0.2
vertex 29.5048 -30.449 0
vertex 29.3033 -30.4642 0
endloop
@@ -7205,13 +7205,13 @@ solid OpenSCAD_Model
facet normal 0.0751321 -0.997174 0
outer loop
vertex 29.5048 -30.449 0
- vertex 29.3033 -30.4642 -0.1
- vertex 29.5048 -30.449 -0.1
+ vertex 29.3033 -30.4642 -0.2
+ vertex 29.5048 -30.449 -0.2
endloop
endfacet
facet normal -0.245256 -0.969458 0
outer loop
- vertex 29.5048 -30.449 -0.1
+ vertex 29.5048 -30.449 -0.2
vertex 29.7002 -30.4984 0
vertex 29.5048 -30.449 0
endloop
@@ -7219,13 +7219,13 @@ solid OpenSCAD_Model
facet normal -0.245256 -0.969458 -0
outer loop
vertex 29.7002 -30.4984 0
- vertex 29.5048 -30.449 -0.1
- vertex 29.7002 -30.4984 -0.1
+ vertex 29.5048 -30.449 -0.2
+ vertex 29.7002 -30.4984 -0.2
endloop
endfacet
facet normal -0.485575 -0.874195 0
outer loop
- vertex 29.7002 -30.4984 -0.1
+ vertex 29.7002 -30.4984 -0.2
vertex 29.9008 -30.6099 0
vertex 29.7002 -30.4984 0
endloop
@@ -7233,13 +7233,13 @@ solid OpenSCAD_Model
facet normal -0.485575 -0.874195 -0
outer loop
vertex 29.9008 -30.6099 0
- vertex 29.7002 -30.4984 -0.1
- vertex 29.9008 -30.6099 -0.1
+ vertex 29.7002 -30.4984 -0.2
+ vertex 29.9008 -30.6099 -0.2
endloop
endfacet
facet normal -0.618314 -0.785931 0
outer loop
- vertex 29.9008 -30.6099 -0.1
+ vertex 29.9008 -30.6099 -0.2
vertex 30.1179 -30.7807 0
vertex 29.9008 -30.6099 0
endloop
@@ -7247,167 +7247,167 @@ solid OpenSCAD_Model
facet normal -0.618314 -0.785931 -0
outer loop
vertex 30.1179 -30.7807 0
- vertex 29.9008 -30.6099 -0.1
- vertex 30.1179 -30.7807 -0.1
+ vertex 29.9008 -30.6099 -0.2
+ vertex 30.1179 -30.7807 -0.2
endloop
endfacet
facet normal -0.761006 -0.648745 0
outer loop
- vertex 30.1812 -30.855 -0.1
+ vertex 30.1812 -30.855 -0.2
vertex 30.1179 -30.7807 0
- vertex 30.1179 -30.7807 -0.1
+ vertex 30.1179 -30.7807 -0.2
endloop
endfacet
facet normal -0.761006 -0.648745 0
outer loop
vertex 30.1179 -30.7807 0
- vertex 30.1812 -30.855 -0.1
+ vertex 30.1812 -30.855 -0.2
vertex 30.1812 -30.855 0
endloop
endfacet
facet normal -0.923965 -0.382477 0
outer loop
- vertex 30.2187 -30.9454 -0.1
+ vertex 30.2187 -30.9454 -0.2
vertex 30.1812 -30.855 0
- vertex 30.1812 -30.855 -0.1
+ vertex 30.1812 -30.855 -0.2
endloop
endfacet
facet normal -0.923965 -0.382477 0
outer loop
vertex 30.1812 -30.855 0
- vertex 30.2187 -30.9454 -0.1
+ vertex 30.2187 -30.9454 -0.2
vertex 30.2187 -30.9454 0
endloop
endfacet
facet normal -0.994533 -0.104423 0
outer loop
- vertex 30.2299 -31.0524 -0.1
+ vertex 30.2299 -31.0524 -0.2
vertex 30.2187 -30.9454 0
- vertex 30.2187 -30.9454 -0.1
+ vertex 30.2187 -30.9454 -0.2
endloop
endfacet
facet normal -0.994533 -0.104423 0
outer loop
vertex 30.2187 -30.9454 0
- vertex 30.2299 -31.0524 -0.1
+ vertex 30.2299 -31.0524 -0.2
vertex 30.2299 -31.0524 0
endloop
endfacet
facet normal -0.992515 0.122124 0
outer loop
- vertex 30.2146 -31.1764 -0.1
+ vertex 30.2146 -31.1764 -0.2
vertex 30.2299 -31.0524 0
- vertex 30.2299 -31.0524 -0.1
+ vertex 30.2299 -31.0524 -0.2
endloop
endfacet
facet normal -0.992515 0.122124 0
outer loop
vertex 30.2299 -31.0524 0
- vertex 30.2146 -31.1764 -0.1
+ vertex 30.2146 -31.1764 -0.2
vertex 30.2146 -31.1764 0
endloop
endfacet
facet normal -0.95856 0.284892 0
outer loop
- vertex 30.1726 -31.3179 -0.1
+ vertex 30.1726 -31.3179 -0.2
vertex 30.2146 -31.1764 0
- vertex 30.2146 -31.1764 -0.1
+ vertex 30.2146 -31.1764 -0.2
endloop
endfacet
facet normal -0.95856 0.284892 0
outer loop
vertex 30.2146 -31.1764 0
- vertex 30.1726 -31.3179 -0.1
+ vertex 30.1726 -31.3179 -0.2
vertex 30.1726 -31.3179 0
endloop
endfacet
facet normal -0.917421 0.397919 0
outer loop
- vertex 30.1034 -31.4773 -0.1
+ vertex 30.1034 -31.4773 -0.2
vertex 30.1726 -31.3179 0
- vertex 30.1726 -31.3179 -0.1
+ vertex 30.1726 -31.3179 -0.2
endloop
endfacet
facet normal -0.917421 0.397919 0
outer loop
vertex 30.1726 -31.3179 0
- vertex 30.1034 -31.4773 -0.1
+ vertex 30.1034 -31.4773 -0.2
vertex 30.1034 -31.4773 0
endloop
endfacet
facet normal -0.861393 0.50794 0
outer loop
- vertex 29.8827 -31.8517 -0.1
+ vertex 29.8827 -31.8517 -0.2
vertex 30.1034 -31.4773 0
- vertex 30.1034 -31.4773 -0.1
+ vertex 30.1034 -31.4773 -0.2
endloop
endfacet
facet normal -0.861393 0.50794 0
outer loop
vertex 30.1034 -31.4773 0
- vertex 29.8827 -31.8517 -0.1
+ vertex 29.8827 -31.8517 -0.2
vertex 29.8827 -31.8517 0
endloop
endfacet
facet normal -0.804973 0.593311 0
outer loop
- vertex 29.5499 -32.3032 -0.1
+ vertex 29.5499 -32.3032 -0.2
vertex 29.8827 -31.8517 0
- vertex 29.8827 -31.8517 -0.1
+ vertex 29.8827 -31.8517 -0.2
endloop
endfacet
facet normal -0.804973 0.593311 0
outer loop
vertex 29.8827 -31.8517 0
- vertex 29.5499 -32.3032 -0.1
+ vertex 29.5499 -32.3032 -0.2
vertex 29.5499 -32.3032 0
endloop
endfacet
facet normal -0.76559 0.643329 0
outer loop
- vertex 29.1028 -32.8352 -0.1
+ vertex 29.1028 -32.8352 -0.2
vertex 29.5499 -32.3032 0
- vertex 29.5499 -32.3032 -0.1
+ vertex 29.5499 -32.3032 -0.2
endloop
endfacet
facet normal -0.76559 0.643329 0
outer loop
vertex 29.5499 -32.3032 0
- vertex 29.1028 -32.8352 -0.1
+ vertex 29.1028 -32.8352 -0.2
vertex 29.1028 -32.8352 0
endloop
endfacet
facet normal -0.73778 0.675042 0
outer loop
- vertex 28.539 -33.4515 -0.1
+ vertex 28.539 -33.4515 -0.2
vertex 29.1028 -32.8352 0
- vertex 29.1028 -32.8352 -0.1
+ vertex 29.1028 -32.8352 -0.2
endloop
endfacet
facet normal -0.73778 0.675042 0
outer loop
vertex 29.1028 -32.8352 0
- vertex 28.539 -33.4515 -0.1
+ vertex 28.539 -33.4515 -0.2
vertex 28.539 -33.4515 0
endloop
endfacet
facet normal -0.717743 0.696309 0
outer loop
- vertex 27.856 -34.1555 -0.1
+ vertex 27.856 -34.1555 -0.2
vertex 28.539 -33.4515 0
- vertex 28.539 -33.4515 -0.1
+ vertex 28.539 -33.4515 -0.2
endloop
endfacet
facet normal -0.717743 0.696309 0
outer loop
vertex 28.539 -33.4515 0
- vertex 27.856 -34.1555 -0.1
+ vertex 27.856 -34.1555 -0.2
vertex 27.856 -34.1555 0
endloop
endfacet
facet normal -0.702585 0.7116 0
outer loop
- vertex 27.856 -34.1555 -0.1
+ vertex 27.856 -34.1555 -0.2
vertex 27.3514 -34.6537 0
vertex 27.856 -34.1555 0
endloop
@@ -7415,13 +7415,13 @@ solid OpenSCAD_Model
facet normal -0.702585 0.7116 0
outer loop
vertex 27.3514 -34.6537 0
- vertex 27.856 -34.1555 -0.1
- vertex 27.3514 -34.6537 -0.1
+ vertex 27.856 -34.1555 -0.2
+ vertex 27.3514 -34.6537 -0.2
endloop
endfacet
facet normal -0.683825 0.729646 0
outer loop
- vertex 27.3514 -34.6537 -0.1
+ vertex 27.3514 -34.6537 -0.2
vertex 26.8832 -35.0925 0
vertex 27.3514 -34.6537 0
endloop
@@ -7429,13 +7429,13 @@ solid OpenSCAD_Model
facet normal -0.683825 0.729646 0
outer loop
vertex 26.8832 -35.0925 0
- vertex 27.3514 -34.6537 -0.1
- vertex 26.8832 -35.0925 -0.1
+ vertex 27.3514 -34.6537 -0.2
+ vertex 26.8832 -35.0925 -0.2
endloop
endfacet
facet normal -0.65863 0.752467 0
outer loop
- vertex 26.8832 -35.0925 -0.1
+ vertex 26.8832 -35.0925 -0.2
vertex 26.4377 -35.4824 0
vertex 26.8832 -35.0925 0
endloop
@@ -7443,13 +7443,13 @@ solid OpenSCAD_Model
facet normal -0.65863 0.752467 0
outer loop
vertex 26.4377 -35.4824 0
- vertex 26.8832 -35.0925 -0.1
- vertex 26.4377 -35.4824 -0.1
+ vertex 26.8832 -35.0925 -0.2
+ vertex 26.4377 -35.4824 -0.2
endloop
endfacet
facet normal -0.627338 0.778747 0
outer loop
- vertex 26.4377 -35.4824 -0.1
+ vertex 26.4377 -35.4824 -0.2
vertex 26.0012 -35.834 0
vertex 26.4377 -35.4824 0
endloop
@@ -7457,13 +7457,13 @@ solid OpenSCAD_Model
facet normal -0.627338 0.778747 0
outer loop
vertex 26.0012 -35.834 0
- vertex 26.4377 -35.4824 -0.1
- vertex 26.0012 -35.834 -0.1
+ vertex 26.4377 -35.4824 -0.2
+ vertex 26.0012 -35.834 -0.2
endloop
endfacet
facet normal -0.591741 0.806128 0
outer loop
- vertex 26.0012 -35.834 -0.1
+ vertex 26.0012 -35.834 -0.2
vertex 25.5601 -36.1579 0
vertex 26.0012 -35.834 0
endloop
@@ -7471,13 +7471,13 @@ solid OpenSCAD_Model
facet normal -0.591741 0.806128 0
outer loop
vertex 25.5601 -36.1579 0
- vertex 26.0012 -35.834 -0.1
- vertex 25.5601 -36.1579 -0.1
+ vertex 26.0012 -35.834 -0.2
+ vertex 25.5601 -36.1579 -0.2
endloop
endfacet
facet normal -0.554992 0.831856 0
outer loop
- vertex 25.5601 -36.1579 -0.1
+ vertex 25.5601 -36.1579 -0.2
vertex 25.1006 -36.4644 0
vertex 25.5601 -36.1579 0
endloop
@@ -7485,13 +7485,13 @@ solid OpenSCAD_Model
facet normal -0.554992 0.831856 0
outer loop
vertex 25.1006 -36.4644 0
- vertex 25.5601 -36.1579 -0.1
- vertex 25.1006 -36.4644 -0.1
+ vertex 25.5601 -36.1579 -0.2
+ vertex 25.1006 -36.4644 -0.2
endloop
endfacet
facet normal -0.520754 0.853707 0
outer loop
- vertex 25.1006 -36.4644 -0.1
+ vertex 25.1006 -36.4644 -0.2
vertex 24.6091 -36.7642 0
vertex 25.1006 -36.4644 0
endloop
@@ -7499,13 +7499,13 @@ solid OpenSCAD_Model
facet normal -0.520754 0.853707 0
outer loop
vertex 24.6091 -36.7642 0
- vertex 25.1006 -36.4644 -0.1
- vertex 24.6091 -36.7642 -0.1
+ vertex 25.1006 -36.4644 -0.2
+ vertex 24.6091 -36.7642 -0.2
endloop
endfacet
facet normal -0.492012 0.870588 0
outer loop
- vertex 24.6091 -36.7642 -0.1
+ vertex 24.6091 -36.7642 -0.2
vertex 24.0719 -37.0678 0
vertex 24.6091 -36.7642 0
endloop
@@ -7513,13 +7513,13 @@ solid OpenSCAD_Model
facet normal -0.492012 0.870588 0
outer loop
vertex 24.0719 -37.0678 0
- vertex 24.6091 -36.7642 -0.1
- vertex 24.0719 -37.0678 -0.1
+ vertex 24.6091 -36.7642 -0.2
+ vertex 24.0719 -37.0678 -0.2
endloop
endfacet
facet normal -0.469837 0.882753 0
outer loop
- vertex 24.0719 -37.0678 -0.1
+ vertex 24.0719 -37.0678 -0.2
vertex 23.2902 -37.4839 0
vertex 24.0719 -37.0678 0
endloop
@@ -7527,13 +7527,13 @@ solid OpenSCAD_Model
facet normal -0.469837 0.882753 0
outer loop
vertex 23.2902 -37.4839 0
- vertex 24.0719 -37.0678 -0.1
- vertex 23.2902 -37.4839 -0.1
+ vertex 24.0719 -37.0678 -0.2
+ vertex 23.2902 -37.4839 -0.2
endloop
endfacet
facet normal -0.440052 0.897972 0
outer loop
- vertex 23.2902 -37.4839 -0.1
+ vertex 23.2902 -37.4839 -0.2
vertex 22.6041 -37.8201 0
vertex 23.2902 -37.4839 0
endloop
@@ -7541,13 +7541,13 @@ solid OpenSCAD_Model
facet normal -0.440052 0.897972 0
outer loop
vertex 22.6041 -37.8201 0
- vertex 23.2902 -37.4839 -0.1
- vertex 22.6041 -37.8201 -0.1
+ vertex 23.2902 -37.4839 -0.2
+ vertex 22.6041 -37.8201 -0.2
endloop
endfacet
facet normal -0.394271 0.918994 0
outer loop
- vertex 22.6041 -37.8201 -0.1
+ vertex 22.6041 -37.8201 -0.2
vertex 21.9889 -38.084 0
vertex 22.6041 -37.8201 0
endloop
@@ -7555,13 +7555,13 @@ solid OpenSCAD_Model
facet normal -0.394271 0.918994 0
outer loop
vertex 21.9889 -38.084 0
- vertex 22.6041 -37.8201 -0.1
- vertex 21.9889 -38.084 -0.1
+ vertex 22.6041 -37.8201 -0.2
+ vertex 21.9889 -38.084 -0.2
endloop
endfacet
facet normal -0.330435 0.943829 0
outer loop
- vertex 21.9889 -38.084 -0.1
+ vertex 21.9889 -38.084 -0.2
vertex 21.4197 -38.2833 0
vertex 21.9889 -38.084 0
endloop
@@ -7569,13 +7569,13 @@ solid OpenSCAD_Model
facet normal -0.330435 0.943829 0
outer loop
vertex 21.4197 -38.2833 0
- vertex 21.9889 -38.084 -0.1
- vertex 21.4197 -38.2833 -0.1
+ vertex 21.9889 -38.084 -0.2
+ vertex 21.4197 -38.2833 -0.2
endloop
endfacet
facet normal -0.251155 0.967947 0
outer loop
- vertex 21.4197 -38.2833 -0.1
+ vertex 21.4197 -38.2833 -0.2
vertex 20.8717 -38.4255 0
vertex 21.4197 -38.2833 0
endloop
@@ -7583,13 +7583,13 @@ solid OpenSCAD_Model
facet normal -0.251155 0.967947 0
outer loop
vertex 20.8717 -38.4255 0
- vertex 21.4197 -38.2833 -0.1
- vertex 20.8717 -38.4255 -0.1
+ vertex 21.4197 -38.2833 -0.2
+ vertex 20.8717 -38.4255 -0.2
endloop
endfacet
facet normal -0.165695 0.986177 0
outer loop
- vertex 20.8717 -38.4255 -0.1
+ vertex 20.8717 -38.4255 -0.2
vertex 20.3202 -38.5182 0
vertex 20.8717 -38.4255 0
endloop
@@ -7597,13 +7597,13 @@ solid OpenSCAD_Model
facet normal -0.165695 0.986177 0
outer loop
vertex 20.3202 -38.5182 0
- vertex 20.8717 -38.4255 -0.1
- vertex 20.3202 -38.5182 -0.1
+ vertex 20.8717 -38.4255 -0.2
+ vertex 20.3202 -38.5182 -0.2
endloop
endfacet
facet normal -0.0871415 0.996196 0
outer loop
- vertex 20.3202 -38.5182 -0.1
+ vertex 20.3202 -38.5182 -0.2
vertex 19.7403 -38.5689 0
vertex 20.3202 -38.5182 0
endloop
@@ -7611,13 +7611,13 @@ solid OpenSCAD_Model
facet normal -0.0871415 0.996196 0
outer loop
vertex 19.7403 -38.5689 0
- vertex 20.3202 -38.5182 -0.1
- vertex 19.7403 -38.5689 -0.1
+ vertex 20.3202 -38.5182 -0.2
+ vertex 19.7403 -38.5689 -0.2
endloop
endfacet
facet normal -0.0258263 0.999666 0
outer loop
- vertex 19.7403 -38.5689 -0.1
+ vertex 19.7403 -38.5689 -0.2
vertex 19.1073 -38.5852 0
vertex 19.7403 -38.5689 0
endloop
@@ -7625,13 +7625,13 @@ solid OpenSCAD_Model
facet normal -0.0258263 0.999666 0
outer loop
vertex 19.1073 -38.5852 0
- vertex 19.7403 -38.5689 -0.1
- vertex 19.1073 -38.5852 -0.1
+ vertex 19.7403 -38.5689 -0.2
+ vertex 19.1073 -38.5852 -0.2
endloop
endfacet
facet normal 0.0407265 0.99917 -0
outer loop
- vertex 19.1073 -38.5852 -0.1
+ vertex 19.1073 -38.5852 -0.2
vertex 18.4669 -38.5591 0
vertex 19.1073 -38.5852 0
endloop
@@ -7639,13 +7639,13 @@ solid OpenSCAD_Model
facet normal 0.0407265 0.99917 0
outer loop
vertex 18.4669 -38.5591 0
- vertex 19.1073 -38.5852 -0.1
- vertex 18.4669 -38.5591 -0.1
+ vertex 19.1073 -38.5852 -0.2
+ vertex 18.4669 -38.5591 -0.2
endloop
endfacet
facet normal 0.12356 0.992337 -0
outer loop
- vertex 18.4669 -38.5591 -0.1
+ vertex 18.4669 -38.5591 -0.2
vertex 18.1792 -38.5233 0
vertex 18.4669 -38.5591 0
endloop
@@ -7653,13 +7653,13 @@ solid OpenSCAD_Model
facet normal 0.12356 0.992337 0
outer loop
vertex 18.1792 -38.5233 0
- vertex 18.4669 -38.5591 -0.1
- vertex 18.1792 -38.5233 -0.1
+ vertex 18.4669 -38.5591 -0.2
+ vertex 18.1792 -38.5233 -0.2
endloop
endfacet
facet normal 0.189246 0.98193 -0
outer loop
- vertex 18.1792 -38.5233 -0.1
+ vertex 18.1792 -38.5233 -0.2
vertex 17.9062 -38.4707 0
vertex 18.1792 -38.5233 0
endloop
@@ -7667,13 +7667,13 @@ solid OpenSCAD_Model
facet normal 0.189246 0.98193 0
outer loop
vertex 17.9062 -38.4707 0
- vertex 18.1792 -38.5233 -0.1
- vertex 17.9062 -38.4707 -0.1
+ vertex 18.1792 -38.5233 -0.2
+ vertex 17.9062 -38.4707 -0.2
endloop
endfacet
facet normal 0.258743 0.965946 -0
outer loop
- vertex 17.9062 -38.4707 -0.1
+ vertex 17.9062 -38.4707 -0.2
vertex 17.6424 -38.4 0
vertex 17.9062 -38.4707 0
endloop
@@ -7681,13 +7681,13 @@ solid OpenSCAD_Model
facet normal 0.258743 0.965946 0
outer loop
vertex 17.6424 -38.4 0
- vertex 17.9062 -38.4707 -0.1
- vertex 17.6424 -38.4 -0.1
+ vertex 17.9062 -38.4707 -0.2
+ vertex 17.6424 -38.4 -0.2
endloop
endfacet
facet normal 0.326993 0.945027 -0
outer loop
- vertex 17.6424 -38.4 -0.1
+ vertex 17.6424 -38.4 -0.2
vertex 17.3825 -38.3101 0
vertex 17.6424 -38.4 0
endloop
@@ -7695,13 +7695,13 @@ solid OpenSCAD_Model
facet normal 0.326993 0.945027 0
outer loop
vertex 17.3825 -38.3101 0
- vertex 17.6424 -38.4 -0.1
- vertex 17.3825 -38.3101 -0.1
+ vertex 17.6424 -38.4 -0.2
+ vertex 17.3825 -38.3101 -0.2
endloop
endfacet
facet normal 0.389172 0.921165 -0
outer loop
- vertex 17.3825 -38.3101 -0.1
+ vertex 17.3825 -38.3101 -0.2
vertex 17.1211 -38.1997 0
vertex 17.3825 -38.3101 0
endloop
@@ -7709,13 +7709,13 @@ solid OpenSCAD_Model
facet normal 0.389172 0.921165 0
outer loop
vertex 17.1211 -38.1997 0
- vertex 17.3825 -38.3101 -0.1
- vertex 17.1211 -38.1997 -0.1
+ vertex 17.3825 -38.3101 -0.2
+ vertex 17.1211 -38.1997 -0.2
endloop
endfacet
facet normal 0.442006 0.897012 -0
outer loop
- vertex 17.1211 -38.1997 -0.1
+ vertex 17.1211 -38.1997 -0.2
vertex 16.8529 -38.0675 0
vertex 17.1211 -38.1997 0
endloop
@@ -7723,13 +7723,13 @@ solid OpenSCAD_Model
facet normal 0.442006 0.897012 0
outer loop
vertex 16.8529 -38.0675 0
- vertex 17.1211 -38.1997 -0.1
- vertex 16.8529 -38.0675 -0.1
+ vertex 17.1211 -38.1997 -0.2
+ vertex 16.8529 -38.0675 -0.2
endloop
endfacet
facet normal 0.508496 0.861064 -0
outer loop
- vertex 16.8529 -38.0675 -0.1
+ vertex 16.8529 -38.0675 -0.2
vertex 16.342 -37.7658 0
vertex 16.8529 -38.0675 0
endloop
@@ -7737,13 +7737,13 @@ solid OpenSCAD_Model
facet normal 0.508496 0.861064 0
outer loop
vertex 16.342 -37.7658 0
- vertex 16.8529 -38.0675 -0.1
- vertex 16.342 -37.7658 -0.1
+ vertex 16.8529 -38.0675 -0.2
+ vertex 16.342 -37.7658 -0.2
endloop
endfacet
facet normal 0.581032 0.813881 -0
outer loop
- vertex 16.342 -37.7658 -0.1
+ vertex 16.342 -37.7658 -0.2
vertex 16.1153 -37.6039 0
vertex 16.342 -37.7658 0
endloop
@@ -7751,13 +7751,13 @@ solid OpenSCAD_Model
facet normal 0.581032 0.813881 0
outer loop
vertex 16.1153 -37.6039 0
- vertex 16.342 -37.7658 -0.1
- vertex 16.1153 -37.6039 -0.1
+ vertex 16.342 -37.7658 -0.2
+ vertex 16.1153 -37.6039 -0.2
endloop
endfacet
facet normal 0.632987 0.774162 -0
outer loop
- vertex 16.1153 -37.6039 -0.1
+ vertex 16.1153 -37.6039 -0.2
vertex 15.907 -37.4336 0
vertex 16.1153 -37.6039 0
endloop
@@ -7765,13 +7765,13 @@ solid OpenSCAD_Model
facet normal 0.632987 0.774162 0
outer loop
vertex 15.907 -37.4336 0
- vertex 16.1153 -37.6039 -0.1
- vertex 15.907 -37.4336 -0.1
+ vertex 16.1153 -37.6039 -0.2
+ vertex 15.907 -37.4336 -0.2
endloop
endfacet
facet normal 0.68624 0.727375 -0
outer loop
- vertex 15.907 -37.4336 -0.1
+ vertex 15.907 -37.4336 -0.2
vertex 15.7167 -37.2541 0
vertex 15.907 -37.4336 0
endloop
@@ -7779,405 +7779,405 @@ solid OpenSCAD_Model
facet normal 0.68624 0.727375 0
outer loop
vertex 15.7167 -37.2541 0
- vertex 15.907 -37.4336 -0.1
- vertex 15.7167 -37.2541 -0.1
+ vertex 15.907 -37.4336 -0.2
+ vertex 15.7167 -37.2541 -0.2
endloop
endfacet
facet normal 0.739053 0.673647 0
outer loop
vertex 15.7167 -37.2541 0
- vertex 15.544 -37.0647 -0.1
+ vertex 15.544 -37.0647 -0.2
vertex 15.544 -37.0647 0
endloop
endfacet
facet normal 0.739053 0.673647 0
outer loop
- vertex 15.544 -37.0647 -0.1
+ vertex 15.544 -37.0647 -0.2
vertex 15.7167 -37.2541 0
- vertex 15.7167 -37.2541 -0.1
+ vertex 15.7167 -37.2541 -0.2
endloop
endfacet
facet normal 0.789576 0.613652 0
outer loop
vertex 15.544 -37.0647 0
- vertex 15.3884 -36.8644 -0.1
+ vertex 15.3884 -36.8644 -0.2
vertex 15.3884 -36.8644 0
endloop
endfacet
facet normal 0.789576 0.613652 0
outer loop
- vertex 15.3884 -36.8644 -0.1
+ vertex 15.3884 -36.8644 -0.2
vertex 15.544 -37.0647 0
- vertex 15.544 -37.0647 -0.1
+ vertex 15.544 -37.0647 -0.2
endloop
endfacet
facet normal 0.835985 0.548752 0
outer loop
vertex 15.3884 -36.8644 0
- vertex 15.2493 -36.6526 -0.1
+ vertex 15.2493 -36.6526 -0.2
vertex 15.2493 -36.6526 0
endloop
endfacet
facet normal 0.835985 0.548752 0
outer loop
- vertex 15.2493 -36.6526 -0.1
+ vertex 15.2493 -36.6526 -0.2
vertex 15.3884 -36.8644 0
- vertex 15.3884 -36.8644 -0.1
+ vertex 15.3884 -36.8644 -0.2
endloop
endfacet
facet normal 0.876837 0.480788 0
outer loop
vertex 15.2493 -36.6526 0
- vertex 15.1264 -36.4284 -0.1
+ vertex 15.1264 -36.4284 -0.2
vertex 15.1264 -36.4284 0
endloop
endfacet
facet normal 0.876837 0.480788 0
outer loop
- vertex 15.1264 -36.4284 -0.1
+ vertex 15.1264 -36.4284 -0.2
vertex 15.2493 -36.6526 0
- vertex 15.2493 -36.6526 -0.1
+ vertex 15.2493 -36.6526 -0.2
endloop
endfacet
facet normal 0.911228 0.411902 0
outer loop
vertex 15.1264 -36.4284 0
- vertex 15.0191 -36.1911 -0.1
+ vertex 15.0191 -36.1911 -0.2
vertex 15.0191 -36.1911 0
endloop
endfacet
facet normal 0.911228 0.411902 0
outer loop
- vertex 15.0191 -36.1911 -0.1
+ vertex 15.0191 -36.1911 -0.2
vertex 15.1264 -36.4284 0
- vertex 15.1264 -36.4284 -0.1
+ vertex 15.1264 -36.4284 -0.2
endloop
endfacet
facet normal 0.938903 0.344183 0
outer loop
vertex 15.0191 -36.1911 0
- vertex 14.927 -35.9398 -0.1
+ vertex 14.927 -35.9398 -0.2
vertex 14.927 -35.9398 0
endloop
endfacet
facet normal 0.938903 0.344183 0
outer loop
- vertex 14.927 -35.9398 -0.1
+ vertex 14.927 -35.9398 -0.2
vertex 15.0191 -36.1911 0
- vertex 15.0191 -36.1911 -0.1
+ vertex 15.0191 -36.1911 -0.2
endloop
endfacet
facet normal 0.960161 0.279447 0
outer loop
vertex 14.927 -35.9398 0
- vertex 14.8496 -35.6738 -0.1
+ vertex 14.8496 -35.6738 -0.2
vertex 14.8496 -35.6738 0
endloop
endfacet
facet normal 0.960161 0.279447 0
outer loop
- vertex 14.8496 -35.6738 -0.1
+ vertex 14.8496 -35.6738 -0.2
vertex 14.927 -35.9398 0
- vertex 14.927 -35.9398 -0.1
+ vertex 14.927 -35.9398 -0.2
endloop
endfacet
facet normal 0.981615 0.190873 0
outer loop
vertex 14.8496 -35.6738 0
- vertex 14.7369 -35.0944 -0.1
+ vertex 14.7369 -35.0944 -0.2
vertex 14.7369 -35.0944 0
endloop
endfacet
facet normal 0.981615 0.190873 0
outer loop
- vertex 14.7369 -35.0944 -0.1
+ vertex 14.7369 -35.0944 -0.2
vertex 14.8496 -35.6738 0
- vertex 14.8496 -35.6738 -0.1
+ vertex 14.8496 -35.6738 -0.2
endloop
endfacet
facet normal 0.995797 0.0915901 0
outer loop
vertex 14.7369 -35.0944 0
- vertex 14.6774 -34.4466 -0.1
+ vertex 14.6774 -34.4466 -0.2
vertex 14.6774 -34.4466 0
endloop
endfacet
facet normal 0.995797 0.0915901 0
outer loop
- vertex 14.6774 -34.4466 -0.1
+ vertex 14.6774 -34.4466 -0.2
vertex 14.7369 -35.0944 0
- vertex 14.7369 -35.0944 -0.1
+ vertex 14.7369 -35.0944 -0.2
endloop
endfacet
facet normal 0.999758 0.0220201 0
outer loop
vertex 14.6774 -34.4466 0
- vertex 14.6656 -33.913 -0.1
+ vertex 14.6656 -33.913 -0.2
vertex 14.6656 -33.913 0
endloop
endfacet
facet normal 0.999758 0.0220201 0
outer loop
- vertex 14.6656 -33.913 -0.1
+ vertex 14.6656 -33.913 -0.2
vertex 14.6774 -34.4466 0
- vertex 14.6774 -34.4466 -0.1
+ vertex 14.6774 -34.4466 -0.2
endloop
endfacet
facet normal 0.999472 -0.03249 0
outer loop
vertex 14.6656 -33.913 0
- vertex 14.6832 -33.3707 -0.1
+ vertex 14.6832 -33.3707 -0.2
vertex 14.6832 -33.3707 0
endloop
endfacet
facet normal 0.999472 -0.03249 0
outer loop
- vertex 14.6832 -33.3707 -0.1
+ vertex 14.6832 -33.3707 -0.2
vertex 14.6656 -33.913 0
- vertex 14.6656 -33.913 -0.1
+ vertex 14.6656 -33.913 -0.2
endloop
endfacet
facet normal 0.996411 -0.0846524 0
outer loop
vertex 14.6832 -33.3707 0
- vertex 14.73 -32.8205 -0.1
+ vertex 14.73 -32.8205 -0.2
vertex 14.73 -32.8205 0
endloop
endfacet
facet normal 0.996411 -0.0846524 0
outer loop
- vertex 14.73 -32.8205 -0.1
+ vertex 14.73 -32.8205 -0.2
vertex 14.6832 -33.3707 0
- vertex 14.6832 -33.3707 -0.1
+ vertex 14.6832 -33.3707 -0.2
endloop
endfacet
facet normal 0.990928 -0.134393 0
outer loop
vertex 14.73 -32.8205 0
- vertex 14.8056 -32.2631 -0.1
+ vertex 14.8056 -32.2631 -0.2
vertex 14.8056 -32.2631 0
endloop
endfacet
facet normal 0.990928 -0.134393 0
outer loop
- vertex 14.8056 -32.2631 -0.1
+ vertex 14.8056 -32.2631 -0.2
vertex 14.73 -32.8205 0
- vertex 14.73 -32.8205 -0.1
+ vertex 14.73 -32.8205 -0.2
endloop
endfacet
facet normal 0.983352 -0.181712 0
outer loop
vertex 14.8056 -32.2631 0
- vertex 14.9098 -31.6993 -0.1
+ vertex 14.9098 -31.6993 -0.2
vertex 14.9098 -31.6993 0
endloop
endfacet
facet normal 0.983352 -0.181712 0
outer loop
- vertex 14.9098 -31.6993 -0.1
+ vertex 14.9098 -31.6993 -0.2
vertex 14.8056 -32.2631 0
- vertex 14.8056 -32.2631 -0.1
+ vertex 14.8056 -32.2631 -0.2
endloop
endfacet
facet normal 0.973979 -0.226639 0
outer loop
vertex 14.9098 -31.6993 0
- vertex 15.0423 -31.1299 -0.1
+ vertex 15.0423 -31.1299 -0.2
vertex 15.0423 -31.1299 0
endloop
endfacet
facet normal 0.973979 -0.226639 0
outer loop
- vertex 15.0423 -31.1299 -0.1
+ vertex 15.0423 -31.1299 -0.2
vertex 14.9098 -31.6993 0
- vertex 14.9098 -31.6993 -0.1
+ vertex 14.9098 -31.6993 -0.2
endloop
endfacet
facet normal 0.963072 -0.269246 0
outer loop
vertex 15.0423 -31.1299 0
- vertex 15.2028 -30.5555 -0.1
+ vertex 15.2028 -30.5555 -0.2
vertex 15.2028 -30.5555 0
endloop
endfacet
facet normal 0.963072 -0.269246 0
outer loop
- vertex 15.2028 -30.5555 -0.1
+ vertex 15.2028 -30.5555 -0.2
vertex 15.0423 -31.1299 0
- vertex 15.0423 -31.1299 -0.1
+ vertex 15.0423 -31.1299 -0.2
endloop
endfacet
facet normal 0.950861 -0.309619 0
outer loop
vertex 15.2028 -30.5555 0
- vertex 15.3912 -29.9771 -0.1
+ vertex 15.3912 -29.9771 -0.2
vertex 15.3912 -29.9771 0
endloop
endfacet
facet normal 0.950861 -0.309619 0
outer loop
- vertex 15.3912 -29.9771 -0.1
+ vertex 15.3912 -29.9771 -0.2
vertex 15.2028 -30.5555 0
- vertex 15.2028 -30.5555 -0.1
+ vertex 15.2028 -30.5555 -0.2
endloop
endfacet
facet normal 0.93754 -0.347877 0
outer loop
vertex 15.3912 -29.9771 0
- vertex 15.6071 -29.3953 -0.1
+ vertex 15.6071 -29.3953 -0.2
vertex 15.6071 -29.3953 0
endloop
endfacet
facet normal 0.93754 -0.347877 0
outer loop
- vertex 15.6071 -29.3953 -0.1
+ vertex 15.6071 -29.3953 -0.2
vertex 15.3912 -29.9771 0
- vertex 15.3912 -29.9771 -0.1
+ vertex 15.3912 -29.9771 -0.2
endloop
endfacet
facet normal 0.92328 -0.384128 0
outer loop
vertex 15.6071 -29.3953 0
- vertex 15.8502 -28.8109 -0.1
+ vertex 15.8502 -28.8109 -0.2
vertex 15.8502 -28.8109 0
endloop
endfacet
facet normal 0.92328 -0.384128 0
outer loop
- vertex 15.8502 -28.8109 -0.1
+ vertex 15.8502 -28.8109 -0.2
vertex 15.6071 -29.3953 0
- vertex 15.6071 -29.3953 -0.1
+ vertex 15.6071 -29.3953 -0.2
endloop
endfacet
facet normal 0.908217 -0.418499 0
outer loop
vertex 15.8502 -28.8109 0
- vertex 16.1203 -28.2246 -0.1
+ vertex 16.1203 -28.2246 -0.2
vertex 16.1203 -28.2246 0
endloop
endfacet
facet normal 0.908217 -0.418499 0
outer loop
- vertex 16.1203 -28.2246 -0.1
+ vertex 16.1203 -28.2246 -0.2
vertex 15.8502 -28.8109 0
- vertex 15.8502 -28.8109 -0.1
+ vertex 15.8502 -28.8109 -0.2
endloop
endfacet
facet normal 0.892471 -0.451106 0
outer loop
vertex 16.1203 -28.2246 0
- vertex 16.4172 -27.6373 -0.1
+ vertex 16.4172 -27.6373 -0.2
vertex 16.4172 -27.6373 0
endloop
endfacet
facet normal 0.892471 -0.451106 0
outer loop
- vertex 16.4172 -27.6373 -0.1
+ vertex 16.4172 -27.6373 -0.2
vertex 16.1203 -28.2246 0
- vertex 16.1203 -28.2246 -0.1
+ vertex 16.1203 -28.2246 -0.2
endloop
endfacet
facet normal 0.876136 -0.482063 0
outer loop
vertex 16.4172 -27.6373 0
- vertex 16.7406 -27.0496 -0.1
+ vertex 16.7406 -27.0496 -0.2
vertex 16.7406 -27.0496 0
endloop
endfacet
facet normal 0.876136 -0.482063 0
outer loop
- vertex 16.7406 -27.0496 -0.1
+ vertex 16.7406 -27.0496 -0.2
vertex 16.4172 -27.6373 0
- vertex 16.4172 -27.6373 -0.1
+ vertex 16.4172 -27.6373 -0.2
endloop
endfacet
facet normal 0.85929 -0.511489 0
outer loop
vertex 16.7406 -27.0496 0
- vertex 17.0901 -26.4624 -0.1
+ vertex 17.0901 -26.4624 -0.2
vertex 17.0901 -26.4624 0
endloop
endfacet
facet normal 0.85929 -0.511489 0
outer loop
- vertex 17.0901 -26.4624 -0.1
+ vertex 17.0901 -26.4624 -0.2
vertex 16.7406 -27.0496 0
- vertex 16.7406 -27.0496 -0.1
+ vertex 16.7406 -27.0496 -0.2
endloop
endfacet
facet normal 0.841993 -0.539488 0
outer loop
vertex 17.0901 -26.4624 0
- vertex 17.4656 -25.8764 -0.1
+ vertex 17.4656 -25.8764 -0.2
vertex 17.4656 -25.8764 0
endloop
endfacet
facet normal 0.841993 -0.539488 0
outer loop
- vertex 17.4656 -25.8764 -0.1
+ vertex 17.4656 -25.8764 -0.2
vertex 17.0901 -26.4624 0
- vertex 17.0901 -26.4624 -0.1
+ vertex 17.0901 -26.4624 -0.2
endloop
endfacet
facet normal 0.8243 -0.566153 0
outer loop
vertex 17.4656 -25.8764 0
- vertex 17.8667 -25.2923 -0.1
+ vertex 17.8667 -25.2923 -0.2
vertex 17.8667 -25.2923 0
endloop
endfacet
facet normal 0.8243 -0.566153 0
outer loop
- vertex 17.8667 -25.2923 -0.1
+ vertex 17.8667 -25.2923 -0.2
vertex 17.4656 -25.8764 0
- vertex 17.4656 -25.8764 -0.1
+ vertex 17.4656 -25.8764 -0.2
endloop
endfacet
facet normal 0.801921 -0.59743 0
outer loop
vertex 17.8667 -25.2923 0
- vertex 18.4501 -24.5093 -0.1
+ vertex 18.4501 -24.5093 -0.2
vertex 18.4501 -24.5093 0
endloop
endfacet
facet normal 0.801921 -0.59743 0
outer loop
- vertex 18.4501 -24.5093 -0.1
+ vertex 18.4501 -24.5093 -0.2
vertex 17.8667 -25.2923 0
- vertex 17.8667 -25.2923 -0.1
+ vertex 17.8667 -25.2923 -0.2
endloop
endfacet
facet normal 0.772213 -0.635364 0
outer loop
vertex 18.4501 -24.5093 0
- vertex 19.0503 -23.7798 -0.1
+ vertex 19.0503 -23.7798 -0.2
vertex 19.0503 -23.7798 0
endloop
endfacet
facet normal 0.772213 -0.635364 0
outer loop
- vertex 19.0503 -23.7798 -0.1
+ vertex 19.0503 -23.7798 -0.2
vertex 18.4501 -24.5093 0
- vertex 18.4501 -24.5093 -0.1
+ vertex 18.4501 -24.5093 -0.2
endloop
endfacet
facet normal 0.738434 -0.674325 0
outer loop
vertex 19.0503 -23.7798 0
- vertex 19.6689 -23.1024 -0.1
+ vertex 19.6689 -23.1024 -0.2
vertex 19.6689 -23.1024 0
endloop
endfacet
facet normal 0.738434 -0.674325 0
outer loop
- vertex 19.6689 -23.1024 -0.1
+ vertex 19.6689 -23.1024 -0.2
vertex 19.0503 -23.7798 0
- vertex 19.0503 -23.7798 -0.1
+ vertex 19.0503 -23.7798 -0.2
endloop
endfacet
facet normal 0.700496 -0.713656 0
outer loop
- vertex 19.6689 -23.1024 -0.1
+ vertex 19.6689 -23.1024 -0.2
vertex 20.3071 -22.4759 0
vertex 19.6689 -23.1024 0
endloop
@@ -8185,13 +8185,13 @@ solid OpenSCAD_Model
facet normal 0.700496 -0.713656 0
outer loop
vertex 20.3071 -22.4759 0
- vertex 19.6689 -23.1024 -0.1
- vertex 20.3071 -22.4759 -0.1
+ vertex 19.6689 -23.1024 -0.2
+ vertex 20.3071 -22.4759 -0.2
endloop
endfacet
facet normal 0.658485 -0.752594 0
outer loop
- vertex 20.3071 -22.4759 -0.1
+ vertex 20.3071 -22.4759 -0.2
vertex 20.9665 -21.899 0
vertex 20.3071 -22.4759 0
endloop
@@ -8199,13 +8199,13 @@ solid OpenSCAD_Model
facet normal 0.658485 -0.752594 0
outer loop
vertex 20.9665 -21.899 0
- vertex 20.3071 -22.4759 -0.1
- vertex 20.9665 -21.899 -0.1
+ vertex 20.3071 -22.4759 -0.2
+ vertex 20.9665 -21.899 -0.2
endloop
endfacet
facet normal 0.612713 -0.790306 0
outer loop
- vertex 20.9665 -21.899 -0.1
+ vertex 20.9665 -21.899 -0.2
vertex 21.6485 -21.3703 0
vertex 20.9665 -21.899 0
endloop
@@ -8213,13 +8213,13 @@ solid OpenSCAD_Model
facet normal 0.612713 -0.790306 0
outer loop
vertex 21.6485 -21.3703 0
- vertex 20.9665 -21.899 -0.1
- vertex 21.6485 -21.3703 -0.1
+ vertex 20.9665 -21.899 -0.2
+ vertex 21.6485 -21.3703 -0.2
endloop
endfacet
facet normal 0.563707 -0.825975 0
outer loop
- vertex 21.6485 -21.3703 -0.1
+ vertex 21.6485 -21.3703 -0.2
vertex 22.3543 -20.8886 0
vertex 21.6485 -21.3703 0
endloop
@@ -8227,13 +8227,13 @@ solid OpenSCAD_Model
facet normal 0.563707 -0.825975 0
outer loop
vertex 22.3543 -20.8886 0
- vertex 21.6485 -21.3703 -0.1
- vertex 22.3543 -20.8886 -0.1
+ vertex 21.6485 -21.3703 -0.2
+ vertex 22.3543 -20.8886 -0.2
endloop
endfacet
facet normal 0.512208 -0.858861 0
outer loop
- vertex 22.3543 -20.8886 -0.1
+ vertex 22.3543 -20.8886 -0.2
vertex 23.0854 -20.4525 0
vertex 22.3543 -20.8886 0
endloop
@@ -8241,13 +8241,13 @@ solid OpenSCAD_Model
facet normal 0.512208 -0.858861 0
outer loop
vertex 23.0854 -20.4525 0
- vertex 22.3543 -20.8886 -0.1
- vertex 23.0854 -20.4525 -0.1
+ vertex 22.3543 -20.8886 -0.2
+ vertex 23.0854 -20.4525 -0.2
endloop
endfacet
facet normal 0.471781 -0.881716 0
outer loop
- vertex 23.0854 -20.4525 -0.1
+ vertex 23.0854 -20.4525 -0.2
vertex 23.7493 -20.0973 0
vertex 23.0854 -20.4525 0
endloop
@@ -8255,13 +8255,13 @@ solid OpenSCAD_Model
facet normal 0.471781 -0.881716 0
outer loop
vertex 23.7493 -20.0973 0
- vertex 23.0854 -20.4525 -0.1
- vertex 23.7493 -20.0973 -0.1
+ vertex 23.0854 -20.4525 -0.2
+ vertex 23.7493 -20.0973 -0.2
endloop
endfacet
facet normal 0.433016 -0.901386 0
outer loop
- vertex 23.7493 -20.0973 -0.1
+ vertex 23.7493 -20.0973 -0.2
vertex 24.3497 -19.8089 0
vertex 23.7493 -20.0973 0
endloop
@@ -8269,13 +8269,13 @@ solid OpenSCAD_Model
facet normal 0.433016 -0.901386 0
outer loop
vertex 24.3497 -19.8089 0
- vertex 23.7493 -20.0973 -0.1
- vertex 24.3497 -19.8089 -0.1
+ vertex 23.7493 -20.0973 -0.2
+ vertex 24.3497 -19.8089 -0.2
endloop
endfacet
facet normal 0.377334 -0.926077 0
outer loop
- vertex 24.3497 -19.8089 -0.1
+ vertex 24.3497 -19.8089 -0.2
vertex 24.9086 -19.5812 0
vertex 24.3497 -19.8089 0
endloop
@@ -8283,13 +8283,13 @@ solid OpenSCAD_Model
facet normal 0.377334 -0.926077 0
outer loop
vertex 24.9086 -19.5812 0
- vertex 24.3497 -19.8089 -0.1
- vertex 24.9086 -19.5812 -0.1
+ vertex 24.3497 -19.8089 -0.2
+ vertex 24.9086 -19.5812 -0.2
endloop
endfacet
facet normal 0.305529 -0.952183 0
outer loop
- vertex 24.9086 -19.5812 -0.1
+ vertex 24.9086 -19.5812 -0.2
vertex 25.4477 -19.4082 0
vertex 24.9086 -19.5812 0
endloop
@@ -8297,13 +8297,13 @@ solid OpenSCAD_Model
facet normal 0.305529 -0.952183 0
outer loop
vertex 25.4477 -19.4082 0
- vertex 24.9086 -19.5812 -0.1
- vertex 25.4477 -19.4082 -0.1
+ vertex 24.9086 -19.5812 -0.2
+ vertex 25.4477 -19.4082 -0.2
endloop
endfacet
facet normal 0.223751 -0.974646 0
outer loop
- vertex 25.4477 -19.4082 -0.1
+ vertex 25.4477 -19.4082 -0.2
vertex 25.9886 -19.284 0
vertex 25.4477 -19.4082 0
endloop
@@ -8311,13 +8311,13 @@ solid OpenSCAD_Model
facet normal 0.223751 -0.974646 0
outer loop
vertex 25.9886 -19.284 0
- vertex 25.4477 -19.4082 -0.1
- vertex 25.9886 -19.284 -0.1
+ vertex 25.4477 -19.4082 -0.2
+ vertex 25.9886 -19.284 -0.2
endloop
endfacet
facet normal 0.142672 -0.98977 0
outer loop
- vertex 25.9886 -19.284 -0.1
+ vertex 25.9886 -19.284 -0.2
vertex 26.5531 -19.2026 0
vertex 25.9886 -19.284 0
endloop
@@ -8325,13 +8325,13 @@ solid OpenSCAD_Model
facet normal 0.142672 -0.98977 0
outer loop
vertex 26.5531 -19.2026 0
- vertex 25.9886 -19.284 -0.1
- vertex 26.5531 -19.2026 -0.1
+ vertex 25.9886 -19.284 -0.2
+ vertex 26.5531 -19.2026 -0.2
endloop
endfacet
facet normal 0.072849 -0.997343 0
outer loop
- vertex 26.5531 -19.2026 -0.1
+ vertex 26.5531 -19.2026 -0.2
vertex 27.1629 -19.1581 0
vertex 26.5531 -19.2026 0
endloop
@@ -8339,13 +8339,13 @@ solid OpenSCAD_Model
facet normal 0.072849 -0.997343 0
outer loop
vertex 27.1629 -19.1581 0
- vertex 26.5531 -19.2026 -0.1
- vertex 27.1629 -19.1581 -0.1
+ vertex 26.5531 -19.2026 -0.2
+ vertex 27.1629 -19.1581 -0.2
endloop
endfacet
facet normal 0.0202302 -0.999795 0
outer loop
- vertex 27.1629 -19.1581 -0.1
+ vertex 27.1629 -19.1581 -0.2
vertex 27.8398 -19.1444 0
vertex 27.1629 -19.1581 0
endloop
@@ -8353,13 +8353,13 @@ solid OpenSCAD_Model
facet normal 0.0202302 -0.999795 0
outer loop
vertex 27.8398 -19.1444 0
- vertex 27.1629 -19.1581 -0.1
- vertex 27.8398 -19.1444 -0.1
+ vertex 27.1629 -19.1581 -0.2
+ vertex 27.8398 -19.1444 -0.2
endloop
endfacet
facet normal -0.0344796 -0.999405 0
outer loop
- vertex 27.8398 -19.1444 -0.1
+ vertex 27.8398 -19.1444 -0.2
vertex 28.4483 -19.1654 0
vertex 27.8398 -19.1444 0
endloop
@@ -8367,13 +8367,13 @@ solid OpenSCAD_Model
facet normal -0.0344796 -0.999405 -0
outer loop
vertex 28.4483 -19.1654 0
- vertex 27.8398 -19.1444 -0.1
- vertex 28.4483 -19.1654 -0.1
+ vertex 27.8398 -19.1444 -0.2
+ vertex 28.4483 -19.1654 -0.2
endloop
endfacet
facet normal -0.149538 0.988756 0
outer loop
- vertex 25.51 -21.8307 -0.1
+ vertex 25.51 -21.8307 -0.2
vertex 25.181 -21.8805 0
vertex 25.51 -21.8307 0
endloop
@@ -8381,13 +8381,13 @@ solid OpenSCAD_Model
facet normal -0.149538 0.988756 0
outer loop
vertex 25.181 -21.8805 0
- vertex 25.51 -21.8307 -0.1
- vertex 25.181 -21.8805 -0.1
+ vertex 25.51 -21.8307 -0.2
+ vertex 25.181 -21.8805 -0.2
endloop
endfacet
facet normal -0.215553 0.976492 0
outer loop
- vertex 25.181 -21.8805 -0.1
+ vertex 25.181 -21.8805 -0.2
vertex 24.827 -21.9586 0
vertex 25.181 -21.8805 0
endloop
@@ -8395,13 +8395,13 @@ solid OpenSCAD_Model
facet normal -0.215553 0.976492 0
outer loop
vertex 24.827 -21.9586 0
- vertex 25.181 -21.8805 -0.1
- vertex 24.827 -21.9586 -0.1
+ vertex 25.181 -21.8805 -0.2
+ vertex 24.827 -21.9586 -0.2
endloop
endfacet
facet normal -0.27228 0.962218 0
outer loop
- vertex 24.827 -21.9586 -0.1
+ vertex 24.827 -21.9586 -0.2
vertex 24.5319 -22.0421 0
vertex 24.827 -21.9586 0
endloop
@@ -8409,13 +8409,13 @@ solid OpenSCAD_Model
facet normal -0.27228 0.962218 0
outer loop
vertex 24.5319 -22.0421 0
- vertex 24.827 -21.9586 -0.1
- vertex 24.5319 -22.0421 -0.1
+ vertex 24.827 -21.9586 -0.2
+ vertex 24.5319 -22.0421 -0.2
endloop
endfacet
facet normal -0.339982 0.940432 0
outer loop
- vertex 24.5319 -22.0421 -0.1
+ vertex 24.5319 -22.0421 -0.2
vertex 24.2621 -22.1397 0
vertex 24.5319 -22.0421 0
endloop
@@ -8423,13 +8423,13 @@ solid OpenSCAD_Model
facet normal -0.339982 0.940432 0
outer loop
vertex 24.2621 -22.1397 0
- vertex 24.5319 -22.0421 -0.1
- vertex 24.2621 -22.1397 -0.1
+ vertex 24.5319 -22.0421 -0.2
+ vertex 24.2621 -22.1397 -0.2
endloop
endfacet
facet normal -0.419841 0.907598 0
outer loop
- vertex 24.2621 -22.1397 -0.1
+ vertex 24.2621 -22.1397 -0.2
vertex 24.0091 -22.2567 0
vertex 24.2621 -22.1397 0
endloop
@@ -8437,13 +8437,13 @@ solid OpenSCAD_Model
facet normal -0.419841 0.907598 0
outer loop
vertex 24.0091 -22.2567 0
- vertex 24.2621 -22.1397 -0.1
- vertex 24.0091 -22.2567 -0.1
+ vertex 24.2621 -22.1397 -0.2
+ vertex 24.0091 -22.2567 -0.2
endloop
endfacet
facet normal -0.501876 0.864939 0
outer loop
- vertex 24.0091 -22.2567 -0.1
+ vertex 24.0091 -22.2567 -0.2
vertex 23.7644 -22.3987 0
vertex 24.0091 -22.2567 0
endloop
@@ -8451,13 +8451,13 @@ solid OpenSCAD_Model
facet normal -0.501876 0.864939 0
outer loop
vertex 23.7644 -22.3987 0
- vertex 24.0091 -22.2567 -0.1
- vertex 23.7644 -22.3987 -0.1
+ vertex 24.0091 -22.2567 -0.2
+ vertex 23.7644 -22.3987 -0.2
endloop
endfacet
facet normal -0.575619 0.817718 0
outer loop
- vertex 23.7644 -22.3987 -0.1
+ vertex 23.7644 -22.3987 -0.2
vertex 23.5194 -22.5712 0
vertex 23.7644 -22.3987 0
endloop
@@ -8465,13 +8465,13 @@ solid OpenSCAD_Model
facet normal -0.575619 0.817718 0
outer loop
vertex 23.5194 -22.5712 0
- vertex 23.7644 -22.3987 -0.1
- vertex 23.5194 -22.5712 -0.1
+ vertex 23.7644 -22.3987 -0.2
+ vertex 23.5194 -22.5712 -0.2
endloop
endfacet
facet normal -0.634613 0.77283 0
outer loop
- vertex 23.5194 -22.5712 -0.1
+ vertex 23.5194 -22.5712 -0.2
vertex 23.2657 -22.7795 0
vertex 23.5194 -22.5712 0
endloop
@@ -8479,13 +8479,13 @@ solid OpenSCAD_Model
facet normal -0.634613 0.77283 0
outer loop
vertex 23.2657 -22.7795 0
- vertex 23.5194 -22.5712 -0.1
- vertex 23.2657 -22.7795 -0.1
+ vertex 23.5194 -22.5712 -0.2
+ vertex 23.2657 -22.7795 -0.2
endloop
endfacet
facet normal -0.693326 0.720624 0
outer loop
- vertex 23.2657 -22.7795 -0.1
+ vertex 23.2657 -22.7795 -0.2
vertex 22.6979 -23.3258 0
vertex 23.2657 -22.7795 0
endloop
@@ -8493,83 +8493,83 @@ solid OpenSCAD_Model
facet normal -0.693326 0.720624 0
outer loop
vertex 22.6979 -23.3258 0
- vertex 23.2657 -22.7795 -0.1
- vertex 22.6979 -23.3258 -0.1
+ vertex 23.2657 -22.7795 -0.2
+ vertex 22.6979 -23.3258 -0.2
endloop
endfacet
facet normal -0.729687 0.683781 0
outer loop
- vertex 22.2832 -23.7683 -0.1
+ vertex 22.2832 -23.7683 -0.2
vertex 22.6979 -23.3258 0
- vertex 22.6979 -23.3258 -0.1
+ vertex 22.6979 -23.3258 -0.2
endloop
endfacet
facet normal -0.729687 0.683781 0
outer loop
vertex 22.6979 -23.3258 0
- vertex 22.2832 -23.7683 -0.1
+ vertex 22.2832 -23.7683 -0.2
vertex 22.2832 -23.7683 0
endloop
endfacet
facet normal -0.755777 0.65483 0
outer loop
- vertex 21.9437 -24.1601 -0.1
+ vertex 21.9437 -24.1601 -0.2
vertex 22.2832 -23.7683 0
- vertex 22.2832 -23.7683 -0.1
+ vertex 22.2832 -23.7683 -0.2
endloop
endfacet
facet normal -0.755777 0.65483 0
outer loop
vertex 22.2832 -23.7683 0
- vertex 21.9437 -24.1601 -0.1
+ vertex 21.9437 -24.1601 -0.2
vertex 21.9437 -24.1601 0
endloop
endfacet
facet normal -0.793147 0.60903 0
outer loop
- vertex 21.7143 -24.4589 -0.1
+ vertex 21.7143 -24.4589 -0.2
vertex 21.9437 -24.1601 0
- vertex 21.9437 -24.1601 -0.1
+ vertex 21.9437 -24.1601 -0.2
endloop
endfacet
facet normal -0.793147 0.60903 0
outer loop
vertex 21.9437 -24.1601 0
- vertex 21.7143 -24.4589 -0.1
+ vertex 21.7143 -24.4589 -0.2
vertex 21.7143 -24.4589 0
endloop
endfacet
facet normal -0.850912 0.525308 0
outer loop
- vertex 21.6518 -24.5601 -0.1
+ vertex 21.6518 -24.5601 -0.2
vertex 21.7143 -24.4589 0
- vertex 21.7143 -24.4589 -0.1
+ vertex 21.7143 -24.4589 -0.2
endloop
endfacet
facet normal -0.850912 0.525308 0
outer loop
vertex 21.7143 -24.4589 0
- vertex 21.6518 -24.5601 -0.1
+ vertex 21.6518 -24.5601 -0.2
vertex 21.6518 -24.5601 0
endloop
endfacet
facet normal -0.943329 0.331858 0
outer loop
- vertex 21.63 -24.6221 -0.1
+ vertex 21.63 -24.6221 -0.2
vertex 21.6518 -24.5601 0
- vertex 21.6518 -24.5601 -0.1
+ vertex 21.6518 -24.5601 -0.2
endloop
endfacet
facet normal -0.943329 0.331858 0
outer loop
vertex 21.6518 -24.5601 0
- vertex 21.63 -24.6221 -0.1
+ vertex 21.63 -24.6221 -0.2
vertex 21.63 -24.6221 0
endloop
endfacet
facet normal -0.568017 -0.823017 0
outer loop
- vertex 21.63 -24.6221 -0.1
+ vertex 21.63 -24.6221 -0.2
vertex 21.6873 -24.6616 0
vertex 21.63 -24.6221 0
endloop
@@ -8577,13 +8577,13 @@ solid OpenSCAD_Model
facet normal -0.568017 -0.823017 -0
outer loop
vertex 21.6873 -24.6616 0
- vertex 21.63 -24.6221 -0.1
- vertex 21.6873 -24.6616 -0.1
+ vertex 21.63 -24.6221 -0.2
+ vertex 21.6873 -24.6616 -0.2
endloop
endfacet
facet normal -0.21919 -0.975682 0
outer loop
- vertex 21.6873 -24.6616 -0.1
+ vertex 21.6873 -24.6616 -0.2
vertex 21.8514 -24.6984 0
vertex 21.6873 -24.6616 0
endloop
@@ -8591,13 +8591,13 @@ solid OpenSCAD_Model
facet normal -0.21919 -0.975682 -0
outer loop
vertex 21.8514 -24.6984 0
- vertex 21.6873 -24.6616 -0.1
- vertex 21.8514 -24.6984 -0.1
+ vertex 21.6873 -24.6616 -0.2
+ vertex 21.8514 -24.6984 -0.2
endloop
endfacet
facet normal -0.103226 -0.994658 0
outer loop
- vertex 21.8514 -24.6984 -0.1
+ vertex 21.8514 -24.6984 -0.2
vertex 22.454 -24.761 0
vertex 21.8514 -24.6984 0
endloop
@@ -8605,13 +8605,13 @@ solid OpenSCAD_Model
facet normal -0.103226 -0.994658 -0
outer loop
vertex 22.454 -24.761 0
- vertex 21.8514 -24.6984 -0.1
- vertex 22.454 -24.761 -0.1
+ vertex 21.8514 -24.6984 -0.2
+ vertex 22.454 -24.761 -0.2
endloop
endfacet
facet normal -0.0473276 -0.998879 0
outer loop
- vertex 22.454 -24.761 -0.1
+ vertex 22.454 -24.761 -0.2
vertex 23.3459 -24.8032 0
vertex 22.454 -24.761 0
endloop
@@ -8619,13 +8619,13 @@ solid OpenSCAD_Model
facet normal -0.0473276 -0.998879 -0
outer loop
vertex 23.3459 -24.8032 0
- vertex 22.454 -24.761 -0.1
- vertex 23.3459 -24.8032 -0.1
+ vertex 22.454 -24.761 -0.2
+ vertex 23.3459 -24.8032 -0.2
endloop
endfacet
facet normal -0.0142485 -0.999898 0
outer loop
- vertex 23.3459 -24.8032 -0.1
+ vertex 23.3459 -24.8032 -0.2
vertex 24.435 -24.8188 0
vertex 23.3459 -24.8032 0
endloop
@@ -8633,13 +8633,13 @@ solid OpenSCAD_Model
facet normal -0.0142485 -0.999898 -0
outer loop
vertex 24.435 -24.8188 0
- vertex 23.3459 -24.8032 -0.1
- vertex 24.435 -24.8188 -0.1
+ vertex 23.3459 -24.8032 -0.2
+ vertex 24.435 -24.8188 -0.2
endloop
endfacet
facet normal 0 -1 0
outer loop
- vertex 24.435 -24.8188 -0.1
+ vertex 24.435 -24.8188 -0.2
vertex 27.2401 -24.8188 0
vertex 24.435 -24.8188 0
endloop
@@ -8647,125 +8647,125 @@ solid OpenSCAD_Model
facet normal 0 -1 -0
outer loop
vertex 27.2401 -24.8188 0
- vertex 24.435 -24.8188 -0.1
- vertex 27.2401 -24.8188 -0.1
+ vertex 24.435 -24.8188 -0.2
+ vertex 27.2401 -24.8188 -0.2
endloop
endfacet
facet normal 0.986418 -0.164252 0
outer loop
vertex 27.2401 -24.8188 0
- vertex 27.373 -24.0204 -0.1
+ vertex 27.373 -24.0204 -0.2
vertex 27.373 -24.0204 0
endloop
endfacet
facet normal 0.986418 -0.164252 0
outer loop
- vertex 27.373 -24.0204 -0.1
+ vertex 27.373 -24.0204 -0.2
vertex 27.2401 -24.8188 0
- vertex 27.2401 -24.8188 -0.1
+ vertex 27.2401 -24.8188 -0.2
endloop
endfacet
facet normal 0.99159 -0.129416 0
outer loop
vertex 27.373 -24.0204 0
- vertex 27.4161 -23.6904 -0.1
+ vertex 27.4161 -23.6904 -0.2
vertex 27.4161 -23.6904 0
endloop
endfacet
facet normal 0.99159 -0.129416 0
outer loop
- vertex 27.4161 -23.6904 -0.1
+ vertex 27.4161 -23.6904 -0.2
vertex 27.373 -24.0204 0
- vertex 27.373 -24.0204 -0.1
+ vertex 27.373 -24.0204 -0.2
endloop
endfacet
facet normal 0.998763 -0.0497285 0
outer loop
vertex 27.4161 -23.6904 0
- vertex 27.4312 -23.3865 -0.1
+ vertex 27.4312 -23.3865 -0.2
vertex 27.4312 -23.3865 0
endloop
endfacet
facet normal 0.998763 -0.0497285 0
outer loop
- vertex 27.4312 -23.3865 -0.1
+ vertex 27.4312 -23.3865 -0.2
vertex 27.4161 -23.6904 0
- vertex 27.4161 -23.6904 -0.1
+ vertex 27.4161 -23.6904 -0.2
endloop
endfacet
facet normal 0.998974 0.0452785 0
outer loop
vertex 27.4312 -23.3865 0
- vertex 27.4186 -23.1088 -0.1
+ vertex 27.4186 -23.1088 -0.2
vertex 27.4186 -23.1088 0
endloop
endfacet
facet normal 0.998974 0.0452785 0
outer loop
- vertex 27.4186 -23.1088 -0.1
+ vertex 27.4186 -23.1088 -0.2
vertex 27.4312 -23.3865 0
- vertex 27.4312 -23.3865 -0.1
+ vertex 27.4312 -23.3865 -0.2
endloop
endfacet
facet normal 0.987512 0.157546 0
outer loop
vertex 27.4186 -23.1088 0
- vertex 27.3785 -22.8574 -0.1
+ vertex 27.3785 -22.8574 -0.2
vertex 27.3785 -22.8574 0
endloop
endfacet
facet normal 0.987512 0.157546 0
outer loop
- vertex 27.3785 -22.8574 -0.1
+ vertex 27.3785 -22.8574 -0.2
vertex 27.4186 -23.1088 0
- vertex 27.4186 -23.1088 -0.1
+ vertex 27.4186 -23.1088 -0.2
endloop
endfacet
facet normal 0.957877 0.287177 0
outer loop
vertex 27.3785 -22.8574 0
- vertex 27.3111 -22.6325 -0.1
+ vertex 27.3111 -22.6325 -0.2
vertex 27.3111 -22.6325 0
endloop
endfacet
facet normal 0.957877 0.287177 0
outer loop
- vertex 27.3111 -22.6325 -0.1
+ vertex 27.3111 -22.6325 -0.2
vertex 27.3785 -22.8574 0
- vertex 27.3785 -22.8574 -0.1
+ vertex 27.3785 -22.8574 -0.2
endloop
endfacet
facet normal 0.902589 0.430503 0
outer loop
vertex 27.3111 -22.6325 0
- vertex 27.2166 -22.4344 -0.1
+ vertex 27.2166 -22.4344 -0.2
vertex 27.2166 -22.4344 0
endloop
endfacet
facet normal 0.902589 0.430503 0
outer loop
- vertex 27.2166 -22.4344 -0.1
+ vertex 27.2166 -22.4344 -0.2
vertex 27.3111 -22.6325 0
- vertex 27.3111 -22.6325 -0.1
+ vertex 27.3111 -22.6325 -0.2
endloop
endfacet
facet normal 0.815851 0.578262 0
outer loop
vertex 27.2166 -22.4344 0
- vertex 27.0952 -22.2631 -0.1
+ vertex 27.0952 -22.2631 -0.2
vertex 27.0952 -22.2631 0
endloop
endfacet
facet normal 0.815851 0.578262 0
outer loop
- vertex 27.0952 -22.2631 -0.1
+ vertex 27.0952 -22.2631 -0.2
vertex 27.2166 -22.4344 0
- vertex 27.2166 -22.4344 -0.1
+ vertex 27.2166 -22.4344 -0.2
endloop
endfacet
facet normal 0.697754 0.716337 -0
outer loop
- vertex 27.0952 -22.2631 -0.1
+ vertex 27.0952 -22.2631 -0.2
vertex 26.9471 -22.1189 0
vertex 27.0952 -22.2631 0
endloop
@@ -8773,13 +8773,13 @@ solid OpenSCAD_Model
facet normal 0.697754 0.716337 0
outer loop
vertex 26.9471 -22.1189 0
- vertex 27.0952 -22.2631 -0.1
- vertex 26.9471 -22.1189 -0.1
+ vertex 27.0952 -22.2631 -0.2
+ vertex 26.9471 -22.1189 -0.2
endloop
endfacet
facet normal 0.556877 0.830595 -0
outer loop
- vertex 26.9471 -22.1189 -0.1
+ vertex 26.9471 -22.1189 -0.2
vertex 26.7726 -22.0019 0
vertex 26.9471 -22.1189 0
endloop
@@ -8787,13 +8787,13 @@ solid OpenSCAD_Model
facet normal 0.556877 0.830595 0
outer loop
vertex 26.7726 -22.0019 0
- vertex 26.9471 -22.1189 -0.1
- vertex 26.7726 -22.0019 -0.1
+ vertex 26.9471 -22.1189 -0.2
+ vertex 26.7726 -22.0019 -0.2
endloop
endfacet
facet normal 0.40766 0.913134 -0
outer loop
- vertex 26.7726 -22.0019 -0.1
+ vertex 26.7726 -22.0019 -0.2
vertex 26.5717 -21.9122 0
vertex 26.7726 -22.0019 0
endloop
@@ -8801,13 +8801,13 @@ solid OpenSCAD_Model
facet normal 0.40766 0.913134 0
outer loop
vertex 26.5717 -21.9122 0
- vertex 26.7726 -22.0019 -0.1
- vertex 26.5717 -21.9122 -0.1
+ vertex 26.7726 -22.0019 -0.2
+ vertex 26.5717 -21.9122 -0.2
endloop
endfacet
facet normal 0.264042 0.964511 -0
outer loop
- vertex 26.5717 -21.9122 -0.1
+ vertex 26.5717 -21.9122 -0.2
vertex 26.3449 -21.8501 0
vertex 26.5717 -21.9122 0
endloop
@@ -8815,13 +8815,13 @@ solid OpenSCAD_Model
facet normal 0.264042 0.964511 0
outer loop
vertex 26.3449 -21.8501 0
- vertex 26.5717 -21.9122 -0.1
- vertex 26.3449 -21.8501 -0.1
+ vertex 26.5717 -21.9122 -0.2
+ vertex 26.3449 -21.8501 -0.2
endloop
endfacet
facet normal 0.134852 0.990866 -0
outer loop
- vertex 26.3449 -21.8501 -0.1
+ vertex 26.3449 -21.8501 -0.2
vertex 26.0922 -21.8157 0
vertex 26.3449 -21.8501 0
endloop
@@ -8829,13 +8829,13 @@ solid OpenSCAD_Model
facet normal 0.134852 0.990866 0
outer loop
vertex 26.0922 -21.8157 0
- vertex 26.3449 -21.8501 -0.1
- vertex 26.0922 -21.8157 -0.1
+ vertex 26.3449 -21.8501 -0.2
+ vertex 26.0922 -21.8157 -0.2
endloop
endfacet
facet normal 0.0233803 0.999727 -0
outer loop
- vertex 26.0922 -21.8157 -0.1
+ vertex 26.0922 -21.8157 -0.2
vertex 25.8138 -21.8092 0
vertex 26.0922 -21.8157 0
endloop
@@ -8843,13 +8843,13 @@ solid OpenSCAD_Model
facet normal 0.0233803 0.999727 0
outer loop
vertex 25.8138 -21.8092 0
- vertex 26.0922 -21.8157 -0.1
- vertex 25.8138 -21.8092 -0.1
+ vertex 26.0922 -21.8157 -0.2
+ vertex 25.8138 -21.8092 -0.2
endloop
endfacet
facet normal -0.0707205 0.997496 0
outer loop
- vertex 25.8138 -21.8092 -0.1
+ vertex 25.8138 -21.8092 -0.2
vertex 25.51 -21.8307 0
vertex 25.8138 -21.8092 0
endloop
@@ -8857,1868 +8857,1868 @@ solid OpenSCAD_Model
facet normal -0.0707205 0.997496 0
outer loop
vertex 25.51 -21.8307 0
- vertex 25.8138 -21.8092 -0.1
- vertex 25.51 -21.8307 -0.1
+ vertex 25.8138 -21.8092 -0.2
+ vertex 25.51 -21.8307 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.0431 -18.7102 -0.1
- vertex -32.1476 -18.5412 -0.1
- vertex -36.5163 -17.3821 -0.1
+ vertex -37.0431 -18.7102 -0.2
+ vertex -32.1476 -18.5412 -0.2
+ vertex -36.5163 -17.3821 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.1476 -18.5412 -0.1
- vertex -37.0431 -18.7102 -0.1
- vertex -33.2902 -21.4299 -0.1
+ vertex -32.1476 -18.5412 -0.2
+ vertex -37.0431 -18.7102 -0.2
+ vertex -33.2902 -21.4299 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.2902 -21.4299 -0.1
- vertex -37.0431 -18.7102 -0.1
- vertex -33.4325 -21.7956 -0.1
+ vertex -33.2902 -21.4299 -0.2
+ vertex -37.0431 -18.7102 -0.2
+ vertex -33.4325 -21.7956 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.3469 -21.8682 -0.1
- vertex -33.4325 -21.7956 -0.1
- vertex -37.0431 -18.7102 -0.1
+ vertex -38.3469 -21.8682 -0.2
+ vertex -33.4325 -21.7956 -0.2
+ vertex -37.0431 -18.7102 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.4325 -21.7956 -0.1
- vertex -38.3469 -21.8682 -0.1
- vertex -33.503 -22.0719 -0.1
+ vertex -33.4325 -21.7956 -0.2
+ vertex -38.3469 -21.8682 -0.2
+ vertex -33.503 -22.0719 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.503 -22.0719 -0.1
- vertex -38.3469 -21.8682 -0.1
- vertex -34.9509 -25.4747 -0.1
+ vertex -33.503 -22.0719 -0.2
+ vertex -38.3469 -21.8682 -0.2
+ vertex -34.9509 -25.4747 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -39.8955 -25.4747 -0.1
- vertex -34.9509 -25.4747 -0.1
- vertex -38.3469 -21.8682 -0.1
+ vertex -39.8955 -25.4747 -0.2
+ vertex -34.9509 -25.4747 -0.2
+ vertex -38.3469 -21.8682 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.9509 -25.4747 -0.1
- vertex -39.8955 -25.4747 -0.1
- vertex -35.4707 -26.6225 -0.1
+ vertex -34.9509 -25.4747 -0.2
+ vertex -39.8955 -25.4747 -0.2
+ vertex -35.4707 -26.6225 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.4707 -26.6225 -0.1
- vertex -39.8955 -25.4747 -0.1
- vertex -36.4516 -28.8697 -0.1
+ vertex -35.4707 -26.6225 -0.2
+ vertex -39.8955 -25.4747 -0.2
+ vertex -36.4516 -28.8697 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -41.2695 -28.6585 -0.1
- vertex -36.4516 -28.8697 -0.1
- vertex -39.8955 -25.4747 -0.1
+ vertex -41.2695 -28.6585 -0.2
+ vertex -36.4516 -28.8697 -0.2
+ vertex -39.8955 -25.4747 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.4516 -28.8697 -0.1
- vertex -41.2695 -28.6585 -0.1
- vertex -37.5165 -31.4193 -0.1
+ vertex -36.4516 -28.8697 -0.2
+ vertex -41.2695 -28.6585 -0.2
+ vertex -37.5165 -31.4193 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -42.2252 -30.9405 -0.1
- vertex -37.5165 -31.4193 -0.1
- vertex -41.2695 -28.6585 -0.1
+ vertex -42.2252 -30.9405 -0.2
+ vertex -37.5165 -31.4193 -0.2
+ vertex -41.2695 -28.6585 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.5165 -31.4193 -0.1
- vertex -42.2252 -30.9405 -0.1
- vertex -38.3711 -33.5534 -0.1
+ vertex -37.5165 -31.4193 -0.2
+ vertex -42.2252 -30.9405 -0.2
+ vertex -38.3711 -33.5534 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4764 -11.5321 -0.1
- vertex -17.4002 -11.6639 -0.1
- vertex -17.4268 -11.5861 -0.1
+ vertex -17.4764 -11.5321 -0.2
+ vertex -17.4002 -11.6639 -0.2
+ vertex -17.4268 -11.5861 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4002 -11.6639 -0.1
- vertex -17.5514 -11.4978 -0.1
- vertex -17.3941 -11.77 -0.1
+ vertex -17.4002 -11.6639 -0.2
+ vertex -17.5514 -11.4978 -0.2
+ vertex -17.3941 -11.77 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4002 -11.6639 -0.1
- vertex -17.4764 -11.5321 -0.1
- vertex -17.5514 -11.4978 -0.1
+ vertex -17.4002 -11.6639 -0.2
+ vertex -17.4764 -11.5321 -0.2
+ vertex -17.5514 -11.4978 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7876 -11.4712 -0.1
- vertex -17.3941 -11.77 -0.1
- vertex -17.5514 -11.4978 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -17.3941 -11.77 -0.2
+ vertex -17.5514 -11.4978 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.3941 -11.77 -0.1
- vertex -17.7876 -11.4712 -0.1
- vertex -17.4339 -12.0833 -0.1
+ vertex -17.3941 -11.77 -0.2
+ vertex -17.7876 -11.4712 -0.2
+ vertex -17.4339 -12.0833 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4339 -12.0833 -0.1
- vertex -17.7876 -11.4712 -0.1
- vertex -17.5116 -12.3759 -0.1
+ vertex -17.4339 -12.0833 -0.2
+ vertex -17.7876 -11.4712 -0.2
+ vertex -17.5116 -12.3759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.5116 -12.3759 -0.1
- vertex -17.7876 -11.4712 -0.1
- vertex -17.6664 -12.8441 -0.1
+ vertex -17.5116 -12.3759 -0.2
+ vertex -17.7876 -11.4712 -0.2
+ vertex -17.6664 -12.8441 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.9412 -14.6683 -0.1
- vertex -17.6664 -12.8441 -0.1
- vertex -17.7876 -11.4712 -0.1
+ vertex -21.9412 -14.6683 -0.2
+ vertex -17.6664 -12.8441 -0.2
+ vertex -17.7876 -11.4712 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.6664 -12.8441 -0.1
- vertex -21.9412 -14.6683 -0.1
- vertex -18.1466 -14.1495 -0.1
+ vertex -17.6664 -12.8441 -0.2
+ vertex -21.9412 -14.6683 -0.2
+ vertex -18.1466 -14.1495 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex -21.6284 -15.0493 -0.1
- vertex -18.1466 -14.1495 -0.1
- vertex -21.6966 -14.8935 -0.1
+ vertex -21.6284 -15.0493 -0.2
+ vertex -18.1466 -14.1495 -0.2
+ vertex -21.6966 -14.8935 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -21.5879 -15.2616 -0.1
- vertex -18.7537 -15.6836 -0.1
- vertex -21.6284 -15.0493 -0.1
+ vertex -21.5879 -15.2616 -0.2
+ vertex -18.7537 -15.6836 -0.2
+ vertex -21.6284 -15.0493 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -21.5693 -15.5508 -0.1
- vertex -18.7537 -15.6836 -0.1
- vertex -21.5879 -15.2616 -0.1
+ vertex -21.5693 -15.5508 -0.2
+ vertex -18.7537 -15.6836 -0.2
+ vertex -21.5879 -15.2616 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.5729 -16.4428 -0.1
- vertex -19.3667 -17.1305 -0.1
- vertex -21.5693 -15.5508 -0.1
+ vertex -21.5729 -16.4428 -0.2
+ vertex -19.3667 -17.1305 -0.2
+ vertex -21.5693 -15.5508 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.3667 -17.1305 -0.1
- vertex -21.5729 -16.4428 -0.1
- vertex -19.4996 -17.3696 -0.1
+ vertex -19.3667 -17.1305 -0.2
+ vertex -21.5729 -16.4428 -0.2
+ vertex -19.4996 -17.3696 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.4996 -17.3696 -0.1
- vertex -21.5729 -16.4428 -0.1
- vertex -19.6713 -17.584 -0.1
+ vertex -19.4996 -17.3696 -0.2
+ vertex -21.5729 -16.4428 -0.2
+ vertex -19.6713 -17.584 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.5774 -17.3273 -0.1
- vertex -19.8743 -17.7693 -0.1
- vertex -21.5729 -16.4428 -0.1
+ vertex -21.5774 -17.3273 -0.2
+ vertex -19.8743 -17.7693 -0.2
+ vertex -21.5729 -16.4428 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.8743 -17.7693 -0.1
- vertex -21.5774 -17.3273 -0.1
- vertex -20.1009 -17.9213 -0.1
+ vertex -19.8743 -17.7693 -0.2
+ vertex -21.5774 -17.3273 -0.2
+ vertex -20.1009 -17.9213 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.1009 -17.9213 -0.1
- vertex -21.5774 -17.3273 -0.1
- vertex -20.3435 -18.0357 -0.1
+ vertex -20.1009 -17.9213 -0.2
+ vertex -21.5774 -17.3273 -0.2
+ vertex -20.3435 -18.0357 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.5945 -18.108 -0.1
- vertex -21.5774 -17.3273 -0.1
- vertex -20.8463 -18.1339 -0.1
+ vertex -20.5945 -18.108 -0.2
+ vertex -21.5774 -17.3273 -0.2
+ vertex -20.8463 -18.1339 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -21.5614 -17.6077 -0.1
- vertex -20.8463 -18.1339 -0.1
- vertex -21.5774 -17.3273 -0.1
+ vertex -21.5614 -17.6077 -0.2
+ vertex -20.8463 -18.1339 -0.2
+ vertex -21.5774 -17.3273 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.8463 -18.1339 -0.1
- vertex -21.5614 -17.6077 -0.1
- vertex -21.0912 -18.1093 -0.1
+ vertex -20.8463 -18.1339 -0.2
+ vertex -21.5614 -17.6077 -0.2
+ vertex -21.0912 -18.1093 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.0912 -18.1093 -0.1
- vertex -21.5614 -17.6077 -0.1
- vertex -21.2545 -18.0693 -0.1
+ vertex -21.0912 -18.1093 -0.2
+ vertex -21.5614 -17.6077 -0.2
+ vertex -21.2545 -18.0693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2545 -18.0693 -0.1
- vertex -21.5263 -17.8042 -0.1
- vertex -21.378 -18.0171 -0.1
+ vertex -21.2545 -18.0693 -0.2
+ vertex -21.5263 -17.8042 -0.2
+ vertex -21.378 -18.0171 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.3435 -18.0357 -0.1
- vertex -21.5774 -17.3273 -0.1
- vertex -20.5945 -18.108 -0.1
+ vertex -20.3435 -18.0357 -0.2
+ vertex -21.5774 -17.3273 -0.2
+ vertex -20.5945 -18.108 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.6713 -17.584 -0.1
- vertex -21.5729 -16.4428 -0.1
- vertex -19.8743 -17.7693 -0.1
+ vertex -19.6713 -17.584 -0.2
+ vertex -21.5729 -16.4428 -0.2
+ vertex -19.8743 -17.7693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.7537 -15.6836 -0.1
- vertex -21.5693 -15.5508 -0.1
- vertex -19.3667 -17.1305 -0.1
+ vertex -18.7537 -15.6836 -0.2
+ vertex -21.5693 -15.5508 -0.2
+ vertex -19.3667 -17.1305 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.1466 -14.1495 -0.1
- vertex -21.6284 -15.0493 -0.1
- vertex -18.7537 -15.6836 -0.1
+ vertex -18.1466 -14.1495 -0.2
+ vertex -21.6284 -15.0493 -0.2
+ vertex -18.7537 -15.6836 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.1466 -14.1495 -0.1
- vertex -21.7989 -14.7733 -0.1
- vertex -21.6966 -14.8935 -0.1
+ vertex -18.1466 -14.1495 -0.2
+ vertex -21.7989 -14.7733 -0.2
+ vertex -21.6966 -14.8935 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.1466 -14.1495 -0.1
- vertex -21.9412 -14.6683 -0.1
- vertex -21.7989 -14.7733 -0.1
+ vertex -18.1466 -14.1495 -0.2
+ vertex -21.9412 -14.6683 -0.2
+ vertex -21.7989 -14.7733 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7876 -11.4712 -0.1
- vertex -22.1296 -14.5577 -0.1
- vertex -21.9412 -14.6683 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -22.1296 -14.5577 -0.2
+ vertex -21.9412 -14.6683 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7876 -11.4712 -0.1
- vertex -22.3213 -14.4724 -0.1
- vertex -22.1296 -14.5577 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -22.3213 -14.4724 -0.2
+ vertex -22.1296 -14.5577 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7876 -11.4712 -0.1
- vertex -22.5778 -14.3998 -0.1
- vertex -22.3213 -14.4724 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -22.5778 -14.3998 -0.2
+ vertex -22.3213 -14.4724 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7876 -11.4712 -0.1
- vertex -22.9103 -14.3386 -0.1
- vertex -22.5778 -14.3998 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -22.9103 -14.3386 -0.2
+ vertex -22.5778 -14.3998 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7876 -11.4712 -0.1
- vertex -23.3301 -14.2877 -0.1
- vertex -22.9103 -14.3386 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -23.3301 -14.2877 -0.2
+ vertex -22.9103 -14.3386 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.175 -11.3523 -0.1
- vertex -23.3301 -14.2877 -0.1
- vertex -17.7876 -11.4712 -0.1
+ vertex -27.175 -11.3523 -0.2
+ vertex -23.3301 -14.2877 -0.2
+ vertex -17.7876 -11.4712 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.3301 -14.2877 -0.1
- vertex -27.175 -11.3523 -0.1
- vertex -24.4767 -14.2125 -0.1
+ vertex -23.3301 -14.2877 -0.2
+ vertex -27.175 -11.3523 -0.2
+ vertex -24.4767 -14.2125 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.4767 -14.2125 -0.1
- vertex -27.175 -11.3523 -0.1
- vertex -26.1077 -14.1654 -0.1
+ vertex -24.4767 -14.2125 -0.2
+ vertex -27.175 -11.3523 -0.2
+ vertex -26.1077 -14.1654 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.175 -11.3523 -0.1
- vertex -28.2448 -14.1442 -0.1
- vertex -26.1077 -14.1654 -0.1
+ vertex -27.175 -11.3523 -0.2
+ vertex -28.2448 -14.1442 -0.2
+ vertex -26.1077 -14.1654 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.175 -11.3523 -0.1
- vertex -28.9898 -14.1579 -0.1
- vertex -28.2448 -14.1442 -0.1
+ vertex -27.175 -11.3523 -0.2
+ vertex -28.9898 -14.1579 -0.2
+ vertex -28.2448 -14.1442 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.175 -11.3523 -0.1
- vertex -29.549 -14.1906 -0.1
- vertex -28.9898 -14.1579 -0.1
+ vertex -27.175 -11.3523 -0.2
+ vertex -29.549 -14.1906 -0.2
+ vertex -28.9898 -14.1579 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.0944 -11.3029 -0.1
- vertex -29.549 -14.1906 -0.1
- vertex -27.175 -11.3523 -0.1
+ vertex -32.0944 -11.3029 -0.2
+ vertex -29.549 -14.1906 -0.2
+ vertex -27.175 -11.3523 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.549 -14.1906 -0.1
- vertex -32.0944 -11.3029 -0.1
- vertex -29.9449 -14.2443 -0.1
+ vertex -29.549 -14.1906 -0.2
+ vertex -32.0944 -11.3029 -0.2
+ vertex -29.9449 -14.2443 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.9449 -14.2443 -0.1
- vertex -32.0944 -11.3029 -0.1
- vertex -30.1999 -14.321 -0.1
+ vertex -29.9449 -14.2443 -0.2
+ vertex -32.0944 -11.3029 -0.2
+ vertex -30.1999 -14.321 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3673 -14.4836 -0.1
- vertex -30.4158 -14.7057 -0.1
- vertex -30.377 -14.5514 -0.1
+ vertex -30.3673 -14.4836 -0.2
+ vertex -30.4158 -14.7057 -0.2
+ vertex -30.377 -14.5514 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3673 -14.4836 -0.1
- vertex -30.5215 -14.964 -0.1
- vertex -30.4158 -14.7057 -0.1
+ vertex -30.3673 -14.4836 -0.2
+ vertex -30.5215 -14.964 -0.2
+ vertex -30.4158 -14.7057 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.4754 -14.1281 -0.1
- vertex -30.5215 -14.964 -0.1
- vertex -30.3673 -14.4836 -0.1
+ vertex -35.4754 -14.1281 -0.2
+ vertex -30.5215 -14.964 -0.2
+ vertex -30.3673 -14.4836 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.5215 -14.964 -0.1
- vertex -35.4754 -14.1281 -0.1
- vertex -30.678 -15.2903 -0.1
+ vertex -30.5215 -14.964 -0.2
+ vertex -35.4754 -14.1281 -0.2
+ vertex -30.678 -15.2903 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.678 -15.2903 -0.1
- vertex -35.4754 -14.1281 -0.1
- vertex -30.8691 -15.6487 -0.1
+ vertex -30.678 -15.2903 -0.2
+ vertex -35.4754 -14.1281 -0.2
+ vertex -30.8691 -15.6487 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -35.5123 -14.4274 -0.1
- vertex -30.8691 -15.6487 -0.1
- vertex -35.4754 -14.1281 -0.1
+ vertex -35.5123 -14.4274 -0.2
+ vertex -30.8691 -15.6487 -0.2
+ vertex -35.4754 -14.1281 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.1999 -14.321 -0.1
- vertex -32.0944 -11.3029 -0.1
- vertex -30.2816 -14.3686 -0.1
+ vertex -30.1999 -14.321 -0.2
+ vertex -32.0944 -11.3029 -0.2
+ vertex -30.2816 -14.3686 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.0944 -11.3029 -0.1
- vertex -30.3364 -14.4227 -0.1
- vertex -30.2816 -14.3686 -0.1
+ vertex -32.0944 -11.3029 -0.2
+ vertex -30.3364 -14.4227 -0.2
+ vertex -30.2816 -14.3686 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.0944 -11.3029 -0.1
- vertex -30.3673 -14.4836 -0.1
- vertex -30.3364 -14.4227 -0.1
+ vertex -32.0944 -11.3029 -0.2
+ vertex -30.3673 -14.4836 -0.2
+ vertex -30.3364 -14.4227 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -35.4904 -13.894 -0.1
- vertex -30.3673 -14.4836 -0.1
- vertex -32.0944 -11.3029 -0.1
+ vertex -35.4904 -13.894 -0.2
+ vertex -30.3673 -14.4836 -0.2
+ vertex -32.0944 -11.3029 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.8691 -15.6487 -0.1
- vertex -35.5123 -14.4274 -0.1
- vertex -31.1223 -16.1487 -0.1
+ vertex -30.8691 -15.6487 -0.2
+ vertex -35.5123 -14.4274 -0.2
+ vertex -31.1223 -16.1487 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -35.5964 -14.799 -0.1
- vertex -31.1223 -16.1487 -0.1
- vertex -35.5123 -14.4274 -0.1
+ vertex -35.5964 -14.799 -0.2
+ vertex -31.1223 -16.1487 -0.2
+ vertex -35.5123 -14.4274 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.1223 -16.1487 -0.1
- vertex -35.5964 -14.799 -0.1
- vertex -31.4477 -16.8607 -0.1
+ vertex -31.1223 -16.1487 -0.2
+ vertex -35.5964 -14.799 -0.2
+ vertex -31.4477 -16.8607 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -35.7796 -15.3934 -0.1
- vertex -31.4477 -16.8607 -0.1
- vertex -35.5964 -14.799 -0.1
+ vertex -35.7796 -15.3934 -0.2
+ vertex -31.4477 -16.8607 -0.2
+ vertex -35.5964 -14.799 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.4477 -16.8607 -0.1
- vertex -35.7796 -15.3934 -0.1
- vertex -31.8034 -17.6899 -0.1
+ vertex -31.4477 -16.8607 -0.2
+ vertex -35.7796 -15.3934 -0.2
+ vertex -31.8034 -17.6899 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.4904 -13.894 -0.1
- vertex -32.0944 -11.3029 -0.1
- vertex -33.7011 -11.3017 -0.1
+ vertex -35.4904 -13.894 -0.2
+ vertex -32.0944 -11.3029 -0.2
+ vertex -33.7011 -11.3017 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -21.5263 -17.8042 -0.1
- vertex -21.2545 -18.0693 -0.1
- vertex -21.5614 -17.6077 -0.1
+ vertex -21.5263 -17.8042 -0.2
+ vertex -21.2545 -18.0693 -0.2
+ vertex -21.5614 -17.6077 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.378 -18.0171 -0.1
- vertex -21.5263 -17.8042 -0.1
- vertex -21.4669 -17.9347 -0.1
+ vertex -21.378 -18.0171 -0.2
+ vertex -21.5263 -17.8042 -0.2
+ vertex -21.4669 -17.9347 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -25.4624 -26.9141 -0.1
- vertex -27.8988 -26.2055 -0.1
- vertex -27.8924 -26.5154 -0.1
+ vertex -25.4624 -26.9141 -0.2
+ vertex -27.8988 -26.2055 -0.2
+ vertex -27.8924 -26.5154 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.2929 -22.2506 -0.1
- vertex -27.9236 -26.0946 -0.1
- vertex -27.8988 -26.2055 -0.1
+ vertex -27.2929 -22.2506 -0.2
+ vertex -27.9236 -26.0946 -0.2
+ vertex -27.8988 -26.2055 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.2929 -22.2506 -0.1
- vertex -27.9636 -26.0069 -0.1
- vertex -27.9236 -26.0946 -0.1
+ vertex -27.2929 -22.2506 -0.2
+ vertex -27.9636 -26.0069 -0.2
+ vertex -27.9236 -26.0946 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.2929 -22.2506 -0.1
- vertex -28.0195 -25.9379 -0.1
- vertex -27.9636 -26.0069 -0.1
+ vertex -27.2929 -22.2506 -0.2
+ vertex -28.0195 -25.9379 -0.2
+ vertex -27.9636 -26.0069 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.2929 -22.2506 -0.1
- vertex -28.0919 -25.8829 -0.1
- vertex -28.0195 -25.9379 -0.1
+ vertex -27.2929 -22.2506 -0.2
+ vertex -28.0919 -25.8829 -0.2
+ vertex -28.0195 -25.9379 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.2888 -25.7968 -0.1
- vertex -27.6923 -22.3658 -0.1
- vertex -28.1242 -22.4577 -0.1
+ vertex -28.2888 -25.7968 -0.2
+ vertex -27.6923 -22.3658 -0.2
+ vertex -28.1242 -22.4577 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.6923 -22.3658 -0.1
- vertex -28.2888 -25.7968 -0.1
- vertex -28.0919 -25.8829 -0.1
+ vertex -27.6923 -22.3658 -0.2
+ vertex -28.2888 -25.7968 -0.2
+ vertex -28.0919 -25.8829 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.1242 -22.4577 -0.1
- vertex -28.5596 -25.7117 -0.1
- vertex -28.2888 -25.7968 -0.1
+ vertex -28.1242 -22.4577 -0.2
+ vertex -28.5596 -25.7117 -0.2
+ vertex -28.2888 -25.7968 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -28.5914 -22.5277 -0.1
- vertex -28.5596 -25.7117 -0.1
- vertex -28.1242 -22.4577 -0.1
+ vertex -28.5914 -22.5277 -0.2
+ vertex -28.5596 -25.7117 -0.2
+ vertex -28.1242 -22.4577 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.5914 -22.5277 -0.1
- vertex -28.7678 -25.6646 -0.1
- vertex -28.5596 -25.7117 -0.1
+ vertex -28.5914 -22.5277 -0.2
+ vertex -28.7678 -25.6646 -0.2
+ vertex -28.5596 -25.7117 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.5914 -22.5277 -0.1
- vertex -29.0734 -25.6205 -0.1
- vertex -28.7678 -25.6646 -0.1
+ vertex -28.5914 -22.5277 -0.2
+ vertex -29.0734 -25.6205 -0.2
+ vertex -28.7678 -25.6646 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -29.0966 -22.5767 -0.1
- vertex -29.0734 -25.6205 -0.1
- vertex -28.5914 -22.5277 -0.1
+ vertex -29.0966 -22.5767 -0.2
+ vertex -29.0734 -25.6205 -0.2
+ vertex -28.5914 -22.5277 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -29.6427 -22.606 -0.1
- vertex -29.0734 -25.6205 -0.1
- vertex -29.0966 -22.5767 -0.1
+ vertex -29.6427 -22.606 -0.2
+ vertex -29.0734 -25.6205 -0.2
+ vertex -29.0966 -22.5767 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.6427 -22.606 -0.1
- vertex -29.9179 -25.5457 -0.1
- vertex -29.0734 -25.6205 -0.1
+ vertex -29.6427 -22.606 -0.2
+ vertex -29.9179 -25.5457 -0.2
+ vertex -29.0734 -25.6205 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -30.2322 -22.6168 -0.1
- vertex -29.9179 -25.5457 -0.1
- vertex -29.6427 -22.606 -0.1
+ vertex -30.2322 -22.6168 -0.2
+ vertex -29.9179 -25.5457 -0.2
+ vertex -29.6427 -22.606 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.9759 -25.4949 -0.1
- vertex -30.2322 -22.6168 -0.1
- vertex -30.868 -22.6102 -0.1
+ vertex -30.9759 -25.4949 -0.2
+ vertex -30.2322 -22.6168 -0.2
+ vertex -30.868 -22.6102 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.2322 -22.6168 -0.1
- vertex -30.9759 -25.4949 -0.1
- vertex -29.9179 -25.5457 -0.1
+ vertex -30.2322 -22.6168 -0.2
+ vertex -30.9759 -25.4949 -0.2
+ vertex -29.9179 -25.5457 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.8095 -22.5865 -0.1
- vertex -30.9759 -25.4949 -0.1
- vertex -30.868 -22.6102 -0.1
+ vertex -31.8095 -22.5865 -0.2
+ vertex -30.9759 -25.4949 -0.2
+ vertex -30.868 -22.6102 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.8095 -22.5865 -0.1
- vertex -32.1303 -25.4759 -0.1
- vertex -30.9759 -25.4949 -0.1
+ vertex -31.8095 -22.5865 -0.2
+ vertex -32.1303 -25.4759 -0.2
+ vertex -30.9759 -25.4949 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.5132 -22.5543 -0.1
- vertex -32.1303 -25.4759 -0.1
- vertex -31.8095 -22.5865 -0.1
+ vertex -32.5132 -22.5543 -0.2
+ vertex -32.1303 -25.4759 -0.2
+ vertex -31.8095 -22.5865 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.0067 -22.5002 -0.1
- vertex -32.1303 -25.4759 -0.1
- vertex -32.5132 -22.5543 -0.1
+ vertex -33.0067 -22.5002 -0.2
+ vertex -32.1303 -25.4759 -0.2
+ vertex -32.5132 -22.5543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.1833 -22.4608 -0.1
- vertex -32.1303 -25.4759 -0.1
- vertex -33.0067 -22.5002 -0.1
+ vertex -33.1833 -22.4608 -0.2
+ vertex -32.1303 -25.4759 -0.2
+ vertex -33.0067 -22.5002 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.9509 -25.4747 -0.1
- vertex -33.1833 -22.4608 -0.1
- vertex -33.3177 -22.4108 -0.1
+ vertex -34.9509 -25.4747 -0.2
+ vertex -33.1833 -22.4608 -0.2
+ vertex -33.3177 -22.4108 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.9509 -25.4747 -0.1
- vertex -33.3177 -22.4108 -0.1
- vertex -33.4135 -22.3486 -0.1
+ vertex -34.9509 -25.4747 -0.2
+ vertex -33.3177 -22.4108 -0.2
+ vertex -33.4135 -22.3486 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.9509 -25.4747 -0.1
- vertex -33.4135 -22.3486 -0.1
- vertex -33.4739 -22.2725 -0.1
+ vertex -34.9509 -25.4747 -0.2
+ vertex -33.4135 -22.3486 -0.2
+ vertex -33.4739 -22.2725 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -36.0907 -16.2655 -0.1
- vertex -31.8034 -17.6899 -0.1
- vertex -35.7796 -15.3934 -0.1
+ vertex -36.0907 -16.2655 -0.2
+ vertex -31.8034 -17.6899 -0.2
+ vertex -35.7796 -15.3934 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.5622 -13.718 -0.1
- vertex -33.7011 -11.3017 -0.1
- vertex -34.8583 -11.3197 -0.1
+ vertex -35.5622 -13.718 -0.2
+ vertex -33.7011 -11.3017 -0.2
+ vertex -34.8583 -11.3197 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.1833 -22.4608 -0.1
- vertex -34.9509 -25.4747 -0.1
- vertex -32.1303 -25.4759 -0.1
+ vertex -33.1833 -22.4608 -0.2
+ vertex -34.9509 -25.4747 -0.2
+ vertex -32.1303 -25.4759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.5026 -22.1809 -0.1
- vertex -34.9509 -25.4747 -0.1
- vertex -33.4739 -22.2725 -0.1
+ vertex -33.5026 -22.1809 -0.2
+ vertex -34.9509 -25.4747 -0.2
+ vertex -33.4739 -22.2725 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.8034 -17.6899 -0.1
- vertex -36.0907 -16.2655 -0.1
- vertex -32.1476 -18.5412 -0.1
+ vertex -31.8034 -17.6899 -0.2
+ vertex -36.0907 -16.2655 -0.2
+ vertex -32.1476 -18.5412 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.503 -22.0719 -0.1
- vertex -34.9509 -25.4747 -0.1
- vertex -33.5026 -22.1809 -0.1
+ vertex -33.503 -22.0719 -0.2
+ vertex -34.9509 -25.4747 -0.2
+ vertex -33.5026 -22.1809 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -36.5163 -17.3821 -0.1
- vertex -32.1476 -18.5412 -0.1
- vertex -36.0907 -16.2655 -0.1
+ vertex -36.5163 -17.3821 -0.2
+ vertex -32.1476 -18.5412 -0.2
+ vertex -36.0907 -16.2655 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3673 -14.4836 -0.1
- vertex -35.4904 -13.894 -0.1
- vertex -35.4754 -14.1281 -0.1
+ vertex -30.3673 -14.4836 -0.2
+ vertex -35.4904 -13.894 -0.2
+ vertex -35.4754 -14.1281 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.7011 -11.3017 -0.1
- vertex -35.5189 -13.7992 -0.1
- vertex -35.4904 -13.894 -0.1
+ vertex -33.7011 -11.3017 -0.2
+ vertex -35.5189 -13.7992 -0.2
+ vertex -35.4904 -13.894 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.7011 -11.3017 -0.1
- vertex -35.5622 -13.718 -0.1
- vertex -35.5189 -13.7992 -0.1
+ vertex -33.7011 -11.3017 -0.2
+ vertex -35.5622 -13.718 -0.2
+ vertex -35.5189 -13.7992 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.8583 -11.3197 -0.1
- vertex -35.6209 -13.6496 -0.1
- vertex -35.5622 -13.718 -0.1
+ vertex -34.8583 -11.3197 -0.2
+ vertex -35.6209 -13.6496 -0.2
+ vertex -35.5622 -13.718 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.6956 -13.593 -0.1
- vertex -34.8583 -11.3197 -0.1
- vertex -35.6555 -11.3595 -0.1
+ vertex -35.6956 -13.593 -0.2
+ vertex -34.8583 -11.3197 -0.2
+ vertex -35.6555 -11.3595 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.8583 -11.3197 -0.1
- vertex -35.6956 -13.593 -0.1
- vertex -35.6209 -13.6496 -0.1
+ vertex -34.8583 -11.3197 -0.2
+ vertex -35.6956 -13.593 -0.2
+ vertex -35.6209 -13.6496 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.6555 -11.3595 -0.1
- vertex -35.8956 -13.512 -0.1
- vertex -35.6956 -13.593 -0.1
+ vertex -35.6555 -11.3595 -0.2
+ vertex -35.8956 -13.512 -0.2
+ vertex -35.6956 -13.593 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -36.1819 -11.4238 -0.1
- vertex -35.8956 -13.512 -0.1
- vertex -35.6555 -11.3595 -0.1
+ vertex -36.1819 -11.4238 -0.2
+ vertex -35.8956 -13.512 -0.2
+ vertex -35.6555 -11.3595 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.8956 -13.512 -0.1
- vertex -36.1819 -11.4238 -0.1
- vertex -36.1669 -13.4677 -0.1
+ vertex -35.8956 -13.512 -0.2
+ vertex -36.1819 -11.4238 -0.2
+ vertex -36.1669 -13.4677 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -36.527 -11.5152 -0.1
- vertex -36.1669 -13.4677 -0.1
- vertex -36.1819 -11.4238 -0.1
+ vertex -36.527 -11.5152 -0.2
+ vertex -36.1669 -13.4677 -0.2
+ vertex -36.1819 -11.4238 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -36.7802 -11.6364 -0.1
- vertex -36.1669 -13.4677 -0.1
- vertex -36.527 -11.5152 -0.1
+ vertex -36.7802 -11.6364 -0.2
+ vertex -36.1669 -13.4677 -0.2
+ vertex -36.527 -11.5152 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.1669 -13.4677 -0.1
- vertex -36.7802 -11.6364 -0.1
- vertex -36.5145 -13.4531 -0.1
+ vertex -36.1669 -13.4677 -0.2
+ vertex -36.7802 -11.6364 -0.2
+ vertex -36.5145 -13.4531 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -36.9755 -11.7636 -0.1
- vertex -36.5145 -13.4531 -0.1
- vertex -36.7802 -11.6364 -0.1
+ vertex -36.9755 -11.7636 -0.2
+ vertex -36.5145 -13.4531 -0.2
+ vertex -36.7802 -11.6364 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -37.1409 -11.9004 -0.1
- vertex -36.5145 -13.4531 -0.1
- vertex -36.9755 -11.7636 -0.1
+ vertex -37.1409 -11.9004 -0.2
+ vertex -36.5145 -13.4531 -0.2
+ vertex -36.9755 -11.7636 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.5145 -13.4531 -0.1
- vertex -37.1409 -11.9004 -0.1
- vertex -36.7305 -13.4387 -0.1
+ vertex -36.5145 -13.4531 -0.2
+ vertex -37.1409 -11.9004 -0.2
+ vertex -36.7305 -13.4387 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -37.2767 -12.0443 -0.1
- vertex -36.7305 -13.4387 -0.1
- vertex -37.1409 -11.9004 -0.1
+ vertex -37.2767 -12.0443 -0.2
+ vertex -36.7305 -13.4387 -0.2
+ vertex -37.1409 -11.9004 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.7305 -13.4387 -0.1
- vertex -37.2767 -12.0443 -0.1
- vertex -36.9216 -13.3997 -0.1
+ vertex -36.7305 -13.4387 -0.2
+ vertex -37.2767 -12.0443 -0.2
+ vertex -36.9216 -13.3997 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -37.3834 -12.1929 -0.1
- vertex -36.9216 -13.3997 -0.1
- vertex -37.2767 -12.0443 -0.1
+ vertex -37.3834 -12.1929 -0.2
+ vertex -36.9216 -13.3997 -0.2
+ vertex -37.2767 -12.0443 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -37.4611 -12.3438 -0.1
- vertex -36.9216 -13.3997 -0.1
- vertex -37.3834 -12.1929 -0.1
+ vertex -37.4611 -12.3438 -0.2
+ vertex -36.9216 -13.3997 -0.2
+ vertex -37.3834 -12.1929 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.9216 -13.3997 -0.1
- vertex -37.4611 -12.3438 -0.1
- vertex -37.0874 -13.3385 -0.1
+ vertex -36.9216 -13.3997 -0.2
+ vertex -37.4611 -12.3438 -0.2
+ vertex -37.0874 -13.3385 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -37.5104 -12.4945 -0.1
- vertex -37.0874 -13.3385 -0.1
- vertex -37.4611 -12.3438 -0.1
+ vertex -37.5104 -12.4945 -0.2
+ vertex -37.0874 -13.3385 -0.2
+ vertex -37.4611 -12.3438 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.0874 -13.3385 -0.1
- vertex -37.5104 -12.4945 -0.1
- vertex -37.2276 -13.2576 -0.1
+ vertex -37.0874 -13.3385 -0.2
+ vertex -37.5104 -12.4945 -0.2
+ vertex -37.2276 -13.2576 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -37.5315 -12.6425 -0.1
- vertex -37.2276 -13.2576 -0.1
- vertex -37.5104 -12.4945 -0.1
+ vertex -37.5315 -12.6425 -0.2
+ vertex -37.2276 -13.2576 -0.2
+ vertex -37.5104 -12.4945 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.2276 -13.2576 -0.1
- vertex -37.5315 -12.6425 -0.1
- vertex -37.3418 -13.1594 -0.1
+ vertex -37.2276 -13.2576 -0.2
+ vertex -37.5315 -12.6425 -0.2
+ vertex -37.3418 -13.1594 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.3418 -13.1594 -0.1
- vertex -37.5315 -12.6425 -0.1
- vertex -37.4296 -13.0463 -0.1
+ vertex -37.3418 -13.1594 -0.2
+ vertex -37.5315 -12.6425 -0.2
+ vertex -37.4296 -13.0463 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.4296 -13.0463 -0.1
- vertex -37.5315 -12.6425 -0.1
- vertex -37.4908 -12.9209 -0.1
+ vertex -37.4296 -13.0463 -0.2
+ vertex -37.5315 -12.6425 -0.2
+ vertex -37.4908 -12.9209 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.4908 -12.9209 -0.1
- vertex -37.5315 -12.6425 -0.1
- vertex -37.5249 -12.7854 -0.1
+ vertex -37.4908 -12.9209 -0.2
+ vertex -37.5315 -12.6425 -0.2
+ vertex -37.5249 -12.7854 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.9739 -18.9651 -0.1
- vertex -22.585 -19.4947 -0.1
- vertex -22.594 -19.3555 -0.1
+ vertex -22.9739 -18.9651 -0.2
+ vertex -22.585 -19.4947 -0.2
+ vertex -22.594 -19.3555 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.8524 -19.008 -0.1
- vertex -22.594 -19.3555 -0.1
- vertex -22.625 -19.2389 -0.1
+ vertex -22.8524 -19.008 -0.2
+ vertex -22.594 -19.3555 -0.2
+ vertex -22.625 -19.2389 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.7539 -19.0668 -0.1
- vertex -22.625 -19.2389 -0.1
- vertex -22.6782 -19.1432 -0.1
+ vertex -22.7539 -19.0668 -0.2
+ vertex -22.625 -19.2389 -0.2
+ vertex -22.6782 -19.1432 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.594 -19.3555 -0.1
- vertex -22.8524 -19.008 -0.1
- vertex -22.9739 -18.9651 -0.1
+ vertex -22.594 -19.3555 -0.2
+ vertex -22.8524 -19.008 -0.2
+ vertex -22.9739 -18.9651 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.625 -19.2389 -0.1
- vertex -22.7539 -19.0668 -0.1
- vertex -22.8524 -19.008 -0.1
+ vertex -22.625 -19.2389 -0.2
+ vertex -22.7539 -19.0668 -0.2
+ vertex -22.8524 -19.008 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.1186 -18.9365 -0.1
- vertex -22.585 -19.4947 -0.1
- vertex -22.9739 -18.9651 -0.1
+ vertex -23.1186 -18.9365 -0.2
+ vertex -22.585 -19.4947 -0.2
+ vertex -22.9739 -18.9651 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.585 -19.4947 -0.1
- vertex -23.1186 -18.9365 -0.1
- vertex -22.5978 -19.6581 -0.1
+ vertex -22.585 -19.4947 -0.2
+ vertex -23.1186 -18.9365 -0.2
+ vertex -22.5978 -19.6581 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4791 -18.9156 -0.1
- vertex -22.5978 -19.6581 -0.1
- vertex -23.1186 -18.9365 -0.1
+ vertex -23.4791 -18.9156 -0.2
+ vertex -22.5978 -19.6581 -0.2
+ vertex -23.1186 -18.9365 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.5978 -19.6581 -0.1
- vertex -23.4791 -18.9156 -0.1
- vertex -22.6874 -20.0641 -0.1
+ vertex -22.5978 -19.6581 -0.2
+ vertex -23.4791 -18.9156 -0.2
+ vertex -22.6874 -20.0641 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -23.6632 -18.9241 -0.1
- vertex -22.6874 -20.0641 -0.1
- vertex -23.4791 -18.9156 -0.1
+ vertex -23.6632 -18.9241 -0.2
+ vertex -22.6874 -20.0641 -0.2
+ vertex -23.4791 -18.9156 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.3738 -19.4278 -0.1
- vertex -22.6874 -20.0641 -0.1
- vertex -24.2328 -19.2424 -0.1
+ vertex -24.3738 -19.4278 -0.2
+ vertex -22.6874 -20.0641 -0.2
+ vertex -24.2328 -19.2424 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.6874 -20.0641 -0.1
- vertex -23.6632 -18.9241 -0.1
- vertex -24.2328 -19.2424 -0.1
+ vertex -22.6874 -20.0641 -0.2
+ vertex -23.6632 -18.9241 -0.2
+ vertex -24.2328 -19.2424 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.0993 -19.1062 -0.1
- vertex -23.6632 -18.9241 -0.1
- vertex -23.8226 -18.954 -0.1
+ vertex -24.0993 -19.1062 -0.2
+ vertex -23.6632 -18.9241 -0.2
+ vertex -23.8226 -18.954 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.0993 -19.1062 -0.1
- vertex -23.8226 -18.954 -0.1
- vertex -23.9653 -19.0124 -0.1
+ vertex -24.0993 -19.1062 -0.2
+ vertex -23.8226 -18.954 -0.2
+ vertex -23.9653 -19.0124 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.6632 -18.9241 -0.1
- vertex -24.0993 -19.1062 -0.1
- vertex -24.2328 -19.2424 -0.1
+ vertex -23.6632 -18.9241 -0.2
+ vertex -24.0993 -19.1062 -0.2
+ vertex -24.2328 -19.2424 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.6874 -20.0641 -0.1
- vertex -24.3738 -19.4278 -0.1
- vertex -22.8608 -20.5868 -0.1
+ vertex -22.6874 -20.0641 -0.2
+ vertex -24.3738 -19.4278 -0.2
+ vertex -22.8608 -20.5868 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.7108 -19.9745 -0.1
- vertex -22.8608 -20.5868 -0.1
- vertex -24.3738 -19.4278 -0.1
+ vertex -24.7108 -19.9745 -0.2
+ vertex -22.8608 -20.5868 -0.2
+ vertex -24.3738 -19.4278 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.8608 -20.5868 -0.1
- vertex -24.7108 -19.9745 -0.1
- vertex -23.116 -21.2395 -0.1
+ vertex -22.8608 -20.5868 -0.2
+ vertex -24.7108 -19.9745 -0.2
+ vertex -23.116 -21.2395 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.9407 -20.3516 -0.1
- vertex -23.116 -21.2395 -0.1
- vertex -24.7108 -19.9745 -0.1
+ vertex -24.9407 -20.3516 -0.2
+ vertex -23.116 -21.2395 -0.2
+ vertex -24.7108 -19.9745 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.1784 -20.695 -0.1
- vertex -23.116 -21.2395 -0.1
- vertex -24.9407 -20.3516 -0.1
+ vertex -25.1784 -20.695 -0.2
+ vertex -23.116 -21.2395 -0.2
+ vertex -24.9407 -20.3516 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.4267 -21.0057 -0.1
- vertex -23.116 -21.2395 -0.1
- vertex -25.1784 -20.695 -0.1
+ vertex -25.4267 -21.0057 -0.2
+ vertex -23.116 -21.2395 -0.2
+ vertex -25.1784 -20.695 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -25.6884 -21.2849 -0.1
- vertex -23.116 -21.2395 -0.1
- vertex -25.4267 -21.0057 -0.1
+ vertex -25.6884 -21.2849 -0.2
+ vertex -23.116 -21.2395 -0.2
+ vertex -25.4267 -21.0057 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.116 -21.2395 -0.1
- vertex -25.6884 -21.2849 -0.1
- vertex -24.3958 -24.3815 -0.1
+ vertex -23.116 -21.2395 -0.2
+ vertex -25.6884 -21.2849 -0.2
+ vertex -24.3958 -24.3815 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.9661 -21.5339 -0.1
- vertex -24.3958 -24.3815 -0.1
- vertex -25.6884 -21.2849 -0.1
+ vertex -25.9661 -21.5339 -0.2
+ vertex -24.3958 -24.3815 -0.2
+ vertex -25.6884 -21.2849 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -26.2627 -21.7538 -0.1
- vertex -24.3958 -24.3815 -0.1
- vertex -25.9661 -21.5339 -0.1
+ vertex -26.2627 -21.7538 -0.2
+ vertex -24.3958 -24.3815 -0.2
+ vertex -25.9661 -21.5339 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -26.5809 -21.9457 -0.1
- vertex -24.3958 -24.3815 -0.1
- vertex -26.2627 -21.7538 -0.1
+ vertex -26.5809 -21.9457 -0.2
+ vertex -24.3958 -24.3815 -0.2
+ vertex -26.2627 -21.7538 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -26.9234 -22.1109 -0.1
- vertex -24.3958 -24.3815 -0.1
- vertex -26.5809 -21.9457 -0.1
+ vertex -26.9234 -22.1109 -0.2
+ vertex -24.3958 -24.3815 -0.2
+ vertex -26.5809 -21.9457 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -27.2929 -22.2506 -0.1
- vertex -24.3958 -24.3815 -0.1
- vertex -26.9234 -22.1109 -0.1
+ vertex -27.2929 -22.2506 -0.2
+ vertex -24.3958 -24.3815 -0.2
+ vertex -26.9234 -22.1109 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.3958 -24.3815 -0.1
- vertex -27.2929 -22.2506 -0.1
- vertex -24.9793 -25.8003 -0.1
+ vertex -24.3958 -24.3815 -0.2
+ vertex -27.2929 -22.2506 -0.2
+ vertex -24.9793 -25.8003 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -25.4624 -26.9141 -0.1
- vertex -27.8924 -26.5154 -0.1
- vertex -25.8688 -27.7587 -0.1
+ vertex -25.4624 -26.9141 -0.2
+ vertex -27.8924 -26.5154 -0.2
+ vertex -25.8688 -27.7587 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -25.8688 -27.7587 -0.1
- vertex -27.9393 -26.9734 -0.1
- vertex -26.0506 -28.0911 -0.1
+ vertex -25.8688 -27.7587 -0.2
+ vertex -27.9393 -26.9734 -0.2
+ vertex -26.0506 -28.0911 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.0506 -28.0911 -0.1
- vertex -27.9393 -26.9734 -0.1
- vertex -26.2221 -28.3696 -0.1
+ vertex -26.0506 -28.0911 -0.2
+ vertex -27.9393 -26.9734 -0.2
+ vertex -26.2221 -28.3696 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -27.9393 -26.9734 -0.1
- vertex -25.8688 -27.7587 -0.1
- vertex -27.8924 -26.5154 -0.1
+ vertex -27.9393 -26.9734 -0.2
+ vertex -25.8688 -27.7587 -0.2
+ vertex -27.8924 -26.5154 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.2221 -28.3696 -0.1
- vertex -27.9393 -26.9734 -0.1
- vertex -26.3861 -28.5987 -0.1
+ vertex -26.2221 -28.3696 -0.2
+ vertex -27.9393 -26.9734 -0.2
+ vertex -26.3861 -28.5987 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -28.1721 -28.4809 -0.1
- vertex -26.3861 -28.5987 -0.1
- vertex -27.9393 -26.9734 -0.1
+ vertex -28.1721 -28.4809 -0.2
+ vertex -26.3861 -28.5987 -0.2
+ vertex -27.9393 -26.9734 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.8988 -26.2055 -0.1
- vertex -24.9793 -25.8003 -0.1
- vertex -27.2929 -22.2506 -0.1
+ vertex -27.8988 -26.2055 -0.2
+ vertex -24.9793 -25.8003 -0.2
+ vertex -27.2929 -22.2506 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.3861 -28.5987 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -26.5458 -28.7827 -0.1
+ vertex -26.3861 -28.5987 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -26.5458 -28.7827 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.5458 -28.7827 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -26.7039 -28.9262 -0.1
+ vertex -26.5458 -28.7827 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -26.7039 -28.9262 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -27.8988 -26.2055 -0.1
- vertex -25.4624 -26.9141 -0.1
- vertex -24.9793 -25.8003 -0.1
+ vertex -27.8988 -26.2055 -0.2
+ vertex -25.4624 -26.9141 -0.2
+ vertex -24.9793 -25.8003 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.7039 -28.9262 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -26.8635 -29.0336 -0.1
+ vertex -26.7039 -28.9262 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -26.8635 -29.0336 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.8635 -29.0336 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -27.0275 -29.1093 -0.1
+ vertex -26.8635 -29.0336 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -27.0275 -29.1093 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.0919 -25.8829 -0.1
- vertex -27.2929 -22.2506 -0.1
- vertex -27.6923 -22.3658 -0.1
+ vertex -28.0919 -25.8829 -0.2
+ vertex -27.2929 -22.2506 -0.2
+ vertex -27.6923 -22.3658 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.0275 -29.1093 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -27.1989 -29.1579 -0.1
+ vertex -27.0275 -29.1093 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -27.1989 -29.1579 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.1989 -29.1579 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -27.3805 -29.1838 -0.1
+ vertex -27.1989 -29.1579 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -27.3805 -29.1838 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.3805 -29.1838 -0.1
- vertex -28.1721 -28.4809 -0.1
- vertex -27.5755 -29.1914 -0.1
+ vertex -27.3805 -29.1838 -0.2
+ vertex -28.1721 -28.4809 -0.2
+ vertex -27.5755 -29.1914 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -28.2235 -28.8853 -0.1
- vertex -27.5755 -29.1914 -0.1
- vertex -28.1721 -28.4809 -0.1
+ vertex -28.2235 -28.8853 -0.2
+ vertex -27.5755 -29.1914 -0.2
+ vertex -28.1721 -28.4809 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.5755 -29.1914 -0.1
- vertex -28.2235 -28.8853 -0.1
- vertex -27.9775 -29.1782 -0.1
+ vertex -27.5755 -29.1914 -0.2
+ vertex -28.2235 -28.8853 -0.2
+ vertex -27.9775 -29.1782 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.9775 -29.1782 -0.1
- vertex -28.2235 -28.8853 -0.1
- vertex -28.0989 -29.15 -0.1
+ vertex -27.9775 -29.1782 -0.2
+ vertex -28.2235 -28.8853 -0.2
+ vertex -28.0989 -29.15 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -28.2154 -29.0113 -0.1
- vertex -28.0989 -29.15 -0.1
- vertex -28.2235 -28.8853 -0.1
+ vertex -28.2154 -29.0113 -0.2
+ vertex -28.0989 -29.15 -0.2
+ vertex -28.2235 -28.8853 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.0989 -29.15 -0.1
- vertex -28.2154 -29.0113 -0.1
- vertex -28.176 -29.097 -0.1
+ vertex -28.0989 -29.15 -0.2
+ vertex -28.2154 -29.0113 -0.2
+ vertex -28.176 -29.097 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4571 -30.6716 -0.1
- vertex -23.4513 -30.847 -0.1
- vertex -23.4345 -30.738 -0.1
+ vertex -23.4571 -30.6716 -0.2
+ vertex -23.4513 -30.847 -0.2
+ vertex -23.4345 -30.738 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.5012 -30.6026 -0.1
- vertex -23.4513 -30.847 -0.1
- vertex -23.4571 -30.6716 -0.1
+ vertex -23.5012 -30.6026 -0.2
+ vertex -23.4513 -30.847 -0.2
+ vertex -23.4571 -30.6716 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.6433 -30.465 -0.1
- vertex -23.4513 -30.847 -0.1
- vertex -23.5012 -30.6026 -0.1
+ vertex -23.6433 -30.465 -0.2
+ vertex -23.4513 -30.847 -0.2
+ vertex -23.5012 -30.6026 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4513 -30.847 -0.1
- vertex -23.6433 -30.465 -0.1
- vertex -23.5218 -31.031 -0.1
+ vertex -23.4513 -30.847 -0.2
+ vertex -23.6433 -30.465 -0.2
+ vertex -23.5218 -31.031 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.8399 -30.3412 -0.1
- vertex -23.5218 -31.031 -0.1
- vertex -23.6433 -30.465 -0.1
+ vertex -23.8399 -30.3412 -0.2
+ vertex -23.5218 -31.031 -0.2
+ vertex -23.6433 -30.465 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.0701 -30.2475 -0.1
- vertex -23.5218 -31.031 -0.1
- vertex -23.8399 -30.3412 -0.1
+ vertex -24.0701 -30.2475 -0.2
+ vertex -23.5218 -31.031 -0.2
+ vertex -23.8399 -30.3412 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.5218 -31.031 -0.1
- vertex -24.0701 -30.2475 -0.1
- vertex -23.8031 -31.5911 -0.1
+ vertex -23.5218 -31.031 -0.2
+ vertex -24.0701 -30.2475 -0.2
+ vertex -23.8031 -31.5911 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.8452 -30.2998 -0.1
- vertex -23.8031 -31.5911 -0.1
- vertex -24.0701 -30.2475 -0.1
+ vertex -24.8452 -30.2998 -0.2
+ vertex -23.8031 -31.5911 -0.2
+ vertex -24.0701 -30.2475 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.8452 -30.2998 -0.1
- vertex -24.0701 -30.2475 -0.1
- vertex -24.2803 -30.1833 -0.1
+ vertex -24.8452 -30.2998 -0.2
+ vertex -24.0701 -30.2475 -0.2
+ vertex -24.2803 -30.1833 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.6311 -30.1847 -0.1
- vertex -24.2803 -30.1833 -0.1
- vertex -24.455 -30.1541 -0.1
+ vertex -24.6311 -30.1847 -0.2
+ vertex -24.2803 -30.1833 -0.2
+ vertex -24.455 -30.1541 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.6311 -30.1847 -0.1
- vertex -24.455 -30.1541 -0.1
- vertex -24.5406 -30.1604 -0.1
+ vertex -24.6311 -30.1847 -0.2
+ vertex -24.455 -30.1541 -0.2
+ vertex -24.5406 -30.1604 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.2803 -30.1833 -0.1
- vertex -24.6311 -30.1847 -0.1
- vertex -24.8452 -30.2998 -0.1
+ vertex -24.2803 -30.1833 -0.2
+ vertex -24.6311 -30.1847 -0.2
+ vertex -24.8452 -30.2998 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.8031 -31.5911 -0.1
- vertex -24.8452 -30.2998 -0.1
- vertex -25.1341 -30.5242 -0.1
+ vertex -23.8031 -31.5911 -0.2
+ vertex -24.8452 -30.2998 -0.2
+ vertex -25.1341 -30.5242 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.5344 -30.8827 -0.1
- vertex -23.8031 -31.5911 -0.1
- vertex -25.1341 -30.5242 -0.1
+ vertex -25.5344 -30.8827 -0.2
+ vertex -23.8031 -31.5911 -0.2
+ vertex -25.1341 -30.5242 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.8031 -31.5911 -0.1
- vertex -25.5344 -30.8827 -0.1
- vertex -24.2375 -32.3527 -0.1
+ vertex -23.8031 -31.5911 -0.2
+ vertex -25.5344 -30.8827 -0.2
+ vertex -24.2375 -32.3527 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.2375 -32.3527 -0.1
- vertex -25.5344 -30.8827 -0.1
- vertex -24.7839 -33.2498 -0.1
+ vertex -24.2375 -32.3527 -0.2
+ vertex -25.5344 -30.8827 -0.2
+ vertex -24.7839 -33.2498 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -26.8166 -32.1012 -0.1
- vertex -24.7839 -33.2498 -0.1
- vertex -25.5344 -30.8827 -0.1
+ vertex -26.8166 -32.1012 -0.2
+ vertex -24.7839 -33.2498 -0.2
+ vertex -25.5344 -30.8827 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.7839 -33.2498 -0.1
- vertex -26.8166 -32.1012 -0.1
- vertex -25.4011 -34.2168 -0.1
+ vertex -24.7839 -33.2498 -0.2
+ vertex -26.8166 -32.1012 -0.2
+ vertex -25.4011 -34.2168 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -27.3602 -32.5933 -0.1
- vertex -25.4011 -34.2168 -0.1
- vertex -26.8166 -32.1012 -0.1
+ vertex -27.3602 -32.5933 -0.2
+ vertex -25.4011 -34.2168 -0.2
+ vertex -26.8166 -32.1012 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -27.924 -33.0516 -0.1
- vertex -25.4011 -34.2168 -0.1
- vertex -27.3602 -32.5933 -0.1
+ vertex -27.924 -33.0516 -0.2
+ vertex -25.4011 -34.2168 -0.2
+ vertex -27.3602 -32.5933 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -25.4011 -34.2168 -0.1
- vertex -27.924 -33.0516 -0.1
- vertex -26.0482 -35.1877 -0.1
+ vertex -25.4011 -34.2168 -0.2
+ vertex -27.924 -33.0516 -0.2
+ vertex -26.0482 -35.1877 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -28.5012 -33.4718 -0.1
- vertex -26.0482 -35.1877 -0.1
- vertex -27.924 -33.0516 -0.1
+ vertex -28.5012 -33.4718 -0.2
+ vertex -26.0482 -35.1877 -0.2
+ vertex -27.924 -33.0516 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.0482 -35.1877 -0.1
- vertex -28.5012 -33.4718 -0.1
- vertex -26.6839 -36.0968 -0.1
+ vertex -26.0482 -35.1877 -0.2
+ vertex -28.5012 -33.4718 -0.2
+ vertex -26.6839 -36.0968 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -29.0852 -33.8499 -0.1
- vertex -26.6839 -36.0968 -0.1
- vertex -28.5012 -33.4718 -0.1
+ vertex -29.0852 -33.8499 -0.2
+ vertex -26.6839 -36.0968 -0.2
+ vertex -28.5012 -33.4718 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.6839 -36.0968 -0.1
- vertex -29.0852 -33.8499 -0.1
- vertex -27.2673 -36.8782 -0.1
+ vertex -26.6839 -36.0968 -0.2
+ vertex -29.0852 -33.8499 -0.2
+ vertex -27.2673 -36.8782 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -29.669 -34.1817 -0.1
- vertex -27.2673 -36.8782 -0.1
- vertex -29.0852 -33.8499 -0.1
+ vertex -29.669 -34.1817 -0.2
+ vertex -27.2673 -36.8782 -0.2
+ vertex -29.0852 -33.8499 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -30.2461 -34.4632 -0.1
- vertex -27.2673 -36.8782 -0.1
- vertex -29.669 -34.1817 -0.1
+ vertex -30.2461 -34.4632 -0.2
+ vertex -27.2673 -36.8782 -0.2
+ vertex -29.669 -34.1817 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.2673 -36.8782 -0.1
- vertex -30.2461 -34.4632 -0.1
- vertex -28.2718 -38.1638 -0.1
+ vertex -27.2673 -36.8782 -0.2
+ vertex -30.2461 -34.4632 -0.2
+ vertex -28.2718 -38.1638 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -30.8095 -34.6902 -0.1
- vertex -28.2718 -38.1638 -0.1
- vertex -30.2461 -34.4632 -0.1
+ vertex -30.8095 -34.6902 -0.2
+ vertex -28.2718 -38.1638 -0.2
+ vertex -30.2461 -34.4632 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -31.3526 -34.8586 -0.1
- vertex -28.2718 -38.1638 -0.1
- vertex -30.8095 -34.6902 -0.1
+ vertex -31.3526 -34.8586 -0.2
+ vertex -28.2718 -38.1638 -0.2
+ vertex -30.8095 -34.6902 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -31.5797 -34.902 -0.1
- vertex -28.2718 -38.1638 -0.1
- vertex -31.3526 -34.8586 -0.1
+ vertex -31.5797 -34.902 -0.2
+ vertex -28.2718 -38.1638 -0.2
+ vertex -31.3526 -34.8586 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -31.9023 -34.9414 -0.1
- vertex -28.2718 -38.1638 -0.1
- vertex -31.5797 -34.902 -0.1
+ vertex -31.9023 -34.9414 -0.2
+ vertex -28.2718 -38.1638 -0.2
+ vertex -31.5797 -34.902 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -32.7769 -35.0076 -0.1
- vertex -28.2718 -38.1638 -0.1
- vertex -31.9023 -34.9414 -0.1
+ vertex -32.7769 -35.0076 -0.2
+ vertex -28.2718 -38.1638 -0.2
+ vertex -31.9023 -34.9414 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.6203 -38.1325 -0.1
- vertex -32.7769 -35.0076 -0.1
- vertex -33.8615 -35.0556 -0.1
+ vertex -37.6203 -38.1325 -0.2
+ vertex -32.7769 -35.0076 -0.2
+ vertex -33.8615 -35.0556 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.6203 -38.1325 -0.1
- vertex -33.8615 -35.0556 -0.1
- vertex -35.0412 -35.0835 -0.1
+ vertex -37.6203 -38.1325 -0.2
+ vertex -33.8615 -35.0556 -0.2
+ vertex -35.0412 -35.0835 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.6203 -38.1325 -0.1
- vertex -35.0412 -35.0835 -0.1
- vertex -36.2012 -35.0898 -0.1
+ vertex -37.6203 -38.1325 -0.2
+ vertex -35.0412 -35.0835 -0.2
+ vertex -36.2012 -35.0898 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.6203 -38.1325 -0.1
- vertex -36.2012 -35.0898 -0.1
- vertex -37.2267 -35.0727 -0.1
+ vertex -37.6203 -38.1325 -0.2
+ vertex -36.2012 -35.0898 -0.2
+ vertex -37.2267 -35.0727 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.7769 -35.0076 -0.1
- vertex -37.6203 -38.1325 -0.1
- vertex -28.2718 -38.1638 -0.1
+ vertex -32.7769 -35.0076 -0.2
+ vertex -37.6203 -38.1325 -0.2
+ vertex -28.2718 -38.1638 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.0027 -35.0306 -0.1
- vertex -37.6203 -38.1325 -0.1
- vertex -37.2267 -35.0727 -0.1
+ vertex -38.0027 -35.0306 -0.2
+ vertex -37.6203 -38.1325 -0.2
+ vertex -37.2267 -35.0727 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.2613 -34.9997 -0.1
- vertex -37.6203 -38.1325 -0.1
- vertex -38.0027 -35.0306 -0.1
+ vertex -38.2613 -34.9997 -0.2
+ vertex -37.6203 -38.1325 -0.2
+ vertex -38.0027 -35.0306 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.4144 -34.9619 -0.1
- vertex -37.6203 -38.1325 -0.1
- vertex -38.2613 -34.9997 -0.1
+ vertex -38.4144 -34.9619 -0.2
+ vertex -37.6203 -38.1325 -0.2
+ vertex -38.2613 -34.9997 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -41.2883 -38.1087 -0.1
- vertex -38.4144 -34.9619 -0.1
- vertex -38.5336 -34.8886 -0.1
+ vertex -41.2883 -38.1087 -0.2
+ vertex -38.4144 -34.9619 -0.2
+ vertex -38.5336 -34.8886 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -41.2883 -38.1087 -0.1
- vertex -38.5336 -34.8886 -0.1
- vertex -38.6312 -34.7874 -0.1
+ vertex -41.2883 -38.1087 -0.2
+ vertex -38.5336 -34.8886 -0.2
+ vertex -38.6312 -34.7874 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -41.2883 -38.1087 -0.1
- vertex -38.6312 -34.7874 -0.1
- vertex -38.6971 -34.6715 -0.1
+ vertex -41.2883 -38.1087 -0.2
+ vertex -38.6312 -34.7874 -0.2
+ vertex -38.6971 -34.6715 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -42.7651 -32.2453 -0.1
- vertex -38.3711 -33.5534 -0.1
- vertex -42.2252 -30.9405 -0.1
+ vertex -42.7651 -32.2453 -0.2
+ vertex -38.3711 -33.5534 -0.2
+ vertex -42.2252 -30.9405 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.3711 -33.5534 -0.1
- vertex -42.7651 -32.2453 -0.1
- vertex -38.6277 -34.2404 -0.1
+ vertex -38.3711 -33.5534 -0.2
+ vertex -42.7651 -32.2453 -0.2
+ vertex -38.6277 -34.2404 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.6277 -34.2404 -0.1
- vertex -42.7651 -32.2453 -0.1
- vertex -38.7214 -34.5543 -0.1
+ vertex -38.6277 -34.2404 -0.2
+ vertex -42.7651 -32.2453 -0.2
+ vertex -38.7214 -34.5543 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -43.2426 -33.2915 -0.1
- vertex -38.7214 -34.5543 -0.1
- vertex -42.7651 -32.2453 -0.1
+ vertex -43.2426 -33.2915 -0.2
+ vertex -38.7214 -34.5543 -0.2
+ vertex -42.7651 -32.2453 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -43.4655 -33.7273 -0.1
- vertex -38.7214 -34.5543 -0.1
- vertex -43.2426 -33.2915 -0.1
+ vertex -43.4655 -33.7273 -0.2
+ vertex -38.7214 -34.5543 -0.2
+ vertex -43.2426 -33.2915 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.7214 -34.5543 -0.1
- vertex -43.4655 -33.7273 -0.1
- vertex -38.6971 -34.6715 -0.1
+ vertex -38.7214 -34.5543 -0.2
+ vertex -43.4655 -33.7273 -0.2
+ vertex -38.6971 -34.6715 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.4144 -34.9619 -0.1
- vertex -41.2883 -38.1087 -0.1
- vertex -37.6203 -38.1325 -0.1
+ vertex -38.4144 -34.9619 -0.2
+ vertex -41.2883 -38.1087 -0.2
+ vertex -37.6203 -38.1325 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -43.682 -34.1098 -0.1
- vertex -38.6971 -34.6715 -0.1
- vertex -43.4655 -33.7273 -0.1
+ vertex -43.682 -34.1098 -0.2
+ vertex -38.6971 -34.6715 -0.2
+ vertex -43.4655 -33.7273 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.6971 -34.6715 -0.1
- vertex -43.682 -34.1098 -0.1
- vertex -41.2883 -38.1087 -0.1
+ vertex -38.6971 -34.6715 -0.2
+ vertex -43.682 -34.1098 -0.2
+ vertex -41.2883 -38.1087 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -43.8952 -34.443 -0.1
- vertex -41.2883 -38.1087 -0.1
- vertex -43.682 -34.1098 -0.1
+ vertex -43.8952 -34.443 -0.2
+ vertex -41.2883 -38.1087 -0.2
+ vertex -43.682 -34.1098 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -44.108 -34.7306 -0.1
- vertex -41.2883 -38.1087 -0.1
- vertex -43.8952 -34.443 -0.1
+ vertex -44.108 -34.7306 -0.2
+ vertex -41.2883 -38.1087 -0.2
+ vertex -43.8952 -34.443 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -44.3237 -34.9765 -0.1
- vertex -41.2883 -38.1087 -0.1
- vertex -44.108 -34.7306 -0.1
+ vertex -44.3237 -34.9765 -0.2
+ vertex -41.2883 -38.1087 -0.2
+ vertex -44.108 -34.7306 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -44.3237 -34.9765 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -41.2883 -38.1087 -0.1
+ vertex -44.3237 -34.9765 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -41.2883 -38.1087 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -44.5451 -35.1844 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -44.3237 -34.9765 -0.1
+ vertex -44.5451 -35.1844 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -44.3237 -34.9765 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -44.7755 -35.3583 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -44.5451 -35.1844 -0.1
+ vertex -44.7755 -35.3583 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -44.5451 -35.1844 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -45.0179 -35.5019 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -44.7755 -35.3583 -0.1
+ vertex -45.0179 -35.5019 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -44.7755 -35.3583 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -45.2753 -35.6191 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -45.0179 -35.5019 -0.1
+ vertex -45.2753 -35.6191 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -45.0179 -35.5019 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -45.5508 -35.7136 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -45.2753 -35.6191 -0.1
+ vertex -45.5508 -35.7136 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -45.2753 -35.6191 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -45.8475 -35.7893 -0.1
- vertex -44.3648 -38.0673 -0.1
- vertex -45.5508 -35.7136 -0.1
+ vertex -45.8475 -35.7893 -0.2
+ vertex -44.3648 -38.0673 -0.2
+ vertex -45.5508 -35.7136 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -46.5272 -38.014 -0.1
- vertex -45.8475 -35.7893 -0.1
- vertex -46.1684 -35.8499 -0.1
+ vertex -46.5272 -38.014 -0.2
+ vertex -45.8475 -35.7893 -0.2
+ vertex -46.1684 -35.8499 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -46.5272 -38.014 -0.1
- vertex -46.1684 -35.8499 -0.1
- vertex -46.4544 -35.9117 -0.1
+ vertex -46.5272 -38.014 -0.2
+ vertex -46.1684 -35.8499 -0.2
+ vertex -46.4544 -35.9117 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -45.8475 -35.7893 -0.1
- vertex -46.5272 -38.014 -0.1
- vertex -44.3648 -38.0673 -0.1
+ vertex -45.8475 -35.7893 -0.2
+ vertex -46.5272 -38.014 -0.2
+ vertex -44.3648 -38.0673 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -46.7228 -35.999 -0.1
- vertex -46.5272 -38.014 -0.1
- vertex -46.4544 -35.9117 -0.1
+ vertex -46.7228 -35.999 -0.2
+ vertex -46.5272 -38.014 -0.2
+ vertex -46.4544 -35.9117 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -46.9715 -36.1082 -0.1
- vertex -46.5272 -38.014 -0.1
- vertex -46.7228 -35.999 -0.1
+ vertex -46.9715 -36.1082 -0.2
+ vertex -46.5272 -38.014 -0.2
+ vertex -46.7228 -35.999 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.1985 -36.2359 -0.1
- vertex -46.5272 -38.014 -0.1
- vertex -46.9715 -36.1082 -0.1
+ vertex -47.1985 -36.2359 -0.2
+ vertex -46.5272 -38.014 -0.2
+ vertex -46.9715 -36.1082 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.4015 -36.3788 -0.1
- vertex -46.5272 -38.014 -0.1
- vertex -47.1985 -36.2359 -0.1
+ vertex -47.4015 -36.3788 -0.2
+ vertex -46.5272 -38.014 -0.2
+ vertex -47.1985 -36.2359 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -46.5272 -38.014 -0.1
- vertex -47.4015 -36.3788 -0.1
- vertex -47.1648 -37.9848 -0.1
+ vertex -46.5272 -38.014 -0.2
+ vertex -47.4015 -36.3788 -0.2
+ vertex -47.1648 -37.9848 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.5785 -36.5332 -0.1
- vertex -47.1648 -37.9848 -0.1
- vertex -47.4015 -36.3788 -0.1
+ vertex -47.5785 -36.5332 -0.2
+ vertex -47.1648 -37.9848 -0.2
+ vertex -47.4015 -36.3788 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.7274 -36.6957 -0.1
- vertex -47.1648 -37.9848 -0.1
- vertex -47.5785 -36.5332 -0.1
+ vertex -47.7274 -36.6957 -0.2
+ vertex -47.1648 -37.9848 -0.2
+ vertex -47.5785 -36.5332 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.846 -36.863 -0.1
- vertex -47.1648 -37.9848 -0.1
- vertex -47.7274 -36.6957 -0.1
+ vertex -47.846 -36.863 -0.2
+ vertex -47.1648 -37.9848 -0.2
+ vertex -47.7274 -36.6957 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -47.1648 -37.9848 -0.1
- vertex -47.846 -36.863 -0.1
- vertex -47.4529 -37.9547 -0.1
+ vertex -47.1648 -37.9848 -0.2
+ vertex -47.846 -36.863 -0.2
+ vertex -47.4529 -37.9547 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.9322 -37.0315 -0.1
- vertex -47.4529 -37.9547 -0.1
- vertex -47.846 -36.863 -0.1
+ vertex -47.9322 -37.0315 -0.2
+ vertex -47.4529 -37.9547 -0.2
+ vertex -47.846 -36.863 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -47.4529 -37.9547 -0.1
- vertex -47.9322 -37.0315 -0.1
- vertex -47.6522 -37.8745 -0.1
+ vertex -47.4529 -37.9547 -0.2
+ vertex -47.9322 -37.0315 -0.2
+ vertex -47.6522 -37.8745 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.984 -37.1977 -0.1
- vertex -47.6522 -37.8745 -0.1
- vertex -47.9322 -37.0315 -0.1
+ vertex -47.984 -37.1977 -0.2
+ vertex -47.6522 -37.8745 -0.2
+ vertex -47.9322 -37.0315 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -47.6522 -37.8745 -0.1
- vertex -47.984 -37.1977 -0.1
- vertex -47.8044 -37.7712 -0.1
+ vertex -47.6522 -37.8745 -0.2
+ vertex -47.984 -37.1977 -0.2
+ vertex -47.8044 -37.7712 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -47.9993 -37.3583 -0.1
- vertex -47.8044 -37.7712 -0.1
- vertex -47.984 -37.1977 -0.1
+ vertex -47.9993 -37.3583 -0.2
+ vertex -47.8044 -37.7712 -0.2
+ vertex -47.984 -37.1977 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -47.8044 -37.7712 -0.1
- vertex -47.9993 -37.3583 -0.1
- vertex -47.9115 -37.6485 -0.1
+ vertex -47.8044 -37.7712 -0.2
+ vertex -47.9993 -37.3583 -0.2
+ vertex -47.9115 -37.6485 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -47.9115 -37.6485 -0.1
- vertex -47.9993 -37.3583 -0.1
- vertex -47.9758 -37.5097 -0.1
+ vertex -47.9115 -37.6485 -0.2
+ vertex -47.9993 -37.3583 -0.2
+ vertex -47.9758 -37.5097 -0.2
endloop
endfacet
facet normal -0.0100487 -0.99995 0
outer loop
- vertex -32.0944 -11.3029 -0.1
+ vertex -32.0944 -11.3029 -0.2
vertex -27.175 -11.3523 0
vertex -32.0944 -11.3029 0
endloop
@@ -10726,13 +10726,13 @@ solid OpenSCAD_Model
facet normal -0.0100487 -0.99995 -0
outer loop
vertex -27.175 -11.3523 0
- vertex -32.0944 -11.3029 -0.1
- vertex -27.175 -11.3523 -0.1
+ vertex -32.0944 -11.3029 -0.2
+ vertex -27.175 -11.3523 -0.2
endloop
endfacet
facet normal -0.0126654 -0.99992 0
outer loop
- vertex -27.175 -11.3523 -0.1
+ vertex -27.175 -11.3523 -0.2
vertex -17.7876 -11.4712 0
vertex -27.175 -11.3523 0
endloop
@@ -10740,13 +10740,13 @@ solid OpenSCAD_Model
facet normal -0.0126654 -0.99992 -0
outer loop
vertex -17.7876 -11.4712 0
- vertex -27.175 -11.3523 -0.1
- vertex -17.7876 -11.4712 -0.1
+ vertex -27.175 -11.3523 -0.2
+ vertex -17.7876 -11.4712 -0.2
endloop
endfacet
facet normal -0.111827 -0.993728 0
outer loop
- vertex -17.7876 -11.4712 -0.1
+ vertex -17.7876 -11.4712 -0.2
vertex -17.5514 -11.4978 0
vertex -17.7876 -11.4712 0
endloop
@@ -10754,13 +10754,13 @@ solid OpenSCAD_Model
facet normal -0.111827 -0.993728 -0
outer loop
vertex -17.5514 -11.4978 0
- vertex -17.7876 -11.4712 -0.1
- vertex -17.5514 -11.4978 -0.1
+ vertex -17.7876 -11.4712 -0.2
+ vertex -17.5514 -11.4978 -0.2
endloop
endfacet
facet normal -0.415864 -0.909427 0
outer loop
- vertex -17.5514 -11.4978 -0.1
+ vertex -17.5514 -11.4978 -0.2
vertex -17.4764 -11.5321 0
vertex -17.5514 -11.4978 0
endloop
@@ -10768,167 +10768,167 @@ solid OpenSCAD_Model
facet normal -0.415864 -0.909427 -0
outer loop
vertex -17.4764 -11.5321 0
- vertex -17.5514 -11.4978 -0.1
- vertex -17.4764 -11.5321 -0.1
+ vertex -17.5514 -11.4978 -0.2
+ vertex -17.4764 -11.5321 -0.2
endloop
endfacet
facet normal -0.736355 -0.676596 0
outer loop
- vertex -17.4268 -11.5861 -0.1
+ vertex -17.4268 -11.5861 -0.2
vertex -17.4764 -11.5321 0
- vertex -17.4764 -11.5321 -0.1
+ vertex -17.4764 -11.5321 -0.2
endloop
endfacet
facet normal -0.736355 -0.676596 0
outer loop
vertex -17.4764 -11.5321 0
- vertex -17.4268 -11.5861 -0.1
+ vertex -17.4268 -11.5861 -0.2
vertex -17.4268 -11.5861 0
endloop
endfacet
facet normal -0.946306 -0.323273 0
outer loop
- vertex -17.4002 -11.6639 -0.1
+ vertex -17.4002 -11.6639 -0.2
vertex -17.4268 -11.5861 0
- vertex -17.4268 -11.5861 -0.1
+ vertex -17.4268 -11.5861 -0.2
endloop
endfacet
facet normal -0.946306 -0.323273 0
outer loop
vertex -17.4268 -11.5861 0
- vertex -17.4002 -11.6639 -0.1
+ vertex -17.4002 -11.6639 -0.2
vertex -17.4002 -11.6639 0
endloop
endfacet
facet normal -0.998372 -0.057036 0
outer loop
- vertex -17.3941 -11.77 -0.1
+ vertex -17.3941 -11.77 -0.2
vertex -17.4002 -11.6639 0
- vertex -17.4002 -11.6639 -0.1
+ vertex -17.4002 -11.6639 -0.2
endloop
endfacet
facet normal -0.998372 -0.057036 0
outer loop
vertex -17.4002 -11.6639 0
- vertex -17.3941 -11.77 -0.1
+ vertex -17.3941 -11.77 -0.2
vertex -17.3941 -11.77 0
endloop
endfacet
facet normal -0.992058 0.125781 0
outer loop
- vertex -17.4339 -12.0833 -0.1
+ vertex -17.4339 -12.0833 -0.2
vertex -17.3941 -11.77 0
- vertex -17.3941 -11.77 -0.1
+ vertex -17.3941 -11.77 -0.2
endloop
endfacet
facet normal -0.992058 0.125781 0
outer loop
vertex -17.3941 -11.77 0
- vertex -17.4339 -12.0833 -0.1
+ vertex -17.4339 -12.0833 -0.2
vertex -17.4339 -12.0833 0
endloop
endfacet
facet normal -0.966487 0.256715 0
outer loop
- vertex -17.5116 -12.3759 -0.1
+ vertex -17.5116 -12.3759 -0.2
vertex -17.4339 -12.0833 0
- vertex -17.4339 -12.0833 -0.1
+ vertex -17.4339 -12.0833 -0.2
endloop
endfacet
facet normal -0.966487 0.256715 0
outer loop
vertex -17.4339 -12.0833 0
- vertex -17.5116 -12.3759 -0.1
+ vertex -17.5116 -12.3759 -0.2
vertex -17.5116 -12.3759 0
endloop
endfacet
facet normal -0.949465 0.313873 0
outer loop
- vertex -17.6664 -12.8441 -0.1
+ vertex -17.6664 -12.8441 -0.2
vertex -17.5116 -12.3759 0
- vertex -17.5116 -12.3759 -0.1
+ vertex -17.5116 -12.3759 -0.2
endloop
endfacet
facet normal -0.949465 0.313873 0
outer loop
vertex -17.5116 -12.3759 0
- vertex -17.6664 -12.8441 -0.1
+ vertex -17.6664 -12.8441 -0.2
vertex -17.6664 -12.8441 0
endloop
endfacet
facet normal -0.938494 0.345297 0
outer loop
- vertex -18.1466 -14.1495 -0.1
+ vertex -18.1466 -14.1495 -0.2
vertex -17.6664 -12.8441 0
- vertex -17.6664 -12.8441 -0.1
+ vertex -17.6664 -12.8441 -0.2
endloop
endfacet
facet normal -0.938494 0.345297 0
outer loop
vertex -17.6664 -12.8441 0
- vertex -18.1466 -14.1495 -0.1
+ vertex -18.1466 -14.1495 -0.2
vertex -18.1466 -14.1495 0
endloop
endfacet
facet normal -0.929834 0.367979 0
outer loop
- vertex -18.7537 -15.6836 -0.1
+ vertex -18.7537 -15.6836 -0.2
vertex -18.1466 -14.1495 0
- vertex -18.1466 -14.1495 -0.1
+ vertex -18.1466 -14.1495 -0.2
endloop
endfacet
facet normal -0.929834 0.367979 0
outer loop
vertex -18.1466 -14.1495 0
- vertex -18.7537 -15.6836 -0.1
+ vertex -18.7537 -15.6836 -0.2
vertex -18.7537 -15.6836 0
endloop
endfacet
facet normal -0.920782 0.390077 0
outer loop
- vertex -19.3667 -17.1305 -0.1
+ vertex -19.3667 -17.1305 -0.2
vertex -18.7537 -15.6836 0
- vertex -18.7537 -15.6836 -0.1
+ vertex -18.7537 -15.6836 -0.2
endloop
endfacet
facet normal -0.920782 0.390077 0
outer loop
vertex -18.7537 -15.6836 0
- vertex -19.3667 -17.1305 -0.1
+ vertex -19.3667 -17.1305 -0.2
vertex -19.3667 -17.1305 0
endloop
endfacet
facet normal -0.87414 0.485675 0
outer loop
- vertex -19.4996 -17.3696 -0.1
+ vertex -19.4996 -17.3696 -0.2
vertex -19.3667 -17.1305 0
- vertex -19.3667 -17.1305 -0.1
+ vertex -19.3667 -17.1305 -0.2
endloop
endfacet
facet normal -0.87414 0.485675 0
outer loop
vertex -19.3667 -17.1305 0
- vertex -19.4996 -17.3696 -0.1
+ vertex -19.4996 -17.3696 -0.2
vertex -19.4996 -17.3696 0
endloop
endfacet
facet normal -0.780486 0.625173 0
outer loop
- vertex -19.6713 -17.584 -0.1
+ vertex -19.6713 -17.584 -0.2
vertex -19.4996 -17.3696 0
- vertex -19.4996 -17.3696 -0.1
+ vertex -19.4996 -17.3696 -0.2
endloop
endfacet
facet normal -0.780486 0.625173 0
outer loop
vertex -19.4996 -17.3696 0
- vertex -19.6713 -17.584 -0.1
+ vertex -19.6713 -17.584 -0.2
vertex -19.6713 -17.584 0
endloop
endfacet
facet normal -0.674318 0.738441 0
outer loop
- vertex -19.6713 -17.584 -0.1
+ vertex -19.6713 -17.584 -0.2
vertex -19.8743 -17.7693 0
vertex -19.6713 -17.584 0
endloop
@@ -10936,13 +10936,13 @@ solid OpenSCAD_Model
facet normal -0.674318 0.738441 0
outer loop
vertex -19.8743 -17.7693 0
- vertex -19.6713 -17.584 -0.1
- vertex -19.8743 -17.7693 -0.1
+ vertex -19.6713 -17.584 -0.2
+ vertex -19.8743 -17.7693 -0.2
endloop
endfacet
facet normal -0.55704 0.830486 0
outer loop
- vertex -19.8743 -17.7693 -0.1
+ vertex -19.8743 -17.7693 -0.2
vertex -20.1009 -17.9213 0
vertex -19.8743 -17.7693 0
endloop
@@ -10950,13 +10950,13 @@ solid OpenSCAD_Model
facet normal -0.55704 0.830486 0
outer loop
vertex -20.1009 -17.9213 0
- vertex -19.8743 -17.7693 -0.1
- vertex -20.1009 -17.9213 -0.1
+ vertex -19.8743 -17.7693 -0.2
+ vertex -20.1009 -17.9213 -0.2
endloop
endfacet
facet normal -0.42623 0.904615 0
outer loop
- vertex -20.1009 -17.9213 -0.1
+ vertex -20.1009 -17.9213 -0.2
vertex -20.3435 -18.0357 0
vertex -20.1009 -17.9213 0
endloop
@@ -10964,13 +10964,13 @@ solid OpenSCAD_Model
facet normal -0.42623 0.904615 0
outer loop
vertex -20.3435 -18.0357 0
- vertex -20.1009 -17.9213 -0.1
- vertex -20.3435 -18.0357 -0.1
+ vertex -20.1009 -17.9213 -0.2
+ vertex -20.3435 -18.0357 -0.2
endloop
endfacet
facet normal -0.276826 0.96092 0
outer loop
- vertex -20.3435 -18.0357 -0.1
+ vertex -20.3435 -18.0357 -0.2
vertex -20.5945 -18.108 0
vertex -20.3435 -18.0357 0
endloop
@@ -10978,13 +10978,13 @@ solid OpenSCAD_Model
facet normal -0.276826 0.96092 0
outer loop
vertex -20.5945 -18.108 0
- vertex -20.3435 -18.0357 -0.1
- vertex -20.5945 -18.108 -0.1
+ vertex -20.3435 -18.0357 -0.2
+ vertex -20.5945 -18.108 -0.2
endloop
endfacet
facet normal -0.102621 0.994721 0
outer loop
- vertex -20.5945 -18.108 -0.1
+ vertex -20.5945 -18.108 -0.2
vertex -20.8463 -18.1339 0
vertex -20.5945 -18.108 0
endloop
@@ -10992,13 +10992,13 @@ solid OpenSCAD_Model
facet normal -0.102621 0.994721 0
outer loop
vertex -20.8463 -18.1339 0
- vertex -20.5945 -18.108 -0.1
- vertex -20.8463 -18.1339 -0.1
+ vertex -20.5945 -18.108 -0.2
+ vertex -20.8463 -18.1339 -0.2
endloop
endfacet
facet normal 0.100283 0.994959 -0
outer loop
- vertex -20.8463 -18.1339 -0.1
+ vertex -20.8463 -18.1339 -0.2
vertex -21.0912 -18.1093 0
vertex -20.8463 -18.1339 0
endloop
@@ -11006,13 +11006,13 @@ solid OpenSCAD_Model
facet normal 0.100283 0.994959 0
outer loop
vertex -21.0912 -18.1093 0
- vertex -20.8463 -18.1339 -0.1
- vertex -21.0912 -18.1093 -0.1
+ vertex -20.8463 -18.1339 -0.2
+ vertex -21.0912 -18.1093 -0.2
endloop
endfacet
facet normal 0.237758 0.971324 -0
outer loop
- vertex -21.0912 -18.1093 -0.1
+ vertex -21.0912 -18.1093 -0.2
vertex -21.2545 -18.0693 0
vertex -21.0912 -18.1093 0
endloop
@@ -11020,13 +11020,13 @@ solid OpenSCAD_Model
facet normal 0.237758 0.971324 0
outer loop
vertex -21.2545 -18.0693 0
- vertex -21.0912 -18.1093 -0.1
- vertex -21.2545 -18.0693 -0.1
+ vertex -21.0912 -18.1093 -0.2
+ vertex -21.2545 -18.0693 -0.2
endloop
endfacet
facet normal 0.389432 0.921055 -0
outer loop
- vertex -21.2545 -18.0693 -0.1
+ vertex -21.2545 -18.0693 -0.2
vertex -21.378 -18.0171 0
vertex -21.2545 -18.0693 0
endloop
@@ -11034,13 +11034,13 @@ solid OpenSCAD_Model
facet normal 0.389432 0.921055 0
outer loop
vertex -21.378 -18.0171 0
- vertex -21.2545 -18.0693 -0.1
- vertex -21.378 -18.0171 -0.1
+ vertex -21.2545 -18.0693 -0.2
+ vertex -21.378 -18.0171 -0.2
endloop
endfacet
facet normal 0.679889 0.733315 -0
outer loop
- vertex -21.378 -18.0171 -0.1
+ vertex -21.378 -18.0171 -0.2
vertex -21.4669 -17.9347 0
vertex -21.378 -18.0171 0
endloop
@@ -11048,139 +11048,139 @@ solid OpenSCAD_Model
facet normal 0.679889 0.733315 0
outer loop
vertex -21.4669 -17.9347 0
- vertex -21.378 -18.0171 -0.1
- vertex -21.4669 -17.9347 -0.1
+ vertex -21.378 -18.0171 -0.2
+ vertex -21.4669 -17.9347 -0.2
endloop
endfacet
facet normal 0.910139 0.414303 0
outer loop
vertex -21.4669 -17.9347 0
- vertex -21.5263 -17.8042 -0.1
+ vertex -21.5263 -17.8042 -0.2
vertex -21.5263 -17.8042 0
endloop
endfacet
facet normal 0.910139 0.414303 0
outer loop
- vertex -21.5263 -17.8042 -0.1
+ vertex -21.5263 -17.8042 -0.2
vertex -21.4669 -17.9347 0
- vertex -21.4669 -17.9347 -0.1
+ vertex -21.4669 -17.9347 -0.2
endloop
endfacet
facet normal 0.984407 0.175905 0
outer loop
vertex -21.5263 -17.8042 0
- vertex -21.5614 -17.6077 -0.1
+ vertex -21.5614 -17.6077 -0.2
vertex -21.5614 -17.6077 0
endloop
endfacet
facet normal 0.984407 0.175905 0
outer loop
- vertex -21.5614 -17.6077 -0.1
+ vertex -21.5614 -17.6077 -0.2
vertex -21.5263 -17.8042 0
- vertex -21.5263 -17.8042 -0.1
+ vertex -21.5263 -17.8042 -0.2
endloop
endfacet
facet normal 0.998374 0.057002 0
outer loop
vertex -21.5614 -17.6077 0
- vertex -21.5774 -17.3273 -0.1
+ vertex -21.5774 -17.3273 -0.2
vertex -21.5774 -17.3273 0
endloop
endfacet
facet normal 0.998374 0.057002 0
outer loop
- vertex -21.5774 -17.3273 -0.1
+ vertex -21.5774 -17.3273 -0.2
vertex -21.5614 -17.6077 0
- vertex -21.5614 -17.6077 -0.1
+ vertex -21.5614 -17.6077 -0.2
endloop
endfacet
facet normal 0.999987 -0.00513458 0
outer loop
vertex -21.5774 -17.3273 0
- vertex -21.5729 -16.4428 -0.1
+ vertex -21.5729 -16.4428 -0.2
vertex -21.5729 -16.4428 0
endloop
endfacet
facet normal 0.999987 -0.00513458 0
outer loop
- vertex -21.5729 -16.4428 -0.1
+ vertex -21.5729 -16.4428 -0.2
vertex -21.5774 -17.3273 0
- vertex -21.5774 -17.3273 -0.1
+ vertex -21.5774 -17.3273 -0.2
endloop
endfacet
facet normal 0.999992 -0.00401347 0
outer loop
vertex -21.5729 -16.4428 0
- vertex -21.5693 -15.5508 -0.1
+ vertex -21.5693 -15.5508 -0.2
vertex -21.5693 -15.5508 0
endloop
endfacet
facet normal 0.999992 -0.00401347 0
outer loop
- vertex -21.5693 -15.5508 -0.1
+ vertex -21.5693 -15.5508 -0.2
vertex -21.5729 -16.4428 0
- vertex -21.5729 -16.4428 -0.1
+ vertex -21.5729 -16.4428 -0.2
endloop
endfacet
facet normal 0.997925 0.0643945 0
outer loop
vertex -21.5693 -15.5508 0
- vertex -21.5879 -15.2616 -0.1
+ vertex -21.5879 -15.2616 -0.2
vertex -21.5879 -15.2616 0
endloop
endfacet
facet normal 0.997925 0.0643945 0
outer loop
- vertex -21.5879 -15.2616 -0.1
+ vertex -21.5879 -15.2616 -0.2
vertex -21.5693 -15.5508 0
- vertex -21.5693 -15.5508 -0.1
+ vertex -21.5693 -15.5508 -0.2
endloop
endfacet
facet normal 0.982338 0.187114 0
outer loop
vertex -21.5879 -15.2616 0
- vertex -21.6284 -15.0493 -0.1
+ vertex -21.6284 -15.0493 -0.2
vertex -21.6284 -15.0493 0
endloop
endfacet
facet normal 0.982338 0.187114 0
outer loop
- vertex -21.6284 -15.0493 -0.1
+ vertex -21.6284 -15.0493 -0.2
vertex -21.5879 -15.2616 0
- vertex -21.5879 -15.2616 -0.1
+ vertex -21.5879 -15.2616 -0.2
endloop
endfacet
facet normal 0.915958 0.401274 0
outer loop
vertex -21.6284 -15.0493 0
- vertex -21.6966 -14.8935 -0.1
+ vertex -21.6966 -14.8935 -0.2
vertex -21.6966 -14.8935 0
endloop
endfacet
facet normal 0.915958 0.401274 0
outer loop
- vertex -21.6966 -14.8935 -0.1
+ vertex -21.6966 -14.8935 -0.2
vertex -21.6284 -15.0493 0
- vertex -21.6284 -15.0493 -0.1
+ vertex -21.6284 -15.0493 -0.2
endloop
endfacet
facet normal 0.761577 0.648074 0
outer loop
vertex -21.6966 -14.8935 0
- vertex -21.7989 -14.7733 -0.1
+ vertex -21.7989 -14.7733 -0.2
vertex -21.7989 -14.7733 0
endloop
endfacet
facet normal 0.761577 0.648074 0
outer loop
- vertex -21.7989 -14.7733 -0.1
+ vertex -21.7989 -14.7733 -0.2
vertex -21.6966 -14.8935 0
- vertex -21.6966 -14.8935 -0.1
+ vertex -21.6966 -14.8935 -0.2
endloop
endfacet
facet normal 0.593991 0.804472 -0
outer loop
- vertex -21.7989 -14.7733 -0.1
+ vertex -21.7989 -14.7733 -0.2
vertex -21.9412 -14.6683 0
vertex -21.7989 -14.7733 0
endloop
@@ -11188,13 +11188,13 @@ solid OpenSCAD_Model
facet normal 0.593991 0.804472 0
outer loop
vertex -21.9412 -14.6683 0
- vertex -21.7989 -14.7733 -0.1
- vertex -21.9412 -14.6683 -0.1
+ vertex -21.7989 -14.7733 -0.2
+ vertex -21.9412 -14.6683 -0.2
endloop
endfacet
facet normal 0.506241 0.862392 -0
outer loop
- vertex -21.9412 -14.6683 -0.1
+ vertex -21.9412 -14.6683 -0.2
vertex -22.1296 -14.5577 0
vertex -21.9412 -14.6683 0
endloop
@@ -11202,13 +11202,13 @@ solid OpenSCAD_Model
facet normal 0.506241 0.862392 0
outer loop
vertex -22.1296 -14.5577 0
- vertex -21.9412 -14.6683 -0.1
- vertex -22.1296 -14.5577 -0.1
+ vertex -21.9412 -14.6683 -0.2
+ vertex -22.1296 -14.5577 -0.2
endloop
endfacet
facet normal 0.406178 0.913794 -0
outer loop
- vertex -22.1296 -14.5577 -0.1
+ vertex -22.1296 -14.5577 -0.2
vertex -22.3213 -14.4724 0
vertex -22.1296 -14.5577 0
endloop
@@ -11216,13 +11216,13 @@ solid OpenSCAD_Model
facet normal 0.406178 0.913794 0
outer loop
vertex -22.3213 -14.4724 0
- vertex -22.1296 -14.5577 -0.1
- vertex -22.3213 -14.4724 -0.1
+ vertex -22.1296 -14.5577 -0.2
+ vertex -22.3213 -14.4724 -0.2
endloop
endfacet
facet normal 0.272589 0.962131 -0
outer loop
- vertex -22.3213 -14.4724 -0.1
+ vertex -22.3213 -14.4724 -0.2
vertex -22.5778 -14.3998 0
vertex -22.3213 -14.4724 0
endloop
@@ -11230,13 +11230,13 @@ solid OpenSCAD_Model
facet normal 0.272589 0.962131 0
outer loop
vertex -22.5778 -14.3998 0
- vertex -22.3213 -14.4724 -0.1
- vertex -22.5778 -14.3998 -0.1
+ vertex -22.3213 -14.4724 -0.2
+ vertex -22.5778 -14.3998 -0.2
endloop
endfacet
facet normal 0.181059 0.983472 -0
outer loop
- vertex -22.5778 -14.3998 -0.1
+ vertex -22.5778 -14.3998 -0.2
vertex -22.9103 -14.3386 0
vertex -22.5778 -14.3998 0
endloop
@@ -11244,13 +11244,13 @@ solid OpenSCAD_Model
facet normal 0.181059 0.983472 0
outer loop
vertex -22.9103 -14.3386 0
- vertex -22.5778 -14.3998 -0.1
- vertex -22.9103 -14.3386 -0.1
+ vertex -22.5778 -14.3998 -0.2
+ vertex -22.9103 -14.3386 -0.2
endloop
endfacet
facet normal 0.120311 0.992736 -0
outer loop
- vertex -22.9103 -14.3386 -0.1
+ vertex -22.9103 -14.3386 -0.2
vertex -23.3301 -14.2877 0
vertex -22.9103 -14.3386 0
endloop
@@ -11258,13 +11258,13 @@ solid OpenSCAD_Model
facet normal 0.120311 0.992736 0
outer loop
vertex -23.3301 -14.2877 0
- vertex -22.9103 -14.3386 -0.1
- vertex -23.3301 -14.2877 -0.1
+ vertex -22.9103 -14.3386 -0.2
+ vertex -23.3301 -14.2877 -0.2
endloop
endfacet
facet normal 0.0654234 0.997858 -0
outer loop
- vertex -23.3301 -14.2877 -0.1
+ vertex -23.3301 -14.2877 -0.2
vertex -24.4767 -14.2125 0
vertex -23.3301 -14.2877 0
endloop
@@ -11272,13 +11272,13 @@ solid OpenSCAD_Model
facet normal 0.0654234 0.997858 0
outer loop
vertex -24.4767 -14.2125 0
- vertex -23.3301 -14.2877 -0.1
- vertex -24.4767 -14.2125 -0.1
+ vertex -23.3301 -14.2877 -0.2
+ vertex -24.4767 -14.2125 -0.2
endloop
endfacet
facet normal 0.0288976 0.999582 -0
outer loop
- vertex -24.4767 -14.2125 -0.1
+ vertex -24.4767 -14.2125 -0.2
vertex -26.1077 -14.1654 0
vertex -24.4767 -14.2125 0
endloop
@@ -11286,13 +11286,13 @@ solid OpenSCAD_Model
facet normal 0.0288976 0.999582 0
outer loop
vertex -26.1077 -14.1654 0
- vertex -24.4767 -14.2125 -0.1
- vertex -26.1077 -14.1654 -0.1
+ vertex -24.4767 -14.2125 -0.2
+ vertex -26.1077 -14.1654 -0.2
endloop
endfacet
facet normal 0.0099076 0.999951 -0
outer loop
- vertex -26.1077 -14.1654 -0.1
+ vertex -26.1077 -14.1654 -0.2
vertex -28.2448 -14.1442 0
vertex -26.1077 -14.1654 0
endloop
@@ -11300,13 +11300,13 @@ solid OpenSCAD_Model
facet normal 0.0099076 0.999951 0
outer loop
vertex -28.2448 -14.1442 0
- vertex -26.1077 -14.1654 -0.1
- vertex -28.2448 -14.1442 -0.1
+ vertex -26.1077 -14.1654 -0.2
+ vertex -28.2448 -14.1442 -0.2
endloop
endfacet
facet normal -0.0184714 0.999829 0
outer loop
- vertex -28.2448 -14.1442 -0.1
+ vertex -28.2448 -14.1442 -0.2
vertex -28.9898 -14.1579 0
vertex -28.2448 -14.1442 0
endloop
@@ -11314,13 +11314,13 @@ solid OpenSCAD_Model
facet normal -0.0184714 0.999829 0
outer loop
vertex -28.9898 -14.1579 0
- vertex -28.2448 -14.1442 -0.1
- vertex -28.9898 -14.1579 -0.1
+ vertex -28.2448 -14.1442 -0.2
+ vertex -28.9898 -14.1579 -0.2
endloop
endfacet
facet normal -0.0583775 0.998295 0
outer loop
- vertex -28.9898 -14.1579 -0.1
+ vertex -28.9898 -14.1579 -0.2
vertex -29.549 -14.1906 0
vertex -28.9898 -14.1579 0
endloop
@@ -11328,13 +11328,13 @@ solid OpenSCAD_Model
facet normal -0.0583775 0.998295 0
outer loop
vertex -29.549 -14.1906 0
- vertex -28.9898 -14.1579 -0.1
- vertex -29.549 -14.1906 -0.1
+ vertex -28.9898 -14.1579 -0.2
+ vertex -29.549 -14.1906 -0.2
endloop
endfacet
facet normal -0.134346 0.990934 0
outer loop
- vertex -29.549 -14.1906 -0.1
+ vertex -29.549 -14.1906 -0.2
vertex -29.9449 -14.2443 0
vertex -29.549 -14.1906 0
endloop
@@ -11342,13 +11342,13 @@ solid OpenSCAD_Model
facet normal -0.134346 0.990934 0
outer loop
vertex -29.9449 -14.2443 0
- vertex -29.549 -14.1906 -0.1
- vertex -29.9449 -14.2443 -0.1
+ vertex -29.549 -14.1906 -0.2
+ vertex -29.9449 -14.2443 -0.2
endloop
endfacet
facet normal -0.287948 0.957646 0
outer loop
- vertex -29.9449 -14.2443 -0.1
+ vertex -29.9449 -14.2443 -0.2
vertex -30.1999 -14.321 0
vertex -29.9449 -14.2443 0
endloop
@@ -11356,13 +11356,13 @@ solid OpenSCAD_Model
facet normal -0.287948 0.957646 0
outer loop
vertex -30.1999 -14.321 0
- vertex -29.9449 -14.2443 -0.1
- vertex -30.1999 -14.321 -0.1
+ vertex -29.9449 -14.2443 -0.2
+ vertex -30.1999 -14.321 -0.2
endloop
endfacet
facet normal -0.503498 0.863996 0
outer loop
- vertex -30.1999 -14.321 -0.1
+ vertex -30.1999 -14.321 -0.2
vertex -30.2816 -14.3686 0
vertex -30.1999 -14.321 0
endloop
@@ -11370,13 +11370,13 @@ solid OpenSCAD_Model
facet normal -0.503498 0.863996 0
outer loop
vertex -30.2816 -14.3686 0
- vertex -30.1999 -14.321 -0.1
- vertex -30.2816 -14.3686 -0.1
+ vertex -30.1999 -14.321 -0.2
+ vertex -30.2816 -14.3686 -0.2
endloop
endfacet
facet normal -0.702151 0.712028 0
outer loop
- vertex -30.2816 -14.3686 -0.1
+ vertex -30.2816 -14.3686 -0.2
vertex -30.3364 -14.4227 0
vertex -30.2816 -14.3686 0
endloop
@@ -11384,237 +11384,237 @@ solid OpenSCAD_Model
facet normal -0.702151 0.712028 0
outer loop
vertex -30.3364 -14.4227 0
- vertex -30.2816 -14.3686 -0.1
- vertex -30.3364 -14.4227 -0.1
+ vertex -30.2816 -14.3686 -0.2
+ vertex -30.3364 -14.4227 -0.2
endloop
endfacet
facet normal -0.891918 0.452198 0
outer loop
- vertex -30.3673 -14.4836 -0.1
+ vertex -30.3673 -14.4836 -0.2
vertex -30.3364 -14.4227 0
- vertex -30.3364 -14.4227 -0.1
+ vertex -30.3364 -14.4227 -0.2
endloop
endfacet
facet normal -0.891918 0.452198 0
outer loop
vertex -30.3364 -14.4227 0
- vertex -30.3673 -14.4836 -0.1
+ vertex -30.3673 -14.4836 -0.2
vertex -30.3673 -14.4836 0
endloop
endfacet
facet normal -0.990022 0.140913 0
outer loop
- vertex -30.377 -14.5514 -0.1
+ vertex -30.377 -14.5514 -0.2
vertex -30.3673 -14.4836 0
- vertex -30.3673 -14.4836 -0.1
+ vertex -30.3673 -14.4836 -0.2
endloop
endfacet
facet normal -0.990022 0.140913 0
outer loop
vertex -30.3673 -14.4836 0
- vertex -30.377 -14.5514 -0.1
+ vertex -30.377 -14.5514 -0.2
vertex -30.377 -14.5514 0
endloop
endfacet
facet normal -0.969743 0.244126 0
outer loop
- vertex -30.4158 -14.7057 -0.1
+ vertex -30.4158 -14.7057 -0.2
vertex -30.377 -14.5514 0
- vertex -30.377 -14.5514 -0.1
+ vertex -30.377 -14.5514 -0.2
endloop
endfacet
facet normal -0.969743 0.244126 0
outer loop
vertex -30.377 -14.5514 0
- vertex -30.4158 -14.7057 -0.1
+ vertex -30.4158 -14.7057 -0.2
vertex -30.4158 -14.7057 0
endloop
endfacet
facet normal -0.925454 0.378859 0
outer loop
- vertex -30.5215 -14.964 -0.1
+ vertex -30.5215 -14.964 -0.2
vertex -30.4158 -14.7057 0
- vertex -30.4158 -14.7057 -0.1
+ vertex -30.4158 -14.7057 -0.2
endloop
endfacet
facet normal -0.925454 0.378859 0
outer loop
vertex -30.4158 -14.7057 0
- vertex -30.5215 -14.964 -0.1
+ vertex -30.5215 -14.964 -0.2
vertex -30.5215 -14.964 0
endloop
endfacet
facet normal -0.901668 0.432429 0
outer loop
- vertex -30.678 -15.2903 -0.1
+ vertex -30.678 -15.2903 -0.2
vertex -30.5215 -14.964 0
- vertex -30.5215 -14.964 -0.1
+ vertex -30.5215 -14.964 -0.2
endloop
endfacet
facet normal -0.901668 0.432429 0
outer loop
vertex -30.5215 -14.964 0
- vertex -30.678 -15.2903 -0.1
+ vertex -30.678 -15.2903 -0.2
vertex -30.678 -15.2903 0
endloop
endfacet
facet normal -0.882363 0.47057 0
outer loop
- vertex -30.8691 -15.6487 -0.1
+ vertex -30.8691 -15.6487 -0.2
vertex -30.678 -15.2903 0
- vertex -30.678 -15.2903 -0.1
+ vertex -30.678 -15.2903 -0.2
endloop
endfacet
facet normal -0.882363 0.47057 0
outer loop
vertex -30.678 -15.2903 0
- vertex -30.8691 -15.6487 -0.1
+ vertex -30.8691 -15.6487 -0.2
vertex -30.8691 -15.6487 0
endloop
endfacet
facet normal -0.892172 0.451696 0
outer loop
- vertex -31.1223 -16.1487 -0.1
+ vertex -31.1223 -16.1487 -0.2
vertex -30.8691 -15.6487 0
- vertex -30.8691 -15.6487 -0.1
+ vertex -30.8691 -15.6487 -0.2
endloop
endfacet
facet normal -0.892172 0.451696 0
outer loop
vertex -30.8691 -15.6487 0
- vertex -31.1223 -16.1487 -0.1
+ vertex -31.1223 -16.1487 -0.2
vertex -31.1223 -16.1487 0
endloop
endfacet
facet normal -0.909515 0.415671 0
outer loop
- vertex -31.4477 -16.8607 -0.1
+ vertex -31.4477 -16.8607 -0.2
vertex -31.1223 -16.1487 0
- vertex -31.1223 -16.1487 -0.1
+ vertex -31.1223 -16.1487 -0.2
endloop
endfacet
facet normal -0.909515 0.415671 0
outer loop
vertex -31.1223 -16.1487 0
- vertex -31.4477 -16.8607 -0.1
+ vertex -31.4477 -16.8607 -0.2
vertex -31.4477 -16.8607 0
endloop
endfacet
facet normal -0.918988 0.394285 0
outer loop
- vertex -31.8034 -17.6899 -0.1
+ vertex -31.8034 -17.6899 -0.2
vertex -31.4477 -16.8607 0
- vertex -31.4477 -16.8607 -0.1
+ vertex -31.4477 -16.8607 -0.2
endloop
endfacet
facet normal -0.918988 0.394285 0
outer loop
vertex -31.4477 -16.8607 0
- vertex -31.8034 -17.6899 -0.1
+ vertex -31.8034 -17.6899 -0.2
vertex -31.8034 -17.6899 0
endloop
endfacet
facet normal -0.927129 0.374741 0
outer loop
- vertex -32.1476 -18.5412 -0.1
+ vertex -32.1476 -18.5412 -0.2
vertex -31.8034 -17.6899 0
- vertex -31.8034 -17.6899 -0.1
+ vertex -31.8034 -17.6899 -0.2
endloop
endfacet
facet normal -0.927129 0.374741 0
outer loop
vertex -31.8034 -17.6899 0
- vertex -32.1476 -18.5412 -0.1
+ vertex -32.1476 -18.5412 -0.2
vertex -32.1476 -18.5412 0
endloop
endfacet
facet normal -0.929897 0.36782 0
outer loop
- vertex -33.2902 -21.4299 -0.1
+ vertex -33.2902 -21.4299 -0.2
vertex -32.1476 -18.5412 0
- vertex -32.1476 -18.5412 -0.1
+ vertex -32.1476 -18.5412 -0.2
endloop
endfacet
facet normal -0.929897 0.36782 0
outer loop
vertex -32.1476 -18.5412 0
- vertex -33.2902 -21.4299 -0.1
+ vertex -33.2902 -21.4299 -0.2
vertex -33.2902 -21.4299 0
endloop
endfacet
facet normal -0.931897 0.362724 0
outer loop
- vertex -33.4325 -21.7956 -0.1
+ vertex -33.4325 -21.7956 -0.2
vertex -33.2902 -21.4299 0
- vertex -33.2902 -21.4299 -0.1
+ vertex -33.2902 -21.4299 -0.2
endloop
endfacet
facet normal -0.931897 0.362724 0
outer loop
vertex -33.2902 -21.4299 0
- vertex -33.4325 -21.7956 -0.1
+ vertex -33.4325 -21.7956 -0.2
vertex -33.4325 -21.7956 0
endloop
endfacet
facet normal -0.968991 0.247098 0
outer loop
- vertex -33.503 -22.0719 -0.1
+ vertex -33.503 -22.0719 -0.2
vertex -33.4325 -21.7956 0
- vertex -33.4325 -21.7956 -0.1
+ vertex -33.4325 -21.7956 -0.2
endloop
endfacet
facet normal -0.968991 0.247098 0
outer loop
vertex -33.4325 -21.7956 0
- vertex -33.503 -22.0719 -0.1
+ vertex -33.503 -22.0719 -0.2
vertex -33.503 -22.0719 0
endloop
endfacet
facet normal -0.999995 -0.00318704 0
outer loop
- vertex -33.5026 -22.1809 -0.1
+ vertex -33.5026 -22.1809 -0.2
vertex -33.503 -22.0719 0
- vertex -33.503 -22.0719 -0.1
+ vertex -33.503 -22.0719 -0.2
endloop
endfacet
facet normal -0.999995 -0.00318704 0
outer loop
vertex -33.503 -22.0719 0
- vertex -33.5026 -22.1809 -0.1
+ vertex -33.5026 -22.1809 -0.2
vertex -33.5026 -22.1809 0
endloop
endfacet
facet normal -0.954349 -0.298693 0
outer loop
- vertex -33.4739 -22.2725 -0.1
+ vertex -33.4739 -22.2725 -0.2
vertex -33.5026 -22.1809 0
- vertex -33.5026 -22.1809 -0.1
+ vertex -33.5026 -22.1809 -0.2
endloop
endfacet
facet normal -0.954349 -0.298693 0
outer loop
vertex -33.5026 -22.1809 0
- vertex -33.4739 -22.2725 -0.1
+ vertex -33.4739 -22.2725 -0.2
vertex -33.4739 -22.2725 0
endloop
endfacet
facet normal -0.782807 -0.622265 0
outer loop
- vertex -33.4135 -22.3486 -0.1
+ vertex -33.4135 -22.3486 -0.2
vertex -33.4739 -22.2725 0
- vertex -33.4739 -22.2725 -0.1
+ vertex -33.4739 -22.2725 -0.2
endloop
endfacet
facet normal -0.782807 -0.622265 0
outer loop
vertex -33.4739 -22.2725 0
- vertex -33.4135 -22.3486 -0.1
+ vertex -33.4135 -22.3486 -0.2
vertex -33.4135 -22.3486 0
endloop
endfacet
facet normal -0.544751 -0.838598 0
outer loop
- vertex -33.4135 -22.3486 -0.1
+ vertex -33.4135 -22.3486 -0.2
vertex -33.3177 -22.4108 0
vertex -33.4135 -22.3486 0
endloop
@@ -11622,13 +11622,13 @@ solid OpenSCAD_Model
facet normal -0.544751 -0.838598 -0
outer loop
vertex -33.3177 -22.4108 0
- vertex -33.4135 -22.3486 -0.1
- vertex -33.3177 -22.4108 -0.1
+ vertex -33.4135 -22.3486 -0.2
+ vertex -33.3177 -22.4108 -0.2
endloop
endfacet
facet normal -0.348432 -0.937334 0
outer loop
- vertex -33.3177 -22.4108 -0.1
+ vertex -33.3177 -22.4108 -0.2
vertex -33.1833 -22.4608 0
vertex -33.3177 -22.4108 0
endloop
@@ -11636,13 +11636,13 @@ solid OpenSCAD_Model
facet normal -0.348432 -0.937334 -0
outer loop
vertex -33.1833 -22.4608 0
- vertex -33.3177 -22.4108 -0.1
- vertex -33.1833 -22.4608 -0.1
+ vertex -33.3177 -22.4108 -0.2
+ vertex -33.1833 -22.4608 -0.2
endloop
endfacet
facet normal -0.218014 -0.975946 0
outer loop
- vertex -33.1833 -22.4608 -0.1
+ vertex -33.1833 -22.4608 -0.2
vertex -33.0067 -22.5002 0
vertex -33.1833 -22.4608 0
endloop
@@ -11650,13 +11650,13 @@ solid OpenSCAD_Model
facet normal -0.218014 -0.975946 -0
outer loop
vertex -33.0067 -22.5002 0
- vertex -33.1833 -22.4608 -0.1
- vertex -33.0067 -22.5002 -0.1
+ vertex -33.1833 -22.4608 -0.2
+ vertex -33.0067 -22.5002 -0.2
endloop
endfacet
facet normal -0.108894 -0.994053 0
outer loop
- vertex -33.0067 -22.5002 -0.1
+ vertex -33.0067 -22.5002 -0.2
vertex -32.5132 -22.5543 0
vertex -33.0067 -22.5002 0
endloop
@@ -11664,13 +11664,13 @@ solid OpenSCAD_Model
facet normal -0.108894 -0.994053 -0
outer loop
vertex -32.5132 -22.5543 0
- vertex -33.0067 -22.5002 -0.1
- vertex -32.5132 -22.5543 -0.1
+ vertex -33.0067 -22.5002 -0.2
+ vertex -32.5132 -22.5543 -0.2
endloop
endfacet
facet normal -0.0456949 -0.998955 0
outer loop
- vertex -32.5132 -22.5543 -0.1
+ vertex -32.5132 -22.5543 -0.2
vertex -31.8095 -22.5865 0
vertex -32.5132 -22.5543 0
endloop
@@ -11678,13 +11678,13 @@ solid OpenSCAD_Model
facet normal -0.0456949 -0.998955 -0
outer loop
vertex -31.8095 -22.5865 0
- vertex -32.5132 -22.5543 -0.1
- vertex -31.8095 -22.5865 -0.1
+ vertex -32.5132 -22.5543 -0.2
+ vertex -31.8095 -22.5865 -0.2
endloop
endfacet
facet normal -0.0252584 -0.999681 0
outer loop
- vertex -31.8095 -22.5865 -0.1
+ vertex -31.8095 -22.5865 -0.2
vertex -30.868 -22.6102 0
vertex -31.8095 -22.5865 0
endloop
@@ -11692,13 +11692,13 @@ solid OpenSCAD_Model
facet normal -0.0252584 -0.999681 -0
outer loop
vertex -30.868 -22.6102 0
- vertex -31.8095 -22.5865 -0.1
- vertex -30.868 -22.6102 -0.1
+ vertex -31.8095 -22.5865 -0.2
+ vertex -30.868 -22.6102 -0.2
endloop
endfacet
facet normal -0.0103281 -0.999947 0
outer loop
- vertex -30.868 -22.6102 -0.1
+ vertex -30.868 -22.6102 -0.2
vertex -30.2322 -22.6168 0
vertex -30.868 -22.6102 0
endloop
@@ -11706,13 +11706,13 @@ solid OpenSCAD_Model
facet normal -0.0103281 -0.999947 -0
outer loop
vertex -30.2322 -22.6168 0
- vertex -30.868 -22.6102 -0.1
- vertex -30.2322 -22.6168 -0.1
+ vertex -30.868 -22.6102 -0.2
+ vertex -30.2322 -22.6168 -0.2
endloop
endfacet
facet normal 0.0183057 -0.999832 0
outer loop
- vertex -30.2322 -22.6168 -0.1
+ vertex -30.2322 -22.6168 -0.2
vertex -29.6427 -22.606 0
vertex -30.2322 -22.6168 0
endloop
@@ -11720,13 +11720,13 @@ solid OpenSCAD_Model
facet normal 0.0183057 -0.999832 0
outer loop
vertex -29.6427 -22.606 0
- vertex -30.2322 -22.6168 -0.1
- vertex -29.6427 -22.606 -0.1
+ vertex -30.2322 -22.6168 -0.2
+ vertex -29.6427 -22.606 -0.2
endloop
endfacet
facet normal 0.0536309 -0.998561 0
outer loop
- vertex -29.6427 -22.606 -0.1
+ vertex -29.6427 -22.606 -0.2
vertex -29.0966 -22.5767 0
vertex -29.6427 -22.606 0
endloop
@@ -11734,13 +11734,13 @@ solid OpenSCAD_Model
facet normal 0.0536309 -0.998561 0
outer loop
vertex -29.0966 -22.5767 0
- vertex -29.6427 -22.606 -0.1
- vertex -29.0966 -22.5767 -0.1
+ vertex -29.6427 -22.606 -0.2
+ vertex -29.0966 -22.5767 -0.2
endloop
endfacet
facet normal 0.0966018 -0.995323 0
outer loop
- vertex -29.0966 -22.5767 -0.1
+ vertex -29.0966 -22.5767 -0.2
vertex -28.5914 -22.5277 0
vertex -29.0966 -22.5767 0
endloop
@@ -11748,13 +11748,13 @@ solid OpenSCAD_Model
facet normal 0.0966018 -0.995323 0
outer loop
vertex -28.5914 -22.5277 0
- vertex -29.0966 -22.5767 -0.1
- vertex -28.5914 -22.5277 -0.1
+ vertex -29.0966 -22.5767 -0.2
+ vertex -28.5914 -22.5277 -0.2
endloop
endfacet
facet normal 0.148005 -0.988987 0
outer loop
- vertex -28.5914 -22.5277 -0.1
+ vertex -28.5914 -22.5277 -0.2
vertex -28.1242 -22.4577 0
vertex -28.5914 -22.5277 0
endloop
@@ -11762,13 +11762,13 @@ solid OpenSCAD_Model
facet normal 0.148005 -0.988987 0
outer loop
vertex -28.1242 -22.4577 0
- vertex -28.5914 -22.5277 -0.1
- vertex -28.1242 -22.4577 -0.1
+ vertex -28.5914 -22.5277 -0.2
+ vertex -28.1242 -22.4577 -0.2
endloop
endfacet
facet normal 0.208284 -0.978068 0
outer loop
- vertex -28.1242 -22.4577 -0.1
+ vertex -28.1242 -22.4577 -0.2
vertex -27.6923 -22.3658 0
vertex -28.1242 -22.4577 0
endloop
@@ -11776,13 +11776,13 @@ solid OpenSCAD_Model
facet normal 0.208284 -0.978068 0
outer loop
vertex -27.6923 -22.3658 0
- vertex -28.1242 -22.4577 -0.1
- vertex -27.6923 -22.3658 -0.1
+ vertex -28.1242 -22.4577 -0.2
+ vertex -27.6923 -22.3658 -0.2
endloop
endfacet
facet normal 0.277178 -0.960818 0
outer loop
- vertex -27.6923 -22.3658 -0.1
+ vertex -27.6923 -22.3658 -0.2
vertex -27.2929 -22.2506 0
vertex -27.6923 -22.3658 0
endloop
@@ -11790,13 +11790,13 @@ solid OpenSCAD_Model
facet normal 0.277178 -0.960818 0
outer loop
vertex -27.2929 -22.2506 0
- vertex -27.6923 -22.3658 -0.1
- vertex -27.2929 -22.2506 -0.1
+ vertex -27.6923 -22.3658 -0.2
+ vertex -27.2929 -22.2506 -0.2
endloop
endfacet
facet normal 0.353412 -0.935468 0
outer loop
- vertex -27.2929 -22.2506 -0.1
+ vertex -27.2929 -22.2506 -0.2
vertex -26.9234 -22.1109 0
vertex -27.2929 -22.2506 0
endloop
@@ -11804,13 +11804,13 @@ solid OpenSCAD_Model
facet normal 0.353412 -0.935468 0
outer loop
vertex -26.9234 -22.1109 0
- vertex -27.2929 -22.2506 -0.1
- vertex -26.9234 -22.1109 -0.1
+ vertex -27.2929 -22.2506 -0.2
+ vertex -26.9234 -22.1109 -0.2
endloop
endfacet
facet normal 0.434442 -0.9007 0
outer loop
- vertex -26.9234 -22.1109 -0.1
+ vertex -26.9234 -22.1109 -0.2
vertex -26.5809 -21.9457 0
vertex -26.9234 -22.1109 0
endloop
@@ -11818,13 +11818,13 @@ solid OpenSCAD_Model
facet normal 0.434442 -0.9007 0
outer loop
vertex -26.5809 -21.9457 0
- vertex -26.9234 -22.1109 -0.1
- vertex -26.5809 -21.9457 -0.1
+ vertex -26.9234 -22.1109 -0.2
+ vertex -26.5809 -21.9457 -0.2
endloop
endfacet
facet normal 0.516567 -0.856247 0
outer loop
- vertex -26.5809 -21.9457 -0.1
+ vertex -26.5809 -21.9457 -0.2
vertex -26.2627 -21.7538 0
vertex -26.5809 -21.9457 0
endloop
@@ -11832,13 +11832,13 @@ solid OpenSCAD_Model
facet normal 0.516567 -0.856247 0
outer loop
vertex -26.2627 -21.7538 0
- vertex -26.5809 -21.9457 -0.1
- vertex -26.2627 -21.7538 -0.1
+ vertex -26.5809 -21.9457 -0.2
+ vertex -26.2627 -21.7538 -0.2
endloop
endfacet
facet normal 0.595538 -0.803327 0
outer loop
- vertex -26.2627 -21.7538 -0.1
+ vertex -26.2627 -21.7538 -0.2
vertex -25.9661 -21.5339 0
vertex -26.2627 -21.7538 0
endloop
@@ -11846,13 +11846,13 @@ solid OpenSCAD_Model
facet normal 0.595538 -0.803327 0
outer loop
vertex -25.9661 -21.5339 0
- vertex -26.2627 -21.7538 -0.1
- vertex -25.9661 -21.5339 -0.1
+ vertex -26.2627 -21.7538 -0.2
+ vertex -25.9661 -21.5339 -0.2
endloop
endfacet
facet normal 0.667477 -0.744631 0
outer loop
- vertex -25.9661 -21.5339 -0.1
+ vertex -25.9661 -21.5339 -0.2
vertex -25.6884 -21.2849 0
vertex -25.9661 -21.5339 0
endloop
@@ -11860,111 +11860,111 @@ solid OpenSCAD_Model
facet normal 0.667477 -0.744631 0
outer loop
vertex -25.6884 -21.2849 0
- vertex -25.9661 -21.5339 -0.1
- vertex -25.6884 -21.2849 -0.1
+ vertex -25.9661 -21.5339 -0.2
+ vertex -25.6884 -21.2849 -0.2
endloop
endfacet
facet normal 0.729709 -0.683757 0
outer loop
vertex -25.6884 -21.2849 0
- vertex -25.4267 -21.0057 -0.1
+ vertex -25.4267 -21.0057 -0.2
vertex -25.4267 -21.0057 0
endloop
endfacet
facet normal 0.729709 -0.683757 0
outer loop
- vertex -25.4267 -21.0057 -0.1
+ vertex -25.4267 -21.0057 -0.2
vertex -25.6884 -21.2849 0
- vertex -25.6884 -21.2849 -0.1
+ vertex -25.6884 -21.2849 -0.2
endloop
endfacet
facet normal 0.781167 -0.624322 0
outer loop
vertex -25.4267 -21.0057 0
- vertex -25.1784 -20.695 -0.1
+ vertex -25.1784 -20.695 -0.2
vertex -25.1784 -20.695 0
endloop
endfacet
facet normal 0.781167 -0.624322 0
outer loop
- vertex -25.1784 -20.695 -0.1
+ vertex -25.1784 -20.695 -0.2
vertex -25.4267 -21.0057 0
- vertex -25.4267 -21.0057 -0.1
+ vertex -25.4267 -21.0057 -0.2
endloop
endfacet
facet normal 0.82216 -0.569257 0
outer loop
vertex -25.1784 -20.695 0
- vertex -24.9407 -20.3516 -0.1
+ vertex -24.9407 -20.3516 -0.2
vertex -24.9407 -20.3516 0
endloop
endfacet
facet normal 0.82216 -0.569257 0
outer loop
- vertex -24.9407 -20.3516 -0.1
+ vertex -24.9407 -20.3516 -0.2
vertex -25.1784 -20.695 0
- vertex -25.1784 -20.695 -0.1
+ vertex -25.1784 -20.695 -0.2
endloop
endfacet
facet normal 0.853894 -0.520447 0
outer loop
vertex -24.9407 -20.3516 0
- vertex -24.7108 -19.9745 -0.1
+ vertex -24.7108 -19.9745 -0.2
vertex -24.7108 -19.9745 0
endloop
endfacet
facet normal 0.853894 -0.520447 0
outer loop
- vertex -24.7108 -19.9745 -0.1
+ vertex -24.7108 -19.9745 -0.2
vertex -24.9407 -20.3516 0
- vertex -24.9407 -20.3516 -0.1
+ vertex -24.9407 -20.3516 -0.2
endloop
endfacet
facet normal 0.85126 -0.524745 0
outer loop
vertex -24.7108 -19.9745 0
- vertex -24.3738 -19.4278 -0.1
+ vertex -24.3738 -19.4278 -0.2
vertex -24.3738 -19.4278 0
endloop
endfacet
facet normal 0.85126 -0.524745 0
outer loop
- vertex -24.3738 -19.4278 -0.1
+ vertex -24.3738 -19.4278 -0.2
vertex -24.7108 -19.9745 0
- vertex -24.7108 -19.9745 -0.1
+ vertex -24.7108 -19.9745 -0.2
endloop
endfacet
facet normal 0.796036 -0.60525 0
outer loop
vertex -24.3738 -19.4278 0
- vertex -24.2328 -19.2424 -0.1
+ vertex -24.2328 -19.2424 -0.2
vertex -24.2328 -19.2424 0
endloop
endfacet
facet normal 0.796036 -0.60525 0
outer loop
- vertex -24.2328 -19.2424 -0.1
+ vertex -24.2328 -19.2424 -0.2
vertex -24.3738 -19.4278 0
- vertex -24.3738 -19.4278 -0.1
+ vertex -24.3738 -19.4278 -0.2
endloop
endfacet
facet normal 0.714094 -0.70005 0
outer loop
vertex -24.2328 -19.2424 0
- vertex -24.0993 -19.1062 -0.1
+ vertex -24.0993 -19.1062 -0.2
vertex -24.0993 -19.1062 0
endloop
endfacet
facet normal 0.714094 -0.70005 0
outer loop
- vertex -24.0993 -19.1062 -0.1
+ vertex -24.0993 -19.1062 -0.2
vertex -24.2328 -19.2424 0
- vertex -24.2328 -19.2424 -0.1
+ vertex -24.2328 -19.2424 -0.2
endloop
endfacet
facet normal 0.573399 -0.819276 0
outer loop
- vertex -24.0993 -19.1062 -0.1
+ vertex -24.0993 -19.1062 -0.2
vertex -23.9653 -19.0124 0
vertex -24.0993 -19.1062 0
endloop
@@ -11972,13 +11972,13 @@ solid OpenSCAD_Model
facet normal 0.573399 -0.819276 0
outer loop
vertex -23.9653 -19.0124 0
- vertex -24.0993 -19.1062 -0.1
- vertex -23.9653 -19.0124 -0.1
+ vertex -24.0993 -19.1062 -0.2
+ vertex -23.9653 -19.0124 -0.2
endloop
endfacet
facet normal 0.378849 -0.925458 0
outer loop
- vertex -23.9653 -19.0124 -0.1
+ vertex -23.9653 -19.0124 -0.2
vertex -23.8226 -18.954 0
vertex -23.9653 -19.0124 0
endloop
@@ -11986,13 +11986,13 @@ solid OpenSCAD_Model
facet normal 0.378849 -0.925458 0
outer loop
vertex -23.8226 -18.954 0
- vertex -23.9653 -19.0124 -0.1
- vertex -23.8226 -18.954 -0.1
+ vertex -23.9653 -19.0124 -0.2
+ vertex -23.8226 -18.954 -0.2
endloop
endfacet
facet normal 0.184661 -0.982802 0
outer loop
- vertex -23.8226 -18.954 -0.1
+ vertex -23.8226 -18.954 -0.2
vertex -23.6632 -18.9241 0
vertex -23.8226 -18.954 0
endloop
@@ -12000,13 +12000,13 @@ solid OpenSCAD_Model
facet normal 0.184661 -0.982802 0
outer loop
vertex -23.6632 -18.9241 0
- vertex -23.8226 -18.954 -0.1
- vertex -23.6632 -18.9241 -0.1
+ vertex -23.8226 -18.954 -0.2
+ vertex -23.6632 -18.9241 -0.2
endloop
endfacet
facet normal 0.0457652 -0.998952 0
outer loop
- vertex -23.6632 -18.9241 -0.1
+ vertex -23.6632 -18.9241 -0.2
vertex -23.4791 -18.9156 0
vertex -23.6632 -18.9241 0
endloop
@@ -12014,13 +12014,13 @@ solid OpenSCAD_Model
facet normal 0.0457652 -0.998952 0
outer loop
vertex -23.4791 -18.9156 0
- vertex -23.6632 -18.9241 -0.1
- vertex -23.4791 -18.9156 -0.1
+ vertex -23.6632 -18.9241 -0.2
+ vertex -23.4791 -18.9156 -0.2
endloop
endfacet
facet normal -0.0578368 -0.998326 0
outer loop
- vertex -23.4791 -18.9156 -0.1
+ vertex -23.4791 -18.9156 -0.2
vertex -23.1186 -18.9365 0
vertex -23.4791 -18.9156 0
endloop
@@ -12028,13 +12028,13 @@ solid OpenSCAD_Model
facet normal -0.0578368 -0.998326 -0
outer loop
vertex -23.1186 -18.9365 0
- vertex -23.4791 -18.9156 -0.1
- vertex -23.1186 -18.9365 -0.1
+ vertex -23.4791 -18.9156 -0.2
+ vertex -23.1186 -18.9365 -0.2
endloop
endfacet
facet normal -0.193675 -0.981066 0
outer loop
- vertex -23.1186 -18.9365 -0.1
+ vertex -23.1186 -18.9365 -0.2
vertex -22.9739 -18.9651 0
vertex -23.1186 -18.9365 0
endloop
@@ -12042,13 +12042,13 @@ solid OpenSCAD_Model
facet normal -0.193675 -0.981066 -0
outer loop
vertex -22.9739 -18.9651 0
- vertex -23.1186 -18.9365 -0.1
- vertex -22.9739 -18.9651 -0.1
+ vertex -23.1186 -18.9365 -0.2
+ vertex -22.9739 -18.9651 -0.2
endloop
endfacet
facet normal -0.332798 -0.942998 0
outer loop
- vertex -22.9739 -18.9651 -0.1
+ vertex -22.9739 -18.9651 -0.2
vertex -22.8524 -19.008 0
vertex -22.9739 -18.9651 0
endloop
@@ -12056,13 +12056,13 @@ solid OpenSCAD_Model
facet normal -0.332798 -0.942998 -0
outer loop
vertex -22.8524 -19.008 0
- vertex -22.9739 -18.9651 -0.1
- vertex -22.8524 -19.008 -0.1
+ vertex -22.9739 -18.9651 -0.2
+ vertex -22.8524 -19.008 -0.2
endloop
endfacet
facet normal -0.512852 -0.858477 0
outer loop
- vertex -22.8524 -19.008 -0.1
+ vertex -22.8524 -19.008 -0.2
vertex -22.7539 -19.0668 0
vertex -22.8524 -19.008 0
endloop
@@ -12070,237 +12070,237 @@ solid OpenSCAD_Model
facet normal -0.512852 -0.858477 -0
outer loop
vertex -22.7539 -19.0668 0
- vertex -22.8524 -19.008 -0.1
- vertex -22.7539 -19.0668 -0.1
+ vertex -22.8524 -19.008 -0.2
+ vertex -22.7539 -19.0668 -0.2
endloop
endfacet
facet normal -0.710432 -0.703766 0
outer loop
- vertex -22.6782 -19.1432 -0.1
+ vertex -22.6782 -19.1432 -0.2
vertex -22.7539 -19.0668 0
- vertex -22.7539 -19.0668 -0.1
+ vertex -22.7539 -19.0668 -0.2
endloop
endfacet
facet normal -0.710432 -0.703766 0
outer loop
vertex -22.7539 -19.0668 0
- vertex -22.6782 -19.1432 -0.1
+ vertex -22.6782 -19.1432 -0.2
vertex -22.6782 -19.1432 0
endloop
endfacet
facet normal -0.873955 -0.486007 0
outer loop
- vertex -22.625 -19.2389 -0.1
+ vertex -22.625 -19.2389 -0.2
vertex -22.6782 -19.1432 0
- vertex -22.6782 -19.1432 -0.1
+ vertex -22.6782 -19.1432 -0.2
endloop
endfacet
facet normal -0.873955 -0.486007 0
outer loop
vertex -22.6782 -19.1432 0
- vertex -22.625 -19.2389 -0.1
+ vertex -22.625 -19.2389 -0.2
vertex -22.625 -19.2389 0
endloop
endfacet
facet normal -0.966491 -0.256701 0
outer loop
- vertex -22.594 -19.3555 -0.1
+ vertex -22.594 -19.3555 -0.2
vertex -22.625 -19.2389 0
- vertex -22.625 -19.2389 -0.1
+ vertex -22.625 -19.2389 -0.2
endloop
endfacet
facet normal -0.966491 -0.256701 0
outer loop
vertex -22.625 -19.2389 0
- vertex -22.594 -19.3555 -0.1
+ vertex -22.594 -19.3555 -0.2
vertex -22.594 -19.3555 0
endloop
endfacet
facet normal -0.997923 -0.0644192 0
outer loop
- vertex -22.585 -19.4947 -0.1
+ vertex -22.585 -19.4947 -0.2
vertex -22.594 -19.3555 0
- vertex -22.594 -19.3555 -0.1
+ vertex -22.594 -19.3555 -0.2
endloop
endfacet
facet normal -0.997923 -0.0644192 0
outer loop
vertex -22.594 -19.3555 0
- vertex -22.585 -19.4947 -0.1
+ vertex -22.585 -19.4947 -0.2
vertex -22.585 -19.4947 0
endloop
endfacet
facet normal -0.996972 0.0777592 0
outer loop
- vertex -22.5978 -19.6581 -0.1
+ vertex -22.5978 -19.6581 -0.2
vertex -22.585 -19.4947 0
- vertex -22.585 -19.4947 -0.1
+ vertex -22.585 -19.4947 -0.2
endloop
endfacet
facet normal -0.996972 0.0777592 0
outer loop
vertex -22.585 -19.4947 0
- vertex -22.5978 -19.6581 -0.1
+ vertex -22.5978 -19.6581 -0.2
vertex -22.5978 -19.6581 0
endloop
endfacet
facet normal -0.976488 0.215571 0
outer loop
- vertex -22.6874 -20.0641 -0.1
+ vertex -22.6874 -20.0641 -0.2
vertex -22.5978 -19.6581 0
- vertex -22.5978 -19.6581 -0.1
+ vertex -22.5978 -19.6581 -0.2
endloop
endfacet
facet normal -0.976488 0.215571 0
outer loop
vertex -22.5978 -19.6581 0
- vertex -22.6874 -20.0641 -0.1
+ vertex -22.6874 -20.0641 -0.2
vertex -22.6874 -20.0641 0
endloop
endfacet
facet normal -0.949119 0.314918 0
outer loop
- vertex -22.8608 -20.5868 -0.1
+ vertex -22.8608 -20.5868 -0.2
vertex -22.6874 -20.0641 0
- vertex -22.6874 -20.0641 -0.1
+ vertex -22.6874 -20.0641 -0.2
endloop
endfacet
facet normal -0.949119 0.314918 0
outer loop
vertex -22.6874 -20.0641 0
- vertex -22.8608 -20.5868 -0.1
+ vertex -22.8608 -20.5868 -0.2
vertex -22.8608 -20.5868 0
endloop
endfacet
facet normal -0.931342 0.364145 0
outer loop
- vertex -23.116 -21.2395 -0.1
+ vertex -23.116 -21.2395 -0.2
vertex -22.8608 -20.5868 0
- vertex -22.8608 -20.5868 -0.1
+ vertex -22.8608 -20.5868 -0.2
endloop
endfacet
facet normal -0.931342 0.364145 0
outer loop
vertex -22.8608 -20.5868 0
- vertex -23.116 -21.2395 -0.1
+ vertex -23.116 -21.2395 -0.2
vertex -23.116 -21.2395 0
endloop
endfacet
facet normal -0.926122 0.377225 0
outer loop
- vertex -24.3958 -24.3815 -0.1
+ vertex -24.3958 -24.3815 -0.2
vertex -23.116 -21.2395 0
- vertex -23.116 -21.2395 -0.1
+ vertex -23.116 -21.2395 -0.2
endloop
endfacet
facet normal -0.926122 0.377225 0
outer loop
vertex -23.116 -21.2395 0
- vertex -24.3958 -24.3815 -0.1
+ vertex -24.3958 -24.3815 -0.2
vertex -24.3958 -24.3815 0
endloop
endfacet
facet normal -0.92485 0.380332 0
outer loop
- vertex -24.9793 -25.8003 -0.1
+ vertex -24.9793 -25.8003 -0.2
vertex -24.3958 -24.3815 0
- vertex -24.3958 -24.3815 -0.1
+ vertex -24.3958 -24.3815 -0.2
endloop
endfacet
facet normal -0.92485 0.380332 0
outer loop
vertex -24.3958 -24.3815 0
- vertex -24.9793 -25.8003 -0.1
+ vertex -24.9793 -25.8003 -0.2
vertex -24.9793 -25.8003 0
endloop
endfacet
facet normal -0.917414 0.397935 0
outer loop
- vertex -25.4624 -26.9141 -0.1
+ vertex -25.4624 -26.9141 -0.2
vertex -24.9793 -25.8003 0
- vertex -24.9793 -25.8003 -0.1
+ vertex -24.9793 -25.8003 -0.2
endloop
endfacet
facet normal -0.917414 0.397935 0
outer loop
vertex -24.9793 -25.8003 0
- vertex -25.4624 -26.9141 -0.1
+ vertex -25.4624 -26.9141 -0.2
vertex -25.4624 -26.9141 0
endloop
endfacet
facet normal -0.901103 0.433605 0
outer loop
- vertex -25.8688 -27.7587 -0.1
+ vertex -25.8688 -27.7587 -0.2
vertex -25.4624 -26.9141 0
- vertex -25.4624 -26.9141 -0.1
+ vertex -25.4624 -26.9141 -0.2
endloop
endfacet
facet normal -0.901103 0.433605 0
outer loop
vertex -25.4624 -26.9141 0
- vertex -25.8688 -27.7587 -0.1
+ vertex -25.8688 -27.7587 -0.2
vertex -25.8688 -27.7587 0
endloop
endfacet
facet normal -0.87739 0.479778 0
outer loop
- vertex -26.0506 -28.0911 -0.1
+ vertex -26.0506 -28.0911 -0.2
vertex -25.8688 -27.7587 0
- vertex -25.8688 -27.7587 -0.1
+ vertex -25.8688 -27.7587 -0.2
endloop
endfacet
facet normal -0.87739 0.479778 0
outer loop
vertex -25.8688 -27.7587 0
- vertex -26.0506 -28.0911 -0.1
+ vertex -26.0506 -28.0911 -0.2
vertex -26.0506 -28.0911 0
endloop
endfacet
facet normal -0.851572 0.524237 0
outer loop
- vertex -26.2221 -28.3696 -0.1
+ vertex -26.2221 -28.3696 -0.2
vertex -26.0506 -28.0911 0
- vertex -26.0506 -28.0911 -0.1
+ vertex -26.0506 -28.0911 -0.2
endloop
endfacet
facet normal -0.851572 0.524237 0
outer loop
vertex -26.0506 -28.0911 0
- vertex -26.2221 -28.3696 -0.1
+ vertex -26.2221 -28.3696 -0.2
vertex -26.2221 -28.3696 0
endloop
endfacet
facet normal -0.812951 0.582331 0
outer loop
- vertex -26.3861 -28.5987 -0.1
+ vertex -26.3861 -28.5987 -0.2
vertex -26.2221 -28.3696 0
- vertex -26.2221 -28.3696 -0.1
+ vertex -26.2221 -28.3696 -0.2
endloop
endfacet
facet normal -0.812951 0.582331 0
outer loop
vertex -26.2221 -28.3696 0
- vertex -26.3861 -28.5987 -0.1
+ vertex -26.3861 -28.5987 -0.2
vertex -26.3861 -28.5987 0
endloop
endfacet
facet normal -0.755407 0.655255 0
outer loop
- vertex -26.5458 -28.7827 -0.1
+ vertex -26.5458 -28.7827 -0.2
vertex -26.3861 -28.5987 0
- vertex -26.3861 -28.5987 -0.1
+ vertex -26.3861 -28.5987 -0.2
endloop
endfacet
facet normal -0.755407 0.655255 0
outer loop
vertex -26.3861 -28.5987 0
- vertex -26.5458 -28.7827 -0.1
+ vertex -26.5458 -28.7827 -0.2
vertex -26.5458 -28.7827 0
endloop
endfacet
facet normal -0.671936 0.740609 0
outer loop
- vertex -26.5458 -28.7827 -0.1
+ vertex -26.5458 -28.7827 -0.2
vertex -26.7039 -28.9262 0
vertex -26.5458 -28.7827 0
endloop
@@ -12308,13 +12308,13 @@ solid OpenSCAD_Model
facet normal -0.671936 0.740609 0
outer loop
vertex -26.7039 -28.9262 0
- vertex -26.5458 -28.7827 -0.1
- vertex -26.7039 -28.9262 -0.1
+ vertex -26.5458 -28.7827 -0.2
+ vertex -26.7039 -28.9262 -0.2
endloop
endfacet
facet normal -0.558253 0.829671 0
outer loop
- vertex -26.7039 -28.9262 -0.1
+ vertex -26.7039 -28.9262 -0.2
vertex -26.8635 -29.0336 0
vertex -26.7039 -28.9262 0
endloop
@@ -12322,13 +12322,13 @@ solid OpenSCAD_Model
facet normal -0.558253 0.829671 0
outer loop
vertex -26.8635 -29.0336 0
- vertex -26.7039 -28.9262 -0.1
- vertex -26.8635 -29.0336 -0.1
+ vertex -26.7039 -28.9262 -0.2
+ vertex -26.8635 -29.0336 -0.2
endloop
endfacet
facet normal -0.419339 0.90783 0
outer loop
- vertex -26.8635 -29.0336 -0.1
+ vertex -26.8635 -29.0336 -0.2
vertex -27.0275 -29.1093 0
vertex -26.8635 -29.0336 0
endloop
@@ -12336,13 +12336,13 @@ solid OpenSCAD_Model
facet normal -0.419339 0.90783 0
outer loop
vertex -27.0275 -29.1093 0
- vertex -26.8635 -29.0336 -0.1
- vertex -27.0275 -29.1093 -0.1
+ vertex -26.8635 -29.0336 -0.2
+ vertex -27.0275 -29.1093 -0.2
endloop
endfacet
facet normal -0.272797 0.962072 0
outer loop
- vertex -27.0275 -29.1093 -0.1
+ vertex -27.0275 -29.1093 -0.2
vertex -27.1989 -29.1579 0
vertex -27.0275 -29.1093 0
endloop
@@ -12350,13 +12350,13 @@ solid OpenSCAD_Model
facet normal -0.272797 0.962072 0
outer loop
vertex -27.1989 -29.1579 0
- vertex -27.0275 -29.1093 -0.1
- vertex -27.1989 -29.1579 -0.1
+ vertex -27.0275 -29.1093 -0.2
+ vertex -27.1989 -29.1579 -0.2
endloop
endfacet
facet normal -0.141044 0.990003 0
outer loop
- vertex -27.1989 -29.1579 -0.1
+ vertex -27.1989 -29.1579 -0.2
vertex -27.3805 -29.1838 0
vertex -27.1989 -29.1579 0
endloop
@@ -12364,13 +12364,13 @@ solid OpenSCAD_Model
facet normal -0.141044 0.990003 0
outer loop
vertex -27.3805 -29.1838 0
- vertex -27.1989 -29.1579 -0.1
- vertex -27.3805 -29.1838 -0.1
+ vertex -27.1989 -29.1579 -0.2
+ vertex -27.3805 -29.1838 -0.2
endloop
endfacet
facet normal -0.0391387 0.999234 0
outer loop
- vertex -27.3805 -29.1838 -0.1
+ vertex -27.3805 -29.1838 -0.2
vertex -27.5755 -29.1914 0
vertex -27.3805 -29.1838 0
endloop
@@ -12378,13 +12378,13 @@ solid OpenSCAD_Model
facet normal -0.0391387 0.999234 0
outer loop
vertex -27.5755 -29.1914 0
- vertex -27.3805 -29.1838 -0.1
- vertex -27.5755 -29.1914 -0.1
+ vertex -27.3805 -29.1838 -0.2
+ vertex -27.5755 -29.1914 -0.2
endloop
endfacet
facet normal 0.0328742 0.999459 -0
outer loop
- vertex -27.5755 -29.1914 -0.1
+ vertex -27.5755 -29.1914 -0.2
vertex -27.9775 -29.1782 0
vertex -27.5755 -29.1914 0
endloop
@@ -12392,13 +12392,13 @@ solid OpenSCAD_Model
facet normal 0.0328742 0.999459 0
outer loop
vertex -27.9775 -29.1782 0
- vertex -27.5755 -29.1914 -0.1
- vertex -27.9775 -29.1782 -0.1
+ vertex -27.5755 -29.1914 -0.2
+ vertex -27.9775 -29.1782 -0.2
endloop
endfacet
facet normal 0.226397 0.974035 -0
outer loop
- vertex -27.9775 -29.1782 -0.1
+ vertex -27.9775 -29.1782 -0.2
vertex -28.0989 -29.15 0
vertex -27.9775 -29.1782 0
endloop
@@ -12406,13 +12406,13 @@ solid OpenSCAD_Model
facet normal 0.226397 0.974035 0
outer loop
vertex -28.0989 -29.15 0
- vertex -27.9775 -29.1782 -0.1
- vertex -28.0989 -29.15 -0.1
+ vertex -27.9775 -29.1782 -0.2
+ vertex -28.0989 -29.15 -0.2
endloop
endfacet
facet normal 0.566674 0.823942 -0
outer loop
- vertex -28.0989 -29.15 -0.1
+ vertex -28.0989 -29.15 -0.2
vertex -28.176 -29.097 0
vertex -28.0989 -29.15 0
endloop
@@ -12420,139 +12420,139 @@ solid OpenSCAD_Model
facet normal 0.566674 0.823942 0
outer loop
vertex -28.176 -29.097 0
- vertex -28.0989 -29.15 -0.1
- vertex -28.176 -29.097 -0.1
+ vertex -28.0989 -29.15 -0.2
+ vertex -28.176 -29.097 -0.2
endloop
endfacet
facet normal 0.908757 0.417326 0
outer loop
vertex -28.176 -29.097 0
- vertex -28.2154 -29.0113 -0.1
+ vertex -28.2154 -29.0113 -0.2
vertex -28.2154 -29.0113 0
endloop
endfacet
facet normal 0.908757 0.417326 0
outer loop
- vertex -28.2154 -29.0113 -0.1
+ vertex -28.2154 -29.0113 -0.2
vertex -28.176 -29.097 0
- vertex -28.176 -29.097 -0.1
+ vertex -28.176 -29.097 -0.2
endloop
endfacet
facet normal 0.997947 0.0640397 0
outer loop
vertex -28.2154 -29.0113 0
- vertex -28.2235 -28.8853 -0.1
+ vertex -28.2235 -28.8853 -0.2
vertex -28.2235 -28.8853 0
endloop
endfacet
facet normal 0.997947 0.0640397 0
outer loop
- vertex -28.2235 -28.8853 -0.1
+ vertex -28.2235 -28.8853 -0.2
vertex -28.2154 -29.0113 0
- vertex -28.2154 -29.0113 -0.1
+ vertex -28.2154 -29.0113 -0.2
endloop
endfacet
facet normal 0.992038 -0.125943 0
outer loop
vertex -28.2235 -28.8853 0
- vertex -28.1721 -28.4809 -0.1
+ vertex -28.1721 -28.4809 -0.2
vertex -28.1721 -28.4809 0
endloop
endfacet
facet normal 0.992038 -0.125943 0
outer loop
- vertex -28.1721 -28.4809 -0.1
+ vertex -28.1721 -28.4809 -0.2
vertex -28.2235 -28.8853 0
- vertex -28.2235 -28.8853 -0.1
+ vertex -28.2235 -28.8853 -0.2
endloop
endfacet
facet normal 0.988281 -0.152644 0
outer loop
vertex -28.1721 -28.4809 0
- vertex -27.9393 -26.9734 -0.1
+ vertex -27.9393 -26.9734 -0.2
vertex -27.9393 -26.9734 0
endloop
endfacet
facet normal 0.988281 -0.152644 0
outer loop
- vertex -27.9393 -26.9734 -0.1
+ vertex -27.9393 -26.9734 -0.2
vertex -28.1721 -28.4809 0
- vertex -28.1721 -28.4809 -0.1
+ vertex -28.1721 -28.4809 -0.2
endloop
endfacet
facet normal 0.994809 -0.101759 0
outer loop
vertex -27.9393 -26.9734 0
- vertex -27.8924 -26.5154 -0.1
+ vertex -27.8924 -26.5154 -0.2
vertex -27.8924 -26.5154 0
endloop
endfacet
facet normal 0.994809 -0.101759 0
outer loop
- vertex -27.8924 -26.5154 -0.1
+ vertex -27.8924 -26.5154 -0.2
vertex -27.9393 -26.9734 0
- vertex -27.9393 -26.9734 -0.1
+ vertex -27.9393 -26.9734 -0.2
endloop
endfacet
facet normal 0.999788 0.0205947 0
outer loop
vertex -27.8924 -26.5154 0
- vertex -27.8988 -26.2055 -0.1
+ vertex -27.8988 -26.2055 -0.2
vertex -27.8988 -26.2055 0
endloop
endfacet
facet normal 0.999788 0.0205947 0
outer loop
- vertex -27.8988 -26.2055 -0.1
+ vertex -27.8988 -26.2055 -0.2
vertex -27.8924 -26.5154 0
- vertex -27.8924 -26.5154 -0.1
+ vertex -27.8924 -26.5154 -0.2
endloop
endfacet
facet normal 0.975965 0.217927 0
outer loop
vertex -27.8988 -26.2055 0
- vertex -27.9236 -26.0946 -0.1
+ vertex -27.9236 -26.0946 -0.2
vertex -27.9236 -26.0946 0
endloop
endfacet
facet normal 0.975965 0.217927 0
outer loop
- vertex -27.9236 -26.0946 -0.1
+ vertex -27.9236 -26.0946 -0.2
vertex -27.8988 -26.2055 0
- vertex -27.8988 -26.2055 -0.1
+ vertex -27.8988 -26.2055 -0.2
endloop
endfacet
facet normal 0.909758 0.415139 0
outer loop
vertex -27.9236 -26.0946 0
- vertex -27.9636 -26.0069 -0.1
+ vertex -27.9636 -26.0069 -0.2
vertex -27.9636 -26.0069 0
endloop
endfacet
facet normal 0.909758 0.415139 0
outer loop
- vertex -27.9636 -26.0069 -0.1
+ vertex -27.9636 -26.0069 -0.2
vertex -27.9236 -26.0946 0
- vertex -27.9236 -26.0946 -0.1
+ vertex -27.9236 -26.0946 -0.2
endloop
endfacet
facet normal 0.777135 0.629334 0
outer loop
vertex -27.9636 -26.0069 0
- vertex -28.0195 -25.9379 -0.1
+ vertex -28.0195 -25.9379 -0.2
vertex -28.0195 -25.9379 0
endloop
endfacet
facet normal 0.777135 0.629334 0
outer loop
- vertex -28.0195 -25.9379 -0.1
+ vertex -28.0195 -25.9379 -0.2
vertex -27.9636 -26.0069 0
- vertex -27.9636 -26.0069 -0.1
+ vertex -27.9636 -26.0069 -0.2
endloop
endfacet
facet normal 0.604573 0.79655 -0
outer loop
- vertex -28.0195 -25.9379 -0.1
+ vertex -28.0195 -25.9379 -0.2
vertex -28.0919 -25.8829 0
vertex -28.0195 -25.9379 0
endloop
@@ -12560,13 +12560,13 @@ solid OpenSCAD_Model
facet normal 0.604573 0.79655 0
outer loop
vertex -28.0919 -25.8829 0
- vertex -28.0195 -25.9379 -0.1
- vertex -28.0919 -25.8829 -0.1
+ vertex -28.0195 -25.9379 -0.2
+ vertex -28.0919 -25.8829 -0.2
endloop
endfacet
facet normal 0.400676 0.91622 -0
outer loop
- vertex -28.0919 -25.8829 -0.1
+ vertex -28.0919 -25.8829 -0.2
vertex -28.2888 -25.7968 0
vertex -28.0919 -25.8829 0
endloop
@@ -12574,13 +12574,13 @@ solid OpenSCAD_Model
facet normal 0.400676 0.91622 0
outer loop
vertex -28.2888 -25.7968 0
- vertex -28.0919 -25.8829 -0.1
- vertex -28.2888 -25.7968 -0.1
+ vertex -28.0919 -25.8829 -0.2
+ vertex -28.2888 -25.7968 -0.2
endloop
endfacet
facet normal 0.299723 0.954026 -0
outer loop
- vertex -28.2888 -25.7968 -0.1
+ vertex -28.2888 -25.7968 -0.2
vertex -28.5596 -25.7117 0
vertex -28.2888 -25.7968 0
endloop
@@ -12588,13 +12588,13 @@ solid OpenSCAD_Model
facet normal 0.299723 0.954026 0
outer loop
vertex -28.5596 -25.7117 0
- vertex -28.2888 -25.7968 -0.1
- vertex -28.5596 -25.7117 -0.1
+ vertex -28.2888 -25.7968 -0.2
+ vertex -28.5596 -25.7117 -0.2
endloop
endfacet
facet normal 0.220879 0.975301 -0
outer loop
- vertex -28.5596 -25.7117 -0.1
+ vertex -28.5596 -25.7117 -0.2
vertex -28.7678 -25.6646 0
vertex -28.5596 -25.7117 0
endloop
@@ -12602,13 +12602,13 @@ solid OpenSCAD_Model
facet normal 0.220879 0.975301 0
outer loop
vertex -28.7678 -25.6646 0
- vertex -28.5596 -25.7117 -0.1
- vertex -28.7678 -25.6646 -0.1
+ vertex -28.5596 -25.7117 -0.2
+ vertex -28.7678 -25.6646 -0.2
endloop
endfacet
facet normal 0.142669 0.98977 -0
outer loop
- vertex -28.7678 -25.6646 -0.1
+ vertex -28.7678 -25.6646 -0.2
vertex -29.0734 -25.6205 0
vertex -28.7678 -25.6646 0
endloop
@@ -12616,13 +12616,13 @@ solid OpenSCAD_Model
facet normal 0.142669 0.98977 0
outer loop
vertex -29.0734 -25.6205 0
- vertex -28.7678 -25.6646 -0.1
- vertex -29.0734 -25.6205 -0.1
+ vertex -28.7678 -25.6646 -0.2
+ vertex -29.0734 -25.6205 -0.2
endloop
endfacet
facet normal 0.0883121 0.996093 -0
outer loop
- vertex -29.0734 -25.6205 -0.1
+ vertex -29.0734 -25.6205 -0.2
vertex -29.9179 -25.5457 0
vertex -29.0734 -25.6205 0
endloop
@@ -12630,13 +12630,13 @@ solid OpenSCAD_Model
facet normal 0.0883121 0.996093 0
outer loop
vertex -29.9179 -25.5457 0
- vertex -29.0734 -25.6205 -0.1
- vertex -29.9179 -25.5457 -0.1
+ vertex -29.0734 -25.6205 -0.2
+ vertex -29.9179 -25.5457 -0.2
endloop
endfacet
facet normal 0.0479595 0.998849 -0
outer loop
- vertex -29.9179 -25.5457 -0.1
+ vertex -29.9179 -25.5457 -0.2
vertex -30.9759 -25.4949 0
vertex -29.9179 -25.5457 0
endloop
@@ -12644,13 +12644,13 @@ solid OpenSCAD_Model
facet normal 0.0479595 0.998849 0
outer loop
vertex -30.9759 -25.4949 0
- vertex -29.9179 -25.5457 -0.1
- vertex -30.9759 -25.4949 -0.1
+ vertex -29.9179 -25.5457 -0.2
+ vertex -30.9759 -25.4949 -0.2
endloop
endfacet
facet normal 0.0164478 0.999865 -0
outer loop
- vertex -30.9759 -25.4949 -0.1
+ vertex -30.9759 -25.4949 -0.2
vertex -32.1303 -25.4759 0
vertex -30.9759 -25.4949 0
endloop
@@ -12658,13 +12658,13 @@ solid OpenSCAD_Model
facet normal 0.0164478 0.999865 0
outer loop
vertex -32.1303 -25.4759 0
- vertex -30.9759 -25.4949 -0.1
- vertex -32.1303 -25.4759 -0.1
+ vertex -30.9759 -25.4949 -0.2
+ vertex -32.1303 -25.4759 -0.2
endloop
endfacet
facet normal 0.000432102 1 -0
outer loop
- vertex -32.1303 -25.4759 -0.1
+ vertex -32.1303 -25.4759 -0.2
vertex -34.9509 -25.4747 0
vertex -32.1303 -25.4759 0
endloop
@@ -12672,139 +12672,139 @@ solid OpenSCAD_Model
facet normal 0.000432102 1 0
outer loop
vertex -34.9509 -25.4747 0
- vertex -32.1303 -25.4759 -0.1
- vertex -34.9509 -25.4747 -0.1
+ vertex -32.1303 -25.4759 -0.2
+ vertex -34.9509 -25.4747 -0.2
endloop
endfacet
facet normal -0.910935 0.41255 0
outer loop
- vertex -35.4707 -26.6225 -0.1
+ vertex -35.4707 -26.6225 -0.2
vertex -34.9509 -25.4747 0
- vertex -34.9509 -25.4747 -0.1
+ vertex -34.9509 -25.4747 -0.2
endloop
endfacet
facet normal -0.910935 0.41255 0
outer loop
vertex -34.9509 -25.4747 0
- vertex -35.4707 -26.6225 -0.1
+ vertex -35.4707 -26.6225 -0.2
vertex -35.4707 -26.6225 0
endloop
endfacet
facet normal -0.916492 0.400054 0
outer loop
- vertex -36.4516 -28.8697 -0.1
+ vertex -36.4516 -28.8697 -0.2
vertex -35.4707 -26.6225 0
- vertex -35.4707 -26.6225 -0.1
+ vertex -35.4707 -26.6225 -0.2
endloop
endfacet
facet normal -0.916492 0.400054 0
outer loop
vertex -35.4707 -26.6225 0
- vertex -36.4516 -28.8697 -0.1
+ vertex -36.4516 -28.8697 -0.2
vertex -36.4516 -28.8697 0
endloop
endfacet
facet normal -0.92275 0.385399 0
outer loop
- vertex -37.5165 -31.4193 -0.1
+ vertex -37.5165 -31.4193 -0.2
vertex -36.4516 -28.8697 0
- vertex -36.4516 -28.8697 -0.1
+ vertex -36.4516 -28.8697 -0.2
endloop
endfacet
facet normal -0.92275 0.385399 0
outer loop
vertex -36.4516 -28.8697 0
- vertex -37.5165 -31.4193 -0.1
+ vertex -37.5165 -31.4193 -0.2
vertex -37.5165 -31.4193 0
endloop
endfacet
facet normal -0.928331 0.371754 0
outer loop
- vertex -38.3711 -33.5534 -0.1
+ vertex -38.3711 -33.5534 -0.2
vertex -37.5165 -31.4193 0
- vertex -37.5165 -31.4193 -0.1
+ vertex -37.5165 -31.4193 -0.2
endloop
endfacet
facet normal -0.928331 0.371754 0
outer loop
vertex -37.5165 -31.4193 0
- vertex -38.3711 -33.5534 -0.1
+ vertex -38.3711 -33.5534 -0.2
vertex -38.3711 -33.5534 0
endloop
endfacet
facet normal -0.936805 0.349851 0
outer loop
- vertex -38.6277 -34.2404 -0.1
+ vertex -38.6277 -34.2404 -0.2
vertex -38.3711 -33.5534 0
- vertex -38.3711 -33.5534 -0.1
+ vertex -38.3711 -33.5534 -0.2
endloop
endfacet
facet normal -0.936805 0.349851 0
outer loop
vertex -38.3711 -33.5534 0
- vertex -38.6277 -34.2404 -0.1
+ vertex -38.6277 -34.2404 -0.2
vertex -38.6277 -34.2404 0
endloop
endfacet
facet normal -0.958246 0.285946 0
outer loop
- vertex -38.7214 -34.5543 -0.1
+ vertex -38.7214 -34.5543 -0.2
vertex -38.6277 -34.2404 0
- vertex -38.6277 -34.2404 -0.1
+ vertex -38.6277 -34.2404 -0.2
endloop
endfacet
facet normal -0.958246 0.285946 0
outer loop
vertex -38.6277 -34.2404 0
- vertex -38.7214 -34.5543 -0.1
+ vertex -38.7214 -34.5543 -0.2
vertex -38.7214 -34.5543 0
endloop
endfacet
facet normal -0.979296 -0.202433 0
outer loop
- vertex -38.6971 -34.6715 -0.1
+ vertex -38.6971 -34.6715 -0.2
vertex -38.7214 -34.5543 0
- vertex -38.7214 -34.5543 -0.1
+ vertex -38.7214 -34.5543 -0.2
endloop
endfacet
facet normal -0.979296 -0.202433 0
outer loop
vertex -38.7214 -34.5543 0
- vertex -38.6971 -34.6715 -0.1
+ vertex -38.6971 -34.6715 -0.2
vertex -38.6971 -34.6715 0
endloop
endfacet
facet normal -0.869155 -0.494539 0
outer loop
- vertex -38.6312 -34.7874 -0.1
+ vertex -38.6312 -34.7874 -0.2
vertex -38.6971 -34.6715 0
- vertex -38.6971 -34.6715 -0.1
+ vertex -38.6971 -34.6715 -0.2
endloop
endfacet
facet normal -0.869155 -0.494539 0
outer loop
vertex -38.6971 -34.6715 0
- vertex -38.6312 -34.7874 -0.1
+ vertex -38.6312 -34.7874 -0.2
vertex -38.6312 -34.7874 0
endloop
endfacet
facet normal -0.719928 -0.694049 0
outer loop
- vertex -38.5336 -34.8886 -0.1
+ vertex -38.5336 -34.8886 -0.2
vertex -38.6312 -34.7874 0
- vertex -38.6312 -34.7874 -0.1
+ vertex -38.6312 -34.7874 -0.2
endloop
endfacet
facet normal -0.719928 -0.694049 0
outer loop
vertex -38.6312 -34.7874 0
- vertex -38.5336 -34.8886 -0.1
+ vertex -38.5336 -34.8886 -0.2
vertex -38.5336 -34.8886 0
endloop
endfacet
facet normal -0.523423 -0.852073 0
outer loop
- vertex -38.5336 -34.8886 -0.1
+ vertex -38.5336 -34.8886 -0.2
vertex -38.4144 -34.9619 0
vertex -38.5336 -34.8886 0
endloop
@@ -12812,13 +12812,13 @@ solid OpenSCAD_Model
facet normal -0.523423 -0.852073 -0
outer loop
vertex -38.4144 -34.9619 0
- vertex -38.5336 -34.8886 -0.1
- vertex -38.4144 -34.9619 -0.1
+ vertex -38.5336 -34.8886 -0.2
+ vertex -38.4144 -34.9619 -0.2
endloop
endfacet
facet normal -0.239855 -0.970809 0
outer loop
- vertex -38.4144 -34.9619 -0.1
+ vertex -38.4144 -34.9619 -0.2
vertex -38.2613 -34.9997 0
vertex -38.4144 -34.9619 0
endloop
@@ -12826,13 +12826,13 @@ solid OpenSCAD_Model
facet normal -0.239855 -0.970809 -0
outer loop
vertex -38.2613 -34.9997 0
- vertex -38.4144 -34.9619 -0.1
- vertex -38.2613 -34.9997 -0.1
+ vertex -38.4144 -34.9619 -0.2
+ vertex -38.2613 -34.9997 -0.2
endloop
endfacet
facet normal -0.118843 -0.992913 0
outer loop
- vertex -38.2613 -34.9997 -0.1
+ vertex -38.2613 -34.9997 -0.2
vertex -38.0027 -35.0306 0
vertex -38.2613 -34.9997 0
endloop
@@ -12840,13 +12840,13 @@ solid OpenSCAD_Model
facet normal -0.118843 -0.992913 -0
outer loop
vertex -38.0027 -35.0306 0
- vertex -38.2613 -34.9997 -0.1
- vertex -38.0027 -35.0306 -0.1
+ vertex -38.2613 -34.9997 -0.2
+ vertex -38.0027 -35.0306 -0.2
endloop
endfacet
facet normal -0.0541463 -0.998533 0
outer loop
- vertex -38.0027 -35.0306 -0.1
+ vertex -38.0027 -35.0306 -0.2
vertex -37.2267 -35.0727 0
vertex -38.0027 -35.0306 0
endloop
@@ -12854,13 +12854,13 @@ solid OpenSCAD_Model
facet normal -0.0541463 -0.998533 -0
outer loop
vertex -37.2267 -35.0727 0
- vertex -38.0027 -35.0306 -0.1
- vertex -37.2267 -35.0727 -0.1
+ vertex -38.0027 -35.0306 -0.2
+ vertex -37.2267 -35.0727 -0.2
endloop
endfacet
facet normal -0.0166336 -0.999862 0
outer loop
- vertex -37.2267 -35.0727 -0.1
+ vertex -37.2267 -35.0727 -0.2
vertex -36.2012 -35.0898 0
vertex -37.2267 -35.0727 0
endloop
@@ -12868,13 +12868,13 @@ solid OpenSCAD_Model
facet normal -0.0166336 -0.999862 -0
outer loop
vertex -36.2012 -35.0898 0
- vertex -37.2267 -35.0727 -0.1
- vertex -36.2012 -35.0898 -0.1
+ vertex -37.2267 -35.0727 -0.2
+ vertex -36.2012 -35.0898 -0.2
endloop
endfacet
facet normal 0.00541272 -0.999985 0
outer loop
- vertex -36.2012 -35.0898 -0.1
+ vertex -36.2012 -35.0898 -0.2
vertex -35.0412 -35.0835 0
vertex -36.2012 -35.0898 0
endloop
@@ -12882,13 +12882,13 @@ solid OpenSCAD_Model
facet normal 0.00541272 -0.999985 0
outer loop
vertex -35.0412 -35.0835 0
- vertex -36.2012 -35.0898 -0.1
- vertex -35.0412 -35.0835 -0.1
+ vertex -36.2012 -35.0898 -0.2
+ vertex -35.0412 -35.0835 -0.2
endloop
endfacet
facet normal 0.0236788 -0.99972 0
outer loop
- vertex -35.0412 -35.0835 -0.1
+ vertex -35.0412 -35.0835 -0.2
vertex -33.8615 -35.0556 0
vertex -35.0412 -35.0835 0
endloop
@@ -12896,13 +12896,13 @@ solid OpenSCAD_Model
facet normal 0.0236788 -0.99972 0
outer loop
vertex -33.8615 -35.0556 0
- vertex -35.0412 -35.0835 -0.1
- vertex -33.8615 -35.0556 -0.1
+ vertex -35.0412 -35.0835 -0.2
+ vertex -33.8615 -35.0556 -0.2
endloop
endfacet
facet normal 0.0441434 -0.999025 0
outer loop
- vertex -33.8615 -35.0556 -0.1
+ vertex -33.8615 -35.0556 -0.2
vertex -32.7769 -35.0076 0
vertex -33.8615 -35.0556 0
endloop
@@ -12910,13 +12910,13 @@ solid OpenSCAD_Model
facet normal 0.0441434 -0.999025 0
outer loop
vertex -32.7769 -35.0076 0
- vertex -33.8615 -35.0556 -0.1
- vertex -32.7769 -35.0076 -0.1
+ vertex -33.8615 -35.0556 -0.2
+ vertex -32.7769 -35.0076 -0.2
endloop
endfacet
facet normal 0.0755008 -0.997146 0
outer loop
- vertex -32.7769 -35.0076 -0.1
+ vertex -32.7769 -35.0076 -0.2
vertex -31.9023 -34.9414 0
vertex -32.7769 -35.0076 0
endloop
@@ -12924,13 +12924,13 @@ solid OpenSCAD_Model
facet normal 0.0755008 -0.997146 0
outer loop
vertex -31.9023 -34.9414 0
- vertex -32.7769 -35.0076 -0.1
- vertex -31.9023 -34.9414 -0.1
+ vertex -32.7769 -35.0076 -0.2
+ vertex -31.9023 -34.9414 -0.2
endloop
endfacet
facet normal 0.121377 -0.992606 0
outer loop
- vertex -31.9023 -34.9414 -0.1
+ vertex -31.9023 -34.9414 -0.2
vertex -31.5797 -34.902 0
vertex -31.9023 -34.9414 0
endloop
@@ -12938,13 +12938,13 @@ solid OpenSCAD_Model
facet normal 0.121377 -0.992606 0
outer loop
vertex -31.5797 -34.902 0
- vertex -31.9023 -34.9414 -0.1
- vertex -31.5797 -34.902 -0.1
+ vertex -31.9023 -34.9414 -0.2
+ vertex -31.5797 -34.902 -0.2
endloop
endfacet
facet normal 0.187713 -0.982224 0
outer loop
- vertex -31.5797 -34.902 -0.1
+ vertex -31.5797 -34.902 -0.2
vertex -31.3526 -34.8586 0
vertex -31.5797 -34.902 0
endloop
@@ -12952,13 +12952,13 @@ solid OpenSCAD_Model
facet normal 0.187713 -0.982224 0
outer loop
vertex -31.3526 -34.8586 0
- vertex -31.5797 -34.902 -0.1
- vertex -31.3526 -34.8586 -0.1
+ vertex -31.5797 -34.902 -0.2
+ vertex -31.3526 -34.8586 -0.2
endloop
endfacet
facet normal 0.296204 -0.955125 0
outer loop
- vertex -31.3526 -34.8586 -0.1
+ vertex -31.3526 -34.8586 -0.2
vertex -30.8095 -34.6902 0
vertex -31.3526 -34.8586 0
endloop
@@ -12966,13 +12966,13 @@ solid OpenSCAD_Model
facet normal 0.296204 -0.955125 0
outer loop
vertex -30.8095 -34.6902 0
- vertex -31.3526 -34.8586 -0.1
- vertex -30.8095 -34.6902 -0.1
+ vertex -31.3526 -34.8586 -0.2
+ vertex -30.8095 -34.6902 -0.2
endloop
endfacet
facet normal 0.373689 -0.927554 0
outer loop
- vertex -30.8095 -34.6902 -0.1
+ vertex -30.8095 -34.6902 -0.2
vertex -30.2461 -34.4632 0
vertex -30.8095 -34.6902 0
endloop
@@ -12980,13 +12980,13 @@ solid OpenSCAD_Model
facet normal 0.373689 -0.927554 0
outer loop
vertex -30.2461 -34.4632 0
- vertex -30.8095 -34.6902 -0.1
- vertex -30.2461 -34.4632 -0.1
+ vertex -30.8095 -34.6902 -0.2
+ vertex -30.2461 -34.4632 -0.2
endloop
endfacet
facet normal 0.438403 -0.898778 0
outer loop
- vertex -30.2461 -34.4632 -0.1
+ vertex -30.2461 -34.4632 -0.2
vertex -29.669 -34.1817 0
vertex -30.2461 -34.4632 0
endloop
@@ -12994,13 +12994,13 @@ solid OpenSCAD_Model
facet normal 0.438403 -0.898778 0
outer loop
vertex -29.669 -34.1817 0
- vertex -30.2461 -34.4632 -0.1
- vertex -29.669 -34.1817 -0.1
+ vertex -30.2461 -34.4632 -0.2
+ vertex -29.669 -34.1817 -0.2
endloop
endfacet
facet normal 0.494095 -0.869408 0
outer loop
- vertex -29.669 -34.1817 -0.1
+ vertex -29.669 -34.1817 -0.2
vertex -29.0852 -33.8499 0
vertex -29.669 -34.1817 0
endloop
@@ -13008,13 +13008,13 @@ solid OpenSCAD_Model
facet normal 0.494095 -0.869408 0
outer loop
vertex -29.0852 -33.8499 0
- vertex -29.669 -34.1817 -0.1
- vertex -29.0852 -33.8499 -0.1
+ vertex -29.669 -34.1817 -0.2
+ vertex -29.0852 -33.8499 -0.2
endloop
endfacet
facet normal 0.543479 -0.839423 0
outer loop
- vertex -29.0852 -33.8499 -0.1
+ vertex -29.0852 -33.8499 -0.2
vertex -28.5012 -33.4718 0
vertex -29.0852 -33.8499 0
endloop
@@ -13022,13 +13022,13 @@ solid OpenSCAD_Model
facet normal 0.543479 -0.839423 0
outer loop
vertex -28.5012 -33.4718 0
- vertex -29.0852 -33.8499 -0.1
- vertex -28.5012 -33.4718 -0.1
+ vertex -29.0852 -33.8499 -0.2
+ vertex -28.5012 -33.4718 -0.2
endloop
endfacet
facet normal 0.588526 -0.808478 0
outer loop
- vertex -28.5012 -33.4718 -0.1
+ vertex -28.5012 -33.4718 -0.2
vertex -27.924 -33.0516 0
vertex -28.5012 -33.4718 0
endloop
@@ -13036,13 +13036,13 @@ solid OpenSCAD_Model
facet normal 0.588526 -0.808478 0
outer loop
vertex -27.924 -33.0516 0
- vertex -28.5012 -33.4718 -0.1
- vertex -27.924 -33.0516 -0.1
+ vertex -28.5012 -33.4718 -0.2
+ vertex -27.924 -33.0516 -0.2
endloop
endfacet
facet normal 0.630713 -0.776016 0
outer loop
- vertex -27.924 -33.0516 -0.1
+ vertex -27.924 -33.0516 -0.2
vertex -27.3602 -32.5933 0
vertex -27.924 -33.0516 0
endloop
@@ -13050,13 +13050,13 @@ solid OpenSCAD_Model
facet normal 0.630713 -0.776016 0
outer loop
vertex -27.3602 -32.5933 0
- vertex -27.924 -33.0516 -0.1
- vertex -27.3602 -32.5933 -0.1
+ vertex -27.924 -33.0516 -0.2
+ vertex -27.3602 -32.5933 -0.2
endloop
endfacet
facet normal 0.671162 -0.741311 0
outer loop
- vertex -27.3602 -32.5933 -0.1
+ vertex -27.3602 -32.5933 -0.2
vertex -26.8166 -32.1012 0
vertex -27.3602 -32.5933 0
endloop
@@ -13064,13 +13064,13 @@ solid OpenSCAD_Model
facet normal 0.671162 -0.741311 0
outer loop
vertex -26.8166 -32.1012 0
- vertex -27.3602 -32.5933 -0.1
- vertex -26.8166 -32.1012 -0.1
+ vertex -27.3602 -32.5933 -0.2
+ vertex -26.8166 -32.1012 -0.2
endloop
endfacet
facet normal 0.688884 -0.724872 0
outer loop
- vertex -26.8166 -32.1012 -0.1
+ vertex -26.8166 -32.1012 -0.2
vertex -25.5344 -30.8827 0
vertex -26.8166 -32.1012 0
endloop
@@ -13078,13 +13078,13 @@ solid OpenSCAD_Model
facet normal 0.688884 -0.724872 0
outer loop
vertex -25.5344 -30.8827 0
- vertex -26.8166 -32.1012 -0.1
- vertex -25.5344 -30.8827 -0.1
+ vertex -26.8166 -32.1012 -0.2
+ vertex -25.5344 -30.8827 -0.2
endloop
endfacet
facet normal 0.667079 -0.744987 0
outer loop
- vertex -25.5344 -30.8827 -0.1
+ vertex -25.5344 -30.8827 -0.2
vertex -25.1341 -30.5242 0
vertex -25.5344 -30.8827 0
endloop
@@ -13092,13 +13092,13 @@ solid OpenSCAD_Model
facet normal 0.667079 -0.744987 0
outer loop
vertex -25.1341 -30.5242 0
- vertex -25.5344 -30.8827 -0.1
- vertex -25.1341 -30.5242 -0.1
+ vertex -25.5344 -30.8827 -0.2
+ vertex -25.1341 -30.5242 -0.2
endloop
endfacet
facet normal 0.613469 -0.789718 0
outer loop
- vertex -25.1341 -30.5242 -0.1
+ vertex -25.1341 -30.5242 -0.2
vertex -24.8452 -30.2998 0
vertex -25.1341 -30.5242 0
endloop
@@ -13106,13 +13106,13 @@ solid OpenSCAD_Model
facet normal 0.613469 -0.789718 0
outer loop
vertex -24.8452 -30.2998 0
- vertex -25.1341 -30.5242 -0.1
- vertex -24.8452 -30.2998 -0.1
+ vertex -25.1341 -30.5242 -0.2
+ vertex -24.8452 -30.2998 -0.2
endloop
endfacet
facet normal 0.473466 -0.880812 0
outer loop
- vertex -24.8452 -30.2998 -0.1
+ vertex -24.8452 -30.2998 -0.2
vertex -24.6311 -30.1847 0
vertex -24.8452 -30.2998 0
endloop
@@ -13120,13 +13120,13 @@ solid OpenSCAD_Model
facet normal 0.473466 -0.880812 0
outer loop
vertex -24.6311 -30.1847 0
- vertex -24.8452 -30.2998 -0.1
- vertex -24.6311 -30.1847 -0.1
+ vertex -24.8452 -30.2998 -0.2
+ vertex -24.6311 -30.1847 -0.2
endloop
endfacet
facet normal 0.259354 -0.965782 0
outer loop
- vertex -24.6311 -30.1847 -0.1
+ vertex -24.6311 -30.1847 -0.2
vertex -24.5406 -30.1604 0
vertex -24.6311 -30.1847 0
endloop
@@ -13134,13 +13134,13 @@ solid OpenSCAD_Model
facet normal 0.259354 -0.965782 0
outer loop
vertex -24.5406 -30.1604 0
- vertex -24.6311 -30.1847 -0.1
- vertex -24.5406 -30.1604 -0.1
+ vertex -24.6311 -30.1847 -0.2
+ vertex -24.5406 -30.1604 -0.2
endloop
endfacet
facet normal 0.0730053 -0.997332 0
outer loop
- vertex -24.5406 -30.1604 -0.1
+ vertex -24.5406 -30.1604 -0.2
vertex -24.455 -30.1541 0
vertex -24.5406 -30.1604 0
endloop
@@ -13148,13 +13148,13 @@ solid OpenSCAD_Model
facet normal 0.0730053 -0.997332 0
outer loop
vertex -24.455 -30.1541 0
- vertex -24.5406 -30.1604 -0.1
- vertex -24.455 -30.1541 -0.1
+ vertex -24.5406 -30.1604 -0.2
+ vertex -24.455 -30.1541 -0.2
endloop
endfacet
facet normal -0.164732 -0.986338 0
outer loop
- vertex -24.455 -30.1541 -0.1
+ vertex -24.455 -30.1541 -0.2
vertex -24.2803 -30.1833 0
vertex -24.455 -30.1541 0
endloop
@@ -13162,13 +13162,13 @@ solid OpenSCAD_Model
facet normal -0.164732 -0.986338 -0
outer loop
vertex -24.2803 -30.1833 0
- vertex -24.455 -30.1541 -0.1
- vertex -24.2803 -30.1833 -0.1
+ vertex -24.455 -30.1541 -0.2
+ vertex -24.2803 -30.1833 -0.2
endloop
endfacet
facet normal -0.291983 -0.956423 0
outer loop
- vertex -24.2803 -30.1833 -0.1
+ vertex -24.2803 -30.1833 -0.2
vertex -24.0701 -30.2475 0
vertex -24.2803 -30.1833 0
endloop
@@ -13176,13 +13176,13 @@ solid OpenSCAD_Model
facet normal -0.291983 -0.956423 -0
outer loop
vertex -24.0701 -30.2475 0
- vertex -24.2803 -30.1833 -0.1
- vertex -24.0701 -30.2475 -0.1
+ vertex -24.2803 -30.1833 -0.2
+ vertex -24.0701 -30.2475 -0.2
endloop
endfacet
facet normal -0.377094 -0.926175 0
outer loop
- vertex -24.0701 -30.2475 -0.1
+ vertex -24.0701 -30.2475 -0.2
vertex -23.8399 -30.3412 0
vertex -24.0701 -30.2475 0
endloop
@@ -13190,13 +13190,13 @@ solid OpenSCAD_Model
facet normal -0.377094 -0.926175 -0
outer loop
vertex -23.8399 -30.3412 0
- vertex -24.0701 -30.2475 -0.1
- vertex -23.8399 -30.3412 -0.1
+ vertex -24.0701 -30.2475 -0.2
+ vertex -23.8399 -30.3412 -0.2
endloop
endfacet
facet normal -0.532683 -0.846315 0
outer loop
- vertex -23.8399 -30.3412 -0.1
+ vertex -23.8399 -30.3412 -0.2
vertex -23.6433 -30.465 0
vertex -23.8399 -30.3412 0
endloop
@@ -13204,13 +13204,13 @@ solid OpenSCAD_Model
facet normal -0.532683 -0.846315 -0
outer loop
vertex -23.6433 -30.465 0
- vertex -23.8399 -30.3412 -0.1
- vertex -23.6433 -30.465 -0.1
+ vertex -23.8399 -30.3412 -0.2
+ vertex -23.6433 -30.465 -0.2
endloop
endfacet
facet normal -0.695789 -0.718246 0
outer loop
- vertex -23.6433 -30.465 -0.1
+ vertex -23.6433 -30.465 -0.2
vertex -23.5012 -30.6026 0
vertex -23.6433 -30.465 0
endloop
@@ -13218,181 +13218,181 @@ solid OpenSCAD_Model
facet normal -0.695789 -0.718246 -0
outer loop
vertex -23.5012 -30.6026 0
- vertex -23.6433 -30.465 -0.1
- vertex -23.5012 -30.6026 -0.1
+ vertex -23.6433 -30.465 -0.2
+ vertex -23.5012 -30.6026 -0.2
endloop
endfacet
facet normal -0.84273 -0.538337 0
outer loop
- vertex -23.4571 -30.6716 -0.1
+ vertex -23.4571 -30.6716 -0.2
vertex -23.5012 -30.6026 0
- vertex -23.5012 -30.6026 -0.1
+ vertex -23.5012 -30.6026 -0.2
endloop
endfacet
facet normal -0.84273 -0.538337 0
outer loop
vertex -23.5012 -30.6026 0
- vertex -23.4571 -30.6716 -0.1
+ vertex -23.4571 -30.6716 -0.2
vertex -23.4571 -30.6716 0
endloop
endfacet
facet normal -0.946617 -0.322361 0
outer loop
- vertex -23.4345 -30.738 -0.1
+ vertex -23.4345 -30.738 -0.2
vertex -23.4571 -30.6716 0
- vertex -23.4571 -30.6716 -0.1
+ vertex -23.4571 -30.6716 -0.2
endloop
endfacet
facet normal -0.946617 -0.322361 0
outer loop
vertex -23.4571 -30.6716 0
- vertex -23.4345 -30.738 -0.1
+ vertex -23.4345 -30.738 -0.2
vertex -23.4345 -30.738 0
endloop
endfacet
facet normal -0.988328 0.152339 0
outer loop
- vertex -23.4513 -30.847 -0.1
+ vertex -23.4513 -30.847 -0.2
vertex -23.4345 -30.738 0
- vertex -23.4345 -30.738 -0.1
+ vertex -23.4345 -30.738 -0.2
endloop
endfacet
facet normal -0.988328 0.152339 0
outer loop
vertex -23.4345 -30.738 0
- vertex -23.4513 -30.847 -0.1
+ vertex -23.4513 -30.847 -0.2
vertex -23.4513 -30.847 0
endloop
endfacet
facet normal -0.933862 0.357635 0
outer loop
- vertex -23.5218 -31.031 -0.1
+ vertex -23.5218 -31.031 -0.2
vertex -23.4513 -30.847 0
- vertex -23.4513 -30.847 -0.1
+ vertex -23.4513 -30.847 -0.2
endloop
endfacet
facet normal -0.933862 0.357635 0
outer loop
vertex -23.4513 -30.847 0
- vertex -23.5218 -31.031 -0.1
+ vertex -23.5218 -31.031 -0.2
vertex -23.5218 -31.031 0
endloop
endfacet
facet normal -0.893602 0.44886 0
outer loop
- vertex -23.8031 -31.5911 -0.1
+ vertex -23.8031 -31.5911 -0.2
vertex -23.5218 -31.031 0
- vertex -23.5218 -31.031 -0.1
+ vertex -23.5218 -31.031 -0.2
endloop
endfacet
facet normal -0.893602 0.44886 0
outer loop
vertex -23.5218 -31.031 0
- vertex -23.8031 -31.5911 -0.1
+ vertex -23.8031 -31.5911 -0.2
vertex -23.8031 -31.5911 0
endloop
endfacet
facet normal -0.86862 0.495478 0
outer loop
- vertex -24.2375 -32.3527 -0.1
+ vertex -24.2375 -32.3527 -0.2
vertex -23.8031 -31.5911 0
- vertex -23.8031 -31.5911 -0.1
+ vertex -23.8031 -31.5911 -0.2
endloop
endfacet
facet normal -0.86862 0.495478 0
outer loop
vertex -23.8031 -31.5911 0
- vertex -24.2375 -32.3527 -0.1
+ vertex -24.2375 -32.3527 -0.2
vertex -24.2375 -32.3527 0
endloop
endfacet
facet normal -0.854086 0.520132 0
outer loop
- vertex -24.7839 -33.2498 -0.1
+ vertex -24.7839 -33.2498 -0.2
vertex -24.2375 -32.3527 0
- vertex -24.2375 -32.3527 -0.1
+ vertex -24.2375 -32.3527 -0.2
endloop
endfacet
facet normal -0.854086 0.520132 0
outer loop
vertex -24.2375 -32.3527 0
- vertex -24.7839 -33.2498 -0.1
+ vertex -24.7839 -33.2498 -0.2
vertex -24.7839 -33.2498 0
endloop
endfacet
facet normal -0.842904 0.538064 0
outer loop
- vertex -25.4011 -34.2168 -0.1
+ vertex -25.4011 -34.2168 -0.2
vertex -24.7839 -33.2498 0
- vertex -24.7839 -33.2498 -0.1
+ vertex -24.7839 -33.2498 -0.2
endloop
endfacet
facet normal -0.842904 0.538064 0
outer loop
vertex -24.7839 -33.2498 0
- vertex -25.4011 -34.2168 -0.1
+ vertex -25.4011 -34.2168 -0.2
vertex -25.4011 -34.2168 0
endloop
endfacet
facet normal -0.832144 0.55456 0
outer loop
- vertex -26.0482 -35.1877 -0.1
+ vertex -26.0482 -35.1877 -0.2
vertex -25.4011 -34.2168 0
- vertex -25.4011 -34.2168 -0.1
+ vertex -25.4011 -34.2168 -0.2
endloop
endfacet
facet normal -0.832144 0.55456 0
outer loop
vertex -25.4011 -34.2168 0
- vertex -26.0482 -35.1877 -0.1
+ vertex -26.0482 -35.1877 -0.2
vertex -26.0482 -35.1877 0
endloop
endfacet
facet normal -0.819486 0.573099 0
outer loop
- vertex -26.6839 -36.0968 -0.1
+ vertex -26.6839 -36.0968 -0.2
vertex -26.0482 -35.1877 0
- vertex -26.0482 -35.1877 -0.1
+ vertex -26.0482 -35.1877 -0.2
endloop
endfacet
facet normal -0.819486 0.573099 0
outer loop
vertex -26.0482 -35.1877 0
- vertex -26.6839 -36.0968 -0.1
+ vertex -26.6839 -36.0968 -0.2
vertex -26.6839 -36.0968 0
endloop
endfacet
facet normal -0.801319 0.598238 0
outer loop
- vertex -27.2673 -36.8782 -0.1
+ vertex -27.2673 -36.8782 -0.2
vertex -26.6839 -36.0968 0
- vertex -26.6839 -36.0968 -0.1
+ vertex -26.6839 -36.0968 -0.2
endloop
endfacet
facet normal -0.801319 0.598238 0
outer loop
vertex -26.6839 -36.0968 0
- vertex -27.2673 -36.8782 -0.1
+ vertex -27.2673 -36.8782 -0.2
vertex -27.2673 -36.8782 0
endloop
endfacet
facet normal -0.788011 0.615661 0
outer loop
- vertex -28.2718 -38.1638 -0.1
+ vertex -28.2718 -38.1638 -0.2
vertex -27.2673 -36.8782 0
- vertex -27.2673 -36.8782 -0.1
+ vertex -27.2673 -36.8782 -0.2
endloop
endfacet
facet normal -0.788011 0.615661 0
outer loop
vertex -27.2673 -36.8782 0
- vertex -28.2718 -38.1638 -0.1
+ vertex -28.2718 -38.1638 -0.2
vertex -28.2718 -38.1638 0
endloop
endfacet
facet normal 0.00335501 0.999994 -0
outer loop
- vertex -28.2718 -38.1638 -0.1
+ vertex -28.2718 -38.1638 -0.2
vertex -37.6203 -38.1325 0
vertex -28.2718 -38.1638 0
endloop
@@ -13400,13 +13400,13 @@ solid OpenSCAD_Model
facet normal 0.00335501 0.999994 0
outer loop
vertex -37.6203 -38.1325 0
- vertex -28.2718 -38.1638 -0.1
- vertex -37.6203 -38.1325 -0.1
+ vertex -28.2718 -38.1638 -0.2
+ vertex -37.6203 -38.1325 -0.2
endloop
endfacet
facet normal 0.00646856 0.999979 -0
outer loop
- vertex -37.6203 -38.1325 -0.1
+ vertex -37.6203 -38.1325 -0.2
vertex -41.2883 -38.1087 0
vertex -37.6203 -38.1325 0
endloop
@@ -13414,13 +13414,13 @@ solid OpenSCAD_Model
facet normal 0.00646856 0.999979 0
outer loop
vertex -41.2883 -38.1087 0
- vertex -37.6203 -38.1325 -0.1
- vertex -41.2883 -38.1087 -0.1
+ vertex -37.6203 -38.1325 -0.2
+ vertex -41.2883 -38.1087 -0.2
endloop
endfacet
facet normal 0.013462 0.999909 -0
outer loop
- vertex -41.2883 -38.1087 -0.1
+ vertex -41.2883 -38.1087 -0.2
vertex -44.3648 -38.0673 0
vertex -41.2883 -38.1087 0
endloop
@@ -13428,13 +13428,13 @@ solid OpenSCAD_Model
facet normal 0.013462 0.999909 0
outer loop
vertex -44.3648 -38.0673 0
- vertex -41.2883 -38.1087 -0.1
- vertex -44.3648 -38.0673 -0.1
+ vertex -41.2883 -38.1087 -0.2
+ vertex -44.3648 -38.0673 -0.2
endloop
endfacet
facet normal 0.0246353 0.999697 -0
outer loop
- vertex -44.3648 -38.0673 -0.1
+ vertex -44.3648 -38.0673 -0.2
vertex -46.5272 -38.014 0
vertex -44.3648 -38.0673 0
endloop
@@ -13442,13 +13442,13 @@ solid OpenSCAD_Model
facet normal 0.0246353 0.999697 0
outer loop
vertex -46.5272 -38.014 0
- vertex -44.3648 -38.0673 -0.1
- vertex -46.5272 -38.014 -0.1
+ vertex -44.3648 -38.0673 -0.2
+ vertex -46.5272 -38.014 -0.2
endloop
endfacet
facet normal 0.0458604 0.998948 -0
outer loop
- vertex -46.5272 -38.014 -0.1
+ vertex -46.5272 -38.014 -0.2
vertex -47.1648 -37.9848 0
vertex -46.5272 -38.014 0
endloop
@@ -13456,13 +13456,13 @@ solid OpenSCAD_Model
facet normal 0.0458604 0.998948 0
outer loop
vertex -47.1648 -37.9848 0
- vertex -46.5272 -38.014 -0.1
- vertex -47.1648 -37.9848 -0.1
+ vertex -46.5272 -38.014 -0.2
+ vertex -47.1648 -37.9848 -0.2
endloop
endfacet
facet normal 0.103752 0.994603 -0
outer loop
- vertex -47.1648 -37.9848 -0.1
+ vertex -47.1648 -37.9848 -0.2
vertex -47.4529 -37.9547 0
vertex -47.1648 -37.9848 0
endloop
@@ -13470,13 +13470,13 @@ solid OpenSCAD_Model
facet normal 0.103752 0.994603 0
outer loop
vertex -47.4529 -37.9547 0
- vertex -47.1648 -37.9848 -0.1
- vertex -47.4529 -37.9547 -0.1
+ vertex -47.1648 -37.9848 -0.2
+ vertex -47.4529 -37.9547 -0.2
endloop
endfacet
facet normal 0.373487 0.927636 -0
outer loop
- vertex -47.4529 -37.9547 -0.1
+ vertex -47.4529 -37.9547 -0.2
vertex -47.6522 -37.8745 0
vertex -47.4529 -37.9547 0
endloop
@@ -13484,13 +13484,13 @@ solid OpenSCAD_Model
facet normal 0.373487 0.927636 0
outer loop
vertex -47.6522 -37.8745 0
- vertex -47.4529 -37.9547 -0.1
- vertex -47.6522 -37.8745 -0.1
+ vertex -47.4529 -37.9547 -0.2
+ vertex -47.6522 -37.8745 -0.2
endloop
endfacet
facet normal 0.561365 0.827568 -0
outer loop
- vertex -47.6522 -37.8745 -0.1
+ vertex -47.6522 -37.8745 -0.2
vertex -47.8044 -37.7712 0
vertex -47.6522 -37.8745 0
endloop
@@ -13498,125 +13498,125 @@ solid OpenSCAD_Model
facet normal 0.561365 0.827568 0
outer loop
vertex -47.8044 -37.7712 0
- vertex -47.6522 -37.8745 -0.1
- vertex -47.8044 -37.7712 -0.1
+ vertex -47.6522 -37.8745 -0.2
+ vertex -47.8044 -37.7712 -0.2
endloop
endfacet
facet normal 0.753293 0.657685 0
outer loop
vertex -47.8044 -37.7712 0
- vertex -47.9115 -37.6485 -0.1
+ vertex -47.9115 -37.6485 -0.2
vertex -47.9115 -37.6485 0
endloop
endfacet
facet normal 0.753293 0.657685 0
outer loop
- vertex -47.9115 -37.6485 -0.1
+ vertex -47.9115 -37.6485 -0.2
vertex -47.8044 -37.7712 0
- vertex -47.8044 -37.7712 -0.1
+ vertex -47.8044 -37.7712 -0.2
endloop
endfacet
facet normal 0.907474 0.420108 0
outer loop
vertex -47.9115 -37.6485 0
- vertex -47.9758 -37.5097 -0.1
+ vertex -47.9758 -37.5097 -0.2
vertex -47.9758 -37.5097 0
endloop
endfacet
facet normal 0.907474 0.420108 0
outer loop
- vertex -47.9758 -37.5097 -0.1
+ vertex -47.9758 -37.5097 -0.2
vertex -47.9115 -37.6485 0
- vertex -47.9115 -37.6485 -0.1
+ vertex -47.9115 -37.6485 -0.2
endloop
endfacet
facet normal 0.988205 0.153137 0
outer loop
vertex -47.9758 -37.5097 0
- vertex -47.9993 -37.3583 -0.1
+ vertex -47.9993 -37.3583 -0.2
vertex -47.9993 -37.3583 0
endloop
endfacet
facet normal 0.988205 0.153137 0
outer loop
- vertex -47.9993 -37.3583 -0.1
+ vertex -47.9993 -37.3583 -0.2
vertex -47.9758 -37.5097 0
- vertex -47.9758 -37.5097 -0.1
+ vertex -47.9758 -37.5097 -0.2
endloop
endfacet
facet normal 0.995535 -0.0943972 0
outer loop
vertex -47.9993 -37.3583 0
- vertex -47.984 -37.1977 -0.1
+ vertex -47.984 -37.1977 -0.2
vertex -47.984 -37.1977 0
endloop
endfacet
facet normal 0.995535 -0.0943972 0
outer loop
- vertex -47.984 -37.1977 -0.1
+ vertex -47.984 -37.1977 -0.2
vertex -47.9993 -37.3583 0
- vertex -47.9993 -37.3583 -0.1
+ vertex -47.9993 -37.3583 -0.2
endloop
endfacet
facet normal 0.954736 -0.297455 0
outer loop
vertex -47.984 -37.1977 0
- vertex -47.9322 -37.0315 -0.1
+ vertex -47.9322 -37.0315 -0.2
vertex -47.9322 -37.0315 0
endloop
endfacet
facet normal 0.954736 -0.297455 0
outer loop
- vertex -47.9322 -37.0315 -0.1
+ vertex -47.9322 -37.0315 -0.2
vertex -47.984 -37.1977 0
- vertex -47.984 -37.1977 -0.1
+ vertex -47.984 -37.1977 -0.2
endloop
endfacet
facet normal 0.890101 -0.455763 0
outer loop
vertex -47.9322 -37.0315 0
- vertex -47.846 -36.863 -0.1
+ vertex -47.846 -36.863 -0.2
vertex -47.846 -36.863 0
endloop
endfacet
facet normal 0.890101 -0.455763 0
outer loop
- vertex -47.846 -36.863 -0.1
+ vertex -47.846 -36.863 -0.2
vertex -47.9322 -37.0315 0
- vertex -47.9322 -37.0315 -0.1
+ vertex -47.9322 -37.0315 -0.2
endloop
endfacet
facet normal 0.815677 -0.578507 0
outer loop
vertex -47.846 -36.863 0
- vertex -47.7274 -36.6957 -0.1
+ vertex -47.7274 -36.6957 -0.2
vertex -47.7274 -36.6957 0
endloop
endfacet
facet normal 0.815677 -0.578507 0
outer loop
- vertex -47.7274 -36.6957 -0.1
+ vertex -47.7274 -36.6957 -0.2
vertex -47.846 -36.863 0
- vertex -47.846 -36.863 -0.1
+ vertex -47.846 -36.863 -0.2
endloop
endfacet
facet normal 0.737497 -0.67535 0
outer loop
vertex -47.7274 -36.6957 0
- vertex -47.5785 -36.5332 -0.1
+ vertex -47.5785 -36.5332 -0.2
vertex -47.5785 -36.5332 0
endloop
endfacet
facet normal 0.737497 -0.67535 0
outer loop
- vertex -47.5785 -36.5332 -0.1
+ vertex -47.5785 -36.5332 -0.2
vertex -47.7274 -36.6957 0
- vertex -47.7274 -36.6957 -0.1
+ vertex -47.7274 -36.6957 -0.2
endloop
endfacet
facet normal 0.65739 -0.753551 0
outer loop
- vertex -47.5785 -36.5332 -0.1
+ vertex -47.5785 -36.5332 -0.2
vertex -47.4015 -36.3788 0
vertex -47.5785 -36.5332 0
endloop
@@ -13624,13 +13624,13 @@ solid OpenSCAD_Model
facet normal 0.65739 -0.753551 0
outer loop
vertex -47.4015 -36.3788 0
- vertex -47.5785 -36.5332 -0.1
- vertex -47.4015 -36.3788 -0.1
+ vertex -47.5785 -36.5332 -0.2
+ vertex -47.4015 -36.3788 -0.2
endloop
endfacet
facet normal 0.575341 -0.817914 0
outer loop
- vertex -47.4015 -36.3788 -0.1
+ vertex -47.4015 -36.3788 -0.2
vertex -47.1985 -36.2359 0
vertex -47.4015 -36.3788 0
endloop
@@ -13638,13 +13638,13 @@ solid OpenSCAD_Model
facet normal 0.575341 -0.817914 0
outer loop
vertex -47.1985 -36.2359 0
- vertex -47.4015 -36.3788 -0.1
- vertex -47.1985 -36.2359 -0.1
+ vertex -47.4015 -36.3788 -0.2
+ vertex -47.1985 -36.2359 -0.2
endloop
endfacet
facet normal 0.490533 -0.871423 0
outer loop
- vertex -47.1985 -36.2359 -0.1
+ vertex -47.1985 -36.2359 -0.2
vertex -46.9715 -36.1082 0
vertex -47.1985 -36.2359 0
endloop
@@ -13652,13 +13652,13 @@ solid OpenSCAD_Model
facet normal 0.490533 -0.871423 0
outer loop
vertex -46.9715 -36.1082 0
- vertex -47.1985 -36.2359 -0.1
- vertex -46.9715 -36.1082 -0.1
+ vertex -47.1985 -36.2359 -0.2
+ vertex -46.9715 -36.1082 -0.2
endloop
endfacet
facet normal 0.402049 -0.915618 0
outer loop
- vertex -46.9715 -36.1082 -0.1
+ vertex -46.9715 -36.1082 -0.2
vertex -46.7228 -35.999 0
vertex -46.9715 -36.1082 0
endloop
@@ -13666,13 +13666,13 @@ solid OpenSCAD_Model
facet normal 0.402049 -0.915618 0
outer loop
vertex -46.7228 -35.999 0
- vertex -46.9715 -36.1082 -0.1
- vertex -46.7228 -35.999 -0.1
+ vertex -46.9715 -36.1082 -0.2
+ vertex -46.7228 -35.999 -0.2
endloop
endfacet
facet normal 0.309107 -0.951027 0
outer loop
- vertex -46.7228 -35.999 -0.1
+ vertex -46.7228 -35.999 -0.2
vertex -46.4544 -35.9117 0
vertex -46.7228 -35.999 0
endloop
@@ -13680,13 +13680,13 @@ solid OpenSCAD_Model
facet normal 0.309107 -0.951027 0
outer loop
vertex -46.4544 -35.9117 0
- vertex -46.7228 -35.999 -0.1
- vertex -46.4544 -35.9117 -0.1
+ vertex -46.7228 -35.999 -0.2
+ vertex -46.4544 -35.9117 -0.2
endloop
endfacet
facet normal 0.211211 -0.977441 0
outer loop
- vertex -46.4544 -35.9117 -0.1
+ vertex -46.4544 -35.9117 -0.2
vertex -46.1684 -35.8499 0
vertex -46.4544 -35.9117 0
endloop
@@ -13694,13 +13694,13 @@ solid OpenSCAD_Model
facet normal 0.211211 -0.977441 0
outer loop
vertex -46.1684 -35.8499 0
- vertex -46.4544 -35.9117 -0.1
- vertex -46.1684 -35.8499 -0.1
+ vertex -46.4544 -35.9117 -0.2
+ vertex -46.1684 -35.8499 -0.2
endloop
endfacet
facet normal 0.185786 -0.98259 0
outer loop
- vertex -46.1684 -35.8499 -0.1
+ vertex -46.1684 -35.8499 -0.2
vertex -45.8475 -35.7893 0
vertex -46.1684 -35.8499 0
endloop
@@ -13708,13 +13708,13 @@ solid OpenSCAD_Model
facet normal 0.185786 -0.98259 0
outer loop
vertex -45.8475 -35.7893 0
- vertex -46.1684 -35.8499 -0.1
- vertex -45.8475 -35.7893 -0.1
+ vertex -46.1684 -35.8499 -0.2
+ vertex -45.8475 -35.7893 -0.2
endloop
endfacet
facet normal 0.247179 -0.96897 0
outer loop
- vertex -45.8475 -35.7893 -0.1
+ vertex -45.8475 -35.7893 -0.2
vertex -45.5508 -35.7136 0
vertex -45.8475 -35.7893 0
endloop
@@ -13722,13 +13722,13 @@ solid OpenSCAD_Model
facet normal 0.247179 -0.96897 0
outer loop
vertex -45.5508 -35.7136 0
- vertex -45.8475 -35.7893 -0.1
- vertex -45.5508 -35.7136 -0.1
+ vertex -45.8475 -35.7893 -0.2
+ vertex -45.5508 -35.7136 -0.2
endloop
endfacet
facet normal 0.324475 -0.945894 0
outer loop
- vertex -45.5508 -35.7136 -0.1
+ vertex -45.5508 -35.7136 -0.2
vertex -45.2753 -35.6191 0
vertex -45.5508 -35.7136 0
endloop
@@ -13736,13 +13736,13 @@ solid OpenSCAD_Model
facet normal 0.324475 -0.945894 0
outer loop
vertex -45.2753 -35.6191 0
- vertex -45.5508 -35.7136 -0.1
- vertex -45.2753 -35.6191 -0.1
+ vertex -45.5508 -35.7136 -0.2
+ vertex -45.2753 -35.6191 -0.2
endloop
endfacet
facet normal 0.414245 -0.910165 0
outer loop
- vertex -45.2753 -35.6191 -0.1
+ vertex -45.2753 -35.6191 -0.2
vertex -45.0179 -35.5019 0
vertex -45.2753 -35.6191 0
endloop
@@ -13750,13 +13750,13 @@ solid OpenSCAD_Model
facet normal 0.414245 -0.910165 0
outer loop
vertex -45.0179 -35.5019 0
- vertex -45.2753 -35.6191 -0.1
- vertex -45.0179 -35.5019 -0.1
+ vertex -45.2753 -35.6191 -0.2
+ vertex -45.0179 -35.5019 -0.2
endloop
endfacet
facet normal 0.509766 -0.860313 0
outer loop
- vertex -45.0179 -35.5019 -0.1
+ vertex -45.0179 -35.5019 -0.2
vertex -44.7755 -35.3583 0
vertex -45.0179 -35.5019 0
endloop
@@ -13764,13 +13764,13 @@ solid OpenSCAD_Model
facet normal 0.509766 -0.860313 0
outer loop
vertex -44.7755 -35.3583 0
- vertex -45.0179 -35.5019 -0.1
- vertex -44.7755 -35.3583 -0.1
+ vertex -45.0179 -35.5019 -0.2
+ vertex -44.7755 -35.3583 -0.2
endloop
endfacet
facet normal 0.602421 -0.798179 0
outer loop
- vertex -44.7755 -35.3583 -0.1
+ vertex -44.7755 -35.3583 -0.2
vertex -44.5451 -35.1844 0
vertex -44.7755 -35.3583 0
endloop
@@ -13778,13 +13778,13 @@ solid OpenSCAD_Model
facet normal 0.602421 -0.798179 0
outer loop
vertex -44.5451 -35.1844 0
- vertex -44.7755 -35.3583 -0.1
- vertex -44.5451 -35.1844 -0.1
+ vertex -44.7755 -35.3583 -0.2
+ vertex -44.5451 -35.1844 -0.2
endloop
endfacet
facet normal 0.684546 -0.728969 0
outer loop
- vertex -44.5451 -35.1844 -0.1
+ vertex -44.5451 -35.1844 -0.2
vertex -44.3237 -34.9765 0
vertex -44.5451 -35.1844 0
endloop
@@ -13792,307 +13792,307 @@ solid OpenSCAD_Model
facet normal 0.684546 -0.728969 0
outer loop
vertex -44.3237 -34.9765 0
- vertex -44.5451 -35.1844 -0.1
- vertex -44.3237 -34.9765 -0.1
+ vertex -44.5451 -35.1844 -0.2
+ vertex -44.3237 -34.9765 -0.2
endloop
endfacet
facet normal 0.751841 -0.659345 0
outer loop
vertex -44.3237 -34.9765 0
- vertex -44.108 -34.7306 -0.1
+ vertex -44.108 -34.7306 -0.2
vertex -44.108 -34.7306 0
endloop
endfacet
facet normal 0.751841 -0.659345 0
outer loop
- vertex -44.108 -34.7306 -0.1
+ vertex -44.108 -34.7306 -0.2
vertex -44.3237 -34.9765 0
- vertex -44.3237 -34.9765 -0.1
+ vertex -44.3237 -34.9765 -0.2
endloop
endfacet
facet normal 0.803805 -0.594893 0
outer loop
vertex -44.108 -34.7306 0
- vertex -43.8952 -34.443 -0.1
+ vertex -43.8952 -34.443 -0.2
vertex -43.8952 -34.443 0
endloop
endfacet
facet normal 0.803805 -0.594893 0
outer loop
- vertex -43.8952 -34.443 -0.1
+ vertex -43.8952 -34.443 -0.2
vertex -44.108 -34.7306 0
- vertex -44.108 -34.7306 -0.1
+ vertex -44.108 -34.7306 -0.2
endloop
endfacet
facet normal 0.842352 -0.538928 0
outer loop
vertex -43.8952 -34.443 0
- vertex -43.682 -34.1098 -0.1
+ vertex -43.682 -34.1098 -0.2
vertex -43.682 -34.1098 0
endloop
endfacet
facet normal 0.842352 -0.538928 0
outer loop
- vertex -43.682 -34.1098 -0.1
+ vertex -43.682 -34.1098 -0.2
vertex -43.8952 -34.443 0
- vertex -43.8952 -34.443 -0.1
+ vertex -43.8952 -34.443 -0.2
endloop
endfacet
facet normal 0.870266 -0.492581 0
outer loop
vertex -43.682 -34.1098 0
- vertex -43.4655 -33.7273 -0.1
+ vertex -43.4655 -33.7273 -0.2
vertex -43.4655 -33.7273 0
endloop
endfacet
facet normal 0.870266 -0.492581 0
outer loop
- vertex -43.4655 -33.7273 -0.1
+ vertex -43.4655 -33.7273 -0.2
vertex -43.682 -34.1098 0
- vertex -43.682 -34.1098 -0.1
+ vertex -43.682 -34.1098 -0.2
endloop
endfacet
facet normal 0.890236 -0.4555 0
outer loop
vertex -43.4655 -33.7273 0
- vertex -43.2426 -33.2915 -0.1
+ vertex -43.2426 -33.2915 -0.2
vertex -43.2426 -33.2915 0
endloop
endfacet
facet normal 0.890236 -0.4555 0
outer loop
- vertex -43.2426 -33.2915 -0.1
+ vertex -43.2426 -33.2915 -0.2
vertex -43.4655 -33.7273 0
- vertex -43.4655 -33.7273 -0.1
+ vertex -43.4655 -33.7273 -0.2
endloop
endfacet
facet normal 0.909757 -0.41514 0
outer loop
vertex -43.2426 -33.2915 0
- vertex -42.7651 -32.2453 -0.1
+ vertex -42.7651 -32.2453 -0.2
vertex -42.7651 -32.2453 0
endloop
endfacet
facet normal 0.909757 -0.41514 0
outer loop
- vertex -42.7651 -32.2453 -0.1
+ vertex -42.7651 -32.2453 -0.2
vertex -43.2426 -33.2915 0
- vertex -43.2426 -33.2915 -0.1
+ vertex -43.2426 -33.2915 -0.2
endloop
endfacet
facet normal 0.924016 -0.382355 0
outer loop
vertex -42.7651 -32.2453 0
- vertex -42.2252 -30.9405 -0.1
+ vertex -42.2252 -30.9405 -0.2
vertex -42.2252 -30.9405 0
endloop
endfacet
facet normal 0.924016 -0.382355 0
outer loop
- vertex -42.2252 -30.9405 -0.1
+ vertex -42.2252 -30.9405 -0.2
vertex -42.7651 -32.2453 0
- vertex -42.7651 -32.2453 -0.1
+ vertex -42.7651 -32.2453 -0.2
endloop
endfacet
facet normal 0.922377 -0.38629 0
outer loop
vertex -42.2252 -30.9405 0
- vertex -41.2695 -28.6585 -0.1
+ vertex -41.2695 -28.6585 -0.2
vertex -41.2695 -28.6585 0
endloop
endfacet
facet normal 0.922377 -0.38629 0
outer loop
- vertex -41.2695 -28.6585 -0.1
+ vertex -41.2695 -28.6585 -0.2
vertex -42.2252 -30.9405 0
- vertex -42.2252 -30.9405 -0.1
+ vertex -42.2252 -30.9405 -0.2
endloop
endfacet
facet normal 0.918146 -0.396243 0
outer loop
vertex -41.2695 -28.6585 0
- vertex -39.8955 -25.4747 -0.1
+ vertex -39.8955 -25.4747 -0.2
vertex -39.8955 -25.4747 0
endloop
endfacet
facet normal 0.918146 -0.396243 0
outer loop
- vertex -39.8955 -25.4747 -0.1
+ vertex -39.8955 -25.4747 -0.2
vertex -41.2695 -28.6585 0
- vertex -41.2695 -28.6585 -0.1
+ vertex -41.2695 -28.6585 -0.2
endloop
endfacet
facet normal 0.918872 -0.394555 0
outer loop
vertex -39.8955 -25.4747 0
- vertex -38.3469 -21.8682 -0.1
+ vertex -38.3469 -21.8682 -0.2
vertex -38.3469 -21.8682 0
endloop
endfacet
facet normal 0.918872 -0.394555 0
outer loop
- vertex -38.3469 -21.8682 -0.1
+ vertex -38.3469 -21.8682 -0.2
vertex -39.8955 -25.4747 0
- vertex -39.8955 -25.4747 -0.1
+ vertex -39.8955 -25.4747 -0.2
endloop
endfacet
facet normal 0.92432 -0.381618 0
outer loop
vertex -38.3469 -21.8682 0
- vertex -37.0431 -18.7102 -0.1
+ vertex -37.0431 -18.7102 -0.2
vertex -37.0431 -18.7102 0
endloop
endfacet
facet normal 0.92432 -0.381618 0
outer loop
- vertex -37.0431 -18.7102 -0.1
+ vertex -37.0431 -18.7102 -0.2
vertex -38.3469 -21.8682 0
- vertex -38.3469 -21.8682 -0.1
+ vertex -38.3469 -21.8682 -0.2
endloop
endfacet
facet normal 0.929541 -0.368719 0
outer loop
vertex -37.0431 -18.7102 0
- vertex -36.5163 -17.3821 -0.1
+ vertex -36.5163 -17.3821 -0.2
vertex -36.5163 -17.3821 0
endloop
endfacet
facet normal 0.929541 -0.368719 0
outer loop
- vertex -36.5163 -17.3821 -0.1
+ vertex -36.5163 -17.3821 -0.2
vertex -37.0431 -18.7102 0
- vertex -37.0431 -18.7102 -0.1
+ vertex -37.0431 -18.7102 -0.2
endloop
endfacet
facet normal 0.934424 -0.356162 0
outer loop
vertex -36.5163 -17.3821 0
- vertex -36.0907 -16.2655 -0.1
+ vertex -36.0907 -16.2655 -0.2
vertex -36.0907 -16.2655 0
endloop
endfacet
facet normal 0.934424 -0.356162 0
outer loop
- vertex -36.0907 -16.2655 -0.1
+ vertex -36.0907 -16.2655 -0.2
vertex -36.5163 -17.3821 0
- vertex -36.5163 -17.3821 -0.1
+ vertex -36.5163 -17.3821 -0.2
endloop
endfacet
facet normal 0.941869 -0.335981 0
outer loop
vertex -36.0907 -16.2655 0
- vertex -35.7796 -15.3934 -0.1
+ vertex -35.7796 -15.3934 -0.2
vertex -35.7796 -15.3934 0
endloop
endfacet
facet normal 0.941869 -0.335981 0
outer loop
- vertex -35.7796 -15.3934 -0.1
+ vertex -35.7796 -15.3934 -0.2
vertex -36.0907 -16.2655 0
- vertex -36.0907 -16.2655 -0.1
+ vertex -36.0907 -16.2655 -0.2
endloop
endfacet
facet normal 0.955627 -0.294578 0
outer loop
vertex -35.7796 -15.3934 0
- vertex -35.5964 -14.799 -0.1
+ vertex -35.5964 -14.799 -0.2
vertex -35.5964 -14.799 0
endloop
endfacet
facet normal 0.955627 -0.294578 0
outer loop
- vertex -35.5964 -14.799 -0.1
+ vertex -35.5964 -14.799 -0.2
vertex -35.7796 -15.3934 0
- vertex -35.7796 -15.3934 -0.1
+ vertex -35.7796 -15.3934 -0.2
endloop
endfacet
facet normal 0.97537 -0.220574 0
outer loop
vertex -35.5964 -14.799 0
- vertex -35.5123 -14.4274 -0.1
+ vertex -35.5123 -14.4274 -0.2
vertex -35.5123 -14.4274 0
endloop
endfacet
facet normal 0.97537 -0.220574 0
outer loop
- vertex -35.5123 -14.4274 -0.1
+ vertex -35.5123 -14.4274 -0.2
vertex -35.5964 -14.799 0
- vertex -35.5964 -14.799 -0.1
+ vertex -35.5964 -14.799 -0.2
endloop
endfacet
facet normal 0.992467 -0.122514 0
outer loop
vertex -35.5123 -14.4274 0
- vertex -35.4754 -14.1281 -0.1
+ vertex -35.4754 -14.1281 -0.2
vertex -35.4754 -14.1281 0
endloop
endfacet
facet normal 0.992467 -0.122514 0
outer loop
- vertex -35.4754 -14.1281 -0.1
+ vertex -35.4754 -14.1281 -0.2
vertex -35.5123 -14.4274 0
- vertex -35.5123 -14.4274 -0.1
+ vertex -35.5123 -14.4274 -0.2
endloop
endfacet
facet normal 0.997952 0.0639612 0
outer loop
vertex -35.4754 -14.1281 0
- vertex -35.4904 -13.894 -0.1
+ vertex -35.4904 -13.894 -0.2
vertex -35.4904 -13.894 0
endloop
endfacet
facet normal 0.997952 0.0639612 0
outer loop
- vertex -35.4904 -13.894 -0.1
+ vertex -35.4904 -13.894 -0.2
vertex -35.4754 -14.1281 0
- vertex -35.4754 -14.1281 -0.1
+ vertex -35.4754 -14.1281 -0.2
endloop
endfacet
facet normal 0.957653 0.287925 0
outer loop
vertex -35.4904 -13.894 0
- vertex -35.5189 -13.7992 -0.1
+ vertex -35.5189 -13.7992 -0.2
vertex -35.5189 -13.7992 0
endloop
endfacet
facet normal 0.957653 0.287925 0
outer loop
- vertex -35.5189 -13.7992 -0.1
+ vertex -35.5189 -13.7992 -0.2
vertex -35.4904 -13.894 0
- vertex -35.4904 -13.894 -0.1
+ vertex -35.4904 -13.894 -0.2
endloop
endfacet
facet normal 0.882255 0.470771 0
outer loop
vertex -35.5189 -13.7992 0
- vertex -35.5622 -13.718 -0.1
+ vertex -35.5622 -13.718 -0.2
vertex -35.5622 -13.718 0
endloop
endfacet
facet normal 0.882255 0.470771 0
outer loop
- vertex -35.5622 -13.718 -0.1
+ vertex -35.5622 -13.718 -0.2
vertex -35.5189 -13.7992 0
- vertex -35.5189 -13.7992 -0.1
+ vertex -35.5189 -13.7992 -0.2
endloop
endfacet
facet normal 0.758808 0.651314 0
outer loop
vertex -35.5622 -13.718 0
- vertex -35.6209 -13.6496 -0.1
+ vertex -35.6209 -13.6496 -0.2
vertex -35.6209 -13.6496 0
endloop
endfacet
facet normal 0.758808 0.651314 0
outer loop
- vertex -35.6209 -13.6496 -0.1
+ vertex -35.6209 -13.6496 -0.2
vertex -35.5622 -13.718 0
- vertex -35.5622 -13.718 -0.1
+ vertex -35.5622 -13.718 -0.2
endloop
endfacet
facet normal 0.603335 0.797487 -0
outer loop
- vertex -35.6209 -13.6496 -0.1
+ vertex -35.6209 -13.6496 -0.2
vertex -35.6956 -13.593 0
vertex -35.6209 -13.6496 0
endloop
@@ -14100,13 +14100,13 @@ solid OpenSCAD_Model
facet normal 0.603335 0.797487 0
outer loop
vertex -35.6956 -13.593 0
- vertex -35.6209 -13.6496 -0.1
- vertex -35.6956 -13.593 -0.1
+ vertex -35.6209 -13.6496 -0.2
+ vertex -35.6956 -13.593 -0.2
endloop
endfacet
facet normal 0.375678 0.92675 -0
outer loop
- vertex -35.6956 -13.593 -0.1
+ vertex -35.6956 -13.593 -0.2
vertex -35.8956 -13.512 0
vertex -35.6956 -13.593 0
endloop
@@ -14114,13 +14114,13 @@ solid OpenSCAD_Model
facet normal 0.375678 0.92675 0
outer loop
vertex -35.8956 -13.512 0
- vertex -35.6956 -13.593 -0.1
- vertex -35.8956 -13.512 -0.1
+ vertex -35.6956 -13.593 -0.2
+ vertex -35.8956 -13.512 -0.2
endloop
endfacet
facet normal 0.161053 0.986946 -0
outer loop
- vertex -35.8956 -13.512 -0.1
+ vertex -35.8956 -13.512 -0.2
vertex -36.1669 -13.4677 0
vertex -35.8956 -13.512 0
endloop
@@ -14128,13 +14128,13 @@ solid OpenSCAD_Model
facet normal 0.161053 0.986946 0
outer loop
vertex -36.1669 -13.4677 0
- vertex -35.8956 -13.512 -0.1
- vertex -36.1669 -13.4677 -0.1
+ vertex -35.8956 -13.512 -0.2
+ vertex -36.1669 -13.4677 -0.2
endloop
endfacet
facet normal 0.0419804 0.999118 -0
outer loop
- vertex -36.1669 -13.4677 -0.1
+ vertex -36.1669 -13.4677 -0.2
vertex -36.5145 -13.4531 0
vertex -36.1669 -13.4677 0
endloop
@@ -14142,13 +14142,13 @@ solid OpenSCAD_Model
facet normal 0.0419804 0.999118 0
outer loop
vertex -36.5145 -13.4531 0
- vertex -36.1669 -13.4677 -0.1
- vertex -36.5145 -13.4531 -0.1
+ vertex -36.1669 -13.4677 -0.2
+ vertex -36.5145 -13.4531 -0.2
endloop
endfacet
facet normal 0.0664354 0.997791 -0
outer loop
- vertex -36.5145 -13.4531 -0.1
+ vertex -36.5145 -13.4531 -0.2
vertex -36.7305 -13.4387 0
vertex -36.5145 -13.4531 0
endloop
@@ -14156,13 +14156,13 @@ solid OpenSCAD_Model
facet normal 0.0664354 0.997791 0
outer loop
vertex -36.7305 -13.4387 0
- vertex -36.5145 -13.4531 -0.1
- vertex -36.7305 -13.4387 -0.1
+ vertex -36.5145 -13.4531 -0.2
+ vertex -36.7305 -13.4387 -0.2
endloop
endfacet
facet normal 0.199985 0.979799 -0
outer loop
- vertex -36.7305 -13.4387 -0.1
+ vertex -36.7305 -13.4387 -0.2
vertex -36.9216 -13.3997 0
vertex -36.7305 -13.4387 0
endloop
@@ -14170,13 +14170,13 @@ solid OpenSCAD_Model
facet normal 0.199985 0.979799 0
outer loop
vertex -36.9216 -13.3997 0
- vertex -36.7305 -13.4387 -0.1
- vertex -36.9216 -13.3997 -0.1
+ vertex -36.7305 -13.4387 -0.2
+ vertex -36.9216 -13.3997 -0.2
endloop
endfacet
facet normal 0.346161 0.938175 -0
outer loop
- vertex -36.9216 -13.3997 -0.1
+ vertex -36.9216 -13.3997 -0.2
vertex -37.0874 -13.3385 0
vertex -36.9216 -13.3997 0
endloop
@@ -14184,13 +14184,13 @@ solid OpenSCAD_Model
facet normal 0.346161 0.938175 0
outer loop
vertex -37.0874 -13.3385 0
- vertex -36.9216 -13.3997 -0.1
- vertex -37.0874 -13.3385 -0.1
+ vertex -36.9216 -13.3997 -0.2
+ vertex -37.0874 -13.3385 -0.2
endloop
endfacet
facet normal 0.49992 0.866072 -0
outer loop
- vertex -37.0874 -13.3385 -0.1
+ vertex -37.0874 -13.3385 -0.2
vertex -37.2276 -13.2576 0
vertex -37.0874 -13.3385 0
endloop
@@ -14198,13 +14198,13 @@ solid OpenSCAD_Model
facet normal 0.49992 0.866072 0
outer loop
vertex -37.2276 -13.2576 0
- vertex -37.0874 -13.3385 -0.1
- vertex -37.2276 -13.2576 -0.1
+ vertex -37.0874 -13.3385 -0.2
+ vertex -37.2276 -13.2576 -0.2
endloop
endfacet
facet normal 0.652051 0.758175 -0
outer loop
- vertex -37.2276 -13.2576 -0.1
+ vertex -37.2276 -13.2576 -0.2
vertex -37.3418 -13.1594 0
vertex -37.2276 -13.2576 0
endloop
@@ -14212,139 +14212,139 @@ solid OpenSCAD_Model
facet normal 0.652051 0.758175 0
outer loop
vertex -37.3418 -13.1594 0
- vertex -37.2276 -13.2576 -0.1
- vertex -37.3418 -13.1594 -0.1
+ vertex -37.2276 -13.2576 -0.2
+ vertex -37.3418 -13.1594 -0.2
endloop
endfacet
facet normal 0.789664 0.613539 0
outer loop
vertex -37.3418 -13.1594 0
- vertex -37.4296 -13.0463 -0.1
+ vertex -37.4296 -13.0463 -0.2
vertex -37.4296 -13.0463 0
endloop
endfacet
facet normal 0.789664 0.613539 0
outer loop
- vertex -37.4296 -13.0463 -0.1
+ vertex -37.4296 -13.0463 -0.2
vertex -37.3418 -13.1594 0
- vertex -37.3418 -13.1594 -0.1
+ vertex -37.3418 -13.1594 -0.2
endloop
endfacet
facet normal 0.898957 0.438037 0
outer loop
vertex -37.4296 -13.0463 0
- vertex -37.4908 -12.9209 -0.1
+ vertex -37.4908 -12.9209 -0.2
vertex -37.4908 -12.9209 0
endloop
endfacet
facet normal 0.898957 0.438037 0
outer loop
- vertex -37.4908 -12.9209 -0.1
+ vertex -37.4908 -12.9209 -0.2
vertex -37.4296 -13.0463 0
- vertex -37.4296 -13.0463 -0.1
+ vertex -37.4296 -13.0463 -0.2
endloop
endfacet
facet normal 0.969773 0.244009 0
outer loop
vertex -37.4908 -12.9209 0
- vertex -37.5249 -12.7854 -0.1
+ vertex -37.5249 -12.7854 -0.2
vertex -37.5249 -12.7854 0
endloop
endfacet
facet normal 0.969773 0.244009 0
outer loop
- vertex -37.5249 -12.7854 -0.1
+ vertex -37.5249 -12.7854 -0.2
vertex -37.4908 -12.9209 0
- vertex -37.4908 -12.9209 -0.1
+ vertex -37.4908 -12.9209 -0.2
endloop
endfacet
facet normal 0.99892 0.0464614 0
outer loop
vertex -37.5249 -12.7854 0
- vertex -37.5315 -12.6425 -0.1
+ vertex -37.5315 -12.6425 -0.2
vertex -37.5315 -12.6425 0
endloop
endfacet
facet normal 0.99892 0.0464614 0
outer loop
- vertex -37.5315 -12.6425 -0.1
+ vertex -37.5315 -12.6425 -0.2
vertex -37.5249 -12.7854 0
- vertex -37.5249 -12.7854 -0.1
+ vertex -37.5249 -12.7854 -0.2
endloop
endfacet
facet normal 0.989966 -0.141306 0
outer loop
vertex -37.5315 -12.6425 0
- vertex -37.5104 -12.4945 -0.1
+ vertex -37.5104 -12.4945 -0.2
vertex -37.5104 -12.4945 0
endloop
endfacet
facet normal 0.989966 -0.141306 0
outer loop
- vertex -37.5104 -12.4945 -0.1
+ vertex -37.5104 -12.4945 -0.2
vertex -37.5315 -12.6425 0
- vertex -37.5315 -12.6425 -0.1
+ vertex -37.5315 -12.6425 -0.2
endloop
endfacet
facet normal 0.950483 -0.310777 0
outer loop
vertex -37.5104 -12.4945 0
- vertex -37.4611 -12.3438 -0.1
+ vertex -37.4611 -12.3438 -0.2
vertex -37.4611 -12.3438 0
endloop
endfacet
facet normal 0.950483 -0.310777 0
outer loop
- vertex -37.4611 -12.3438 -0.1
+ vertex -37.4611 -12.3438 -0.2
vertex -37.5104 -12.4945 0
- vertex -37.5104 -12.4945 -0.1
+ vertex -37.5104 -12.4945 -0.2
endloop
endfacet
facet normal 0.888869 -0.458162 0
outer loop
vertex -37.4611 -12.3438 0
- vertex -37.3834 -12.1929 -0.1
+ vertex -37.3834 -12.1929 -0.2
vertex -37.3834 -12.1929 0
endloop
endfacet
facet normal 0.888869 -0.458162 0
outer loop
- vertex -37.3834 -12.1929 -0.1
+ vertex -37.3834 -12.1929 -0.2
vertex -37.4611 -12.3438 0
- vertex -37.4611 -12.3438 -0.1
+ vertex -37.4611 -12.3438 -0.2
endloop
endfacet
facet normal 0.812527 -0.582923 0
outer loop
vertex -37.3834 -12.1929 0
- vertex -37.2767 -12.0443 -0.1
+ vertex -37.2767 -12.0443 -0.2
vertex -37.2767 -12.0443 0
endloop
endfacet
facet normal 0.812527 -0.582923 0
outer loop
- vertex -37.2767 -12.0443 -0.1
+ vertex -37.2767 -12.0443 -0.2
vertex -37.3834 -12.1929 0
- vertex -37.3834 -12.1929 -0.1
+ vertex -37.3834 -12.1929 -0.2
endloop
endfacet
facet normal 0.727267 -0.686355 0
outer loop
vertex -37.2767 -12.0443 0
- vertex -37.1409 -11.9004 -0.1
+ vertex -37.1409 -11.9004 -0.2
vertex -37.1409 -11.9004 0
endloop
endfacet
facet normal 0.727267 -0.686355 0
outer loop
- vertex -37.1409 -11.9004 -0.1
+ vertex -37.1409 -11.9004 -0.2
vertex -37.2767 -12.0443 0
- vertex -37.2767 -12.0443 -0.1
+ vertex -37.2767 -12.0443 -0.2
endloop
endfacet
facet normal 0.637301 -0.770615 0
outer loop
- vertex -37.1409 -11.9004 -0.1
+ vertex -37.1409 -11.9004 -0.2
vertex -36.9755 -11.7636 0
vertex -37.1409 -11.9004 0
endloop
@@ -14352,13 +14352,13 @@ solid OpenSCAD_Model
facet normal 0.637301 -0.770615 0
outer loop
vertex -36.9755 -11.7636 0
- vertex -37.1409 -11.9004 -0.1
- vertex -36.9755 -11.7636 -0.1
+ vertex -37.1409 -11.9004 -0.2
+ vertex -36.9755 -11.7636 -0.2
endloop
endfacet
facet normal 0.545722 -0.837967 0
outer loop
- vertex -36.9755 -11.7636 -0.1
+ vertex -36.9755 -11.7636 -0.2
vertex -36.7802 -11.6364 0
vertex -36.9755 -11.7636 0
endloop
@@ -14366,13 +14366,13 @@ solid OpenSCAD_Model
facet normal 0.545722 -0.837967 0
outer loop
vertex -36.7802 -11.6364 0
- vertex -36.9755 -11.7636 -0.1
- vertex -36.7802 -11.6364 -0.1
+ vertex -36.9755 -11.7636 -0.2
+ vertex -36.7802 -11.6364 -0.2
endloop
endfacet
facet normal 0.431805 -0.901967 0
outer loop
- vertex -36.7802 -11.6364 -0.1
+ vertex -36.7802 -11.6364 -0.2
vertex -36.527 -11.5152 0
vertex -36.7802 -11.6364 0
endloop
@@ -14380,13 +14380,13 @@ solid OpenSCAD_Model
facet normal 0.431805 -0.901967 0
outer loop
vertex -36.527 -11.5152 0
- vertex -36.7802 -11.6364 -0.1
- vertex -36.527 -11.5152 -0.1
+ vertex -36.7802 -11.6364 -0.2
+ vertex -36.527 -11.5152 -0.2
endloop
endfacet
facet normal 0.256105 -0.966649 0
outer loop
- vertex -36.527 -11.5152 -0.1
+ vertex -36.527 -11.5152 -0.2
vertex -36.1819 -11.4238 0
vertex -36.527 -11.5152 0
endloop
@@ -14394,13 +14394,13 @@ solid OpenSCAD_Model
facet normal 0.256105 -0.966649 0
outer loop
vertex -36.1819 -11.4238 0
- vertex -36.527 -11.5152 -0.1
- vertex -36.1819 -11.4238 -0.1
+ vertex -36.527 -11.5152 -0.2
+ vertex -36.1819 -11.4238 -0.2
endloop
endfacet
facet normal 0.121259 -0.992621 0
outer loop
- vertex -36.1819 -11.4238 -0.1
+ vertex -36.1819 -11.4238 -0.2
vertex -35.6555 -11.3595 0
vertex -36.1819 -11.4238 0
endloop
@@ -14408,13 +14408,13 @@ solid OpenSCAD_Model
facet normal 0.121259 -0.992621 0
outer loop
vertex -35.6555 -11.3595 0
- vertex -36.1819 -11.4238 -0.1
- vertex -35.6555 -11.3595 -0.1
+ vertex -36.1819 -11.4238 -0.2
+ vertex -35.6555 -11.3595 -0.2
endloop
endfacet
facet normal 0.0498988 -0.998754 0
outer loop
- vertex -35.6555 -11.3595 -0.1
+ vertex -35.6555 -11.3595 -0.2
vertex -34.8583 -11.3197 0
vertex -35.6555 -11.3595 0
endloop
@@ -14422,13 +14422,13 @@ solid OpenSCAD_Model
facet normal 0.0498988 -0.998754 0
outer loop
vertex -34.8583 -11.3197 0
- vertex -35.6555 -11.3595 -0.1
- vertex -34.8583 -11.3197 -0.1
+ vertex -35.6555 -11.3595 -0.2
+ vertex -34.8583 -11.3197 -0.2
endloop
endfacet
facet normal 0.0155398 -0.999879 0
outer loop
- vertex -34.8583 -11.3197 -0.1
+ vertex -34.8583 -11.3197 -0.2
vertex -33.7011 -11.3017 0
vertex -34.8583 -11.3197 0
endloop
@@ -14436,13 +14436,13 @@ solid OpenSCAD_Model
facet normal 0.0155398 -0.999879 0
outer loop
vertex -33.7011 -11.3017 0
- vertex -34.8583 -11.3197 -0.1
- vertex -33.7011 -11.3017 -0.1
+ vertex -34.8583 -11.3197 -0.2
+ vertex -33.7011 -11.3017 -0.2
endloop
endfacet
facet normal -0.000753226 -1 0
outer loop
- vertex -33.7011 -11.3017 -0.1
+ vertex -33.7011 -11.3017 -0.2
vertex -32.0944 -11.3029 0
vertex -33.7011 -11.3017 0
endloop
@@ -14450,1616 +14450,1616 @@ solid OpenSCAD_Model
facet normal -0.000753226 -1 -0
outer loop
vertex -32.0944 -11.3029 0
- vertex -33.7011 -11.3017 -0.1
- vertex -32.0944 -11.3029 -0.1
+ vertex -33.7011 -11.3017 -0.2
+ vertex -32.0944 -11.3029 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.0792 -19.1571 -0.1
- vertex -11.6557 -19.6804 -0.1
- vertex -11.6899 -19.4898 -0.1
+ vertex -12.0792 -19.1571 -0.2
+ vertex -11.6557 -19.6804 -0.2
+ vertex -11.6899 -19.4898 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.302 -19.1333 -0.1
- vertex -11.6557 -19.6804 -0.1
- vertex -12.0792 -19.1571 -0.1
+ vertex -12.302 -19.1333 -0.2
+ vertex -11.6557 -19.6804 -0.2
+ vertex -12.0792 -19.1571 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.9023 -19.2259 -0.1
- vertex -11.6899 -19.4898 -0.1
- vertex -11.7723 -19.3375 -0.1
+ vertex -11.9023 -19.2259 -0.2
+ vertex -11.6899 -19.4898 -0.2
+ vertex -11.7723 -19.3375 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.6557 -19.6804 -0.1
- vertex -12.302 -19.1333 -0.1
- vertex -11.6707 -19.9072 -0.1
+ vertex -11.6557 -19.6804 -0.2
+ vertex -12.302 -19.1333 -0.2
+ vertex -11.6707 -19.9072 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.6899 -19.4898 -0.1
- vertex -11.9023 -19.2259 -0.1
- vertex -12.0792 -19.1571 -0.1
+ vertex -11.6899 -19.4898 -0.2
+ vertex -11.9023 -19.2259 -0.2
+ vertex -12.0792 -19.1571 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -12.6849 -19.1929 -0.1
- vertex -11.6707 -19.9072 -0.1
- vertex -12.302 -19.1333 -0.1
+ vertex -12.6849 -19.1929 -0.2
+ vertex -11.6707 -19.9072 -0.2
+ vertex -12.302 -19.1333 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.7355 -20.1677 -0.1
- vertex -12.6849 -19.1929 -0.1
- vertex -11.851 -20.4599 -0.1
+ vertex -11.7355 -20.1677 -0.2
+ vertex -12.6849 -19.1929 -0.2
+ vertex -11.851 -20.4599 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.6707 -19.9072 -0.1
- vertex -12.6849 -19.1929 -0.1
- vertex -11.7355 -20.1677 -0.1
+ vertex -11.6707 -19.9072 -0.2
+ vertex -12.6849 -19.1929 -0.2
+ vertex -11.7355 -20.1677 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.01943 -23.5295 -0.1
- vertex -8.48242 -23.1923 -0.1
- vertex -8.45645 -23.4267 -0.1
+ vertex -4.01943 -23.5295 -0.2
+ vertex -8.48242 -23.1923 -0.2
+ vertex -8.45645 -23.4267 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.06691 -19.2358 -0.1
- vertex -8.54451 -22.9989 -0.1
- vertex -8.48242 -23.1923 -0.1
+ vertex -8.06691 -19.2358 -0.2
+ vertex -8.54451 -22.9989 -0.2
+ vertex -8.48242 -23.1923 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.06691 -19.2358 -0.1
- vertex -8.64279 -22.8439 -0.1
- vertex -8.54451 -22.9989 -0.1
+ vertex -8.06691 -19.2358 -0.2
+ vertex -8.64279 -22.8439 -0.2
+ vertex -8.54451 -22.9989 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.94827 -22.6394 -0.1
- vertex -8.43701 -19.2929 -0.1
- vertex -8.77447 -19.378 -0.1
+ vertex -8.94827 -22.6394 -0.2
+ vertex -8.43701 -19.2929 -0.2
+ vertex -8.77447 -19.378 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.06691 -19.2358 -0.1
- vertex -8.77736 -22.7249 -0.1
- vertex -8.64279 -22.8439 -0.1
+ vertex -8.06691 -19.2358 -0.2
+ vertex -8.77736 -22.7249 -0.2
+ vertex -8.64279 -22.8439 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.43701 -19.2929 -0.1
- vertex -8.94827 -22.6394 -0.1
- vertex -8.77736 -22.7249 -0.1
+ vertex -8.43701 -19.2929 -0.2
+ vertex -8.94827 -22.6394 -0.2
+ vertex -8.77736 -22.7249 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -9.10766 -19.4997 -0.1
- vertex -8.94827 -22.6394 -0.1
- vertex -8.77447 -19.378 -0.1
+ vertex -9.10766 -19.4997 -0.2
+ vertex -8.94827 -22.6394 -0.2
+ vertex -8.77447 -19.378 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -9.46489 -19.667 -0.1
- vertex -8.94827 -22.6394 -0.1
- vertex -9.10766 -19.4997 -0.1
+ vertex -9.46489 -19.667 -0.2
+ vertex -8.94827 -22.6394 -0.2
+ vertex -9.10766 -19.4997 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.94827 -22.6394 -0.1
- vertex -9.46489 -19.667 -0.1
- vertex -9.15561 -22.5851 -0.1
+ vertex -8.94827 -22.6394 -0.2
+ vertex -9.46489 -19.667 -0.2
+ vertex -9.15561 -22.5851 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -9.87453 -19.8884 -0.1
- vertex -9.15561 -22.5851 -0.1
- vertex -9.46489 -19.667 -0.1
+ vertex -9.87453 -19.8884 -0.2
+ vertex -9.15561 -22.5851 -0.2
+ vertex -9.46489 -19.667 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.15561 -22.5851 -0.1
- vertex -9.87453 -19.8884 -0.1
- vertex -9.39946 -22.5595 -0.1
+ vertex -9.15561 -22.5851 -0.2
+ vertex -9.87453 -19.8884 -0.2
+ vertex -9.39946 -22.5595 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -10.3649 -20.1728 -0.1
- vertex -9.39946 -22.5595 -0.1
- vertex -9.87453 -19.8884 -0.1
+ vertex -10.3649 -20.1728 -0.2
+ vertex -9.39946 -22.5595 -0.2
+ vertex -9.87453 -19.8884 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.39946 -22.5595 -0.1
- vertex -10.3649 -20.1728 -0.1
- vertex -9.67988 -22.56 -0.1
+ vertex -9.39946 -22.5595 -0.2
+ vertex -10.3649 -20.1728 -0.2
+ vertex -9.67988 -22.56 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.67988 -22.56 -0.1
- vertex -10.3649 -20.1728 -0.1
- vertex -10.0796 -22.6123 -0.1
+ vertex -9.67988 -22.56 -0.2
+ vertex -10.3649 -20.1728 -0.2
+ vertex -10.0796 -22.6123 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -11.5073 -20.829 -0.1
- vertex -10.0796 -22.6123 -0.1
- vertex -10.3649 -20.1728 -0.1
+ vertex -11.5073 -20.829 -0.2
+ vertex -10.0796 -22.6123 -0.2
+ vertex -10.3649 -20.1728 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.0796 -22.6123 -0.1
- vertex -11.5073 -20.829 -0.1
- vertex -10.5344 -22.7271 -0.1
+ vertex -10.0796 -22.6123 -0.2
+ vertex -11.5073 -20.829 -0.2
+ vertex -10.5344 -22.7271 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5344 -22.7271 -0.1
- vertex -11.5073 -20.829 -0.1
- vertex -10.9881 -22.8877 -0.1
+ vertex -10.5344 -22.7271 -0.2
+ vertex -11.5073 -20.829 -0.2
+ vertex -10.9881 -22.8877 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -11.8784 -21.0286 -0.1
- vertex -10.9881 -22.8877 -0.1
- vertex -11.5073 -20.829 -0.1
+ vertex -11.8784 -21.0286 -0.2
+ vertex -10.9881 -22.8877 -0.2
+ vertex -11.5073 -20.829 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -12.0427 -21.102 -0.1
- vertex -10.9881 -22.8877 -0.1
- vertex -11.8784 -21.0286 -0.1
+ vertex -12.0427 -21.102 -0.2
+ vertex -10.9881 -22.8877 -0.2
+ vertex -11.8784 -21.0286 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.9881 -22.8877 -0.1
- vertex -12.0427 -21.102 -0.1
- vertex -11.3849 -23.0769 -0.1
+ vertex -10.9881 -22.8877 -0.2
+ vertex -12.0427 -21.102 -0.2
+ vertex -11.3849 -23.0769 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.3849 -23.0769 -0.1
- vertex -12.0427 -21.102 -0.1
- vertex -11.9359 -23.4045 -0.1
+ vertex -11.3849 -23.0769 -0.2
+ vertex -12.0427 -21.102 -0.2
+ vertex -11.9359 -23.4045 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.4007 -23.7203 -0.1
- vertex -12.0427 -21.102 -0.1
- vertex -12.0573 -21.0889 -0.1
+ vertex -12.4007 -23.7203 -0.2
+ vertex -12.0427 -21.102 -0.2
+ vertex -12.0573 -21.0889 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.1989 -19.5967 -0.1
- vertex -12.0573 -21.0889 -0.1
- vertex -12.0594 -21.0513 -0.1
+ vertex -14.1989 -19.5967 -0.2
+ vertex -12.0573 -21.0889 -0.2
+ vertex -12.0594 -21.0513 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.3483 -19.3556 -0.1
- vertex -11.851 -20.4599 -0.1
- vertex -12.6849 -19.1929 -0.1
+ vertex -13.3483 -19.3556 -0.2
+ vertex -11.851 -20.4599 -0.2
+ vertex -12.6849 -19.1929 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.851 -20.4599 -0.1
- vertex -13.3483 -19.3556 -0.1
- vertex -12.0288 -20.9134 -0.1
+ vertex -11.851 -20.4599 -0.2
+ vertex -13.3483 -19.3556 -0.2
+ vertex -12.0288 -20.9134 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.0288 -20.9134 -0.1
- vertex -13.3483 -19.3556 -0.1
- vertex -12.0594 -21.0513 -0.1
+ vertex -12.0288 -20.9134 -0.2
+ vertex -13.3483 -19.3556 -0.2
+ vertex -12.0594 -21.0513 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.1989 -19.5967 -0.1
- vertex -12.0594 -21.0513 -0.1
- vertex -13.3483 -19.3556 -0.1
+ vertex -14.1989 -19.5967 -0.2
+ vertex -12.0594 -21.0513 -0.2
+ vertex -13.3483 -19.3556 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.0573 -21.0889 -0.1
- vertex -14.1989 -19.5967 -0.1
- vertex -15.1436 -19.8912 -0.1
+ vertex -12.0573 -21.0889 -0.2
+ vertex -14.1989 -19.5967 -0.2
+ vertex -15.1436 -19.8912 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.0427 -21.102 -0.1
- vertex -12.4007 -23.7203 -0.1
- vertex -11.9359 -23.4045 -0.1
+ vertex -12.0427 -21.102 -0.2
+ vertex -12.4007 -23.7203 -0.2
+ vertex -11.9359 -23.4045 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.0573 -21.0889 -0.1
- vertex -15.1436 -19.8912 -0.1
- vertex -12.7941 -24.0414 -0.1
+ vertex -12.0573 -21.0889 -0.2
+ vertex -15.1436 -19.8912 -0.2
+ vertex -12.7941 -24.0414 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.0573 -21.0889 -0.1
- vertex -12.7941 -24.0414 -0.1
- vertex -12.4007 -23.7203 -0.1
+ vertex -12.0573 -21.0889 -0.2
+ vertex -12.7941 -24.0414 -0.2
+ vertex -12.4007 -23.7203 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.2249 -22.8126 -0.1
- vertex -12.7941 -24.0414 -0.1
- vertex -15.1436 -19.8912 -0.1
+ vertex -17.2249 -22.8126 -0.2
+ vertex -12.7941 -24.0414 -0.2
+ vertex -15.1436 -19.8912 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.7941 -24.0414 -0.1
- vertex -17.2249 -22.8126 -0.1
- vertex -13.131 -24.3848 -0.1
+ vertex -12.7941 -24.0414 -0.2
+ vertex -17.2249 -22.8126 -0.2
+ vertex -13.131 -24.3848 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -17.2226 -22.9371 -0.1
- vertex -13.131 -24.3848 -0.1
- vertex -17.2249 -22.8126 -0.1
+ vertex -17.2226 -22.9371 -0.2
+ vertex -13.131 -24.3848 -0.2
+ vertex -17.2249 -22.8126 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.131 -24.3848 -0.1
- vertex -17.2226 -22.9371 -0.1
- vertex -13.4262 -24.7676 -0.1
+ vertex -13.131 -24.3848 -0.2
+ vertex -17.2226 -22.9371 -0.2
+ vertex -13.4262 -24.7676 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.2873 -23.335 -0.1
- vertex -13.4262 -24.7676 -0.1
- vertex -17.2226 -22.9371 -0.1
+ vertex -17.2873 -23.335 -0.2
+ vertex -13.4262 -24.7676 -0.2
+ vertex -17.2226 -22.9371 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.4084 -23.7485 -0.1
- vertex -13.6945 -25.2068 -0.1
- vertex -17.2873 -23.335 -0.1
+ vertex -17.4084 -23.7485 -0.2
+ vertex -13.6945 -25.2068 -0.2
+ vertex -17.2873 -23.335 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.6656 -24.469 -0.1
- vertex -13.9508 -25.7195 -0.1
- vertex -17.4084 -23.7485 -0.1
+ vertex -17.6656 -24.469 -0.2
+ vertex -13.9508 -25.7195 -0.2
+ vertex -17.4084 -23.7485 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.2578 -22.7276 -0.1
- vertex -15.1436 -19.8912 -0.1
- vertex -16.9393 -20.461 -0.1
+ vertex -17.2578 -22.7276 -0.2
+ vertex -15.1436 -19.8912 -0.2
+ vertex -16.9393 -20.461 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.6945 -25.2068 -0.1
- vertex -17.4084 -23.7485 -0.1
- vertex -13.9508 -25.7195 -0.1
+ vertex -13.6945 -25.2068 -0.2
+ vertex -17.4084 -23.7485 -0.2
+ vertex -13.9508 -25.7195 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.9508 -25.7195 -0.1
- vertex -17.6656 -24.469 -0.1
- vertex -14.2098 -26.3227 -0.1
+ vertex -13.9508 -25.7195 -0.2
+ vertex -17.6656 -24.469 -0.2
+ vertex -14.2098 -26.3227 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.4262 -24.7676 -0.1
- vertex -17.2873 -23.335 -0.1
- vertex -13.6945 -25.2068 -0.1
+ vertex -13.4262 -24.7676 -0.2
+ vertex -17.2873 -23.335 -0.2
+ vertex -13.6945 -25.2068 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.1436 -19.8912 -0.1
- vertex -17.2578 -22.7276 -0.1
- vertex -17.2249 -22.8126 -0.1
+ vertex -15.1436 -19.8912 -0.2
+ vertex -17.2578 -22.7276 -0.2
+ vertex -17.2249 -22.8126 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.9393 -20.461 -0.1
- vertex -17.3267 -22.6747 -0.1
- vertex -17.2578 -22.7276 -0.1
+ vertex -16.9393 -20.461 -0.2
+ vertex -17.3267 -22.6747 -0.2
+ vertex -17.2578 -22.7276 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.9393 -20.461 -0.1
- vertex -17.4374 -22.6462 -0.1
- vertex -17.3267 -22.6747 -0.1
+ vertex -16.9393 -20.461 -0.2
+ vertex -17.4374 -22.6462 -0.2
+ vertex -17.3267 -22.6747 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.9865 -20.7653 -0.1
- vertex -17.4374 -22.6462 -0.1
- vertex -16.9393 -20.461 -0.1
+ vertex -17.9865 -20.7653 -0.2
+ vertex -17.4374 -22.6462 -0.2
+ vertex -16.9393 -20.461 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4374 -22.6462 -0.1
- vertex -17.9865 -20.7653 -0.1
- vertex -17.8061 -22.6324 -0.1
+ vertex -17.4374 -22.6462 -0.2
+ vertex -17.9865 -20.7653 -0.2
+ vertex -17.8061 -22.6324 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -18.5788 -21.2283 -0.1
- vertex -17.8061 -22.6324 -0.1
- vertex -17.9865 -20.7653 -0.1
+ vertex -18.5788 -21.2283 -0.2
+ vertex -17.8061 -22.6324 -0.2
+ vertex -17.9865 -20.7653 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5053 -21.1105 -0.1
- vertex -17.9865 -20.7653 -0.1
- vertex -18.1109 -20.8023 -0.1
+ vertex -18.5053 -21.1105 -0.2
+ vertex -17.9865 -20.7653 -0.2
+ vertex -18.1109 -20.8023 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5053 -21.1105 -0.1
- vertex -18.1109 -20.8023 -0.1
- vertex -18.2248 -20.8552 -0.1
+ vertex -18.5053 -21.1105 -0.2
+ vertex -18.1109 -20.8023 -0.2
+ vertex -18.2248 -20.8552 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5053 -21.1105 -0.1
- vertex -18.2248 -20.8552 -0.1
- vertex -18.3284 -20.924 -0.1
+ vertex -18.5053 -21.1105 -0.2
+ vertex -18.2248 -20.8552 -0.2
+ vertex -18.3284 -20.924 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -18.6967 -21.5139 -0.1
- vertex -17.8061 -22.6324 -0.1
- vertex -18.5788 -21.2283 -0.1
+ vertex -18.6967 -21.5139 -0.2
+ vertex -17.8061 -22.6324 -0.2
+ vertex -18.5788 -21.2283 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5053 -21.1105 -0.1
- vertex -18.3284 -20.924 -0.1
- vertex -18.4218 -21.0091 -0.1
+ vertex -18.5053 -21.1105 -0.2
+ vertex -18.3284 -20.924 -0.2
+ vertex -18.4218 -21.0091 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.9865 -20.7653 -0.1
- vertex -18.5053 -21.1105 -0.1
- vertex -18.5788 -21.2283 -0.1
+ vertex -17.9865 -20.7653 -0.2
+ vertex -18.5053 -21.1105 -0.2
+ vertex -18.5788 -21.2283 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.8061 -22.6324 -0.1
- vertex -18.6967 -21.5139 -0.1
- vertex -18.1091 -22.6172 -0.1
+ vertex -17.8061 -22.6324 -0.2
+ vertex -18.6967 -21.5139 -0.2
+ vertex -18.1091 -22.6172 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -18.766 -21.7922 -0.1
- vertex -18.1091 -22.6172 -0.1
- vertex -18.6967 -21.5139 -0.1
+ vertex -18.766 -21.7922 -0.2
+ vertex -18.1091 -22.6172 -0.2
+ vertex -18.6967 -21.5139 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.1091 -22.6172 -0.1
- vertex -18.766 -21.7922 -0.1
- vertex -18.3541 -22.5704 -0.1
+ vertex -18.1091 -22.6172 -0.2
+ vertex -18.766 -21.7922 -0.2
+ vertex -18.3541 -22.5704 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -18.7869 -22.0269 -0.1
- vertex -18.3541 -22.5704 -0.1
- vertex -18.766 -21.7922 -0.1
+ vertex -18.7869 -22.0269 -0.2
+ vertex -18.3541 -22.5704 -0.2
+ vertex -18.766 -21.7922 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.3541 -22.5704 -0.1
- vertex -18.7869 -22.0269 -0.1
- vertex -18.5429 -22.4899 -0.1
+ vertex -18.3541 -22.5704 -0.2
+ vertex -18.7869 -22.0269 -0.2
+ vertex -18.5429 -22.4899 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -18.7577 -22.2202 -0.1
- vertex -18.5429 -22.4899 -0.1
- vertex -18.7869 -22.0269 -0.1
+ vertex -18.7577 -22.2202 -0.2
+ vertex -18.5429 -22.4899 -0.2
+ vertex -18.7869 -22.0269 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5429 -22.4899 -0.1
- vertex -18.7577 -22.2202 -0.1
- vertex -18.6769 -22.3738 -0.1
+ vertex -18.5429 -22.4899 -0.2
+ vertex -18.7577 -22.2202 -0.2
+ vertex -18.6769 -22.3738 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -3.82849 -22.2203 -0.1
- vertex -3.84473 -21.6547 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -3.82849 -22.2203 -0.2
+ vertex -3.84473 -21.6547 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -3.84473 -21.6547 -0.1
- vertex -3.87719 -21.3353 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -3.84473 -21.6547 -0.2
+ vertex -3.87719 -21.3353 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -3.84589 -22.5177 -0.1
- vertex -3.82849 -22.2203 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -3.84589 -22.5177 -0.2
+ vertex -3.82849 -22.2203 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.47107 -20.0532 -0.1
- vertex -3.87719 -21.3353 -0.1
- vertex -3.91934 -21.0662 -0.1
+ vertex -4.47107 -20.0532 -0.2
+ vertex -3.87719 -21.3353 -0.2
+ vertex -3.91934 -21.0662 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -3.88244 -22.8317 -0.1
- vertex -3.84589 -22.5177 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -3.88244 -22.8317 -0.2
+ vertex -3.84589 -22.5177 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.29663 -20.2518 -0.1
- vertex -3.91934 -21.0662 -0.1
- vertex -3.97677 -20.8354 -0.1
+ vertex -4.29663 -20.2518 -0.2
+ vertex -3.91934 -21.0662 -0.2
+ vertex -3.97677 -20.8354 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -3.93975 -23.1672 -0.1
- vertex -3.88244 -22.8317 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -3.93975 -23.1672 -0.2
+ vertex -3.88244 -22.8317 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.15983 -20.4402 -0.1
- vertex -3.97677 -20.8354 -0.1
- vertex -4.05507 -20.6308 -0.1
+ vertex -4.15983 -20.4402 -0.2
+ vertex -3.97677 -20.8354 -0.2
+ vertex -4.05507 -20.6308 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.97677 -20.8354 -0.1
- vertex -4.15983 -20.4402 -0.1
- vertex -4.29663 -20.2518 -0.1
+ vertex -3.97677 -20.8354 -0.2
+ vertex -4.15983 -20.4402 -0.2
+ vertex -4.29663 -20.2518 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -4.01943 -23.5295 -0.1
- vertex -3.93975 -23.1672 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -4.01943 -23.5295 -0.2
+ vertex -3.93975 -23.1672 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.91934 -21.0662 -0.1
- vertex -4.29663 -20.2518 -0.1
- vertex -4.47107 -20.0532 -0.1
+ vertex -3.91934 -21.0662 -0.2
+ vertex -4.29663 -20.2518 -0.2
+ vertex -4.47107 -20.0532 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.68872 -19.8327 -0.1
- vertex -3.87719 -21.3353 -0.1
- vertex -4.47107 -20.0532 -0.1
+ vertex -4.68872 -19.8327 -0.2
+ vertex -3.87719 -21.3353 -0.2
+ vertex -4.47107 -20.0532 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.01943 -23.5295 -0.1
- vertex -8.45645 -23.4267 -0.1
- vertex -4.25232 -24.3543 -0.1
+ vertex -4.01943 -23.5295 -0.2
+ vertex -8.45645 -23.4267 -0.2
+ vertex -4.25232 -24.3543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -3.87719 -21.3353 -0.1
- vertex -4.68872 -19.8327 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -3.87719 -21.3353 -0.2
+ vertex -4.68872 -19.8327 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.14058 -19.1411 -0.1
- vertex -4.68872 -19.8327 -0.1
- vertex -4.93899 -19.592 -0.1
+ vertex -6.14058 -19.1411 -0.2
+ vertex -4.68872 -19.8327 -0.2
+ vertex -4.93899 -19.592 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -8.46654 -23.7044 -0.1
- vertex -4.25232 -24.3543 -0.1
- vertex -8.45645 -23.4267 -0.1
+ vertex -8.46654 -23.7044 -0.2
+ vertex -4.25232 -24.3543 -0.2
+ vertex -8.45645 -23.4267 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.8145 -19.1562 -0.1
- vertex -4.93899 -19.592 -0.1
- vertex -5.14898 -19.4116 -0.1
+ vertex -5.8145 -19.1562 -0.2
+ vertex -4.93899 -19.592 -0.2
+ vertex -5.14898 -19.4116 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.55901 -19.2012 -0.1
- vertex -5.14898 -19.4116 -0.1
- vertex -5.34642 -19.2839 -0.1
+ vertex -5.55901 -19.2012 -0.2
+ vertex -5.14898 -19.4116 -0.2
+ vertex -5.34642 -19.2839 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.14898 -19.4116 -0.1
- vertex -5.55901 -19.2012 -0.1
- vertex -5.8145 -19.1562 -0.1
+ vertex -5.14898 -19.4116 -0.2
+ vertex -5.55901 -19.2012 -0.2
+ vertex -5.8145 -19.1562 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.25232 -24.3543 -0.1
- vertex -8.46654 -23.7044 -0.1
- vertex -4.59396 -25.347 -0.1
+ vertex -4.25232 -24.3543 -0.2
+ vertex -8.46654 -23.7044 -0.2
+ vertex -4.59396 -25.347 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.93899 -19.592 -0.1
- vertex -5.8145 -19.1562 -0.1
- vertex -6.14058 -19.1411 -0.1
+ vertex -4.93899 -19.592 -0.2
+ vertex -5.8145 -19.1562 -0.2
+ vertex -6.14058 -19.1411 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -4.68872 -19.8327 -0.1
- vertex -6.14058 -19.1411 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -4.68872 -19.8327 -0.2
+ vertex -6.14058 -19.1411 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -8.51259 -24.0278 -0.1
- vertex -4.59396 -25.347 -0.1
- vertex -8.46654 -23.7044 -0.1
+ vertex -8.51259 -24.0278 -0.2
+ vertex -4.59396 -25.347 -0.2
+ vertex -8.46654 -23.7044 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -6.14058 -19.1411 -0.1
- vertex -7.11547 -19.1706 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -6.14058 -19.1411 -0.2
+ vertex -7.11547 -19.1706 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -7.11547 -19.1706 -0.1
- vertex -7.63584 -19.198 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -7.11547 -19.1706 -0.2
+ vertex -7.63584 -19.198 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -8.59455 -24.3995 -0.1
- vertex -4.59396 -25.347 -0.1
- vertex -8.51259 -24.0278 -0.1
+ vertex -8.59455 -24.3995 -0.2
+ vertex -4.59396 -25.347 -0.2
+ vertex -8.51259 -24.0278 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.48242 -23.1923 -0.1
- vertex -7.63584 -19.198 -0.1
- vertex -8.06691 -19.2358 -0.1
+ vertex -8.48242 -23.1923 -0.2
+ vertex -7.63584 -19.198 -0.2
+ vertex -8.06691 -19.2358 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.59396 -25.347 -0.1
- vertex -8.71232 -24.8218 -0.1
- vertex -5.05721 -26.548 -0.1
+ vertex -4.59396 -25.347 -0.2
+ vertex -8.71232 -24.8218 -0.2
+ vertex -5.05721 -26.548 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -9.05502 -25.8283 -0.1
- vertex -5.05721 -26.548 -0.1
- vertex -8.71232 -24.8218 -0.1
+ vertex -9.05502 -25.8283 -0.2
+ vertex -5.05721 -26.548 -0.2
+ vertex -8.71232 -24.8218 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.77736 -22.7249 -0.1
- vertex -8.06691 -19.2358 -0.1
- vertex -8.43701 -19.2929 -0.1
+ vertex -8.77736 -22.7249 -0.2
+ vertex -8.06691 -19.2358 -0.2
+ vertex -8.43701 -19.2929 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -8.71232 -24.8218 -0.1
- vertex -4.59396 -25.347 -0.1
- vertex -8.59455 -24.3995 -0.1
+ vertex -8.71232 -24.8218 -0.2
+ vertex -4.59396 -25.347 -0.2
+ vertex -8.59455 -24.3995 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.05721 -26.548 -0.1
- vertex -9.05502 -25.8283 -0.1
- vertex -5.65492 -27.9982 -0.1
+ vertex -5.05721 -26.548 -0.2
+ vertex -9.05502 -25.8283 -0.2
+ vertex -5.65492 -27.9982 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -9.5401 -27.0667 -0.1
- vertex -5.65492 -27.9982 -0.1
- vertex -9.05502 -25.8283 -0.1
+ vertex -9.5401 -27.0667 -0.2
+ vertex -5.65492 -27.9982 -0.2
+ vertex -9.05502 -25.8283 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.65492 -27.9982 -0.1
- vertex -9.5401 -27.0667 -0.1
- vertex -6.39994 -29.738 -0.1
+ vertex -5.65492 -27.9982 -0.2
+ vertex -9.5401 -27.0667 -0.2
+ vertex -6.39994 -29.738 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.5815 -32.143 -0.1
- vertex -6.39994 -29.738 -0.1
- vertex -9.5401 -27.0667 -0.1
+ vertex -11.5815 -32.143 -0.2
+ vertex -6.39994 -29.738 -0.2
+ vertex -9.5401 -27.0667 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.39994 -29.738 -0.1
- vertex -11.5815 -32.143 -0.1
- vertex -7.70823 -32.8163 -0.1
+ vertex -6.39994 -29.738 -0.2
+ vertex -11.5815 -32.143 -0.2
+ vertex -7.70823 -32.8163 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.30266 -36.7536 -0.1
- vertex -7.30695 -36.9638 -0.1
- vertex -7.29619 -36.8569 -0.1
+ vertex -7.30266 -36.7536 -0.2
+ vertex -7.30695 -36.9638 -0.2
+ vertex -7.29619 -36.8569 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.32635 -36.6539 -0.1
- vertex -7.30695 -36.9638 -0.1
- vertex -7.30266 -36.7536 -0.1
+ vertex -7.32635 -36.6539 -0.2
+ vertex -7.30695 -36.9638 -0.2
+ vertex -7.30266 -36.7536 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.36727 -36.5579 -0.1
- vertex -7.30695 -36.9638 -0.1
- vertex -7.32635 -36.6539 -0.1
+ vertex -7.36727 -36.5579 -0.2
+ vertex -7.30695 -36.9638 -0.2
+ vertex -7.32635 -36.6539 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.50076 -36.3769 -0.1
- vertex -7.30695 -36.9638 -0.1
- vertex -7.36727 -36.5579 -0.1
+ vertex -7.50076 -36.3769 -0.2
+ vertex -7.30695 -36.9638 -0.2
+ vertex -7.36727 -36.5579 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.30695 -36.9638 -0.1
- vertex -7.50076 -36.3769 -0.1
- vertex -7.38017 -37.1883 -0.1
+ vertex -7.30695 -36.9638 -0.2
+ vertex -7.50076 -36.3769 -0.2
+ vertex -7.38017 -37.1883 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.70312 -36.2106 -0.1
- vertex -7.38017 -37.1883 -0.1
- vertex -7.50076 -36.3769 -0.1
+ vertex -7.70312 -36.2106 -0.2
+ vertex -7.38017 -37.1883 -0.2
+ vertex -7.50076 -36.3769 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.38017 -37.1883 -0.1
- vertex -7.70312 -36.2106 -0.1
- vertex -7.52232 -37.4271 -0.1
+ vertex -7.38017 -37.1883 -0.2
+ vertex -7.70312 -36.2106 -0.2
+ vertex -7.52232 -37.4271 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.97432 -36.0592 -0.1
- vertex -7.52232 -37.4271 -0.1
- vertex -7.70312 -36.2106 -0.1
+ vertex -7.97432 -36.0592 -0.2
+ vertex -7.52232 -37.4271 -0.2
+ vertex -7.70312 -36.2106 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.52232 -37.4271 -0.1
- vertex -7.97432 -36.0592 -0.1
- vertex -7.73344 -37.6801 -0.1
+ vertex -7.52232 -37.4271 -0.2
+ vertex -7.97432 -36.0592 -0.2
+ vertex -7.73344 -37.6801 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.73344 -37.6801 -0.1
- vertex -7.97432 -36.0592 -0.1
- vertex -7.8903 -37.8311 -0.1
+ vertex -7.73344 -37.6801 -0.2
+ vertex -7.97432 -36.0592 -0.2
+ vertex -7.8903 -37.8311 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.30871 -38.0303 -0.1
- vertex -7.8903 -37.8311 -0.1
- vertex -7.97432 -36.0592 -0.1
+ vertex -8.30871 -38.0303 -0.2
+ vertex -7.8903 -37.8311 -0.2
+ vertex -7.97432 -36.0592 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.30871 -38.0303 -0.1
- vertex -7.97432 -36.0592 -0.1
- vertex -8.30497 -35.8814 -0.1
+ vertex -8.30871 -38.0303 -0.2
+ vertex -7.97432 -36.0592 -0.2
+ vertex -8.30497 -35.8814 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.8903 -37.8311 -0.1
- vertex -8.30871 -38.0303 -0.1
- vertex -8.0676 -37.9462 -0.1
+ vertex -7.8903 -37.8311 -0.2
+ vertex -8.30871 -38.0303 -0.2
+ vertex -8.0676 -37.9462 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.15585 -38.1249 -0.1
- vertex -8.30497 -35.8814 -0.1
- vertex -8.41808 -35.7975 -0.1
+ vertex -9.15585 -38.1249 -0.2
+ vertex -8.30497 -35.8814 -0.2
+ vertex -8.41808 -35.7975 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.15585 -38.1249 -0.1
- vertex -8.41808 -35.7975 -0.1
- vertex -8.49955 -35.7129 -0.1
+ vertex -9.15585 -38.1249 -0.2
+ vertex -8.41808 -35.7975 -0.2
+ vertex -8.49955 -35.7129 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.84865 -38.1451 -0.1
- vertex -8.49955 -35.7129 -0.1
- vertex -8.55176 -35.6244 -0.1
+ vertex -9.84865 -38.1451 -0.2
+ vertex -8.49955 -35.7129 -0.2
+ vertex -8.55176 -35.6244 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.84865 -38.1451 -0.1
- vertex -8.55176 -35.6244 -0.1
- vertex -8.57707 -35.529 -0.1
+ vertex -9.84865 -38.1451 -0.2
+ vertex -8.55176 -35.6244 -0.2
+ vertex -8.57707 -35.529 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.30497 -35.8814 -0.1
- vertex -8.657 -38.0883 -0.1
- vertex -8.30871 -38.0303 -0.1
+ vertex -8.30497 -35.8814 -0.2
+ vertex -8.657 -38.0883 -0.2
+ vertex -8.30871 -38.0303 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.6843 -34.4922 -0.1
- vertex -8.57707 -35.529 -0.1
- vertex -8.57785 -35.4236 -0.1
+ vertex -12.6843 -34.4922 -0.2
+ vertex -8.57707 -35.529 -0.2
+ vertex -8.57785 -35.4236 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.70823 -32.8163 -0.1
- vertex -11.5815 -32.143 -0.1
- vertex -8.13453 -33.8652 -0.1
+ vertex -7.70823 -32.8163 -0.2
+ vertex -11.5815 -32.143 -0.2
+ vertex -8.13453 -33.8652 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -11.9595 -33.0513 -0.1
- vertex -8.13453 -33.8652 -0.1
- vertex -11.5815 -32.143 -0.1
+ vertex -11.9595 -33.0513 -0.2
+ vertex -8.13453 -33.8652 -0.2
+ vertex -11.5815 -32.143 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.13453 -33.8652 -0.1
- vertex -11.9595 -33.0513 -0.1
- vertex -8.32474 -34.384 -0.1
+ vertex -8.13453 -33.8652 -0.2
+ vertex -11.9595 -33.0513 -0.2
+ vertex -8.32474 -34.384 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -12.3268 -33.8339 -0.1
- vertex -8.32474 -34.384 -0.1
- vertex -11.9595 -33.0513 -0.1
+ vertex -12.3268 -33.8339 -0.2
+ vertex -8.32474 -34.384 -0.2
+ vertex -11.9595 -33.0513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.32474 -34.384 -0.1
- vertex -12.3268 -33.8339 -0.1
- vertex -8.55649 -35.3052 -0.1
+ vertex -8.32474 -34.384 -0.2
+ vertex -12.3268 -33.8339 -0.2
+ vertex -8.55649 -35.3052 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.55649 -35.3052 -0.1
- vertex -12.3268 -33.8339 -0.1
- vertex -8.57785 -35.4236 -0.1
+ vertex -8.55649 -35.3052 -0.2
+ vertex -12.3268 -33.8339 -0.2
+ vertex -8.57785 -35.4236 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.30497 -35.8814 -0.1
- vertex -9.15585 -38.1249 -0.1
- vertex -8.657 -38.0883 -0.1
+ vertex -8.30497 -35.8814 -0.2
+ vertex -9.15585 -38.1249 -0.2
+ vertex -8.657 -38.0883 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -12.6843 -34.4922 -0.1
- vertex -8.57785 -35.4236 -0.1
- vertex -12.3268 -33.8339 -0.1
+ vertex -12.6843 -34.4922 -0.2
+ vertex -8.57785 -35.4236 -0.2
+ vertex -12.3268 -33.8339 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.49955 -35.7129 -0.1
- vertex -9.84865 -38.1451 -0.1
- vertex -9.15585 -38.1249 -0.1
+ vertex -8.49955 -35.7129 -0.2
+ vertex -9.84865 -38.1451 -0.2
+ vertex -9.15585 -38.1249 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -8.57707 -35.529 -0.1
- vertex -12.6843 -34.4922 -0.1
- vertex -9.84865 -38.1451 -0.1
+ vertex -8.57707 -35.529 -0.2
+ vertex -12.6843 -34.4922 -0.2
+ vertex -9.84865 -38.1451 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.0331 -35.0276 -0.1
- vertex -9.84865 -38.1451 -0.1
- vertex -12.6843 -34.4922 -0.1
+ vertex -13.0331 -35.0276 -0.2
+ vertex -9.84865 -38.1451 -0.2
+ vertex -12.6843 -34.4922 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.84865 -38.1451 -0.1
- vertex -13.0331 -35.0276 -0.1
- vertex -11.9896 -38.1555 -0.1
+ vertex -9.84865 -38.1451 -0.2
+ vertex -13.0331 -35.0276 -0.2
+ vertex -11.9896 -38.1555 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.2045 -35.2497 -0.1
- vertex -11.9896 -38.1555 -0.1
- vertex -13.0331 -35.0276 -0.1
+ vertex -13.2045 -35.2497 -0.2
+ vertex -11.9896 -38.1555 -0.2
+ vertex -13.0331 -35.0276 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.3741 -35.4417 -0.1
- vertex -11.9896 -38.1555 -0.1
- vertex -13.2045 -35.2497 -0.1
+ vertex -13.3741 -35.4417 -0.2
+ vertex -11.9896 -38.1555 -0.2
+ vertex -13.2045 -35.2497 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.5421 -35.6036 -0.1
- vertex -11.9896 -38.1555 -0.1
- vertex -13.3741 -35.4417 -0.1
+ vertex -13.5421 -35.6036 -0.2
+ vertex -11.9896 -38.1555 -0.2
+ vertex -13.3741 -35.4417 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.7085 -35.7356 -0.1
- vertex -11.9896 -38.1555 -0.1
- vertex -13.5421 -35.6036 -0.1
+ vertex -13.7085 -35.7356 -0.2
+ vertex -11.9896 -38.1555 -0.2
+ vertex -13.5421 -35.6036 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.8736 -35.838 -0.1
- vertex -11.9896 -38.1555 -0.1
- vertex -13.7085 -35.7356 -0.1
+ vertex -13.8736 -35.838 -0.2
+ vertex -11.9896 -38.1555 -0.2
+ vertex -13.7085 -35.7356 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.1677 -38.1469 -0.1
- vertex -13.8736 -35.838 -0.1
- vertex -14.0373 -35.911 -0.1
+ vertex -14.1677 -38.1469 -0.2
+ vertex -13.8736 -35.838 -0.2
+ vertex -14.0373 -35.911 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.8736 -35.838 -0.1
- vertex -14.1677 -38.1469 -0.1
- vertex -11.9896 -38.1555 -0.1
+ vertex -13.8736 -35.838 -0.2
+ vertex -14.1677 -38.1469 -0.2
+ vertex -11.9896 -38.1555 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.1999 -35.9546 -0.1
- vertex -14.1677 -38.1469 -0.1
- vertex -14.0373 -35.911 -0.1
+ vertex -14.1999 -35.9546 -0.2
+ vertex -14.1677 -38.1469 -0.2
+ vertex -14.0373 -35.911 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.3614 -35.9691 -0.1
- vertex -14.1677 -38.1469 -0.1
- vertex -14.1999 -35.9546 -0.1
+ vertex -14.3614 -35.9691 -0.2
+ vertex -14.1677 -38.1469 -0.2
+ vertex -14.1999 -35.9546 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.5979 -36.0176 -0.1
- vertex -14.3614 -35.9691 -0.1
- vertex -14.4713 -35.9816 -0.1
+ vertex -14.5979 -36.0176 -0.2
+ vertex -14.3614 -35.9691 -0.2
+ vertex -14.4713 -35.9816 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.3614 -35.9691 -0.1
- vertex -14.5979 -36.0176 -0.1
- vertex -14.1677 -38.1469 -0.1
+ vertex -14.3614 -35.9691 -0.2
+ vertex -14.5979 -36.0176 -0.2
+ vertex -14.1677 -38.1469 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.8831 -36.1495 -0.1
- vertex -14.1677 -38.1469 -0.1
- vertex -14.5979 -36.0176 -0.1
+ vertex -14.8831 -36.1495 -0.2
+ vertex -14.1677 -38.1469 -0.2
+ vertex -14.5979 -36.0176 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.1813 -36.3448 -0.1
- vertex -14.1677 -38.1469 -0.1
- vertex -14.8831 -36.1495 -0.1
+ vertex -15.1813 -36.3448 -0.2
+ vertex -14.1677 -38.1469 -0.2
+ vertex -14.8831 -36.1495 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.1677 -38.1469 -0.1
- vertex -15.1813 -36.3448 -0.1
- vertex -14.8486 -38.1282 -0.1
+ vertex -14.1677 -38.1469 -0.2
+ vertex -15.1813 -36.3448 -0.2
+ vertex -14.8486 -38.1282 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.4564 -36.5832 -0.1
- vertex -14.8486 -38.1282 -0.1
- vertex -15.1813 -36.3448 -0.1
+ vertex -15.4564 -36.5832 -0.2
+ vertex -14.8486 -38.1282 -0.2
+ vertex -15.1813 -36.3448 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.7439 -36.902 -0.1
- vertex -14.8486 -38.1282 -0.1
- vertex -15.4564 -36.5832 -0.1
+ vertex -15.7439 -36.902 -0.2
+ vertex -14.8486 -38.1282 -0.2
+ vertex -15.4564 -36.5832 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.8486 -38.1282 -0.1
- vertex -15.7439 -36.902 -0.1
- vertex -15.316 -38.0928 -0.1
+ vertex -14.8486 -38.1282 -0.2
+ vertex -15.7439 -36.902 -0.2
+ vertex -15.316 -38.0928 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.8411 -37.0399 -0.1
- vertex -15.316 -38.0928 -0.1
- vertex -15.7439 -36.902 -0.1
+ vertex -15.8411 -37.0399 -0.2
+ vertex -15.316 -38.0928 -0.2
+ vertex -15.7439 -36.902 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.9096 -37.1689 -0.1
- vertex -15.316 -38.0928 -0.1
- vertex -15.8411 -37.0399 -0.1
+ vertex -15.9096 -37.1689 -0.2
+ vertex -15.316 -38.0928 -0.2
+ vertex -15.8411 -37.0399 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.9604 -37.5428 -0.1
- vertex -15.316 -38.0928 -0.1
- vertex -15.9096 -37.1689 -0.1
+ vertex -15.9604 -37.5428 -0.2
+ vertex -15.316 -38.0928 -0.2
+ vertex -15.9096 -37.1689 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.316 -38.0928 -0.1
- vertex -15.9604 -37.5428 -0.1
- vertex -15.614 -38.0352 -0.1
+ vertex -15.316 -38.0928 -0.2
+ vertex -15.9604 -37.5428 -0.2
+ vertex -15.614 -38.0352 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.614 -38.0352 -0.1
- vertex -15.8777 -37.8324 -0.1
- vertex -15.7132 -37.9965 -0.1
+ vertex -15.614 -38.0352 -0.2
+ vertex -15.8777 -37.8324 -0.2
+ vertex -15.7132 -37.9965 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.7132 -37.9965 -0.1
- vertex -15.8777 -37.8324 -0.1
- vertex -15.7865 -37.9502 -0.1
+ vertex -15.7132 -37.9965 -0.2
+ vertex -15.8777 -37.8324 -0.2
+ vertex -15.7865 -37.9502 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -15.9316 -37.6764 -0.1
- vertex -15.614 -38.0352 -0.1
- vertex -15.9604 -37.5428 -0.1
+ vertex -15.9316 -37.6764 -0.2
+ vertex -15.614 -38.0352 -0.2
+ vertex -15.9604 -37.5428 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.7865 -37.9502 -0.1
- vertex -15.8777 -37.8324 -0.1
- vertex -15.8396 -37.8957 -0.1
+ vertex -15.7865 -37.9502 -0.2
+ vertex -15.8777 -37.8324 -0.2
+ vertex -15.8396 -37.8957 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.9604 -37.5428 -0.1
- vertex -15.9096 -37.1689 -0.1
- vertex -15.9511 -37.293 -0.1
+ vertex -15.9604 -37.5428 -0.2
+ vertex -15.9096 -37.1689 -0.2
+ vertex -15.9511 -37.293 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -15.8777 -37.8324 -0.1
- vertex -15.614 -38.0352 -0.1
- vertex -15.9316 -37.6764 -0.1
+ vertex -15.8777 -37.8324 -0.2
+ vertex -15.614 -38.0352 -0.2
+ vertex -15.9316 -37.6764 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex -15.9604 -37.5428 -0.1
- vertex -15.9511 -37.293 -0.1
- vertex -15.9675 -37.4163 -0.1
+ vertex -15.9604 -37.5428 -0.2
+ vertex -15.9511 -37.293 -0.2
+ vertex -15.9675 -37.4163 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5311 -26.6889 -0.1
- vertex -14.2098 -26.3227 -0.1
- vertex -17.6656 -24.469 -0.1
+ vertex -18.5311 -26.6889 -0.2
+ vertex -14.2098 -26.3227 -0.2
+ vertex -17.6656 -24.469 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.2098 -26.3227 -0.1
- vertex -18.5311 -26.6889 -0.1
- vertex -15.3777 -29.1914 -0.1
+ vertex -14.2098 -26.3227 -0.2
+ vertex -18.5311 -26.6889 -0.2
+ vertex -15.3777 -29.1914 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.7699 -29.7113 -0.1
- vertex -15.3777 -29.1914 -0.1
- vertex -18.5311 -26.6889 -0.1
+ vertex -19.7699 -29.7113 -0.2
+ vertex -15.3777 -29.1914 -0.2
+ vertex -18.5311 -26.6889 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.3777 -29.1914 -0.1
- vertex -19.7699 -29.7113 -0.1
- vertex -16.8163 -32.7116 -0.1
+ vertex -15.3777 -29.1914 -0.2
+ vertex -19.7699 -29.7113 -0.2
+ vertex -16.8163 -32.7116 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2682 -33.2523 -0.1
- vertex -16.8163 -32.7116 -0.1
- vertex -19.7699 -29.7113 -0.1
+ vertex -21.2682 -33.2523 -0.2
+ vertex -16.8163 -32.7116 -0.2
+ vertex -19.7699 -29.7113 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.8163 -32.7116 -0.1
- vertex -21.2682 -33.2523 -0.1
- vertex -17.1674 -33.591 -0.1
+ vertex -16.8163 -32.7116 -0.2
+ vertex -21.2682 -33.2523 -0.2
+ vertex -17.1674 -33.591 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.1674 -33.591 -0.1
- vertex -21.2682 -33.2523 -0.1
- vertex -17.4329 -34.3072 -0.1
+ vertex -17.1674 -33.591 -0.2
+ vertex -21.2682 -33.2523 -0.2
+ vertex -17.4329 -34.3072 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4329 -34.3072 -0.1
- vertex -21.2682 -33.2523 -0.1
- vertex -17.6153 -34.8741 -0.1
+ vertex -17.4329 -34.3072 -0.2
+ vertex -21.2682 -33.2523 -0.2
+ vertex -17.6153 -34.8741 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.6072 -34.0169 -0.1
- vertex -17.6153 -34.8741 -0.1
- vertex -21.2682 -33.2523 -0.1
+ vertex -21.6072 -34.0169 -0.2
+ vertex -17.6153 -34.8741 -0.2
+ vertex -21.2682 -33.2523 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.6153 -34.8741 -0.1
- vertex -21.6072 -34.0169 -0.1
- vertex -17.7168 -35.3062 -0.1
+ vertex -17.6153 -34.8741 -0.2
+ vertex -21.6072 -34.0169 -0.2
+ vertex -17.7168 -35.3062 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7168 -35.3062 -0.1
- vertex -21.6072 -34.0169 -0.1
- vertex -17.738 -35.4761 -0.1
+ vertex -17.7168 -35.3062 -0.2
+ vertex -21.6072 -34.0169 -0.2
+ vertex -17.738 -35.4761 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.9074 -34.6287 -0.1
- vertex -17.738 -35.4761 -0.1
- vertex -21.6072 -34.0169 -0.1
+ vertex -21.9074 -34.6287 -0.2
+ vertex -17.738 -35.4761 -0.2
+ vertex -21.6072 -34.0169 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7399 -35.6175 -0.1
- vertex -18.7028 -38.1359 -0.1
- vertex -18.0369 -38.1201 -0.1
+ vertex -17.7399 -35.6175 -0.2
+ vertex -18.7028 -38.1359 -0.2
+ vertex -18.0369 -38.1201 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.738 -35.4761 -0.1
- vertex -21.9074 -34.6287 -0.1
- vertex -17.7399 -35.6175 -0.1
+ vertex -17.738 -35.4761 -0.2
+ vertex -21.9074 -34.6287 -0.2
+ vertex -17.7399 -35.6175 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex -20.8109 -38.1301 -0.1
- vertex -17.7399 -35.6175 -0.1
- vertex -21.9074 -34.6287 -0.1
+ vertex -20.8109 -38.1301 -0.2
+ vertex -17.7399 -35.6175 -0.2
+ vertex -21.9074 -34.6287 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.7399 -35.6175 -0.1
- vertex -20.8109 -38.1301 -0.1
- vertex -18.7028 -38.1359 -0.1
+ vertex -17.7399 -35.6175 -0.2
+ vertex -20.8109 -38.1301 -0.2
+ vertex -18.7028 -38.1359 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.1824 -35.1035 -0.1
- vertex -20.8109 -38.1301 -0.1
- vertex -21.9074 -34.6287 -0.1
+ vertex -22.1824 -35.1035 -0.2
+ vertex -20.8109 -38.1301 -0.2
+ vertex -21.9074 -34.6287 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.4463 -35.4568 -0.1
- vertex -20.8109 -38.1301 -0.1
- vertex -22.1824 -35.1035 -0.1
+ vertex -22.4463 -35.4568 -0.2
+ vertex -20.8109 -38.1301 -0.2
+ vertex -22.1824 -35.1035 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.5782 -35.5929 -0.1
- vertex -20.8109 -38.1301 -0.1
- vertex -22.4463 -35.4568 -0.1
+ vertex -22.5782 -35.5929 -0.2
+ vertex -20.8109 -38.1301 -0.2
+ vertex -22.4463 -35.4568 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.7126 -35.7044 -0.1
- vertex -20.8109 -38.1301 -0.1
- vertex -22.5782 -35.5929 -0.1
+ vertex -22.7126 -35.7044 -0.2
+ vertex -20.8109 -38.1301 -0.2
+ vertex -22.5782 -35.5929 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.8511 -35.7934 -0.1
- vertex -20.8109 -38.1301 -0.1
- vertex -22.7126 -35.7044 -0.1
+ vertex -22.8511 -35.7934 -0.2
+ vertex -20.8109 -38.1301 -0.2
+ vertex -22.7126 -35.7044 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4866 -38.0828 -0.1
- vertex -22.8511 -35.7934 -0.1
- vertex -22.9953 -35.8619 -0.1
+ vertex -23.4866 -38.0828 -0.2
+ vertex -22.8511 -35.7934 -0.2
+ vertex -22.9953 -35.8619 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4866 -38.0828 -0.1
- vertex -22.9953 -35.8619 -0.1
- vertex -23.1471 -35.9117 -0.1
+ vertex -23.4866 -38.0828 -0.2
+ vertex -22.9953 -35.8619 -0.2
+ vertex -23.1471 -35.9117 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4866 -38.0828 -0.1
- vertex -23.1471 -35.9117 -0.1
- vertex -23.3082 -35.9449 -0.1
+ vertex -23.4866 -38.0828 -0.2
+ vertex -23.1471 -35.9117 -0.2
+ vertex -23.3082 -35.9449 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.8511 -35.7934 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -20.8109 -38.1301 -0.1
+ vertex -22.8511 -35.7934 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -20.8109 -38.1301 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -23.665 -35.9691 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -23.3082 -35.9449 -0.1
+ vertex -23.665 -35.9691 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -23.3082 -35.9449 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -23.8593 -35.9891 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -23.665 -35.9691 -0.1
+ vertex -23.8593 -35.9891 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -23.665 -35.9691 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.0497 -36.0458 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -23.8593 -35.9891 -0.1
+ vertex -24.0497 -36.0458 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -23.8593 -35.9891 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.2334 -36.1344 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -24.0497 -36.0458 -0.1
+ vertex -24.2334 -36.1344 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -24.0497 -36.0458 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.4077 -36.2501 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -24.2334 -36.1344 -0.1
+ vertex -24.4077 -36.2501 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -24.2334 -36.1344 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.57 -36.3881 -0.1
- vertex -23.4866 -38.0828 -0.1
- vertex -24.4077 -36.2501 -0.1
+ vertex -24.57 -36.3881 -0.2
+ vertex -23.4866 -38.0828 -0.2
+ vertex -24.4077 -36.2501 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.4866 -38.0828 -0.1
- vertex -24.57 -36.3881 -0.1
- vertex -24.3782 -38.0456 -0.1
+ vertex -23.4866 -38.0828 -0.2
+ vertex -24.57 -36.3881 -0.2
+ vertex -24.3782 -38.0456 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.7177 -36.5437 -0.1
- vertex -24.3782 -38.0456 -0.1
- vertex -24.57 -36.3881 -0.1
+ vertex -24.7177 -36.5437 -0.2
+ vertex -24.3782 -38.0456 -0.2
+ vertex -24.57 -36.3881 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.8479 -36.7119 -0.1
- vertex -24.3782 -38.0456 -0.1
- vertex -24.7177 -36.5437 -0.1
+ vertex -24.8479 -36.7119 -0.2
+ vertex -24.3782 -38.0456 -0.2
+ vertex -24.7177 -36.5437 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.9582 -36.888 -0.1
- vertex -24.3782 -38.0456 -0.1
- vertex -24.8479 -36.7119 -0.1
+ vertex -24.9582 -36.888 -0.2
+ vertex -24.3782 -38.0456 -0.2
+ vertex -24.8479 -36.7119 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.0457 -37.0673 -0.1
- vertex -24.3782 -38.0456 -0.1
- vertex -24.9582 -36.888 -0.1
+ vertex -25.0457 -37.0673 -0.2
+ vertex -24.3782 -38.0456 -0.2
+ vertex -24.9582 -36.888 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.1078 -37.2448 -0.1
- vertex -24.3782 -38.0456 -0.1
- vertex -25.0457 -37.0673 -0.1
+ vertex -25.1078 -37.2448 -0.2
+ vertex -24.3782 -38.0456 -0.2
+ vertex -25.0457 -37.0673 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.3782 -38.0456 -0.1
- vertex -25.1078 -37.2448 -0.1
- vertex -24.7978 -38.0047 -0.1
+ vertex -24.3782 -38.0456 -0.2
+ vertex -25.1078 -37.2448 -0.2
+ vertex -24.7978 -38.0047 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.1419 -37.4158 -0.1
- vertex -24.7978 -38.0047 -0.1
- vertex -25.1078 -37.2448 -0.1
+ vertex -25.1419 -37.4158 -0.2
+ vertex -24.7978 -38.0047 -0.2
+ vertex -25.1078 -37.2448 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -25.1453 -37.5754 -0.1
- vertex -24.7978 -38.0047 -0.1
- vertex -25.1419 -37.4158 -0.1
+ vertex -25.1453 -37.5754 -0.2
+ vertex -24.7978 -38.0047 -0.2
+ vertex -25.1419 -37.4158 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.7978 -38.0047 -0.1
- vertex -25.1453 -37.5754 -0.1
- vertex -24.9442 -37.9384 -0.1
+ vertex -24.7978 -38.0047 -0.2
+ vertex -25.1453 -37.5754 -0.2
+ vertex -24.9442 -37.9384 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -25.1152 -37.719 -0.1
- vertex -24.9442 -37.9384 -0.1
- vertex -25.1453 -37.5754 -0.1
+ vertex -25.1152 -37.719 -0.2
+ vertex -24.9442 -37.9384 -0.2
+ vertex -25.1453 -37.5754 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.9442 -37.9384 -0.1
- vertex -25.1152 -37.719 -0.1
- vertex -25.0491 -37.8416 -0.1
+ vertex -24.9442 -37.9384 -0.2
+ vertex -25.1152 -37.719 -0.2
+ vertex -25.0491 -37.8416 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.237 -36.6071 -0.1
- vertex -16.2485 -36.9225 -0.1
- vertex -16.2109 -36.752 -0.1
+ vertex -16.237 -36.6071 -0.2
+ vertex -16.2485 -36.9225 -0.2
+ vertex -16.2109 -36.752 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.3106 -36.4662 -0.1
- vertex -16.2485 -36.9225 -0.1
- vertex -16.237 -36.6071 -0.1
+ vertex -16.3106 -36.4662 -0.2
+ vertex -16.2485 -36.9225 -0.2
+ vertex -16.237 -36.6071 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.4249 -36.334 -0.1
- vertex -16.2485 -36.9225 -0.1
- vertex -16.3106 -36.4662 -0.1
+ vertex -16.4249 -36.334 -0.2
+ vertex -16.2485 -36.9225 -0.2
+ vertex -16.3106 -36.4662 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.2485 -36.9225 -0.1
- vertex -16.4249 -36.334 -0.1
- vertex -16.3508 -37.1428 -0.1
+ vertex -16.2485 -36.9225 -0.2
+ vertex -16.4249 -36.334 -0.2
+ vertex -16.3508 -37.1428 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.5729 -36.2152 -0.1
- vertex -16.3508 -37.1428 -0.1
- vertex -16.4249 -36.334 -0.1
+ vertex -16.5729 -36.2152 -0.2
+ vertex -16.3508 -37.1428 -0.2
+ vertex -16.4249 -36.334 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.7476 -36.1146 -0.1
- vertex -16.3508 -37.1428 -0.1
- vertex -16.5729 -36.2152 -0.1
+ vertex -16.7476 -36.1146 -0.2
+ vertex -16.3508 -37.1428 -0.2
+ vertex -16.5729 -36.2152 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.3508 -37.1428 -0.1
- vertex -16.7476 -36.1146 -0.1
- vertex -16.5023 -37.3844 -0.1
+ vertex -16.3508 -37.1428 -0.2
+ vertex -16.7476 -36.1146 -0.2
+ vertex -16.5023 -37.3844 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.942 -36.0369 -0.1
- vertex -16.5023 -37.3844 -0.1
- vertex -16.7476 -36.1146 -0.1
+ vertex -16.942 -36.0369 -0.2
+ vertex -16.5023 -37.3844 -0.2
+ vertex -16.7476 -36.1146 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.1493 -35.9869 -0.1
- vertex -16.5023 -37.3844 -0.1
- vertex -16.942 -36.0369 -0.1
+ vertex -17.1493 -35.9869 -0.2
+ vertex -16.5023 -37.3844 -0.2
+ vertex -16.942 -36.0369 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.5023 -37.3844 -0.1
- vertex -17.1493 -35.9869 -0.1
- vertex -16.6872 -37.6188 -0.1
+ vertex -16.5023 -37.3844 -0.2
+ vertex -17.1493 -35.9869 -0.2
+ vertex -16.6872 -37.6188 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.3625 -35.9691 -0.1
- vertex -16.6872 -37.6188 -0.1
- vertex -17.1493 -35.9869 -0.1
+ vertex -17.3625 -35.9691 -0.2
+ vertex -16.6872 -37.6188 -0.2
+ vertex -17.1493 -35.9869 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4702 -35.9608 -0.1
- vertex -16.6872 -37.6188 -0.1
- vertex -17.3625 -35.9691 -0.1
+ vertex -17.4702 -35.9608 -0.2
+ vertex -16.6872 -37.6188 -0.2
+ vertex -17.3625 -35.9691 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.6872 -37.6188 -0.1
- vertex -17.4702 -35.9608 -0.1
- vertex -16.8516 -37.795 -0.1
+ vertex -16.6872 -37.6188 -0.2
+ vertex -17.4702 -35.9608 -0.2
+ vertex -16.8516 -37.795 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex -17.2437 -38.0218 -0.1
- vertex -16.8516 -37.795 -0.1
- vertex -17.4702 -35.9608 -0.1
+ vertex -17.2437 -38.0218 -0.2
+ vertex -16.8516 -37.795 -0.2
+ vertex -17.4702 -35.9608 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.8516 -37.795 -0.1
- vertex -17.2437 -38.0218 -0.1
- vertex -17.0213 -37.9274 -0.1
+ vertex -16.8516 -37.795 -0.2
+ vertex -17.2437 -38.0218 -0.2
+ vertex -17.0213 -37.9274 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.5664 -38.0841 -0.1
- vertex -17.4702 -35.9608 -0.1
- vertex -17.5603 -35.9348 -0.1
+ vertex -17.5664 -38.0841 -0.2
+ vertex -17.4702 -35.9608 -0.2
+ vertex -17.5603 -35.9348 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.4702 -35.9608 -0.1
- vertex -17.5664 -38.0841 -0.1
- vertex -17.2437 -38.0218 -0.1
+ vertex -17.4702 -35.9608 -0.2
+ vertex -17.5664 -38.0841 -0.2
+ vertex -17.2437 -38.0218 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.0369 -38.1201 -0.1
- vertex -17.5603 -35.9348 -0.1
- vertex -17.6327 -35.8892 -0.1
+ vertex -18.0369 -38.1201 -0.2
+ vertex -17.5603 -35.9348 -0.2
+ vertex -17.6327 -35.8892 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.0369 -38.1201 -0.1
- vertex -17.6327 -35.8892 -0.1
- vertex -17.6869 -35.8223 -0.1
+ vertex -18.0369 -38.1201 -0.2
+ vertex -17.6327 -35.8892 -0.2
+ vertex -17.6869 -35.8223 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.0369 -38.1201 -0.1
- vertex -17.6869 -35.8223 -0.1
- vertex -17.7228 -35.7323 -0.1
+ vertex -18.0369 -38.1201 -0.2
+ vertex -17.6869 -35.8223 -0.2
+ vertex -17.7228 -35.7323 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.0369 -38.1201 -0.1
- vertex -17.7228 -35.7323 -0.1
- vertex -17.7399 -35.6175 -0.1
+ vertex -18.0369 -38.1201 -0.2
+ vertex -17.7228 -35.7323 -0.2
+ vertex -17.7399 -35.6175 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.5603 -35.9348 -0.1
- vertex -18.0369 -38.1201 -0.1
- vertex -17.5664 -38.0841 -0.1
+ vertex -17.5603 -35.9348 -0.2
+ vertex -18.0369 -38.1201 -0.2
+ vertex -17.5664 -38.0841 -0.2
endloop
endfacet
facet normal -0.362708 -0.931903 0
outer loop
- vertex -12.0792 -19.1571 -0.1
+ vertex -12.0792 -19.1571 -0.2
vertex -11.9023 -19.2259 0
vertex -12.0792 -19.1571 0
endloop
@@ -16067,13 +16067,13 @@ solid OpenSCAD_Model
facet normal -0.362708 -0.931903 -0
outer loop
vertex -11.9023 -19.2259 0
- vertex -12.0792 -19.1571 -0.1
- vertex -11.9023 -19.2259 -0.1
+ vertex -12.0792 -19.1571 -0.2
+ vertex -11.9023 -19.2259 -0.2
endloop
endfacet
facet normal -0.651552 -0.758604 0
outer loop
- vertex -11.9023 -19.2259 -0.1
+ vertex -11.9023 -19.2259 -0.2
vertex -11.7723 -19.3375 0
vertex -11.9023 -19.2259 0
endloop
@@ -16081,125 +16081,125 @@ solid OpenSCAD_Model
facet normal -0.651552 -0.758604 -0
outer loop
vertex -11.7723 -19.3375 0
- vertex -11.9023 -19.2259 -0.1
- vertex -11.7723 -19.3375 -0.1
+ vertex -11.9023 -19.2259 -0.2
+ vertex -11.7723 -19.3375 -0.2
endloop
endfacet
facet normal -0.879356 -0.476164 0
outer loop
- vertex -11.6899 -19.4898 -0.1
+ vertex -11.6899 -19.4898 -0.2
vertex -11.7723 -19.3375 0
- vertex -11.7723 -19.3375 -0.1
+ vertex -11.7723 -19.3375 -0.2
endloop
endfacet
facet normal -0.879356 -0.476164 0
outer loop
vertex -11.7723 -19.3375 0
- vertex -11.6899 -19.4898 -0.1
+ vertex -11.6899 -19.4898 -0.2
vertex -11.6899 -19.4898 0
endloop
endfacet
facet normal -0.98435 -0.176224 0
outer loop
- vertex -11.6557 -19.6804 -0.1
+ vertex -11.6557 -19.6804 -0.2
vertex -11.6899 -19.4898 0
- vertex -11.6899 -19.4898 -0.1
+ vertex -11.6899 -19.4898 -0.2
endloop
endfacet
facet normal -0.98435 -0.176224 0
outer loop
vertex -11.6899 -19.4898 0
- vertex -11.6557 -19.6804 -0.1
+ vertex -11.6557 -19.6804 -0.2
vertex -11.6557 -19.6804 0
endloop
endfacet
facet normal -0.997828 0.0658663 0
outer loop
- vertex -11.6707 -19.9072 -0.1
+ vertex -11.6707 -19.9072 -0.2
vertex -11.6557 -19.6804 0
- vertex -11.6557 -19.6804 -0.1
+ vertex -11.6557 -19.6804 -0.2
endloop
endfacet
facet normal -0.997828 0.0658663 0
outer loop
vertex -11.6557 -19.6804 0
- vertex -11.6707 -19.9072 -0.1
+ vertex -11.6707 -19.9072 -0.2
vertex -11.6707 -19.9072 0
endloop
endfacet
facet normal -0.970423 0.241411 0
outer loop
- vertex -11.7355 -20.1677 -0.1
+ vertex -11.7355 -20.1677 -0.2
vertex -11.6707 -19.9072 0
- vertex -11.6707 -19.9072 -0.1
+ vertex -11.6707 -19.9072 -0.2
endloop
endfacet
facet normal -0.970423 0.241411 0
outer loop
vertex -11.6707 -19.9072 0
- vertex -11.7355 -20.1677 -0.1
+ vertex -11.7355 -20.1677 -0.2
vertex -11.7355 -20.1677 0
endloop
endfacet
facet normal -0.930032 0.367479 0
outer loop
- vertex -11.851 -20.4599 -0.1
+ vertex -11.851 -20.4599 -0.2
vertex -11.7355 -20.1677 0
- vertex -11.7355 -20.1677 -0.1
+ vertex -11.7355 -20.1677 -0.2
endloop
endfacet
facet normal -0.930032 0.367479 0
outer loop
vertex -11.7355 -20.1677 0
- vertex -11.851 -20.4599 -0.1
+ vertex -11.851 -20.4599 -0.2
vertex -11.851 -20.4599 0
endloop
endfacet
facet normal -0.930941 0.365169 0
outer loop
- vertex -12.0288 -20.9134 -0.1
+ vertex -12.0288 -20.9134 -0.2
vertex -11.851 -20.4599 0
- vertex -11.851 -20.4599 -0.1
+ vertex -11.851 -20.4599 -0.2
endloop
endfacet
facet normal -0.930941 0.365169 0
outer loop
vertex -11.851 -20.4599 0
- vertex -12.0288 -20.9134 -0.1
+ vertex -12.0288 -20.9134 -0.2
vertex -12.0288 -20.9134 0
endloop
endfacet
facet normal -0.976329 0.216289 0
outer loop
- vertex -12.0594 -21.0513 -0.1
+ vertex -12.0594 -21.0513 -0.2
vertex -12.0288 -20.9134 0
- vertex -12.0288 -20.9134 -0.1
+ vertex -12.0288 -20.9134 -0.2
endloop
endfacet
facet normal -0.976329 0.216289 0
outer loop
vertex -12.0288 -20.9134 0
- vertex -12.0594 -21.0513 -0.1
+ vertex -12.0594 -21.0513 -0.2
vertex -12.0594 -21.0513 0
endloop
endfacet
facet normal -0.998491 -0.0549167 0
outer loop
- vertex -12.0573 -21.0889 -0.1
+ vertex -12.0573 -21.0889 -0.2
vertex -12.0594 -21.0513 0
- vertex -12.0594 -21.0513 -0.1
+ vertex -12.0594 -21.0513 -0.2
endloop
endfacet
facet normal -0.998491 -0.0549167 0
outer loop
vertex -12.0594 -21.0513 0
- vertex -12.0573 -21.0889 -0.1
+ vertex -12.0573 -21.0889 -0.2
vertex -12.0573 -21.0889 0
endloop
endfacet
facet normal -0.666017 -0.745937 0
outer loop
- vertex -12.0573 -21.0889 -0.1
+ vertex -12.0573 -21.0889 -0.2
vertex -12.0427 -21.102 0
vertex -12.0573 -21.0889 0
endloop
@@ -16207,13 +16207,13 @@ solid OpenSCAD_Model
facet normal -0.666017 -0.745937 -0
outer loop
vertex -12.0427 -21.102 0
- vertex -12.0573 -21.0889 -0.1
- vertex -12.0427 -21.102 -0.1
+ vertex -12.0573 -21.0889 -0.2
+ vertex -12.0427 -21.102 -0.2
endloop
endfacet
facet normal 0.407619 -0.913152 0
outer loop
- vertex -12.0427 -21.102 -0.1
+ vertex -12.0427 -21.102 -0.2
vertex -11.8784 -21.0286 0
vertex -12.0427 -21.102 0
endloop
@@ -16221,13 +16221,13 @@ solid OpenSCAD_Model
facet normal 0.407619 -0.913152 0
outer loop
vertex -11.8784 -21.0286 0
- vertex -12.0427 -21.102 -0.1
- vertex -11.8784 -21.0286 -0.1
+ vertex -12.0427 -21.102 -0.2
+ vertex -11.8784 -21.0286 -0.2
endloop
endfacet
facet normal 0.473772 -0.880648 0
outer loop
- vertex -11.8784 -21.0286 -0.1
+ vertex -11.8784 -21.0286 -0.2
vertex -11.5073 -20.829 0
vertex -11.8784 -21.0286 0
endloop
@@ -16235,13 +16235,13 @@ solid OpenSCAD_Model
facet normal 0.473772 -0.880648 0
outer loop
vertex -11.5073 -20.829 0
- vertex -11.8784 -21.0286 -0.1
- vertex -11.5073 -20.829 -0.1
+ vertex -11.8784 -21.0286 -0.2
+ vertex -11.5073 -20.829 -0.2
endloop
endfacet
facet normal 0.498101 -0.867119 0
outer loop
- vertex -11.5073 -20.829 -0.1
+ vertex -11.5073 -20.829 -0.2
vertex -10.3649 -20.1728 0
vertex -11.5073 -20.829 0
endloop
@@ -16249,13 +16249,13 @@ solid OpenSCAD_Model
facet normal 0.498101 -0.867119 0
outer loop
vertex -10.3649 -20.1728 0
- vertex -11.5073 -20.829 -0.1
- vertex -10.3649 -20.1728 -0.1
+ vertex -11.5073 -20.829 -0.2
+ vertex -10.3649 -20.1728 -0.2
endloop
endfacet
facet normal 0.501647 -0.865072 0
outer loop
- vertex -10.3649 -20.1728 -0.1
+ vertex -10.3649 -20.1728 -0.2
vertex -9.87453 -19.8884 0
vertex -10.3649 -20.1728 0
endloop
@@ -16263,13 +16263,13 @@ solid OpenSCAD_Model
facet normal 0.501647 -0.865072 0
outer loop
vertex -9.87453 -19.8884 0
- vertex -10.3649 -20.1728 -0.1
- vertex -9.87453 -19.8884 -0.1
+ vertex -10.3649 -20.1728 -0.2
+ vertex -9.87453 -19.8884 -0.2
endloop
endfacet
facet normal 0.475521 -0.879704 0
outer loop
- vertex -9.87453 -19.8884 -0.1
+ vertex -9.87453 -19.8884 -0.2
vertex -9.46489 -19.667 0
vertex -9.87453 -19.8884 0
endloop
@@ -16277,13 +16277,13 @@ solid OpenSCAD_Model
facet normal 0.475521 -0.879704 0
outer loop
vertex -9.46489 -19.667 0
- vertex -9.87453 -19.8884 -0.1
- vertex -9.46489 -19.667 -0.1
+ vertex -9.87453 -19.8884 -0.2
+ vertex -9.46489 -19.667 -0.2
endloop
endfacet
facet normal 0.423964 -0.905679 0
outer loop
- vertex -9.46489 -19.667 -0.1
+ vertex -9.46489 -19.667 -0.2
vertex -9.10766 -19.4997 0
vertex -9.46489 -19.667 0
endloop
@@ -16291,13 +16291,13 @@ solid OpenSCAD_Model
facet normal 0.423964 -0.905679 0
outer loop
vertex -9.10766 -19.4997 0
- vertex -9.46489 -19.667 -0.1
- vertex -9.10766 -19.4997 -0.1
+ vertex -9.46489 -19.667 -0.2
+ vertex -9.10766 -19.4997 -0.2
endloop
endfacet
facet normal 0.343275 -0.939235 0
outer loop
- vertex -9.10766 -19.4997 -0.1
+ vertex -9.10766 -19.4997 -0.2
vertex -8.77447 -19.378 0
vertex -9.10766 -19.4997 0
endloop
@@ -16305,13 +16305,13 @@ solid OpenSCAD_Model
facet normal 0.343275 -0.939235 0
outer loop
vertex -8.77447 -19.378 0
- vertex -9.10766 -19.4997 -0.1
- vertex -8.77447 -19.378 -0.1
+ vertex -9.10766 -19.4997 -0.2
+ vertex -8.77447 -19.378 -0.2
endloop
endfacet
facet normal 0.244399 -0.969675 0
outer loop
- vertex -8.77447 -19.378 -0.1
+ vertex -8.77447 -19.378 -0.2
vertex -8.43701 -19.2929 0
vertex -8.77447 -19.378 0
endloop
@@ -16319,13 +16319,13 @@ solid OpenSCAD_Model
facet normal 0.244399 -0.969675 0
outer loop
vertex -8.43701 -19.2929 0
- vertex -8.77447 -19.378 -0.1
- vertex -8.43701 -19.2929 -0.1
+ vertex -8.77447 -19.378 -0.2
+ vertex -8.43701 -19.2929 -0.2
endloop
endfacet
facet normal 0.152431 -0.988314 0
outer loop
- vertex -8.43701 -19.2929 -0.1
+ vertex -8.43701 -19.2929 -0.2
vertex -8.06691 -19.2358 0
vertex -8.43701 -19.2929 0
endloop
@@ -16333,13 +16333,13 @@ solid OpenSCAD_Model
facet normal 0.152431 -0.988314 0
outer loop
vertex -8.06691 -19.2358 0
- vertex -8.43701 -19.2929 -0.1
- vertex -8.06691 -19.2358 -0.1
+ vertex -8.43701 -19.2929 -0.2
+ vertex -8.06691 -19.2358 -0.2
endloop
endfacet
facet normal 0.0874592 -0.996168 0
outer loop
- vertex -8.06691 -19.2358 -0.1
+ vertex -8.06691 -19.2358 -0.2
vertex -7.63584 -19.198 0
vertex -8.06691 -19.2358 0
endloop
@@ -16347,13 +16347,13 @@ solid OpenSCAD_Model
facet normal 0.0874592 -0.996168 0
outer loop
vertex -7.63584 -19.198 0
- vertex -8.06691 -19.2358 -0.1
- vertex -7.63584 -19.198 -0.1
+ vertex -8.06691 -19.2358 -0.2
+ vertex -7.63584 -19.198 -0.2
endloop
endfacet
facet normal 0.0524883 -0.998622 0
outer loop
- vertex -7.63584 -19.198 -0.1
+ vertex -7.63584 -19.198 -0.2
vertex -7.11547 -19.1706 0
vertex -7.63584 -19.198 0
endloop
@@ -16361,13 +16361,13 @@ solid OpenSCAD_Model
facet normal 0.0524883 -0.998622 0
outer loop
vertex -7.11547 -19.1706 0
- vertex -7.63584 -19.198 -0.1
- vertex -7.11547 -19.1706 -0.1
+ vertex -7.63584 -19.198 -0.2
+ vertex -7.11547 -19.1706 -0.2
endloop
endfacet
facet normal 0.0303019 -0.999541 0
outer loop
- vertex -7.11547 -19.1706 -0.1
+ vertex -7.11547 -19.1706 -0.2
vertex -6.14058 -19.1411 0
vertex -7.11547 -19.1706 0
endloop
@@ -16375,13 +16375,13 @@ solid OpenSCAD_Model
facet normal 0.0303019 -0.999541 0
outer loop
vertex -6.14058 -19.1411 0
- vertex -7.11547 -19.1706 -0.1
- vertex -6.14058 -19.1411 -0.1
+ vertex -7.11547 -19.1706 -0.2
+ vertex -6.14058 -19.1411 -0.2
endloop
endfacet
facet normal -0.0462057 -0.998932 0
outer loop
- vertex -6.14058 -19.1411 -0.1
+ vertex -6.14058 -19.1411 -0.2
vertex -5.8145 -19.1562 0
vertex -6.14058 -19.1411 0
endloop
@@ -16389,13 +16389,13 @@ solid OpenSCAD_Model
facet normal -0.0462057 -0.998932 -0
outer loop
vertex -5.8145 -19.1562 0
- vertex -6.14058 -19.1411 -0.1
- vertex -5.8145 -19.1562 -0.1
+ vertex -6.14058 -19.1411 -0.2
+ vertex -5.8145 -19.1562 -0.2
endloop
endfacet
facet normal -0.173732 -0.984793 0
outer loop
- vertex -5.8145 -19.1562 -0.1
+ vertex -5.8145 -19.1562 -0.2
vertex -5.55901 -19.2012 0
vertex -5.8145 -19.1562 0
endloop
@@ -16403,13 +16403,13 @@ solid OpenSCAD_Model
facet normal -0.173732 -0.984793 -0
outer loop
vertex -5.55901 -19.2012 0
- vertex -5.8145 -19.1562 -0.1
- vertex -5.55901 -19.2012 -0.1
+ vertex -5.8145 -19.1562 -0.2
+ vertex -5.55901 -19.2012 -0.2
endloop
endfacet
facet normal -0.362239 -0.932085 0
outer loop
- vertex -5.55901 -19.2012 -0.1
+ vertex -5.55901 -19.2012 -0.2
vertex -5.34642 -19.2839 0
vertex -5.55901 -19.2012 0
endloop
@@ -16417,13 +16417,13 @@ solid OpenSCAD_Model
facet normal -0.362239 -0.932085 -0
outer loop
vertex -5.34642 -19.2839 0
- vertex -5.55901 -19.2012 -0.1
- vertex -5.34642 -19.2839 -0.1
+ vertex -5.55901 -19.2012 -0.2
+ vertex -5.34642 -19.2839 -0.2
endloop
endfacet
facet normal -0.543204 -0.8396 0
outer loop
- vertex -5.34642 -19.2839 -0.1
+ vertex -5.34642 -19.2839 -0.2
vertex -5.14898 -19.4116 0
vertex -5.34642 -19.2839 0
endloop
@@ -16431,13 +16431,13 @@ solid OpenSCAD_Model
facet normal -0.543204 -0.8396 -0
outer loop
vertex -5.14898 -19.4116 0
- vertex -5.34642 -19.2839 -0.1
- vertex -5.14898 -19.4116 -0.1
+ vertex -5.34642 -19.2839 -0.2
+ vertex -5.14898 -19.4116 -0.2
endloop
endfacet
facet normal -0.651669 -0.758504 0
outer loop
- vertex -5.14898 -19.4116 -0.1
+ vertex -5.14898 -19.4116 -0.2
vertex -4.93899 -19.592 0
vertex -5.14898 -19.4116 0
endloop
@@ -16445,13 +16445,13 @@ solid OpenSCAD_Model
facet normal -0.651669 -0.758504 -0
outer loop
vertex -4.93899 -19.592 0
- vertex -5.14898 -19.4116 -0.1
- vertex -4.93899 -19.592 -0.1
+ vertex -5.14898 -19.4116 -0.2
+ vertex -4.93899 -19.592 -0.2
endloop
endfacet
facet normal -0.693118 -0.720824 0
outer loop
- vertex -4.93899 -19.592 -0.1
+ vertex -4.93899 -19.592 -0.2
vertex -4.68872 -19.8327 0
vertex -4.93899 -19.592 0
endloop
@@ -16459,391 +16459,391 @@ solid OpenSCAD_Model
facet normal -0.693118 -0.720824 -0
outer loop
vertex -4.68872 -19.8327 0
- vertex -4.93899 -19.592 -0.1
- vertex -4.68872 -19.8327 -0.1
+ vertex -4.93899 -19.592 -0.2
+ vertex -4.68872 -19.8327 -0.2
endloop
endfacet
facet normal -0.711815 -0.702367 0
outer loop
- vertex -4.47107 -20.0532 -0.1
+ vertex -4.47107 -20.0532 -0.2
vertex -4.68872 -19.8327 0
- vertex -4.68872 -19.8327 -0.1
+ vertex -4.68872 -19.8327 -0.2
endloop
endfacet
facet normal -0.711815 -0.702367 0
outer loop
vertex -4.68872 -19.8327 0
- vertex -4.47107 -20.0532 -0.1
+ vertex -4.47107 -20.0532 -0.2
vertex -4.47107 -20.0532 0
endloop
endfacet
facet normal -0.751184 -0.660092 0
outer loop
- vertex -4.29663 -20.2518 -0.1
+ vertex -4.29663 -20.2518 -0.2
vertex -4.47107 -20.0532 0
- vertex -4.47107 -20.0532 -0.1
+ vertex -4.47107 -20.0532 -0.2
endloop
endfacet
facet normal -0.751184 -0.660092 0
outer loop
vertex -4.47107 -20.0532 0
- vertex -4.29663 -20.2518 -0.1
+ vertex -4.29663 -20.2518 -0.2
vertex -4.29663 -20.2518 0
endloop
endfacet
facet normal -0.80931 -0.587382 0
outer loop
- vertex -4.15983 -20.4402 -0.1
+ vertex -4.15983 -20.4402 -0.2
vertex -4.29663 -20.2518 0
- vertex -4.29663 -20.2518 -0.1
+ vertex -4.29663 -20.2518 -0.2
endloop
endfacet
facet normal -0.80931 -0.587382 0
outer loop
vertex -4.29663 -20.2518 0
- vertex -4.15983 -20.4402 -0.1
+ vertex -4.15983 -20.4402 -0.2
vertex -4.15983 -20.4402 0
endloop
endfacet
facet normal -0.876288 -0.481787 0
outer loop
- vertex -4.05507 -20.6308 -0.1
+ vertex -4.05507 -20.6308 -0.2
vertex -4.15983 -20.4402 0
- vertex -4.15983 -20.4402 -0.1
+ vertex -4.15983 -20.4402 -0.2
endloop
endfacet
facet normal -0.876288 -0.481787 0
outer loop
vertex -4.15983 -20.4402 0
- vertex -4.05507 -20.6308 -0.1
+ vertex -4.05507 -20.6308 -0.2
vertex -4.05507 -20.6308 0
endloop
endfacet
facet normal -0.93397 -0.357351 0
outer loop
- vertex -3.97677 -20.8354 -0.1
+ vertex -3.97677 -20.8354 -0.2
vertex -4.05507 -20.6308 0
- vertex -4.05507 -20.6308 -0.1
+ vertex -4.05507 -20.6308 -0.2
endloop
endfacet
facet normal -0.93397 -0.357351 0
outer loop
vertex -4.05507 -20.6308 0
- vertex -3.97677 -20.8354 -0.1
+ vertex -3.97677 -20.8354 -0.2
vertex -3.97677 -20.8354 0
endloop
endfacet
facet normal -0.970412 -0.241456 0
outer loop
- vertex -3.91934 -21.0662 -0.1
+ vertex -3.91934 -21.0662 -0.2
vertex -3.97677 -20.8354 0
- vertex -3.97677 -20.8354 -0.1
+ vertex -3.97677 -20.8354 -0.2
endloop
endfacet
facet normal -0.970412 -0.241456 0
outer loop
vertex -3.97677 -20.8354 0
- vertex -3.91934 -21.0662 -0.1
+ vertex -3.91934 -21.0662 -0.2
vertex -3.91934 -21.0662 0
endloop
endfacet
facet normal -0.987949 -0.154777 0
outer loop
- vertex -3.87719 -21.3353 -0.1
+ vertex -3.87719 -21.3353 -0.2
vertex -3.91934 -21.0662 0
- vertex -3.91934 -21.0662 -0.1
+ vertex -3.91934 -21.0662 -0.2
endloop
endfacet
facet normal -0.987949 -0.154777 0
outer loop
vertex -3.91934 -21.0662 0
- vertex -3.87719 -21.3353 -0.1
+ vertex -3.87719 -21.3353 -0.2
vertex -3.87719 -21.3353 0
endloop
endfacet
facet normal -0.994874 -0.10112 0
outer loop
- vertex -3.84473 -21.6547 -0.1
+ vertex -3.84473 -21.6547 -0.2
vertex -3.87719 -21.3353 0
- vertex -3.87719 -21.3353 -0.1
+ vertex -3.87719 -21.3353 -0.2
endloop
endfacet
facet normal -0.994874 -0.10112 0
outer loop
vertex -3.87719 -21.3353 0
- vertex -3.84473 -21.6547 -0.1
+ vertex -3.84473 -21.6547 -0.2
vertex -3.84473 -21.6547 0
endloop
endfacet
facet normal -0.999588 -0.0286991 0
outer loop
- vertex -3.82849 -22.2203 -0.1
+ vertex -3.82849 -22.2203 -0.2
vertex -3.84473 -21.6547 0
- vertex -3.84473 -21.6547 -0.1
+ vertex -3.84473 -21.6547 -0.2
endloop
endfacet
facet normal -0.999588 -0.0286991 0
outer loop
vertex -3.84473 -21.6547 0
- vertex -3.82849 -22.2203 -0.1
+ vertex -3.82849 -22.2203 -0.2
vertex -3.82849 -22.2203 0
endloop
endfacet
facet normal -0.998294 0.058395 0
outer loop
- vertex -3.84589 -22.5177 -0.1
+ vertex -3.84589 -22.5177 -0.2
vertex -3.82849 -22.2203 0
- vertex -3.82849 -22.2203 -0.1
+ vertex -3.82849 -22.2203 -0.2
endloop
endfacet
facet normal -0.998294 0.058395 0
outer loop
vertex -3.82849 -22.2203 0
- vertex -3.84589 -22.5177 -0.1
+ vertex -3.84589 -22.5177 -0.2
vertex -3.84589 -22.5177 0
endloop
endfacet
facet normal -0.99329 0.115647 0
outer loop
- vertex -3.88244 -22.8317 -0.1
+ vertex -3.88244 -22.8317 -0.2
vertex -3.84589 -22.5177 0
- vertex -3.84589 -22.5177 -0.1
+ vertex -3.84589 -22.5177 -0.2
endloop
endfacet
facet normal -0.99329 0.115647 0
outer loop
vertex -3.84589 -22.5177 0
- vertex -3.88244 -22.8317 -0.1
+ vertex -3.88244 -22.8317 -0.2
vertex -3.88244 -22.8317 0
endloop
endfacet
facet normal -0.985725 0.168361 0
outer loop
- vertex -3.93975 -23.1672 -0.1
+ vertex -3.93975 -23.1672 -0.2
vertex -3.88244 -22.8317 0
- vertex -3.88244 -22.8317 -0.1
+ vertex -3.88244 -22.8317 -0.2
endloop
endfacet
facet normal -0.985725 0.168361 0
outer loop
vertex -3.88244 -22.8317 0
- vertex -3.93975 -23.1672 -0.1
+ vertex -3.93975 -23.1672 -0.2
vertex -3.93975 -23.1672 0
endloop
endfacet
facet normal -0.976652 0.214827 0
outer loop
- vertex -4.01943 -23.5295 -0.1
+ vertex -4.01943 -23.5295 -0.2
vertex -3.93975 -23.1672 0
- vertex -3.93975 -23.1672 -0.1
+ vertex -3.93975 -23.1672 -0.2
endloop
endfacet
facet normal -0.976652 0.214827 0
outer loop
vertex -3.93975 -23.1672 0
- vertex -4.01943 -23.5295 -0.1
+ vertex -4.01943 -23.5295 -0.2
vertex -4.01943 -23.5295 0
endloop
endfacet
facet normal -0.962379 0.27171 0
outer loop
- vertex -4.25232 -24.3543 -0.1
+ vertex -4.25232 -24.3543 -0.2
vertex -4.01943 -23.5295 0
- vertex -4.01943 -23.5295 -0.1
+ vertex -4.01943 -23.5295 -0.2
endloop
endfacet
facet normal -0.962379 0.27171 0
outer loop
vertex -4.01943 -23.5295 0
- vertex -4.25232 -24.3543 -0.1
+ vertex -4.25232 -24.3543 -0.2
vertex -4.25232 -24.3543 0
endloop
endfacet
facet normal -0.945562 0.325441 0
outer loop
- vertex -4.59396 -25.347 -0.1
+ vertex -4.59396 -25.347 -0.2
vertex -4.25232 -24.3543 0
- vertex -4.25232 -24.3543 -0.1
+ vertex -4.25232 -24.3543 -0.2
endloop
endfacet
facet normal -0.945562 0.325441 0
outer loop
vertex -4.25232 -24.3543 0
- vertex -4.59396 -25.347 -0.1
+ vertex -4.59396 -25.347 -0.2
vertex -4.59396 -25.347 0
endloop
endfacet
facet normal -0.933005 0.359863 0
outer loop
- vertex -5.05721 -26.548 -0.1
+ vertex -5.05721 -26.548 -0.2
vertex -4.59396 -25.347 0
- vertex -4.59396 -25.347 -0.1
+ vertex -4.59396 -25.347 -0.2
endloop
endfacet
facet normal -0.933005 0.359863 0
outer loop
vertex -4.59396 -25.347 0
- vertex -5.05721 -26.548 -0.1
+ vertex -5.05721 -26.548 -0.2
vertex -5.05721 -26.548 0
endloop
endfacet
facet normal -0.924544 0.381075 0
outer loop
- vertex -5.65492 -27.9982 -0.1
+ vertex -5.65492 -27.9982 -0.2
vertex -5.05721 -26.548 0
- vertex -5.05721 -26.548 -0.1
+ vertex -5.05721 -26.548 -0.2
endloop
endfacet
facet normal -0.924544 0.381075 0
outer loop
vertex -5.05721 -26.548 0
- vertex -5.65492 -27.9982 -0.1
+ vertex -5.65492 -27.9982 -0.2
vertex -5.65492 -27.9982 0
endloop
endfacet
facet normal -0.919267 0.393635 0
outer loop
- vertex -6.39994 -29.738 -0.1
+ vertex -6.39994 -29.738 -0.2
vertex -5.65492 -27.9982 0
- vertex -5.65492 -27.9982 -0.1
+ vertex -5.65492 -27.9982 -0.2
endloop
endfacet
facet normal -0.919267 0.393635 0
outer loop
vertex -5.65492 -27.9982 0
- vertex -6.39994 -29.738 -0.1
+ vertex -6.39994 -29.738 -0.2
vertex -6.39994 -29.738 0
endloop
endfacet
facet normal -0.920331 0.391141 0
outer loop
- vertex -7.70823 -32.8163 -0.1
+ vertex -7.70823 -32.8163 -0.2
vertex -6.39994 -29.738 0
- vertex -6.39994 -29.738 -0.1
+ vertex -6.39994 -29.738 -0.2
endloop
endfacet
facet normal -0.920331 0.391141 0
outer loop
vertex -6.39994 -29.738 0
- vertex -7.70823 -32.8163 -0.1
+ vertex -7.70823 -32.8163 -0.2
vertex -7.70823 -32.8163 0
endloop
endfacet
facet normal -0.926406 0.376526 0
outer loop
- vertex -8.13453 -33.8652 -0.1
+ vertex -8.13453 -33.8652 -0.2
vertex -7.70823 -32.8163 0
- vertex -7.70823 -32.8163 -0.1
+ vertex -7.70823 -32.8163 -0.2
endloop
endfacet
facet normal -0.926406 0.376526 0
outer loop
vertex -7.70823 -32.8163 0
- vertex -8.13453 -33.8652 -0.1
+ vertex -8.13453 -33.8652 -0.2
vertex -8.13453 -33.8652 0
endloop
endfacet
facet normal -0.938884 0.344234 0
outer loop
- vertex -8.32474 -34.384 -0.1
+ vertex -8.32474 -34.384 -0.2
vertex -8.13453 -33.8652 0
- vertex -8.13453 -33.8652 -0.1
+ vertex -8.13453 -33.8652 -0.2
endloop
endfacet
facet normal -0.938884 0.344234 0
outer loop
vertex -8.13453 -33.8652 0
- vertex -8.32474 -34.384 -0.1
+ vertex -8.32474 -34.384 -0.2
vertex -8.32474 -34.384 0
endloop
endfacet
facet normal -0.969782 0.243972 0
outer loop
- vertex -8.55649 -35.3052 -0.1
+ vertex -8.55649 -35.3052 -0.2
vertex -8.32474 -34.384 0
- vertex -8.32474 -34.384 -0.1
+ vertex -8.32474 -34.384 -0.2
endloop
endfacet
facet normal -0.969782 0.243972 0
outer loop
vertex -8.32474 -34.384 0
- vertex -8.55649 -35.3052 -0.1
+ vertex -8.55649 -35.3052 -0.2
vertex -8.55649 -35.3052 0
endloop
endfacet
facet normal -0.98411 0.17756 0
outer loop
- vertex -8.57785 -35.4236 -0.1
+ vertex -8.57785 -35.4236 -0.2
vertex -8.55649 -35.3052 0
- vertex -8.55649 -35.3052 -0.1
+ vertex -8.55649 -35.3052 -0.2
endloop
endfacet
facet normal -0.98411 0.17756 0
outer loop
vertex -8.55649 -35.3052 0
- vertex -8.57785 -35.4236 -0.1
+ vertex -8.57785 -35.4236 -0.2
vertex -8.57785 -35.4236 0
endloop
endfacet
facet normal -0.999972 -0.00745735 0
outer loop
- vertex -8.57707 -35.529 -0.1
+ vertex -8.57707 -35.529 -0.2
vertex -8.57785 -35.4236 0
- vertex -8.57785 -35.4236 -0.1
+ vertex -8.57785 -35.4236 -0.2
endloop
endfacet
facet normal -0.999972 -0.00745735 0
outer loop
vertex -8.57785 -35.4236 0
- vertex -8.57707 -35.529 -0.1
+ vertex -8.57707 -35.529 -0.2
vertex -8.57707 -35.529 0
endloop
endfacet
facet normal -0.966564 -0.256425 0
outer loop
- vertex -8.55176 -35.6244 -0.1
+ vertex -8.55176 -35.6244 -0.2
vertex -8.57707 -35.529 0
- vertex -8.57707 -35.529 -0.1
+ vertex -8.57707 -35.529 -0.2
endloop
endfacet
facet normal -0.966564 -0.256425 0
outer loop
vertex -8.57707 -35.529 0
- vertex -8.55176 -35.6244 -0.1
+ vertex -8.55176 -35.6244 -0.2
vertex -8.55176 -35.6244 0
endloop
endfacet
facet normal -0.861289 -0.508115 0
outer loop
- vertex -8.49955 -35.7129 -0.1
+ vertex -8.49955 -35.7129 -0.2
vertex -8.55176 -35.6244 0
- vertex -8.55176 -35.6244 -0.1
+ vertex -8.55176 -35.6244 -0.2
endloop
endfacet
facet normal -0.861289 -0.508115 0
outer loop
vertex -8.55176 -35.6244 0
- vertex -8.49955 -35.7129 -0.1
+ vertex -8.49955 -35.7129 -0.2
vertex -8.49955 -35.7129 0
endloop
endfacet
facet normal -0.720516 -0.693438 0
outer loop
- vertex -8.41808 -35.7975 -0.1
+ vertex -8.41808 -35.7975 -0.2
vertex -8.49955 -35.7129 0
- vertex -8.49955 -35.7129 -0.1
+ vertex -8.49955 -35.7129 -0.2
endloop
endfacet
facet normal -0.720516 -0.693438 0
outer loop
vertex -8.49955 -35.7129 0
- vertex -8.41808 -35.7975 -0.1
+ vertex -8.41808 -35.7975 -0.2
vertex -8.41808 -35.7975 0
endloop
endfacet
facet normal -0.595759 -0.803164 0
outer loop
- vertex -8.41808 -35.7975 -0.1
+ vertex -8.41808 -35.7975 -0.2
vertex -8.30497 -35.8814 0
vertex -8.41808 -35.7975 0
endloop
@@ -16851,13 +16851,13 @@ solid OpenSCAD_Model
facet normal -0.595759 -0.803164 -0
outer loop
vertex -8.30497 -35.8814 0
- vertex -8.41808 -35.7975 -0.1
- vertex -8.30497 -35.8814 -0.1
+ vertex -8.41808 -35.7975 -0.2
+ vertex -8.30497 -35.8814 -0.2
endloop
endfacet
facet normal -0.473656 -0.88071 0
outer loop
- vertex -8.30497 -35.8814 -0.1
+ vertex -8.30497 -35.8814 -0.2
vertex -7.97432 -36.0592 0
vertex -8.30497 -35.8814 0
endloop
@@ -16865,13 +16865,13 @@ solid OpenSCAD_Model
facet normal -0.473656 -0.88071 -0
outer loop
vertex -7.97432 -36.0592 0
- vertex -8.30497 -35.8814 -0.1
- vertex -7.97432 -36.0592 -0.1
+ vertex -8.30497 -35.8814 -0.2
+ vertex -7.97432 -36.0592 -0.2
endloop
endfacet
facet normal -0.487345 -0.873209 0
outer loop
- vertex -7.97432 -36.0592 -0.1
+ vertex -7.97432 -36.0592 -0.2
vertex -7.70312 -36.2106 0
vertex -7.97432 -36.0592 0
endloop
@@ -16879,13 +16879,13 @@ solid OpenSCAD_Model
facet normal -0.487345 -0.873209 -0
outer loop
vertex -7.70312 -36.2106 0
- vertex -7.97432 -36.0592 -0.1
- vertex -7.70312 -36.2106 -0.1
+ vertex -7.97432 -36.0592 -0.2
+ vertex -7.70312 -36.2106 -0.2
endloop
endfacet
facet normal -0.634834 -0.772648 0
outer loop
- vertex -7.70312 -36.2106 -0.1
+ vertex -7.70312 -36.2106 -0.2
vertex -7.50076 -36.3769 0
vertex -7.70312 -36.2106 0
endloop
@@ -16893,125 +16893,125 @@ solid OpenSCAD_Model
facet normal -0.634834 -0.772648 -0
outer loop
vertex -7.50076 -36.3769 0
- vertex -7.70312 -36.2106 -0.1
- vertex -7.50076 -36.3769 -0.1
+ vertex -7.70312 -36.2106 -0.2
+ vertex -7.50076 -36.3769 -0.2
endloop
endfacet
facet normal -0.80484 -0.593492 0
outer loop
- vertex -7.36727 -36.5579 -0.1
+ vertex -7.36727 -36.5579 -0.2
vertex -7.50076 -36.3769 0
- vertex -7.50076 -36.3769 -0.1
+ vertex -7.50076 -36.3769 -0.2
endloop
endfacet
facet normal -0.80484 -0.593492 0
outer loop
vertex -7.50076 -36.3769 0
- vertex -7.36727 -36.5579 -0.1
+ vertex -7.36727 -36.5579 -0.2
vertex -7.36727 -36.5579 0
endloop
endfacet
facet normal -0.919952 -0.39203 0
outer loop
- vertex -7.32635 -36.6539 -0.1
+ vertex -7.32635 -36.6539 -0.2
vertex -7.36727 -36.5579 0
- vertex -7.36727 -36.5579 -0.1
+ vertex -7.36727 -36.5579 -0.2
endloop
endfacet
facet normal -0.919952 -0.39203 0
outer loop
vertex -7.36727 -36.5579 0
- vertex -7.32635 -36.6539 -0.1
+ vertex -7.32635 -36.6539 -0.2
vertex -7.32635 -36.6539 0
endloop
endfacet
facet normal -0.972883 -0.231299 0
outer loop
- vertex -7.30266 -36.7536 -0.1
+ vertex -7.30266 -36.7536 -0.2
vertex -7.32635 -36.6539 0
- vertex -7.32635 -36.6539 -0.1
+ vertex -7.32635 -36.6539 -0.2
endloop
endfacet
facet normal -0.972883 -0.231299 0
outer loop
vertex -7.32635 -36.6539 0
- vertex -7.30266 -36.7536 -0.1
+ vertex -7.30266 -36.7536 -0.2
vertex -7.30266 -36.7536 0
endloop
endfacet
facet normal -0.998045 -0.0625022 0
outer loop
- vertex -7.29619 -36.8569 -0.1
+ vertex -7.29619 -36.8569 -0.2
vertex -7.30266 -36.7536 0
- vertex -7.30266 -36.7536 -0.1
+ vertex -7.30266 -36.7536 -0.2
endloop
endfacet
facet normal -0.998045 -0.0625022 0
outer loop
vertex -7.30266 -36.7536 0
- vertex -7.29619 -36.8569 -0.1
+ vertex -7.29619 -36.8569 -0.2
vertex -7.29619 -36.8569 0
endloop
endfacet
facet normal -0.994972 0.100157 0
outer loop
- vertex -7.30695 -36.9638 -0.1
+ vertex -7.30695 -36.9638 -0.2
vertex -7.29619 -36.8569 0
- vertex -7.29619 -36.8569 -0.1
+ vertex -7.29619 -36.8569 -0.2
endloop
endfacet
facet normal -0.994972 0.100157 0
outer loop
vertex -7.29619 -36.8569 0
- vertex -7.30695 -36.9638 -0.1
+ vertex -7.30695 -36.9638 -0.2
vertex -7.30695 -36.9638 0
endloop
endfacet
facet normal -0.950745 0.309974 0
outer loop
- vertex -7.38017 -37.1883 -0.1
+ vertex -7.38017 -37.1883 -0.2
vertex -7.30695 -36.9638 0
- vertex -7.30695 -36.9638 -0.1
+ vertex -7.30695 -36.9638 -0.2
endloop
endfacet
facet normal -0.950745 0.309974 0
outer loop
vertex -7.30695 -36.9638 0
- vertex -7.38017 -37.1883 -0.1
+ vertex -7.38017 -37.1883 -0.2
vertex -7.38017 -37.1883 0
endloop
endfacet
facet normal -0.859288 0.511491 0
outer loop
- vertex -7.52232 -37.4271 -0.1
+ vertex -7.52232 -37.4271 -0.2
vertex -7.38017 -37.1883 0
- vertex -7.38017 -37.1883 -0.1
+ vertex -7.38017 -37.1883 -0.2
endloop
endfacet
facet normal -0.859288 0.511491 0
outer loop
vertex -7.38017 -37.1883 0
- vertex -7.52232 -37.4271 -0.1
+ vertex -7.52232 -37.4271 -0.2
vertex -7.52232 -37.4271 0
endloop
endfacet
facet normal -0.767721 0.640785 0
outer loop
- vertex -7.73344 -37.6801 -0.1
+ vertex -7.73344 -37.6801 -0.2
vertex -7.52232 -37.4271 0
- vertex -7.52232 -37.4271 -0.1
+ vertex -7.52232 -37.4271 -0.2
endloop
endfacet
facet normal -0.767721 0.640785 0
outer loop
vertex -7.52232 -37.4271 0
- vertex -7.73344 -37.6801 -0.1
+ vertex -7.73344 -37.6801 -0.2
vertex -7.73344 -37.6801 0
endloop
endfacet
facet normal -0.693467 0.720489 0
outer loop
- vertex -7.73344 -37.6801 -0.1
+ vertex -7.73344 -37.6801 -0.2
vertex -7.8903 -37.8311 0
vertex -7.73344 -37.6801 0
endloop
@@ -17019,13 +17019,13 @@ solid OpenSCAD_Model
facet normal -0.693467 0.720489 0
outer loop
vertex -7.8903 -37.8311 0
- vertex -7.73344 -37.6801 -0.1
- vertex -7.8903 -37.8311 -0.1
+ vertex -7.73344 -37.6801 -0.2
+ vertex -7.8903 -37.8311 -0.2
endloop
endfacet
facet normal -0.544632 0.838675 0
outer loop
- vertex -7.8903 -37.8311 -0.1
+ vertex -7.8903 -37.8311 -0.2
vertex -8.0676 -37.9462 0
vertex -7.8903 -37.8311 0
endloop
@@ -17033,13 +17033,13 @@ solid OpenSCAD_Model
facet normal -0.544632 0.838675 0
outer loop
vertex -8.0676 -37.9462 0
- vertex -7.8903 -37.8311 -0.1
- vertex -8.0676 -37.9462 -0.1
+ vertex -7.8903 -37.8311 -0.2
+ vertex -8.0676 -37.9462 -0.2
endloop
endfacet
facet normal -0.329452 0.944172 0
outer loop
- vertex -8.0676 -37.9462 -0.1
+ vertex -8.0676 -37.9462 -0.2
vertex -8.30871 -38.0303 0
vertex -8.0676 -37.9462 0
endloop
@@ -17047,13 +17047,13 @@ solid OpenSCAD_Model
facet normal -0.329452 0.944172 0
outer loop
vertex -8.30871 -38.0303 0
- vertex -8.0676 -37.9462 -0.1
- vertex -8.30871 -38.0303 -0.1
+ vertex -8.0676 -37.9462 -0.2
+ vertex -8.30871 -38.0303 -0.2
endloop
endfacet
facet normal -0.164178 0.986431 0
outer loop
- vertex -8.30871 -38.0303 -0.1
+ vertex -8.30871 -38.0303 -0.2
vertex -8.657 -38.0883 0
vertex -8.30871 -38.0303 0
endloop
@@ -17061,13 +17061,13 @@ solid OpenSCAD_Model
facet normal -0.164178 0.986431 0
outer loop
vertex -8.657 -38.0883 0
- vertex -8.30871 -38.0303 -0.1
- vertex -8.657 -38.0883 -0.1
+ vertex -8.30871 -38.0303 -0.2
+ vertex -8.657 -38.0883 -0.2
endloop
endfacet
facet normal -0.0732736 0.997312 0
outer loop
- vertex -8.657 -38.0883 -0.1
+ vertex -8.657 -38.0883 -0.2
vertex -9.15585 -38.1249 0
vertex -8.657 -38.0883 0
endloop
@@ -17075,13 +17075,13 @@ solid OpenSCAD_Model
facet normal -0.0732736 0.997312 0
outer loop
vertex -9.15585 -38.1249 0
- vertex -8.657 -38.0883 -0.1
- vertex -9.15585 -38.1249 -0.1
+ vertex -8.657 -38.0883 -0.2
+ vertex -9.15585 -38.1249 -0.2
endloop
endfacet
facet normal -0.0291211 0.999576 0
outer loop
- vertex -9.15585 -38.1249 -0.1
+ vertex -9.15585 -38.1249 -0.2
vertex -9.84865 -38.1451 0
vertex -9.15585 -38.1249 0
endloop
@@ -17089,13 +17089,13 @@ solid OpenSCAD_Model
facet normal -0.0291211 0.999576 0
outer loop
vertex -9.84865 -38.1451 0
- vertex -9.15585 -38.1249 -0.1
- vertex -9.84865 -38.1451 -0.1
+ vertex -9.15585 -38.1249 -0.2
+ vertex -9.84865 -38.1451 -0.2
endloop
endfacet
facet normal -0.00482502 0.999988 0
outer loop
- vertex -9.84865 -38.1451 -0.1
+ vertex -9.84865 -38.1451 -0.2
vertex -11.9896 -38.1555 0
vertex -9.84865 -38.1451 0
endloop
@@ -17103,13 +17103,13 @@ solid OpenSCAD_Model
facet normal -0.00482502 0.999988 0
outer loop
vertex -11.9896 -38.1555 0
- vertex -9.84865 -38.1451 -0.1
- vertex -11.9896 -38.1555 -0.1
+ vertex -9.84865 -38.1451 -0.2
+ vertex -11.9896 -38.1555 -0.2
endloop
endfacet
facet normal 0.0039213 0.999992 -0
outer loop
- vertex -11.9896 -38.1555 -0.1
+ vertex -11.9896 -38.1555 -0.2
vertex -14.1677 -38.1469 0
vertex -11.9896 -38.1555 0
endloop
@@ -17117,13 +17117,13 @@ solid OpenSCAD_Model
facet normal 0.0039213 0.999992 0
outer loop
vertex -14.1677 -38.1469 0
- vertex -11.9896 -38.1555 -0.1
- vertex -14.1677 -38.1469 -0.1
+ vertex -11.9896 -38.1555 -0.2
+ vertex -14.1677 -38.1469 -0.2
endloop
endfacet
facet normal 0.0274602 0.999623 -0
outer loop
- vertex -14.1677 -38.1469 -0.1
+ vertex -14.1677 -38.1469 -0.2
vertex -14.8486 -38.1282 0
vertex -14.1677 -38.1469 0
endloop
@@ -17131,13 +17131,13 @@ solid OpenSCAD_Model
facet normal 0.0274602 0.999623 0
outer loop
vertex -14.8486 -38.1282 0
- vertex -14.1677 -38.1469 -0.1
- vertex -14.8486 -38.1282 -0.1
+ vertex -14.1677 -38.1469 -0.2
+ vertex -14.8486 -38.1282 -0.2
endloop
endfacet
facet normal 0.0756421 0.997135 -0
outer loop
- vertex -14.8486 -38.1282 -0.1
+ vertex -14.8486 -38.1282 -0.2
vertex -15.316 -38.0928 0
vertex -14.8486 -38.1282 0
endloop
@@ -17145,13 +17145,13 @@ solid OpenSCAD_Model
facet normal 0.0756421 0.997135 0
outer loop
vertex -15.316 -38.0928 0
- vertex -14.8486 -38.1282 -0.1
- vertex -15.316 -38.0928 -0.1
+ vertex -14.8486 -38.1282 -0.2
+ vertex -15.316 -38.0928 -0.2
endloop
endfacet
facet normal 0.189644 0.981853 -0
outer loop
- vertex -15.316 -38.0928 -0.1
+ vertex -15.316 -38.0928 -0.2
vertex -15.614 -38.0352 0
vertex -15.316 -38.0928 0
endloop
@@ -17159,13 +17159,13 @@ solid OpenSCAD_Model
facet normal 0.189644 0.981853 0
outer loop
vertex -15.614 -38.0352 0
- vertex -15.316 -38.0928 -0.1
- vertex -15.614 -38.0352 -0.1
+ vertex -15.316 -38.0928 -0.2
+ vertex -15.614 -38.0352 -0.2
endloop
endfacet
facet normal 0.363705 0.931514 -0
outer loop
- vertex -15.614 -38.0352 -0.1
+ vertex -15.614 -38.0352 -0.2
vertex -15.7132 -37.9965 0
vertex -15.614 -38.0352 0
endloop
@@ -17173,13 +17173,13 @@ solid OpenSCAD_Model
facet normal 0.363705 0.931514 0
outer loop
vertex -15.7132 -37.9965 0
- vertex -15.614 -38.0352 -0.1
- vertex -15.7132 -37.9965 -0.1
+ vertex -15.614 -38.0352 -0.2
+ vertex -15.7132 -37.9965 -0.2
endloop
endfacet
facet normal 0.533432 0.845843 -0
outer loop
- vertex -15.7132 -37.9965 -0.1
+ vertex -15.7132 -37.9965 -0.2
vertex -15.7865 -37.9502 0
vertex -15.7132 -37.9965 0
endloop
@@ -17187,153 +17187,153 @@ solid OpenSCAD_Model
facet normal 0.533432 0.845843 0
outer loop
vertex -15.7865 -37.9502 0
- vertex -15.7132 -37.9965 -0.1
- vertex -15.7865 -37.9502 -0.1
+ vertex -15.7132 -37.9965 -0.2
+ vertex -15.7865 -37.9502 -0.2
endloop
endfacet
facet normal 0.71659 0.697495 0
outer loop
vertex -15.7865 -37.9502 0
- vertex -15.8396 -37.8957 -0.1
+ vertex -15.8396 -37.8957 -0.2
vertex -15.8396 -37.8957 0
endloop
endfacet
facet normal 0.71659 0.697495 0
outer loop
- vertex -15.8396 -37.8957 -0.1
+ vertex -15.8396 -37.8957 -0.2
vertex -15.7865 -37.9502 0
- vertex -15.7865 -37.9502 -0.1
+ vertex -15.7865 -37.9502 -0.2
endloop
endfacet
facet normal 0.856476 0.516186 0
outer loop
vertex -15.8396 -37.8957 0
- vertex -15.8777 -37.8324 -0.1
+ vertex -15.8777 -37.8324 -0.2
vertex -15.8777 -37.8324 0
endloop
endfacet
facet normal 0.856476 0.516186 0
outer loop
- vertex -15.8777 -37.8324 -0.1
+ vertex -15.8777 -37.8324 -0.2
vertex -15.8396 -37.8957 0
- vertex -15.8396 -37.8957 -0.1
+ vertex -15.8396 -37.8957 -0.2
endloop
endfacet
facet normal 0.945292 0.326225 0
outer loop
vertex -15.8777 -37.8324 0
- vertex -15.9316 -37.6764 -0.1
+ vertex -15.9316 -37.6764 -0.2
vertex -15.9316 -37.6764 0
endloop
endfacet
facet normal 0.945292 0.326225 0
outer loop
- vertex -15.9316 -37.6764 -0.1
+ vertex -15.9316 -37.6764 -0.2
vertex -15.8777 -37.8324 0
- vertex -15.8777 -37.8324 -0.1
+ vertex -15.8777 -37.8324 -0.2
endloop
endfacet
facet normal 0.977576 0.210582 0
outer loop
vertex -15.9316 -37.6764 0
- vertex -15.9604 -37.5428 -0.1
+ vertex -15.9604 -37.5428 -0.2
vertex -15.9604 -37.5428 0
endloop
endfacet
facet normal 0.977576 0.210582 0
outer loop
- vertex -15.9604 -37.5428 -0.1
+ vertex -15.9604 -37.5428 -0.2
vertex -15.9316 -37.6764 0
- vertex -15.9316 -37.6764 -0.1
+ vertex -15.9316 -37.6764 -0.2
endloop
endfacet
facet normal 0.998424 0.0561231 0
outer loop
vertex -15.9604 -37.5428 0
- vertex -15.9675 -37.4163 -0.1
+ vertex -15.9675 -37.4163 -0.2
vertex -15.9675 -37.4163 0
endloop
endfacet
facet normal 0.998424 0.0561231 0
outer loop
- vertex -15.9675 -37.4163 -0.1
+ vertex -15.9675 -37.4163 -0.2
vertex -15.9604 -37.5428 0
- vertex -15.9604 -37.5428 -0.1
+ vertex -15.9604 -37.5428 -0.2
endloop
endfacet
facet normal 0.991334 -0.131364 0
outer loop
vertex -15.9675 -37.4163 0
- vertex -15.9511 -37.293 -0.1
+ vertex -15.9511 -37.293 -0.2
vertex -15.9511 -37.293 0
endloop
endfacet
facet normal 0.991334 -0.131364 0
outer loop
- vertex -15.9511 -37.293 -0.1
+ vertex -15.9511 -37.293 -0.2
vertex -15.9675 -37.4163 0
- vertex -15.9675 -37.4163 -0.1
+ vertex -15.9675 -37.4163 -0.2
endloop
endfacet
facet normal 0.94832 -0.317316 0
outer loop
vertex -15.9511 -37.293 0
- vertex -15.9096 -37.1689 -0.1
+ vertex -15.9096 -37.1689 -0.2
vertex -15.9096 -37.1689 0
endloop
endfacet
facet normal 0.94832 -0.317316 0
outer loop
- vertex -15.9096 -37.1689 -0.1
+ vertex -15.9096 -37.1689 -0.2
vertex -15.9511 -37.293 0
- vertex -15.9511 -37.293 -0.1
+ vertex -15.9511 -37.293 -0.2
endloop
endfacet
facet normal 0.883259 -0.468885 0
outer loop
vertex -15.9096 -37.1689 0
- vertex -15.8411 -37.0399 -0.1
+ vertex -15.8411 -37.0399 -0.2
vertex -15.8411 -37.0399 0
endloop
endfacet
facet normal 0.883259 -0.468885 0
outer loop
- vertex -15.8411 -37.0399 -0.1
+ vertex -15.8411 -37.0399 -0.2
vertex -15.9096 -37.1689 0
- vertex -15.9096 -37.1689 -0.1
+ vertex -15.9096 -37.1689 -0.2
endloop
endfacet
facet normal 0.817454 -0.575994 0
outer loop
vertex -15.8411 -37.0399 0
- vertex -15.7439 -36.902 -0.1
+ vertex -15.7439 -36.902 -0.2
vertex -15.7439 -36.902 0
endloop
endfacet
facet normal 0.817454 -0.575994 0
outer loop
- vertex -15.7439 -36.902 -0.1
+ vertex -15.7439 -36.902 -0.2
vertex -15.8411 -37.0399 0
- vertex -15.8411 -37.0399 -0.1
+ vertex -15.8411 -37.0399 -0.2
endloop
endfacet
facet normal 0.742584 -0.669753 0
outer loop
vertex -15.7439 -36.902 0
- vertex -15.4564 -36.5832 -0.1
+ vertex -15.4564 -36.5832 -0.2
vertex -15.4564 -36.5832 0
endloop
endfacet
facet normal 0.742584 -0.669753 0
outer loop
- vertex -15.4564 -36.5832 -0.1
+ vertex -15.4564 -36.5832 -0.2
vertex -15.7439 -36.902 0
- vertex -15.7439 -36.902 -0.1
+ vertex -15.7439 -36.902 -0.2
endloop
endfacet
facet normal 0.654929 -0.755691 0
outer loop
- vertex -15.4564 -36.5832 -0.1
+ vertex -15.4564 -36.5832 -0.2
vertex -15.1813 -36.3448 0
vertex -15.4564 -36.5832 0
endloop
@@ -17341,13 +17341,13 @@ solid OpenSCAD_Model
facet normal 0.654929 -0.755691 0
outer loop
vertex -15.1813 -36.3448 0
- vertex -15.4564 -36.5832 -0.1
- vertex -15.1813 -36.3448 -0.1
+ vertex -15.4564 -36.5832 -0.2
+ vertex -15.1813 -36.3448 -0.2
endloop
endfacet
facet normal 0.547883 -0.836555 0
outer loop
- vertex -15.1813 -36.3448 -0.1
+ vertex -15.1813 -36.3448 -0.2
vertex -14.8831 -36.1495 0
vertex -15.1813 -36.3448 0
endloop
@@ -17355,13 +17355,13 @@ solid OpenSCAD_Model
facet normal 0.547883 -0.836555 0
outer loop
vertex -14.8831 -36.1495 0
- vertex -15.1813 -36.3448 -0.1
- vertex -14.8831 -36.1495 -0.1
+ vertex -15.1813 -36.3448 -0.2
+ vertex -14.8831 -36.1495 -0.2
endloop
endfacet
facet normal 0.419801 -0.907616 0
outer loop
- vertex -14.8831 -36.1495 -0.1
+ vertex -14.8831 -36.1495 -0.2
vertex -14.5979 -36.0176 0
vertex -14.8831 -36.1495 0
endloop
@@ -17369,13 +17369,13 @@ solid OpenSCAD_Model
facet normal 0.419801 -0.907616 0
outer loop
vertex -14.5979 -36.0176 0
- vertex -14.8831 -36.1495 -0.1
- vertex -14.5979 -36.0176 -0.1
+ vertex -14.8831 -36.1495 -0.2
+ vertex -14.5979 -36.0176 -0.2
endloop
endfacet
facet normal 0.273076 -0.961992 0
outer loop
- vertex -14.5979 -36.0176 -0.1
+ vertex -14.5979 -36.0176 -0.2
vertex -14.4713 -35.9816 0
vertex -14.5979 -36.0176 0
endloop
@@ -17383,13 +17383,13 @@ solid OpenSCAD_Model
facet normal 0.273076 -0.961992 0
outer loop
vertex -14.4713 -35.9816 0
- vertex -14.5979 -36.0176 -0.1
- vertex -14.4713 -35.9816 -0.1
+ vertex -14.5979 -36.0176 -0.2
+ vertex -14.4713 -35.9816 -0.2
endloop
endfacet
facet normal 0.113362 -0.993554 0
outer loop
- vertex -14.4713 -35.9816 -0.1
+ vertex -14.4713 -35.9816 -0.2
vertex -14.3614 -35.9691 0
vertex -14.4713 -35.9816 0
endloop
@@ -17397,13 +17397,13 @@ solid OpenSCAD_Model
facet normal 0.113362 -0.993554 0
outer loop
vertex -14.3614 -35.9691 0
- vertex -14.4713 -35.9816 -0.1
- vertex -14.3614 -35.9691 -0.1
+ vertex -14.4713 -35.9816 -0.2
+ vertex -14.3614 -35.9691 -0.2
endloop
endfacet
facet normal 0.0894161 -0.995994 0
outer loop
- vertex -14.3614 -35.9691 -0.1
+ vertex -14.3614 -35.9691 -0.2
vertex -14.1999 -35.9546 0
vertex -14.3614 -35.9691 0
endloop
@@ -17411,13 +17411,13 @@ solid OpenSCAD_Model
facet normal 0.0894161 -0.995994 0
outer loop
vertex -14.1999 -35.9546 0
- vertex -14.3614 -35.9691 -0.1
- vertex -14.1999 -35.9546 -0.1
+ vertex -14.3614 -35.9691 -0.2
+ vertex -14.1999 -35.9546 -0.2
endloop
endfacet
facet normal 0.259204 -0.965823 0
outer loop
- vertex -14.1999 -35.9546 -0.1
+ vertex -14.1999 -35.9546 -0.2
vertex -14.0373 -35.911 0
vertex -14.1999 -35.9546 0
endloop
@@ -17425,13 +17425,13 @@ solid OpenSCAD_Model
facet normal 0.259204 -0.965823 0
outer loop
vertex -14.0373 -35.911 0
- vertex -14.1999 -35.9546 -0.1
- vertex -14.0373 -35.911 -0.1
+ vertex -14.1999 -35.9546 -0.2
+ vertex -14.0373 -35.911 -0.2
endloop
endfacet
facet normal 0.406893 -0.913476 0
outer loop
- vertex -14.0373 -35.911 -0.1
+ vertex -14.0373 -35.911 -0.2
vertex -13.8736 -35.838 0
vertex -14.0373 -35.911 0
endloop
@@ -17439,13 +17439,13 @@ solid OpenSCAD_Model
facet normal 0.406893 -0.913476 0
outer loop
vertex -13.8736 -35.838 0
- vertex -14.0373 -35.911 -0.1
- vertex -13.8736 -35.838 -0.1
+ vertex -14.0373 -35.911 -0.2
+ vertex -13.8736 -35.838 -0.2
endloop
endfacet
facet normal 0.527319 -0.849667 0
outer loop
- vertex -13.8736 -35.838 -0.1
+ vertex -13.8736 -35.838 -0.2
vertex -13.7085 -35.7356 0
vertex -13.8736 -35.838 0
endloop
@@ -17453,13 +17453,13 @@ solid OpenSCAD_Model
facet normal 0.527319 -0.849667 0
outer loop
vertex -13.7085 -35.7356 0
- vertex -13.8736 -35.838 -0.1
- vertex -13.7085 -35.7356 -0.1
+ vertex -13.8736 -35.838 -0.2
+ vertex -13.7085 -35.7356 -0.2
endloop
endfacet
facet normal 0.621601 -0.783334 0
outer loop
- vertex -13.7085 -35.7356 -0.1
+ vertex -13.7085 -35.7356 -0.2
vertex -13.5421 -35.6036 0
vertex -13.7085 -35.7356 0
endloop
@@ -17467,13 +17467,13 @@ solid OpenSCAD_Model
facet normal 0.621601 -0.783334 0
outer loop
vertex -13.5421 -35.6036 0
- vertex -13.7085 -35.7356 -0.1
- vertex -13.5421 -35.6036 -0.1
+ vertex -13.7085 -35.7356 -0.2
+ vertex -13.5421 -35.6036 -0.2
endloop
endfacet
facet normal 0.693973 -0.720001 0
outer loop
- vertex -13.5421 -35.6036 -0.1
+ vertex -13.5421 -35.6036 -0.2
vertex -13.3741 -35.4417 0
vertex -13.5421 -35.6036 0
endloop
@@ -17481,237 +17481,237 @@ solid OpenSCAD_Model
facet normal 0.693973 -0.720001 0
outer loop
vertex -13.3741 -35.4417 0
- vertex -13.5421 -35.6036 -0.1
- vertex -13.3741 -35.4417 -0.1
+ vertex -13.5421 -35.6036 -0.2
+ vertex -13.3741 -35.4417 -0.2
endloop
endfacet
facet normal 0.74925 -0.662287 0
outer loop
vertex -13.3741 -35.4417 0
- vertex -13.2045 -35.2497 -0.1
+ vertex -13.2045 -35.2497 -0.2
vertex -13.2045 -35.2497 0
endloop
endfacet
facet normal 0.74925 -0.662287 0
outer loop
- vertex -13.2045 -35.2497 -0.1
+ vertex -13.2045 -35.2497 -0.2
vertex -13.3741 -35.4417 0
- vertex -13.3741 -35.4417 -0.1
+ vertex -13.3741 -35.4417 -0.2
endloop
endfacet
facet normal 0.791599 -0.611041 0
outer loop
vertex -13.2045 -35.2497 0
- vertex -13.0331 -35.0276 -0.1
+ vertex -13.0331 -35.0276 -0.2
vertex -13.0331 -35.0276 0
endloop
endfacet
facet normal 0.791599 -0.611041 0
outer loop
- vertex -13.0331 -35.0276 -0.1
+ vertex -13.0331 -35.0276 -0.2
vertex -13.2045 -35.2497 0
- vertex -13.2045 -35.2497 -0.1
+ vertex -13.2045 -35.2497 -0.2
endloop
endfacet
facet normal 0.837921 -0.545792 0
outer loop
vertex -13.0331 -35.0276 0
- vertex -12.6843 -34.4922 -0.1
+ vertex -12.6843 -34.4922 -0.2
vertex -12.6843 -34.4922 0
endloop
endfacet
facet normal 0.837921 -0.545792 0
outer loop
- vertex -12.6843 -34.4922 -0.1
+ vertex -12.6843 -34.4922 -0.2
vertex -13.0331 -35.0276 0
- vertex -13.0331 -35.0276 -0.1
+ vertex -13.0331 -35.0276 -0.2
endloop
endfacet
facet normal 0.878782 -0.477224 0
outer loop
vertex -12.6843 -34.4922 0
- vertex -12.3268 -33.8339 -0.1
+ vertex -12.3268 -33.8339 -0.2
vertex -12.3268 -33.8339 0
endloop
endfacet
facet normal 0.878782 -0.477224 0
outer loop
- vertex -12.3268 -33.8339 -0.1
+ vertex -12.3268 -33.8339 -0.2
vertex -12.6843 -34.4922 0
- vertex -12.6843 -34.4922 -0.1
+ vertex -12.6843 -34.4922 -0.2
endloop
endfacet
facet normal 0.905274 -0.424829 0
outer loop
vertex -12.3268 -33.8339 0
- vertex -11.9595 -33.0513 -0.1
+ vertex -11.9595 -33.0513 -0.2
vertex -11.9595 -33.0513 0
endloop
endfacet
facet normal 0.905274 -0.424829 0
outer loop
- vertex -11.9595 -33.0513 -0.1
+ vertex -11.9595 -33.0513 -0.2
vertex -12.3268 -33.8339 0
- vertex -12.3268 -33.8339 -0.1
+ vertex -12.3268 -33.8339 -0.2
endloop
endfacet
facet normal 0.923227 -0.384256 0
outer loop
vertex -11.9595 -33.0513 0
- vertex -11.5815 -32.143 -0.1
+ vertex -11.5815 -32.143 -0.2
vertex -11.5815 -32.143 0
endloop
endfacet
facet normal 0.923227 -0.384256 0
outer loop
- vertex -11.5815 -32.143 -0.1
+ vertex -11.5815 -32.143 -0.2
vertex -11.9595 -33.0513 0
- vertex -11.9595 -33.0513 -0.1
+ vertex -11.9595 -33.0513 -0.2
endloop
endfacet
facet normal 0.927789 -0.373105 0
outer loop
vertex -11.5815 -32.143 0
- vertex -9.5401 -27.0667 -0.1
+ vertex -9.5401 -27.0667 -0.2
vertex -9.5401 -27.0667 0
endloop
endfacet
facet normal 0.927789 -0.373105 0
outer loop
- vertex -9.5401 -27.0667 -0.1
+ vertex -9.5401 -27.0667 -0.2
vertex -11.5815 -32.143 0
- vertex -11.5815 -32.143 -0.1
+ vertex -11.5815 -32.143 -0.2
endloop
endfacet
facet normal 0.931122 -0.364709 0
outer loop
vertex -9.5401 -27.0667 0
- vertex -9.05502 -25.8283 -0.1
+ vertex -9.05502 -25.8283 -0.2
vertex -9.05502 -25.8283 0
endloop
endfacet
facet normal 0.931122 -0.364709 0
outer loop
- vertex -9.05502 -25.8283 -0.1
+ vertex -9.05502 -25.8283 -0.2
vertex -9.5401 -27.0667 0
- vertex -9.5401 -27.0667 -0.1
+ vertex -9.5401 -27.0667 -0.2
endloop
endfacet
facet normal 0.946626 -0.322334 0
outer loop
vertex -9.05502 -25.8283 0
- vertex -8.71232 -24.8218 -0.1
+ vertex -8.71232 -24.8218 -0.2
vertex -8.71232 -24.8218 0
endloop
endfacet
facet normal 0.946626 -0.322334 0
outer loop
- vertex -8.71232 -24.8218 -0.1
+ vertex -8.71232 -24.8218 -0.2
vertex -9.05502 -25.8283 0
- vertex -9.05502 -25.8283 -0.1
+ vertex -9.05502 -25.8283 -0.2
endloop
endfacet
facet normal 0.963249 -0.26861 0
outer loop
vertex -8.71232 -24.8218 0
- vertex -8.59455 -24.3995 -0.1
+ vertex -8.59455 -24.3995 -0.2
vertex -8.59455 -24.3995 0
endloop
endfacet
facet normal 0.963249 -0.26861 0
outer loop
- vertex -8.59455 -24.3995 -0.1
+ vertex -8.59455 -24.3995 -0.2
vertex -8.71232 -24.8218 0
- vertex -8.71232 -24.8218 -0.1
+ vertex -8.71232 -24.8218 -0.2
endloop
endfacet
facet normal 0.976543 -0.215323 0
outer loop
vertex -8.59455 -24.3995 0
- vertex -8.51259 -24.0278 -0.1
+ vertex -8.51259 -24.0278 -0.2
vertex -8.51259 -24.0278 0
endloop
endfacet
facet normal 0.976543 -0.215323 0
outer loop
- vertex -8.51259 -24.0278 -0.1
+ vertex -8.51259 -24.0278 -0.2
vertex -8.59455 -24.3995 0
- vertex -8.59455 -24.3995 -0.1
+ vertex -8.59455 -24.3995 -0.2
endloop
endfacet
facet normal 0.990015 -0.140965 0
outer loop
vertex -8.51259 -24.0278 0
- vertex -8.46654 -23.7044 -0.1
+ vertex -8.46654 -23.7044 -0.2
vertex -8.46654 -23.7044 0
endloop
endfacet
facet normal 0.990015 -0.140965 0
outer loop
- vertex -8.46654 -23.7044 -0.1
+ vertex -8.46654 -23.7044 -0.2
vertex -8.51259 -24.0278 0
- vertex -8.51259 -24.0278 -0.1
+ vertex -8.51259 -24.0278 -0.2
endloop
endfacet
facet normal 0.999341 -0.0362924 0
outer loop
vertex -8.46654 -23.7044 0
- vertex -8.45645 -23.4267 -0.1
+ vertex -8.45645 -23.4267 -0.2
vertex -8.45645 -23.4267 0
endloop
endfacet
facet normal 0.999341 -0.0362924 0
outer loop
- vertex -8.45645 -23.4267 -0.1
+ vertex -8.45645 -23.4267 -0.2
vertex -8.46654 -23.7044 0
- vertex -8.46654 -23.7044 -0.1
+ vertex -8.46654 -23.7044 -0.2
endloop
endfacet
facet normal 0.993917 0.110127 0
outer loop
vertex -8.45645 -23.4267 0
- vertex -8.48242 -23.1923 -0.1
+ vertex -8.48242 -23.1923 -0.2
vertex -8.48242 -23.1923 0
endloop
endfacet
facet normal 0.993917 0.110127 0
outer loop
- vertex -8.48242 -23.1923 -0.1
+ vertex -8.48242 -23.1923 -0.2
vertex -8.45645 -23.4267 0
- vertex -8.45645 -23.4267 -0.1
+ vertex -8.45645 -23.4267 -0.2
endloop
endfacet
facet normal 0.952162 0.305593 0
outer loop
vertex -8.48242 -23.1923 0
- vertex -8.54451 -22.9989 -0.1
+ vertex -8.54451 -22.9989 -0.2
vertex -8.54451 -22.9989 0
endloop
endfacet
facet normal 0.952162 0.305593 0
outer loop
- vertex -8.54451 -22.9989 -0.1
+ vertex -8.54451 -22.9989 -0.2
vertex -8.48242 -23.1923 0
- vertex -8.48242 -23.1923 -0.1
+ vertex -8.48242 -23.1923 -0.2
endloop
endfacet
facet normal 0.844525 0.535516 0
outer loop
vertex -8.54451 -22.9989 0
- vertex -8.64279 -22.8439 -0.1
+ vertex -8.64279 -22.8439 -0.2
vertex -8.64279 -22.8439 0
endloop
endfacet
facet normal 0.844525 0.535516 0
outer loop
- vertex -8.64279 -22.8439 -0.1
+ vertex -8.64279 -22.8439 -0.2
vertex -8.54451 -22.9989 0
- vertex -8.54451 -22.9989 -0.1
+ vertex -8.54451 -22.9989 -0.2
endloop
endfacet
facet normal 0.662463 0.749095 -0
outer loop
- vertex -8.64279 -22.8439 -0.1
+ vertex -8.64279 -22.8439 -0.2
vertex -8.77736 -22.7249 0
vertex -8.64279 -22.8439 0
endloop
@@ -17719,13 +17719,13 @@ solid OpenSCAD_Model
facet normal 0.662463 0.749095 0
outer loop
vertex -8.77736 -22.7249 0
- vertex -8.64279 -22.8439 -0.1
- vertex -8.77736 -22.7249 -0.1
+ vertex -8.64279 -22.8439 -0.2
+ vertex -8.77736 -22.7249 -0.2
endloop
endfacet
facet normal 0.447148 0.89446 -0
outer loop
- vertex -8.77736 -22.7249 -0.1
+ vertex -8.77736 -22.7249 -0.2
vertex -8.94827 -22.6394 0
vertex -8.77736 -22.7249 0
endloop
@@ -17733,13 +17733,13 @@ solid OpenSCAD_Model
facet normal 0.447148 0.89446 0
outer loop
vertex -8.94827 -22.6394 0
- vertex -8.77736 -22.7249 -0.1
- vertex -8.94827 -22.6394 -0.1
+ vertex -8.77736 -22.7249 -0.2
+ vertex -8.94827 -22.6394 -0.2
endloop
endfacet
facet normal 0.253452 0.967348 -0
outer loop
- vertex -8.94827 -22.6394 -0.1
+ vertex -8.94827 -22.6394 -0.2
vertex -9.15561 -22.5851 0
vertex -8.94827 -22.6394 0
endloop
@@ -17747,13 +17747,13 @@ solid OpenSCAD_Model
facet normal 0.253452 0.967348 0
outer loop
vertex -9.15561 -22.5851 0
- vertex -8.94827 -22.6394 -0.1
- vertex -9.15561 -22.5851 -0.1
+ vertex -8.94827 -22.6394 -0.2
+ vertex -9.15561 -22.5851 -0.2
endloop
endfacet
facet normal 0.104613 0.994513 -0
outer loop
- vertex -9.15561 -22.5851 -0.1
+ vertex -9.15561 -22.5851 -0.2
vertex -9.39946 -22.5595 0
vertex -9.15561 -22.5851 0
endloop
@@ -17761,13 +17761,13 @@ solid OpenSCAD_Model
facet normal 0.104613 0.994513 0
outer loop
vertex -9.39946 -22.5595 0
- vertex -9.15561 -22.5851 -0.1
- vertex -9.39946 -22.5595 -0.1
+ vertex -9.15561 -22.5851 -0.2
+ vertex -9.39946 -22.5595 -0.2
endloop
endfacet
facet normal -0.0020677 0.999998 0
outer loop
- vertex -9.39946 -22.5595 -0.1
+ vertex -9.39946 -22.5595 -0.2
vertex -9.67988 -22.56 0
vertex -9.39946 -22.5595 0
endloop
@@ -17775,13 +17775,13 @@ solid OpenSCAD_Model
facet normal -0.0020677 0.999998 0
outer loop
vertex -9.67988 -22.56 0
- vertex -9.39946 -22.5595 -0.1
- vertex -9.67988 -22.56 -0.1
+ vertex -9.39946 -22.5595 -0.2
+ vertex -9.67988 -22.56 -0.2
endloop
endfacet
facet normal -0.129535 0.991575 0
outer loop
- vertex -9.67988 -22.56 -0.1
+ vertex -9.67988 -22.56 -0.2
vertex -10.0796 -22.6123 0
vertex -9.67988 -22.56 0
endloop
@@ -17789,13 +17789,13 @@ solid OpenSCAD_Model
facet normal -0.129535 0.991575 0
outer loop
vertex -10.0796 -22.6123 0
- vertex -9.67988 -22.56 -0.1
- vertex -10.0796 -22.6123 -0.1
+ vertex -9.67988 -22.56 -0.2
+ vertex -10.0796 -22.6123 -0.2
endloop
endfacet
facet normal -0.24491 0.969546 0
outer loop
- vertex -10.0796 -22.6123 -0.1
+ vertex -10.0796 -22.6123 -0.2
vertex -10.5344 -22.7271 0
vertex -10.0796 -22.6123 0
endloop
@@ -17803,13 +17803,13 @@ solid OpenSCAD_Model
facet normal -0.24491 0.969546 0
outer loop
vertex -10.5344 -22.7271 0
- vertex -10.0796 -22.6123 -0.1
- vertex -10.5344 -22.7271 -0.1
+ vertex -10.0796 -22.6123 -0.2
+ vertex -10.5344 -22.7271 -0.2
endloop
endfacet
facet normal -0.333557 0.94273 0
outer loop
- vertex -10.5344 -22.7271 -0.1
+ vertex -10.5344 -22.7271 -0.2
vertex -10.9881 -22.8877 0
vertex -10.5344 -22.7271 0
endloop
@@ -17817,13 +17817,13 @@ solid OpenSCAD_Model
facet normal -0.333557 0.94273 0
outer loop
vertex -10.9881 -22.8877 0
- vertex -10.5344 -22.7271 -0.1
- vertex -10.9881 -22.8877 -0.1
+ vertex -10.5344 -22.7271 -0.2
+ vertex -10.9881 -22.8877 -0.2
endloop
endfacet
facet normal -0.430494 0.902594 0
outer loop
- vertex -10.9881 -22.8877 -0.1
+ vertex -10.9881 -22.8877 -0.2
vertex -11.3849 -23.0769 0
vertex -10.9881 -22.8877 0
endloop
@@ -17831,13 +17831,13 @@ solid OpenSCAD_Model
facet normal -0.430494 0.902594 0
outer loop
vertex -11.3849 -23.0769 0
- vertex -10.9881 -22.8877 -0.1
- vertex -11.3849 -23.0769 -0.1
+ vertex -10.9881 -22.8877 -0.2
+ vertex -11.3849 -23.0769 -0.2
endloop
endfacet
facet normal -0.511004 0.859578 0
outer loop
- vertex -11.3849 -23.0769 -0.1
+ vertex -11.3849 -23.0769 -0.2
vertex -11.9359 -23.4045 0
vertex -11.3849 -23.0769 0
endloop
@@ -17845,13 +17845,13 @@ solid OpenSCAD_Model
facet normal -0.511004 0.859578 0
outer loop
vertex -11.9359 -23.4045 0
- vertex -11.3849 -23.0769 -0.1
- vertex -11.9359 -23.4045 -0.1
+ vertex -11.3849 -23.0769 -0.2
+ vertex -11.9359 -23.4045 -0.2
endloop
endfacet
facet normal -0.561997 0.827139 0
outer loop
- vertex -11.9359 -23.4045 -0.1
+ vertex -11.9359 -23.4045 -0.2
vertex -12.4007 -23.7203 0
vertex -11.9359 -23.4045 0
endloop
@@ -17859,13 +17859,13 @@ solid OpenSCAD_Model
facet normal -0.561997 0.827139 0
outer loop
vertex -12.4007 -23.7203 0
- vertex -11.9359 -23.4045 -0.1
- vertex -12.4007 -23.7203 -0.1
+ vertex -11.9359 -23.4045 -0.2
+ vertex -12.4007 -23.7203 -0.2
endloop
endfacet
facet normal -0.632295 0.774728 0
outer loop
- vertex -12.4007 -23.7203 -0.1
+ vertex -12.4007 -23.7203 -0.2
vertex -12.7941 -24.0414 0
vertex -12.4007 -23.7203 0
endloop
@@ -17873,237 +17873,237 @@ solid OpenSCAD_Model
facet normal -0.632295 0.774728 0
outer loop
vertex -12.7941 -24.0414 0
- vertex -12.4007 -23.7203 -0.1
- vertex -12.7941 -24.0414 -0.1
+ vertex -12.4007 -23.7203 -0.2
+ vertex -12.7941 -24.0414 -0.2
endloop
endfacet
facet normal -0.713871 0.700277 0
outer loop
- vertex -13.131 -24.3848 -0.1
+ vertex -13.131 -24.3848 -0.2
vertex -12.7941 -24.0414 0
- vertex -12.7941 -24.0414 -0.1
+ vertex -12.7941 -24.0414 -0.2
endloop
endfacet
facet normal -0.713871 0.700277 0
outer loop
vertex -12.7941 -24.0414 0
- vertex -13.131 -24.3848 -0.1
+ vertex -13.131 -24.3848 -0.2
vertex -13.131 -24.3848 0
endloop
endfacet
facet normal -0.791901 0.61065 0
outer loop
- vertex -13.4262 -24.7676 -0.1
+ vertex -13.4262 -24.7676 -0.2
vertex -13.131 -24.3848 0
- vertex -13.131 -24.3848 -0.1
+ vertex -13.131 -24.3848 -0.2
endloop
endfacet
facet normal -0.791901 0.61065 0
outer loop
vertex -13.131 -24.3848 0
- vertex -13.4262 -24.7676 -0.1
+ vertex -13.4262 -24.7676 -0.2
vertex -13.4262 -24.7676 0
endloop
endfacet
facet normal -0.853364 0.521315 0
outer loop
- vertex -13.6945 -25.2068 -0.1
+ vertex -13.6945 -25.2068 -0.2
vertex -13.4262 -24.7676 0
- vertex -13.4262 -24.7676 -0.1
+ vertex -13.4262 -24.7676 -0.2
endloop
endfacet
facet normal -0.853364 0.521315 0
outer loop
vertex -13.4262 -24.7676 0
- vertex -13.6945 -25.2068 -0.1
+ vertex -13.6945 -25.2068 -0.2
vertex -13.6945 -25.2068 0
endloop
endfacet
facet normal -0.894467 0.447134 0
outer loop
- vertex -13.9508 -25.7195 -0.1
+ vertex -13.9508 -25.7195 -0.2
vertex -13.6945 -25.2068 0
- vertex -13.6945 -25.2068 -0.1
+ vertex -13.6945 -25.2068 -0.2
endloop
endfacet
facet normal -0.894467 0.447134 0
outer loop
vertex -13.6945 -25.2068 0
- vertex -13.9508 -25.7195 -0.1
+ vertex -13.9508 -25.7195 -0.2
vertex -13.9508 -25.7195 0
endloop
endfacet
facet normal -0.918824 0.394667 0
outer loop
- vertex -14.2098 -26.3227 -0.1
+ vertex -14.2098 -26.3227 -0.2
vertex -13.9508 -25.7195 0
- vertex -13.9508 -25.7195 -0.1
+ vertex -13.9508 -25.7195 -0.2
endloop
endfacet
facet normal -0.918824 0.394667 0
outer loop
vertex -13.9508 -25.7195 0
- vertex -14.2098 -26.3227 -0.1
+ vertex -14.2098 -26.3227 -0.2
vertex -14.2098 -26.3227 0
endloop
endfacet
facet normal -0.926196 0.377042 0
outer loop
- vertex -15.3777 -29.1914 -0.1
+ vertex -15.3777 -29.1914 -0.2
vertex -14.2098 -26.3227 0
- vertex -14.2098 -26.3227 -0.1
+ vertex -14.2098 -26.3227 -0.2
endloop
endfacet
facet normal -0.926196 0.377042 0
outer loop
vertex -14.2098 -26.3227 0
- vertex -15.3777 -29.1914 -0.1
+ vertex -15.3777 -29.1914 -0.2
vertex -15.3777 -29.1914 0
endloop
endfacet
facet normal -0.925675 0.37832 0
outer loop
- vertex -16.8163 -32.7116 -0.1
+ vertex -16.8163 -32.7116 -0.2
vertex -15.3777 -29.1914 0
- vertex -15.3777 -29.1914 -0.1
+ vertex -15.3777 -29.1914 -0.2
endloop
endfacet
facet normal -0.925675 0.37832 0
outer loop
vertex -15.3777 -29.1914 0
- vertex -16.8163 -32.7116 -0.1
+ vertex -16.8163 -32.7116 -0.2
vertex -16.8163 -32.7116 0
endloop
endfacet
facet normal -0.928735 0.370745 0
outer loop
- vertex -17.1674 -33.591 -0.1
+ vertex -17.1674 -33.591 -0.2
vertex -16.8163 -32.7116 0
- vertex -16.8163 -32.7116 -0.1
+ vertex -16.8163 -32.7116 -0.2
endloop
endfacet
facet normal -0.928735 0.370745 0
outer loop
vertex -16.8163 -32.7116 0
- vertex -17.1674 -33.591 -0.1
+ vertex -17.1674 -33.591 -0.2
vertex -17.1674 -33.591 0
endloop
endfacet
facet normal -0.937631 0.347632 0
outer loop
- vertex -17.4329 -34.3072 -0.1
+ vertex -17.4329 -34.3072 -0.2
vertex -17.1674 -33.591 0
- vertex -17.1674 -33.591 -0.1
+ vertex -17.1674 -33.591 -0.2
endloop
endfacet
facet normal -0.937631 0.347632 0
outer loop
vertex -17.1674 -33.591 0
- vertex -17.4329 -34.3072 -0.1
+ vertex -17.4329 -34.3072 -0.2
vertex -17.4329 -34.3072 0
endloop
endfacet
facet normal -0.951989 0.306132 0
outer loop
- vertex -17.6153 -34.8741 -0.1
+ vertex -17.6153 -34.8741 -0.2
vertex -17.4329 -34.3072 0
- vertex -17.4329 -34.3072 -0.1
+ vertex -17.4329 -34.3072 -0.2
endloop
endfacet
facet normal -0.951989 0.306132 0
outer loop
vertex -17.4329 -34.3072 0
- vertex -17.6153 -34.8741 -0.1
+ vertex -17.6153 -34.8741 -0.2
vertex -17.6153 -34.8741 0
endloop
endfacet
facet normal -0.973485 0.228749 0
outer loop
- vertex -17.7168 -35.3062 -0.1
+ vertex -17.7168 -35.3062 -0.2
vertex -17.6153 -34.8741 0
- vertex -17.6153 -34.8741 -0.1
+ vertex -17.6153 -34.8741 -0.2
endloop
endfacet
facet normal -0.973485 0.228749 0
outer loop
vertex -17.6153 -34.8741 0
- vertex -17.7168 -35.3062 -0.1
+ vertex -17.7168 -35.3062 -0.2
vertex -17.7168 -35.3062 0
endloop
endfacet
facet normal -0.992299 0.123865 0
outer loop
- vertex -17.738 -35.4761 -0.1
+ vertex -17.738 -35.4761 -0.2
vertex -17.7168 -35.3062 0
- vertex -17.7168 -35.3062 -0.1
+ vertex -17.7168 -35.3062 -0.2
endloop
endfacet
facet normal -0.992299 0.123865 0
outer loop
vertex -17.7168 -35.3062 0
- vertex -17.738 -35.4761 -0.1
+ vertex -17.738 -35.4761 -0.2
vertex -17.738 -35.4761 0
endloop
endfacet
facet normal -0.99991 0.0134015 0
outer loop
- vertex -17.7399 -35.6175 -0.1
+ vertex -17.7399 -35.6175 -0.2
vertex -17.738 -35.4761 0
- vertex -17.738 -35.4761 -0.1
+ vertex -17.738 -35.4761 -0.2
endloop
endfacet
facet normal -0.99991 0.0134015 0
outer loop
vertex -17.738 -35.4761 0
- vertex -17.7399 -35.6175 -0.1
+ vertex -17.7399 -35.6175 -0.2
vertex -17.7399 -35.6175 0
endloop
endfacet
facet normal -0.989073 -0.147424 0
outer loop
- vertex -17.7228 -35.7323 -0.1
+ vertex -17.7228 -35.7323 -0.2
vertex -17.7399 -35.6175 0
- vertex -17.7399 -35.6175 -0.1
+ vertex -17.7399 -35.6175 -0.2
endloop
endfacet
facet normal -0.989073 -0.147424 0
outer loop
vertex -17.7399 -35.6175 0
- vertex -17.7228 -35.7323 -0.1
+ vertex -17.7228 -35.7323 -0.2
vertex -17.7228 -35.7323 0
endloop
endfacet
facet normal -0.929053 -0.369947 0
outer loop
- vertex -17.6869 -35.8223 -0.1
+ vertex -17.6869 -35.8223 -0.2
vertex -17.7228 -35.7323 0
- vertex -17.7228 -35.7323 -0.1
+ vertex -17.7228 -35.7323 -0.2
endloop
endfacet
facet normal -0.929053 -0.369947 0
outer loop
vertex -17.7228 -35.7323 0
- vertex -17.6869 -35.8223 -0.1
+ vertex -17.6869 -35.8223 -0.2
vertex -17.6869 -35.8223 0
endloop
endfacet
facet normal -0.776679 -0.629897 0
outer loop
- vertex -17.6327 -35.8892 -0.1
+ vertex -17.6327 -35.8892 -0.2
vertex -17.6869 -35.8223 0
- vertex -17.6869 -35.8223 -0.1
+ vertex -17.6869 -35.8223 -0.2
endloop
endfacet
facet normal -0.776679 -0.629897 0
outer loop
vertex -17.6869 -35.8223 0
- vertex -17.6327 -35.8892 -0.1
+ vertex -17.6327 -35.8892 -0.2
vertex -17.6327 -35.8892 0
endloop
endfacet
facet normal -0.532937 -0.846155 0
outer loop
- vertex -17.6327 -35.8892 -0.1
+ vertex -17.6327 -35.8892 -0.2
vertex -17.5603 -35.9348 0
vertex -17.6327 -35.8892 0
endloop
@@ -18111,13 +18111,13 @@ solid OpenSCAD_Model
facet normal -0.532937 -0.846155 -0
outer loop
vertex -17.5603 -35.9348 0
- vertex -17.6327 -35.8892 -0.1
- vertex -17.5603 -35.9348 -0.1
+ vertex -17.6327 -35.8892 -0.2
+ vertex -17.5603 -35.9348 -0.2
endloop
endfacet
facet normal -0.277484 -0.96073 0
outer loop
- vertex -17.5603 -35.9348 -0.1
+ vertex -17.5603 -35.9348 -0.2
vertex -17.4702 -35.9608 0
vertex -17.5603 -35.9348 0
endloop
@@ -18125,13 +18125,13 @@ solid OpenSCAD_Model
facet normal -0.277484 -0.96073 -0
outer loop
vertex -17.4702 -35.9608 0
- vertex -17.5603 -35.9348 -0.1
- vertex -17.4702 -35.9608 -0.1
+ vertex -17.5603 -35.9348 -0.2
+ vertex -17.4702 -35.9608 -0.2
endloop
endfacet
facet normal -0.0767033 -0.997054 0
outer loop
- vertex -17.4702 -35.9608 -0.1
+ vertex -17.4702 -35.9608 -0.2
vertex -17.3625 -35.9691 0
vertex -17.4702 -35.9608 0
endloop
@@ -18139,13 +18139,13 @@ solid OpenSCAD_Model
facet normal -0.0767033 -0.997054 -0
outer loop
vertex -17.3625 -35.9691 0
- vertex -17.4702 -35.9608 -0.1
- vertex -17.3625 -35.9691 -0.1
+ vertex -17.4702 -35.9608 -0.2
+ vertex -17.3625 -35.9691 -0.2
endloop
endfacet
facet normal -0.0829709 -0.996552 0
outer loop
- vertex -17.3625 -35.9691 -0.1
+ vertex -17.3625 -35.9691 -0.2
vertex -17.1493 -35.9869 0
vertex -17.3625 -35.9691 0
endloop
@@ -18153,13 +18153,13 @@ solid OpenSCAD_Model
facet normal -0.0829709 -0.996552 -0
outer loop
vertex -17.1493 -35.9869 0
- vertex -17.3625 -35.9691 -0.1
- vertex -17.1493 -35.9869 -0.1
+ vertex -17.3625 -35.9691 -0.2
+ vertex -17.1493 -35.9869 -0.2
endloop
endfacet
facet normal -0.234852 -0.972031 0
outer loop
- vertex -17.1493 -35.9869 -0.1
+ vertex -17.1493 -35.9869 -0.2
vertex -16.942 -36.0369 0
vertex -17.1493 -35.9869 0
endloop
@@ -18167,13 +18167,13 @@ solid OpenSCAD_Model
facet normal -0.234852 -0.972031 -0
outer loop
vertex -16.942 -36.0369 0
- vertex -17.1493 -35.9869 -0.1
- vertex -16.942 -36.0369 -0.1
+ vertex -17.1493 -35.9869 -0.2
+ vertex -16.942 -36.0369 -0.2
endloop
endfacet
facet normal -0.371048 -0.928614 0
outer loop
- vertex -16.942 -36.0369 -0.1
+ vertex -16.942 -36.0369 -0.2
vertex -16.7476 -36.1146 0
vertex -16.942 -36.0369 0
endloop
@@ -18181,13 +18181,13 @@ solid OpenSCAD_Model
facet normal -0.371048 -0.928614 -0
outer loop
vertex -16.7476 -36.1146 0
- vertex -16.942 -36.0369 -0.1
- vertex -16.7476 -36.1146 -0.1
+ vertex -16.942 -36.0369 -0.2
+ vertex -16.7476 -36.1146 -0.2
endloop
endfacet
facet normal -0.499006 -0.866599 0
outer loop
- vertex -16.7476 -36.1146 -0.1
+ vertex -16.7476 -36.1146 -0.2
vertex -16.5729 -36.2152 0
vertex -16.7476 -36.1146 0
endloop
@@ -18195,13 +18195,13 @@ solid OpenSCAD_Model
facet normal -0.499006 -0.866599 -0
outer loop
vertex -16.5729 -36.2152 0
- vertex -16.7476 -36.1146 -0.1
- vertex -16.5729 -36.2152 -0.1
+ vertex -16.7476 -36.1146 -0.2
+ vertex -16.5729 -36.2152 -0.2
endloop
endfacet
facet normal -0.625925 -0.779883 0
outer loop
- vertex -16.5729 -36.2152 -0.1
+ vertex -16.5729 -36.2152 -0.2
vertex -16.4249 -36.334 0
vertex -16.5729 -36.2152 0
endloop
@@ -18209,125 +18209,125 @@ solid OpenSCAD_Model
facet normal -0.625925 -0.779883 -0
outer loop
vertex -16.4249 -36.334 0
- vertex -16.5729 -36.2152 -0.1
- vertex -16.4249 -36.334 -0.1
+ vertex -16.5729 -36.2152 -0.2
+ vertex -16.4249 -36.334 -0.2
endloop
endfacet
facet normal -0.756453 -0.654048 0
outer loop
- vertex -16.3106 -36.4662 -0.1
+ vertex -16.3106 -36.4662 -0.2
vertex -16.4249 -36.334 0
- vertex -16.4249 -36.334 -0.1
+ vertex -16.4249 -36.334 -0.2
endloop
endfacet
facet normal -0.756453 -0.654048 0
outer loop
vertex -16.4249 -36.334 0
- vertex -16.3106 -36.4662 -0.1
+ vertex -16.3106 -36.4662 -0.2
vertex -16.3106 -36.4662 0
endloop
endfacet
facet normal -0.886186 -0.46333 0
outer loop
- vertex -16.237 -36.6071 -0.1
+ vertex -16.237 -36.6071 -0.2
vertex -16.3106 -36.4662 0
- vertex -16.3106 -36.4662 -0.1
+ vertex -16.3106 -36.4662 -0.2
endloop
endfacet
facet normal -0.886186 -0.46333 0
outer loop
vertex -16.3106 -36.4662 0
- vertex -16.237 -36.6071 -0.1
+ vertex -16.237 -36.6071 -0.2
vertex -16.237 -36.6071 0
endloop
endfacet
facet normal -0.984159 -0.177288 0
outer loop
- vertex -16.2109 -36.752 -0.1
+ vertex -16.2109 -36.752 -0.2
vertex -16.237 -36.6071 0
- vertex -16.237 -36.6071 -0.1
+ vertex -16.237 -36.6071 -0.2
endloop
endfacet
facet normal -0.984159 -0.177288 0
outer loop
vertex -16.237 -36.6071 0
- vertex -16.2109 -36.752 -0.1
+ vertex -16.2109 -36.752 -0.2
vertex -16.2109 -36.752 0
endloop
endfacet
facet normal -0.97657 0.215201 0
outer loop
- vertex -16.2485 -36.9225 -0.1
+ vertex -16.2485 -36.9225 -0.2
vertex -16.2109 -36.752 0
- vertex -16.2109 -36.752 -0.1
+ vertex -16.2109 -36.752 -0.2
endloop
endfacet
facet normal -0.97657 0.215201 0
outer loop
vertex -16.2109 -36.752 0
- vertex -16.2485 -36.9225 -0.1
+ vertex -16.2485 -36.9225 -0.2
vertex -16.2485 -36.9225 0
endloop
endfacet
facet normal -0.906917 0.42131 0
outer loop
- vertex -16.3508 -37.1428 -0.1
+ vertex -16.3508 -37.1428 -0.2
vertex -16.2485 -36.9225 0
- vertex -16.2485 -36.9225 -0.1
+ vertex -16.2485 -36.9225 -0.2
endloop
endfacet
facet normal -0.906917 0.42131 0
outer loop
vertex -16.2485 -36.9225 0
- vertex -16.3508 -37.1428 -0.1
+ vertex -16.3508 -37.1428 -0.2
vertex -16.3508 -37.1428 0
endloop
endfacet
facet normal -0.847258 0.531182 0
outer loop
- vertex -16.5023 -37.3844 -0.1
+ vertex -16.5023 -37.3844 -0.2
vertex -16.3508 -37.1428 0
- vertex -16.3508 -37.1428 -0.1
+ vertex -16.3508 -37.1428 -0.2
endloop
endfacet
facet normal -0.847258 0.531182 0
outer loop
vertex -16.3508 -37.1428 0
- vertex -16.5023 -37.3844 -0.1
+ vertex -16.5023 -37.3844 -0.2
vertex -16.5023 -37.3844 0
endloop
endfacet
facet normal -0.785088 0.619384 0
outer loop
- vertex -16.6872 -37.6188 -0.1
+ vertex -16.6872 -37.6188 -0.2
vertex -16.5023 -37.3844 0
- vertex -16.5023 -37.3844 -0.1
+ vertex -16.5023 -37.3844 -0.2
endloop
endfacet
facet normal -0.785088 0.619384 0
outer loop
vertex -16.5023 -37.3844 0
- vertex -16.6872 -37.6188 -0.1
+ vertex -16.6872 -37.6188 -0.2
vertex -16.6872 -37.6188 0
endloop
endfacet
facet normal -0.731213 0.68215 0
outer loop
- vertex -16.8516 -37.795 -0.1
+ vertex -16.8516 -37.795 -0.2
vertex -16.6872 -37.6188 0
- vertex -16.6872 -37.6188 -0.1
+ vertex -16.6872 -37.6188 -0.2
endloop
endfacet
facet normal -0.731213 0.68215 0
outer loop
vertex -16.6872 -37.6188 0
- vertex -16.8516 -37.795 -0.1
+ vertex -16.8516 -37.795 -0.2
vertex -16.8516 -37.795 0
endloop
endfacet
facet normal -0.615138 0.78842 0
outer loop
- vertex -16.8516 -37.795 -0.1
+ vertex -16.8516 -37.795 -0.2
vertex -17.0213 -37.9274 0
vertex -16.8516 -37.795 0
endloop
@@ -18335,13 +18335,13 @@ solid OpenSCAD_Model
facet normal -0.615138 0.78842 0
outer loop
vertex -17.0213 -37.9274 0
- vertex -16.8516 -37.795 -0.1
- vertex -17.0213 -37.9274 -0.1
+ vertex -16.8516 -37.795 -0.2
+ vertex -17.0213 -37.9274 -0.2
endloop
endfacet
facet normal -0.390611 0.920556 0
outer loop
- vertex -17.0213 -37.9274 -0.1
+ vertex -17.0213 -37.9274 -0.2
vertex -17.2437 -38.0218 0
vertex -17.0213 -37.9274 0
endloop
@@ -18349,13 +18349,13 @@ solid OpenSCAD_Model
facet normal -0.390611 0.920556 0
outer loop
vertex -17.2437 -38.0218 0
- vertex -17.0213 -37.9274 -0.1
- vertex -17.2437 -38.0218 -0.1
+ vertex -17.0213 -37.9274 -0.2
+ vertex -17.2437 -38.0218 -0.2
endloop
endfacet
facet normal -0.189492 0.981882 0
outer loop
- vertex -17.2437 -38.0218 -0.1
+ vertex -17.2437 -38.0218 -0.2
vertex -17.5664 -38.0841 0
vertex -17.2437 -38.0218 0
endloop
@@ -18363,13 +18363,13 @@ solid OpenSCAD_Model
facet normal -0.189492 0.981882 0
outer loop
vertex -17.5664 -38.0841 0
- vertex -17.2437 -38.0218 -0.1
- vertex -17.5664 -38.0841 -0.1
+ vertex -17.2437 -38.0218 -0.2
+ vertex -17.5664 -38.0841 -0.2
endloop
endfacet
facet normal -0.0764443 0.997074 0
outer loop
- vertex -17.5664 -38.0841 -0.1
+ vertex -17.5664 -38.0841 -0.2
vertex -18.0369 -38.1201 0
vertex -17.5664 -38.0841 0
endloop
@@ -18377,13 +18377,13 @@ solid OpenSCAD_Model
facet normal -0.0764443 0.997074 0
outer loop
vertex -18.0369 -38.1201 0
- vertex -17.5664 -38.0841 -0.1
- vertex -18.0369 -38.1201 -0.1
+ vertex -17.5664 -38.0841 -0.2
+ vertex -18.0369 -38.1201 -0.2
endloop
endfacet
facet normal -0.0236695 0.99972 0
outer loop
- vertex -18.0369 -38.1201 -0.1
+ vertex -18.0369 -38.1201 -0.2
vertex -18.7028 -38.1359 0
vertex -18.0369 -38.1201 0
endloop
@@ -18391,13 +18391,13 @@ solid OpenSCAD_Model
facet normal -0.0236695 0.99972 0
outer loop
vertex -18.7028 -38.1359 0
- vertex -18.0369 -38.1201 -0.1
- vertex -18.7028 -38.1359 -0.1
+ vertex -18.0369 -38.1201 -0.2
+ vertex -18.7028 -38.1359 -0.2
endloop
endfacet
facet normal 0.00275597 0.999996 -0
outer loop
- vertex -18.7028 -38.1359 -0.1
+ vertex -18.7028 -38.1359 -0.2
vertex -20.8109 -38.1301 0
vertex -18.7028 -38.1359 0
endloop
@@ -18405,13 +18405,13 @@ solid OpenSCAD_Model
facet normal 0.00275597 0.999996 0
outer loop
vertex -20.8109 -38.1301 0
- vertex -18.7028 -38.1359 -0.1
- vertex -20.8109 -38.1301 -0.1
+ vertex -18.7028 -38.1359 -0.2
+ vertex -20.8109 -38.1301 -0.2
endloop
endfacet
facet normal 0.0176671 0.999844 -0
outer loop
- vertex -20.8109 -38.1301 -0.1
+ vertex -20.8109 -38.1301 -0.2
vertex -23.4866 -38.0828 0
vertex -20.8109 -38.1301 0
endloop
@@ -18419,13 +18419,13 @@ solid OpenSCAD_Model
facet normal 0.0176671 0.999844 0
outer loop
vertex -23.4866 -38.0828 0
- vertex -20.8109 -38.1301 -0.1
- vertex -23.4866 -38.0828 -0.1
+ vertex -20.8109 -38.1301 -0.2
+ vertex -23.4866 -38.0828 -0.2
endloop
endfacet
facet normal 0.0417305 0.999129 -0
outer loop
- vertex -23.4866 -38.0828 -0.1
+ vertex -23.4866 -38.0828 -0.2
vertex -24.3782 -38.0456 0
vertex -23.4866 -38.0828 0
endloop
@@ -18433,13 +18433,13 @@ solid OpenSCAD_Model
facet normal 0.0417305 0.999129 0
outer loop
vertex -24.3782 -38.0456 0
- vertex -23.4866 -38.0828 -0.1
- vertex -24.3782 -38.0456 -0.1
+ vertex -23.4866 -38.0828 -0.2
+ vertex -24.3782 -38.0456 -0.2
endloop
endfacet
facet normal 0.0968237 0.995302 -0
outer loop
- vertex -24.3782 -38.0456 -0.1
+ vertex -24.3782 -38.0456 -0.2
vertex -24.7978 -38.0047 0
vertex -24.3782 -38.0456 0
endloop
@@ -18447,13 +18447,13 @@ solid OpenSCAD_Model
facet normal 0.0968237 0.995302 0
outer loop
vertex -24.7978 -38.0047 0
- vertex -24.3782 -38.0456 -0.1
- vertex -24.7978 -38.0047 -0.1
+ vertex -24.3782 -38.0456 -0.2
+ vertex -24.7978 -38.0047 -0.2
endloop
endfacet
facet normal 0.412814 0.910815 -0
outer loop
- vertex -24.7978 -38.0047 -0.1
+ vertex -24.7978 -38.0047 -0.2
vertex -24.9442 -37.9384 0
vertex -24.7978 -38.0047 0
endloop
@@ -18461,13 +18461,13 @@ solid OpenSCAD_Model
facet normal 0.412814 0.910815 0
outer loop
vertex -24.9442 -37.9384 0
- vertex -24.7978 -38.0047 -0.1
- vertex -24.9442 -37.9384 -0.1
+ vertex -24.7978 -38.0047 -0.2
+ vertex -24.9442 -37.9384 -0.2
endloop
endfacet
facet normal 0.678412 0.734682 -0
outer loop
- vertex -24.9442 -37.9384 -0.1
+ vertex -24.9442 -37.9384 -0.2
vertex -25.0491 -37.8416 0
vertex -24.9442 -37.9384 0
endloop
@@ -18475,139 +18475,139 @@ solid OpenSCAD_Model
facet normal 0.678412 0.734682 0
outer loop
vertex -25.0491 -37.8416 0
- vertex -24.9442 -37.9384 -0.1
- vertex -25.0491 -37.8416 -0.1
+ vertex -24.9442 -37.9384 -0.2
+ vertex -25.0491 -37.8416 -0.2
endloop
endfacet
facet normal 0.880101 0.474787 0
outer loop
vertex -25.0491 -37.8416 0
- vertex -25.1152 -37.719 -0.1
+ vertex -25.1152 -37.719 -0.2
vertex -25.1152 -37.719 0
endloop
endfacet
facet normal 0.880101 0.474787 0
outer loop
- vertex -25.1152 -37.719 -0.1
+ vertex -25.1152 -37.719 -0.2
vertex -25.0491 -37.8416 0
- vertex -25.0491 -37.8416 -0.1
+ vertex -25.0491 -37.8416 -0.2
endloop
endfacet
facet normal 0.978769 0.204965 0
outer loop
vertex -25.1152 -37.719 0
- vertex -25.1453 -37.5754 -0.1
+ vertex -25.1453 -37.5754 -0.2
vertex -25.1453 -37.5754 0
endloop
endfacet
facet normal 0.978769 0.204965 0
outer loop
- vertex -25.1453 -37.5754 -0.1
+ vertex -25.1453 -37.5754 -0.2
vertex -25.1152 -37.719 0
- vertex -25.1152 -37.719 -0.1
+ vertex -25.1152 -37.719 -0.2
endloop
endfacet
facet normal 0.99978 -0.0209726 0
outer loop
vertex -25.1453 -37.5754 0
- vertex -25.1419 -37.4158 -0.1
+ vertex -25.1419 -37.4158 -0.2
vertex -25.1419 -37.4158 0
endloop
endfacet
facet normal 0.99978 -0.0209726 0
outer loop
- vertex -25.1419 -37.4158 -0.1
+ vertex -25.1419 -37.4158 -0.2
vertex -25.1453 -37.5754 0
- vertex -25.1453 -37.5754 -0.1
+ vertex -25.1453 -37.5754 -0.2
endloop
endfacet
facet normal 0.980708 -0.195479 0
outer loop
vertex -25.1419 -37.4158 0
- vertex -25.1078 -37.2448 -0.1
+ vertex -25.1078 -37.2448 -0.2
vertex -25.1078 -37.2448 0
endloop
endfacet
facet normal 0.980708 -0.195479 0
outer loop
- vertex -25.1078 -37.2448 -0.1
+ vertex -25.1078 -37.2448 -0.2
vertex -25.1419 -37.4158 0
- vertex -25.1419 -37.4158 -0.1
+ vertex -25.1419 -37.4158 -0.2
endloop
endfacet
facet normal 0.94384 -0.330404 0
outer loop
vertex -25.1078 -37.2448 0
- vertex -25.0457 -37.0673 -0.1
+ vertex -25.0457 -37.0673 -0.2
vertex -25.0457 -37.0673 0
endloop
endfacet
facet normal 0.94384 -0.330404 0
outer loop
- vertex -25.0457 -37.0673 -0.1
+ vertex -25.0457 -37.0673 -0.2
vertex -25.1078 -37.2448 0
- vertex -25.1078 -37.2448 -0.1
+ vertex -25.1078 -37.2448 -0.2
endloop
endfacet
facet normal 0.898573 -0.438825 0
outer loop
vertex -25.0457 -37.0673 0
- vertex -24.9582 -36.888 -0.1
+ vertex -24.9582 -36.888 -0.2
vertex -24.9582 -36.888 0
endloop
endfacet
facet normal 0.898573 -0.438825 0
outer loop
- vertex -24.9582 -36.888 -0.1
+ vertex -24.9582 -36.888 -0.2
vertex -25.0457 -37.0673 0
- vertex -25.0457 -37.0673 -0.1
+ vertex -25.0457 -37.0673 -0.2
endloop
endfacet
facet normal 0.847669 -0.530525 0
outer loop
vertex -24.9582 -36.888 0
- vertex -24.8479 -36.7119 -0.1
+ vertex -24.8479 -36.7119 -0.2
vertex -24.8479 -36.7119 0
endloop
endfacet
facet normal 0.847669 -0.530525 0
outer loop
- vertex -24.8479 -36.7119 -0.1
+ vertex -24.8479 -36.7119 -0.2
vertex -24.9582 -36.888 0
- vertex -24.9582 -36.888 -0.1
+ vertex -24.9582 -36.888 -0.2
endloop
endfacet
facet normal 0.790663 -0.612252 0
outer loop
vertex -24.8479 -36.7119 0
- vertex -24.7177 -36.5437 -0.1
+ vertex -24.7177 -36.5437 -0.2
vertex -24.7177 -36.5437 0
endloop
endfacet
facet normal 0.790663 -0.612252 0
outer loop
- vertex -24.7177 -36.5437 -0.1
+ vertex -24.7177 -36.5437 -0.2
vertex -24.8479 -36.7119 0
- vertex -24.8479 -36.7119 -0.1
+ vertex -24.8479 -36.7119 -0.2
endloop
endfacet
facet normal 0.7253 -0.688433 0
outer loop
vertex -24.7177 -36.5437 0
- vertex -24.57 -36.3881 -0.1
+ vertex -24.57 -36.3881 -0.2
vertex -24.57 -36.3881 0
endloop
endfacet
facet normal 0.7253 -0.688433 0
outer loop
- vertex -24.57 -36.3881 -0.1
+ vertex -24.57 -36.3881 -0.2
vertex -24.7177 -36.5437 0
- vertex -24.7177 -36.5437 -0.1
+ vertex -24.7177 -36.5437 -0.2
endloop
endfacet
facet normal 0.647808 -0.761803 0
outer loop
- vertex -24.57 -36.3881 -0.1
+ vertex -24.57 -36.3881 -0.2
vertex -24.4077 -36.2501 0
vertex -24.57 -36.3881 0
endloop
@@ -18615,13 +18615,13 @@ solid OpenSCAD_Model
facet normal 0.647808 -0.761803 0
outer loop
vertex -24.4077 -36.2501 0
- vertex -24.57 -36.3881 -0.1
- vertex -24.4077 -36.2501 -0.1
+ vertex -24.57 -36.3881 -0.2
+ vertex -24.4077 -36.2501 -0.2
endloop
endfacet
facet normal 0.553033 -0.833159 0
outer loop
- vertex -24.4077 -36.2501 -0.1
+ vertex -24.4077 -36.2501 -0.2
vertex -24.2334 -36.1344 0
vertex -24.4077 -36.2501 0
endloop
@@ -18629,13 +18629,13 @@ solid OpenSCAD_Model
facet normal 0.553033 -0.833159 0
outer loop
vertex -24.2334 -36.1344 0
- vertex -24.4077 -36.2501 -0.1
- vertex -24.2334 -36.1344 -0.1
+ vertex -24.4077 -36.2501 -0.2
+ vertex -24.2334 -36.1344 -0.2
endloop
endfacet
facet normal 0.434505 -0.900669 0
outer loop
- vertex -24.2334 -36.1344 -0.1
+ vertex -24.2334 -36.1344 -0.2
vertex -24.0497 -36.0458 0
vertex -24.2334 -36.1344 0
endloop
@@ -18643,13 +18643,13 @@ solid OpenSCAD_Model
facet normal 0.434505 -0.900669 0
outer loop
vertex -24.0497 -36.0458 0
- vertex -24.2334 -36.1344 -0.1
- vertex -24.0497 -36.0458 -0.1
+ vertex -24.2334 -36.1344 -0.2
+ vertex -24.0497 -36.0458 -0.2
endloop
endfacet
facet normal 0.285417 -0.958403 0
outer loop
- vertex -24.0497 -36.0458 -0.1
+ vertex -24.0497 -36.0458 -0.2
vertex -23.8593 -35.9891 0
vertex -24.0497 -36.0458 0
endloop
@@ -18657,13 +18657,13 @@ solid OpenSCAD_Model
facet normal 0.285417 -0.958403 0
outer loop
vertex -23.8593 -35.9891 0
- vertex -24.0497 -36.0458 -0.1
- vertex -23.8593 -35.9891 -0.1
+ vertex -24.0497 -36.0458 -0.2
+ vertex -23.8593 -35.9891 -0.2
endloop
endfacet
facet normal 0.1022 -0.994764 0
outer loop
- vertex -23.8593 -35.9891 -0.1
+ vertex -23.8593 -35.9891 -0.2
vertex -23.665 -35.9691 0
vertex -23.8593 -35.9891 0
endloop
@@ -18671,13 +18671,13 @@ solid OpenSCAD_Model
facet normal 0.1022 -0.994764 0
outer loop
vertex -23.665 -35.9691 0
- vertex -23.8593 -35.9891 -0.1
- vertex -23.665 -35.9691 -0.1
+ vertex -23.8593 -35.9891 -0.2
+ vertex -23.665 -35.9691 -0.2
endloop
endfacet
facet normal 0.0676467 -0.997709 0
outer loop
- vertex -23.665 -35.9691 -0.1
+ vertex -23.665 -35.9691 -0.2
vertex -23.3082 -35.9449 0
vertex -23.665 -35.9691 0
endloop
@@ -18685,13 +18685,13 @@ solid OpenSCAD_Model
facet normal 0.0676467 -0.997709 0
outer loop
vertex -23.3082 -35.9449 0
- vertex -23.665 -35.9691 -0.1
- vertex -23.3082 -35.9449 -0.1
+ vertex -23.665 -35.9691 -0.2
+ vertex -23.3082 -35.9449 -0.2
endloop
endfacet
facet normal 0.201749 -0.979437 0
outer loop
- vertex -23.3082 -35.9449 -0.1
+ vertex -23.3082 -35.9449 -0.2
vertex -23.1471 -35.9117 0
vertex -23.3082 -35.9449 0
endloop
@@ -18699,13 +18699,13 @@ solid OpenSCAD_Model
facet normal 0.201749 -0.979437 0
outer loop
vertex -23.1471 -35.9117 0
- vertex -23.3082 -35.9449 -0.1
- vertex -23.1471 -35.9117 -0.1
+ vertex -23.3082 -35.9449 -0.2
+ vertex -23.1471 -35.9117 -0.2
endloop
endfacet
facet normal 0.311945 -0.9501 0
outer loop
- vertex -23.1471 -35.9117 -0.1
+ vertex -23.1471 -35.9117 -0.2
vertex -22.9953 -35.8619 0
vertex -23.1471 -35.9117 0
endloop
@@ -18713,13 +18713,13 @@ solid OpenSCAD_Model
facet normal 0.311945 -0.9501 0
outer loop
vertex -22.9953 -35.8619 0
- vertex -23.1471 -35.9117 -0.1
- vertex -22.9953 -35.8619 -0.1
+ vertex -23.1471 -35.9117 -0.2
+ vertex -22.9953 -35.8619 -0.2
endloop
endfacet
facet normal 0.428709 -0.903443 0
outer loop
- vertex -22.9953 -35.8619 -0.1
+ vertex -22.9953 -35.8619 -0.2
vertex -22.8511 -35.7934 0
vertex -22.9953 -35.8619 0
endloop
@@ -18727,13 +18727,13 @@ solid OpenSCAD_Model
facet normal 0.428709 -0.903443 0
outer loop
vertex -22.8511 -35.7934 0
- vertex -22.9953 -35.8619 -0.1
- vertex -22.8511 -35.7934 -0.1
+ vertex -22.9953 -35.8619 -0.2
+ vertex -22.8511 -35.7934 -0.2
endloop
endfacet
facet normal 0.540869 -0.841107 0
outer loop
- vertex -22.8511 -35.7934 -0.1
+ vertex -22.8511 -35.7934 -0.2
vertex -22.7126 -35.7044 0
vertex -22.8511 -35.7934 0
endloop
@@ -18741,13 +18741,13 @@ solid OpenSCAD_Model
facet normal 0.540869 -0.841107 0
outer loop
vertex -22.7126 -35.7044 0
- vertex -22.8511 -35.7934 -0.1
- vertex -22.7126 -35.7044 -0.1
+ vertex -22.8511 -35.7934 -0.2
+ vertex -22.7126 -35.7044 -0.2
endloop
endfacet
facet normal 0.638801 -0.769372 0
outer loop
- vertex -22.7126 -35.7044 -0.1
+ vertex -22.7126 -35.7044 -0.2
vertex -22.5782 -35.5929 0
vertex -22.7126 -35.7044 0
endloop
@@ -18755,195 +18755,195 @@ solid OpenSCAD_Model
facet normal 0.638801 -0.769372 0
outer loop
vertex -22.5782 -35.5929 0
- vertex -22.7126 -35.7044 -0.1
- vertex -22.5782 -35.5929 -0.1
+ vertex -22.7126 -35.7044 -0.2
+ vertex -22.5782 -35.5929 -0.2
endloop
endfacet
facet normal 0.717693 -0.69636 0
outer loop
vertex -22.5782 -35.5929 0
- vertex -22.4463 -35.4568 -0.1
+ vertex -22.4463 -35.4568 -0.2
vertex -22.4463 -35.4568 0
endloop
endfacet
facet normal 0.717693 -0.69636 0
outer loop
- vertex -22.4463 -35.4568 -0.1
+ vertex -22.4463 -35.4568 -0.2
vertex -22.5782 -35.5929 0
- vertex -22.5782 -35.5929 -0.1
+ vertex -22.5782 -35.5929 -0.2
endloop
endfacet
facet normal 0.801318 -0.598238 0
outer loop
vertex -22.4463 -35.4568 0
- vertex -22.1824 -35.1035 -0.1
+ vertex -22.1824 -35.1035 -0.2
vertex -22.1824 -35.1035 0
endloop
endfacet
facet normal 0.801318 -0.598238 0
outer loop
- vertex -22.1824 -35.1035 -0.1
+ vertex -22.1824 -35.1035 -0.2
vertex -22.4463 -35.4568 0
- vertex -22.4463 -35.4568 -0.1
+ vertex -22.4463 -35.4568 -0.2
endloop
endfacet
facet normal 0.865265 -0.501314 0
outer loop
vertex -22.1824 -35.1035 0
- vertex -21.9074 -34.6287 -0.1
+ vertex -21.9074 -34.6287 -0.2
vertex -21.9074 -34.6287 0
endloop
endfacet
facet normal 0.865265 -0.501314 0
outer loop
- vertex -21.9074 -34.6287 -0.1
+ vertex -21.9074 -34.6287 -0.2
vertex -22.1824 -35.1035 0
- vertex -22.1824 -35.1035 -0.1
+ vertex -22.1824 -35.1035 -0.2
endloop
endfacet
facet normal 0.897795 -0.440414 0
outer loop
vertex -21.9074 -34.6287 0
- vertex -21.6072 -34.0169 -0.1
+ vertex -21.6072 -34.0169 -0.2
vertex -21.6072 -34.0169 0
endloop
endfacet
facet normal 0.897795 -0.440414 0
outer loop
- vertex -21.6072 -34.0169 -0.1
+ vertex -21.6072 -34.0169 -0.2
vertex -21.9074 -34.6287 0
- vertex -21.9074 -34.6287 -0.1
+ vertex -21.9074 -34.6287 -0.2
endloop
endfacet
facet normal 0.914162 -0.405349 0
outer loop
vertex -21.6072 -34.0169 0
- vertex -21.2682 -33.2523 -0.1
+ vertex -21.2682 -33.2523 -0.2
vertex -21.2682 -33.2523 0
endloop
endfacet
facet normal 0.914162 -0.405349 0
outer loop
- vertex -21.2682 -33.2523 -0.1
+ vertex -21.2682 -33.2523 -0.2
vertex -21.6072 -34.0169 0
- vertex -21.6072 -34.0169 -0.1
+ vertex -21.6072 -34.0169 -0.2
endloop
endfacet
facet normal 0.920953 -0.389675 0
outer loop
vertex -21.2682 -33.2523 0
- vertex -19.7699 -29.7113 -0.1
+ vertex -19.7699 -29.7113 -0.2
vertex -19.7699 -29.7113 0
endloop
endfacet
facet normal 0.920953 -0.389675 0
outer loop
- vertex -19.7699 -29.7113 -0.1
+ vertex -19.7699 -29.7113 -0.2
vertex -21.2682 -33.2523 0
- vertex -21.2682 -33.2523 -0.1
+ vertex -21.2682 -33.2523 -0.2
endloop
endfacet
facet normal 0.925287 -0.379267 0
outer loop
vertex -19.7699 -29.7113 0
- vertex -18.5311 -26.6889 -0.1
+ vertex -18.5311 -26.6889 -0.2
vertex -18.5311 -26.6889 0
endloop
endfacet
facet normal 0.925287 -0.379267 0
outer loop
- vertex -18.5311 -26.6889 -0.1
+ vertex -18.5311 -26.6889 -0.2
vertex -19.7699 -29.7113 0
- vertex -19.7699 -29.7113 -0.1
+ vertex -19.7699 -29.7113 -0.2
endloop
endfacet
facet normal 0.931695 -0.363243 0
outer loop
vertex -18.5311 -26.6889 0
- vertex -17.6656 -24.469 -0.1
+ vertex -17.6656 -24.469 -0.2
vertex -17.6656 -24.469 0
endloop
endfacet
facet normal 0.931695 -0.363243 0
outer loop
- vertex -17.6656 -24.469 -0.1
+ vertex -17.6656 -24.469 -0.2
vertex -18.5311 -26.6889 0
- vertex -18.5311 -26.6889 -0.1
+ vertex -18.5311 -26.6889 -0.2
endloop
endfacet
facet normal 0.941797 -0.336183 0
outer loop
vertex -17.6656 -24.469 0
- vertex -17.4084 -23.7485 -0.1
+ vertex -17.4084 -23.7485 -0.2
vertex -17.4084 -23.7485 0
endloop
endfacet
facet normal 0.941797 -0.336183 0
outer loop
- vertex -17.4084 -23.7485 -0.1
+ vertex -17.4084 -23.7485 -0.2
vertex -17.6656 -24.469 0
- vertex -17.6656 -24.469 -0.1
+ vertex -17.6656 -24.469 -0.2
endloop
endfacet
facet normal 0.959662 -0.281158 0
outer loop
vertex -17.4084 -23.7485 0
- vertex -17.2873 -23.335 -0.1
+ vertex -17.2873 -23.335 -0.2
vertex -17.2873 -23.335 0
endloop
endfacet
facet normal 0.959662 -0.281158 0
outer loop
- vertex -17.2873 -23.335 -0.1
+ vertex -17.2873 -23.335 -0.2
vertex -17.4084 -23.7485 0
- vertex -17.4084 -23.7485 -0.1
+ vertex -17.4084 -23.7485 -0.2
endloop
endfacet
facet normal 0.987024 -0.160575 0
outer loop
vertex -17.2873 -23.335 0
- vertex -17.2226 -22.9371 -0.1
+ vertex -17.2226 -22.9371 -0.2
vertex -17.2226 -22.9371 0
endloop
endfacet
facet normal 0.987024 -0.160575 0
outer loop
- vertex -17.2226 -22.9371 -0.1
+ vertex -17.2226 -22.9371 -0.2
vertex -17.2873 -23.335 0
- vertex -17.2873 -23.335 -0.1
+ vertex -17.2873 -23.335 -0.2
endloop
endfacet
facet normal 0.999826 0.0186517 0
outer loop
vertex -17.2226 -22.9371 0
- vertex -17.2249 -22.8126 -0.1
+ vertex -17.2249 -22.8126 -0.2
vertex -17.2249 -22.8126 0
endloop
endfacet
facet normal 0.999826 0.0186517 0
outer loop
- vertex -17.2249 -22.8126 -0.1
+ vertex -17.2249 -22.8126 -0.2
vertex -17.2226 -22.9371 0
- vertex -17.2226 -22.9371 -0.1
+ vertex -17.2226 -22.9371 -0.2
endloop
endfacet
facet normal 0.932644 0.360799 0
outer loop
vertex -17.2249 -22.8126 0
- vertex -17.2578 -22.7276 -0.1
+ vertex -17.2578 -22.7276 -0.2
vertex -17.2578 -22.7276 0
endloop
endfacet
facet normal 0.932644 0.360799 0
outer loop
- vertex -17.2578 -22.7276 -0.1
+ vertex -17.2578 -22.7276 -0.2
vertex -17.2249 -22.8126 0
- vertex -17.2249 -22.8126 -0.1
+ vertex -17.2249 -22.8126 -0.2
endloop
endfacet
facet normal 0.608972 0.793192 -0
outer loop
- vertex -17.2578 -22.7276 -0.1
+ vertex -17.2578 -22.7276 -0.2
vertex -17.3267 -22.6747 0
vertex -17.2578 -22.7276 0
endloop
@@ -18951,13 +18951,13 @@ solid OpenSCAD_Model
facet normal 0.608972 0.793192 0
outer loop
vertex -17.3267 -22.6747 0
- vertex -17.2578 -22.7276 -0.1
- vertex -17.3267 -22.6747 -0.1
+ vertex -17.2578 -22.7276 -0.2
+ vertex -17.3267 -22.6747 -0.2
endloop
endfacet
facet normal 0.249366 0.968409 -0
outer loop
- vertex -17.3267 -22.6747 -0.1
+ vertex -17.3267 -22.6747 -0.2
vertex -17.4374 -22.6462 0
vertex -17.3267 -22.6747 0
endloop
@@ -18965,13 +18965,13 @@ solid OpenSCAD_Model
facet normal 0.249366 0.968409 0
outer loop
vertex -17.4374 -22.6462 0
- vertex -17.3267 -22.6747 -0.1
- vertex -17.4374 -22.6462 -0.1
+ vertex -17.3267 -22.6747 -0.2
+ vertex -17.4374 -22.6462 -0.2
endloop
endfacet
facet normal 0.0372683 0.999305 -0
outer loop
- vertex -17.4374 -22.6462 -0.1
+ vertex -17.4374 -22.6462 -0.2
vertex -17.8061 -22.6324 0
vertex -17.4374 -22.6462 0
endloop
@@ -18979,13 +18979,13 @@ solid OpenSCAD_Model
facet normal 0.0372683 0.999305 0
outer loop
vertex -17.8061 -22.6324 0
- vertex -17.4374 -22.6462 -0.1
- vertex -17.8061 -22.6324 -0.1
+ vertex -17.4374 -22.6462 -0.2
+ vertex -17.8061 -22.6324 -0.2
endloop
endfacet
facet normal 0.050033 0.998748 -0
outer loop
- vertex -17.8061 -22.6324 -0.1
+ vertex -17.8061 -22.6324 -0.2
vertex -18.1091 -22.6172 0
vertex -17.8061 -22.6324 0
endloop
@@ -18993,13 +18993,13 @@ solid OpenSCAD_Model
facet normal 0.050033 0.998748 0
outer loop
vertex -18.1091 -22.6172 0
- vertex -17.8061 -22.6324 -0.1
- vertex -18.1091 -22.6172 -0.1
+ vertex -17.8061 -22.6324 -0.2
+ vertex -18.1091 -22.6172 -0.2
endloop
endfacet
facet normal 0.187734 0.98222 -0
outer loop
- vertex -18.1091 -22.6172 -0.1
+ vertex -18.1091 -22.6172 -0.2
vertex -18.3541 -22.5704 0
vertex -18.1091 -22.6172 0
endloop
@@ -19007,13 +19007,13 @@ solid OpenSCAD_Model
facet normal 0.187734 0.98222 0
outer loop
vertex -18.3541 -22.5704 0
- vertex -18.1091 -22.6172 -0.1
- vertex -18.3541 -22.5704 -0.1
+ vertex -18.1091 -22.6172 -0.2
+ vertex -18.3541 -22.5704 -0.2
endloop
endfacet
facet normal 0.392235 0.919865 -0
outer loop
- vertex -18.3541 -22.5704 -0.1
+ vertex -18.3541 -22.5704 -0.2
vertex -18.5429 -22.4899 0
vertex -18.3541 -22.5704 0
endloop
@@ -19021,13 +19021,13 @@ solid OpenSCAD_Model
facet normal 0.392235 0.919865 0
outer loop
vertex -18.5429 -22.4899 0
- vertex -18.3541 -22.5704 -0.1
- vertex -18.5429 -22.4899 -0.1
+ vertex -18.3541 -22.5704 -0.2
+ vertex -18.5429 -22.4899 -0.2
endloop
endfacet
facet normal 0.654816 0.755788 -0
outer loop
- vertex -18.5429 -22.4899 -0.1
+ vertex -18.5429 -22.4899 -0.2
vertex -18.6769 -22.3738 0
vertex -18.5429 -22.4899 0
endloop
@@ -19035,111 +19035,111 @@ solid OpenSCAD_Model
facet normal 0.654816 0.755788 0
outer loop
vertex -18.6769 -22.3738 0
- vertex -18.5429 -22.4899 -0.1
- vertex -18.6769 -22.3738 -0.1
+ vertex -18.5429 -22.4899 -0.2
+ vertex -18.6769 -22.3738 -0.2
endloop
endfacet
facet normal 0.885096 0.465409 0
outer loop
vertex -18.6769 -22.3738 0
- vertex -18.7577 -22.2202 -0.1
+ vertex -18.7577 -22.2202 -0.2
vertex -18.7577 -22.2202 0
endloop
endfacet
facet normal 0.885096 0.465409 0
outer loop
- vertex -18.7577 -22.2202 -0.1
+ vertex -18.7577 -22.2202 -0.2
vertex -18.6769 -22.3738 0
- vertex -18.6769 -22.3738 -0.1
+ vertex -18.6769 -22.3738 -0.2
endloop
endfacet
facet normal 0.988779 0.149383 0
outer loop
vertex -18.7577 -22.2202 0
- vertex -18.7869 -22.0269 -0.1
+ vertex -18.7869 -22.0269 -0.2
vertex -18.7869 -22.0269 0
endloop
endfacet
facet normal 0.988779 0.149383 0
outer loop
- vertex -18.7869 -22.0269 -0.1
+ vertex -18.7869 -22.0269 -0.2
vertex -18.7577 -22.2202 0
- vertex -18.7577 -22.2202 -0.1
+ vertex -18.7577 -22.2202 -0.2
endloop
endfacet
facet normal 0.99608 -0.0884566 0
outer loop
vertex -18.7869 -22.0269 0
- vertex -18.766 -21.7922 -0.1
+ vertex -18.766 -21.7922 -0.2
vertex -18.766 -21.7922 0
endloop
endfacet
facet normal 0.99608 -0.0884566 0
outer loop
- vertex -18.766 -21.7922 -0.1
+ vertex -18.766 -21.7922 -0.2
vertex -18.7869 -22.0269 0
- vertex -18.7869 -22.0269 -0.1
+ vertex -18.7869 -22.0269 -0.2
endloop
endfacet
facet normal 0.970344 -0.241728 0
outer loop
vertex -18.766 -21.7922 0
- vertex -18.6967 -21.5139 -0.1
+ vertex -18.6967 -21.5139 -0.2
vertex -18.6967 -21.5139 0
endloop
endfacet
facet normal 0.970344 -0.241728 0
outer loop
- vertex -18.6967 -21.5139 -0.1
+ vertex -18.6967 -21.5139 -0.2
vertex -18.766 -21.7922 0
- vertex -18.766 -21.7922 -0.1
+ vertex -18.766 -21.7922 -0.2
endloop
endfacet
facet normal 0.92433 -0.381593 0
outer loop
vertex -18.6967 -21.5139 0
- vertex -18.5788 -21.2283 -0.1
+ vertex -18.5788 -21.2283 -0.2
vertex -18.5788 -21.2283 0
endloop
endfacet
facet normal 0.92433 -0.381593 0
outer loop
- vertex -18.5788 -21.2283 -0.1
+ vertex -18.5788 -21.2283 -0.2
vertex -18.6967 -21.5139 0
- vertex -18.6967 -21.5139 -0.1
+ vertex -18.6967 -21.5139 -0.2
endloop
endfacet
facet normal 0.848388 -0.529374 0
outer loop
vertex -18.5788 -21.2283 0
- vertex -18.5053 -21.1105 -0.1
+ vertex -18.5053 -21.1105 -0.2
vertex -18.5053 -21.1105 0
endloop
endfacet
facet normal 0.848388 -0.529374 0
outer loop
- vertex -18.5053 -21.1105 -0.1
+ vertex -18.5053 -21.1105 -0.2
vertex -18.5788 -21.2283 0
- vertex -18.5788 -21.2283 -0.1
+ vertex -18.5788 -21.2283 -0.2
endloop
endfacet
facet normal 0.772185 -0.635398 0
outer loop
vertex -18.5053 -21.1105 0
- vertex -18.4218 -21.0091 -0.1
+ vertex -18.4218 -21.0091 -0.2
vertex -18.4218 -21.0091 0
endloop
endfacet
facet normal 0.772185 -0.635398 0
outer loop
- vertex -18.4218 -21.0091 -0.1
+ vertex -18.4218 -21.0091 -0.2
vertex -18.5053 -21.1105 0
- vertex -18.5053 -21.1105 -0.1
+ vertex -18.5053 -21.1105 -0.2
endloop
endfacet
facet normal 0.673134 -0.739521 0
outer loop
- vertex -18.4218 -21.0091 -0.1
+ vertex -18.4218 -21.0091 -0.2
vertex -18.3284 -20.924 0
vertex -18.4218 -21.0091 0
endloop
@@ -19147,13 +19147,13 @@ solid OpenSCAD_Model
facet normal 0.673134 -0.739521 0
outer loop
vertex -18.3284 -20.924 0
- vertex -18.4218 -21.0091 -0.1
- vertex -18.3284 -20.924 -0.1
+ vertex -18.4218 -21.0091 -0.2
+ vertex -18.3284 -20.924 -0.2
endloop
endfacet
facet normal 0.553635 -0.832759 0
outer loop
- vertex -18.3284 -20.924 -0.1
+ vertex -18.3284 -20.924 -0.2
vertex -18.2248 -20.8552 0
vertex -18.3284 -20.924 0
endloop
@@ -19161,13 +19161,13 @@ solid OpenSCAD_Model
facet normal 0.553635 -0.832759 0
outer loop
vertex -18.2248 -20.8552 0
- vertex -18.3284 -20.924 -0.1
- vertex -18.2248 -20.8552 -0.1
+ vertex -18.3284 -20.924 -0.2
+ vertex -18.2248 -20.8552 -0.2
endloop
endfacet
facet normal 0.4209 -0.907107 0
outer loop
- vertex -18.2248 -20.8552 -0.1
+ vertex -18.2248 -20.8552 -0.2
vertex -18.1109 -20.8023 0
vertex -18.2248 -20.8552 0
endloop
@@ -19175,13 +19175,13 @@ solid OpenSCAD_Model
facet normal 0.4209 -0.907107 0
outer loop
vertex -18.1109 -20.8023 0
- vertex -18.2248 -20.8552 -0.1
- vertex -18.1109 -20.8023 -0.1
+ vertex -18.2248 -20.8552 -0.2
+ vertex -18.1109 -20.8023 -0.2
endloop
endfacet
facet normal 0.284987 -0.958531 0
outer loop
- vertex -18.1109 -20.8023 -0.1
+ vertex -18.1109 -20.8023 -0.2
vertex -17.9865 -20.7653 0
vertex -18.1109 -20.8023 0
endloop
@@ -19189,13 +19189,13 @@ solid OpenSCAD_Model
facet normal 0.284987 -0.958531 0
outer loop
vertex -17.9865 -20.7653 0
- vertex -18.1109 -20.8023 -0.1
- vertex -17.9865 -20.7653 -0.1
+ vertex -18.1109 -20.8023 -0.2
+ vertex -17.9865 -20.7653 -0.2
endloop
endfacet
facet normal 0.279088 -0.960266 0
outer loop
- vertex -17.9865 -20.7653 -0.1
+ vertex -17.9865 -20.7653 -0.2
vertex -16.9393 -20.461 0
vertex -17.9865 -20.7653 0
endloop
@@ -19203,13 +19203,13 @@ solid OpenSCAD_Model
facet normal 0.279088 -0.960266 0
outer loop
vertex -16.9393 -20.461 0
- vertex -17.9865 -20.7653 -0.1
- vertex -16.9393 -20.461 -0.1
+ vertex -17.9865 -20.7653 -0.2
+ vertex -16.9393 -20.461 -0.2
endloop
endfacet
facet normal 0.302435 -0.95317 0
outer loop
- vertex -16.9393 -20.461 -0.1
+ vertex -16.9393 -20.461 -0.2
vertex -15.1436 -19.8912 0
vertex -16.9393 -20.461 0
endloop
@@ -19217,13 +19217,13 @@ solid OpenSCAD_Model
facet normal 0.302435 -0.95317 0
outer loop
vertex -15.1436 -19.8912 0
- vertex -16.9393 -20.461 -0.1
- vertex -15.1436 -19.8912 -0.1
+ vertex -16.9393 -20.461 -0.2
+ vertex -15.1436 -19.8912 -0.2
endloop
endfacet
facet normal 0.297661 -0.954672 0
outer loop
- vertex -15.1436 -19.8912 -0.1
+ vertex -15.1436 -19.8912 -0.2
vertex -14.1989 -19.5967 0
vertex -15.1436 -19.8912 0
endloop
@@ -19231,13 +19231,13 @@ solid OpenSCAD_Model
facet normal 0.297661 -0.954672 0
outer loop
vertex -14.1989 -19.5967 0
- vertex -15.1436 -19.8912 -0.1
- vertex -14.1989 -19.5967 -0.1
+ vertex -15.1436 -19.8912 -0.2
+ vertex -14.1989 -19.5967 -0.2
endloop
endfacet
facet normal 0.272658 -0.962111 0
outer loop
- vertex -14.1989 -19.5967 -0.1
+ vertex -14.1989 -19.5967 -0.2
vertex -13.3483 -19.3556 0
vertex -14.1989 -19.5967 0
endloop
@@ -19245,13 +19245,13 @@ solid OpenSCAD_Model
facet normal 0.272658 -0.962111 0
outer loop
vertex -13.3483 -19.3556 0
- vertex -14.1989 -19.5967 -0.1
- vertex -13.3483 -19.3556 -0.1
+ vertex -14.1989 -19.5967 -0.2
+ vertex -13.3483 -19.3556 -0.2
endloop
endfacet
facet normal 0.238231 -0.971209 0
outer loop
- vertex -13.3483 -19.3556 -0.1
+ vertex -13.3483 -19.3556 -0.2
vertex -12.6849 -19.1929 0
vertex -13.3483 -19.3556 0
endloop
@@ -19259,13 +19259,13 @@ solid OpenSCAD_Model
facet normal 0.238231 -0.971209 0
outer loop
vertex -12.6849 -19.1929 0
- vertex -13.3483 -19.3556 -0.1
- vertex -12.6849 -19.1929 -0.1
+ vertex -13.3483 -19.3556 -0.2
+ vertex -12.6849 -19.1929 -0.2
endloop
endfacet
facet normal 0.153595 -0.988134 0
outer loop
- vertex -12.6849 -19.1929 -0.1
+ vertex -12.6849 -19.1929 -0.2
vertex -12.302 -19.1333 0
vertex -12.6849 -19.1929 0
endloop
@@ -19273,13 +19273,13 @@ solid OpenSCAD_Model
facet normal 0.153595 -0.988134 0
outer loop
vertex -12.302 -19.1333 0
- vertex -12.6849 -19.1929 -0.1
- vertex -12.302 -19.1333 -0.1
+ vertex -12.6849 -19.1929 -0.2
+ vertex -12.302 -19.1333 -0.2
endloop
endfacet
facet normal -0.105808 -0.994387 0
outer loop
- vertex -12.302 -19.1333 -0.1
+ vertex -12.302 -19.1333 -0.2
vertex -12.0792 -19.1571 0
vertex -12.302 -19.1333 0
endloop
@@ -19287,1231 +19287,1231 @@ solid OpenSCAD_Model
facet normal -0.105808 -0.994387 -0
outer loop
vertex -12.0792 -19.1571 0
- vertex -12.302 -19.1333 -0.1
- vertex -12.0792 -19.1571 -0.1
+ vertex -12.302 -19.1333 -0.2
+ vertex -12.0792 -19.1571 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 35.6833 -25.6471 -0.1
- vertex 39.342 -26.9688 -0.1
- vertex 35.957 -24.8864 -0.1
+ vertex 35.6833 -25.6471 -0.2
+ vertex 39.342 -26.9688 -0.2
+ vertex 35.957 -24.8864 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 35.3422 -26.5156 -0.1
- vertex 39.342 -26.9688 -0.1
- vertex 35.6833 -25.6471 -0.1
+ vertex 35.3422 -26.5156 -0.2
+ vertex 39.342 -26.9688 -0.2
+ vertex 35.6833 -25.6471 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 39.342 -26.9688 -0.1
- vertex 35.3422 -26.5156 -0.1
- vertex 38.2305 -29.6614 -0.1
+ vertex 39.342 -26.9688 -0.2
+ vertex 35.3422 -26.5156 -0.2
+ vertex 38.2305 -29.6614 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 33.8561 -30.1753 -0.1
- vertex 38.2305 -29.6614 -0.1
- vertex 35.3422 -26.5156 -0.1
+ vertex 33.8561 -30.1753 -0.2
+ vertex 38.2305 -29.6614 -0.2
+ vertex 35.3422 -26.5156 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.2305 -29.6614 -0.1
- vertex 33.8561 -30.1753 -0.1
- vertex 37.444 -31.6395 -0.1
+ vertex 38.2305 -29.6614 -0.2
+ vertex 33.8561 -30.1753 -0.2
+ vertex 37.444 -31.6395 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.3957 -19.1543 -0.1
- vertex 42.162 -19.859 -0.1
- vertex 42.1595 -19.6516 -0.1
+ vertex 41.3957 -19.1543 -0.2
+ vertex 42.162 -19.859 -0.2
+ vertex 42.1595 -19.6516 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.7426 -19.1572 -0.1
- vertex 42.1595 -19.6516 -0.1
- vertex 42.1149 -19.4743 -0.1
+ vertex 41.7426 -19.1572 -0.2
+ vertex 42.1595 -19.6516 -0.2
+ vertex 42.1149 -19.4743 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.162 -19.859 -0.1
- vertex 41.3957 -19.1543 -0.1
- vertex 42.1212 -20.0931 -0.1
+ vertex 42.162 -19.859 -0.2
+ vertex 41.3957 -19.1543 -0.2
+ vertex 42.1212 -20.0931 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.7426 -19.1572 -0.1
- vertex 42.1149 -19.4743 -0.1
- vertex 42.0297 -19.3306 -0.1
+ vertex 41.7426 -19.1572 -0.2
+ vertex 42.1149 -19.4743 -0.2
+ vertex 42.0297 -19.3306 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 41.156 -19.2119 -0.1
- vertex 42.1212 -20.0931 -0.1
- vertex 41.3957 -19.1543 -0.1
+ vertex 41.156 -19.2119 -0.2
+ vertex 42.1212 -20.0931 -0.2
+ vertex 41.3957 -19.1543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.1212 -20.0931 -0.1
- vertex 41.156 -19.2119 -0.1
- vertex 42.0356 -20.3507 -0.1
+ vertex 42.1212 -20.0931 -0.2
+ vertex 41.156 -19.2119 -0.2
+ vertex 42.0356 -20.3507 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.7426 -19.1572 -0.1
- vertex 42.0297 -19.3306 -0.1
- vertex 41.9051 -19.2238 -0.1
+ vertex 41.7426 -19.1572 -0.2
+ vertex 42.0297 -19.3306 -0.2
+ vertex 41.9051 -19.2238 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.9233 -19.8512 -0.1
- vertex 47.9993 -20.1225 -0.1
- vertex 47.9745 -19.9807 -0.1
+ vertex 47.9233 -19.8512 -0.2
+ vertex 47.9993 -20.1225 -0.2
+ vertex 47.9745 -19.9807 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.9993 -20.1225 -0.1
- vertex 47.9233 -19.8512 -0.1
- vertex 47.9987 -20.2887 -0.1
+ vertex 47.9993 -20.1225 -0.2
+ vertex 47.9233 -19.8512 -0.2
+ vertex 47.9987 -20.2887 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.845 -19.7221 -0.1
- vertex 47.9987 -20.2887 -0.1
- vertex 47.9233 -19.8512 -0.1
+ vertex 47.845 -19.7221 -0.2
+ vertex 47.9987 -20.2887 -0.2
+ vertex 47.9233 -19.8512 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.9987 -20.2887 -0.1
- vertex 47.845 -19.7221 -0.1
- vertex 47.9737 -20.4912 -0.1
+ vertex 47.9987 -20.2887 -0.2
+ vertex 47.845 -19.7221 -0.2
+ vertex 47.9737 -20.4912 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.7384 -19.5813 -0.1
- vertex 47.9737 -20.4912 -0.1
- vertex 47.845 -19.7221 -0.1
+ vertex 47.7384 -19.5813 -0.2
+ vertex 47.9737 -20.4912 -0.2
+ vertex 47.845 -19.7221 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.044 -19.1833 -0.1
- vertex 47.9737 -20.4912 -0.1
- vertex 47.7384 -19.5813 -0.1
+ vertex 47.044 -19.1833 -0.2
+ vertex 47.9737 -20.4912 -0.2
+ vertex 47.7384 -19.5813 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 46.8289 -19.1548 -0.1
- vertex 47.9737 -20.4912 -0.1
- vertex 47.044 -19.1833 -0.1
+ vertex 46.8289 -19.1548 -0.2
+ vertex 47.9737 -20.4912 -0.2
+ vertex 47.044 -19.1833 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.2257 -19.2263 -0.1
- vertex 47.7384 -19.5813 -0.1
- vertex 47.6302 -19.4614 -0.1
+ vertex 47.2257 -19.2263 -0.2
+ vertex 47.7384 -19.5813 -0.2
+ vertex 47.6302 -19.4614 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 46.274 -19.1343 -0.1
- vertex 47.8542 -21.0531 -0.1
- vertex 46.8289 -19.1548 -0.1
+ vertex 46.274 -19.1343 -0.2
+ vertex 47.8542 -21.0531 -0.2
+ vertex 46.8289 -19.1548 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.2257 -19.2263 -0.1
- vertex 47.6302 -19.4614 -0.1
- vertex 47.5127 -19.3635 -0.1
+ vertex 47.2257 -19.2263 -0.2
+ vertex 47.6302 -19.4614 -0.2
+ vertex 47.5127 -19.3635 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.2257 -19.2263 -0.1
- vertex 47.5127 -19.3635 -0.1
- vertex 47.3799 -19.2858 -0.1
+ vertex 47.2257 -19.2263 -0.2
+ vertex 47.5127 -19.3635 -0.2
+ vertex 47.3799 -19.2858 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.9737 -20.4912 -0.1
- vertex 46.8289 -19.1548 -0.1
- vertex 47.8542 -21.0531 -0.1
+ vertex 47.9737 -20.4912 -0.2
+ vertex 46.8289 -19.1548 -0.2
+ vertex 47.8542 -21.0531 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.7384 -19.5813 -0.1
- vertex 47.2257 -19.2263 -0.1
- vertex 47.044 -19.1833 -0.1
+ vertex 47.7384 -19.5813 -0.2
+ vertex 47.2257 -19.2263 -0.2
+ vertex 47.044 -19.1833 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.8542 -21.0531 -0.1
- vertex 46.274 -19.1343 -0.1
- vertex 47.7155 -21.5429 -0.1
+ vertex 47.8542 -21.0531 -0.2
+ vertex 46.274 -19.1343 -0.2
+ vertex 47.7155 -21.5429 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 45.8151 -19.1475 -0.1
- vertex 47.7155 -21.5429 -0.1
- vertex 46.274 -19.1343 -0.1
+ vertex 45.8151 -19.1475 -0.2
+ vertex 47.7155 -21.5429 -0.2
+ vertex 46.274 -19.1343 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.7155 -21.5429 -0.1
- vertex 45.8151 -19.1475 -0.1
- vertex 47.5422 -21.9981 -0.1
+ vertex 47.7155 -21.5429 -0.2
+ vertex 45.8151 -19.1475 -0.2
+ vertex 47.5422 -21.9981 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 45.391 -19.1898 -0.1
- vertex 47.5422 -21.9981 -0.1
- vertex 45.8151 -19.1475 -0.1
+ vertex 45.391 -19.1898 -0.2
+ vertex 47.5422 -21.9981 -0.2
+ vertex 45.8151 -19.1475 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.5422 -21.9981 -0.1
- vertex 45.391 -19.1898 -0.1
- vertex 47.3383 -22.4165 -0.1
+ vertex 47.5422 -21.9981 -0.2
+ vertex 45.391 -19.1898 -0.2
+ vertex 47.3383 -22.4165 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 44.9905 -19.265 -0.1
- vertex 47.3383 -22.4165 -0.1
- vertex 45.391 -19.1898 -0.1
+ vertex 44.9905 -19.265 -0.2
+ vertex 47.3383 -22.4165 -0.2
+ vertex 45.391 -19.1898 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 44.6026 -19.3768 -0.1
- vertex 47.3383 -22.4165 -0.1
- vertex 44.9905 -19.265 -0.1
+ vertex 44.6026 -19.3768 -0.2
+ vertex 47.3383 -22.4165 -0.2
+ vertex 44.9905 -19.265 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.3383 -22.4165 -0.1
- vertex 44.6026 -19.3768 -0.1
- vertex 47.1074 -22.796 -0.1
+ vertex 47.3383 -22.4165 -0.2
+ vertex 44.6026 -19.3768 -0.2
+ vertex 47.1074 -22.796 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 44.2162 -19.5289 -0.1
- vertex 47.1074 -22.796 -0.1
- vertex 44.6026 -19.3768 -0.1
+ vertex 44.2162 -19.5289 -0.2
+ vertex 47.1074 -22.796 -0.2
+ vertex 44.6026 -19.3768 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 47.1074 -22.796 -0.1
- vertex 44.2162 -19.5289 -0.1
- vertex 46.8534 -23.1343 -0.1
+ vertex 47.1074 -22.796 -0.2
+ vertex 44.2162 -19.5289 -0.2
+ vertex 46.8534 -23.1343 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 43.3873 -23.2523 -0.1
- vertex 46.8534 -23.1343 -0.1
- vertex 44.2162 -19.5289 -0.1
+ vertex 43.3873 -23.2523 -0.2
+ vertex 46.8534 -23.1343 -0.2
+ vertex 44.2162 -19.5289 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 46.8534 -23.1343 -0.1
- vertex 43.3873 -23.2523 -0.1
- vertex 46.5801 -23.4293 -0.1
+ vertex 46.8534 -23.1343 -0.2
+ vertex 43.3873 -23.2523 -0.2
+ vertex 46.5801 -23.4293 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 46.5801 -23.4293 -0.1
- vertex 43.3873 -23.2523 -0.1
- vertex 46.2914 -23.6786 -0.1
+ vertex 46.5801 -23.4293 -0.2
+ vertex 43.3873 -23.2523 -0.2
+ vertex 46.2914 -23.6786 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 43.6239 -23.5069 -0.1
- vertex 46.2914 -23.6786 -0.1
- vertex 43.3873 -23.2523 -0.1
+ vertex 43.6239 -23.5069 -0.2
+ vertex 46.2914 -23.6786 -0.2
+ vertex 43.3873 -23.2523 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 46.2914 -23.6786 -0.1
- vertex 43.6239 -23.5069 -0.1
- vertex 45.9909 -23.8802 -0.1
+ vertex 46.2914 -23.6786 -0.2
+ vertex 43.6239 -23.5069 -0.2
+ vertex 45.9909 -23.8802 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 43.8807 -23.7673 -0.1
- vertex 45.3703 -24.1311 -0.1
- vertex 43.6239 -23.5069 -0.1
+ vertex 43.8807 -23.7673 -0.2
+ vertex 45.3703 -24.1311 -0.2
+ vertex 43.6239 -23.5069 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 45.3703 -24.1311 -0.1
- vertex 43.8807 -23.7673 -0.1
- vertex 45.0576 -24.176 -0.1
+ vertex 45.3703 -24.1311 -0.2
+ vertex 43.8807 -23.7673 -0.2
+ vertex 45.0576 -24.176 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 45.9909 -23.8802 -0.1
- vertex 43.6239 -23.5069 -0.1
- vertex 45.6826 -24.0317 -0.1
+ vertex 45.9909 -23.8802 -0.2
+ vertex 43.6239 -23.5069 -0.2
+ vertex 45.6826 -24.0317 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 45.0576 -24.176 -0.1
- vertex 43.8807 -23.7673 -0.1
- vertex 44.7485 -24.1643 -0.1
+ vertex 45.0576 -24.176 -0.2
+ vertex 43.8807 -23.7673 -0.2
+ vertex 44.7485 -24.1643 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 44.7485 -24.1643 -0.1
- vertex 43.8807 -23.7673 -0.1
- vertex 44.4468 -24.0937 -0.1
+ vertex 44.7485 -24.1643 -0.2
+ vertex 43.8807 -23.7673 -0.2
+ vertex 44.4468 -24.0937 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 43.3873 -23.2523 -0.1
- vertex 44.2162 -19.5289 -0.1
- vertex 43.8201 -19.7253 -0.1
+ vertex 43.3873 -23.2523 -0.2
+ vertex 44.2162 -19.5289 -0.2
+ vertex 43.8201 -19.7253 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 44.4468 -24.0937 -0.1
- vertex 43.8807 -23.7673 -0.1
- vertex 44.1563 -23.9621 -0.1
+ vertex 44.4468 -24.0937 -0.2
+ vertex 43.8807 -23.7673 -0.2
+ vertex 44.1563 -23.9621 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 43.3873 -23.2523 -0.1
- vertex 43.8201 -19.7253 -0.1
- vertex 43.4033 -19.9696 -0.1
+ vertex 43.3873 -23.2523 -0.2
+ vertex 43.8201 -19.7253 -0.2
+ vertex 43.4033 -19.9696 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 45.6826 -24.0317 -0.1
- vertex 43.6239 -23.5069 -0.1
- vertex 45.3703 -24.1311 -0.1
+ vertex 45.6826 -24.0317 -0.2
+ vertex 43.6239 -23.5069 -0.2
+ vertex 45.3703 -24.1311 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 43.4033 -19.9696 -0.1
- vertex 43.1493 -23.0437 -0.1
- vertex 43.3873 -23.2523 -0.1
+ vertex 43.4033 -19.9696 -0.2
+ vertex 43.1493 -23.0437 -0.2
+ vertex 43.3873 -23.2523 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 42.9547 -20.2657 -0.1
- vertex 43.1493 -23.0437 -0.1
- vertex 43.4033 -19.9696 -0.1
+ vertex 42.9547 -20.2657 -0.2
+ vertex 43.1493 -23.0437 -0.2
+ vertex 43.4033 -19.9696 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.9547 -20.2657 -0.1
- vertex 42.9376 -22.9028 -0.1
- vertex 43.1493 -23.0437 -0.1
+ vertex 42.9547 -20.2657 -0.2
+ vertex 42.9376 -22.9028 -0.2
+ vertex 43.1493 -23.0437 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.9547 -20.2657 -0.1
- vertex 42.8503 -22.8644 -0.1
- vertex 42.9376 -22.9028 -0.1
+ vertex 42.9547 -20.2657 -0.2
+ vertex 42.8503 -22.8644 -0.2
+ vertex 42.9376 -22.9028 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 42.3117 -20.6924 -0.1
- vertex 42.8503 -22.8644 -0.1
- vertex 42.9547 -20.2657 -0.1
+ vertex 42.3117 -20.6924 -0.2
+ vertex 42.8503 -22.8644 -0.2
+ vertex 42.9547 -20.2657 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.8503 -22.8644 -0.1
- vertex 42.3117 -20.6924 -0.1
- vertex 42.7799 -22.851 -0.1
+ vertex 42.8503 -22.8644 -0.2
+ vertex 42.3117 -20.6924 -0.2
+ vertex 42.7799 -22.851 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 42.1116 -20.8028 -0.1
- vertex 42.7799 -22.851 -0.1
- vertex 42.3117 -20.6924 -0.1
+ vertex 42.1116 -20.8028 -0.2
+ vertex 42.7799 -22.851 -0.2
+ vertex 42.3117 -20.6924 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.7799 -22.851 -0.1
- vertex 42.1116 -20.8028 -0.1
- vertex 42.6968 -22.8729 -0.1
+ vertex 42.7799 -22.851 -0.2
+ vertex 42.1116 -20.8028 -0.2
+ vertex 42.6968 -22.8729 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 41.9827 -20.8453 -0.1
- vertex 42.6968 -22.8729 -0.1
- vertex 42.1116 -20.8028 -0.1
+ vertex 41.9827 -20.8453 -0.2
+ vertex 42.6968 -22.8729 -0.2
+ vertex 42.1116 -20.8028 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.6968 -22.8729 -0.1
- vertex 41.9827 -20.8453 -0.1
- vertex 42.5728 -22.9356 -0.1
+ vertex 42.6968 -22.8729 -0.2
+ vertex 41.9827 -20.8453 -0.2
+ vertex 42.5728 -22.9356 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.9427 -20.8413 -0.1
- vertex 42.5728 -22.9356 -0.1
- vertex 41.9827 -20.8453 -0.1
+ vertex 41.9427 -20.8413 -0.2
+ vertex 42.5728 -22.9356 -0.2
+ vertex 41.9827 -20.8453 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.5728 -22.9356 -0.1
- vertex 41.9427 -20.8413 -0.1
- vertex 42.2267 -23.1657 -0.1
+ vertex 42.5728 -22.9356 -0.2
+ vertex 41.9427 -20.8413 -0.2
+ vertex 42.2267 -23.1657 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.7898 -23.5063 -0.1
- vertex 41.9427 -20.8413 -0.1
- vertex 41.9179 -20.8207 -0.1
+ vertex 41.7898 -23.5063 -0.2
+ vertex 41.9427 -20.8413 -0.2
+ vertex 41.9179 -20.8207 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.9427 -20.8413 -0.1
- vertex 41.7898 -23.5063 -0.1
- vertex 42.2267 -23.1657 -0.1
+ vertex 41.9427 -20.8413 -0.2
+ vertex 41.7898 -23.5063 -0.2
+ vertex 42.2267 -23.1657 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 39.5298 -19.7361 -0.1
- vertex 41.9179 -20.8207 -0.1
- vertex 41.9099 -20.7296 -0.1
+ vertex 39.5298 -19.7361 -0.2
+ vertex 41.9179 -20.8207 -0.2
+ vertex 41.9099 -20.7296 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.0356 -20.3507 -0.1
- vertex 41.156 -19.2119 -0.1
- vertex 41.9515 -20.5727 -0.1
+ vertex 42.0356 -20.3507 -0.2
+ vertex 41.156 -19.2119 -0.2
+ vertex 41.9515 -20.5727 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.1595 -19.6516 -0.1
- vertex 41.7426 -19.1572 -0.1
- vertex 41.5436 -19.1343 -0.1
+ vertex 42.1595 -19.6516 -0.2
+ vertex 41.7426 -19.1572 -0.2
+ vertex 41.5436 -19.1343 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 42.1595 -19.6516 -0.1
- vertex 41.5436 -19.1343 -0.1
- vertex 41.3957 -19.1543 -0.1
+ vertex 42.1595 -19.6516 -0.2
+ vertex 41.5436 -19.1343 -0.2
+ vertex 41.3957 -19.1543 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 40.4513 -19.4233 -0.1
- vertex 41.9515 -20.5727 -0.1
- vertex 41.156 -19.2119 -0.1
+ vertex 40.4513 -19.4233 -0.2
+ vertex 41.9515 -20.5727 -0.2
+ vertex 41.156 -19.2119 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.9515 -20.5727 -0.1
- vertex 40.4513 -19.4233 -0.1
- vertex 41.9099 -20.7296 -0.1
+ vertex 41.9515 -20.5727 -0.2
+ vertex 40.4513 -19.4233 -0.2
+ vertex 41.9099 -20.7296 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 39.5298 -19.7361 -0.1
- vertex 41.9099 -20.7296 -0.1
- vertex 40.4513 -19.4233 -0.1
+ vertex 39.5298 -19.7361 -0.2
+ vertex 41.9099 -20.7296 -0.2
+ vertex 40.4513 -19.4233 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.9179 -20.8207 -0.1
- vertex 39.5298 -19.7361 -0.1
- vertex 41.3103 -23.9223 -0.1
+ vertex 41.9179 -20.8207 -0.2
+ vertex 39.5298 -19.7361 -0.2
+ vertex 41.3103 -23.9223 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.9179 -20.8207 -0.1
- vertex 41.3103 -23.9223 -0.1
- vertex 41.7898 -23.5063 -0.1
+ vertex 41.9179 -20.8207 -0.2
+ vertex 41.3103 -23.9223 -0.2
+ vertex 41.7898 -23.5063 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 38.4916 -20.1181 -0.1
- vertex 41.3103 -23.9223 -0.1
- vertex 39.5298 -19.7361 -0.1
+ vertex 38.4916 -20.1181 -0.2
+ vertex 41.3103 -23.9223 -0.2
+ vertex 39.5298 -19.7361 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 41.3103 -23.9223 -0.1
- vertex 38.4916 -20.1181 -0.1
- vertex 40.922 -24.2835 -0.1
+ vertex 41.3103 -23.9223 -0.2
+ vertex 38.4916 -20.1181 -0.2
+ vertex 40.922 -24.2835 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 40.922 -24.2835 -0.1
- vertex 38.4916 -20.1181 -0.1
- vertex 40.604 -24.6171 -0.1
+ vertex 40.922 -24.2835 -0.2
+ vertex 38.4916 -20.1181 -0.2
+ vertex 40.604 -24.6171 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 36.3539 -23.0402 -0.1
- vertex 40.604 -24.6171 -0.1
- vertex 38.4916 -20.1181 -0.1
+ vertex 36.3539 -23.0402 -0.2
+ vertex 40.604 -24.6171 -0.2
+ vertex 38.4916 -20.1181 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 36.3671 -23.1585 -0.1
- vertex 40.604 -24.6171 -0.1
- vertex 36.3539 -23.0402 -0.1
+ vertex 36.3671 -23.1585 -0.2
+ vertex 40.604 -24.6171 -0.2
+ vertex 36.3539 -23.0402 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 40.604 -24.6171 -0.1
- vertex 36.362 -23.3104 -0.1
- vertex 40.3218 -24.9877 -0.1
+ vertex 40.604 -24.6171 -0.2
+ vertex 36.362 -23.3104 -0.2
+ vertex 40.3218 -24.9877 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 36.2977 -23.7121 -0.1
- vertex 40.3218 -24.9877 -0.1
- vertex 36.362 -23.3104 -0.1
+ vertex 36.2977 -23.7121 -0.2
+ vertex 40.3218 -24.9877 -0.2
+ vertex 36.362 -23.3104 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 40.3218 -24.9877 -0.1
- vertex 36.2977 -23.7121 -0.1
- vertex 40.0406 -25.46 -0.1
+ vertex 40.3218 -24.9877 -0.2
+ vertex 36.2977 -23.7121 -0.2
+ vertex 40.0406 -25.46 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.3539 -23.0402 -0.1
- vertex 38.4916 -20.1181 -0.1
- vertex 37.4642 -20.5001 -0.1
+ vertex 36.3539 -23.0402 -0.2
+ vertex 38.4916 -20.1181 -0.2
+ vertex 37.4642 -20.5001 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 36.1622 -24.2394 -0.1
- vertex 40.0406 -25.46 -0.1
- vertex 36.2977 -23.7121 -0.1
+ vertex 36.1622 -24.2394 -0.2
+ vertex 40.0406 -25.46 -0.2
+ vertex 36.2977 -23.7121 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 40.0406 -25.46 -0.1
- vertex 36.1622 -24.2394 -0.1
- vertex 39.7256 -26.0988 -0.1
+ vertex 40.0406 -25.46 -0.2
+ vertex 36.1622 -24.2394 -0.2
+ vertex 39.7256 -26.0988 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.3224 -22.9562 -0.1
- vertex 37.4642 -20.5001 -0.1
- vertex 36.5724 -20.813 -0.1
+ vertex 36.3224 -22.9562 -0.2
+ vertex 37.4642 -20.5001 -0.2
+ vertex 36.5724 -20.813 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 35.957 -24.8864 -0.1
- vertex 39.7256 -26.0988 -0.1
- vertex 36.1622 -24.2394 -0.1
+ vertex 35.957 -24.8864 -0.2
+ vertex 39.7256 -26.0988 -0.2
+ vertex 36.1622 -24.2394 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 39.7256 -26.0988 -0.1
- vertex 35.957 -24.8864 -0.1
- vertex 39.342 -26.9688 -0.1
+ vertex 39.7256 -26.0988 -0.2
+ vertex 35.957 -24.8864 -0.2
+ vertex 39.342 -26.9688 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 36.362 -23.3104 -0.1
- vertex 40.604 -24.6171 -0.1
- vertex 36.3671 -23.1585 -0.1
+ vertex 36.362 -23.3104 -0.2
+ vertex 40.604 -24.6171 -0.2
+ vertex 36.3671 -23.1585 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.4642 -20.5001 -0.1
- vertex 36.3224 -22.9562 -0.1
- vertex 36.3539 -23.0402 -0.1
+ vertex 37.4642 -20.5001 -0.2
+ vertex 36.3224 -22.9562 -0.2
+ vertex 36.3539 -23.0402 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.5724 -20.813 -0.1
- vertex 36.2723 -22.9073 -0.1
- vertex 36.3224 -22.9562 -0.1
+ vertex 36.5724 -20.813 -0.2
+ vertex 36.2723 -22.9073 -0.2
+ vertex 36.3224 -22.9562 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 35.9118 -21.0243 -0.1
- vertex 36.2723 -22.9073 -0.1
- vertex 36.5724 -20.813 -0.1
+ vertex 35.9118 -21.0243 -0.2
+ vertex 36.2723 -22.9073 -0.2
+ vertex 36.5724 -20.813 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.2723 -22.9073 -0.1
- vertex 35.9118 -21.0243 -0.1
- vertex 36.2034 -22.8943 -0.1
+ vertex 36.2723 -22.9073 -0.2
+ vertex 35.9118 -21.0243 -0.2
+ vertex 36.2034 -22.8943 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 35.5778 -21.102 -0.1
- vertex 36.2034 -22.8943 -0.1
- vertex 35.9118 -21.0243 -0.1
+ vertex 35.5778 -21.102 -0.2
+ vertex 36.2034 -22.8943 -0.2
+ vertex 35.9118 -21.0243 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.2034 -22.8943 -0.1
- vertex 35.5778 -21.102 -0.1
- vertex 36.1157 -22.9178 -0.1
+ vertex 36.2034 -22.8943 -0.2
+ vertex 35.5778 -21.102 -0.2
+ vertex 36.1157 -22.9178 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.1157 -22.9178 -0.1
- vertex 35.5778 -21.102 -0.1
- vertex 35.9442 -22.9618 -0.1
+ vertex 36.1157 -22.9178 -0.2
+ vertex 35.5778 -21.102 -0.2
+ vertex 35.9442 -22.9618 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.9442 -22.9618 -0.1
- vertex 35.5778 -21.102 -0.1
- vertex 35.7166 -22.9783 -0.1
+ vertex 35.9442 -22.9618 -0.2
+ vertex 35.5778 -21.102 -0.2
+ vertex 35.7166 -22.9783 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 35.0706 -21.3217 -0.1
- vertex 35.7166 -22.9783 -0.1
- vertex 35.5778 -21.102 -0.1
+ vertex 35.0706 -21.3217 -0.2
+ vertex 35.7166 -22.9783 -0.2
+ vertex 35.5778 -21.102 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.2304 -21.2043 -0.1
- vertex 35.5778 -21.102 -0.1
- vertex 35.4013 -21.1287 -0.1
+ vertex 35.2304 -21.2043 -0.2
+ vertex 35.5778 -21.102 -0.2
+ vertex 35.4013 -21.1287 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.5778 -21.102 -0.1
- vertex 35.2304 -21.2043 -0.1
- vertex 35.0706 -21.3217 -0.1
+ vertex 35.5778 -21.102 -0.2
+ vertex 35.2304 -21.2043 -0.2
+ vertex 35.0706 -21.3217 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 34.9274 -21.474 -0.1
- vertex 35.7166 -22.9783 -0.1
- vertex 35.0706 -21.3217 -0.1
+ vertex 34.9274 -21.474 -0.2
+ vertex 35.7166 -22.9783 -0.2
+ vertex 35.0706 -21.3217 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.7166 -22.9783 -0.1
- vertex 34.9274 -21.474 -0.1
- vertex 35.4626 -22.9668 -0.1
+ vertex 35.7166 -22.9783 -0.2
+ vertex 34.9274 -21.474 -0.2
+ vertex 35.4626 -22.9668 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 34.8063 -21.6543 -0.1
- vertex 35.4626 -22.9668 -0.1
- vertex 34.9274 -21.474 -0.1
+ vertex 34.8063 -21.6543 -0.2
+ vertex 35.4626 -22.9668 -0.2
+ vertex 34.9274 -21.474 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 34.713 -21.8554 -0.1
- vertex 35.4626 -22.9668 -0.1
- vertex 34.8063 -21.6543 -0.1
+ vertex 34.713 -21.8554 -0.2
+ vertex 35.4626 -22.9668 -0.2
+ vertex 34.8063 -21.6543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.4626 -22.9668 -0.1
- vertex 34.713 -21.8554 -0.1
- vertex 35.2118 -22.9271 -0.1
+ vertex 35.4626 -22.9668 -0.2
+ vertex 34.713 -21.8554 -0.2
+ vertex 35.2118 -22.9271 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 34.653 -22.0706 -0.1
- vertex 35.2118 -22.9271 -0.1
- vertex 34.713 -21.8554 -0.1
+ vertex 34.653 -22.0706 -0.2
+ vertex 35.2118 -22.9271 -0.2
+ vertex 34.713 -21.8554 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 34.6318 -22.2927 -0.1
- vertex 35.2118 -22.9271 -0.1
- vertex 34.653 -22.0706 -0.1
+ vertex 34.6318 -22.2927 -0.2
+ vertex 35.2118 -22.9271 -0.2
+ vertex 34.653 -22.0706 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.2118 -22.9271 -0.1
- vertex 34.6318 -22.2927 -0.1
- vertex 34.9345 -22.8399 -0.1
+ vertex 35.2118 -22.9271 -0.2
+ vertex 34.6318 -22.2927 -0.2
+ vertex 34.9345 -22.8399 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 34.6385 -22.4262 -0.1
- vertex 34.9345 -22.8399 -0.1
- vertex 34.6318 -22.2927 -0.1
+ vertex 34.6385 -22.4262 -0.2
+ vertex 34.9345 -22.8399 -0.2
+ vertex 34.6318 -22.2927 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 34.6602 -22.54 -0.1
- vertex 34.9345 -22.8399 -0.1
- vertex 34.6385 -22.4262 -0.1
+ vertex 34.6602 -22.54 -0.2
+ vertex 34.9345 -22.8399 -0.2
+ vertex 34.6385 -22.4262 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 34.9345 -22.8399 -0.1
- vertex 34.6602 -22.54 -0.1
- vertex 34.8338 -22.7839 -0.1
+ vertex 34.9345 -22.8399 -0.2
+ vertex 34.6602 -22.54 -0.2
+ vertex 34.8338 -22.7839 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 34.8338 -22.7839 -0.1
- vertex 34.6602 -22.54 -0.1
- vertex 34.7558 -22.7166 -0.1
+ vertex 34.8338 -22.7839 -0.2
+ vertex 34.6602 -22.54 -0.2
+ vertex 34.7558 -22.7166 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 34.7558 -22.7166 -0.1
- vertex 34.6602 -22.54 -0.1
- vertex 34.6986 -22.636 -0.1
+ vertex 34.7558 -22.7166 -0.2
+ vertex 34.6602 -22.54 -0.2
+ vertex 34.6986 -22.636 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.6954 -36.1853 -0.1
- vertex 38.1248 -36.8464 -0.1
- vertex 38.119 -36.6694 -0.1
+ vertex 37.6954 -36.1853 -0.2
+ vertex 38.1248 -36.8464 -0.2
+ vertex 38.119 -36.6694 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.8576 -36.2498 -0.1
- vertex 38.119 -36.6694 -0.1
- vertex 38.0969 -36.5276 -0.1
+ vertex 37.8576 -36.2498 -0.2
+ vertex 38.119 -36.6694 -0.2
+ vertex 38.0969 -36.5276 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.203 -36.0604 -0.1
- vertex 38.1248 -36.8464 -0.1
- vertex 37.6954 -36.1853 -0.1
+ vertex 37.203 -36.0604 -0.2
+ vertex 38.1248 -36.8464 -0.2
+ vertex 37.6954 -36.1853 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.9736 -36.3241 -0.1
- vertex 38.0969 -36.5276 -0.1
- vertex 38.0509 -36.4146 -0.1
+ vertex 37.9736 -36.3241 -0.2
+ vertex 38.0969 -36.5276 -0.2
+ vertex 38.0509 -36.4146 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.1248 -36.8464 -0.1
- vertex 37.203 -36.0604 -0.1
- vertex 38.103 -37.2562 -0.1
+ vertex 38.1248 -36.8464 -0.2
+ vertex 37.203 -36.0604 -0.2
+ vertex 38.103 -37.2562 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.0969 -36.5276 -0.1
- vertex 37.9736 -36.3241 -0.1
- vertex 37.8576 -36.2498 -0.1
+ vertex 38.0969 -36.5276 -0.2
+ vertex 37.9736 -36.3241 -0.2
+ vertex 37.8576 -36.2498 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.119 -36.6694 -0.1
- vertex 37.8576 -36.2498 -0.1
- vertex 37.6954 -36.1853 -0.1
+ vertex 38.119 -36.6694 -0.2
+ vertex 37.8576 -36.2498 -0.2
+ vertex 37.6954 -36.1853 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 37.3927 -37.9628 -0.1
- vertex 38.103 -37.2562 -0.1
- vertex 37.203 -36.0604 -0.1
+ vertex 37.3927 -37.9628 -0.2
+ vertex 38.103 -37.2562 -0.2
+ vertex 37.203 -36.0604 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 37.7849 -37.8018 -0.1
- vertex 38.0668 -37.4245 -0.1
- vertex 37.6132 -37.8903 -0.1
+ vertex 37.7849 -37.8018 -0.2
+ vertex 38.0668 -37.4245 -0.2
+ vertex 37.6132 -37.8903 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.0668 -37.4245 -0.1
- vertex 37.7849 -37.8018 -0.1
- vertex 38.0057 -37.5705 -0.1
+ vertex 38.0668 -37.4245 -0.2
+ vertex 37.7849 -37.8018 -0.2
+ vertex 38.0057 -37.5705 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.0057 -37.5705 -0.1
- vertex 37.7849 -37.8018 -0.1
- vertex 37.9137 -37.6957 -0.1
+ vertex 38.0057 -37.5705 -0.2
+ vertex 37.7849 -37.8018 -0.2
+ vertex 37.9137 -37.6957 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 37.6132 -37.8903 -0.1
- vertex 38.103 -37.2562 -0.1
- vertex 37.3927 -37.9628 -0.1
+ vertex 37.6132 -37.8903 -0.2
+ vertex 38.103 -37.2562 -0.2
+ vertex 37.3927 -37.9628 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 38.103 -37.2562 -0.1
- vertex 37.6132 -37.8903 -0.1
- vertex 38.0668 -37.4245 -0.1
+ vertex 38.103 -37.2562 -0.2
+ vertex 37.6132 -37.8903 -0.2
+ vertex 38.0668 -37.4245 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.203 -36.0604 -0.1
- vertex 37.1174 -38.0208 -0.1
- vertex 37.3927 -37.9628 -0.1
+ vertex 37.203 -36.0604 -0.2
+ vertex 37.1174 -38.0208 -0.2
+ vertex 37.3927 -37.9628 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.203 -36.0604 -0.1
- vertex 36.7812 -38.066 -0.1
- vertex 37.1174 -38.0208 -0.1
+ vertex 37.203 -36.0604 -0.2
+ vertex 36.7812 -38.066 -0.2
+ vertex 37.1174 -38.0208 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.6812 -35.9318 -0.1
- vertex 36.7812 -38.066 -0.1
- vertex 37.203 -36.0604 -0.1
+ vertex 36.6812 -35.9318 -0.2
+ vertex 36.7812 -38.066 -0.2
+ vertex 37.203 -36.0604 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.9024 -38.1241 -0.1
- vertex 36.6812 -35.9318 -0.1
- vertex 36.5187 -35.8653 -0.1
+ vertex 35.9024 -38.1241 -0.2
+ vertex 36.6812 -35.9318 -0.2
+ vertex 36.5187 -35.8653 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 35.9024 -38.1241 -0.1
- vertex 36.5187 -35.8653 -0.1
- vertex 36.4089 -35.7834 -0.1
+ vertex 35.9024 -38.1241 -0.2
+ vertex 36.5187 -35.8653 -0.2
+ vertex 36.4089 -35.7834 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 34.7085 -38.1497 -0.1
- vertex 36.4089 -35.7834 -0.1
- vertex 36.3422 -35.6758 -0.1
+ vertex 34.7085 -38.1497 -0.2
+ vertex 36.4089 -35.7834 -0.2
+ vertex 36.3422 -35.6758 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 34.7085 -38.1497 -0.1
- vertex 36.3422 -35.6758 -0.1
- vertex 36.3089 -35.532 -0.1
+ vertex 34.7085 -38.1497 -0.2
+ vertex 36.3422 -35.6758 -0.2
+ vertex 36.3089 -35.532 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 37.444 -31.6395 -0.1
- vertex 33.8561 -30.1753 -0.1
- vertex 36.8389 -33.2656 -0.1
+ vertex 37.444 -31.6395 -0.2
+ vertex 33.8561 -30.1753 -0.2
+ vertex 36.8389 -33.2656 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 33.1139 -32.0001 -0.1
- vertex 36.8389 -33.2656 -0.1
- vertex 33.8561 -30.1753 -0.1
+ vertex 33.1139 -32.0001 -0.2
+ vertex 36.8389 -33.2656 -0.2
+ vertex 33.8561 -30.1753 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.6812 -35.9318 -0.1
- vertex 35.9024 -38.1241 -0.1
- vertex 36.7812 -38.066 -0.1
+ vertex 36.6812 -35.9318 -0.2
+ vertex 35.9024 -38.1241 -0.2
+ vertex 36.7812 -38.066 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 32.0766 -34.3595 -0.1
- vertex 36.3089 -35.532 -0.1
- vertex 36.2992 -35.3418 -0.1
+ vertex 32.0766 -34.3595 -0.2
+ vertex 36.3089 -35.532 -0.2
+ vertex 36.2992 -35.3418 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.8389 -33.2656 -0.1
- vertex 33.1139 -32.0001 -0.1
- vertex 36.4479 -34.448 -0.1
+ vertex 36.8389 -33.2656 -0.2
+ vertex 33.1139 -32.0001 -0.2
+ vertex 36.4479 -34.448 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 32.5373 -33.371 -0.1
- vertex 36.4479 -34.448 -0.1
- vertex 33.1139 -32.0001 -0.1
+ vertex 32.5373 -33.371 -0.2
+ vertex 36.4479 -34.448 -0.2
+ vertex 33.1139 -32.0001 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.4479 -34.448 -0.1
- vertex 32.5373 -33.371 -0.1
- vertex 36.3428 -34.844 -0.1
+ vertex 36.4479 -34.448 -0.2
+ vertex 32.5373 -33.371 -0.2
+ vertex 36.3428 -34.844 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.3428 -34.844 -0.1
- vertex 32.5373 -33.371 -0.1
- vertex 36.3035 -35.0946 -0.1
+ vertex 36.3428 -34.844 -0.2
+ vertex 32.5373 -33.371 -0.2
+ vertex 36.3035 -35.0946 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 32.0766 -34.3595 -0.1
- vertex 36.3035 -35.0946 -0.1
- vertex 32.5373 -33.371 -0.1
+ vertex 32.0766 -34.3595 -0.2
+ vertex 36.3035 -35.0946 -0.2
+ vertex 32.5373 -33.371 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.3035 -35.0946 -0.1
- vertex 32.0766 -34.3595 -0.1
- vertex 36.2992 -35.3418 -0.1
+ vertex 36.3035 -35.0946 -0.2
+ vertex 32.0766 -34.3595 -0.2
+ vertex 36.2992 -35.3418 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.4089 -35.7834 -0.1
- vertex 34.7085 -38.1497 -0.1
- vertex 35.9024 -38.1241 -0.1
+ vertex 36.4089 -35.7834 -0.2
+ vertex 34.7085 -38.1497 -0.2
+ vertex 35.9024 -38.1241 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.3089 -35.532 -0.1
- vertex 32.0766 -34.3595 -0.1
- vertex 31.8743 -34.7329 -0.1
+ vertex 36.3089 -35.532 -0.2
+ vertex 32.0766 -34.3595 -0.2
+ vertex 31.8743 -34.7329 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 36.3089 -35.532 -0.1
- vertex 31.8743 -34.7329 -0.1
- vertex 34.7085 -38.1497 -0.1
+ vertex 36.3089 -35.532 -0.2
+ vertex 31.8743 -34.7329 -0.2
+ vertex 34.7085 -38.1497 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 34.7085 -38.1497 -0.1
- vertex 31.8743 -34.7329 -0.1
- vertex 33.1514 -38.1555 -0.1
+ vertex 34.7085 -38.1497 -0.2
+ vertex 31.8743 -34.7329 -0.2
+ vertex 33.1514 -38.1555 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 31.6824 -35.0376 -0.1
- vertex 33.1514 -38.1555 -0.1
- vertex 31.8743 -34.7329 -0.1
+ vertex 31.6824 -35.0376 -0.2
+ vertex 33.1514 -38.1555 -0.2
+ vertex 31.8743 -34.7329 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 31.4948 -35.2825 -0.1
- vertex 33.1514 -38.1555 -0.1
- vertex 31.6824 -35.0376 -0.1
+ vertex 31.4948 -35.2825 -0.2
+ vertex 33.1514 -38.1555 -0.2
+ vertex 31.6824 -35.0376 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 31.3052 -35.4767 -0.1
- vertex 33.1514 -38.1555 -0.1
- vertex 31.4948 -35.2825 -0.1
+ vertex 31.3052 -35.4767 -0.2
+ vertex 33.1514 -38.1555 -0.2
+ vertex 31.4948 -35.2825 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 31.1075 -35.6291 -0.1
- vertex 33.1514 -38.1555 -0.1
- vertex 31.3052 -35.4767 -0.1
+ vertex 31.1075 -35.6291 -0.2
+ vertex 33.1514 -38.1555 -0.2
+ vertex 31.3052 -35.4767 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 33.1514 -38.1555 -0.1
- vertex 31.1075 -35.6291 -0.1
- vertex 31.1824 -38.1409 -0.1
+ vertex 33.1514 -38.1555 -0.2
+ vertex 31.1075 -35.6291 -0.2
+ vertex 31.1824 -38.1409 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 30.8955 -35.7486 -0.1
- vertex 31.1824 -38.1409 -0.1
- vertex 31.1075 -35.6291 -0.1
+ vertex 30.8955 -35.7486 -0.2
+ vertex 31.1824 -38.1409 -0.2
+ vertex 31.1075 -35.6291 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 30.6629 -35.8443 -0.1
- vertex 31.1824 -38.1409 -0.1
- vertex 30.8955 -35.7486 -0.1
+ vertex 30.6629 -35.8443 -0.2
+ vertex 31.1824 -38.1409 -0.2
+ vertex 30.8955 -35.7486 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 30.4037 -35.9251 -0.1
- vertex 31.1824 -38.1409 -0.1
- vertex 30.6629 -35.8443 -0.1
+ vertex 30.4037 -35.9251 -0.2
+ vertex 31.1824 -38.1409 -0.2
+ vertex 30.6629 -35.8443 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 30.4037 -35.9251 -0.1
- vertex 29.8192 -38.0948 -0.1
- vertex 31.1824 -38.1409 -0.1
+ vertex 30.4037 -35.9251 -0.2
+ vertex 29.8192 -38.0948 -0.2
+ vertex 31.1824 -38.1409 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 29.7804 -36.0779 -0.1
- vertex 29.8192 -38.0948 -0.1
- vertex 30.4037 -35.9251 -0.1
+ vertex 29.7804 -36.0779 -0.2
+ vertex 29.8192 -38.0948 -0.2
+ vertex 30.4037 -35.9251 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 29.5705 -36.1356 -0.1
- vertex 29.8192 -38.0948 -0.1
- vertex 29.7804 -36.0779 -0.1
+ vertex 29.5705 -36.1356 -0.2
+ vertex 29.8192 -38.0948 -0.2
+ vertex 29.7804 -36.0779 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 29.3757 -36.2065 -0.1
- vertex 29.8192 -38.0948 -0.1
- vertex 29.5705 -36.1356 -0.1
+ vertex 29.3757 -36.2065 -0.2
+ vertex 29.8192 -38.0948 -0.2
+ vertex 29.5705 -36.1356 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 29.1966 -36.2895 -0.1
- vertex 29.8192 -38.0948 -0.1
- vertex 29.3757 -36.2065 -0.1
+ vertex 29.1966 -36.2895 -0.2
+ vertex 29.8192 -38.0948 -0.2
+ vertex 29.3757 -36.2065 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.8192 -38.0948 -0.1
- vertex 29.1966 -36.2895 -0.1
- vertex 29.3448 -38.0588 -0.1
+ vertex 29.8192 -38.0948 -0.2
+ vertex 29.1966 -36.2895 -0.2
+ vertex 29.3448 -38.0588 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 29.034 -36.3831 -0.1
- vertex 29.3448 -38.0588 -0.1
- vertex 29.1966 -36.2895 -0.1
+ vertex 29.034 -36.3831 -0.2
+ vertex 29.3448 -38.0588 -0.2
+ vertex 29.1966 -36.2895 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.8888 -36.4863 -0.1
- vertex 29.3448 -38.0588 -0.1
- vertex 29.034 -36.3831 -0.1
+ vertex 28.8888 -36.4863 -0.2
+ vertex 29.3448 -38.0588 -0.2
+ vertex 29.034 -36.3831 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.7617 -36.5978 -0.1
- vertex 29.3448 -38.0588 -0.1
- vertex 28.8888 -36.4863 -0.1
+ vertex 28.7617 -36.5978 -0.2
+ vertex 29.3448 -38.0588 -0.2
+ vertex 28.8888 -36.4863 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.6534 -36.7163 -0.1
- vertex 29.3448 -38.0588 -0.1
- vertex 28.7617 -36.5978 -0.1
+ vertex 28.6534 -36.7163 -0.2
+ vertex 29.3448 -38.0588 -0.2
+ vertex 28.7617 -36.5978 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 29.3448 -38.0588 -0.1
- vertex 28.6534 -36.7163 -0.1
- vertex 28.9979 -38.0135 -0.1
+ vertex 29.3448 -38.0588 -0.2
+ vertex 28.6534 -36.7163 -0.2
+ vertex 28.9979 -38.0135 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.5648 -36.8405 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.6534 -36.7163 -0.1
+ vertex 28.5648 -36.8405 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.6534 -36.7163 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.4965 -36.9693 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.5648 -36.8405 -0.1
+ vertex 28.4965 -36.9693 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.5648 -36.8405 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.4495 -37.1014 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.4965 -36.9693 -0.1
+ vertex 28.4495 -37.1014 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.4965 -36.9693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 28.7706 -37.9584 -0.1
- vertex 28.5587 -37.7674 -0.1
- vertex 28.6548 -37.8931 -0.1
+ vertex 28.7706 -37.9584 -0.2
+ vertex 28.5587 -37.7674 -0.2
+ vertex 28.6548 -37.8931 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.4243 -37.2355 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.4495 -37.1014 -0.1
+ vertex 28.4243 -37.2355 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.4495 -37.1014 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 28.9979 -38.0135 -0.1
- vertex 28.5587 -37.7674 -0.1
- vertex 28.7706 -37.9584 -0.1
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.5587 -37.7674 -0.2
+ vertex 28.7706 -37.9584 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 28.4219 -37.3704 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.4243 -37.2355 -0.1
+ vertex 28.4219 -37.3704 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.4243 -37.2355 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 28.5587 -37.7674 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.4883 -37.6376 -0.1
+ vertex 28.5587 -37.7674 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.4883 -37.6376 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 28.4883 -37.6376 -0.1
- vertex 28.9979 -38.0135 -0.1
- vertex 28.443 -37.5048 -0.1
+ vertex 28.4883 -37.6376 -0.2
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.443 -37.5048 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 28.9979 -38.0135 -0.1
- vertex 28.4219 -37.3704 -0.1
- vertex 28.443 -37.5048 -0.1
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.4219 -37.3704 -0.2
+ vertex 28.443 -37.5048 -0.2
endloop
endfacet
facet normal -0.131122 -0.991366 0
outer loop
- vertex 46.8289 -19.1548 -0.1
+ vertex 46.8289 -19.1548 -0.2
vertex 47.044 -19.1833 0
vertex 46.8289 -19.1548 0
endloop
@@ -20519,13 +20519,13 @@ solid OpenSCAD_Model
facet normal -0.131122 -0.991366 -0
outer loop
vertex 47.044 -19.1833 0
- vertex 46.8289 -19.1548 -0.1
- vertex 47.044 -19.1833 -0.1
+ vertex 46.8289 -19.1548 -0.2
+ vertex 47.044 -19.1833 -0.2
endloop
endfacet
facet normal -0.230596 -0.97305 0
outer loop
- vertex 47.044 -19.1833 -0.1
+ vertex 47.044 -19.1833 -0.2
vertex 47.2257 -19.2263 0
vertex 47.044 -19.1833 0
endloop
@@ -20533,13 +20533,13 @@ solid OpenSCAD_Model
facet normal -0.230596 -0.97305 -0
outer loop
vertex 47.2257 -19.2263 0
- vertex 47.044 -19.1833 -0.1
- vertex 47.2257 -19.2263 -0.1
+ vertex 47.044 -19.1833 -0.2
+ vertex 47.2257 -19.2263 -0.2
endloop
endfacet
facet normal -0.359881 -0.932998 0
outer loop
- vertex 47.2257 -19.2263 -0.1
+ vertex 47.2257 -19.2263 -0.2
vertex 47.3799 -19.2858 0
vertex 47.2257 -19.2263 0
endloop
@@ -20547,13 +20547,13 @@ solid OpenSCAD_Model
facet normal -0.359881 -0.932998 -0
outer loop
vertex 47.3799 -19.2858 0
- vertex 47.2257 -19.2263 -0.1
- vertex 47.3799 -19.2858 -0.1
+ vertex 47.2257 -19.2263 -0.2
+ vertex 47.3799 -19.2858 -0.2
endloop
endfacet
facet normal -0.505271 -0.862961 0
outer loop
- vertex 47.3799 -19.2858 -0.1
+ vertex 47.3799 -19.2858 -0.2
vertex 47.5127 -19.3635 0
vertex 47.3799 -19.2858 0
endloop
@@ -20561,13 +20561,13 @@ solid OpenSCAD_Model
facet normal -0.505271 -0.862961 -0
outer loop
vertex 47.5127 -19.3635 0
- vertex 47.3799 -19.2858 -0.1
- vertex 47.5127 -19.3635 -0.1
+ vertex 47.3799 -19.2858 -0.2
+ vertex 47.5127 -19.3635 -0.2
endloop
endfacet
facet normal -0.640123 -0.768272 0
outer loop
- vertex 47.5127 -19.3635 -0.1
+ vertex 47.5127 -19.3635 -0.2
vertex 47.6302 -19.4614 0
vertex 47.5127 -19.3635 0
endloop
@@ -20575,209 +20575,209 @@ solid OpenSCAD_Model
facet normal -0.640123 -0.768272 -0
outer loop
vertex 47.6302 -19.4614 0
- vertex 47.5127 -19.3635 -0.1
- vertex 47.6302 -19.4614 -0.1
+ vertex 47.5127 -19.3635 -0.2
+ vertex 47.6302 -19.4614 -0.2
endloop
endfacet
facet normal -0.742266 -0.670106 0
outer loop
- vertex 47.7384 -19.5813 -0.1
+ vertex 47.7384 -19.5813 -0.2
vertex 47.6302 -19.4614 0
- vertex 47.6302 -19.4614 -0.1
+ vertex 47.6302 -19.4614 -0.2
endloop
endfacet
facet normal -0.742266 -0.670106 0
outer loop
vertex 47.6302 -19.4614 0
- vertex 47.7384 -19.5813 -0.1
+ vertex 47.7384 -19.5813 -0.2
vertex 47.7384 -19.5813 0
endloop
endfacet
facet normal -0.797332 -0.60354 0
outer loop
- vertex 47.845 -19.7221 -0.1
+ vertex 47.845 -19.7221 -0.2
vertex 47.7384 -19.5813 0
- vertex 47.7384 -19.5813 -0.1
+ vertex 47.7384 -19.5813 -0.2
endloop
endfacet
facet normal -0.797332 -0.60354 0
outer loop
vertex 47.7384 -19.5813 0
- vertex 47.845 -19.7221 -0.1
+ vertex 47.845 -19.7221 -0.2
vertex 47.845 -19.7221 0
endloop
endfacet
facet normal -0.85488 -0.518827 0
outer loop
- vertex 47.9233 -19.8512 -0.1
+ vertex 47.9233 -19.8512 -0.2
vertex 47.845 -19.7221 0
- vertex 47.845 -19.7221 -0.1
+ vertex 47.845 -19.7221 -0.2
endloop
endfacet
facet normal -0.85488 -0.518827 0
outer loop
vertex 47.845 -19.7221 0
- vertex 47.9233 -19.8512 -0.1
+ vertex 47.9233 -19.8512 -0.2
vertex 47.9233 -19.8512 0
endloop
endfacet
facet normal -0.930142 -0.367201 0
outer loop
- vertex 47.9745 -19.9807 -0.1
+ vertex 47.9745 -19.9807 -0.2
vertex 47.9233 -19.8512 0
- vertex 47.9233 -19.8512 -0.1
+ vertex 47.9233 -19.8512 -0.2
endloop
endfacet
facet normal -0.930142 -0.367201 0
outer loop
vertex 47.9233 -19.8512 0
- vertex 47.9745 -19.9807 -0.1
+ vertex 47.9745 -19.9807 -0.2
vertex 47.9745 -19.9807 0
endloop
endfacet
facet normal -0.985048 -0.172278 0
outer loop
- vertex 47.9993 -20.1225 -0.1
+ vertex 47.9993 -20.1225 -0.2
vertex 47.9745 -19.9807 0
- vertex 47.9745 -19.9807 -0.1
+ vertex 47.9745 -19.9807 -0.2
endloop
endfacet
facet normal -0.985048 -0.172278 0
outer loop
vertex 47.9745 -19.9807 0
- vertex 47.9993 -20.1225 -0.1
+ vertex 47.9993 -20.1225 -0.2
vertex 47.9993 -20.1225 0
endloop
endfacet
facet normal -0.999994 0.0034209 0
outer loop
- vertex 47.9987 -20.2887 -0.1
+ vertex 47.9987 -20.2887 -0.2
vertex 47.9993 -20.1225 0
- vertex 47.9993 -20.1225 -0.1
+ vertex 47.9993 -20.1225 -0.2
endloop
endfacet
facet normal -0.999994 0.0034209 0
outer loop
vertex 47.9993 -20.1225 0
- vertex 47.9987 -20.2887 -0.1
+ vertex 47.9987 -20.2887 -0.2
vertex 47.9987 -20.2887 0
endloop
endfacet
facet normal -0.992465 0.122526 0
outer loop
- vertex 47.9737 -20.4912 -0.1
+ vertex 47.9737 -20.4912 -0.2
vertex 47.9987 -20.2887 0
- vertex 47.9987 -20.2887 -0.1
+ vertex 47.9987 -20.2887 -0.2
endloop
endfacet
facet normal -0.992465 0.122526 0
outer loop
vertex 47.9987 -20.2887 0
- vertex 47.9737 -20.4912 -0.1
+ vertex 47.9737 -20.4912 -0.2
vertex 47.9737 -20.4912 0
endloop
endfacet
facet normal -0.97813 0.207995 0
outer loop
- vertex 47.8542 -21.0531 -0.1
+ vertex 47.8542 -21.0531 -0.2
vertex 47.9737 -20.4912 0
- vertex 47.9737 -20.4912 -0.1
+ vertex 47.9737 -20.4912 -0.2
endloop
endfacet
facet normal -0.97813 0.207995 0
outer loop
vertex 47.9737 -20.4912 0
- vertex 47.8542 -21.0531 -0.1
+ vertex 47.8542 -21.0531 -0.2
vertex 47.8542 -21.0531 0
endloop
endfacet
facet normal -0.962149 0.272524 0
outer loop
- vertex 47.7155 -21.5429 -0.1
+ vertex 47.7155 -21.5429 -0.2
vertex 47.8542 -21.0531 0
- vertex 47.8542 -21.0531 -0.1
+ vertex 47.8542 -21.0531 -0.2
endloop
endfacet
facet normal -0.962149 0.272524 0
outer loop
vertex 47.8542 -21.0531 0
- vertex 47.7155 -21.5429 -0.1
+ vertex 47.7155 -21.5429 -0.2
vertex 47.7155 -21.5429 0
endloop
endfacet
facet normal -0.934598 0.355705 0
outer loop
- vertex 47.5422 -21.9981 -0.1
+ vertex 47.5422 -21.9981 -0.2
vertex 47.7155 -21.5429 0
- vertex 47.7155 -21.5429 -0.1
+ vertex 47.7155 -21.5429 -0.2
endloop
endfacet
facet normal -0.934598 0.355705 0
outer loop
vertex 47.7155 -21.5429 0
- vertex 47.5422 -21.9981 -0.1
+ vertex 47.5422 -21.9981 -0.2
vertex 47.5422 -21.9981 0
endloop
endfacet
facet normal -0.898902 0.438149 0
outer loop
- vertex 47.3383 -22.4165 -0.1
+ vertex 47.3383 -22.4165 -0.2
vertex 47.5422 -21.9981 0
- vertex 47.5422 -21.9981 -0.1
+ vertex 47.5422 -21.9981 -0.2
endloop
endfacet
facet normal -0.898902 0.438149 0
outer loop
vertex 47.5422 -21.9981 0
- vertex 47.3383 -22.4165 -0.1
+ vertex 47.3383 -22.4165 -0.2
vertex 47.3383 -22.4165 0
endloop
endfacet
facet normal -0.854314 0.519757 0
outer loop
- vertex 47.1074 -22.796 -0.1
+ vertex 47.1074 -22.796 -0.2
vertex 47.3383 -22.4165 0
- vertex 47.3383 -22.4165 -0.1
+ vertex 47.3383 -22.4165 -0.2
endloop
endfacet
facet normal -0.854314 0.519757 0
outer loop
vertex 47.3383 -22.4165 0
- vertex 47.1074 -22.796 -0.1
+ vertex 47.1074 -22.796 -0.2
vertex 47.1074 -22.796 0
endloop
endfacet
facet normal -0.79973 0.600359 0
outer loop
- vertex 46.8534 -23.1343 -0.1
+ vertex 46.8534 -23.1343 -0.2
vertex 47.1074 -22.796 0
- vertex 47.1074 -22.796 -0.1
+ vertex 47.1074 -22.796 -0.2
endloop
endfacet
facet normal -0.79973 0.600359 0
outer loop
vertex 47.1074 -22.796 0
- vertex 46.8534 -23.1343 -0.1
+ vertex 46.8534 -23.1343 -0.2
vertex 46.8534 -23.1343 0
endloop
endfacet
facet normal -0.73354 0.679647 0
outer loop
- vertex 46.5801 -23.4293 -0.1
+ vertex 46.5801 -23.4293 -0.2
vertex 46.8534 -23.1343 0
- vertex 46.8534 -23.1343 -0.1
+ vertex 46.8534 -23.1343 -0.2
endloop
endfacet
facet normal -0.73354 0.679647 0
outer loop
vertex 46.8534 -23.1343 0
- vertex 46.5801 -23.4293 -0.1
+ vertex 46.5801 -23.4293 -0.2
vertex 46.5801 -23.4293 0
endloop
endfacet
facet normal -0.653573 0.756863 0
outer loop
- vertex 46.5801 -23.4293 -0.1
+ vertex 46.5801 -23.4293 -0.2
vertex 46.2914 -23.6786 0
vertex 46.5801 -23.4293 0
endloop
@@ -20785,13 +20785,13 @@ solid OpenSCAD_Model
facet normal -0.653573 0.756863 0
outer loop
vertex 46.2914 -23.6786 0
- vertex 46.5801 -23.4293 -0.1
- vertex 46.2914 -23.6786 -0.1
+ vertex 46.5801 -23.4293 -0.2
+ vertex 46.2914 -23.6786 -0.2
endloop
endfacet
facet normal -0.557126 0.830428 0
outer loop
- vertex 46.2914 -23.6786 -0.1
+ vertex 46.2914 -23.6786 -0.2
vertex 45.9909 -23.8802 0
vertex 46.2914 -23.6786 0
endloop
@@ -20799,13 +20799,13 @@ solid OpenSCAD_Model
facet normal -0.557126 0.830428 0
outer loop
vertex 45.9909 -23.8802 0
- vertex 46.2914 -23.6786 -0.1
- vertex 45.9909 -23.8802 -0.1
+ vertex 46.2914 -23.6786 -0.2
+ vertex 45.9909 -23.8802 -0.2
endloop
endfacet
facet normal -0.441145 0.897436 0
outer loop
- vertex 45.9909 -23.8802 -0.1
+ vertex 45.9909 -23.8802 -0.2
vertex 45.6826 -24.0317 0
vertex 45.9909 -23.8802 0
endloop
@@ -20813,13 +20813,13 @@ solid OpenSCAD_Model
facet normal -0.441145 0.897436 0
outer loop
vertex 45.6826 -24.0317 0
- vertex 45.9909 -23.8802 -0.1
- vertex 45.6826 -24.0317 -0.1
+ vertex 45.9909 -23.8802 -0.2
+ vertex 45.6826 -24.0317 -0.2
endloop
endfacet
facet normal -0.303061 0.952971 0
outer loop
- vertex 45.6826 -24.0317 -0.1
+ vertex 45.6826 -24.0317 -0.2
vertex 45.3703 -24.1311 0
vertex 45.6826 -24.0317 0
endloop
@@ -20827,13 +20827,13 @@ solid OpenSCAD_Model
facet normal -0.303061 0.952971 0
outer loop
vertex 45.3703 -24.1311 0
- vertex 45.6826 -24.0317 -0.1
- vertex 45.3703 -24.1311 -0.1
+ vertex 45.6826 -24.0317 -0.2
+ vertex 45.3703 -24.1311 -0.2
endloop
endfacet
facet normal -0.142218 0.989835 0
outer loop
- vertex 45.3703 -24.1311 -0.1
+ vertex 45.3703 -24.1311 -0.2
vertex 45.0576 -24.176 0
vertex 45.3703 -24.1311 0
endloop
@@ -20841,13 +20841,13 @@ solid OpenSCAD_Model
facet normal -0.142218 0.989835 0
outer loop
vertex 45.0576 -24.176 0
- vertex 45.3703 -24.1311 -0.1
- vertex 45.0576 -24.176 -0.1
+ vertex 45.3703 -24.1311 -0.2
+ vertex 45.0576 -24.176 -0.2
endloop
endfacet
facet normal 0.0378695 0.999283 -0
outer loop
- vertex 45.0576 -24.176 -0.1
+ vertex 45.0576 -24.176 -0.2
vertex 44.7485 -24.1643 0
vertex 45.0576 -24.176 0
endloop
@@ -20855,13 +20855,13 @@ solid OpenSCAD_Model
facet normal 0.0378695 0.999283 0
outer loop
vertex 44.7485 -24.1643 0
- vertex 45.0576 -24.176 -0.1
- vertex 44.7485 -24.1643 -0.1
+ vertex 45.0576 -24.176 -0.2
+ vertex 44.7485 -24.1643 -0.2
endloop
endfacet
facet normal 0.227696 0.973732 -0
outer loop
- vertex 44.7485 -24.1643 -0.1
+ vertex 44.7485 -24.1643 -0.2
vertex 44.4468 -24.0937 0
vertex 44.7485 -24.1643 0
endloop
@@ -20869,13 +20869,13 @@ solid OpenSCAD_Model
facet normal 0.227696 0.973732 0
outer loop
vertex 44.4468 -24.0937 0
- vertex 44.7485 -24.1643 -0.1
- vertex 44.4468 -24.0937 -0.1
+ vertex 44.7485 -24.1643 -0.2
+ vertex 44.4468 -24.0937 -0.2
endloop
endfacet
facet normal 0.412594 0.910915 -0
outer loop
- vertex 44.4468 -24.0937 -0.1
+ vertex 44.4468 -24.0937 -0.2
vertex 44.1563 -23.9621 0
vertex 44.4468 -24.0937 0
endloop
@@ -20883,13 +20883,13 @@ solid OpenSCAD_Model
facet normal 0.412594 0.910915 0
outer loop
vertex 44.1563 -23.9621 0
- vertex 44.4468 -24.0937 -0.1
- vertex 44.1563 -23.9621 -0.1
+ vertex 44.4468 -24.0937 -0.2
+ vertex 44.1563 -23.9621 -0.2
endloop
endfacet
facet normal 0.57736 0.81649 -0
outer loop
- vertex 44.1563 -23.9621 -0.1
+ vertex 44.1563 -23.9621 -0.2
vertex 43.8807 -23.7673 0
vertex 44.1563 -23.9621 0
endloop
@@ -20897,41 +20897,41 @@ solid OpenSCAD_Model
facet normal 0.57736 0.81649 0
outer loop
vertex 43.8807 -23.7673 0
- vertex 44.1563 -23.9621 -0.1
- vertex 43.8807 -23.7673 -0.1
+ vertex 44.1563 -23.9621 -0.2
+ vertex 43.8807 -23.7673 -0.2
endloop
endfacet
facet normal 0.711931 0.70225 0
outer loop
vertex 43.8807 -23.7673 0
- vertex 43.6239 -23.5069 -0.1
+ vertex 43.6239 -23.5069 -0.2
vertex 43.6239 -23.5069 0
endloop
endfacet
facet normal 0.711931 0.70225 0
outer loop
- vertex 43.6239 -23.5069 -0.1
+ vertex 43.6239 -23.5069 -0.2
vertex 43.8807 -23.7673 0
- vertex 43.8807 -23.7673 -0.1
+ vertex 43.8807 -23.7673 -0.2
endloop
endfacet
facet normal 0.732645 0.680611 0
outer loop
vertex 43.6239 -23.5069 0
- vertex 43.3873 -23.2523 -0.1
+ vertex 43.3873 -23.2523 -0.2
vertex 43.3873 -23.2523 0
endloop
endfacet
facet normal 0.732645 0.680611 0
outer loop
- vertex 43.3873 -23.2523 -0.1
+ vertex 43.3873 -23.2523 -0.2
vertex 43.6239 -23.5069 0
- vertex 43.6239 -23.5069 -0.1
+ vertex 43.6239 -23.5069 -0.2
endloop
endfacet
facet normal 0.659068 0.752084 -0
outer loop
- vertex 43.3873 -23.2523 -0.1
+ vertex 43.3873 -23.2523 -0.2
vertex 43.1493 -23.0437 0
vertex 43.3873 -23.2523 0
endloop
@@ -20939,13 +20939,13 @@ solid OpenSCAD_Model
facet normal 0.659068 0.752084 0
outer loop
vertex 43.1493 -23.0437 0
- vertex 43.3873 -23.2523 -0.1
- vertex 43.1493 -23.0437 -0.1
+ vertex 43.3873 -23.2523 -0.2
+ vertex 43.1493 -23.0437 -0.2
endloop
endfacet
facet normal 0.55411 0.832444 -0
outer loop
- vertex 43.1493 -23.0437 -0.1
+ vertex 43.1493 -23.0437 -0.2
vertex 42.9376 -22.9028 0
vertex 43.1493 -23.0437 0
endloop
@@ -20953,13 +20953,13 @@ solid OpenSCAD_Model
facet normal 0.55411 0.832444 0
outer loop
vertex 42.9376 -22.9028 0
- vertex 43.1493 -23.0437 -0.1
- vertex 42.9376 -22.9028 -0.1
+ vertex 43.1493 -23.0437 -0.2
+ vertex 42.9376 -22.9028 -0.2
endloop
endfacet
facet normal 0.402192 0.915555 -0
outer loop
- vertex 42.9376 -22.9028 -0.1
+ vertex 42.9376 -22.9028 -0.2
vertex 42.8503 -22.8644 0
vertex 42.9376 -22.9028 0
endloop
@@ -20967,13 +20967,13 @@ solid OpenSCAD_Model
facet normal 0.402192 0.915555 0
outer loop
vertex 42.8503 -22.8644 0
- vertex 42.9376 -22.9028 -0.1
- vertex 42.8503 -22.8644 -0.1
+ vertex 42.9376 -22.9028 -0.2
+ vertex 42.8503 -22.8644 -0.2
endloop
endfacet
facet normal 0.186876 0.982384 -0
outer loop
- vertex 42.8503 -22.8644 -0.1
+ vertex 42.8503 -22.8644 -0.2
vertex 42.7799 -22.851 0
vertex 42.8503 -22.8644 0
endloop
@@ -20981,13 +20981,13 @@ solid OpenSCAD_Model
facet normal 0.186876 0.982384 0
outer loop
vertex 42.7799 -22.851 0
- vertex 42.8503 -22.8644 -0.1
- vertex 42.7799 -22.851 -0.1
+ vertex 42.8503 -22.8644 -0.2
+ vertex 42.7799 -22.851 -0.2
endloop
endfacet
facet normal -0.254315 0.967121 0
outer loop
- vertex 42.7799 -22.851 -0.1
+ vertex 42.7799 -22.851 -0.2
vertex 42.6968 -22.8729 0
vertex 42.7799 -22.851 0
endloop
@@ -20995,13 +20995,13 @@ solid OpenSCAD_Model
facet normal -0.254315 0.967121 0
outer loop
vertex 42.6968 -22.8729 0
- vertex 42.7799 -22.851 -0.1
- vertex 42.6968 -22.8729 -0.1
+ vertex 42.7799 -22.851 -0.2
+ vertex 42.6968 -22.8729 -0.2
endloop
endfacet
facet normal -0.451219 0.892413 0
outer loop
- vertex 42.6968 -22.8729 -0.1
+ vertex 42.6968 -22.8729 -0.2
vertex 42.5728 -22.9356 0
vertex 42.6968 -22.8729 0
endloop
@@ -21009,13 +21009,13 @@ solid OpenSCAD_Model
facet normal -0.451219 0.892413 0
outer loop
vertex 42.5728 -22.9356 0
- vertex 42.6968 -22.8729 -0.1
- vertex 42.5728 -22.9356 -0.1
+ vertex 42.6968 -22.8729 -0.2
+ vertex 42.5728 -22.9356 -0.2
endloop
endfacet
facet normal -0.553713 0.832708 0
outer loop
- vertex 42.5728 -22.9356 -0.1
+ vertex 42.5728 -22.9356 -0.2
vertex 42.2267 -23.1657 0
vertex 42.5728 -22.9356 0
endloop
@@ -21023,13 +21023,13 @@ solid OpenSCAD_Model
facet normal -0.553713 0.832708 0
outer loop
vertex 42.2267 -23.1657 0
- vertex 42.5728 -22.9356 -0.1
- vertex 42.2267 -23.1657 -0.1
+ vertex 42.5728 -22.9356 -0.2
+ vertex 42.2267 -23.1657 -0.2
endloop
endfacet
facet normal -0.614835 0.788656 0
outer loop
- vertex 42.2267 -23.1657 -0.1
+ vertex 42.2267 -23.1657 -0.2
vertex 41.7898 -23.5063 0
vertex 42.2267 -23.1657 0
endloop
@@ -21037,13 +21037,13 @@ solid OpenSCAD_Model
facet normal -0.614835 0.788656 0
outer loop
vertex 41.7898 -23.5063 0
- vertex 42.2267 -23.1657 -0.1
- vertex 41.7898 -23.5063 -0.1
+ vertex 42.2267 -23.1657 -0.2
+ vertex 41.7898 -23.5063 -0.2
endloop
endfacet
facet normal -0.655263 0.755401 0
outer loop
- vertex 41.7898 -23.5063 -0.1
+ vertex 41.7898 -23.5063 -0.2
vertex 41.3103 -23.9223 0
vertex 41.7898 -23.5063 0
endloop
@@ -21051,13 +21051,13 @@ solid OpenSCAD_Model
facet normal -0.655263 0.755401 0
outer loop
vertex 41.3103 -23.9223 0
- vertex 41.7898 -23.5063 -0.1
- vertex 41.3103 -23.9223 -0.1
+ vertex 41.7898 -23.5063 -0.2
+ vertex 41.3103 -23.9223 -0.2
endloop
endfacet
facet normal -0.681106 0.732185 0
outer loop
- vertex 41.3103 -23.9223 -0.1
+ vertex 41.3103 -23.9223 -0.2
vertex 40.922 -24.2835 0
vertex 41.3103 -23.9223 0
endloop
@@ -21065,223 +21065,223 @@ solid OpenSCAD_Model
facet normal -0.681106 0.732185 0
outer loop
vertex 40.922 -24.2835 0
- vertex 41.3103 -23.9223 -0.1
- vertex 40.922 -24.2835 -0.1
+ vertex 41.3103 -23.9223 -0.2
+ vertex 40.922 -24.2835 -0.2
endloop
endfacet
facet normal -0.723872 0.689934 0
outer loop
- vertex 40.604 -24.6171 -0.1
+ vertex 40.604 -24.6171 -0.2
vertex 40.922 -24.2835 0
- vertex 40.922 -24.2835 -0.1
+ vertex 40.922 -24.2835 -0.2
endloop
endfacet
facet normal -0.723872 0.689934 0
outer loop
vertex 40.922 -24.2835 0
- vertex 40.604 -24.6171 -0.1
+ vertex 40.604 -24.6171 -0.2
vertex 40.604 -24.6171 0
endloop
endfacet
facet normal -0.795563 0.60587 0
outer loop
- vertex 40.3218 -24.9877 -0.1
+ vertex 40.3218 -24.9877 -0.2
vertex 40.604 -24.6171 0
- vertex 40.604 -24.6171 -0.1
+ vertex 40.604 -24.6171 -0.2
endloop
endfacet
facet normal -0.795563 0.60587 0
outer loop
vertex 40.604 -24.6171 0
- vertex 40.3218 -24.9877 -0.1
+ vertex 40.3218 -24.9877 -0.2
vertex 40.3218 -24.9877 0
endloop
endfacet
facet normal -0.859211 0.511621 0
outer loop
- vertex 40.0406 -25.46 -0.1
+ vertex 40.0406 -25.46 -0.2
vertex 40.3218 -24.9877 0
- vertex 40.3218 -24.9877 -0.1
+ vertex 40.3218 -24.9877 -0.2
endloop
endfacet
facet normal -0.859211 0.511621 0
outer loop
vertex 40.3218 -24.9877 0
- vertex 40.0406 -25.46 -0.1
+ vertex 40.0406 -25.46 -0.2
vertex 40.0406 -25.46 0
endloop
endfacet
facet normal -0.896877 0.442281 0
outer loop
- vertex 39.7256 -26.0988 -0.1
+ vertex 39.7256 -26.0988 -0.2
vertex 40.0406 -25.46 0
- vertex 40.0406 -25.46 -0.1
+ vertex 40.0406 -25.46 -0.2
endloop
endfacet
facet normal -0.896877 0.442281 0
outer loop
vertex 40.0406 -25.46 0
- vertex 39.7256 -26.0988 -0.1
+ vertex 39.7256 -26.0988 -0.2
vertex 39.7256 -26.0988 0
endloop
endfacet
facet normal -0.915036 0.403372 0
outer loop
- vertex 39.342 -26.9688 -0.1
+ vertex 39.342 -26.9688 -0.2
vertex 39.7256 -26.0988 0
- vertex 39.7256 -26.0988 -0.1
+ vertex 39.7256 -26.0988 -0.2
endloop
endfacet
facet normal -0.915036 0.403372 0
outer loop
vertex 39.7256 -26.0988 0
- vertex 39.342 -26.9688 -0.1
+ vertex 39.342 -26.9688 -0.2
vertex 39.342 -26.9688 0
endloop
endfacet
facet normal -0.924339 0.381572 0
outer loop
- vertex 38.2305 -29.6614 -0.1
+ vertex 38.2305 -29.6614 -0.2
vertex 39.342 -26.9688 0
- vertex 39.342 -26.9688 -0.1
+ vertex 39.342 -26.9688 -0.2
endloop
endfacet
facet normal -0.924339 0.381572 0
outer loop
vertex 39.342 -26.9688 0
- vertex 38.2305 -29.6614 -0.1
+ vertex 38.2305 -29.6614 -0.2
vertex 38.2305 -29.6614 0
endloop
endfacet
facet normal -0.929232 0.369498 0
outer loop
- vertex 37.444 -31.6395 -0.1
+ vertex 37.444 -31.6395 -0.2
vertex 38.2305 -29.6614 0
- vertex 38.2305 -29.6614 -0.1
+ vertex 38.2305 -29.6614 -0.2
endloop
endfacet
facet normal -0.929232 0.369498 0
outer loop
vertex 38.2305 -29.6614 0
- vertex 37.444 -31.6395 -0.1
+ vertex 37.444 -31.6395 -0.2
vertex 37.444 -31.6395 0
endloop
endfacet
facet normal -0.937221 0.348736 0
outer loop
- vertex 36.8389 -33.2656 -0.1
+ vertex 36.8389 -33.2656 -0.2
vertex 37.444 -31.6395 0
- vertex 37.444 -31.6395 -0.1
+ vertex 37.444 -31.6395 -0.2
endloop
endfacet
facet normal -0.937221 0.348736 0
outer loop
vertex 37.444 -31.6395 0
- vertex 36.8389 -33.2656 -0.1
+ vertex 36.8389 -33.2656 -0.2
vertex 36.8389 -33.2656 0
endloop
endfacet
facet normal -0.949427 0.313989 0
outer loop
- vertex 36.4479 -34.448 -0.1
+ vertex 36.4479 -34.448 -0.2
vertex 36.8389 -33.2656 0
- vertex 36.8389 -33.2656 -0.1
+ vertex 36.8389 -33.2656 -0.2
endloop
endfacet
facet normal -0.949427 0.313989 0
outer loop
vertex 36.8389 -33.2656 0
- vertex 36.4479 -34.448 -0.1
+ vertex 36.4479 -34.448 -0.2
vertex 36.4479 -34.448 0
endloop
endfacet
facet normal -0.966574 0.256387 0
outer loop
- vertex 36.3428 -34.844 -0.1
+ vertex 36.3428 -34.844 -0.2
vertex 36.4479 -34.448 0
- vertex 36.4479 -34.448 -0.1
+ vertex 36.4479 -34.448 -0.2
endloop
endfacet
facet normal -0.966574 0.256387 0
outer loop
vertex 36.4479 -34.448 0
- vertex 36.3428 -34.844 -0.1
+ vertex 36.3428 -34.844 -0.2
vertex 36.3428 -34.844 0
endloop
endfacet
facet normal -0.987922 0.154951 0
outer loop
- vertex 36.3035 -35.0946 -0.1
+ vertex 36.3035 -35.0946 -0.2
vertex 36.3428 -34.844 0
- vertex 36.3428 -34.844 -0.1
+ vertex 36.3428 -34.844 -0.2
endloop
endfacet
facet normal -0.987922 0.154951 0
outer loop
vertex 36.3428 -34.844 0
- vertex 36.3035 -35.0946 -0.1
+ vertex 36.3035 -35.0946 -0.2
vertex 36.3035 -35.0946 0
endloop
endfacet
facet normal -0.999846 0.0175753 0
outer loop
- vertex 36.2992 -35.3418 -0.1
+ vertex 36.2992 -35.3418 -0.2
vertex 36.3035 -35.0946 0
- vertex 36.3035 -35.0946 -0.1
+ vertex 36.3035 -35.0946 -0.2
endloop
endfacet
facet normal -0.999846 0.0175753 0
outer loop
vertex 36.3035 -35.0946 0
- vertex 36.2992 -35.3418 -0.1
+ vertex 36.2992 -35.3418 -0.2
vertex 36.2992 -35.3418 0
endloop
endfacet
facet normal -0.99871 -0.0507764 0
outer loop
- vertex 36.3089 -35.532 -0.1
+ vertex 36.3089 -35.532 -0.2
vertex 36.2992 -35.3418 0
- vertex 36.2992 -35.3418 -0.1
+ vertex 36.2992 -35.3418 -0.2
endloop
endfacet
facet normal -0.99871 -0.0507764 0
outer loop
vertex 36.2992 -35.3418 0
- vertex 36.3089 -35.532 -0.1
+ vertex 36.3089 -35.532 -0.2
vertex 36.3089 -35.532 0
endloop
endfacet
facet normal -0.974112 -0.226068 0
outer loop
- vertex 36.3422 -35.6758 -0.1
+ vertex 36.3422 -35.6758 -0.2
vertex 36.3089 -35.532 0
- vertex 36.3089 -35.532 -0.1
+ vertex 36.3089 -35.532 -0.2
endloop
endfacet
facet normal -0.974112 -0.226068 0
outer loop
vertex 36.3089 -35.532 0
- vertex 36.3422 -35.6758 -0.1
+ vertex 36.3422 -35.6758 -0.2
vertex 36.3422 -35.6758 0
endloop
endfacet
facet normal -0.84992 -0.526911 0
outer loop
- vertex 36.4089 -35.7834 -0.1
+ vertex 36.4089 -35.7834 -0.2
vertex 36.3422 -35.6758 0
- vertex 36.3422 -35.6758 -0.1
+ vertex 36.3422 -35.6758 -0.2
endloop
endfacet
facet normal -0.84992 -0.526911 0
outer loop
vertex 36.3422 -35.6758 0
- vertex 36.4089 -35.7834 -0.1
+ vertex 36.4089 -35.7834 -0.2
vertex 36.4089 -35.7834 0
endloop
endfacet
facet normal -0.59793 -0.801548 0
outer loop
- vertex 36.4089 -35.7834 -0.1
+ vertex 36.4089 -35.7834 -0.2
vertex 36.5187 -35.8653 0
vertex 36.4089 -35.7834 0
endloop
@@ -21289,13 +21289,13 @@ solid OpenSCAD_Model
facet normal -0.59793 -0.801548 -0
outer loop
vertex 36.5187 -35.8653 0
- vertex 36.4089 -35.7834 -0.1
- vertex 36.5187 -35.8653 -0.1
+ vertex 36.4089 -35.7834 -0.2
+ vertex 36.5187 -35.8653 -0.2
endloop
endfacet
facet normal -0.37896 -0.925413 0
outer loop
- vertex 36.5187 -35.8653 -0.1
+ vertex 36.5187 -35.8653 -0.2
vertex 36.6812 -35.9318 0
vertex 36.5187 -35.8653 0
endloop
@@ -21303,13 +21303,13 @@ solid OpenSCAD_Model
facet normal -0.37896 -0.925413 -0
outer loop
vertex 36.6812 -35.9318 0
- vertex 36.5187 -35.8653 -0.1
- vertex 36.6812 -35.9318 -0.1
+ vertex 36.5187 -35.8653 -0.2
+ vertex 36.6812 -35.9318 -0.2
endloop
endfacet
facet normal -0.239239 -0.970961 0
outer loop
- vertex 36.6812 -35.9318 -0.1
+ vertex 36.6812 -35.9318 -0.2
vertex 37.203 -36.0604 0
vertex 36.6812 -35.9318 0
endloop
@@ -21317,13 +21317,13 @@ solid OpenSCAD_Model
facet normal -0.239239 -0.970961 -0
outer loop
vertex 37.203 -36.0604 0
- vertex 36.6812 -35.9318 -0.1
- vertex 37.203 -36.0604 -0.1
+ vertex 36.6812 -35.9318 -0.2
+ vertex 37.203 -36.0604 -0.2
endloop
endfacet
facet normal -0.245847 -0.969309 0
outer loop
- vertex 37.203 -36.0604 -0.1
+ vertex 37.203 -36.0604 -0.2
vertex 37.6954 -36.1853 0
vertex 37.203 -36.0604 0
endloop
@@ -21331,13 +21331,13 @@ solid OpenSCAD_Model
facet normal -0.245847 -0.969309 -0
outer loop
vertex 37.6954 -36.1853 0
- vertex 37.203 -36.0604 -0.1
- vertex 37.6954 -36.1853 -0.1
+ vertex 37.203 -36.0604 -0.2
+ vertex 37.6954 -36.1853 -0.2
endloop
endfacet
facet normal -0.369675 -0.929161 0
outer loop
- vertex 37.6954 -36.1853 -0.1
+ vertex 37.6954 -36.1853 -0.2
vertex 37.8576 -36.2498 0
vertex 37.6954 -36.1853 0
endloop
@@ -21345,13 +21345,13 @@ solid OpenSCAD_Model
facet normal -0.369675 -0.929161 -0
outer loop
vertex 37.8576 -36.2498 0
- vertex 37.6954 -36.1853 -0.1
- vertex 37.8576 -36.2498 -0.1
+ vertex 37.6954 -36.1853 -0.2
+ vertex 37.8576 -36.2498 -0.2
endloop
endfacet
facet normal -0.539517 -0.841975 0
outer loop
- vertex 37.8576 -36.2498 -0.1
+ vertex 37.8576 -36.2498 -0.2
vertex 37.9736 -36.3241 0
vertex 37.8576 -36.2498 0
endloop
@@ -21359,125 +21359,125 @@ solid OpenSCAD_Model
facet normal -0.539517 -0.841975 -0
outer loop
vertex 37.9736 -36.3241 0
- vertex 37.8576 -36.2498 -0.1
- vertex 37.9736 -36.3241 -0.1
+ vertex 37.8576 -36.2498 -0.2
+ vertex 37.9736 -36.3241 -0.2
endloop
endfacet
facet normal -0.760366 -0.649494 0
outer loop
- vertex 38.0509 -36.4146 -0.1
+ vertex 38.0509 -36.4146 -0.2
vertex 37.9736 -36.3241 0
- vertex 37.9736 -36.3241 -0.1
+ vertex 37.9736 -36.3241 -0.2
endloop
endfacet
facet normal -0.760366 -0.649494 0
outer loop
vertex 37.9736 -36.3241 0
- vertex 38.0509 -36.4146 -0.1
+ vertex 38.0509 -36.4146 -0.2
vertex 38.0509 -36.4146 0
endloop
endfacet
facet normal -0.926147 -0.377163 0
outer loop
- vertex 38.0969 -36.5276 -0.1
+ vertex 38.0969 -36.5276 -0.2
vertex 38.0509 -36.4146 0
- vertex 38.0509 -36.4146 -0.1
+ vertex 38.0509 -36.4146 -0.2
endloop
endfacet
facet normal -0.926147 -0.377163 0
outer loop
vertex 38.0509 -36.4146 0
- vertex 38.0969 -36.5276 -0.1
+ vertex 38.0969 -36.5276 -0.2
vertex 38.0969 -36.5276 0
endloop
endfacet
facet normal -0.988006 -0.154417 0
outer loop
- vertex 38.119 -36.6694 -0.1
+ vertex 38.119 -36.6694 -0.2
vertex 38.0969 -36.5276 0
- vertex 38.0969 -36.5276 -0.1
+ vertex 38.0969 -36.5276 -0.2
endloop
endfacet
facet normal -0.988006 -0.154417 0
outer loop
vertex 38.0969 -36.5276 0
- vertex 38.119 -36.6694 -0.1
+ vertex 38.119 -36.6694 -0.2
vertex 38.119 -36.6694 0
endloop
endfacet
facet normal -0.999475 -0.0324031 0
outer loop
- vertex 38.1248 -36.8464 -0.1
+ vertex 38.1248 -36.8464 -0.2
vertex 38.119 -36.6694 0
- vertex 38.119 -36.6694 -0.1
+ vertex 38.119 -36.6694 -0.2
endloop
endfacet
facet normal -0.999475 -0.0324031 0
outer loop
vertex 38.119 -36.6694 0
- vertex 38.1248 -36.8464 -0.1
+ vertex 38.1248 -36.8464 -0.2
vertex 38.1248 -36.8464 0
endloop
endfacet
facet normal -0.99859 0.0530808 0
outer loop
- vertex 38.103 -37.2562 -0.1
+ vertex 38.103 -37.2562 -0.2
vertex 38.1248 -36.8464 0
- vertex 38.1248 -36.8464 -0.1
+ vertex 38.1248 -36.8464 -0.2
endloop
endfacet
facet normal -0.99859 0.0530808 0
outer loop
vertex 38.1248 -36.8464 0
- vertex 38.103 -37.2562 -0.1
+ vertex 38.103 -37.2562 -0.2
vertex 38.103 -37.2562 0
endloop
endfacet
facet normal -0.977614 0.210405 0
outer loop
- vertex 38.0668 -37.4245 -0.1
+ vertex 38.0668 -37.4245 -0.2
vertex 38.103 -37.2562 0
- vertex 38.103 -37.2562 -0.1
+ vertex 38.103 -37.2562 -0.2
endloop
endfacet
facet normal -0.977614 0.210405 0
outer loop
vertex 38.103 -37.2562 0
- vertex 38.0668 -37.4245 -0.1
+ vertex 38.0668 -37.4245 -0.2
vertex 38.0668 -37.4245 0
endloop
endfacet
facet normal -0.922461 0.38609 0
outer loop
- vertex 38.0057 -37.5705 -0.1
+ vertex 38.0057 -37.5705 -0.2
vertex 38.0668 -37.4245 0
- vertex 38.0668 -37.4245 -0.1
+ vertex 38.0668 -37.4245 -0.2
endloop
endfacet
facet normal -0.922461 0.38609 0
outer loop
vertex 38.0668 -37.4245 0
- vertex 38.0057 -37.5705 -0.1
+ vertex 38.0057 -37.5705 -0.2
vertex 38.0057 -37.5705 0
endloop
endfacet
facet normal -0.806037 0.591865 0
outer loop
- vertex 37.9137 -37.6957 -0.1
+ vertex 37.9137 -37.6957 -0.2
vertex 38.0057 -37.5705 0
- vertex 38.0057 -37.5705 -0.1
+ vertex 38.0057 -37.5705 -0.2
endloop
endfacet
facet normal -0.806037 0.591865 0
outer loop
vertex 38.0057 -37.5705 0
- vertex 37.9137 -37.6957 -0.1
+ vertex 37.9137 -37.6957 -0.2
vertex 37.9137 -37.6957 0
endloop
endfacet
facet normal -0.635642 0.771984 0
outer loop
- vertex 37.9137 -37.6957 -0.1
+ vertex 37.9137 -37.6957 -0.2
vertex 37.7849 -37.8018 0
vertex 37.9137 -37.6957 0
endloop
@@ -21485,13 +21485,13 @@ solid OpenSCAD_Model
facet normal -0.635642 0.771984 0
outer loop
vertex 37.7849 -37.8018 0
- vertex 37.9137 -37.6957 -0.1
- vertex 37.7849 -37.8018 -0.1
+ vertex 37.9137 -37.6957 -0.2
+ vertex 37.7849 -37.8018 -0.2
endloop
endfacet
facet normal -0.458146 0.888877 0
outer loop
- vertex 37.7849 -37.8018 -0.1
+ vertex 37.7849 -37.8018 -0.2
vertex 37.6132 -37.8903 0
vertex 37.7849 -37.8018 0
endloop
@@ -21499,13 +21499,13 @@ solid OpenSCAD_Model
facet normal -0.458146 0.888877 0
outer loop
vertex 37.6132 -37.8903 0
- vertex 37.7849 -37.8018 -0.1
- vertex 37.6132 -37.8903 -0.1
+ vertex 37.7849 -37.8018 -0.2
+ vertex 37.6132 -37.8903 -0.2
endloop
endfacet
facet normal -0.312246 0.950001 0
outer loop
- vertex 37.6132 -37.8903 -0.1
+ vertex 37.6132 -37.8903 -0.2
vertex 37.3927 -37.9628 0
vertex 37.6132 -37.8903 0
endloop
@@ -21513,13 +21513,13 @@ solid OpenSCAD_Model
facet normal -0.312246 0.950001 0
outer loop
vertex 37.3927 -37.9628 0
- vertex 37.6132 -37.8903 -0.1
- vertex 37.3927 -37.9628 -0.1
+ vertex 37.6132 -37.8903 -0.2
+ vertex 37.3927 -37.9628 -0.2
endloop
endfacet
facet normal -0.206263 0.978497 0
outer loop
- vertex 37.3927 -37.9628 -0.1
+ vertex 37.3927 -37.9628 -0.2
vertex 37.1174 -38.0208 0
vertex 37.3927 -37.9628 0
endloop
@@ -21527,13 +21527,13 @@ solid OpenSCAD_Model
facet normal -0.206263 0.978497 0
outer loop
vertex 37.1174 -38.0208 0
- vertex 37.3927 -37.9628 -0.1
- vertex 37.1174 -38.0208 -0.1
+ vertex 37.3927 -37.9628 -0.2
+ vertex 37.1174 -38.0208 -0.2
endloop
endfacet
facet normal -0.133215 0.991087 0
outer loop
- vertex 37.1174 -38.0208 -0.1
+ vertex 37.1174 -38.0208 -0.2
vertex 36.7812 -38.066 0
vertex 37.1174 -38.0208 0
endloop
@@ -21541,13 +21541,13 @@ solid OpenSCAD_Model
facet normal -0.133215 0.991087 0
outer loop
vertex 36.7812 -38.066 0
- vertex 37.1174 -38.0208 -0.1
- vertex 36.7812 -38.066 -0.1
+ vertex 37.1174 -38.0208 -0.2
+ vertex 36.7812 -38.066 -0.2
endloop
endfacet
facet normal -0.0659814 0.997821 0
outer loop
- vertex 36.7812 -38.066 -0.1
+ vertex 36.7812 -38.066 -0.2
vertex 35.9024 -38.1241 0
vertex 36.7812 -38.066 0
endloop
@@ -21555,13 +21555,13 @@ solid OpenSCAD_Model
facet normal -0.0659814 0.997821 0
outer loop
vertex 35.9024 -38.1241 0
- vertex 36.7812 -38.066 -0.1
- vertex 35.9024 -38.1241 -0.1
+ vertex 36.7812 -38.066 -0.2
+ vertex 35.9024 -38.1241 -0.2
endloop
endfacet
facet normal -0.0214493 0.99977 0
outer loop
- vertex 35.9024 -38.1241 -0.1
+ vertex 35.9024 -38.1241 -0.2
vertex 34.7085 -38.1497 0
vertex 35.9024 -38.1241 0
endloop
@@ -21569,13 +21569,13 @@ solid OpenSCAD_Model
facet normal -0.0214493 0.99977 0
outer loop
vertex 34.7085 -38.1497 0
- vertex 35.9024 -38.1241 -0.1
- vertex 34.7085 -38.1497 -0.1
+ vertex 35.9024 -38.1241 -0.2
+ vertex 34.7085 -38.1497 -0.2
endloop
endfacet
facet normal -0.00368212 0.999993 0
outer loop
- vertex 34.7085 -38.1497 -0.1
+ vertex 34.7085 -38.1497 -0.2
vertex 33.1514 -38.1555 0
vertex 34.7085 -38.1497 0
endloop
@@ -21583,13 +21583,13 @@ solid OpenSCAD_Model
facet normal -0.00368212 0.999993 0
outer loop
vertex 33.1514 -38.1555 0
- vertex 34.7085 -38.1497 -0.1
- vertex 33.1514 -38.1555 -0.1
+ vertex 34.7085 -38.1497 -0.2
+ vertex 33.1514 -38.1555 -0.2
endloop
endfacet
facet normal 0.00738333 0.999973 -0
outer loop
- vertex 33.1514 -38.1555 -0.1
+ vertex 33.1514 -38.1555 -0.2
vertex 31.1824 -38.1409 0
vertex 33.1514 -38.1555 0
endloop
@@ -21597,13 +21597,13 @@ solid OpenSCAD_Model
facet normal 0.00738333 0.999973 0
outer loop
vertex 31.1824 -38.1409 0
- vertex 33.1514 -38.1555 -0.1
- vertex 31.1824 -38.1409 -0.1
+ vertex 33.1514 -38.1555 -0.2
+ vertex 31.1824 -38.1409 -0.2
endloop
endfacet
facet normal 0.0337924 0.999429 -0
outer loop
- vertex 31.1824 -38.1409 -0.1
+ vertex 31.1824 -38.1409 -0.2
vertex 29.8192 -38.0948 0
vertex 31.1824 -38.1409 0
endloop
@@ -21611,13 +21611,13 @@ solid OpenSCAD_Model
facet normal 0.0337924 0.999429 0
outer loop
vertex 29.8192 -38.0948 0
- vertex 31.1824 -38.1409 -0.1
- vertex 29.8192 -38.0948 -0.1
+ vertex 31.1824 -38.1409 -0.2
+ vertex 29.8192 -38.0948 -0.2
endloop
endfacet
facet normal 0.0757553 0.997126 -0
outer loop
- vertex 29.8192 -38.0948 -0.1
+ vertex 29.8192 -38.0948 -0.2
vertex 29.3448 -38.0588 0
vertex 29.8192 -38.0948 0
endloop
@@ -21625,13 +21625,13 @@ solid OpenSCAD_Model
facet normal 0.0757553 0.997126 0
outer loop
vertex 29.3448 -38.0588 0
- vertex 29.8192 -38.0948 -0.1
- vertex 29.3448 -38.0588 -0.1
+ vertex 29.8192 -38.0948 -0.2
+ vertex 29.3448 -38.0588 -0.2
endloop
endfacet
facet normal 0.129569 0.99157 -0
outer loop
- vertex 29.3448 -38.0588 -0.1
+ vertex 29.3448 -38.0588 -0.2
vertex 28.9979 -38.0135 0
vertex 29.3448 -38.0588 0
endloop
@@ -21639,13 +21639,13 @@ solid OpenSCAD_Model
facet normal 0.129569 0.99157 0
outer loop
vertex 28.9979 -38.0135 0
- vertex 29.3448 -38.0588 -0.1
- vertex 28.9979 -38.0135 -0.1
+ vertex 29.3448 -38.0588 -0.2
+ vertex 28.9979 -38.0135 -0.2
endloop
endfacet
facet normal 0.235468 0.971882 -0
outer loop
- vertex 28.9979 -38.0135 -0.1
+ vertex 28.9979 -38.0135 -0.2
vertex 28.7706 -37.9584 0
vertex 28.9979 -38.0135 0
endloop
@@ -21653,13 +21653,13 @@ solid OpenSCAD_Model
facet normal 0.235468 0.971882 0
outer loop
vertex 28.7706 -37.9584 0
- vertex 28.9979 -38.0135 -0.1
- vertex 28.7706 -37.9584 -0.1
+ vertex 28.9979 -38.0135 -0.2
+ vertex 28.7706 -37.9584 -0.2
endloop
endfacet
facet normal 0.491281 0.871001 -0
outer loop
- vertex 28.7706 -37.9584 -0.1
+ vertex 28.7706 -37.9584 -0.2
vertex 28.6548 -37.8931 0
vertex 28.7706 -37.9584 0
endloop
@@ -21667,153 +21667,153 @@ solid OpenSCAD_Model
facet normal 0.491281 0.871001 0
outer loop
vertex 28.6548 -37.8931 0
- vertex 28.7706 -37.9584 -0.1
- vertex 28.6548 -37.8931 -0.1
+ vertex 28.7706 -37.9584 -0.2
+ vertex 28.6548 -37.8931 -0.2
endloop
endfacet
facet normal 0.794168 0.607698 0
outer loop
vertex 28.6548 -37.8931 0
- vertex 28.5587 -37.7674 -0.1
+ vertex 28.5587 -37.7674 -0.2
vertex 28.5587 -37.7674 0
endloop
endfacet
facet normal 0.794168 0.607698 0
outer loop
- vertex 28.5587 -37.7674 -0.1
+ vertex 28.5587 -37.7674 -0.2
vertex 28.6548 -37.8931 0
- vertex 28.6548 -37.8931 -0.1
+ vertex 28.6548 -37.8931 -0.2
endloop
endfacet
facet normal 0.879213 0.47643 0
outer loop
vertex 28.5587 -37.7674 0
- vertex 28.4883 -37.6376 -0.1
+ vertex 28.4883 -37.6376 -0.2
vertex 28.4883 -37.6376 0
endloop
endfacet
facet normal 0.879213 0.47643 0
outer loop
- vertex 28.4883 -37.6376 -0.1
+ vertex 28.4883 -37.6376 -0.2
vertex 28.5587 -37.7674 0
- vertex 28.5587 -37.7674 -0.1
+ vertex 28.5587 -37.7674 -0.2
endloop
endfacet
facet normal 0.946363 0.323104 0
outer loop
vertex 28.4883 -37.6376 0
- vertex 28.443 -37.5048 -0.1
+ vertex 28.443 -37.5048 -0.2
vertex 28.443 -37.5048 0
endloop
endfacet
facet normal 0.946363 0.323104 0
outer loop
- vertex 28.443 -37.5048 -0.1
+ vertex 28.443 -37.5048 -0.2
vertex 28.4883 -37.6376 0
- vertex 28.4883 -37.6376 -0.1
+ vertex 28.4883 -37.6376 -0.2
endloop
endfacet
facet normal 0.987941 0.154833 0
outer loop
vertex 28.443 -37.5048 0
- vertex 28.4219 -37.3704 -0.1
+ vertex 28.4219 -37.3704 -0.2
vertex 28.4219 -37.3704 0
endloop
endfacet
facet normal 0.987941 0.154833 0
outer loop
- vertex 28.4219 -37.3704 -0.1
+ vertex 28.4219 -37.3704 -0.2
vertex 28.443 -37.5048 0
- vertex 28.443 -37.5048 -0.1
+ vertex 28.443 -37.5048 -0.2
endloop
endfacet
facet normal 0.99984 -0.0178826 0
outer loop
vertex 28.4219 -37.3704 0
- vertex 28.4243 -37.2355 -0.1
+ vertex 28.4243 -37.2355 -0.2
vertex 28.4243 -37.2355 0
endloop
endfacet
facet normal 0.99984 -0.0178826 0
outer loop
- vertex 28.4243 -37.2355 -0.1
+ vertex 28.4243 -37.2355 -0.2
vertex 28.4219 -37.3704 0
- vertex 28.4219 -37.3704 -0.1
+ vertex 28.4219 -37.3704 -0.2
endloop
endfacet
facet normal 0.982895 -0.184165 0
outer loop
vertex 28.4243 -37.2355 0
- vertex 28.4495 -37.1014 -0.1
+ vertex 28.4495 -37.1014 -0.2
vertex 28.4495 -37.1014 0
endloop
endfacet
facet normal 0.982895 -0.184165 0
outer loop
- vertex 28.4495 -37.1014 -0.1
+ vertex 28.4495 -37.1014 -0.2
vertex 28.4243 -37.2355 0
- vertex 28.4243 -37.2355 -0.1
+ vertex 28.4243 -37.2355 -0.2
endloop
endfacet
facet normal 0.941957 -0.335735 0
outer loop
vertex 28.4495 -37.1014 0
- vertex 28.4965 -36.9693 -0.1
+ vertex 28.4965 -36.9693 -0.2
vertex 28.4965 -36.9693 0
endloop
endfacet
facet normal 0.941957 -0.335735 0
outer loop
- vertex 28.4965 -36.9693 -0.1
+ vertex 28.4965 -36.9693 -0.2
vertex 28.4495 -37.1014 0
- vertex 28.4495 -37.1014 -0.1
+ vertex 28.4495 -37.1014 -0.2
endloop
endfacet
facet normal 0.883597 -0.468248 0
outer loop
vertex 28.4965 -36.9693 0
- vertex 28.5648 -36.8405 -0.1
+ vertex 28.5648 -36.8405 -0.2
vertex 28.5648 -36.8405 0
endloop
endfacet
facet normal 0.883597 -0.468248 0
outer loop
- vertex 28.5648 -36.8405 -0.1
+ vertex 28.5648 -36.8405 -0.2
vertex 28.4965 -36.9693 0
- vertex 28.4965 -36.9693 -0.1
+ vertex 28.4965 -36.9693 -0.2
endloop
endfacet
facet normal 0.814058 -0.580783 0
outer loop
vertex 28.5648 -36.8405 0
- vertex 28.6534 -36.7163 -0.1
+ vertex 28.6534 -36.7163 -0.2
vertex 28.6534 -36.7163 0
endloop
endfacet
facet normal 0.814058 -0.580783 0
outer loop
- vertex 28.6534 -36.7163 -0.1
+ vertex 28.6534 -36.7163 -0.2
vertex 28.5648 -36.8405 0
- vertex 28.5648 -36.8405 -0.1
+ vertex 28.5648 -36.8405 -0.2
endloop
endfacet
facet normal 0.738176 -0.674608 0
outer loop
vertex 28.6534 -36.7163 0
- vertex 28.7617 -36.5978 -0.1
+ vertex 28.7617 -36.5978 -0.2
vertex 28.7617 -36.5978 0
endloop
endfacet
facet normal 0.738176 -0.674608 0
outer loop
- vertex 28.7617 -36.5978 -0.1
+ vertex 28.7617 -36.5978 -0.2
vertex 28.6534 -36.7163 0
- vertex 28.6534 -36.7163 -0.1
+ vertex 28.6534 -36.7163 -0.2
endloop
endfacet
facet normal 0.659231 -0.75194 0
outer loop
- vertex 28.7617 -36.5978 -0.1
+ vertex 28.7617 -36.5978 -0.2
vertex 28.8888 -36.4863 0
vertex 28.7617 -36.5978 0
endloop
@@ -21821,13 +21821,13 @@ solid OpenSCAD_Model
facet normal 0.659231 -0.75194 0
outer loop
vertex 28.8888 -36.4863 0
- vertex 28.7617 -36.5978 -0.1
- vertex 28.8888 -36.4863 -0.1
+ vertex 28.7617 -36.5978 -0.2
+ vertex 28.8888 -36.4863 -0.2
endloop
endfacet
facet normal 0.57926 -0.815143 0
outer loop
- vertex 28.8888 -36.4863 -0.1
+ vertex 28.8888 -36.4863 -0.2
vertex 29.034 -36.3831 0
vertex 28.8888 -36.4863 0
endloop
@@ -21835,13 +21835,13 @@ solid OpenSCAD_Model
facet normal 0.57926 -0.815143 0
outer loop
vertex 29.034 -36.3831 0
- vertex 28.8888 -36.4863 -0.1
- vertex 29.034 -36.3831 -0.1
+ vertex 28.8888 -36.4863 -0.2
+ vertex 29.034 -36.3831 -0.2
endloop
endfacet
facet normal 0.499403 -0.86637 0
outer loop
- vertex 29.034 -36.3831 -0.1
+ vertex 29.034 -36.3831 -0.2
vertex 29.1966 -36.2895 0
vertex 29.034 -36.3831 0
endloop
@@ -21849,13 +21849,13 @@ solid OpenSCAD_Model
facet normal 0.499403 -0.86637 0
outer loop
vertex 29.1966 -36.2895 0
- vertex 29.034 -36.3831 -0.1
- vertex 29.1966 -36.2895 -0.1
+ vertex 29.034 -36.3831 -0.2
+ vertex 29.1966 -36.2895 -0.2
endloop
endfacet
facet normal 0.420274 -0.907397 0
outer loop
- vertex 29.1966 -36.2895 -0.1
+ vertex 29.1966 -36.2895 -0.2
vertex 29.3757 -36.2065 0
vertex 29.1966 -36.2895 0
endloop
@@ -21863,13 +21863,13 @@ solid OpenSCAD_Model
facet normal 0.420274 -0.907397 0
outer loop
vertex 29.3757 -36.2065 0
- vertex 29.1966 -36.2895 -0.1
- vertex 29.3757 -36.2065 -0.1
+ vertex 29.1966 -36.2895 -0.2
+ vertex 29.3757 -36.2065 -0.2
endloop
endfacet
facet normal 0.34216 -0.939642 0
outer loop
- vertex 29.3757 -36.2065 -0.1
+ vertex 29.3757 -36.2065 -0.2
vertex 29.5705 -36.1356 0
vertex 29.3757 -36.2065 0
endloop
@@ -21877,13 +21877,13 @@ solid OpenSCAD_Model
facet normal 0.34216 -0.939642 0
outer loop
vertex 29.5705 -36.1356 0
- vertex 29.3757 -36.2065 -0.1
- vertex 29.5705 -36.1356 -0.1
+ vertex 29.3757 -36.2065 -0.2
+ vertex 29.5705 -36.1356 -0.2
endloop
endfacet
facet normal 0.265166 -0.964203 0
outer loop
- vertex 29.5705 -36.1356 -0.1
+ vertex 29.5705 -36.1356 -0.2
vertex 29.7804 -36.0779 0
vertex 29.5705 -36.1356 0
endloop
@@ -21891,13 +21891,13 @@ solid OpenSCAD_Model
facet normal 0.265166 -0.964203 0
outer loop
vertex 29.7804 -36.0779 0
- vertex 29.5705 -36.1356 -0.1
- vertex 29.7804 -36.0779 -0.1
+ vertex 29.5705 -36.1356 -0.2
+ vertex 29.7804 -36.0779 -0.2
endloop
endfacet
facet normal 0.237962 -0.971274 0
outer loop
- vertex 29.7804 -36.0779 -0.1
+ vertex 29.7804 -36.0779 -0.2
vertex 30.4037 -35.9251 0
vertex 29.7804 -36.0779 0
endloop
@@ -21905,13 +21905,13 @@ solid OpenSCAD_Model
facet normal 0.237962 -0.971274 0
outer loop
vertex 30.4037 -35.9251 0
- vertex 29.7804 -36.0779 -0.1
- vertex 30.4037 -35.9251 -0.1
+ vertex 29.7804 -36.0779 -0.2
+ vertex 30.4037 -35.9251 -0.2
endloop
endfacet
facet normal 0.297523 -0.954715 0
outer loop
- vertex 30.4037 -35.9251 -0.1
+ vertex 30.4037 -35.9251 -0.2
vertex 30.6629 -35.8443 0
vertex 30.4037 -35.9251 0
endloop
@@ -21919,13 +21919,13 @@ solid OpenSCAD_Model
facet normal 0.297523 -0.954715 0
outer loop
vertex 30.6629 -35.8443 0
- vertex 30.4037 -35.9251 -0.1
- vertex 30.6629 -35.8443 -0.1
+ vertex 30.4037 -35.9251 -0.2
+ vertex 30.6629 -35.8443 -0.2
endloop
endfacet
facet normal 0.380574 -0.92475 0
outer loop
- vertex 30.6629 -35.8443 -0.1
+ vertex 30.6629 -35.8443 -0.2
vertex 30.8955 -35.7486 0
vertex 30.6629 -35.8443 0
endloop
@@ -21933,13 +21933,13 @@ solid OpenSCAD_Model
facet normal 0.380574 -0.92475 0
outer loop
vertex 30.8955 -35.7486 0
- vertex 30.6629 -35.8443 -0.1
- vertex 30.8955 -35.7486 -0.1
+ vertex 30.6629 -35.8443 -0.2
+ vertex 30.8955 -35.7486 -0.2
endloop
endfacet
facet normal 0.491191 -0.871052 0
outer loop
- vertex 30.8955 -35.7486 -0.1
+ vertex 30.8955 -35.7486 -0.2
vertex 31.1075 -35.6291 0
vertex 30.8955 -35.7486 0
endloop
@@ -21947,13 +21947,13 @@ solid OpenSCAD_Model
facet normal 0.491191 -0.871052 0
outer loop
vertex 31.1075 -35.6291 0
- vertex 30.8955 -35.7486 -0.1
- vertex 31.1075 -35.6291 -0.1
+ vertex 30.8955 -35.7486 -0.2
+ vertex 31.1075 -35.6291 -0.2
endloop
endfacet
facet normal 0.610497 -0.792019 0
outer loop
- vertex 31.1075 -35.6291 -0.1
+ vertex 31.1075 -35.6291 -0.2
vertex 31.3052 -35.4767 0
vertex 31.1075 -35.6291 0
endloop
@@ -21961,237 +21961,237 @@ solid OpenSCAD_Model
facet normal 0.610497 -0.792019 0
outer loop
vertex 31.3052 -35.4767 0
- vertex 31.1075 -35.6291 -0.1
- vertex 31.3052 -35.4767 -0.1
+ vertex 31.1075 -35.6291 -0.2
+ vertex 31.3052 -35.4767 -0.2
endloop
endfacet
facet normal 0.71556 -0.698551 0
outer loop
vertex 31.3052 -35.4767 0
- vertex 31.4948 -35.2825 -0.1
+ vertex 31.4948 -35.2825 -0.2
vertex 31.4948 -35.2825 0
endloop
endfacet
facet normal 0.71556 -0.698551 0
outer loop
- vertex 31.4948 -35.2825 -0.1
+ vertex 31.4948 -35.2825 -0.2
vertex 31.3052 -35.4767 0
- vertex 31.3052 -35.4767 -0.1
+ vertex 31.3052 -35.4767 -0.2
endloop
endfacet
facet normal 0.793854 -0.608109 0
outer loop
vertex 31.4948 -35.2825 0
- vertex 31.6824 -35.0376 -0.1
+ vertex 31.6824 -35.0376 -0.2
vertex 31.6824 -35.0376 0
endloop
endfacet
facet normal 0.793854 -0.608109 0
outer loop
- vertex 31.6824 -35.0376 -0.1
+ vertex 31.6824 -35.0376 -0.2
vertex 31.4948 -35.2825 0
- vertex 31.4948 -35.2825 -0.1
+ vertex 31.4948 -35.2825 -0.2
endloop
endfacet
facet normal 0.846168 -0.532916 0
outer loop
vertex 31.6824 -35.0376 0
- vertex 31.8743 -34.7329 -0.1
+ vertex 31.8743 -34.7329 -0.2
vertex 31.8743 -34.7329 0
endloop
endfacet
facet normal 0.846168 -0.532916 0
outer loop
- vertex 31.8743 -34.7329 -0.1
+ vertex 31.8743 -34.7329 -0.2
vertex 31.6824 -35.0376 0
- vertex 31.6824 -35.0376 -0.1
+ vertex 31.6824 -35.0376 -0.2
endloop
endfacet
facet normal 0.879213 -0.47643 0
outer loop
vertex 31.8743 -34.7329 0
- vertex 32.0766 -34.3595 -0.1
+ vertex 32.0766 -34.3595 -0.2
vertex 32.0766 -34.3595 0
endloop
endfacet
facet normal 0.879213 -0.47643 0
outer loop
- vertex 32.0766 -34.3595 -0.1
+ vertex 32.0766 -34.3595 -0.2
vertex 31.8743 -34.7329 0
- vertex 31.8743 -34.7329 -0.1
+ vertex 31.8743 -34.7329 -0.2
endloop
endfacet
facet normal 0.906414 -0.422389 0
outer loop
vertex 32.0766 -34.3595 0
- vertex 32.5373 -33.371 -0.1
+ vertex 32.5373 -33.371 -0.2
vertex 32.5373 -33.371 0
endloop
endfacet
facet normal 0.906414 -0.422389 0
outer loop
- vertex 32.5373 -33.371 -0.1
+ vertex 32.5373 -33.371 -0.2
vertex 32.0766 -34.3595 0
- vertex 32.0766 -34.3595 -0.1
+ vertex 32.0766 -34.3595 -0.2
endloop
endfacet
facet normal 0.921762 -0.387755 0
outer loop
vertex 32.5373 -33.371 0
- vertex 33.1139 -32.0001 -0.1
+ vertex 33.1139 -32.0001 -0.2
vertex 33.1139 -32.0001 0
endloop
endfacet
facet normal 0.921762 -0.387755 0
outer loop
- vertex 33.1139 -32.0001 -0.1
+ vertex 33.1139 -32.0001 -0.2
vertex 32.5373 -33.371 0
- vertex 32.5373 -33.371 -0.1
+ vertex 32.5373 -33.371 -0.2
endloop
endfacet
facet normal 0.926317 -0.376745 0
outer loop
vertex 33.1139 -32.0001 0
- vertex 33.8561 -30.1753 -0.1
+ vertex 33.8561 -30.1753 -0.2
vertex 33.8561 -30.1753 0
endloop
endfacet
facet normal 0.926317 -0.376745 0
outer loop
- vertex 33.8561 -30.1753 -0.1
+ vertex 33.8561 -30.1753 -0.2
vertex 33.1139 -32.0001 0
- vertex 33.1139 -32.0001 -0.1
+ vertex 33.1139 -32.0001 -0.2
endloop
endfacet
facet normal 0.926524 -0.376237 0
outer loop
vertex 33.8561 -30.1753 0
- vertex 35.3422 -26.5156 -0.1
+ vertex 35.3422 -26.5156 -0.2
vertex 35.3422 -26.5156 0
endloop
endfacet
facet normal 0.926524 -0.376237 0
outer loop
- vertex 35.3422 -26.5156 -0.1
+ vertex 35.3422 -26.5156 -0.2
vertex 33.8561 -30.1753 0
- vertex 33.8561 -30.1753 -0.1
+ vertex 33.8561 -30.1753 -0.2
endloop
endfacet
facet normal 0.930815 -0.36549 0
outer loop
vertex 35.3422 -26.5156 0
- vertex 35.6833 -25.6471 -0.1
+ vertex 35.6833 -25.6471 -0.2
vertex 35.6833 -25.6471 0
endloop
endfacet
facet normal 0.930815 -0.36549 0
outer loop
- vertex 35.6833 -25.6471 -0.1
+ vertex 35.6833 -25.6471 -0.2
vertex 35.3422 -26.5156 0
- vertex 35.3422 -26.5156 -0.1
+ vertex 35.3422 -26.5156 -0.2
endloop
endfacet
facet normal 0.940922 -0.338624 0
outer loop
vertex 35.6833 -25.6471 0
- vertex 35.957 -24.8864 -0.1
+ vertex 35.957 -24.8864 -0.2
vertex 35.957 -24.8864 0
endloop
endfacet
facet normal 0.940922 -0.338624 0
outer loop
- vertex 35.957 -24.8864 -0.1
+ vertex 35.957 -24.8864 -0.2
vertex 35.6833 -25.6471 0
- vertex 35.6833 -25.6471 -0.1
+ vertex 35.6833 -25.6471 -0.2
endloop
endfacet
facet normal 0.953192 -0.302366 0
outer loop
vertex 35.957 -24.8864 0
- vertex 36.1622 -24.2394 -0.1
+ vertex 36.1622 -24.2394 -0.2
vertex 36.1622 -24.2394 0
endloop
endfacet
facet normal 0.953192 -0.302366 0
outer loop
- vertex 36.1622 -24.2394 -0.1
+ vertex 36.1622 -24.2394 -0.2
vertex 35.957 -24.8864 0
- vertex 35.957 -24.8864 -0.1
+ vertex 35.957 -24.8864 -0.2
endloop
endfacet
facet normal 0.968572 -0.248734 0
outer loop
vertex 36.1622 -24.2394 0
- vertex 36.2977 -23.7121 -0.1
+ vertex 36.2977 -23.7121 -0.2
vertex 36.2977 -23.7121 0
endloop
endfacet
facet normal 0.968572 -0.248734 0
outer loop
- vertex 36.2977 -23.7121 -0.1
+ vertex 36.2977 -23.7121 -0.2
vertex 36.1622 -24.2394 0
- vertex 36.1622 -24.2394 -0.1
+ vertex 36.1622 -24.2394 -0.2
endloop
endfacet
facet normal 0.987422 -0.158107 0
outer loop
vertex 36.2977 -23.7121 0
- vertex 36.362 -23.3104 -0.1
+ vertex 36.362 -23.3104 -0.2
vertex 36.362 -23.3104 0
endloop
endfacet
facet normal 0.987422 -0.158107 0
outer loop
- vertex 36.362 -23.3104 -0.1
+ vertex 36.362 -23.3104 -0.2
vertex 36.2977 -23.7121 0
- vertex 36.2977 -23.7121 -0.1
+ vertex 36.2977 -23.7121 -0.2
endloop
endfacet
facet normal 0.999436 -0.0335772 0
outer loop
vertex 36.362 -23.3104 0
- vertex 36.3671 -23.1585 -0.1
+ vertex 36.3671 -23.1585 -0.2
vertex 36.3671 -23.1585 0
endloop
endfacet
facet normal 0.999436 -0.0335772 0
outer loop
- vertex 36.3671 -23.1585 -0.1
+ vertex 36.3671 -23.1585 -0.2
vertex 36.362 -23.3104 0
- vertex 36.362 -23.3104 -0.1
+ vertex 36.362 -23.3104 -0.2
endloop
endfacet
facet normal 0.993888 0.110395 0
outer loop
vertex 36.3671 -23.1585 0
- vertex 36.3539 -23.0402 -0.1
+ vertex 36.3539 -23.0402 -0.2
vertex 36.3539 -23.0402 0
endloop
endfacet
facet normal 0.993888 0.110395 0
outer loop
- vertex 36.3539 -23.0402 -0.1
+ vertex 36.3539 -23.0402 -0.2
vertex 36.3671 -23.1585 0
- vertex 36.3671 -23.1585 -0.1
+ vertex 36.3671 -23.1585 -0.2
endloop
endfacet
facet normal 0.93611 0.351708 0
outer loop
vertex 36.3539 -23.0402 0
- vertex 36.3224 -22.9562 -0.1
+ vertex 36.3224 -22.9562 -0.2
vertex 36.3224 -22.9562 0
endloop
endfacet
facet normal 0.93611 0.351708 0
outer loop
- vertex 36.3224 -22.9562 -0.1
+ vertex 36.3224 -22.9562 -0.2
vertex 36.3539 -23.0402 0
- vertex 36.3539 -23.0402 -0.1
+ vertex 36.3539 -23.0402 -0.2
endloop
endfacet
facet normal 0.698293 0.715812 -0
outer loop
- vertex 36.3224 -22.9562 -0.1
+ vertex 36.3224 -22.9562 -0.2
vertex 36.2723 -22.9073 0
vertex 36.3224 -22.9562 0
endloop
@@ -22199,13 +22199,13 @@ solid OpenSCAD_Model
facet normal 0.698293 0.715812 0
outer loop
vertex 36.2723 -22.9073 0
- vertex 36.3224 -22.9562 -0.1
- vertex 36.2723 -22.9073 -0.1
+ vertex 36.3224 -22.9562 -0.2
+ vertex 36.2723 -22.9073 -0.2
endloop
endfacet
facet normal 0.186395 0.982475 -0
outer loop
- vertex 36.2723 -22.9073 -0.1
+ vertex 36.2723 -22.9073 -0.2
vertex 36.2034 -22.8943 0
vertex 36.2723 -22.9073 0
endloop
@@ -22213,13 +22213,13 @@ solid OpenSCAD_Model
facet normal 0.186395 0.982475 0
outer loop
vertex 36.2034 -22.8943 0
- vertex 36.2723 -22.9073 -0.1
- vertex 36.2034 -22.8943 -0.1
+ vertex 36.2723 -22.9073 -0.2
+ vertex 36.2034 -22.8943 -0.2
endloop
endfacet
facet normal -0.258789 0.965934 0
outer loop
- vertex 36.2034 -22.8943 -0.1
+ vertex 36.2034 -22.8943 -0.2
vertex 36.1157 -22.9178 0
vertex 36.2034 -22.8943 0
endloop
@@ -22227,13 +22227,13 @@ solid OpenSCAD_Model
facet normal -0.258789 0.965934 0
outer loop
vertex 36.1157 -22.9178 0
- vertex 36.2034 -22.8943 -0.1
- vertex 36.1157 -22.9178 -0.1
+ vertex 36.2034 -22.8943 -0.2
+ vertex 36.1157 -22.9178 -0.2
endloop
endfacet
facet normal -0.248765 0.968564 0
outer loop
- vertex 36.1157 -22.9178 -0.1
+ vertex 36.1157 -22.9178 -0.2
vertex 35.9442 -22.9618 0
vertex 36.1157 -22.9178 0
endloop
@@ -22241,13 +22241,13 @@ solid OpenSCAD_Model
facet normal -0.248765 0.968564 0
outer loop
vertex 35.9442 -22.9618 0
- vertex 36.1157 -22.9178 -0.1
- vertex 35.9442 -22.9618 -0.1
+ vertex 36.1157 -22.9178 -0.2
+ vertex 35.9442 -22.9618 -0.2
endloop
endfacet
facet normal -0.0720501 0.997401 0
outer loop
- vertex 35.9442 -22.9618 -0.1
+ vertex 35.9442 -22.9618 -0.2
vertex 35.7166 -22.9783 0
vertex 35.9442 -22.9618 0
endloop
@@ -22255,13 +22255,13 @@ solid OpenSCAD_Model
facet normal -0.0720501 0.997401 0
outer loop
vertex 35.7166 -22.9783 0
- vertex 35.9442 -22.9618 -0.1
- vertex 35.7166 -22.9783 -0.1
+ vertex 35.9442 -22.9618 -0.2
+ vertex 35.7166 -22.9783 -0.2
endloop
endfacet
facet normal 0.0451334 0.998981 -0
outer loop
- vertex 35.7166 -22.9783 -0.1
+ vertex 35.7166 -22.9783 -0.2
vertex 35.4626 -22.9668 0
vertex 35.7166 -22.9783 0
endloop
@@ -22269,13 +22269,13 @@ solid OpenSCAD_Model
facet normal 0.0451334 0.998981 0
outer loop
vertex 35.4626 -22.9668 0
- vertex 35.7166 -22.9783 -0.1
- vertex 35.4626 -22.9668 -0.1
+ vertex 35.7166 -22.9783 -0.2
+ vertex 35.4626 -22.9668 -0.2
endloop
endfacet
facet normal 0.156383 0.987697 -0
outer loop
- vertex 35.4626 -22.9668 -0.1
+ vertex 35.4626 -22.9668 -0.2
vertex 35.2118 -22.9271 0
vertex 35.4626 -22.9668 0
endloop
@@ -22283,13 +22283,13 @@ solid OpenSCAD_Model
facet normal 0.156383 0.987697 0
outer loop
vertex 35.2118 -22.9271 0
- vertex 35.4626 -22.9668 -0.1
- vertex 35.2118 -22.9271 -0.1
+ vertex 35.4626 -22.9668 -0.2
+ vertex 35.2118 -22.9271 -0.2
endloop
endfacet
facet normal 0.299759 0.954015 -0
outer loop
- vertex 35.2118 -22.9271 -0.1
+ vertex 35.2118 -22.9271 -0.2
vertex 34.9345 -22.8399 0
vertex 35.2118 -22.9271 0
endloop
@@ -22297,13 +22297,13 @@ solid OpenSCAD_Model
facet normal 0.299759 0.954015 0
outer loop
vertex 34.9345 -22.8399 0
- vertex 35.2118 -22.9271 -0.1
- vertex 34.9345 -22.8399 -0.1
+ vertex 35.2118 -22.9271 -0.2
+ vertex 34.9345 -22.8399 -0.2
endloop
endfacet
facet normal 0.486497 0.873682 -0
outer loop
- vertex 34.9345 -22.8399 -0.1
+ vertex 34.9345 -22.8399 -0.2
vertex 34.8338 -22.7839 0
vertex 34.9345 -22.8399 0
endloop
@@ -22311,13 +22311,13 @@ solid OpenSCAD_Model
facet normal 0.486497 0.873682 0
outer loop
vertex 34.8338 -22.7839 0
- vertex 34.9345 -22.8399 -0.1
- vertex 34.8338 -22.7839 -0.1
+ vertex 34.9345 -22.8399 -0.2
+ vertex 34.8338 -22.7839 -0.2
endloop
endfacet
facet normal 0.653163 0.757217 -0
outer loop
- vertex 34.8338 -22.7839 -0.1
+ vertex 34.8338 -22.7839 -0.2
vertex 34.7558 -22.7166 0
vertex 34.8338 -22.7839 0
endloop
@@ -22325,139 +22325,139 @@ solid OpenSCAD_Model
facet normal 0.653163 0.757217 0
outer loop
vertex 34.7558 -22.7166 0
- vertex 34.8338 -22.7839 -0.1
- vertex 34.7558 -22.7166 -0.1
+ vertex 34.8338 -22.7839 -0.2
+ vertex 34.7558 -22.7166 -0.2
endloop
endfacet
facet normal 0.815361 0.578952 0
outer loop
vertex 34.7558 -22.7166 0
- vertex 34.6986 -22.636 -0.1
+ vertex 34.6986 -22.636 -0.2
vertex 34.6986 -22.636 0
endloop
endfacet
facet normal 0.815361 0.578952 0
outer loop
- vertex 34.6986 -22.636 -0.1
+ vertex 34.6986 -22.636 -0.2
vertex 34.7558 -22.7166 0
- vertex 34.7558 -22.7166 -0.1
+ vertex 34.7558 -22.7166 -0.2
endloop
endfacet
facet normal 0.928456 0.371442 0
outer loop
vertex 34.6986 -22.636 0
- vertex 34.6602 -22.54 -0.1
+ vertex 34.6602 -22.54 -0.2
vertex 34.6602 -22.54 0
endloop
endfacet
facet normal 0.928456 0.371442 0
outer loop
- vertex 34.6602 -22.54 -0.1
+ vertex 34.6602 -22.54 -0.2
vertex 34.6986 -22.636 0
- vertex 34.6986 -22.636 -0.1
+ vertex 34.6986 -22.636 -0.2
endloop
endfacet
facet normal 0.982392 0.186829 0
outer loop
vertex 34.6602 -22.54 0
- vertex 34.6385 -22.4262 -0.1
+ vertex 34.6385 -22.4262 -0.2
vertex 34.6385 -22.4262 0
endloop
endfacet
facet normal 0.982392 0.186829 0
outer loop
- vertex 34.6385 -22.4262 -0.1
+ vertex 34.6385 -22.4262 -0.2
vertex 34.6602 -22.54 0
- vertex 34.6602 -22.54 -0.1
+ vertex 34.6602 -22.54 -0.2
endloop
endfacet
facet normal 0.998716 0.050655 0
outer loop
vertex 34.6385 -22.4262 0
- vertex 34.6318 -22.2927 -0.1
+ vertex 34.6318 -22.2927 -0.2
vertex 34.6318 -22.2927 0
endloop
endfacet
facet normal 0.998716 0.050655 0
outer loop
- vertex 34.6318 -22.2927 -0.1
+ vertex 34.6318 -22.2927 -0.2
vertex 34.6385 -22.4262 0
- vertex 34.6385 -22.4262 -0.1
+ vertex 34.6385 -22.4262 -0.2
endloop
endfacet
facet normal 0.995457 -0.0952108 0
outer loop
vertex 34.6318 -22.2927 0
- vertex 34.653 -22.0706 -0.1
+ vertex 34.653 -22.0706 -0.2
vertex 34.653 -22.0706 0
endloop
endfacet
facet normal 0.995457 -0.0952108 0
outer loop
- vertex 34.653 -22.0706 -0.1
+ vertex 34.653 -22.0706 -0.2
vertex 34.6318 -22.2927 0
- vertex 34.6318 -22.2927 -0.1
+ vertex 34.6318 -22.2927 -0.2
endloop
endfacet
facet normal 0.963199 -0.268788 0
outer loop
vertex 34.653 -22.0706 0
- vertex 34.713 -21.8554 -0.1
+ vertex 34.713 -21.8554 -0.2
vertex 34.713 -21.8554 0
endloop
endfacet
facet normal 0.963199 -0.268788 0
outer loop
- vertex 34.713 -21.8554 -0.1
+ vertex 34.713 -21.8554 -0.2
vertex 34.653 -22.0706 0
- vertex 34.653 -22.0706 -0.1
+ vertex 34.653 -22.0706 -0.2
endloop
endfacet
facet normal 0.90719 -0.420722 0
outer loop
vertex 34.713 -21.8554 0
- vertex 34.8063 -21.6543 -0.1
+ vertex 34.8063 -21.6543 -0.2
vertex 34.8063 -21.6543 0
endloop
endfacet
facet normal 0.90719 -0.420722 0
outer loop
- vertex 34.8063 -21.6543 -0.1
+ vertex 34.8063 -21.6543 -0.2
vertex 34.713 -21.8554 0
- vertex 34.713 -21.8554 -0.1
+ vertex 34.713 -21.8554 -0.2
endloop
endfacet
facet normal 0.830216 -0.557442 0
outer loop
vertex 34.8063 -21.6543 0
- vertex 34.9274 -21.474 -0.1
+ vertex 34.9274 -21.474 -0.2
vertex 34.9274 -21.474 0
endloop
endfacet
facet normal 0.830216 -0.557442 0
outer loop
- vertex 34.9274 -21.474 -0.1
+ vertex 34.9274 -21.474 -0.2
vertex 34.8063 -21.6543 0
- vertex 34.8063 -21.6543 -0.1
+ vertex 34.8063 -21.6543 -0.2
endloop
endfacet
facet normal 0.728585 -0.684956 0
outer loop
vertex 34.9274 -21.474 0
- vertex 35.0706 -21.3217 -0.1
+ vertex 35.0706 -21.3217 -0.2
vertex 35.0706 -21.3217 0
endloop
endfacet
facet normal 0.728585 -0.684956 0
outer loop
- vertex 35.0706 -21.3217 -0.1
+ vertex 35.0706 -21.3217 -0.2
vertex 34.9274 -21.474 0
- vertex 34.9274 -21.474 -0.1
+ vertex 34.9274 -21.474 -0.2
endloop
endfacet
facet normal 0.592071 -0.805886 0
outer loop
- vertex 35.0706 -21.3217 -0.1
+ vertex 35.0706 -21.3217 -0.2
vertex 35.2304 -21.2043 0
vertex 35.0706 -21.3217 0
endloop
@@ -22465,13 +22465,13 @@ solid OpenSCAD_Model
facet normal 0.592071 -0.805886 0
outer loop
vertex 35.2304 -21.2043 0
- vertex 35.0706 -21.3217 -0.1
- vertex 35.2304 -21.2043 -0.1
+ vertex 35.0706 -21.3217 -0.2
+ vertex 35.2304 -21.2043 -0.2
endloop
endfacet
facet normal 0.404331 -0.914613 0
outer loop
- vertex 35.2304 -21.2043 -0.1
+ vertex 35.2304 -21.2043 -0.2
vertex 35.4013 -21.1287 0
vertex 35.2304 -21.2043 0
endloop
@@ -22479,13 +22479,13 @@ solid OpenSCAD_Model
facet normal 0.404331 -0.914613 0
outer loop
vertex 35.4013 -21.1287 0
- vertex 35.2304 -21.2043 -0.1
- vertex 35.4013 -21.1287 -0.1
+ vertex 35.2304 -21.2043 -0.2
+ vertex 35.4013 -21.1287 -0.2
endloop
endfacet
facet normal 0.149785 -0.988719 0
outer loop
- vertex 35.4013 -21.1287 -0.1
+ vertex 35.4013 -21.1287 -0.2
vertex 35.5778 -21.102 0
vertex 35.4013 -21.1287 0
endloop
@@ -22493,13 +22493,13 @@ solid OpenSCAD_Model
facet normal 0.149785 -0.988719 0
outer loop
vertex 35.5778 -21.102 0
- vertex 35.4013 -21.1287 -0.1
- vertex 35.5778 -21.102 -0.1
+ vertex 35.4013 -21.1287 -0.2
+ vertex 35.5778 -21.102 -0.2
endloop
endfacet
facet normal 0.22645 -0.974023 0
outer loop
- vertex 35.5778 -21.102 -0.1
+ vertex 35.5778 -21.102 -0.2
vertex 35.9118 -21.0243 0
vertex 35.5778 -21.102 0
endloop
@@ -22507,13 +22507,13 @@ solid OpenSCAD_Model
facet normal 0.22645 -0.974023 0
outer loop
vertex 35.9118 -21.0243 0
- vertex 35.5778 -21.102 -0.1
- vertex 35.9118 -21.0243 -0.1
+ vertex 35.5778 -21.102 -0.2
+ vertex 35.9118 -21.0243 -0.2
endloop
endfacet
facet normal 0.304725 -0.95244 0
outer loop
- vertex 35.9118 -21.0243 -0.1
+ vertex 35.9118 -21.0243 -0.2
vertex 36.5724 -20.813 0
vertex 35.9118 -21.0243 0
endloop
@@ -22521,13 +22521,13 @@ solid OpenSCAD_Model
facet normal 0.304725 -0.95244 0
outer loop
vertex 36.5724 -20.813 0
- vertex 35.9118 -21.0243 -0.1
- vertex 36.5724 -20.813 -0.1
+ vertex 35.9118 -21.0243 -0.2
+ vertex 36.5724 -20.813 -0.2
endloop
endfacet
facet normal 0.331013 -0.943626 0
outer loop
- vertex 36.5724 -20.813 -0.1
+ vertex 36.5724 -20.813 -0.2
vertex 37.4642 -20.5001 0
vertex 36.5724 -20.813 0
endloop
@@ -22535,13 +22535,13 @@ solid OpenSCAD_Model
facet normal 0.331013 -0.943626 0
outer loop
vertex 37.4642 -20.5001 0
- vertex 36.5724 -20.813 -0.1
- vertex 37.4642 -20.5001 -0.1
+ vertex 36.5724 -20.813 -0.2
+ vertex 37.4642 -20.5001 -0.2
endloop
endfacet
facet normal 0.348531 -0.937297 0
outer loop
- vertex 37.4642 -20.5001 -0.1
+ vertex 37.4642 -20.5001 -0.2
vertex 38.4916 -20.1181 0
vertex 37.4642 -20.5001 0
endloop
@@ -22549,13 +22549,13 @@ solid OpenSCAD_Model
facet normal 0.348531 -0.937297 0
outer loop
vertex 38.4916 -20.1181 0
- vertex 37.4642 -20.5001 -0.1
- vertex 38.4916 -20.1181 -0.1
+ vertex 37.4642 -20.5001 -0.2
+ vertex 38.4916 -20.1181 -0.2
endloop
endfacet
facet normal 0.345306 -0.93849 0
outer loop
- vertex 38.4916 -20.1181 -0.1
+ vertex 38.4916 -20.1181 -0.2
vertex 39.5298 -19.7361 0
vertex 38.4916 -20.1181 0
endloop
@@ -22563,13 +22563,13 @@ solid OpenSCAD_Model
facet normal 0.345306 -0.93849 0
outer loop
vertex 39.5298 -19.7361 0
- vertex 38.4916 -20.1181 -0.1
- vertex 39.5298 -19.7361 -0.1
+ vertex 38.4916 -20.1181 -0.2
+ vertex 39.5298 -19.7361 -0.2
endloop
endfacet
facet normal 0.321461 -0.946923 0
outer loop
- vertex 39.5298 -19.7361 -0.1
+ vertex 39.5298 -19.7361 -0.2
vertex 40.4513 -19.4233 0
vertex 39.5298 -19.7361 0
endloop
@@ -22577,13 +22577,13 @@ solid OpenSCAD_Model
facet normal 0.321461 -0.946923 0
outer loop
vertex 40.4513 -19.4233 0
- vertex 39.5298 -19.7361 -0.1
- vertex 40.4513 -19.4233 -0.1
+ vertex 39.5298 -19.7361 -0.2
+ vertex 40.4513 -19.4233 -0.2
endloop
endfacet
facet normal 0.28733 -0.957832 0
outer loop
- vertex 40.4513 -19.4233 -0.1
+ vertex 40.4513 -19.4233 -0.2
vertex 41.156 -19.2119 0
vertex 40.4513 -19.4233 0
endloop
@@ -22591,13 +22591,13 @@ solid OpenSCAD_Model
facet normal 0.28733 -0.957832 0
outer loop
vertex 41.156 -19.2119 0
- vertex 40.4513 -19.4233 -0.1
- vertex 41.156 -19.2119 -0.1
+ vertex 40.4513 -19.4233 -0.2
+ vertex 41.156 -19.2119 -0.2
endloop
endfacet
facet normal 0.23347 -0.972364 0
outer loop
- vertex 41.156 -19.2119 -0.1
+ vertex 41.156 -19.2119 -0.2
vertex 41.3957 -19.1543 0
vertex 41.156 -19.2119 0
endloop
@@ -22605,13 +22605,13 @@ solid OpenSCAD_Model
facet normal 0.23347 -0.972364 0
outer loop
vertex 41.3957 -19.1543 0
- vertex 41.156 -19.2119 -0.1
- vertex 41.3957 -19.1543 -0.1
+ vertex 41.156 -19.2119 -0.2
+ vertex 41.3957 -19.1543 -0.2
endloop
endfacet
facet normal 0.13452 -0.990911 0
outer loop
- vertex 41.3957 -19.1543 -0.1
+ vertex 41.3957 -19.1543 -0.2
vertex 41.5436 -19.1343 0
vertex 41.3957 -19.1543 0
endloop
@@ -22619,13 +22619,13 @@ solid OpenSCAD_Model
facet normal 0.13452 -0.990911 0
outer loop
vertex 41.5436 -19.1343 0
- vertex 41.3957 -19.1543 -0.1
- vertex 41.5436 -19.1343 -0.1
+ vertex 41.3957 -19.1543 -0.2
+ vertex 41.5436 -19.1343 -0.2
endloop
endfacet
facet normal -0.114485 -0.993425 0
outer loop
- vertex 41.5436 -19.1343 -0.1
+ vertex 41.5436 -19.1343 -0.2
vertex 41.7426 -19.1572 0
vertex 41.5436 -19.1343 0
endloop
@@ -22633,13 +22633,13 @@ solid OpenSCAD_Model
facet normal -0.114485 -0.993425 -0
outer loop
vertex 41.7426 -19.1572 0
- vertex 41.5436 -19.1343 -0.1
- vertex 41.7426 -19.1572 -0.1
+ vertex 41.5436 -19.1343 -0.2
+ vertex 41.7426 -19.1572 -0.2
endloop
endfacet
facet normal -0.379137 -0.925341 0
outer loop
- vertex 41.7426 -19.1572 -0.1
+ vertex 41.7426 -19.1572 -0.2
vertex 41.9051 -19.2238 0
vertex 41.7426 -19.1572 0
endloop
@@ -22647,13 +22647,13 @@ solid OpenSCAD_Model
facet normal -0.379137 -0.925341 -0
outer loop
vertex 41.9051 -19.2238 0
- vertex 41.7426 -19.1572 -0.1
- vertex 41.9051 -19.2238 -0.1
+ vertex 41.7426 -19.1572 -0.2
+ vertex 41.9051 -19.2238 -0.2
endloop
endfacet
facet normal -0.651079 -0.75901 0
outer loop
- vertex 41.9051 -19.2238 -0.1
+ vertex 41.9051 -19.2238 -0.2
vertex 42.0297 -19.3306 0
vertex 41.9051 -19.2238 0
endloop
@@ -22661,125 +22661,125 @@ solid OpenSCAD_Model
facet normal -0.651079 -0.75901 -0
outer loop
vertex 42.0297 -19.3306 0
- vertex 41.9051 -19.2238 -0.1
- vertex 42.0297 -19.3306 -0.1
+ vertex 41.9051 -19.2238 -0.2
+ vertex 42.0297 -19.3306 -0.2
endloop
endfacet
facet normal -0.860116 -0.510098 0
outer loop
- vertex 42.1149 -19.4743 -0.1
+ vertex 42.1149 -19.4743 -0.2
vertex 42.0297 -19.3306 0
- vertex 42.0297 -19.3306 -0.1
+ vertex 42.0297 -19.3306 -0.2
endloop
endfacet
facet normal -0.860116 -0.510098 0
outer loop
vertex 42.0297 -19.3306 0
- vertex 42.1149 -19.4743 -0.1
+ vertex 42.1149 -19.4743 -0.2
vertex 42.1149 -19.4743 0
endloop
endfacet
facet normal -0.969806 -0.243876 0
outer loop
- vertex 42.1595 -19.6516 -0.1
+ vertex 42.1595 -19.6516 -0.2
vertex 42.1149 -19.4743 0
- vertex 42.1149 -19.4743 -0.1
+ vertex 42.1149 -19.4743 -0.2
endloop
endfacet
facet normal -0.969806 -0.243876 0
outer loop
vertex 42.1149 -19.4743 0
- vertex 42.1595 -19.6516 -0.1
+ vertex 42.1595 -19.6516 -0.2
vertex 42.1595 -19.6516 0
endloop
endfacet
facet normal -0.999925 -0.0122495 0
outer loop
- vertex 42.162 -19.859 -0.1
+ vertex 42.162 -19.859 -0.2
vertex 42.1595 -19.6516 0
- vertex 42.1595 -19.6516 -0.1
+ vertex 42.1595 -19.6516 -0.2
endloop
endfacet
facet normal -0.999925 -0.0122495 0
outer loop
vertex 42.1595 -19.6516 0
- vertex 42.162 -19.859 -0.1
+ vertex 42.162 -19.859 -0.2
vertex 42.162 -19.859 0
endloop
endfacet
facet normal -0.985121 0.171861 0
outer loop
- vertex 42.1212 -20.0931 -0.1
+ vertex 42.1212 -20.0931 -0.2
vertex 42.162 -19.859 0
- vertex 42.162 -19.859 -0.1
+ vertex 42.162 -19.859 -0.2
endloop
endfacet
facet normal -0.985121 0.171861 0
outer loop
vertex 42.162 -19.859 0
- vertex 42.1212 -20.0931 -0.1
+ vertex 42.1212 -20.0931 -0.2
vertex 42.1212 -20.0931 0
endloop
endfacet
facet normal -0.948956 0.315408 0
outer loop
- vertex 42.0356 -20.3507 -0.1
+ vertex 42.0356 -20.3507 -0.2
vertex 42.1212 -20.0931 0
- vertex 42.1212 -20.0931 -0.1
+ vertex 42.1212 -20.0931 -0.2
endloop
endfacet
facet normal -0.948956 0.315408 0
outer loop
vertex 42.1212 -20.0931 0
- vertex 42.0356 -20.3507 -0.1
+ vertex 42.0356 -20.3507 -0.2
vertex 42.0356 -20.3507 0
endloop
endfacet
facet normal -0.935213 0.354086 0
outer loop
- vertex 41.9515 -20.5727 -0.1
+ vertex 41.9515 -20.5727 -0.2
vertex 42.0356 -20.3507 0
- vertex 42.0356 -20.3507 -0.1
+ vertex 42.0356 -20.3507 -0.2
endloop
endfacet
facet normal -0.935213 0.354086 0
outer loop
vertex 42.0356 -20.3507 0
- vertex 41.9515 -20.5727 -0.1
+ vertex 41.9515 -20.5727 -0.2
vertex 41.9515 -20.5727 0
endloop
endfacet
facet normal -0.96654 0.256517 0
outer loop
- vertex 41.9099 -20.7296 -0.1
+ vertex 41.9099 -20.7296 -0.2
vertex 41.9515 -20.5727 0
- vertex 41.9515 -20.5727 -0.1
+ vertex 41.9515 -20.5727 -0.2
endloop
endfacet
facet normal -0.96654 0.256517 0
outer loop
vertex 41.9515 -20.5727 0
- vertex 41.9099 -20.7296 -0.1
+ vertex 41.9099 -20.7296 -0.2
vertex 41.9099 -20.7296 0
endloop
endfacet
facet normal -0.996169 -0.0874488 0
outer loop
- vertex 41.9179 -20.8207 -0.1
+ vertex 41.9179 -20.8207 -0.2
vertex 41.9099 -20.7296 0
- vertex 41.9099 -20.7296 -0.1
+ vertex 41.9099 -20.7296 -0.2
endloop
endfacet
facet normal -0.996169 -0.0874488 0
outer loop
vertex 41.9099 -20.7296 0
- vertex 41.9179 -20.8207 -0.1
+ vertex 41.9179 -20.8207 -0.2
vertex 41.9179 -20.8207 0
endloop
endfacet
facet normal -0.639023 -0.769188 0
outer loop
- vertex 41.9179 -20.8207 -0.1
+ vertex 41.9179 -20.8207 -0.2
vertex 41.9427 -20.8413 0
vertex 41.9179 -20.8207 0
endloop
@@ -22787,13 +22787,13 @@ solid OpenSCAD_Model
facet normal -0.639023 -0.769188 -0
outer loop
vertex 41.9427 -20.8413 0
- vertex 41.9179 -20.8207 -0.1
- vertex 41.9427 -20.8413 -0.1
+ vertex 41.9179 -20.8207 -0.2
+ vertex 41.9427 -20.8413 -0.2
endloop
endfacet
facet normal -0.0984788 -0.995139 0
outer loop
- vertex 41.9427 -20.8413 -0.1
+ vertex 41.9427 -20.8413 -0.2
vertex 41.9827 -20.8453 0
vertex 41.9427 -20.8413 0
endloop
@@ -22801,13 +22801,13 @@ solid OpenSCAD_Model
facet normal -0.0984788 -0.995139 -0
outer loop
vertex 41.9827 -20.8453 0
- vertex 41.9427 -20.8413 -0.1
- vertex 41.9827 -20.8453 -0.1
+ vertex 41.9427 -20.8413 -0.2
+ vertex 41.9827 -20.8453 -0.2
endloop
endfacet
facet normal 0.313279 -0.949661 0
outer loop
- vertex 41.9827 -20.8453 -0.1
+ vertex 41.9827 -20.8453 -0.2
vertex 42.1116 -20.8028 0
vertex 41.9827 -20.8453 0
endloop
@@ -22815,13 +22815,13 @@ solid OpenSCAD_Model
facet normal 0.313279 -0.949661 0
outer loop
vertex 42.1116 -20.8028 0
- vertex 41.9827 -20.8453 -0.1
- vertex 42.1116 -20.8028 -0.1
+ vertex 41.9827 -20.8453 -0.2
+ vertex 42.1116 -20.8028 -0.2
endloop
endfacet
facet normal 0.482712 -0.875779 0
outer loop
- vertex 42.1116 -20.8028 -0.1
+ vertex 42.1116 -20.8028 -0.2
vertex 42.3117 -20.6924 0
vertex 42.1116 -20.8028 0
endloop
@@ -22829,13 +22829,13 @@ solid OpenSCAD_Model
facet normal 0.482712 -0.875779 0
outer loop
vertex 42.3117 -20.6924 0
- vertex 42.1116 -20.8028 -0.1
- vertex 42.3117 -20.6924 -0.1
+ vertex 42.1116 -20.8028 -0.2
+ vertex 42.3117 -20.6924 -0.2
endloop
endfacet
facet normal 0.552983 -0.833193 0
outer loop
- vertex 42.3117 -20.6924 -0.1
+ vertex 42.3117 -20.6924 -0.2
vertex 42.9547 -20.2657 0
vertex 42.3117 -20.6924 0
endloop
@@ -22843,13 +22843,13 @@ solid OpenSCAD_Model
facet normal 0.552983 -0.833193 0
outer loop
vertex 42.9547 -20.2657 0
- vertex 42.3117 -20.6924 -0.1
- vertex 42.9547 -20.2657 -0.1
+ vertex 42.3117 -20.6924 -0.2
+ vertex 42.9547 -20.2657 -0.2
endloop
endfacet
facet normal 0.550831 -0.834617 0
outer loop
- vertex 42.9547 -20.2657 -0.1
+ vertex 42.9547 -20.2657 -0.2
vertex 43.4033 -19.9696 0
vertex 42.9547 -20.2657 0
endloop
@@ -22857,13 +22857,13 @@ solid OpenSCAD_Model
facet normal 0.550831 -0.834617 0
outer loop
vertex 43.4033 -19.9696 0
- vertex 42.9547 -20.2657 -0.1
- vertex 43.4033 -19.9696 -0.1
+ vertex 42.9547 -20.2657 -0.2
+ vertex 43.4033 -19.9696 -0.2
endloop
endfacet
facet normal 0.505722 -0.862696 0
outer loop
- vertex 43.4033 -19.9696 -0.1
+ vertex 43.4033 -19.9696 -0.2
vertex 43.8201 -19.7253 0
vertex 43.4033 -19.9696 0
endloop
@@ -22871,13 +22871,13 @@ solid OpenSCAD_Model
facet normal 0.505722 -0.862696 0
outer loop
vertex 43.8201 -19.7253 0
- vertex 43.4033 -19.9696 -0.1
- vertex 43.8201 -19.7253 -0.1
+ vertex 43.4033 -19.9696 -0.2
+ vertex 43.8201 -19.7253 -0.2
endloop
endfacet
facet normal 0.444191 -0.895932 0
outer loop
- vertex 43.8201 -19.7253 -0.1
+ vertex 43.8201 -19.7253 -0.2
vertex 44.2162 -19.5289 0
vertex 43.8201 -19.7253 0
endloop
@@ -22885,13 +22885,13 @@ solid OpenSCAD_Model
facet normal 0.444191 -0.895932 0
outer loop
vertex 44.2162 -19.5289 0
- vertex 43.8201 -19.7253 -0.1
- vertex 44.2162 -19.5289 -0.1
+ vertex 43.8201 -19.7253 -0.2
+ vertex 44.2162 -19.5289 -0.2
endloop
endfacet
facet normal 0.36641 -0.930454 0
outer loop
- vertex 44.2162 -19.5289 -0.1
+ vertex 44.2162 -19.5289 -0.2
vertex 44.6026 -19.3768 0
vertex 44.2162 -19.5289 0
endloop
@@ -22899,13 +22899,13 @@ solid OpenSCAD_Model
facet normal 0.36641 -0.930454 0
outer loop
vertex 44.6026 -19.3768 0
- vertex 44.2162 -19.5289 -0.1
- vertex 44.6026 -19.3768 -0.1
+ vertex 44.2162 -19.5289 -0.2
+ vertex 44.6026 -19.3768 -0.2
endloop
endfacet
facet normal 0.276888 -0.960902 0
outer loop
- vertex 44.6026 -19.3768 -0.1
+ vertex 44.6026 -19.3768 -0.2
vertex 44.9905 -19.265 0
vertex 44.6026 -19.3768 0
endloop
@@ -22913,13 +22913,13 @@ solid OpenSCAD_Model
facet normal 0.276888 -0.960902 0
outer loop
vertex 44.9905 -19.265 0
- vertex 44.6026 -19.3768 -0.1
- vertex 44.9905 -19.265 -0.1
+ vertex 44.6026 -19.3768 -0.2
+ vertex 44.9905 -19.265 -0.2
endloop
endfacet
facet normal 0.184446 -0.982843 0
outer loop
- vertex 44.9905 -19.265 -0.1
+ vertex 44.9905 -19.265 -0.2
vertex 45.391 -19.1898 0
vertex 44.9905 -19.265 0
endloop
@@ -22927,13 +22927,13 @@ solid OpenSCAD_Model
facet normal 0.184446 -0.982843 0
outer loop
vertex 45.391 -19.1898 0
- vertex 44.9905 -19.265 -0.1
- vertex 45.391 -19.1898 -0.1
+ vertex 44.9905 -19.265 -0.2
+ vertex 45.391 -19.1898 -0.2
endloop
endfacet
facet normal 0.0992848 -0.995059 0
outer loop
- vertex 45.391 -19.1898 -0.1
+ vertex 45.391 -19.1898 -0.2
vertex 45.8151 -19.1475 0
vertex 45.391 -19.1898 0
endloop
@@ -22941,13 +22941,13 @@ solid OpenSCAD_Model
facet normal 0.0992848 -0.995059 0
outer loop
vertex 45.8151 -19.1475 0
- vertex 45.391 -19.1898 -0.1
- vertex 45.8151 -19.1475 -0.1
+ vertex 45.391 -19.1898 -0.2
+ vertex 45.8151 -19.1475 -0.2
endloop
endfacet
facet normal 0.028896 -0.999582 0
outer loop
- vertex 45.8151 -19.1475 -0.1
+ vertex 45.8151 -19.1475 -0.2
vertex 46.274 -19.1343 0
vertex 45.8151 -19.1475 0
endloop
@@ -22955,13 +22955,13 @@ solid OpenSCAD_Model
facet normal 0.028896 -0.999582 0
outer loop
vertex 46.274 -19.1343 0
- vertex 45.8151 -19.1475 -0.1
- vertex 46.274 -19.1343 -0.1
+ vertex 45.8151 -19.1475 -0.2
+ vertex 46.274 -19.1343 -0.2
endloop
endfacet
facet normal -0.036999 -0.999315 0
outer loop
- vertex 46.274 -19.1343 -0.1
+ vertex 46.274 -19.1343 -0.2
vertex 46.8289 -19.1548 0
vertex 46.274 -19.1343 0
endloop
@@ -22969,7027 +22969,7027 @@ solid OpenSCAD_Model
facet normal -0.036999 -0.999315 -0
outer loop
vertex 46.8289 -19.1548 0
- vertex 46.274 -19.1343 -0.1
- vertex 46.8289 -19.1548 -0.1
+ vertex 46.274 -19.1343 -0.2
+ vertex 46.8289 -19.1548 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.1728 30.7024 -0.1
- vertex 12.3025 30.5214 -0.1
- vertex 12.291 30.606 -0.1
+ vertex 12.1728 30.7024 -0.2
+ vertex 12.3025 30.5214 -0.2
+ vertex 12.291 30.606 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.1728 30.7024 -0.1
- vertex 12.291 30.606 -0.1
- vertex 12.2478 30.6663 -0.1
+ vertex 12.1728 30.7024 -0.2
+ vertex 12.291 30.606 -0.2
+ vertex 12.2478 30.6663 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.0661 30.7144 -0.1
- vertex 12.3025 30.5214 -0.1
- vertex 12.1728 30.7024 -0.1
+ vertex 12.0661 30.7144 -0.2
+ vertex 12.3025 30.5214 -0.2
+ vertex 12.1728 30.7024 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.3025 30.5214 -0.1
- vertex 12.0661 30.7144 -0.1
- vertex 12.2821 30.4122 -0.1
+ vertex 12.3025 30.5214 -0.2
+ vertex 12.0661 30.7144 -0.2
+ vertex 12.2821 30.4122 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.9476 30.6899 -0.1
- vertex 12.2821 30.4122 -0.1
- vertex 12.0661 30.7144 -0.1
+ vertex 11.9476 30.6899 -0.2
+ vertex 12.2821 30.4122 -0.2
+ vertex 12.0661 30.7144 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.2821 30.4122 -0.1
- vertex 11.9476 30.6899 -0.1
- vertex 12.23 30.2784 -0.1
+ vertex 12.2821 30.4122 -0.2
+ vertex 11.9476 30.6899 -0.2
+ vertex 12.23 30.2784 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.7177 30.5077 -0.1
- vertex 12.23 30.2784 -0.1
- vertex 11.8311 30.6195 -0.1
+ vertex 11.7177 30.5077 -0.2
+ vertex 12.23 30.2784 -0.2
+ vertex 11.8311 30.6195 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.23 30.2784 -0.1
- vertex 11.9476 30.6899 -0.1
- vertex 11.8311 30.6195 -0.1
+ vertex 12.23 30.2784 -0.2
+ vertex 11.9476 30.6899 -0.2
+ vertex 11.8311 30.6195 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.6088 30.3591 -0.1
- vertex 12.23 30.2784 -0.1
- vertex 11.7177 30.5077 -0.1
+ vertex 11.6088 30.3591 -0.2
+ vertex 12.23 30.2784 -0.2
+ vertex 11.7177 30.5077 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.23 30.2784 -0.1
- vertex 11.6088 30.3591 -0.1
- vertex 12.0304 29.9363 -0.1
+ vertex 12.23 30.2784 -0.2
+ vertex 11.6088 30.3591 -0.2
+ vertex 12.0304 29.9363 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.5057 30.1782 -0.1
- vertex 12.0304 29.9363 -0.1
- vertex 11.6088 30.3591 -0.1
+ vertex 11.5057 30.1782 -0.2
+ vertex 12.0304 29.9363 -0.2
+ vertex 11.6088 30.3591 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.0304 29.9363 -0.1
- vertex 11.5057 30.1782 -0.1
- vertex 11.965 29.8184 -0.1
+ vertex 12.0304 29.9363 -0.2
+ vertex 11.5057 30.1782 -0.2
+ vertex 11.965 29.8184 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.965 29.8184 -0.1
- vertex 11.4096 29.9696 -0.1
- vertex 11.9082 29.6745 -0.1
+ vertex 11.965 29.8184 -0.2
+ vertex 11.4096 29.9696 -0.2
+ vertex 11.9082 29.6745 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.4096 29.9696 -0.1
- vertex 11.965 29.8184 -0.1
- vertex 11.5057 30.1782 -0.1
+ vertex 11.4096 29.9696 -0.2
+ vertex 11.965 29.8184 -0.2
+ vertex 11.5057 30.1782 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.6784 17.7808 -0.1
- vertex 26.0696 17.9605 -0.1
- vertex 26.0933 17.5963 -0.1
+ vertex 26.6784 17.7808 -0.2
+ vertex 26.0696 17.9605 -0.2
+ vertex 26.0933 17.5963 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.2605 19.0904 -0.1
- vertex 26.0009 18.2942 -0.1
- vertex 26.0696 17.9605 -0.1
+ vertex 26.2605 19.0904 -0.2
+ vertex 26.0009 18.2942 -0.2
+ vertex 26.0696 17.9605 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.5652 19.0574 -0.1
- vertex 26.1176 19.296 -0.1
- vertex 25.9541 19.4837 -0.1
+ vertex 25.5652 19.0574 -0.2
+ vertex 26.1176 19.296 -0.2
+ vertex 25.9541 19.4837 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.2605 19.0904 -0.1
- vertex 25.8914 18.5921 -0.1
- vertex 26.0009 18.2942 -0.1
+ vertex 26.2605 19.0904 -0.2
+ vertex 25.8914 18.5921 -0.2
+ vertex 26.0009 18.2942 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.5652 19.0574 -0.1
- vertex 25.9541 19.4837 -0.1
- vertex 25.7697 19.6539 -0.1
+ vertex 25.5652 19.0574 -0.2
+ vertex 25.9541 19.4837 -0.2
+ vertex 25.7697 19.6539 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.2605 19.0904 -0.1
- vertex 25.7448 18.8483 -0.1
- vertex 25.8914 18.5921 -0.1
+ vertex 26.2605 19.0904 -0.2
+ vertex 25.7448 18.8483 -0.2
+ vertex 25.8914 18.5921 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.1176 19.296 -0.1
- vertex 25.5652 19.0574 -0.1
- vertex 25.7448 18.8483 -0.1
+ vertex 26.1176 19.296 -0.2
+ vertex 25.5652 19.0574 -0.2
+ vertex 25.7448 18.8483 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.3564 19.2137 -0.1
- vertex 25.7697 19.6539 -0.1
- vertex 25.5639 19.8069 -0.1
+ vertex 25.3564 19.2137 -0.2
+ vertex 25.7697 19.6539 -0.2
+ vertex 25.5639 19.8069 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.7697 19.6539 -0.1
- vertex 25.3564 19.2137 -0.1
- vertex 25.5652 19.0574 -0.1
+ vertex 25.7697 19.6539 -0.2
+ vertex 25.3564 19.2137 -0.2
+ vertex 25.5652 19.0574 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.1224 19.3115 -0.1
- vertex 25.5639 19.8069 -0.1
- vertex 25.3364 19.943 -0.1
+ vertex 25.1224 19.3115 -0.2
+ vertex 25.5639 19.8069 -0.2
+ vertex 25.3364 19.943 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.5639 19.8069 -0.1
- vertex 25.1224 19.3115 -0.1
- vertex 25.3564 19.2137 -0.1
+ vertex 25.5639 19.8069 -0.2
+ vertex 25.1224 19.3115 -0.2
+ vertex 25.3564 19.2137 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.9972 19.3368 -0.1
- vertex 25.3364 19.943 -0.1
- vertex 25.087 20.0627 -0.1
+ vertex 24.9972 19.3368 -0.2
+ vertex 25.3364 19.943 -0.2
+ vertex 25.087 20.0627 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.3364 19.943 -0.1
- vertex 24.9972 19.3368 -0.1
- vertex 25.1224 19.3115 -0.1
+ vertex 25.3364 19.943 -0.2
+ vertex 24.9972 19.3368 -0.2
+ vertex 25.1224 19.3115 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.087 20.0627 -0.1
- vertex 24.8672 19.3454 -0.1
- vertex 24.9972 19.3368 -0.1
+ vertex 25.087 20.0627 -0.2
+ vertex 24.8672 19.3454 -0.2
+ vertex 24.9972 19.3368 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.8151 20.1664 -0.1
- vertex 24.8672 19.3454 -0.1
- vertex 25.087 20.0627 -0.1
+ vertex 24.8151 20.1664 -0.2
+ vertex 24.8672 19.3454 -0.2
+ vertex 25.087 20.0627 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.8151 20.1664 -0.1
- vertex 24.6124 19.3722 -0.1
- vertex 24.8672 19.3454 -0.1
+ vertex 24.8151 20.1664 -0.2
+ vertex 24.6124 19.3722 -0.2
+ vertex 24.8672 19.3454 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.5205 20.2543 -0.1
- vertex 24.6124 19.3722 -0.1
- vertex 24.8151 20.1664 -0.1
+ vertex 24.5205 20.2543 -0.2
+ vertex 24.6124 19.3722 -0.2
+ vertex 24.8151 20.1664 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.5205 20.2543 -0.1
- vertex 24.2514 19.4451 -0.1
- vertex 24.6124 19.3722 -0.1
+ vertex 24.5205 20.2543 -0.2
+ vertex 24.2514 19.4451 -0.2
+ vertex 24.6124 19.3722 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.2028 20.3268 -0.1
- vertex 24.2514 19.4451 -0.1
- vertex 24.5205 20.2543 -0.1
+ vertex 24.2028 20.3268 -0.2
+ vertex 24.2514 19.4451 -0.2
+ vertex 24.5205 20.2543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.8321 19.5531 -0.1
- vertex 24.2028 20.3268 -0.1
- vertex 23.8617 20.3844 -0.1
+ vertex 23.8321 19.5531 -0.2
+ vertex 24.2028 20.3268 -0.2
+ vertex 23.8617 20.3844 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.2028 20.3268 -0.1
- vertex 23.8321 19.5531 -0.1
- vertex 24.2514 19.4451 -0.1
+ vertex 24.2028 20.3268 -0.2
+ vertex 23.8321 19.5531 -0.2
+ vertex 24.2514 19.4451 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.4027 19.6849 -0.1
- vertex 23.8617 20.3844 -0.1
- vertex 23.4814 20.4643 -0.1
+ vertex 23.4027 19.6849 -0.2
+ vertex 23.8617 20.3844 -0.2
+ vertex 23.4814 20.4643 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.8617 20.3844 -0.1
- vertex 23.4027 19.6849 -0.1
- vertex 23.8321 19.5531 -0.1
+ vertex 23.8617 20.3844 -0.2
+ vertex 23.4027 19.6849 -0.2
+ vertex 23.8321 19.5531 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.9977 19.8472 -0.1
- vertex 23.4814 20.4643 -0.1
- vertex 23.1504 20.59 -0.1
+ vertex 22.9977 19.8472 -0.2
+ vertex 23.4814 20.4643 -0.2
+ vertex 23.1504 20.59 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.4814 20.4643 -0.1
- vertex 22.9977 19.8472 -0.1
- vertex 23.4027 19.6849 -0.1
+ vertex 23.4814 20.4643 -0.2
+ vertex 22.9977 19.8472 -0.2
+ vertex 23.4027 19.6849 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.6486 20.047 -0.1
- vertex 23.1504 20.59 -0.1
- vertex 22.8668 20.7638 -0.1
+ vertex 22.6486 20.047 -0.2
+ vertex 23.1504 20.59 -0.2
+ vertex 22.8668 20.7638 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.3515 20.2895 -0.1
- vertex 22.8668 20.7638 -0.1
- vertex 22.7421 20.8693 -0.1
+ vertex 22.3515 20.2895 -0.2
+ vertex 22.8668 20.7638 -0.2
+ vertex 22.7421 20.8693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.1504 20.59 -0.1
- vertex 22.6486 20.047 -0.1
- vertex 22.9977 19.8472 -0.1
+ vertex 23.1504 20.59 -0.2
+ vertex 22.6486 20.047 -0.2
+ vertex 22.9977 19.8472 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.2213 20.4283 -0.1
- vertex 22.7421 20.8693 -0.1
- vertex 22.6286 20.9877 -0.1
+ vertex 22.2213 20.4283 -0.2
+ vertex 22.7421 20.8693 -0.2
+ vertex 22.6286 20.9877 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.8989 20.9229 -0.1
- vertex 22.6286 20.9877 -0.1
- vertex 22.4341 21.2638 -0.1
+ vertex 21.8989 20.9229 -0.2
+ vertex 22.6286 20.9877 -0.2
+ vertex 22.4341 21.2638 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.8668 20.7638 -0.1
- vertex 22.3515 20.2895 -0.1
- vertex 22.6486 20.047 -0.1
+ vertex 22.8668 20.7638 -0.2
+ vertex 22.3515 20.2895 -0.2
+ vertex 22.6486 20.047 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 21.7362 21.3239 -0.1
- vertex 22.4341 21.2638 -0.1
- vertex 22.2815 21.5943 -0.1
+ vertex 21.7362 21.3239 -0.2
+ vertex 22.4341 21.2638 -0.2
+ vertex 22.2815 21.5943 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.7421 20.8693 -0.1
- vertex 22.2213 20.4283 -0.1
- vertex 22.3515 20.2895 -0.1
+ vertex 22.7421 20.8693 -0.2
+ vertex 22.2213 20.4283 -0.2
+ vertex 22.3515 20.2895 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 21.6111 21.7881 -0.1
- vertex 22.2815 21.5943 -0.1
- vertex 22.1689 21.9813 -0.1
+ vertex 21.6111 21.7881 -0.2
+ vertex 22.2815 21.5943 -0.2
+ vertex 22.1689 21.9813 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.6286 20.9877 -0.1
- vertex 22.1028 20.5797 -0.1
- vertex 22.2213 20.4283 -0.1
+ vertex 22.6286 20.9877 -0.2
+ vertex 22.1028 20.5797 -0.2
+ vertex 22.2213 20.4283 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 21.5197 22.3204 -0.1
- vertex 22.1689 21.9813 -0.1
- vertex 22.0944 22.427 -0.1
+ vertex 21.5197 22.3204 -0.2
+ vertex 22.1689 21.9813 -0.2
+ vertex 22.0944 22.427 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 21.4205 22.8275 -0.1
- vertex 22.0944 22.427 -0.1
- vertex 21.9928 23.1034 -0.1
+ vertex 21.4205 22.8275 -0.2
+ vertex 22.0944 22.427 -0.2
+ vertex 21.9928 23.1034 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.3493 23.064 -0.1
- vertex 21.9928 23.1034 -0.1
- vertex 21.926 23.397 -0.1
+ vertex 21.3493 23.064 -0.2
+ vertex 21.9928 23.1034 -0.2
+ vertex 21.926 23.397 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.6286 20.9877 -0.1
- vertex 21.8989 20.9229 -0.1
- vertex 22.1028 20.5797 -0.1
+ vertex 22.6286 20.9877 -0.2
+ vertex 21.8989 20.9229 -0.2
+ vertex 22.1028 20.5797 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.2635 23.2891 -0.1
- vertex 21.926 23.397 -0.1
- vertex 21.8437 23.6658 -0.1
+ vertex 21.2635 23.2891 -0.2
+ vertex 21.926 23.397 -0.2
+ vertex 21.8437 23.6658 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.1632 23.503 -0.1
- vertex 21.8437 23.6658 -0.1
- vertex 21.7423 23.9135 -0.1
+ vertex 21.1632 23.503 -0.2
+ vertex 21.8437 23.6658 -0.2
+ vertex 21.7423 23.9135 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.4341 21.2638 -0.1
- vertex 21.7362 21.3239 -0.1
- vertex 21.8989 20.9229 -0.1
+ vertex 22.4341 21.2638 -0.2
+ vertex 21.7362 21.3239 -0.2
+ vertex 21.8989 20.9229 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.0482 23.7058 -0.1
- vertex 21.7423 23.9135 -0.1
- vertex 21.6182 24.144 -0.1
+ vertex 21.0482 23.7058 -0.2
+ vertex 21.7423 23.9135 -0.2
+ vertex 21.6182 24.144 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.2815 21.5943 -0.1
- vertex 21.6111 21.7881 -0.1
- vertex 21.7362 21.3239 -0.1
+ vertex 22.2815 21.5943 -0.2
+ vertex 21.6111 21.7881 -0.2
+ vertex 21.7362 21.3239 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.1689 21.9813 -0.1
- vertex 21.5197 22.3204 -0.1
- vertex 21.6111 21.7881 -0.1
+ vertex 22.1689 21.9813 -0.2
+ vertex 21.5197 22.3204 -0.2
+ vertex 21.6111 21.7881 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.9184 23.8976 -0.1
- vertex 21.6182 24.144 -0.1
- vertex 21.4677 24.3609 -0.1
+ vertex 20.9184 23.8976 -0.2
+ vertex 21.6182 24.144 -0.2
+ vertex 21.4677 24.3609 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.0944 22.427 -0.1
- vertex 21.4205 22.8275 -0.1
- vertex 21.5197 22.3204 -0.1
+ vertex 22.0944 22.427 -0.2
+ vertex 21.4205 22.8275 -0.2
+ vertex 21.5197 22.3204 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.9928 23.1034 -0.1
- vertex 21.3493 23.064 -0.1
- vertex 21.4205 22.8275 -0.1
+ vertex 21.9928 23.1034 -0.2
+ vertex 21.3493 23.064 -0.2
+ vertex 21.4205 22.8275 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.7738 24.0784 -0.1
- vertex 21.4677 24.3609 -0.1
- vertex 21.2873 24.568 -0.1
+ vertex 20.7738 24.0784 -0.2
+ vertex 21.4677 24.3609 -0.2
+ vertex 21.2873 24.568 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.926 23.397 -0.1
- vertex 21.2635 23.2891 -0.1
- vertex 21.3493 23.064 -0.1
+ vertex 21.926 23.397 -0.2
+ vertex 21.2635 23.2891 -0.2
+ vertex 21.3493 23.064 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.8437 23.6658 -0.1
- vertex 21.1632 23.503 -0.1
- vertex 21.2635 23.2891 -0.1
+ vertex 21.8437 23.6658 -0.2
+ vertex 21.1632 23.503 -0.2
+ vertex 21.2635 23.2891 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.6143 24.2484 -0.1
- vertex 21.2873 24.568 -0.1
- vertex 21.0733 24.7691 -0.1
+ vertex 20.6143 24.2484 -0.2
+ vertex 21.2873 24.568 -0.2
+ vertex 21.0733 24.7691 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.7423 23.9135 -0.1
- vertex 21.0482 23.7058 -0.1
- vertex 21.1632 23.503 -0.1
+ vertex 21.7423 23.9135 -0.2
+ vertex 21.0482 23.7058 -0.2
+ vertex 21.1632 23.503 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.6182 24.144 -0.1
- vertex 20.9184 23.8976 -0.1
- vertex 21.0482 23.7058 -0.1
+ vertex 21.6182 24.144 -0.2
+ vertex 20.9184 23.8976 -0.2
+ vertex 21.0482 23.7058 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.4398 24.4076 -0.1
- vertex 21.0733 24.7691 -0.1
- vertex 20.8221 24.9679 -0.1
+ vertex 20.4398 24.4076 -0.2
+ vertex 21.0733 24.7691 -0.2
+ vertex 20.8221 24.9679 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.4677 24.3609 -0.1
- vertex 20.7738 24.0784 -0.1
- vertex 20.9184 23.8976 -0.1
+ vertex 21.4677 24.3609 -0.2
+ vertex 20.7738 24.0784 -0.2
+ vertex 20.9184 23.8976 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.2873 24.568 -0.1
- vertex 20.6143 24.2484 -0.1
- vertex 20.7738 24.0784 -0.1
+ vertex 21.2873 24.568 -0.2
+ vertex 20.6143 24.2484 -0.2
+ vertex 20.7738 24.0784 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.2502 24.5562 -0.1
- vertex 20.8221 24.9679 -0.1
- vertex 20.53 25.168 -0.1
+ vertex 20.2502 24.5562 -0.2
+ vertex 20.8221 24.9679 -0.2
+ vertex 20.53 25.168 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.0733 24.7691 -0.1
- vertex 20.4398 24.4076 -0.1
- vertex 20.6143 24.2484 -0.1
+ vertex 21.0733 24.7691 -0.2
+ vertex 20.4398 24.4076 -0.2
+ vertex 20.6143 24.2484 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.8221 24.9679 -0.1
- vertex 20.2502 24.5562 -0.1
- vertex 20.4398 24.4076 -0.1
+ vertex 20.8221 24.9679 -0.2
+ vertex 20.2502 24.5562 -0.2
+ vertex 20.4398 24.4076 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0455 24.6942 -0.1
- vertex 20.53 25.168 -0.1
- vertex 20.1936 25.3734 -0.1
+ vertex 20.0455 24.6942 -0.2
+ vertex 20.53 25.168 -0.2
+ vertex 20.1936 25.3734 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.53 25.168 -0.1
- vertex 20.0455 24.6942 -0.1
- vertex 20.2502 24.5562 -0.1
+ vertex 20.53 25.168 -0.2
+ vertex 20.0455 24.6942 -0.2
+ vertex 20.2502 24.5562 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.1936 25.3734 -0.1
- vertex 19.5904 24.9388 -0.1
- vertex 20.0455 24.6942 -0.1
+ vertex 20.1936 25.3734 -0.2
+ vertex 19.5904 24.9388 -0.2
+ vertex 20.0455 24.6942 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3729 25.8147 -0.1
- vertex 19.5904 24.9388 -0.1
- vertex 20.1936 25.3734 -0.1
+ vertex 19.3729 25.8147 -0.2
+ vertex 19.5904 24.9388 -0.2
+ vertex 20.1936 25.3734 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3729 25.8147 -0.1
- vertex 19.0737 25.1422 -0.1
- vertex 19.5904 24.9388 -0.1
+ vertex 19.3729 25.8147 -0.2
+ vertex 19.0737 25.1422 -0.2
+ vertex 19.5904 24.9388 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.3729 25.8147 -0.1
- vertex 18.5685 25.3244 -0.1
- vertex 19.0737 25.1422 -0.1
+ vertex 19.3729 25.8147 -0.2
+ vertex 18.5685 25.3244 -0.2
+ vertex 19.0737 25.1422 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.3311 26.3216 -0.1
- vertex 18.5685 25.3244 -0.1
- vertex 19.3729 25.8147 -0.1
+ vertex 18.3311 26.3216 -0.2
+ vertex 18.5685 25.3244 -0.2
+ vertex 19.3729 25.8147 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.3311 26.3216 -0.1
- vertex 18.1033 25.5216 -0.1
- vertex 18.5685 25.3244 -0.1
+ vertex 18.3311 26.3216 -0.2
+ vertex 18.1033 25.5216 -0.2
+ vertex 18.5685 25.3244 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.3311 26.3216 -0.1
- vertex 17.6707 25.7385 -0.1
- vertex 18.1033 25.5216 -0.1
+ vertex 18.3311 26.3216 -0.2
+ vertex 17.6707 25.7385 -0.2
+ vertex 18.1033 25.5216 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6504 26.6607 -0.1
- vertex 17.6707 25.7385 -0.1
- vertex 18.3311 26.3216 -0.1
+ vertex 17.6504 26.6607 -0.2
+ vertex 17.6707 25.7385 -0.2
+ vertex 18.3311 26.3216 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6504 26.6607 -0.1
- vertex 17.2631 25.98 -0.1
- vertex 17.6707 25.7385 -0.1
+ vertex 17.6504 26.6607 -0.2
+ vertex 17.2631 25.98 -0.2
+ vertex 17.6707 25.7385 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.873 26.2508 -0.1
- vertex 17.6504 26.6607 -0.1
- vertex 17.0889 26.9817 -0.1
+ vertex 16.873 26.2508 -0.2
+ vertex 17.6504 26.6607 -0.2
+ vertex 17.0889 26.9817 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6504 26.6607 -0.1
- vertex 16.873 26.2508 -0.1
- vertex 17.2631 25.98 -0.1
+ vertex 17.6504 26.6607 -0.2
+ vertex 16.873 26.2508 -0.2
+ vertex 17.2631 25.98 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.4932 26.5558 -0.1
- vertex 17.0889 26.9817 -0.1
- vertex 16.6359 27.2959 -0.1
+ vertex 16.4932 26.5558 -0.2
+ vertex 17.0889 26.9817 -0.2
+ vertex 16.6359 27.2959 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.0889 26.9817 -0.1
- vertex 16.4932 26.5558 -0.1
- vertex 16.873 26.2508 -0.1
+ vertex 17.0889 26.9817 -0.2
+ vertex 16.4932 26.5558 -0.2
+ vertex 16.873 26.2508 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.116 26.8997 -0.1
- vertex 16.6359 27.2959 -0.1
- vertex 16.4467 27.454 -0.1
+ vertex 16.116 26.8997 -0.2
+ vertex 16.6359 27.2959 -0.2
+ vertex 16.4467 27.454 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.116 26.8997 -0.1
- vertex 16.4467 27.454 -0.1
- vertex 16.2806 27.6146 -0.1
+ vertex 16.116 26.8997 -0.2
+ vertex 16.4467 27.454 -0.2
+ vertex 16.2806 27.6146 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.734 27.2872 -0.1
- vertex 16.2806 27.6146 -0.1
- vertex 16.1362 27.7792 -0.1
+ vertex 15.734 27.2872 -0.2
+ vertex 16.2806 27.6146 -0.2
+ vertex 16.1362 27.7792 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.6359 27.2959 -0.1
- vertex 16.116 26.8997 -0.1
- vertex 16.4932 26.5558 -0.1
+ vertex 16.6359 27.2959 -0.2
+ vertex 16.116 26.8997 -0.2
+ vertex 16.4932 26.5558 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.734 27.2872 -0.1
- vertex 16.1362 27.7792 -0.1
- vertex 16.0121 27.9491 -0.1
+ vertex 15.734 27.2872 -0.2
+ vertex 16.1362 27.7792 -0.2
+ vertex 16.0121 27.9491 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.344 27.7317 -0.1
- vertex 16.0121 27.9491 -0.1
- vertex 15.9071 28.1258 -0.1
+ vertex 15.344 27.7317 -0.2
+ vertex 16.0121 27.9491 -0.2
+ vertex 15.9071 28.1258 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.2193 27.9155 -0.1
- vertex 15.9071 28.1258 -0.1
- vertex 15.8197 28.3106 -0.1
+ vertex 15.2193 27.9155 -0.2
+ vertex 15.9071 28.1258 -0.2
+ vertex 15.8197 28.3106 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.1337 28.0941 -0.1
- vertex 15.8197 28.3106 -0.1
- vertex 15.7487 28.5051 -0.1
+ vertex 15.1337 28.0941 -0.2
+ vertex 15.8197 28.3106 -0.2
+ vertex 15.7487 28.5051 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.2806 27.6146 -0.1
- vertex 15.734 27.2872 -0.1
- vertex 16.116 26.8997 -0.1
+ vertex 16.2806 27.6146 -0.2
+ vertex 15.734 27.2872 -0.2
+ vertex 16.116 26.8997 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.0574 28.4965 -0.1
- vertex 15.7487 28.5051 -0.1
- vertex 15.6927 28.7106 -0.1
+ vertex 15.0574 28.4965 -0.2
+ vertex 15.7487 28.5051 -0.2
+ vertex 15.6927 28.7106 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.0552 28.7509 -0.1
- vertex 15.6927 28.7106 -0.1
- vertex 15.6202 29.1601 -0.1
+ vertex 15.0552 28.7509 -0.2
+ vertex 15.6927 28.7106 -0.2
+ vertex 15.6202 29.1601 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.1102 29.496 -0.1
- vertex 15.6202 29.1601 -0.1
- vertex 15.5622 29.5773 -0.1
+ vertex 15.1102 29.496 -0.2
+ vertex 15.6202 29.1601 -0.2
+ vertex 15.5622 29.5773 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.1701 29.8123 -0.1
- vertex 15.5622 29.5773 -0.1
- vertex 15.49 29.8698 -0.1
+ vertex 15.1701 29.8123 -0.2
+ vertex 15.5622 29.5773 -0.2
+ vertex 15.49 29.8698 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.2437 30.0088 -0.1
- vertex 15.49 29.8698 -0.1
- vertex 15.4091 30.0386 -0.1
+ vertex 15.2437 30.0088 -0.2
+ vertex 15.49 29.8698 -0.2
+ vertex 15.4091 30.0386 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 15.2838 30.0618 -0.1
- vertex 15.4091 30.0386 -0.1
- vertex 15.3672 30.0768 -0.1
+ vertex 15.2838 30.0618 -0.2
+ vertex 15.4091 30.0386 -0.2
+ vertex 15.3672 30.0768 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.6202 29.1601 -0.1
- vertex 15.0694 29.0611 -0.1
- vertex 15.0552 28.7509 -0.1
+ vertex 15.6202 29.1601 -0.2
+ vertex 15.0694 29.0611 -0.2
+ vertex 15.0552 28.7509 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.2838 30.0618 -0.1
- vertex 15.3672 30.0768 -0.1
- vertex 15.3252 30.0845 -0.1
+ vertex 15.2838 30.0618 -0.2
+ vertex 15.3672 30.0768 -0.2
+ vertex 15.3252 30.0845 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.4091 30.0386 -0.1
- vertex 15.2838 30.0618 -0.1
- vertex 15.2437 30.0088 -0.1
+ vertex 15.4091 30.0386 -0.2
+ vertex 15.2838 30.0618 -0.2
+ vertex 15.2437 30.0088 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.49 29.8698 -0.1
- vertex 15.2437 30.0088 -0.1
- vertex 15.1701 29.8123 -0.1
+ vertex 15.49 29.8698 -0.2
+ vertex 15.2437 30.0088 -0.2
+ vertex 15.1701 29.8123 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.6927 28.7106 -0.1
- vertex 15.0552 28.7509 -0.1
- vertex 15.0574 28.4965 -0.1
+ vertex 15.6927 28.7106 -0.2
+ vertex 15.0552 28.7509 -0.2
+ vertex 15.0574 28.4965 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.5622 29.5773 -0.1
- vertex 15.1701 29.8123 -0.1
- vertex 15.1102 29.496 -0.1
+ vertex 15.5622 29.5773 -0.2
+ vertex 15.1701 29.8123 -0.2
+ vertex 15.1102 29.496 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.6202 29.1601 -0.1
- vertex 15.1102 29.496 -0.1
- vertex 15.0694 29.0611 -0.1
+ vertex 15.6202 29.1601 -0.2
+ vertex 15.1102 29.496 -0.2
+ vertex 15.0694 29.0611 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.0121 27.9491 -0.1
- vertex 15.344 27.7317 -0.1
- vertex 15.734 27.2872 -0.1
+ vertex 16.0121 27.9491 -0.2
+ vertex 15.344 27.7317 -0.2
+ vertex 15.734 27.2872 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.7487 28.5051 -0.1
- vertex 15.0574 28.4965 -0.1
- vertex 15.0817 28.2827 -0.1
+ vertex 15.7487 28.5051 -0.2
+ vertex 15.0574 28.4965 -0.2
+ vertex 15.0817 28.2827 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.9071 28.1258 -0.1
- vertex 15.2193 27.9155 -0.1
- vertex 15.344 27.7317 -0.1
+ vertex 15.9071 28.1258 -0.2
+ vertex 15.2193 27.9155 -0.2
+ vertex 15.344 27.7317 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.7487 28.5051 -0.1
- vertex 15.0817 28.2827 -0.1
- vertex 15.1337 28.0941 -0.1
+ vertex 15.7487 28.5051 -0.2
+ vertex 15.0817 28.2827 -0.2
+ vertex 15.1337 28.0941 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.8197 28.3106 -0.1
- vertex 15.1337 28.0941 -0.1
- vertex 15.2193 27.9155 -0.1
+ vertex 15.8197 28.3106 -0.2
+ vertex 15.1337 28.0941 -0.2
+ vertex 15.2193 27.9155 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.6024 10.7775 -0.1
- vertex 21.7259 8.22365 -0.1
- vertex 27.5775 10.2019 -0.1
+ vertex 27.6024 10.7775 -0.2
+ vertex 21.7259 8.22365 -0.2
+ vertex 27.5775 10.2019 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 23.6083 4.95794 -0.1
- vertex 27.0158 7.30485 -0.1
- vertex 23.5351 5.37146 -0.1
+ vertex 23.6083 4.95794 -0.2
+ vertex 27.0158 7.30485 -0.2
+ vertex 23.5351 5.37146 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 22.0631 7.89267 -0.1
- vertex 27.5775 10.2019 -0.1
- vertex 21.7259 8.22365 -0.1
+ vertex 22.0631 7.89267 -0.2
+ vertex 27.5775 10.2019 -0.2
+ vertex 21.7259 8.22365 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.5397 9.70386 -0.1
- vertex 22.0631 7.89267 -0.1
- vertex 27.4871 9.26334 -0.1
+ vertex 27.5397 9.70386 -0.2
+ vertex 22.0631 7.89267 -0.2
+ vertex 27.4871 9.26334 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 23.6192 4.7586 -0.1
- vertex 27.0158 7.30485 -0.1
- vertex 23.6083 4.95794 -0.1
+ vertex 23.6192 4.7586 -0.2
+ vertex 27.0158 7.30485 -0.2
+ vertex 23.6083 4.95794 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.0158 7.30485 -0.1
- vertex 23.6192 4.7586 -0.1
- vertex 24.9074 2.59483 -0.1
+ vertex 27.0158 7.30485 -0.2
+ vertex 23.6192 4.7586 -0.2
+ vertex 24.9074 2.59483 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 22.3621 7.54907 -0.1
- vertex 27.4871 9.26334 -0.1
- vertex 22.0631 7.89267 -0.1
+ vertex 22.3621 7.54907 -0.2
+ vertex 27.4871 9.26334 -0.2
+ vertex 22.0631 7.89267 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.6129 4.5634 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 23.6192 4.7586 -0.1
+ vertex 23.6129 4.5634 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 23.6192 4.7586 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.5494 4.18291 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 23.5897 4.3717 -0.1
+ vertex 23.5494 4.18291 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 23.5897 4.3717 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.4176 8.86037 -0.1
- vertex 22.3621 7.54907 -0.1
- vertex 27.3295 8.47496 -0.1
+ vertex 27.4176 8.86037 -0.2
+ vertex 22.3621 7.54907 -0.2
+ vertex 27.3295 8.47496 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.4183 3.81156 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 23.5494 4.18291 -0.1
+ vertex 23.4183 3.81156 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 23.5494 4.18291 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.22 3.44442 -0.1
- vertex 24.764 2.4559 -0.1
- vertex 23.4183 3.81156 -0.1
+ vertex 23.22 3.44442 -0.2
+ vertex 24.764 2.4559 -0.2
+ vertex 23.4183 3.81156 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.9074 2.59483 -0.1
- vertex 23.4183 3.81156 -0.1
- vertex 24.764 2.4559 -0.1
+ vertex 24.9074 2.59483 -0.2
+ vertex 23.4183 3.81156 -0.2
+ vertex 24.764 2.4559 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.5897 4.3717 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 23.6129 4.5634 -0.1
+ vertex 23.5897 4.3717 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 23.6129 4.5634 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.0158 7.30485 -0.1
- vertex 23.3929 5.8089 -0.1
- vertex 23.5351 5.37146 -0.1
+ vertex 27.0158 7.30485 -0.2
+ vertex 23.3929 5.8089 -0.2
+ vertex 23.5351 5.37146 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3295 8.47496 -0.1
- vertex 22.3621 7.54907 -0.1
- vertex 27.2208 8.08714 -0.1
+ vertex 27.3295 8.47496 -0.2
+ vertex 22.3621 7.54907 -0.2
+ vertex 27.2208 8.08714 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.0158 7.30485 -0.1
- vertex 23.1811 6.27516 -0.1
- vertex 23.3929 5.8089 -0.1
+ vertex 27.0158 7.30485 -0.2
+ vertex 23.1811 6.27516 -0.2
+ vertex 23.3929 5.8089 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.0158 7.30485 -0.1
- vertex 22.8992 6.77518 -0.1
- vertex 23.1811 6.27516 -0.1
+ vertex 27.0158 7.30485 -0.2
+ vertex 22.8992 6.77518 -0.2
+ vertex 23.1811 6.27516 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.1048 7.68143 -0.1
- vertex 22.8992 6.77518 -0.1
- vertex 27.0158 7.30485 -0.1
+ vertex 27.1048 7.68143 -0.2
+ vertex 22.8992 6.77518 -0.2
+ vertex 27.0158 7.30485 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 22.8992 6.77518 -0.1
- vertex 27.1048 7.68143 -0.1
- vertex 22.6364 7.18064 -0.1
+ vertex 22.8992 6.77518 -0.2
+ vertex 27.1048 7.68143 -0.2
+ vertex 22.6364 7.18064 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.4871 9.26334 -0.1
- vertex 22.3621 7.54907 -0.1
- vertex 27.4176 8.86037 -0.1
+ vertex 27.4871 9.26334 -0.2
+ vertex 22.3621 7.54907 -0.2
+ vertex 27.4176 8.86037 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.2208 8.08714 -0.1
- vertex 22.6364 7.18064 -0.1
- vertex 27.1048 7.68143 -0.1
+ vertex 27.2208 8.08714 -0.2
+ vertex 22.6364 7.18064 -0.2
+ vertex 27.1048 7.68143 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 22.6364 7.18064 -0.1
- vertex 27.2208 8.08714 -0.1
- vertex 22.3621 7.54907 -0.1
+ vertex 22.6364 7.18064 -0.2
+ vertex 27.2208 8.08714 -0.2
+ vertex 22.3621 7.54907 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.3371 8.55423 -0.1
- vertex 22.2336 15.278 -0.1
- vertex 21.6737 15.039 -0.1
+ vertex 21.3371 8.55423 -0.2
+ vertex 22.2336 15.278 -0.2
+ vertex 21.6737 15.039 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.5775 10.2019 -0.1
- vertex 22.0631 7.89267 -0.1
- vertex 27.5397 9.70386 -0.1
+ vertex 27.5775 10.2019 -0.2
+ vertex 22.0631 7.89267 -0.2
+ vertex 27.5397 9.70386 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.8834 8.89663 -0.1
- vertex 21.6737 15.039 -0.1
- vertex 21.1771 14.8489 -0.1
+ vertex 20.8834 8.89663 -0.2
+ vertex 21.6737 15.039 -0.2
+ vertex 21.1771 14.8489 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.6737 15.039 -0.1
- vertex 20.8834 8.89663 -0.1
- vertex 21.3371 8.55423 -0.1
+ vertex 21.6737 15.039 -0.2
+ vertex 20.8834 8.89663 -0.2
+ vertex 21.3371 8.55423 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3513 9.26304 -0.1
- vertex 21.1771 14.8489 -0.1
- vertex 20.8452 14.735 -0.1
+ vertex 20.3513 9.26304 -0.2
+ vertex 21.1771 14.8489 -0.2
+ vertex 20.8452 14.735 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7274 9.66569 -0.1
- vertex 20.8452 14.735 -0.1
- vertex 20.5722 14.6577 -0.1
+ vertex 19.7274 9.66569 -0.2
+ vertex 20.8452 14.735 -0.2
+ vertex 20.5722 14.6577 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.1771 14.8489 -0.1
- vertex 20.3513 9.26304 -0.1
- vertex 20.8834 8.89663 -0.1
+ vertex 21.1771 14.8489 -0.2
+ vertex 20.3513 9.26304 -0.2
+ vertex 20.8834 8.89663 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4723 9.81661 -0.1
- vertex 20.5722 14.6577 -0.1
- vertex 20.327 14.6203 -0.1
+ vertex 19.4723 9.81661 -0.2
+ vertex 20.5722 14.6577 -0.2
+ vertex 20.327 14.6203 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.2206 9.94402 -0.1
- vertex 20.327 14.6203 -0.1
- vertex 20.0785 14.6265 -0.1
+ vertex 19.2206 9.94402 -0.2
+ vertex 20.327 14.6203 -0.2
+ vertex 20.0785 14.6265 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.6964 10.137 -0.1
- vertex 20.0785 14.6265 -0.1
- vertex 19.7955 14.6797 -0.1
+ vertex 18.6964 10.137 -0.2
+ vertex 20.0785 14.6265 -0.2
+ vertex 19.7955 14.6797 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.8452 14.735 -0.1
- vertex 19.7274 9.66569 -0.1
- vertex 20.3513 9.26304 -0.1
+ vertex 20.8452 14.735 -0.2
+ vertex 19.7274 9.66569 -0.2
+ vertex 20.3513 9.26304 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.5722 14.6577 -0.1
- vertex 19.4723 9.81661 -0.1
- vertex 19.7274 9.66569 -0.1
+ vertex 20.5722 14.6577 -0.2
+ vertex 19.4723 9.81661 -0.2
+ vertex 19.7274 9.66569 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.4085 10.2069 -0.1
- vertex 19.7955 14.6797 -0.1
- vertex 19.4469 14.7833 -0.1
+ vertex 18.4085 10.2069 -0.2
+ vertex 19.7955 14.6797 -0.2
+ vertex 19.4469 14.7833 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.327 14.6203 -0.1
- vertex 19.2206 9.94402 -0.1
- vertex 19.4723 9.81661 -0.1
+ vertex 20.327 14.6203 -0.2
+ vertex 19.2206 9.94402 -0.2
+ vertex 19.4723 9.81661 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0785 14.6265 -0.1
- vertex 18.9645 10.0501 -0.1
- vertex 19.2206 9.94402 -0.1
+ vertex 20.0785 14.6265 -0.2
+ vertex 18.9645 10.0501 -0.2
+ vertex 19.2206 9.94402 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0785 14.6265 -0.1
- vertex 18.6964 10.137 -0.1
- vertex 18.9645 10.0501 -0.1
+ vertex 20.0785 14.6265 -0.2
+ vertex 18.6964 10.137 -0.2
+ vertex 18.9645 10.0501 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.093 10.2619 -0.1
- vertex 19.4469 14.7833 -0.1
- vertex 18.4281 15.1559 -0.1
+ vertex 18.093 10.2619 -0.2
+ vertex 19.4469 14.7833 -0.2
+ vertex 18.4281 15.1559 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.7955 14.6797 -0.1
- vertex 18.4085 10.2069 -0.1
- vertex 18.6964 10.137 -0.1
+ vertex 19.7955 14.6797 -0.2
+ vertex 18.4085 10.2069 -0.2
+ vertex 18.6964 10.137 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4469 14.7833 -0.1
- vertex 18.093 10.2619 -0.1
- vertex 18.4085 10.2069 -0.1
+ vertex 19.4469 14.7833 -0.2
+ vertex 18.093 10.2619 -0.2
+ vertex 18.4085 10.2069 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.499 10.3797 -0.1
- vertex 18.4281 15.1559 -0.1
- vertex 17.448 15.5385 -0.1
+ vertex 16.499 10.3797 -0.2
+ vertex 18.4281 15.1559 -0.2
+ vertex 17.448 15.5385 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.4281 15.1559 -0.1
- vertex 17.3487 10.3363 -0.1
- vertex 18.093 10.2619 -0.1
+ vertex 18.4281 15.1559 -0.2
+ vertex 17.3487 10.3363 -0.2
+ vertex 18.093 10.2619 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.2187 10.3704 -0.1
- vertex 17.448 15.5385 -0.1
- vertex 16.6072 15.8977 -0.1
+ vertex 16.2187 10.3704 -0.2
+ vertex 17.448 15.5385 -0.2
+ vertex 16.6072 15.8977 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.4281 15.1559 -0.1
- vertex 16.499 10.3797 -0.1
- vertex 17.3487 10.3363 -0.1
+ vertex 18.4281 15.1559 -0.2
+ vertex 16.499 10.3797 -0.2
+ vertex 17.3487 10.3363 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.448 15.5385 -0.1
- vertex 16.2187 10.3704 -0.1
- vertex 16.499 10.3797 -0.1
+ vertex 17.448 15.5385 -0.2
+ vertex 16.2187 10.3704 -0.2
+ vertex 16.499 10.3797 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.6072 15.8977 -0.1
- vertex 16.005 10.3315 -0.1
- vertex 16.2187 10.3704 -0.1
+ vertex 16.6072 15.8977 -0.2
+ vertex 16.005 10.3315 -0.2
+ vertex 16.2187 10.3704 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.8738 16.2527 -0.1
- vertex 16.005 10.3315 -0.1
- vertex 16.6072 15.8977 -0.1
+ vertex 15.8738 16.2527 -0.2
+ vertex 16.005 10.3315 -0.2
+ vertex 16.6072 15.8977 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.8738 16.2527 -0.1
- vertex 15.8355 10.2563 -0.1
- vertex 16.005 10.3315 -0.1
+ vertex 15.8738 16.2527 -0.2
+ vertex 15.8355 10.2563 -0.2
+ vertex 16.005 10.3315 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.2162 16.623 -0.1
- vertex 15.8355 10.2563 -0.1
- vertex 15.8738 16.2527 -0.1
+ vertex 15.2162 16.623 -0.2
+ vertex 15.8355 10.2563 -0.2
+ vertex 15.8738 16.2527 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.8355 10.2563 -0.1
- vertex 15.2162 16.623 -0.1
- vertex 15.6879 10.1383 -0.1
+ vertex 15.8355 10.2563 -0.2
+ vertex 15.2162 16.623 -0.2
+ vertex 15.6879 10.1383 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 10.4375 16.5104 -0.1
- vertex 15.6879 10.1383 -0.1
- vertex 15.2162 16.623 -0.1
+ vertex 10.4375 16.5104 -0.2
+ vertex 15.6879 10.1383 -0.2
+ vertex 15.2162 16.623 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.6879 10.1383 -0.1
- vertex 10.4375 16.5104 -0.1
- vertex 15.5399 9.97068 -0.1
+ vertex 15.6879 10.1383 -0.2
+ vertex 10.4375 16.5104 -0.2
+ vertex 15.5399 9.97068 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.5399 9.97068 -0.1
- vertex 10.4375 16.5104 -0.1
- vertex 15.369 9.74689 -0.1
+ vertex 15.5399 9.97068 -0.2
+ vertex 10.4375 16.5104 -0.2
+ vertex 15.369 9.74689 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 9.73318 16.1788 -0.1
- vertex 15.369 9.74689 -0.1
- vertex 10.4375 16.5104 -0.1
+ vertex 9.73318 16.1788 -0.2
+ vertex 15.369 9.74689 -0.2
+ vertex 10.4375 16.5104 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.369 9.74689 -0.1
- vertex 9.73318 16.1788 -0.1
- vertex 15.213 9.52982 -0.1
+ vertex 15.369 9.74689 -0.2
+ vertex 9.73318 16.1788 -0.2
+ vertex 15.213 9.52982 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.213 9.52982 -0.1
- vertex 9.73318 16.1788 -0.1
- vertex 15.0942 9.33737 -0.1
+ vertex 15.213 9.52982 -0.2
+ vertex 9.73318 16.1788 -0.2
+ vertex 15.0942 9.33737 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 9.19116 15.9452 -0.1
- vertex 15.0942 9.33737 -0.1
- vertex 9.73318 16.1788 -0.1
+ vertex 9.19116 15.9452 -0.2
+ vertex 15.0942 9.33737 -0.2
+ vertex 9.73318 16.1788 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 8.99158 15.8746 -0.1
- vertex 15.0942 9.33737 -0.1
- vertex 9.19116 15.9452 -0.1
+ vertex 8.99158 15.8746 -0.2
+ vertex 15.0942 9.33737 -0.2
+ vertex 9.19116 15.9452 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.4375 16.5104 -0.1
- vertex 15.2162 16.623 -0.1
- vertex 14.6028 17.0277 -0.1
+ vertex 10.4375 16.5104 -0.2
+ vertex 15.2162 16.623 -0.2
+ vertex 14.6028 17.0277 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 24.4388 2.25734 -0.1
- vertex 24.764 2.4559 -0.1
- vertex 23.22 3.44442 -0.1
+ vertex 24.4388 2.25734 -0.2
+ vertex 24.764 2.4559 -0.2
+ vertex 23.22 3.44442 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.764 2.4559 -0.1
- vertex 24.4388 2.25734 -0.1
- vertex 24.6285 2.34829 -0.1
+ vertex 24.764 2.4559 -0.2
+ vertex 24.4388 2.25734 -0.2
+ vertex 24.6285 2.34829 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.4388 2.25734 -0.1
- vertex 23.22 3.44442 -0.1
- vertex 24.2201 2.19262 -0.1
+ vertex 24.4388 2.25734 -0.2
+ vertex 23.22 3.44442 -0.2
+ vertex 24.2201 2.19262 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.2201 2.19262 -0.1
- vertex 23.22 3.44442 -0.1
- vertex 23.9975 2.16372 -0.1
+ vertex 24.2201 2.19262 -0.2
+ vertex 23.22 3.44442 -0.2
+ vertex 23.9975 2.16372 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.9975 2.16372 -0.1
- vertex 23.22 3.44442 -0.1
- vertex 23.7673 2.14309 -0.1
+ vertex 23.9975 2.16372 -0.2
+ vertex 23.22 3.44442 -0.2
+ vertex 23.7673 2.14309 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.0427 3.12896 -0.1
- vertex 23.7673 2.14309 -0.1
- vertex 23.22 3.44442 -0.1
+ vertex 23.0427 3.12896 -0.2
+ vertex 23.7673 2.14309 -0.2
+ vertex 23.22 3.44442 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.7673 2.14309 -0.1
- vertex 23.0427 3.12896 -0.1
- vertex 23.5277 2.10089 -0.1
+ vertex 23.7673 2.14309 -0.2
+ vertex 23.0427 3.12896 -0.2
+ vertex 23.5277 2.10089 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.9115 2.82433 -0.1
- vertex 23.5277 2.10089 -0.1
- vertex 23.0427 3.12896 -0.1
+ vertex 22.9115 2.82433 -0.2
+ vertex 23.5277 2.10089 -0.2
+ vertex 23.0427 3.12896 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.827 2.54396 -0.1
- vertex 23.5277 2.10089 -0.1
- vertex 22.9115 2.82433 -0.1
+ vertex 22.827 2.54396 -0.2
+ vertex 23.5277 2.10089 -0.2
+ vertex 22.9115 2.82433 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.5277 2.10089 -0.1
- vertex 22.827 2.54396 -0.1
- vertex 23.3072 2.04326 -0.1
+ vertex 23.5277 2.10089 -0.2
+ vertex 22.827 2.54396 -0.2
+ vertex 23.3072 2.04326 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.7901 2.30129 -0.1
- vertex 23.3072 2.04326 -0.1
- vertex 22.827 2.54396 -0.1
+ vertex 22.7901 2.30129 -0.2
+ vertex 23.3072 2.04326 -0.2
+ vertex 22.827 2.54396 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.3072 2.04326 -0.1
- vertex 22.7901 2.30129 -0.1
- vertex 23.0469 1.94283 -0.1
+ vertex 23.3072 2.04326 -0.2
+ vertex 22.7901 2.30129 -0.2
+ vertex 23.0469 1.94283 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 22.8016 2.10976 -0.1
- vertex 23.0469 1.94283 -0.1
- vertex 22.7901 2.30129 -0.1
+ vertex 22.8016 2.10976 -0.2
+ vertex 23.0469 1.94283 -0.2
+ vertex 22.7901 2.30129 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 22.8257 2.03737 -0.1
- vertex 23.0469 1.94283 -0.1
- vertex 22.8016 2.10976 -0.1
+ vertex 22.8257 2.03737 -0.2
+ vertex 23.0469 1.94283 -0.2
+ vertex 22.8016 2.10976 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.0469 1.94283 -0.1
- vertex 22.8257 2.03737 -0.1
- vertex 22.9727 1.93385 -0.1
+ vertex 23.0469 1.94283 -0.2
+ vertex 22.8257 2.03737 -0.2
+ vertex 22.9727 1.93385 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex 22.8622 1.9828 -0.1
- vertex 22.9727 1.93385 -0.1
- vertex 22.8257 2.03737 -0.1
+ vertex 22.8622 1.9828 -0.2
+ vertex 22.9727 1.93385 -0.2
+ vertex 22.8257 2.03737 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.9727 1.93385 -0.1
- vertex 22.8622 1.9828 -0.1
- vertex 22.9112 1.94773 -0.1
+ vertex 22.9727 1.93385 -0.2
+ vertex 22.8622 1.9828 -0.2
+ vertex 22.9112 1.94773 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.4227 15.3534 -0.1
- vertex 24.3498 16.3417 -0.1
- vertex 27.4995 15.0808 -0.1
+ vertex 27.4227 15.3534 -0.2
+ vertex 24.3498 16.3417 -0.2
+ vertex 27.4995 15.0808 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.3198 15.5987 -0.1
- vertex 24.3498 16.3417 -0.1
- vertex 27.4227 15.3534 -0.1
+ vertex 27.3198 15.5987 -0.2
+ vertex 24.3498 16.3417 -0.2
+ vertex 27.4227 15.3534 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.4995 15.0808 -0.1
- vertex 24.3498 16.3417 -0.1
- vertex 27.5539 14.7505 -0.1
+ vertex 27.4995 15.0808 -0.2
+ vertex 24.3498 16.3417 -0.2
+ vertex 27.5539 14.7505 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.3498 16.3417 -0.1
- vertex 27.3198 15.5987 -0.1
- vertex 24.659 16.5397 -0.1
+ vertex 24.3498 16.3417 -0.2
+ vertex 27.3198 15.5987 -0.2
+ vertex 24.659 16.5397 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.5539 14.7505 -0.1
- vertex 24.3498 16.3417 -0.1
- vertex 27.5896 14.3319 -0.1
+ vertex 27.5539 14.7505 -0.2
+ vertex 24.3498 16.3417 -0.2
+ vertex 27.5896 14.3319 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.1872 15.8473 -0.1
- vertex 24.659 16.5397 -0.1
- vertex 27.3198 15.5987 -0.1
+ vertex 27.1872 15.8473 -0.2
+ vertex 24.659 16.5397 -0.2
+ vertex 27.3198 15.5987 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.9148 16.0975 -0.1
- vertex 27.5896 14.3319 -0.1
- vertex 24.3498 16.3417 -0.1
+ vertex 23.9148 16.0975 -0.2
+ vertex 27.5896 14.3319 -0.2
+ vertex 24.3498 16.3417 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.659 16.5397 -0.1
- vertex 25.8187 16.7495 -0.1
- vertex 24.7548 16.6154 -0.1
+ vertex 24.659 16.5397 -0.2
+ vertex 25.8187 16.7495 -0.2
+ vertex 24.7548 16.6154 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.5896 14.3319 -0.1
- vertex 23.9148 16.0975 -0.1
- vertex 27.6103 13.7945 -0.1
+ vertex 27.5896 14.3319 -0.2
+ vertex 23.9148 16.0975 -0.2
+ vertex 27.6103 13.7945 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 23.3919 15.8262 -0.1
- vertex 27.6103 13.7945 -0.1
- vertex 23.9148 16.0975 -0.1
+ vertex 23.3919 15.8262 -0.2
+ vertex 27.6103 13.7945 -0.2
+ vertex 23.9148 16.0975 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.7548 16.6154 -0.1
- vertex 25.8187 16.7495 -0.1
- vertex 24.8049 16.6725 -0.1
+ vertex 24.7548 16.6154 -0.2
+ vertex 25.8187 16.7495 -0.2
+ vertex 24.8049 16.6725 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.6103 13.7945 -0.1
- vertex 23.3919 15.8262 -0.1
- vertex 27.6211 12.2412 -0.1
+ vertex 27.6103 13.7945 -0.2
+ vertex 23.3919 15.8262 -0.2
+ vertex 27.6211 12.2412 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 24.659 16.5397 -0.1
- vertex 27.1872 15.8473 -0.1
- vertex 25.8187 16.7495 -0.1
+ vertex 24.659 16.5397 -0.2
+ vertex 27.1872 15.8473 -0.2
+ vertex 25.8187 16.7495 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 22.2336 15.278 -0.1
- vertex 27.6211 12.2412 -0.1
- vertex 23.3919 15.8262 -0.1
+ vertex 22.2336 15.278 -0.2
+ vertex 27.6211 12.2412 -0.2
+ vertex 23.3919 15.8262 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.3371 8.55423 -0.1
- vertex 27.6211 12.2412 -0.1
- vertex 22.2336 15.278 -0.1
+ vertex 21.3371 8.55423 -0.2
+ vertex 27.6211 12.2412 -0.2
+ vertex 22.2336 15.278 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.8659 16.7424 -0.1
- vertex 27.1872 15.8473 -0.1
- vertex 27.0139 16.2113 -0.1
+ vertex 25.8659 16.7424 -0.2
+ vertex 27.1872 15.8473 -0.2
+ vertex 27.0139 16.2113 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.6211 12.2412 -0.1
- vertex 21.3371 8.55423 -0.1
- vertex 27.6024 10.7775 -0.1
+ vertex 27.6211 12.2412 -0.2
+ vertex 21.3371 8.55423 -0.2
+ vertex 27.6024 10.7775 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 21.7259 8.22365 -0.1
- vertex 27.6024 10.7775 -0.1
- vertex 21.3371 8.55423 -0.1
+ vertex 21.7259 8.22365 -0.2
+ vertex 27.6024 10.7775 -0.2
+ vertex 21.3371 8.55423 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.0158 7.30485 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 26.9517 6.92758 -0.1
+ vertex 27.0158 7.30485 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 26.9517 6.92758 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 27.1872 15.8473 -0.1
- vertex 25.8659 16.7424 -0.1
- vertex 25.8187 16.7495 -0.1
+ vertex 27.1872 15.8473 -0.2
+ vertex 25.8659 16.7424 -0.2
+ vertex 25.8187 16.7495 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.8659 16.7424 -0.1
- vertex 27.0139 16.2113 -0.1
- vertex 26.8653 16.6367 -0.1
+ vertex 25.8659 16.7424 -0.2
+ vertex 27.0139 16.2113 -0.2
+ vertex 26.8653 16.6367 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.8138 2.23679 -0.1
- vertex 26.9647 2.16551 -0.1
- vertex 26.9615 2.94949 -0.1
+ vertex 25.8138 2.23679 -0.2
+ vertex 26.9647 2.16551 -0.2
+ vertex 26.9615 2.94949 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.4766 2.59351 -0.1
- vertex 26.9615 2.94949 -0.1
- vertex 26.9294 3.98634 -0.1
+ vertex 25.4766 2.59351 -0.2
+ vertex 26.9615 2.94949 -0.2
+ vertex 26.9294 3.98634 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9647 2.16551 -0.1
- vertex 25.8138 2.23679 -0.1
- vertex 26.0094 1.96397 -0.1
+ vertex 26.9647 2.16551 -0.2
+ vertex 25.8138 2.23679 -0.2
+ vertex 26.0094 1.96397 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.185 2.7087 -0.1
- vertex 26.9294 3.98634 -0.1
- vertex 26.8871 5.49316 -0.1
+ vertex 25.185 2.7087 -0.2
+ vertex 26.9294 3.98634 -0.2
+ vertex 26.8871 5.49316 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 26.3175 1.53367 -0.1
- vertex 26.9647 2.16551 -0.1
- vertex 26.0094 1.96397 -0.1
+ vertex 26.3175 1.53367 -0.2
+ vertex 26.9647 2.16551 -0.2
+ vertex 26.0094 1.96397 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9517 6.92758 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 26.9103 6.51977 -0.1
+ vertex 26.9517 6.92758 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 26.9103 6.51977 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9615 2.94949 -0.1
- vertex 25.6376 2.44612 -0.1
- vertex 25.8138 2.23679 -0.1
+ vertex 26.9615 2.94949 -0.2
+ vertex 25.6376 2.44612 -0.2
+ vertex 25.8138 2.23679 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.9855 16.8461 -0.1
- vertex 26.8653 16.6367 -0.1
- vertex 26.7571 17.0706 -0.1
+ vertex 25.9855 16.8461 -0.2
+ vertex 26.8653 16.6367 -0.2
+ vertex 26.7571 17.0706 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 26.4455 1.37999 -0.1
- vertex 26.9324 1.61996 -0.1
- vertex 26.3175 1.53367 -0.1
+ vertex 26.4455 1.37999 -0.2
+ vertex 26.9324 1.61996 -0.2
+ vertex 26.3175 1.53367 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 26.0803 17.2678 -0.1
- vertex 26.7571 17.0706 -0.1
- vertex 26.7051 17.4601 -0.1
+ vertex 26.0803 17.2678 -0.2
+ vertex 26.7571 17.0706 -0.2
+ vertex 26.7051 17.4601 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 26.0933 17.5963 -0.1
- vertex 26.7051 17.4601 -0.1
- vertex 26.6784 17.7808 -0.1
+ vertex 26.0933 17.5963 -0.2
+ vertex 26.7051 17.4601 -0.2
+ vertex 26.6784 17.7808 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.8653 16.6367 -0.1
- vertex 25.9855 16.8461 -0.1
- vertex 25.9096 16.7563 -0.1
+ vertex 26.8653 16.6367 -0.2
+ vertex 25.9855 16.8461 -0.2
+ vertex 25.9096 16.7563 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 26.0696 17.9605 -0.1
- vertex 26.6784 17.7808 -0.1
- vertex 26.6332 18.0815 -0.1
+ vertex 26.0696 17.9605 -0.2
+ vertex 26.6784 17.7808 -0.2
+ vertex 26.6332 18.0815 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.0696 17.9605 -0.1
- vertex 26.6332 18.0815 -0.1
- vertex 26.5691 18.3624 -0.1
+ vertex 26.0696 17.9605 -0.2
+ vertex 26.6332 18.0815 -0.2
+ vertex 26.5691 18.3624 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.7571 17.0706 -0.1
- vertex 26.0434 17.0172 -0.1
- vertex 25.9855 16.8461 -0.1
+ vertex 26.7571 17.0706 -0.2
+ vertex 26.0434 17.0172 -0.2
+ vertex 25.9855 16.8461 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.0696 17.9605 -0.1
- vertex 26.5691 18.3624 -0.1
- vertex 26.4859 18.624 -0.1
+ vertex 26.0696 17.9605 -0.2
+ vertex 26.5691 18.3624 -0.2
+ vertex 26.4859 18.624 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9324 1.61996 -0.1
- vertex 26.4455 1.37999 -0.1
- vertex 26.901 1.43209 -0.1
+ vertex 26.9324 1.61996 -0.2
+ vertex 26.4455 1.37999 -0.2
+ vertex 26.901 1.43209 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.0696 17.9605 -0.1
- vertex 26.4859 18.624 -0.1
- vertex 26.3832 18.8665 -0.1
+ vertex 26.0696 17.9605 -0.2
+ vertex 26.4859 18.624 -0.2
+ vertex 26.3832 18.8665 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 26.5572 1.2697 -0.1
- vertex 26.901 1.43209 -0.1
- vertex 26.4455 1.37999 -0.1
+ vertex 26.5572 1.2697 -0.2
+ vertex 26.901 1.43209 -0.2
+ vertex 26.4455 1.37999 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.0696 17.9605 -0.1
- vertex 26.3832 18.8665 -0.1
- vertex 26.2605 19.0904 -0.1
+ vertex 26.0696 17.9605 -0.2
+ vertex 26.3832 18.8665 -0.2
+ vertex 26.2605 19.0904 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.7448 18.8483 -0.1
- vertex 26.2605 19.0904 -0.1
- vertex 26.1176 19.296 -0.1
+ vertex 25.7448 18.8483 -0.2
+ vertex 26.2605 19.0904 -0.2
+ vertex 26.1176 19.296 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.7051 17.4601 -0.1
- vertex 26.0933 17.5963 -0.1
- vertex 26.0803 17.2678 -0.1
+ vertex 26.7051 17.4601 -0.2
+ vertex 26.0933 17.5963 -0.2
+ vertex 26.0803 17.2678 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.7571 17.0706 -0.1
- vertex 26.0803 17.2678 -0.1
- vertex 26.0434 17.0172 -0.1
+ vertex 26.7571 17.0706 -0.2
+ vertex 26.0803 17.2678 -0.2
+ vertex 26.0434 17.0172 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 26.6535 1.20459 -0.1
- vertex 26.8581 1.29842 -0.1
- vertex 26.5572 1.2697 -0.1
+ vertex 26.6535 1.20459 -0.2
+ vertex 26.8581 1.29842 -0.2
+ vertex 26.5572 1.2697 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.8581 1.29842 -0.1
- vertex 26.6535 1.20459 -0.1
- vertex 26.8032 1.21715 -0.1
+ vertex 26.8581 1.29842 -0.2
+ vertex 26.6535 1.20459 -0.2
+ vertex 26.8032 1.21715 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.8032 1.21715 -0.1
- vertex 26.6535 1.20459 -0.1
- vertex 26.7352 1.18648 -0.1
+ vertex 26.8032 1.21715 -0.2
+ vertex 26.6535 1.20459 -0.2
+ vertex 26.7352 1.18648 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 25.8659 16.7424 -0.1
- vertex 26.8653 16.6367 -0.1
- vertex 25.9096 16.7563 -0.1
+ vertex 25.8659 16.7424 -0.2
+ vertex 26.8653 16.6367 -0.2
+ vertex 25.9096 16.7563 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9103 6.51977 -0.1
- vertex 24.9074 2.59483 -0.1
- vertex 26.8894 6.05157 -0.1
+ vertex 26.9103 6.51977 -0.2
+ vertex 24.9074 2.59483 -0.2
+ vertex 26.8894 6.05157 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.7157 16.8274 -0.1
- vertex 24.8049 16.6725 -0.1
- vertex 25.8187 16.7495 -0.1
+ vertex 25.7157 16.8274 -0.2
+ vertex 24.8049 16.6725 -0.2
+ vertex 25.8187 16.7495 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.901 1.43209 -0.1
- vertex 26.5572 1.2697 -0.1
- vertex 26.8581 1.29842 -0.1
+ vertex 26.901 1.43209 -0.2
+ vertex 26.5572 1.2697 -0.2
+ vertex 26.8581 1.29842 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.8049 16.6725 -0.1
- vertex 25.7157 16.8274 -0.1
- vertex 24.8294 16.7672 -0.1
+ vertex 24.8049 16.6725 -0.2
+ vertex 25.7157 16.8274 -0.2
+ vertex 24.8294 16.7672 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9647 2.16551 -0.1
- vertex 26.3175 1.53367 -0.1
- vertex 26.9324 1.61996 -0.1
+ vertex 26.9647 2.16551 -0.2
+ vertex 26.3175 1.53367 -0.2
+ vertex 26.9324 1.61996 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.8294 16.7672 -0.1
- vertex 25.7157 16.8274 -0.1
- vertex 25.6037 16.9917 -0.1
+ vertex 24.8294 16.7672 -0.2
+ vertex 25.7157 16.8274 -0.2
+ vertex 25.6037 16.9917 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.8232 16.8925 -0.1
- vertex 25.6037 16.9917 -0.1
- vertex 25.4856 17.2443 -0.1
+ vertex 24.8232 16.8925 -0.2
+ vertex 25.6037 16.9917 -0.2
+ vertex 25.4856 17.2443 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9615 2.94949 -0.1
- vertex 25.4766 2.59351 -0.1
- vertex 25.6376 2.44612 -0.1
+ vertex 26.9615 2.94949 -0.2
+ vertex 25.4766 2.59351 -0.2
+ vertex 25.6376 2.44612 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.789 17.0321 -0.1
- vertex 25.4856 17.2443 -0.1
- vertex 25.3467 17.5167 -0.1
+ vertex 24.789 17.0321 -0.2
+ vertex 25.4856 17.2443 -0.2
+ vertex 25.3467 17.5167 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 25.0464 2.67962 -0.1
- vertex 26.8894 6.05157 -0.1
- vertex 24.9074 2.59483 -0.1
+ vertex 25.0464 2.67962 -0.2
+ vertex 26.8894 6.05157 -0.2
+ vertex 24.9074 2.59483 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.7291 17.1695 -0.1
- vertex 25.3467 17.5167 -0.1
- vertex 25.2614 17.6336 -0.1
+ vertex 24.7291 17.1695 -0.2
+ vertex 25.3467 17.5167 -0.2
+ vertex 25.2614 17.6336 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9294 3.98634 -0.1
- vertex 25.3271 2.68052 -0.1
- vertex 25.4766 2.59351 -0.1
+ vertex 26.9294 3.98634 -0.2
+ vertex 25.3271 2.68052 -0.2
+ vertex 25.4766 2.59351 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.6602 17.253 -0.1
- vertex 25.2614 17.6336 -0.1
- vertex 25.163 17.7384 -0.1
+ vertex 24.6602 17.253 -0.2
+ vertex 25.2614 17.6336 -0.2
+ vertex 25.163 17.7384 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.6602 17.253 -0.1
- vertex 25.163 17.7384 -0.1
- vertex 25.0501 17.8316 -0.1
+ vertex 24.6602 17.253 -0.2
+ vertex 25.163 17.7384 -0.2
+ vertex 25.0501 17.8316 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.9294 3.98634 -0.1
- vertex 25.185 2.7087 -0.1
- vertex 25.3271 2.68052 -0.1
+ vertex 26.9294 3.98634 -0.2
+ vertex 25.185 2.7087 -0.2
+ vertex 25.3271 2.68052 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.6602 17.253 -0.1
- vertex 25.0501 17.8316 -0.1
- vertex 24.9207 17.9138 -0.1
+ vertex 24.6602 17.253 -0.2
+ vertex 25.0501 17.8316 -0.2
+ vertex 24.9207 17.9138 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.8871 5.49316 -0.1
- vertex 25.0464 2.67962 -0.1
- vertex 25.185 2.7087 -0.1
+ vertex 26.8871 5.49316 -0.2
+ vertex 25.0464 2.67962 -0.2
+ vertex 25.185 2.7087 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 26.8894 6.05157 -0.1
- vertex 25.0464 2.67962 -0.1
- vertex 26.8871 5.49316 -0.1
+ vertex 26.8894 6.05157 -0.2
+ vertex 25.0464 2.67962 -0.2
+ vertex 26.8871 5.49316 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.6037 16.9917 -0.1
- vertex 24.8232 16.8925 -0.1
- vertex 24.8294 16.7672 -0.1
+ vertex 25.6037 16.9917 -0.2
+ vertex 24.8232 16.8925 -0.2
+ vertex 24.8294 16.7672 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.4856 17.2443 -0.1
- vertex 24.789 17.0321 -0.1
- vertex 24.8232 16.8925 -0.1
+ vertex 25.4856 17.2443 -0.2
+ vertex 24.789 17.0321 -0.2
+ vertex 24.8232 16.8925 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.3467 17.5167 -0.1
- vertex 24.7291 17.1695 -0.1
- vertex 24.789 17.0321 -0.1
+ vertex 25.3467 17.5167 -0.2
+ vertex 24.7291 17.1695 -0.2
+ vertex 24.789 17.0321 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 25.2614 17.6336 -0.1
- vertex 24.6602 17.253 -0.1
- vertex 24.7291 17.1695 -0.1
+ vertex 25.2614 17.6336 -0.2
+ vertex 24.6602 17.253 -0.2
+ vertex 24.7291 17.1695 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.5483 17.3222 -0.1
- vertex 24.9207 17.9138 -0.1
- vertex 24.6059 18.0475 -0.1
+ vertex 24.5483 17.3222 -0.2
+ vertex 24.9207 17.9138 -0.2
+ vertex 24.6059 18.0475 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.9207 17.9138 -0.1
- vertex 24.5483 17.3222 -0.1
- vertex 24.6602 17.253 -0.1
+ vertex 24.9207 17.9138 -0.2
+ vertex 24.5483 17.3222 -0.2
+ vertex 24.6602 17.253 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.6059 18.0475 -0.1
- vertex 24.386 17.3783 -0.1
- vertex 24.5483 17.3222 -0.1
+ vertex 24.6059 18.0475 -0.2
+ vertex 24.386 17.3783 -0.2
+ vertex 24.5483 17.3222 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.166 17.4223 -0.1
- vertex 24.6059 18.0475 -0.1
- vertex 24.2049 18.1437 -0.1
+ vertex 24.166 17.4223 -0.2
+ vertex 24.6059 18.0475 -0.2
+ vertex 24.2049 18.1437 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 24.6059 18.0475 -0.1
- vertex 24.166 17.4223 -0.1
- vertex 24.386 17.3783 -0.1
+ vertex 24.6059 18.0475 -0.2
+ vertex 24.166 17.4223 -0.2
+ vertex 24.386 17.3783 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.7039 18.207 -0.1
- vertex 24.166 17.4223 -0.1
- vertex 24.2049 18.1437 -0.1
+ vertex 23.7039 18.207 -0.2
+ vertex 24.166 17.4223 -0.2
+ vertex 24.2049 18.1437 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.7039 18.207 -0.1
- vertex 23.5226 17.4791 -0.1
- vertex 24.166 17.4223 -0.1
+ vertex 23.7039 18.207 -0.2
+ vertex 23.5226 17.4791 -0.2
+ vertex 24.166 17.4223 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.0891 18.2417 -0.1
- vertex 23.5226 17.4791 -0.1
- vertex 23.7039 18.207 -0.1
+ vertex 23.0891 18.2417 -0.2
+ vertex 23.5226 17.4791 -0.2
+ vertex 23.7039 18.207 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 23.0891 18.2417 -0.1
- vertex 22.5588 17.5015 -0.1
- vertex 23.5226 17.4791 -0.1
+ vertex 23.0891 18.2417 -0.2
+ vertex 22.5588 17.5015 -0.2
+ vertex 23.5226 17.4791 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 22.3468 18.2522 -0.1
- vertex 22.5588 17.5015 -0.1
- vertex 23.0891 18.2417 -0.1
+ vertex 22.3468 18.2522 -0.2
+ vertex 22.5588 17.5015 -0.2
+ vertex 23.0891 18.2417 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.5679 18.2611 -0.1
- vertex 22.5588 17.5015 -0.1
- vertex 22.3468 18.2522 -0.1
+ vertex 21.5679 18.2611 -0.2
+ vertex 22.5588 17.5015 -0.2
+ vertex 22.3468 18.2522 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.5679 18.2611 -0.1
- vertex 21.0506 17.5236 -0.1
- vertex 22.5588 17.5015 -0.1
+ vertex 21.5679 18.2611 -0.2
+ vertex 21.0506 17.5236 -0.2
+ vertex 22.5588 17.5015 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.9709 18.304 -0.1
- vertex 21.0506 17.5236 -0.1
- vertex 21.5679 18.2611 -0.1
+ vertex 20.9709 18.304 -0.2
+ vertex 21.0506 17.5236 -0.2
+ vertex 21.5679 18.2611 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.7319 18.3459 -0.1
- vertex 21.0506 17.5236 -0.1
- vertex 20.9709 18.304 -0.1
+ vertex 20.7319 18.3459 -0.2
+ vertex 21.0506 17.5236 -0.2
+ vertex 20.9709 18.304 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.2276 17.5562 -0.1
- vertex 20.7319 18.3459 -0.1
- vertex 20.5281 18.4055 -0.1
+ vertex 20.2276 17.5562 -0.2
+ vertex 20.7319 18.3459 -0.2
+ vertex 20.5281 18.4055 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0333 17.6179 -0.1
- vertex 20.5281 18.4055 -0.1
- vertex 20.3561 18.486 -0.1
+ vertex 20.0333 17.6179 -0.2
+ vertex 20.5281 18.4055 -0.2
+ vertex 20.3561 18.486 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.7319 18.3459 -0.1
- vertex 20.2276 17.5562 -0.1
- vertex 21.0506 17.5236 -0.1
+ vertex 20.7319 18.3459 -0.2
+ vertex 20.2276 17.5562 -0.2
+ vertex 21.0506 17.5236 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6934 17.9694 -0.1
- vertex 20.3561 18.486 -0.1
- vertex 20.2124 18.5903 -0.1
+ vertex 19.6934 17.9694 -0.2
+ vertex 20.3561 18.486 -0.2
+ vertex 20.2124 18.5903 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.5281 18.4055 -0.1
- vertex 20.1284 17.5777 -0.1
- vertex 20.2276 17.5562 -0.1
+ vertex 20.5281 18.4055 -0.2
+ vertex 20.1284 17.5777 -0.2
+ vertex 20.2276 17.5562 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.5469 18.2611 -0.1
- vertex 20.2124 18.5903 -0.1
- vertex 20.0935 18.7216 -0.1
+ vertex 19.5469 18.2611 -0.2
+ vertex 20.2124 18.5903 -0.2
+ vertex 20.0935 18.7216 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.5281 18.4055 -0.1
- vertex 20.0333 17.6179 -0.1
- vertex 20.1284 17.5777 -0.1
+ vertex 20.5281 18.4055 -0.2
+ vertex 20.0333 17.6179 -0.2
+ vertex 20.1284 17.5777 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4153 18.6317 -0.1
- vertex 20.0935 18.7216 -0.1
- vertex 19.9962 18.8829 -0.1
+ vertex 19.4153 18.6317 -0.2
+ vertex 20.0935 18.7216 -0.2
+ vertex 19.9962 18.8829 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3561 18.486 -0.1
- vertex 19.9424 17.6771 -0.1
- vertex 20.0333 17.6179 -0.1
+ vertex 20.3561 18.486 -0.2
+ vertex 19.9424 17.6771 -0.2
+ vertex 20.0333 17.6179 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4153 18.6317 -0.1
- vertex 19.9962 18.8829 -0.1
- vertex 19.9169 19.0772 -0.1
+ vertex 19.4153 18.6317 -0.2
+ vertex 19.9962 18.8829 -0.2
+ vertex 19.9169 19.0772 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3561 18.486 -0.1
- vertex 19.8554 17.7553 -0.1
- vertex 19.9424 17.6771 -0.1
+ vertex 20.3561 18.486 -0.2
+ vertex 19.8554 17.7553 -0.2
+ vertex 19.9424 17.6771 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.2984 19.082 -0.1
- vertex 19.9169 19.0772 -0.1
- vertex 19.8522 19.3078 -0.1
+ vertex 19.2984 19.082 -0.2
+ vertex 19.9169 19.0772 -0.2
+ vertex 19.8522 19.3078 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.1956 19.6132 -0.1
- vertex 19.8522 19.3078 -0.1
- vertex 19.753 19.8896 -0.1
+ vertex 19.1956 19.6132 -0.2
+ vertex 19.8522 19.3078 -0.2
+ vertex 19.753 19.8896 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.3561 18.486 -0.1
- vertex 19.6934 17.9694 -0.1
- vertex 19.8554 17.7553 -0.1
+ vertex 20.3561 18.486 -0.2
+ vertex 19.6934 17.9694 -0.2
+ vertex 19.8554 17.7553 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.1065 20.2262 -0.1
- vertex 19.753 19.8896 -0.1
- vertex 19.6713 20.6529 -0.1
+ vertex 19.1065 20.2262 -0.2
+ vertex 19.753 19.8896 -0.2
+ vertex 19.6713 20.6529 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.0081 20.8787 -0.1
- vertex 19.6713 20.6529 -0.1
- vertex 19.58 21.4118 -0.1
+ vertex 19.0081 20.8787 -0.2
+ vertex 19.6713 20.6529 -0.2
+ vertex 19.58 21.4118 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0935 18.7216 -0.1
- vertex 19.4153 18.6317 -0.1
- vertex 19.5469 18.2611 -0.1
+ vertex 20.0935 18.7216 -0.2
+ vertex 19.4153 18.6317 -0.2
+ vertex 19.5469 18.2611 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.892 21.4494 -0.1
- vertex 19.58 21.4118 -0.1
- vertex 19.5238 21.6908 -0.1
+ vertex 18.892 21.4494 -0.2
+ vertex 19.58 21.4118 -0.2
+ vertex 19.5238 21.6908 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.892 21.4494 -0.1
- vertex 19.5238 21.6908 -0.1
- vertex 19.4538 21.9215 -0.1
+ vertex 18.892 21.4494 -0.2
+ vertex 19.5238 21.6908 -0.2
+ vertex 19.4538 21.9215 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.2124 18.5903 -0.1
- vertex 19.5469 18.2611 -0.1
- vertex 19.6934 17.9694 -0.1
+ vertex 20.2124 18.5903 -0.2
+ vertex 19.5469 18.2611 -0.2
+ vertex 19.6934 17.9694 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.7726 21.8767 -0.1
- vertex 19.4538 21.9215 -0.1
- vertex 19.3646 22.1178 -0.1
+ vertex 18.7726 21.8767 -0.2
+ vertex 19.4538 21.9215 -0.2
+ vertex 19.3646 22.1178 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.9169 19.0772 -0.1
- vertex 19.2984 19.082 -0.1
- vertex 19.4153 18.6317 -0.1
+ vertex 19.9169 19.0772 -0.2
+ vertex 19.2984 19.082 -0.2
+ vertex 19.4153 18.6317 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.7726 21.8767 -0.1
- vertex 19.3646 22.1178 -0.1
- vertex 19.2511 22.2936 -0.1
+ vertex 18.7726 21.8767 -0.2
+ vertex 19.3646 22.1178 -0.2
+ vertex 19.2511 22.2936 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.8522 19.3078 -0.1
- vertex 19.1956 19.6132 -0.1
- vertex 19.2984 19.082 -0.1
+ vertex 19.8522 19.3078 -0.2
+ vertex 19.1956 19.6132 -0.2
+ vertex 19.2984 19.082 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.7163 22.0174 -0.1
- vertex 19.2511 22.2936 -0.1
- vertex 19.108 22.463 -0.1
+ vertex 18.7163 22.0174 -0.2
+ vertex 19.2511 22.2936 -0.2
+ vertex 19.108 22.463 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.753 19.8896 -0.1
- vertex 19.1065 20.2262 -0.1
- vertex 19.1956 19.6132 -0.1
+ vertex 19.753 19.8896 -0.2
+ vertex 19.1065 20.2262 -0.2
+ vertex 19.1956 19.6132 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.6713 20.6529 -0.1
- vertex 19.0081 20.8787 -0.1
- vertex 19.1065 20.2262 -0.1
+ vertex 19.6713 20.6529 -0.2
+ vertex 19.0081 20.8787 -0.2
+ vertex 19.1065 20.2262 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.6646 22.0992 -0.1
- vertex 19.108 22.463 -0.1
- vertex 18.9302 22.6398 -0.1
+ vertex 18.6646 22.0992 -0.2
+ vertex 19.108 22.463 -0.2
+ vertex 18.9302 22.6398 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.58 21.4118 -0.1
- vertex 18.892 21.4494 -0.1
- vertex 19.0081 20.8787 -0.1
+ vertex 19.58 21.4118 -0.2
+ vertex 18.892 21.4494 -0.2
+ vertex 19.0081 20.8787 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4538 21.9215 -0.1
- vertex 18.7726 21.8767 -0.1
- vertex 18.892 21.4494 -0.1
+ vertex 19.4538 21.9215 -0.2
+ vertex 18.7726 21.8767 -0.2
+ vertex 18.892 21.4494 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.2511 22.2936 -0.1
- vertex 18.7163 22.0174 -0.1
- vertex 18.7726 21.8767 -0.1
+ vertex 19.2511 22.2936 -0.2
+ vertex 18.7163 22.0174 -0.2
+ vertex 18.7726 21.8767 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.108 22.463 -0.1
- vertex 18.6646 22.0992 -0.1
- vertex 18.7163 22.0174 -0.1
+ vertex 19.108 22.463 -0.2
+ vertex 18.6646 22.0992 -0.2
+ vertex 18.7163 22.0174 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.4732 22.2317 -0.1
- vertex 18.9302 22.6398 -0.1
- vertex 18.6454 22.8797 -0.1
+ vertex 18.4732 22.2317 -0.2
+ vertex 18.9302 22.6398 -0.2
+ vertex 18.6454 22.8797 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.9302 22.6398 -0.1
- vertex 18.4732 22.2317 -0.1
- vertex 18.6646 22.0992 -0.1
+ vertex 18.9302 22.6398 -0.2
+ vertex 18.4732 22.2317 -0.2
+ vertex 18.6646 22.0992 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.127 22.4141 -0.1
- vertex 18.6454 22.8797 -0.1
- vertex 18.318 23.1114 -0.1
+ vertex 18.127 22.4141 -0.2
+ vertex 18.6454 22.8797 -0.2
+ vertex 18.318 23.1114 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.6454 22.8797 -0.1
- vertex 18.127 22.4141 -0.1
- vertex 18.4732 22.2317 -0.1
+ vertex 18.6454 22.8797 -0.2
+ vertex 18.127 22.4141 -0.2
+ vertex 18.4732 22.2317 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6752 22.6222 -0.1
- vertex 18.318 23.1114 -0.1
- vertex 17.9883 23.3086 -0.1
+ vertex 17.6752 22.6222 -0.2
+ vertex 18.318 23.1114 -0.2
+ vertex 17.9883 23.3086 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6752 22.6222 -0.1
- vertex 17.9883 23.3086 -0.1
- vertex 17.6969 23.4449 -0.1
+ vertex 17.6752 22.6222 -0.2
+ vertex 17.9883 23.3086 -0.2
+ vertex 17.6969 23.4449 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.318 23.1114 -0.1
- vertex 17.6752 22.6222 -0.1
- vertex 18.127 22.4141 -0.1
+ vertex 18.318 23.1114 -0.2
+ vertex 17.6752 22.6222 -0.2
+ vertex 18.127 22.4141 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6969 23.4449 -0.1
- vertex 17.1667 22.8321 -0.1
- vertex 17.6752 22.6222 -0.1
+ vertex 17.6969 23.4449 -0.2
+ vertex 17.1667 22.8321 -0.2
+ vertex 17.6752 22.6222 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.2809 23.9862 -0.1
- vertex 17.1667 22.8321 -0.1
- vertex 17.6969 23.4449 -0.1
+ vertex 16.2809 23.9862 -0.2
+ vertex 17.1667 22.8321 -0.2
+ vertex 17.6969 23.4449 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.2809 23.9862 -0.1
- vertex 15.5173 23.4995 -0.1
- vertex 17.1667 22.8321 -0.1
+ vertex 16.2809 23.9862 -0.2
+ vertex 15.5173 23.4995 -0.2
+ vertex 17.1667 22.8321 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.1328 24.4531 -0.1
- vertex 15.5173 23.4995 -0.1
- vertex 16.2809 23.9862 -0.1
+ vertex 15.1328 24.4531 -0.2
+ vertex 15.5173 23.4995 -0.2
+ vertex 16.2809 23.9862 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.0281 24.1527 -0.1
- vertex 15.1328 24.4531 -0.1
- vertex 14.2197 24.8651 -0.1
+ vertex 14.0281 24.1527 -0.2
+ vertex 15.1328 24.4531 -0.2
+ vertex 14.2197 24.8651 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.1328 24.4531 -0.1
- vertex 14.0281 24.1527 -0.1
- vertex 15.5173 23.4995 -0.1
+ vertex 15.1328 24.4531 -0.2
+ vertex 14.0281 24.1527 -0.2
+ vertex 15.5173 23.4995 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.2197 24.8651 -0.1
- vertex 13.7923 24.2655 -0.1
- vertex 14.0281 24.1527 -0.1
+ vertex 14.2197 24.8651 -0.2
+ vertex 13.7923 24.2655 -0.2
+ vertex 14.0281 24.1527 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.2197 24.8651 -0.1
- vertex 13.5553 24.3991 -0.1
- vertex 13.7923 24.2655 -0.1
+ vertex 14.2197 24.8651 -0.2
+ vertex 13.5553 24.3991 -0.2
+ vertex 13.7923 24.2655 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.5086 25.2416 -0.1
- vertex 13.5553 24.3991 -0.1
- vertex 14.2197 24.8651 -0.1
+ vertex 13.5086 25.2416 -0.2
+ vertex 13.5553 24.3991 -0.2
+ vertex 14.2197 24.8651 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.085 24.7212 -0.1
- vertex 13.5086 25.2416 -0.1
- vertex 13.2184 25.4225 -0.1
+ vertex 13.085 24.7212 -0.2
+ vertex 13.5086 25.2416 -0.2
+ vertex 13.2184 25.4225 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.5086 25.2416 -0.1
- vertex 13.085 24.7212 -0.1
- vertex 13.5553 24.3991 -0.1
+ vertex 13.5086 25.2416 -0.2
+ vertex 13.085 24.7212 -0.2
+ vertex 13.5553 24.3991 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.6316 25.1032 -0.1
- vertex 13.2184 25.4225 -0.1
- vertex 12.9664 25.6018 -0.1
+ vertex 12.6316 25.1032 -0.2
+ vertex 13.2184 25.4225 -0.2
+ vertex 12.9664 25.6018 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.6316 25.1032 -0.1
- vertex 12.9664 25.6018 -0.1
- vertex 12.7484 25.782 -0.1
+ vertex 12.6316 25.1032 -0.2
+ vertex 12.9664 25.6018 -0.2
+ vertex 12.7484 25.782 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.2184 25.4225 -0.1
- vertex 12.6316 25.1032 -0.1
- vertex 13.085 24.7212 -0.1
+ vertex 13.2184 25.4225 -0.2
+ vertex 12.6316 25.1032 -0.2
+ vertex 13.085 24.7212 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.2092 25.5292 -0.1
- vertex 12.7484 25.782 -0.1
- vertex 12.5603 25.9653 -0.1
+ vertex 12.2092 25.5292 -0.2
+ vertex 12.7484 25.782 -0.2
+ vertex 12.5603 25.9653 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.2092 25.5292 -0.1
- vertex 12.5603 25.9653 -0.1
- vertex 12.3979 26.1543 -0.1
+ vertex 12.2092 25.5292 -0.2
+ vertex 12.5603 25.9653 -0.2
+ vertex 12.3979 26.1543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8324 25.9834 -0.1
- vertex 12.3979 26.1543 -0.1
- vertex 12.2572 26.3514 -0.1
+ vertex 11.8324 25.9834 -0.2
+ vertex 12.3979 26.1543 -0.2
+ vertex 12.2572 26.3514 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.7484 25.782 -0.1
- vertex 12.2092 25.5292 -0.1
- vertex 12.6316 25.1032 -0.1
+ vertex 12.7484 25.782 -0.2
+ vertex 12.2092 25.5292 -0.2
+ vertex 12.6316 25.1032 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8324 25.9834 -0.1
- vertex 12.2572 26.3514 -0.1
- vertex 12.1339 26.5589 -0.1
+ vertex 11.8324 25.9834 -0.2
+ vertex 12.2572 26.3514 -0.2
+ vertex 12.1339 26.5589 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5154 26.4501 -0.1
- vertex 12.1339 26.5589 -0.1
- vertex 12.0241 26.7794 -0.1
+ vertex 11.5154 26.4501 -0.2
+ vertex 12.1339 26.5589 -0.2
+ vertex 12.0241 26.7794 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.3839 26.6832 -0.1
- vertex 12.0241 26.7794 -0.1
- vertex 11.903 27.1234 -0.1
+ vertex 11.3839 26.6832 -0.2
+ vertex 12.0241 26.7794 -0.2
+ vertex 11.903 27.1234 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.3979 26.1543 -0.1
- vertex 11.8324 25.9834 -0.1
- vertex 12.2092 25.5292 -0.1
+ vertex 12.3979 26.1543 -0.2
+ vertex 11.8324 25.9834 -0.2
+ vertex 12.2092 25.5292 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.1835 27.139 -0.1
- vertex 11.903 27.1234 -0.1
- vertex 11.8169 27.5343 -0.1
+ vertex 11.1835 27.139 -0.2
+ vertex 11.903 27.1234 -0.2
+ vertex 11.8169 27.5343 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.0734 27.5937 -0.1
- vertex 11.8169 27.5343 -0.1
- vertex 11.7656 27.9858 -0.1
+ vertex 11.0734 27.5937 -0.2
+ vertex 11.8169 27.5343 -0.2
+ vertex 11.7656 27.9858 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.0419 28.1143 -0.1
- vertex 11.7656 27.9858 -0.1
- vertex 11.7492 28.4518 -0.1
+ vertex 11.0419 28.1143 -0.2
+ vertex 11.7656 27.9858 -0.2
+ vertex 11.7492 28.4518 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.2437 29.4873 -0.1
- vertex 11.9082 29.6745 -0.1
- vertex 11.4096 29.9696 -0.1
+ vertex 11.2437 29.4873 -0.2
+ vertex 11.9082 29.6745 -0.2
+ vertex 11.4096 29.9696 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.9082 29.6745 -0.1
- vertex 11.2437 29.4873 -0.1
- vertex 11.8205 29.3224 -0.1
+ vertex 11.9082 29.6745 -0.2
+ vertex 11.2437 29.4873 -0.2
+ vertex 11.8205 29.3224 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.7675 28.9061 -0.1
- vertex 11.1213 28.9486 -0.1
- vertex 11.7492 28.4518 -0.1
+ vertex 11.7675 28.9061 -0.2
+ vertex 11.1213 28.9486 -0.2
+ vertex 11.7492 28.4518 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8205 29.3224 -0.1
- vertex 11.2437 29.4873 -0.1
- vertex 11.7675 28.9061 -0.1
+ vertex 11.8205 29.3224 -0.2
+ vertex 11.2437 29.4873 -0.2
+ vertex 11.7675 28.9061 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.1213 28.9486 -0.1
- vertex 11.7675 28.9061 -0.1
- vertex 11.2437 29.4873 -0.1
+ vertex 11.1213 28.9486 -0.2
+ vertex 11.7675 28.9061 -0.2
+ vertex 11.2437 29.4873 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.0528 28.3898 -0.1
- vertex 11.7492 28.4518 -0.1
- vertex 11.1213 28.9486 -0.1
+ vertex 11.0528 28.3898 -0.2
+ vertex 11.7492 28.4518 -0.2
+ vertex 11.1213 28.9486 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.1339 26.5589 -0.1
- vertex 11.5154 26.4501 -0.1
- vertex 11.8324 25.9834 -0.1
+ vertex 12.1339 26.5589 -0.2
+ vertex 11.5154 26.4501 -0.2
+ vertex 11.8324 25.9834 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.0419 28.1143 -0.1
- vertex 11.7492 28.4518 -0.1
- vertex 11.0528 28.3898 -0.1
+ vertex 11.0419 28.1143 -0.2
+ vertex 11.7492 28.4518 -0.2
+ vertex 11.0528 28.3898 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.0241 26.7794 -0.1
- vertex 11.3839 26.6832 -0.1
- vertex 11.5154 26.4501 -0.1
+ vertex 12.0241 26.7794 -0.2
+ vertex 11.3839 26.6832 -0.2
+ vertex 11.5154 26.4501 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.7656 27.9858 -0.1
- vertex 11.0419 28.1143 -0.1
- vertex 11.0484 27.8474 -0.1
+ vertex 11.7656 27.9858 -0.2
+ vertex 11.0419 28.1143 -0.2
+ vertex 11.0484 27.8474 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.903 27.1234 -0.1
- vertex 11.2726 26.9135 -0.1
- vertex 11.3839 26.6832 -0.1
+ vertex 11.903 27.1234 -0.2
+ vertex 11.2726 26.9135 -0.2
+ vertex 11.3839 26.6832 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.7656 27.9858 -0.1
- vertex 11.0484 27.8474 -0.1
- vertex 11.0734 27.5937 -0.1
+ vertex 11.7656 27.9858 -0.2
+ vertex 11.0484 27.8474 -0.2
+ vertex 11.0734 27.5937 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.903 27.1234 -0.1
- vertex 11.1835 27.139 -0.1
- vertex 11.2726 26.9135 -0.1
+ vertex 11.903 27.1234 -0.2
+ vertex 11.1835 27.139 -0.2
+ vertex 11.2726 26.9135 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8169 27.5343 -0.1
- vertex 11.1184 27.3577 -0.1
- vertex 11.1835 27.139 -0.1
+ vertex 11.8169 27.5343 -0.2
+ vertex 11.1184 27.3577 -0.2
+ vertex 11.1835 27.139 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.8169 27.5343 -0.1
- vertex 11.0734 27.5937 -0.1
- vertex 11.1184 27.3577 -0.1
+ vertex 11.8169 27.5343 -0.2
+ vertex 11.0734 27.5937 -0.2
+ vertex 11.1184 27.3577 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.5155 0.168137 -0.1
- vertex 21.1355 -0.658014 -0.1
- vertex 21.1316 -0.233279 -0.1
+ vertex 20.5155 0.168137 -0.2
+ vertex 21.1355 -0.658014 -0.2
+ vertex 21.1316 -0.233279 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.8646 0.230347 -0.1
- vertex 21.1316 -0.233279 -0.1
- vertex 21.099 0.0745682 -0.1
+ vertex 20.8646 0.230347 -0.2
+ vertex 21.1316 -0.233279 -0.2
+ vertex 21.099 0.0745682 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.9772 0.235111 -0.1
- vertex 21.099 0.0745682 -0.1
- vertex 21.0726 0.170561 -0.1
+ vertex 20.9772 0.235111 -0.2
+ vertex 21.099 0.0745682 -0.2
+ vertex 21.0726 0.170561 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.9772 0.235111 -0.1
- vertex 21.0726 0.170561 -0.1
- vertex 21.0399 0.220413 -0.1
+ vertex 20.9772 0.235111 -0.2
+ vertex 21.0726 0.170561 -0.2
+ vertex 21.0399 0.220413 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.1316 -0.233279 -0.1
- vertex 20.8646 0.230347 -0.1
- vertex 20.5155 0.168137 -0.1
+ vertex 21.1316 -0.233279 -0.2
+ vertex 20.8646 0.230347 -0.2
+ vertex 20.5155 0.168137 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.1355 -0.658014 -0.1
- vertex 20.5155 0.168137 -0.1
- vertex 20.0432 0.0451876 -0.1
+ vertex 21.1355 -0.658014 -0.2
+ vertex 20.5155 0.168137 -0.2
+ vertex 20.0432 0.0451876 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.099 0.0745682 -0.1
- vertex 20.9772 0.235111 -0.1
- vertex 20.8646 0.230347 -0.1
+ vertex 21.099 0.0745682 -0.2
+ vertex 20.9772 0.235111 -0.2
+ vertex 20.8646 0.230347 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.1355 -0.658014 -0.1
- vertex 20.0432 0.0451876 -0.1
- vertex 21.1085 -1.15452 -0.1
+ vertex 21.1355 -0.658014 -0.2
+ vertex 20.0432 0.0451876 -0.2
+ vertex 21.1085 -1.15452 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 19.4982 -0.127099 -0.1
- vertex 21.1085 -1.15452 -0.1
- vertex 20.0432 0.0451876 -0.1
+ vertex 19.4982 -0.127099 -0.2
+ vertex 21.1085 -1.15452 -0.2
+ vertex 20.0432 0.0451876 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.1085 -1.15452 -0.1
- vertex 19.4982 -0.127099 -0.1
- vertex 21.0399 -1.71534 -0.1
+ vertex 21.1085 -1.15452 -0.2
+ vertex 19.4982 -0.127099 -0.2
+ vertex 21.0399 -1.71534 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 21.0399 -1.71534 -0.1
- vertex 19.4982 -0.127099 -0.1
- vertex 20.9878 -1.96317 -0.1
+ vertex 21.0399 -1.71534 -0.2
+ vertex 19.4982 -0.127099 -0.2
+ vertex 20.9878 -1.96317 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.7502 -0.369046 -0.1
- vertex 20.9878 -1.96317 -0.1
- vertex 19.4982 -0.127099 -0.1
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.9878 -1.96317 -0.2
+ vertex 19.4982 -0.127099 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.9878 -1.96317 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.9199 -2.19366 -0.1
+ vertex 20.9878 -1.96317 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.9199 -2.19366 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.9199 -2.19366 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.8331 -2.41014 -0.1
+ vertex 20.9199 -2.19366 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.8331 -2.41014 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.8331 -2.41014 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.7245 -2.61588 -0.1
+ vertex 20.8331 -2.41014 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.7245 -2.61588 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.7245 -2.61588 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.591 -2.8142 -0.1
+ vertex 20.7245 -2.61588 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.591 -2.8142 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.591 -2.8142 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.4297 -3.0084 -0.1
+ vertex 20.591 -2.8142 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.4297 -3.0084 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.4297 -3.0084 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.2374 -3.20177 -0.1
+ vertex 20.4297 -3.0084 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.2374 -3.20177 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.2374 -3.20177 -0.1
- vertex 18.7502 -0.369046 -0.1
- vertex 20.0112 -3.39762 -0.1
+ vertex 20.2374 -3.20177 -0.2
+ vertex 18.7502 -0.369046 -0.2
+ vertex 20.0112 -3.39762 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.4876 -0.435405 -0.1
- vertex 20.0112 -3.39762 -0.1
- vertex 18.7502 -0.369046 -0.1
+ vertex 18.4876 -0.435405 -0.2
+ vertex 20.0112 -3.39762 -0.2
+ vertex 18.7502 -0.369046 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 20.0112 -3.39762 -0.1
- vertex 18.4876 -0.435405 -0.1
- vertex 19.4451 -3.80993 -0.1
+ vertex 20.0112 -3.39762 -0.2
+ vertex 18.4876 -0.435405 -0.2
+ vertex 19.4451 -3.80993 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 18.2791 -0.466914 -0.1
- vertex 19.4451 -3.80993 -0.1
- vertex 18.4876 -0.435405 -0.1
+ vertex 18.2791 -0.466914 -0.2
+ vertex 19.4451 -3.80993 -0.2
+ vertex 18.4876 -0.435405 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 18.1098 -0.464739 -0.1
- vertex 19.4451 -3.80993 -0.1
- vertex 18.2791 -0.466914 -0.1
+ vertex 18.1098 -0.464739 -0.2
+ vertex 19.4451 -3.80993 -0.2
+ vertex 18.2791 -0.466914 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 19.4451 -3.80993 -0.1
- vertex 18.1098 -0.464739 -0.1
- vertex 18.7073 -4.27174 -0.1
+ vertex 19.4451 -3.80993 -0.2
+ vertex 18.1098 -0.464739 -0.2
+ vertex 18.7073 -4.27174 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.9646 -0.430052 -0.1
- vertex 18.7073 -4.27174 -0.1
- vertex 18.1098 -0.464739 -0.1
+ vertex 17.9646 -0.430052 -0.2
+ vertex 18.7073 -4.27174 -0.2
+ vertex 18.1098 -0.464739 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.7736 -4.80944 -0.1
- vertex 17.9646 -0.430052 -0.1
- vertex 17.8284 -0.36402 -0.1
+ vertex 17.7736 -4.80944 -0.2
+ vertex 17.9646 -0.430052 -0.2
+ vertex 17.8284 -0.36402 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.9646 -0.430052 -0.1
- vertex 17.7736 -4.80944 -0.1
- vertex 18.7073 -4.27174 -0.1
+ vertex 17.9646 -0.430052 -0.2
+ vertex 17.7736 -4.80944 -0.2
+ vertex 18.7073 -4.27174 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.3217 -2.5049 -0.1
- vertex 17.8284 -0.36402 -0.1
- vertex 17.6862 -0.267812 -0.1
+ vertex 14.3217 -2.5049 -0.2
+ vertex 17.8284 -0.36402 -0.2
+ vertex 17.6862 -0.267812 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.2572 -2.23644 -0.1
- vertex 17.6862 -0.267812 -0.1
- vertex 17.4918 -0.0873203 -0.1
+ vertex 14.2572 -2.23644 -0.2
+ vertex 17.6862 -0.267812 -0.2
+ vertex 17.4918 -0.0873203 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.1524 -1.94488 -0.1
- vertex 17.4918 -0.0873203 -0.1
- vertex 17.2889 0.169637 -0.1
+ vertex 14.1524 -1.94488 -0.2
+ vertex 17.4918 -0.0873203 -0.2
+ vertex 17.2889 0.169637 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.008 -1.63155 -0.1
- vertex 17.2889 0.169637 -0.1
- vertex 17.0802 0.495742 -0.1
+ vertex 14.008 -1.63155 -0.2
+ vertex 17.2889 0.169637 -0.2
+ vertex 17.0802 0.495742 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.8249 -1.29782 -0.1
- vertex 17.0802 0.495742 -0.1
- vertex 16.8681 0.883681 -0.1
+ vertex 13.8249 -1.29782 -0.2
+ vertex 17.0802 0.495742 -0.2
+ vertex 16.8681 0.883681 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.604 -0.945011 -0.1
- vertex 16.8681 0.883681 -0.1
- vertex 16.6551 1.32614 -0.1
+ vertex 13.604 -0.945011 -0.2
+ vertex 16.8681 0.883681 -0.2
+ vertex 16.6551 1.32614 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.3463 -0.574481 -0.1
- vertex 16.6551 1.32614 -0.1
- vertex 16.4437 1.81579 -0.1
+ vertex 13.3463 -0.574481 -0.2
+ vertex 16.6551 1.32614 -0.2
+ vertex 16.4437 1.81579 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.6862 -0.267812 -0.1
- vertex 14.2572 -2.23644 -0.1
- vertex 14.3217 -2.5049 -0.1
+ vertex 17.6862 -0.267812 -0.2
+ vertex 14.2572 -2.23644 -0.2
+ vertex 14.3217 -2.5049 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.7237 0.214368 -0.1
- vertex 16.4437 1.81579 -0.1
- vertex 16.2363 2.34533 -0.1
+ vertex 12.7237 0.214368 -0.2
+ vertex 16.4437 1.81579 -0.2
+ vertex 16.2363 2.34533 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.3607 0.629996 -0.1
- vertex 16.2363 2.34533 -0.1
- vertex 16.0356 2.90743 -0.1
+ vertex 12.3607 0.629996 -0.2
+ vertex 16.2363 2.34533 -0.2
+ vertex 16.0356 2.90743 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5355 1.49693 -0.1
- vertex 16.0356 2.90743 -0.1
- vertex 15.6639 4.10009 -0.1
+ vertex 11.5355 1.49693 -0.2
+ vertex 16.0356 2.90743 -0.2
+ vertex 15.6639 4.10009 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.8284 -0.36402 -0.1
- vertex 14.3217 -2.5049 -0.1
- vertex 14.3448 -2.7489 -0.1
+ vertex 17.8284 -0.36402 -0.2
+ vertex 14.3217 -2.5049 -0.2
+ vertex 14.3448 -2.7489 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5355 1.49693 -0.1
- vertex 15.6639 4.10009 -0.1
- vertex 15.498 4.716 -0.1
+ vertex 11.5355 1.49693 -0.2
+ vertex 15.6639 4.10009 -0.2
+ vertex 15.498 4.716 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.5842 2.40247 -0.1
- vertex 15.498 4.716 -0.1
- vertex 15.3486 5.33522 -0.1
+ vertex 10.5842 2.40247 -0.2
+ vertex 15.498 4.716 -0.2
+ vertex 15.3486 5.33522 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.5842 2.40247 -0.1
- vertex 15.3486 5.33522 -0.1
- vertex 15.2183 5.95043 -0.1
+ vertex 10.5842 2.40247 -0.2
+ vertex 15.3486 5.33522 -0.2
+ vertex 15.2183 5.95043 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.61741 3.25086 -0.1
- vertex 15.2183 5.95043 -0.1
- vertex 15.1095 6.5543 -0.1
+ vertex 9.61741 3.25086 -0.2
+ vertex 15.2183 5.95043 -0.2
+ vertex 15.1095 6.5543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.29624 3.50894 -0.1
- vertex 15.1095 6.5543 -0.1
- vertex 15.0249 7.13954 -0.1
+ vertex 9.29624 3.50894 -0.2
+ vertex 15.1095 6.5543 -0.2
+ vertex 15.0249 7.13954 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.3256 -2.96711 -0.1
- vertex 17.7736 -4.80944 -0.1
- vertex 14.3448 -2.7489 -0.1
+ vertex 14.3256 -2.96711 -0.2
+ vertex 17.7736 -4.80944 -0.2
+ vertex 14.3448 -2.7489 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.14614 3.60373 -0.1
- vertex 15.0249 7.13954 -0.1
- vertex 14.9668 7.69881 -0.1
+ vertex 9.14614 3.60373 -0.2
+ vertex 15.0249 7.13954 -0.2
+ vertex 14.9668 7.69881 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.19732 4.25764 -0.1
- vertex 14.9668 7.69881 -0.1
- vertex 14.9212 8.45633 -0.1
+ vertex 8.19732 4.25764 -0.2
+ vertex 14.9668 7.69881 -0.2
+ vertex 14.9212 8.45633 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.0942 9.33737 -0.1
- vertex 8.99158 15.8746 -0.1
- vertex 15.0092 9.15168 -0.1
+ vertex 15.0942 9.33737 -0.2
+ vertex 8.99158 15.8746 -0.2
+ vertex 15.0092 9.15168 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.7736 -4.80944 -0.1
- vertex 14.3256 -2.96711 -0.1
- vertex 16.3254 -5.59514 -0.1
+ vertex 17.7736 -4.80944 -0.2
+ vertex 14.3256 -2.96711 -0.2
+ vertex 16.3254 -5.59514 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.1768 -3.32005 -0.1
- vertex 16.3254 -5.59514 -0.1
- vertex 14.2634 -3.15818 -0.1
+ vertex 14.1768 -3.32005 -0.2
+ vertex 16.3254 -5.59514 -0.2
+ vertex 14.2634 -3.15818 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.2634 -3.15818 -0.1
- vertex 16.3254 -5.59514 -0.1
- vertex 14.3256 -2.96711 -0.1
+ vertex 14.2634 -3.15818 -0.2
+ vertex 16.3254 -5.59514 -0.2
+ vertex 14.3256 -2.96711 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.8284 -0.36402 -0.1
- vertex 14.3448 -2.7489 -0.1
- vertex 17.7736 -4.80944 -0.1
+ vertex 17.8284 -0.36402 -0.2
+ vertex 14.3448 -2.7489 -0.2
+ vertex 17.7736 -4.80944 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.4918 -0.0873203 -0.1
- vertex 14.1524 -1.94488 -0.1
- vertex 14.2572 -2.23644 -0.1
+ vertex 17.4918 -0.0873203 -0.2
+ vertex 14.1524 -1.94488 -0.2
+ vertex 14.2572 -2.23644 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.2889 0.169637 -0.1
- vertex 14.008 -1.63155 -0.1
- vertex 14.1524 -1.94488 -0.1
+ vertex 17.2889 0.169637 -0.2
+ vertex 14.008 -1.63155 -0.2
+ vertex 14.1524 -1.94488 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.4375 16.5104 -0.1
- vertex 14.6028 17.0277 -0.1
- vertex 14.0017 17.4864 -0.1
+ vertex 10.4375 16.5104 -0.2
+ vertex 14.6028 17.0277 -0.2
+ vertex 14.0017 17.4864 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 17.0802 0.495742 -0.1
- vertex 13.8249 -1.29782 -0.1
- vertex 14.008 -1.63155 -0.1
+ vertex 17.0802 0.495742 -0.2
+ vertex 13.8249 -1.29782 -0.2
+ vertex 14.008 -1.63155 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.8681 0.883681 -0.1
- vertex 13.604 -0.945011 -0.1
- vertex 13.8249 -1.29782 -0.1
+ vertex 16.8681 0.883681 -0.2
+ vertex 13.604 -0.945011 -0.2
+ vertex 13.8249 -1.29782 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.4375 16.5104 -0.1
- vertex 14.0017 17.4864 -0.1
- vertex 13.3813 18.0182 -0.1
+ vertex 10.4375 16.5104 -0.2
+ vertex 14.0017 17.4864 -0.2
+ vertex 13.3813 18.0182 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.6551 1.32614 -0.1
- vertex 13.3463 -0.574481 -0.1
- vertex 13.604 -0.945011 -0.1
+ vertex 16.6551 1.32614 -0.2
+ vertex 13.3463 -0.574481 -0.2
+ vertex 13.604 -0.945011 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.4437 1.81579 -0.1
- vertex 13.0525 -0.187573 -0.1
- vertex 13.3463 -0.574481 -0.1
+ vertex 16.4437 1.81579 -0.2
+ vertex 13.0525 -0.187573 -0.2
+ vertex 13.3463 -0.574481 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.4437 1.81579 -0.1
- vertex 12.7237 0.214368 -0.1
- vertex 13.0525 -0.187573 -0.1
+ vertex 16.4437 1.81579 -0.2
+ vertex 12.7237 0.214368 -0.2
+ vertex 13.0525 -0.187573 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.4375 16.5104 -0.1
- vertex 13.3813 18.0182 -0.1
- vertex 12.71 18.6425 -0.1
+ vertex 10.4375 16.5104 -0.2
+ vertex 13.3813 18.0182 -0.2
+ vertex 12.71 18.6425 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.2363 2.34533 -0.1
- vertex 12.3607 0.629996 -0.1
- vertex 12.7237 0.214368 -0.1
+ vertex 16.2363 2.34533 -0.2
+ vertex 12.3607 0.629996 -0.2
+ vertex 12.7237 0.214368 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.4375 16.5104 -0.1
- vertex 12.71 18.6425 -0.1
- vertex 12.1494 19.1886 -0.1
+ vertex 10.4375 16.5104 -0.2
+ vertex 12.71 18.6425 -0.2
+ vertex 12.1494 19.1886 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.77546 17.1908 -0.1
- vertex 12.1494 19.1886 -0.1
- vertex 11.6914 19.6646 -0.1
+ vertex 9.77546 17.1908 -0.2
+ vertex 12.1494 19.1886 -0.2
+ vertex 11.6914 19.6646 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 8.87708 15.8492 -0.1
- vertex 15.0092 9.15168 -0.1
- vertex 8.99158 15.8746 -0.1
+ vertex 8.87708 15.8492 -0.2
+ vertex 15.0092 9.15168 -0.2
+ vertex 8.99158 15.8746 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.09841 17.8163 -0.1
- vertex 11.6914 19.6646 -0.1
- vertex 11.3113 20.1069 -0.1
+ vertex 9.09841 17.8163 -0.2
+ vertex 11.6914 19.6646 -0.2
+ vertex 11.3113 20.1069 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.09841 17.8163 -0.1
- vertex 11.3113 20.1069 -0.1
- vertex 10.9846 20.5521 -0.1
+ vertex 9.09841 17.8163 -0.2
+ vertex 11.3113 20.1069 -0.2
+ vertex 10.9846 20.5521 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.31493 18.4459 -0.1
- vertex 10.9846 20.5521 -0.1
- vertex 10.6869 21.0368 -0.1
+ vertex 8.31493 18.4459 -0.2
+ vertex 10.9846 20.5521 -0.2
+ vertex 10.6869 21.0368 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.0356 2.90743 -0.1
- vertex 11.5355 1.49693 -0.1
- vertex 12.3607 0.629996 -0.1
+ vertex 16.0356 2.90743 -0.2
+ vertex 11.5355 1.49693 -0.2
+ vertex 12.3607 0.629996 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.498 4.716 -0.1
- vertex 10.5842 2.40247 -0.1
- vertex 11.5355 1.49693 -0.1
+ vertex 15.498 4.716 -0.2
+ vertex 10.5842 2.40247 -0.2
+ vertex 11.5355 1.49693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.9444 18.7161 -0.1
- vertex 10.6869 21.0368 -0.1
- vertex 10.3935 21.5973 -0.1
+ vertex 7.9444 18.7161 -0.2
+ vertex 10.6869 21.0368 -0.2
+ vertex 10.3935 21.5973 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.36805 19.075 -0.1
- vertex 10.3935 21.5973 -0.1
- vertex 10.0801 22.2703 -0.1
+ vertex 7.36805 19.075 -0.2
+ vertex 10.3935 21.5973 -0.2
+ vertex 10.0801 22.2703 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.1494 19.1886 -0.1
- vertex 9.77546 17.1908 -0.1
- vertex 10.4375 16.5104 -0.1
+ vertex 12.1494 19.1886 -0.2
+ vertex 9.77546 17.1908 -0.2
+ vertex 10.4375 16.5104 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.21113 19.1268 -0.1
- vertex 10.0801 22.2703 -0.1
- vertex 9.72206 23.0922 -0.1
+ vertex 7.21113 19.1268 -0.2
+ vertex 10.0801 22.2703 -0.2
+ vertex 9.72206 23.0922 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.6914 19.6646 -0.1
- vertex 9.46246 17.4938 -0.1
- vertex 9.77546 17.1908 -0.1
+ vertex 11.6914 19.6646 -0.2
+ vertex 9.46246 17.4938 -0.2
+ vertex 9.77546 17.1908 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.21113 19.1268 -0.1
- vertex 9.72206 23.0922 -0.1
- vertex 9.38213 23.8626 -0.1
+ vertex 7.21113 19.1268 -0.2
+ vertex 9.72206 23.0922 -0.2
+ vertex 9.38213 23.8626 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.6914 19.6646 -0.1
- vertex 9.09841 17.8163 -0.1
- vertex 9.46246 17.4938 -0.1
+ vertex 11.6914 19.6646 -0.2
+ vertex 9.09841 17.8163 -0.2
+ vertex 9.46246 17.4938 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.76329 26.0408 -0.1
- vertex 9.38213 23.8626 -0.1
- vertex 9.08206 24.476 -0.1
+ vertex 6.76329 26.0408 -0.2
+ vertex 9.38213 23.8626 -0.2
+ vertex 9.08206 24.476 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.12606 25.9588 -0.1
- vertex 9.08206 24.476 -0.1
- vertex 8.80411 24.9522 -0.1
+ vertex 7.12606 25.9588 -0.2
+ vertex 9.08206 24.476 -0.2
+ vertex 8.80411 24.9522 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.55919 25.8755 -0.1
- vertex 8.80411 24.9522 -0.1
- vertex 8.6679 25.145 -0.1
+ vertex 7.55919 25.8755 -0.2
+ vertex 8.80411 24.9522 -0.2
+ vertex 8.6679 25.145 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.55919 25.8755 -0.1
- vertex 8.6679 25.145 -0.1
- vertex 8.53058 25.3107 -0.1
+ vertex 7.55919 25.8755 -0.2
+ vertex 8.6679 25.145 -0.2
+ vertex 8.53058 25.3107 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.55919 25.8755 -0.1
- vertex 8.53058 25.3107 -0.1
- vertex 8.38993 25.4519 -0.1
+ vertex 7.55919 25.8755 -0.2
+ vertex 8.53058 25.3107 -0.2
+ vertex 8.38993 25.4519 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9846 20.5521 -0.1
- vertex 8.31493 18.4459 -0.1
- vertex 9.09841 17.8163 -0.1
+ vertex 10.9846 20.5521 -0.2
+ vertex 8.31493 18.4459 -0.2
+ vertex 9.09841 17.8163 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.92584 25.7528 -0.1
- vertex 8.38993 25.4519 -0.1
- vertex 8.24373 25.571 -0.1
+ vertex 7.92584 25.7528 -0.2
+ vertex 8.38993 25.4519 -0.2
+ vertex 8.24373 25.571 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.92584 25.7528 -0.1
- vertex 8.24373 25.571 -0.1
- vertex 8.08977 25.6705 -0.1
+ vertex 7.92584 25.7528 -0.2
+ vertex 8.24373 25.571 -0.2
+ vertex 8.08977 25.6705 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.6869 21.0368 -0.1
- vertex 7.9444 18.7161 -0.1
- vertex 8.31493 18.4459 -0.1
+ vertex 10.6869 21.0368 -0.2
+ vertex 7.9444 18.7161 -0.2
+ vertex 8.31493 18.4459 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.38993 25.4519 -0.1
- vertex 7.92584 25.7528 -0.1
- vertex 7.55919 25.8755 -0.1
+ vertex 8.38993 25.4519 -0.2
+ vertex 7.92584 25.7528 -0.2
+ vertex 7.55919 25.8755 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.3935 21.5973 -0.1
- vertex 7.62063 18.9319 -0.1
- vertex 7.9444 18.7161 -0.1
+ vertex 10.3935 21.5973 -0.2
+ vertex 7.62063 18.9319 -0.2
+ vertex 7.9444 18.7161 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.80411 24.9522 -0.1
- vertex 7.55919 25.8755 -0.1
- vertex 7.12606 25.9588 -0.1
+ vertex 8.80411 24.9522 -0.2
+ vertex 7.55919 25.8755 -0.2
+ vertex 7.12606 25.9588 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.3935 21.5973 -0.1
- vertex 7.36805 19.075 -0.1
- vertex 7.62063 18.9319 -0.1
+ vertex 10.3935 21.5973 -0.2
+ vertex 7.36805 19.075 -0.2
+ vertex 7.62063 18.9319 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.0801 22.2703 -0.1
- vertex 7.21113 19.1268 -0.1
- vertex 7.36805 19.075 -0.1
+ vertex 10.0801 22.2703 -0.2
+ vertex 7.21113 19.1268 -0.2
+ vertex 7.36805 19.075 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.76329 26.0408 -0.1
- vertex 9.08206 24.476 -0.1
- vertex 7.12606 25.9588 -0.1
+ vertex 6.76329 26.0408 -0.2
+ vertex 9.08206 24.476 -0.2
+ vertex 7.12606 25.9588 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.38213 23.8626 -0.1
- vertex 6.76329 26.0408 -0.1
- vertex 7.21113 19.1268 -0.1
+ vertex 9.38213 23.8626 -0.2
+ vertex 6.76329 26.0408 -0.2
+ vertex 7.21113 19.1268 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.21113 19.1268 -0.1
- vertex 6.76329 26.0408 -0.1
- vertex 7.15267 19.0966 -0.1
+ vertex 7.21113 19.1268 -0.2
+ vertex 6.76329 26.0408 -0.2
+ vertex 7.15267 19.0966 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.41393 26.1795 -0.1
- vertex 7.15267 19.0966 -0.1
- vertex 6.76329 26.0408 -0.1
+ vertex 6.41393 26.1795 -0.2
+ vertex 7.15267 19.0966 -0.2
+ vertex 6.76329 26.0408 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.07308 26.3793 -0.1
- vertex 7.15267 19.0966 -0.1
- vertex 6.41393 26.1795 -0.1
+ vertex 6.07308 26.3793 -0.2
+ vertex 7.15267 19.0966 -0.2
+ vertex 6.41393 26.1795 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.816408 27.0884 -0.1
- vertex 7.15267 19.0966 -0.1
- vertex 6.07308 26.3793 -0.1
+ vertex 0.816408 27.0884 -0.2
+ vertex 7.15267 19.0966 -0.2
+ vertex 6.07308 26.3793 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 1.92323 12.5289 -0.1
- vertex 7.1242 19.0144 -0.1
- vertex 1.90284 12.6291 -0.1
+ vertex 1.92323 12.5289 -0.2
+ vertex 7.1242 19.0144 -0.2
+ vertex 1.90284 12.6291 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.734953 27.0776 -0.1
- vertex 7.15267 19.0966 -0.1
- vertex 0.816408 27.0884 -0.1
+ vertex 0.734953 27.0776 -0.2
+ vertex 7.15267 19.0966 -0.2
+ vertex 0.816408 27.0884 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.870515 27.1101 -0.1
- vertex 6.07308 26.3793 -0.1
- vertex 5.73586 26.6445 -0.1
+ vertex 0.870515 27.1101 -0.2
+ vertex 6.07308 26.3793 -0.2
+ vertex 5.73586 26.6445 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.870515 27.1101 -0.1
- vertex 5.73586 26.6445 -0.1
- vertex 5.39739 26.9794 -0.1
+ vertex 0.870515 27.1101 -0.2
+ vertex 5.73586 26.6445 -0.2
+ vertex 5.39739 26.9794 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 6.22936 5.32709 -0.1
- vertex 7.1242 19.0144 -0.1
- vertex 1.92323 12.5289 -0.1
+ vertex 6.22936 5.32709 -0.2
+ vertex 7.1242 19.0144 -0.2
+ vertex 1.92323 12.5289 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.870515 27.1101 -0.1
- vertex 5.39739 26.9794 -0.1
- vertex 5.05276 27.3884 -0.1
+ vertex 0.870515 27.1101 -0.2
+ vertex 5.39739 26.9794 -0.2
+ vertex 5.05276 27.3884 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.908598 27.1645 -0.1
- vertex 5.05276 27.3884 -0.1
- vertex 4.69711 27.8759 -0.1
+ vertex 0.908598 27.1645 -0.2
+ vertex 5.05276 27.3884 -0.2
+ vertex 4.69711 27.8759 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.944126 27.2693 -0.1
- vertex 4.69711 27.8759 -0.1
- vertex 4.32553 28.4461 -0.1
+ vertex 0.944126 27.2693 -0.2
+ vertex 4.69711 27.8759 -0.2
+ vertex 4.32553 28.4461 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 6.22936 5.32709 -0.1
- vertex 7.07462 4.9138 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 6.22936 5.32709 -0.2
+ vertex 7.07462 4.9138 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.04514 28.0688 -0.1
- vertex 4.32553 28.4461 -0.1
- vertex 4.09087 28.8303 -0.1
+ vertex 1.04514 28.0688 -0.2
+ vertex 4.32553 28.4461 -0.2
+ vertex 4.09087 28.8303 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.04514 28.0688 -0.1
- vertex 4.09087 28.8303 -0.1
- vertex 3.91157 29.1502 -0.1
+ vertex 1.04514 28.0688 -0.2
+ vertex 4.09087 28.8303 -0.2
+ vertex 3.91157 29.1502 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.0601 28.6106 -0.1
- vertex 3.91157 29.1502 -0.1
- vertex 3.78021 29.4348 -0.1
+ vertex 1.0601 28.6106 -0.2
+ vertex 3.91157 29.1502 -0.2
+ vertex 3.78021 29.4348 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.07949 29.2543 -0.1
- vertex 3.78021 29.4348 -0.1
- vertex 3.68937 29.7129 -0.1
+ vertex 1.07949 29.2543 -0.2
+ vertex 3.78021 29.4348 -0.2
+ vertex 3.68937 29.7129 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.13903 29.8907 -0.1
- vertex 3.68937 29.7129 -0.1
- vertex 3.63162 30.0135 -0.1
+ vertex 1.13903 29.8907 -0.2
+ vertex 3.68937 29.7129 -0.2
+ vertex 3.63162 30.0135 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.24074 30.5277 -0.1
- vertex 3.63162 30.0135 -0.1
- vertex 3.59957 30.3654 -0.1
+ vertex 1.24074 30.5277 -0.2
+ vertex 3.63162 30.0135 -0.2
+ vertex 3.59957 30.3654 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.91748 12.4352 -0.1
- vertex 6.22936 5.32709 -0.1
- vertex 1.92323 12.5289 -0.1
+ vertex 1.91748 12.4352 -0.2
+ vertex 6.22936 5.32709 -0.2
+ vertex 1.92323 12.5289 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.38662 31.173 -0.1
- vertex 3.59957 30.3654 -0.1
- vertex 3.58282 31.3388 -0.1
+ vertex 1.38662 31.173 -0.2
+ vertex 3.59957 30.3654 -0.2
+ vertex 3.58282 31.3388 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 14.0741 -3.47638 -0.1
- vertex 16.3254 -5.59514 -0.1
- vertex 14.1768 -3.32005 -0.1
+ vertex 14.0741 -3.47638 -0.2
+ vertex 16.3254 -5.59514 -0.2
+ vertex 14.1768 -3.32005 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 16.3254 -5.59514 -0.1
- vertex 14.0741 -3.47638 -0.1
- vertex 15.6549 -5.93433 -0.1
+ vertex 16.3254 -5.59514 -0.2
+ vertex 14.0741 -3.47638 -0.2
+ vertex 15.6549 -5.93433 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.8248 -3.7697 -0.1
- vertex 15.6549 -5.93433 -0.1
- vertex 14.0741 -3.47638 -0.1
+ vertex 13.8248 -3.7697 -0.2
+ vertex 15.6549 -5.93433 -0.2
+ vertex 14.0741 -3.47638 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.6549 -5.93433 -0.1
- vertex 13.8248 -3.7697 -0.1
- vertex 15.0129 -6.23993 -0.1
+ vertex 15.6549 -5.93433 -0.2
+ vertex 13.8248 -3.7697 -0.2
+ vertex 15.0129 -6.23993 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.5249 -4.03275 -0.1
- vertex 15.0129 -6.23993 -0.1
- vertex 13.8248 -3.7697 -0.1
+ vertex 13.5249 -4.03275 -0.2
+ vertex 15.0129 -6.23993 -0.2
+ vertex 13.8248 -3.7697 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.0129 -6.23993 -0.1
- vertex 13.5249 -4.03275 -0.1
- vertex 14.3941 -6.51356 -0.1
+ vertex 15.0129 -6.23993 -0.2
+ vertex 13.5249 -4.03275 -0.2
+ vertex 14.3941 -6.51356 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 13.1837 -4.26011 -0.1
- vertex 14.3941 -6.51356 -0.1
- vertex 13.5249 -4.03275 -0.1
+ vertex 13.1837 -4.26011 -0.2
+ vertex 14.3941 -6.51356 -0.2
+ vertex 13.5249 -4.03275 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.3941 -6.51356 -0.1
- vertex 13.1837 -4.26011 -0.1
- vertex 13.793 -6.75686 -0.1
+ vertex 14.3941 -6.51356 -0.2
+ vertex 13.1837 -4.26011 -0.2
+ vertex 13.793 -6.75686 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.8106 -4.44636 -0.1
- vertex 13.793 -6.75686 -0.1
- vertex 13.1837 -4.26011 -0.1
+ vertex 12.8106 -4.44636 -0.2
+ vertex 13.793 -6.75686 -0.2
+ vertex 13.1837 -4.26011 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.793 -6.75686 -0.1
- vertex 12.8106 -4.44636 -0.1
- vertex 13.2041 -6.97145 -0.1
+ vertex 13.793 -6.75686 -0.2
+ vertex 12.8106 -4.44636 -0.2
+ vertex 13.2041 -6.97145 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.4149 -4.5861 -0.1
- vertex 13.2041 -6.97145 -0.1
- vertex 12.8106 -4.44636 -0.1
+ vertex 12.4149 -4.5861 -0.2
+ vertex 13.2041 -6.97145 -0.2
+ vertex 12.8106 -4.44636 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 13.2041 -6.97145 -0.1
- vertex 12.4149 -4.5861 -0.1
- vertex 12.6221 -7.15898 -0.1
+ vertex 13.2041 -6.97145 -0.2
+ vertex 12.4149 -4.5861 -0.2
+ vertex 12.6221 -7.15898 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 12.006 -4.67391 -0.1
- vertex 12.6221 -7.15898 -0.1
- vertex 12.4149 -4.5861 -0.1
+ vertex 12.006 -4.67391 -0.2
+ vertex 12.6221 -7.15898 -0.2
+ vertex 12.4149 -4.5861 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 12.6221 -7.15898 -0.1
- vertex 12.006 -4.67391 -0.1
- vertex 12.0414 -7.32107 -0.1
+ vertex 12.6221 -7.15898 -0.2
+ vertex 12.006 -4.67391 -0.2
+ vertex 12.0414 -7.32107 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 11.5931 -4.70438 -0.1
- vertex 12.0414 -7.32107 -0.1
- vertex 12.006 -4.67391 -0.1
+ vertex 11.5931 -4.70438 -0.2
+ vertex 12.0414 -7.32107 -0.2
+ vertex 12.006 -4.67391 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.5931 -4.70438 -0.1
- vertex 11.4568 -7.45935 -0.1
- vertex 12.0414 -7.32107 -0.1
+ vertex 11.5931 -4.70438 -0.2
+ vertex 11.4568 -7.45935 -0.2
+ vertex 12.0414 -7.32107 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 11.26 -4.69402 -0.1
- vertex 11.4568 -7.45935 -0.1
- vertex 11.5931 -4.70438 -0.1
+ vertex 11.26 -4.69402 -0.2
+ vertex 11.4568 -7.45935 -0.2
+ vertex 11.5931 -4.70438 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9319 -4.66264 -0.1
- vertex 11.4568 -7.45935 -0.1
- vertex 11.26 -4.69402 -0.1
+ vertex 10.9319 -4.66264 -0.2
+ vertex 11.4568 -7.45935 -0.2
+ vertex 11.26 -4.69402 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.9319 -4.66264 -0.1
- vertex 10.8627 -7.57545 -0.1
- vertex 11.4568 -7.45935 -0.1
+ vertex 10.9319 -4.66264 -0.2
+ vertex 10.8627 -7.57545 -0.2
+ vertex 11.4568 -7.45935 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.608 -4.6098 -0.1
- vertex 10.8627 -7.57545 -0.1
- vertex 10.9319 -4.66264 -0.1
+ vertex 10.608 -4.6098 -0.2
+ vertex 10.8627 -7.57545 -0.2
+ vertex 10.9319 -4.66264 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.2538 -7.67101 -0.1
- vertex 10.608 -4.6098 -0.1
- vertex 10.2875 -4.53506 -0.1
+ vertex 10.2538 -7.67101 -0.2
+ vertex 10.608 -4.6098 -0.2
+ vertex 10.2875 -4.53506 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.608 -4.6098 -0.1
- vertex 10.2538 -7.67101 -0.1
- vertex 10.8627 -7.57545 -0.1
+ vertex 10.608 -4.6098 -0.2
+ vertex 10.2538 -7.67101 -0.2
+ vertex 10.8627 -7.57545 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.62459 -7.74765 -0.1
- vertex 10.2875 -4.53506 -0.1
- vertex 9.96977 -4.43796 -0.1
+ vertex 9.62459 -7.74765 -0.2
+ vertex 10.2875 -4.53506 -0.2
+ vertex 9.96977 -4.43796 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.809 -5.75259 -0.1
- vertex 9.96977 -4.43796 -0.1
- vertex 9.65389 -4.31807 -0.1
+ vertex 7.809 -5.75259 -0.2
+ vertex 9.96977 -4.43796 -0.2
+ vertex 9.65389 -4.31807 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 10.2875 -4.53506 -0.1
- vertex 9.62459 -7.74765 -0.1
- vertex 10.2538 -7.67101 -0.1
+ vertex 10.2875 -4.53506 -0.2
+ vertex 9.62459 -7.74765 -0.2
+ vertex 10.2538 -7.67101 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.809 -5.75259 -0.1
- vertex 9.65389 -4.31807 -0.1
- vertex 9.33912 -4.17495 -0.1
+ vertex 7.809 -5.75259 -0.2
+ vertex 9.65389 -4.31807 -0.2
+ vertex 9.33912 -4.17495 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.809 -5.75259 -0.1
- vertex 9.33912 -4.17495 -0.1
- vertex 9.02468 -4.00814 -0.1
+ vertex 7.809 -5.75259 -0.2
+ vertex 9.33912 -4.17495 -0.2
+ vertex 9.02468 -4.00814 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.96977 -4.43796 -0.1
- vertex 7.809 -5.75259 -0.1
- vertex 9.62459 -7.74765 -0.1
+ vertex 9.96977 -4.43796 -0.2
+ vertex 7.809 -5.75259 -0.2
+ vertex 9.62459 -7.74765 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.809 -5.75259 -0.1
- vertex 9.02468 -4.00814 -0.1
- vertex 8.70978 -3.81721 -0.1
+ vertex 7.809 -5.75259 -0.2
+ vertex 9.02468 -4.00814 -0.2
+ vertex 8.70978 -3.81721 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.04277 -4.97268 -0.1
- vertex 8.70978 -3.81721 -0.1
- vertex 8.39365 -3.60171 -0.1
+ vertex 7.04277 -4.97268 -0.2
+ vertex 8.70978 -3.81721 -0.2
+ vertex 8.39365 -3.60171 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.04277 -4.97268 -0.1
- vertex 8.39365 -3.60171 -0.1
- vertex 8.0755 -3.36119 -0.1
+ vertex 7.04277 -4.97268 -0.2
+ vertex 8.39365 -3.60171 -0.2
+ vertex 8.0755 -3.36119 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.62459 -7.74765 -0.1
- vertex 7.809 -5.75259 -0.1
- vertex 8.96966 -7.80701 -0.1
+ vertex 9.62459 -7.74765 -0.2
+ vertex 7.809 -5.75259 -0.2
+ vertex 8.96966 -7.80701 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.809 -5.75259 -0.1
- vertex 7.56097 -7.88041 -0.1
- vertex 8.96966 -7.80701 -0.1
+ vertex 7.809 -5.75259 -0.2
+ vertex 7.56097 -7.88041 -0.2
+ vertex 8.96966 -7.80701 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 7.2241 -5.88439 -0.1
- vertex 7.56097 -7.88041 -0.1
- vertex 7.809 -5.75259 -0.1
+ vertex 7.2241 -5.88439 -0.2
+ vertex 7.56097 -7.88041 -0.2
+ vertex 7.809 -5.75259 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.87672 -5.95074 -0.1
- vertex 7.56097 -7.88041 -0.1
- vertex 7.2241 -5.88439 -0.1
+ vertex 6.87672 -5.95074 -0.2
+ vertex 7.56097 -7.88041 -0.2
+ vertex 7.2241 -5.88439 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 6.53505 -5.98957 -0.1
- vertex 7.56097 -7.88041 -0.1
- vertex 6.87672 -5.95074 -0.1
+ vertex 6.53505 -5.98957 -0.2
+ vertex 7.56097 -7.88041 -0.2
+ vertex 6.87672 -5.95074 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.04455 -7.91255 -0.1
- vertex 6.53505 -5.98957 -0.1
- vertex 6.18777 -5.99984 -0.1
+ vertex 6.04455 -7.91255 -0.2
+ vertex 6.53505 -5.98957 -0.2
+ vertex 6.18777 -5.99984 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.53505 -5.98957 -0.1
- vertex 6.04455 -7.91255 -0.1
- vertex 7.56097 -7.88041 -0.1
+ vertex 6.53505 -5.98957 -0.2
+ vertex 6.04455 -7.91255 -0.2
+ vertex 7.56097 -7.88041 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.82356 -5.98052 -0.1
- vertex 6.04455 -7.91255 -0.1
- vertex 6.18777 -5.99984 -0.1
+ vertex 5.82356 -5.98052 -0.2
+ vertex 6.04455 -7.91255 -0.2
+ vertex 6.18777 -5.99984 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.82356 -5.98052 -0.1
- vertex 5.49083 -7.9071 -0.1
- vertex 6.04455 -7.91255 -0.1
+ vertex 5.82356 -5.98052 -0.2
+ vertex 5.49083 -7.9071 -0.2
+ vertex 6.04455 -7.91255 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.4311 -5.93055 -0.1
- vertex 5.49083 -7.9071 -0.1
- vertex 5.82356 -5.98052 -0.1
+ vertex 5.4311 -5.93055 -0.2
+ vertex 5.49083 -7.9071 -0.2
+ vertex 5.82356 -5.98052 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.4311 -5.93055 -0.1
- vertex 5.0434 -7.88498 -0.1
- vertex 5.49083 -7.9071 -0.1
+ vertex 5.4311 -5.93055 -0.2
+ vertex 5.0434 -7.88498 -0.2
+ vertex 5.49083 -7.9071 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.99906 -5.84891 -0.1
- vertex 5.0434 -7.88498 -0.1
- vertex 5.4311 -5.93055 -0.1
+ vertex 4.99906 -5.84891 -0.2
+ vertex 5.0434 -7.88498 -0.2
+ vertex 5.4311 -5.93055 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.99906 -5.84891 -0.1
- vertex 4.67971 -7.84446 -0.1
- vertex 5.0434 -7.88498 -0.1
+ vertex 4.99906 -5.84891 -0.2
+ vertex 4.67971 -7.84446 -0.2
+ vertex 5.0434 -7.88498 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.11342 -7.70123 -0.1
- vertex 4.99906 -5.84891 -0.1
- vertex 4.51611 -5.73457 -0.1
+ vertex 4.11342 -7.70123 -0.2
+ vertex 4.99906 -5.84891 -0.2
+ vertex 4.51611 -5.73457 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.99906 -5.84891 -0.1
- vertex 4.37723 -7.78379 -0.1
- vertex 4.67971 -7.84446 -0.1
+ vertex 4.99906 -5.84891 -0.2
+ vertex 4.37723 -7.78379 -0.2
+ vertex 4.67971 -7.84446 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.99906 -5.84891 -0.1
- vertex 4.11342 -7.70123 -0.1
- vertex 4.37723 -7.78379 -0.1
+ vertex 4.99906 -5.84891 -0.2
+ vertex 4.11342 -7.70123 -0.2
+ vertex 4.37723 -7.78379 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.40104 -7.34622 -0.1
- vertex 4.51611 -5.73457 -0.1
- vertex 3.97093 -5.58648 -0.1
+ vertex 3.40104 -7.34622 -0.2
+ vertex 4.51611 -5.73457 -0.2
+ vertex 3.97093 -5.58648 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.51611 -5.73457 -0.1
- vertex 3.86574 -7.59505 -0.1
- vertex 4.11342 -7.70123 -0.1
+ vertex 4.51611 -5.73457 -0.2
+ vertex 3.86574 -7.59505 -0.2
+ vertex 4.11342 -7.70123 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.51611 -5.73457 -0.1
- vertex 3.40104 -7.34622 -0.1
- vertex 3.86574 -7.59505 -0.1
+ vertex 4.51611 -5.73457 -0.2
+ vertex 3.40104 -7.34622 -0.2
+ vertex 3.86574 -7.59505 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.71562 -6.94693 -0.1
- vertex 3.97093 -5.58648 -0.1
- vertex 3.25174 -5.37115 -0.1
+ vertex 2.71562 -6.94693 -0.2
+ vertex 3.97093 -5.58648 -0.2
+ vertex 3.25174 -5.37115 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.97093 -5.58648 -0.1
- vertex 2.71562 -6.94693 -0.1
- vertex 3.40104 -7.34622 -0.1
+ vertex 3.97093 -5.58648 -0.2
+ vertex 2.71562 -6.94693 -0.2
+ vertex 3.40104 -7.34622 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.534 -5.13555 -0.1
- vertex 2.71562 -6.94693 -0.1
- vertex 3.25174 -5.37115 -0.1
+ vertex 2.534 -5.13555 -0.2
+ vertex 2.71562 -6.94693 -0.2
+ vertex 3.25174 -5.37115 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.05193 -5.91722 -0.1
- vertex 2.534 -5.13555 -0.1
- vertex 1.81816 -4.87986 -0.1
+ vertex 1.05193 -5.91722 -0.2
+ vertex 2.534 -5.13555 -0.2
+ vertex 1.81816 -4.87986 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.05193 -5.91722 -0.1
- vertex 1.81816 -4.87986 -0.1
- vertex 1.10471 -4.60426 -0.1
+ vertex 1.05193 -5.91722 -0.2
+ vertex 1.81816 -4.87986 -0.2
+ vertex 1.10471 -4.60426 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.534 -5.13555 -0.1
- vertex 1.05193 -5.91722 -0.1
- vertex 2.71562 -6.94693 -0.1
+ vertex 2.534 -5.13555 -0.2
+ vertex 1.05193 -5.91722 -0.2
+ vertex 2.71562 -6.94693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.394112 -4.30895 -0.1
- vertex 1.05193 -5.91722 -0.1
- vertex 1.10471 -4.60426 -0.1
+ vertex 0.394112 -4.30895 -0.2
+ vertex 1.05193 -5.91722 -0.2
+ vertex 1.10471 -4.60426 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.694871 -4.82613 -0.1
- vertex 0.394112 -4.30895 -0.1
- vertex -0.313177 -3.99411 -0.1
+ vertex -0.694871 -4.82613 -0.2
+ vertex 0.394112 -4.30895 -0.2
+ vertex -0.313177 -3.99411 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.394112 -4.30895 -0.1
- vertex -0.694871 -4.82613 -0.1
- vertex 1.05193 -5.91722 -0.1
+ vertex 0.394112 -4.30895 -0.2
+ vertex -0.694871 -4.82613 -0.2
+ vertex 1.05193 -5.91722 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.01669 -3.65993 -0.1
- vertex -0.694871 -4.82613 -0.1
- vertex -0.313177 -3.99411 -0.1
+ vertex -1.01669 -3.65993 -0.2
+ vertex -0.694871 -4.82613 -0.2
+ vertex -0.313177 -3.99411 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.47177 -3.7788 -0.1
- vertex -1.01669 -3.65993 -0.1
- vertex -1.71595 -3.30659 -0.1
+ vertex -2.47177 -3.7788 -0.2
+ vertex -1.01669 -3.65993 -0.2
+ vertex -1.71595 -3.30659 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.47177 -3.7788 -0.1
- vertex -1.71595 -3.30659 -0.1
- vertex -2.32857 -3.00041 -0.1
+ vertex -2.47177 -3.7788 -0.2
+ vertex -1.71595 -3.30659 -0.2
+ vertex -2.32857 -3.00041 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.01669 -3.65993 -0.1
- vertex -2.47177 -3.7788 -0.1
- vertex -0.694871 -4.82613 -0.1
+ vertex -1.01669 -3.65993 -0.2
+ vertex -2.47177 -3.7788 -0.2
+ vertex -0.694871 -4.82613 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.32857 -3.00041 -0.1
- vertex -2.8551 -3.51984 -0.1
- vertex -2.47177 -3.7788 -0.1
+ vertex -2.32857 -3.00041 -0.2
+ vertex -2.8551 -3.51984 -0.2
+ vertex -2.47177 -3.7788 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.87688 -2.74967 -0.1
- vertex -2.8551 -3.51984 -0.1
- vertex -2.32857 -3.00041 -0.1
+ vertex -2.87688 -2.74967 -0.2
+ vertex -2.8551 -3.51984 -0.2
+ vertex -2.32857 -3.00041 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.87688 -2.74967 -0.1
- vertex -3.18232 -3.26618 -0.1
- vertex -2.8551 -3.51984 -0.1
+ vertex -2.87688 -2.74967 -0.2
+ vertex -3.18232 -3.26618 -0.2
+ vertex -2.8551 -3.51984 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.44099 -3.03042 -0.1
- vertex -2.87688 -2.74967 -0.1
- vertex -3.301 -2.58026 -0.1
+ vertex -3.44099 -3.03042 -0.2
+ vertex -2.87688 -2.74967 -0.2
+ vertex -3.301 -2.58026 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.87688 -2.74967 -0.1
- vertex -3.44099 -3.03042 -0.1
- vertex -3.18232 -3.26618 -0.1
+ vertex -2.87688 -2.74967 -0.2
+ vertex -3.44099 -3.03042 -0.2
+ vertex -3.18232 -3.26618 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.61865 -2.82513 -0.1
- vertex -3.301 -2.58026 -0.1
- vertex -3.54104 -2.51804 -0.1
+ vertex -3.61865 -2.82513 -0.2
+ vertex -3.301 -2.58026 -0.2
+ vertex -3.54104 -2.51804 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.301 -2.58026 -0.1
- vertex -3.61865 -2.82513 -0.1
- vertex -3.44099 -3.03042 -0.1
+ vertex -3.301 -2.58026 -0.2
+ vertex -3.61865 -2.82513 -0.2
+ vertex -3.44099 -3.03042 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.70285 -2.66292 -0.1
- vertex -3.54104 -2.51804 -0.1
- vertex -3.62666 -2.52788 -0.1
+ vertex -3.70285 -2.66292 -0.2
+ vertex -3.54104 -2.51804 -0.2
+ vertex -3.62666 -2.52788 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.70601 -2.60189 -0.1
- vertex -3.62666 -2.52788 -0.1
- vertex -3.68113 -2.55635 -0.1
+ vertex -3.70601 -2.60189 -0.2
+ vertex -3.62666 -2.52788 -0.2
+ vertex -3.68113 -2.55635 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.54104 -2.51804 -0.1
- vertex -3.70285 -2.66292 -0.1
- vertex -3.61865 -2.82513 -0.1
+ vertex -3.54104 -2.51804 -0.2
+ vertex -3.70285 -2.66292 -0.2
+ vertex -3.61865 -2.82513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.62666 -2.52788 -0.1
- vertex -3.70601 -2.60189 -0.1
- vertex -3.70285 -2.66292 -0.1
+ vertex -3.62666 -2.52788 -0.2
+ vertex -3.70601 -2.60189 -0.2
+ vertex -3.70285 -2.66292 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.5419 27.5737 -0.1
- vertex -21.2799 26.5937 -0.1
- vertex -21.2563 26.5576 -0.1
+ vertex -20.5419 27.5737 -0.2
+ vertex -21.2799 26.5937 -0.2
+ vertex -21.2563 26.5576 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.7979 27.6578 -0.1
- vertex -21.3473 26.6332 -0.1
- vertex -21.2799 26.5937 -0.1
+ vertex -20.7979 27.6578 -0.2
+ vertex -21.3473 26.6332 -0.2
+ vertex -21.2799 26.5937 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.5951 26.7172 -0.1
- vertex -21.1001 27.7294 -0.1
- vertex -21.4599 27.7917 -0.1
+ vertex -21.5951 26.7172 -0.2
+ vertex -21.1001 27.7294 -0.2
+ vertex -21.4599 27.7917 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.1001 27.7294 -0.1
- vertex -21.5951 26.7172 -0.1
- vertex -21.3473 26.6332 -0.1
+ vertex -21.1001 27.7294 -0.2
+ vertex -21.5951 26.7172 -0.2
+ vertex -21.3473 26.6332 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.4599 27.7917 -0.1
- vertex -21.9618 26.7994 -0.1
- vertex -21.5951 26.7172 -0.1
+ vertex -21.4599 27.7917 -0.2
+ vertex -21.9618 26.7994 -0.2
+ vertex -21.5951 26.7172 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.3975 27.9007 -0.1
- vertex -21.9618 26.7994 -0.1
- vertex -21.4599 27.7917 -0.1
+ vertex -22.3975 27.9007 -0.2
+ vertex -21.9618 26.7994 -0.2
+ vertex -21.4599 27.7917 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.3975 27.9007 -0.1
- vertex -22.4095 26.8695 -0.1
- vertex -21.9618 26.7994 -0.1
+ vertex -22.3975 27.9007 -0.2
+ vertex -22.4095 26.8695 -0.2
+ vertex -21.9618 26.7994 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.3975 27.9007 -0.1
- vertex -22.8078 26.9423 -0.1
- vertex -22.4095 26.8695 -0.1
+ vertex -22.3975 27.9007 -0.2
+ vertex -22.8078 26.9423 -0.2
+ vertex -22.4095 26.8695 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.1232 27.9594 -0.1
- vertex -22.8078 26.9423 -0.1
- vertex -22.3975 27.9007 -0.1
+ vertex -23.1232 27.9594 -0.2
+ vertex -22.8078 26.9423 -0.2
+ vertex -22.3975 27.9007 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.1232 27.9594 -0.1
- vertex -23.1972 27.0531 -0.1
- vertex -22.8078 26.9423 -0.1
+ vertex -23.1232 27.9594 -0.2
+ vertex -23.1972 27.0531 -0.2
+ vertex -22.8078 26.9423 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.1232 27.9594 -0.1
- vertex -23.56 27.1917 -0.1
- vertex -23.1972 27.0531 -0.1
+ vertex -23.1232 27.9594 -0.2
+ vertex -23.56 27.1917 -0.2
+ vertex -23.1972 27.0531 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.7335 27.9892 -0.1
- vertex -23.56 27.1917 -0.1
- vertex -23.1232 27.9594 -0.1
+ vertex -23.7335 27.9892 -0.2
+ vertex -23.56 27.1917 -0.2
+ vertex -23.1232 27.9594 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.7335 27.9892 -0.1
- vertex -23.8785 27.3484 -0.1
- vertex -23.56 27.1917 -0.1
+ vertex -23.7335 27.9892 -0.2
+ vertex -23.8785 27.3484 -0.2
+ vertex -23.56 27.1917 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.7335 27.9892 -0.1
- vertex -24.1346 27.513 -0.1
- vertex -23.8785 27.3484 -0.1
+ vertex -23.7335 27.9892 -0.2
+ vertex -24.1346 27.513 -0.2
+ vertex -23.8785 27.3484 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.1643 27.9885 -0.1
- vertex -24.1346 27.513 -0.1
- vertex -23.7335 27.9892 -0.1
+ vertex -24.1643 27.9885 -0.2
+ vertex -24.1346 27.513 -0.2
+ vertex -23.7335 27.9892 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.3632 27.7532 -0.1
- vertex -24.1643 27.9885 -0.1
- vertex -24.2923 27.9761 -0.1
+ vertex -24.3632 27.7532 -0.2
+ vertex -24.1643 27.9885 -0.2
+ vertex -24.2923 27.9761 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.1643 27.9885 -0.1
- vertex -24.3107 27.6757 -0.1
- vertex -24.1346 27.513 -0.1
+ vertex -24.1643 27.9885 -0.2
+ vertex -24.3107 27.6757 -0.2
+ vertex -24.1346 27.513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.3858 27.8943 -0.1
- vertex -24.2923 27.9761 -0.1
- vertex -24.3515 27.9554 -0.1
+ vertex -24.3858 27.8943 -0.2
+ vertex -24.2923 27.9761 -0.2
+ vertex -24.3515 27.9554 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.1643 27.9885 -0.1
- vertex -24.3632 27.7532 -0.1
- vertex -24.3107 27.6757 -0.1
+ vertex -24.1643 27.9885 -0.2
+ vertex -24.3632 27.7532 -0.2
+ vertex -24.3107 27.6757 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.2923 27.9761 -0.1
- vertex -24.3858 27.8943 -0.1
- vertex -24.3889 27.8265 -0.1
+ vertex -24.2923 27.9761 -0.2
+ vertex -24.3858 27.8943 -0.2
+ vertex -24.3889 27.8265 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.2923 27.9761 -0.1
- vertex -24.3889 27.8265 -0.1
- vertex -24.3632 27.7532 -0.1
+ vertex -24.2923 27.9761 -0.2
+ vertex -24.3889 27.8265 -0.2
+ vertex -24.3632 27.7532 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.89877 27.2865 -0.1
- vertex -10.5394 24.4322 -0.1
- vertex -10.5349 24.4109 -0.1
+ vertex -7.89877 27.2865 -0.2
+ vertex -10.5394 24.4322 -0.2
+ vertex -10.5349 24.4109 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.2816 27.5955 -0.1
- vertex -10.6591 24.5009 -0.1
- vertex -10.5394 24.4322 -0.1
+ vertex -10.2816 27.5955 -0.2
+ vertex -10.6591 24.5009 -0.2
+ vertex -10.5394 24.4322 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.2816 27.5955 -0.1
- vertex -10.9077 24.5958 -0.1
- vertex -10.6591 24.5009 -0.1
+ vertex -10.2816 27.5955 -0.2
+ vertex -10.9077 24.5958 -0.2
+ vertex -10.6591 24.5009 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.2816 27.5955 -0.1
- vertex -11.2625 24.7069 -0.1
- vertex -10.9077 24.5958 -0.1
+ vertex -10.2816 27.5955 -0.2
+ vertex -11.2625 24.7069 -0.2
+ vertex -10.9077 24.5958 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.5342 27.7352 -0.1
- vertex -11.2625 24.7069 -0.1
- vertex -10.2816 27.5955 -0.1
+ vertex -11.5342 27.7352 -0.2
+ vertex -11.2625 24.7069 -0.2
+ vertex -10.2816 27.5955 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.5342 27.7352 -0.1
- vertex -11.7825 24.8213 -0.1
- vertex -11.2625 24.7069 -0.1
+ vertex -11.5342 27.7352 -0.2
+ vertex -11.7825 24.8213 -0.2
+ vertex -11.2625 24.7069 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.5342 27.7352 -0.1
- vertex -12.4277 24.907 -0.1
- vertex -11.7825 24.8213 -0.1
+ vertex -11.5342 27.7352 -0.2
+ vertex -12.4277 24.907 -0.2
+ vertex -11.7825 24.8213 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.6053 27.816 -0.1
- vertex -12.4277 24.907 -0.1
- vertex -11.5342 27.7352 -0.1
+ vertex -12.6053 27.816 -0.2
+ vertex -12.4277 24.907 -0.2
+ vertex -11.5342 27.7352 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.6053 27.816 -0.1
- vertex -13.1566 24.9634 -0.1
- vertex -12.4277 24.907 -0.1
+ vertex -12.6053 27.816 -0.2
+ vertex -13.1566 24.9634 -0.2
+ vertex -12.4277 24.907 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.5445 27.8374 -0.1
- vertex -13.1566 24.9634 -0.1
- vertex -12.6053 27.816 -0.1
+ vertex -13.5445 27.8374 -0.2
+ vertex -13.1566 24.9634 -0.2
+ vertex -12.6053 27.816 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.5445 27.8374 -0.1
- vertex -13.9275 24.99 -0.1
- vertex -13.1566 24.9634 -0.1
+ vertex -13.5445 27.8374 -0.2
+ vertex -13.9275 24.99 -0.2
+ vertex -13.1566 24.9634 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.4014 27.7989 -0.1
- vertex -13.9275 24.99 -0.1
- vertex -13.5445 27.8374 -0.1
+ vertex -14.4014 27.7989 -0.2
+ vertex -13.9275 24.99 -0.2
+ vertex -13.5445 27.8374 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.4014 27.7989 -0.1
- vertex -14.6988 24.986 -0.1
- vertex -13.9275 24.99 -0.1
+ vertex -14.4014 27.7989 -0.2
+ vertex -14.6988 24.986 -0.2
+ vertex -13.9275 24.99 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.2259 27.7001 -0.1
- vertex -14.6988 24.986 -0.1
- vertex -14.4014 27.7989 -0.1
+ vertex -15.2259 27.7001 -0.2
+ vertex -14.6988 24.986 -0.2
+ vertex -14.4014 27.7989 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.2259 27.7001 -0.1
- vertex -15.4289 24.9511 -0.1
- vertex -14.6988 24.986 -0.1
+ vertex -15.2259 27.7001 -0.2
+ vertex -15.4289 24.9511 -0.2
+ vertex -14.6988 24.986 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -16.0674 27.5405 -0.1
- vertex -15.4289 24.9511 -0.1
- vertex -15.2259 27.7001 -0.1
+ vertex -16.0674 27.5405 -0.2
+ vertex -15.4289 24.9511 -0.2
+ vertex -15.2259 27.7001 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.0674 27.5405 -0.1
- vertex -16.0762 24.8844 -0.1
- vertex -15.4289 24.9511 -0.1
+ vertex -16.0674 27.5405 -0.2
+ vertex -16.0762 24.8844 -0.2
+ vertex -15.4289 24.9511 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -16.9758 27.3196 -0.1
- vertex -16.0762 24.8844 -0.1
- vertex -16.0674 27.5405 -0.1
+ vertex -16.9758 27.3196 -0.2
+ vertex -16.0762 24.8844 -0.2
+ vertex -16.0674 27.5405 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.0762 24.8844 -0.1
- vertex -16.9758 27.3196 -0.1
- vertex -16.599 24.7853 -0.1
+ vertex -16.0762 24.8844 -0.2
+ vertex -16.9758 27.3196 -0.2
+ vertex -16.599 24.7853 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.9758 27.3196 -0.1
- vertex -17.1707 24.6702 -0.1
- vertex -16.599 24.7853 -0.1
+ vertex -16.9758 27.3196 -0.2
+ vertex -17.1707 24.6702 -0.2
+ vertex -16.599 24.7853 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.9758 27.3196 -0.1
- vertex -18.0818 24.5233 -0.1
- vertex -17.1707 24.6702 -0.1
+ vertex -16.9758 27.3196 -0.2
+ vertex -18.0818 24.5233 -0.2
+ vertex -17.1707 24.6702 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -19.3233 26.703 -0.1
- vertex -18.0818 24.5233 -0.1
- vertex -16.9758 27.3196 -0.1
+ vertex -19.3233 26.703 -0.2
+ vertex -18.0818 24.5233 -0.2
+ vertex -16.9758 27.3196 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.0818 24.5233 -0.1
- vertex -19.3233 26.703 -0.1
- vertex -19.207 24.3637 -0.1
+ vertex -18.0818 24.5233 -0.2
+ vertex -19.3233 26.703 -0.2
+ vertex -19.207 24.3637 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2669 26.4994 -0.1
- vertex -19.3233 26.703 -0.1
- vertex -19.9368 27.2141 -0.1
+ vertex -21.2669 26.4994 -0.2
+ vertex -19.3233 26.703 -0.2
+ vertex -19.9368 27.2141 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2563 26.5576 -0.1
- vertex -19.9368 27.2141 -0.1
- vertex -20.1227 27.3549 -0.1
+ vertex -21.2563 26.5576 -0.2
+ vertex -19.9368 27.2141 -0.2
+ vertex -20.1227 27.3549 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2563 26.5576 -0.1
- vertex -20.1227 27.3549 -0.1
- vertex -20.3206 27.4738 -0.1
+ vertex -21.2563 26.5576 -0.2
+ vertex -20.1227 27.3549 -0.2
+ vertex -20.3206 27.4738 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2997 26.4466 -0.1
- vertex -19.3233 26.703 -0.1
- vertex -21.2669 26.4994 -0.1
+ vertex -21.2997 26.4466 -0.2
+ vertex -19.3233 26.703 -0.2
+ vertex -21.2669 26.4994 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2563 26.5576 -0.1
- vertex -20.3206 27.4738 -0.1
- vertex -20.5419 27.5737 -0.1
+ vertex -21.2563 26.5576 -0.2
+ vertex -20.3206 27.4738 -0.2
+ vertex -20.5419 27.5737 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.2799 26.5937 -0.1
- vertex -20.5419 27.5737 -0.1
- vertex -20.7979 27.6578 -0.1
+ vertex -21.2799 26.5937 -0.2
+ vertex -20.5419 27.5737 -0.2
+ vertex -20.7979 27.6578 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.3473 26.6332 -0.1
- vertex -20.7979 27.6578 -0.1
- vertex -21.1001 27.7294 -0.1
+ vertex -21.3473 26.6332 -0.2
+ vertex -20.7979 27.6578 -0.2
+ vertex -21.1001 27.7294 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.9368 27.2141 -0.1
- vertex -21.2563 26.5576 -0.1
- vertex -21.2669 26.4994 -0.1
+ vertex -19.9368 27.2141 -0.2
+ vertex -21.2563 26.5576 -0.2
+ vertex -21.2669 26.4994 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.3233 26.703 -0.1
- vertex -20.4207 24.2101 -0.1
- vertex -19.207 24.3637 -0.1
+ vertex -19.3233 26.703 -0.2
+ vertex -20.4207 24.2101 -0.2
+ vertex -19.207 24.3637 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.3233 26.703 -0.1
- vertex -21.2997 26.4466 -0.1
- vertex -20.4207 24.2101 -0.1
+ vertex -19.3233 26.703 -0.2
+ vertex -21.2997 26.4466 -0.2
+ vertex -20.4207 24.2101 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.3558 26.3992 -0.1
- vertex -20.4207 24.2101 -0.1
- vertex -21.2997 26.4466 -0.1
+ vertex -21.3558 26.3992 -0.2
+ vertex -20.4207 24.2101 -0.2
+ vertex -21.2997 26.4466 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.4368 26.3569 -0.1
- vertex -20.4207 24.2101 -0.1
- vertex -21.3558 26.3992 -0.1
+ vertex -21.4368 26.3569 -0.2
+ vertex -20.4207 24.2101 -0.2
+ vertex -21.3558 26.3992 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.6785 26.2874 -0.1
- vertex -20.4207 24.2101 -0.1
- vertex -21.4368 26.3569 -0.1
+ vertex -21.6785 26.2874 -0.2
+ vertex -20.4207 24.2101 -0.2
+ vertex -21.4368 26.3569 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.0356 26.2369 -0.1
- vertex -20.4207 24.2101 -0.1
- vertex -21.6785 26.2874 -0.1
+ vertex -22.0356 26.2369 -0.2
+ vertex -20.4207 24.2101 -0.2
+ vertex -21.6785 26.2874 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.3692 23.8604 -0.1
- vertex -22.0356 26.2369 -0.1
- vertex -22.5186 26.2045 -0.1
+ vertex -23.3692 23.8604 -0.2
+ vertex -22.0356 26.2369 -0.2
+ vertex -22.5186 26.2045 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.3692 23.8604 -0.1
- vertex -22.5186 26.2045 -0.1
- vertex -23.1385 26.1891 -0.1
+ vertex -23.3692 23.8604 -0.2
+ vertex -22.5186 26.2045 -0.2
+ vertex -23.1385 26.1891 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.0356 26.2369 -0.1
- vertex -23.3692 23.8604 -0.1
- vertex -20.4207 24.2101 -0.1
+ vertex -22.0356 26.2369 -0.2
+ vertex -23.3692 23.8604 -0.2
+ vertex -20.4207 24.2101 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.6523 24.0122 -0.1
- vertex -23.3692 23.8604 -0.1
- vertex -23.1385 26.1891 -0.1
+ vertex -24.6523 24.0122 -0.2
+ vertex -23.3692 23.8604 -0.2
+ vertex -23.1385 26.1891 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.3692 23.8604 -0.1
- vertex -24.6523 24.0122 -0.1
- vertex -24.1455 19.0472 -0.1
+ vertex -23.3692 23.8604 -0.2
+ vertex -24.6523 24.0122 -0.2
+ vertex -24.1455 19.0472 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.8316 26.205 -0.1
- vertex -24.6523 24.0122 -0.1
- vertex -23.1385 26.1891 -0.1
+ vertex -24.8316 26.205 -0.2
+ vertex -24.6523 24.0122 -0.2
+ vertex -23.1385 26.1891 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.8316 26.205 -0.1
- vertex -26.0107 24.2804 -0.1
- vertex -24.6523 24.0122 -0.1
+ vertex -24.8316 26.205 -0.2
+ vertex -26.0107 24.2804 -0.2
+ vertex -24.6523 24.0122 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.3751 26.2567 -0.1
- vertex -26.0107 24.2804 -0.1
- vertex -24.8316 26.205 -0.1
+ vertex -26.3751 26.2567 -0.2
+ vertex -26.0107 24.2804 -0.2
+ vertex -24.8316 26.205 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.3751 26.2567 -0.1
- vertex -26.5818 24.4056 -0.1
- vertex -26.0107 24.2804 -0.1
+ vertex -26.3751 26.2567 -0.2
+ vertex -26.5818 24.4056 -0.2
+ vertex -26.0107 24.2804 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.1227 24.5501 -0.1
- vertex -26.3751 26.2567 -0.1
- vertex -26.9353 26.3003 -0.1
+ vertex -27.1227 24.5501 -0.2
+ vertex -26.3751 26.2567 -0.2
+ vertex -26.9353 26.3003 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.3751 26.2567 -0.1
- vertex -27.1227 24.5501 -0.1
- vertex -26.5818 24.4056 -0.1
+ vertex -26.3751 26.2567 -0.2
+ vertex -27.1227 24.5501 -0.2
+ vertex -26.5818 24.4056 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.636 24.7152 -0.1
- vertex -26.9353 26.3003 -0.1
- vertex -27.4097 26.3653 -0.1
+ vertex -27.636 24.7152 -0.2
+ vertex -26.9353 26.3003 -0.2
+ vertex -27.4097 26.3653 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.9353 26.3003 -0.1
- vertex -27.636 24.7152 -0.1
- vertex -27.1227 24.5501 -0.1
+ vertex -26.9353 26.3003 -0.2
+ vertex -27.636 24.7152 -0.2
+ vertex -27.1227 24.5501 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.1248 24.9019 -0.1
- vertex -27.4097 26.3653 -0.1
- vertex -27.8395 26.4592 -0.1
+ vertex -28.1248 24.9019 -0.2
+ vertex -27.4097 26.3653 -0.2
+ vertex -27.8395 26.4592 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.4097 26.3653 -0.1
- vertex -28.1248 24.9019 -0.1
- vertex -27.636 24.7152 -0.1
+ vertex -27.4097 26.3653 -0.2
+ vertex -28.1248 24.9019 -0.2
+ vertex -27.636 24.7152 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.5919 25.1115 -0.1
- vertex -27.8395 26.4592 -0.1
- vertex -28.2663 26.5892 -0.1
+ vertex -28.5919 25.1115 -0.2
+ vertex -27.8395 26.4592 -0.2
+ vertex -28.2663 26.5892 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.8395 26.4592 -0.1
- vertex -28.5919 25.1115 -0.1
- vertex -28.1248 24.9019 -0.1
+ vertex -27.8395 26.4592 -0.2
+ vertex -28.5919 25.1115 -0.2
+ vertex -28.1248 24.9019 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.0402 25.3453 -0.1
- vertex -28.2663 26.5892 -0.1
- vertex -28.7314 26.7626 -0.1
+ vertex -29.0402 25.3453 -0.2
+ vertex -28.2663 26.5892 -0.2
+ vertex -28.7314 26.7626 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.2663 26.5892 -0.1
- vertex -29.0402 25.3453 -0.1
- vertex -28.5919 25.1115 -0.1
+ vertex -28.2663 26.5892 -0.2
+ vertex -29.0402 25.3453 -0.2
+ vertex -28.5919 25.1115 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.4725 25.6043 -0.1
- vertex -28.7314 26.7626 -0.1
- vertex -29.2762 26.9865 -0.1
+ vertex -29.4725 25.6043 -0.2
+ vertex -28.7314 26.7626 -0.2
+ vertex -29.2762 26.9865 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.7314 26.7626 -0.1
- vertex -29.4725 25.6043 -0.1
- vertex -29.0402 25.3453 -0.1
+ vertex -28.7314 26.7626 -0.2
+ vertex -29.4725 25.6043 -0.2
+ vertex -29.0402 25.3453 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.2762 26.9865 -0.1
- vertex -29.8918 25.8898 -0.1
- vertex -29.4725 25.6043 -0.1
+ vertex -29.2762 26.9865 -0.2
+ vertex -29.8918 25.8898 -0.2
+ vertex -29.4725 25.6043 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.0875 27.3102 -0.1
- vertex -29.8918 25.8898 -0.1
- vertex -29.2762 26.9865 -0.1
+ vertex -30.0875 27.3102 -0.2
+ vertex -29.8918 25.8898 -0.2
+ vertex -29.2762 26.9865 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.0875 27.3102 -0.1
- vertex -30.6514 26.471 -0.1
- vertex -29.8918 25.8898 -0.1
+ vertex -30.0875 27.3102 -0.2
+ vertex -30.6514 26.471 -0.2
+ vertex -29.8918 25.8898 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.9143 26.7038 -0.1
- vertex -30.0875 27.3102 -0.1
- vertex -30.6543 27.4912 -0.1
+ vertex -30.9143 26.7038 -0.2
+ vertex -30.0875 27.3102 -0.2
+ vertex -30.6543 27.4912 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.1043 26.9038 -0.1
- vertex -30.6543 27.4912 -0.1
- vertex -30.8579 27.5312 -0.1
+ vertex -31.1043 26.9038 -0.2
+ vertex -30.6543 27.4912 -0.2
+ vertex -30.8579 27.5312 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.0875 27.3102 -0.1
- vertex -30.9143 26.7038 -0.1
- vertex -30.6514 26.471 -0.1
+ vertex -30.0875 27.3102 -0.2
+ vertex -30.9143 26.7038 -0.2
+ vertex -30.6514 26.471 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.2248 27.0754 -0.1
- vertex -30.8579 27.5312 -0.1
- vertex -31.0145 27.539 -0.1
+ vertex -31.2248 27.0754 -0.2
+ vertex -30.8579 27.5312 -0.2
+ vertex -31.0145 27.539 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.6543 27.4912 -0.1
- vertex -31.1043 26.9038 -0.1
- vertex -30.9143 26.7038 -0.1
+ vertex -30.6543 27.4912 -0.2
+ vertex -31.1043 26.9038 -0.2
+ vertex -30.9143 26.7038 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.272 27.3506 -0.1
- vertex -31.0145 27.539 -0.1
- vertex -31.1289 27.5158 -0.1
+ vertex -31.272 27.3506 -0.2
+ vertex -31.0145 27.539 -0.2
+ vertex -31.1289 27.5158 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.272 27.3506 -0.1
- vertex -31.1289 27.5158 -0.1
- vertex -31.2059 27.4629 -0.1
+ vertex -31.272 27.3506 -0.2
+ vertex -31.1289 27.5158 -0.2
+ vertex -31.2059 27.4629 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.8579 27.5312 -0.1
- vertex -31.2248 27.0754 -0.1
- vertex -31.1043 26.9038 -0.1
+ vertex -30.8579 27.5312 -0.2
+ vertex -31.2248 27.0754 -0.2
+ vertex -31.1043 26.9038 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.0145 27.539 -0.1
- vertex -31.272 27.3506 -0.1
- vertex -31.2795 27.2229 -0.1
+ vertex -31.0145 27.539 -0.2
+ vertex -31.272 27.3506 -0.2
+ vertex -31.2795 27.2229 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.0145 27.539 -0.1
- vertex -31.2795 27.2229 -0.1
- vertex -31.2248 27.0754 -0.1
+ vertex -31.0145 27.539 -0.2
+ vertex -31.2795 27.2229 -0.2
+ vertex -31.2248 27.0754 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.22936 5.32709 -0.1
- vertex 1.91748 12.4352 -0.1
- vertex 5.27855 5.76024 -0.1
+ vertex 6.22936 5.32709 -0.2
+ vertex 1.91748 12.4352 -0.2
+ vertex 5.27855 5.76024 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.32553 28.4461 -0.1
- vertex 1.00441 27.6053 -0.1
- vertex 0.944126 27.2693 -0.1
+ vertex 4.32553 28.4461 -0.2
+ vertex 1.00441 27.6053 -0.2
+ vertex 0.944126 27.2693 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.60924 32.0876 -0.1
- vertex 1.57871 31.8344 -0.1
- vertex 3.58282 31.3388 -0.1
+ vertex 3.60924 32.0876 -0.2
+ vertex 1.57871 31.8344 -0.2
+ vertex 3.58282 31.3388 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.69711 27.8759 -0.1
- vertex 0.944126 27.2693 -0.1
- vertex 0.908598 27.1645 -0.1
+ vertex 4.69711 27.8759 -0.2
+ vertex 0.944126 27.2693 -0.2
+ vertex 0.908598 27.1645 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.38662 31.173 -0.1
- vertex 3.58282 31.3388 -0.1
- vertex 1.57871 31.8344 -0.1
+ vertex 1.38662 31.173 -0.2
+ vertex 3.58282 31.3388 -0.2
+ vertex 1.57871 31.8344 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 1.85843 12.7398 -0.1
- vertex 1.90284 12.6291 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 1.85843 12.7398 -0.2
+ vertex 1.90284 12.6291 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.59957 30.3654 -0.1
- vertex 1.38662 31.173 -0.1
- vertex 1.24074 30.5277 -0.1
+ vertex 3.59957 30.3654 -0.2
+ vertex 1.38662 31.173 -0.2
+ vertex 1.24074 30.5277 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.32553 28.4461 -0.1
- vertex 1.04514 28.0688 -0.1
- vertex 1.00441 27.6053 -0.1
+ vertex 4.32553 28.4461 -0.2
+ vertex 1.04514 28.0688 -0.2
+ vertex 1.00441 27.6053 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.63162 30.0135 -0.1
- vertex 1.24074 30.5277 -0.1
- vertex 1.13903 29.8907 -0.1
+ vertex 3.63162 30.0135 -0.2
+ vertex 1.24074 30.5277 -0.2
+ vertex 1.13903 29.8907 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.68937 29.7129 -0.1
- vertex 1.13903 29.8907 -0.1
- vertex 1.07949 29.2543 -0.1
+ vertex 3.68937 29.7129 -0.2
+ vertex 1.13903 29.8907 -0.2
+ vertex 1.07949 29.2543 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.78021 29.4348 -0.1
- vertex 1.07949 29.2543 -0.1
- vertex 1.0601 28.6106 -0.1
+ vertex 3.78021 29.4348 -0.2
+ vertex 1.07949 29.2543 -0.2
+ vertex 1.0601 28.6106 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.91157 29.1502 -0.1
- vertex 1.0601 28.6106 -0.1
- vertex 1.04514 28.0688 -0.1
+ vertex 3.91157 29.1502 -0.2
+ vertex 1.0601 28.6106 -0.2
+ vertex 1.04514 28.0688 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.05276 27.3884 -0.1
- vertex 0.908598 27.1645 -0.1
- vertex 0.870515 27.1101 -0.1
+ vertex 5.05276 27.3884 -0.2
+ vertex 0.908598 27.1645 -0.2
+ vertex 0.870515 27.1101 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 1.7147 12.9716 -0.1
- vertex 1.85843 12.7398 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 1.7147 12.9716 -0.2
+ vertex 1.85843 12.7398 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.07308 26.3793 -0.1
- vertex 0.870515 27.1101 -0.1
- vertex 0.816408 27.0884 -0.1
+ vertex 6.07308 26.3793 -0.2
+ vertex 0.870515 27.1101 -0.2
+ vertex 0.816408 27.0884 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 1.51175 13.1874 -0.1
- vertex 1.7147 12.9716 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 1.51175 13.1874 -0.2
+ vertex 1.7147 12.9716 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 1.25015 13.3869 -0.1
- vertex 1.51175 13.1874 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 1.25015 13.3869 -0.2
+ vertex 1.51175 13.1874 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 0.930489 13.5702 -0.1
- vertex 1.25015 13.3869 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 0.930489 13.5702 -0.2
+ vertex 1.25015 13.3869 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.15267 19.0966 -0.1
- vertex 0.734953 27.0776 -0.1
- vertex 7.1242 19.0144 -0.1
+ vertex 7.15267 19.0966 -0.2
+ vertex 0.734953 27.0776 -0.2
+ vertex 7.1242 19.0144 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.371032 14.021 -0.1
- vertex 7.1242 19.0144 -0.1
- vertex 0.734953 27.0776 -0.1
+ vertex -0.371032 14.021 -0.2
+ vertex 7.1242 19.0144 -0.2
+ vertex 0.734953 27.0776 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 0.55335 13.737 -0.1
- vertex 0.930489 13.5702 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 0.55335 13.737 -0.2
+ vertex 0.930489 13.5702 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.917111 14.138 -0.1
- vertex 0.734953 27.0776 -0.1
- vertex 0.505992 27.0868 -0.1
+ vertex -0.917111 14.138 -0.2
+ vertex 0.734953 27.0776 -0.2
+ vertex 0.505992 27.0868 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.51834 14.2381 -0.1
- vertex 0.505992 27.0868 -0.1
- vertex 0.215611 27.1342 -0.1
+ vertex -1.51834 14.2381 -0.2
+ vertex 0.505992 27.0868 -0.2
+ vertex 0.215611 27.1342 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex 0.119316 13.8873 -0.1
- vertex 0.55335 13.737 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex 0.119316 13.8873 -0.2
+ vertex 0.55335 13.737 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.17413 14.3212 -0.1
- vertex 0.215611 27.1342 -0.1
- vertex -0.104203 27.2162 -0.1
+ vertex -2.17413 14.3212 -0.2
+ vertex 0.215611 27.1342 -0.2
+ vertex -0.104203 27.2162 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.1242 19.0144 -0.1
- vertex -0.371032 14.021 -0.1
- vertex 0.119316 13.8873 -0.1
+ vertex 7.1242 19.0144 -0.2
+ vertex -0.371032 14.021 -0.2
+ vertex 0.119316 13.8873 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.8839 14.3873 -0.1
- vertex -0.104203 27.2162 -0.1
- vertex -0.438314 27.347 -0.1
+ vertex -2.8839 14.3873 -0.2
+ vertex -0.104203 27.2162 -0.2
+ vertex -0.438314 27.347 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.54439 27.3597 -0.1
- vertex -0.438314 27.347 -0.1
- vertex -0.7749 27.5359 -0.1
+ vertex -6.54439 27.3597 -0.2
+ vertex -0.438314 27.347 -0.2
+ vertex -0.7749 27.5359 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.734953 27.0776 -0.1
- vertex -0.917111 14.138 -0.1
- vertex -0.371032 14.021 -0.1
+ vertex 0.734953 27.0776 -0.2
+ vertex -0.917111 14.138 -0.2
+ vertex -0.371032 14.021 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.54439 27.3597 -0.1
- vertex -0.7749 27.5359 -0.1
- vertex -1.11256 27.7809 -0.1
+ vertex -6.54439 27.3597 -0.2
+ vertex -0.7749 27.5359 -0.2
+ vertex -1.11256 27.7809 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.44763 27.4571 -0.1
- vertex -1.11256 27.7809 -0.1
- vertex -1.44988 28.0795 -0.1
+ vertex -6.44763 27.4571 -0.2
+ vertex -1.11256 27.7809 -0.2
+ vertex -1.44988 28.0795 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.505992 27.0868 -0.1
- vertex -1.51834 14.2381 -0.1
- vertex -0.917111 14.138 -0.1
+ vertex 0.505992 27.0868 -0.2
+ vertex -1.51834 14.2381 -0.2
+ vertex -0.917111 14.138 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.44763 27.4571 -0.1
- vertex -1.44988 28.0795 -0.1
- vertex -1.78547 28.4297 -0.1
+ vertex -6.44763 27.4571 -0.2
+ vertex -1.44988 28.0795 -0.2
+ vertex -1.78547 28.4297 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.37156 27.6173 -0.1
- vertex -1.78547 28.4297 -0.1
- vertex -2.11792 28.8291 -0.1
+ vertex -6.37156 27.6173 -0.2
+ vertex -1.78547 28.4297 -0.2
+ vertex -2.11792 28.8291 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.215611 27.1342 -0.1
- vertex -2.17413 14.3212 -0.1
- vertex -1.51834 14.2381 -0.1
+ vertex 0.215611 27.1342 -0.2
+ vertex -2.17413 14.3212 -0.2
+ vertex -1.51834 14.2381 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.31368 27.8729 -0.1
- vertex -2.11792 28.8291 -0.1
- vertex -2.44583 29.2754 -0.1
+ vertex -6.31368 27.8729 -0.2
+ vertex -2.11792 28.8291 -0.2
+ vertex -2.44583 29.2754 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.27149 28.2565 -0.1
- vertex -2.44583 29.2754 -0.1
- vertex -2.7678 29.7664 -0.1
+ vertex -6.27149 28.2565 -0.2
+ vertex -2.44583 29.2754 -0.2
+ vertex -2.7678 29.7664 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.11256 27.7809 -0.1
- vertex -6.44763 27.4571 -0.1
- vertex -6.54439 27.3597 -0.1
+ vertex -1.11256 27.7809 -0.2
+ vertex -6.44763 27.4571 -0.2
+ vertex -6.54439 27.3597 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.24249 28.8007 -0.1
- vertex -2.7678 29.7664 -0.1
- vertex -3.08241 30.2998 -0.1
+ vertex -6.24249 28.8007 -0.2
+ vertex -2.7678 29.7664 -0.2
+ vertex -3.08241 30.2998 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.22417 29.538 -0.1
- vertex -3.08241 30.2998 -0.1
- vertex -3.38828 30.8734 -0.1
+ vertex -6.22417 29.538 -0.2
+ vertex -3.08241 30.2998 -0.2
+ vertex -3.38828 30.8734 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.438314 27.347 -0.1
- vertex -6.54439 27.3597 -0.1
- vertex -3.64708 14.4362 -0.1
+ vertex -0.438314 27.347 -0.2
+ vertex -6.54439 27.3597 -0.2
+ vertex -3.64708 14.4362 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.22417 29.538 -0.1
- vertex -3.38828 30.8734 -0.1
- vertex -3.68399 31.485 -0.1
+ vertex -6.22417 29.538 -0.2
+ vertex -3.38828 30.8734 -0.2
+ vertex -3.68399 31.485 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.20957 31.7226 -0.1
- vertex -3.68399 31.485 -0.1
- vertex -3.96814 32.1322 -0.1
+ vertex -6.20957 31.7226 -0.2
+ vertex -3.68399 31.485 -0.2
+ vertex -3.96814 32.1322 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.20957 31.7226 -0.1
- vertex -3.96814 32.1322 -0.1
- vertex -4.23933 32.8128 -0.1
+ vertex -6.20957 31.7226 -0.2
+ vertex -3.96814 32.1322 -0.2
+ vertex -4.23933 32.8128 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.78547 28.4297 -0.1
- vertex -6.37156 27.6173 -0.1
- vertex -6.44763 27.4571 -0.1
+ vertex -1.78547 28.4297 -0.2
+ vertex -6.37156 27.6173 -0.2
+ vertex -6.44763 27.4571 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.19415 33.3563 -0.1
- vertex -4.23933 32.8128 -0.1
- vertex -4.49616 33.5245 -0.1
+ vertex -6.19415 33.3563 -0.2
+ vertex -4.23933 32.8128 -0.2
+ vertex -4.49616 33.5245 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.19415 33.3563 -0.1
- vertex -4.49616 33.5245 -0.1
- vertex -4.73722 34.2652 -0.1
+ vertex -6.19415 33.3563 -0.2
+ vertex -4.49616 33.5245 -0.2
+ vertex -4.73722 34.2652 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.15766 34.7516 -0.1
- vertex -4.73722 34.2652 -0.1
- vertex -4.96111 35.0324 -0.1
+ vertex -6.15766 34.7516 -0.2
+ vertex -4.73722 34.2652 -0.2
+ vertex -4.96111 35.0324 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.15766 34.7516 -0.1
- vertex -4.96111 35.0324 -0.1
- vertex -5.11886 35.5644 -0.1
+ vertex -6.15766 34.7516 -0.2
+ vertex -4.96111 35.0324 -0.2
+ vertex -5.11886 35.5644 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.10555 35.7605 -0.1
- vertex -5.11886 35.5644 -0.1
- vertex -5.26884 35.9859 -0.1
+ vertex -6.10555 35.7605 -0.2
+ vertex -5.11886 35.5644 -0.2
+ vertex -5.26884 35.9859 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.7678 29.7664 -0.1
- vertex -6.24249 28.8007 -0.1
- vertex -6.27149 28.2565 -0.1
+ vertex -2.7678 29.7664 -0.2
+ vertex -6.24249 28.8007 -0.2
+ vertex -6.27149 28.2565 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.07534 36.0738 -0.1
- vertex -5.26884 35.9859 -0.1
- vertex -5.41174 36.2975 -0.1
+ vertex -6.07534 36.0738 -0.2
+ vertex -5.26884 35.9859 -0.2
+ vertex -5.41174 36.2975 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -5.92579 36.4611 -0.1
- vertex -5.41174 36.2975 -0.1
- vertex -5.54821 36.5001 -0.1
+ vertex -5.92579 36.4611 -0.2
+ vertex -5.41174 36.2975 -0.2
+ vertex -5.54821 36.5001 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -5.86569 36.5344 -0.1
- vertex -5.54821 36.5001 -0.1
- vertex -5.61425 36.5608 -0.1
+ vertex -5.86569 36.5344 -0.2
+ vertex -5.54821 36.5001 -0.2
+ vertex -5.61425 36.5608 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -5.80457 36.5812 -0.1
- vertex -5.61425 36.5608 -0.1
- vertex -5.67893 36.5944 -0.1
+ vertex -5.80457 36.5812 -0.2
+ vertex -5.61425 36.5608 -0.2
+ vertex -5.67893 36.5944 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.80457 36.5812 -0.1
- vertex -5.67893 36.5944 -0.1
- vertex -5.74234 36.6012 -0.1
+ vertex -5.80457 36.5812 -0.2
+ vertex -5.67893 36.5944 -0.2
+ vertex -5.74234 36.6012 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.61425 36.5608 -0.1
- vertex -5.80457 36.5812 -0.1
- vertex -5.86569 36.5344 -0.1
+ vertex -5.61425 36.5608 -0.2
+ vertex -5.80457 36.5812 -0.2
+ vertex -5.86569 36.5344 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.54821 36.5001 -0.1
- vertex -5.86569 36.5344 -0.1
- vertex -5.92579 36.4611 -0.1
+ vertex -5.54821 36.5001 -0.2
+ vertex -5.86569 36.5344 -0.2
+ vertex -5.92579 36.4611 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.41174 36.2975 -0.1
- vertex -5.92579 36.4611 -0.1
- vertex -6.04327 36.2349 -0.1
+ vertex -5.41174 36.2975 -0.2
+ vertex -5.92579 36.4611 -0.2
+ vertex -6.04327 36.2349 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.41174 36.2975 -0.1
- vertex -6.04327 36.2349 -0.1
- vertex -6.07534 36.0738 -0.1
+ vertex -5.41174 36.2975 -0.2
+ vertex -6.04327 36.2349 -0.2
+ vertex -6.07534 36.0738 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.26884 35.9859 -0.1
- vertex -6.07534 36.0738 -0.1
- vertex -6.10555 35.7605 -0.1
+ vertex -5.26884 35.9859 -0.2
+ vertex -6.07534 36.0738 -0.2
+ vertex -6.10555 35.7605 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.11886 35.5644 -0.1
- vertex -6.10555 35.7605 -0.1
- vertex -6.15766 34.7516 -0.1
+ vertex -5.11886 35.5644 -0.2
+ vertex -6.10555 35.7605 -0.2
+ vertex -6.15766 34.7516 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.73722 34.2652 -0.1
- vertex -6.15766 34.7516 -0.1
- vertex -6.19415 33.3563 -0.1
+ vertex -4.73722 34.2652 -0.2
+ vertex -6.15766 34.7516 -0.2
+ vertex -6.19415 33.3563 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.23933 32.8128 -0.1
- vertex -6.19415 33.3563 -0.1
- vertex -6.20957 31.7226 -0.1
+ vertex -4.23933 32.8128 -0.2
+ vertex -6.19415 33.3563 -0.2
+ vertex -6.20957 31.7226 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.68399 31.485 -0.1
- vertex -6.20957 31.7226 -0.1
- vertex -6.22417 29.538 -0.1
+ vertex -3.68399 31.485 -0.2
+ vertex -6.20957 31.7226 -0.2
+ vertex -6.22417 29.538 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.08241 30.2998 -0.1
- vertex -6.22417 29.538 -0.1
- vertex -6.24249 28.8007 -0.1
+ vertex -3.08241 30.2998 -0.2
+ vertex -6.22417 29.538 -0.2
+ vertex -6.24249 28.8007 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.44583 29.2754 -0.1
- vertex -6.27149 28.2565 -0.1
- vertex -6.31368 27.8729 -0.1
+ vertex -2.44583 29.2754 -0.2
+ vertex -6.27149 28.2565 -0.2
+ vertex -6.31368 27.8729 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.11792 28.8291 -0.1
- vertex -6.31368 27.8729 -0.1
- vertex -6.37156 27.6173 -0.1
+ vertex -2.11792 28.8291 -0.2
+ vertex -6.31368 27.8729 -0.2
+ vertex -6.37156 27.6173 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.104203 27.2162 -0.1
- vertex -2.8839 14.3873 -0.1
- vertex -2.17413 14.3212 -0.1
+ vertex -0.104203 27.2162 -0.2
+ vertex -2.8839 14.3873 -0.2
+ vertex -2.17413 14.3212 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.438314 27.347 -0.1
- vertex -3.64708 14.4362 -0.1
- vertex -2.8839 14.3873 -0.1
+ vertex -0.438314 27.347 -0.2
+ vertex -3.64708 14.4362 -0.2
+ vertex -2.8839 14.3873 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -6.65192 27.3056 -0.1
- vertex -3.64708 14.4362 -0.1
- vertex -6.54439 27.3597 -0.1
+ vertex -6.65192 27.3056 -0.2
+ vertex -3.64708 14.4362 -0.2
+ vertex -6.54439 27.3597 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.64708 14.4362 -0.1
- vertex -6.65192 27.3056 -0.1
- vertex -4.46307 14.4678 -0.1
+ vertex -3.64708 14.4362 -0.2
+ vertex -6.65192 27.3056 -0.2
+ vertex -4.46307 14.4678 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -10.904 19.9248 -0.1
- vertex -4.46307 14.4678 -0.1
- vertex -6.65192 27.3056 -0.1
+ vertex -10.904 19.9248 -0.2
+ vertex -4.46307 14.4678 -0.2
+ vertex -6.65192 27.3056 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.46307 14.4678 -0.1
- vertex -10.904 19.9248 -0.1
- vertex -5.33129 14.482 -0.1
+ vertex -4.46307 14.4678 -0.2
+ vertex -10.904 19.9248 -0.2
+ vertex -5.33129 14.482 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.904 19.9248 -0.1
- vertex -6.65192 27.3056 -0.1
- vertex -6.80178 27.2682 -0.1
+ vertex -10.904 19.9248 -0.2
+ vertex -6.65192 27.3056 -0.2
+ vertex -6.80178 27.2682 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5349 24.4109 -0.1
- vertex -6.80178 27.2682 -0.1
- vertex -6.99768 27.2475 -0.1
+ vertex -10.5349 24.4109 -0.2
+ vertex -6.80178 27.2682 -0.2
+ vertex -6.99768 27.2475 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.33129 14.482 -0.1
- vertex -10.904 19.9248 -0.1
- vertex -6.25117 14.4787 -0.1
+ vertex -5.33129 14.482 -0.2
+ vertex -10.904 19.9248 -0.2
+ vertex -6.25117 14.4787 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5349 24.4109 -0.1
- vertex -6.99768 27.2475 -0.1
- vertex -7.24334 27.2437 -0.1
+ vertex -10.5349 24.4109 -0.2
+ vertex -6.99768 27.2475 -0.2
+ vertex -7.24334 27.2437 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5349 24.4109 -0.1
- vertex -7.24334 27.2437 -0.1
- vertex -7.89877 27.2865 -0.1
+ vertex -10.5349 24.4109 -0.2
+ vertex -7.24334 27.2437 -0.2
+ vertex -7.89877 27.2865 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5394 24.4322 -0.1
- vertex -7.89877 27.2865 -0.1
- vertex -8.79778 27.3973 -0.1
+ vertex -10.5394 24.4322 -0.2
+ vertex -7.89877 27.2865 -0.2
+ vertex -8.79778 27.3973 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.80178 27.2682 -0.1
- vertex -10.5349 24.4109 -0.1
- vertex -10.904 19.9248 -0.1
+ vertex -6.80178 27.2682 -0.2
+ vertex -10.5349 24.4109 -0.2
+ vertex -10.904 19.9248 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -6.25117 14.4787 -0.1
- vertex -10.9261 19.832 -0.1
- vertex -7.22211 14.4578 -0.1
+ vertex -6.25117 14.4787 -0.2
+ vertex -10.9261 19.832 -0.2
+ vertex -7.22211 14.4578 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5394 24.4322 -0.1
- vertex -8.79778 27.3973 -0.1
- vertex -10.2816 27.5955 -0.1
+ vertex -10.5394 24.4322 -0.2
+ vertex -8.79778 27.3973 -0.2
+ vertex -10.2816 27.5955 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -10.9261 19.832 -0.1
- vertex -6.25117 14.4787 -0.1
- vertex -10.904 19.9248 -0.1
+ vertex -10.9261 19.832 -0.2
+ vertex -6.25117 14.4787 -0.2
+ vertex -10.904 19.9248 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.0035 20.0644 -0.1
- vertex -10.5349 24.4109 -0.1
- vertex -10.5711 24.4 -0.1
+ vertex -11.0035 20.0644 -0.2
+ vertex -10.5349 24.4109 -0.2
+ vertex -10.5711 24.4 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -10.9948 19.7221 -0.1
- vertex -7.22211 14.4578 -0.1
- vertex -10.9261 19.832 -0.1
+ vertex -10.9948 19.7221 -0.2
+ vertex -7.22211 14.4578 -0.2
+ vertex -10.9261 19.832 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -7.22211 14.4578 -0.1
- vertex -10.9948 19.7221 -0.1
- vertex -9.25643 14.3812 -0.1
+ vertex -7.22211 14.4578 -0.2
+ vertex -10.9948 19.7221 -0.2
+ vertex -9.25643 14.3812 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5349 24.4109 -0.1
- vertex -10.9294 20.0018 -0.1
- vertex -10.904 19.9248 -0.1
+ vertex -10.5349 24.4109 -0.2
+ vertex -10.9294 20.0018 -0.2
+ vertex -10.904 19.9248 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5349 24.4109 -0.1
- vertex -11.0035 20.0644 -0.1
- vertex -10.9294 20.0018 -0.1
+ vertex -10.5349 24.4109 -0.2
+ vertex -11.0035 20.0644 -0.2
+ vertex -10.9294 20.0018 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5711 24.4 -0.1
- vertex -11.1271 20.114 -0.1
- vertex -11.0035 20.0644 -0.1
+ vertex -10.5711 24.4 -0.2
+ vertex -11.1271 20.114 -0.2
+ vertex -11.0035 20.0644 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5711 24.4 -0.1
- vertex -11.3013 20.1521 -0.1
- vertex -11.1271 20.114 -0.1
+ vertex -10.5711 24.4 -0.2
+ vertex -11.3013 20.1521 -0.2
+ vertex -11.1271 20.114 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5711 24.4 -0.1
- vertex -11.5271 20.1801 -0.1
- vertex -11.3013 20.1521 -0.1
+ vertex -10.5711 24.4 -0.2
+ vertex -11.5271 20.1801 -0.2
+ vertex -11.3013 20.1521 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.5711 24.4 -0.1
- vertex -12.1376 20.2112 -0.1
- vertex -11.5271 20.1801 -0.1
+ vertex -10.5711 24.4 -0.2
+ vertex -12.1376 20.2112 -0.2
+ vertex -11.5271 20.1801 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.1612 23.8467 -0.1
- vertex -12.1376 20.2112 -0.1
- vertex -10.5711 24.4 -0.1
+ vertex -14.1612 23.8467 -0.2
+ vertex -12.1376 20.2112 -0.2
+ vertex -10.5711 24.4 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.1376 20.2112 -0.1
- vertex -14.1612 23.8467 -0.1
- vertex -12.9665 20.2187 -0.1
+ vertex -12.1376 20.2112 -0.2
+ vertex -14.1612 23.8467 -0.2
+ vertex -12.9665 20.2187 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.9665 20.2187 -0.1
- vertex -14.1612 23.8467 -0.1
- vertex -13.9037 20.2008 -0.1
+ vertex -12.9665 20.2187 -0.2
+ vertex -14.1612 23.8467 -0.2
+ vertex -13.9037 20.2008 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.1612 23.8467 -0.1
- vertex -14.8461 20.153 -0.1
- vertex -13.9037 20.2008 -0.1
+ vertex -14.1612 23.8467 -0.2
+ vertex -14.8461 20.153 -0.2
+ vertex -13.9037 20.2008 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.0412 23.3999 -0.1
- vertex -14.8461 20.153 -0.1
- vertex -14.1612 23.8467 -0.1
+ vertex -17.0412 23.3999 -0.2
+ vertex -14.8461 20.153 -0.2
+ vertex -14.1612 23.8467 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.8461 20.153 -0.1
- vertex -17.0412 23.3999 -0.1
- vertex -15.684 20.0825 -0.1
+ vertex -14.8461 20.153 -0.2
+ vertex -17.0412 23.3999 -0.2
+ vertex -15.684 20.0825 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -15.684 20.0825 -0.1
- vertex -17.0412 23.3999 -0.1
- vertex -16.3079 19.9967 -0.1
+ vertex -15.684 20.0825 -0.2
+ vertex -17.0412 23.3999 -0.2
+ vertex -16.3079 19.9967 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.0412 23.3999 -0.1
- vertex -17.2235 19.8332 -0.1
- vertex -16.3079 19.9967 -0.1
+ vertex -17.0412 23.3999 -0.2
+ vertex -17.2235 19.8332 -0.2
+ vertex -16.3079 19.9967 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -19.3158 23.0662 -0.1
- vertex -17.2235 19.8332 -0.1
- vertex -17.0412 23.3999 -0.1
+ vertex -19.3158 23.0662 -0.2
+ vertex -17.2235 19.8332 -0.2
+ vertex -17.0412 23.3999 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.2235 19.8332 -0.1
- vertex -19.3158 23.0662 -0.1
- vertex -18.1791 19.6811 -0.1
+ vertex -17.2235 19.8332 -0.2
+ vertex -19.3158 23.0662 -0.2
+ vertex -18.1791 19.6811 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.3158 23.0662 -0.1
- vertex -20.1671 19.4139 -0.1
- vertex -18.1791 19.6811 -0.1
+ vertex -19.3158 23.0662 -0.2
+ vertex -20.1671 19.4139 -0.2
+ vertex -18.1791 19.6811 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -20.7318 22.8633 -0.1
- vertex -20.1671 19.4139 -0.1
- vertex -19.3158 23.0662 -0.1
+ vertex -20.7318 22.8633 -0.2
+ vertex -20.1671 19.4139 -0.2
+ vertex -19.3158 23.0662 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.5474 22.7309 -0.1
- vertex -20.1671 19.4139 -0.1
- vertex -20.7318 22.8633 -0.1
+ vertex -21.5474 22.7309 -0.2
+ vertex -20.1671 19.4139 -0.2
+ vertex -20.7318 22.8633 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.1849 19.2007 -0.1
- vertex -21.5474 22.7309 -0.1
- vertex -21.6404 22.7266 -0.1
+ vertex -22.1849 19.2007 -0.2
+ vertex -21.5474 22.7309 -0.2
+ vertex -21.6404 22.7266 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.1849 19.2007 -0.1
- vertex -21.6404 22.7266 -0.1
- vertex -21.755 22.7463 -0.1
+ vertex -22.1849 19.2007 -0.2
+ vertex -21.6404 22.7266 -0.2
+ vertex -21.755 22.7463 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.1849 19.2007 -0.1
- vertex -21.755 22.7463 -0.1
- vertex -22.0315 22.8497 -0.1
+ vertex -22.1849 19.2007 -0.2
+ vertex -21.755 22.7463 -0.2
+ vertex -22.0315 22.8497 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.5474 22.7309 -0.1
- vertex -22.1849 19.2007 -0.1
- vertex -20.1671 19.4139 -0.1
+ vertex -21.5474 22.7309 -0.2
+ vertex -22.1849 19.2007 -0.2
+ vertex -20.1671 19.4139 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.3422 23.0246 -0.1
- vertex -22.1849 19.2007 -0.1
- vertex -22.0315 22.8497 -0.1
+ vertex -22.3422 23.0246 -0.2
+ vertex -22.1849 19.2007 -0.2
+ vertex -22.0315 22.8497 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.1455 19.0472 -0.1
- vertex -22.3422 23.0246 -0.1
- vertex -22.6524 23.2546 -0.1
+ vertex -24.1455 19.0472 -0.2
+ vertex -22.3422 23.0246 -0.2
+ vertex -22.6524 23.2546 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.1455 19.0472 -0.1
- vertex -22.6524 23.2546 -0.1
- vertex -23.3692 23.8604 -0.1
+ vertex -24.1455 19.0472 -0.2
+ vertex -22.6524 23.2546 -0.2
+ vertex -23.3692 23.8604 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.3422 23.0246 -0.1
- vertex -24.1455 19.0472 -0.1
- vertex -22.1849 19.2007 -0.1
+ vertex -22.3422 23.0246 -0.2
+ vertex -24.1455 19.0472 -0.2
+ vertex -22.1849 19.2007 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.10332 38.557 -0.1
- vertex 5.26494 38.4452 -0.1
- vertex 5.23504 38.5484 -0.1
+ vertex 5.10332 38.557 -0.2
+ vertex 5.26494 38.4452 -0.2
+ vertex 5.23504 38.5484 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.26494 38.4452 -0.1
- vertex 5.01738 38.4749 -0.1
- vertex 5.25596 38.2865 -0.1
+ vertex 5.26494 38.4452 -0.2
+ vertex 5.01738 38.4749 -0.2
+ vertex 5.25596 38.2865 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 5.10332 38.557 -0.1
- vertex 5.23504 38.5484 -0.1
- vertex 5.20457 38.5758 -0.1
+ vertex 5.10332 38.557 -0.2
+ vertex 5.23504 38.5484 -0.2
+ vertex 5.20457 38.5758 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.10332 38.557 -0.1
- vertex 5.20457 38.5758 -0.1
- vertex 5.16325 38.5852 -0.1
+ vertex 5.10332 38.557 -0.2
+ vertex 5.20457 38.5758 -0.2
+ vertex 5.16325 38.5852 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.26494 38.4452 -0.1
- vertex 5.10332 38.557 -0.1
- vertex 5.01738 38.4749 -0.1
+ vertex 5.26494 38.4452 -0.2
+ vertex 5.10332 38.557 -0.2
+ vertex 5.01738 38.4749 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.25596 38.2865 -0.1
- vertex 5.01738 38.4749 -0.1
- vertex 5.21112 38.083 -0.1
+ vertex 5.25596 38.2865 -0.2
+ vertex 5.01738 38.4749 -0.2
+ vertex 5.21112 38.083 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.77727 38.1658 -0.1
- vertex 5.21112 38.083 -0.1
- vertex 5.01738 38.4749 -0.1
+ vertex 4.77727 38.1658 -0.2
+ vertex 5.21112 38.083 -0.2
+ vertex 5.01738 38.4749 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.21112 38.083 -0.1
- vertex 4.77727 38.1658 -0.1
- vertex 5.13345 37.8458 -0.1
+ vertex 5.21112 38.083 -0.2
+ vertex 4.77727 38.1658 -0.2
+ vertex 5.13345 37.8458 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.13345 37.8458 -0.1
- vertex 4.77727 38.1658 -0.1
- vertex 5.02596 37.5856 -0.1
+ vertex 5.13345 37.8458 -0.2
+ vertex 4.77727 38.1658 -0.2
+ vertex 5.02596 37.5856 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.46246 37.6912 -0.1
- vertex 5.02596 37.5856 -0.1
- vertex 4.77727 38.1658 -0.1
+ vertex 4.46246 37.6912 -0.2
+ vertex 5.02596 37.5856 -0.2
+ vertex 4.77727 38.1658 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.02596 37.5856 -0.1
- vertex 4.46246 37.6912 -0.1
- vertex 4.89167 37.3134 -0.1
+ vertex 5.02596 37.5856 -0.2
+ vertex 4.46246 37.6912 -0.2
+ vertex 4.89167 37.3134 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.89167 37.3134 -0.1
- vertex 4.46246 37.6912 -0.1
- vertex 4.73361 37.0399 -0.1
+ vertex 4.89167 37.3134 -0.2
+ vertex 4.46246 37.6912 -0.2
+ vertex 4.73361 37.0399 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.09252 37.0842 -0.1
- vertex 4.73361 37.0399 -0.1
- vertex 4.46246 37.6912 -0.1
+ vertex 4.09252 37.0842 -0.2
+ vertex 4.73361 37.0399 -0.2
+ vertex 4.46246 37.6912 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.73361 37.0399 -0.1
- vertex 4.09252 37.0842 -0.1
- vertex 4.62814 36.8484 -0.1
+ vertex 4.73361 37.0399 -0.2
+ vertex 4.09252 37.0842 -0.2
+ vertex 4.62814 36.8484 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.62814 36.8484 -0.1
- vertex 4.09252 37.0842 -0.1
- vertex 4.52293 36.6141 -0.1
+ vertex 4.62814 36.8484 -0.2
+ vertex 4.09252 37.0842 -0.2
+ vertex 4.52293 36.6141 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.68699 36.3778 -0.1
- vertex 4.52293 36.6141 -0.1
- vertex 4.09252 37.0842 -0.1
+ vertex 3.68699 36.3778 -0.2
+ vertex 4.52293 36.6141 -0.2
+ vertex 4.09252 37.0842 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.52293 36.6141 -0.1
- vertex 3.68699 36.3778 -0.1
- vertex 4.31688 36.0346 -0.1
+ vertex 4.52293 36.6141 -0.2
+ vertex 3.68699 36.3778 -0.2
+ vertex 4.31688 36.0346 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.26543 35.6052 -0.1
- vertex 4.31688 36.0346 -0.1
- vertex 3.68699 36.3778 -0.1
+ vertex 3.26543 35.6052 -0.2
+ vertex 4.31688 36.0346 -0.2
+ vertex 3.68699 36.3778 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.31688 36.0346 -0.1
- vertex 3.26543 35.6052 -0.1
- vertex 4.1227 35.3375 -0.1
+ vertex 4.31688 36.0346 -0.2
+ vertex 3.26543 35.6052 -0.2
+ vertex 4.1227 35.3375 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.1227 35.3375 -0.1
- vertex 3.26543 35.6052 -0.1
- vertex 3.94762 34.5584 -0.1
+ vertex 4.1227 35.3375 -0.2
+ vertex 3.26543 35.6052 -0.2
+ vertex 3.94762 34.5584 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 2.84738 34.7996 -0.1
- vertex 3.94762 34.5584 -0.1
- vertex 3.26543 35.6052 -0.1
+ vertex 2.84738 34.7996 -0.2
+ vertex 3.94762 34.5584 -0.2
+ vertex 3.26543 35.6052 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.94762 34.5584 -0.1
- vertex 2.84738 34.7996 -0.1
- vertex 3.79886 33.7332 -0.1
+ vertex 3.94762 34.5584 -0.2
+ vertex 2.84738 34.7996 -0.2
+ vertex 3.79886 33.7332 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 2.4524 33.9939 -0.1
- vertex 3.79886 33.7332 -0.1
- vertex 2.84738 34.7996 -0.1
+ vertex 2.4524 33.9939 -0.2
+ vertex 3.79886 33.7332 -0.2
+ vertex 2.84738 34.7996 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.79886 33.7332 -0.1
- vertex 2.4524 33.9939 -0.1
- vertex 3.68366 32.8976 -0.1
+ vertex 3.79886 33.7332 -0.2
+ vertex 2.4524 33.9939 -0.2
+ vertex 3.68366 32.8976 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 2.10958 33.2371 -0.1
- vertex 3.68366 32.8976 -0.1
- vertex 2.4524 33.9939 -0.1
+ vertex 2.10958 33.2371 -0.2
+ vertex 3.68366 32.8976 -0.2
+ vertex 2.4524 33.9939 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.68366 32.8976 -0.1
- vertex 2.10958 33.2371 -0.1
- vertex 3.60924 32.0876 -0.1
+ vertex 3.68366 32.8976 -0.2
+ vertex 2.10958 33.2371 -0.2
+ vertex 3.60924 32.0876 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.81903 32.5199 -0.1
- vertex 3.60924 32.0876 -0.1
- vertex 2.10958 33.2371 -0.1
+ vertex 1.81903 32.5199 -0.2
+ vertex 3.60924 32.0876 -0.2
+ vertex 2.10958 33.2371 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.27855 5.76024 -0.1
- vertex 1.91748 12.4352 -0.1
- vertex 4.285 6.1855 -0.1
+ vertex 5.27855 5.76024 -0.2
+ vertex 1.91748 12.4352 -0.2
+ vertex 4.285 6.1855 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.57871 31.8344 -0.1
- vertex 3.60924 32.0876 -0.1
- vertex 1.81903 32.5199 -0.1
+ vertex 1.57871 31.8344 -0.2
+ vertex 3.60924 32.0876 -0.2
+ vertex 1.81903 32.5199 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.88346 12.344 -0.1
- vertex 4.285 6.1855 -0.1
- vertex 1.91748 12.4352 -0.1
+ vertex 1.88346 12.344 -0.2
+ vertex 4.285 6.1855 -0.2
+ vertex 1.91748 12.4352 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.285 6.1855 -0.1
- vertex 1.88346 12.344 -0.1
- vertex 3.31149 6.57517 -0.1
+ vertex 4.285 6.1855 -0.2
+ vertex 1.88346 12.344 -0.2
+ vertex 3.31149 6.57517 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.81906 12.2515 -0.1
- vertex 3.31149 6.57517 -0.1
- vertex 1.88346 12.344 -0.1
+ vertex 1.81906 12.2515 -0.2
+ vertex 3.31149 6.57517 -0.2
+ vertex 1.88346 12.344 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.72214 12.1537 -0.1
- vertex 3.31149 6.57517 -0.1
- vertex 1.81906 12.2515 -0.1
+ vertex 1.72214 12.1537 -0.2
+ vertex 3.31149 6.57517 -0.2
+ vertex 1.81906 12.2515 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 3.31149 6.57517 -0.1
- vertex 1.72214 12.1537 -0.1
- vertex 2.42084 6.9015 -0.1
+ vertex 3.31149 6.57517 -0.2
+ vertex 1.72214 12.1537 -0.2
+ vertex 2.42084 6.9015 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 1.42228 11.926 -0.1
- vertex 2.42084 6.9015 -0.1
- vertex 1.72214 12.1537 -0.1
+ vertex 1.42228 11.926 -0.2
+ vertex 2.42084 6.9015 -0.2
+ vertex 1.72214 12.1537 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 2.42084 6.9015 -0.1
- vertex 1.42228 11.926 -0.1
- vertex 1.67583 7.13679 -0.1
+ vertex 2.42084 6.9015 -0.2
+ vertex 1.42228 11.926 -0.2
+ vertex 1.67583 7.13679 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.986004 11.656 -0.1
- vertex 1.67583 7.13679 -0.1
- vertex 1.42228 11.926 -0.1
+ vertex 0.986004 11.656 -0.2
+ vertex 1.67583 7.13679 -0.2
+ vertex 1.42228 11.926 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 1.67583 7.13679 -0.1
- vertex 0.986004 11.656 -0.1
- vertex 1.30727 7.25861 -0.1
+ vertex 1.67583 7.13679 -0.2
+ vertex 0.986004 11.656 -0.2
+ vertex 1.30727 7.25861 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.986004 11.656 -0.1
- vertex 0.855811 7.43981 -0.1
- vertex 1.30727 7.25861 -0.1
+ vertex 0.986004 11.656 -0.2
+ vertex 0.855811 7.43981 -0.2
+ vertex 1.30727 7.25861 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 0.546849 11.4454 -0.1
- vertex 0.855811 7.43981 -0.1
- vertex 0.986004 11.656 -0.1
+ vertex 0.546849 11.4454 -0.2
+ vertex 0.855811 7.43981 -0.2
+ vertex 0.986004 11.656 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.23691 7.94665 -0.1
- vertex 0.546849 11.4454 -0.1
- vertex 0.0942225 11.293 -0.1
+ vertex -0.23691 7.94665 -0.2
+ vertex 0.546849 11.4454 -0.2
+ vertex 0.0942225 11.293 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 0.546849 11.4454 -0.1
- vertex -0.23691 7.94665 -0.1
- vertex 0.855811 7.43981 -0.1
+ vertex 0.546849 11.4454 -0.2
+ vertex -0.23691 7.94665 -0.2
+ vertex 0.855811 7.43981 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -0.382462 11.1972 -0.1
- vertex -0.23691 7.94665 -0.1
- vertex 0.0942225 11.293 -0.1
+ vertex -0.382462 11.1972 -0.2
+ vertex -0.23691 7.94665 -0.2
+ vertex 0.0942225 11.293 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.48458 8.58988 -0.1
- vertex -0.382462 11.1972 -0.1
- vertex -0.893798 11.1566 -0.1
+ vertex -1.48458 8.58988 -0.2
+ vertex -0.382462 11.1972 -0.2
+ vertex -0.893798 11.1566 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.48458 8.58988 -0.1
- vertex -0.893798 11.1566 -0.1
- vertex -1.45038 11.1697 -0.1
+ vertex -1.48458 8.58988 -0.2
+ vertex -0.893798 11.1566 -0.2
+ vertex -1.45038 11.1697 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -0.382462 11.1972 -0.1
- vertex -1.48458 8.58988 -0.1
- vertex -0.23691 7.94665 -0.1
+ vertex -0.382462 11.1972 -0.2
+ vertex -1.48458 8.58988 -0.2
+ vertex -0.23691 7.94665 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.76946 9.30203 -0.1
- vertex -1.45038 11.1697 -0.1
- vertex -2.06279 11.235 -0.1
+ vertex -2.76946 9.30203 -0.2
+ vertex -1.45038 11.1697 -0.2
+ vertex -2.06279 11.235 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.76946 9.30203 -0.1
- vertex -2.06279 11.235 -0.1
- vertex -2.74162 11.3511 -0.1
+ vertex -2.76946 9.30203 -0.2
+ vertex -2.06279 11.235 -0.2
+ vertex -2.74162 11.3511 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -1.45038 11.1697 -0.1
- vertex -2.76946 9.30203 -0.1
- vertex -1.48458 8.58988 -0.1
+ vertex -1.45038 11.1697 -0.2
+ vertex -2.76946 9.30203 -0.2
+ vertex -1.48458 8.58988 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -3.97378 10.0157 -0.1
- vertex -2.74162 11.3511 -0.1
- vertex -3.43924 11.4799 -0.1
+ vertex -3.97378 10.0157 -0.2
+ vertex -2.74162 11.3511 -0.2
+ vertex -3.43924 11.4799 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -2.74162 11.3511 -0.1
- vertex -3.97378 10.0157 -0.1
- vertex -2.76946 9.30203 -0.1
+ vertex -2.74162 11.3511 -0.2
+ vertex -3.97378 10.0157 -0.2
+ vertex -2.76946 9.30203 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.06319 11.5774 -0.1
- vertex -3.97378 10.0157 -0.1
- vertex -3.43924 11.4799 -0.1
+ vertex -4.06319 11.5774 -0.2
+ vertex -3.97378 10.0157 -0.2
+ vertex -3.43924 11.4799 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.9798 10.6633 -0.1
- vertex -4.06319 11.5774 -0.1
- vertex -4.60751 11.6434 -0.1
+ vertex -4.9798 10.6633 -0.2
+ vertex -4.06319 11.5774 -0.2
+ vertex -4.60751 11.6434 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -4.06319 11.5774 -0.1
- vertex -4.9798 10.6633 -0.1
- vertex -3.97378 10.0157 -0.1
+ vertex -4.06319 11.5774 -0.2
+ vertex -4.9798 10.6633 -0.2
+ vertex -3.97378 10.0157 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.06624 11.6776 -0.1
- vertex -4.9798 10.6633 -0.1
- vertex -4.60751 11.6434 -0.1
+ vertex -5.06624 11.6776 -0.2
+ vertex -4.9798 10.6633 -0.2
+ vertex -4.60751 11.6434 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.06624 11.6776 -0.1
- vertex -5.37165 10.9414 -0.1
- vertex -4.9798 10.6633 -0.1
+ vertex -5.06624 11.6776 -0.2
+ vertex -5.37165 10.9414 -0.2
+ vertex -4.9798 10.6633 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.4334 11.6797 -0.1
- vertex -5.37165 10.9414 -0.1
- vertex -5.06624 11.6776 -0.1
+ vertex -5.4334 11.6797 -0.2
+ vertex -5.37165 10.9414 -0.2
+ vertex -5.06624 11.6776 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.4334 11.6797 -0.1
- vertex -5.66976 11.1776 -0.1
- vertex -5.37165 10.9414 -0.1
+ vertex -5.4334 11.6797 -0.2
+ vertex -5.66976 11.1776 -0.2
+ vertex -5.37165 10.9414 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -5.70304 11.6495 -0.1
- vertex -5.66976 11.1776 -0.1
- vertex -5.4334 11.6797 -0.1
+ vertex -5.70304 11.6495 -0.2
+ vertex -5.66976 11.1776 -0.2
+ vertex -5.4334 11.6797 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.85942 11.3636 -0.1
- vertex -5.70304 11.6495 -0.1
- vertex -5.79943 11.6221 -0.1
+ vertex -5.85942 11.3636 -0.2
+ vertex -5.70304 11.6495 -0.2
+ vertex -5.79943 11.6221 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.70304 11.6495 -0.1
- vertex -5.85942 11.3636 -0.1
- vertex -5.66976 11.1776 -0.1
+ vertex -5.70304 11.6495 -0.2
+ vertex -5.85942 11.3636 -0.2
+ vertex -5.66976 11.1776 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -5.8692 11.5867 -0.1
- vertex -5.85942 11.3636 -0.1
- vertex -5.79943 11.6221 -0.1
+ vertex -5.8692 11.5867 -0.2
+ vertex -5.85942 11.3636 -0.2
+ vertex -5.79943 11.6221 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.8692 11.5867 -0.1
- vertex -5.90899 11.4352 -0.1
- vertex -5.85942 11.3636 -0.1
+ vertex -5.8692 11.5867 -0.2
+ vertex -5.90899 11.4352 -0.2
+ vertex -5.85942 11.3636 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -5.91161 11.5429 -0.1
- vertex -5.90899 11.4352 -0.1
- vertex -5.8692 11.5867 -0.1
+ vertex -5.91161 11.5429 -0.2
+ vertex -5.90899 11.4352 -0.2
+ vertex -5.8692 11.5867 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.90899 11.4352 -0.1
- vertex -5.91161 11.5429 -0.1
- vertex -5.92592 11.491 -0.1
+ vertex -5.90899 11.4352 -0.2
+ vertex -5.91161 11.5429 -0.2
+ vertex -5.92592 11.491 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.51759 -4.36865 -0.1
- vertex 8.0755 -3.36119 -0.1
- vertex 7.75455 -3.09522 -0.1
+ vertex 6.51759 -4.36865 -0.2
+ vertex 8.0755 -3.36119 -0.2
+ vertex 7.75455 -3.09522 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.2523 -4.01644 -0.1
- vertex 7.75455 -3.09522 -0.1
- vertex 7.10115 -2.48513 -0.1
+ vertex 6.2523 -4.01644 -0.2
+ vertex 7.75455 -3.09522 -0.2
+ vertex 7.10115 -2.48513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.70978 -3.81721 -0.1
- vertex 7.04277 -4.97268 -0.1
- vertex 7.809 -5.75259 -0.1
+ vertex 8.70978 -3.81721 -0.2
+ vertex 7.04277 -4.97268 -0.2
+ vertex 7.809 -5.75259 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.0755 -3.36119 -0.1
- vertex 6.78219 -4.68956 -0.1
- vertex 7.04277 -4.97268 -0.1
+ vertex 8.0755 -3.36119 -0.2
+ vertex 6.78219 -4.68956 -0.2
+ vertex 7.04277 -4.97268 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 8.0755 -3.36119 -0.1
- vertex 6.51759 -4.36865 -0.1
- vertex 6.78219 -4.68956 -0.1
+ vertex 8.0755 -3.36119 -0.2
+ vertex 6.51759 -4.36865 -0.2
+ vertex 6.78219 -4.68956 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.48552 -2.8367 -0.1
- vertex 7.10115 -2.48513 -0.1
- vertex 6.42718 -1.76788 -0.1
+ vertex 5.48552 -2.8367 -0.2
+ vertex 7.10115 -2.48513 -0.2
+ vertex 6.42718 -1.76788 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.75455 -3.09522 -0.1
- vertex 6.2523 -4.01644 -0.1
- vertex 6.51759 -4.36865 -0.1
+ vertex 7.75455 -3.09522 -0.2
+ vertex 6.2523 -4.01644 -0.2
+ vertex 6.51759 -4.36865 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.10115 -2.48513 -0.1
- vertex 5.98964 -3.63939 -0.1
- vertex 6.2523 -4.01644 -0.1
+ vertex 7.10115 -2.48513 -0.2
+ vertex 5.98964 -3.63939 -0.2
+ vertex 6.2523 -4.01644 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.03179 -2.01239 -0.1
- vertex 6.42718 -1.76788 -0.1
- vertex 5.79491 -1.04264 -0.1
+ vertex 5.03179 -2.01239 -0.2
+ vertex 6.42718 -1.76788 -0.2
+ vertex 5.79491 -1.04264 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.10115 -2.48513 -0.1
- vertex 5.48552 -2.8367 -0.1
- vertex 5.98964 -3.63939 -0.1
+ vertex 7.10115 -2.48513 -0.2
+ vertex 5.48552 -2.8367 -0.2
+ vertex 5.98964 -3.63939 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.65505 -1.21825 -0.1
- vertex 5.79491 -1.04264 -0.1
- vertex 5.24358 -0.384283 -0.1
+ vertex 4.65505 -1.21825 -0.2
+ vertex 5.79491 -1.04264 -0.2
+ vertex 5.24358 -0.384283 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 6.42718 -1.76788 -0.1
- vertex 5.03179 -2.01239 -0.1
- vertex 5.48552 -2.8367 -0.1
+ vertex 6.42718 -1.76788 -0.2
+ vertex 5.03179 -2.01239 -0.2
+ vertex 5.48552 -2.8367 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.38188 -0.506111 -0.1
- vertex 5.24358 -0.384283 -0.1
- vertex 4.83246 0.134689 -0.1
+ vertex 4.38188 -0.506111 -0.2
+ vertex 5.24358 -0.384283 -0.2
+ vertex 4.83246 0.134689 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.79491 -1.04264 -0.1
- vertex 4.65505 -1.21825 -0.1
- vertex 5.03179 -2.01239 -0.1
+ vertex 5.79491 -1.04264 -0.2
+ vertex 4.65505 -1.21825 -0.2
+ vertex 5.03179 -2.01239 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.23886 0.0722368 -0.1
- vertex 4.83246 0.134689 -0.1
- vertex 4.62083 0.441773 -0.1
+ vertex 4.23886 0.0722368 -0.2
+ vertex 4.83246 0.134689 -0.2
+ vertex 4.62083 0.441773 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.24358 -0.384283 -0.1
- vertex 4.50386 -0.848697 -0.1
- vertex 4.65505 -1.21825 -0.1
+ vertex 5.24358 -0.384283 -0.2
+ vertex 4.50386 -0.848697 -0.2
+ vertex 4.65505 -1.21825 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.25257 0.464986 -0.1
- vertex 4.62083 0.441773 -0.1
- vertex 4.49221 0.674515 -0.1
+ vertex 4.25257 0.464986 -0.2
+ vertex 4.62083 0.441773 -0.2
+ vertex 4.49221 0.674515 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.33872 0.684191 -0.1
- vertex 4.49221 0.674515 -0.1
- vertex 4.44662 0.733548 -0.1
+ vertex 4.33872 0.684191 -0.2
+ vertex 4.49221 0.674515 -0.2
+ vertex 4.44662 0.733548 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex 4.3737 0.738144 -0.1
- vertex 4.44662 0.733548 -0.1
- vertex 4.40839 0.754677 -0.1
+ vertex 4.3737 0.738144 -0.2
+ vertex 4.44662 0.733548 -0.2
+ vertex 4.40839 0.754677 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 5.24358 -0.384283 -0.1
- vertex 4.38188 -0.506111 -0.1
- vertex 4.50386 -0.848697 -0.1
+ vertex 5.24358 -0.384283 -0.2
+ vertex 4.38188 -0.506111 -0.2
+ vertex 4.50386 -0.848697 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.44662 0.733548 -0.1
- vertex 4.3737 0.738144 -0.1
- vertex 4.33872 0.684191 -0.1
+ vertex 4.44662 0.733548 -0.2
+ vertex 4.3737 0.738144 -0.2
+ vertex 4.33872 0.684191 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.49221 0.674515 -0.1
- vertex 4.33872 0.684191 -0.1
- vertex 4.25257 0.464986 -0.1
+ vertex 4.49221 0.674515 -0.2
+ vertex 4.33872 0.684191 -0.2
+ vertex 4.25257 0.464986 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.83246 0.134689 -0.1
- vertex 4.29244 -0.196974 -0.1
- vertex 4.38188 -0.506111 -0.1
+ vertex 4.83246 0.134689 -0.2
+ vertex 4.29244 -0.196974 -0.2
+ vertex 4.38188 -0.506111 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.62083 0.441773 -0.1
- vertex 4.25257 0.464986 -0.1
- vertex 4.22446 0.295049 -0.1
+ vertex 4.62083 0.441773 -0.2
+ vertex 4.25257 0.464986 -0.2
+ vertex 4.22446 0.295049 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.83246 0.134689 -0.1
- vertex 4.23886 0.0722368 -0.1
- vertex 4.29244 -0.196974 -0.1
+ vertex 4.83246 0.134689 -0.2
+ vertex 4.23886 0.0722368 -0.2
+ vertex 4.29244 -0.196974 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 4.62083 0.441773 -0.1
- vertex 4.22446 0.295049 -0.1
- vertex 4.23886 0.0722368 -0.1
+ vertex 4.62083 0.441773 -0.2
+ vertex 4.22446 0.295049 -0.2
+ vertex 4.23886 0.0722368 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.0092 9.15168 -0.1
- vertex 8.87708 15.8492 -0.1
- vertex 14.9543 8.95485 -0.1
+ vertex 15.0092 9.15168 -0.2
+ vertex 8.87708 15.8492 -0.2
+ vertex 14.9543 8.95485 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.2183 5.95043 -0.1
- vertex 9.61741 3.25086 -0.1
- vertex 10.5842 2.40247 -0.1
+ vertex 15.2183 5.95043 -0.2
+ vertex 9.61741 3.25086 -0.2
+ vertex 10.5842 2.40247 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.1095 6.5543 -0.1
- vertex 9.29624 3.50894 -0.1
- vertex 9.61741 3.25086 -0.1
+ vertex 15.1095 6.5543 -0.2
+ vertex 9.29624 3.50894 -0.2
+ vertex 9.61741 3.25086 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 14.9543 8.95485 -0.1
- vertex 8.87708 15.8492 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 14.9543 8.95485 -0.2
+ vertex 8.87708 15.8492 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 15.0249 7.13954 -0.1
- vertex 9.14614 3.60373 -0.1
- vertex 9.29624 3.50894 -0.1
+ vertex 15.0249 7.13954 -0.2
+ vertex 9.14614 3.60373 -0.2
+ vertex 9.29624 3.50894 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9668 7.69881 -0.1
- vertex 8.19732 4.25764 -0.1
- vertex 8.81858 3.79581 -0.1
+ vertex 14.9668 7.69881 -0.2
+ vertex 8.19732 4.25764 -0.2
+ vertex 8.81858 3.79581 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9543 8.95485 -0.1
- vertex 7.07462 4.9138 -0.1
- vertex 14.9262 8.72903 -0.1
+ vertex 14.9543 8.95485 -0.2
+ vertex 7.07462 4.9138 -0.2
+ vertex 14.9262 8.72903 -0.2
endloop
endfacet
facet normal 0 -0 1
outer loop
- vertex 7.75154 4.54807 -0.1
- vertex 14.9262 8.72903 -0.1
- vertex 7.07462 4.9138 -0.1
+ vertex 7.75154 4.54807 -0.2
+ vertex 14.9262 8.72903 -0.2
+ vertex 7.07462 4.9138 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 8.87708 15.8492 -0.1
- vertex 8.83337 15.875 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 8.87708 15.8492 -0.2
+ vertex 8.83337 15.875 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 9.14614 3.60373 -0.1
- vertex 8.81858 3.79581 -0.1
- vertex 9.03464 3.65533 -0.1
+ vertex 9.14614 3.60373 -0.2
+ vertex 8.81858 3.79581 -0.2
+ vertex 9.03464 3.65533 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 8.83337 15.875 -0.1
- vertex 8.76553 15.9481 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 8.83337 15.875 -0.2
+ vertex 8.76553 15.9481 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 8.76553 15.9481 -0.1
- vertex 8.57086 16.213 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 8.76553 15.9481 -0.2
+ vertex 8.57086 16.213 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9668 7.69881 -0.1
- vertex 8.81858 3.79581 -0.1
- vertex 9.14614 3.60373 -0.1
+ vertex 14.9668 7.69881 -0.2
+ vertex 8.81858 3.79581 -0.2
+ vertex 9.14614 3.60373 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 8.57086 16.213 -0.1
- vertex 8.03973 17.0592 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 8.57086 16.213 -0.2
+ vertex 8.03973 17.0592 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9212 8.45633 -0.1
- vertex 8.00725 4.39171 -0.1
- vertex 8.19732 4.25764 -0.1
+ vertex 14.9212 8.45633 -0.2
+ vertex 8.00725 4.39171 -0.2
+ vertex 8.19732 4.25764 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9212 8.45633 -0.1
- vertex 7.75154 4.54807 -0.1
- vertex 8.00725 4.39171 -0.1
+ vertex 14.9212 8.45633 -0.2
+ vertex 7.75154 4.54807 -0.2
+ vertex 8.00725 4.39171 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 8.03973 17.0592 -0.1
- vertex 7.49889 18.0241 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 8.03973 17.0592 -0.2
+ vertex 7.49889 18.0241 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 7.49889 18.0241 -0.1
- vertex 7.29207 18.4374 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 7.49889 18.0241 -0.2
+ vertex 7.29207 18.4374 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 7.29207 18.4374 -0.1
- vertex 7.16351 18.7442 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 7.29207 18.4374 -0.2
+ vertex 7.16351 18.7442 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 7.16351 18.7442 -0.1
- vertex 7.1273 18.8927 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 7.16351 18.7442 -0.2
+ vertex 7.1273 18.8927 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 14.9262 8.72903 -0.1
- vertex 7.75154 4.54807 -0.1
- vertex 14.9212 8.45633 -0.1
+ vertex 14.9262 8.72903 -0.2
+ vertex 7.75154 4.54807 -0.2
+ vertex 14.9212 8.45633 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 7.07462 4.9138 -0.1
- vertex 7.1273 18.8927 -0.1
- vertex 7.1242 19.0144 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 7.1273 18.8927 -0.2
+ vertex 7.1242 19.0144 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -11.1091 19.5935 -0.1
- vertex -9.25643 14.3812 -0.1
- vertex -10.9948 19.7221 -0.1
+ vertex -11.1091 19.5935 -0.2
+ vertex -9.25643 14.3812 -0.2
+ vertex -10.9948 19.7221 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -11.4702 19.2748 -0.1
- vertex -9.25643 14.3812 -0.1
- vertex -11.1091 19.5935 -0.1
+ vertex -11.4702 19.2748 -0.2
+ vertex -9.25643 14.3812 -0.2
+ vertex -11.1091 19.5935 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.25643 14.3812 -0.1
- vertex -11.4702 19.2748 -0.1
- vertex -9.98725 14.3241 -0.1
+ vertex -9.25643 14.3812 -0.2
+ vertex -11.4702 19.2748 -0.2
+ vertex -9.98725 14.3241 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -12.0016 18.8648 -0.1
- vertex -9.98725 14.3241 -0.1
- vertex -11.4702 19.2748 -0.1
+ vertex -12.0016 18.8648 -0.2
+ vertex -9.98725 14.3241 -0.2
+ vertex -11.4702 19.2748 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -9.98725 14.3241 -0.1
- vertex -12.0016 18.8648 -0.1
- vertex -10.6249 14.238 -0.1
+ vertex -9.98725 14.3241 -0.2
+ vertex -12.0016 18.8648 -0.2
+ vertex -10.6249 14.238 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -10.6249 14.238 -0.1
- vertex -12.0016 18.8648 -0.1
- vertex -11.2428 14.1101 -0.1
+ vertex -10.6249 14.238 -0.2
+ vertex -12.0016 18.8648 -0.2
+ vertex -11.2428 14.1101 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -13.8225 17.5152 -0.1
- vertex -11.2428 14.1101 -0.1
- vertex -12.0016 18.8648 -0.1
+ vertex -13.8225 17.5152 -0.2
+ vertex -11.2428 14.1101 -0.2
+ vertex -12.0016 18.8648 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.2428 14.1101 -0.1
- vertex -13.8225 17.5152 -0.1
- vertex -11.9142 13.9281 -0.1
+ vertex -11.2428 14.1101 -0.2
+ vertex -13.8225 17.5152 -0.2
+ vertex -11.9142 13.9281 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -11.9142 13.9281 -0.1
- vertex -13.8225 17.5152 -0.1
- vertex -12.7125 13.6795 -0.1
+ vertex -11.9142 13.9281 -0.2
+ vertex -13.8225 17.5152 -0.2
+ vertex -12.7125 13.6795 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.4648 17.0612 -0.1
- vertex -12.7125 13.6795 -0.1
- vertex -13.8225 17.5152 -0.1
+ vertex -14.4648 17.0612 -0.2
+ vertex -12.7125 13.6795 -0.2
+ vertex -13.8225 17.5152 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -14.9972 16.7116 -0.1
- vertex -12.7125 13.6795 -0.1
- vertex -14.4648 17.0612 -0.1
+ vertex -14.9972 16.7116 -0.2
+ vertex -12.7125 13.6795 -0.2
+ vertex -14.4648 17.0612 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -12.7125 13.6795 -0.1
- vertex -14.9972 16.7116 -0.1
- vertex -13.7109 13.3517 -0.1
+ vertex -12.7125 13.6795 -0.2
+ vertex -14.9972 16.7116 -0.2
+ vertex -13.7109 13.3517 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.4716 16.4339 -0.1
- vertex -13.7109 13.3517 -0.1
- vertex -14.9972 16.7116 -0.1
+ vertex -15.4716 16.4339 -0.2
+ vertex -13.7109 13.3517 -0.2
+ vertex -14.9972 16.7116 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -13.7109 13.3517 -0.1
- vertex -15.4716 16.4339 -0.1
- vertex -14.949 12.9624 -0.1
+ vertex -13.7109 13.3517 -0.2
+ vertex -15.4716 16.4339 -0.2
+ vertex -14.949 12.9624 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -15.9397 16.1961 -0.1
- vertex -14.949 12.9624 -0.1
- vertex -15.4716 16.4339 -0.1
+ vertex -15.9397 16.1961 -0.2
+ vertex -14.949 12.9624 -0.2
+ vertex -15.4716 16.4339 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -16.4531 15.9659 -0.1
- vertex -14.949 12.9624 -0.1
- vertex -15.9397 16.1961 -0.1
+ vertex -16.4531 15.9659 -0.2
+ vertex -14.949 12.9624 -0.2
+ vertex -15.9397 16.1961 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -14.949 12.9624 -0.1
- vertex -16.4531 15.9659 -0.1
- vertex -16.0795 12.6436 -0.1
+ vertex -14.949 12.9624 -0.2
+ vertex -16.4531 15.9659 -0.2
+ vertex -16.0795 12.6436 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -17.0637 15.711 -0.1
- vertex -16.0795 12.6436 -0.1
- vertex -16.4531 15.9659 -0.1
+ vertex -17.0637 15.711 -0.2
+ vertex -16.0795 12.6436 -0.2
+ vertex -16.4531 15.9659 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.0795 12.6436 -0.1
- vertex -17.0637 15.711 -0.1
- vertex -16.9775 12.4282 -0.1
+ vertex -16.0795 12.6436 -0.2
+ vertex -17.0637 15.711 -0.2
+ vertex -16.9775 12.4282 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -18.4061 15.1884 -0.1
- vertex -16.9775 12.4282 -0.1
- vertex -17.0637 15.711 -0.1
+ vertex -18.4061 15.1884 -0.2
+ vertex -16.9775 12.4282 -0.2
+ vertex -17.0637 15.711 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -16.9775 12.4282 -0.1
- vertex -18.4061 15.1884 -0.1
- vertex -17.3003 12.3696 -0.1
+ vertex -16.9775 12.4282 -0.2
+ vertex -18.4061 15.1884 -0.2
+ vertex -17.3003 12.3696 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.3003 12.3696 -0.1
- vertex -18.4061 15.1884 -0.1
- vertex -17.5181 12.3491 -0.1
+ vertex -17.3003 12.3696 -0.2
+ vertex -18.4061 15.1884 -0.2
+ vertex -17.5181 12.3491 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -17.5181 12.3491 -0.1
- vertex -18.4061 15.1884 -0.1
- vertex -17.9556 12.3221 -0.1
+ vertex -17.5181 12.3491 -0.2
+ vertex -18.4061 15.1884 -0.2
+ vertex -17.9556 12.3221 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.4061 15.1884 -0.1
- vertex -18.5728 12.2484 -0.1
- vertex -17.9556 12.3221 -0.1
+ vertex -18.4061 15.1884 -0.2
+ vertex -18.5728 12.2484 -0.2
+ vertex -17.9556 12.3221 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -19.7213 14.7364 -0.1
- vertex -18.5728 12.2484 -0.1
- vertex -18.4061 15.1884 -0.1
+ vertex -19.7213 14.7364 -0.2
+ vertex -18.5728 12.2484 -0.2
+ vertex -18.4061 15.1884 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -18.5728 12.2484 -0.1
- vertex -19.7213 14.7364 -0.1
- vertex -19.2876 12.1394 -0.1
+ vertex -18.5728 12.2484 -0.2
+ vertex -19.7213 14.7364 -0.2
+ vertex -19.2876 12.1394 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -19.7213 14.7364 -0.1
- vertex -20.0181 12.0063 -0.1
- vertex -19.2876 12.1394 -0.1
+ vertex -19.7213 14.7364 -0.2
+ vertex -20.0181 12.0063 -0.2
+ vertex -19.2876 12.1394 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -21.0167 14.3533 -0.1
- vertex -20.0181 12.0063 -0.1
- vertex -19.7213 14.7364 -0.1
+ vertex -21.0167 14.3533 -0.2
+ vertex -20.0181 12.0063 -0.2
+ vertex -19.7213 14.7364 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -20.0181 12.0063 -0.1
- vertex -21.0167 14.3533 -0.1
- vertex -20.4772 11.9313 -0.1
+ vertex -20.0181 12.0063 -0.2
+ vertex -21.0167 14.3533 -0.2
+ vertex -20.4772 11.9313 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -21.0167 14.3533 -0.1
- vertex -21.0446 11.8651 -0.1
- vertex -20.4772 11.9313 -0.1
+ vertex -21.0167 14.3533 -0.2
+ vertex -21.0446 11.8651 -0.2
+ vertex -20.4772 11.9313 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -22.3001 14.0374 -0.1
- vertex -21.0446 11.8651 -0.1
- vertex -21.0167 14.3533 -0.1
+ vertex -22.3001 14.0374 -0.2
+ vertex -21.0446 11.8651 -0.2
+ vertex -21.0167 14.3533 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -22.3001 14.0374 -0.1
- vertex -22.4311 11.7593 -0.1
- vertex -21.0446 11.8651 -0.1
+ vertex -22.3001 14.0374 -0.2
+ vertex -22.4311 11.7593 -0.2
+ vertex -21.0446 11.8651 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -23.579 13.787 -0.1
- vertex -22.4311 11.7593 -0.1
- vertex -22.3001 14.0374 -0.1
+ vertex -23.579 13.787 -0.2
+ vertex -22.4311 11.7593 -0.2
+ vertex -22.3001 14.0374 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -23.579 13.787 -0.1
- vertex -24.031 11.6901 -0.1
- vertex -22.4311 11.7593 -0.1
+ vertex -23.579 13.787 -0.2
+ vertex -24.031 11.6901 -0.2
+ vertex -22.4311 11.7593 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -24.8613 13.6003 -0.1
- vertex -24.031 11.6901 -0.1
- vertex -23.579 13.787 -0.1
+ vertex -24.8613 13.6003 -0.2
+ vertex -24.031 11.6901 -0.2
+ vertex -23.579 13.787 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.8613 13.6003 -0.1
- vertex -25.698 11.6586 -0.1
- vertex -24.031 11.6901 -0.1
+ vertex -24.8613 13.6003 -0.2
+ vertex -25.698 11.6586 -0.2
+ vertex -24.031 11.6901 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -26.1544 13.4758 -0.1
- vertex -25.698 11.6586 -0.1
- vertex -24.8613 13.6003 -0.1
+ vertex -26.1544 13.4758 -0.2
+ vertex -25.698 11.6586 -0.2
+ vertex -24.8613 13.6003 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.1544 13.4758 -0.1
- vertex -27.2855 11.6658 -0.1
- vertex -25.698 11.6586 -0.1
+ vertex -26.1544 13.4758 -0.2
+ vertex -27.2855 11.6658 -0.2
+ vertex -25.698 11.6586 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -27.4661 13.4117 -0.1
- vertex -27.2855 11.6658 -0.1
- vertex -26.1544 13.4758 -0.1
+ vertex -27.4661 13.4117 -0.2
+ vertex -27.2855 11.6658 -0.2
+ vertex -26.1544 13.4758 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.4661 13.4117 -0.1
- vertex -28.647 11.7129 -0.1
- vertex -27.2855 11.6658 -0.1
+ vertex -27.4661 13.4117 -0.2
+ vertex -28.647 11.7129 -0.2
+ vertex -27.2855 11.6658 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -29.0548 13.353 -0.1
- vertex -28.647 11.7129 -0.1
- vertex -27.4661 13.4117 -0.1
+ vertex -29.0548 13.353 -0.2
+ vertex -28.647 11.7129 -0.2
+ vertex -27.4661 13.4117 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.0548 13.353 -0.1
- vertex -29.1973 11.7518 -0.1
- vertex -28.647 11.7129 -0.1
+ vertex -29.0548 13.353 -0.2
+ vertex -29.1973 11.7518 -0.2
+ vertex -28.647 11.7129 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -29.5683 13.309 -0.1
- vertex -29.1973 11.7518 -0.1
- vertex -29.0548 13.353 -0.1
+ vertex -29.5683 13.309 -0.2
+ vertex -29.1973 11.7518 -0.2
+ vertex -29.0548 13.353 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.5683 13.309 -0.1
- vertex -29.6362 11.801 -0.1
- vertex -29.1973 11.7518 -0.1
+ vertex -29.5683 13.309 -0.2
+ vertex -29.6362 11.801 -0.2
+ vertex -29.1973 11.7518 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3556 12.4664 -0.1
- vertex -29.5683 13.309 -0.1
- vertex -29.9294 13.2465 -0.1
+ vertex -30.3556 12.4664 -0.2
+ vertex -29.5683 13.309 -0.2
+ vertex -29.9294 13.2465 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.5683 13.309 -0.1
- vertex -30.2975 12.2549 -0.1
- vertex -29.6362 11.801 -0.1
+ vertex -29.5683 13.309 -0.2
+ vertex -30.2975 12.2549 -0.2
+ vertex -29.6362 11.801 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.6362 11.801 -0.1
- vertex -30.2975 12.2549 -0.1
- vertex -29.9453 11.8607 -0.1
+ vertex -29.6362 11.801 -0.2
+ vertex -30.2975 12.2549 -0.2
+ vertex -29.9453 11.8607 -0.2
endloop
endfacet
facet normal -0 -0 1
outer loop
- vertex -30.2115 12.0683 -0.1
- vertex -29.9453 11.8607 -0.1
- vertex -30.2975 12.2549 -0.1
+ vertex -30.2115 12.0683 -0.2
+ vertex -29.9453 11.8607 -0.2
+ vertex -30.2975 12.2549 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.377 12.6783 -0.1
- vertex -29.9294 13.2465 -0.1
- vertex -30.1646 13.1588 -0.1
+ vertex -30.377 12.6783 -0.2
+ vertex -29.9294 13.2465 -0.2
+ vertex -30.1646 13.1588 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.9453 11.8607 -0.1
- vertex -30.2115 12.0683 -0.1
- vertex -30.0456 11.8946 -0.1
+ vertex -29.9453 11.8607 -0.2
+ vertex -30.2115 12.0683 -0.2
+ vertex -30.0456 11.8946 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3621 12.8813 -0.1
- vertex -30.1646 13.1588 -0.1
- vertex -30.2432 13.1034 -0.1
+ vertex -30.3621 12.8813 -0.2
+ vertex -30.1646 13.1588 -0.2
+ vertex -30.2432 13.1034 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.0456 11.8946 -0.1
- vertex -30.2115 12.0683 -0.1
- vertex -30.1065 11.9311 -0.1
+ vertex -30.0456 11.8946 -0.2
+ vertex -30.2115 12.0683 -0.2
+ vertex -30.1065 11.9311 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3387 12.9655 -0.1
- vertex -30.2432 13.1034 -0.1
- vertex -30.3001 13.0393 -0.1
+ vertex -30.3387 12.9655 -0.2
+ vertex -30.2432 13.1034 -0.2
+ vertex -30.3001 13.0393 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.2432 13.1034 -0.1
- vertex -30.3387 12.9655 -0.1
- vertex -30.3621 12.8813 -0.1
+ vertex -30.2432 13.1034 -0.2
+ vertex -30.3387 12.9655 -0.2
+ vertex -30.3621 12.8813 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.5683 13.309 -0.1
- vertex -30.3556 12.4664 -0.1
- vertex -30.2975 12.2549 -0.1
+ vertex -29.5683 13.309 -0.2
+ vertex -30.3556 12.4664 -0.2
+ vertex -30.2975 12.2549 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.1646 13.1588 -0.1
- vertex -30.3621 12.8813 -0.1
- vertex -30.377 12.6783 -0.1
+ vertex -30.1646 13.1588 -0.2
+ vertex -30.3621 12.8813 -0.2
+ vertex -30.377 12.6783 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.9294 13.2465 -0.1
- vertex -30.377 12.6783 -0.1
- vertex -30.3556 12.4664 -0.1
+ vertex -29.9294 13.2465 -0.2
+ vertex -30.377 12.6783 -0.2
+ vertex -30.3556 12.4664 -0.2
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -26.053 23.8437 -0.1
- vertex -24.1455 19.0472 -0.1
- vertex -24.6523 24.0122 -0.1
+ vertex -26.053 23.8437 -0.2
+ vertex -24.1455 19.0472 -0.2
+ vertex -24.6523 24.0122 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -24.1455 19.0472 -0.1
- vertex -26.053 23.8437 -0.1
- vertex -25.9619 18.9589 -0.1
+ vertex -24.1455 19.0472 -0.2
+ vertex -26.053 23.8437 -0.2
+ vertex -25.9619 18.9589 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.3394 21.9725 -0.1
- vertex -26.053 23.8437 -0.1
- vertex -26.7338 23.7794 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -26.053 23.8437 -0.2
+ vertex -26.7338 23.7794 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.053 23.8437 -0.1
- vertex -28.3394 21.9725 -0.1
- vertex -25.9619 18.9589 -0.1
+ vertex -26.053 23.8437 -0.2
+ vertex -28.3394 21.9725 -0.2
+ vertex -25.9619 18.9589 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.3394 21.9725 -0.1
- vertex -26.7338 23.7794 -0.1
- vertex -27.3569 23.7586 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -26.7338 23.7794 -0.2
+ vertex -27.3569 23.7586 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -25.9619 18.9589 -0.1
- vertex -28.3394 21.9725 -0.1
- vertex -26.7887 18.9409 -0.1
+ vertex -25.9619 18.9589 -0.2
+ vertex -28.3394 21.9725 -0.2
+ vertex -26.7887 18.9409 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.3394 21.9725 -0.1
- vertex -27.3569 23.7586 -0.1
- vertex -27.9279 23.7822 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -27.3569 23.7586 -0.2
+ vertex -27.9279 23.7822 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -26.7887 18.9409 -0.1
- vertex -28.3394 21.9725 -0.1
- vertex -27.5469 18.9414 -0.1
+ vertex -26.7887 18.9409 -0.2
+ vertex -28.3394 21.9725 -0.2
+ vertex -27.5469 18.9414 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.5469 18.9414 -0.1
- vertex -28.3394 21.9725 -0.1
- vertex -28.2256 18.9609 -0.1
+ vertex -27.5469 18.9414 -0.2
+ vertex -28.3394 21.9725 -0.2
+ vertex -28.2256 18.9609 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.0186 22.3563 -0.1
- vertex -27.9279 23.7822 -0.1
- vertex -28.4524 23.8513 -0.1
+ vertex -29.0186 22.3563 -0.2
+ vertex -27.9279 23.7822 -0.2
+ vertex -28.4524 23.8513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.4321 22.5993 -0.1
- vertex -28.4524 23.8513 -0.1
- vertex -28.9359 23.9669 -0.1
+ vertex -29.4321 22.5993 -0.2
+ vertex -28.4524 23.8513 -0.2
+ vertex -28.9359 23.9669 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -27.9279 23.7822 -0.1
- vertex -29.0186 22.3563 -0.1
- vertex -28.3394 21.9725 -0.1
+ vertex -27.9279 23.7822 -0.2
+ vertex -29.0186 22.3563 -0.2
+ vertex -28.3394 21.9725 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.7937 22.8325 -0.1
- vertex -28.9359 23.9669 -0.1
- vertex -29.384 24.13 -0.1
+ vertex -29.7937 22.8325 -0.2
+ vertex -28.9359 23.9669 -0.2
+ vertex -29.384 24.13 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.4524 23.8513 -0.1
- vertex -29.4321 22.5993 -0.1
- vertex -29.0186 22.3563 -0.1
+ vertex -28.4524 23.8513 -0.2
+ vertex -29.4321 22.5993 -0.2
+ vertex -29.0186 22.3563 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.9359 23.9669 -0.1
- vertex -29.7937 22.8325 -0.1
- vertex -29.4321 22.5993 -0.1
+ vertex -28.9359 23.9669 -0.2
+ vertex -29.7937 22.8325 -0.2
+ vertex -29.4321 22.5993 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.3761 23.2826 -0.1
- vertex -29.384 24.13 -0.1
- vertex -29.8023 24.3416 -0.1
+ vertex -30.3761 23.2826 -0.2
+ vertex -29.384 24.13 -0.2
+ vertex -29.8023 24.3416 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.384 24.13 -0.1
- vertex -30.1071 23.0591 -0.1
- vertex -29.7937 22.8325 -0.1
+ vertex -29.384 24.13 -0.2
+ vertex -30.1071 23.0591 -0.2
+ vertex -29.7937 22.8325 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.7957 23.7338 -0.1
- vertex -29.8023 24.3416 -0.1
- vertex -30.1964 24.6027 -0.1
+ vertex -30.7957 23.7338 -0.2
+ vertex -29.8023 24.3416 -0.2
+ vertex -30.1964 24.6027 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.384 24.13 -0.1
- vertex -30.3761 23.2826 -0.1
- vertex -30.1071 23.0591 -0.1
+ vertex -29.384 24.13 -0.2
+ vertex -30.3761 23.2826 -0.2
+ vertex -30.1071 23.0591 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.0826 24.213 -0.1
- vertex -30.1964 24.6027 -0.1
- vertex -30.5308 24.8328 -0.1
+ vertex -31.0826 24.213 -0.2
+ vertex -30.1964 24.6027 -0.2
+ vertex -30.5308 24.8328 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.8023 24.3416 -0.1
- vertex -30.6044 23.5064 -0.1
- vertex -30.3761 23.2826 -0.1
+ vertex -29.8023 24.3416 -0.2
+ vertex -30.6044 23.5064 -0.2
+ vertex -30.3761 23.2826 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -29.8023 24.3416 -0.1
- vertex -30.7957 23.7338 -0.1
- vertex -30.6044 23.5064 -0.1
+ vertex -29.8023 24.3416 -0.2
+ vertex -30.7957 23.7338 -0.2
+ vertex -30.6044 23.5064 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.2103 24.5339 -0.1
- vertex -30.5308 24.8328 -0.1
- vertex -30.8055 24.9813 -0.1
+ vertex -31.2103 24.5339 -0.2
+ vertex -30.5308 24.8328 -0.2
+ vertex -30.8055 24.9813 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.1964 24.6027 -0.1
- vertex -30.9539 23.9682 -0.1
- vertex -30.7957 23.7338 -0.1
+ vertex -30.1964 24.6027 -0.2
+ vertex -30.9539 23.9682 -0.2
+ vertex -30.7957 23.7338 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.2656 24.779 -0.1
- vertex -30.8055 24.9813 -0.1
- vertex -31.0185 25.0493 -0.1
+ vertex -31.2656 24.779 -0.2
+ vertex -30.8055 24.9813 -0.2
+ vertex -31.0185 25.0493 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.1964 24.6027 -0.1
- vertex -31.0826 24.213 -0.1
- vertex -30.9539 23.9682 -0.1
+ vertex -30.1964 24.6027 -0.2
+ vertex -31.0826 24.213 -0.2
+ vertex -30.9539 23.9682 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.2668 24.8727 -0.1
- vertex -31.0185 25.0493 -0.1
- vertex -31.1012 25.0533 -0.1
+ vertex -31.2668 24.8727 -0.2
+ vertex -31.0185 25.0493 -0.2
+ vertex -31.1012 25.0533 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.2507 24.9472 -0.1
- vertex -31.1012 25.0533 -0.1
- vertex -31.1676 25.0376 -0.1
+ vertex -31.2507 24.9472 -0.2
+ vertex -31.1012 25.0533 -0.2
+ vertex -31.1676 25.0376 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.5308 24.8328 -0.1
- vertex -31.2103 24.5339 -0.1
- vertex -31.0826 24.213 -0.1
+ vertex -30.5308 24.8328 -0.2
+ vertex -31.2103 24.5339 -0.2
+ vertex -31.0826 24.213 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.2507 24.9472 -0.1
- vertex -31.1676 25.0376 -0.1
- vertex -31.2175 25.0021 -0.1
+ vertex -31.2507 24.9472 -0.2
+ vertex -31.1676 25.0376 -0.2
+ vertex -31.2175 25.0021 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.1012 25.0533 -0.1
- vertex -31.2507 24.9472 -0.1
- vertex -31.2668 24.8727 -0.1
+ vertex -31.1012 25.0533 -0.2
+ vertex -31.2507 24.9472 -0.2
+ vertex -31.2668 24.8727 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.8055 24.9813 -0.1
- vertex -31.2656 24.779 -0.1
- vertex -31.2103 24.5339 -0.1
+ vertex -30.8055 24.9813 -0.2
+ vertex -31.2656 24.779 -0.2
+ vertex -31.2103 24.5339 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.0185 25.0493 -0.1
- vertex -31.2668 24.8727 -0.1
- vertex -31.2656 24.779 -0.1
+ vertex -31.0185 25.0493 -0.2
+ vertex -31.2668 24.8727 -0.2
+ vertex -31.2656 24.779 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.3394 21.9725 -0.1
- vertex -28.8137 19.0002 -0.1
- vertex -28.2256 18.9609 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -28.8137 19.0002 -0.2
+ vertex -28.2256 18.9609 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.3394 21.9725 -0.1
- vertex -29.3006 19.0599 -0.1
- vertex -28.8137 19.0002 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -29.3006 19.0599 -0.2
+ vertex -28.8137 19.0002 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -28.3394 21.9725 -0.1
- vertex -29.6752 19.1409 -0.1
- vertex -29.3006 19.0599 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -29.6752 19.1409 -0.2
+ vertex -29.3006 19.0599 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.0859 22.0525 -0.1
- vertex -29.6752 19.1409 -0.1
- vertex -28.3394 21.9725 -0.1
+ vertex -30.0859 22.0525 -0.2
+ vertex -29.6752 19.1409 -0.2
+ vertex -28.3394 21.9725 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.5811 19.4165 -0.1
- vertex -30.0859 22.0525 -0.1
- vertex -30.5728 22.0884 -0.1
+ vertex -30.5811 19.4165 -0.2
+ vertex -30.0859 22.0525 -0.2
+ vertex -30.5728 22.0884 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.0859 22.0525 -0.1
- vertex -30.5811 19.4165 -0.1
- vertex -29.6752 19.1409 -0.1
+ vertex -30.0859 22.0525 -0.2
+ vertex -30.5811 19.4165 -0.2
+ vertex -29.6752 19.1409 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.4466 19.7034 -0.1
- vertex -30.5728 22.0884 -0.1
- vertex -31.074 22.1513 -0.1
+ vertex -31.4466 19.7034 -0.2
+ vertex -30.5728 22.0884 -0.2
+ vertex -31.074 22.1513 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -30.5728 22.0884 -0.1
- vertex -31.4466 19.7034 -0.1
- vertex -30.5811 19.4165 -0.1
+ vertex -30.5728 22.0884 -0.2
+ vertex -31.4466 19.7034 -0.2
+ vertex -30.5811 19.4165 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.271 20.0012 -0.1
- vertex -31.074 22.1513 -0.1
- vertex -31.5861 22.2399 -0.1
+ vertex -32.271 20.0012 -0.2
+ vertex -31.074 22.1513 -0.2
+ vertex -31.5861 22.2399 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.271 20.0012 -0.1
- vertex -31.5861 22.2399 -0.1
- vertex -32.1061 22.3529 -0.1
+ vertex -32.271 20.0012 -0.2
+ vertex -31.5861 22.2399 -0.2
+ vertex -32.1061 22.3529 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -31.074 22.1513 -0.1
- vertex -32.271 20.0012 -0.1
- vertex -31.4466 19.7034 -0.1
+ vertex -31.074 22.1513 -0.2
+ vertex -32.271 20.0012 -0.2
+ vertex -31.4466 19.7034 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.0533 20.3093 -0.1
- vertex -32.1061 22.3529 -0.1
- vertex -32.6306 22.489 -0.1
+ vertex -33.0533 20.3093 -0.2
+ vertex -32.1061 22.3529 -0.2
+ vertex -32.6306 22.489 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.1061 22.3529 -0.1
- vertex -33.0533 20.3093 -0.1
- vertex -32.271 20.0012 -0.1
+ vertex -32.1061 22.3529 -0.2
+ vertex -33.0533 20.3093 -0.2
+ vertex -32.271 20.0012 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.7926 20.6272 -0.1
- vertex -32.6306 22.489 -0.1
- vertex -33.1564 22.6469 -0.1
+ vertex -33.7926 20.6272 -0.2
+ vertex -32.6306 22.489 -0.2
+ vertex -33.1564 22.6469 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.4881 20.9542 -0.1
- vertex -33.1564 22.6469 -0.1
- vertex -33.6803 22.8253 -0.1
+ vertex -34.4881 20.9542 -0.2
+ vertex -33.1564 22.6469 -0.2
+ vertex -33.6803 22.8253 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -32.6306 22.489 -0.1
- vertex -33.7926 20.6272 -0.1
- vertex -33.0533 20.3093 -0.1
+ vertex -32.6306 22.489 -0.2
+ vertex -33.7926 20.6272 -0.2
+ vertex -33.0533 20.3093 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.4881 20.9542 -0.1
- vertex -33.6803 22.8253 -0.1
- vertex -34.199 23.023 -0.1
+ vertex -34.4881 20.9542 -0.2
+ vertex -33.6803 22.8253 -0.2
+ vertex -34.199 23.023 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -33.1564 22.6469 -0.1
- vertex -34.4881 20.9542 -0.1
- vertex -33.7926 20.6272 -0.1
+ vertex -33.1564 22.6469 -0.2
+ vertex -34.4881 20.9542 -0.2
+ vertex -33.7926 20.6272 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.1386 21.2899 -0.1
- vertex -34.199 23.023 -0.1
- vertex -34.7094 23.2385 -0.1
+ vertex -35.1386 21.2899 -0.2
+ vertex -34.199 23.023 -0.2
+ vertex -34.7094 23.2385 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.199 23.023 -0.1
- vertex -35.1386 21.2899 -0.1
- vertex -34.4881 20.9542 -0.1
+ vertex -34.199 23.023 -0.2
+ vertex -35.1386 21.2899 -0.2
+ vertex -34.4881 20.9542 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.7435 21.6336 -0.1
- vertex -34.7094 23.2385 -0.1
- vertex -35.2082 23.4707 -0.1
+ vertex -35.7435 21.6336 -0.2
+ vertex -34.7094 23.2385 -0.2
+ vertex -35.2082 23.4707 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.3017 21.985 -0.1
- vertex -35.2082 23.4707 -0.1
- vertex -35.6921 23.7183 -0.1
+ vertex -36.3017 21.985 -0.2
+ vertex -35.2082 23.4707 -0.2
+ vertex -35.6921 23.7183 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -34.7094 23.2385 -0.1
- vertex -35.7435 21.6336 -0.1
- vertex -35.1386 21.2899 -0.1
+ vertex -34.7094 23.2385 -0.2
+ vertex -35.7435 21.6336 -0.2
+ vertex -35.1386 21.2899 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.8124 22.3433 -0.1
- vertex -35.6921 23.7183 -0.1
- vertex -36.1579 23.9798 -0.1
+ vertex -36.8124 22.3433 -0.2
+ vertex -35.6921 23.7183 -0.2
+ vertex -36.1579 23.9798 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.2082 23.4707 -0.1
- vertex -36.3017 21.985 -0.1
- vertex -35.7435 21.6336 -0.1
+ vertex -35.2082 23.4707 -0.2
+ vertex -36.3017 21.985 -0.2
+ vertex -35.7435 21.6336 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.2746 22.7082 -0.1
- vertex -36.1579 23.9798 -0.1
- vertex -36.6025 24.2541 -0.1
+ vertex -37.2746 22.7082 -0.2
+ vertex -36.1579 23.9798 -0.2
+ vertex -36.6025 24.2541 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -35.6921 23.7183 -0.1
- vertex -36.8124 22.3433 -0.1
- vertex -36.3017 21.985 -0.1
+ vertex -35.6921 23.7183 -0.2
+ vertex -36.8124 22.3433 -0.2
+ vertex -36.3017 21.985 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.6874 23.0789 -0.1
- vertex -36.6025 24.2541 -0.1
- vertex -37.0225 24.5398 -0.1
+ vertex -37.6874 23.0789 -0.2
+ vertex -36.6025 24.2541 -0.2
+ vertex -37.0225 24.5398 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.1579 23.9798 -0.1
- vertex -37.2746 22.7082 -0.1
- vertex -36.8124 22.3433 -0.1
+ vertex -36.1579 23.9798 -0.2
+ vertex -37.2746 22.7082 -0.2
+ vertex -36.8124 22.3433 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.3611 23.836 -0.1
- vertex -37.0225 24.5398 -0.1
- vertex -37.4147 24.8357 -0.1
+ vertex -38.3611 23.836 -0.2
+ vertex -37.0225 24.5398 -0.2
+ vertex -37.4147 24.8357 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -36.6025 24.2541 -0.1
- vertex -37.6874 23.0789 -0.1
- vertex -37.2746 22.7082 -0.1
+ vertex -36.6025 24.2541 -0.2
+ vertex -37.6874 23.0789 -0.2
+ vertex -37.2746 22.7082 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.6203 24.2212 -0.1
- vertex -37.4147 24.8357 -0.1
- vertex -37.776 25.1404 -0.1
+ vertex -38.6203 24.2212 -0.2
+ vertex -37.4147 24.8357 -0.2
+ vertex -37.776 25.1404 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.0225 24.5398 -0.1
- vertex -38.0499 23.455 -0.1
- vertex -37.6874 23.0789 -0.1
+ vertex -37.0225 24.5398 -0.2
+ vertex -38.0499 23.455 -0.2
+ vertex -37.6874 23.0789 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.8265 24.6102 -0.1
- vertex -37.776 25.1404 -0.1
- vertex -38.2113 25.5018 -0.1
+ vertex -38.8265 24.6102 -0.2
+ vertex -37.776 25.1404 -0.2
+ vertex -38.2113 25.5018 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.0225 24.5398 -0.1
- vertex -38.3611 23.836 -0.1
- vertex -38.0499 23.455 -0.1
+ vertex -37.0225 24.5398 -0.2
+ vertex -38.3611 23.836 -0.2
+ vertex -38.0499 23.455 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -39.0227 25.0923 -0.1
- vertex -38.2113 25.5018 -0.1
- vertex -38.5664 25.7376 -0.1
+ vertex -39.0227 25.0923 -0.2
+ vertex -38.2113 25.5018 -0.2
+ vertex -38.5664 25.7376 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.4147 24.8357 -0.1
- vertex -38.6203 24.2212 -0.1
- vertex -38.3611 23.836 -0.1
+ vertex -37.4147 24.8357 -0.2
+ vertex -38.6203 24.2212 -0.2
+ vertex -38.3611 23.836 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -39.1186 25.4589 -0.1
- vertex -38.5664 25.7376 -0.1
- vertex -38.7129 25.8089 -0.1
+ vertex -39.1186 25.4589 -0.2
+ vertex -38.5664 25.7376 -0.2
+ vertex -38.7129 25.8089 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -37.776 25.1404 -0.1
- vertex -38.8265 24.6102 -0.1
- vertex -38.6203 24.2212 -0.1
+ vertex -37.776 25.1404 -0.2
+ vertex -38.8265 24.6102 -0.2
+ vertex -38.6203 24.2212 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -39.13 25.5984 -0.1
- vertex -38.7129 25.8089 -0.1
- vertex -38.8381 25.8495 -0.1
+ vertex -39.13 25.5984 -0.2
+ vertex -38.7129 25.8089 -0.2
+ vertex -38.8381 25.8495 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -39.1175 25.7085 -0.1
- vertex -38.8381 25.8495 -0.1
- vertex -38.9416 25.8595 -0.1
+ vertex -39.1175 25.7085 -0.2
+ vertex -38.8381 25.8495 -0.2
+ vertex -38.9416 25.8595 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.2113 25.5018 -0.1
- vertex -39.0227 25.0923 -0.1
- vertex -38.8265 24.6102 -0.1
+ vertex -38.2113 25.5018 -0.2
+ vertex -39.0227 25.0923 -0.2
+ vertex -38.8265 24.6102 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -39.0817 25.7888 -0.1
- vertex -38.9416 25.8595 -0.1
- vertex -39.0229 25.8392 -0.1
+ vertex -39.0817 25.7888 -0.2
+ vertex -38.9416 25.8595 -0.2
+ vertex -39.0229 25.8392 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.9416 25.8595 -0.1
- vertex -39.0817 25.7888 -0.1
- vertex -39.1175 25.7085 -0.1
+ vertex -38.9416 25.8595 -0.2
+ vertex -39.0817 25.7888 -0.2
+ vertex -39.1175 25.7085 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.8381 25.8495 -0.1
- vertex -39.1175 25.7085 -0.1
- vertex -39.13 25.5984 -0.1
+ vertex -38.8381 25.8495 -0.2
+ vertex -39.1175 25.7085 -0.2
+ vertex -39.13 25.5984 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.5664 25.7376 -0.1
- vertex -39.1186 25.4589 -0.1
- vertex -39.0227 25.0923 -0.1
+ vertex -38.5664 25.7376 -0.2
+ vertex -39.1186 25.4589 -0.2
+ vertex -39.0227 25.0923 -0.2
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -38.7129 25.8089 -0.1
- vertex -39.13 25.5984 -0.1
- vertex -39.1186 25.4589 -0.1
+ vertex -38.7129 25.8089 -0.2
+ vertex -39.13 25.5984 -0.2
+ vertex -39.1186 25.4589 -0.2
endloop
endfacet
facet normal -0.668491 -0.74372 0
outer loop
- vertex 5.20457 38.5758 -0.1
+ vertex 5.20457 38.5758 -0.2
vertex 5.23504 38.5484 0
vertex 5.20457 38.5758 0
endloop
@@ -29997,377 +29997,377 @@ solid OpenSCAD_Model
facet normal -0.668491 -0.74372 -0
outer loop
vertex 5.23504 38.5484 0
- vertex 5.20457 38.5758 -0.1
- vertex 5.23504 38.5484 -0.1
+ vertex 5.20457 38.5758 -0.2
+ vertex 5.23504 38.5484 -0.2
endloop
endfacet
facet normal -0.96052 -0.278211 0
outer loop
- vertex 5.26494 38.4452 -0.1
+ vertex 5.26494 38.4452 -0.2
vertex 5.23504 38.5484 0
- vertex 5.23504 38.5484 -0.1
+ vertex 5.23504 38.5484 -0.2
endloop
endfacet
facet normal -0.96052 -0.278211 0
outer loop
vertex 5.23504 38.5484 0
- vertex 5.26494 38.4452 -0.1
+ vertex 5.26494 38.4452 -0.2
vertex 5.26494 38.4452 0
endloop
endfacet
facet normal -0.998404 0.0564745 0
outer loop
- vertex 5.25596 38.2865 -0.1
+ vertex 5.25596 38.2865 -0.2
vertex 5.26494 38.4452 0
- vertex 5.26494 38.4452 -0.1
+ vertex 5.26494 38.4452 -0.2
endloop
endfacet
facet normal -0.998404 0.0564745 0
outer loop
vertex 5.26494 38.4452 0
- vertex 5.25596 38.2865 -0.1
+ vertex 5.25596 38.2865 -0.2
vertex 5.25596 38.2865 0
endloop
endfacet
facet normal -0.976561 0.215243 0
outer loop
- vertex 5.21112 38.083 -0.1
+ vertex 5.21112 38.083 -0.2
vertex 5.25596 38.2865 0
- vertex 5.25596 38.2865 -0.1
+ vertex 5.25596 38.2865 -0.2
endloop
endfacet
facet normal -0.976561 0.215243 0
outer loop
vertex 5.25596 38.2865 0
- vertex 5.21112 38.083 -0.1
+ vertex 5.21112 38.083 -0.2
vertex 5.21112 38.083 0
endloop
endfacet
facet normal -0.950355 0.311168 0
outer loop
- vertex 5.13345 37.8458 -0.1
+ vertex 5.13345 37.8458 -0.2
vertex 5.21112 38.083 0
- vertex 5.21112 38.083 -0.1
+ vertex 5.21112 38.083 -0.2
endloop
endfacet
facet normal -0.950355 0.311168 0
outer loop
vertex 5.21112 38.083 0
- vertex 5.13345 37.8458 -0.1
+ vertex 5.13345 37.8458 -0.2
vertex 5.13345 37.8458 0
endloop
endfacet
facet normal -0.924228 0.381841 0
outer loop
- vertex 5.02596 37.5856 -0.1
+ vertex 5.02596 37.5856 -0.2
vertex 5.13345 37.8458 0
- vertex 5.13345 37.8458 -0.1
+ vertex 5.13345 37.8458 -0.2
endloop
endfacet
facet normal -0.924228 0.381841 0
outer loop
vertex 5.13345 37.8458 0
- vertex 5.02596 37.5856 -0.1
+ vertex 5.02596 37.5856 -0.2
vertex 5.02596 37.5856 0
endloop
endfacet
facet normal -0.896839 0.442358 0
outer loop
- vertex 4.89167 37.3134 -0.1
+ vertex 4.89167 37.3134 -0.2
vertex 5.02596 37.5856 0
- vertex 5.02596 37.5856 -0.1
+ vertex 5.02596 37.5856 -0.2
endloop
endfacet
facet normal -0.896839 0.442358 0
outer loop
vertex 5.02596 37.5856 0
- vertex 4.89167 37.3134 -0.1
+ vertex 4.89167 37.3134 -0.2
vertex 4.89167 37.3134 0
endloop
endfacet
facet normal -0.865785 0.500416 0
outer loop
- vertex 4.73361 37.0399 -0.1
+ vertex 4.73361 37.0399 -0.2
vertex 4.89167 37.3134 0
- vertex 4.89167 37.3134 -0.1
+ vertex 4.89167 37.3134 -0.2
endloop
endfacet
facet normal -0.865785 0.500416 0
outer loop
vertex 4.89167 37.3134 0
- vertex 4.73361 37.0399 -0.1
+ vertex 4.73361 37.0399 -0.2
vertex 4.73361 37.0399 0
endloop
endfacet
facet normal -0.875928 0.482442 0
outer loop
- vertex 4.62814 36.8484 -0.1
+ vertex 4.62814 36.8484 -0.2
vertex 4.73361 37.0399 0
- vertex 4.73361 37.0399 -0.1
+ vertex 4.73361 37.0399 -0.2
endloop
endfacet
facet normal -0.875928 0.482442 0
outer loop
vertex 4.73361 37.0399 0
- vertex 4.62814 36.8484 -0.1
+ vertex 4.62814 36.8484 -0.2
vertex 4.62814 36.8484 0
endloop
endfacet
facet normal -0.912281 0.409566 0
outer loop
- vertex 4.52293 36.6141 -0.1
+ vertex 4.52293 36.6141 -0.2
vertex 4.62814 36.8484 0
- vertex 4.62814 36.8484 -0.1
+ vertex 4.62814 36.8484 -0.2
endloop
endfacet
facet normal -0.912281 0.409566 0
outer loop
vertex 4.62814 36.8484 0
- vertex 4.52293 36.6141 -0.1
+ vertex 4.52293 36.6141 -0.2
vertex 4.52293 36.6141 0
endloop
endfacet
facet normal -0.942197 0.335061 0
outer loop
- vertex 4.31688 36.0346 -0.1
+ vertex 4.31688 36.0346 -0.2
vertex 4.52293 36.6141 0
- vertex 4.52293 36.6141 -0.1
+ vertex 4.52293 36.6141 -0.2
endloop
endfacet
facet normal -0.942197 0.335061 0
outer loop
vertex 4.52293 36.6141 0
- vertex 4.31688 36.0346 -0.1
+ vertex 4.31688 36.0346 -0.2
vertex 4.31688 36.0346 0
endloop
endfacet
facet normal -0.963331 0.268317 0
outer loop
- vertex 4.1227 35.3375 -0.1
+ vertex 4.1227 35.3375 -0.2
vertex 4.31688 36.0346 0
- vertex 4.31688 36.0346 -0.1
+ vertex 4.31688 36.0346 -0.2
endloop
endfacet
facet normal -0.963331 0.268317 0
outer loop
vertex 4.31688 36.0346 0
- vertex 4.1227 35.3375 -0.1
+ vertex 4.1227 35.3375 -0.2
vertex 4.1227 35.3375 0
endloop
endfacet
facet normal -0.975667 0.219257 0
outer loop
- vertex 3.94762 34.5584 -0.1
+ vertex 3.94762 34.5584 -0.2
vertex 4.1227 35.3375 0
- vertex 4.1227 35.3375 -0.1
+ vertex 4.1227 35.3375 -0.2
endloop
endfacet
facet normal -0.975667 0.219257 0
outer loop
vertex 4.1227 35.3375 0
- vertex 3.94762 34.5584 -0.1
+ vertex 3.94762 34.5584 -0.2
vertex 3.94762 34.5584 0
endloop
endfacet
facet normal -0.984138 0.177404 0
outer loop
- vertex 3.79886 33.7332 -0.1
+ vertex 3.79886 33.7332 -0.2
vertex 3.94762 34.5584 0
- vertex 3.94762 34.5584 -0.1
+ vertex 3.94762 34.5584 -0.2
endloop
endfacet
facet normal -0.984138 0.177404 0
outer loop
vertex 3.94762 34.5584 0
- vertex 3.79886 33.7332 -0.1
+ vertex 3.79886 33.7332 -0.2
vertex 3.79886 33.7332 0
endloop
endfacet
facet normal -0.990628 0.136587 0
outer loop
- vertex 3.68366 32.8976 -0.1
+ vertex 3.68366 32.8976 -0.2
vertex 3.79886 33.7332 0
- vertex 3.79886 33.7332 -0.1
+ vertex 3.79886 33.7332 -0.2
endloop
endfacet
facet normal -0.990628 0.136587 0
outer loop
vertex 3.79886 33.7332 0
- vertex 3.68366 32.8976 -0.1
+ vertex 3.68366 32.8976 -0.2
vertex 3.68366 32.8976 0
endloop
endfacet
facet normal -0.995806 0.0914898 0
outer loop
- vertex 3.60924 32.0876 -0.1
+ vertex 3.60924 32.0876 -0.2
vertex 3.68366 32.8976 0
- vertex 3.68366 32.8976 -0.1
+ vertex 3.68366 32.8976 -0.2
endloop
endfacet
facet normal -0.995806 0.0914898 0
outer loop
vertex 3.68366 32.8976 0
- vertex 3.60924 32.0876 -0.1
+ vertex 3.60924 32.0876 -0.2
vertex 3.60924 32.0876 0
endloop
endfacet
facet normal -0.999378 0.0352546 0
outer loop
- vertex 3.58282 31.3388 -0.1
+ vertex 3.58282 31.3388 -0.2
vertex 3.60924 32.0876 0
- vertex 3.60924 32.0876 -0.1
+ vertex 3.60924 32.0876 -0.2
endloop
endfacet
facet normal -0.999378 0.0352546 0
outer loop
vertex 3.60924 32.0876 0
- vertex 3.58282 31.3388 -0.1
+ vertex 3.58282 31.3388 -0.2
vertex 3.58282 31.3388 0
endloop
endfacet
facet normal -0.999852 -0.0171991 0
outer loop
- vertex 3.59957 30.3654 -0.1
+ vertex 3.59957 30.3654 -0.2
vertex 3.58282 31.3388 0
- vertex 3.58282 31.3388 -0.1
+ vertex 3.58282 31.3388 -0.2
endloop
endfacet
facet normal -0.999852 -0.0171991 0
outer loop
vertex 3.58282 31.3388 0
- vertex 3.59957 30.3654 -0.1
+ vertex 3.59957 30.3654 -0.2
vertex 3.59957 30.3654 0
endloop
endfacet
facet normal -0.995876 -0.0907198 0
outer loop
- vertex 3.63162 30.0135 -0.1
+ vertex 3.63162 30.0135 -0.2
vertex 3.59957 30.3654 0
- vertex 3.59957 30.3654 -0.1
+ vertex 3.59957 30.3654 -0.2
endloop
endfacet
facet normal -0.995876 -0.0907198 0
outer loop
vertex 3.59957 30.3654 0
- vertex 3.63162 30.0135 -0.1
+ vertex 3.63162 30.0135 -0.2
vertex 3.63162 30.0135 0
endloop
endfacet
facet normal -0.982044 -0.188652 0
outer loop
- vertex 3.68937 29.7129 -0.1
+ vertex 3.68937 29.7129 -0.2
vertex 3.63162 30.0135 0
- vertex 3.63162 30.0135 -0.1
+ vertex 3.63162 30.0135 -0.2
endloop
endfacet
facet normal -0.982044 -0.188652 0
outer loop
vertex 3.63162 30.0135 0
- vertex 3.68937 29.7129 -0.1
+ vertex 3.68937 29.7129 -0.2
vertex 3.68937 29.7129 0
endloop
endfacet
facet normal -0.950581 -0.310477 0
outer loop
- vertex 3.78021 29.4348 -0.1
+ vertex 3.78021 29.4348 -0.2
vertex 3.68937 29.7129 0
- vertex 3.68937 29.7129 -0.1
+ vertex 3.68937 29.7129 -0.2
endloop
endfacet
facet normal -0.950581 -0.310477 0
outer loop
vertex 3.68937 29.7129 0
- vertex 3.78021 29.4348 -0.1
+ vertex 3.78021 29.4348 -0.2
vertex 3.78021 29.4348 0
endloop
endfacet
facet normal -0.907937 -0.419107 0
outer loop
- vertex 3.91157 29.1502 -0.1
+ vertex 3.91157 29.1502 -0.2
vertex 3.78021 29.4348 0
- vertex 3.78021 29.4348 -0.1
+ vertex 3.78021 29.4348 -0.2
endloop
endfacet
facet normal -0.907937 -0.419107 0
outer loop
vertex 3.78021 29.4348 0
- vertex 3.91157 29.1502 -0.1
+ vertex 3.91157 29.1502 -0.2
vertex 3.91157 29.1502 0
endloop
endfacet
facet normal -0.872337 -0.488905 0
outer loop
- vertex 4.09087 28.8303 -0.1
+ vertex 4.09087 28.8303 -0.2
vertex 3.91157 29.1502 0
- vertex 3.91157 29.1502 -0.1
+ vertex 3.91157 29.1502 -0.2
endloop
endfacet
facet normal -0.872337 -0.488905 0
outer loop
vertex 3.91157 29.1502 0
- vertex 4.09087 28.8303 -0.1
+ vertex 4.09087 28.8303 -0.2
vertex 4.09087 28.8303 0
endloop
endfacet
facet normal -0.853386 -0.52128 0
outer loop
- vertex 4.32553 28.4461 -0.1
+ vertex 4.32553 28.4461 -0.2
vertex 4.09087 28.8303 0
- vertex 4.09087 28.8303 -0.1
+ vertex 4.09087 28.8303 -0.2
endloop
endfacet
facet normal -0.853386 -0.52128 0
outer loop
vertex 4.09087 28.8303 0
- vertex 4.32553 28.4461 -0.1
+ vertex 4.32553 28.4461 -0.2
vertex 4.32553 28.4461 0
endloop
endfacet
facet normal -0.837817 -0.545951 0
outer loop
- vertex 4.69711 27.8759 -0.1
+ vertex 4.69711 27.8759 -0.2
vertex 4.32553 28.4461 0
- vertex 4.32553 28.4461 -0.1
+ vertex 4.32553 28.4461 -0.2
endloop
endfacet
facet normal -0.837817 -0.545951 0
outer loop
vertex 4.32553 28.4461 0
- vertex 4.69711 27.8759 -0.1
+ vertex 4.69711 27.8759 -0.2
vertex 4.69711 27.8759 0
endloop
endfacet
facet normal -0.807831 -0.589415 0
outer loop
- vertex 5.05276 27.3884 -0.1
+ vertex 5.05276 27.3884 -0.2
vertex 4.69711 27.8759 0
- vertex 4.69711 27.8759 -0.1
+ vertex 4.69711 27.8759 -0.2
endloop
endfacet
facet normal -0.807831 -0.589415 0
outer loop
vertex 4.69711 27.8759 0
- vertex 5.05276 27.3884 -0.1
+ vertex 5.05276 27.3884 -0.2
vertex 5.05276 27.3884 0
endloop
endfacet
facet normal -0.764742 -0.644337 0
outer loop
- vertex 5.39739 26.9794 -0.1
+ vertex 5.39739 26.9794 -0.2
vertex 5.05276 27.3884 0
- vertex 5.05276 27.3884 -0.1
+ vertex 5.05276 27.3884 -0.2
endloop
endfacet
facet normal -0.764742 -0.644337 0
outer loop
vertex 5.05276 27.3884 0
- vertex 5.39739 26.9794 -0.1
+ vertex 5.39739 26.9794 -0.2
vertex 5.39739 26.9794 0
endloop
endfacet
facet normal -0.703379 -0.710815 0
outer loop
- vertex 5.39739 26.9794 -0.1
+ vertex 5.39739 26.9794 -0.2
vertex 5.73586 26.6445 0
vertex 5.39739 26.9794 0
endloop
@@ -30375,13 +30375,13 @@ solid OpenSCAD_Model
facet normal -0.703379 -0.710815 -0
outer loop
vertex 5.73586 26.6445 0
- vertex 5.39739 26.9794 -0.1
- vertex 5.73586 26.6445 -0.1
+ vertex 5.39739 26.9794 -0.2
+ vertex 5.73586 26.6445 -0.2
endloop
endfacet
facet normal -0.618154 -0.786057 0
outer loop
- vertex 5.73586 26.6445 -0.1
+ vertex 5.73586 26.6445 -0.2
vertex 6.07308 26.3793 0
vertex 5.73586 26.6445 0
endloop
@@ -30389,13 +30389,13 @@ solid OpenSCAD_Model
facet normal -0.618154 -0.786057 -0
outer loop
vertex 6.07308 26.3793 0
- vertex 5.73586 26.6445 -0.1
- vertex 6.07308 26.3793 -0.1
+ vertex 5.73586 26.6445 -0.2
+ vertex 6.07308 26.3793 -0.2
endloop
endfacet
facet normal -0.505671 -0.862726 0
outer loop
- vertex 6.07308 26.3793 -0.1
+ vertex 6.07308 26.3793 -0.2
vertex 6.41393 26.1795 0
vertex 6.07308 26.3793 0
endloop
@@ -30403,13 +30403,13 @@ solid OpenSCAD_Model
facet normal -0.505671 -0.862726 -0
outer loop
vertex 6.41393 26.1795 0
- vertex 6.07308 26.3793 -0.1
- vertex 6.41393 26.1795 -0.1
+ vertex 6.07308 26.3793 -0.2
+ vertex 6.41393 26.1795 -0.2
endloop
endfacet
facet normal -0.369033 -0.929416 0
outer loop
- vertex 6.41393 26.1795 -0.1
+ vertex 6.41393 26.1795 -0.2
vertex 6.76329 26.0408 0
vertex 6.41393 26.1795 0
endloop
@@ -30417,13 +30417,13 @@ solid OpenSCAD_Model
facet normal -0.369033 -0.929416 -0
outer loop
vertex 6.76329 26.0408 0
- vertex 6.41393 26.1795 -0.1
- vertex 6.76329 26.0408 -0.1
+ vertex 6.41393 26.1795 -0.2
+ vertex 6.76329 26.0408 -0.2
endloop
endfacet
facet normal -0.220456 -0.975397 0
outer loop
- vertex 6.76329 26.0408 -0.1
+ vertex 6.76329 26.0408 -0.2
vertex 7.12606 25.9588 0
vertex 6.76329 26.0408 0
endloop
@@ -30431,13 +30431,13 @@ solid OpenSCAD_Model
facet normal -0.220456 -0.975397 -0
outer loop
vertex 7.12606 25.9588 0
- vertex 6.76329 26.0408 -0.1
- vertex 7.12606 25.9588 -0.1
+ vertex 6.76329 26.0408 -0.2
+ vertex 7.12606 25.9588 -0.2
endloop
endfacet
facet normal -0.188841 -0.982008 0
outer loop
- vertex 7.12606 25.9588 -0.1
+ vertex 7.12606 25.9588 -0.2
vertex 7.55919 25.8755 0
vertex 7.12606 25.9588 0
endloop
@@ -30445,13 +30445,13 @@ solid OpenSCAD_Model
facet normal -0.188841 -0.982008 -0
outer loop
vertex 7.55919 25.8755 0
- vertex 7.12606 25.9588 -0.1
- vertex 7.55919 25.8755 -0.1
+ vertex 7.12606 25.9588 -0.2
+ vertex 7.55919 25.8755 -0.2
endloop
endfacet
facet normal -0.317419 -0.948285 0
outer loop
- vertex 7.55919 25.8755 -0.1
+ vertex 7.55919 25.8755 -0.2
vertex 7.92584 25.7528 0
vertex 7.55919 25.8755 0
endloop
@@ -30459,13 +30459,13 @@ solid OpenSCAD_Model
facet normal -0.317419 -0.948285 -0
outer loop
vertex 7.92584 25.7528 0
- vertex 7.55919 25.8755 -0.1
- vertex 7.92584 25.7528 -0.1
+ vertex 7.55919 25.8755 -0.2
+ vertex 7.92584 25.7528 -0.2
endloop
endfacet
facet normal -0.448547 -0.893759 0
outer loop
- vertex 7.92584 25.7528 -0.1
+ vertex 7.92584 25.7528 -0.2
vertex 8.08977 25.6705 0
vertex 7.92584 25.7528 0
endloop
@@ -30473,13 +30473,13 @@ solid OpenSCAD_Model
facet normal -0.448547 -0.893759 -0
outer loop
vertex 8.08977 25.6705 0
- vertex 7.92584 25.7528 -0.1
- vertex 8.08977 25.6705 -0.1
+ vertex 7.92584 25.7528 -0.2
+ vertex 8.08977 25.6705 -0.2
endloop
endfacet
facet normal -0.542679 -0.83994 0
outer loop
- vertex 8.08977 25.6705 -0.1
+ vertex 8.08977 25.6705 -0.2
vertex 8.24373 25.571 0
vertex 8.08977 25.6705 0
endloop
@@ -30487,13 +30487,13 @@ solid OpenSCAD_Model
facet normal -0.542679 -0.83994 -0
outer loop
vertex 8.24373 25.571 0
- vertex 8.08977 25.6705 -0.1
- vertex 8.24373 25.571 -0.1
+ vertex 8.08977 25.6705 -0.2
+ vertex 8.24373 25.571 -0.2
endloop
endfacet
facet normal -0.63165 -0.775254 0
outer loop
- vertex 8.24373 25.571 -0.1
+ vertex 8.24373 25.571 -0.2
vertex 8.38993 25.4519 0
vertex 8.24373 25.571 0
endloop
@@ -30501,195 +30501,195 @@ solid OpenSCAD_Model
facet normal -0.63165 -0.775254 -0
outer loop
vertex 8.38993 25.4519 0
- vertex 8.24373 25.571 -0.1
- vertex 8.38993 25.4519 -0.1
+ vertex 8.24373 25.571 -0.2
+ vertex 8.38993 25.4519 -0.2
endloop
endfacet
facet normal -0.708493 -0.705718 0
outer loop
- vertex 8.53058 25.3107 -0.1
+ vertex 8.53058 25.3107 -0.2
vertex 8.38993 25.4519 0
- vertex 8.38993 25.4519 -0.1
+ vertex 8.38993 25.4519 -0.2
endloop
endfacet
facet normal -0.708493 -0.705718 0
outer loop
vertex 8.38993 25.4519 0
- vertex 8.53058 25.3107 -0.1
+ vertex 8.53058 25.3107 -0.2
vertex 8.53058 25.3107 0
endloop
endfacet
facet normal -0.770043 -0.637991 0
outer loop
- vertex 8.6679 25.145 -0.1
+ vertex 8.6679 25.145 -0.2
vertex 8.53058 25.3107 0
- vertex 8.53058 25.3107 -0.1
+ vertex 8.53058 25.3107 -0.2
endloop
endfacet
facet normal -0.770043 -0.637991 0
outer loop
vertex 8.53058 25.3107 0
- vertex 8.6679 25.145 -0.1
+ vertex 8.6679 25.145 -0.2
vertex 8.6679 25.145 0
endloop
endfacet
facet normal -0.816637 -0.577152 0
outer loop
- vertex 8.80411 24.9522 -0.1
+ vertex 8.80411 24.9522 -0.2
vertex 8.6679 25.145 0
- vertex 8.6679 25.145 -0.1
+ vertex 8.6679 25.145 -0.2
endloop
endfacet
facet normal -0.816637 -0.577152 0
outer loop
vertex 8.6679 25.145 0
- vertex 8.80411 24.9522 -0.1
+ vertex 8.80411 24.9522 -0.2
vertex 8.80411 24.9522 0
endloop
endfacet
facet normal -0.863652 -0.504088 0
outer loop
- vertex 9.08206 24.476 -0.1
+ vertex 9.08206 24.476 -0.2
vertex 8.80411 24.9522 0
- vertex 8.80411 24.9522 -0.1
+ vertex 8.80411 24.9522 -0.2
endloop
endfacet
facet normal -0.863652 -0.504088 0
outer loop
vertex 8.80411 24.9522 0
- vertex 9.08206 24.476 -0.1
+ vertex 9.08206 24.476 -0.2
vertex 9.08206 24.476 0
endloop
endfacet
facet normal -0.8983 -0.439382 0
outer loop
- vertex 9.38213 23.8626 -0.1
+ vertex 9.38213 23.8626 -0.2
vertex 9.08206 24.476 0
- vertex 9.08206 24.476 -0.1
+ vertex 9.08206 24.476 -0.2
endloop
endfacet
facet normal -0.8983 -0.439382 0
outer loop
vertex 9.08206 24.476 0
- vertex 9.38213 23.8626 -0.1
+ vertex 9.38213 23.8626 -0.2
vertex 9.38213 23.8626 0
endloop
endfacet
facet normal -0.914889 -0.403706 0
outer loop
- vertex 9.72206 23.0922 -0.1
+ vertex 9.72206 23.0922 -0.2
vertex 9.38213 23.8626 0
- vertex 9.38213 23.8626 -0.1
+ vertex 9.38213 23.8626 -0.2
endloop
endfacet
facet normal -0.914889 -0.403706 0
outer loop
vertex 9.38213 23.8626 0
- vertex 9.72206 23.0922 -0.1
+ vertex 9.72206 23.0922 -0.2
vertex 9.72206 23.0922 0
endloop
endfacet
facet normal -0.916786 -0.399379 0
outer loop
- vertex 10.0801 22.2703 -0.1
+ vertex 10.0801 22.2703 -0.2
vertex 9.72206 23.0922 0
- vertex 9.72206 23.0922 -0.1
+ vertex 9.72206 23.0922 -0.2
endloop
endfacet
facet normal -0.916786 -0.399379 0
outer loop
vertex 9.72206 23.0922 0
- vertex 10.0801 22.2703 -0.1
+ vertex 10.0801 22.2703 -0.2
vertex 10.0801 22.2703 0
endloop
endfacet
facet normal -0.906506 -0.422192 0
outer loop
- vertex 10.3935 21.5973 -0.1
+ vertex 10.3935 21.5973 -0.2
vertex 10.0801 22.2703 0
- vertex 10.0801 22.2703 -0.1
+ vertex 10.0801 22.2703 -0.2
endloop
endfacet
facet normal -0.906506 -0.422192 0
outer loop
vertex 10.0801 22.2703 0
- vertex 10.3935 21.5973 -0.1
+ vertex 10.3935 21.5973 -0.2
vertex 10.3935 21.5973 0
endloop
endfacet
facet normal -0.886025 -0.463638 0
outer loop
- vertex 10.6869 21.0368 -0.1
+ vertex 10.6869 21.0368 -0.2
vertex 10.3935 21.5973 0
- vertex 10.3935 21.5973 -0.1
+ vertex 10.3935 21.5973 -0.2
endloop
endfacet
facet normal -0.886025 -0.463638 0
outer loop
vertex 10.3935 21.5973 0
- vertex 10.6869 21.0368 -0.1
+ vertex 10.6869 21.0368 -0.2
vertex 10.6869 21.0368 0
endloop
endfacet
facet normal -0.852053 -0.523456 0
outer loop
- vertex 10.9846 20.5521 -0.1
+ vertex 10.9846 20.5521 -0.2
vertex 10.6869 21.0368 0
- vertex 10.6869 21.0368 -0.1
+ vertex 10.6869 21.0368 -0.2
endloop
endfacet
facet normal -0.852053 -0.523456 0
outer loop
vertex 10.6869 21.0368 0
- vertex 10.9846 20.5521 -0.1
+ vertex 10.9846 20.5521 -0.2
vertex 10.9846 20.5521 0
endloop
endfacet
facet normal -0.806267 -0.591552 0
outer loop
- vertex 11.3113 20.1069 -0.1
+ vertex 11.3113 20.1069 -0.2
vertex 10.9846 20.5521 0
- vertex 10.9846 20.5521 -0.1
+ vertex 10.9846 20.5521 -0.2
endloop
endfacet
facet normal -0.806267 -0.591552 0
outer loop
vertex 10.9846 20.5521 0
- vertex 11.3113 20.1069 -0.1
+ vertex 11.3113 20.1069 -0.2
vertex 11.3113 20.1069 0
endloop
endfacet
facet normal -0.758443 -0.65174 0
outer loop
- vertex 11.6914 19.6646 -0.1
+ vertex 11.6914 19.6646 -0.2
vertex 11.3113 20.1069 0
- vertex 11.3113 20.1069 -0.1
+ vertex 11.3113 20.1069 -0.2
endloop
endfacet
facet normal -0.758443 -0.65174 0
outer loop
vertex 11.3113 20.1069 0
- vertex 11.6914 19.6646 -0.1
+ vertex 11.6914 19.6646 -0.2
vertex 11.6914 19.6646 0
endloop
endfacet
facet normal -0.720518 -0.693437 0
outer loop
- vertex 12.1494 19.1886 -0.1
+ vertex 12.1494 19.1886 -0.2
vertex 11.6914 19.6646 0
- vertex 11.6914 19.6646 -0.1
+ vertex 11.6914 19.6646 -0.2
endloop
endfacet
facet normal -0.720518 -0.693437 0
outer loop
vertex 11.6914 19.6646 0
- vertex 12.1494 19.1886 -0.1
+ vertex 12.1494 19.1886 -0.2
vertex 12.1494 19.1886 0
endloop
endfacet
facet normal -0.697808 -0.716285 0
outer loop
- vertex 12.1494 19.1886 -0.1
+ vertex 12.1494 19.1886 -0.2
vertex 12.71 18.6425 0
vertex 12.1494 19.1886 0
endloop
@@ -30697,13 +30697,13 @@ solid OpenSCAD_Model
facet normal -0.697808 -0.716285 -0
outer loop
vertex 12.71 18.6425 0
- vertex 12.1494 19.1886 -0.1
- vertex 12.71 18.6425 -0.1
+ vertex 12.1494 19.1886 -0.2
+ vertex 12.71 18.6425 -0.2
endloop
endfacet
facet normal -0.680991 -0.732292 0
outer loop
- vertex 12.71 18.6425 -0.1
+ vertex 12.71 18.6425 -0.2
vertex 13.3813 18.0182 0
vertex 12.71 18.6425 0
endloop
@@ -30711,13 +30711,13 @@ solid OpenSCAD_Model
facet normal -0.680991 -0.732292 -0
outer loop
vertex 13.3813 18.0182 0
- vertex 12.71 18.6425 -0.1
- vertex 13.3813 18.0182 -0.1
+ vertex 12.71 18.6425 -0.2
+ vertex 13.3813 18.0182 -0.2
endloop
endfacet
facet normal -0.650845 -0.759211 0
outer loop
- vertex 13.3813 18.0182 -0.1
+ vertex 13.3813 18.0182 -0.2
vertex 14.0017 17.4864 0
vertex 13.3813 18.0182 0
endloop
@@ -30725,13 +30725,13 @@ solid OpenSCAD_Model
facet normal -0.650845 -0.759211 -0
outer loop
vertex 14.0017 17.4864 0
- vertex 13.3813 18.0182 -0.1
- vertex 14.0017 17.4864 -0.1
+ vertex 13.3813 18.0182 -0.2
+ vertex 14.0017 17.4864 -0.2
endloop
endfacet
facet normal -0.606609 -0.795001 0
outer loop
- vertex 14.0017 17.4864 -0.1
+ vertex 14.0017 17.4864 -0.2
vertex 14.6028 17.0277 0
vertex 14.0017 17.4864 0
endloop
@@ -30739,13 +30739,13 @@ solid OpenSCAD_Model
facet normal -0.606609 -0.795001 -0
outer loop
vertex 14.6028 17.0277 0
- vertex 14.0017 17.4864 -0.1
- vertex 14.6028 17.0277 -0.1
+ vertex 14.0017 17.4864 -0.2
+ vertex 14.6028 17.0277 -0.2
endloop
endfacet
facet normal -0.550734 -0.834681 0
outer loop
- vertex 14.6028 17.0277 -0.1
+ vertex 14.6028 17.0277 -0.2
vertex 15.2162 16.623 0
vertex 14.6028 17.0277 0
endloop
@@ -30753,13 +30753,13 @@ solid OpenSCAD_Model
facet normal -0.550734 -0.834681 -0
outer loop
vertex 15.2162 16.623 0
- vertex 14.6028 17.0277 -0.1
- vertex 15.2162 16.623 -0.1
+ vertex 14.6028 17.0277 -0.2
+ vertex 15.2162 16.623 -0.2
endloop
endfacet
facet normal -0.490625 -0.871371 0
outer loop
- vertex 15.2162 16.623 -0.1
+ vertex 15.2162 16.623 -0.2
vertex 15.8738 16.2527 0
vertex 15.2162 16.623 0
endloop
@@ -30767,13 +30767,13 @@ solid OpenSCAD_Model
facet normal -0.490625 -0.871371 -0
outer loop
vertex 15.8738 16.2527 0
- vertex 15.2162 16.623 -0.1
- vertex 15.8738 16.2527 -0.1
+ vertex 15.2162 16.623 -0.2
+ vertex 15.8738 16.2527 -0.2
endloop
endfacet
facet normal -0.435747 -0.900069 0
outer loop
- vertex 15.8738 16.2527 -0.1
+ vertex 15.8738 16.2527 -0.2
vertex 16.6072 15.8977 0
vertex 15.8738 16.2527 0
endloop
@@ -30781,13 +30781,13 @@ solid OpenSCAD_Model
facet normal -0.435747 -0.900069 -0
outer loop
vertex 16.6072 15.8977 0
- vertex 15.8738 16.2527 -0.1
- vertex 16.6072 15.8977 -0.1
+ vertex 15.8738 16.2527 -0.2
+ vertex 16.6072 15.8977 -0.2
endloop
endfacet
facet normal -0.392812 -0.919619 0
outer loop
- vertex 16.6072 15.8977 -0.1
+ vertex 16.6072 15.8977 -0.2
vertex 17.448 15.5385 0
vertex 16.6072 15.8977 0
endloop
@@ -30795,13 +30795,13 @@ solid OpenSCAD_Model
facet normal -0.392812 -0.919619 -0
outer loop
vertex 17.448 15.5385 0
- vertex 16.6072 15.8977 -0.1
- vertex 17.448 15.5385 -0.1
+ vertex 16.6072 15.8977 -0.2
+ vertex 17.448 15.5385 -0.2
endloop
endfacet
facet normal -0.36368 -0.931524 0
outer loop
- vertex 17.448 15.5385 -0.1
+ vertex 17.448 15.5385 -0.2
vertex 18.4281 15.1559 0
vertex 17.448 15.5385 0
endloop
@@ -30809,13 +30809,13 @@ solid OpenSCAD_Model
facet normal -0.36368 -0.931524 -0
outer loop
vertex 18.4281 15.1559 0
- vertex 17.448 15.5385 -0.1
- vertex 18.4281 15.1559 -0.1
+ vertex 17.448 15.5385 -0.2
+ vertex 18.4281 15.1559 -0.2
endloop
endfacet
facet normal -0.343445 -0.939173 0
outer loop
- vertex 18.4281 15.1559 -0.1
+ vertex 18.4281 15.1559 -0.2
vertex 19.4469 14.7833 0
vertex 18.4281 15.1559 0
endloop
@@ -30823,13 +30823,13 @@ solid OpenSCAD_Model
facet normal -0.343445 -0.939173 -0
outer loop
vertex 19.4469 14.7833 0
- vertex 18.4281 15.1559 -0.1
- vertex 19.4469 14.7833 -0.1
+ vertex 18.4281 15.1559 -0.2
+ vertex 19.4469 14.7833 -0.2
endloop
endfacet
facet normal -0.28492 -0.958551 0
outer loop
- vertex 19.4469 14.7833 -0.1
+ vertex 19.4469 14.7833 -0.2
vertex 19.7955 14.6797 0
vertex 19.4469 14.7833 0
endloop
@@ -30837,13 +30837,13 @@ solid OpenSCAD_Model
facet normal -0.28492 -0.958551 -0
outer loop
vertex 19.7955 14.6797 0
- vertex 19.4469 14.7833 -0.1
- vertex 19.7955 14.6797 -0.1
+ vertex 19.4469 14.7833 -0.2
+ vertex 19.7955 14.6797 -0.2
endloop
endfacet
facet normal -0.184649 -0.982804 0
outer loop
- vertex 19.7955 14.6797 -0.1
+ vertex 19.7955 14.6797 -0.2
vertex 20.0785 14.6265 0
vertex 19.7955 14.6797 0
endloop
@@ -30851,13 +30851,13 @@ solid OpenSCAD_Model
facet normal -0.184649 -0.982804 -0
outer loop
vertex 20.0785 14.6265 0
- vertex 19.7955 14.6797 -0.1
- vertex 20.0785 14.6265 -0.1
+ vertex 19.7955 14.6797 -0.2
+ vertex 20.0785 14.6265 -0.2
endloop
endfacet
facet normal -0.024894 -0.99969 0
outer loop
- vertex 20.0785 14.6265 -0.1
+ vertex 20.0785 14.6265 -0.2
vertex 20.327 14.6203 0
vertex 20.0785 14.6265 0
endloop
@@ -30865,13 +30865,13 @@ solid OpenSCAD_Model
facet normal -0.024894 -0.99969 -0
outer loop
vertex 20.327 14.6203 0
- vertex 20.0785 14.6265 -0.1
- vertex 20.327 14.6203 -0.1
+ vertex 20.0785 14.6265 -0.2
+ vertex 20.327 14.6203 -0.2
endloop
endfacet
facet normal 0.150471 -0.988614 0
outer loop
- vertex 20.327 14.6203 -0.1
+ vertex 20.327 14.6203 -0.2
vertex 20.5722 14.6577 0
vertex 20.327 14.6203 0
endloop
@@ -30879,13 +30879,13 @@ solid OpenSCAD_Model
facet normal 0.150471 -0.988614 0
outer loop
vertex 20.5722 14.6577 0
- vertex 20.327 14.6203 -0.1
- vertex 20.5722 14.6577 -0.1
+ vertex 20.327 14.6203 -0.2
+ vertex 20.5722 14.6577 -0.2
endloop
endfacet
facet normal 0.272592 -0.96213 0
outer loop
- vertex 20.5722 14.6577 -0.1
+ vertex 20.5722 14.6577 -0.2
vertex 20.8452 14.735 0
vertex 20.5722 14.6577 0
endloop
@@ -30893,13 +30893,13 @@ solid OpenSCAD_Model
facet normal 0.272592 -0.96213 0
outer loop
vertex 20.8452 14.735 0
- vertex 20.5722 14.6577 -0.1
- vertex 20.8452 14.735 -0.1
+ vertex 20.5722 14.6577 -0.2
+ vertex 20.8452 14.735 -0.2
endloop
endfacet
facet normal 0.32454 -0.945872 0
outer loop
- vertex 20.8452 14.735 -0.1
+ vertex 20.8452 14.735 -0.2
vertex 21.1771 14.8489 0
vertex 20.8452 14.735 0
endloop
@@ -30907,13 +30907,13 @@ solid OpenSCAD_Model
facet normal 0.32454 -0.945872 0
outer loop
vertex 21.1771 14.8489 0
- vertex 20.8452 14.735 -0.1
- vertex 21.1771 14.8489 -0.1
+ vertex 20.8452 14.735 -0.2
+ vertex 21.1771 14.8489 -0.2
endloop
endfacet
facet normal 0.357547 -0.933895 0
outer loop
- vertex 21.1771 14.8489 -0.1
+ vertex 21.1771 14.8489 -0.2
vertex 21.6737 15.039 0
vertex 21.1771 14.8489 0
endloop
@@ -30921,13 +30921,13 @@ solid OpenSCAD_Model
facet normal 0.357547 -0.933895 0
outer loop
vertex 21.6737 15.039 0
- vertex 21.1771 14.8489 -0.1
- vertex 21.6737 15.039 -0.1
+ vertex 21.1771 14.8489 -0.2
+ vertex 21.6737 15.039 -0.2
endloop
endfacet
facet normal 0.392507 -0.919749 0
outer loop
- vertex 21.6737 15.039 -0.1
+ vertex 21.6737 15.039 -0.2
vertex 22.2336 15.278 0
vertex 21.6737 15.039 0
endloop
@@ -30935,13 +30935,13 @@ solid OpenSCAD_Model
facet normal 0.392507 -0.919749 0
outer loop
vertex 22.2336 15.278 0
- vertex 21.6737 15.039 -0.1
- vertex 22.2336 15.278 -0.1
+ vertex 21.6737 15.039 -0.2
+ vertex 22.2336 15.278 -0.2
endloop
endfacet
facet normal 0.427814 -0.903867 0
outer loop
- vertex 22.2336 15.278 -0.1
+ vertex 22.2336 15.278 -0.2
vertex 23.3919 15.8262 0
vertex 22.2336 15.278 0
endloop
@@ -30949,13 +30949,13 @@ solid OpenSCAD_Model
facet normal 0.427814 -0.903867 0
outer loop
vertex 23.3919 15.8262 0
- vertex 22.2336 15.278 -0.1
- vertex 23.3919 15.8262 -0.1
+ vertex 22.2336 15.278 -0.2
+ vertex 23.3919 15.8262 -0.2
endloop
endfacet
facet normal 0.460603 -0.887606 0
outer loop
- vertex 23.3919 15.8262 -0.1
+ vertex 23.3919 15.8262 -0.2
vertex 23.9148 16.0975 0
vertex 23.3919 15.8262 0
endloop
@@ -30963,13 +30963,13 @@ solid OpenSCAD_Model
facet normal 0.460603 -0.887606 0
outer loop
vertex 23.9148 16.0975 0
- vertex 23.3919 15.8262 -0.1
- vertex 23.9148 16.0975 -0.1
+ vertex 23.3919 15.8262 -0.2
+ vertex 23.9148 16.0975 -0.2
endloop
endfacet
facet normal 0.489467 -0.872022 0
outer loop
- vertex 23.9148 16.0975 -0.1
+ vertex 23.9148 16.0975 -0.2
vertex 24.3498 16.3417 0
vertex 23.9148 16.0975 0
endloop
@@ -30977,13 +30977,13 @@ solid OpenSCAD_Model
facet normal 0.489467 -0.872022 0
outer loop
vertex 24.3498 16.3417 0
- vertex 23.9148 16.0975 -0.1
- vertex 24.3498 16.3417 -0.1
+ vertex 23.9148 16.0975 -0.2
+ vertex 24.3498 16.3417 -0.2
endloop
endfacet
facet normal 0.539107 -0.842237 0
outer loop
- vertex 24.3498 16.3417 -0.1
+ vertex 24.3498 16.3417 -0.2
vertex 24.659 16.5397 0
vertex 24.3498 16.3417 0
endloop
@@ -30991,13 +30991,13 @@ solid OpenSCAD_Model
facet normal 0.539107 -0.842237 0
outer loop
vertex 24.659 16.5397 0
- vertex 24.3498 16.3417 -0.1
- vertex 24.659 16.5397 -0.1
+ vertex 24.3498 16.3417 -0.2
+ vertex 24.659 16.5397 -0.2
endloop
endfacet
facet normal 0.620549 -0.784168 0
outer loop
- vertex 24.659 16.5397 -0.1
+ vertex 24.659 16.5397 -0.2
vertex 24.7548 16.6154 0
vertex 24.659 16.5397 0
endloop
@@ -31005,97 +31005,97 @@ solid OpenSCAD_Model
facet normal 0.620549 -0.784168 0
outer loop
vertex 24.7548 16.6154 0
- vertex 24.659 16.5397 -0.1
- vertex 24.7548 16.6154 -0.1
+ vertex 24.659 16.5397 -0.2
+ vertex 24.7548 16.6154 -0.2
endloop
endfacet
facet normal 0.751376 -0.659874 0
outer loop
vertex 24.7548 16.6154 0
- vertex 24.8049 16.6725 -0.1
+ vertex 24.8049 16.6725 -0.2
vertex 24.8049 16.6725 0
endloop
endfacet
facet normal 0.751376 -0.659874 0
outer loop
- vertex 24.8049 16.6725 -0.1
+ vertex 24.8049 16.6725 -0.2
vertex 24.7548 16.6154 0
- vertex 24.7548 16.6154 -0.1
+ vertex 24.7548 16.6154 -0.2
endloop
endfacet
facet normal 0.968195 -0.250195 0
outer loop
vertex 24.8049 16.6725 0
- vertex 24.8294 16.7672 -0.1
+ vertex 24.8294 16.7672 -0.2
vertex 24.8294 16.7672 0
endloop
endfacet
facet normal 0.968195 -0.250195 0
outer loop
- vertex 24.8294 16.7672 -0.1
+ vertex 24.8294 16.7672 -0.2
vertex 24.8049 16.6725 0
- vertex 24.8049 16.6725 -0.1
+ vertex 24.8049 16.6725 -0.2
endloop
endfacet
facet normal 0.998807 0.0488365 0
outer loop
vertex 24.8294 16.7672 0
- vertex 24.8232 16.8925 -0.1
+ vertex 24.8232 16.8925 -0.2
vertex 24.8232 16.8925 0
endloop
endfacet
facet normal 0.998807 0.0488365 0
outer loop
- vertex 24.8232 16.8925 -0.1
+ vertex 24.8232 16.8925 -0.2
vertex 24.8294 16.7672 0
- vertex 24.8294 16.7672 -0.1
+ vertex 24.8294 16.7672 -0.2
endloop
endfacet
facet normal 0.971162 0.23842 0
outer loop
vertex 24.8232 16.8925 0
- vertex 24.789 17.0321 -0.1
+ vertex 24.789 17.0321 -0.2
vertex 24.789 17.0321 0
endloop
endfacet
facet normal 0.971162 0.23842 0
outer loop
- vertex 24.789 17.0321 -0.1
+ vertex 24.789 17.0321 -0.2
vertex 24.8232 16.8925 0
- vertex 24.8232 16.8925 -0.1
+ vertex 24.8232 16.8925 -0.2
endloop
endfacet
facet normal 0.916748 0.399467 0
outer loop
vertex 24.789 17.0321 0
- vertex 24.7291 17.1695 -0.1
+ vertex 24.7291 17.1695 -0.2
vertex 24.7291 17.1695 0
endloop
endfacet
facet normal 0.916748 0.399467 0
outer loop
- vertex 24.7291 17.1695 -0.1
+ vertex 24.7291 17.1695 -0.2
vertex 24.789 17.0321 0
- vertex 24.789 17.0321 -0.1
+ vertex 24.789 17.0321 -0.2
endloop
endfacet
facet normal 0.771083 0.636734 0
outer loop
vertex 24.7291 17.1695 0
- vertex 24.6602 17.253 -0.1
+ vertex 24.6602 17.253 -0.2
vertex 24.6602 17.253 0
endloop
endfacet
facet normal 0.771083 0.636734 0
outer loop
- vertex 24.6602 17.253 -0.1
+ vertex 24.6602 17.253 -0.2
vertex 24.7291 17.1695 0
- vertex 24.7291 17.1695 -0.1
+ vertex 24.7291 17.1695 -0.2
endloop
endfacet
facet normal 0.526106 0.850419 -0
outer loop
- vertex 24.6602 17.253 -0.1
+ vertex 24.6602 17.253 -0.2
vertex 24.5483 17.3222 0
vertex 24.6602 17.253 0
endloop
@@ -31103,13 +31103,13 @@ solid OpenSCAD_Model
facet normal 0.526106 0.850419 0
outer loop
vertex 24.5483 17.3222 0
- vertex 24.6602 17.253 -0.1
- vertex 24.5483 17.3222 -0.1
+ vertex 24.6602 17.253 -0.2
+ vertex 24.5483 17.3222 -0.2
endloop
endfacet
facet normal 0.326655 0.945144 -0
outer loop
- vertex 24.5483 17.3222 -0.1
+ vertex 24.5483 17.3222 -0.2
vertex 24.386 17.3783 0
vertex 24.5483 17.3222 0
endloop
@@ -31117,13 +31117,13 @@ solid OpenSCAD_Model
facet normal 0.326655 0.945144 0
outer loop
vertex 24.386 17.3783 0
- vertex 24.5483 17.3222 -0.1
- vertex 24.386 17.3783 -0.1
+ vertex 24.5483 17.3222 -0.2
+ vertex 24.386 17.3783 -0.2
endloop
endfacet
facet normal 0.19643 0.980518 -0
outer loop
- vertex 24.386 17.3783 -0.1
+ vertex 24.386 17.3783 -0.2
vertex 24.166 17.4223 0
vertex 24.386 17.3783 0
endloop
@@ -31131,13 +31131,13 @@ solid OpenSCAD_Model
facet normal 0.19643 0.980518 0
outer loop
vertex 24.166 17.4223 0
- vertex 24.386 17.3783 -0.1
- vertex 24.166 17.4223 -0.1
+ vertex 24.386 17.3783 -0.2
+ vertex 24.166 17.4223 -0.2
endloop
endfacet
facet normal 0.0878721 0.996132 -0
outer loop
- vertex 24.166 17.4223 -0.1
+ vertex 24.166 17.4223 -0.2
vertex 23.5226 17.4791 0
vertex 24.166 17.4223 0
endloop
@@ -31145,13 +31145,13 @@ solid OpenSCAD_Model
facet normal 0.0878721 0.996132 0
outer loop
vertex 23.5226 17.4791 0
- vertex 24.166 17.4223 -0.1
- vertex 23.5226 17.4791 -0.1
+ vertex 24.166 17.4223 -0.2
+ vertex 23.5226 17.4791 -0.2
endloop
endfacet
facet normal 0.0232768 0.999729 -0
outer loop
- vertex 23.5226 17.4791 -0.1
+ vertex 23.5226 17.4791 -0.2
vertex 22.5588 17.5015 0
vertex 23.5226 17.4791 0
endloop
@@ -31159,13 +31159,13 @@ solid OpenSCAD_Model
facet normal 0.0232768 0.999729 0
outer loop
vertex 22.5588 17.5015 0
- vertex 23.5226 17.4791 -0.1
- vertex 22.5588 17.5015 -0.1
+ vertex 23.5226 17.4791 -0.2
+ vertex 22.5588 17.5015 -0.2
endloop
endfacet
facet normal 0.0146144 0.999893 -0
outer loop
- vertex 22.5588 17.5015 -0.1
+ vertex 22.5588 17.5015 -0.2
vertex 21.0506 17.5236 0
vertex 22.5588 17.5015 0
endloop
@@ -31173,13 +31173,13 @@ solid OpenSCAD_Model
facet normal 0.0146144 0.999893 0
outer loop
vertex 21.0506 17.5236 0
- vertex 22.5588 17.5015 -0.1
- vertex 21.0506 17.5236 -0.1
+ vertex 22.5588 17.5015 -0.2
+ vertex 21.0506 17.5236 -0.2
endloop
endfacet
facet normal 0.0395978 0.999216 -0
outer loop
- vertex 21.0506 17.5236 -0.1
+ vertex 21.0506 17.5236 -0.2
vertex 20.2276 17.5562 0
vertex 21.0506 17.5236 0
endloop
@@ -31187,13 +31187,13 @@ solid OpenSCAD_Model
facet normal 0.0395978 0.999216 0
outer loop
vertex 20.2276 17.5562 0
- vertex 21.0506 17.5236 -0.1
- vertex 20.2276 17.5562 -0.1
+ vertex 21.0506 17.5236 -0.2
+ vertex 20.2276 17.5562 -0.2
endloop
endfacet
facet normal 0.211618 0.977352 -0
outer loop
- vertex 20.2276 17.5562 -0.1
+ vertex 20.2276 17.5562 -0.2
vertex 20.1284 17.5777 0
vertex 20.2276 17.5562 0
endloop
@@ -31201,13 +31201,13 @@ solid OpenSCAD_Model
facet normal 0.211618 0.977352 0
outer loop
vertex 20.1284 17.5777 0
- vertex 20.2276 17.5562 -0.1
- vertex 20.1284 17.5777 -0.1
+ vertex 20.2276 17.5562 -0.2
+ vertex 20.1284 17.5777 -0.2
endloop
endfacet
facet normal 0.390006 0.920812 -0
outer loop
- vertex 20.1284 17.5777 -0.1
+ vertex 20.1284 17.5777 -0.2
vertex 20.0333 17.6179 0
vertex 20.1284 17.5777 0
endloop
@@ -31215,13 +31215,13 @@ solid OpenSCAD_Model
facet normal 0.390006 0.920812 0
outer loop
vertex 20.0333 17.6179 0
- vertex 20.1284 17.5777 -0.1
- vertex 20.0333 17.6179 -0.1
+ vertex 20.1284 17.5777 -0.2
+ vertex 20.0333 17.6179 -0.2
endloop
endfacet
facet normal 0.545234 0.838284 -0
outer loop
- vertex 20.0333 17.6179 -0.1
+ vertex 20.0333 17.6179 -0.2
vertex 19.9424 17.6771 0
vertex 20.0333 17.6179 0
endloop
@@ -31229,13 +31229,13 @@ solid OpenSCAD_Model
facet normal 0.545234 0.838284 0
outer loop
vertex 19.9424 17.6771 0
- vertex 20.0333 17.6179 -0.1
- vertex 19.9424 17.6771 -0.1
+ vertex 20.0333 17.6179 -0.2
+ vertex 19.9424 17.6771 -0.2
endloop
endfacet
facet normal 0.668778 0.743462 -0
outer loop
- vertex 19.9424 17.6771 -0.1
+ vertex 19.9424 17.6771 -0.2
vertex 19.8554 17.7553 0
vertex 19.9424 17.6771 0
endloop
@@ -31243,167 +31243,167 @@ solid OpenSCAD_Model
facet normal 0.668778 0.743462 0
outer loop
vertex 19.8554 17.7553 0
- vertex 19.9424 17.6771 -0.1
- vertex 19.8554 17.7553 -0.1
+ vertex 19.9424 17.6771 -0.2
+ vertex 19.8554 17.7553 -0.2
endloop
endfacet
facet normal 0.797362 0.603501 0
outer loop
vertex 19.8554 17.7553 0
- vertex 19.6934 17.9694 -0.1
+ vertex 19.6934 17.9694 -0.2
vertex 19.6934 17.9694 0
endloop
endfacet
facet normal 0.797362 0.603501 0
outer loop
- vertex 19.6934 17.9694 -0.1
+ vertex 19.6934 17.9694 -0.2
vertex 19.8554 17.7553 0
- vertex 19.8554 17.7553 -0.1
+ vertex 19.8554 17.7553 -0.2
endloop
endfacet
facet normal 0.893603 0.448858 0
outer loop
vertex 19.6934 17.9694 0
- vertex 19.5469 18.2611 -0.1
+ vertex 19.5469 18.2611 -0.2
vertex 19.5469 18.2611 0
endloop
endfacet
facet normal 0.893603 0.448858 0
outer loop
- vertex 19.5469 18.2611 -0.1
+ vertex 19.5469 18.2611 -0.2
vertex 19.6934 17.9694 0
- vertex 19.6934 17.9694 -0.1
+ vertex 19.6934 17.9694 -0.2
endloop
endfacet
facet normal 0.942385 0.33453 0
outer loop
vertex 19.5469 18.2611 0
- vertex 19.4153 18.6317 -0.1
+ vertex 19.4153 18.6317 -0.2
vertex 19.4153 18.6317 0
endloop
endfacet
facet normal 0.942385 0.33453 0
outer loop
- vertex 19.4153 18.6317 -0.1
+ vertex 19.4153 18.6317 -0.2
vertex 19.5469 18.2611 0
- vertex 19.5469 18.2611 -0.1
+ vertex 19.5469 18.2611 -0.2
endloop
endfacet
facet normal 0.967894 0.251357 0
outer loop
vertex 19.4153 18.6317 0
- vertex 19.2984 19.082 -0.1
+ vertex 19.2984 19.082 -0.2
vertex 19.2984 19.082 0
endloop
endfacet
facet normal 0.967894 0.251357 0
outer loop
- vertex 19.2984 19.082 -0.1
+ vertex 19.2984 19.082 -0.2
vertex 19.4153 18.6317 0
- vertex 19.4153 18.6317 -0.1
+ vertex 19.4153 18.6317 -0.2
endloop
endfacet
facet normal 0.981784 0.190002 0
outer loop
vertex 19.2984 19.082 0
- vertex 19.1956 19.6132 -0.1
+ vertex 19.1956 19.6132 -0.2
vertex 19.1956 19.6132 0
endloop
endfacet
facet normal 0.981784 0.190002 0
outer loop
- vertex 19.1956 19.6132 -0.1
+ vertex 19.1956 19.6132 -0.2
vertex 19.2984 19.082 0
- vertex 19.2984 19.082 -0.1
+ vertex 19.2984 19.082 -0.2
endloop
endfacet
facet normal 0.989607 0.143797 0
outer loop
vertex 19.1956 19.6132 0
- vertex 19.1065 20.2262 -0.1
+ vertex 19.1065 20.2262 -0.2
vertex 19.1065 20.2262 0
endloop
endfacet
facet normal 0.989607 0.143797 0
outer loop
- vertex 19.1065 20.2262 -0.1
+ vertex 19.1065 20.2262 -0.2
vertex 19.1956 19.6132 0
- vertex 19.1956 19.6132 -0.1
+ vertex 19.1956 19.6132 -0.2
endloop
endfacet
facet normal 0.988819 0.149121 0
outer loop
vertex 19.1065 20.2262 0
- vertex 19.0081 20.8787 -0.1
+ vertex 19.0081 20.8787 -0.2
vertex 19.0081 20.8787 0
endloop
endfacet
facet normal 0.988819 0.149121 0
outer loop
- vertex 19.0081 20.8787 -0.1
+ vertex 19.0081 20.8787 -0.2
vertex 19.1065 20.2262 0
- vertex 19.1065 20.2262 -0.1
+ vertex 19.1065 20.2262 -0.2
endloop
endfacet
facet normal 0.979919 0.199398 0
outer loop
vertex 19.0081 20.8787 0
- vertex 18.892 21.4494 -0.1
+ vertex 18.892 21.4494 -0.2
vertex 18.892 21.4494 0
endloop
endfacet
facet normal 0.979919 0.199398 0
outer loop
- vertex 18.892 21.4494 -0.1
+ vertex 18.892 21.4494 -0.2
vertex 19.0081 20.8787 0
- vertex 19.0081 20.8787 -0.1
+ vertex 19.0081 20.8787 -0.2
endloop
endfacet
facet normal 0.963148 0.268972 0
outer loop
vertex 18.892 21.4494 0
- vertex 18.7726 21.8767 -0.1
+ vertex 18.7726 21.8767 -0.2
vertex 18.7726 21.8767 0
endloop
endfacet
facet normal 0.963148 0.268972 0
outer loop
- vertex 18.7726 21.8767 -0.1
+ vertex 18.7726 21.8767 -0.2
vertex 18.892 21.4494 0
- vertex 18.892 21.4494 -0.1
+ vertex 18.892 21.4494 -0.2
endloop
endfacet
facet normal 0.928333 0.371749 0
outer loop
vertex 18.7726 21.8767 0
- vertex 18.7163 22.0174 -0.1
+ vertex 18.7163 22.0174 -0.2
vertex 18.7163 22.0174 0
endloop
endfacet
facet normal 0.928333 0.371749 0
outer loop
- vertex 18.7163 22.0174 -0.1
+ vertex 18.7163 22.0174 -0.2
vertex 18.7726 21.8767 0
- vertex 18.7726 21.8767 -0.1
+ vertex 18.7726 21.8767 -0.2
endloop
endfacet
facet normal 0.845312 0.534273 0
outer loop
vertex 18.7163 22.0174 0
- vertex 18.6646 22.0992 -0.1
+ vertex 18.6646 22.0992 -0.2
vertex 18.6646 22.0992 0
endloop
endfacet
facet normal 0.845312 0.534273 0
outer loop
- vertex 18.6646 22.0992 -0.1
+ vertex 18.6646 22.0992 -0.2
vertex 18.7163 22.0174 0
- vertex 18.7163 22.0174 -0.1
+ vertex 18.7163 22.0174 -0.2
endloop
endfacet
facet normal 0.569342 0.822101 -0
outer loop
- vertex 18.6646 22.0992 -0.1
+ vertex 18.6646 22.0992 -0.2
vertex 18.4732 22.2317 0
vertex 18.6646 22.0992 0
endloop
@@ -31411,13 +31411,13 @@ solid OpenSCAD_Model
facet normal 0.569342 0.822101 0
outer loop
vertex 18.4732 22.2317 0
- vertex 18.6646 22.0992 -0.1
- vertex 18.4732 22.2317 -0.1
+ vertex 18.6646 22.0992 -0.2
+ vertex 18.4732 22.2317 -0.2
endloop
endfacet
facet normal 0.466042 0.884763 -0
outer loop
- vertex 18.4732 22.2317 -0.1
+ vertex 18.4732 22.2317 -0.2
vertex 18.127 22.4141 0
vertex 18.4732 22.2317 0
endloop
@@ -31425,13 +31425,13 @@ solid OpenSCAD_Model
facet normal 0.466042 0.884763 0
outer loop
vertex 18.127 22.4141 0
- vertex 18.4732 22.2317 -0.1
- vertex 18.127 22.4141 -0.1
+ vertex 18.4732 22.2317 -0.2
+ vertex 18.127 22.4141 -0.2
endloop
endfacet
facet normal 0.418359 0.908282 -0
outer loop
- vertex 18.127 22.4141 -0.1
+ vertex 18.127 22.4141 -0.2
vertex 17.6752 22.6222 0
vertex 18.127 22.4141 0
endloop
@@ -31439,13 +31439,13 @@ solid OpenSCAD_Model
facet normal 0.418359 0.908282 0
outer loop
vertex 17.6752 22.6222 0
- vertex 18.127 22.4141 -0.1
- vertex 17.6752 22.6222 -0.1
+ vertex 18.127 22.4141 -0.2
+ vertex 17.6752 22.6222 -0.2
endloop
endfacet
facet normal 0.381566 0.924342 -0
outer loop
- vertex 17.6752 22.6222 -0.1
+ vertex 17.6752 22.6222 -0.2
vertex 17.1667 22.8321 0
vertex 17.6752 22.6222 0
endloop
@@ -31453,13 +31453,13 @@ solid OpenSCAD_Model
facet normal 0.381566 0.924342 0
outer loop
vertex 17.1667 22.8321 0
- vertex 17.6752 22.6222 -0.1
- vertex 17.1667 22.8321 -0.1
+ vertex 17.6752 22.6222 -0.2
+ vertex 17.1667 22.8321 -0.2
endloop
endfacet
facet normal 0.375086 0.92699 -0
outer loop
- vertex 17.1667 22.8321 -0.1
+ vertex 17.1667 22.8321 -0.2
vertex 15.5173 23.4995 0
vertex 17.1667 22.8321 0
endloop
@@ -31467,13 +31467,13 @@ solid OpenSCAD_Model
facet normal 0.375086 0.92699 0
outer loop
vertex 15.5173 23.4995 0
- vertex 17.1667 22.8321 -0.1
- vertex 15.5173 23.4995 -0.1
+ vertex 17.1667 22.8321 -0.2
+ vertex 15.5173 23.4995 -0.2
endloop
endfacet
facet normal 0.401684 0.915778 -0
outer loop
- vertex 15.5173 23.4995 -0.1
+ vertex 15.5173 23.4995 -0.2
vertex 14.0281 24.1527 0
vertex 15.5173 23.4995 0
endloop
@@ -31481,13 +31481,13 @@ solid OpenSCAD_Model
facet normal 0.401684 0.915778 0
outer loop
vertex 14.0281 24.1527 0
- vertex 15.5173 23.4995 -0.1
- vertex 14.0281 24.1527 -0.1
+ vertex 15.5173 23.4995 -0.2
+ vertex 14.0281 24.1527 -0.2
endloop
endfacet
facet normal 0.431504 0.902111 -0
outer loop
- vertex 14.0281 24.1527 -0.1
+ vertex 14.0281 24.1527 -0.2
vertex 13.7923 24.2655 0
vertex 14.0281 24.1527 0
endloop
@@ -31495,13 +31495,13 @@ solid OpenSCAD_Model
facet normal 0.431504 0.902111 0
outer loop
vertex 13.7923 24.2655 0
- vertex 14.0281 24.1527 -0.1
- vertex 13.7923 24.2655 -0.1
+ vertex 14.0281 24.1527 -0.2
+ vertex 13.7923 24.2655 -0.2
endloop
endfacet
facet normal 0.491302 0.870989 -0
outer loop
- vertex 13.7923 24.2655 -0.1
+ vertex 13.7923 24.2655 -0.2
vertex 13.5553 24.3991 0
vertex 13.7923 24.2655 0
endloop
@@ -31509,13 +31509,13 @@ solid OpenSCAD_Model
facet normal 0.491302 0.870989 0
outer loop
vertex 13.5553 24.3991 0
- vertex 13.7923 24.2655 -0.1
- vertex 13.5553 24.3991 -0.1
+ vertex 13.7923 24.2655 -0.2
+ vertex 13.5553 24.3991 -0.2
endloop
endfacet
facet normal 0.565064 0.825047 -0
outer loop
- vertex 13.5553 24.3991 -0.1
+ vertex 13.5553 24.3991 -0.2
vertex 13.085 24.7212 0
vertex 13.5553 24.3991 0
endloop
@@ -31523,13 +31523,13 @@ solid OpenSCAD_Model
facet normal 0.565064 0.825047 0
outer loop
vertex 13.085 24.7212 0
- vertex 13.5553 24.3991 -0.1
- vertex 13.085 24.7212 -0.1
+ vertex 13.5553 24.3991 -0.2
+ vertex 13.085 24.7212 -0.2
endloop
endfacet
facet normal 0.644201 0.764857 -0
outer loop
- vertex 13.085 24.7212 -0.1
+ vertex 13.085 24.7212 -0.2
vertex 12.6316 25.1032 0
vertex 13.085 24.7212 0
endloop
@@ -31537,251 +31537,251 @@ solid OpenSCAD_Model
facet normal 0.644201 0.764857 0
outer loop
vertex 12.6316 25.1032 0
- vertex 13.085 24.7212 -0.1
- vertex 12.6316 25.1032 -0.1
+ vertex 13.085 24.7212 -0.2
+ vertex 12.6316 25.1032 -0.2
endloop
endfacet
facet normal 0.710157 0.704043 0
outer loop
vertex 12.6316 25.1032 0
- vertex 12.2092 25.5292 -0.1
+ vertex 12.2092 25.5292 -0.2
vertex 12.2092 25.5292 0
endloop
endfacet
facet normal 0.710157 0.704043 0
outer loop
- vertex 12.2092 25.5292 -0.1
+ vertex 12.2092 25.5292 -0.2
vertex 12.6316 25.1032 0
- vertex 12.6316 25.1032 -0.1
+ vertex 12.6316 25.1032 -0.2
endloop
endfacet
facet normal 0.769647 0.63847 0
outer loop
vertex 12.2092 25.5292 0
- vertex 11.8324 25.9834 -0.1
+ vertex 11.8324 25.9834 -0.2
vertex 11.8324 25.9834 0
endloop
endfacet
facet normal 0.769647 0.63847 0
outer loop
- vertex 11.8324 25.9834 -0.1
+ vertex 11.8324 25.9834 -0.2
vertex 12.2092 25.5292 0
- vertex 12.2092 25.5292 -0.1
+ vertex 12.2092 25.5292 -0.2
endloop
endfacet
facet normal 0.827234 0.561857 0
outer loop
vertex 11.8324 25.9834 0
- vertex 11.5154 26.4501 -0.1
+ vertex 11.5154 26.4501 -0.2
vertex 11.5154 26.4501 0
endloop
endfacet
facet normal 0.827234 0.561857 0
outer loop
- vertex 11.5154 26.4501 -0.1
+ vertex 11.5154 26.4501 -0.2
vertex 11.8324 25.9834 0
- vertex 11.8324 25.9834 -0.1
+ vertex 11.8324 25.9834 -0.2
endloop
endfacet
facet normal 0.870844 0.491559 0
outer loop
vertex 11.5154 26.4501 0
- vertex 11.3839 26.6832 -0.1
+ vertex 11.3839 26.6832 -0.2
vertex 11.3839 26.6832 0
endloop
endfacet
facet normal 0.870844 0.491559 0
outer loop
- vertex 11.3839 26.6832 -0.1
+ vertex 11.3839 26.6832 -0.2
vertex 11.5154 26.4501 0
- vertex 11.5154 26.4501 -0.1
+ vertex 11.5154 26.4501 -0.2
endloop
endfacet
facet normal 0.900452 0.434955 0
outer loop
vertex 11.3839 26.6832 0
- vertex 11.2726 26.9135 -0.1
+ vertex 11.2726 26.9135 -0.2
vertex 11.2726 26.9135 0
endloop
endfacet
facet normal 0.900452 0.434955 0
outer loop
- vertex 11.2726 26.9135 -0.1
+ vertex 11.2726 26.9135 -0.2
vertex 11.3839 26.6832 0
- vertex 11.3839 26.6832 -0.1
+ vertex 11.3839 26.6832 -0.2
endloop
endfacet
facet normal 0.930028 0.367488 0
outer loop
vertex 11.2726 26.9135 0
- vertex 11.1835 27.139 -0.1
+ vertex 11.1835 27.139 -0.2
vertex 11.1835 27.139 0
endloop
endfacet
facet normal 0.930028 0.367488 0
outer loop
- vertex 11.1835 27.139 -0.1
+ vertex 11.1835 27.139 -0.2
vertex 11.2726 26.9135 0
- vertex 11.2726 26.9135 -0.1
+ vertex 11.2726 26.9135 -0.2
endloop
endfacet
facet normal 0.958361 0.28556 0
outer loop
vertex 11.1835 27.139 0
- vertex 11.1184 27.3577 -0.1
+ vertex 11.1184 27.3577 -0.2
vertex 11.1184 27.3577 0
endloop
endfacet
facet normal 0.958361 0.28556 0
outer loop
- vertex 11.1184 27.3577 -0.1
+ vertex 11.1184 27.3577 -0.2
vertex 11.1835 27.139 0
- vertex 11.1835 27.139 -0.1
+ vertex 11.1835 27.139 -0.2
endloop
endfacet
facet normal 0.982358 0.187011 0
outer loop
vertex 11.1184 27.3577 0
- vertex 11.0734 27.5937 -0.1
+ vertex 11.0734 27.5937 -0.2
vertex 11.0734 27.5937 0
endloop
endfacet
facet normal 0.982358 0.187011 0
outer loop
- vertex 11.0734 27.5937 -0.1
+ vertex 11.0734 27.5937 -0.2
vertex 11.1184 27.3577 0
- vertex 11.1184 27.3577 -0.1
+ vertex 11.1184 27.3577 -0.2
endloop
endfacet
facet normal 0.995162 0.0982451 0
outer loop
vertex 11.0734 27.5937 0
- vertex 11.0484 27.8474 -0.1
+ vertex 11.0484 27.8474 -0.2
vertex 11.0484 27.8474 0
endloop
endfacet
facet normal 0.995162 0.0982451 0
outer loop
- vertex 11.0484 27.8474 -0.1
+ vertex 11.0484 27.8474 -0.2
vertex 11.0734 27.5937 0
- vertex 11.0734 27.5937 -0.1
+ vertex 11.0734 27.5937 -0.2
endloop
endfacet
facet normal 0.999708 0.0241697 0
outer loop
vertex 11.0484 27.8474 0
- vertex 11.0419 28.1143 -0.1
+ vertex 11.0419 28.1143 -0.2
vertex 11.0419 28.1143 0
endloop
endfacet
facet normal 0.999708 0.0241697 0
outer loop
- vertex 11.0419 28.1143 -0.1
+ vertex 11.0419 28.1143 -0.2
vertex 11.0484 27.8474 0
- vertex 11.0484 27.8474 -0.1
+ vertex 11.0484 27.8474 -0.2
endloop
endfacet
facet normal 0.999225 -0.0393733 0
outer loop
vertex 11.0419 28.1143 0
- vertex 11.0528 28.3898 -0.1
+ vertex 11.0528 28.3898 -0.2
vertex 11.0528 28.3898 0
endloop
endfacet
facet normal 0.999225 -0.0393733 0
outer loop
- vertex 11.0528 28.3898 -0.1
+ vertex 11.0528 28.3898 -0.2
vertex 11.0419 28.1143 0
- vertex 11.0419 28.1143 -0.1
+ vertex 11.0419 28.1143 -0.2
endloop
endfacet
facet normal 0.992566 -0.121707 0
outer loop
vertex 11.0528 28.3898 0
- vertex 11.1213 28.9486 -0.1
+ vertex 11.1213 28.9486 -0.2
vertex 11.1213 28.9486 0
endloop
endfacet
facet normal 0.992566 -0.121707 0
outer loop
- vertex 11.1213 28.9486 -0.1
+ vertex 11.1213 28.9486 -0.2
vertex 11.0528 28.3898 0
- vertex 11.0528 28.3898 -0.1
+ vertex 11.0528 28.3898 -0.2
endloop
endfacet
facet normal 0.975165 -0.221479 0
outer loop
vertex 11.1213 28.9486 0
- vertex 11.2437 29.4873 -0.1
+ vertex 11.2437 29.4873 -0.2
vertex 11.2437 29.4873 0
endloop
endfacet
facet normal 0.975165 -0.221479 0
outer loop
- vertex 11.2437 29.4873 -0.1
+ vertex 11.2437 29.4873 -0.2
vertex 11.1213 28.9486 0
- vertex 11.1213 28.9486 -0.1
+ vertex 11.1213 28.9486 -0.2
endloop
endfacet
facet normal 0.94561 -0.325304 0
outer loop
vertex 11.2437 29.4873 0
- vertex 11.4096 29.9696 -0.1
+ vertex 11.4096 29.9696 -0.2
vertex 11.4096 29.9696 0
endloop
endfacet
facet normal 0.94561 -0.325304 0
outer loop
- vertex 11.4096 29.9696 -0.1
+ vertex 11.4096 29.9696 -0.2
vertex 11.2437 29.4873 0
- vertex 11.2437 29.4873 -0.1
+ vertex 11.2437 29.4873 -0.2
endloop
endfacet
facet normal 0.908293 -0.418334 0
outer loop
vertex 11.4096 29.9696 0
- vertex 11.5057 30.1782 -0.1
+ vertex 11.5057 30.1782 -0.2
vertex 11.5057 30.1782 0
endloop
endfacet
facet normal 0.908293 -0.418334 0
outer loop
- vertex 11.5057 30.1782 -0.1
+ vertex 11.5057 30.1782 -0.2
vertex 11.4096 29.9696 0
- vertex 11.4096 29.9696 -0.1
+ vertex 11.4096 29.9696 -0.2
endloop
endfacet
facet normal 0.868734 -0.495279 0
outer loop
vertex 11.5057 30.1782 0
- vertex 11.6088 30.3591 -0.1
+ vertex 11.6088 30.3591 -0.2
vertex 11.6088 30.3591 0
endloop
endfacet
facet normal 0.868734 -0.495279 0
outer loop
- vertex 11.6088 30.3591 -0.1
+ vertex 11.6088 30.3591 -0.2
vertex 11.5057 30.1782 0
- vertex 11.5057 30.1782 -0.1
+ vertex 11.5057 30.1782 -0.2
endloop
endfacet
facet normal 0.806643 -0.59104 0
outer loop
vertex 11.6088 30.3591 0
- vertex 11.7177 30.5077 -0.1
+ vertex 11.7177 30.5077 -0.2
vertex 11.7177 30.5077 0
endloop
endfacet
facet normal 0.806643 -0.59104 0
outer loop
- vertex 11.7177 30.5077 -0.1
+ vertex 11.7177 30.5077 -0.2
vertex 11.6088 30.3591 0
- vertex 11.6088 30.3591 -0.1
+ vertex 11.6088 30.3591 -0.2
endloop
endfacet
facet normal 0.702105 -0.712073 0
outer loop
- vertex 11.7177 30.5077 -0.1
+ vertex 11.7177 30.5077 -0.2
vertex 11.8311 30.6195 0
vertex 11.7177 30.5077 0
endloop
@@ -31789,13 +31789,13 @@ solid OpenSCAD_Model
facet normal 0.702105 -0.712073 0
outer loop
vertex 11.8311 30.6195 0
- vertex 11.7177 30.5077 -0.1
- vertex 11.8311 30.6195 -0.1
+ vertex 11.7177 30.5077 -0.2
+ vertex 11.8311 30.6195 -0.2
endloop
endfacet
facet normal 0.51702 -0.855973 0
outer loop
- vertex 11.8311 30.6195 -0.1
+ vertex 11.8311 30.6195 -0.2
vertex 11.9476 30.6899 0
vertex 11.8311 30.6195 0
endloop
@@ -31803,13 +31803,13 @@ solid OpenSCAD_Model
facet normal 0.51702 -0.855973 0
outer loop
vertex 11.9476 30.6899 0
- vertex 11.8311 30.6195 -0.1
- vertex 11.9476 30.6899 -0.1
+ vertex 11.8311 30.6195 -0.2
+ vertex 11.9476 30.6899 -0.2
endloop
endfacet
facet normal 0.202357 -0.979312 0
outer loop
- vertex 11.9476 30.6899 -0.1
+ vertex 11.9476 30.6899 -0.2
vertex 12.0661 30.7144 0
vertex 11.9476 30.6899 0
endloop
@@ -31817,13 +31817,13 @@ solid OpenSCAD_Model
facet normal 0.202357 -0.979312 0
outer loop
vertex 12.0661 30.7144 0
- vertex 11.9476 30.6899 -0.1
- vertex 12.0661 30.7144 -0.1
+ vertex 11.9476 30.6899 -0.2
+ vertex 12.0661 30.7144 -0.2
endloop
endfacet
facet normal -0.111663 -0.993746 0
outer loop
- vertex 12.0661 30.7144 -0.1
+ vertex 12.0661 30.7144 -0.2
vertex 12.1728 30.7024 0
vertex 12.0661 30.7144 0
endloop
@@ -31831,13 +31831,13 @@ solid OpenSCAD_Model
facet normal -0.111663 -0.993746 -0
outer loop
vertex 12.1728 30.7024 0
- vertex 12.0661 30.7144 -0.1
- vertex 12.1728 30.7024 -0.1
+ vertex 12.0661 30.7144 -0.2
+ vertex 12.1728 30.7024 -0.2
endloop
endfacet
facet normal -0.43355 -0.90113 0
outer loop
- vertex 12.1728 30.7024 -0.1
+ vertex 12.1728 30.7024 -0.2
vertex 12.2478 30.6663 0
vertex 12.1728 30.7024 0
endloop
@@ -31845,265 +31845,265 @@ solid OpenSCAD_Model
facet normal -0.43355 -0.90113 -0
outer loop
vertex 12.2478 30.6663 0
- vertex 12.1728 30.7024 -0.1
- vertex 12.2478 30.6663 -0.1
+ vertex 12.1728 30.7024 -0.2
+ vertex 12.2478 30.6663 -0.2
endloop
endfacet
facet normal -0.812799 -0.582545 0
outer loop
- vertex 12.291 30.606 -0.1
+ vertex 12.291 30.606 -0.2
vertex 12.2478 30.6663 0
- vertex 12.2478 30.6663 -0.1
+ vertex 12.2478 30.6663 -0.2
endloop
endfacet
facet normal -0.812799 -0.582545 0
outer loop
vertex 12.2478 30.6663 0
- vertex 12.291 30.606 -0.1
+ vertex 12.291 30.606 -0.2
vertex 12.291 30.606 0
endloop
endfacet
facet normal -0.990983 -0.133984 0
outer loop
- vertex 12.3025 30.5214 -0.1
+ vertex 12.3025 30.5214 -0.2
vertex 12.291 30.606 0
- vertex 12.291 30.606 -0.1
+ vertex 12.291 30.606 -0.2
endloop
endfacet
facet normal -0.990983 -0.133984 0
outer loop
vertex 12.291 30.606 0
- vertex 12.3025 30.5214 -0.1
+ vertex 12.3025 30.5214 -0.2
vertex 12.3025 30.5214 0
endloop
endfacet
facet normal -0.983093 0.183105 0
outer loop
- vertex 12.2821 30.4122 -0.1
+ vertex 12.2821 30.4122 -0.2
vertex 12.3025 30.5214 0
- vertex 12.3025 30.5214 -0.1
+ vertex 12.3025 30.5214 -0.2
endloop
endfacet
facet normal -0.983093 0.183105 0
outer loop
vertex 12.3025 30.5214 0
- vertex 12.2821 30.4122 -0.1
+ vertex 12.2821 30.4122 -0.2
vertex 12.2821 30.4122 0
endloop
endfacet
facet normal -0.931822 0.362917 0
outer loop
- vertex 12.23 30.2784 -0.1
+ vertex 12.23 30.2784 -0.2
vertex 12.2821 30.4122 0
- vertex 12.2821 30.4122 -0.1
+ vertex 12.2821 30.4122 -0.2
endloop
endfacet
facet normal -0.931822 0.362917 0
outer loop
vertex 12.2821 30.4122 0
- vertex 12.23 30.2784 -0.1
+ vertex 12.23 30.2784 -0.2
vertex 12.23 30.2784 0
endloop
endfacet
facet normal -0.863735 0.503946 0
outer loop
- vertex 12.0304 29.9363 -0.1
+ vertex 12.0304 29.9363 -0.2
vertex 12.23 30.2784 0
- vertex 12.23 30.2784 -0.1
+ vertex 12.23 30.2784 -0.2
endloop
endfacet
facet normal -0.863735 0.503946 0
outer loop
vertex 12.23 30.2784 0
- vertex 12.0304 29.9363 -0.1
+ vertex 12.0304 29.9363 -0.2
vertex 12.0304 29.9363 0
endloop
endfacet
facet normal -0.874405 0.485196 0
outer loop
- vertex 11.965 29.8184 -0.1
+ vertex 11.965 29.8184 -0.2
vertex 12.0304 29.9363 0
- vertex 12.0304 29.9363 -0.1
+ vertex 12.0304 29.9363 -0.2
endloop
endfacet
facet normal -0.874405 0.485196 0
outer loop
vertex 12.0304 29.9363 0
- vertex 11.965 29.8184 -0.1
+ vertex 11.965 29.8184 -0.2
vertex 11.965 29.8184 0
endloop
endfacet
facet normal -0.930071 0.367381 0
outer loop
- vertex 11.9082 29.6745 -0.1
+ vertex 11.9082 29.6745 -0.2
vertex 11.965 29.8184 0
- vertex 11.965 29.8184 -0.1
+ vertex 11.965 29.8184 -0.2
endloop
endfacet
facet normal -0.930071 0.367381 0
outer loop
vertex 11.965 29.8184 0
- vertex 11.9082 29.6745 -0.1
+ vertex 11.9082 29.6745 -0.2
vertex 11.9082 29.6745 0
endloop
endfacet
facet normal -0.970384 0.241567 0
outer loop
- vertex 11.8205 29.3224 -0.1
+ vertex 11.8205 29.3224 -0.2
vertex 11.9082 29.6745 0
- vertex 11.9082 29.6745 -0.1
+ vertex 11.9082 29.6745 -0.2
endloop
endfacet
facet normal -0.970384 0.241567 0
outer loop
vertex 11.9082 29.6745 0
- vertex 11.8205 29.3224 -0.1
+ vertex 11.8205 29.3224 -0.2
vertex 11.8205 29.3224 0
endloop
endfacet
facet normal -0.99199 0.126319 0
outer loop
- vertex 11.7675 28.9061 -0.1
+ vertex 11.7675 28.9061 -0.2
vertex 11.8205 29.3224 0
- vertex 11.8205 29.3224 -0.1
+ vertex 11.8205 29.3224 -0.2
endloop
endfacet
facet normal -0.99199 0.126319 0
outer loop
vertex 11.8205 29.3224 0
- vertex 11.7675 28.9061 -0.1
+ vertex 11.7675 28.9061 -0.2
vertex 11.7675 28.9061 0
endloop
endfacet
facet normal -0.999189 0.0402694 0
outer loop
- vertex 11.7492 28.4518 -0.1
+ vertex 11.7492 28.4518 -0.2
vertex 11.7675 28.9061 0
- vertex 11.7675 28.9061 -0.1
+ vertex 11.7675 28.9061 -0.2
endloop
endfacet
facet normal -0.999189 0.0402694 0
outer loop
vertex 11.7675 28.9061 0
- vertex 11.7492 28.4518 -0.1
+ vertex 11.7492 28.4518 -0.2
vertex 11.7492 28.4518 0
endloop
endfacet
facet normal -0.999377 -0.0352801 0
outer loop
- vertex 11.7656 27.9858 -0.1
+ vertex 11.7656 27.9858 -0.2
vertex 11.7492 28.4518 0
- vertex 11.7492 28.4518 -0.1
+ vertex 11.7492 28.4518 -0.2
endloop
endfacet
facet normal -0.999377 -0.0352801 0
outer loop
vertex 11.7492 28.4518 0
- vertex 11.7656 27.9858 -0.1
+ vertex 11.7656 27.9858 -0.2
vertex 11.7656 27.9858 0
endloop
endfacet
facet normal -0.993617 -0.112806 0
outer loop
- vertex 11.8169 27.5343 -0.1
+ vertex 11.8169 27.5343 -0.2
vertex 11.7656 27.9858 0
- vertex 11.7656 27.9858 -0.1
+ vertex 11.7656 27.9858 -0.2
endloop
endfacet
facet normal -0.993617 -0.112806 0
outer loop
vertex 11.7656 27.9858 0
- vertex 11.8169 27.5343 -0.1
+ vertex 11.8169 27.5343 -0.2
vertex 11.8169 27.5343 0
endloop
endfacet
facet normal -0.978727 -0.205168 0
outer loop
- vertex 11.903 27.1234 -0.1
+ vertex 11.903 27.1234 -0.2
vertex 11.8169 27.5343 0
- vertex 11.8169 27.5343 -0.1
+ vertex 11.8169 27.5343 -0.2
endloop
endfacet
facet normal -0.978727 -0.205168 0
outer loop
vertex 11.8169 27.5343 0
- vertex 11.903 27.1234 -0.1
+ vertex 11.903 27.1234 -0.2
vertex 11.903 27.1234 0
endloop
endfacet
facet normal -0.943297 -0.331951 0
outer loop
- vertex 12.0241 26.7794 -0.1
+ vertex 12.0241 26.7794 -0.2
vertex 11.903 27.1234 0
- vertex 11.903 27.1234 -0.1
+ vertex 11.903 27.1234 -0.2
endloop
endfacet
facet normal -0.943297 -0.331951 0
outer loop
vertex 11.903 27.1234 0
- vertex 12.0241 26.7794 -0.1
+ vertex 12.0241 26.7794 -0.2
vertex 12.0241 26.7794 0
endloop
endfacet
facet normal -0.895057 -0.445953 0
outer loop
- vertex 12.1339 26.5589 -0.1
+ vertex 12.1339 26.5589 -0.2
vertex 12.0241 26.7794 0
- vertex 12.0241 26.7794 -0.1
+ vertex 12.0241 26.7794 -0.2
endloop
endfacet
facet normal -0.895057 -0.445953 0
outer loop
vertex 12.0241 26.7794 0
- vertex 12.1339 26.5589 -0.1
+ vertex 12.1339 26.5589 -0.2
vertex 12.1339 26.5589 0
endloop
endfacet
facet normal -0.859859 -0.510531 0
outer loop
- vertex 12.2572 26.3514 -0.1
+ vertex 12.2572 26.3514 -0.2
vertex 12.1339 26.5589 0
- vertex 12.1339 26.5589 -0.1
+ vertex 12.1339 26.5589 -0.2
endloop
endfacet
facet normal -0.859859 -0.510531 0
outer loop
vertex 12.1339 26.5589 0
- vertex 12.2572 26.3514 -0.1
+ vertex 12.2572 26.3514 -0.2
vertex 12.2572 26.3514 0
endloop
endfacet
facet normal -0.813765 -0.581194 0
outer loop
- vertex 12.3979 26.1543 -0.1
+ vertex 12.3979 26.1543 -0.2
vertex 12.2572 26.3514 0
- vertex 12.2572 26.3514 -0.1
+ vertex 12.2572 26.3514 -0.2
endloop
endfacet
facet normal -0.813765 -0.581194 0
outer loop
vertex 12.2572 26.3514 0
- vertex 12.3979 26.1543 -0.1
+ vertex 12.3979 26.1543 -0.2
vertex 12.3979 26.1543 0
endloop
endfacet
facet normal -0.758497 -0.651676 0
outer loop
- vertex 12.5603 25.9653 -0.1
+ vertex 12.5603 25.9653 -0.2
vertex 12.3979 26.1543 0
- vertex 12.3979 26.1543 -0.1
+ vertex 12.3979 26.1543 -0.2
endloop
endfacet
facet normal -0.758497 -0.651676 0
outer loop
vertex 12.3979 26.1543 0
- vertex 12.5603 25.9653 -0.1
+ vertex 12.5603 25.9653 -0.2
vertex 12.5603 25.9653 0
endloop
endfacet
facet normal -0.697934 -0.716162 0
outer loop
- vertex 12.5603 25.9653 -0.1
+ vertex 12.5603 25.9653 -0.2
vertex 12.7484 25.782 0
vertex 12.5603 25.9653 0
endloop
@@ -32111,13 +32111,13 @@ solid OpenSCAD_Model
facet normal -0.697934 -0.716162 -0
outer loop
vertex 12.7484 25.782 0
- vertex 12.5603 25.9653 -0.1
- vertex 12.7484 25.782 -0.1
+ vertex 12.5603 25.9653 -0.2
+ vertex 12.7484 25.782 -0.2
endloop
endfacet
facet normal -0.636928 -0.770923 0
outer loop
- vertex 12.7484 25.782 -0.1
+ vertex 12.7484 25.782 -0.2
vertex 12.9664 25.6018 0
vertex 12.7484 25.782 0
endloop
@@ -32125,13 +32125,13 @@ solid OpenSCAD_Model
facet normal -0.636928 -0.770923 -0
outer loop
vertex 12.9664 25.6018 0
- vertex 12.7484 25.782 -0.1
- vertex 12.9664 25.6018 -0.1
+ vertex 12.7484 25.782 -0.2
+ vertex 12.9664 25.6018 -0.2
endloop
endfacet
facet normal -0.579754 -0.814791 0
outer loop
- vertex 12.9664 25.6018 -0.1
+ vertex 12.9664 25.6018 -0.2
vertex 13.2184 25.4225 0
vertex 12.9664 25.6018 0
endloop
@@ -32139,13 +32139,13 @@ solid OpenSCAD_Model
facet normal -0.579754 -0.814791 -0
outer loop
vertex 13.2184 25.4225 0
- vertex 12.9664 25.6018 -0.1
- vertex 13.2184 25.4225 -0.1
+ vertex 12.9664 25.6018 -0.2
+ vertex 13.2184 25.4225 -0.2
endloop
endfacet
facet normal -0.529164 -0.84852 0
outer loop
- vertex 13.2184 25.4225 -0.1
+ vertex 13.2184 25.4225 -0.2
vertex 13.5086 25.2416 0
vertex 13.2184 25.4225 0
endloop
@@ -32153,13 +32153,13 @@ solid OpenSCAD_Model
facet normal -0.529164 -0.84852 -0
outer loop
vertex 13.5086 25.2416 0
- vertex 13.2184 25.4225 -0.1
- vertex 13.5086 25.2416 -0.1
+ vertex 13.2184 25.4225 -0.2
+ vertex 13.5086 25.2416 -0.2
endloop
endfacet
facet normal -0.467835 -0.883816 0
outer loop
- vertex 13.5086 25.2416 -0.1
+ vertex 13.5086 25.2416 -0.2
vertex 14.2197 24.8651 0
vertex 13.5086 25.2416 0
endloop
@@ -32167,13 +32167,13 @@ solid OpenSCAD_Model
facet normal -0.467835 -0.883816 -0
outer loop
vertex 14.2197 24.8651 0
- vertex 13.5086 25.2416 -0.1
- vertex 14.2197 24.8651 -0.1
+ vertex 13.5086 25.2416 -0.2
+ vertex 14.2197 24.8651 -0.2
endloop
endfacet
facet normal -0.411276 -0.911511 0
outer loop
- vertex 14.2197 24.8651 -0.1
+ vertex 14.2197 24.8651 -0.2
vertex 15.1328 24.4531 0
vertex 14.2197 24.8651 0
endloop
@@ -32181,13 +32181,13 @@ solid OpenSCAD_Model
facet normal -0.411276 -0.911511 -0
outer loop
vertex 15.1328 24.4531 0
- vertex 14.2197 24.8651 -0.1
- vertex 15.1328 24.4531 -0.1
+ vertex 14.2197 24.8651 -0.2
+ vertex 15.1328 24.4531 -0.2
endloop
endfacet
facet normal -0.376758 -0.926312 0
outer loop
- vertex 15.1328 24.4531 -0.1
+ vertex 15.1328 24.4531 -0.2
vertex 16.2809 23.9862 0
vertex 15.1328 24.4531 0
endloop
@@ -32195,13 +32195,13 @@ solid OpenSCAD_Model
facet normal -0.376758 -0.926312 -0
outer loop
vertex 16.2809 23.9862 0
- vertex 15.1328 24.4531 -0.1
- vertex 16.2809 23.9862 -0.1
+ vertex 15.1328 24.4531 -0.2
+ vertex 16.2809 23.9862 -0.2
endloop
endfacet
facet normal -0.357069 -0.934078 0
outer loop
- vertex 16.2809 23.9862 -0.1
+ vertex 16.2809 23.9862 -0.2
vertex 17.6969 23.4449 0
vertex 16.2809 23.9862 0
endloop
@@ -32209,13 +32209,13 @@ solid OpenSCAD_Model
facet normal -0.357069 -0.934078 -0
outer loop
vertex 17.6969 23.4449 0
- vertex 16.2809 23.9862 -0.1
- vertex 17.6969 23.4449 -0.1
+ vertex 16.2809 23.9862 -0.2
+ vertex 17.6969 23.4449 -0.2
endloop
endfacet
facet normal -0.423576 -0.90586 0
outer loop
- vertex 17.6969 23.4449 -0.1
+ vertex 17.6969 23.4449 -0.2
vertex 17.9883 23.3086 0
vertex 17.6969 23.4449 0
endloop
@@ -32223,13 +32223,13 @@ solid OpenSCAD_Model
facet normal -0.423576 -0.90586 -0
outer loop
vertex 17.9883 23.3086 0
- vertex 17.6969 23.4449 -0.1
- vertex 17.9883 23.3086 -0.1
+ vertex 17.6969 23.4449 -0.2
+ vertex 17.9883 23.3086 -0.2
endloop
endfacet
facet normal -0.513377 -0.858163 0
outer loop
- vertex 17.9883 23.3086 -0.1
+ vertex 17.9883 23.3086 -0.2
vertex 18.318 23.1114 0
vertex 17.9883 23.3086 0
endloop
@@ -32237,13 +32237,13 @@ solid OpenSCAD_Model
facet normal -0.513377 -0.858163 -0
outer loop
vertex 18.318 23.1114 0
- vertex 17.9883 23.3086 -0.1
- vertex 18.318 23.1114 -0.1
+ vertex 17.9883 23.3086 -0.2
+ vertex 18.318 23.1114 -0.2
endloop
endfacet
facet normal -0.57768 -0.816263 0
outer loop
- vertex 18.318 23.1114 -0.1
+ vertex 18.318 23.1114 -0.2
vertex 18.6454 22.8797 0
vertex 18.318 23.1114 0
endloop
@@ -32251,13 +32251,13 @@ solid OpenSCAD_Model
facet normal -0.57768 -0.816263 -0
outer loop
vertex 18.6454 22.8797 0
- vertex 18.318 23.1114 -0.1
- vertex 18.6454 22.8797 -0.1
+ vertex 18.318 23.1114 -0.2
+ vertex 18.6454 22.8797 -0.2
endloop
endfacet
facet normal -0.644197 -0.76486 0
outer loop
- vertex 18.6454 22.8797 -0.1
+ vertex 18.6454 22.8797 -0.2
vertex 18.9302 22.6398 0
vertex 18.6454 22.8797 0
endloop
@@ -32265,13 +32265,13 @@ solid OpenSCAD_Model
facet normal -0.644197 -0.76486 -0
outer loop
vertex 18.9302 22.6398 0
- vertex 18.6454 22.8797 -0.1
- vertex 18.9302 22.6398 -0.1
+ vertex 18.6454 22.8797 -0.2
+ vertex 18.9302 22.6398 -0.2
endloop
endfacet
facet normal -0.705164 -0.709044 0
outer loop
- vertex 18.9302 22.6398 -0.1
+ vertex 18.9302 22.6398 -0.2
vertex 19.108 22.463 0
vertex 18.9302 22.6398 0
endloop
@@ -32279,181 +32279,181 @@ solid OpenSCAD_Model
facet normal -0.705164 -0.709044 -0
outer loop
vertex 19.108 22.463 0
- vertex 18.9302 22.6398 -0.1
- vertex 19.108 22.463 -0.1
+ vertex 18.9302 22.6398 -0.2
+ vertex 19.108 22.463 -0.2
endloop
endfacet
facet normal -0.763943 -0.645283 0
outer loop
- vertex 19.2511 22.2936 -0.1
+ vertex 19.2511 22.2936 -0.2
vertex 19.108 22.463 0
- vertex 19.108 22.463 -0.1
+ vertex 19.108 22.463 -0.2
endloop
endfacet
facet normal -0.763943 -0.645283 0
outer loop
vertex 19.108 22.463 0
- vertex 19.2511 22.2936 -0.1
+ vertex 19.2511 22.2936 -0.2
vertex 19.2511 22.2936 0
endloop
endfacet
facet normal -0.840155 -0.542346 0
outer loop
- vertex 19.3646 22.1178 -0.1
+ vertex 19.3646 22.1178 -0.2
vertex 19.2511 22.2936 0
- vertex 19.2511 22.2936 -0.1
+ vertex 19.2511 22.2936 -0.2
endloop
endfacet
facet normal -0.840155 -0.542346 0
outer loop
vertex 19.2511 22.2936 0
- vertex 19.3646 22.1178 -0.1
+ vertex 19.3646 22.1178 -0.2
vertex 19.3646 22.1178 0
endloop
endfacet
facet normal -0.910423 -0.413678 0
outer loop
- vertex 19.4538 21.9215 -0.1
+ vertex 19.4538 21.9215 -0.2
vertex 19.3646 22.1178 0
- vertex 19.3646 22.1178 -0.1
+ vertex 19.3646 22.1178 -0.2
endloop
endfacet
facet normal -0.910423 -0.413678 0
outer loop
vertex 19.3646 22.1178 0
- vertex 19.4538 21.9215 -0.1
+ vertex 19.4538 21.9215 -0.2
vertex 19.4538 21.9215 0
endloop
endfacet
facet normal -0.956843 -0.290607 0
outer loop
- vertex 19.5238 21.6908 -0.1
+ vertex 19.5238 21.6908 -0.2
vertex 19.4538 21.9215 0
- vertex 19.4538 21.9215 -0.1
+ vertex 19.4538 21.9215 -0.2
endloop
endfacet
facet normal -0.956843 -0.290607 0
outer loop
vertex 19.4538 21.9215 0
- vertex 19.5238 21.6908 -0.1
+ vertex 19.5238 21.6908 -0.2
vertex 19.5238 21.6908 0
endloop
endfacet
facet normal -0.980355 -0.19724 0
outer loop
- vertex 19.58 21.4118 -0.1
+ vertex 19.58 21.4118 -0.2
vertex 19.5238 21.6908 0
- vertex 19.5238 21.6908 -0.1
+ vertex 19.5238 21.6908 -0.2
endloop
endfacet
facet normal -0.980355 -0.19724 0
outer loop
vertex 19.5238 21.6908 0
- vertex 19.58 21.4118 -0.1
+ vertex 19.58 21.4118 -0.2
vertex 19.58 21.4118 0
endloop
endfacet
facet normal -0.992839 -0.119457 0
outer loop
- vertex 19.6713 20.6529 -0.1
+ vertex 19.6713 20.6529 -0.2
vertex 19.58 21.4118 0
- vertex 19.58 21.4118 -0.1
+ vertex 19.58 21.4118 -0.2
endloop
endfacet
facet normal -0.992839 -0.119457 0
outer loop
vertex 19.58 21.4118 0
- vertex 19.6713 20.6529 -0.1
+ vertex 19.6713 20.6529 -0.2
vertex 19.6713 20.6529 0
endloop
endfacet
facet normal -0.994314 -0.106485 0
outer loop
- vertex 19.753 19.8896 -0.1
+ vertex 19.753 19.8896 -0.2
vertex 19.6713 20.6529 0
- vertex 19.6713 20.6529 -0.1
+ vertex 19.6713 20.6529 -0.2
endloop
endfacet
facet normal -0.994314 -0.106485 0
outer loop
vertex 19.6713 20.6529 0
- vertex 19.753 19.8896 -0.1
+ vertex 19.753 19.8896 -0.2
vertex 19.753 19.8896 0
endloop
endfacet
facet normal -0.985782 -0.168027 0
outer loop
- vertex 19.8522 19.3078 -0.1
+ vertex 19.8522 19.3078 -0.2
vertex 19.753 19.8896 0
- vertex 19.753 19.8896 -0.1
+ vertex 19.753 19.8896 -0.2
endloop
endfacet
facet normal -0.985782 -0.168027 0
outer loop
vertex 19.753 19.8896 0
- vertex 19.8522 19.3078 -0.1
+ vertex 19.8522 19.3078 -0.2
vertex 19.8522 19.3078 0
endloop
endfacet
facet normal -0.962825 -0.270127 0
outer loop
- vertex 19.9169 19.0772 -0.1
+ vertex 19.9169 19.0772 -0.2
vertex 19.8522 19.3078 0
- vertex 19.8522 19.3078 -0.1
+ vertex 19.8522 19.3078 -0.2
endloop
endfacet
facet normal -0.962825 -0.270127 0
outer loop
vertex 19.8522 19.3078 0
- vertex 19.9169 19.0772 -0.1
+ vertex 19.9169 19.0772 -0.2
vertex 19.9169 19.0772 0
endloop
endfacet
facet normal -0.925898 -0.377775 0
outer loop
- vertex 19.9962 18.8829 -0.1
+ vertex 19.9962 18.8829 -0.2
vertex 19.9169 19.0772 0
- vertex 19.9169 19.0772 -0.1
+ vertex 19.9169 19.0772 -0.2
endloop
endfacet
facet normal -0.925898 -0.377775 0
outer loop
vertex 19.9169 19.0772 0
- vertex 19.9962 18.8829 -0.1
+ vertex 19.9962 18.8829 -0.2
vertex 19.9962 18.8829 0
endloop
endfacet
facet normal -0.85612 -0.516776 0
outer loop
- vertex 20.0935 18.7216 -0.1
+ vertex 20.0935 18.7216 -0.2
vertex 19.9962 18.8829 0
- vertex 19.9962 18.8829 -0.1
+ vertex 19.9962 18.8829 -0.2
endloop
endfacet
facet normal -0.85612 -0.516776 0
outer loop
vertex 19.9962 18.8829 0
- vertex 20.0935 18.7216 -0.1
+ vertex 20.0935 18.7216 -0.2
vertex 20.0935 18.7216 0
endloop
endfacet
facet normal -0.741357 -0.67111 0
outer loop
- vertex 20.2124 18.5903 -0.1
+ vertex 20.2124 18.5903 -0.2
vertex 20.0935 18.7216 0
- vertex 20.0935 18.7216 -0.1
+ vertex 20.0935 18.7216 -0.2
endloop
endfacet
facet normal -0.741357 -0.67111 0
outer loop
vertex 20.0935 18.7216 0
- vertex 20.2124 18.5903 -0.1
+ vertex 20.2124 18.5903 -0.2
vertex 20.2124 18.5903 0
endloop
endfacet
facet normal -0.587422 -0.809281 0
outer loop
- vertex 20.2124 18.5903 -0.1
+ vertex 20.2124 18.5903 -0.2
vertex 20.3561 18.486 0
vertex 20.2124 18.5903 0
endloop
@@ -32461,13 +32461,13 @@ solid OpenSCAD_Model
facet normal -0.587422 -0.809281 -0
outer loop
vertex 20.3561 18.486 0
- vertex 20.2124 18.5903 -0.1
- vertex 20.3561 18.486 -0.1
+ vertex 20.2124 18.5903 -0.2
+ vertex 20.3561 18.486 -0.2
endloop
endfacet
facet normal -0.423563 -0.905867 0
outer loop
- vertex 20.3561 18.486 -0.1
+ vertex 20.3561 18.486 -0.2
vertex 20.5281 18.4055 0
vertex 20.3561 18.486 0
endloop
@@ -32475,13 +32475,13 @@ solid OpenSCAD_Model
facet normal -0.423563 -0.905867 -0
outer loop
vertex 20.5281 18.4055 0
- vertex 20.3561 18.486 -0.1
- vertex 20.5281 18.4055 -0.1
+ vertex 20.3561 18.486 -0.2
+ vertex 20.5281 18.4055 -0.2
endloop
endfacet
facet normal -0.280888 -0.95974 0
outer loop
- vertex 20.5281 18.4055 -0.1
+ vertex 20.5281 18.4055 -0.2
vertex 20.7319 18.3459 0
vertex 20.5281 18.4055 0
endloop
@@ -32489,13 +32489,13 @@ solid OpenSCAD_Model
facet normal -0.280888 -0.95974 -0
outer loop
vertex 20.7319 18.3459 0
- vertex 20.5281 18.4055 -0.1
- vertex 20.7319 18.3459 -0.1
+ vertex 20.5281 18.4055 -0.2
+ vertex 20.7319 18.3459 -0.2
endloop
endfacet
facet normal -0.172751 -0.984966 0
outer loop
- vertex 20.7319 18.3459 -0.1
+ vertex 20.7319 18.3459 -0.2
vertex 20.9709 18.304 0
vertex 20.7319 18.3459 0
endloop
@@ -32503,13 +32503,13 @@ solid OpenSCAD_Model
facet normal -0.172751 -0.984966 -0
outer loop
vertex 20.9709 18.304 0
- vertex 20.7319 18.3459 -0.1
- vertex 20.9709 18.304 -0.1
+ vertex 20.7319 18.3459 -0.2
+ vertex 20.9709 18.304 -0.2
endloop
endfacet
facet normal -0.0716809 -0.997428 0
outer loop
- vertex 20.9709 18.304 -0.1
+ vertex 20.9709 18.304 -0.2
vertex 21.5679 18.2611 0
vertex 20.9709 18.304 0
endloop
@@ -32517,13 +32517,13 @@ solid OpenSCAD_Model
facet normal -0.0716809 -0.997428 -0
outer loop
vertex 21.5679 18.2611 0
- vertex 20.9709 18.304 -0.1
- vertex 21.5679 18.2611 -0.1
+ vertex 20.9709 18.304 -0.2
+ vertex 21.5679 18.2611 -0.2
endloop
endfacet
facet normal -0.0113554 -0.999936 0
outer loop
- vertex 21.5679 18.2611 -0.1
+ vertex 21.5679 18.2611 -0.2
vertex 22.3468 18.2522 0
vertex 21.5679 18.2611 0
endloop
@@ -32531,13 +32531,13 @@ solid OpenSCAD_Model
facet normal -0.0113554 -0.999936 -0
outer loop
vertex 22.3468 18.2522 0
- vertex 21.5679 18.2611 -0.1
- vertex 22.3468 18.2522 -0.1
+ vertex 21.5679 18.2611 -0.2
+ vertex 22.3468 18.2522 -0.2
endloop
endfacet
facet normal -0.0142554 -0.999898 0
outer loop
- vertex 22.3468 18.2522 -0.1
+ vertex 22.3468 18.2522 -0.2
vertex 23.0891 18.2417 0
vertex 22.3468 18.2522 0
endloop
@@ -32545,13 +32545,13 @@ solid OpenSCAD_Model
facet normal -0.0142554 -0.999898 -0
outer loop
vertex 23.0891 18.2417 0
- vertex 22.3468 18.2522 -0.1
- vertex 23.0891 18.2417 -0.1
+ vertex 22.3468 18.2522 -0.2
+ vertex 23.0891 18.2417 -0.2
endloop
endfacet
facet normal -0.0563557 -0.998411 0
outer loop
- vertex 23.0891 18.2417 -0.1
+ vertex 23.0891 18.2417 -0.2
vertex 23.7039 18.207 0
vertex 23.0891 18.2417 0
endloop
@@ -32559,13 +32559,13 @@ solid OpenSCAD_Model
facet normal -0.0563557 -0.998411 -0
outer loop
vertex 23.7039 18.207 0
- vertex 23.0891 18.2417 -0.1
- vertex 23.7039 18.207 -0.1
+ vertex 23.0891 18.2417 -0.2
+ vertex 23.7039 18.207 -0.2
endloop
endfacet
facet normal -0.125256 -0.992124 0
outer loop
- vertex 23.7039 18.207 -0.1
+ vertex 23.7039 18.207 -0.2
vertex 24.2049 18.1437 0
vertex 23.7039 18.207 0
endloop
@@ -32573,13 +32573,13 @@ solid OpenSCAD_Model
facet normal -0.125256 -0.992124 -0
outer loop
vertex 24.2049 18.1437 0
- vertex 23.7039 18.207 -0.1
- vertex 24.2049 18.1437 -0.1
+ vertex 23.7039 18.207 -0.2
+ vertex 24.2049 18.1437 -0.2
endloop
endfacet
facet normal -0.233347 -0.972393 0
outer loop
- vertex 24.2049 18.1437 -0.1
+ vertex 24.2049 18.1437 -0.2
vertex 24.6059 18.0475 0
vertex 24.2049 18.1437 0
endloop
@@ -32587,13 +32587,13 @@ solid OpenSCAD_Model
facet normal -0.233347 -0.972393 -0
outer loop
vertex 24.6059 18.0475 0
- vertex 24.2049 18.1437 -0.1
- vertex 24.6059 18.0475 -0.1
+ vertex 24.2049 18.1437 -0.2
+ vertex 24.6059 18.0475 -0.2
endloop
endfacet
facet normal -0.390765 -0.920491 0
outer loop
- vertex 24.6059 18.0475 -0.1
+ vertex 24.6059 18.0475 -0.2
vertex 24.9207 17.9138 0
vertex 24.6059 18.0475 0
endloop
@@ -32601,13 +32601,13 @@ solid OpenSCAD_Model
facet normal -0.390765 -0.920491 -0
outer loop
vertex 24.9207 17.9138 0
- vertex 24.6059 18.0475 -0.1
- vertex 24.9207 17.9138 -0.1
+ vertex 24.6059 18.0475 -0.2
+ vertex 24.9207 17.9138 -0.2
endloop
endfacet
facet normal -0.536417 -0.843953 0
outer loop
- vertex 24.9207 17.9138 -0.1
+ vertex 24.9207 17.9138 -0.2
vertex 25.0501 17.8316 0
vertex 24.9207 17.9138 0
endloop
@@ -32615,13 +32615,13 @@ solid OpenSCAD_Model
facet normal -0.536417 -0.843953 -0
outer loop
vertex 25.0501 17.8316 0
- vertex 24.9207 17.9138 -0.1
- vertex 25.0501 17.8316 -0.1
+ vertex 24.9207 17.9138 -0.2
+ vertex 25.0501 17.8316 -0.2
endloop
endfacet
facet normal -0.636483 -0.77129 0
outer loop
- vertex 25.0501 17.8316 -0.1
+ vertex 25.0501 17.8316 -0.2
vertex 25.163 17.7384 0
vertex 25.0501 17.8316 0
endloop
@@ -32629,83 +32629,83 @@ solid OpenSCAD_Model
facet normal -0.636483 -0.77129 -0
outer loop
vertex 25.163 17.7384 0
- vertex 25.0501 17.8316 -0.1
- vertex 25.163 17.7384 -0.1
+ vertex 25.0501 17.8316 -0.2
+ vertex 25.163 17.7384 -0.2
endloop
endfacet
facet normal -0.729305 -0.684189 0
outer loop
- vertex 25.2614 17.6336 -0.1
+ vertex 25.2614 17.6336 -0.2
vertex 25.163 17.7384 0
- vertex 25.163 17.7384 -0.1
+ vertex 25.163 17.7384 -0.2
endloop
endfacet
facet normal -0.729305 -0.684189 0
outer loop
vertex 25.163 17.7384 0
- vertex 25.2614 17.6336 -0.1
+ vertex 25.2614 17.6336 -0.2
vertex 25.2614 17.6336 0
endloop
endfacet
facet normal -0.807579 -0.589759 0
outer loop
- vertex 25.3467 17.5167 -0.1
+ vertex 25.3467 17.5167 -0.2
vertex 25.2614 17.6336 0
- vertex 25.2614 17.6336 -0.1
+ vertex 25.2614 17.6336 -0.2
endloop
endfacet
facet normal -0.807579 -0.589759 0
outer loop
vertex 25.2614 17.6336 0
- vertex 25.3467 17.5167 -0.1
+ vertex 25.3467 17.5167 -0.2
vertex 25.3467 17.5167 0
endloop
endfacet
facet normal -0.890947 -0.454107 0
outer loop
- vertex 25.4856 17.2443 -0.1
+ vertex 25.4856 17.2443 -0.2
vertex 25.3467 17.5167 0
- vertex 25.3467 17.5167 -0.1
+ vertex 25.3467 17.5167 -0.2
endloop
endfacet
facet normal -0.890947 -0.454107 0
outer loop
vertex 25.3467 17.5167 0
- vertex 25.4856 17.2443 -0.1
+ vertex 25.4856 17.2443 -0.2
vertex 25.4856 17.2443 0
endloop
endfacet
facet normal -0.905796 -0.423714 0
outer loop
- vertex 25.6037 16.9917 -0.1
+ vertex 25.6037 16.9917 -0.2
vertex 25.4856 17.2443 0
- vertex 25.4856 17.2443 -0.1
+ vertex 25.4856 17.2443 -0.2
endloop
endfacet
facet normal -0.905796 -0.423714 0
outer loop
vertex 25.4856 17.2443 0
- vertex 25.6037 16.9917 -0.1
+ vertex 25.6037 16.9917 -0.2
vertex 25.6037 16.9917 0
endloop
endfacet
facet normal -0.826293 -0.563241 0
outer loop
- vertex 25.7157 16.8274 -0.1
+ vertex 25.7157 16.8274 -0.2
vertex 25.6037 16.9917 0
- vertex 25.6037 16.9917 -0.1
+ vertex 25.6037 16.9917 -0.2
endloop
endfacet
facet normal -0.826293 -0.563241 0
outer loop
vertex 25.6037 16.9917 0
- vertex 25.7157 16.8274 -0.1
+ vertex 25.7157 16.8274 -0.2
vertex 25.7157 16.8274 0
endloop
endfacet
facet normal -0.603414 -0.797428 0
outer loop
- vertex 25.7157 16.8274 -0.1
+ vertex 25.7157 16.8274 -0.2
vertex 25.8187 16.7495 0
vertex 25.7157 16.8274 0
endloop
@@ -32713,13 +32713,13 @@ solid OpenSCAD_Model
facet normal -0.603414 -0.797428 -0
outer loop
vertex 25.8187 16.7495 0
- vertex 25.7157 16.8274 -0.1
- vertex 25.8187 16.7495 -0.1
+ vertex 25.7157 16.8274 -0.2
+ vertex 25.8187 16.7495 -0.2
endloop
endfacet
facet normal -0.148413 -0.988925 0
outer loop
- vertex 25.8187 16.7495 -0.1
+ vertex 25.8187 16.7495 -0.2
vertex 25.8659 16.7424 0
vertex 25.8187 16.7495 0
endloop
@@ -32727,13 +32727,13 @@ solid OpenSCAD_Model
facet normal -0.148413 -0.988925 -0
outer loop
vertex 25.8659 16.7424 0
- vertex 25.8187 16.7495 -0.1
- vertex 25.8659 16.7424 -0.1
+ vertex 25.8187 16.7495 -0.2
+ vertex 25.8659 16.7424 -0.2
endloop
endfacet
facet normal 0.302537 -0.953138 0
outer loop
- vertex 25.8659 16.7424 -0.1
+ vertex 25.8659 16.7424 -0.2
vertex 25.9096 16.7563 0
vertex 25.8659 16.7424 0
endloop
@@ -32741,139 +32741,139 @@ solid OpenSCAD_Model
facet normal 0.302537 -0.953138 0
outer loop
vertex 25.9096 16.7563 0
- vertex 25.8659 16.7424 -0.1
- vertex 25.9096 16.7563 -0.1
+ vertex 25.8659 16.7424 -0.2
+ vertex 25.9096 16.7563 -0.2
endloop
endfacet
facet normal 0.763836 -0.645411 0
outer loop
vertex 25.9096 16.7563 0
- vertex 25.9855 16.8461 -0.1
+ vertex 25.9855 16.8461 -0.2
vertex 25.9855 16.8461 0
endloop
endfacet
facet normal 0.763836 -0.645411 0
outer loop
- vertex 25.9855 16.8461 -0.1
+ vertex 25.9855 16.8461 -0.2
vertex 25.9096 16.7563 0
- vertex 25.9096 16.7563 -0.1
+ vertex 25.9096 16.7563 -0.2
endloop
endfacet
facet normal 0.947245 -0.320511 0
outer loop
vertex 25.9855 16.8461 0
- vertex 26.0434 17.0172 -0.1
+ vertex 26.0434 17.0172 -0.2
vertex 26.0434 17.0172 0
endloop
endfacet
facet normal 0.947245 -0.320511 0
outer loop
- vertex 26.0434 17.0172 -0.1
+ vertex 26.0434 17.0172 -0.2
vertex 25.9855 16.8461 0
- vertex 25.9855 16.8461 -0.1
+ vertex 25.9855 16.8461 -0.2
endloop
endfacet
facet normal 0.989326 -0.145716 0
outer loop
vertex 26.0434 17.0172 0
- vertex 26.0803 17.2678 -0.1
+ vertex 26.0803 17.2678 -0.2
vertex 26.0803 17.2678 0
endloop
endfacet
facet normal 0.989326 -0.145716 0
outer loop
- vertex 26.0803 17.2678 -0.1
+ vertex 26.0803 17.2678 -0.2
vertex 26.0434 17.0172 0
- vertex 26.0434 17.0172 -0.1
+ vertex 26.0434 17.0172 -0.2
endloop
endfacet
facet normal 0.999222 -0.0394472 0
outer loop
vertex 26.0803 17.2678 0
- vertex 26.0933 17.5963 -0.1
+ vertex 26.0933 17.5963 -0.2
vertex 26.0933 17.5963 0
endloop
endfacet
facet normal 0.999222 -0.0394472 0
outer loop
- vertex 26.0933 17.5963 -0.1
+ vertex 26.0933 17.5963 -0.2
vertex 26.0803 17.2678 0
- vertex 26.0803 17.2678 -0.1
+ vertex 26.0803 17.2678 -0.2
endloop
endfacet
facet normal 0.99788 0.0650754 0
outer loop
vertex 26.0933 17.5963 0
- vertex 26.0696 17.9605 -0.1
+ vertex 26.0696 17.9605 -0.2
vertex 26.0696 17.9605 0
endloop
endfacet
facet normal 0.99788 0.0650754 0
outer loop
- vertex 26.0696 17.9605 -0.1
+ vertex 26.0696 17.9605 -0.2
vertex 26.0933 17.5963 0
- vertex 26.0933 17.5963 -0.1
+ vertex 26.0933 17.5963 -0.2
endloop
endfacet
facet normal 0.979516 0.201364 0
outer loop
vertex 26.0696 17.9605 0
- vertex 26.0009 18.2942 -0.1
+ vertex 26.0009 18.2942 -0.2
vertex 26.0009 18.2942 0
endloop
endfacet
facet normal 0.979516 0.201364 0
outer loop
- vertex 26.0009 18.2942 -0.1
+ vertex 26.0009 18.2942 -0.2
vertex 26.0696 17.9605 0
- vertex 26.0696 17.9605 -0.1
+ vertex 26.0696 17.9605 -0.2
endloop
endfacet
facet normal 0.938515 0.345238 0
outer loop
vertex 26.0009 18.2942 0
- vertex 25.8914 18.5921 -0.1
+ vertex 25.8914 18.5921 -0.2
vertex 25.8914 18.5921 0
endloop
endfacet
facet normal 0.938515 0.345238 0
outer loop
- vertex 25.8914 18.5921 -0.1
+ vertex 25.8914 18.5921 -0.2
vertex 26.0009 18.2942 0
- vertex 26.0009 18.2942 -0.1
+ vertex 26.0009 18.2942 -0.2
endloop
endfacet
facet normal 0.86805 0.496476 0
outer loop
vertex 25.8914 18.5921 0
- vertex 25.7448 18.8483 -0.1
+ vertex 25.7448 18.8483 -0.2
vertex 25.7448 18.8483 0
endloop
endfacet
facet normal 0.86805 0.496476 0
outer loop
- vertex 25.7448 18.8483 -0.1
+ vertex 25.7448 18.8483 -0.2
vertex 25.8914 18.5921 0
- vertex 25.8914 18.5921 -0.1
+ vertex 25.8914 18.5921 -0.2
endloop
endfacet
facet normal 0.758477 0.651699 0
outer loop
vertex 25.7448 18.8483 0
- vertex 25.5652 19.0574 -0.1
+ vertex 25.5652 19.0574 -0.2
vertex 25.5652 19.0574 0
endloop
endfacet
facet normal 0.758477 0.651699 0
outer loop
- vertex 25.5652 19.0574 -0.1
+ vertex 25.5652 19.0574 -0.2
vertex 25.7448 18.8483 0
- vertex 25.7448 18.8483 -0.1
+ vertex 25.7448 18.8483 -0.2
endloop
endfacet
facet normal 0.599251 0.800561 -0
outer loop
- vertex 25.5652 19.0574 -0.1
+ vertex 25.5652 19.0574 -0.2
vertex 25.3564 19.2137 0
vertex 25.5652 19.0574 0
endloop
@@ -32881,13 +32881,13 @@ solid OpenSCAD_Model
facet normal 0.599251 0.800561 0
outer loop
vertex 25.3564 19.2137 0
- vertex 25.5652 19.0574 -0.1
- vertex 25.3564 19.2137 -0.1
+ vertex 25.5652 19.0574 -0.2
+ vertex 25.3564 19.2137 -0.2
endloop
endfacet
facet normal 0.385907 0.922538 -0
outer loop
- vertex 25.3564 19.2137 -0.1
+ vertex 25.3564 19.2137 -0.2
vertex 25.1224 19.3115 0
vertex 25.3564 19.2137 0
endloop
@@ -32895,13 +32895,13 @@ solid OpenSCAD_Model
facet normal 0.385907 0.922538 0
outer loop
vertex 25.1224 19.3115 0
- vertex 25.3564 19.2137 -0.1
- vertex 25.1224 19.3115 -0.1
+ vertex 25.3564 19.2137 -0.2
+ vertex 25.1224 19.3115 -0.2
endloop
endfacet
facet normal 0.197951 0.980212 -0
outer loop
- vertex 25.1224 19.3115 -0.1
+ vertex 25.1224 19.3115 -0.2
vertex 24.9972 19.3368 0
vertex 25.1224 19.3115 0
endloop
@@ -32909,13 +32909,13 @@ solid OpenSCAD_Model
facet normal 0.197951 0.980212 0
outer loop
vertex 24.9972 19.3368 0
- vertex 25.1224 19.3115 -0.1
- vertex 24.9972 19.3368 -0.1
+ vertex 25.1224 19.3115 -0.2
+ vertex 24.9972 19.3368 -0.2
endloop
endfacet
facet normal 0.0658711 0.997828 -0
outer loop
- vertex 24.9972 19.3368 -0.1
+ vertex 24.9972 19.3368 -0.2
vertex 24.8672 19.3454 0
vertex 24.9972 19.3368 0
endloop
@@ -32923,13 +32923,13 @@ solid OpenSCAD_Model
facet normal 0.0658711 0.997828 0
outer loop
vertex 24.8672 19.3454 0
- vertex 24.9972 19.3368 -0.1
- vertex 24.8672 19.3454 -0.1
+ vertex 24.9972 19.3368 -0.2
+ vertex 24.8672 19.3454 -0.2
endloop
endfacet
facet normal 0.104566 0.994518 -0
outer loop
- vertex 24.8672 19.3454 -0.1
+ vertex 24.8672 19.3454 -0.2
vertex 24.6124 19.3722 0
vertex 24.8672 19.3454 0
endloop
@@ -32937,13 +32937,13 @@ solid OpenSCAD_Model
facet normal 0.104566 0.994518 0
outer loop
vertex 24.6124 19.3722 0
- vertex 24.8672 19.3454 -0.1
- vertex 24.6124 19.3722 -0.1
+ vertex 24.8672 19.3454 -0.2
+ vertex 24.6124 19.3722 -0.2
endloop
endfacet
facet normal 0.198003 0.980201 -0
outer loop
- vertex 24.6124 19.3722 -0.1
+ vertex 24.6124 19.3722 -0.2
vertex 24.2514 19.4451 0
vertex 24.6124 19.3722 0
endloop
@@ -32951,13 +32951,13 @@ solid OpenSCAD_Model
facet normal 0.198003 0.980201 0
outer loop
vertex 24.2514 19.4451 0
- vertex 24.6124 19.3722 -0.1
- vertex 24.2514 19.4451 -0.1
+ vertex 24.6124 19.3722 -0.2
+ vertex 24.2514 19.4451 -0.2
endloop
endfacet
facet normal 0.249312 0.968423 -0
outer loop
- vertex 24.2514 19.4451 -0.1
+ vertex 24.2514 19.4451 -0.2
vertex 23.8321 19.5531 0
vertex 24.2514 19.4451 0
endloop
@@ -32965,13 +32965,13 @@ solid OpenSCAD_Model
facet normal 0.249312 0.968423 0
outer loop
vertex 23.8321 19.5531 0
- vertex 24.2514 19.4451 -0.1
- vertex 23.8321 19.5531 -0.1
+ vertex 24.2514 19.4451 -0.2
+ vertex 23.8321 19.5531 -0.2
endloop
endfacet
facet normal 0.293412 0.955986 -0
outer loop
- vertex 23.8321 19.5531 -0.1
+ vertex 23.8321 19.5531 -0.2
vertex 23.4027 19.6849 0
vertex 23.8321 19.5531 0
endloop
@@ -32979,13 +32979,13 @@ solid OpenSCAD_Model
facet normal 0.293412 0.955986 0
outer loop
vertex 23.4027 19.6849 0
- vertex 23.8321 19.5531 -0.1
- vertex 23.4027 19.6849 -0.1
+ vertex 23.8321 19.5531 -0.2
+ vertex 23.4027 19.6849 -0.2
endloop
endfacet
facet normal 0.372015 0.928227 -0
outer loop
- vertex 23.4027 19.6849 -0.1
+ vertex 23.4027 19.6849 -0.2
vertex 22.9977 19.8472 0
vertex 23.4027 19.6849 0
endloop
@@ -32993,13 +32993,13 @@ solid OpenSCAD_Model
facet normal 0.372015 0.928227 0
outer loop
vertex 22.9977 19.8472 0
- vertex 23.4027 19.6849 -0.1
- vertex 22.9977 19.8472 -0.1
+ vertex 23.4027 19.6849 -0.2
+ vertex 22.9977 19.8472 -0.2
endloop
endfacet
facet normal 0.496703 0.86792 -0
outer loop
- vertex 22.9977 19.8472 -0.1
+ vertex 22.9977 19.8472 -0.2
vertex 22.6486 20.047 0
vertex 22.9977 19.8472 0
endloop
@@ -33007,13 +33007,13 @@ solid OpenSCAD_Model
facet normal 0.496703 0.86792 0
outer loop
vertex 22.6486 20.047 0
- vertex 22.9977 19.8472 -0.1
- vertex 22.6486 20.047 -0.1
+ vertex 22.9977 19.8472 -0.2
+ vertex 22.6486 20.047 -0.2
endloop
endfacet
facet normal 0.63232 0.774707 -0
outer loop
- vertex 22.6486 20.047 -0.1
+ vertex 22.6486 20.047 -0.2
vertex 22.3515 20.2895 0
vertex 22.6486 20.047 0
endloop
@@ -33021,209 +33021,209 @@ solid OpenSCAD_Model
facet normal 0.63232 0.774707 0
outer loop
vertex 22.3515 20.2895 0
- vertex 22.6486 20.047 -0.1
- vertex 22.3515 20.2895 -0.1
+ vertex 22.6486 20.047 -0.2
+ vertex 22.3515 20.2895 -0.2
endloop
endfacet
facet normal 0.72955 0.683927 0
outer loop
vertex 22.3515 20.2895 0
- vertex 22.2213 20.4283 -0.1
+ vertex 22.2213 20.4283 -0.2
vertex 22.2213 20.4283 0
endloop
endfacet
facet normal 0.72955 0.683927 0
outer loop
- vertex 22.2213 20.4283 -0.1
+ vertex 22.2213 20.4283 -0.2
vertex 22.3515 20.2895 0
- vertex 22.3515 20.2895 -0.1
+ vertex 22.3515 20.2895 -0.2
endloop
endfacet
facet normal 0.787511 0.616301 0
outer loop
vertex 22.2213 20.4283 0
- vertex 22.1028 20.5797 -0.1
+ vertex 22.1028 20.5797 -0.2
vertex 22.1028 20.5797 0
endloop
endfacet
facet normal 0.787511 0.616301 0
outer loop
- vertex 22.1028 20.5797 -0.1
+ vertex 22.1028 20.5797 -0.2
vertex 22.2213 20.4283 0
- vertex 22.2213 20.4283 -0.1
+ vertex 22.2213 20.4283 -0.2
endloop
endfacet
facet normal 0.859714 0.510776 0
outer loop
vertex 22.1028 20.5797 0
- vertex 21.8989 20.9229 -0.1
+ vertex 21.8989 20.9229 -0.2
vertex 21.8989 20.9229 0
endloop
endfacet
facet normal 0.859714 0.510776 0
outer loop
- vertex 21.8989 20.9229 -0.1
+ vertex 21.8989 20.9229 -0.2
vertex 22.1028 20.5797 0
- vertex 22.1028 20.5797 -0.1
+ vertex 22.1028 20.5797 -0.2
endloop
endfacet
facet normal 0.926661 0.375897 0
outer loop
vertex 21.8989 20.9229 0
- vertex 21.7362 21.3239 -0.1
+ vertex 21.7362 21.3239 -0.2
vertex 21.7362 21.3239 0
endloop
endfacet
facet normal 0.926661 0.375897 0
outer loop
- vertex 21.7362 21.3239 -0.1
+ vertex 21.7362 21.3239 -0.2
vertex 21.8989 20.9229 0
- vertex 21.8989 20.9229 -0.1
+ vertex 21.8989 20.9229 -0.2
endloop
endfacet
facet normal 0.965497 0.260414 0
outer loop
vertex 21.7362 21.3239 0
- vertex 21.6111 21.7881 -0.1
+ vertex 21.6111 21.7881 -0.2
vertex 21.6111 21.7881 0
endloop
endfacet
facet normal 0.965497 0.260414 0
outer loop
- vertex 21.6111 21.7881 -0.1
+ vertex 21.6111 21.7881 -0.2
vertex 21.7362 21.3239 0
- vertex 21.7362 21.3239 -0.1
+ vertex 21.7362 21.3239 -0.2
endloop
endfacet
facet normal 0.985599 0.169101 0
outer loop
vertex 21.6111 21.7881 0
- vertex 21.5197 22.3204 -0.1
+ vertex 21.5197 22.3204 -0.2
vertex 21.5197 22.3204 0
endloop
endfacet
facet normal 0.985599 0.169101 0
outer loop
- vertex 21.5197 22.3204 -0.1
+ vertex 21.5197 22.3204 -0.2
vertex 21.6111 21.7881 0
- vertex 21.6111 21.7881 -0.1
+ vertex 21.6111 21.7881 -0.2
endloop
endfacet
facet normal 0.981389 0.192031 0
outer loop
vertex 21.5197 22.3204 0
- vertex 21.4205 22.8275 -0.1
+ vertex 21.4205 22.8275 -0.2
vertex 21.4205 22.8275 0
endloop
endfacet
facet normal 0.981389 0.192031 0
outer loop
- vertex 21.4205 22.8275 -0.1
+ vertex 21.4205 22.8275 -0.2
vertex 21.5197 22.3204 0
- vertex 21.5197 22.3204 -0.1
+ vertex 21.5197 22.3204 -0.2
endloop
endfacet
facet normal 0.957484 0.288485 0
outer loop
vertex 21.4205 22.8275 0
- vertex 21.3493 23.064 -0.1
+ vertex 21.3493 23.064 -0.2
vertex 21.3493 23.064 0
endloop
endfacet
facet normal 0.957484 0.288485 0
outer loop
- vertex 21.3493 23.064 -0.1
+ vertex 21.3493 23.064 -0.2
vertex 21.4205 22.8275 0
- vertex 21.4205 22.8275 -0.1
+ vertex 21.4205 22.8275 -0.2
endloop
endfacet
facet normal 0.934507 0.355946 0
outer loop
vertex 21.3493 23.064 0
- vertex 21.2635 23.2891 -0.1
+ vertex 21.2635 23.2891 -0.2
vertex 21.2635 23.2891 0
endloop
endfacet
facet normal 0.934507 0.355946 0
outer loop
- vertex 21.2635 23.2891 -0.1
+ vertex 21.2635 23.2891 -0.2
vertex 21.3493 23.064 0
- vertex 21.3493 23.064 -0.1
+ vertex 21.3493 23.064 -0.2
endloop
endfacet
facet normal 0.905346 0.424674 0
outer loop
vertex 21.2635 23.2891 0
- vertex 21.1632 23.503 -0.1
+ vertex 21.1632 23.503 -0.2
vertex 21.1632 23.503 0
endloop
endfacet
facet normal 0.905346 0.424674 0
outer loop
- vertex 21.1632 23.503 -0.1
+ vertex 21.1632 23.503 -0.2
vertex 21.2635 23.2891 0
- vertex 21.2635 23.2891 -0.1
+ vertex 21.2635 23.2891 -0.2
endloop
endfacet
facet normal 0.869841 0.493332 0
outer loop
vertex 21.1632 23.503 0
- vertex 21.0482 23.7058 -0.1
+ vertex 21.0482 23.7058 -0.2
vertex 21.0482 23.7058 0
endloop
endfacet
facet normal 0.869841 0.493332 0
outer loop
- vertex 21.0482 23.7058 -0.1
+ vertex 21.0482 23.7058 -0.2
vertex 21.1632 23.503 0
- vertex 21.1632 23.503 -0.1
+ vertex 21.1632 23.503 -0.2
endloop
endfacet
facet normal 0.828197 0.560437 0
outer loop
vertex 21.0482 23.7058 0
- vertex 20.9184 23.8976 -0.1
+ vertex 20.9184 23.8976 -0.2
vertex 20.9184 23.8976 0
endloop
endfacet
facet normal 0.828197 0.560437 0
outer loop
- vertex 20.9184 23.8976 -0.1
+ vertex 20.9184 23.8976 -0.2
vertex 21.0482 23.7058 0
- vertex 21.0482 23.7058 -0.1
+ vertex 21.0482 23.7058 -0.2
endloop
endfacet
facet normal 0.781014 0.624513 0
outer loop
vertex 20.9184 23.8976 0
- vertex 20.7738 24.0784 -0.1
+ vertex 20.7738 24.0784 -0.2
vertex 20.7738 24.0784 0
endloop
endfacet
facet normal 0.781014 0.624513 0
outer loop
- vertex 20.7738 24.0784 -0.1
+ vertex 20.7738 24.0784 -0.2
vertex 20.9184 23.8976 0
- vertex 20.9184 23.8976 -0.1
+ vertex 20.9184 23.8976 -0.2
endloop
endfacet
facet normal 0.729218 0.684281 0
outer loop
vertex 20.7738 24.0784 0
- vertex 20.6143 24.2484 -0.1
+ vertex 20.6143 24.2484 -0.2
vertex 20.6143 24.2484 0
endloop
endfacet
facet normal 0.729218 0.684281 0
outer loop
- vertex 20.6143 24.2484 -0.1
+ vertex 20.6143 24.2484 -0.2
vertex 20.7738 24.0784 0
- vertex 20.7738 24.0784 -0.1
+ vertex 20.7738 24.0784 -0.2
endloop
endfacet
facet normal 0.674059 0.738677 -0
outer loop
- vertex 20.6143 24.2484 -0.1
+ vertex 20.6143 24.2484 -0.2
vertex 20.4398 24.4076 0
vertex 20.6143 24.2484 0
endloop
@@ -33231,13 +33231,13 @@ solid OpenSCAD_Model
facet normal 0.674059 0.738677 0
outer loop
vertex 20.4398 24.4076 0
- vertex 20.6143 24.2484 -0.1
- vertex 20.4398 24.4076 -0.1
+ vertex 20.6143 24.2484 -0.2
+ vertex 20.4398 24.4076 -0.2
endloop
endfacet
facet normal 0.616853 0.787078 -0
outer loop
- vertex 20.4398 24.4076 -0.1
+ vertex 20.4398 24.4076 -0.2
vertex 20.2502 24.5562 0
vertex 20.4398 24.4076 0
endloop
@@ -33245,13 +33245,13 @@ solid OpenSCAD_Model
facet normal 0.616853 0.787078 0
outer loop
vertex 20.2502 24.5562 0
- vertex 20.4398 24.4076 -0.1
- vertex 20.2502 24.5562 -0.1
+ vertex 20.4398 24.4076 -0.2
+ vertex 20.2502 24.5562 -0.2
endloop
endfacet
facet normal 0.558944 0.829206 -0
outer loop
- vertex 20.2502 24.5562 -0.1
+ vertex 20.2502 24.5562 -0.2
vertex 20.0455 24.6942 0
vertex 20.2502 24.5562 0
endloop
@@ -33259,13 +33259,13 @@ solid OpenSCAD_Model
facet normal 0.558944 0.829206 0
outer loop
vertex 20.0455 24.6942 0
- vertex 20.2502 24.5562 -0.1
- vertex 20.0455 24.6942 -0.1
+ vertex 20.2502 24.5562 -0.2
+ vertex 20.0455 24.6942 -0.2
endloop
endfacet
facet normal 0.473385 0.880855 -0
outer loop
- vertex 20.0455 24.6942 -0.1
+ vertex 20.0455 24.6942 -0.2
vertex 19.5904 24.9388 0
vertex 20.0455 24.6942 0
endloop
@@ -33273,13 +33273,13 @@ solid OpenSCAD_Model
facet normal 0.473385 0.880855 0
outer loop
vertex 19.5904 24.9388 0
- vertex 20.0455 24.6942 -0.1
- vertex 19.5904 24.9388 -0.1
+ vertex 20.0455 24.6942 -0.2
+ vertex 19.5904 24.9388 -0.2
endloop
endfacet
facet normal 0.366293 0.930499 -0
outer loop
- vertex 19.5904 24.9388 -0.1
+ vertex 19.5904 24.9388 -0.2
vertex 19.0737 25.1422 0
vertex 19.5904 24.9388 0
endloop
@@ -33287,13 +33287,13 @@ solid OpenSCAD_Model
facet normal 0.366293 0.930499 0
outer loop
vertex 19.0737 25.1422 0
- vertex 19.5904 24.9388 -0.1
- vertex 19.0737 25.1422 -0.1
+ vertex 19.5904 24.9388 -0.2
+ vertex 19.0737 25.1422 -0.2
endloop
endfacet
facet normal 0.339314 0.940673 -0
outer loop
- vertex 19.0737 25.1422 -0.1
+ vertex 19.0737 25.1422 -0.2
vertex 18.5685 25.3244 0
vertex 19.0737 25.1422 0
endloop
@@ -33301,13 +33301,13 @@ solid OpenSCAD_Model
facet normal 0.339314 0.940673 0
outer loop
vertex 18.5685 25.3244 0
- vertex 19.0737 25.1422 -0.1
- vertex 18.5685 25.3244 -0.1
+ vertex 19.0737 25.1422 -0.2
+ vertex 18.5685 25.3244 -0.2
endloop
endfacet
facet normal 0.390266 0.920702 -0
outer loop
- vertex 18.5685 25.3244 -0.1
+ vertex 18.5685 25.3244 -0.2
vertex 18.1033 25.5216 0
vertex 18.5685 25.3244 0
endloop
@@ -33315,13 +33315,13 @@ solid OpenSCAD_Model
facet normal 0.390266 0.920702 0
outer loop
vertex 18.1033 25.5216 0
- vertex 18.5685 25.3244 -0.1
- vertex 18.1033 25.5216 -0.1
+ vertex 18.5685 25.3244 -0.2
+ vertex 18.1033 25.5216 -0.2
endloop
endfacet
facet normal 0.448214 0.893926 -0
outer loop
- vertex 18.1033 25.5216 -0.1
+ vertex 18.1033 25.5216 -0.2
vertex 17.6707 25.7385 0
vertex 18.1033 25.5216 0
endloop
@@ -33329,13 +33329,13 @@ solid OpenSCAD_Model
facet normal 0.448214 0.893926 0
outer loop
vertex 17.6707 25.7385 0
- vertex 18.1033 25.5216 -0.1
- vertex 17.6707 25.7385 -0.1
+ vertex 18.1033 25.5216 -0.2
+ vertex 17.6707 25.7385 -0.2
endloop
endfacet
facet normal 0.509711 0.860346 -0
outer loop
- vertex 17.6707 25.7385 -0.1
+ vertex 17.6707 25.7385 -0.2
vertex 17.2631 25.98 0
vertex 17.6707 25.7385 0
endloop
@@ -33343,13 +33343,13 @@ solid OpenSCAD_Model
facet normal 0.509711 0.860346 0
outer loop
vertex 17.2631 25.98 0
- vertex 17.6707 25.7385 -0.1
- vertex 17.2631 25.98 -0.1
+ vertex 17.6707 25.7385 -0.2
+ vertex 17.2631 25.98 -0.2
endloop
endfacet
facet normal 0.570375 0.821384 -0
outer loop
- vertex 17.2631 25.98 -0.1
+ vertex 17.2631 25.98 -0.2
vertex 16.873 26.2508 0
vertex 17.2631 25.98 0
endloop
@@ -33357,13 +33357,13 @@ solid OpenSCAD_Model
facet normal 0.570375 0.821384 0
outer loop
vertex 16.873 26.2508 0
- vertex 17.2631 25.98 -0.1
- vertex 16.873 26.2508 -0.1
+ vertex 17.2631 25.98 -0.2
+ vertex 16.873 26.2508 -0.2
endloop
endfacet
facet normal 0.626027 0.779801 -0
outer loop
- vertex 16.873 26.2508 -0.1
+ vertex 16.873 26.2508 -0.2
vertex 16.4932 26.5558 0
vertex 16.873 26.2508 0
endloop
@@ -33371,13 +33371,13 @@ solid OpenSCAD_Model
facet normal 0.626027 0.779801 0
outer loop
vertex 16.4932 26.5558 0
- vertex 16.873 26.2508 -0.1
- vertex 16.4932 26.5558 -0.1
+ vertex 16.873 26.2508 -0.2
+ vertex 16.4932 26.5558 -0.2
endloop
endfacet
facet normal 0.673725 0.738983 -0
outer loop
- vertex 16.4932 26.5558 -0.1
+ vertex 16.4932 26.5558 -0.2
vertex 16.116 26.8997 0
vertex 16.4932 26.5558 0
endloop
@@ -33385,181 +33385,181 @@ solid OpenSCAD_Model
facet normal 0.673725 0.738983 0
outer loop
vertex 16.116 26.8997 0
- vertex 16.4932 26.5558 -0.1
- vertex 16.116 26.8997 -0.1
+ vertex 16.4932 26.5558 -0.2
+ vertex 16.116 26.8997 -0.2
endloop
endfacet
facet normal 0.71226 0.701916 0
outer loop
vertex 16.116 26.8997 0
- vertex 15.734 27.2872 -0.1
+ vertex 15.734 27.2872 -0.2
vertex 15.734 27.2872 0
endloop
endfacet
facet normal 0.71226 0.701916 0
outer loop
- vertex 15.734 27.2872 -0.1
+ vertex 15.734 27.2872 -0.2
vertex 16.116 26.8997 0
- vertex 16.116 26.8997 -0.1
+ vertex 16.116 26.8997 -0.2
endloop
endfacet
facet normal 0.751608 0.65961 0
outer loop
vertex 15.734 27.2872 0
- vertex 15.344 27.7317 -0.1
+ vertex 15.344 27.7317 -0.2
vertex 15.344 27.7317 0
endloop
endfacet
facet normal 0.751608 0.65961 0
outer loop
- vertex 15.344 27.7317 -0.1
+ vertex 15.344 27.7317 -0.2
vertex 15.734 27.2872 0
- vertex 15.734 27.2872 -0.1
+ vertex 15.734 27.2872 -0.2
endloop
endfacet
facet normal 0.827441 0.561552 0
outer loop
vertex 15.344 27.7317 0
- vertex 15.2193 27.9155 -0.1
+ vertex 15.2193 27.9155 -0.2
vertex 15.2193 27.9155 0
endloop
endfacet
facet normal 0.827441 0.561552 0
outer loop
- vertex 15.2193 27.9155 -0.1
+ vertex 15.2193 27.9155 -0.2
vertex 15.344 27.7317 0
- vertex 15.344 27.7317 -0.1
+ vertex 15.344 27.7317 -0.2
endloop
endfacet
facet normal 0.901872 0.432003 0
outer loop
vertex 15.2193 27.9155 0
- vertex 15.1337 28.0941 -0.1
+ vertex 15.1337 28.0941 -0.2
vertex 15.1337 28.0941 0
endloop
endfacet
facet normal 0.901872 0.432003 0
outer loop
- vertex 15.1337 28.0941 -0.1
+ vertex 15.1337 28.0941 -0.2
vertex 15.2193 27.9155 0
- vertex 15.2193 27.9155 -0.1
+ vertex 15.2193 27.9155 -0.2
endloop
endfacet
facet normal 0.963972 0.266005 0
outer loop
vertex 15.1337 28.0941 0
- vertex 15.0817 28.2827 -0.1
+ vertex 15.0817 28.2827 -0.2
vertex 15.0817 28.2827 0
endloop
endfacet
facet normal 0.963972 0.266005 0
outer loop
- vertex 15.0817 28.2827 -0.1
+ vertex 15.0817 28.2827 -0.2
vertex 15.1337 28.0941 0
- vertex 15.1337 28.0941 -0.1
+ vertex 15.1337 28.0941 -0.2
endloop
endfacet
facet normal 0.993628 0.112714 0
outer loop
vertex 15.0817 28.2827 0
- vertex 15.0574 28.4965 -0.1
+ vertex 15.0574 28.4965 -0.2
vertex 15.0574 28.4965 0
endloop
endfacet
facet normal 0.993628 0.112714 0
outer loop
- vertex 15.0574 28.4965 -0.1
+ vertex 15.0574 28.4965 -0.2
vertex 15.0817 28.2827 0
- vertex 15.0817 28.2827 -0.1
+ vertex 15.0817 28.2827 -0.2
endloop
endfacet
facet normal 0.999963 0.00862244 0
outer loop
vertex 15.0574 28.4965 0
- vertex 15.0552 28.7509 -0.1
+ vertex 15.0552 28.7509 -0.2
vertex 15.0552 28.7509 0
endloop
endfacet
facet normal 0.999963 0.00862244 0
outer loop
- vertex 15.0552 28.7509 -0.1
+ vertex 15.0552 28.7509 -0.2
vertex 15.0574 28.4965 0
- vertex 15.0574 28.4965 -0.1
+ vertex 15.0574 28.4965 -0.2
endloop
endfacet
facet normal 0.99896 -0.0455854 0
outer loop
vertex 15.0552 28.7509 0
- vertex 15.0694 29.0611 -0.1
+ vertex 15.0694 29.0611 -0.2
vertex 15.0694 29.0611 0
endloop
endfacet
facet normal 0.99896 -0.0455854 0
outer loop
- vertex 15.0694 29.0611 -0.1
+ vertex 15.0694 29.0611 -0.2
vertex 15.0552 28.7509 0
- vertex 15.0552 28.7509 -0.1
+ vertex 15.0552 28.7509 -0.2
endloop
endfacet
facet normal 0.995626 -0.0934289 0
outer loop
vertex 15.0694 29.0611 0
- vertex 15.1102 29.496 -0.1
+ vertex 15.1102 29.496 -0.2
vertex 15.1102 29.496 0
endloop
endfacet
facet normal 0.995626 -0.0934289 0
outer loop
- vertex 15.1102 29.496 -0.1
+ vertex 15.1102 29.496 -0.2
vertex 15.0694 29.0611 0
- vertex 15.0694 29.0611 -0.1
+ vertex 15.0694 29.0611 -0.2
endloop
endfacet
facet normal 0.982507 -0.186226 0
outer loop
vertex 15.1102 29.496 0
- vertex 15.1701 29.8123 -0.1
+ vertex 15.1701 29.8123 -0.2
vertex 15.1701 29.8123 0
endloop
endfacet
facet normal 0.982507 -0.186226 0
outer loop
- vertex 15.1701 29.8123 -0.1
+ vertex 15.1701 29.8123 -0.2
vertex 15.1102 29.496 0
- vertex 15.1102 29.496 -0.1
+ vertex 15.1102 29.496 -0.2
endloop
endfacet
facet normal 0.936612 -0.350368 0
outer loop
vertex 15.1701 29.8123 0
- vertex 15.2437 30.0088 -0.1
+ vertex 15.2437 30.0088 -0.2
vertex 15.2437 30.0088 0
endloop
endfacet
facet normal 0.936612 -0.350368 0
outer loop
- vertex 15.2437 30.0088 -0.1
+ vertex 15.2437 30.0088 -0.2
vertex 15.1701 29.8123 0
- vertex 15.1701 29.8123 -0.1
+ vertex 15.1701 29.8123 -0.2
endloop
endfacet
facet normal 0.797615 -0.603167 0
outer loop
vertex 15.2437 30.0088 0
- vertex 15.2838 30.0618 -0.1
+ vertex 15.2838 30.0618 -0.2
vertex 15.2838 30.0618 0
endloop
endfacet
facet normal 0.797615 -0.603167 0
outer loop
- vertex 15.2838 30.0618 -0.1
+ vertex 15.2838 30.0618 -0.2
vertex 15.2437 30.0088 0
- vertex 15.2437 30.0088 -0.1
+ vertex 15.2437 30.0088 -0.2
endloop
endfacet
facet normal 0.48104 -0.876698 0
outer loop
- vertex 15.2838 30.0618 -0.1
+ vertex 15.2838 30.0618 -0.2
vertex 15.3252 30.0845 0
vertex 15.2838 30.0618 0
endloop
@@ -33567,13 +33567,13 @@ solid OpenSCAD_Model
facet normal 0.48104 -0.876698 0
outer loop
vertex 15.3252 30.0845 0
- vertex 15.2838 30.0618 -0.1
- vertex 15.3252 30.0845 -0.1
+ vertex 15.2838 30.0618 -0.2
+ vertex 15.3252 30.0845 -0.2
endloop
endfacet
facet normal -0.180566 -0.983563 0
outer loop
- vertex 15.3252 30.0845 -0.1
+ vertex 15.3252 30.0845 -0.2
vertex 15.3672 30.0768 0
vertex 15.3252 30.0845 0
endloop
@@ -33581,13 +33581,13 @@ solid OpenSCAD_Model
facet normal -0.180566 -0.983563 -0
outer loop
vertex 15.3672 30.0768 0
- vertex 15.3252 30.0845 -0.1
- vertex 15.3672 30.0768 -0.1
+ vertex 15.3252 30.0845 -0.2
+ vertex 15.3672 30.0768 -0.2
endloop
endfacet
facet normal -0.674079 -0.738659 0
outer loop
- vertex 15.3672 30.0768 -0.1
+ vertex 15.3672 30.0768 -0.2
vertex 15.4091 30.0386 0
vertex 15.3672 30.0768 0
endloop
@@ -33595,153 +33595,153 @@ solid OpenSCAD_Model
facet normal -0.674079 -0.738659 -0
outer loop
vertex 15.4091 30.0386 0
- vertex 15.3672 30.0768 -0.1
- vertex 15.4091 30.0386 -0.1
+ vertex 15.3672 30.0768 -0.2
+ vertex 15.4091 30.0386 -0.2
endloop
endfacet
facet normal -0.901794 -0.432166 0
outer loop
- vertex 15.49 29.8698 -0.1
+ vertex 15.49 29.8698 -0.2
vertex 15.4091 30.0386 0
- vertex 15.4091 30.0386 -0.1
+ vertex 15.4091 30.0386 -0.2
endloop
endfacet
facet normal -0.901794 -0.432166 0
outer loop
vertex 15.4091 30.0386 0
- vertex 15.49 29.8698 -0.1
+ vertex 15.49 29.8698 -0.2
vertex 15.49 29.8698 0
endloop
endfacet
facet normal -0.970859 -0.239653 0
outer loop
- vertex 15.5622 29.5773 -0.1
+ vertex 15.5622 29.5773 -0.2
vertex 15.49 29.8698 0
- vertex 15.49 29.8698 -0.1
+ vertex 15.49 29.8698 -0.2
endloop
endfacet
facet normal -0.970859 -0.239653 0
outer loop
vertex 15.49 29.8698 0
- vertex 15.5622 29.5773 -0.1
+ vertex 15.5622 29.5773 -0.2
vertex 15.5622 29.5773 0
endloop
endfacet
facet normal -0.990483 -0.137635 0
outer loop
- vertex 15.6202 29.1601 -0.1
+ vertex 15.6202 29.1601 -0.2
vertex 15.5622 29.5773 0
- vertex 15.5622 29.5773 -0.1
+ vertex 15.5622 29.5773 -0.2
endloop
endfacet
facet normal -0.990483 -0.137635 0
outer loop
vertex 15.5622 29.5773 0
- vertex 15.6202 29.1601 -0.1
+ vertex 15.6202 29.1601 -0.2
vertex 15.6202 29.1601 0
endloop
endfacet
facet normal -0.987242 -0.159229 0
outer loop
- vertex 15.6927 28.7106 -0.1
+ vertex 15.6927 28.7106 -0.2
vertex 15.6202 29.1601 0
- vertex 15.6202 29.1601 -0.1
+ vertex 15.6202 29.1601 -0.2
endloop
endfacet
facet normal -0.987242 -0.159229 0
outer loop
vertex 15.6202 29.1601 0
- vertex 15.6927 28.7106 -0.1
+ vertex 15.6927 28.7106 -0.2
vertex 15.6927 28.7106 0
endloop
endfacet
facet normal -0.964764 -0.263116 0
outer loop
- vertex 15.7487 28.5051 -0.1
+ vertex 15.7487 28.5051 -0.2
vertex 15.6927 28.7106 0
- vertex 15.6927 28.7106 -0.1
+ vertex 15.6927 28.7106 -0.2
endloop
endfacet
facet normal -0.964764 -0.263116 0
outer loop
vertex 15.6927 28.7106 0
- vertex 15.7487 28.5051 -0.1
+ vertex 15.7487 28.5051 -0.2
vertex 15.7487 28.5051 0
endloop
endfacet
facet normal -0.93932 -0.343042 0
outer loop
- vertex 15.8197 28.3106 -0.1
+ vertex 15.8197 28.3106 -0.2
vertex 15.7487 28.5051 0
- vertex 15.7487 28.5051 -0.1
+ vertex 15.7487 28.5051 -0.2
endloop
endfacet
facet normal -0.93932 -0.343042 0
outer loop
vertex 15.7487 28.5051 0
- vertex 15.8197 28.3106 -0.1
+ vertex 15.8197 28.3106 -0.2
vertex 15.8197 28.3106 0
endloop
endfacet
facet normal -0.904159 -0.427196 0
outer loop
- vertex 15.9071 28.1258 -0.1
+ vertex 15.9071 28.1258 -0.2
vertex 15.8197 28.3106 0
- vertex 15.8197 28.3106 -0.1
+ vertex 15.8197 28.3106 -0.2
endloop
endfacet
facet normal -0.904159 -0.427196 0
outer loop
vertex 15.8197 28.3106 0
- vertex 15.9071 28.1258 -0.1
+ vertex 15.9071 28.1258 -0.2
vertex 15.9071 28.1258 0
endloop
endfacet
facet normal -0.859613 -0.510945 0
outer loop
- vertex 16.0121 27.9491 -0.1
+ vertex 16.0121 27.9491 -0.2
vertex 15.9071 28.1258 0
- vertex 15.9071 28.1258 -0.1
+ vertex 15.9071 28.1258 -0.2
endloop
endfacet
facet normal -0.859613 -0.510945 0
outer loop
vertex 15.9071 28.1258 0
- vertex 16.0121 27.9491 -0.1
+ vertex 16.0121 27.9491 -0.2
vertex 16.0121 27.9491 0
endloop
endfacet
facet normal -0.807674 -0.589629 0
outer loop
- vertex 16.1362 27.7792 -0.1
+ vertex 16.1362 27.7792 -0.2
vertex 16.0121 27.9491 0
- vertex 16.0121 27.9491 -0.1
+ vertex 16.0121 27.9491 -0.2
endloop
endfacet
facet normal -0.807674 -0.589629 0
outer loop
vertex 16.0121 27.9491 0
- vertex 16.1362 27.7792 -0.1
+ vertex 16.1362 27.7792 -0.2
vertex 16.1362 27.7792 0
endloop
endfacet
facet normal -0.751613 -0.659605 0
outer loop
- vertex 16.2806 27.6146 -0.1
+ vertex 16.2806 27.6146 -0.2
vertex 16.1362 27.7792 0
- vertex 16.1362 27.7792 -0.1
+ vertex 16.1362 27.7792 -0.2
endloop
endfacet
facet normal -0.751613 -0.659605 0
outer loop
vertex 16.1362 27.7792 0
- vertex 16.2806 27.6146 -0.1
+ vertex 16.2806 27.6146 -0.2
vertex 16.2806 27.6146 0
endloop
endfacet
facet normal -0.695067 -0.718945 0
outer loop
- vertex 16.2806 27.6146 -0.1
+ vertex 16.2806 27.6146 -0.2
vertex 16.4467 27.454 0
vertex 16.2806 27.6146 0
endloop
@@ -33749,13 +33749,13 @@ solid OpenSCAD_Model
facet normal -0.695067 -0.718945 -0
outer loop
vertex 16.4467 27.454 0
- vertex 16.2806 27.6146 -0.1
- vertex 16.4467 27.454 -0.1
+ vertex 16.2806 27.6146 -0.2
+ vertex 16.4467 27.454 -0.2
endloop
endfacet
facet normal -0.641168 -0.767401 0
outer loop
- vertex 16.4467 27.454 -0.1
+ vertex 16.4467 27.454 -0.2
vertex 16.6359 27.2959 0
vertex 16.4467 27.454 0
endloop
@@ -33763,13 +33763,13 @@ solid OpenSCAD_Model
facet normal -0.641168 -0.767401 -0
outer loop
vertex 16.6359 27.2959 0
- vertex 16.4467 27.454 -0.1
- vertex 16.6359 27.2959 -0.1
+ vertex 16.4467 27.454 -0.2
+ vertex 16.6359 27.2959 -0.2
endloop
endfacet
facet normal -0.569935 -0.82169 0
outer loop
- vertex 16.6359 27.2959 -0.1
+ vertex 16.6359 27.2959 -0.2
vertex 17.0889 26.9817 0
vertex 16.6359 27.2959 0
endloop
@@ -33777,13 +33777,13 @@ solid OpenSCAD_Model
facet normal -0.569935 -0.82169 -0
outer loop
vertex 17.0889 26.9817 0
- vertex 16.6359 27.2959 -0.1
- vertex 17.0889 26.9817 -0.1
+ vertex 16.6359 27.2959 -0.2
+ vertex 17.0889 26.9817 -0.2
endloop
endfacet
facet normal -0.496343 -0.868126 0
outer loop
- vertex 17.0889 26.9817 -0.1
+ vertex 17.0889 26.9817 -0.2
vertex 17.6504 26.6607 0
vertex 17.0889 26.9817 0
endloop
@@ -33791,13 +33791,13 @@ solid OpenSCAD_Model
facet normal -0.496343 -0.868126 -0
outer loop
vertex 17.6504 26.6607 0
- vertex 17.0889 26.9817 -0.1
- vertex 17.6504 26.6607 -0.1
+ vertex 17.0889 26.9817 -0.2
+ vertex 17.6504 26.6607 -0.2
endloop
endfacet
facet normal -0.4459 -0.895083 0
outer loop
- vertex 17.6504 26.6607 -0.1
+ vertex 17.6504 26.6607 -0.2
vertex 18.3311 26.3216 0
vertex 17.6504 26.6607 0
endloop
@@ -33805,13 +33805,13 @@ solid OpenSCAD_Model
facet normal -0.4459 -0.895083 -0
outer loop
vertex 18.3311 26.3216 0
- vertex 17.6504 26.6607 -0.1
- vertex 18.3311 26.3216 -0.1
+ vertex 17.6504 26.6607 -0.2
+ vertex 18.3311 26.3216 -0.2
endloop
endfacet
facet normal -0.437511 -0.899213 0
outer loop
- vertex 18.3311 26.3216 -0.1
+ vertex 18.3311 26.3216 -0.2
vertex 19.3729 25.8147 0
vertex 18.3311 26.3216 0
endloop
@@ -33819,13 +33819,13 @@ solid OpenSCAD_Model
facet normal -0.437511 -0.899213 -0
outer loop
vertex 19.3729 25.8147 0
- vertex 18.3311 26.3216 -0.1
- vertex 19.3729 25.8147 -0.1
+ vertex 18.3311 26.3216 -0.2
+ vertex 19.3729 25.8147 -0.2
endloop
endfacet
facet normal -0.473558 -0.880763 0
outer loop
- vertex 19.3729 25.8147 -0.1
+ vertex 19.3729 25.8147 -0.2
vertex 20.1936 25.3734 0
vertex 19.3729 25.8147 0
endloop
@@ -33833,13 +33833,13 @@ solid OpenSCAD_Model
facet normal -0.473558 -0.880763 -0
outer loop
vertex 20.1936 25.3734 0
- vertex 19.3729 25.8147 -0.1
- vertex 20.1936 25.3734 -0.1
+ vertex 19.3729 25.8147 -0.2
+ vertex 20.1936 25.3734 -0.2
endloop
endfacet
facet normal -0.521003 -0.853555 0
outer loop
- vertex 20.1936 25.3734 -0.1
+ vertex 20.1936 25.3734 -0.2
vertex 20.53 25.168 0
vertex 20.1936 25.3734 0
endloop
@@ -33847,13 +33847,13 @@ solid OpenSCAD_Model
facet normal -0.521003 -0.853555 -0
outer loop
vertex 20.53 25.168 0
- vertex 20.1936 25.3734 -0.1
- vertex 20.53 25.168 -0.1
+ vertex 20.1936 25.3734 -0.2
+ vertex 20.53 25.168 -0.2
endloop
endfacet
facet normal -0.565431 -0.824796 0
outer loop
- vertex 20.53 25.168 -0.1
+ vertex 20.53 25.168 -0.2
vertex 20.8221 24.9679 0
vertex 20.53 25.168 0
endloop
@@ -33861,13 +33861,13 @@ solid OpenSCAD_Model
facet normal -0.565431 -0.824796 -0
outer loop
vertex 20.8221 24.9679 0
- vertex 20.53 25.168 -0.1
- vertex 20.8221 24.9679 -0.1
+ vertex 20.53 25.168 -0.2
+ vertex 20.8221 24.9679 -0.2
endloop
endfacet
facet normal -0.620484 -0.784219 0
outer loop
- vertex 20.8221 24.9679 -0.1
+ vertex 20.8221 24.9679 -0.2
vertex 21.0733 24.7691 0
vertex 20.8221 24.9679 0
endloop
@@ -33875,13 +33875,13 @@ solid OpenSCAD_Model
facet normal -0.620484 -0.784219 -0
outer loop
vertex 21.0733 24.7691 0
- vertex 20.8221 24.9679 -0.1
- vertex 21.0733 24.7691 -0.1
+ vertex 20.8221 24.9679 -0.2
+ vertex 21.0733 24.7691 -0.2
endloop
endfacet
facet normal -0.684731 -0.728796 0
outer loop
- vertex 21.0733 24.7691 -0.1
+ vertex 21.0733 24.7691 -0.2
vertex 21.2873 24.568 0
vertex 21.0733 24.7691 0
endloop
@@ -33889,181 +33889,181 @@ solid OpenSCAD_Model
facet normal -0.684731 -0.728796 -0
outer loop
vertex 21.2873 24.568 0
- vertex 21.0733 24.7691 -0.1
- vertex 21.2873 24.568 -0.1
+ vertex 21.0733 24.7691 -0.2
+ vertex 21.2873 24.568 -0.2
endloop
endfacet
facet normal -0.754027 -0.656843 0
outer loop
- vertex 21.4677 24.3609 -0.1
+ vertex 21.4677 24.3609 -0.2
vertex 21.2873 24.568 0
- vertex 21.2873 24.568 -0.1
+ vertex 21.2873 24.568 -0.2
endloop
endfacet
facet normal -0.754027 -0.656843 0
outer loop
vertex 21.2873 24.568 0
- vertex 21.4677 24.3609 -0.1
+ vertex 21.4677 24.3609 -0.2
vertex 21.4677 24.3609 0
endloop
endfacet
facet normal -0.821674 -0.569958 0
outer loop
- vertex 21.6182 24.144 -0.1
+ vertex 21.6182 24.144 -0.2
vertex 21.4677 24.3609 0
- vertex 21.4677 24.3609 -0.1
+ vertex 21.4677 24.3609 -0.2
endloop
endfacet
facet normal -0.821674 -0.569958 0
outer loop
vertex 21.4677 24.3609 0
- vertex 21.6182 24.144 -0.1
+ vertex 21.6182 24.144 -0.2
vertex 21.6182 24.144 0
endloop
endfacet
facet normal -0.880428 -0.47418 0
outer loop
- vertex 21.7423 23.9135 -0.1
+ vertex 21.7423 23.9135 -0.2
vertex 21.6182 24.144 0
- vertex 21.6182 24.144 -0.1
+ vertex 21.6182 24.144 -0.2
endloop
endfacet
facet normal -0.880428 -0.47418 0
outer loop
vertex 21.6182 24.144 0
- vertex 21.7423 23.9135 -0.1
+ vertex 21.7423 23.9135 -0.2
vertex 21.7423 23.9135 0
endloop
endfacet
facet normal -0.925485 -0.378785 0
outer loop
- vertex 21.8437 23.6658 -0.1
+ vertex 21.8437 23.6658 -0.2
vertex 21.7423 23.9135 0
- vertex 21.7423 23.9135 -0.1
+ vertex 21.7423 23.9135 -0.2
endloop
endfacet
facet normal -0.925485 -0.378785 0
outer loop
vertex 21.7423 23.9135 0
- vertex 21.8437 23.6658 -0.1
+ vertex 21.8437 23.6658 -0.2
vertex 21.8437 23.6658 0
endloop
endfacet
facet normal -0.956187 -0.292757 0
outer loop
- vertex 21.926 23.397 -0.1
+ vertex 21.926 23.397 -0.2
vertex 21.8437 23.6658 0
- vertex 21.8437 23.6658 -0.1
+ vertex 21.8437 23.6658 -0.2
endloop
endfacet
facet normal -0.956187 -0.292757 0
outer loop
vertex 21.8437 23.6658 0
- vertex 21.926 23.397 -0.1
+ vertex 21.926 23.397 -0.2
vertex 21.926 23.397 0
endloop
endfacet
facet normal -0.975069 -0.221901 0
outer loop
- vertex 21.9928 23.1034 -0.1
+ vertex 21.9928 23.1034 -0.2
vertex 21.926 23.397 0
- vertex 21.926 23.397 -0.1
+ vertex 21.926 23.397 -0.2
endloop
endfacet
facet normal -0.975069 -0.221901 0
outer loop
vertex 21.926 23.397 0
- vertex 21.9928 23.1034 -0.1
+ vertex 21.9928 23.1034 -0.2
vertex 21.9928 23.1034 0
endloop
endfacet
facet normal -0.988902 -0.14857 0
outer loop
- vertex 22.0944 22.427 -0.1
+ vertex 22.0944 22.427 -0.2
vertex 21.9928 23.1034 0
- vertex 21.9928 23.1034 -0.1
+ vertex 21.9928 23.1034 -0.2
endloop
endfacet
facet normal -0.988902 -0.14857 0
outer loop
vertex 21.9928 23.1034 0
- vertex 22.0944 22.427 -0.1
+ vertex 22.0944 22.427 -0.2
vertex 22.0944 22.427 0
endloop
endfacet
facet normal -0.986323 -0.164825 0
outer loop
- vertex 22.1689 21.9813 -0.1
+ vertex 22.1689 21.9813 -0.2
vertex 22.0944 22.427 0
- vertex 22.0944 22.427 -0.1
+ vertex 22.0944 22.427 -0.2
endloop
endfacet
facet normal -0.986323 -0.164825 0
outer loop
vertex 22.0944 22.427 0
- vertex 22.1689 21.9813 -0.1
+ vertex 22.1689 21.9813 -0.2
vertex 22.1689 21.9813 0
endloop
endfacet
facet normal -0.960165 -0.279433 0
outer loop
- vertex 22.2815 21.5943 -0.1
+ vertex 22.2815 21.5943 -0.2
vertex 22.1689 21.9813 0
- vertex 22.1689 21.9813 -0.1
+ vertex 22.1689 21.9813 -0.2
endloop
endfacet
facet normal -0.960165 -0.279433 0
outer loop
vertex 22.1689 21.9813 0
- vertex 22.2815 21.5943 -0.1
+ vertex 22.2815 21.5943 -0.2
vertex 22.2815 21.5943 0
endloop
endfacet
facet normal -0.907871 -0.41925 0
outer loop
- vertex 22.4341 21.2638 -0.1
+ vertex 22.4341 21.2638 -0.2
vertex 22.2815 21.5943 0
- vertex 22.2815 21.5943 -0.1
+ vertex 22.2815 21.5943 -0.2
endloop
endfacet
facet normal -0.907871 -0.41925 0
outer loop
vertex 22.2815 21.5943 0
- vertex 22.4341 21.2638 -0.1
+ vertex 22.4341 21.2638 -0.2
vertex 22.4341 21.2638 0
endloop
endfacet
facet normal -0.817597 -0.575791 0
outer loop
- vertex 22.6286 20.9877 -0.1
+ vertex 22.6286 20.9877 -0.2
vertex 22.4341 21.2638 0
- vertex 22.4341 21.2638 -0.1
+ vertex 22.4341 21.2638 -0.2
endloop
endfacet
facet normal -0.817597 -0.575791 0
outer loop
vertex 22.4341 21.2638 0
- vertex 22.6286 20.9877 -0.1
+ vertex 22.6286 20.9877 -0.2
vertex 22.6286 20.9877 0
endloop
endfacet
facet normal -0.721714 -0.692192 0
outer loop
- vertex 22.7421 20.8693 -0.1
+ vertex 22.7421 20.8693 -0.2
vertex 22.6286 20.9877 0
- vertex 22.6286 20.9877 -0.1
+ vertex 22.6286 20.9877 -0.2
endloop
endfacet
facet normal -0.721714 -0.692192 0
outer loop
vertex 22.6286 20.9877 0
- vertex 22.7421 20.8693 -0.1
+ vertex 22.7421 20.8693 -0.2
vertex 22.7421 20.8693 0
endloop
endfacet
facet normal -0.646202 -0.763167 0
outer loop
- vertex 22.7421 20.8693 -0.1
+ vertex 22.7421 20.8693 -0.2
vertex 22.8668 20.7638 0
vertex 22.7421 20.8693 0
endloop
@@ -34071,13 +34071,13 @@ solid OpenSCAD_Model
facet normal -0.646202 -0.763167 -0
outer loop
vertex 22.8668 20.7638 0
- vertex 22.7421 20.8693 -0.1
- vertex 22.8668 20.7638 -0.1
+ vertex 22.7421 20.8693 -0.2
+ vertex 22.8668 20.7638 -0.2
endloop
endfacet
facet normal -0.522339 -0.852738 0
outer loop
- vertex 22.8668 20.7638 -0.1
+ vertex 22.8668 20.7638 -0.2
vertex 23.1504 20.59 0
vertex 22.8668 20.7638 0
endloop
@@ -34085,13 +34085,13 @@ solid OpenSCAD_Model
facet normal -0.522339 -0.852738 -0
outer loop
vertex 23.1504 20.59 0
- vertex 22.8668 20.7638 -0.1
- vertex 23.1504 20.59 -0.1
+ vertex 22.8668 20.7638 -0.2
+ vertex 23.1504 20.59 -0.2
endloop
endfacet
facet normal -0.355133 -0.934816 0
outer loop
- vertex 23.1504 20.59 -0.1
+ vertex 23.1504 20.59 -0.2
vertex 23.4814 20.4643 0
vertex 23.1504 20.59 0
endloop
@@ -34099,13 +34099,13 @@ solid OpenSCAD_Model
facet normal -0.355133 -0.934816 -0
outer loop
vertex 23.4814 20.4643 0
- vertex 23.1504 20.59 -0.1
- vertex 23.4814 20.4643 -0.1
+ vertex 23.1504 20.59 -0.2
+ vertex 23.4814 20.4643 -0.2
endloop
endfacet
facet normal -0.205594 -0.978637 0
outer loop
- vertex 23.4814 20.4643 -0.1
+ vertex 23.4814 20.4643 -0.2
vertex 23.8617 20.3844 0
vertex 23.4814 20.4643 0
endloop
@@ -34113,13 +34113,13 @@ solid OpenSCAD_Model
facet normal -0.205594 -0.978637 -0
outer loop
vertex 23.8617 20.3844 0
- vertex 23.4814 20.4643 -0.1
- vertex 23.8617 20.3844 -0.1
+ vertex 23.4814 20.4643 -0.2
+ vertex 23.8617 20.3844 -0.2
endloop
endfacet
facet normal -0.166383 -0.986061 0
outer loop
- vertex 23.8617 20.3844 -0.1
+ vertex 23.8617 20.3844 -0.2
vertex 24.2028 20.3268 0
vertex 23.8617 20.3844 0
endloop
@@ -34127,13 +34127,13 @@ solid OpenSCAD_Model
facet normal -0.166383 -0.986061 -0
outer loop
vertex 24.2028 20.3268 0
- vertex 23.8617 20.3844 -0.1
- vertex 24.2028 20.3268 -0.1
+ vertex 23.8617 20.3844 -0.2
+ vertex 24.2028 20.3268 -0.2
endloop
endfacet
facet normal -0.222634 -0.974902 0
outer loop
- vertex 24.2028 20.3268 -0.1
+ vertex 24.2028 20.3268 -0.2
vertex 24.5205 20.2543 0
vertex 24.2028 20.3268 0
endloop
@@ -34141,13 +34141,13 @@ solid OpenSCAD_Model
facet normal -0.222634 -0.974902 -0
outer loop
vertex 24.5205 20.2543 0
- vertex 24.2028 20.3268 -0.1
- vertex 24.5205 20.2543 -0.1
+ vertex 24.2028 20.3268 -0.2
+ vertex 24.5205 20.2543 -0.2
endloop
endfacet
facet normal -0.285939 -0.958248 0
outer loop
- vertex 24.5205 20.2543 -0.1
+ vertex 24.5205 20.2543 -0.2
vertex 24.8151 20.1664 0
vertex 24.5205 20.2543 0
endloop
@@ -34155,13 +34155,13 @@ solid OpenSCAD_Model
facet normal -0.285939 -0.958248 -0
outer loop
vertex 24.8151 20.1664 0
- vertex 24.5205 20.2543 -0.1
- vertex 24.8151 20.1664 -0.1
+ vertex 24.5205 20.2543 -0.2
+ vertex 24.8151 20.1664 -0.2
endloop
endfacet
facet normal -0.356177 -0.934419 0
outer loop
- vertex 24.8151 20.1664 -0.1
+ vertex 24.8151 20.1664 -0.2
vertex 25.087 20.0627 0
vertex 24.8151 20.1664 0
endloop
@@ -34169,13 +34169,13 @@ solid OpenSCAD_Model
facet normal -0.356177 -0.934419 -0
outer loop
vertex 25.087 20.0627 0
- vertex 24.8151 20.1664 -0.1
- vertex 25.087 20.0627 -0.1
+ vertex 24.8151 20.1664 -0.2
+ vertex 25.087 20.0627 -0.2
endloop
endfacet
facet normal -0.432613 -0.90158 0
outer loop
- vertex 25.087 20.0627 -0.1
+ vertex 25.087 20.0627 -0.2
vertex 25.3364 19.943 0
vertex 25.087 20.0627 0
endloop
@@ -34183,13 +34183,13 @@ solid OpenSCAD_Model
facet normal -0.432613 -0.90158 -0
outer loop
vertex 25.3364 19.943 0
- vertex 25.087 20.0627 -0.1
- vertex 25.3364 19.943 -0.1
+ vertex 25.087 20.0627 -0.2
+ vertex 25.3364 19.943 -0.2
endloop
endfacet
facet normal -0.513641 -0.858005 0
outer loop
- vertex 25.3364 19.943 -0.1
+ vertex 25.3364 19.943 -0.2
vertex 25.5639 19.8069 0
vertex 25.3364 19.943 0
endloop
@@ -34197,13 +34197,13 @@ solid OpenSCAD_Model
facet normal -0.513641 -0.858005 -0
outer loop
vertex 25.5639 19.8069 0
- vertex 25.3364 19.943 -0.1
- vertex 25.5639 19.8069 -0.1
+ vertex 25.3364 19.943 -0.2
+ vertex 25.5639 19.8069 -0.2
endloop
endfacet
facet normal -0.59661 -0.802531 0
outer loop
- vertex 25.5639 19.8069 -0.1
+ vertex 25.5639 19.8069 -0.2
vertex 25.7697 19.6539 0
vertex 25.5639 19.8069 0
endloop
@@ -34211,13 +34211,13 @@ solid OpenSCAD_Model
facet normal -0.59661 -0.802531 -0
outer loop
vertex 25.7697 19.6539 0
- vertex 25.5639 19.8069 -0.1
- vertex 25.7697 19.6539 -0.1
+ vertex 25.5639 19.8069 -0.2
+ vertex 25.7697 19.6539 -0.2
endloop
endfacet
facet normal -0.678036 -0.735029 0
outer loop
- vertex 25.7697 19.6539 -0.1
+ vertex 25.7697 19.6539 -0.2
vertex 25.9541 19.4837 0
vertex 25.7697 19.6539 0
endloop
@@ -34225,559 +34225,559 @@ solid OpenSCAD_Model
facet normal -0.678036 -0.735029 -0
outer loop
vertex 25.9541 19.4837 0
- vertex 25.7697 19.6539 -0.1
- vertex 25.9541 19.4837 -0.1
+ vertex 25.7697 19.6539 -0.2
+ vertex 25.9541 19.4837 -0.2
endloop
endfacet
facet normal -0.75405 -0.656818 0
outer loop
- vertex 26.1176 19.296 -0.1
+ vertex 26.1176 19.296 -0.2
vertex 25.9541 19.4837 0
- vertex 25.9541 19.4837 -0.1
+ vertex 25.9541 19.4837 -0.2
endloop
endfacet
facet normal -0.75405 -0.656818 0
outer loop
vertex 25.9541 19.4837 0
- vertex 26.1176 19.296 -0.1
+ vertex 26.1176 19.296 -0.2
vertex 26.1176 19.296 0
endloop
endfacet
facet normal -0.821173 -0.570679 0
outer loop
- vertex 26.2605 19.0904 -0.1
+ vertex 26.2605 19.0904 -0.2
vertex 26.1176 19.296 0
- vertex 26.1176 19.296 -0.1
+ vertex 26.1176 19.296 -0.2
endloop
endfacet
facet normal -0.821173 -0.570679 0
outer loop
vertex 26.1176 19.296 0
- vertex 26.2605 19.0904 -0.1
+ vertex 26.2605 19.0904 -0.2
vertex 26.2605 19.0904 0
endloop
endfacet
facet normal -0.877038 -0.480422 0
outer loop
- vertex 26.3832 18.8665 -0.1
+ vertex 26.3832 18.8665 -0.2
vertex 26.2605 19.0904 0
- vertex 26.2605 19.0904 -0.1
+ vertex 26.2605 19.0904 -0.2
endloop
endfacet
facet normal -0.877038 -0.480422 0
outer loop
vertex 26.2605 19.0904 0
- vertex 26.3832 18.8665 -0.1
+ vertex 26.3832 18.8665 -0.2
vertex 26.3832 18.8665 0
endloop
endfacet
facet normal -0.920777 -0.390089 0
outer loop
- vertex 26.4859 18.624 -0.1
+ vertex 26.4859 18.624 -0.2
vertex 26.3832 18.8665 0
- vertex 26.3832 18.8665 -0.1
+ vertex 26.3832 18.8665 -0.2
endloop
endfacet
facet normal -0.920777 -0.390089 0
outer loop
vertex 26.3832 18.8665 0
- vertex 26.4859 18.624 -0.1
+ vertex 26.4859 18.624 -0.2
vertex 26.4859 18.624 0
endloop
endfacet
facet normal -0.952936 -0.30317 0
outer loop
- vertex 26.5691 18.3624 -0.1
+ vertex 26.5691 18.3624 -0.2
vertex 26.4859 18.624 0
- vertex 26.4859 18.624 -0.1
+ vertex 26.4859 18.624 -0.2
endloop
endfacet
facet normal -0.952936 -0.30317 0
outer loop
vertex 26.4859 18.624 0
- vertex 26.5691 18.3624 -0.1
+ vertex 26.5691 18.3624 -0.2
vertex 26.5691 18.3624 0
endloop
endfacet
facet normal -0.974998 -0.222215 0
outer loop
- vertex 26.6332 18.0815 -0.1
+ vertex 26.6332 18.0815 -0.2
vertex 26.5691 18.3624 0
- vertex 26.5691 18.3624 -0.1
+ vertex 26.5691 18.3624 -0.2
endloop
endfacet
facet normal -0.974998 -0.222215 0
outer loop
vertex 26.5691 18.3624 0
- vertex 26.6332 18.0815 -0.1
+ vertex 26.6332 18.0815 -0.2
vertex 26.6332 18.0815 0
endloop
endfacet
facet normal -0.98889 -0.148648 0
outer loop
- vertex 26.6784 17.7808 -0.1
+ vertex 26.6784 17.7808 -0.2
vertex 26.6332 18.0815 0
- vertex 26.6332 18.0815 -0.1
+ vertex 26.6332 18.0815 -0.2
endloop
endfacet
facet normal -0.98889 -0.148648 0
outer loop
vertex 26.6332 18.0815 0
- vertex 26.6784 17.7808 -0.1
+ vertex 26.6784 17.7808 -0.2
vertex 26.6784 17.7808 0
endloop
endfacet
facet normal -0.996548 -0.083019 0
outer loop
- vertex 26.7051 17.4601 -0.1
+ vertex 26.7051 17.4601 -0.2
vertex 26.6784 17.7808 0
- vertex 26.6784 17.7808 -0.1
+ vertex 26.6784 17.7808 -0.2
endloop
endfacet
facet normal -0.996548 -0.083019 0
outer loop
vertex 26.6784 17.7808 0
- vertex 26.7051 17.4601 -0.1
+ vertex 26.7051 17.4601 -0.2
vertex 26.7051 17.4601 0
endloop
endfacet
facet normal -0.991209 -0.132303 0
outer loop
- vertex 26.7571 17.0706 -0.1
+ vertex 26.7571 17.0706 -0.2
vertex 26.7051 17.4601 0
- vertex 26.7051 17.4601 -0.1
+ vertex 26.7051 17.4601 -0.2
endloop
endfacet
facet normal -0.991209 -0.132303 0
outer loop
vertex 26.7051 17.4601 0
- vertex 26.7571 17.0706 -0.1
+ vertex 26.7571 17.0706 -0.2
vertex 26.7571 17.0706 0
endloop
endfacet
facet normal -0.970274 -0.242008 0
outer loop
- vertex 26.8653 16.6367 -0.1
+ vertex 26.8653 16.6367 -0.2
vertex 26.7571 17.0706 0
- vertex 26.7571 17.0706 -0.1
+ vertex 26.7571 17.0706 -0.2
endloop
endfacet
facet normal -0.970274 -0.242008 0
outer loop
vertex 26.7571 17.0706 0
- vertex 26.8653 16.6367 -0.1
+ vertex 26.8653 16.6367 -0.2
vertex 26.8653 16.6367 0
endloop
endfacet
facet normal -0.944031 -0.329856 0
outer loop
- vertex 27.0139 16.2113 -0.1
+ vertex 27.0139 16.2113 -0.2
vertex 26.8653 16.6367 0
- vertex 26.8653 16.6367 -0.1
+ vertex 26.8653 16.6367 -0.2
endloop
endfacet
facet normal -0.944031 -0.329856 0
outer loop
vertex 26.8653 16.6367 0
- vertex 27.0139 16.2113 -0.1
+ vertex 27.0139 16.2113 -0.2
vertex 27.0139 16.2113 0
endloop
endfacet
facet normal -0.902944 -0.429757 0
outer loop
- vertex 27.1872 15.8473 -0.1
+ vertex 27.1872 15.8473 -0.2
vertex 27.0139 16.2113 0
- vertex 27.0139 16.2113 -0.1
+ vertex 27.0139 16.2113 -0.2
endloop
endfacet
facet normal -0.902944 -0.429757 0
outer loop
vertex 27.0139 16.2113 0
- vertex 27.1872 15.8473 -0.1
+ vertex 27.1872 15.8473 -0.2
vertex 27.1872 15.8473 0
endloop
endfacet
facet normal -0.882286 -0.470713 0
outer loop
- vertex 27.3198 15.5987 -0.1
+ vertex 27.3198 15.5987 -0.2
vertex 27.1872 15.8473 0
- vertex 27.1872 15.8473 -0.1
+ vertex 27.1872 15.8473 -0.2
endloop
endfacet
facet normal -0.882286 -0.470713 0
outer loop
vertex 27.1872 15.8473 0
- vertex 27.3198 15.5987 -0.1
+ vertex 27.3198 15.5987 -0.2
vertex 27.3198 15.5987 0
endloop
endfacet
facet normal -0.922173 -0.386777 0
outer loop
- vertex 27.4227 15.3534 -0.1
+ vertex 27.4227 15.3534 -0.2
vertex 27.3198 15.5987 0
- vertex 27.3198 15.5987 -0.1
+ vertex 27.3198 15.5987 -0.2
endloop
endfacet
facet normal -0.922173 -0.386777 0
outer loop
vertex 27.3198 15.5987 0
- vertex 27.4227 15.3534 -0.1
+ vertex 27.4227 15.3534 -0.2
vertex 27.4227 15.3534 0
endloop
endfacet
facet normal -0.962502 -0.271275 0
outer loop
- vertex 27.4995 15.0808 -0.1
+ vertex 27.4995 15.0808 -0.2
vertex 27.4227 15.3534 0
- vertex 27.4227 15.3534 -0.1
+ vertex 27.4227 15.3534 -0.2
endloop
endfacet
facet normal -0.962502 -0.271275 0
outer loop
vertex 27.4227 15.3534 0
- vertex 27.4995 15.0808 -0.1
+ vertex 27.4995 15.0808 -0.2
vertex 27.4995 15.0808 0
endloop
endfacet
facet normal -0.986697 -0.162567 0
outer loop
- vertex 27.5539 14.7505 -0.1
+ vertex 27.5539 14.7505 -0.2
vertex 27.4995 15.0808 0
- vertex 27.4995 15.0808 -0.1
+ vertex 27.4995 15.0808 -0.2
endloop
endfacet
facet normal -0.986697 -0.162567 0
outer loop
vertex 27.4995 15.0808 0
- vertex 27.5539 14.7505 -0.1
+ vertex 27.5539 14.7505 -0.2
vertex 27.5539 14.7505 0
endloop
endfacet
facet normal -0.996383 -0.0849723 0
outer loop
- vertex 27.5896 14.3319 -0.1
+ vertex 27.5896 14.3319 -0.2
vertex 27.5539 14.7505 0
- vertex 27.5539 14.7505 -0.1
+ vertex 27.5539 14.7505 -0.2
endloop
endfacet
facet normal -0.996383 -0.0849723 0
outer loop
vertex 27.5539 14.7505 0
- vertex 27.5896 14.3319 -0.1
+ vertex 27.5896 14.3319 -0.2
vertex 27.5896 14.3319 0
endloop
endfacet
facet normal -0.999262 -0.0383987 0
outer loop
- vertex 27.6103 13.7945 -0.1
+ vertex 27.6103 13.7945 -0.2
vertex 27.5896 14.3319 0
- vertex 27.5896 14.3319 -0.1
+ vertex 27.5896 14.3319 -0.2
endloop
endfacet
facet normal -0.999262 -0.0383987 0
outer loop
vertex 27.5896 14.3319 0
- vertex 27.6103 13.7945 -0.1
+ vertex 27.6103 13.7945 -0.2
vertex 27.6103 13.7945 0
endloop
endfacet
facet normal -0.999976 -0.0069841 0
outer loop
- vertex 27.6211 12.2412 -0.1
+ vertex 27.6211 12.2412 -0.2
vertex 27.6103 13.7945 0
- vertex 27.6103 13.7945 -0.1
+ vertex 27.6103 13.7945 -0.2
endloop
endfacet
facet normal -0.999976 -0.0069841 0
outer loop
vertex 27.6103 13.7945 0
- vertex 27.6211 12.2412 -0.1
+ vertex 27.6211 12.2412 -0.2
vertex 27.6211 12.2412 0
endloop
endfacet
facet normal -0.999918 0.0127851 0
outer loop
- vertex 27.6024 10.7775 -0.1
+ vertex 27.6024 10.7775 -0.2
vertex 27.6211 12.2412 0
- vertex 27.6211 12.2412 -0.1
+ vertex 27.6211 12.2412 -0.2
endloop
endfacet
facet normal -0.999918 0.0127851 0
outer loop
vertex 27.6211 12.2412 0
- vertex 27.6024 10.7775 -0.1
+ vertex 27.6024 10.7775 -0.2
vertex 27.6024 10.7775 0
endloop
endfacet
facet normal -0.999067 0.0431942 0
outer loop
- vertex 27.5775 10.2019 -0.1
+ vertex 27.5775 10.2019 -0.2
vertex 27.6024 10.7775 0
- vertex 27.6024 10.7775 -0.1
+ vertex 27.6024 10.7775 -0.2
endloop
endfacet
facet normal -0.999067 0.0431942 0
outer loop
vertex 27.6024 10.7775 0
- vertex 27.5775 10.2019 -0.1
+ vertex 27.5775 10.2019 -0.2
vertex 27.5775 10.2019 0
endloop
endfacet
facet normal -0.997132 0.0756876 0
outer loop
- vertex 27.5397 9.70386 -0.1
+ vertex 27.5397 9.70386 -0.2
vertex 27.5775 10.2019 0
- vertex 27.5775 10.2019 -0.1
+ vertex 27.5775 10.2019 -0.2
endloop
endfacet
facet normal -0.997132 0.0756876 0
outer loop
vertex 27.5775 10.2019 0
- vertex 27.5397 9.70386 -0.1
+ vertex 27.5397 9.70386 -0.2
vertex 27.5397 9.70386 0
endloop
endfacet
facet normal -0.992933 0.118678 0
outer loop
- vertex 27.4871 9.26334 -0.1
+ vertex 27.4871 9.26334 -0.2
vertex 27.5397 9.70386 0
- vertex 27.5397 9.70386 -0.1
+ vertex 27.5397 9.70386 -0.2
endloop
endfacet
facet normal -0.992933 0.118678 0
outer loop
vertex 27.5397 9.70386 0
- vertex 27.4871 9.26334 -0.1
+ vertex 27.4871 9.26334 -0.2
vertex 27.4871 9.26334 0
endloop
endfacet
facet normal -0.985483 0.169774 0
outer loop
- vertex 27.4176 8.86037 -0.1
+ vertex 27.4176 8.86037 -0.2
vertex 27.4871 9.26334 0
- vertex 27.4871 9.26334 -0.1
+ vertex 27.4871 9.26334 -0.2
endloop
endfacet
facet normal -0.985483 0.169774 0
outer loop
vertex 27.4871 9.26334 0
- vertex 27.4176 8.86037 -0.1
+ vertex 27.4176 8.86037 -0.2
vertex 27.4176 8.86037 0
endloop
endfacet
facet normal -0.974842 0.222899 0
outer loop
- vertex 27.3295 8.47496 -0.1
+ vertex 27.3295 8.47496 -0.2
vertex 27.4176 8.86037 0
- vertex 27.4176 8.86037 -0.1
+ vertex 27.4176 8.86037 -0.2
endloop
endfacet
facet normal -0.974842 0.222899 0
outer loop
vertex 27.4176 8.86037 0
- vertex 27.3295 8.47496 -0.1
+ vertex 27.3295 8.47496 -0.2
vertex 27.3295 8.47496 0
endloop
endfacet
facet normal -0.962864 0.269986 0
outer loop
- vertex 27.2208 8.08714 -0.1
+ vertex 27.2208 8.08714 -0.2
vertex 27.3295 8.47496 0
- vertex 27.3295 8.47496 -0.1
+ vertex 27.3295 8.47496 -0.2
endloop
endfacet
facet normal -0.962864 0.269986 0
outer loop
vertex 27.3295 8.47496 0
- vertex 27.2208 8.08714 -0.1
+ vertex 27.2208 8.08714 -0.2
vertex 27.2208 8.08714 0
endloop
endfacet
facet normal -0.961499 0.274809 0
outer loop
- vertex 27.1048 7.68143 -0.1
+ vertex 27.1048 7.68143 -0.2
vertex 27.2208 8.08714 0
- vertex 27.2208 8.08714 -0.1
+ vertex 27.2208 8.08714 -0.2
endloop
endfacet
facet normal -0.961499 0.274809 0
outer loop
vertex 27.2208 8.08714 0
- vertex 27.1048 7.68143 -0.1
+ vertex 27.1048 7.68143 -0.2
vertex 27.1048 7.68143 0
endloop
endfacet
facet normal -0.973193 0.229988 0
outer loop
- vertex 27.0158 7.30485 -0.1
+ vertex 27.0158 7.30485 -0.2
vertex 27.1048 7.68143 0
- vertex 27.1048 7.68143 -0.1
+ vertex 27.1048 7.68143 -0.2
endloop
endfacet
facet normal -0.973193 0.229988 0
outer loop
vertex 27.1048 7.68143 0
- vertex 27.0158 7.30485 -0.1
+ vertex 27.0158 7.30485 -0.2
vertex 27.0158 7.30485 0
endloop
endfacet
facet normal -0.985852 0.167619 0
outer loop
- vertex 26.9517 6.92758 -0.1
+ vertex 26.9517 6.92758 -0.2
vertex 27.0158 7.30485 0
- vertex 27.0158 7.30485 -0.1
+ vertex 27.0158 7.30485 -0.2
endloop
endfacet
facet normal -0.985852 0.167619 0
outer loop
vertex 27.0158 7.30485 0
- vertex 26.9517 6.92758 -0.1
+ vertex 26.9517 6.92758 -0.2
vertex 26.9517 6.92758 0
endloop
endfacet
facet normal -0.994881 0.101051 0
outer loop
- vertex 26.9103 6.51977 -0.1
+ vertex 26.9103 6.51977 -0.2
vertex 26.9517 6.92758 0
- vertex 26.9517 6.92758 -0.1
+ vertex 26.9517 6.92758 -0.2
endloop
endfacet
facet normal -0.994881 0.101051 0
outer loop
vertex 26.9517 6.92758 0
- vertex 26.9103 6.51977 -0.1
+ vertex 26.9103 6.51977 -0.2
vertex 26.9103 6.51977 0
endloop
endfacet
facet normal -0.999013 0.0444183 0
outer loop
- vertex 26.8894 6.05157 -0.1
+ vertex 26.8894 6.05157 -0.2
vertex 26.9103 6.51977 0
- vertex 26.9103 6.51977 -0.1
+ vertex 26.9103 6.51977 -0.2
endloop
endfacet
facet normal -0.999013 0.0444183 0
outer loop
vertex 26.9103 6.51977 0
- vertex 26.8894 6.05157 -0.1
+ vertex 26.8894 6.05157 -0.2
vertex 26.8894 6.05157 0
endloop
endfacet
facet normal -0.999991 0.00417733 0
outer loop
- vertex 26.8871 5.49316 -0.1
+ vertex 26.8871 5.49316 -0.2
vertex 26.8894 6.05157 0
- vertex 26.8894 6.05157 -0.1
+ vertex 26.8894 6.05157 -0.2
endloop
endfacet
facet normal -0.999991 0.00417733 0
outer loop
vertex 26.8894 6.05157 0
- vertex 26.8871 5.49316 -0.1
+ vertex 26.8871 5.49316 -0.2
vertex 26.8871 5.49316 0
endloop
endfacet
facet normal -0.999606 -0.0280683 0
outer loop
- vertex 26.9294 3.98634 -0.1
+ vertex 26.9294 3.98634 -0.2
vertex 26.8871 5.49316 0
- vertex 26.8871 5.49316 -0.1
+ vertex 26.8871 5.49316 -0.2
endloop
endfacet
facet normal -0.999606 -0.0280683 0
outer loop
vertex 26.8871 5.49316 0
- vertex 26.9294 3.98634 -0.1
+ vertex 26.9294 3.98634 -0.2
vertex 26.9294 3.98634 0
endloop
endfacet
facet normal -0.999521 -0.0309525 0
outer loop
- vertex 26.9615 2.94949 -0.1
+ vertex 26.9615 2.94949 -0.2
vertex 26.9294 3.98634 0
- vertex 26.9294 3.98634 -0.1
+ vertex 26.9294 3.98634 -0.2
endloop
endfacet
facet normal -0.999521 -0.0309525 0
outer loop
vertex 26.9294 3.98634 0
- vertex 26.9615 2.94949 -0.1
+ vertex 26.9615 2.94949 -0.2
vertex 26.9615 2.94949 0
endloop
endfacet
facet normal -0.999992 -0.00407505 0
outer loop
- vertex 26.9647 2.16551 -0.1
+ vertex 26.9647 2.16551 -0.2
vertex 26.9615 2.94949 0
- vertex 26.9615 2.94949 -0.1
+ vertex 26.9615 2.94949 -0.2
endloop
endfacet
facet normal -0.999992 -0.00407505 0
outer loop
vertex 26.9615 2.94949 0
- vertex 26.9647 2.16551 -0.1
+ vertex 26.9647 2.16551 -0.2
vertex 26.9647 2.16551 0
endloop
endfacet
facet normal -0.998255 0.0590558 0
outer loop
- vertex 26.9324 1.61996 -0.1
+ vertex 26.9324 1.61996 -0.2
vertex 26.9647 2.16551 0
- vertex 26.9647 2.16551 -0.1
+ vertex 26.9647 2.16551 -0.2
endloop
endfacet
facet normal -0.998255 0.0590558 0
outer loop
vertex 26.9647 2.16551 0
- vertex 26.9324 1.61996 -0.1
+ vertex 26.9324 1.61996 -0.2
vertex 26.9324 1.61996 0
endloop
endfacet
facet normal -0.986243 0.165303 0
outer loop
- vertex 26.901 1.43209 -0.1
+ vertex 26.901 1.43209 -0.2
vertex 26.9324 1.61996 0
- vertex 26.9324 1.61996 -0.1
+ vertex 26.9324 1.61996 -0.2
endloop
endfacet
facet normal -0.986243 0.165303 0
outer loop
vertex 26.9324 1.61996 0
- vertex 26.901 1.43209 -0.1
+ vertex 26.901 1.43209 -0.2
vertex 26.901 1.43209 0
endloop
endfacet
facet normal -0.952336 0.30505 0
outer loop
- vertex 26.8581 1.29842 -0.1
+ vertex 26.8581 1.29842 -0.2
vertex 26.901 1.43209 0
- vertex 26.901 1.43209 -0.1
+ vertex 26.901 1.43209 -0.2
endloop
endfacet
facet normal -0.952336 0.30505 0
outer loop
vertex 26.901 1.43209 0
- vertex 26.8581 1.29842 -0.1
+ vertex 26.8581 1.29842 -0.2
vertex 26.8581 1.29842 0
endloop
endfacet
facet normal -0.828352 0.560208 0
outer loop
- vertex 26.8032 1.21715 -0.1
+ vertex 26.8032 1.21715 -0.2
vertex 26.8581 1.29842 0
- vertex 26.8581 1.29842 -0.1
+ vertex 26.8581 1.29842 -0.2
endloop
endfacet
facet normal -0.828352 0.560208 0
outer loop
vertex 26.8581 1.29842 0
- vertex 26.8032 1.21715 -0.1
+ vertex 26.8032 1.21715 -0.2
vertex 26.8032 1.21715 0
endloop
endfacet
facet normal -0.411544 0.91139 0
outer loop
- vertex 26.8032 1.21715 -0.1
+ vertex 26.8032 1.21715 -0.2
vertex 26.7352 1.18648 0
vertex 26.8032 1.21715 0
endloop
@@ -34785,13 +34785,13 @@ solid OpenSCAD_Model
facet normal -0.411544 0.91139 0
outer loop
vertex 26.7352 1.18648 0
- vertex 26.8032 1.21715 -0.1
- vertex 26.7352 1.18648 -0.1
+ vertex 26.8032 1.21715 -0.2
+ vertex 26.7352 1.18648 -0.2
endloop
endfacet
facet normal 0.216454 0.976293 -0
outer loop
- vertex 26.7352 1.18648 -0.1
+ vertex 26.7352 1.18648 -0.2
vertex 26.6535 1.20459 0
vertex 26.7352 1.18648 0
endloop
@@ -34799,13 +34799,13 @@ solid OpenSCAD_Model
facet normal 0.216454 0.976293 0
outer loop
vertex 26.6535 1.20459 0
- vertex 26.7352 1.18648 -0.1
- vertex 26.6535 1.20459 -0.1
+ vertex 26.7352 1.18648 -0.2
+ vertex 26.6535 1.20459 -0.2
endloop
endfacet
facet normal 0.559991 0.828498 -0
outer loop
- vertex 26.6535 1.20459 -0.1
+ vertex 26.6535 1.20459 -0.2
vertex 26.5572 1.2697 0
vertex 26.6535 1.20459 0
endloop
@@ -34813,13 +34813,13 @@ solid OpenSCAD_Model
facet normal 0.559991 0.828498 0
outer loop
vertex 26.5572 1.2697 0
- vertex 26.6535 1.20459 -0.1
- vertex 26.5572 1.2697 -0.1
+ vertex 26.6535 1.20459 -0.2
+ vertex 26.5572 1.2697 -0.2
endloop
endfacet
facet normal 0.702452 0.711731 -0
outer loop
- vertex 26.5572 1.2697 -0.1
+ vertex 26.5572 1.2697 -0.2
vertex 26.4455 1.37999 0
vertex 26.5572 1.2697 0
endloop
@@ -34827,69 +34827,69 @@ solid OpenSCAD_Model
facet normal 0.702452 0.711731 0
outer loop
vertex 26.4455 1.37999 0
- vertex 26.5572 1.2697 -0.1
- vertex 26.4455 1.37999 -0.1
+ vertex 26.5572 1.2697 -0.2
+ vertex 26.4455 1.37999 -0.2
endloop
endfacet
facet normal 0.76838 0.639993 0
outer loop
vertex 26.4455 1.37999 0
- vertex 26.3175 1.53367 -0.1
+ vertex 26.3175 1.53367 -0.2
vertex 26.3175 1.53367 0
endloop
endfacet
facet normal 0.76838 0.639993 0
outer loop
- vertex 26.3175 1.53367 -0.1
+ vertex 26.3175 1.53367 -0.2
vertex 26.4455 1.37999 0
- vertex 26.4455 1.37999 -0.1
+ vertex 26.4455 1.37999 -0.2
endloop
endfacet
facet normal 0.813139 0.58207 0
outer loop
vertex 26.3175 1.53367 0
- vertex 26.0094 1.96397 -0.1
+ vertex 26.0094 1.96397 -0.2
vertex 26.0094 1.96397 0
endloop
endfacet
facet normal 0.813139 0.58207 0
outer loop
- vertex 26.0094 1.96397 -0.1
+ vertex 26.0094 1.96397 -0.2
vertex 26.3175 1.53367 0
- vertex 26.3175 1.53367 -0.1
+ vertex 26.3175 1.53367 -0.2
endloop
endfacet
facet normal 0.812733 0.582636 0
outer loop
vertex 26.0094 1.96397 0
- vertex 25.8138 2.23679 -0.1
+ vertex 25.8138 2.23679 -0.2
vertex 25.8138 2.23679 0
endloop
endfacet
facet normal 0.812733 0.582636 0
outer loop
- vertex 25.8138 2.23679 -0.1
+ vertex 25.8138 2.23679 -0.2
vertex 26.0094 1.96397 0
- vertex 26.0094 1.96397 -0.1
+ vertex 26.0094 1.96397 -0.2
endloop
endfacet
facet normal 0.76488 0.644173 0
outer loop
vertex 25.8138 2.23679 0
- vertex 25.6376 2.44612 -0.1
+ vertex 25.6376 2.44612 -0.2
vertex 25.6376 2.44612 0
endloop
endfacet
facet normal 0.76488 0.644173 0
outer loop
- vertex 25.6376 2.44612 -0.1
+ vertex 25.6376 2.44612 -0.2
vertex 25.8138 2.23679 0
- vertex 25.8138 2.23679 -0.1
+ vertex 25.8138 2.23679 -0.2
endloop
endfacet
facet normal 0.675362 0.737487 -0
outer loop
- vertex 25.6376 2.44612 -0.1
+ vertex 25.6376 2.44612 -0.2
vertex 25.4766 2.59351 0
vertex 25.6376 2.44612 0
endloop
@@ -34897,13 +34897,13 @@ solid OpenSCAD_Model
facet normal 0.675362 0.737487 0
outer loop
vertex 25.4766 2.59351 0
- vertex 25.6376 2.44612 -0.1
- vertex 25.4766 2.59351 -0.1
+ vertex 25.6376 2.44612 -0.2
+ vertex 25.4766 2.59351 -0.2
endloop
endfacet
facet normal 0.502892 0.86435 -0
outer loop
- vertex 25.4766 2.59351 -0.1
+ vertex 25.4766 2.59351 -0.2
vertex 25.3271 2.68052 0
vertex 25.4766 2.59351 0
endloop
@@ -34911,13 +34911,13 @@ solid OpenSCAD_Model
facet normal 0.502892 0.86435 0
outer loop
vertex 25.3271 2.68052 0
- vertex 25.4766 2.59351 -0.1
- vertex 25.3271 2.68052 -0.1
+ vertex 25.4766 2.59351 -0.2
+ vertex 25.3271 2.68052 -0.2
endloop
endfacet
facet normal 0.194571 0.980889 -0
outer loop
- vertex 25.3271 2.68052 -0.1
+ vertex 25.3271 2.68052 -0.2
vertex 25.185 2.7087 0
vertex 25.3271 2.68052 0
endloop
@@ -34925,13 +34925,13 @@ solid OpenSCAD_Model
facet normal 0.194571 0.980889 0
outer loop
vertex 25.185 2.7087 0
- vertex 25.3271 2.68052 -0.1
- vertex 25.185 2.7087 -0.1
+ vertex 25.3271 2.68052 -0.2
+ vertex 25.185 2.7087 -0.2
endloop
endfacet
facet normal -0.205381 0.978682 0
outer loop
- vertex 25.185 2.7087 -0.1
+ vertex 25.185 2.7087 -0.2
vertex 25.0464 2.67962 0
vertex 25.185 2.7087 0
endloop
@@ -34939,13 +34939,13 @@ solid OpenSCAD_Model
facet normal -0.205381 0.978682 0
outer loop
vertex 25.0464 2.67962 0
- vertex 25.185 2.7087 -0.1
- vertex 25.0464 2.67962 -0.1
+ vertex 25.185 2.7087 -0.2
+ vertex 25.0464 2.67962 -0.2
endloop
endfacet
facet normal -0.520731 0.853721 0
outer loop
- vertex 25.0464 2.67962 -0.1
+ vertex 25.0464 2.67962 -0.2
vertex 24.9074 2.59483 0
vertex 25.0464 2.67962 0
endloop
@@ -34953,13 +34953,13 @@ solid OpenSCAD_Model
facet normal -0.520731 0.853721 0
outer loop
vertex 24.9074 2.59483 0
- vertex 25.0464 2.67962 -0.1
- vertex 24.9074 2.59483 -0.1
+ vertex 25.0464 2.67962 -0.2
+ vertex 24.9074 2.59483 -0.2
endloop
endfacet
facet normal -0.695882 0.718157 0
outer loop
- vertex 24.9074 2.59483 -0.1
+ vertex 24.9074 2.59483 -0.2
vertex 24.764 2.4559 0
vertex 24.9074 2.59483 0
endloop
@@ -34967,13 +34967,13 @@ solid OpenSCAD_Model
facet normal -0.695882 0.718157 0
outer loop
vertex 24.764 2.4559 0
- vertex 24.9074 2.59483 -0.1
- vertex 24.764 2.4559 -0.1
+ vertex 24.9074 2.59483 -0.2
+ vertex 24.764 2.4559 -0.2
endloop
endfacet
facet normal -0.621809 0.783169 0
outer loop
- vertex 24.764 2.4559 -0.1
+ vertex 24.764 2.4559 -0.2
vertex 24.6285 2.34829 0
vertex 24.764 2.4559 0
endloop
@@ -34981,13 +34981,13 @@ solid OpenSCAD_Model
facet normal -0.621809 0.783169 0
outer loop
vertex 24.6285 2.34829 0
- vertex 24.764 2.4559 -0.1
- vertex 24.6285 2.34829 -0.1
+ vertex 24.764 2.4559 -0.2
+ vertex 24.6285 2.34829 -0.2
endloop
endfacet
facet normal -0.432349 0.901706 0
outer loop
- vertex 24.6285 2.34829 -0.1
+ vertex 24.6285 2.34829 -0.2
vertex 24.4388 2.25734 0
vertex 24.6285 2.34829 0
endloop
@@ -34995,13 +34995,13 @@ solid OpenSCAD_Model
facet normal -0.432349 0.901706 0
outer loop
vertex 24.4388 2.25734 0
- vertex 24.6285 2.34829 -0.1
- vertex 24.4388 2.25734 -0.1
+ vertex 24.6285 2.34829 -0.2
+ vertex 24.4388 2.25734 -0.2
endloop
endfacet
facet normal -0.283745 0.9589 0
outer loop
- vertex 24.4388 2.25734 -0.1
+ vertex 24.4388 2.25734 -0.2
vertex 24.2201 2.19262 0
vertex 24.4388 2.25734 0
endloop
@@ -35009,13 +35009,13 @@ solid OpenSCAD_Model
facet normal -0.283745 0.9589 0
outer loop
vertex 24.2201 2.19262 0
- vertex 24.4388 2.25734 -0.1
- vertex 24.2201 2.19262 -0.1
+ vertex 24.4388 2.25734 -0.2
+ vertex 24.2201 2.19262 -0.2
endloop
endfacet
facet normal -0.128745 0.991678 0
outer loop
- vertex 24.2201 2.19262 -0.1
+ vertex 24.2201 2.19262 -0.2
vertex 23.9975 2.16372 0
vertex 24.2201 2.19262 0
endloop
@@ -35023,13 +35023,13 @@ solid OpenSCAD_Model
facet normal -0.128745 0.991678 0
outer loop
vertex 23.9975 2.16372 0
- vertex 24.2201 2.19262 -0.1
- vertex 23.9975 2.16372 -0.1
+ vertex 24.2201 2.19262 -0.2
+ vertex 23.9975 2.16372 -0.2
endloop
endfacet
facet normal -0.0892316 0.996011 0
outer loop
- vertex 23.9975 2.16372 -0.1
+ vertex 23.9975 2.16372 -0.2
vertex 23.7673 2.14309 0
vertex 23.9975 2.16372 0
endloop
@@ -35037,13 +35037,13 @@ solid OpenSCAD_Model
facet normal -0.0892316 0.996011 0
outer loop
vertex 23.7673 2.14309 0
- vertex 23.9975 2.16372 -0.1
- vertex 23.7673 2.14309 -0.1
+ vertex 23.9975 2.16372 -0.2
+ vertex 23.7673 2.14309 -0.2
endloop
endfacet
facet normal -0.173492 0.984835 0
outer loop
- vertex 23.7673 2.14309 -0.1
+ vertex 23.7673 2.14309 -0.2
vertex 23.5277 2.10089 0
vertex 23.7673 2.14309 0
endloop
@@ -35051,13 +35051,13 @@ solid OpenSCAD_Model
facet normal -0.173492 0.984835 0
outer loop
vertex 23.5277 2.10089 0
- vertex 23.7673 2.14309 -0.1
- vertex 23.5277 2.10089 -0.1
+ vertex 23.7673 2.14309 -0.2
+ vertex 23.5277 2.10089 -0.2
endloop
endfacet
facet normal -0.252811 0.967516 0
outer loop
- vertex 23.5277 2.10089 -0.1
+ vertex 23.5277 2.10089 -0.2
vertex 23.3072 2.04326 0
vertex 23.5277 2.10089 0
endloop
@@ -35065,13 +35065,13 @@ solid OpenSCAD_Model
facet normal -0.252811 0.967516 0
outer loop
vertex 23.3072 2.04326 0
- vertex 23.5277 2.10089 -0.1
- vertex 23.3072 2.04326 -0.1
+ vertex 23.5277 2.10089 -0.2
+ vertex 23.3072 2.04326 -0.2
endloop
endfacet
facet normal -0.360079 0.932922 0
outer loop
- vertex 23.3072 2.04326 -0.1
+ vertex 23.3072 2.04326 -0.2
vertex 23.0469 1.94283 0
vertex 23.3072 2.04326 0
endloop
@@ -35079,13 +35079,13 @@ solid OpenSCAD_Model
facet normal -0.360079 0.932922 0
outer loop
vertex 23.0469 1.94283 0
- vertex 23.3072 2.04326 -0.1
- vertex 23.0469 1.94283 -0.1
+ vertex 23.3072 2.04326 -0.2
+ vertex 23.0469 1.94283 -0.2
endloop
endfacet
facet normal -0.120091 0.992763 0
outer loop
- vertex 23.0469 1.94283 -0.1
+ vertex 23.0469 1.94283 -0.2
vertex 22.9727 1.93385 0
vertex 23.0469 1.94283 0
endloop
@@ -35093,13 +35093,13 @@ solid OpenSCAD_Model
facet normal -0.120091 0.992763 0
outer loop
vertex 22.9727 1.93385 0
- vertex 23.0469 1.94283 -0.1
- vertex 22.9727 1.93385 -0.1
+ vertex 23.0469 1.94283 -0.2
+ vertex 22.9727 1.93385 -0.2
endloop
endfacet
facet normal 0.220007 0.975498 -0
outer loop
- vertex 22.9727 1.93385 -0.1
+ vertex 22.9727 1.93385 -0.2
vertex 22.9112 1.94773 0
vertex 22.9727 1.93385 0
endloop
@@ -35107,13 +35107,13 @@ solid OpenSCAD_Model
facet normal 0.220007 0.975498 0
outer loop
vertex 22.9112 1.94773 0
- vertex 22.9727 1.93385 -0.1
- vertex 22.9112 1.94773 -0.1
+ vertex 22.9727 1.93385 -0.2
+ vertex 22.9112 1.94773 -0.2
endloop
endfacet
facet normal 0.582178 0.813061 -0
outer loop
- vertex 22.9112 1.94773 -0.1
+ vertex 22.9112 1.94773 -0.2
vertex 22.8622 1.9828 0
vertex 22.9112 1.94773 0
endloop
@@ -35121,293 +35121,293 @@ solid OpenSCAD_Model
facet normal 0.582178 0.813061 0
outer loop
vertex 22.8622 1.9828 0
- vertex 22.9112 1.94773 -0.1
- vertex 22.8622 1.9828 -0.1
+ vertex 22.9112 1.94773 -0.2
+ vertex 22.8622 1.9828 -0.2
endloop
endfacet
facet normal 0.831256 0.55589 0
outer loop
vertex 22.8622 1.9828 0
- vertex 22.8257 2.03737 -0.1
+ vertex 22.8257 2.03737 -0.2
vertex 22.8257 2.03737 0
endloop
endfacet
facet normal 0.831256 0.55589 0
outer loop
- vertex 22.8257 2.03737 -0.1
+ vertex 22.8257 2.03737 -0.2
vertex 22.8622 1.9828 0
- vertex 22.8622 1.9828 -0.1
+ vertex 22.8622 1.9828 -0.2
endloop
endfacet
facet normal 0.948775 0.315953 0
outer loop
vertex 22.8257 2.03737 0
- vertex 22.8016 2.10976 -0.1
+ vertex 22.8016 2.10976 -0.2
vertex 22.8016 2.10976 0
endloop
endfacet
facet normal 0.948775 0.315953 0
outer loop
- vertex 22.8016 2.10976 -0.1
+ vertex 22.8016 2.10976 -0.2
vertex 22.8257 2.03737 0
- vertex 22.8257 2.03737 -0.1
+ vertex 22.8257 2.03737 -0.2
endloop
endfacet
facet normal 0.998216 0.059713 0
outer loop
vertex 22.8016 2.10976 0
- vertex 22.7901 2.30129 -0.1
+ vertex 22.7901 2.30129 -0.2
vertex 22.7901 2.30129 0
endloop
endfacet
facet normal 0.998216 0.059713 0
outer loop
- vertex 22.7901 2.30129 -0.1
+ vertex 22.7901 2.30129 -0.2
vertex 22.8016 2.10976 0
- vertex 22.8016 2.10976 -0.1
+ vertex 22.8016 2.10976 -0.2
endloop
endfacet
facet normal 0.988638 -0.150314 0
outer loop
vertex 22.7901 2.30129 0
- vertex 22.827 2.54396 -0.1
+ vertex 22.827 2.54396 -0.2
vertex 22.827 2.54396 0
endloop
endfacet
facet normal 0.988638 -0.150314 0
outer loop
- vertex 22.827 2.54396 -0.1
+ vertex 22.827 2.54396 -0.2
vertex 22.7901 2.30129 0
- vertex 22.7901 2.30129 -0.1
+ vertex 22.7901 2.30129 -0.2
endloop
endfacet
facet normal 0.957496 -0.288446 0
outer loop
vertex 22.827 2.54396 0
- vertex 22.9115 2.82433 -0.1
+ vertex 22.9115 2.82433 -0.2
vertex 22.9115 2.82433 0
endloop
endfacet
facet normal 0.957496 -0.288446 0
outer loop
- vertex 22.9115 2.82433 -0.1
+ vertex 22.9115 2.82433 -0.2
vertex 22.827 2.54396 0
- vertex 22.827 2.54396 -0.1
+ vertex 22.827 2.54396 -0.2
endloop
endfacet
facet normal 0.918399 -0.395656 0
outer loop
vertex 22.9115 2.82433 0
- vertex 23.0427 3.12896 -0.1
+ vertex 23.0427 3.12896 -0.2
vertex 23.0427 3.12896 0
endloop
endfacet
facet normal 0.918399 -0.395656 0
outer loop
- vertex 23.0427 3.12896 -0.1
+ vertex 23.0427 3.12896 -0.2
vertex 22.9115 2.82433 0
- vertex 22.9115 2.82433 -0.1
+ vertex 22.9115 2.82433 -0.2
endloop
endfacet
facet normal 0.87183 -0.489809 0
outer loop
vertex 23.0427 3.12896 0
- vertex 23.22 3.44442 -0.1
+ vertex 23.22 3.44442 -0.2
vertex 23.22 3.44442 0
endloop
endfacet
facet normal 0.87183 -0.489809 0
outer loop
- vertex 23.22 3.44442 -0.1
+ vertex 23.22 3.44442 -0.2
vertex 23.0427 3.12896 0
- vertex 23.0427 3.12896 -0.1
+ vertex 23.0427 3.12896 -0.2
endloop
endfacet
facet normal 0.879841 -0.475268 0
outer loop
vertex 23.22 3.44442 0
- vertex 23.4183 3.81156 -0.1
+ vertex 23.4183 3.81156 -0.2
vertex 23.4183 3.81156 0
endloop
endfacet
facet normal 0.879841 -0.475268 0
outer loop
- vertex 23.4183 3.81156 -0.1
+ vertex 23.4183 3.81156 -0.2
vertex 23.22 3.44442 0
- vertex 23.22 3.44442 -0.1
+ vertex 23.22 3.44442 -0.2
endloop
endfacet
facet normal 0.942923 -0.33301 0
outer loop
vertex 23.4183 3.81156 0
- vertex 23.5494 4.18291 -0.1
+ vertex 23.5494 4.18291 -0.2
vertex 23.5494 4.18291 0
endloop
endfacet
facet normal 0.942923 -0.33301 0
outer loop
- vertex 23.5494 4.18291 -0.1
+ vertex 23.5494 4.18291 -0.2
vertex 23.4183 3.81156 0
- vertex 23.4183 3.81156 -0.1
+ vertex 23.4183 3.81156 -0.2
endloop
endfacet
facet normal 0.978031 -0.208457 0
outer loop
vertex 23.5494 4.18291 0
- vertex 23.5897 4.3717 -0.1
+ vertex 23.5897 4.3717 -0.2
vertex 23.5897 4.3717 0
endloop
endfacet
facet normal 0.978031 -0.208457 0
outer loop
- vertex 23.5897 4.3717 -0.1
+ vertex 23.5897 4.3717 -0.2
vertex 23.5494 4.18291 0
- vertex 23.5494 4.18291 -0.1
+ vertex 23.5494 4.18291 -0.2
endloop
endfacet
facet normal 0.992713 -0.120506 0
outer loop
vertex 23.5897 4.3717 0
- vertex 23.6129 4.5634 -0.1
+ vertex 23.6129 4.5634 -0.2
vertex 23.6129 4.5634 0
endloop
endfacet
facet normal 0.992713 -0.120506 0
outer loop
- vertex 23.6129 4.5634 -0.1
+ vertex 23.6129 4.5634 -0.2
vertex 23.5897 4.3717 0
- vertex 23.5897 4.3717 -0.1
+ vertex 23.5897 4.3717 -0.2
endloop
endfacet
facet normal 0.99949 -0.0319444 0
outer loop
vertex 23.6129 4.5634 0
- vertex 23.6192 4.7586 -0.1
+ vertex 23.6192 4.7586 -0.2
vertex 23.6192 4.7586 0
endloop
endfacet
facet normal 0.99949 -0.0319444 0
outer loop
- vertex 23.6192 4.7586 -0.1
+ vertex 23.6192 4.7586 -0.2
vertex 23.6129 4.5634 0
- vertex 23.6129 4.5634 -0.1
+ vertex 23.6129 4.5634 -0.2
endloop
endfacet
facet normal 0.998522 0.054345 0
outer loop
vertex 23.6192 4.7586 0
- vertex 23.6083 4.95794 -0.1
+ vertex 23.6083 4.95794 -0.2
vertex 23.6083 4.95794 0
endloop
endfacet
facet normal 0.998522 0.054345 0
outer loop
- vertex 23.6083 4.95794 -0.1
+ vertex 23.6083 4.95794 -0.2
vertex 23.6192 4.7586 0
- vertex 23.6192 4.7586 -0.1
+ vertex 23.6192 4.7586 -0.2
endloop
endfacet
facet normal 0.984692 0.174301 0
outer loop
vertex 23.6083 4.95794 0
- vertex 23.5351 5.37146 -0.1
+ vertex 23.5351 5.37146 -0.2
vertex 23.5351 5.37146 0
endloop
endfacet
facet normal 0.984692 0.174301 0
outer loop
- vertex 23.5351 5.37146 -0.1
+ vertex 23.5351 5.37146 -0.2
vertex 23.6083 4.95794 0
- vertex 23.6083 4.95794 -0.1
+ vertex 23.6083 4.95794 -0.2
endloop
endfacet
facet normal 0.95097 0.309282 0
outer loop
vertex 23.5351 5.37146 0
- vertex 23.3929 5.8089 -0.1
+ vertex 23.3929 5.8089 -0.2
vertex 23.3929 5.8089 0
endloop
endfacet
facet normal 0.95097 0.309282 0
outer loop
- vertex 23.3929 5.8089 -0.1
+ vertex 23.3929 5.8089 -0.2
vertex 23.5351 5.37146 0
- vertex 23.5351 5.37146 -0.1
+ vertex 23.5351 5.37146 -0.2
endloop
endfacet
facet normal 0.910464 0.413588 0
outer loop
vertex 23.3929 5.8089 0
- vertex 23.1811 6.27516 -0.1
+ vertex 23.1811 6.27516 -0.2
vertex 23.1811 6.27516 0
endloop
endfacet
facet normal 0.910464 0.413588 0
outer loop
- vertex 23.1811 6.27516 -0.1
+ vertex 23.1811 6.27516 -0.2
vertex 23.3929 5.8089 0
- vertex 23.3929 5.8089 -0.1
+ vertex 23.3929 5.8089 -0.2
endloop
endfacet
facet normal 0.871161 0.490997 0
outer loop
vertex 23.1811 6.27516 0
- vertex 22.8992 6.77518 -0.1
+ vertex 22.8992 6.77518 -0.2
vertex 22.8992 6.77518 0
endloop
endfacet
facet normal 0.871161 0.490997 0
outer loop
- vertex 22.8992 6.77518 -0.1
+ vertex 22.8992 6.77518 -0.2
vertex 23.1811 6.27516 0
- vertex 23.1811 6.27516 -0.1
+ vertex 23.1811 6.27516 -0.2
endloop
endfacet
facet normal 0.839072 0.54402 0
outer loop
vertex 22.8992 6.77518 0
- vertex 22.6364 7.18064 -0.1
+ vertex 22.6364 7.18064 -0.2
vertex 22.6364 7.18064 0
endloop
endfacet
facet normal 0.839072 0.54402 0
outer loop
- vertex 22.6364 7.18064 -0.1
+ vertex 22.6364 7.18064 -0.2
vertex 22.8992 6.77518 0
- vertex 22.8992 6.77518 -0.1
+ vertex 22.8992 6.77518 -0.2
endloop
endfacet
facet normal 0.802153 0.597118 0
outer loop
vertex 22.6364 7.18064 0
- vertex 22.3621 7.54907 -0.1
+ vertex 22.3621 7.54907 -0.2
vertex 22.3621 7.54907 0
endloop
endfacet
facet normal 0.802153 0.597118 0
outer loop
- vertex 22.3621 7.54907 -0.1
+ vertex 22.3621 7.54907 -0.2
vertex 22.6364 7.18064 0
- vertex 22.6364 7.18064 -0.1
+ vertex 22.6364 7.18064 -0.2
endloop
endfacet
facet normal 0.754344 0.65648 0
outer loop
vertex 22.3621 7.54907 0
- vertex 22.0631 7.89267 -0.1
+ vertex 22.0631 7.89267 -0.2
vertex 22.0631 7.89267 0
endloop
endfacet
facet normal 0.754344 0.65648 0
outer loop
- vertex 22.0631 7.89267 -0.1
+ vertex 22.0631 7.89267 -0.2
vertex 22.3621 7.54907 0
- vertex 22.3621 7.54907 -0.1
+ vertex 22.3621 7.54907 -0.2
endloop
endfacet
facet normal 0.700509 0.713644 -0
outer loop
- vertex 22.0631 7.89267 -0.1
+ vertex 22.0631 7.89267 -0.2
vertex 21.7259 8.22365 0
vertex 22.0631 7.89267 0
endloop
@@ -35415,13 +35415,13 @@ solid OpenSCAD_Model
facet normal 0.700509 0.713644 0
outer loop
vertex 21.7259 8.22365 0
- vertex 22.0631 7.89267 -0.1
- vertex 21.7259 8.22365 -0.1
+ vertex 22.0631 7.89267 -0.2
+ vertex 21.7259 8.22365 -0.2
endloop
endfacet
facet normal 0.647802 0.761808 -0
outer loop
- vertex 21.7259 8.22365 -0.1
+ vertex 21.7259 8.22365 -0.2
vertex 21.3371 8.55423 0
vertex 21.7259 8.22365 0
endloop
@@ -35429,13 +35429,13 @@ solid OpenSCAD_Model
facet normal 0.647802 0.761808 0
outer loop
vertex 21.3371 8.55423 0
- vertex 21.7259 8.22365 -0.1
- vertex 21.3371 8.55423 -0.1
+ vertex 21.7259 8.22365 -0.2
+ vertex 21.3371 8.55423 -0.2
endloop
endfacet
facet normal 0.602358 0.798226 -0
outer loop
- vertex 21.3371 8.55423 -0.1
+ vertex 21.3371 8.55423 -0.2
vertex 20.8834 8.89663 0
vertex 21.3371 8.55423 0
endloop
@@ -35443,13 +35443,13 @@ solid OpenSCAD_Model
facet normal 0.602358 0.798226 0
outer loop
vertex 20.8834 8.89663 0
- vertex 21.3371 8.55423 -0.1
- vertex 20.8834 8.89663 -0.1
+ vertex 21.3371 8.55423 -0.2
+ vertex 20.8834 8.89663 -0.2
endloop
endfacet
facet normal 0.567155 0.823611 -0
outer loop
- vertex 20.8834 8.89663 -0.1
+ vertex 20.8834 8.89663 -0.2
vertex 20.3513 9.26304 0
vertex 20.8834 8.89663 0
endloop
@@ -35457,13 +35457,13 @@ solid OpenSCAD_Model
facet normal 0.567155 0.823611 0
outer loop
vertex 20.3513 9.26304 0
- vertex 20.8834 8.89663 -0.1
- vertex 20.3513 9.26304 -0.1
+ vertex 20.8834 8.89663 -0.2
+ vertex 20.3513 9.26304 -0.2
endloop
endfacet
facet normal 0.542271 0.840203 -0
outer loop
- vertex 20.3513 9.26304 -0.1
+ vertex 20.3513 9.26304 -0.2
vertex 19.7274 9.66569 0
vertex 20.3513 9.26304 0
endloop
@@ -35471,13 +35471,13 @@ solid OpenSCAD_Model
facet normal 0.542271 0.840203 0
outer loop
vertex 19.7274 9.66569 0
- vertex 20.3513 9.26304 -0.1
- vertex 19.7274 9.66569 -0.1
+ vertex 20.3513 9.26304 -0.2
+ vertex 19.7274 9.66569 -0.2
endloop
endfacet
facet normal 0.509213 0.86064 -0
outer loop
- vertex 19.7274 9.66569 -0.1
+ vertex 19.7274 9.66569 -0.2
vertex 19.4723 9.81661 0
vertex 19.7274 9.66569 0
endloop
@@ -35485,13 +35485,13 @@ solid OpenSCAD_Model
facet normal 0.509213 0.86064 0
outer loop
vertex 19.4723 9.81661 0
- vertex 19.7274 9.66569 -0.1
- vertex 19.4723 9.81661 -0.1
+ vertex 19.7274 9.66569 -0.2
+ vertex 19.4723 9.81661 -0.2
endloop
endfacet
facet normal 0.451586 0.892227 -0
outer loop
- vertex 19.4723 9.81661 -0.1
+ vertex 19.4723 9.81661 -0.2
vertex 19.2206 9.94402 0
vertex 19.4723 9.81661 0
endloop
@@ -35499,13 +35499,13 @@ solid OpenSCAD_Model
facet normal 0.451586 0.892227 0
outer loop
vertex 19.2206 9.94402 0
- vertex 19.4723 9.81661 -0.1
- vertex 19.2206 9.94402 -0.1
+ vertex 19.4723 9.81661 -0.2
+ vertex 19.2206 9.94402 -0.2
endloop
endfacet
facet normal 0.382649 0.923894 -0
outer loop
- vertex 19.2206 9.94402 -0.1
+ vertex 19.2206 9.94402 -0.2
vertex 18.9645 10.0501 0
vertex 19.2206 9.94402 0
endloop
@@ -35513,13 +35513,13 @@ solid OpenSCAD_Model
facet normal 0.382649 0.923894 0
outer loop
vertex 18.9645 10.0501 0
- vertex 19.2206 9.94402 -0.1
- vertex 18.9645 10.0501 -0.1
+ vertex 19.2206 9.94402 -0.2
+ vertex 18.9645 10.0501 -0.2
endloop
endfacet
facet normal 0.308251 0.951305 -0
outer loop
- vertex 18.9645 10.0501 -0.1
+ vertex 18.9645 10.0501 -0.2
vertex 18.6964 10.137 0
vertex 18.9645 10.0501 0
endloop
@@ -35527,13 +35527,13 @@ solid OpenSCAD_Model
facet normal 0.308251 0.951305 0
outer loop
vertex 18.6964 10.137 0
- vertex 18.9645 10.0501 -0.1
- vertex 18.6964 10.137 -0.1
+ vertex 18.9645 10.0501 -0.2
+ vertex 18.6964 10.137 -0.2
endloop
endfacet
facet normal 0.235891 0.971779 -0
outer loop
- vertex 18.6964 10.137 -0.1
+ vertex 18.6964 10.137 -0.2
vertex 18.4085 10.2069 0
vertex 18.6964 10.137 0
endloop
@@ -35541,13 +35541,13 @@ solid OpenSCAD_Model
facet normal 0.235891 0.971779 0
outer loop
vertex 18.4085 10.2069 0
- vertex 18.6964 10.137 -0.1
- vertex 18.4085 10.2069 -0.1
+ vertex 18.6964 10.137 -0.2
+ vertex 18.4085 10.2069 -0.2
endloop
endfacet
facet normal 0.172 0.985097 -0
outer loop
- vertex 18.4085 10.2069 -0.1
+ vertex 18.4085 10.2069 -0.2
vertex 18.093 10.2619 0
vertex 18.4085 10.2069 0
endloop
@@ -35555,13 +35555,13 @@ solid OpenSCAD_Model
facet normal 0.172 0.985097 0
outer loop
vertex 18.093 10.2619 0
- vertex 18.4085 10.2069 -0.1
- vertex 18.093 10.2619 -0.1
+ vertex 18.4085 10.2069 -0.2
+ vertex 18.093 10.2619 -0.2
endloop
endfacet
facet normal 0.0994696 0.995041 -0
outer loop
- vertex 18.093 10.2619 -0.1
+ vertex 18.093 10.2619 -0.2
vertex 17.3487 10.3363 0
vertex 18.093 10.2619 0
endloop
@@ -35569,13 +35569,13 @@ solid OpenSCAD_Model
facet normal 0.0994696 0.995041 0
outer loop
vertex 17.3487 10.3363 0
- vertex 18.093 10.2619 -0.1
- vertex 17.3487 10.3363 -0.1
+ vertex 18.093 10.2619 -0.2
+ vertex 17.3487 10.3363 -0.2
endloop
endfacet
facet normal 0.0510048 0.998698 -0
outer loop
- vertex 17.3487 10.3363 -0.1
+ vertex 17.3487 10.3363 -0.2
vertex 16.499 10.3797 0
vertex 17.3487 10.3363 0
endloop
@@ -35583,13 +35583,13 @@ solid OpenSCAD_Model
facet normal 0.0510048 0.998698 0
outer loop
vertex 16.499 10.3797 0
- vertex 17.3487 10.3363 -0.1
- vertex 16.499 10.3797 -0.1
+ vertex 17.3487 10.3363 -0.2
+ vertex 16.499 10.3797 -0.2
endloop
endfacet
facet normal -0.0333465 0.999444 0
outer loop
- vertex 16.499 10.3797 -0.1
+ vertex 16.499 10.3797 -0.2
vertex 16.2187 10.3704 0
vertex 16.499 10.3797 0
endloop
@@ -35597,13 +35597,13 @@ solid OpenSCAD_Model
facet normal -0.0333465 0.999444 0
outer loop
vertex 16.2187 10.3704 0
- vertex 16.499 10.3797 -0.1
- vertex 16.2187 10.3704 -0.1
+ vertex 16.499 10.3797 -0.2
+ vertex 16.2187 10.3704 -0.2
endloop
endfacet
facet normal -0.179208 0.983811 0
outer loop
- vertex 16.2187 10.3704 -0.1
+ vertex 16.2187 10.3704 -0.2
vertex 16.005 10.3315 0
vertex 16.2187 10.3704 0
endloop
@@ -35611,13 +35611,13 @@ solid OpenSCAD_Model
facet normal -0.179208 0.983811 0
outer loop
vertex 16.005 10.3315 0
- vertex 16.2187 10.3704 -0.1
- vertex 16.005 10.3315 -0.1
+ vertex 16.2187 10.3704 -0.2
+ vertex 16.005 10.3315 -0.2
endloop
endfacet
facet normal -0.405411 0.914135 0
outer loop
- vertex 16.005 10.3315 -0.1
+ vertex 16.005 10.3315 -0.2
vertex 15.8355 10.2563 0
vertex 16.005 10.3315 0
endloop
@@ -35625,13 +35625,13 @@ solid OpenSCAD_Model
facet normal -0.405411 0.914135 0
outer loop
vertex 15.8355 10.2563 0
- vertex 16.005 10.3315 -0.1
- vertex 15.8355 10.2563 -0.1
+ vertex 16.005 10.3315 -0.2
+ vertex 15.8355 10.2563 -0.2
endloop
endfacet
facet normal -0.624597 0.780947 0
outer loop
- vertex 15.8355 10.2563 -0.1
+ vertex 15.8355 10.2563 -0.2
vertex 15.6879 10.1383 0
vertex 15.8355 10.2563 0
endloop
@@ -35639,335 +35639,335 @@ solid OpenSCAD_Model
facet normal -0.624597 0.780947 0
outer loop
vertex 15.6879 10.1383 0
- vertex 15.8355 10.2563 -0.1
- vertex 15.6879 10.1383 -0.1
+ vertex 15.8355 10.2563 -0.2
+ vertex 15.6879 10.1383 -0.2
endloop
endfacet
facet normal -0.749396 0.662122 0
outer loop
- vertex 15.5399 9.97068 -0.1
+ vertex 15.5399 9.97068 -0.2
vertex 15.6879 10.1383 0
- vertex 15.6879 10.1383 -0.1
+ vertex 15.6879 10.1383 -0.2
endloop
endfacet
facet normal -0.749396 0.662122 0
outer loop
vertex 15.6879 10.1383 0
- vertex 15.5399 9.97068 -0.1
+ vertex 15.5399 9.97068 -0.2
vertex 15.5399 9.97068 0
endloop
endfacet
facet normal -0.794739 0.606951 0
outer loop
- vertex 15.369 9.74689 -0.1
+ vertex 15.369 9.74689 -0.2
vertex 15.5399 9.97068 0
- vertex 15.5399 9.97068 -0.1
+ vertex 15.5399 9.97068 -0.2
endloop
endfacet
facet normal -0.794739 0.606951 0
outer loop
vertex 15.5399 9.97068 0
- vertex 15.369 9.74689 -0.1
+ vertex 15.369 9.74689 -0.2
vertex 15.369 9.74689 0
endloop
endfacet
facet normal -0.812079 0.583548 0
outer loop
- vertex 15.213 9.52982 -0.1
+ vertex 15.213 9.52982 -0.2
vertex 15.369 9.74689 0
- vertex 15.369 9.74689 -0.1
+ vertex 15.369 9.74689 -0.2
endloop
endfacet
facet normal -0.812079 0.583548 0
outer loop
vertex 15.369 9.74689 0
- vertex 15.213 9.52982 -0.1
+ vertex 15.213 9.52982 -0.2
vertex 15.213 9.52982 0
endloop
endfacet
facet normal -0.851006 0.525156 0
outer loop
- vertex 15.0942 9.33737 -0.1
+ vertex 15.0942 9.33737 -0.2
vertex 15.213 9.52982 0
- vertex 15.213 9.52982 -0.1
+ vertex 15.213 9.52982 -0.2
endloop
endfacet
facet normal -0.851006 0.525156 0
outer loop
vertex 15.213 9.52982 0
- vertex 15.0942 9.33737 -0.1
+ vertex 15.0942 9.33737 -0.2
vertex 15.0942 9.33737 0
endloop
endfacet
facet normal -0.909184 0.416395 0
outer loop
- vertex 15.0092 9.15168 -0.1
+ vertex 15.0092 9.15168 -0.2
vertex 15.0942 9.33737 0
- vertex 15.0942 9.33737 -0.1
+ vertex 15.0942 9.33737 -0.2
endloop
endfacet
facet normal -0.909184 0.416395 0
outer loop
vertex 15.0942 9.33737 0
- vertex 15.0092 9.15168 -0.1
+ vertex 15.0092 9.15168 -0.2
vertex 15.0092 9.15168 0
endloop
endfacet
facet normal -0.963304 0.268412 0
outer loop
- vertex 14.9543 8.95485 -0.1
+ vertex 14.9543 8.95485 -0.2
vertex 15.0092 9.15168 0
- vertex 15.0092 9.15168 -0.1
+ vertex 15.0092 9.15168 -0.2
endloop
endfacet
facet normal -0.963304 0.268412 0
outer loop
vertex 15.0092 9.15168 0
- vertex 14.9543 8.95485 -0.1
+ vertex 14.9543 8.95485 -0.2
vertex 14.9543 8.95485 0
endloop
endfacet
facet normal -0.99232 0.1237 0
outer loop
- vertex 14.9262 8.72903 -0.1
+ vertex 14.9262 8.72903 -0.2
vertex 14.9543 8.95485 0
- vertex 14.9543 8.95485 -0.1
+ vertex 14.9543 8.95485 -0.2
endloop
endfacet
facet normal -0.99232 0.1237 0
outer loop
vertex 14.9543 8.95485 0
- vertex 14.9262 8.72903 -0.1
+ vertex 14.9262 8.72903 -0.2
vertex 14.9262 8.72903 0
endloop
endfacet
facet normal -0.999834 0.0182102 0
outer loop
- vertex 14.9212 8.45633 -0.1
+ vertex 14.9212 8.45633 -0.2
vertex 14.9262 8.72903 0
- vertex 14.9262 8.72903 -0.1
+ vertex 14.9262 8.72903 -0.2
endloop
endfacet
facet normal -0.999834 0.0182102 0
outer loop
vertex 14.9262 8.72903 0
- vertex 14.9212 8.45633 -0.1
+ vertex 14.9212 8.45633 -0.2
vertex 14.9212 8.45633 0
endloop
endfacet
facet normal -0.998195 -0.0600559 0
outer loop
- vertex 14.9668 7.69881 -0.1
+ vertex 14.9668 7.69881 -0.2
vertex 14.9212 8.45633 0
- vertex 14.9212 8.45633 -0.1
+ vertex 14.9212 8.45633 -0.2
endloop
endfacet
facet normal -0.998195 -0.0600559 0
outer loop
vertex 14.9212 8.45633 0
- vertex 14.9668 7.69881 -0.1
+ vertex 14.9668 7.69881 -0.2
vertex 14.9668 7.69881 0
endloop
endfacet
facet normal -0.99465 -0.103302 0
outer loop
- vertex 15.0249 7.13954 -0.1
+ vertex 15.0249 7.13954 -0.2
vertex 14.9668 7.69881 0
- vertex 14.9668 7.69881 -0.1
+ vertex 14.9668 7.69881 -0.2
endloop
endfacet
facet normal -0.99465 -0.103302 0
outer loop
vertex 14.9668 7.69881 0
- vertex 15.0249 7.13954 -0.1
+ vertex 15.0249 7.13954 -0.2
vertex 15.0249 7.13954 0
endloop
endfacet
facet normal -0.989699 -0.143163 0
outer loop
- vertex 15.1095 6.5543 -0.1
+ vertex 15.1095 6.5543 -0.2
vertex 15.0249 7.13954 0
- vertex 15.0249 7.13954 -0.1
+ vertex 15.0249 7.13954 -0.2
endloop
endfacet
facet normal -0.989699 -0.143163 0
outer loop
vertex 15.0249 7.13954 0
- vertex 15.1095 6.5543 -0.1
+ vertex 15.1095 6.5543 -0.2
vertex 15.1095 6.5543 0
endloop
endfacet
facet normal -0.984174 -0.177204 0
outer loop
- vertex 15.2183 5.95043 -0.1
+ vertex 15.2183 5.95043 -0.2
vertex 15.1095 6.5543 0
- vertex 15.1095 6.5543 -0.1
+ vertex 15.1095 6.5543 -0.2
endloop
endfacet
facet normal -0.984174 -0.177204 0
outer loop
vertex 15.1095 6.5543 0
- vertex 15.2183 5.95043 -0.1
+ vertex 15.2183 5.95043 -0.2
vertex 15.2183 5.95043 0
endloop
endfacet
facet normal -0.978296 -0.207212 0
outer loop
- vertex 15.3486 5.33522 -0.1
+ vertex 15.3486 5.33522 -0.2
vertex 15.2183 5.95043 0
- vertex 15.2183 5.95043 -0.1
+ vertex 15.2183 5.95043 -0.2
endloop
endfacet
facet normal -0.978296 -0.207212 0
outer loop
vertex 15.2183 5.95043 0
- vertex 15.3486 5.33522 -0.1
+ vertex 15.3486 5.33522 -0.2
vertex 15.3486 5.33522 0
endloop
endfacet
facet normal -0.972111 -0.23452 0
outer loop
- vertex 15.498 4.716 -0.1
+ vertex 15.498 4.716 -0.2
vertex 15.3486 5.33522 0
- vertex 15.3486 5.33522 -0.1
+ vertex 15.3486 5.33522 -0.2
endloop
endfacet
facet normal -0.972111 -0.23452 0
outer loop
vertex 15.3486 5.33522 0
- vertex 15.498 4.716 -0.1
+ vertex 15.498 4.716 -0.2
vertex 15.498 4.716 0
endloop
endfacet
facet normal -0.965559 -0.260185 0
outer loop
- vertex 15.6639 4.10009 -0.1
+ vertex 15.6639 4.10009 -0.2
vertex 15.498 4.716 0
- vertex 15.498 4.716 -0.1
+ vertex 15.498 4.716 -0.2
endloop
endfacet
facet normal -0.965559 -0.260185 0
outer loop
vertex 15.498 4.716 0
- vertex 15.6639 4.10009 -0.1
+ vertex 15.6639 4.10009 -0.2
vertex 15.6639 4.10009 0
endloop
endfacet
facet normal -0.95471 -0.297537 0
outer loop
- vertex 16.0356 2.90743 -0.1
+ vertex 16.0356 2.90743 -0.2
vertex 15.6639 4.10009 0
- vertex 15.6639 4.10009 -0.1
+ vertex 15.6639 4.10009 -0.2
endloop
endfacet
facet normal -0.95471 -0.297537 0
outer loop
vertex 15.6639 4.10009 0
- vertex 16.0356 2.90743 -0.1
+ vertex 16.0356 2.90743 -0.2
vertex 16.0356 2.90743 0
endloop
endfacet
facet normal -0.941754 -0.336302 0
outer loop
- vertex 16.2363 2.34533 -0.1
+ vertex 16.2363 2.34533 -0.2
vertex 16.0356 2.90743 0
- vertex 16.0356 2.90743 -0.1
+ vertex 16.0356 2.90743 -0.2
endloop
endfacet
facet normal -0.941754 -0.336302 0
outer loop
vertex 16.0356 2.90743 0
- vertex 16.2363 2.34533 -0.1
+ vertex 16.2363 2.34533 -0.2
vertex 16.2363 2.34533 0
endloop
endfacet
facet normal -0.931176 -0.364571 0
outer loop
- vertex 16.4437 1.81579 -0.1
+ vertex 16.4437 1.81579 -0.2
vertex 16.2363 2.34533 0
- vertex 16.2363 2.34533 -0.1
+ vertex 16.2363 2.34533 -0.2
endloop
endfacet
facet normal -0.931176 -0.364571 0
outer loop
vertex 16.2363 2.34533 0
- vertex 16.4437 1.81579 -0.1
+ vertex 16.4437 1.81579 -0.2
vertex 16.4437 1.81579 0
endloop
endfacet
facet normal -0.91808 -0.396396 0
outer loop
- vertex 16.6551 1.32614 -0.1
+ vertex 16.6551 1.32614 -0.2
vertex 16.4437 1.81579 0
- vertex 16.4437 1.81579 -0.1
+ vertex 16.4437 1.81579 -0.2
endloop
endfacet
facet normal -0.91808 -0.396396 0
outer loop
vertex 16.4437 1.81579 0
- vertex 16.6551 1.32614 -0.1
+ vertex 16.6551 1.32614 -0.2
vertex 16.6551 1.32614 0
endloop
endfacet
facet normal -0.901015 -0.433787 0
outer loop
- vertex 16.8681 0.883681 -0.1
+ vertex 16.8681 0.883681 -0.2
vertex 16.6551 1.32614 0
- vertex 16.6551 1.32614 -0.1
+ vertex 16.6551 1.32614 -0.2
endloop
endfacet
facet normal -0.901015 -0.433787 0
outer loop
vertex 16.6551 1.32614 0
- vertex 16.8681 0.883681 -0.1
+ vertex 16.8681 0.883681 -0.2
vertex 16.8681 0.883681 0
endloop
endfacet
facet normal -0.877409 -0.479744 0
outer loop
- vertex 17.0802 0.495742 -0.1
+ vertex 17.0802 0.495742 -0.2
vertex 16.8681 0.883681 0
- vertex 16.8681 0.883681 -0.1
+ vertex 16.8681 0.883681 -0.2
endloop
endfacet
facet normal -0.877409 -0.479744 0
outer loop
vertex 16.8681 0.883681 0
- vertex 17.0802 0.495742 -0.1
+ vertex 17.0802 0.495742 -0.2
vertex 17.0802 0.495742 0
endloop
endfacet
facet normal -0.842258 -0.539075 0
outer loop
- vertex 17.2889 0.169637 -0.1
+ vertex 17.2889 0.169637 -0.2
vertex 17.0802 0.495742 0
- vertex 17.0802 0.495742 -0.1
+ vertex 17.0802 0.495742 -0.2
endloop
endfacet
facet normal -0.842258 -0.539075 0
outer loop
vertex 17.0802 0.495742 0
- vertex 17.2889 0.169637 -0.1
+ vertex 17.2889 0.169637 -0.2
vertex 17.2889 0.169637 0
endloop
endfacet
facet normal -0.784932 -0.619582 0
outer loop
- vertex 17.4918 -0.0873203 -0.1
+ vertex 17.4918 -0.0873203 -0.2
vertex 17.2889 0.169637 0
- vertex 17.2889 0.169637 -0.1
+ vertex 17.2889 0.169637 -0.2
endloop
endfacet
facet normal -0.784932 -0.619582 0
outer loop
vertex 17.2889 0.169637 0
- vertex 17.4918 -0.0873203 -0.1
+ vertex 17.4918 -0.0873203 -0.2
vertex 17.4918 -0.0873203 0
endloop
endfacet
facet normal -0.680344 -0.732893 0
outer loop
- vertex 17.4918 -0.0873203 -0.1
+ vertex 17.4918 -0.0873203 -0.2
vertex 17.6862 -0.267812 0
vertex 17.4918 -0.0873203 0
endloop
@@ -35975,13 +35975,13 @@ solid OpenSCAD_Model
facet normal -0.680344 -0.732893 -0
outer loop
vertex 17.6862 -0.267812 0
- vertex 17.4918 -0.0873203 -0.1
- vertex 17.6862 -0.267812 -0.1
+ vertex 17.4918 -0.0873203 -0.2
+ vertex 17.6862 -0.267812 -0.2
endloop
endfacet
facet normal -0.560342 -0.828261 0
outer loop
- vertex 17.6862 -0.267812 -0.1
+ vertex 17.6862 -0.267812 -0.2
vertex 17.8284 -0.36402 0
vertex 17.6862 -0.267812 0
endloop
@@ -35989,13 +35989,13 @@ solid OpenSCAD_Model
facet normal -0.560342 -0.828261 -0
outer loop
vertex 17.8284 -0.36402 0
- vertex 17.6862 -0.267812 -0.1
- vertex 17.8284 -0.36402 -0.1
+ vertex 17.6862 -0.267812 -0.2
+ vertex 17.8284 -0.36402 -0.2
endloop
endfacet
facet normal -0.436276 -0.899813 0
outer loop
- vertex 17.8284 -0.36402 -0.1
+ vertex 17.8284 -0.36402 -0.2
vertex 17.9646 -0.430052 0
vertex 17.8284 -0.36402 0
endloop
@@ -36003,13 +36003,13 @@ solid OpenSCAD_Model
facet normal -0.436276 -0.899813 -0
outer loop
vertex 17.9646 -0.430052 0
- vertex 17.8284 -0.36402 -0.1
- vertex 17.9646 -0.430052 -0.1
+ vertex 17.8284 -0.36402 -0.2
+ vertex 17.9646 -0.430052 -0.2
endloop
endfacet
facet normal -0.23232 -0.972639 0
outer loop
- vertex 17.9646 -0.430052 -0.1
+ vertex 17.9646 -0.430052 -0.2
vertex 18.1098 -0.464739 0
vertex 17.9646 -0.430052 0
endloop
@@ -36017,13 +36017,13 @@ solid OpenSCAD_Model
facet normal -0.23232 -0.972639 -0
outer loop
vertex 18.1098 -0.464739 0
- vertex 17.9646 -0.430052 -0.1
- vertex 18.1098 -0.464739 -0.1
+ vertex 17.9646 -0.430052 -0.2
+ vertex 18.1098 -0.464739 -0.2
endloop
endfacet
facet normal -0.0128436 -0.999918 0
outer loop
- vertex 18.1098 -0.464739 -0.1
+ vertex 18.1098 -0.464739 -0.2
vertex 18.2791 -0.466914 0
vertex 18.1098 -0.464739 0
endloop
@@ -36031,13 +36031,13 @@ solid OpenSCAD_Model
facet normal -0.0128436 -0.999918 -0
outer loop
vertex 18.2791 -0.466914 0
- vertex 18.1098 -0.464739 -0.1
- vertex 18.2791 -0.466914 -0.1
+ vertex 18.1098 -0.464739 -0.2
+ vertex 18.2791 -0.466914 -0.2
endloop
endfacet
facet normal 0.149466 -0.988767 0
outer loop
- vertex 18.2791 -0.466914 -0.1
+ vertex 18.2791 -0.466914 -0.2
vertex 18.4876 -0.435405 0
vertex 18.2791 -0.466914 0
endloop
@@ -36045,13 +36045,13 @@ solid OpenSCAD_Model
facet normal 0.149466 -0.988767 0
outer loop
vertex 18.4876 -0.435405 0
- vertex 18.2791 -0.466914 -0.1
- vertex 18.4876 -0.435405 -0.1
+ vertex 18.2791 -0.466914 -0.2
+ vertex 18.4876 -0.435405 -0.2
endloop
endfacet
facet normal 0.244974 -0.96953 0
outer loop
- vertex 18.4876 -0.435405 -0.1
+ vertex 18.4876 -0.435405 -0.2
vertex 18.7502 -0.369046 0
vertex 18.4876 -0.435405 0
endloop
@@ -36059,13 +36059,13 @@ solid OpenSCAD_Model
facet normal 0.244974 -0.96953 0
outer loop
vertex 18.7502 -0.369046 0
- vertex 18.4876 -0.435405 -0.1
- vertex 18.7502 -0.369046 -0.1
+ vertex 18.4876 -0.435405 -0.2
+ vertex 18.7502 -0.369046 -0.2
endloop
endfacet
facet normal 0.307753 -0.951466 0
outer loop
- vertex 18.7502 -0.369046 -0.1
+ vertex 18.7502 -0.369046 -0.2
vertex 19.4982 -0.127099 0
vertex 18.7502 -0.369046 0
endloop
@@ -36073,13 +36073,13 @@ solid OpenSCAD_Model
facet normal 0.307753 -0.951466 0
outer loop
vertex 19.4982 -0.127099 0
- vertex 18.7502 -0.369046 -0.1
- vertex 19.4982 -0.127099 -0.1
+ vertex 18.7502 -0.369046 -0.2
+ vertex 19.4982 -0.127099 -0.2
endloop
endfacet
facet normal 0.301432 -0.953488 0
outer loop
- vertex 19.4982 -0.127099 -0.1
+ vertex 19.4982 -0.127099 -0.2
vertex 20.0432 0.0451876 0
vertex 19.4982 -0.127099 0
endloop
@@ -36087,13 +36087,13 @@ solid OpenSCAD_Model
facet normal 0.301432 -0.953488 0
outer loop
vertex 20.0432 0.0451876 0
- vertex 19.4982 -0.127099 -0.1
- vertex 20.0432 0.0451876 -0.1
+ vertex 19.4982 -0.127099 -0.2
+ vertex 20.0432 0.0451876 -0.2
endloop
endfacet
facet normal 0.251907 -0.967752 0
outer loop
- vertex 20.0432 0.0451876 -0.1
+ vertex 20.0432 0.0451876 -0.2
vertex 20.5155 0.168137 0
vertex 20.0432 0.0451876 0
endloop
@@ -36101,13 +36101,13 @@ solid OpenSCAD_Model
facet normal 0.251907 -0.967752 0
outer loop
vertex 20.5155 0.168137 0
- vertex 20.0432 0.0451876 -0.1
- vertex 20.5155 0.168137 -0.1
+ vertex 20.0432 0.0451876 -0.2
+ vertex 20.5155 0.168137 -0.2
endloop
endfacet
facet normal 0.175432 -0.984492 0
outer loop
- vertex 20.5155 0.168137 -0.1
+ vertex 20.5155 0.168137 -0.2
vertex 20.8646 0.230347 0
vertex 20.5155 0.168137 0
endloop
@@ -36115,13 +36115,13 @@ solid OpenSCAD_Model
facet normal 0.175432 -0.984492 0
outer loop
vertex 20.8646 0.230347 0
- vertex 20.5155 0.168137 -0.1
- vertex 20.8646 0.230347 -0.1
+ vertex 20.5155 0.168137 -0.2
+ vertex 20.8646 0.230347 -0.2
endloop
endfacet
facet normal 0.0422921 -0.999105 0
outer loop
- vertex 20.8646 0.230347 -0.1
+ vertex 20.8646 0.230347 -0.2
vertex 20.9772 0.235111 0
vertex 20.8646 0.230347 0
endloop
@@ -36129,13 +36129,13 @@ solid OpenSCAD_Model
facet normal 0.0422921 -0.999105 0
outer loop
vertex 20.9772 0.235111 0
- vertex 20.8646 0.230347 -0.1
- vertex 20.9772 0.235111 -0.1
+ vertex 20.8646 0.230347 -0.2
+ vertex 20.9772 0.235111 -0.2
endloop
endfacet
facet normal -0.228021 -0.973656 0
outer loop
- vertex 20.9772 0.235111 -0.1
+ vertex 20.9772 0.235111 -0.2
vertex 21.0399 0.220413 0
vertex 20.9772 0.235111 0
endloop
@@ -36143,195 +36143,195 @@ solid OpenSCAD_Model
facet normal -0.228021 -0.973656 -0
outer loop
vertex 21.0399 0.220413 0
- vertex 20.9772 0.235111 -0.1
- vertex 21.0399 0.220413 -0.1
+ vertex 20.9772 0.235111 -0.2
+ vertex 21.0399 0.220413 -0.2
endloop
endfacet
facet normal -0.836215 -0.548402 0
outer loop
- vertex 21.0726 0.170561 -0.1
+ vertex 21.0726 0.170561 -0.2
vertex 21.0399 0.220413 0
- vertex 21.0399 0.220413 -0.1
+ vertex 21.0399 0.220413 -0.2
endloop
endfacet
facet normal -0.836215 -0.548402 0
outer loop
vertex 21.0399 0.220413 0
- vertex 21.0726 0.170561 -0.1
+ vertex 21.0726 0.170561 -0.2
vertex 21.0726 0.170561 0
endloop
endfacet
facet normal -0.964289 -0.264852 0
outer loop
- vertex 21.099 0.0745682 -0.1
+ vertex 21.099 0.0745682 -0.2
vertex 21.0726 0.170561 0
- vertex 21.0726 0.170561 -0.1
+ vertex 21.0726 0.170561 -0.2
endloop
endfacet
facet normal -0.964289 -0.264852 0
outer loop
vertex 21.0726 0.170561 0
- vertex 21.099 0.0745682 -0.1
+ vertex 21.099 0.0745682 -0.2
vertex 21.099 0.0745682 0
endloop
endfacet
facet normal -0.994432 -0.105376 0
outer loop
- vertex 21.1316 -0.233279 -0.1
+ vertex 21.1316 -0.233279 -0.2
vertex 21.099 0.0745682 0
- vertex 21.099 0.0745682 -0.1
+ vertex 21.099 0.0745682 -0.2
endloop
endfacet
facet normal -0.994432 -0.105376 0
outer loop
vertex 21.099 0.0745682 0
- vertex 21.1316 -0.233279 -0.1
+ vertex 21.1316 -0.233279 -0.2
vertex 21.1316 -0.233279 0
endloop
endfacet
facet normal -0.999957 -0.00925488 0
outer loop
- vertex 21.1355 -0.658014 -0.1
+ vertex 21.1355 -0.658014 -0.2
vertex 21.1316 -0.233279 0
- vertex 21.1316 -0.233279 -0.1
+ vertex 21.1316 -0.233279 -0.2
endloop
endfacet
facet normal -0.999957 -0.00925488 0
outer loop
vertex 21.1316 -0.233279 0
- vertex 21.1355 -0.658014 -0.1
+ vertex 21.1355 -0.658014 -0.2
vertex 21.1355 -0.658014 0
endloop
endfacet
facet normal -0.998524 0.0543158 0
outer loop
- vertex 21.1085 -1.15452 -0.1
+ vertex 21.1085 -1.15452 -0.2
vertex 21.1355 -0.658014 0
- vertex 21.1355 -0.658014 -0.1
+ vertex 21.1355 -0.658014 -0.2
endloop
endfacet
facet normal -0.998524 0.0543158 0
outer loop
vertex 21.1355 -0.658014 0
- vertex 21.1085 -1.15452 -0.1
+ vertex 21.1085 -1.15452 -0.2
vertex 21.1085 -1.15452 0
endloop
endfacet
facet normal -0.992587 0.121535 0
outer loop
- vertex 21.0399 -1.71534 -0.1
+ vertex 21.0399 -1.71534 -0.2
vertex 21.1085 -1.15452 0
- vertex 21.1085 -1.15452 -0.1
+ vertex 21.1085 -1.15452 -0.2
endloop
endfacet
facet normal -0.992587 0.121535 0
outer loop
vertex 21.1085 -1.15452 0
- vertex 21.0399 -1.71534 -0.1
+ vertex 21.0399 -1.71534 -0.2
vertex 21.0399 -1.71534 0
endloop
endfacet
facet normal -0.978633 0.205615 0
outer loop
- vertex 20.9878 -1.96317 -0.1
+ vertex 20.9878 -1.96317 -0.2
vertex 21.0399 -1.71534 0
- vertex 21.0399 -1.71534 -0.1
+ vertex 21.0399 -1.71534 -0.2
endloop
endfacet
facet normal -0.978633 0.205615 0
outer loop
vertex 21.0399 -1.71534 0
- vertex 20.9878 -1.96317 -0.1
+ vertex 20.9878 -1.96317 -0.2
vertex 20.9878 -1.96317 0
endloop
endfacet
facet normal -0.959237 0.282603 0
outer loop
- vertex 20.9199 -2.19366 -0.1
+ vertex 20.9199 -2.19366 -0.2
vertex 20.9878 -1.96317 0
- vertex 20.9878 -1.96317 -0.1
+ vertex 20.9878 -1.96317 -0.2
endloop
endfacet
facet normal -0.959237 0.282603 0
outer loop
vertex 20.9878 -1.96317 0
- vertex 20.9199 -2.19366 -0.1
+ vertex 20.9199 -2.19366 -0.2
vertex 20.9199 -2.19366 0
endloop
endfacet
facet normal -0.92823 0.372008 0
outer loop
- vertex 20.8331 -2.41014 -0.1
+ vertex 20.8331 -2.41014 -0.2
vertex 20.9199 -2.19366 0
- vertex 20.9199 -2.19366 -0.1
+ vertex 20.9199 -2.19366 -0.2
endloop
endfacet
facet normal -0.92823 0.372008 0
outer loop
vertex 20.9199 -2.19366 0
- vertex 20.8331 -2.41014 -0.1
+ vertex 20.8331 -2.41014 -0.2
vertex 20.8331 -2.41014 0
endloop
endfacet
facet normal -0.884337 0.46685 0
outer loop
- vertex 20.7245 -2.61588 -0.1
+ vertex 20.7245 -2.61588 -0.2
vertex 20.8331 -2.41014 0
- vertex 20.8331 -2.41014 -0.1
+ vertex 20.8331 -2.41014 -0.2
endloop
endfacet
facet normal -0.884337 0.46685 0
outer loop
vertex 20.8331 -2.41014 0
- vertex 20.7245 -2.61588 -0.1
+ vertex 20.7245 -2.61588 -0.2
vertex 20.7245 -2.61588 0
endloop
endfacet
facet normal -0.829583 0.558383 0
outer loop
- vertex 20.591 -2.8142 -0.1
+ vertex 20.591 -2.8142 -0.2
vertex 20.7245 -2.61588 0
- vertex 20.7245 -2.61588 -0.1
+ vertex 20.7245 -2.61588 -0.2
endloop
endfacet
facet normal -0.829583 0.558383 0
outer loop
vertex 20.7245 -2.61588 0
- vertex 20.591 -2.8142 -0.1
+ vertex 20.591 -2.8142 -0.2
vertex 20.591 -2.8142 0
endloop
endfacet
facet normal -0.769117 0.639107 0
outer loop
- vertex 20.4297 -3.0084 -0.1
+ vertex 20.4297 -3.0084 -0.2
vertex 20.591 -2.8142 0
- vertex 20.591 -2.8142 -0.1
+ vertex 20.591 -2.8142 -0.2
endloop
endfacet
facet normal -0.769117 0.639107 0
outer loop
vertex 20.591 -2.8142 0
- vertex 20.4297 -3.0084 -0.1
+ vertex 20.4297 -3.0084 -0.2
vertex 20.4297 -3.0084 0
endloop
endfacet
facet normal -0.709135 0.705072 0
outer loop
- vertex 20.2374 -3.20177 -0.1
+ vertex 20.2374 -3.20177 -0.2
vertex 20.4297 -3.0084 0
- vertex 20.4297 -3.0084 -0.1
+ vertex 20.4297 -3.0084 -0.2
endloop
endfacet
facet normal -0.709135 0.705072 0
outer loop
vertex 20.4297 -3.0084 0
- vertex 20.2374 -3.20177 -0.1
+ vertex 20.2374 -3.20177 -0.2
vertex 20.2374 -3.20177 0
endloop
endfacet
facet normal -0.654612 0.755965 0
outer loop
- vertex 20.2374 -3.20177 -0.1
+ vertex 20.2374 -3.20177 -0.2
vertex 20.0112 -3.39762 0
vertex 20.2374 -3.20177 0
endloop
@@ -36339,13 +36339,13 @@ solid OpenSCAD_Model
facet normal -0.654612 0.755965 0
outer loop
vertex 20.0112 -3.39762 0
- vertex 20.2374 -3.20177 -0.1
- vertex 20.0112 -3.39762 -0.1
+ vertex 20.2374 -3.20177 -0.2
+ vertex 20.0112 -3.39762 -0.2
endloop
endfacet
facet normal -0.588742 0.808321 0
outer loop
- vertex 20.0112 -3.39762 -0.1
+ vertex 20.0112 -3.39762 -0.2
vertex 19.4451 -3.80993 0
vertex 20.0112 -3.39762 0
endloop
@@ -36353,13 +36353,13 @@ solid OpenSCAD_Model
facet normal -0.588742 0.808321 0
outer loop
vertex 19.4451 -3.80993 0
- vertex 20.0112 -3.39762 -0.1
- vertex 19.4451 -3.80993 -0.1
+ vertex 20.0112 -3.39762 -0.2
+ vertex 19.4451 -3.80993 -0.2
endloop
endfacet
facet normal -0.530543 0.847658 0
outer loop
- vertex 19.4451 -3.80993 -0.1
+ vertex 19.4451 -3.80993 -0.2
vertex 18.7073 -4.27174 0
vertex 19.4451 -3.80993 0
endloop
@@ -36367,13 +36367,13 @@ solid OpenSCAD_Model
facet normal -0.530543 0.847658 0
outer loop
vertex 18.7073 -4.27174 0
- vertex 19.4451 -3.80993 -0.1
- vertex 18.7073 -4.27174 -0.1
+ vertex 19.4451 -3.80993 -0.2
+ vertex 18.7073 -4.27174 -0.2
endloop
endfacet
facet normal -0.499058 0.866569 0
outer loop
- vertex 18.7073 -4.27174 -0.1
+ vertex 18.7073 -4.27174 -0.2
vertex 17.7736 -4.80944 0
vertex 18.7073 -4.27174 0
endloop
@@ -36381,13 +36381,13 @@ solid OpenSCAD_Model
facet normal -0.499058 0.866569 0
outer loop
vertex 17.7736 -4.80944 0
- vertex 18.7073 -4.27174 -0.1
- vertex 17.7736 -4.80944 -0.1
+ vertex 18.7073 -4.27174 -0.2
+ vertex 17.7736 -4.80944 -0.2
endloop
endfacet
facet normal -0.476856 0.878981 0
outer loop
- vertex 17.7736 -4.80944 -0.1
+ vertex 17.7736 -4.80944 -0.2
vertex 16.3254 -5.59514 0
vertex 17.7736 -4.80944 0
endloop
@@ -36395,13 +36395,13 @@ solid OpenSCAD_Model
facet normal -0.476856 0.878981 0
outer loop
vertex 16.3254 -5.59514 0
- vertex 17.7736 -4.80944 -0.1
- vertex 16.3254 -5.59514 -0.1
+ vertex 17.7736 -4.80944 -0.2
+ vertex 16.3254 -5.59514 -0.2
endloop
endfacet
facet normal -0.451418 0.892312 0
outer loop
- vertex 16.3254 -5.59514 -0.1
+ vertex 16.3254 -5.59514 -0.2
vertex 15.6549 -5.93433 0
vertex 16.3254 -5.59514 0
endloop
@@ -36409,13 +36409,13 @@ solid OpenSCAD_Model
facet normal -0.451418 0.892312 0
outer loop
vertex 15.6549 -5.93433 0
- vertex 16.3254 -5.59514 -0.1
- vertex 15.6549 -5.93433 -0.1
+ vertex 16.3254 -5.59514 -0.2
+ vertex 15.6549 -5.93433 -0.2
endloop
endfacet
facet normal -0.429833 0.902908 0
outer loop
- vertex 15.6549 -5.93433 -0.1
+ vertex 15.6549 -5.93433 -0.2
vertex 15.0129 -6.23993 0
vertex 15.6549 -5.93433 0
endloop
@@ -36423,13 +36423,13 @@ solid OpenSCAD_Model
facet normal -0.429833 0.902908 0
outer loop
vertex 15.0129 -6.23993 0
- vertex 15.6549 -5.93433 -0.1
- vertex 15.0129 -6.23993 -0.1
+ vertex 15.6549 -5.93433 -0.2
+ vertex 15.0129 -6.23993 -0.2
endloop
endfacet
facet normal -0.404408 0.914579 0
outer loop
- vertex 15.0129 -6.23993 -0.1
+ vertex 15.0129 -6.23993 -0.2
vertex 14.3941 -6.51356 0
vertex 15.0129 -6.23993 0
endloop
@@ -36437,13 +36437,13 @@ solid OpenSCAD_Model
facet normal -0.404408 0.914579 0
outer loop
vertex 14.3941 -6.51356 0
- vertex 15.0129 -6.23993 -0.1
- vertex 14.3941 -6.51356 -0.1
+ vertex 15.0129 -6.23993 -0.2
+ vertex 14.3941 -6.51356 -0.2
endloop
endfacet
facet normal -0.375168 0.926957 0
outer loop
- vertex 14.3941 -6.51356 -0.1
+ vertex 14.3941 -6.51356 -0.2
vertex 13.793 -6.75686 0
vertex 14.3941 -6.51356 0
endloop
@@ -36451,13 +36451,13 @@ solid OpenSCAD_Model
facet normal -0.375168 0.926957 0
outer loop
vertex 13.793 -6.75686 0
- vertex 14.3941 -6.51356 -0.1
- vertex 13.793 -6.75686 -0.1
+ vertex 14.3941 -6.51356 -0.2
+ vertex 13.793 -6.75686 -0.2
endloop
endfacet
facet normal -0.342394 0.939557 0
outer loop
- vertex 13.793 -6.75686 -0.1
+ vertex 13.793 -6.75686 -0.2
vertex 13.2041 -6.97145 0
vertex 13.793 -6.75686 0
endloop
@@ -36465,13 +36465,13 @@ solid OpenSCAD_Model
facet normal -0.342394 0.939557 0
outer loop
vertex 13.2041 -6.97145 0
- vertex 13.793 -6.75686 -0.1
- vertex 13.2041 -6.97145 -0.1
+ vertex 13.793 -6.75686 -0.2
+ vertex 13.2041 -6.97145 -0.2
endloop
endfacet
facet normal -0.306665 0.951818 0
outer loop
- vertex 13.2041 -6.97145 -0.1
+ vertex 13.2041 -6.97145 -0.2
vertex 12.6221 -7.15898 0
vertex 13.2041 -6.97145 0
endloop
@@ -36479,13 +36479,13 @@ solid OpenSCAD_Model
facet normal -0.306665 0.951818 0
outer loop
vertex 12.6221 -7.15898 0
- vertex 13.2041 -6.97145 -0.1
- vertex 12.6221 -7.15898 -0.1
+ vertex 13.2041 -6.97145 -0.2
+ vertex 12.6221 -7.15898 -0.2
endloop
endfacet
facet normal -0.268881 0.963173 0
outer loop
- vertex 12.6221 -7.15898 -0.1
+ vertex 12.6221 -7.15898 -0.2
vertex 12.0414 -7.32107 0
vertex 12.6221 -7.15898 0
endloop
@@ -36493,13 +36493,13 @@ solid OpenSCAD_Model
facet normal -0.268881 0.963173 0
outer loop
vertex 12.0414 -7.32107 0
- vertex 12.6221 -7.15898 -0.1
- vertex 12.0414 -7.32107 -0.1
+ vertex 12.6221 -7.15898 -0.2
+ vertex 12.0414 -7.32107 -0.2
endloop
endfacet
facet normal -0.230173 0.97315 0
outer loop
- vertex 12.0414 -7.32107 -0.1
+ vertex 12.0414 -7.32107 -0.2
vertex 11.4568 -7.45935 0
vertex 12.0414 -7.32107 0
endloop
@@ -36507,13 +36507,13 @@ solid OpenSCAD_Model
facet normal -0.230173 0.97315 0
outer loop
vertex 11.4568 -7.45935 0
- vertex 12.0414 -7.32107 -0.1
- vertex 11.4568 -7.45935 -0.1
+ vertex 12.0414 -7.32107 -0.2
+ vertex 11.4568 -7.45935 -0.2
endloop
endfacet
facet normal -0.191808 0.981433 0
outer loop
- vertex 11.4568 -7.45935 -0.1
+ vertex 11.4568 -7.45935 -0.2
vertex 10.8627 -7.57545 0
vertex 11.4568 -7.45935 0
endloop
@@ -36521,13 +36521,13 @@ solid OpenSCAD_Model
facet normal -0.191808 0.981433 0
outer loop
vertex 10.8627 -7.57545 0
- vertex 11.4568 -7.45935 -0.1
- vertex 10.8627 -7.57545 -0.1
+ vertex 11.4568 -7.45935 -0.2
+ vertex 10.8627 -7.57545 -0.2
endloop
endfacet
facet normal -0.155029 0.98791 0
outer loop
- vertex 10.8627 -7.57545 -0.1
+ vertex 10.8627 -7.57545 -0.2
vertex 10.2538 -7.67101 0
vertex 10.8627 -7.57545 0
endloop
@@ -36535,13 +36535,13 @@ solid OpenSCAD_Model
facet normal -0.155029 0.98791 0
outer loop
vertex 10.2538 -7.67101 0
- vertex 10.8627 -7.57545 -0.1
- vertex 10.2538 -7.67101 -0.1
+ vertex 10.8627 -7.57545 -0.2
+ vertex 10.2538 -7.67101 -0.2
endloop
endfacet
facet normal -0.120913 0.992663 0
outer loop
- vertex 10.2538 -7.67101 -0.1
+ vertex 10.2538 -7.67101 -0.2
vertex 9.62459 -7.74765 0
vertex 10.2538 -7.67101 0
endloop
@@ -36549,13 +36549,13 @@ solid OpenSCAD_Model
facet normal -0.120913 0.992663 0
outer loop
vertex 9.62459 -7.74765 0
- vertex 10.2538 -7.67101 -0.1
- vertex 9.62459 -7.74765 -0.1
+ vertex 10.2538 -7.67101 -0.2
+ vertex 9.62459 -7.74765 -0.2
endloop
endfacet
facet normal -0.0902671 0.995918 0
outer loop
- vertex 9.62459 -7.74765 -0.1
+ vertex 9.62459 -7.74765 -0.2
vertex 8.96966 -7.80701 0
vertex 9.62459 -7.74765 0
endloop
@@ -36563,13 +36563,13 @@ solid OpenSCAD_Model
facet normal -0.0902671 0.995918 0
outer loop
vertex 8.96966 -7.80701 0
- vertex 9.62459 -7.74765 -0.1
- vertex 8.96966 -7.80701 -0.1
+ vertex 9.62459 -7.74765 -0.2
+ vertex 8.96966 -7.80701 -0.2
endloop
endfacet
facet normal -0.0520328 0.998645 0
outer loop
- vertex 8.96966 -7.80701 -0.1
+ vertex 8.96966 -7.80701 -0.2
vertex 7.56097 -7.88041 0
vertex 8.96966 -7.80701 0
endloop
@@ -36577,13 +36577,13 @@ solid OpenSCAD_Model
facet normal -0.0520328 0.998645 0
outer loop
vertex 7.56097 -7.88041 0
- vertex 8.96966 -7.80701 -0.1
- vertex 7.56097 -7.88041 -0.1
+ vertex 8.96966 -7.80701 -0.2
+ vertex 7.56097 -7.88041 -0.2
endloop
endfacet
facet normal -0.0211888 0.999775 0
outer loop
- vertex 7.56097 -7.88041 -0.1
+ vertex 7.56097 -7.88041 -0.2
vertex 6.04455 -7.91255 0
vertex 7.56097 -7.88041 0
endloop
@@ -36591,13 +36591,13 @@ solid OpenSCAD_Model
facet normal -0.0211888 0.999775 0
outer loop
vertex 6.04455 -7.91255 0
- vertex 7.56097 -7.88041 -0.1
- vertex 6.04455 -7.91255 -0.1
+ vertex 7.56097 -7.88041 -0.2
+ vertex 6.04455 -7.91255 -0.2
endloop
endfacet
facet normal 0.00984088 0.999952 -0
outer loop
- vertex 6.04455 -7.91255 -0.1
+ vertex 6.04455 -7.91255 -0.2
vertex 5.49083 -7.9071 0
vertex 6.04455 -7.91255 0
endloop
@@ -36605,13 +36605,13 @@ solid OpenSCAD_Model
facet normal 0.00984088 0.999952 0
outer loop
vertex 5.49083 -7.9071 0
- vertex 6.04455 -7.91255 -0.1
- vertex 5.49083 -7.9071 -0.1
+ vertex 6.04455 -7.91255 -0.2
+ vertex 5.49083 -7.9071 -0.2
endloop
endfacet
facet normal 0.0493656 0.998781 -0
outer loop
- vertex 5.49083 -7.9071 -0.1
+ vertex 5.49083 -7.9071 -0.2
vertex 5.0434 -7.88498 0
vertex 5.49083 -7.9071 0
endloop
@@ -36619,13 +36619,13 @@ solid OpenSCAD_Model
facet normal 0.0493656 0.998781 0
outer loop
vertex 5.0434 -7.88498 0
- vertex 5.49083 -7.9071 -0.1
- vertex 5.0434 -7.88498 -0.1
+ vertex 5.49083 -7.9071 -0.2
+ vertex 5.0434 -7.88498 -0.2
endloop
endfacet
facet normal 0.110735 0.99385 -0
outer loop
- vertex 5.0434 -7.88498 -0.1
+ vertex 5.0434 -7.88498 -0.2
vertex 4.67971 -7.84446 0
vertex 5.0434 -7.88498 0
endloop
@@ -36633,13 +36633,13 @@ solid OpenSCAD_Model
facet normal 0.110735 0.99385 0
outer loop
vertex 4.67971 -7.84446 0
- vertex 5.0434 -7.88498 -0.1
- vertex 4.67971 -7.84446 -0.1
+ vertex 5.0434 -7.88498 -0.2
+ vertex 4.67971 -7.84446 -0.2
endloop
endfacet
facet normal 0.196653 0.980473 -0
outer loop
- vertex 4.67971 -7.84446 -0.1
+ vertex 4.67971 -7.84446 -0.2
vertex 4.37723 -7.78379 0
vertex 4.67971 -7.84446 0
endloop
@@ -36647,13 +36647,13 @@ solid OpenSCAD_Model
facet normal 0.196653 0.980473 0
outer loop
vertex 4.37723 -7.78379 0
- vertex 4.67971 -7.84446 -0.1
- vertex 4.37723 -7.78379 -0.1
+ vertex 4.67971 -7.84446 -0.2
+ vertex 4.37723 -7.78379 -0.2
endloop
endfacet
facet normal 0.298658 0.95436 -0
outer loop
- vertex 4.37723 -7.78379 -0.1
+ vertex 4.37723 -7.78379 -0.2
vertex 4.11342 -7.70123 0
vertex 4.37723 -7.78379 0
endloop
@@ -36661,13 +36661,13 @@ solid OpenSCAD_Model
facet normal 0.298658 0.95436 0
outer loop
vertex 4.11342 -7.70123 0
- vertex 4.37723 -7.78379 -0.1
- vertex 4.11342 -7.70123 -0.1
+ vertex 4.37723 -7.78379 -0.2
+ vertex 4.11342 -7.70123 -0.2
endloop
endfacet
facet normal 0.39403 0.919098 -0
outer loop
- vertex 4.11342 -7.70123 -0.1
+ vertex 4.11342 -7.70123 -0.2
vertex 3.86574 -7.59505 0
vertex 4.11342 -7.70123 0
endloop
@@ -36675,13 +36675,13 @@ solid OpenSCAD_Model
facet normal 0.39403 0.919098 0
outer loop
vertex 3.86574 -7.59505 0
- vertex 4.11342 -7.70123 -0.1
- vertex 3.86574 -7.59505 -0.1
+ vertex 4.11342 -7.70123 -0.2
+ vertex 3.86574 -7.59505 -0.2
endloop
endfacet
facet normal 0.472054 0.88157 -0
outer loop
- vertex 3.86574 -7.59505 -0.1
+ vertex 3.86574 -7.59505 -0.2
vertex 3.40104 -7.34622 0
vertex 3.86574 -7.59505 0
endloop
@@ -36689,13 +36689,13 @@ solid OpenSCAD_Model
facet normal 0.472054 0.88157 0
outer loop
vertex 3.40104 -7.34622 0
- vertex 3.86574 -7.59505 -0.1
- vertex 3.40104 -7.34622 -0.1
+ vertex 3.86574 -7.59505 -0.2
+ vertex 3.40104 -7.34622 -0.2
endloop
endfacet
facet normal 0.50336 0.864077 -0
outer loop
- vertex 3.40104 -7.34622 -0.1
+ vertex 3.40104 -7.34622 -0.2
vertex 2.71562 -6.94693 0
vertex 3.40104 -7.34622 0
endloop
@@ -36703,13 +36703,13 @@ solid OpenSCAD_Model
facet normal 0.50336 0.864077 0
outer loop
vertex 2.71562 -6.94693 0
- vertex 3.40104 -7.34622 -0.1
- vertex 2.71562 -6.94693 -0.1
+ vertex 3.40104 -7.34622 -0.2
+ vertex 2.71562 -6.94693 -0.2
endloop
endfacet
facet normal 0.526285 0.850308 -0
outer loop
- vertex 2.71562 -6.94693 -0.1
+ vertex 2.71562 -6.94693 -0.2
vertex 1.05193 -5.91722 0
vertex 2.71562 -6.94693 0
endloop
@@ -36717,13 +36717,13 @@ solid OpenSCAD_Model
facet normal 0.526285 0.850308 0
outer loop
vertex 1.05193 -5.91722 0
- vertex 2.71562 -6.94693 -0.1
- vertex 1.05193 -5.91722 -0.1
+ vertex 2.71562 -6.94693 -0.2
+ vertex 1.05193 -5.91722 -0.2
endloop
endfacet
facet normal 0.529768 0.848143 -0
outer loop
- vertex 1.05193 -5.91722 -0.1
+ vertex 1.05193 -5.91722 -0.2
vertex -0.694871 -4.82613 0
vertex 1.05193 -5.91722 0
endloop
@@ -36731,13 +36731,13 @@ solid OpenSCAD_Model
facet normal 0.529768 0.848143 0
outer loop
vertex -0.694871 -4.82613 0
- vertex 1.05193 -5.91722 -0.1
- vertex -0.694871 -4.82613 -0.1
+ vertex 1.05193 -5.91722 -0.2
+ vertex -0.694871 -4.82613 -0.2
endloop
endfacet
facet normal 0.507777 0.861489 -0
outer loop
- vertex -0.694871 -4.82613 -0.1
+ vertex -0.694871 -4.82613 -0.2
vertex -2.47177 -3.7788 0
vertex -0.694871 -4.82613 0
endloop
@@ -36745,13 +36745,13 @@ solid OpenSCAD_Model
facet normal 0.507777 0.861489 0
outer loop
vertex -2.47177 -3.7788 0
- vertex -0.694871 -4.82613 -0.1
- vertex -2.47177 -3.7788 -0.1
+ vertex -0.694871 -4.82613 -0.2
+ vertex -2.47177 -3.7788 -0.2
endloop
endfacet
facet normal 0.55979 0.828634 -0
outer loop
- vertex -2.47177 -3.7788 -0.1
+ vertex -2.47177 -3.7788 -0.2
vertex -2.8551 -3.51984 0
vertex -2.47177 -3.7788 0
endloop
@@ -36759,13 +36759,13 @@ solid OpenSCAD_Model
facet normal 0.55979 0.828634 0
outer loop
vertex -2.8551 -3.51984 0
- vertex -2.47177 -3.7788 -0.1
- vertex -2.8551 -3.51984 -0.1
+ vertex -2.47177 -3.7788 -0.2
+ vertex -2.8551 -3.51984 -0.2
endloop
endfacet
facet normal 0.612658 0.790348 -0
outer loop
- vertex -2.8551 -3.51984 -0.1
+ vertex -2.8551 -3.51984 -0.2
vertex -3.18232 -3.26618 0
vertex -2.8551 -3.51984 0
endloop
@@ -36773,13 +36773,13 @@ solid OpenSCAD_Model
facet normal 0.612658 0.790348 0
outer loop
vertex -3.18232 -3.26618 0
- vertex -2.8551 -3.51984 -0.1
- vertex -3.18232 -3.26618 -0.1
+ vertex -2.8551 -3.51984 -0.2
+ vertex -3.18232 -3.26618 -0.2
endloop
endfacet
facet normal 0.673628 0.73907 -0
outer loop
- vertex -3.18232 -3.26618 -0.1
+ vertex -3.18232 -3.26618 -0.2
vertex -3.44099 -3.03042 0
vertex -3.18232 -3.26618 0
endloop
@@ -36787,69 +36787,69 @@ solid OpenSCAD_Model
facet normal 0.673628 0.73907 0
outer loop
vertex -3.44099 -3.03042 0
- vertex -3.18232 -3.26618 -0.1
- vertex -3.44099 -3.03042 -0.1
+ vertex -3.18232 -3.26618 -0.2
+ vertex -3.44099 -3.03042 -0.2
endloop
endfacet
facet normal 0.756151 0.654397 0
outer loop
vertex -3.44099 -3.03042 0
- vertex -3.61865 -2.82513 -0.1
+ vertex -3.61865 -2.82513 -0.2
vertex -3.61865 -2.82513 0
endloop
endfacet
facet normal 0.756151 0.654397 0
outer loop
- vertex -3.61865 -2.82513 -0.1
+ vertex -3.61865 -2.82513 -0.2
vertex -3.44099 -3.03042 0
- vertex -3.44099 -3.03042 -0.1
+ vertex -3.44099 -3.03042 -0.2
endloop
endfacet
facet normal 0.887562 0.460688 0
outer loop
vertex -3.61865 -2.82513 0
- vertex -3.70285 -2.66292 -0.1
+ vertex -3.70285 -2.66292 -0.2
vertex -3.70285 -2.66292 0
endloop
endfacet
facet normal 0.887562 0.460688 0
outer loop
- vertex -3.70285 -2.66292 -0.1
+ vertex -3.70285 -2.66292 -0.2
vertex -3.61865 -2.82513 0
- vertex -3.61865 -2.82513 -0.1
+ vertex -3.61865 -2.82513 -0.2
endloop
endfacet
facet normal 0.998663 0.0516973 0
outer loop
vertex -3.70285 -2.66292 0
- vertex -3.70601 -2.60189 -0.1
+ vertex -3.70601 -2.60189 -0.2
vertex -3.70601 -2.60189 0
endloop
endfacet
facet normal 0.998663 0.0516973 0
outer loop
- vertex -3.70601 -2.60189 -0.1
+ vertex -3.70601 -2.60189 -0.2
vertex -3.70285 -2.66292 0
- vertex -3.70285 -2.66292 -0.1
+ vertex -3.70285 -2.66292 -0.2
endloop
endfacet
facet normal 0.877591 -0.479411 0
outer loop
vertex -3.70601 -2.60189 0
- vertex -3.68113 -2.55635 -0.1
+ vertex -3.68113 -2.55635 -0.2
vertex -3.68113 -2.55635 0
endloop
endfacet
facet normal 0.877591 -0.479411 0
outer loop
- vertex -3.68113 -2.55635 -0.1
+ vertex -3.68113 -2.55635 -0.2
vertex -3.70601 -2.60189 0
- vertex -3.70601 -2.60189 -0.1
+ vertex -3.70601 -2.60189 -0.2
endloop
endfacet
facet normal 0.463305 -0.886199 0
outer loop
- vertex -3.68113 -2.55635 -0.1
+ vertex -3.68113 -2.55635 -0.2
vertex -3.62666 -2.52788 0
vertex -3.68113 -2.55635 0
endloop
@@ -36857,13 +36857,13 @@ solid OpenSCAD_Model
facet normal 0.463305 -0.886199 0
outer loop
vertex -3.62666 -2.52788 0
- vertex -3.68113 -2.55635 -0.1
- vertex -3.62666 -2.52788 -0.1
+ vertex -3.68113 -2.55635 -0.2
+ vertex -3.62666 -2.52788 -0.2
endloop
endfacet
facet normal 0.114199 -0.993458 0
outer loop
- vertex -3.62666 -2.52788 -0.1
+ vertex -3.62666 -2.52788 -0.2
vertex -3.54104 -2.51804 0
vertex -3.62666 -2.52788 0
endloop
@@ -36871,13 +36871,13 @@ solid OpenSCAD_Model
facet normal 0.114199 -0.993458 0
outer loop
vertex -3.54104 -2.51804 0
- vertex -3.62666 -2.52788 -0.1
- vertex -3.54104 -2.51804 -0.1
+ vertex -3.62666 -2.52788 -0.2
+ vertex -3.54104 -2.51804 -0.2
endloop
endfacet
facet normal -0.250917 -0.968009 0
outer loop
- vertex -3.54104 -2.51804 -0.1
+ vertex -3.54104 -2.51804 -0.2
vertex -3.301 -2.58026 0
vertex -3.54104 -2.51804 0
endloop
@@ -36885,13 +36885,13 @@ solid OpenSCAD_Model
facet normal -0.250917 -0.968009 -0
outer loop
vertex -3.301 -2.58026 0
- vertex -3.54104 -2.51804 -0.1
- vertex -3.301 -2.58026 -0.1
+ vertex -3.54104 -2.51804 -0.2
+ vertex -3.301 -2.58026 -0.2
endloop
endfacet
facet normal -0.37095 -0.928653 0
outer loop
- vertex -3.301 -2.58026 -0.1
+ vertex -3.301 -2.58026 -0.2
vertex -2.87688 -2.74967 0
vertex -3.301 -2.58026 0
endloop
@@ -36899,13 +36899,13 @@ solid OpenSCAD_Model
facet normal -0.37095 -0.928653 -0
outer loop
vertex -2.87688 -2.74967 0
- vertex -3.301 -2.58026 -0.1
- vertex -2.87688 -2.74967 -0.1
+ vertex -3.301 -2.58026 -0.2
+ vertex -2.87688 -2.74967 -0.2
endloop
endfacet
facet normal -0.415868 -0.909425 0
outer loop
- vertex -2.87688 -2.74967 -0.1
+ vertex -2.87688 -2.74967 -0.2
vertex -2.32857 -3.00041 0
vertex -2.87688 -2.74967 0
endloop
@@ -36913,13 +36913,13 @@ solid OpenSCAD_Model
facet normal -0.415868 -0.909425 -0
outer loop
vertex -2.32857 -3.00041 0
- vertex -2.87688 -2.74967 -0.1
- vertex -2.32857 -3.00041 -0.1
+ vertex -2.87688 -2.74967 -0.2
+ vertex -2.32857 -3.00041 -0.2
endloop
endfacet
facet normal -0.447064 -0.894502 0
outer loop
- vertex -2.32857 -3.00041 -0.1
+ vertex -2.32857 -3.00041 -0.2
vertex -1.71595 -3.30659 0
vertex -2.32857 -3.00041 0
endloop
@@ -36927,13 +36927,13 @@ solid OpenSCAD_Model
facet normal -0.447064 -0.894502 -0
outer loop
vertex -1.71595 -3.30659 0
- vertex -2.32857 -3.00041 -0.1
- vertex -1.71595 -3.30659 -0.1
+ vertex -2.32857 -3.00041 -0.2
+ vertex -1.71595 -3.30659 -0.2
endloop
endfacet
facet normal -0.450995 -0.892526 0
outer loop
- vertex -1.71595 -3.30659 -0.1
+ vertex -1.71595 -3.30659 -0.2
vertex -1.01669 -3.65993 0
vertex -1.71595 -3.30659 0
endloop
@@ -36941,13 +36941,13 @@ solid OpenSCAD_Model
facet normal -0.450995 -0.892526 -0
outer loop
vertex -1.01669 -3.65993 0
- vertex -1.71595 -3.30659 -0.1
- vertex -1.01669 -3.65993 -0.1
+ vertex -1.71595 -3.30659 -0.2
+ vertex -1.01669 -3.65993 -0.2
endloop
endfacet
facet normal -0.429074 -0.903269 0
outer loop
- vertex -1.01669 -3.65993 -0.1
+ vertex -1.01669 -3.65993 -0.2
vertex -0.313177 -3.99411 0
vertex -1.01669 -3.65993 0
endloop
@@ -36955,13 +36955,13 @@ solid OpenSCAD_Model
facet normal -0.429074 -0.903269 -0
outer loop
vertex -0.313177 -3.99411 0
- vertex -1.01669 -3.65993 -0.1
- vertex -0.313177 -3.99411 -0.1
+ vertex -1.01669 -3.65993 -0.2
+ vertex -0.313177 -3.99411 -0.2
endloop
endfacet
facet normal -0.406667 -0.913576 0
outer loop
- vertex -0.313177 -3.99411 -0.1
+ vertex -0.313177 -3.99411 -0.2
vertex 0.394112 -4.30895 0
vertex -0.313177 -3.99411 0
endloop
@@ -36969,13 +36969,13 @@ solid OpenSCAD_Model
facet normal -0.406667 -0.913576 -0
outer loop
vertex 0.394112 -4.30895 0
- vertex -0.313177 -3.99411 -0.1
- vertex 0.394112 -4.30895 -0.1
+ vertex -0.313177 -3.99411 -0.2
+ vertex 0.394112 -4.30895 -0.2
endloop
endfacet
facet normal -0.383759 -0.923433 0
outer loop
- vertex 0.394112 -4.30895 -0.1
+ vertex 0.394112 -4.30895 -0.2
vertex 1.10471 -4.60426 0
vertex 0.394112 -4.30895 0
endloop
@@ -36983,13 +36983,13 @@ solid OpenSCAD_Model
facet normal -0.383759 -0.923433 -0
outer loop
vertex 1.10471 -4.60426 0
- vertex 0.394112 -4.30895 -0.1
- vertex 1.10471 -4.60426 -0.1
+ vertex 0.394112 -4.30895 -0.2
+ vertex 1.10471 -4.60426 -0.2
endloop
endfacet
facet normal -0.360336 -0.932823 0
outer loop
- vertex 1.10471 -4.60426 -0.1
+ vertex 1.10471 -4.60426 -0.2
vertex 1.81816 -4.87986 0
vertex 1.10471 -4.60426 0
endloop
@@ -36997,13 +36997,13 @@ solid OpenSCAD_Model
facet normal -0.360336 -0.932823 -0
outer loop
vertex 1.81816 -4.87986 0
- vertex 1.10471 -4.60426 -0.1
- vertex 1.81816 -4.87986 -0.1
+ vertex 1.10471 -4.60426 -0.2
+ vertex 1.81816 -4.87986 -0.2
endloop
endfacet
facet normal -0.33638 -0.941726 0
outer loop
- vertex 1.81816 -4.87986 -0.1
+ vertex 1.81816 -4.87986 -0.2
vertex 2.534 -5.13555 0
vertex 1.81816 -4.87986 0
endloop
@@ -37011,13 +37011,13 @@ solid OpenSCAD_Model
facet normal -0.33638 -0.941726 -0
outer loop
vertex 2.534 -5.13555 0
- vertex 1.81816 -4.87986 -0.1
- vertex 2.534 -5.13555 -0.1
+ vertex 1.81816 -4.87986 -0.2
+ vertex 2.534 -5.13555 -0.2
endloop
endfacet
facet normal -0.311879 -0.950122 0
outer loop
- vertex 2.534 -5.13555 -0.1
+ vertex 2.534 -5.13555 -0.2
vertex 3.25174 -5.37115 0
vertex 2.534 -5.13555 0
endloop
@@ -37025,13 +37025,13 @@ solid OpenSCAD_Model
facet normal -0.311879 -0.950122 -0
outer loop
vertex 3.25174 -5.37115 0
- vertex 2.534 -5.13555 -0.1
- vertex 3.25174 -5.37115 -0.1
+ vertex 2.534 -5.13555 -0.2
+ vertex 3.25174 -5.37115 -0.2
endloop
endfacet
facet normal -0.286817 -0.957985 0
outer loop
- vertex 3.25174 -5.37115 -0.1
+ vertex 3.25174 -5.37115 -0.2
vertex 3.97093 -5.58648 0
vertex 3.25174 -5.37115 0
endloop
@@ -37039,13 +37039,13 @@ solid OpenSCAD_Model
facet normal -0.286817 -0.957985 -0
outer loop
vertex 3.97093 -5.58648 0
- vertex 3.25174 -5.37115 -0.1
- vertex 3.97093 -5.58648 -0.1
+ vertex 3.25174 -5.37115 -0.2
+ vertex 3.97093 -5.58648 -0.2
endloop
endfacet
facet normal -0.262141 -0.965029 0
outer loop
- vertex 3.97093 -5.58648 -0.1
+ vertex 3.97093 -5.58648 -0.2
vertex 4.51611 -5.73457 0
vertex 3.97093 -5.58648 0
endloop
@@ -37053,13 +37053,13 @@ solid OpenSCAD_Model
facet normal -0.262141 -0.965029 -0
outer loop
vertex 4.51611 -5.73457 0
- vertex 3.97093 -5.58648 -0.1
- vertex 4.51611 -5.73457 -0.1
+ vertex 3.97093 -5.58648 -0.2
+ vertex 4.51611 -5.73457 -0.2
endloop
endfacet
facet normal -0.230397 -0.973097 0
outer loop
- vertex 4.51611 -5.73457 -0.1
+ vertex 4.51611 -5.73457 -0.2
vertex 4.99906 -5.84891 0
vertex 4.51611 -5.73457 0
endloop
@@ -37067,13 +37067,13 @@ solid OpenSCAD_Model
facet normal -0.230397 -0.973097 -0
outer loop
vertex 4.99906 -5.84891 0
- vertex 4.51611 -5.73457 -0.1
- vertex 4.99906 -5.84891 -0.1
+ vertex 4.51611 -5.73457 -0.2
+ vertex 4.99906 -5.84891 -0.2
endloop
endfacet
facet normal -0.18567 -0.982612 0
outer loop
- vertex 4.99906 -5.84891 -0.1
+ vertex 4.99906 -5.84891 -0.2
vertex 5.4311 -5.93055 0
vertex 4.99906 -5.84891 0
endloop
@@ -37081,13 +37081,13 @@ solid OpenSCAD_Model
facet normal -0.18567 -0.982612 -0
outer loop
vertex 5.4311 -5.93055 0
- vertex 4.99906 -5.84891 -0.1
- vertex 5.4311 -5.93055 -0.1
+ vertex 4.99906 -5.84891 -0.2
+ vertex 5.4311 -5.93055 -0.2
endloop
endfacet
facet normal -0.126289 -0.991994 0
outer loop
- vertex 5.4311 -5.93055 -0.1
+ vertex 5.4311 -5.93055 -0.2
vertex 5.82356 -5.98052 0
vertex 5.4311 -5.93055 0
endloop
@@ -37095,13 +37095,13 @@ solid OpenSCAD_Model
facet normal -0.126289 -0.991994 -0
outer loop
vertex 5.82356 -5.98052 0
- vertex 5.4311 -5.93055 -0.1
- vertex 5.82356 -5.98052 -0.1
+ vertex 5.4311 -5.93055 -0.2
+ vertex 5.82356 -5.98052 -0.2
endloop
endfacet
facet normal -0.0529968 -0.998595 0
outer loop
- vertex 5.82356 -5.98052 -0.1
+ vertex 5.82356 -5.98052 -0.2
vertex 6.18777 -5.99984 0
vertex 5.82356 -5.98052 0
endloop
@@ -37109,13 +37109,13 @@ solid OpenSCAD_Model
facet normal -0.0529968 -0.998595 -0
outer loop
vertex 6.18777 -5.99984 0
- vertex 5.82356 -5.98052 -0.1
- vertex 6.18777 -5.99984 -0.1
+ vertex 5.82356 -5.98052 -0.2
+ vertex 6.18777 -5.99984 -0.2
endloop
endfacet
facet normal 0.0295577 -0.999563 0
outer loop
- vertex 6.18777 -5.99984 -0.1
+ vertex 6.18777 -5.99984 -0.2
vertex 6.53505 -5.98957 0
vertex 6.18777 -5.99984 0
endloop
@@ -37123,13 +37123,13 @@ solid OpenSCAD_Model
facet normal 0.0295577 -0.999563 0
outer loop
vertex 6.53505 -5.98957 0
- vertex 6.18777 -5.99984 -0.1
- vertex 6.53505 -5.98957 -0.1
+ vertex 6.18777 -5.99984 -0.2
+ vertex 6.53505 -5.98957 -0.2
endloop
endfacet
facet normal 0.112922 -0.993604 0
outer loop
- vertex 6.53505 -5.98957 -0.1
+ vertex 6.53505 -5.98957 -0.2
vertex 6.87672 -5.95074 0
vertex 6.53505 -5.98957 0
endloop
@@ -37137,13 +37137,13 @@ solid OpenSCAD_Model
facet normal 0.112922 -0.993604 0
outer loop
vertex 6.87672 -5.95074 0
- vertex 6.53505 -5.98957 -0.1
- vertex 6.87672 -5.95074 -0.1
+ vertex 6.53505 -5.98957 -0.2
+ vertex 6.87672 -5.95074 -0.2
endloop
endfacet
facet normal 0.18762 -0.982242 0
outer loop
- vertex 6.87672 -5.95074 -0.1
+ vertex 6.87672 -5.95074 -0.2
vertex 7.2241 -5.88439 0
vertex 6.87672 -5.95074 0
endloop
@@ -37151,13 +37151,13 @@ solid OpenSCAD_Model
facet normal 0.18762 -0.982242 0
outer loop
vertex 7.2241 -5.88439 0
- vertex 6.87672 -5.95074 -0.1
- vertex 7.2241 -5.88439 -0.1
+ vertex 6.87672 -5.95074 -0.2
+ vertex 7.2241 -5.88439 -0.2
endloop
endfacet
facet normal 0.21982 -0.975541 0
outer loop
- vertex 7.2241 -5.88439 -0.1
+ vertex 7.2241 -5.88439 -0.2
vertex 7.809 -5.75259 0
vertex 7.2241 -5.88439 0
endloop
@@ -37165,237 +37165,237 @@ solid OpenSCAD_Model
facet normal 0.21982 -0.975541 0
outer loop
vertex 7.809 -5.75259 0
- vertex 7.2241 -5.88439 -0.1
- vertex 7.809 -5.75259 -0.1
+ vertex 7.2241 -5.88439 -0.2
+ vertex 7.809 -5.75259 -0.2
endloop
endfacet
facet normal 0.71334 0.700818 0
outer loop
vertex 7.809 -5.75259 0
- vertex 7.04277 -4.97268 -0.1
+ vertex 7.04277 -4.97268 -0.2
vertex 7.04277 -4.97268 0
endloop
endfacet
facet normal 0.71334 0.700818 0
outer loop
- vertex 7.04277 -4.97268 -0.1
+ vertex 7.04277 -4.97268 -0.2
vertex 7.809 -5.75259 0
- vertex 7.809 -5.75259 -0.1
+ vertex 7.809 -5.75259 -0.2
endloop
endfacet
facet normal 0.735784 0.677216 0
outer loop
vertex 7.04277 -4.97268 0
- vertex 6.78219 -4.68956 -0.1
+ vertex 6.78219 -4.68956 -0.2
vertex 6.78219 -4.68956 0
endloop
endfacet
facet normal 0.735784 0.677216 0
outer loop
- vertex 6.78219 -4.68956 -0.1
+ vertex 6.78219 -4.68956 -0.2
vertex 7.04277 -4.97268 0
- vertex 7.04277 -4.97268 -0.1
+ vertex 7.04277 -4.97268 -0.2
endloop
endfacet
facet normal 0.771549 0.636169 0
outer loop
vertex 6.78219 -4.68956 0
- vertex 6.51759 -4.36865 -0.1
+ vertex 6.51759 -4.36865 -0.2
vertex 6.51759 -4.36865 0
endloop
endfacet
facet normal 0.771549 0.636169 0
outer loop
- vertex 6.51759 -4.36865 -0.1
+ vertex 6.51759 -4.36865 -0.2
vertex 6.78219 -4.68956 0
- vertex 6.78219 -4.68956 -0.1
+ vertex 6.78219 -4.68956 -0.2
endloop
endfacet
facet normal 0.79877 0.601637 0
outer loop
vertex 6.51759 -4.36865 0
- vertex 6.2523 -4.01644 -0.1
+ vertex 6.2523 -4.01644 -0.2
vertex 6.2523 -4.01644 0
endloop
endfacet
facet normal 0.79877 0.601637 0
outer loop
- vertex 6.2523 -4.01644 -0.1
+ vertex 6.2523 -4.01644 -0.2
vertex 6.51759 -4.36865 0
- vertex 6.51759 -4.36865 -0.1
+ vertex 6.51759 -4.36865 -0.2
endloop
endfacet
facet normal 0.820534 0.571597 0
outer loop
vertex 6.2523 -4.01644 0
- vertex 5.98964 -3.63939 -0.1
+ vertex 5.98964 -3.63939 -0.2
vertex 5.98964 -3.63939 0
endloop
endfacet
facet normal 0.820534 0.571597 0
outer loop
- vertex 5.98964 -3.63939 -0.1
+ vertex 5.98964 -3.63939 -0.2
vertex 6.2523 -4.01644 0
- vertex 6.2523 -4.01644 -0.1
+ vertex 6.2523 -4.01644 -0.2
endloop
endfacet
facet normal 0.846837 0.531853 0
outer loop
vertex 5.98964 -3.63939 0
- vertex 5.48552 -2.8367 -0.1
+ vertex 5.48552 -2.8367 -0.2
vertex 5.48552 -2.8367 0
endloop
endfacet
facet normal 0.846837 0.531853 0
outer loop
- vertex 5.48552 -2.8367 -0.1
+ vertex 5.48552 -2.8367 -0.2
vertex 5.98964 -3.63939 0
- vertex 5.98964 -3.63939 -0.1
+ vertex 5.98964 -3.63939 -0.2
endloop
endfacet
facet normal 0.876057 0.482207 0
outer loop
vertex 5.48552 -2.8367 0
- vertex 5.03179 -2.01239 -0.1
+ vertex 5.03179 -2.01239 -0.2
vertex 5.03179 -2.01239 0
endloop
endfacet
facet normal 0.876057 0.482207 0
outer loop
- vertex 5.03179 -2.01239 -0.1
+ vertex 5.03179 -2.01239 -0.2
vertex 5.48552 -2.8367 0
- vertex 5.48552 -2.8367 -0.1
+ vertex 5.48552 -2.8367 -0.2
endloop
endfacet
facet normal 0.903486 0.428618 0
outer loop
vertex 5.03179 -2.01239 0
- vertex 4.65505 -1.21825 -0.1
+ vertex 4.65505 -1.21825 -0.2
vertex 4.65505 -1.21825 0
endloop
endfacet
facet normal 0.903486 0.428618 0
outer loop
- vertex 4.65505 -1.21825 -0.1
+ vertex 4.65505 -1.21825 -0.2
vertex 5.03179 -2.01239 0
- vertex 5.03179 -2.01239 -0.1
+ vertex 5.03179 -2.01239 -0.2
endloop
endfacet
facet normal 0.925537 0.378657 0
outer loop
vertex 4.65505 -1.21825 0
- vertex 4.50386 -0.848697 -0.1
+ vertex 4.50386 -0.848697 -0.2
vertex 4.50386 -0.848697 0
endloop
endfacet
facet normal 0.925537 0.378657 0
outer loop
- vertex 4.50386 -0.848697 -0.1
+ vertex 4.50386 -0.848697 -0.2
vertex 4.65505 -1.21825 0
- vertex 4.65505 -1.21825 -0.1
+ vertex 4.65505 -1.21825 -0.2
endloop
endfacet
facet normal 0.942067 0.335426 0
outer loop
vertex 4.50386 -0.848697 0
- vertex 4.38188 -0.506111 -0.1
+ vertex 4.38188 -0.506111 -0.2
vertex 4.38188 -0.506111 0
endloop
endfacet
facet normal 0.942067 0.335426 0
outer loop
- vertex 4.38188 -0.506111 -0.1
+ vertex 4.38188 -0.506111 -0.2
vertex 4.50386 -0.848697 0
- vertex 4.50386 -0.848697 -0.1
+ vertex 4.50386 -0.848697 -0.2
endloop
endfacet
facet normal 0.960602 0.277927 0
outer loop
vertex 4.38188 -0.506111 0
- vertex 4.29244 -0.196974 -0.1
+ vertex 4.29244 -0.196974 -0.2
vertex 4.29244 -0.196974 0
endloop
endfacet
facet normal 0.960602 0.277927 0
outer loop
- vertex 4.29244 -0.196974 -0.1
+ vertex 4.29244 -0.196974 -0.2
vertex 4.38188 -0.506111 0
- vertex 4.38188 -0.506111 -0.1
+ vertex 4.38188 -0.506111 -0.2
endloop
endfacet
facet normal 0.980763 0.1952 0
outer loop
vertex 4.29244 -0.196974 0
- vertex 4.23886 0.0722368 -0.1
+ vertex 4.23886 0.0722368 -0.2
vertex 4.23886 0.0722368 0
endloop
endfacet
facet normal 0.980763 0.1952 0
outer loop
- vertex 4.23886 0.0722368 -0.1
+ vertex 4.23886 0.0722368 -0.2
vertex 4.29244 -0.196974 0
- vertex 4.29244 -0.196974 -0.1
+ vertex 4.29244 -0.196974 -0.2
endloop
endfacet
facet normal 0.997919 0.0644811 0
outer loop
vertex 4.23886 0.0722368 0
- vertex 4.22446 0.295049 -0.1
+ vertex 4.22446 0.295049 -0.2
vertex 4.22446 0.295049 0
endloop
endfacet
facet normal 0.997919 0.0644811 0
outer loop
- vertex 4.22446 0.295049 -0.1
+ vertex 4.22446 0.295049 -0.2
vertex 4.23886 0.0722368 0
- vertex 4.23886 0.0722368 -0.1
+ vertex 4.23886 0.0722368 -0.2
endloop
endfacet
facet normal 0.986595 -0.163189 0
outer loop
vertex 4.22446 0.295049 0
- vertex 4.25257 0.464986 -0.1
+ vertex 4.25257 0.464986 -0.2
vertex 4.25257 0.464986 0
endloop
endfacet
facet normal 0.986595 -0.163189 0
outer loop
- vertex 4.25257 0.464986 -0.1
+ vertex 4.25257 0.464986 -0.2
vertex 4.22446 0.295049 0
- vertex 4.22446 0.295049 -0.1
+ vertex 4.22446 0.295049 -0.2
endloop
endfacet
facet normal 0.930706 -0.365767 0
outer loop
vertex 4.25257 0.464986 0
- vertex 4.33872 0.684191 -0.1
+ vertex 4.33872 0.684191 -0.2
vertex 4.33872 0.684191 0
endloop
endfacet
facet normal 0.930706 -0.365767 0
outer loop
- vertex 4.33872 0.684191 -0.1
+ vertex 4.33872 0.684191 -0.2
vertex 4.25257 0.464986 0
- vertex 4.25257 0.464986 -0.1
+ vertex 4.25257 0.464986 -0.2
endloop
endfacet
facet normal 0.83908 -0.544009 0
outer loop
vertex 4.33872 0.684191 0
- vertex 4.3737 0.738144 -0.1
+ vertex 4.3737 0.738144 -0.2
vertex 4.3737 0.738144 0
endloop
endfacet
facet normal 0.83908 -0.544009 0
outer loop
- vertex 4.3737 0.738144 -0.1
+ vertex 4.3737 0.738144 -0.2
vertex 4.33872 0.684191 0
- vertex 4.33872 0.684191 -0.1
+ vertex 4.33872 0.684191 -0.2
endloop
endfacet
facet normal 0.430226 -0.902721 0
outer loop
- vertex 4.3737 0.738144 -0.1
+ vertex 4.3737 0.738144 -0.2
vertex 4.40839 0.754677 0
vertex 4.3737 0.738144 0
endloop
@@ -37403,13 +37403,13 @@ solid OpenSCAD_Model
facet normal 0.430226 -0.902721 0
outer loop
vertex 4.40839 0.754677 0
- vertex 4.3737 0.738144 -0.1
- vertex 4.40839 0.754677 -0.1
+ vertex 4.3737 0.738144 -0.2
+ vertex 4.40839 0.754677 -0.2
endloop
endfacet
facet normal -0.483736 -0.875214 0
outer loop
- vertex 4.40839 0.754677 -0.1
+ vertex 4.40839 0.754677 -0.2
vertex 4.44662 0.733548 0
vertex 4.40839 0.754677 0
endloop
@@ -37417,111 +37417,111 @@ solid OpenSCAD_Model
facet normal -0.483736 -0.875214 -0
outer loop
vertex 4.44662 0.733548 0
- vertex 4.40839 0.754677 -0.1
- vertex 4.44662 0.733548 -0.1
+ vertex 4.40839 0.754677 -0.2
+ vertex 4.44662 0.733548 -0.2
endloop
endfacet
facet normal -0.791399 -0.6113 0
outer loop
- vertex 4.49221 0.674515 -0.1
+ vertex 4.49221 0.674515 -0.2
vertex 4.44662 0.733548 0
- vertex 4.44662 0.733548 -0.1
+ vertex 4.44662 0.733548 -0.2
endloop
endfacet
facet normal -0.791399 -0.6113 0
outer loop
vertex 4.44662 0.733548 0
- vertex 4.49221 0.674515 -0.1
+ vertex 4.49221 0.674515 -0.2
vertex 4.49221 0.674515 0
endloop
endfacet
facet normal -0.875249 -0.483672 0
outer loop
- vertex 4.62083 0.441773 -0.1
+ vertex 4.62083 0.441773 -0.2
vertex 4.49221 0.674515 0
- vertex 4.49221 0.674515 -0.1
+ vertex 4.49221 0.674515 -0.2
endloop
endfacet
facet normal -0.875249 -0.483672 0
outer loop
vertex 4.49221 0.674515 0
- vertex 4.62083 0.441773 -0.1
+ vertex 4.62083 0.441773 -0.2
vertex 4.62083 0.441773 0
endloop
endfacet
facet normal -0.8234 -0.567461 0
outer loop
- vertex 4.83246 0.134689 -0.1
+ vertex 4.83246 0.134689 -0.2
vertex 4.62083 0.441773 0
- vertex 4.62083 0.441773 -0.1
+ vertex 4.62083 0.441773 -0.2
endloop
endfacet
facet normal -0.8234 -0.567461 0
outer loop
vertex 4.62083 0.441773 0
- vertex 4.83246 0.134689 -0.1
+ vertex 4.83246 0.134689 -0.2
vertex 4.83246 0.134689 0
endloop
endfacet
facet normal -0.783851 -0.620949 0
outer loop
- vertex 5.24358 -0.384283 -0.1
+ vertex 5.24358 -0.384283 -0.2
vertex 4.83246 0.134689 0
- vertex 4.83246 0.134689 -0.1
+ vertex 4.83246 0.134689 -0.2
endloop
endfacet
facet normal -0.783851 -0.620949 0
outer loop
vertex 4.83246 0.134689 0
- vertex 5.24358 -0.384283 -0.1
+ vertex 5.24358 -0.384283 -0.2
vertex 5.24358 -0.384283 0
endloop
endfacet
facet normal -0.766673 -0.642037 0
outer loop
- vertex 5.79491 -1.04264 -0.1
+ vertex 5.79491 -1.04264 -0.2
vertex 5.24358 -0.384283 0
- vertex 5.24358 -0.384283 -0.1
+ vertex 5.24358 -0.384283 -0.2
endloop
endfacet
facet normal -0.766673 -0.642037 0
outer loop
vertex 5.24358 -0.384283 0
- vertex 5.79491 -1.04264 -0.1
+ vertex 5.79491 -1.04264 -0.2
vertex 5.79491 -1.04264 0
endloop
endfacet
facet normal -0.753766 -0.657143 0
outer loop
- vertex 6.42718 -1.76788 -0.1
+ vertex 6.42718 -1.76788 -0.2
vertex 5.79491 -1.04264 0
- vertex 5.79491 -1.04264 -0.1
+ vertex 5.79491 -1.04264 -0.2
endloop
endfacet
facet normal -0.753766 -0.657143 0
outer loop
vertex 5.79491 -1.04264 0
- vertex 6.42718 -1.76788 -0.1
+ vertex 6.42718 -1.76788 -0.2
vertex 6.42718 -1.76788 0
endloop
endfacet
facet normal -0.728754 -0.684775 0
outer loop
- vertex 7.10115 -2.48513 -0.1
+ vertex 7.10115 -2.48513 -0.2
vertex 6.42718 -1.76788 0
- vertex 6.42718 -1.76788 -0.1
+ vertex 6.42718 -1.76788 -0.2
endloop
endfacet
facet normal -0.728754 -0.684775 0
outer loop
vertex 6.42718 -1.76788 0
- vertex 7.10115 -2.48513 -0.1
+ vertex 7.10115 -2.48513 -0.2
vertex 7.10115 -2.48513 0
endloop
endfacet
facet normal -0.682466 -0.730918 0
outer loop
- vertex 7.10115 -2.48513 -0.1
+ vertex 7.10115 -2.48513 -0.2
vertex 7.75455 -3.09522 0
vertex 7.10115 -2.48513 0
endloop
@@ -37529,13 +37529,13 @@ solid OpenSCAD_Model
facet normal -0.682466 -0.730918 -0
outer loop
vertex 7.75455 -3.09522 0
- vertex 7.10115 -2.48513 -0.1
- vertex 7.75455 -3.09522 -0.1
+ vertex 7.10115 -2.48513 -0.2
+ vertex 7.75455 -3.09522 -0.2
endloop
endfacet
facet normal -0.638085 -0.769966 0
outer loop
- vertex 7.75455 -3.09522 -0.1
+ vertex 7.75455 -3.09522 -0.2
vertex 8.0755 -3.36119 0
vertex 7.75455 -3.09522 0
endloop
@@ -37543,13 +37543,13 @@ solid OpenSCAD_Model
facet normal -0.638085 -0.769966 -0
outer loop
vertex 8.0755 -3.36119 0
- vertex 7.75455 -3.09522 -0.1
- vertex 8.0755 -3.36119 -0.1
+ vertex 7.75455 -3.09522 -0.2
+ vertex 8.0755 -3.36119 -0.2
endloop
endfacet
facet normal -0.60305 -0.797703 0
outer loop
- vertex 8.0755 -3.36119 -0.1
+ vertex 8.0755 -3.36119 -0.2
vertex 8.39365 -3.60171 0
vertex 8.0755 -3.36119 0
endloop
@@ -37557,13 +37557,13 @@ solid OpenSCAD_Model
facet normal -0.60305 -0.797703 -0
outer loop
vertex 8.39365 -3.60171 0
- vertex 8.0755 -3.36119 -0.1
- vertex 8.39365 -3.60171 -0.1
+ vertex 8.0755 -3.36119 -0.2
+ vertex 8.39365 -3.60171 -0.2
endloop
endfacet
facet normal -0.563259 -0.826281 0
outer loop
- vertex 8.39365 -3.60171 -0.1
+ vertex 8.39365 -3.60171 -0.2
vertex 8.70978 -3.81721 0
vertex 8.39365 -3.60171 0
endloop
@@ -37571,13 +37571,13 @@ solid OpenSCAD_Model
facet normal -0.563259 -0.826281 -0
outer loop
vertex 8.70978 -3.81721 0
- vertex 8.39365 -3.60171 -0.1
- vertex 8.70978 -3.81721 -0.1
+ vertex 8.39365 -3.60171 -0.2
+ vertex 8.70978 -3.81721 -0.2
endloop
endfacet
facet normal -0.518472 -0.855094 0
outer loop
- vertex 8.70978 -3.81721 -0.1
+ vertex 8.70978 -3.81721 -0.2
vertex 9.02468 -4.00814 0
vertex 8.70978 -3.81721 0
endloop
@@ -37585,13 +37585,13 @@ solid OpenSCAD_Model
facet normal -0.518472 -0.855094 -0
outer loop
vertex 9.02468 -4.00814 0
- vertex 8.70978 -3.81721 -0.1
- vertex 9.02468 -4.00814 -0.1
+ vertex 8.70978 -3.81721 -0.2
+ vertex 9.02468 -4.00814 -0.2
endloop
endfacet
facet normal -0.468624 -0.883398 0
outer loop
- vertex 9.02468 -4.00814 -0.1
+ vertex 9.02468 -4.00814 -0.2
vertex 9.33912 -4.17495 0
vertex 9.02468 -4.00814 0
endloop
@@ -37599,13 +37599,13 @@ solid OpenSCAD_Model
facet normal -0.468624 -0.883398 -0
outer loop
vertex 9.33912 -4.17495 0
- vertex 9.02468 -4.00814 -0.1
- vertex 9.33912 -4.17495 -0.1
+ vertex 9.02468 -4.00814 -0.2
+ vertex 9.33912 -4.17495 -0.2
endloop
endfacet
facet normal -0.413918 -0.910314 0
outer loop
- vertex 9.33912 -4.17495 -0.1
+ vertex 9.33912 -4.17495 -0.2
vertex 9.65389 -4.31807 0
vertex 9.33912 -4.17495 0
endloop
@@ -37613,13 +37613,13 @@ solid OpenSCAD_Model
facet normal -0.413918 -0.910314 -0
outer loop
vertex 9.65389 -4.31807 0
- vertex 9.33912 -4.17495 -0.1
- vertex 9.65389 -4.31807 -0.1
+ vertex 9.33912 -4.17495 -0.2
+ vertex 9.65389 -4.31807 -0.2
endloop
endfacet
facet normal -0.354841 -0.934927 0
outer loop
- vertex 9.65389 -4.31807 -0.1
+ vertex 9.65389 -4.31807 -0.2
vertex 9.96977 -4.43796 0
vertex 9.65389 -4.31807 0
endloop
@@ -37627,13 +37627,13 @@ solid OpenSCAD_Model
facet normal -0.354841 -0.934927 -0
outer loop
vertex 9.96977 -4.43796 0
- vertex 9.65389 -4.31807 -0.1
- vertex 9.96977 -4.43796 -0.1
+ vertex 9.65389 -4.31807 -0.2
+ vertex 9.96977 -4.43796 -0.2
endloop
endfacet
facet normal -0.292213 -0.956353 0
outer loop
- vertex 9.96977 -4.43796 -0.1
+ vertex 9.96977 -4.43796 -0.2
vertex 10.2875 -4.53506 0
vertex 9.96977 -4.43796 0
endloop
@@ -37641,13 +37641,13 @@ solid OpenSCAD_Model
facet normal -0.292213 -0.956353 -0
outer loop
vertex 10.2875 -4.53506 0
- vertex 9.96977 -4.43796 -0.1
- vertex 10.2875 -4.53506 -0.1
+ vertex 9.96977 -4.43796 -0.2
+ vertex 10.2875 -4.53506 -0.2
endloop
endfacet
facet normal -0.227161 -0.973857 0
outer loop
- vertex 10.2875 -4.53506 -0.1
+ vertex 10.2875 -4.53506 -0.2
vertex 10.608 -4.6098 0
vertex 10.2875 -4.53506 0
endloop
@@ -37655,13 +37655,13 @@ solid OpenSCAD_Model
facet normal -0.227161 -0.973857 -0
outer loop
vertex 10.608 -4.6098 0
- vertex 10.2875 -4.53506 -0.1
- vertex 10.608 -4.6098 -0.1
+ vertex 10.2875 -4.53506 -0.2
+ vertex 10.608 -4.6098 -0.2
endloop
endfacet
facet normal -0.161011 -0.986953 0
outer loop
- vertex 10.608 -4.6098 -0.1
+ vertex 10.608 -4.6098 -0.2
vertex 10.9319 -4.66264 0
vertex 10.608 -4.6098 0
endloop
@@ -37669,13 +37669,13 @@ solid OpenSCAD_Model
facet normal -0.161011 -0.986953 -0
outer loop
vertex 10.9319 -4.66264 0
- vertex 10.608 -4.6098 -0.1
- vertex 10.9319 -4.66264 -0.1
+ vertex 10.608 -4.6098 -0.2
+ vertex 10.9319 -4.66264 -0.2
endloop
endfacet
facet normal -0.0951962 -0.995459 0
outer loop
- vertex 10.9319 -4.66264 -0.1
+ vertex 10.9319 -4.66264 -0.2
vertex 11.26 -4.69402 0
vertex 10.9319 -4.66264 0
endloop
@@ -37683,13 +37683,13 @@ solid OpenSCAD_Model
facet normal -0.0951962 -0.995459 -0
outer loop
vertex 11.26 -4.69402 0
- vertex 10.9319 -4.66264 -0.1
- vertex 11.26 -4.69402 -0.1
+ vertex 10.9319 -4.66264 -0.2
+ vertex 11.26 -4.69402 -0.2
endloop
endfacet
facet normal -0.0310839 -0.999517 0
outer loop
- vertex 11.26 -4.69402 -0.1
+ vertex 11.26 -4.69402 -0.2
vertex 11.5931 -4.70438 0
vertex 11.26 -4.69402 0
endloop
@@ -37697,13 +37697,13 @@ solid OpenSCAD_Model
facet normal -0.0310839 -0.999517 -0
outer loop
vertex 11.5931 -4.70438 0
- vertex 11.26 -4.69402 -0.1
- vertex 11.5931 -4.70438 -0.1
+ vertex 11.26 -4.69402 -0.2
+ vertex 11.5931 -4.70438 -0.2
endloop
endfacet
facet normal 0.0736121 -0.997287 0
outer loop
- vertex 11.5931 -4.70438 -0.1
+ vertex 11.5931 -4.70438 -0.2
vertex 12.006 -4.67391 0
vertex 11.5931 -4.70438 0
endloop
@@ -37711,13 +37711,13 @@ solid OpenSCAD_Model
facet normal 0.0736121 -0.997287 0
outer loop
vertex 12.006 -4.67391 0
- vertex 11.5931 -4.70438 -0.1
- vertex 12.006 -4.67391 -0.1
+ vertex 11.5931 -4.70438 -0.2
+ vertex 12.006 -4.67391 -0.2
endloop
endfacet
facet normal 0.209942 -0.977714 0
outer loop
- vertex 12.006 -4.67391 -0.1
+ vertex 12.006 -4.67391 -0.2
vertex 12.4149 -4.5861 0
vertex 12.006 -4.67391 0
endloop
@@ -37725,13 +37725,13 @@ solid OpenSCAD_Model
facet normal 0.209942 -0.977714 0
outer loop
vertex 12.4149 -4.5861 0
- vertex 12.006 -4.67391 -0.1
- vertex 12.4149 -4.5861 -0.1
+ vertex 12.006 -4.67391 -0.2
+ vertex 12.4149 -4.5861 -0.2
endloop
endfacet
facet normal 0.332988 -0.942931 0
outer loop
- vertex 12.4149 -4.5861 -0.1
+ vertex 12.4149 -4.5861 -0.2
vertex 12.8106 -4.44636 0
vertex 12.4149 -4.5861 0
endloop
@@ -37739,13 +37739,13 @@ solid OpenSCAD_Model
facet normal 0.332988 -0.942931 0
outer loop
vertex 12.8106 -4.44636 0
- vertex 12.4149 -4.5861 -0.1
- vertex 12.8106 -4.44636 -0.1
+ vertex 12.4149 -4.5861 -0.2
+ vertex 12.8106 -4.44636 -0.2
endloop
endfacet
facet normal 0.44663 -0.894719 0
outer loop
- vertex 12.8106 -4.44636 -0.1
+ vertex 12.8106 -4.44636 -0.2
vertex 13.1837 -4.26011 0
vertex 12.8106 -4.44636 0
endloop
@@ -37753,13 +37753,13 @@ solid OpenSCAD_Model
facet normal 0.44663 -0.894719 0
outer loop
vertex 13.1837 -4.26011 0
- vertex 12.8106 -4.44636 -0.1
- vertex 13.1837 -4.26011 -0.1
+ vertex 12.8106 -4.44636 -0.2
+ vertex 13.1837 -4.26011 -0.2
endloop
endfacet
facet normal 0.554537 -0.832159 0
outer loop
- vertex 13.1837 -4.26011 -0.1
+ vertex 13.1837 -4.26011 -0.2
vertex 13.5249 -4.03275 0
vertex 13.1837 -4.26011 0
endloop
@@ -37767,13 +37767,13 @@ solid OpenSCAD_Model
facet normal 0.554537 -0.832159 0
outer loop
vertex 13.5249 -4.03275 0
- vertex 13.1837 -4.26011 -0.1
- vertex 13.5249 -4.03275 -0.1
+ vertex 13.1837 -4.26011 -0.2
+ vertex 13.5249 -4.03275 -0.2
endloop
endfacet
facet normal 0.65941 -0.751784 0
outer loop
- vertex 13.5249 -4.03275 -0.1
+ vertex 13.5249 -4.03275 -0.2
vertex 13.8248 -3.7697 0
vertex 13.5249 -4.03275 0
endloop
@@ -37781,237 +37781,237 @@ solid OpenSCAD_Model
facet normal 0.65941 -0.751784 0
outer loop
vertex 13.8248 -3.7697 0
- vertex 13.5249 -4.03275 -0.1
- vertex 13.8248 -3.7697 -0.1
+ vertex 13.5249 -4.03275 -0.2
+ vertex 13.8248 -3.7697 -0.2
endloop
endfacet
facet normal 0.762012 -0.647563 0
outer loop
vertex 13.8248 -3.7697 0
- vertex 14.0741 -3.47638 -0.1
+ vertex 14.0741 -3.47638 -0.2
vertex 14.0741 -3.47638 0
endloop
endfacet
facet normal 0.762012 -0.647563 0
outer loop
- vertex 14.0741 -3.47638 -0.1
+ vertex 14.0741 -3.47638 -0.2
vertex 13.8248 -3.7697 0
- vertex 13.8248 -3.7697 -0.1
+ vertex 13.8248 -3.7697 -0.2
endloop
endfacet
facet normal 0.835702 -0.549183 0
outer loop
vertex 14.0741 -3.47638 0
- vertex 14.1768 -3.32005 -0.1
+ vertex 14.1768 -3.32005 -0.2
vertex 14.1768 -3.32005 0
endloop
endfacet
facet normal 0.835702 -0.549183 0
outer loop
- vertex 14.1768 -3.32005 -0.1
+ vertex 14.1768 -3.32005 -0.2
vertex 14.0741 -3.47638 0
- vertex 14.0741 -3.47638 -0.1
+ vertex 14.0741 -3.47638 -0.2
endloop
endfacet
facet normal 0.88181 -0.471605 0
outer loop
vertex 14.1768 -3.32005 0
- vertex 14.2634 -3.15818 -0.1
+ vertex 14.2634 -3.15818 -0.2
vertex 14.2634 -3.15818 0
endloop
endfacet
facet normal 0.88181 -0.471605 0
outer loop
- vertex 14.2634 -3.15818 -0.1
+ vertex 14.2634 -3.15818 -0.2
vertex 14.1768 -3.32005 0
- vertex 14.1768 -3.32005 -0.1
+ vertex 14.1768 -3.32005 -0.2
endloop
endfacet
facet normal 0.950814 -0.309764 0
outer loop
vertex 14.2634 -3.15818 0
- vertex 14.3256 -2.96711 -0.1
+ vertex 14.3256 -2.96711 -0.2
vertex 14.3256 -2.96711 0
endloop
endfacet
facet normal 0.950814 -0.309764 0
outer loop
- vertex 14.3256 -2.96711 -0.1
+ vertex 14.3256 -2.96711 -0.2
vertex 14.2634 -3.15818 0
- vertex 14.2634 -3.15818 -0.1
+ vertex 14.2634 -3.15818 -0.2
endloop
endfacet
facet normal 0.996178 -0.0873495 0
outer loop
vertex 14.3256 -2.96711 0
- vertex 14.3448 -2.7489 -0.1
+ vertex 14.3448 -2.7489 -0.2
vertex 14.3448 -2.7489 0
endloop
endfacet
facet normal 0.996178 -0.0873495 0
outer loop
- vertex 14.3448 -2.7489 -0.1
+ vertex 14.3448 -2.7489 -0.2
vertex 14.3256 -2.96711 0
- vertex 14.3256 -2.96711 -0.1
+ vertex 14.3256 -2.96711 -0.2
endloop
endfacet
facet normal 0.995552 0.0942095 0
outer loop
vertex 14.3448 -2.7489 0
- vertex 14.3217 -2.5049 -0.1
+ vertex 14.3217 -2.5049 -0.2
vertex 14.3217 -2.5049 0
endloop
endfacet
facet normal 0.995552 0.0942095 0
outer loop
- vertex 14.3217 -2.5049 -0.1
+ vertex 14.3217 -2.5049 -0.2
vertex 14.3448 -2.7489 0
- vertex 14.3448 -2.7489 -0.1
+ vertex 14.3448 -2.7489 -0.2
endloop
endfacet
facet normal 0.972391 0.233358 0
outer loop
vertex 14.3217 -2.5049 0
- vertex 14.2572 -2.23644 -0.1
+ vertex 14.2572 -2.23644 -0.2
vertex 14.2572 -2.23644 0
endloop
endfacet
facet normal 0.972391 0.233358 0
outer loop
- vertex 14.2572 -2.23644 -0.1
+ vertex 14.2572 -2.23644 -0.2
vertex 14.3217 -2.5049 0
- vertex 14.3217 -2.5049 -0.1
+ vertex 14.3217 -2.5049 -0.2
endloop
endfacet
facet normal 0.940985 0.338449 0
outer loop
vertex 14.2572 -2.23644 0
- vertex 14.1524 -1.94488 -0.1
+ vertex 14.1524 -1.94488 -0.2
vertex 14.1524 -1.94488 0
endloop
endfacet
facet normal 0.940985 0.338449 0
outer loop
- vertex 14.1524 -1.94488 -0.1
+ vertex 14.1524 -1.94488 -0.2
vertex 14.2572 -2.23644 0
- vertex 14.2572 -2.23644 -0.1
+ vertex 14.2572 -2.23644 -0.2
endloop
endfacet
facet normal 0.908169 0.418604 0
outer loop
vertex 14.1524 -1.94488 0
- vertex 14.008 -1.63155 -0.1
+ vertex 14.008 -1.63155 -0.2
vertex 14.008 -1.63155 0
endloop
endfacet
facet normal 0.908169 0.418604 0
outer loop
- vertex 14.008 -1.63155 -0.1
+ vertex 14.008 -1.63155 -0.2
vertex 14.1524 -1.94488 0
- vertex 14.1524 -1.94488 -0.1
+ vertex 14.1524 -1.94488 -0.2
endloop
endfacet
facet normal 0.876739 0.480967 0
outer loop
vertex 14.008 -1.63155 0
- vertex 13.8249 -1.29782 -0.1
+ vertex 13.8249 -1.29782 -0.2
vertex 13.8249 -1.29782 0
endloop
endfacet
facet normal 0.876739 0.480967 0
outer loop
- vertex 13.8249 -1.29782 -0.1
+ vertex 13.8249 -1.29782 -0.2
vertex 14.008 -1.63155 0
- vertex 14.008 -1.63155 -0.1
+ vertex 14.008 -1.63155 -0.2
endloop
endfacet
facet normal 0.847618 0.530607 0
outer loop
vertex 13.8249 -1.29782 0
- vertex 13.604 -0.945011 -0.1
+ vertex 13.604 -0.945011 -0.2
vertex 13.604 -0.945011 0
endloop
endfacet
facet normal 0.847618 0.530607 0
outer loop
- vertex 13.604 -0.945011 -0.1
+ vertex 13.604 -0.945011 -0.2
vertex 13.8249 -1.29782 0
- vertex 13.8249 -1.29782 -0.1
+ vertex 13.8249 -1.29782 -0.2
endloop
endfacet
facet normal 0.820927 0.571033 0
outer loop
vertex 13.604 -0.945011 0
- vertex 13.3463 -0.574481 -0.1
+ vertex 13.3463 -0.574481 -0.2
vertex 13.3463 -0.574481 0
endloop
endfacet
facet normal 0.820927 0.571033 0
outer loop
- vertex 13.3463 -0.574481 -0.1
+ vertex 13.3463 -0.574481 -0.2
vertex 13.604 -0.945011 0
- vertex 13.604 -0.945011 -0.1
+ vertex 13.604 -0.945011 -0.2
endloop
endfacet
facet normal 0.796478 0.604667 0
outer loop
vertex 13.3463 -0.574481 0
- vertex 13.0525 -0.187573 -0.1
+ vertex 13.0525 -0.187573 -0.2
vertex 13.0525 -0.187573 0
endloop
endfacet
facet normal 0.796478 0.604667 0
outer loop
- vertex 13.0525 -0.187573 -0.1
+ vertex 13.0525 -0.187573 -0.2
vertex 13.3463 -0.574481 0
- vertex 13.3463 -0.574481 -0.1
+ vertex 13.3463 -0.574481 -0.2
endloop
endfacet
facet normal 0.773983 0.633206 0
outer loop
vertex 13.0525 -0.187573 0
- vertex 12.7237 0.214368 -0.1
+ vertex 12.7237 0.214368 -0.2
vertex 12.7237 0.214368 0
endloop
endfacet
facet normal 0.773983 0.633206 0
outer loop
- vertex 12.7237 0.214368 -0.1
+ vertex 12.7237 0.214368 -0.2
vertex 13.0525 -0.187573 0
- vertex 13.0525 -0.187573 -0.1
+ vertex 13.0525 -0.187573 -0.2
endloop
endfacet
facet normal 0.753142 0.657858 0
outer loop
vertex 12.7237 0.214368 0
- vertex 12.3607 0.629996 -0.1
+ vertex 12.3607 0.629996 -0.2
vertex 12.3607 0.629996 0
endloop
endfacet
facet normal 0.753142 0.657858 0
outer loop
- vertex 12.3607 0.629996 -0.1
+ vertex 12.3607 0.629996 -0.2
vertex 12.7237 0.214368 0
- vertex 12.7237 0.214368 -0.1
+ vertex 12.7237 0.214368 -0.2
endloop
endfacet
facet normal 0.724343 0.68944 0
outer loop
vertex 12.3607 0.629996 0
- vertex 11.5355 1.49693 -0.1
+ vertex 11.5355 1.49693 -0.2
vertex 11.5355 1.49693 0
endloop
endfacet
facet normal 0.724343 0.68944 0
outer loop
- vertex 11.5355 1.49693 -0.1
+ vertex 11.5355 1.49693 -0.2
vertex 12.3607 0.629996 0
- vertex 12.3607 0.629996 -0.1
+ vertex 12.3607 0.629996 -0.2
endloop
endfacet
facet normal 0.689461 0.724323 -0
outer loop
- vertex 11.5355 1.49693 -0.1
+ vertex 11.5355 1.49693 -0.2
vertex 10.5842 2.40247 0
vertex 11.5355 1.49693 0
endloop
@@ -38019,13 +38019,13 @@ solid OpenSCAD_Model
facet normal 0.689461 0.724323 0
outer loop
vertex 10.5842 2.40247 0
- vertex 11.5355 1.49693 -0.1
- vertex 10.5842 2.40247 -0.1
+ vertex 11.5355 1.49693 -0.2
+ vertex 10.5842 2.40247 -0.2
endloop
endfacet
facet normal 0.659589 0.751627 -0
outer loop
- vertex 10.5842 2.40247 -0.1
+ vertex 10.5842 2.40247 -0.2
vertex 9.61741 3.25086 0
vertex 10.5842 2.40247 0
endloop
@@ -38033,13 +38033,13 @@ solid OpenSCAD_Model
facet normal 0.659589 0.751627 0
outer loop
vertex 9.61741 3.25086 0
- vertex 10.5842 2.40247 -0.1
- vertex 9.61741 3.25086 -0.1
+ vertex 10.5842 2.40247 -0.2
+ vertex 9.61741 3.25086 -0.2
endloop
endfacet
facet normal 0.626395 0.779506 -0
outer loop
- vertex 9.61741 3.25086 -0.1
+ vertex 9.61741 3.25086 -0.2
vertex 9.29624 3.50894 0
vertex 9.61741 3.25086 0
endloop
@@ -38047,13 +38047,13 @@ solid OpenSCAD_Model
facet normal 0.626395 0.779506 0
outer loop
vertex 9.29624 3.50894 0
- vertex 9.61741 3.25086 -0.1
- vertex 9.29624 3.50894 -0.1
+ vertex 9.61741 3.25086 -0.2
+ vertex 9.29624 3.50894 -0.2
endloop
endfacet
facet normal 0.533935 0.845526 -0
outer loop
- vertex 9.29624 3.50894 -0.1
+ vertex 9.29624 3.50894 -0.2
vertex 9.14614 3.60373 0
vertex 9.29624 3.50894 0
endloop
@@ -38061,13 +38061,13 @@ solid OpenSCAD_Model
facet normal 0.533935 0.845526 0
outer loop
vertex 9.14614 3.60373 0
- vertex 9.29624 3.50894 -0.1
- vertex 9.14614 3.60373 -0.1
+ vertex 9.29624 3.50894 -0.2
+ vertex 9.14614 3.60373 -0.2
endloop
endfacet
facet normal 0.419972 0.907537 -0
outer loop
- vertex 9.14614 3.60373 -0.1
+ vertex 9.14614 3.60373 -0.2
vertex 9.03464 3.65533 0
vertex 9.14614 3.60373 0
endloop
@@ -38075,13 +38075,13 @@ solid OpenSCAD_Model
facet normal 0.419972 0.907537 0
outer loop
vertex 9.03464 3.65533 0
- vertex 9.14614 3.60373 -0.1
- vertex 9.03464 3.65533 -0.1
+ vertex 9.14614 3.60373 -0.2
+ vertex 9.03464 3.65533 -0.2
endloop
endfacet
facet normal 0.545127 0.838353 -0
outer loop
- vertex 9.03464 3.65533 -0.1
+ vertex 9.03464 3.65533 -0.2
vertex 8.81858 3.79581 0
vertex 9.03464 3.65533 0
endloop
@@ -38089,13 +38089,13 @@ solid OpenSCAD_Model
facet normal 0.545127 0.838353 0
outer loop
vertex 8.81858 3.79581 0
- vertex 9.03464 3.65533 -0.1
- vertex 8.81858 3.79581 -0.1
+ vertex 9.03464 3.65533 -0.2
+ vertex 8.81858 3.79581 -0.2
endloop
endfacet
facet normal 0.596587 0.802549 -0
outer loop
- vertex 8.81858 3.79581 -0.1
+ vertex 8.81858 3.79581 -0.2
vertex 8.19732 4.25764 0
vertex 8.81858 3.79581 0
endloop
@@ -38103,13 +38103,13 @@ solid OpenSCAD_Model
facet normal 0.596587 0.802549 0
outer loop
vertex 8.19732 4.25764 0
- vertex 8.81858 3.79581 -0.1
- vertex 8.19732 4.25764 -0.1
+ vertex 8.81858 3.79581 -0.2
+ vertex 8.19732 4.25764 -0.2
endloop
endfacet
facet normal 0.576403 0.817166 -0
outer loop
- vertex 8.19732 4.25764 -0.1
+ vertex 8.19732 4.25764 -0.2
vertex 8.00725 4.39171 0
vertex 8.19732 4.25764 0
endloop
@@ -38117,13 +38117,13 @@ solid OpenSCAD_Model
facet normal 0.576403 0.817166 0
outer loop
vertex 8.00725 4.39171 0
- vertex 8.19732 4.25764 -0.1
- vertex 8.00725 4.39171 -0.1
+ vertex 8.19732 4.25764 -0.2
+ vertex 8.00725 4.39171 -0.2
endloop
endfacet
facet normal 0.52168 0.853141 -0
outer loop
- vertex 8.00725 4.39171 -0.1
+ vertex 8.00725 4.39171 -0.2
vertex 7.75154 4.54807 0
vertex 8.00725 4.39171 0
endloop
@@ -38131,13 +38131,13 @@ solid OpenSCAD_Model
facet normal 0.52168 0.853141 0
outer loop
vertex 7.75154 4.54807 0
- vertex 8.00725 4.39171 -0.1
- vertex 7.75154 4.54807 -0.1
+ vertex 8.00725 4.39171 -0.2
+ vertex 7.75154 4.54807 -0.2
endloop
endfacet
facet normal 0.475339 0.879803 -0
outer loop
- vertex 7.75154 4.54807 -0.1
+ vertex 7.75154 4.54807 -0.2
vertex 7.07462 4.9138 0
vertex 7.75154 4.54807 0
endloop
@@ -38145,13 +38145,13 @@ solid OpenSCAD_Model
facet normal 0.475339 0.879803 0
outer loop
vertex 7.07462 4.9138 0
- vertex 7.75154 4.54807 -0.1
- vertex 7.07462 4.9138 -0.1
+ vertex 7.75154 4.54807 -0.2
+ vertex 7.07462 4.9138 -0.2
endloop
endfacet
facet normal 0.439259 0.89836 -0
outer loop
- vertex 7.07462 4.9138 -0.1
+ vertex 7.07462 4.9138 -0.2
vertex 6.22936 5.32709 0
vertex 7.07462 4.9138 0
endloop
@@ -38159,13 +38159,13 @@ solid OpenSCAD_Model
facet normal 0.439259 0.89836 0
outer loop
vertex 6.22936 5.32709 0
- vertex 7.07462 4.9138 -0.1
- vertex 6.22936 5.32709 -0.1
+ vertex 7.07462 4.9138 -0.2
+ vertex 6.22936 5.32709 -0.2
endloop
endfacet
facet normal 0.414563 0.910021 -0
outer loop
- vertex 6.22936 5.32709 -0.1
+ vertex 6.22936 5.32709 -0.2
vertex 5.27855 5.76024 0
vertex 6.22936 5.32709 0
endloop
@@ -38173,13 +38173,13 @@ solid OpenSCAD_Model
facet normal 0.414563 0.910021 0
outer loop
vertex 5.27855 5.76024 0
- vertex 6.22936 5.32709 -0.1
- vertex 5.27855 5.76024 -0.1
+ vertex 6.22936 5.32709 -0.2
+ vertex 5.27855 5.76024 -0.2
endloop
endfacet
facet normal 0.393495 0.919327 -0
outer loop
- vertex 5.27855 5.76024 -0.1
+ vertex 5.27855 5.76024 -0.2
vertex 4.285 6.1855 0
vertex 5.27855 5.76024 0
endloop
@@ -38187,13 +38187,13 @@ solid OpenSCAD_Model
facet normal 0.393495 0.919327 0
outer loop
vertex 4.285 6.1855 0
- vertex 5.27855 5.76024 -0.1
- vertex 4.285 6.1855 -0.1
+ vertex 5.27855 5.76024 -0.2
+ vertex 4.285 6.1855 -0.2
endloop
endfacet
facet normal 0.371607 0.92839 -0
outer loop
- vertex 4.285 6.1855 -0.1
+ vertex 4.285 6.1855 -0.2
vertex 3.31149 6.57517 0
vertex 4.285 6.1855 0
endloop
@@ -38201,13 +38201,13 @@ solid OpenSCAD_Model
facet normal 0.371607 0.92839 0
outer loop
vertex 3.31149 6.57517 0
- vertex 4.285 6.1855 -0.1
- vertex 3.31149 6.57517 -0.1
+ vertex 4.285 6.1855 -0.2
+ vertex 3.31149 6.57517 -0.2
endloop
endfacet
facet normal 0.344035 0.938957 -0
outer loop
- vertex 3.31149 6.57517 -0.1
+ vertex 3.31149 6.57517 -0.2
vertex 2.42084 6.9015 0
vertex 3.31149 6.57517 0
endloop
@@ -38215,13 +38215,13 @@ solid OpenSCAD_Model
facet normal 0.344035 0.938957 0
outer loop
vertex 2.42084 6.9015 0
- vertex 3.31149 6.57517 -0.1
- vertex 2.42084 6.9015 -0.1
+ vertex 3.31149 6.57517 -0.2
+ vertex 2.42084 6.9015 -0.2
endloop
endfacet
facet normal 0.301156 0.953575 -0
outer loop
- vertex 2.42084 6.9015 -0.1
+ vertex 2.42084 6.9015 -0.2
vertex 1.67583 7.13679 0
vertex 2.42084 6.9015 0
endloop
@@ -38229,13 +38229,13 @@ solid OpenSCAD_Model
facet normal 0.301156 0.953575 0
outer loop
vertex 1.67583 7.13679 0
- vertex 2.42084 6.9015 -0.1
- vertex 1.67583 7.13679 -0.1
+ vertex 2.42084 6.9015 -0.2
+ vertex 1.67583 7.13679 -0.2
endloop
endfacet
facet normal 0.313822 0.949482 -0
outer loop
- vertex 1.67583 7.13679 -0.1
+ vertex 1.67583 7.13679 -0.2
vertex 1.30727 7.25861 0
vertex 1.67583 7.13679 0
endloop
@@ -38243,13 +38243,13 @@ solid OpenSCAD_Model
facet normal 0.313822 0.949482 0
outer loop
vertex 1.30727 7.25861 0
- vertex 1.67583 7.13679 -0.1
- vertex 1.30727 7.25861 -0.1
+ vertex 1.67583 7.13679 -0.2
+ vertex 1.30727 7.25861 -0.2
endloop
endfacet
facet normal 0.372489 0.928036 -0
outer loop
- vertex 1.30727 7.25861 -0.1
+ vertex 1.30727 7.25861 -0.2
vertex 0.855811 7.43981 0
vertex 1.30727 7.25861 0
endloop
@@ -38257,13 +38257,13 @@ solid OpenSCAD_Model
facet normal 0.372489 0.928036 0
outer loop
vertex 0.855811 7.43981 0
- vertex 1.30727 7.25861 -0.1
- vertex 0.855811 7.43981 -0.1
+ vertex 1.30727 7.25861 -0.2
+ vertex 0.855811 7.43981 -0.2
endloop
endfacet
facet normal 0.420776 0.907164 -0
outer loop
- vertex 0.855811 7.43981 -0.1
+ vertex 0.855811 7.43981 -0.2
vertex -0.23691 7.94665 0
vertex 0.855811 7.43981 0
endloop
@@ -38271,13 +38271,13 @@ solid OpenSCAD_Model
facet normal 0.420776 0.907164 0
outer loop
vertex -0.23691 7.94665 0
- vertex 0.855811 7.43981 -0.1
- vertex -0.23691 7.94665 -0.1
+ vertex 0.855811 7.43981 -0.2
+ vertex -0.23691 7.94665 -0.2
endloop
endfacet
facet normal 0.458228 0.888835 -0
outer loop
- vertex -0.23691 7.94665 -0.1
+ vertex -0.23691 7.94665 -0.2
vertex -1.48458 8.58988 0
vertex -0.23691 7.94665 0
endloop
@@ -38285,13 +38285,13 @@ solid OpenSCAD_Model
facet normal 0.458228 0.888835 0
outer loop
vertex -1.48458 8.58988 0
- vertex -0.23691 7.94665 -0.1
- vertex -1.48458 8.58988 -0.1
+ vertex -0.23691 7.94665 -0.2
+ vertex -1.48458 8.58988 -0.2
endloop
endfacet
facet normal 0.484776 0.874638 -0
outer loop
- vertex -1.48458 8.58988 -0.1
+ vertex -1.48458 8.58988 -0.2
vertex -2.76946 9.30203 0
vertex -1.48458 8.58988 0
endloop
@@ -38299,13 +38299,13 @@ solid OpenSCAD_Model
facet normal 0.484776 0.874638 0
outer loop
vertex -2.76946 9.30203 0
- vertex -1.48458 8.58988 -0.1
- vertex -2.76946 9.30203 -0.1
+ vertex -1.48458 8.58988 -0.2
+ vertex -2.76946 9.30203 -0.2
endloop
endfacet
facet normal 0.509783 0.860303 -0
outer loop
- vertex -2.76946 9.30203 -0.1
+ vertex -2.76946 9.30203 -0.2
vertex -3.97378 10.0157 0
vertex -2.76946 9.30203 0
endloop
@@ -38313,13 +38313,13 @@ solid OpenSCAD_Model
facet normal 0.509783 0.860303 0
outer loop
vertex -3.97378 10.0157 0
- vertex -2.76946 9.30203 -0.1
- vertex -3.97378 10.0157 -0.1
+ vertex -2.76946 9.30203 -0.2
+ vertex -3.97378 10.0157 -0.2
endloop
endfacet
facet normal 0.541316 0.840819 -0
outer loop
- vertex -3.97378 10.0157 -0.1
+ vertex -3.97378 10.0157 -0.2
vertex -4.9798 10.6633 0
vertex -3.97378 10.0157 0
endloop
@@ -38327,13 +38327,13 @@ solid OpenSCAD_Model
facet normal 0.541316 0.840819 0
outer loop
vertex -4.9798 10.6633 0
- vertex -3.97378 10.0157 -0.1
- vertex -4.9798 10.6633 -0.1
+ vertex -3.97378 10.0157 -0.2
+ vertex -4.9798 10.6633 -0.2
endloop
endfacet
facet normal 0.578658 0.81557 -0
outer loop
- vertex -4.9798 10.6633 -0.1
+ vertex -4.9798 10.6633 -0.2
vertex -5.37165 10.9414 0
vertex -4.9798 10.6633 0
endloop
@@ -38341,13 +38341,13 @@ solid OpenSCAD_Model
facet normal 0.578658 0.81557 0
outer loop
vertex -5.37165 10.9414 0
- vertex -4.9798 10.6633 -0.1
- vertex -5.37165 10.9414 -0.1
+ vertex -4.9798 10.6633 -0.2
+ vertex -5.37165 10.9414 -0.2
endloop
endfacet
facet normal 0.621078 0.783749 -0
outer loop
- vertex -5.37165 10.9414 -0.1
+ vertex -5.37165 10.9414 -0.2
vertex -5.66976 11.1776 0
vertex -5.37165 10.9414 0
endloop
@@ -38355,13 +38355,13 @@ solid OpenSCAD_Model
facet normal 0.621078 0.783749 0
outer loop
vertex -5.66976 11.1776 0
- vertex -5.37165 10.9414 -0.1
- vertex -5.66976 11.1776 -0.1
+ vertex -5.37165 10.9414 -0.2
+ vertex -5.66976 11.1776 -0.2
endloop
endfacet
facet normal 0.700224 0.713923 -0
outer loop
- vertex -5.66976 11.1776 -0.1
+ vertex -5.66976 11.1776 -0.2
vertex -5.85942 11.3636 0
vertex -5.66976 11.1776 0
endloop
@@ -38369,69 +38369,69 @@ solid OpenSCAD_Model
facet normal 0.700224 0.713923 0
outer loop
vertex -5.85942 11.3636 0
- vertex -5.66976 11.1776 -0.1
- vertex -5.85942 11.3636 -0.1
+ vertex -5.66976 11.1776 -0.2
+ vertex -5.85942 11.3636 -0.2
endloop
endfacet
facet normal 0.822029 0.569446 0
outer loop
vertex -5.85942 11.3636 0
- vertex -5.90899 11.4352 -0.1
+ vertex -5.90899 11.4352 -0.2
vertex -5.90899 11.4352 0
endloop
endfacet
facet normal 0.822029 0.569446 0
outer loop
- vertex -5.90899 11.4352 -0.1
+ vertex -5.90899 11.4352 -0.2
vertex -5.85942 11.3636 0
- vertex -5.85942 11.3636 -0.1
+ vertex -5.85942 11.3636 -0.2
endloop
endfacet
facet normal 0.95697 0.290185 0
outer loop
vertex -5.90899 11.4352 0
- vertex -5.92592 11.491 -0.1
+ vertex -5.92592 11.491 -0.2
vertex -5.92592 11.491 0
endloop
endfacet
facet normal 0.95697 0.290185 0
outer loop
- vertex -5.92592 11.491 -0.1
+ vertex -5.92592 11.491 -0.2
vertex -5.90899 11.4352 0
- vertex -5.90899 11.4352 -0.1
+ vertex -5.90899 11.4352 -0.2
endloop
endfacet
facet normal 0.964129 -0.265435 0
outer loop
vertex -5.92592 11.491 0
- vertex -5.91161 11.5429 -0.1
+ vertex -5.91161 11.5429 -0.2
vertex -5.91161 11.5429 0
endloop
endfacet
facet normal 0.964129 -0.265435 0
outer loop
- vertex -5.91161 11.5429 -0.1
+ vertex -5.91161 11.5429 -0.2
vertex -5.92592 11.491 0
- vertex -5.92592 11.491 -0.1
+ vertex -5.92592 11.491 -0.2
endloop
endfacet
facet normal 0.717664 -0.69639 0
outer loop
vertex -5.91161 11.5429 0
- vertex -5.8692 11.5867 -0.1
+ vertex -5.8692 11.5867 -0.2
vertex -5.8692 11.5867 0
endloop
endfacet
facet normal 0.717664 -0.69639 0
outer loop
- vertex -5.8692 11.5867 -0.1
+ vertex -5.8692 11.5867 -0.2
vertex -5.91161 11.5429 0
- vertex -5.91161 11.5429 -0.1
+ vertex -5.91161 11.5429 -0.2
endloop
endfacet
facet normal 0.453397 -0.891309 0
outer loop
- vertex -5.8692 11.5867 -0.1
+ vertex -5.8692 11.5867 -0.2
vertex -5.79943 11.6221 0
vertex -5.8692 11.5867 0
endloop
@@ -38439,13 +38439,13 @@ solid OpenSCAD_Model
facet normal 0.453397 -0.891309 0
outer loop
vertex -5.79943 11.6221 0
- vertex -5.8692 11.5867 -0.1
- vertex -5.79943 11.6221 -0.1
+ vertex -5.8692 11.5867 -0.2
+ vertex -5.79943 11.6221 -0.2
endloop
endfacet
facet normal 0.272626 -0.96212 0
outer loop
- vertex -5.79943 11.6221 -0.1
+ vertex -5.79943 11.6221 -0.2
vertex -5.70304 11.6495 0
vertex -5.79943 11.6221 0
endloop
@@ -38453,13 +38453,13 @@ solid OpenSCAD_Model
facet normal 0.272626 -0.96212 0
outer loop
vertex -5.70304 11.6495 0
- vertex -5.79943 11.6221 -0.1
- vertex -5.70304 11.6495 -0.1
+ vertex -5.79943 11.6221 -0.2
+ vertex -5.70304 11.6495 -0.2
endloop
endfacet
facet normal 0.111359 -0.99378 0
outer loop
- vertex -5.70304 11.6495 -0.1
+ vertex -5.70304 11.6495 -0.2
vertex -5.4334 11.6797 0
vertex -5.70304 11.6495 0
endloop
@@ -38467,13 +38467,13 @@ solid OpenSCAD_Model
facet normal 0.111359 -0.99378 0
outer loop
vertex -5.4334 11.6797 0
- vertex -5.70304 11.6495 -0.1
- vertex -5.4334 11.6797 -0.1
+ vertex -5.70304 11.6495 -0.2
+ vertex -5.4334 11.6797 -0.2
endloop
endfacet
facet normal -0.00575054 -0.999983 0
outer loop
- vertex -5.4334 11.6797 -0.1
+ vertex -5.4334 11.6797 -0.2
vertex -5.06624 11.6776 0
vertex -5.4334 11.6797 0
endloop
@@ -38481,13 +38481,13 @@ solid OpenSCAD_Model
facet normal -0.00575054 -0.999983 -0
outer loop
vertex -5.06624 11.6776 0
- vertex -5.4334 11.6797 -0.1
- vertex -5.06624 11.6776 -0.1
+ vertex -5.4334 11.6797 -0.2
+ vertex -5.06624 11.6776 -0.2
endloop
endfacet
facet normal -0.0742941 -0.997236 0
outer loop
- vertex -5.06624 11.6776 -0.1
+ vertex -5.06624 11.6776 -0.2
vertex -4.60751 11.6434 0
vertex -5.06624 11.6776 0
endloop
@@ -38495,13 +38495,13 @@ solid OpenSCAD_Model
facet normal -0.0742941 -0.997236 -0
outer loop
vertex -4.60751 11.6434 0
- vertex -5.06624 11.6776 -0.1
- vertex -4.60751 11.6434 -0.1
+ vertex -5.06624 11.6776 -0.2
+ vertex -4.60751 11.6434 -0.2
endloop
endfacet
facet normal -0.120331 -0.992734 0
outer loop
- vertex -4.60751 11.6434 -0.1
+ vertex -4.60751 11.6434 -0.2
vertex -4.06319 11.5774 0
vertex -4.60751 11.6434 0
endloop
@@ -38509,13 +38509,13 @@ solid OpenSCAD_Model
facet normal -0.120331 -0.992734 -0
outer loop
vertex -4.06319 11.5774 0
- vertex -4.60751 11.6434 -0.1
- vertex -4.06319 11.5774 -0.1
+ vertex -4.60751 11.6434 -0.2
+ vertex -4.06319 11.5774 -0.2
endloop
endfacet
facet normal -0.154416 -0.988006 0
outer loop
- vertex -4.06319 11.5774 -0.1
+ vertex -4.06319 11.5774 -0.2
vertex -3.43924 11.4799 0
vertex -4.06319 11.5774 0
endloop
@@ -38523,13 +38523,13 @@ solid OpenSCAD_Model
facet normal -0.154416 -0.988006 -0
outer loop
vertex -3.43924 11.4799 0
- vertex -4.06319 11.5774 -0.1
- vertex -3.43924 11.4799 -0.1
+ vertex -4.06319 11.5774 -0.2
+ vertex -3.43924 11.4799 -0.2
endloop
endfacet
facet normal -0.181553 -0.983381 0
outer loop
- vertex -3.43924 11.4799 -0.1
+ vertex -3.43924 11.4799 -0.2
vertex -2.74162 11.3511 0
vertex -3.43924 11.4799 0
endloop
@@ -38537,13 +38537,13 @@ solid OpenSCAD_Model
facet normal -0.181553 -0.983381 -0
outer loop
vertex -2.74162 11.3511 0
- vertex -3.43924 11.4799 -0.1
- vertex -2.74162 11.3511 -0.1
+ vertex -3.43924 11.4799 -0.2
+ vertex -2.74162 11.3511 -0.2
endloop
endfacet
facet normal -0.168602 -0.985684 0
outer loop
- vertex -2.74162 11.3511 -0.1
+ vertex -2.74162 11.3511 -0.2
vertex -2.06279 11.235 0
vertex -2.74162 11.3511 0
endloop
@@ -38551,13 +38551,13 @@ solid OpenSCAD_Model
facet normal -0.168602 -0.985684 -0
outer loop
vertex -2.06279 11.235 0
- vertex -2.74162 11.3511 -0.1
- vertex -2.06279 11.235 -0.1
+ vertex -2.74162 11.3511 -0.2
+ vertex -2.06279 11.235 -0.2
endloop
endfacet
facet normal -0.106074 -0.994358 0
outer loop
- vertex -2.06279 11.235 -0.1
+ vertex -2.06279 11.235 -0.2
vertex -1.45038 11.1697 0
vertex -2.06279 11.235 0
endloop
@@ -38565,13 +38565,13 @@ solid OpenSCAD_Model
facet normal -0.106074 -0.994358 -0
outer loop
vertex -1.45038 11.1697 0
- vertex -2.06279 11.235 -0.1
- vertex -1.45038 11.1697 -0.1
+ vertex -2.06279 11.235 -0.2
+ vertex -1.45038 11.1697 -0.2
endloop
endfacet
facet normal -0.0235022 -0.999724 0
outer loop
- vertex -1.45038 11.1697 -0.1
+ vertex -1.45038 11.1697 -0.2
vertex -0.893798 11.1566 0
vertex -1.45038 11.1697 0
endloop
@@ -38579,13 +38579,13 @@ solid OpenSCAD_Model
facet normal -0.0235022 -0.999724 -0
outer loop
vertex -0.893798 11.1566 0
- vertex -1.45038 11.1697 -0.1
- vertex -0.893798 11.1566 -0.1
+ vertex -1.45038 11.1697 -0.2
+ vertex -0.893798 11.1566 -0.2
endloop
endfacet
facet normal 0.0792039 -0.996858 0
outer loop
- vertex -0.893798 11.1566 -0.1
+ vertex -0.893798 11.1566 -0.2
vertex -0.382462 11.1972 0
vertex -0.893798 11.1566 0
endloop
@@ -38593,13 +38593,13 @@ solid OpenSCAD_Model
facet normal 0.0792039 -0.996858 0
outer loop
vertex -0.382462 11.1972 0
- vertex -0.893798 11.1566 -0.1
- vertex -0.382462 11.1972 -0.1
+ vertex -0.893798 11.1566 -0.2
+ vertex -0.382462 11.1972 -0.2
endloop
endfacet
facet normal 0.197027 -0.980398 0
outer loop
- vertex -0.382462 11.1972 -0.1
+ vertex -0.382462 11.1972 -0.2
vertex 0.0942225 11.293 0
vertex -0.382462 11.1972 0
endloop
@@ -38607,13 +38607,13 @@ solid OpenSCAD_Model
facet normal 0.197027 -0.980398 0
outer loop
vertex 0.0942225 11.293 0
- vertex -0.382462 11.1972 -0.1
- vertex 0.0942225 11.293 -0.1
+ vertex -0.382462 11.1972 -0.2
+ vertex 0.0942225 11.293 -0.2
endloop
endfacet
facet normal 0.319159 -0.947701 0
outer loop
- vertex 0.0942225 11.293 -0.1
+ vertex 0.0942225 11.293 -0.2
vertex 0.546849 11.4454 0
vertex 0.0942225 11.293 0
endloop
@@ -38621,13 +38621,13 @@ solid OpenSCAD_Model
facet normal 0.319159 -0.947701 0
outer loop
vertex 0.546849 11.4454 0
- vertex 0.0942225 11.293 -0.1
- vertex 0.546849 11.4454 -0.1
+ vertex 0.0942225 11.293 -0.2
+ vertex 0.546849 11.4454 -0.2
endloop
endfacet
facet normal 0.432288 -0.901736 0
outer loop
- vertex 0.546849 11.4454 -0.1
+ vertex 0.546849 11.4454 -0.2
vertex 0.986004 11.656 0
vertex 0.546849 11.4454 0
endloop
@@ -38635,13 +38635,13 @@ solid OpenSCAD_Model
facet normal 0.432288 -0.901736 0
outer loop
vertex 0.986004 11.656 0
- vertex 0.546849 11.4454 -0.1
- vertex 0.986004 11.656 -0.1
+ vertex 0.546849 11.4454 -0.2
+ vertex 0.986004 11.656 -0.2
endloop
endfacet
facet normal 0.52637 -0.850255 0
outer loop
- vertex 0.986004 11.656 -0.1
+ vertex 0.986004 11.656 -0.2
vertex 1.42228 11.926 0
vertex 0.986004 11.656 0
endloop
@@ -38649,13 +38649,13 @@ solid OpenSCAD_Model
facet normal 0.52637 -0.850255 0
outer loop
vertex 1.42228 11.926 0
- vertex 0.986004 11.656 -0.1
- vertex 1.42228 11.926 -0.1
+ vertex 0.986004 11.656 -0.2
+ vertex 1.42228 11.926 -0.2
endloop
endfacet
facet normal 0.604613 -0.796519 0
outer loop
- vertex 1.42228 11.926 -0.1
+ vertex 1.42228 11.926 -0.2
vertex 1.72214 12.1537 0
vertex 1.42228 11.926 0
endloop
@@ -38663,125 +38663,125 @@ solid OpenSCAD_Model
facet normal 0.604613 -0.796519 0
outer loop
vertex 1.72214 12.1537 0
- vertex 1.42228 11.926 -0.1
- vertex 1.72214 12.1537 -0.1
+ vertex 1.42228 11.926 -0.2
+ vertex 1.72214 12.1537 -0.2
endloop
endfacet
facet normal 0.710535 -0.703661 0
outer loop
vertex 1.72214 12.1537 0
- vertex 1.81906 12.2515 -0.1
+ vertex 1.81906 12.2515 -0.2
vertex 1.81906 12.2515 0
endloop
endfacet
facet normal 0.710535 -0.703661 0
outer loop
- vertex 1.81906 12.2515 -0.1
+ vertex 1.81906 12.2515 -0.2
vertex 1.72214 12.1537 0
- vertex 1.72214 12.1537 -0.1
+ vertex 1.72214 12.1537 -0.2
endloop
endfacet
facet normal 0.820717 -0.571334 0
outer loop
vertex 1.81906 12.2515 0
- vertex 1.88346 12.344 -0.1
+ vertex 1.88346 12.344 -0.2
vertex 1.88346 12.344 0
endloop
endfacet
facet normal 0.820717 -0.571334 0
outer loop
- vertex 1.88346 12.344 -0.1
+ vertex 1.88346 12.344 -0.2
vertex 1.81906 12.2515 0
- vertex 1.81906 12.2515 -0.1
+ vertex 1.81906 12.2515 -0.2
endloop
endfacet
facet normal 0.936854 -0.349721 0
outer loop
vertex 1.88346 12.344 0
- vertex 1.91748 12.4352 -0.1
+ vertex 1.91748 12.4352 -0.2
vertex 1.91748 12.4352 0
endloop
endfacet
facet normal 0.936854 -0.349721 0
outer loop
- vertex 1.91748 12.4352 -0.1
+ vertex 1.91748 12.4352 -0.2
vertex 1.88346 12.344 0
- vertex 1.88346 12.344 -0.1
+ vertex 1.88346 12.344 -0.2
endloop
endfacet
facet normal 0.998121 -0.0612747 0
outer loop
vertex 1.91748 12.4352 0
- vertex 1.92323 12.5289 -0.1
+ vertex 1.92323 12.5289 -0.2
vertex 1.92323 12.5289 0
endloop
endfacet
facet normal 0.998121 -0.0612747 0
outer loop
- vertex 1.92323 12.5289 -0.1
+ vertex 1.92323 12.5289 -0.2
vertex 1.91748 12.4352 0
- vertex 1.91748 12.4352 -0.1
+ vertex 1.91748 12.4352 -0.2
endloop
endfacet
facet normal 0.979928 0.199352 0
outer loop
vertex 1.92323 12.5289 0
- vertex 1.90284 12.6291 -0.1
+ vertex 1.90284 12.6291 -0.2
vertex 1.90284 12.6291 0
endloop
endfacet
facet normal 0.979928 0.199352 0
outer loop
- vertex 1.90284 12.6291 -0.1
+ vertex 1.90284 12.6291 -0.2
vertex 1.92323 12.5289 0
- vertex 1.92323 12.5289 -0.1
+ vertex 1.92323 12.5289 -0.2
endloop
endfacet
facet normal 0.928124 0.372271 0
outer loop
vertex 1.90284 12.6291 0
- vertex 1.85843 12.7398 -0.1
+ vertex 1.85843 12.7398 -0.2
vertex 1.85843 12.7398 0
endloop
endfacet
facet normal 0.928124 0.372271 0
outer loop
- vertex 1.85843 12.7398 -0.1
+ vertex 1.85843 12.7398 -0.2
vertex 1.90284 12.6291 0
- vertex 1.90284 12.6291 -0.1
+ vertex 1.90284 12.6291 -0.2
endloop
endfacet
facet normal 0.849902 0.526941 0
outer loop
vertex 1.85843 12.7398 0
- vertex 1.7147 12.9716 -0.1
+ vertex 1.7147 12.9716 -0.2
vertex 1.7147 12.9716 0
endloop
endfacet
facet normal 0.849902 0.526941 0
outer loop
- vertex 1.7147 12.9716 -0.1
+ vertex 1.7147 12.9716 -0.2
vertex 1.85843 12.7398 0
- vertex 1.85843 12.7398 -0.1
+ vertex 1.85843 12.7398 -0.2
endloop
endfacet
facet normal 0.728356 0.685198 0
outer loop
vertex 1.7147 12.9716 0
- vertex 1.51175 13.1874 -0.1
+ vertex 1.51175 13.1874 -0.2
vertex 1.51175 13.1874 0
endloop
endfacet
facet normal 0.728356 0.685198 0
outer loop
- vertex 1.51175 13.1874 -0.1
+ vertex 1.51175 13.1874 -0.2
vertex 1.7147 12.9716 0
- vertex 1.7147 12.9716 -0.1
+ vertex 1.7147 12.9716 -0.2
endloop
endfacet
facet normal 0.606497 0.795086 -0
outer loop
- vertex 1.51175 13.1874 -0.1
+ vertex 1.51175 13.1874 -0.2
vertex 1.25015 13.3869 0
vertex 1.51175 13.1874 0
endloop
@@ -38789,13 +38789,13 @@ solid OpenSCAD_Model
facet normal 0.606497 0.795086 0
outer loop
vertex 1.25015 13.3869 0
- vertex 1.51175 13.1874 -0.1
- vertex 1.25015 13.3869 -0.1
+ vertex 1.51175 13.1874 -0.2
+ vertex 1.25015 13.3869 -0.2
endloop
endfacet
facet normal 0.497341 0.867555 -0
outer loop
- vertex 1.25015 13.3869 -0.1
+ vertex 1.25015 13.3869 -0.2
vertex 0.930489 13.5702 0
vertex 1.25015 13.3869 0
endloop
@@ -38803,13 +38803,13 @@ solid OpenSCAD_Model
facet normal 0.497341 0.867555 0
outer loop
vertex 0.930489 13.5702 0
- vertex 1.25015 13.3869 -0.1
- vertex 0.930489 13.5702 -0.1
+ vertex 1.25015 13.3869 -0.2
+ vertex 0.930489 13.5702 -0.2
endloop
endfacet
facet normal 0.404567 0.914508 -0
outer loop
- vertex 0.930489 13.5702 -0.1
+ vertex 0.930489 13.5702 -0.2
vertex 0.55335 13.737 0
vertex 0.930489 13.5702 0
endloop
@@ -38817,13 +38817,13 @@ solid OpenSCAD_Model
facet normal 0.404567 0.914508 0
outer loop
vertex 0.55335 13.737 0
- vertex 0.930489 13.5702 -0.1
- vertex 0.55335 13.737 -0.1
+ vertex 0.930489 13.5702 -0.2
+ vertex 0.55335 13.737 -0.2
endloop
endfacet
facet normal 0.327265 0.944933 -0
outer loop
- vertex 0.55335 13.737 -0.1
+ vertex 0.55335 13.737 -0.2
vertex 0.119316 13.8873 0
vertex 0.55335 13.737 0
endloop
@@ -38831,13 +38831,13 @@ solid OpenSCAD_Model
facet normal 0.327265 0.944933 0
outer loop
vertex 0.119316 13.8873 0
- vertex 0.55335 13.737 -0.1
- vertex 0.119316 13.8873 -0.1
+ vertex 0.55335 13.737 -0.2
+ vertex 0.119316 13.8873 -0.2
endloop
endfacet
facet normal 0.263047 0.964783 -0
outer loop
- vertex 0.119316 13.8873 -0.1
+ vertex 0.119316 13.8873 -0.2
vertex -0.371032 14.021 0
vertex 0.119316 13.8873 0
endloop
@@ -38845,13 +38845,13 @@ solid OpenSCAD_Model
facet normal 0.263047 0.964783 0
outer loop
vertex -0.371032 14.021 0
- vertex 0.119316 13.8873 -0.1
- vertex -0.371032 14.021 -0.1
+ vertex 0.119316 13.8873 -0.2
+ vertex -0.371032 14.021 -0.2
endloop
endfacet
facet normal 0.209418 0.977826 -0
outer loop
- vertex -0.371032 14.021 -0.1
+ vertex -0.371032 14.021 -0.2
vertex -0.917111 14.138 0
vertex -0.371032 14.021 0
endloop
@@ -38859,13 +38859,13 @@ solid OpenSCAD_Model
facet normal 0.209418 0.977826 0
outer loop
vertex -0.917111 14.138 0
- vertex -0.371032 14.021 -0.1
- vertex -0.917111 14.138 -0.1
+ vertex -0.371032 14.021 -0.2
+ vertex -0.917111 14.138 -0.2
endloop
endfacet
facet normal 0.164236 0.986421 -0
outer loop
- vertex -0.917111 14.138 -0.1
+ vertex -0.917111 14.138 -0.2
vertex -1.51834 14.2381 0
vertex -0.917111 14.138 0
endloop
@@ -38873,13 +38873,13 @@ solid OpenSCAD_Model
facet normal 0.164236 0.986421 0
outer loop
vertex -1.51834 14.2381 0
- vertex -0.917111 14.138 -0.1
- vertex -1.51834 14.2381 -0.1
+ vertex -0.917111 14.138 -0.2
+ vertex -1.51834 14.2381 -0.2
endloop
endfacet
facet normal 0.125776 0.992059 -0
outer loop
- vertex -1.51834 14.2381 -0.1
+ vertex -1.51834 14.2381 -0.2
vertex -2.17413 14.3212 0
vertex -1.51834 14.2381 0
endloop
@@ -38887,13 +38887,13 @@ solid OpenSCAD_Model
facet normal 0.125776 0.992059 0
outer loop
vertex -2.17413 14.3212 0
- vertex -1.51834 14.2381 -0.1
- vertex -2.17413 14.3212 -0.1
+ vertex -1.51834 14.2381 -0.2
+ vertex -2.17413 14.3212 -0.2
endloop
endfacet
facet normal 0.0926874 0.995695 -0
outer loop
- vertex -2.17413 14.3212 -0.1
+ vertex -2.17413 14.3212 -0.2
vertex -2.8839 14.3873 0
vertex -2.17413 14.3212 0
endloop
@@ -38901,13 +38901,13 @@ solid OpenSCAD_Model
facet normal 0.0926874 0.995695 0
outer loop
vertex -2.8839 14.3873 0
- vertex -2.17413 14.3212 -0.1
- vertex -2.8839 14.3873 -0.1
+ vertex -2.17413 14.3212 -0.2
+ vertex -2.8839 14.3873 -0.2
endloop
endfacet
facet normal 0.0639318 0.997954 -0
outer loop
- vertex -2.8839 14.3873 -0.1
+ vertex -2.8839 14.3873 -0.2
vertex -3.64708 14.4362 0
vertex -2.8839 14.3873 0
endloop
@@ -38915,13 +38915,13 @@ solid OpenSCAD_Model
facet normal 0.0639318 0.997954 0
outer loop
vertex -3.64708 14.4362 0
- vertex -2.8839 14.3873 -0.1
- vertex -3.64708 14.4362 -0.1
+ vertex -2.8839 14.3873 -0.2
+ vertex -3.64708 14.4362 -0.2
endloop
endfacet
facet normal 0.0386969 0.999251 -0
outer loop
- vertex -3.64708 14.4362 -0.1
+ vertex -3.64708 14.4362 -0.2
vertex -4.46307 14.4678 0
vertex -3.64708 14.4362 0
endloop
@@ -38929,13 +38929,13 @@ solid OpenSCAD_Model
facet normal 0.0386969 0.999251 0
outer loop
vertex -4.46307 14.4678 0
- vertex -3.64708 14.4362 -0.1
- vertex -4.46307 14.4678 -0.1
+ vertex -3.64708 14.4362 -0.2
+ vertex -4.46307 14.4678 -0.2
endloop
endfacet
facet normal 0.0163522 0.999866 -0
outer loop
- vertex -4.46307 14.4678 -0.1
+ vertex -4.46307 14.4678 -0.2
vertex -5.33129 14.482 0
vertex -4.46307 14.4678 0
endloop
@@ -38943,13 +38943,13 @@ solid OpenSCAD_Model
facet normal 0.0163522 0.999866 0
outer loop
vertex -5.33129 14.482 0
- vertex -4.46307 14.4678 -0.1
- vertex -5.33129 14.482 -0.1
+ vertex -4.46307 14.4678 -0.2
+ vertex -5.33129 14.482 -0.2
endloop
endfacet
facet normal -0.00360162 0.999994 0
outer loop
- vertex -5.33129 14.482 -0.1
+ vertex -5.33129 14.482 -0.2
vertex -6.25117 14.4787 0
vertex -5.33129 14.482 0
endloop
@@ -38957,13 +38957,13 @@ solid OpenSCAD_Model
facet normal -0.00360162 0.999994 0
outer loop
vertex -6.25117 14.4787 0
- vertex -5.33129 14.482 -0.1
- vertex -6.25117 14.4787 -0.1
+ vertex -5.33129 14.482 -0.2
+ vertex -6.25117 14.4787 -0.2
endloop
endfacet
facet normal -0.0215556 0.999768 0
outer loop
- vertex -6.25117 14.4787 -0.1
+ vertex -6.25117 14.4787 -0.2
vertex -7.22211 14.4578 0
vertex -6.25117 14.4787 0
endloop
@@ -38971,13 +38971,13 @@ solid OpenSCAD_Model
facet normal -0.0215556 0.999768 0
outer loop
vertex -7.22211 14.4578 0
- vertex -6.25117 14.4787 -0.1
- vertex -7.22211 14.4578 -0.1
+ vertex -6.25117 14.4787 -0.2
+ vertex -7.22211 14.4578 -0.2
endloop
endfacet
facet normal -0.0376222 0.999292 0
outer loop
- vertex -7.22211 14.4578 -0.1
+ vertex -7.22211 14.4578 -0.2
vertex -9.25643 14.3812 0
vertex -7.22211 14.4578 0
endloop
@@ -38985,13 +38985,13 @@ solid OpenSCAD_Model
facet normal -0.0376222 0.999292 0
outer loop
vertex -9.25643 14.3812 0
- vertex -7.22211 14.4578 -0.1
- vertex -9.25643 14.3812 -0.1
+ vertex -7.22211 14.4578 -0.2
+ vertex -9.25643 14.3812 -0.2
endloop
endfacet
facet normal -0.0777977 0.996969 0
outer loop
- vertex -9.25643 14.3812 -0.1
+ vertex -9.25643 14.3812 -0.2
vertex -9.98725 14.3241 0
vertex -9.25643 14.3812 0
endloop
@@ -38999,13 +38999,13 @@ solid OpenSCAD_Model
facet normal -0.0777977 0.996969 0
outer loop
vertex -9.98725 14.3241 0
- vertex -9.25643 14.3812 -0.1
- vertex -9.98725 14.3241 -0.1
+ vertex -9.25643 14.3812 -0.2
+ vertex -9.98725 14.3241 -0.2
endloop
endfacet
facet normal -0.133926 0.990991 0
outer loop
- vertex -9.98725 14.3241 -0.1
+ vertex -9.98725 14.3241 -0.2
vertex -10.6249 14.238 0
vertex -9.98725 14.3241 0
endloop
@@ -39013,13 +39013,13 @@ solid OpenSCAD_Model
facet normal -0.133926 0.990991 0
outer loop
vertex -10.6249 14.238 0
- vertex -9.98725 14.3241 -0.1
- vertex -10.6249 14.238 -0.1
+ vertex -9.98725 14.3241 -0.2
+ vertex -10.6249 14.238 -0.2
endloop
endfacet
facet normal -0.202593 0.979263 0
outer loop
- vertex -10.6249 14.238 -0.1
+ vertex -10.6249 14.238 -0.2
vertex -11.2428 14.1101 0
vertex -10.6249 14.238 0
endloop
@@ -39027,13 +39027,13 @@ solid OpenSCAD_Model
facet normal -0.202593 0.979263 0
outer loop
vertex -11.2428 14.1101 0
- vertex -10.6249 14.238 -0.1
- vertex -11.2428 14.1101 -0.1
+ vertex -10.6249 14.238 -0.2
+ vertex -11.2428 14.1101 -0.2
endloop
endfacet
facet normal -0.261603 0.965176 0
outer loop
- vertex -11.2428 14.1101 -0.1
+ vertex -11.2428 14.1101 -0.2
vertex -11.9142 13.9281 0
vertex -11.2428 14.1101 0
endloop
@@ -39041,13 +39041,13 @@ solid OpenSCAD_Model
facet normal -0.261603 0.965176 0
outer loop
vertex -11.9142 13.9281 0
- vertex -11.2428 14.1101 -0.1
- vertex -11.9142 13.9281 -0.1
+ vertex -11.2428 14.1101 -0.2
+ vertex -11.9142 13.9281 -0.2
endloop
endfacet
facet normal -0.297369 0.954762 0
outer loop
- vertex -11.9142 13.9281 -0.1
+ vertex -11.9142 13.9281 -0.2
vertex -12.7125 13.6795 0
vertex -11.9142 13.9281 0
endloop
@@ -39055,13 +39055,13 @@ solid OpenSCAD_Model
facet normal -0.297369 0.954762 0
outer loop
vertex -12.7125 13.6795 0
- vertex -11.9142 13.9281 -0.1
- vertex -12.7125 13.6795 -0.1
+ vertex -11.9142 13.9281 -0.2
+ vertex -12.7125 13.6795 -0.2
endloop
endfacet
facet normal -0.311908 0.950112 0
outer loop
- vertex -12.7125 13.6795 -0.1
+ vertex -12.7125 13.6795 -0.2
vertex -13.7109 13.3517 0
vertex -12.7125 13.6795 0
endloop
@@ -39069,13 +39069,13 @@ solid OpenSCAD_Model
facet normal -0.311908 0.950112 0
outer loop
vertex -13.7109 13.3517 0
- vertex -12.7125 13.6795 -0.1
- vertex -13.7109 13.3517 -0.1
+ vertex -12.7125 13.6795 -0.2
+ vertex -13.7109 13.3517 -0.2
endloop
endfacet
facet normal -0.299976 0.953947 0
outer loop
- vertex -13.7109 13.3517 -0.1
+ vertex -13.7109 13.3517 -0.2
vertex -14.949 12.9624 0
vertex -13.7109 13.3517 0
endloop
@@ -39083,13 +39083,13 @@ solid OpenSCAD_Model
facet normal -0.299976 0.953947 0
outer loop
vertex -14.949 12.9624 0
- vertex -13.7109 13.3517 -0.1
- vertex -14.949 12.9624 -0.1
+ vertex -13.7109 13.3517 -0.2
+ vertex -14.949 12.9624 -0.2
endloop
endfacet
facet normal -0.271422 0.96246 0
outer loop
- vertex -14.949 12.9624 -0.1
+ vertex -14.949 12.9624 -0.2
vertex -16.0795 12.6436 0
vertex -14.949 12.9624 0
endloop
@@ -39097,13 +39097,13 @@ solid OpenSCAD_Model
facet normal -0.271422 0.96246 0
outer loop
vertex -16.0795 12.6436 0
- vertex -14.949 12.9624 -0.1
- vertex -16.0795 12.6436 -0.1
+ vertex -14.949 12.9624 -0.2
+ vertex -16.0795 12.6436 -0.2
endloop
endfacet
facet normal -0.233252 0.972416 0
outer loop
- vertex -16.0795 12.6436 -0.1
+ vertex -16.0795 12.6436 -0.2
vertex -16.9775 12.4282 0
vertex -16.0795 12.6436 0
endloop
@@ -39111,13 +39111,13 @@ solid OpenSCAD_Model
facet normal -0.233252 0.972416 0
outer loop
vertex -16.9775 12.4282 0
- vertex -16.0795 12.6436 -0.1
- vertex -16.9775 12.4282 -0.1
+ vertex -16.0795 12.6436 -0.2
+ vertex -16.9775 12.4282 -0.2
endloop
endfacet
facet normal -0.178763 0.983892 0
outer loop
- vertex -16.9775 12.4282 -0.1
+ vertex -16.9775 12.4282 -0.2
vertex -17.3003 12.3696 0
vertex -16.9775 12.4282 0
endloop
@@ -39125,13 +39125,13 @@ solid OpenSCAD_Model
facet normal -0.178763 0.983892 0
outer loop
vertex -17.3003 12.3696 0
- vertex -16.9775 12.4282 -0.1
- vertex -17.3003 12.3696 -0.1
+ vertex -16.9775 12.4282 -0.2
+ vertex -17.3003 12.3696 -0.2
endloop
endfacet
facet normal -0.0935268 0.995617 0
outer loop
- vertex -17.3003 12.3696 -0.1
+ vertex -17.3003 12.3696 -0.2
vertex -17.5181 12.3491 0
vertex -17.3003 12.3696 0
endloop
@@ -39139,13 +39139,13 @@ solid OpenSCAD_Model
facet normal -0.0935268 0.995617 0
outer loop
vertex -17.5181 12.3491 0
- vertex -17.3003 12.3696 -0.1
- vertex -17.5181 12.3491 -0.1
+ vertex -17.3003 12.3696 -0.2
+ vertex -17.5181 12.3491 -0.2
endloop
endfacet
facet normal -0.0617051 0.998094 0
outer loop
- vertex -17.5181 12.3491 -0.1
+ vertex -17.5181 12.3491 -0.2
vertex -17.9556 12.3221 0
vertex -17.5181 12.3491 0
endloop
@@ -39153,13 +39153,13 @@ solid OpenSCAD_Model
facet normal -0.0617051 0.998094 0
outer loop
vertex -17.9556 12.3221 0
- vertex -17.5181 12.3491 -0.1
- vertex -17.9556 12.3221 -0.1
+ vertex -17.5181 12.3491 -0.2
+ vertex -17.9556 12.3221 -0.2
endloop
endfacet
facet normal -0.11848 0.992956 0
outer loop
- vertex -17.9556 12.3221 -0.1
+ vertex -17.9556 12.3221 -0.2
vertex -18.5728 12.2484 0
vertex -17.9556 12.3221 0
endloop
@@ -39167,13 +39167,13 @@ solid OpenSCAD_Model
facet normal -0.11848 0.992956 0
outer loop
vertex -18.5728 12.2484 0
- vertex -17.9556 12.3221 -0.1
- vertex -18.5728 12.2484 -0.1
+ vertex -17.9556 12.3221 -0.2
+ vertex -18.5728 12.2484 -0.2
endloop
endfacet
facet normal -0.150729 0.988575 0
outer loop
- vertex -18.5728 12.2484 -0.1
+ vertex -18.5728 12.2484 -0.2
vertex -19.2876 12.1394 0
vertex -18.5728 12.2484 0
endloop
@@ -39181,13 +39181,13 @@ solid OpenSCAD_Model
facet normal -0.150729 0.988575 0
outer loop
vertex -19.2876 12.1394 0
- vertex -18.5728 12.2484 -0.1
- vertex -19.2876 12.1394 -0.1
+ vertex -18.5728 12.2484 -0.2
+ vertex -19.2876 12.1394 -0.2
endloop
endfacet
facet normal -0.179254 0.983803 0
outer loop
- vertex -19.2876 12.1394 -0.1
+ vertex -19.2876 12.1394 -0.2
vertex -20.0181 12.0063 0
vertex -19.2876 12.1394 0
endloop
@@ -39195,13 +39195,13 @@ solid OpenSCAD_Model
facet normal -0.179254 0.983803 0
outer loop
vertex -20.0181 12.0063 0
- vertex -19.2876 12.1394 -0.1
- vertex -20.0181 12.0063 -0.1
+ vertex -19.2876 12.1394 -0.2
+ vertex -20.0181 12.0063 -0.2
endloop
endfacet
facet normal -0.161235 0.986916 0
outer loop
- vertex -20.0181 12.0063 -0.1
+ vertex -20.0181 12.0063 -0.2
vertex -20.4772 11.9313 0
vertex -20.0181 12.0063 0
endloop
@@ -39209,13 +39209,13 @@ solid OpenSCAD_Model
facet normal -0.161235 0.986916 0
outer loop
vertex -20.4772 11.9313 0
- vertex -20.0181 12.0063 -0.1
- vertex -20.4772 11.9313 -0.1
+ vertex -20.0181 12.0063 -0.2
+ vertex -20.4772 11.9313 -0.2
endloop
endfacet
facet normal -0.116007 0.993248 0
outer loop
- vertex -20.4772 11.9313 -0.1
+ vertex -20.4772 11.9313 -0.2
vertex -21.0446 11.8651 0
vertex -20.4772 11.9313 0
endloop
@@ -39223,13 +39223,13 @@ solid OpenSCAD_Model
facet normal -0.116007 0.993248 0
outer loop
vertex -21.0446 11.8651 0
- vertex -20.4772 11.9313 -0.1
- vertex -21.0446 11.8651 -0.1
+ vertex -20.4772 11.9313 -0.2
+ vertex -21.0446 11.8651 -0.2
endloop
endfacet
facet normal -0.076075 0.997102 0
outer loop
- vertex -21.0446 11.8651 -0.1
+ vertex -21.0446 11.8651 -0.2
vertex -22.4311 11.7593 0
vertex -21.0446 11.8651 0
endloop
@@ -39237,13 +39237,13 @@ solid OpenSCAD_Model
facet normal -0.076075 0.997102 0
outer loop
vertex -22.4311 11.7593 0
- vertex -21.0446 11.8651 -0.1
- vertex -22.4311 11.7593 -0.1
+ vertex -21.0446 11.8651 -0.2
+ vertex -22.4311 11.7593 -0.2
endloop
endfacet
facet normal -0.0432101 0.999066 0
outer loop
- vertex -22.4311 11.7593 -0.1
+ vertex -22.4311 11.7593 -0.2
vertex -24.031 11.6901 0
vertex -22.4311 11.7593 0
endloop
@@ -39251,13 +39251,13 @@ solid OpenSCAD_Model
facet normal -0.0432101 0.999066 0
outer loop
vertex -24.031 11.6901 0
- vertex -22.4311 11.7593 -0.1
- vertex -24.031 11.6901 -0.1
+ vertex -22.4311 11.7593 -0.2
+ vertex -24.031 11.6901 -0.2
endloop
endfacet
facet normal -0.0189053 0.999821 0
outer loop
- vertex -24.031 11.6901 -0.1
+ vertex -24.031 11.6901 -0.2
vertex -25.698 11.6586 0
vertex -24.031 11.6901 0
endloop
@@ -39265,13 +39265,13 @@ solid OpenSCAD_Model
facet normal -0.0189053 0.999821 0
outer loop
vertex -25.698 11.6586 0
- vertex -24.031 11.6901 -0.1
- vertex -25.698 11.6586 -0.1
+ vertex -24.031 11.6901 -0.2
+ vertex -25.698 11.6586 -0.2
endloop
endfacet
facet normal 0.00456618 0.99999 -0
outer loop
- vertex -25.698 11.6586 -0.1
+ vertex -25.698 11.6586 -0.2
vertex -27.2855 11.6658 0
vertex -25.698 11.6586 0
endloop
@@ -39279,13 +39279,13 @@ solid OpenSCAD_Model
facet normal 0.00456618 0.99999 0
outer loop
vertex -27.2855 11.6658 0
- vertex -25.698 11.6586 -0.1
- vertex -27.2855 11.6658 -0.1
+ vertex -25.698 11.6586 -0.2
+ vertex -27.2855 11.6658 -0.2
endloop
endfacet
facet normal 0.034581 0.999402 -0
outer loop
- vertex -27.2855 11.6658 -0.1
+ vertex -27.2855 11.6658 -0.2
vertex -28.647 11.7129 0
vertex -27.2855 11.6658 0
endloop
@@ -39293,13 +39293,13 @@ solid OpenSCAD_Model
facet normal 0.034581 0.999402 0
outer loop
vertex -28.647 11.7129 0
- vertex -27.2855 11.6658 -0.1
- vertex -28.647 11.7129 -0.1
+ vertex -27.2855 11.6658 -0.2
+ vertex -28.647 11.7129 -0.2
endloop
endfacet
facet normal 0.0704155 0.997518 -0
outer loop
- vertex -28.647 11.7129 -0.1
+ vertex -28.647 11.7129 -0.2
vertex -29.1973 11.7518 0
vertex -28.647 11.7129 0
endloop
@@ -39307,13 +39307,13 @@ solid OpenSCAD_Model
facet normal 0.0704155 0.997518 0
outer loop
vertex -29.1973 11.7518 0
- vertex -28.647 11.7129 -0.1
- vertex -29.1973 11.7518 -0.1
+ vertex -28.647 11.7129 -0.2
+ vertex -29.1973 11.7518 -0.2
endloop
endfacet
facet normal 0.111453 0.99377 -0
outer loop
- vertex -29.1973 11.7518 -0.1
+ vertex -29.1973 11.7518 -0.2
vertex -29.6362 11.801 0
vertex -29.1973 11.7518 0
endloop
@@ -39321,13 +39321,13 @@ solid OpenSCAD_Model
facet normal 0.111453 0.99377 0
outer loop
vertex -29.6362 11.801 0
- vertex -29.1973 11.7518 -0.1
- vertex -29.6362 11.801 -0.1
+ vertex -29.1973 11.7518 -0.2
+ vertex -29.6362 11.801 -0.2
endloop
endfacet
facet normal 0.189706 0.981841 -0
outer loop
- vertex -29.6362 11.801 -0.1
+ vertex -29.6362 11.801 -0.2
vertex -29.9453 11.8607 0
vertex -29.6362 11.801 0
endloop
@@ -39335,13 +39335,13 @@ solid OpenSCAD_Model
facet normal 0.189706 0.981841 0
outer loop
vertex -29.9453 11.8607 0
- vertex -29.6362 11.801 -0.1
- vertex -29.9453 11.8607 -0.1
+ vertex -29.6362 11.801 -0.2
+ vertex -29.9453 11.8607 -0.2
endloop
endfacet
facet normal 0.320034 0.947406 -0
outer loop
- vertex -29.9453 11.8607 -0.1
+ vertex -29.9453 11.8607 -0.2
vertex -30.0456 11.8946 0
vertex -29.9453 11.8607 0
endloop
@@ -39349,13 +39349,13 @@ solid OpenSCAD_Model
facet normal 0.320034 0.947406 0
outer loop
vertex -30.0456 11.8946 0
- vertex -29.9453 11.8607 -0.1
- vertex -30.0456 11.8946 -0.1
+ vertex -29.9453 11.8607 -0.2
+ vertex -30.0456 11.8946 -0.2
endloop
endfacet
facet normal 0.514271 0.857628 -0
outer loop
- vertex -30.0456 11.8946 -0.1
+ vertex -30.0456 11.8946 -0.2
vertex -30.1065 11.9311 0
vertex -30.0456 11.8946 0
endloop
@@ -39363,125 +39363,125 @@ solid OpenSCAD_Model
facet normal 0.514271 0.857628 0
outer loop
vertex -30.1065 11.9311 0
- vertex -30.0456 11.8946 -0.1
- vertex -30.1065 11.9311 -0.1
+ vertex -30.0456 11.8946 -0.2
+ vertex -30.1065 11.9311 -0.2
endloop
endfacet
facet normal 0.794078 0.607816 0
outer loop
vertex -30.1065 11.9311 0
- vertex -30.2115 12.0683 -0.1
+ vertex -30.2115 12.0683 -0.2
vertex -30.2115 12.0683 0
endloop
endfacet
facet normal 0.794078 0.607816 0
outer loop
- vertex -30.2115 12.0683 -0.1
+ vertex -30.2115 12.0683 -0.2
vertex -30.1065 11.9311 0
- vertex -30.1065 11.9311 -0.1
+ vertex -30.1065 11.9311 -0.2
endloop
endfacet
facet normal 0.908198 0.418541 0
outer loop
vertex -30.2115 12.0683 0
- vertex -30.2975 12.2549 -0.1
+ vertex -30.2975 12.2549 -0.2
vertex -30.2975 12.2549 0
endloop
endfacet
facet normal 0.908198 0.418541 0
outer loop
- vertex -30.2975 12.2549 -0.1
+ vertex -30.2975 12.2549 -0.2
vertex -30.2115 12.0683 0
- vertex -30.2115 12.0683 -0.1
+ vertex -30.2115 12.0683 -0.2
endloop
endfacet
facet normal 0.964271 0.264918 0
outer loop
vertex -30.2975 12.2549 0
- vertex -30.3556 12.4664 -0.1
+ vertex -30.3556 12.4664 -0.2
vertex -30.3556 12.4664 0
endloop
endfacet
facet normal 0.964271 0.264918 0
outer loop
- vertex -30.3556 12.4664 -0.1
+ vertex -30.3556 12.4664 -0.2
vertex -30.2975 12.2549 0
- vertex -30.2975 12.2549 -0.1
+ vertex -30.2975 12.2549 -0.2
endloop
endfacet
facet normal 0.994966 0.10021 0
outer loop
vertex -30.3556 12.4664 0
- vertex -30.377 12.6783 -0.1
+ vertex -30.377 12.6783 -0.2
vertex -30.377 12.6783 0
endloop
endfacet
facet normal 0.994966 0.10021 0
outer loop
- vertex -30.377 12.6783 -0.1
+ vertex -30.377 12.6783 -0.2
vertex -30.3556 12.4664 0
- vertex -30.3556 12.4664 -0.1
+ vertex -30.3556 12.4664 -0.2
endloop
endfacet
facet normal 0.99734 -0.0728833 0
outer loop
vertex -30.377 12.6783 0
- vertex -30.3621 12.8813 -0.1
+ vertex -30.3621 12.8813 -0.2
vertex -30.3621 12.8813 0
endloop
endfacet
facet normal 0.99734 -0.0728833 0
outer loop
- vertex -30.3621 12.8813 -0.1
+ vertex -30.3621 12.8813 -0.2
vertex -30.377 12.6783 0
- vertex -30.377 12.6783 -0.1
+ vertex -30.377 12.6783 -0.2
endloop
endfacet
facet normal 0.963268 -0.268541 0
outer loop
vertex -30.3621 12.8813 0
- vertex -30.3387 12.9655 -0.1
+ vertex -30.3387 12.9655 -0.2
vertex -30.3387 12.9655 0
endloop
endfacet
facet normal 0.963268 -0.268541 0
outer loop
- vertex -30.3387 12.9655 -0.1
+ vertex -30.3387 12.9655 -0.2
vertex -30.3621 12.8813 0
- vertex -30.3621 12.8813 -0.1
+ vertex -30.3621 12.8813 -0.2
endloop
endfacet
facet normal 0.886257 -0.463194 0
outer loop
vertex -30.3387 12.9655 0
- vertex -30.3001 13.0393 -0.1
+ vertex -30.3001 13.0393 -0.2
vertex -30.3001 13.0393 0
endloop
endfacet
facet normal 0.886257 -0.463194 0
outer loop
- vertex -30.3001 13.0393 -0.1
+ vertex -30.3001 13.0393 -0.2
vertex -30.3387 12.9655 0
- vertex -30.3387 12.9655 -0.1
+ vertex -30.3387 12.9655 -0.2
endloop
endfacet
facet normal 0.748065 -0.663625 0
outer loop
vertex -30.3001 13.0393 0
- vertex -30.2432 13.1034 -0.1
+ vertex -30.2432 13.1034 -0.2
vertex -30.2432 13.1034 0
endloop
endfacet
facet normal 0.748065 -0.663625 0
outer loop
- vertex -30.2432 13.1034 -0.1
+ vertex -30.2432 13.1034 -0.2
vertex -30.3001 13.0393 0
- vertex -30.3001 13.0393 -0.1
+ vertex -30.3001 13.0393 -0.2
endloop
endfacet
facet normal 0.576127 -0.81736 0
outer loop
- vertex -30.2432 13.1034 -0.1
+ vertex -30.2432 13.1034 -0.2
vertex -30.1646 13.1588 0
vertex -30.2432 13.1034 0
endloop
@@ -39489,13 +39489,13 @@ solid OpenSCAD_Model
facet normal 0.576127 -0.81736 0
outer loop
vertex -30.1646 13.1588 0
- vertex -30.2432 13.1034 -0.1
- vertex -30.1646 13.1588 -0.1
+ vertex -30.2432 13.1034 -0.2
+ vertex -30.1646 13.1588 -0.2
endloop
endfacet
facet normal 0.349457 -0.936953 0
outer loop
- vertex -30.1646 13.1588 -0.1
+ vertex -30.1646 13.1588 -0.2
vertex -29.9294 13.2465 0
vertex -30.1646 13.1588 0
endloop
@@ -39503,13 +39503,13 @@ solid OpenSCAD_Model
facet normal 0.349457 -0.936953 0
outer loop
vertex -29.9294 13.2465 0
- vertex -30.1646 13.1588 -0.1
- vertex -29.9294 13.2465 -0.1
+ vertex -30.1646 13.1588 -0.2
+ vertex -29.9294 13.2465 -0.2
endloop
endfacet
facet normal 0.170605 -0.985339 0
outer loop
- vertex -29.9294 13.2465 -0.1
+ vertex -29.9294 13.2465 -0.2
vertex -29.5683 13.309 0
vertex -29.9294 13.2465 0
endloop
@@ -39517,13 +39517,13 @@ solid OpenSCAD_Model
facet normal 0.170605 -0.985339 0
outer loop
vertex -29.5683 13.309 0
- vertex -29.9294 13.2465 -0.1
- vertex -29.5683 13.309 -0.1
+ vertex -29.9294 13.2465 -0.2
+ vertex -29.5683 13.309 -0.2
endloop
endfacet
facet normal 0.0853267 -0.996353 0
outer loop
- vertex -29.5683 13.309 -0.1
+ vertex -29.5683 13.309 -0.2
vertex -29.0548 13.353 0
vertex -29.5683 13.309 0
endloop
@@ -39531,13 +39531,13 @@ solid OpenSCAD_Model
facet normal 0.0853267 -0.996353 0
outer loop
vertex -29.0548 13.353 0
- vertex -29.5683 13.309 -0.1
- vertex -29.0548 13.353 -0.1
+ vertex -29.5683 13.309 -0.2
+ vertex -29.0548 13.353 -0.2
endloop
endfacet
facet normal 0.0369327 -0.999318 0
outer loop
- vertex -29.0548 13.353 -0.1
+ vertex -29.0548 13.353 -0.2
vertex -27.4661 13.4117 0
vertex -29.0548 13.353 0
endloop
@@ -39545,13 +39545,13 @@ solid OpenSCAD_Model
facet normal 0.0369327 -0.999318 0
outer loop
vertex -27.4661 13.4117 0
- vertex -29.0548 13.353 -0.1
- vertex -27.4661 13.4117 -0.1
+ vertex -29.0548 13.353 -0.2
+ vertex -27.4661 13.4117 -0.2
endloop
endfacet
facet normal 0.0488074 -0.998808 0
outer loop
- vertex -27.4661 13.4117 -0.1
+ vertex -27.4661 13.4117 -0.2
vertex -26.1544 13.4758 0
vertex -27.4661 13.4117 0
endloop
@@ -39559,13 +39559,13 @@ solid OpenSCAD_Model
facet normal 0.0488074 -0.998808 0
outer loop
vertex -26.1544 13.4758 0
- vertex -27.4661 13.4117 -0.1
- vertex -26.1544 13.4758 -0.1
+ vertex -27.4661 13.4117 -0.2
+ vertex -26.1544 13.4758 -0.2
endloop
endfacet
facet normal 0.0958463 -0.995396 0
outer loop
- vertex -26.1544 13.4758 -0.1
+ vertex -26.1544 13.4758 -0.2
vertex -24.8613 13.6003 0
vertex -26.1544 13.4758 0
endloop
@@ -39573,13 +39573,13 @@ solid OpenSCAD_Model
facet normal 0.0958463 -0.995396 0
outer loop
vertex -24.8613 13.6003 0
- vertex -26.1544 13.4758 -0.1
- vertex -24.8613 13.6003 -0.1
+ vertex -26.1544 13.4758 -0.2
+ vertex -24.8613 13.6003 -0.2
endloop
endfacet
facet normal 0.144031 -0.989573 0
outer loop
- vertex -24.8613 13.6003 -0.1
+ vertex -24.8613 13.6003 -0.2
vertex -23.579 13.787 0
vertex -24.8613 13.6003 0
endloop
@@ -39587,13 +39587,13 @@ solid OpenSCAD_Model
facet normal 0.144031 -0.989573 0
outer loop
vertex -23.579 13.787 0
- vertex -24.8613 13.6003 -0.1
- vertex -23.579 13.787 -0.1
+ vertex -24.8613 13.6003 -0.2
+ vertex -23.579 13.787 -0.2
endloop
endfacet
facet normal 0.192155 -0.981365 0
outer loop
- vertex -23.579 13.787 -0.1
+ vertex -23.579 13.787 -0.2
vertex -22.3001 14.0374 0
vertex -23.579 13.787 0
endloop
@@ -39601,13 +39601,13 @@ solid OpenSCAD_Model
facet normal 0.192155 -0.981365 0
outer loop
vertex -22.3001 14.0374 0
- vertex -23.579 13.787 -0.1
- vertex -22.3001 14.0374 -0.1
+ vertex -23.579 13.787 -0.2
+ vertex -22.3001 14.0374 -0.2
endloop
endfacet
facet normal 0.239032 -0.971012 0
outer loop
- vertex -22.3001 14.0374 -0.1
+ vertex -22.3001 14.0374 -0.2
vertex -21.0167 14.3533 0
vertex -22.3001 14.0374 0
endloop
@@ -39615,13 +39615,13 @@ solid OpenSCAD_Model
facet normal 0.239032 -0.971012 0
outer loop
vertex -21.0167 14.3533 0
- vertex -22.3001 14.0374 -0.1
- vertex -21.0167 14.3533 -0.1
+ vertex -22.3001 14.0374 -0.2
+ vertex -21.0167 14.3533 -0.2
endloop
endfacet
facet normal 0.283599 -0.958943 0
outer loop
- vertex -21.0167 14.3533 -0.1
+ vertex -21.0167 14.3533 -0.2
vertex -19.7213 14.7364 0
vertex -21.0167 14.3533 0
endloop
@@ -39629,13 +39629,13 @@ solid OpenSCAD_Model
facet normal 0.283599 -0.958943 0
outer loop
vertex -19.7213 14.7364 0
- vertex -21.0167 14.3533 -0.1
- vertex -19.7213 14.7364 -0.1
+ vertex -21.0167 14.3533 -0.2
+ vertex -19.7213 14.7364 -0.2
endloop
endfacet
facet normal 0.325025 -0.945706 0
outer loop
- vertex -19.7213 14.7364 -0.1
+ vertex -19.7213 14.7364 -0.2
vertex -18.4061 15.1884 0
vertex -19.7213 14.7364 0
endloop
@@ -39643,13 +39643,13 @@ solid OpenSCAD_Model
facet normal 0.325025 -0.945706 0
outer loop
vertex -18.4061 15.1884 0
- vertex -19.7213 14.7364 -0.1
- vertex -18.4061 15.1884 -0.1
+ vertex -19.7213 14.7364 -0.2
+ vertex -18.4061 15.1884 -0.2
endloop
endfacet
facet normal 0.362736 -0.931892 0
outer loop
- vertex -18.4061 15.1884 -0.1
+ vertex -18.4061 15.1884 -0.2
vertex -17.0637 15.711 0
vertex -18.4061 15.1884 0
endloop
@@ -39657,13 +39657,13 @@ solid OpenSCAD_Model
facet normal 0.362736 -0.931892 0
outer loop
vertex -17.0637 15.711 0
- vertex -18.4061 15.1884 -0.1
- vertex -17.0637 15.711 -0.1
+ vertex -18.4061 15.1884 -0.2
+ vertex -17.0637 15.711 -0.2
endloop
endfacet
facet normal 0.385262 -0.922807 0
outer loop
- vertex -17.0637 15.711 -0.1
+ vertex -17.0637 15.711 -0.2
vertex -16.4531 15.9659 0
vertex -17.0637 15.711 0
endloop
@@ -39671,13 +39671,13 @@ solid OpenSCAD_Model
facet normal 0.385262 -0.922807 0
outer loop
vertex -16.4531 15.9659 0
- vertex -17.0637 15.711 -0.1
- vertex -16.4531 15.9659 -0.1
+ vertex -17.0637 15.711 -0.2
+ vertex -16.4531 15.9659 -0.2
endloop
endfacet
facet normal 0.409178 -0.912454 0
outer loop
- vertex -16.4531 15.9659 -0.1
+ vertex -16.4531 15.9659 -0.2
vertex -15.9397 16.1961 0
vertex -16.4531 15.9659 0
endloop
@@ -39685,13 +39685,13 @@ solid OpenSCAD_Model
facet normal 0.409178 -0.912454 0
outer loop
vertex -15.9397 16.1961 0
- vertex -16.4531 15.9659 -0.1
- vertex -15.9397 16.1961 -0.1
+ vertex -16.4531 15.9659 -0.2
+ vertex -15.9397 16.1961 -0.2
endloop
endfacet
facet normal 0.452989 -0.891516 0
outer loop
- vertex -15.9397 16.1961 -0.1
+ vertex -15.9397 16.1961 -0.2
vertex -15.4716 16.4339 0
vertex -15.9397 16.1961 0
endloop
@@ -39699,13 +39699,13 @@ solid OpenSCAD_Model
facet normal 0.452989 -0.891516 0
outer loop
vertex -15.4716 16.4339 0
- vertex -15.9397 16.1961 -0.1
- vertex -15.4716 16.4339 -0.1
+ vertex -15.9397 16.1961 -0.2
+ vertex -15.4716 16.4339 -0.2
endloop
endfacet
facet normal 0.505092 -0.863065 0
outer loop
- vertex -15.4716 16.4339 -0.1
+ vertex -15.4716 16.4339 -0.2
vertex -14.9972 16.7116 0
vertex -15.4716 16.4339 0
endloop
@@ -39713,13 +39713,13 @@ solid OpenSCAD_Model
facet normal 0.505092 -0.863065 0
outer loop
vertex -14.9972 16.7116 0
- vertex -15.4716 16.4339 -0.1
- vertex -14.9972 16.7116 -0.1
+ vertex -15.4716 16.4339 -0.2
+ vertex -14.9972 16.7116 -0.2
endloop
endfacet
facet normal 0.548914 -0.835879 0
outer loop
- vertex -14.9972 16.7116 -0.1
+ vertex -14.9972 16.7116 -0.2
vertex -14.4648 17.0612 0
vertex -14.9972 16.7116 0
endloop
@@ -39727,13 +39727,13 @@ solid OpenSCAD_Model
facet normal 0.548914 -0.835879 0
outer loop
vertex -14.4648 17.0612 0
- vertex -14.9972 16.7116 -0.1
- vertex -14.4648 17.0612 -0.1
+ vertex -14.9972 16.7116 -0.2
+ vertex -14.4648 17.0612 -0.2
endloop
endfacet
facet normal 0.577162 -0.81663 0
outer loop
- vertex -14.4648 17.0612 -0.1
+ vertex -14.4648 17.0612 -0.2
vertex -13.8225 17.5152 0
vertex -14.4648 17.0612 0
endloop
@@ -39741,13 +39741,13 @@ solid OpenSCAD_Model
facet normal 0.577162 -0.81663 0
outer loop
vertex -13.8225 17.5152 0
- vertex -14.4648 17.0612 -0.1
- vertex -13.8225 17.5152 -0.1
+ vertex -14.4648 17.0612 -0.2
+ vertex -13.8225 17.5152 -0.2
endloop
endfacet
facet normal 0.595448 -0.803394 0
outer loop
- vertex -13.8225 17.5152 -0.1
+ vertex -13.8225 17.5152 -0.2
vertex -12.0016 18.8648 0
vertex -13.8225 17.5152 0
endloop
@@ -39755,13 +39755,13 @@ solid OpenSCAD_Model
facet normal 0.595448 -0.803394 0
outer loop
vertex -12.0016 18.8648 0
- vertex -13.8225 17.5152 -0.1
- vertex -12.0016 18.8648 -0.1
+ vertex -13.8225 17.5152 -0.2
+ vertex -12.0016 18.8648 -0.2
endloop
endfacet
facet normal 0.610957 -0.791663 0
outer loop
- vertex -12.0016 18.8648 -0.1
+ vertex -12.0016 18.8648 -0.2
vertex -11.4702 19.2748 0
vertex -12.0016 18.8648 0
endloop
@@ -39769,13 +39769,13 @@ solid OpenSCAD_Model
facet normal 0.610957 -0.791663 0
outer loop
vertex -11.4702 19.2748 0
- vertex -12.0016 18.8648 -0.1
- vertex -11.4702 19.2748 -0.1
+ vertex -12.0016 18.8648 -0.2
+ vertex -11.4702 19.2748 -0.2
endloop
endfacet
facet normal 0.661597 -0.749859 0
outer loop
- vertex -11.4702 19.2748 -0.1
+ vertex -11.4702 19.2748 -0.2
vertex -11.1091 19.5935 0
vertex -11.4702 19.2748 0
endloop
@@ -39783,69 +39783,69 @@ solid OpenSCAD_Model
facet normal 0.661597 -0.749859 0
outer loop
vertex -11.1091 19.5935 0
- vertex -11.4702 19.2748 -0.1
- vertex -11.1091 19.5935 -0.1
+ vertex -11.4702 19.2748 -0.2
+ vertex -11.1091 19.5935 -0.2
endloop
endfacet
facet normal 0.747538 -0.664219 0
outer loop
vertex -11.1091 19.5935 0
- vertex -10.9948 19.7221 -0.1
+ vertex -10.9948 19.7221 -0.2
vertex -10.9948 19.7221 0
endloop
endfacet
facet normal 0.747538 -0.664219 0
outer loop
- vertex -10.9948 19.7221 -0.1
+ vertex -10.9948 19.7221 -0.2
vertex -11.1091 19.5935 0
- vertex -11.1091 19.5935 -0.1
+ vertex -11.1091 19.5935 -0.2
endloop
endfacet
facet normal 0.848145 -0.529765 0
outer loop
vertex -10.9948 19.7221 0
- vertex -10.9261 19.832 -0.1
+ vertex -10.9261 19.832 -0.2
vertex -10.9261 19.832 0
endloop
endfacet
facet normal 0.848145 -0.529765 0
outer loop
- vertex -10.9261 19.832 -0.1
+ vertex -10.9261 19.832 -0.2
vertex -10.9948 19.7221 0
- vertex -10.9948 19.7221 -0.1
+ vertex -10.9948 19.7221 -0.2
endloop
endfacet
facet normal 0.972725 -0.231962 0
outer loop
vertex -10.9261 19.832 0
- vertex -10.904 19.9248 -0.1
+ vertex -10.904 19.9248 -0.2
vertex -10.904 19.9248 0
endloop
endfacet
facet normal 0.972725 -0.231962 0
outer loop
- vertex -10.904 19.9248 -0.1
+ vertex -10.904 19.9248 -0.2
vertex -10.9261 19.832 0
- vertex -10.9261 19.832 -0.1
+ vertex -10.9261 19.832 -0.2
endloop
endfacet
facet normal 0.949443 0.31394 0
outer loop
vertex -10.904 19.9248 0
- vertex -10.9294 20.0018 -0.1
+ vertex -10.9294 20.0018 -0.2
vertex -10.9294 20.0018 0
endloop
endfacet
facet normal 0.949443 0.31394 0
outer loop
- vertex -10.9294 20.0018 -0.1
+ vertex -10.9294 20.0018 -0.2
vertex -10.904 19.9248 0
- vertex -10.904 19.9248 -0.1
+ vertex -10.904 19.9248 -0.2
endloop
endfacet
facet normal 0.645708 0.763585 -0
outer loop
- vertex -10.9294 20.0018 -0.1
+ vertex -10.9294 20.0018 -0.2
vertex -11.0035 20.0644 0
vertex -10.9294 20.0018 0
endloop
@@ -39853,13 +39853,13 @@ solid OpenSCAD_Model
facet normal 0.645708 0.763585 0
outer loop
vertex -11.0035 20.0644 0
- vertex -10.9294 20.0018 -0.1
- vertex -11.0035 20.0644 -0.1
+ vertex -10.9294 20.0018 -0.2
+ vertex -11.0035 20.0644 -0.2
endloop
endfacet
facet normal 0.372622 0.927983 -0
outer loop
- vertex -11.0035 20.0644 -0.1
+ vertex -11.0035 20.0644 -0.2
vertex -11.1271 20.114 0
vertex -11.0035 20.0644 0
endloop
@@ -39867,13 +39867,13 @@ solid OpenSCAD_Model
facet normal 0.372622 0.927983 0
outer loop
vertex -11.1271 20.114 0
- vertex -11.0035 20.0644 -0.1
- vertex -11.1271 20.114 -0.1
+ vertex -11.0035 20.0644 -0.2
+ vertex -11.1271 20.114 -0.2
endloop
endfacet
facet normal 0.213569 0.976928 -0
outer loop
- vertex -11.1271 20.114 -0.1
+ vertex -11.1271 20.114 -0.2
vertex -11.3013 20.1521 0
vertex -11.1271 20.114 0
endloop
@@ -39881,13 +39881,13 @@ solid OpenSCAD_Model
facet normal 0.213569 0.976928 0
outer loop
vertex -11.3013 20.1521 0
- vertex -11.1271 20.114 -0.1
- vertex -11.3013 20.1521 -0.1
+ vertex -11.1271 20.114 -0.2
+ vertex -11.3013 20.1521 -0.2
endloop
endfacet
facet normal 0.122812 0.99243 -0
outer loop
- vertex -11.3013 20.1521 -0.1
+ vertex -11.3013 20.1521 -0.2
vertex -11.5271 20.1801 0
vertex -11.3013 20.1521 0
endloop
@@ -39895,13 +39895,13 @@ solid OpenSCAD_Model
facet normal 0.122812 0.99243 0
outer loop
vertex -11.5271 20.1801 0
- vertex -11.3013 20.1521 -0.1
- vertex -11.5271 20.1801 -0.1
+ vertex -11.3013 20.1521 -0.2
+ vertex -11.5271 20.1801 -0.2
endloop
endfacet
facet normal 0.050903 0.998704 -0
outer loop
- vertex -11.5271 20.1801 -0.1
+ vertex -11.5271 20.1801 -0.2
vertex -12.1376 20.2112 0
vertex -11.5271 20.1801 0
endloop
@@ -39909,13 +39909,13 @@ solid OpenSCAD_Model
facet normal 0.050903 0.998704 0
outer loop
vertex -12.1376 20.2112 0
- vertex -11.5271 20.1801 -0.1
- vertex -12.1376 20.2112 -0.1
+ vertex -11.5271 20.1801 -0.2
+ vertex -12.1376 20.2112 -0.2
endloop
endfacet
facet normal 0.00904467 0.999959 -0
outer loop
- vertex -12.1376 20.2112 -0.1
+ vertex -12.1376 20.2112 -0.2
vertex -12.9665 20.2187 0
vertex -12.1376 20.2112 0
endloop
@@ -39923,13 +39923,13 @@ solid OpenSCAD_Model
facet normal 0.00904467 0.999959 0
outer loop
vertex -12.9665 20.2187 0
- vertex -12.1376 20.2112 -0.1
- vertex -12.9665 20.2187 -0.1
+ vertex -12.1376 20.2112 -0.2
+ vertex -12.9665 20.2187 -0.2
endloop
endfacet
facet normal -0.0191031 0.999818 0
outer loop
- vertex -12.9665 20.2187 -0.1
+ vertex -12.9665 20.2187 -0.2
vertex -13.9037 20.2008 0
vertex -12.9665 20.2187 0
endloop
@@ -39937,13 +39937,13 @@ solid OpenSCAD_Model
facet normal -0.0191031 0.999818 0
outer loop
vertex -13.9037 20.2008 0
- vertex -12.9665 20.2187 -0.1
- vertex -13.9037 20.2008 -0.1
+ vertex -12.9665 20.2187 -0.2
+ vertex -13.9037 20.2008 -0.2
endloop
endfacet
facet normal -0.0506696 0.998715 0
outer loop
- vertex -13.9037 20.2008 -0.1
+ vertex -13.9037 20.2008 -0.2
vertex -14.8461 20.153 0
vertex -13.9037 20.2008 0
endloop
@@ -39951,13 +39951,13 @@ solid OpenSCAD_Model
facet normal -0.0506696 0.998715 0
outer loop
vertex -14.8461 20.153 0
- vertex -13.9037 20.2008 -0.1
- vertex -14.8461 20.153 -0.1
+ vertex -13.9037 20.2008 -0.2
+ vertex -14.8461 20.153 -0.2
endloop
endfacet
facet normal -0.0837631 0.996486 0
outer loop
- vertex -14.8461 20.153 -0.1
+ vertex -14.8461 20.153 -0.2
vertex -15.684 20.0825 0
vertex -14.8461 20.153 0
endloop
@@ -39965,13 +39965,13 @@ solid OpenSCAD_Model
facet normal -0.0837631 0.996486 0
outer loop
vertex -15.684 20.0825 0
- vertex -14.8461 20.153 -0.1
- vertex -15.684 20.0825 -0.1
+ vertex -14.8461 20.153 -0.2
+ vertex -15.684 20.0825 -0.2
endloop
endfacet
facet normal -0.136213 0.99068 0
outer loop
- vertex -15.684 20.0825 -0.1
+ vertex -15.684 20.0825 -0.2
vertex -16.3079 19.9967 0
vertex -15.684 20.0825 0
endloop
@@ -39979,13 +39979,13 @@ solid OpenSCAD_Model
facet normal -0.136213 0.99068 0
outer loop
vertex -16.3079 19.9967 0
- vertex -15.684 20.0825 -0.1
- vertex -16.3079 19.9967 -0.1
+ vertex -15.684 20.0825 -0.2
+ vertex -16.3079 19.9967 -0.2
endloop
endfacet
facet normal -0.175854 0.984416 0
outer loop
- vertex -16.3079 19.9967 -0.1
+ vertex -16.3079 19.9967 -0.2
vertex -17.2235 19.8332 0
vertex -16.3079 19.9967 0
endloop
@@ -39993,13 +39993,13 @@ solid OpenSCAD_Model
facet normal -0.175854 0.984416 0
outer loop
vertex -17.2235 19.8332 0
- vertex -16.3079 19.9967 -0.1
- vertex -17.2235 19.8332 -0.1
+ vertex -16.3079 19.9967 -0.2
+ vertex -17.2235 19.8332 -0.2
endloop
endfacet
facet normal -0.15721 0.987565 0
outer loop
- vertex -17.2235 19.8332 -0.1
+ vertex -17.2235 19.8332 -0.2
vertex -18.1791 19.6811 0
vertex -17.2235 19.8332 0
endloop
@@ -40007,13 +40007,13 @@ solid OpenSCAD_Model
facet normal -0.15721 0.987565 0
outer loop
vertex -18.1791 19.6811 0
- vertex -17.2235 19.8332 -0.1
- vertex -18.1791 19.6811 -0.1
+ vertex -17.2235 19.8332 -0.2
+ vertex -18.1791 19.6811 -0.2
endloop
endfacet
facet normal -0.133206 0.991088 0
outer loop
- vertex -18.1791 19.6811 -0.1
+ vertex -18.1791 19.6811 -0.2
vertex -20.1671 19.4139 0
vertex -18.1791 19.6811 0
endloop
@@ -40021,13 +40021,13 @@ solid OpenSCAD_Model
facet normal -0.133206 0.991088 0
outer loop
vertex -20.1671 19.4139 0
- vertex -18.1791 19.6811 -0.1
- vertex -20.1671 19.4139 -0.1
+ vertex -18.1791 19.6811 -0.2
+ vertex -20.1671 19.4139 -0.2
endloop
endfacet
facet normal -0.105044 0.994468 0
outer loop
- vertex -20.1671 19.4139 -0.1
+ vertex -20.1671 19.4139 -0.2
vertex -22.1849 19.2007 0
vertex -20.1671 19.4139 0
endloop
@@ -40035,13 +40035,13 @@ solid OpenSCAD_Model
facet normal -0.105044 0.994468 0
outer loop
vertex -22.1849 19.2007 0
- vertex -20.1671 19.4139 -0.1
- vertex -22.1849 19.2007 -0.1
+ vertex -20.1671 19.4139 -0.2
+ vertex -22.1849 19.2007 -0.2
endloop
endfacet
facet normal -0.0780607 0.996949 0
outer loop
- vertex -22.1849 19.2007 -0.1
+ vertex -22.1849 19.2007 -0.2
vertex -24.1455 19.0472 0
vertex -22.1849 19.2007 0
endloop
@@ -40049,13 +40049,13 @@ solid OpenSCAD_Model
facet normal -0.0780607 0.996949 0
outer loop
vertex -24.1455 19.0472 0
- vertex -22.1849 19.2007 -0.1
- vertex -24.1455 19.0472 -0.1
+ vertex -22.1849 19.2007 -0.2
+ vertex -24.1455 19.0472 -0.2
endloop
endfacet
facet normal -0.0485635 0.99882 0
outer loop
- vertex -24.1455 19.0472 -0.1
+ vertex -24.1455 19.0472 -0.2
vertex -25.9619 18.9589 0
vertex -24.1455 19.0472 0
endloop
@@ -40063,13 +40063,13 @@ solid OpenSCAD_Model
facet normal -0.0485635 0.99882 0
outer loop
vertex -25.9619 18.9589 0
- vertex -24.1455 19.0472 -0.1
- vertex -25.9619 18.9589 -0.1
+ vertex -24.1455 19.0472 -0.2
+ vertex -25.9619 18.9589 -0.2
endloop
endfacet
facet normal -0.0217214 0.999764 0
outer loop
- vertex -25.9619 18.9589 -0.1
+ vertex -25.9619 18.9589 -0.2
vertex -26.7887 18.9409 0
vertex -25.9619 18.9589 0
endloop
@@ -40077,13 +40077,13 @@ solid OpenSCAD_Model
facet normal -0.0217214 0.999764 0
outer loop
vertex -26.7887 18.9409 0
- vertex -25.9619 18.9589 -0.1
- vertex -26.7887 18.9409 -0.1
+ vertex -25.9619 18.9589 -0.2
+ vertex -26.7887 18.9409 -0.2
endloop
endfacet
facet normal 0.000558472 1 -0
outer loop
- vertex -26.7887 18.9409 -0.1
+ vertex -26.7887 18.9409 -0.2
vertex -27.5469 18.9414 0
vertex -26.7887 18.9409 0
endloop
@@ -40091,13 +40091,13 @@ solid OpenSCAD_Model
facet normal 0.000558472 1 0
outer loop
vertex -27.5469 18.9414 0
- vertex -26.7887 18.9409 -0.1
- vertex -27.5469 18.9414 -0.1
+ vertex -26.7887 18.9409 -0.2
+ vertex -27.5469 18.9414 -0.2
endloop
endfacet
facet normal 0.0287379 0.999587 -0
outer loop
- vertex -27.5469 18.9414 -0.1
+ vertex -27.5469 18.9414 -0.2
vertex -28.2256 18.9609 0
vertex -27.5469 18.9414 0
endloop
@@ -40105,13 +40105,13 @@ solid OpenSCAD_Model
facet normal 0.0287379 0.999587 0
outer loop
vertex -28.2256 18.9609 0
- vertex -27.5469 18.9414 -0.1
- vertex -28.2256 18.9609 -0.1
+ vertex -27.5469 18.9414 -0.2
+ vertex -28.2256 18.9609 -0.2
endloop
endfacet
facet normal 0.0666534 0.997776 -0
outer loop
- vertex -28.2256 18.9609 -0.1
+ vertex -28.2256 18.9609 -0.2
vertex -28.8137 19.0002 0
vertex -28.2256 18.9609 0
endloop
@@ -40119,13 +40119,13 @@ solid OpenSCAD_Model
facet normal 0.0666534 0.997776 0
outer loop
vertex -28.8137 19.0002 0
- vertex -28.2256 18.9609 -0.1
- vertex -28.8137 19.0002 -0.1
+ vertex -28.2256 18.9609 -0.2
+ vertex -28.8137 19.0002 -0.2
endloop
endfacet
facet normal 0.121854 0.992548 -0
outer loop
- vertex -28.8137 19.0002 -0.1
+ vertex -28.8137 19.0002 -0.2
vertex -29.3006 19.0599 0
vertex -28.8137 19.0002 0
endloop
@@ -40133,13 +40133,13 @@ solid OpenSCAD_Model
facet normal 0.121854 0.992548 0
outer loop
vertex -29.3006 19.0599 0
- vertex -28.8137 19.0002 -0.1
- vertex -29.3006 19.0599 -0.1
+ vertex -28.8137 19.0002 -0.2
+ vertex -29.3006 19.0599 -0.2
endloop
endfacet
facet normal 0.211179 0.977447 -0
outer loop
- vertex -29.3006 19.0599 -0.1
+ vertex -29.3006 19.0599 -0.2
vertex -29.6752 19.1409 0
vertex -29.3006 19.0599 0
endloop
@@ -40147,13 +40147,13 @@ solid OpenSCAD_Model
facet normal 0.211179 0.977447 0
outer loop
vertex -29.6752 19.1409 0
- vertex -29.3006 19.0599 -0.1
- vertex -29.6752 19.1409 -0.1
+ vertex -29.3006 19.0599 -0.2
+ vertex -29.6752 19.1409 -0.2
endloop
endfacet
facet normal 0.291073 0.956701 -0
outer loop
- vertex -29.6752 19.1409 -0.1
+ vertex -29.6752 19.1409 -0.2
vertex -30.5811 19.4165 0
vertex -29.6752 19.1409 0
endloop
@@ -40161,13 +40161,13 @@ solid OpenSCAD_Model
facet normal 0.291073 0.956701 0
outer loop
vertex -30.5811 19.4165 0
- vertex -29.6752 19.1409 -0.1
- vertex -30.5811 19.4165 -0.1
+ vertex -29.6752 19.1409 -0.2
+ vertex -30.5811 19.4165 -0.2
endloop
endfacet
facet normal 0.314696 0.949192 -0
outer loop
- vertex -30.5811 19.4165 -0.1
+ vertex -30.5811 19.4165 -0.2
vertex -31.4466 19.7034 0
vertex -30.5811 19.4165 0
endloop
@@ -40175,13 +40175,13 @@ solid OpenSCAD_Model
facet normal 0.314696 0.949192 0
outer loop
vertex -31.4466 19.7034 0
- vertex -30.5811 19.4165 -0.1
- vertex -31.4466 19.7034 -0.1
+ vertex -30.5811 19.4165 -0.2
+ vertex -31.4466 19.7034 -0.2
endloop
endfacet
facet normal 0.339748 0.940516 -0
outer loop
- vertex -31.4466 19.7034 -0.1
+ vertex -31.4466 19.7034 -0.2
vertex -32.271 20.0012 0
vertex -31.4466 19.7034 0
endloop
@@ -40189,13 +40189,13 @@ solid OpenSCAD_Model
facet normal 0.339748 0.940516 0
outer loop
vertex -32.271 20.0012 0
- vertex -31.4466 19.7034 -0.1
- vertex -32.271 20.0012 -0.1
+ vertex -31.4466 19.7034 -0.2
+ vertex -32.271 20.0012 -0.2
endloop
endfacet
facet normal 0.366429 0.930446 -0
outer loop
- vertex -32.271 20.0012 -0.1
+ vertex -32.271 20.0012 -0.2
vertex -33.0533 20.3093 0
vertex -32.271 20.0012 0
endloop
@@ -40203,13 +40203,13 @@ solid OpenSCAD_Model
facet normal 0.366429 0.930446 0
outer loop
vertex -33.0533 20.3093 0
- vertex -32.271 20.0012 -0.1
- vertex -33.0533 20.3093 -0.1
+ vertex -32.271 20.0012 -0.2
+ vertex -33.0533 20.3093 -0.2
endloop
endfacet
facet normal 0.394948 0.918703 -0
outer loop
- vertex -33.0533 20.3093 -0.1
+ vertex -33.0533 20.3093 -0.2
vertex -33.7926 20.6272 0
vertex -33.0533 20.3093 0
endloop
@@ -40217,13 +40217,13 @@ solid OpenSCAD_Model
facet normal 0.394948 0.918703 0
outer loop
vertex -33.7926 20.6272 0
- vertex -33.0533 20.3093 -0.1
- vertex -33.7926 20.6272 -0.1
+ vertex -33.0533 20.3093 -0.2
+ vertex -33.7926 20.6272 -0.2
endloop
endfacet
facet normal 0.425556 0.904932 -0
outer loop
- vertex -33.7926 20.6272 -0.1
+ vertex -33.7926 20.6272 -0.2
vertex -34.4881 20.9542 0
vertex -33.7926 20.6272 0
endloop
@@ -40231,13 +40231,13 @@ solid OpenSCAD_Model
facet normal 0.425556 0.904932 0
outer loop
vertex -34.4881 20.9542 0
- vertex -33.7926 20.6272 -0.1
- vertex -34.4881 20.9542 -0.1
+ vertex -33.7926 20.6272 -0.2
+ vertex -34.4881 20.9542 -0.2
endloop
endfacet
facet normal 0.458522 0.888683 -0
outer loop
- vertex -34.4881 20.9542 -0.1
+ vertex -34.4881 20.9542 -0.2
vertex -35.1386 21.2899 0
vertex -34.4881 20.9542 0
endloop
@@ -40245,13 +40245,13 @@ solid OpenSCAD_Model
facet normal 0.458522 0.888683 0
outer loop
vertex -35.1386 21.2899 0
- vertex -34.4881 20.9542 -0.1
- vertex -35.1386 21.2899 -0.1
+ vertex -34.4881 20.9542 -0.2
+ vertex -35.1386 21.2899 -0.2
endloop
endfacet
facet normal 0.494132 0.869387 -0
outer loop
- vertex -35.1386 21.2899 -0.1
+ vertex -35.1386 21.2899 -0.2
vertex -35.7435 21.6336 0
vertex -35.1386 21.2899 0
endloop
@@ -40259,13 +40259,13 @@ solid OpenSCAD_Model
facet normal 0.494132 0.869387 0
outer loop
vertex -35.7435 21.6336 0
- vertex -35.1386 21.2899 -0.1
- vertex -35.7435 21.6336 -0.1
+ vertex -35.1386 21.2899 -0.2
+ vertex -35.7435 21.6336 -0.2
endloop
endfacet
facet normal 0.532679 0.846317 -0
outer loop
- vertex -35.7435 21.6336 -0.1
+ vertex -35.7435 21.6336 -0.2
vertex -36.3017 21.985 0
vertex -35.7435 21.6336 0
endloop
@@ -40273,13 +40273,13 @@ solid OpenSCAD_Model
facet normal 0.532679 0.846317 0
outer loop
vertex -36.3017 21.985 0
- vertex -35.7435 21.6336 -0.1
- vertex -36.3017 21.985 -0.1
+ vertex -35.7435 21.6336 -0.2
+ vertex -36.3017 21.985 -0.2
endloop
endfacet
facet normal 0.574426 0.818556 -0
outer loop
- vertex -36.3017 21.985 -0.1
+ vertex -36.3017 21.985 -0.2
vertex -36.8124 22.3433 0
vertex -36.3017 21.985 0
endloop
@@ -40287,13 +40287,13 @@ solid OpenSCAD_Model
facet normal 0.574426 0.818556 0
outer loop
vertex -36.8124 22.3433 0
- vertex -36.3017 21.985 -0.1
- vertex -36.8124 22.3433 -0.1
+ vertex -36.3017 21.985 -0.2
+ vertex -36.8124 22.3433 -0.2
endloop
endfacet
facet normal 0.619583 0.784931 -0
outer loop
- vertex -36.8124 22.3433 -0.1
+ vertex -36.8124 22.3433 -0.2
vertex -37.2746 22.7082 0
vertex -36.8124 22.3433 0
endloop
@@ -40301,13 +40301,13 @@ solid OpenSCAD_Model
facet normal 0.619583 0.784931 0
outer loop
vertex -37.2746 22.7082 0
- vertex -36.8124 22.3433 -0.1
- vertex -37.2746 22.7082 -0.1
+ vertex -36.8124 22.3433 -0.2
+ vertex -37.2746 22.7082 -0.2
endloop
endfacet
facet normal 0.668193 0.743988 -0
outer loop
- vertex -37.2746 22.7082 -0.1
+ vertex -37.2746 22.7082 -0.2
vertex -37.6874 23.0789 0
vertex -37.2746 22.7082 0
endloop
@@ -40315,139 +40315,139 @@ solid OpenSCAD_Model
facet normal 0.668193 0.743988 0
outer loop
vertex -37.6874 23.0789 0
- vertex -37.2746 22.7082 -0.1
- vertex -37.6874 23.0789 -0.1
+ vertex -37.2746 22.7082 -0.2
+ vertex -37.6874 23.0789 -0.2
endloop
endfacet
facet normal 0.720024 0.69395 0
outer loop
vertex -37.6874 23.0789 0
- vertex -38.0499 23.455 -0.1
+ vertex -38.0499 23.455 -0.2
vertex -38.0499 23.455 0
endloop
endfacet
facet normal 0.720024 0.69395 0
outer loop
- vertex -38.0499 23.455 -0.1
+ vertex -38.0499 23.455 -0.2
vertex -37.6874 23.0789 0
- vertex -37.6874 23.0789 -0.1
+ vertex -37.6874 23.0789 -0.2
endloop
endfacet
facet normal 0.774355 0.632751 0
outer loop
vertex -38.0499 23.455 0
- vertex -38.3611 23.836 -0.1
+ vertex -38.3611 23.836 -0.2
vertex -38.3611 23.836 0
endloop
endfacet
facet normal 0.774355 0.632751 0
outer loop
- vertex -38.3611 23.836 -0.1
+ vertex -38.3611 23.836 -0.2
vertex -38.0499 23.455 0
- vertex -38.0499 23.455 -0.1
+ vertex -38.0499 23.455 -0.2
endloop
endfacet
facet normal 0.829712 0.558192 0
outer loop
vertex -38.3611 23.836 0
- vertex -38.6203 24.2212 -0.1
+ vertex -38.6203 24.2212 -0.2
vertex -38.6203 24.2212 0
endloop
endfacet
facet normal 0.829712 0.558192 0
outer loop
- vertex -38.6203 24.2212 -0.1
+ vertex -38.6203 24.2212 -0.2
vertex -38.3611 23.836 0
- vertex -38.3611 23.836 -0.1
+ vertex -38.3611 23.836 -0.2
endloop
endfacet
facet normal 0.883596 0.468251 0
outer loop
vertex -38.6203 24.2212 0
- vertex -38.8265 24.6102 -0.1
+ vertex -38.8265 24.6102 -0.2
vertex -38.8265 24.6102 0
endloop
endfacet
facet normal 0.883596 0.468251 0
outer loop
- vertex -38.8265 24.6102 -0.1
+ vertex -38.8265 24.6102 -0.2
vertex -38.6203 24.2212 0
- vertex -38.6203 24.2212 -0.1
+ vertex -38.6203 24.2212 -0.2
endloop
endfacet
facet normal 0.926216 0.376994 0
outer loop
vertex -38.8265 24.6102 0
- vertex -39.0227 25.0923 -0.1
+ vertex -39.0227 25.0923 -0.2
vertex -39.0227 25.0923 0
endloop
endfacet
facet normal 0.926216 0.376994 0
outer loop
- vertex -39.0227 25.0923 -0.1
+ vertex -39.0227 25.0923 -0.2
vertex -38.8265 24.6102 0
- vertex -38.8265 24.6102 -0.1
+ vertex -38.8265 24.6102 -0.2
endloop
endfacet
facet normal 0.967451 0.253059 0
outer loop
vertex -39.0227 25.0923 0
- vertex -39.1186 25.4589 -0.1
+ vertex -39.1186 25.4589 -0.2
vertex -39.1186 25.4589 0
endloop
endfacet
facet normal 0.967451 0.253059 0
outer loop
- vertex -39.1186 25.4589 -0.1
+ vertex -39.1186 25.4589 -0.2
vertex -39.0227 25.0923 0
- vertex -39.0227 25.0923 -0.1
+ vertex -39.0227 25.0923 -0.2
endloop
endfacet
facet normal 0.996684 0.0813708 0
outer loop
vertex -39.1186 25.4589 0
- vertex -39.13 25.5984 -0.1
+ vertex -39.13 25.5984 -0.2
vertex -39.13 25.5984 0
endloop
endfacet
facet normal 0.996684 0.0813708 0
outer loop
- vertex -39.13 25.5984 -0.1
+ vertex -39.13 25.5984 -0.2
vertex -39.1186 25.4589 0
- vertex -39.1186 25.4589 -0.1
+ vertex -39.1186 25.4589 -0.2
endloop
endfacet
facet normal 0.993685 -0.112203 0
outer loop
vertex -39.13 25.5984 0
- vertex -39.1175 25.7085 -0.1
+ vertex -39.1175 25.7085 -0.2
vertex -39.1175 25.7085 0
endloop
endfacet
facet normal 0.993685 -0.112203 0
outer loop
- vertex -39.1175 25.7085 -0.1
+ vertex -39.1175 25.7085 -0.2
vertex -39.13 25.5984 0
- vertex -39.13 25.5984 -0.1
+ vertex -39.13 25.5984 -0.2
endloop
endfacet
facet normal 0.913337 -0.407205 0
outer loop
vertex -39.1175 25.7085 0
- vertex -39.0817 25.7888 -0.1
+ vertex -39.0817 25.7888 -0.2
vertex -39.0817 25.7888 0
endloop
endfacet
facet normal 0.913337 -0.407205 0
outer loop
- vertex -39.0817 25.7888 -0.1
+ vertex -39.0817 25.7888 -0.2
vertex -39.1175 25.7085 0
- vertex -39.1175 25.7085 -0.1
+ vertex -39.1175 25.7085 -0.2
endloop
endfacet
facet normal 0.651025 -0.759057 0
outer loop
- vertex -39.0817 25.7888 -0.1
+ vertex -39.0817 25.7888 -0.2
vertex -39.0229 25.8392 0
vertex -39.0817 25.7888 0
endloop
@@ -40455,13 +40455,13 @@ solid OpenSCAD_Model
facet normal 0.651025 -0.759057 0
outer loop
vertex -39.0229 25.8392 0
- vertex -39.0817 25.7888 -0.1
- vertex -39.0229 25.8392 -0.1
+ vertex -39.0817 25.7888 -0.2
+ vertex -39.0229 25.8392 -0.2
endloop
endfacet
facet normal 0.24215 -0.970239 0
outer loop
- vertex -39.0229 25.8392 -0.1
+ vertex -39.0229 25.8392 -0.2
vertex -38.9416 25.8595 0
vertex -39.0229 25.8392 0
endloop
@@ -40469,13 +40469,13 @@ solid OpenSCAD_Model
facet normal 0.24215 -0.970239 0
outer loop
vertex -38.9416 25.8595 0
- vertex -39.0229 25.8392 -0.1
- vertex -38.9416 25.8595 -0.1
+ vertex -39.0229 25.8392 -0.2
+ vertex -38.9416 25.8595 -0.2
endloop
endfacet
facet normal -0.0965024 -0.995333 0
outer loop
- vertex -38.9416 25.8595 -0.1
+ vertex -38.9416 25.8595 -0.2
vertex -38.8381 25.8495 0
vertex -38.9416 25.8595 0
endloop
@@ -40483,13 +40483,13 @@ solid OpenSCAD_Model
facet normal -0.0965024 -0.995333 -0
outer loop
vertex -38.8381 25.8495 0
- vertex -38.9416 25.8595 -0.1
- vertex -38.8381 25.8495 -0.1
+ vertex -38.9416 25.8595 -0.2
+ vertex -38.8381 25.8495 -0.2
endloop
endfacet
facet normal -0.308343 -0.951275 0
outer loop
- vertex -38.8381 25.8495 -0.1
+ vertex -38.8381 25.8495 -0.2
vertex -38.7129 25.8089 0
vertex -38.8381 25.8495 0
endloop
@@ -40497,13 +40497,13 @@ solid OpenSCAD_Model
facet normal -0.308343 -0.951275 -0
outer loop
vertex -38.7129 25.8089 0
- vertex -38.8381 25.8495 -0.1
- vertex -38.7129 25.8089 -0.1
+ vertex -38.8381 25.8495 -0.2
+ vertex -38.7129 25.8089 -0.2
endloop
endfacet
facet normal -0.437843 -0.899052 0
outer loop
- vertex -38.7129 25.8089 -0.1
+ vertex -38.7129 25.8089 -0.2
vertex -38.5664 25.7376 0
vertex -38.7129 25.8089 0
endloop
@@ -40511,13 +40511,13 @@ solid OpenSCAD_Model
facet normal -0.437843 -0.899052 -0
outer loop
vertex -38.5664 25.7376 0
- vertex -38.7129 25.8089 -0.1
- vertex -38.5664 25.7376 -0.1
+ vertex -38.7129 25.8089 -0.2
+ vertex -38.5664 25.7376 -0.2
endloop
endfacet
facet normal -0.553117 -0.833103 0
outer loop
- vertex -38.5664 25.7376 -0.1
+ vertex -38.5664 25.7376 -0.2
vertex -38.2113 25.5018 0
vertex -38.5664 25.7376 0
endloop
@@ -40525,13 +40525,13 @@ solid OpenSCAD_Model
facet normal -0.553117 -0.833103 -0
outer loop
vertex -38.2113 25.5018 0
- vertex -38.5664 25.7376 -0.1
- vertex -38.2113 25.5018 -0.1
+ vertex -38.5664 25.7376 -0.2
+ vertex -38.2113 25.5018 -0.2
endloop
endfacet
facet normal -0.638761 -0.769405 0
outer loop
- vertex -38.2113 25.5018 -0.1
+ vertex -38.2113 25.5018 -0.2
vertex -37.776 25.1404 0
vertex -38.2113 25.5018 0
endloop
@@ -40539,13 +40539,13 @@ solid OpenSCAD_Model
facet normal -0.638761 -0.769405 -0
outer loop
vertex -37.776 25.1404 0
- vertex -38.2113 25.5018 -0.1
- vertex -37.776 25.1404 -0.1
+ vertex -38.2113 25.5018 -0.2
+ vertex -37.776 25.1404 -0.2
endloop
endfacet
facet normal -0.64475 -0.764393 0
outer loop
- vertex -37.776 25.1404 -0.1
+ vertex -37.776 25.1404 -0.2
vertex -37.4147 24.8357 0
vertex -37.776 25.1404 0
endloop
@@ -40553,13 +40553,13 @@ solid OpenSCAD_Model
facet normal -0.64475 -0.764393 -0
outer loop
vertex -37.4147 24.8357 0
- vertex -37.776 25.1404 -0.1
- vertex -37.4147 24.8357 -0.1
+ vertex -37.776 25.1404 -0.2
+ vertex -37.4147 24.8357 -0.2
endloop
endfacet
facet normal -0.602189 -0.798353 0
outer loop
- vertex -37.4147 24.8357 -0.1
+ vertex -37.4147 24.8357 -0.2
vertex -37.0225 24.5398 0
vertex -37.4147 24.8357 0
endloop
@@ -40567,13 +40567,13 @@ solid OpenSCAD_Model
facet normal -0.602189 -0.798353 -0
outer loop
vertex -37.0225 24.5398 0
- vertex -37.4147 24.8357 -0.1
- vertex -37.0225 24.5398 -0.1
+ vertex -37.4147 24.8357 -0.2
+ vertex -37.0225 24.5398 -0.2
endloop
endfacet
facet normal -0.562472 -0.826816 0
outer loop
- vertex -37.0225 24.5398 -0.1
+ vertex -37.0225 24.5398 -0.2
vertex -36.6025 24.2541 0
vertex -37.0225 24.5398 0
endloop
@@ -40581,13 +40581,13 @@ solid OpenSCAD_Model
facet normal -0.562472 -0.826816 -0
outer loop
vertex -36.6025 24.2541 0
- vertex -37.0225 24.5398 -0.1
- vertex -36.6025 24.2541 -0.1
+ vertex -37.0225 24.5398 -0.2
+ vertex -36.6025 24.2541 -0.2
endloop
endfacet
facet normal -0.525102 -0.851039 0
outer loop
- vertex -36.6025 24.2541 -0.1
+ vertex -36.6025 24.2541 -0.2
vertex -36.1579 23.9798 0
vertex -36.6025 24.2541 0
endloop
@@ -40595,13 +40595,13 @@ solid OpenSCAD_Model
facet normal -0.525102 -0.851039 -0
outer loop
vertex -36.1579 23.9798 0
- vertex -36.6025 24.2541 -0.1
- vertex -36.1579 23.9798 -0.1
+ vertex -36.6025 24.2541 -0.2
+ vertex -36.1579 23.9798 -0.2
endloop
endfacet
facet normal -0.489575 -0.871961 0
outer loop
- vertex -36.1579 23.9798 -0.1
+ vertex -36.1579 23.9798 -0.2
vertex -35.6921 23.7183 0
vertex -36.1579 23.9798 0
endloop
@@ -40609,13 +40609,13 @@ solid OpenSCAD_Model
facet normal -0.489575 -0.871961 -0
outer loop
vertex -35.6921 23.7183 0
- vertex -36.1579 23.9798 -0.1
- vertex -35.6921 23.7183 -0.1
+ vertex -36.1579 23.9798 -0.2
+ vertex -35.6921 23.7183 -0.2
endloop
endfacet
facet normal -0.455389 -0.890292 0
outer loop
- vertex -35.6921 23.7183 -0.1
+ vertex -35.6921 23.7183 -0.2
vertex -35.2082 23.4707 0
vertex -35.6921 23.7183 0
endloop
@@ -40623,13 +40623,13 @@ solid OpenSCAD_Model
facet normal -0.455389 -0.890292 -0
outer loop
vertex -35.2082 23.4707 0
- vertex -35.6921 23.7183 -0.1
- vertex -35.2082 23.4707 -0.1
+ vertex -35.6921 23.7183 -0.2
+ vertex -35.2082 23.4707 -0.2
endloop
endfacet
facet normal -0.422055 -0.90657 0
outer loop
- vertex -35.2082 23.4707 -0.1
+ vertex -35.2082 23.4707 -0.2
vertex -34.7094 23.2385 0
vertex -35.2082 23.4707 0
endloop
@@ -40637,13 +40637,13 @@ solid OpenSCAD_Model
facet normal -0.422055 -0.90657 -0
outer loop
vertex -34.7094 23.2385 0
- vertex -35.2082 23.4707 -0.1
- vertex -34.7094 23.2385 -0.1
+ vertex -35.2082 23.4707 -0.2
+ vertex -34.7094 23.2385 -0.2
endloop
endfacet
facet normal -0.389101 -0.921195 0
outer loop
- vertex -34.7094 23.2385 -0.1
+ vertex -34.7094 23.2385 -0.2
vertex -34.199 23.023 0
vertex -34.7094 23.2385 0
endloop
@@ -40651,13 +40651,13 @@ solid OpenSCAD_Model
facet normal -0.389101 -0.921195 -0
outer loop
vertex -34.199 23.023 0
- vertex -34.7094 23.2385 -0.1
- vertex -34.199 23.023 -0.1
+ vertex -34.7094 23.2385 -0.2
+ vertex -34.199 23.023 -0.2
endloop
endfacet
facet normal -0.356052 -0.934466 0
outer loop
- vertex -34.199 23.023 -0.1
+ vertex -34.199 23.023 -0.2
vertex -33.6803 22.8253 0
vertex -34.199 23.023 0
endloop
@@ -40665,13 +40665,13 @@ solid OpenSCAD_Model
facet normal -0.356052 -0.934466 -0
outer loop
vertex -33.6803 22.8253 0
- vertex -34.199 23.023 -0.1
- vertex -33.6803 22.8253 -0.1
+ vertex -34.199 23.023 -0.2
+ vertex -33.6803 22.8253 -0.2
endloop
endfacet
facet normal -0.3224 -0.946604 0
outer loop
- vertex -33.6803 22.8253 -0.1
+ vertex -33.6803 22.8253 -0.2
vertex -33.1564 22.6469 0
vertex -33.6803 22.8253 0
endloop
@@ -40679,13 +40679,13 @@ solid OpenSCAD_Model
facet normal -0.3224 -0.946604 -0
outer loop
vertex -33.1564 22.6469 0
- vertex -33.6803 22.8253 -0.1
- vertex -33.1564 22.6469 -0.1
+ vertex -33.6803 22.8253 -0.2
+ vertex -33.1564 22.6469 -0.2
endloop
endfacet
facet normal -0.287637 -0.95774 0
outer loop
- vertex -33.1564 22.6469 -0.1
+ vertex -33.1564 22.6469 -0.2
vertex -32.6306 22.489 0
vertex -33.1564 22.6469 0
endloop
@@ -40693,13 +40693,13 @@ solid OpenSCAD_Model
facet normal -0.287637 -0.95774 -0
outer loop
vertex -32.6306 22.489 0
- vertex -33.1564 22.6469 -0.1
- vertex -32.6306 22.489 -0.1
+ vertex -33.1564 22.6469 -0.2
+ vertex -32.6306 22.489 -0.2
endloop
endfacet
facet normal -0.251171 -0.967943 0
outer loop
- vertex -32.6306 22.489 -0.1
+ vertex -32.6306 22.489 -0.2
vertex -32.1061 22.3529 0
vertex -32.6306 22.489 0
endloop
@@ -40707,13 +40707,13 @@ solid OpenSCAD_Model
facet normal -0.251171 -0.967943 -0
outer loop
vertex -32.1061 22.3529 0
- vertex -32.6306 22.489 -0.1
- vertex -32.1061 22.3529 -0.1
+ vertex -32.6306 22.489 -0.2
+ vertex -32.1061 22.3529 -0.2
endloop
endfacet
facet normal -0.212348 -0.977194 0
outer loop
- vertex -32.1061 22.3529 -0.1
+ vertex -32.1061 22.3529 -0.2
vertex -31.5861 22.2399 0
vertex -32.1061 22.3529 0
endloop
@@ -40721,13 +40721,13 @@ solid OpenSCAD_Model
facet normal -0.212348 -0.977194 -0
outer loop
vertex -31.5861 22.2399 0
- vertex -32.1061 22.3529 -0.1
- vertex -31.5861 22.2399 -0.1
+ vertex -32.1061 22.3529 -0.2
+ vertex -31.5861 22.2399 -0.2
endloop
endfacet
facet normal -0.170418 -0.985372 0
outer loop
- vertex -31.5861 22.2399 -0.1
+ vertex -31.5861 22.2399 -0.2
vertex -31.074 22.1513 0
vertex -31.5861 22.2399 0
endloop
@@ -40735,13 +40735,13 @@ solid OpenSCAD_Model
facet normal -0.170418 -0.985372 -0
outer loop
vertex -31.074 22.1513 0
- vertex -31.5861 22.2399 -0.1
- vertex -31.074 22.1513 -0.1
+ vertex -31.5861 22.2399 -0.2
+ vertex -31.074 22.1513 -0.2
endloop
endfacet
facet normal -0.124476 -0.992223 0
outer loop
- vertex -31.074 22.1513 -0.1
+ vertex -31.074 22.1513 -0.2
vertex -30.5728 22.0884 0
vertex -31.074 22.1513 0
endloop
@@ -40749,13 +40749,13 @@ solid OpenSCAD_Model
facet normal -0.124476 -0.992223 -0
outer loop
vertex -30.5728 22.0884 0
- vertex -31.074 22.1513 -0.1
- vertex -30.5728 22.0884 -0.1
+ vertex -31.074 22.1513 -0.2
+ vertex -30.5728 22.0884 -0.2
endloop
endfacet
facet normal -0.0734593 -0.997298 0
outer loop
- vertex -30.5728 22.0884 -0.1
+ vertex -30.5728 22.0884 -0.2
vertex -30.0859 22.0525 0
vertex -30.5728 22.0884 0
endloop
@@ -40763,13 +40763,13 @@ solid OpenSCAD_Model
facet normal -0.0734593 -0.997298 -0
outer loop
vertex -30.0859 22.0525 0
- vertex -30.5728 22.0884 -0.1
- vertex -30.0859 22.0525 -0.1
+ vertex -30.5728 22.0884 -0.2
+ vertex -30.0859 22.0525 -0.2
endloop
endfacet
facet normal -0.0457633 -0.998952 0
outer loop
- vertex -30.0859 22.0525 -0.1
+ vertex -30.0859 22.0525 -0.2
vertex -28.3394 21.9725 0
vertex -30.0859 22.0525 0
endloop
@@ -40777,13 +40777,13 @@ solid OpenSCAD_Model
facet normal -0.0457633 -0.998952 -0
outer loop
vertex -28.3394 21.9725 0
- vertex -30.0859 22.0525 -0.1
- vertex -28.3394 21.9725 -0.1
+ vertex -30.0859 22.0525 -0.2
+ vertex -28.3394 21.9725 -0.2
endloop
endfacet
facet normal 0.491953 0.870622 -0
outer loop
- vertex -28.3394 21.9725 -0.1
+ vertex -28.3394 21.9725 -0.2
vertex -29.0186 22.3563 0
vertex -28.3394 21.9725 0
endloop
@@ -40791,13 +40791,13 @@ solid OpenSCAD_Model
facet normal 0.491953 0.870622 0
outer loop
vertex -29.0186 22.3563 0
- vertex -28.3394 21.9725 -0.1
- vertex -29.0186 22.3563 -0.1
+ vertex -28.3394 21.9725 -0.2
+ vertex -29.0186 22.3563 -0.2
endloop
endfacet
facet normal 0.506614 0.862173 -0
outer loop
- vertex -29.0186 22.3563 -0.1
+ vertex -29.0186 22.3563 -0.2
vertex -29.4321 22.5993 0
vertex -29.0186 22.3563 0
endloop
@@ -40805,13 +40805,13 @@ solid OpenSCAD_Model
facet normal 0.506614 0.862173 0
outer loop
vertex -29.4321 22.5993 0
- vertex -29.0186 22.3563 -0.1
- vertex -29.4321 22.5993 -0.1
+ vertex -29.0186 22.3563 -0.2
+ vertex -29.4321 22.5993 -0.2
endloop
endfacet
facet normal 0.54186 0.840469 -0
outer loop
- vertex -29.4321 22.5993 -0.1
+ vertex -29.4321 22.5993 -0.2
vertex -29.7937 22.8325 0
vertex -29.4321 22.5993 0
endloop
@@ -40819,13 +40819,13 @@ solid OpenSCAD_Model
facet normal 0.54186 0.840469 0
outer loop
vertex -29.7937 22.8325 0
- vertex -29.4321 22.5993 -0.1
- vertex -29.7937 22.8325 -0.1
+ vertex -29.4321 22.5993 -0.2
+ vertex -29.7937 22.8325 -0.2
endloop
endfacet
facet normal 0.585975 0.810329 -0
outer loop
- vertex -29.7937 22.8325 -0.1
+ vertex -29.7937 22.8325 -0.2
vertex -30.1071 23.0591 0
vertex -29.7937 22.8325 0
endloop
@@ -40833,13 +40833,13 @@ solid OpenSCAD_Model
facet normal 0.585975 0.810329 0
outer loop
vertex -30.1071 23.0591 0
- vertex -29.7937 22.8325 -0.1
- vertex -30.1071 23.0591 -0.1
+ vertex -29.7937 22.8325 -0.2
+ vertex -30.1071 23.0591 -0.2
endloop
endfacet
facet normal 0.639127 0.769101 -0
outer loop
- vertex -30.1071 23.0591 -0.1
+ vertex -30.1071 23.0591 -0.2
vertex -30.3761 23.2826 0
vertex -30.1071 23.0591 0
endloop
@@ -40847,13 +40847,13 @@ solid OpenSCAD_Model
facet normal 0.639127 0.769101 0
outer loop
vertex -30.3761 23.2826 0
- vertex -30.1071 23.0591 -0.1
- vertex -30.3761 23.2826 -0.1
+ vertex -30.1071 23.0591 -0.2
+ vertex -30.3761 23.2826 -0.2
endloop
endfacet
facet normal 0.700019 0.714124 -0
outer loop
- vertex -30.3761 23.2826 -0.1
+ vertex -30.3761 23.2826 -0.2
vertex -30.6044 23.5064 0
vertex -30.3761 23.2826 0
endloop
@@ -40861,125 +40861,125 @@ solid OpenSCAD_Model
facet normal 0.700019 0.714124 0
outer loop
vertex -30.6044 23.5064 0
- vertex -30.3761 23.2826 -0.1
- vertex -30.6044 23.5064 -0.1
+ vertex -30.3761 23.2826 -0.2
+ vertex -30.6044 23.5064 -0.2
endloop
endfacet
facet normal 0.765169 0.643829 0
outer loop
vertex -30.6044 23.5064 0
- vertex -30.7957 23.7338 -0.1
+ vertex -30.7957 23.7338 -0.2
vertex -30.7957 23.7338 0
endloop
endfacet
facet normal 0.765169 0.643829 0
outer loop
- vertex -30.7957 23.7338 -0.1
+ vertex -30.7957 23.7338 -0.2
vertex -30.6044 23.5064 0
- vertex -30.6044 23.5064 -0.1
+ vertex -30.6044 23.5064 -0.2
endloop
endfacet
facet normal 0.828969 0.559295 0
outer loop
vertex -30.7957 23.7338 0
- vertex -30.9539 23.9682 -0.1
+ vertex -30.9539 23.9682 -0.2
vertex -30.9539 23.9682 0
endloop
endfacet
facet normal 0.828969 0.559295 0
outer loop
- vertex -30.9539 23.9682 -0.1
+ vertex -30.9539 23.9682 -0.2
vertex -30.7957 23.7338 0
- vertex -30.7957 23.7338 -0.1
+ vertex -30.7957 23.7338 -0.2
endloop
endfacet
facet normal 0.885091 0.465418 0
outer loop
vertex -30.9539 23.9682 0
- vertex -31.0826 24.213 -0.1
+ vertex -31.0826 24.213 -0.2
vertex -31.0826 24.213 0
endloop
endfacet
facet normal 0.885091 0.465418 0
outer loop
- vertex -31.0826 24.213 -0.1
+ vertex -31.0826 24.213 -0.2
vertex -30.9539 23.9682 0
- vertex -30.9539 23.9682 -0.1
+ vertex -30.9539 23.9682 -0.2
endloop
endfacet
facet normal 0.929158 0.369682 0
outer loop
vertex -31.0826 24.213 0
- vertex -31.2103 24.5339 -0.1
+ vertex -31.2103 24.5339 -0.2
vertex -31.2103 24.5339 0
endloop
endfacet
facet normal 0.929158 0.369682 0
outer loop
- vertex -31.2103 24.5339 -0.1
+ vertex -31.2103 24.5339 -0.2
vertex -31.0826 24.213 0
- vertex -31.0826 24.213 -0.1
+ vertex -31.0826 24.213 -0.2
endloop
endfacet
facet normal 0.975453 0.220208 0
outer loop
vertex -31.2103 24.5339 0
- vertex -31.2656 24.779 -0.1
+ vertex -31.2656 24.779 -0.2
vertex -31.2656 24.779 0
endloop
endfacet
facet normal 0.975453 0.220208 0
outer loop
- vertex -31.2656 24.779 -0.1
+ vertex -31.2656 24.779 -0.2
vertex -31.2103 24.5339 0
- vertex -31.2103 24.5339 -0.1
+ vertex -31.2103 24.5339 -0.2
endloop
endfacet
facet normal 0.99992 0.0126114 0
outer loop
vertex -31.2656 24.779 0
- vertex -31.2668 24.8727 -0.1
+ vertex -31.2668 24.8727 -0.2
vertex -31.2668 24.8727 0
endloop
endfacet
facet normal 0.99992 0.0126114 0
outer loop
- vertex -31.2668 24.8727 -0.1
+ vertex -31.2668 24.8727 -0.2
vertex -31.2656 24.779 0
- vertex -31.2656 24.779 -0.1
+ vertex -31.2656 24.779 -0.2
endloop
endfacet
facet normal 0.977346 -0.211648 0
outer loop
vertex -31.2668 24.8727 0
- vertex -31.2507 24.9472 -0.1
+ vertex -31.2507 24.9472 -0.2
vertex -31.2507 24.9472 0
endloop
endfacet
facet normal 0.977346 -0.211648 0
outer loop
- vertex -31.2507 24.9472 -0.1
+ vertex -31.2507 24.9472 -0.2
vertex -31.2668 24.8727 0
- vertex -31.2668 24.8727 -0.1
+ vertex -31.2668 24.8727 -0.2
endloop
endfacet
facet normal 0.856395 -0.516321 0
outer loop
vertex -31.2507 24.9472 0
- vertex -31.2175 25.0021 -0.1
+ vertex -31.2175 25.0021 -0.2
vertex -31.2175 25.0021 0
endloop
endfacet
facet normal 0.856395 -0.516321 0
outer loop
- vertex -31.2175 25.0021 -0.1
+ vertex -31.2175 25.0021 -0.2
vertex -31.2507 24.9472 0
- vertex -31.2507 24.9472 -0.1
+ vertex -31.2507 24.9472 -0.2
endloop
endfacet
facet normal 0.578733 -0.815517 0
outer loop
- vertex -31.2175 25.0021 -0.1
+ vertex -31.2175 25.0021 -0.2
vertex -31.1676 25.0376 0
vertex -31.2175 25.0021 0
endloop
@@ -40987,13 +40987,13 @@ solid OpenSCAD_Model
facet normal 0.578733 -0.815517 0
outer loop
vertex -31.1676 25.0376 0
- vertex -31.2175 25.0021 -0.1
- vertex -31.1676 25.0376 -0.1
+ vertex -31.2175 25.0021 -0.2
+ vertex -31.1676 25.0376 -0.2
endloop
endfacet
facet normal 0.230651 -0.973037 0
outer loop
- vertex -31.1676 25.0376 -0.1
+ vertex -31.1676 25.0376 -0.2
vertex -31.1012 25.0533 0
vertex -31.1676 25.0376 0
endloop
@@ -41001,13 +41001,13 @@ solid OpenSCAD_Model
facet normal 0.230651 -0.973037 0
outer loop
vertex -31.1012 25.0533 0
- vertex -31.1676 25.0376 -0.1
- vertex -31.1012 25.0533 -0.1
+ vertex -31.1676 25.0376 -0.2
+ vertex -31.1012 25.0533 -0.2
endloop
endfacet
facet normal -0.0489514 -0.998801 0
outer loop
- vertex -31.1012 25.0533 -0.1
+ vertex -31.1012 25.0533 -0.2
vertex -31.0185 25.0493 0
vertex -31.1012 25.0533 0
endloop
@@ -41015,13 +41015,13 @@ solid OpenSCAD_Model
facet normal -0.0489514 -0.998801 -0
outer loop
vertex -31.0185 25.0493 0
- vertex -31.1012 25.0533 -0.1
- vertex -31.0185 25.0493 -0.1
+ vertex -31.1012 25.0533 -0.2
+ vertex -31.0185 25.0493 -0.2
endloop
endfacet
facet normal -0.303972 -0.952681 0
outer loop
- vertex -31.0185 25.0493 -0.1
+ vertex -31.0185 25.0493 -0.2
vertex -30.8055 24.9813 0
vertex -31.0185 25.0493 0
endloop
@@ -41029,13 +41029,13 @@ solid OpenSCAD_Model
facet normal -0.303972 -0.952681 -0
outer loop
vertex -30.8055 24.9813 0
- vertex -31.0185 25.0493 -0.1
- vertex -30.8055 24.9813 -0.1
+ vertex -31.0185 25.0493 -0.2
+ vertex -30.8055 24.9813 -0.2
endloop
endfacet
facet normal -0.475595 -0.879664 0
outer loop
- vertex -30.8055 24.9813 -0.1
+ vertex -30.8055 24.9813 -0.2
vertex -30.5308 24.8328 0
vertex -30.8055 24.9813 0
endloop
@@ -41043,13 +41043,13 @@ solid OpenSCAD_Model
facet normal -0.475595 -0.879664 -0
outer loop
vertex -30.5308 24.8328 0
- vertex -30.8055 24.9813 -0.1
- vertex -30.5308 24.8328 -0.1
+ vertex -30.8055 24.9813 -0.2
+ vertex -30.5308 24.8328 -0.2
endloop
endfacet
facet normal -0.566807 -0.82385 0
outer loop
- vertex -30.5308 24.8328 -0.1
+ vertex -30.5308 24.8328 -0.2
vertex -30.1964 24.6027 0
vertex -30.5308 24.8328 0
endloop
@@ -41057,13 +41057,13 @@ solid OpenSCAD_Model
facet normal -0.566807 -0.82385 -0
outer loop
vertex -30.1964 24.6027 0
- vertex -30.5308 24.8328 -0.1
- vertex -30.1964 24.6027 -0.1
+ vertex -30.5308 24.8328 -0.2
+ vertex -30.1964 24.6027 -0.2
endloop
endfacet
facet normal -0.552424 -0.833564 0
outer loop
- vertex -30.1964 24.6027 -0.1
+ vertex -30.1964 24.6027 -0.2
vertex -29.8023 24.3416 0
vertex -30.1964 24.6027 0
endloop
@@ -41071,13 +41071,13 @@ solid OpenSCAD_Model
facet normal -0.552424 -0.833564 -0
outer loop
vertex -29.8023 24.3416 0
- vertex -30.1964 24.6027 -0.1
- vertex -29.8023 24.3416 -0.1
+ vertex -30.1964 24.6027 -0.2
+ vertex -29.8023 24.3416 -0.2
endloop
endfacet
facet normal -0.451398 -0.892323 0
outer loop
- vertex -29.8023 24.3416 -0.1
+ vertex -29.8023 24.3416 -0.2
vertex -29.384 24.13 0
vertex -29.8023 24.3416 0
endloop
@@ -41085,13 +41085,13 @@ solid OpenSCAD_Model
facet normal -0.451398 -0.892323 -0
outer loop
vertex -29.384 24.13 0
- vertex -29.8023 24.3416 -0.1
- vertex -29.384 24.13 -0.1
+ vertex -29.8023 24.3416 -0.2
+ vertex -29.384 24.13 -0.2
endloop
endfacet
facet normal -0.34198 -0.939707 0
outer loop
- vertex -29.384 24.13 -0.1
+ vertex -29.384 24.13 -0.2
vertex -28.9359 23.9669 0
vertex -29.384 24.13 0
endloop
@@ -41099,13 +41099,13 @@ solid OpenSCAD_Model
facet normal -0.34198 -0.939707 -0
outer loop
vertex -28.9359 23.9669 0
- vertex -29.384 24.13 -0.1
- vertex -28.9359 23.9669 -0.1
+ vertex -29.384 24.13 -0.2
+ vertex -28.9359 23.9669 -0.2
endloop
endfacet
facet normal -0.232476 -0.972602 0
outer loop
- vertex -28.9359 23.9669 -0.1
+ vertex -28.9359 23.9669 -0.2
vertex -28.4524 23.8513 0
vertex -28.9359 23.9669 0
endloop
@@ -41113,13 +41113,13 @@ solid OpenSCAD_Model
facet normal -0.232476 -0.972602 -0
outer loop
vertex -28.4524 23.8513 0
- vertex -28.9359 23.9669 -0.1
- vertex -28.4524 23.8513 -0.1
+ vertex -28.9359 23.9669 -0.2
+ vertex -28.4524 23.8513 -0.2
endloop
endfacet
facet normal -0.130593 -0.991436 0
outer loop
- vertex -28.4524 23.8513 -0.1
+ vertex -28.4524 23.8513 -0.2
vertex -27.9279 23.7822 0
vertex -28.4524 23.8513 0
endloop
@@ -41127,13 +41127,13 @@ solid OpenSCAD_Model
facet normal -0.130593 -0.991436 -0
outer loop
vertex -27.9279 23.7822 0
- vertex -28.4524 23.8513 -0.1
- vertex -27.9279 23.7822 -0.1
+ vertex -28.4524 23.8513 -0.2
+ vertex -27.9279 23.7822 -0.2
endloop
endfacet
facet normal -0.0413274 -0.999146 0
outer loop
- vertex -27.9279 23.7822 -0.1
+ vertex -27.9279 23.7822 -0.2
vertex -27.3569 23.7586 0
vertex -27.9279 23.7822 0
endloop
@@ -41141,13 +41141,13 @@ solid OpenSCAD_Model
facet normal -0.0413274 -0.999146 -0
outer loop
vertex -27.3569 23.7586 0
- vertex -27.9279 23.7822 -0.1
- vertex -27.3569 23.7586 -0.1
+ vertex -27.9279 23.7822 -0.2
+ vertex -27.3569 23.7586 -0.2
endloop
endfacet
facet normal 0.0333972 -0.999442 0
outer loop
- vertex -27.3569 23.7586 -0.1
+ vertex -27.3569 23.7586 -0.2
vertex -26.7338 23.7794 0
vertex -27.3569 23.7586 0
endloop
@@ -41155,13 +41155,13 @@ solid OpenSCAD_Model
facet normal 0.0333972 -0.999442 0
outer loop
vertex -26.7338 23.7794 0
- vertex -27.3569 23.7586 -0.1
- vertex -26.7338 23.7794 -0.1
+ vertex -27.3569 23.7586 -0.2
+ vertex -26.7338 23.7794 -0.2
endloop
endfacet
facet normal 0.0939488 -0.995577 0
outer loop
- vertex -26.7338 23.7794 -0.1
+ vertex -26.7338 23.7794 -0.2
vertex -26.053 23.8437 0
vertex -26.7338 23.7794 0
endloop
@@ -41169,13 +41169,13 @@ solid OpenSCAD_Model
facet normal 0.0939488 -0.995577 0
outer loop
vertex -26.053 23.8437 0
- vertex -26.7338 23.7794 -0.1
- vertex -26.053 23.8437 -0.1
+ vertex -26.7338 23.7794 -0.2
+ vertex -26.053 23.8437 -0.2
endloop
endfacet
facet normal 0.119464 -0.992839 0
outer loop
- vertex -26.053 23.8437 -0.1
+ vertex -26.053 23.8437 -0.2
vertex -24.6523 24.0122 0
vertex -26.053 23.8437 0
endloop
@@ -41183,13 +41183,13 @@ solid OpenSCAD_Model
facet normal 0.119464 -0.992839 0
outer loop
vertex -24.6523 24.0122 0
- vertex -26.053 23.8437 -0.1
- vertex -24.6523 24.0122 -0.1
+ vertex -26.053 23.8437 -0.2
+ vertex -24.6523 24.0122 -0.2
endloop
endfacet
facet normal 0.193693 0.981062 -0
outer loop
- vertex -24.6523 24.0122 -0.1
+ vertex -24.6523 24.0122 -0.2
vertex -26.0107 24.2804 0
vertex -24.6523 24.0122 0
endloop
@@ -41197,13 +41197,13 @@ solid OpenSCAD_Model
facet normal 0.193693 0.981062 0
outer loop
vertex -26.0107 24.2804 0
- vertex -24.6523 24.0122 -0.1
- vertex -26.0107 24.2804 -0.1
+ vertex -24.6523 24.0122 -0.2
+ vertex -26.0107 24.2804 -0.2
endloop
endfacet
facet normal 0.214134 0.976804 -0
outer loop
- vertex -26.0107 24.2804 -0.1
+ vertex -26.0107 24.2804 -0.2
vertex -26.5818 24.4056 0
vertex -26.0107 24.2804 0
endloop
@@ -41211,13 +41211,13 @@ solid OpenSCAD_Model
facet normal 0.214134 0.976804 0
outer loop
vertex -26.5818 24.4056 0
- vertex -26.0107 24.2804 -0.1
- vertex -26.5818 24.4056 -0.1
+ vertex -26.0107 24.2804 -0.2
+ vertex -26.5818 24.4056 -0.2
endloop
endfacet
facet normal 0.258173 0.966099 -0
outer loop
- vertex -26.5818 24.4056 -0.1
+ vertex -26.5818 24.4056 -0.2
vertex -27.1227 24.5501 0
vertex -26.5818 24.4056 0
endloop
@@ -41225,13 +41225,13 @@ solid OpenSCAD_Model
facet normal 0.258173 0.966099 0
outer loop
vertex -27.1227 24.5501 0
- vertex -26.5818 24.4056 -0.1
- vertex -27.1227 24.5501 -0.1
+ vertex -26.5818 24.4056 -0.2
+ vertex -27.1227 24.5501 -0.2
endloop
endfacet
facet normal 0.306051 0.952015 -0
outer loop
- vertex -27.1227 24.5501 -0.1
+ vertex -27.1227 24.5501 -0.2
vertex -27.636 24.7152 0
vertex -27.1227 24.5501 0
endloop
@@ -41239,13 +41239,13 @@ solid OpenSCAD_Model
facet normal 0.306051 0.952015 0
outer loop
vertex -27.636 24.7152 0
- vertex -27.1227 24.5501 -0.1
- vertex -27.636 24.7152 -0.1
+ vertex -27.1227 24.5501 -0.2
+ vertex -27.636 24.7152 -0.2
endloop
endfacet
facet normal 0.356888 0.934147 -0
outer loop
- vertex -27.636 24.7152 -0.1
+ vertex -27.636 24.7152 -0.2
vertex -28.1248 24.9019 0
vertex -27.636 24.7152 0
endloop
@@ -41253,13 +41253,13 @@ solid OpenSCAD_Model
facet normal 0.356888 0.934147 0
outer loop
vertex -28.1248 24.9019 0
- vertex -27.636 24.7152 -0.1
- vertex -28.1248 24.9019 -0.1
+ vertex -27.636 24.7152 -0.2
+ vertex -28.1248 24.9019 -0.2
endloop
endfacet
facet normal 0.409468 0.912325 -0
outer loop
- vertex -28.1248 24.9019 -0.1
+ vertex -28.1248 24.9019 -0.2
vertex -28.5919 25.1115 0
vertex -28.1248 24.9019 0
endloop
@@ -41267,13 +41267,13 @@ solid OpenSCAD_Model
facet normal 0.409468 0.912325 0
outer loop
vertex -28.5919 25.1115 0
- vertex -28.1248 24.9019 -0.1
- vertex -28.5919 25.1115 -0.1
+ vertex -28.1248 24.9019 -0.2
+ vertex -28.5919 25.1115 -0.2
endloop
endfacet
facet normal 0.462329 0.886708 -0
outer loop
- vertex -28.5919 25.1115 -0.1
+ vertex -28.5919 25.1115 -0.2
vertex -29.0402 25.3453 0
vertex -28.5919 25.1115 0
endloop
@@ -41281,13 +41281,13 @@ solid OpenSCAD_Model
facet normal 0.462329 0.886708 0
outer loop
vertex -29.0402 25.3453 0
- vertex -28.5919 25.1115 -0.1
- vertex -29.0402 25.3453 -0.1
+ vertex -28.5919 25.1115 -0.2
+ vertex -29.0402 25.3453 -0.2
endloop
endfacet
facet normal 0.51393 0.857832 -0
outer loop
- vertex -29.0402 25.3453 -0.1
+ vertex -29.0402 25.3453 -0.2
vertex -29.4725 25.6043 0
vertex -29.0402 25.3453 0
endloop
@@ -41295,13 +41295,13 @@ solid OpenSCAD_Model
facet normal 0.51393 0.857832 0
outer loop
vertex -29.4725 25.6043 0
- vertex -29.0402 25.3453 -0.1
- vertex -29.4725 25.6043 -0.1
+ vertex -29.0402 25.3453 -0.2
+ vertex -29.4725 25.6043 -0.2
endloop
endfacet
facet normal 0.562822 0.826578 -0
outer loop
- vertex -29.4725 25.6043 -0.1
+ vertex -29.4725 25.6043 -0.2
vertex -29.8918 25.8898 0
vertex -29.4725 25.6043 0
endloop
@@ -41309,13 +41309,13 @@ solid OpenSCAD_Model
facet normal 0.562822 0.826578 0
outer loop
vertex -29.8918 25.8898 0
- vertex -29.4725 25.6043 -0.1
- vertex -29.8918 25.8898 -0.1
+ vertex -29.4725 25.6043 -0.2
+ vertex -29.8918 25.8898 -0.2
endloop
endfacet
facet normal 0.607723 0.794149 -0
outer loop
- vertex -29.8918 25.8898 -0.1
+ vertex -29.8918 25.8898 -0.2
vertex -30.6514 26.471 0
vertex -29.8918 25.8898 0
endloop
@@ -41323,13 +41323,13 @@ solid OpenSCAD_Model
facet normal 0.607723 0.794149 0
outer loop
vertex -30.6514 26.471 0
- vertex -29.8918 25.8898 -0.1
- vertex -30.6514 26.471 -0.1
+ vertex -29.8918 25.8898 -0.2
+ vertex -30.6514 26.471 -0.2
endloop
endfacet
facet normal 0.662833 0.748767 -0
outer loop
- vertex -30.6514 26.471 -0.1
+ vertex -30.6514 26.471 -0.2
vertex -30.9143 26.7038 0
vertex -30.6514 26.471 0
endloop
@@ -41337,83 +41337,83 @@ solid OpenSCAD_Model
facet normal 0.662833 0.748767 0
outer loop
vertex -30.9143 26.7038 0
- vertex -30.6514 26.471 -0.1
- vertex -30.9143 26.7038 -0.1
+ vertex -30.6514 26.471 -0.2
+ vertex -30.9143 26.7038 -0.2
endloop
endfacet
facet normal 0.725171 0.688569 0
outer loop
vertex -30.9143 26.7038 0
- vertex -31.1043 26.9038 -0.1
+ vertex -31.1043 26.9038 -0.2
vertex -31.1043 26.9038 0
endloop
endfacet
facet normal 0.725171 0.688569 0
outer loop
- vertex -31.1043 26.9038 -0.1
+ vertex -31.1043 26.9038 -0.2
vertex -30.9143 26.7038 0
- vertex -30.9143 26.7038 -0.1
+ vertex -30.9143 26.7038 -0.2
endloop
endfacet
facet normal 0.818345 0.574727 0
outer loop
vertex -31.1043 26.9038 0
- vertex -31.2248 27.0754 -0.1
+ vertex -31.2248 27.0754 -0.2
vertex -31.2248 27.0754 0
endloop
endfacet
facet normal 0.818345 0.574727 0
outer loop
- vertex -31.2248 27.0754 -0.1
+ vertex -31.2248 27.0754 -0.2
vertex -31.1043 26.9038 0
- vertex -31.1043 26.9038 -0.1
+ vertex -31.1043 26.9038 -0.2
endloop
endfacet
facet normal 0.937593 0.347734 0
outer loop
vertex -31.2248 27.0754 0
- vertex -31.2795 27.2229 -0.1
+ vertex -31.2795 27.2229 -0.2
vertex -31.2795 27.2229 0
endloop
endfacet
facet normal 0.937593 0.347734 0
outer loop
- vertex -31.2795 27.2229 -0.1
+ vertex -31.2795 27.2229 -0.2
vertex -31.2248 27.0754 0
- vertex -31.2248 27.0754 -0.1
+ vertex -31.2248 27.0754 -0.2
endloop
endfacet
facet normal 0.99829 -0.0584589 0
outer loop
vertex -31.2795 27.2229 0
- vertex -31.272 27.3506 -0.1
+ vertex -31.272 27.3506 -0.2
vertex -31.272 27.3506 0
endloop
endfacet
facet normal 0.99829 -0.0584589 0
outer loop
- vertex -31.272 27.3506 -0.1
+ vertex -31.272 27.3506 -0.2
vertex -31.2795 27.2229 0
- vertex -31.2795 27.2229 -0.1
+ vertex -31.2795 27.2229 -0.2
endloop
endfacet
facet normal 0.861994 -0.506918 0
outer loop
vertex -31.272 27.3506 0
- vertex -31.2059 27.4629 -0.1
+ vertex -31.2059 27.4629 -0.2
vertex -31.2059 27.4629 0
endloop
endfacet
facet normal 0.861994 -0.506918 0
outer loop
- vertex -31.2059 27.4629 -0.1
+ vertex -31.2059 27.4629 -0.2
vertex -31.272 27.3506 0
- vertex -31.272 27.3506 -0.1
+ vertex -31.272 27.3506 -0.2
endloop
endfacet
facet normal 0.566536 -0.824037 0
outer loop
- vertex -31.2059 27.4629 -0.1
+ vertex -31.2059 27.4629 -0.2
vertex -31.1289 27.5158 0
vertex -31.2059 27.4629 0
endloop
@@ -41421,13 +41421,13 @@ solid OpenSCAD_Model
facet normal 0.566536 -0.824037 0
outer loop
vertex -31.1289 27.5158 0
- vertex -31.2059 27.4629 -0.1
- vertex -31.1289 27.5158 -0.1
+ vertex -31.2059 27.4629 -0.2
+ vertex -31.1289 27.5158 -0.2
endloop
endfacet
facet normal 0.198224 -0.980157 0
outer loop
- vertex -31.1289 27.5158 -0.1
+ vertex -31.1289 27.5158 -0.2
vertex -31.0145 27.539 0
vertex -31.1289 27.5158 0
endloop
@@ -41435,13 +41435,13 @@ solid OpenSCAD_Model
facet normal 0.198224 -0.980157 0
outer loop
vertex -31.0145 27.539 0
- vertex -31.1289 27.5158 -0.1
- vertex -31.0145 27.539 -0.1
+ vertex -31.1289 27.5158 -0.2
+ vertex -31.0145 27.539 -0.2
endloop
endfacet
facet normal -0.0498903 -0.998755 0
outer loop
- vertex -31.0145 27.539 -0.1
+ vertex -31.0145 27.539 -0.2
vertex -30.8579 27.5312 0
vertex -31.0145 27.539 0
endloop
@@ -41449,13 +41449,13 @@ solid OpenSCAD_Model
facet normal -0.0498903 -0.998755 -0
outer loop
vertex -30.8579 27.5312 0
- vertex -31.0145 27.539 -0.1
- vertex -30.8579 27.5312 -0.1
+ vertex -31.0145 27.539 -0.2
+ vertex -30.8579 27.5312 -0.2
endloop
endfacet
facet normal -0.192665 -0.981265 0
outer loop
- vertex -30.8579 27.5312 -0.1
+ vertex -30.8579 27.5312 -0.2
vertex -30.6543 27.4912 0
vertex -30.8579 27.5312 0
endloop
@@ -41463,13 +41463,13 @@ solid OpenSCAD_Model
facet normal -0.192665 -0.981265 -0
outer loop
vertex -30.6543 27.4912 0
- vertex -30.8579 27.5312 -0.1
- vertex -30.6543 27.4912 -0.1
+ vertex -30.8579 27.5312 -0.2
+ vertex -30.6543 27.4912 -0.2
endloop
endfacet
facet normal -0.304248 -0.952593 0
outer loop
- vertex -30.6543 27.4912 -0.1
+ vertex -30.6543 27.4912 -0.2
vertex -30.0875 27.3102 0
vertex -30.6543 27.4912 0
endloop
@@ -41477,13 +41477,13 @@ solid OpenSCAD_Model
facet normal -0.304248 -0.952593 -0
outer loop
vertex -30.0875 27.3102 0
- vertex -30.6543 27.4912 -0.1
- vertex -30.0875 27.3102 -0.1
+ vertex -30.6543 27.4912 -0.2
+ vertex -30.0875 27.3102 -0.2
endloop
endfacet
facet normal -0.370492 -0.928836 0
outer loop
- vertex -30.0875 27.3102 -0.1
+ vertex -30.0875 27.3102 -0.2
vertex -29.2762 26.9865 0
vertex -30.0875 27.3102 0
endloop
@@ -41491,13 +41491,13 @@ solid OpenSCAD_Model
facet normal -0.370492 -0.928836 -0
outer loop
vertex -29.2762 26.9865 0
- vertex -30.0875 27.3102 -0.1
- vertex -29.2762 26.9865 -0.1
+ vertex -30.0875 27.3102 -0.2
+ vertex -29.2762 26.9865 -0.2
endloop
endfacet
facet normal -0.380261 -0.924879 0
outer loop
- vertex -29.2762 26.9865 -0.1
+ vertex -29.2762 26.9865 -0.2
vertex -28.7314 26.7626 0
vertex -29.2762 26.9865 0
endloop
@@ -41505,13 +41505,13 @@ solid OpenSCAD_Model
facet normal -0.380261 -0.924879 -0
outer loop
vertex -28.7314 26.7626 0
- vertex -29.2762 26.9865 -0.1
- vertex -28.7314 26.7626 -0.1
+ vertex -29.2762 26.9865 -0.2
+ vertex -28.7314 26.7626 -0.2
endloop
endfacet
facet normal -0.349246 -0.937031 0
outer loop
- vertex -28.7314 26.7626 -0.1
+ vertex -28.7314 26.7626 -0.2
vertex -28.2663 26.5892 0
vertex -28.7314 26.7626 0
endloop
@@ -41519,13 +41519,13 @@ solid OpenSCAD_Model
facet normal -0.349246 -0.937031 -0
outer loop
vertex -28.2663 26.5892 0
- vertex -28.7314 26.7626 -0.1
- vertex -28.2663 26.5892 -0.1
+ vertex -28.7314 26.7626 -0.2
+ vertex -28.2663 26.5892 -0.2
endloop
endfacet
facet normal -0.29135 -0.956616 0
outer loop
- vertex -28.2663 26.5892 -0.1
+ vertex -28.2663 26.5892 -0.2
vertex -27.8395 26.4592 0
vertex -28.2663 26.5892 0
endloop
@@ -41533,13 +41533,13 @@ solid OpenSCAD_Model
facet normal -0.29135 -0.956616 -0
outer loop
vertex -27.8395 26.4592 0
- vertex -28.2663 26.5892 -0.1
- vertex -27.8395 26.4592 -0.1
+ vertex -28.2663 26.5892 -0.2
+ vertex -27.8395 26.4592 -0.2
endloop
endfacet
facet normal -0.213404 -0.976964 0
outer loop
- vertex -27.8395 26.4592 -0.1
+ vertex -27.8395 26.4592 -0.2
vertex -27.4097 26.3653 0
vertex -27.8395 26.4592 0
endloop
@@ -41547,13 +41547,13 @@ solid OpenSCAD_Model
facet normal -0.213404 -0.976964 -0
outer loop
vertex -27.4097 26.3653 0
- vertex -27.8395 26.4592 -0.1
- vertex -27.4097 26.3653 -0.1
+ vertex -27.8395 26.4592 -0.2
+ vertex -27.4097 26.3653 -0.2
endloop
endfacet
facet normal -0.13595 -0.990716 0
outer loop
- vertex -27.4097 26.3653 -0.1
+ vertex -27.4097 26.3653 -0.2
vertex -26.9353 26.3003 0
vertex -27.4097 26.3653 0
endloop
@@ -41561,13 +41561,13 @@ solid OpenSCAD_Model
facet normal -0.13595 -0.990716 -0
outer loop
vertex -26.9353 26.3003 0
- vertex -27.4097 26.3653 -0.1
- vertex -26.9353 26.3003 -0.1
+ vertex -27.4097 26.3653 -0.2
+ vertex -26.9353 26.3003 -0.2
endloop
endfacet
facet normal -0.077531 -0.99699 0
outer loop
- vertex -26.9353 26.3003 -0.1
+ vertex -26.9353 26.3003 -0.2
vertex -26.3751 26.2567 0
vertex -26.9353 26.3003 0
endloop
@@ -41575,13 +41575,13 @@ solid OpenSCAD_Model
facet normal -0.077531 -0.99699 -0
outer loop
vertex -26.3751 26.2567 0
- vertex -26.9353 26.3003 -0.1
- vertex -26.3751 26.2567 -0.1
+ vertex -26.9353 26.3003 -0.2
+ vertex -26.3751 26.2567 -0.2
endloop
endfacet
facet normal -0.0334453 -0.999441 0
outer loop
- vertex -26.3751 26.2567 -0.1
+ vertex -26.3751 26.2567 -0.2
vertex -24.8316 26.205 0
vertex -26.3751 26.2567 0
endloop
@@ -41589,13 +41589,13 @@ solid OpenSCAD_Model
facet normal -0.0334453 -0.999441 -0
outer loop
vertex -24.8316 26.205 0
- vertex -26.3751 26.2567 -0.1
- vertex -24.8316 26.205 -0.1
+ vertex -26.3751 26.2567 -0.2
+ vertex -24.8316 26.205 -0.2
endloop
endfacet
facet normal -0.00940958 -0.999956 0
outer loop
- vertex -24.8316 26.205 -0.1
+ vertex -24.8316 26.205 -0.2
vertex -23.1385 26.1891 0
vertex -24.8316 26.205 0
endloop
@@ -41603,13 +41603,13 @@ solid OpenSCAD_Model
facet normal -0.00940958 -0.999956 -0
outer loop
vertex -23.1385 26.1891 0
- vertex -24.8316 26.205 -0.1
- vertex -23.1385 26.1891 -0.1
+ vertex -24.8316 26.205 -0.2
+ vertex -23.1385 26.1891 -0.2
endloop
endfacet
facet normal 0.0248422 -0.999691 0
outer loop
- vertex -23.1385 26.1891 -0.1
+ vertex -23.1385 26.1891 -0.2
vertex -22.5186 26.2045 0
vertex -23.1385 26.1891 0
endloop
@@ -41617,13 +41617,13 @@ solid OpenSCAD_Model
facet normal 0.0248422 -0.999691 0
outer loop
vertex -22.5186 26.2045 0
- vertex -23.1385 26.1891 -0.1
- vertex -22.5186 26.2045 -0.1
+ vertex -23.1385 26.1891 -0.2
+ vertex -22.5186 26.2045 -0.2
endloop
endfacet
facet normal 0.066912 -0.997759 0
outer loop
- vertex -22.5186 26.2045 -0.1
+ vertex -22.5186 26.2045 -0.2
vertex -22.0356 26.2369 0
vertex -22.5186 26.2045 0
endloop
@@ -41631,13 +41631,13 @@ solid OpenSCAD_Model
facet normal 0.066912 -0.997759 0
outer loop
vertex -22.0356 26.2369 0
- vertex -22.5186 26.2045 -0.1
- vertex -22.0356 26.2369 -0.1
+ vertex -22.5186 26.2045 -0.2
+ vertex -22.0356 26.2369 -0.2
endloop
endfacet
facet normal 0.139914 -0.990164 0
outer loop
- vertex -22.0356 26.2369 -0.1
+ vertex -22.0356 26.2369 -0.2
vertex -21.6785 26.2874 0
vertex -22.0356 26.2369 0
endloop
@@ -41645,13 +41645,13 @@ solid OpenSCAD_Model
facet normal 0.139914 -0.990164 0
outer loop
vertex -21.6785 26.2874 0
- vertex -22.0356 26.2369 -0.1
- vertex -21.6785 26.2874 -0.1
+ vertex -22.0356 26.2369 -0.2
+ vertex -21.6785 26.2874 -0.2
endloop
endfacet
facet normal 0.276553 -0.960999 0
outer loop
- vertex -21.6785 26.2874 -0.1
+ vertex -21.6785 26.2874 -0.2
vertex -21.4368 26.3569 0
vertex -21.6785 26.2874 0
endloop
@@ -41659,13 +41659,13 @@ solid OpenSCAD_Model
facet normal 0.276553 -0.960999 0
outer loop
vertex -21.4368 26.3569 0
- vertex -21.6785 26.2874 -0.1
- vertex -21.4368 26.3569 -0.1
+ vertex -21.6785 26.2874 -0.2
+ vertex -21.4368 26.3569 -0.2
endloop
endfacet
facet normal 0.462821 -0.886452 0
outer loop
- vertex -21.4368 26.3569 -0.1
+ vertex -21.4368 26.3569 -0.2
vertex -21.3558 26.3992 0
vertex -21.4368 26.3569 0
endloop
@@ -41673,13 +41673,13 @@ solid OpenSCAD_Model
facet normal 0.462821 -0.886452 0
outer loop
vertex -21.3558 26.3992 0
- vertex -21.4368 26.3569 -0.1
- vertex -21.3558 26.3992 -0.1
+ vertex -21.4368 26.3569 -0.2
+ vertex -21.3558 26.3992 -0.2
endloop
endfacet
facet normal 0.645311 -0.76392 0
outer loop
- vertex -21.3558 26.3992 -0.1
+ vertex -21.3558 26.3992 -0.2
vertex -21.2997 26.4466 0
vertex -21.3558 26.3992 0
endloop
@@ -41687,55 +41687,55 @@ solid OpenSCAD_Model
facet normal 0.645311 -0.76392 0
outer loop
vertex -21.2997 26.4466 0
- vertex -21.3558 26.3992 -0.1
- vertex -21.2997 26.4466 -0.1
+ vertex -21.3558 26.3992 -0.2
+ vertex -21.2997 26.4466 -0.2
endloop
endfacet
facet normal 0.84984 -0.527041 0
outer loop
vertex -21.2997 26.4466 0
- vertex -21.2669 26.4994 -0.1
+ vertex -21.2669 26.4994 -0.2
vertex -21.2669 26.4994 0
endloop
endfacet
facet normal 0.84984 -0.527041 0
outer loop
- vertex -21.2669 26.4994 -0.1
+ vertex -21.2669 26.4994 -0.2
vertex -21.2997 26.4466 0
- vertex -21.2997 26.4466 -0.1
+ vertex -21.2997 26.4466 -0.2
endloop
endfacet
facet normal 0.98379 -0.179322 0
outer loop
vertex -21.2669 26.4994 0
- vertex -21.2563 26.5576 -0.1
+ vertex -21.2563 26.5576 -0.2
vertex -21.2563 26.5576 0
endloop
endfacet
facet normal 0.98379 -0.179322 0
outer loop
- vertex -21.2563 26.5576 -0.1
+ vertex -21.2563 26.5576 -0.2
vertex -21.2669 26.4994 0
- vertex -21.2669 26.4994 -0.1
+ vertex -21.2669 26.4994 -0.2
endloop
endfacet
facet normal 0.837844 0.54591 0
outer loop
vertex -21.2563 26.5576 0
- vertex -21.2799 26.5937 -0.1
+ vertex -21.2799 26.5937 -0.2
vertex -21.2799 26.5937 0
endloop
endfacet
facet normal 0.837844 0.54591 0
outer loop
- vertex -21.2799 26.5937 -0.1
+ vertex -21.2799 26.5937 -0.2
vertex -21.2563 26.5576 0
- vertex -21.2563 26.5576 -0.1
+ vertex -21.2563 26.5576 -0.2
endloop
endfacet
facet normal 0.505324 0.86293 -0
outer loop
- vertex -21.2799 26.5937 -0.1
+ vertex -21.2799 26.5937 -0.2
vertex -21.3473 26.6332 0
vertex -21.2799 26.5937 0
endloop
@@ -41743,13 +41743,13 @@ solid OpenSCAD_Model
facet normal 0.505324 0.86293 0
outer loop
vertex -21.3473 26.6332 0
- vertex -21.2799 26.5937 -0.1
- vertex -21.3473 26.6332 -0.1
+ vertex -21.2799 26.5937 -0.2
+ vertex -21.3473 26.6332 -0.2
endloop
endfacet
facet normal 0.321132 0.947035 -0
outer loop
- vertex -21.3473 26.6332 -0.1
+ vertex -21.3473 26.6332 -0.2
vertex -21.5951 26.7172 0
vertex -21.3473 26.6332 0
endloop
@@ -41757,13 +41757,13 @@ solid OpenSCAD_Model
facet normal 0.321132 0.947035 0
outer loop
vertex -21.5951 26.7172 0
- vertex -21.3473 26.6332 -0.1
- vertex -21.5951 26.7172 -0.1
+ vertex -21.3473 26.6332 -0.2
+ vertex -21.5951 26.7172 -0.2
endloop
endfacet
facet normal 0.218663 0.9758 -0
outer loop
- vertex -21.5951 26.7172 -0.1
+ vertex -21.5951 26.7172 -0.2
vertex -21.9618 26.7994 0
vertex -21.5951 26.7172 0
endloop
@@ -41771,13 +41771,13 @@ solid OpenSCAD_Model
facet normal 0.218663 0.9758 0
outer loop
vertex -21.9618 26.7994 0
- vertex -21.5951 26.7172 -0.1
- vertex -21.9618 26.7994 -0.1
+ vertex -21.5951 26.7172 -0.2
+ vertex -21.9618 26.7994 -0.2
endloop
endfacet
facet normal 0.154639 0.987971 -0
outer loop
- vertex -21.9618 26.7994 -0.1
+ vertex -21.9618 26.7994 -0.2
vertex -22.4095 26.8695 0
vertex -21.9618 26.7994 0
endloop
@@ -41785,13 +41785,13 @@ solid OpenSCAD_Model
facet normal 0.154639 0.987971 0
outer loop
vertex -22.4095 26.8695 0
- vertex -21.9618 26.7994 -0.1
- vertex -22.4095 26.8695 -0.1
+ vertex -21.9618 26.7994 -0.2
+ vertex -22.4095 26.8695 -0.2
endloop
endfacet
facet normal 0.17991 0.983683 -0
outer loop
- vertex -22.4095 26.8695 -0.1
+ vertex -22.4095 26.8695 -0.2
vertex -22.8078 26.9423 0
vertex -22.4095 26.8695 0
endloop
@@ -41799,13 +41799,13 @@ solid OpenSCAD_Model
facet normal 0.17991 0.983683 0
outer loop
vertex -22.8078 26.9423 0
- vertex -22.4095 26.8695 -0.1
- vertex -22.8078 26.9423 -0.1
+ vertex -22.4095 26.8695 -0.2
+ vertex -22.8078 26.9423 -0.2
endloop
endfacet
facet normal 0.273496 0.961873 -0
outer loop
- vertex -22.8078 26.9423 -0.1
+ vertex -22.8078 26.9423 -0.2
vertex -23.1972 27.0531 0
vertex -22.8078 26.9423 0
endloop
@@ -41813,13 +41813,13 @@ solid OpenSCAD_Model
facet normal 0.273496 0.961873 0
outer loop
vertex -23.1972 27.0531 0
- vertex -22.8078 26.9423 -0.1
- vertex -23.1972 27.0531 -0.1
+ vertex -22.8078 26.9423 -0.2
+ vertex -23.1972 27.0531 -0.2
endloop
endfacet
facet normal 0.356994 0.934107 -0
outer loop
- vertex -23.1972 27.0531 -0.1
+ vertex -23.1972 27.0531 -0.2
vertex -23.56 27.1917 0
vertex -23.1972 27.0531 0
endloop
@@ -41827,13 +41827,13 @@ solid OpenSCAD_Model
facet normal 0.356994 0.934107 0
outer loop
vertex -23.56 27.1917 0
- vertex -23.1972 27.0531 -0.1
- vertex -23.56 27.1917 -0.1
+ vertex -23.1972 27.0531 -0.2
+ vertex -23.56 27.1917 -0.2
endloop
endfacet
facet normal 0.441429 0.897296 -0
outer loop
- vertex -23.56 27.1917 -0.1
+ vertex -23.56 27.1917 -0.2
vertex -23.8785 27.3484 0
vertex -23.56 27.1917 0
endloop
@@ -41841,13 +41841,13 @@ solid OpenSCAD_Model
facet normal 0.441429 0.897296 0
outer loop
vertex -23.8785 27.3484 0
- vertex -23.56 27.1917 -0.1
- vertex -23.8785 27.3484 -0.1
+ vertex -23.56 27.1917 -0.2
+ vertex -23.8785 27.3484 -0.2
endloop
endfacet
facet normal 0.540697 0.841217 -0
outer loop
- vertex -23.8785 27.3484 -0.1
+ vertex -23.8785 27.3484 -0.2
vertex -24.1346 27.513 0
vertex -23.8785 27.3484 0
endloop
@@ -41855,13 +41855,13 @@ solid OpenSCAD_Model
facet normal 0.540697 0.841217 0
outer loop
vertex -24.1346 27.513 0
- vertex -23.8785 27.3484 -0.1
- vertex -24.1346 27.513 -0.1
+ vertex -23.8785 27.3484 -0.2
+ vertex -24.1346 27.513 -0.2
endloop
endfacet
facet normal 0.678607 0.734501 -0
outer loop
- vertex -24.1346 27.513 -0.1
+ vertex -24.1346 27.513 -0.2
vertex -24.3107 27.6757 0
vertex -24.1346 27.513 0
endloop
@@ -41869,69 +41869,69 @@ solid OpenSCAD_Model
facet normal 0.678607 0.734501 0
outer loop
vertex -24.3107 27.6757 0
- vertex -24.1346 27.513 -0.1
- vertex -24.3107 27.6757 -0.1
+ vertex -24.1346 27.513 -0.2
+ vertex -24.3107 27.6757 -0.2
endloop
endfacet
facet normal 0.828129 0.560537 0
outer loop
vertex -24.3107 27.6757 0
- vertex -24.3632 27.7532 -0.1
+ vertex -24.3632 27.7532 -0.2
vertex -24.3632 27.7532 0
endloop
endfacet
facet normal 0.828129 0.560537 0
outer loop
- vertex -24.3632 27.7532 -0.1
+ vertex -24.3632 27.7532 -0.2
vertex -24.3107 27.6757 0
- vertex -24.3107 27.6757 -0.1
+ vertex -24.3107 27.6757 -0.2
endloop
endfacet
facet normal 0.943401 0.331655 0
outer loop
vertex -24.3632 27.7532 0
- vertex -24.3889 27.8265 -0.1
+ vertex -24.3889 27.8265 -0.2
vertex -24.3889 27.8265 0
endloop
endfacet
facet normal 0.943401 0.331655 0
outer loop
- vertex -24.3889 27.8265 -0.1
+ vertex -24.3889 27.8265 -0.2
vertex -24.3632 27.7532 0
- vertex -24.3632 27.7532 -0.1
+ vertex -24.3632 27.7532 -0.2
endloop
endfacet
facet normal 0.998917 -0.0465292 0
outer loop
vertex -24.3889 27.8265 0
- vertex -24.3858 27.8943 -0.1
+ vertex -24.3858 27.8943 -0.2
vertex -24.3858 27.8943 0
endloop
endfacet
facet normal 0.998917 -0.0465292 0
outer loop
- vertex -24.3858 27.8943 -0.1
+ vertex -24.3858 27.8943 -0.2
vertex -24.3889 27.8265 0
- vertex -24.3889 27.8265 -0.1
+ vertex -24.3889 27.8265 -0.2
endloop
endfacet
facet normal 0.871924 -0.489641 0
outer loop
vertex -24.3858 27.8943 0
- vertex -24.3515 27.9554 -0.1
+ vertex -24.3515 27.9554 -0.2
vertex -24.3515 27.9554 0
endloop
endfacet
facet normal 0.871924 -0.489641 0
outer loop
- vertex -24.3515 27.9554 -0.1
+ vertex -24.3515 27.9554 -0.2
vertex -24.3858 27.8943 0
- vertex -24.3858 27.8943 -0.1
+ vertex -24.3858 27.8943 -0.2
endloop
endfacet
facet normal 0.330372 -0.943851 0
outer loop
- vertex -24.3515 27.9554 -0.1
+ vertex -24.3515 27.9554 -0.2
vertex -24.2923 27.9761 0
vertex -24.3515 27.9554 0
endloop
@@ -41939,13 +41939,13 @@ solid OpenSCAD_Model
facet normal 0.330372 -0.943851 0
outer loop
vertex -24.2923 27.9761 0
- vertex -24.3515 27.9554 -0.1
- vertex -24.2923 27.9761 -0.1
+ vertex -24.3515 27.9554 -0.2
+ vertex -24.2923 27.9761 -0.2
endloop
endfacet
facet normal 0.0962711 -0.995355 0
outer loop
- vertex -24.2923 27.9761 -0.1
+ vertex -24.2923 27.9761 -0.2
vertex -24.1643 27.9885 0
vertex -24.2923 27.9761 0
endloop
@@ -41953,13 +41953,13 @@ solid OpenSCAD_Model
facet normal 0.0962711 -0.995355 0
outer loop
vertex -24.1643 27.9885 0
- vertex -24.2923 27.9761 -0.1
- vertex -24.1643 27.9885 -0.1
+ vertex -24.2923 27.9761 -0.2
+ vertex -24.1643 27.9885 -0.2
endloop
endfacet
facet normal 0.00166914 -0.999999 0
outer loop
- vertex -24.1643 27.9885 -0.1
+ vertex -24.1643 27.9885 -0.2
vertex -23.7335 27.9892 0
vertex -24.1643 27.9885 0
endloop
@@ -41967,13 +41967,13 @@ solid OpenSCAD_Model
facet normal 0.00166914 -0.999999 0
outer loop
vertex -23.7335 27.9892 0
- vertex -24.1643 27.9885 -0.1
- vertex -23.7335 27.9892 -0.1
+ vertex -24.1643 27.9885 -0.2
+ vertex -23.7335 27.9892 -0.2
endloop
endfacet
facet normal -0.048866 -0.998805 0
outer loop
- vertex -23.7335 27.9892 -0.1
+ vertex -23.7335 27.9892 -0.2
vertex -23.1232 27.9594 0
vertex -23.7335 27.9892 0
endloop
@@ -41981,13 +41981,13 @@ solid OpenSCAD_Model
facet normal -0.048866 -0.998805 -0
outer loop
vertex -23.1232 27.9594 0
- vertex -23.7335 27.9892 -0.1
- vertex -23.1232 27.9594 -0.1
+ vertex -23.7335 27.9892 -0.2
+ vertex -23.1232 27.9594 -0.2
endloop
endfacet
facet normal -0.0805478 -0.996751 0
outer loop
- vertex -23.1232 27.9594 -0.1
+ vertex -23.1232 27.9594 -0.2
vertex -22.3975 27.9007 0
vertex -23.1232 27.9594 0
endloop
@@ -41995,13 +41995,13 @@ solid OpenSCAD_Model
facet normal -0.0805478 -0.996751 -0
outer loop
vertex -22.3975 27.9007 0
- vertex -23.1232 27.9594 -0.1
- vertex -22.3975 27.9007 -0.1
+ vertex -23.1232 27.9594 -0.2
+ vertex -22.3975 27.9007 -0.2
endloop
endfacet
facet normal -0.115526 -0.993304 0
outer loop
- vertex -22.3975 27.9007 -0.1
+ vertex -22.3975 27.9007 -0.2
vertex -21.4599 27.7917 0
vertex -22.3975 27.9007 0
endloop
@@ -42009,13 +42009,13 @@ solid OpenSCAD_Model
facet normal -0.115526 -0.993304 -0
outer loop
vertex -21.4599 27.7917 0
- vertex -22.3975 27.9007 -0.1
- vertex -21.4599 27.7917 -0.1
+ vertex -22.3975 27.9007 -0.2
+ vertex -21.4599 27.7917 -0.2
endloop
endfacet
facet normal -0.170472 -0.985363 0
outer loop
- vertex -21.4599 27.7917 -0.1
+ vertex -21.4599 27.7917 -0.2
vertex -21.1001 27.7294 0
vertex -21.4599 27.7917 0
endloop
@@ -42023,13 +42023,13 @@ solid OpenSCAD_Model
facet normal -0.170472 -0.985363 -0
outer loop
vertex -21.1001 27.7294 0
- vertex -21.4599 27.7917 -0.1
- vertex -21.1001 27.7294 -0.1
+ vertex -21.4599 27.7917 -0.2
+ vertex -21.1001 27.7294 -0.2
endloop
endfacet
facet normal -0.23059 -0.973051 0
outer loop
- vertex -21.1001 27.7294 -0.1
+ vertex -21.1001 27.7294 -0.2
vertex -20.7979 27.6578 0
vertex -21.1001 27.7294 0
endloop
@@ -42037,13 +42037,13 @@ solid OpenSCAD_Model
facet normal -0.23059 -0.973051 -0
outer loop
vertex -20.7979 27.6578 0
- vertex -21.1001 27.7294 -0.1
- vertex -20.7979 27.6578 -0.1
+ vertex -21.1001 27.7294 -0.2
+ vertex -20.7979 27.6578 -0.2
endloop
endfacet
facet normal -0.312278 -0.949991 0
outer loop
- vertex -20.7979 27.6578 -0.1
+ vertex -20.7979 27.6578 -0.2
vertex -20.5419 27.5737 0
vertex -20.7979 27.6578 0
endloop
@@ -42051,13 +42051,13 @@ solid OpenSCAD_Model
facet normal -0.312278 -0.949991 -0
outer loop
vertex -20.5419 27.5737 0
- vertex -20.7979 27.6578 -0.1
- vertex -20.5419 27.5737 -0.1
+ vertex -20.7979 27.6578 -0.2
+ vertex -20.5419 27.5737 -0.2
endloop
endfacet
facet normal -0.411473 -0.911422 0
outer loop
- vertex -20.5419 27.5737 -0.1
+ vertex -20.5419 27.5737 -0.2
vertex -20.3206 27.4738 0
vertex -20.5419 27.5737 0
endloop
@@ -42065,13 +42065,13 @@ solid OpenSCAD_Model
facet normal -0.411473 -0.911422 -0
outer loop
vertex -20.3206 27.4738 0
- vertex -20.5419 27.5737 -0.1
- vertex -20.3206 27.4738 -0.1
+ vertex -20.5419 27.5737 -0.2
+ vertex -20.3206 27.4738 -0.2
endloop
endfacet
facet normal -0.51473 -0.857352 0
outer loop
- vertex -20.3206 27.4738 -0.1
+ vertex -20.3206 27.4738 -0.2
vertex -20.1227 27.3549 0
vertex -20.3206 27.4738 0
endloop
@@ -42079,13 +42079,13 @@ solid OpenSCAD_Model
facet normal -0.51473 -0.857352 -0
outer loop
vertex -20.1227 27.3549 0
- vertex -20.3206 27.4738 -0.1
- vertex -20.1227 27.3549 -0.1
+ vertex -20.3206 27.4738 -0.2
+ vertex -20.1227 27.3549 -0.2
endloop
endfacet
facet normal -0.604059 -0.79694 0
outer loop
- vertex -20.1227 27.3549 -0.1
+ vertex -20.1227 27.3549 -0.2
vertex -19.9368 27.2141 0
vertex -20.1227 27.3549 0
endloop
@@ -42093,13 +42093,13 @@ solid OpenSCAD_Model
facet normal -0.604059 -0.79694 -0
outer loop
vertex -19.9368 27.2141 0
- vertex -20.1227 27.3549 -0.1
- vertex -19.9368 27.2141 -0.1
+ vertex -20.1227 27.3549 -0.2
+ vertex -19.9368 27.2141 -0.2
endloop
endfacet
facet normal -0.64002 -0.768358 0
outer loop
- vertex -19.9368 27.2141 -0.1
+ vertex -19.9368 27.2141 -0.2
vertex -19.3233 26.703 0
vertex -19.9368 27.2141 0
endloop
@@ -42107,13 +42107,13 @@ solid OpenSCAD_Model
facet normal -0.64002 -0.768358 -0
outer loop
vertex -19.3233 26.703 0
- vertex -19.9368 27.2141 -0.1
- vertex -19.3233 26.703 -0.1
+ vertex -19.9368 27.2141 -0.2
+ vertex -19.3233 26.703 -0.2
endloop
endfacet
facet normal 0.254038 -0.967194 0
outer loop
- vertex -19.3233 26.703 -0.1
+ vertex -19.3233 26.703 -0.2
vertex -16.9758 27.3196 0
vertex -19.3233 26.703 0
endloop
@@ -42121,13 +42121,13 @@ solid OpenSCAD_Model
facet normal 0.254038 -0.967194 0
outer loop
vertex -16.9758 27.3196 0
- vertex -19.3233 26.703 -0.1
- vertex -16.9758 27.3196 -0.1
+ vertex -19.3233 26.703 -0.2
+ vertex -16.9758 27.3196 -0.2
endloop
endfacet
facet normal 0.236306 -0.971679 0
outer loop
- vertex -16.9758 27.3196 -0.1
+ vertex -16.9758 27.3196 -0.2
vertex -16.0674 27.5405 0
vertex -16.9758 27.3196 0
endloop
@@ -42135,13 +42135,13 @@ solid OpenSCAD_Model
facet normal 0.236306 -0.971679 0
outer loop
vertex -16.0674 27.5405 0
- vertex -16.9758 27.3196 -0.1
- vertex -16.0674 27.5405 -0.1
+ vertex -16.9758 27.3196 -0.2
+ vertex -16.0674 27.5405 -0.2
endloop
endfacet
facet normal 0.186349 -0.982484 0
outer loop
- vertex -16.0674 27.5405 -0.1
+ vertex -16.0674 27.5405 -0.2
vertex -15.2259 27.7001 0
vertex -16.0674 27.5405 0
endloop
@@ -42149,13 +42149,13 @@ solid OpenSCAD_Model
facet normal 0.186349 -0.982484 0
outer loop
vertex -15.2259 27.7001 0
- vertex -16.0674 27.5405 -0.1
- vertex -15.2259 27.7001 -0.1
+ vertex -16.0674 27.5405 -0.2
+ vertex -15.2259 27.7001 -0.2
endloop
endfacet
facet normal 0.119004 -0.992894 0
outer loop
- vertex -15.2259 27.7001 -0.1
+ vertex -15.2259 27.7001 -0.2
vertex -14.4014 27.7989 0
vertex -15.2259 27.7001 0
endloop
@@ -42163,13 +42163,13 @@ solid OpenSCAD_Model
facet normal 0.119004 -0.992894 0
outer loop
vertex -14.4014 27.7989 0
- vertex -15.2259 27.7001 -0.1
- vertex -14.4014 27.7989 -0.1
+ vertex -15.2259 27.7001 -0.2
+ vertex -14.4014 27.7989 -0.2
endloop
endfacet
facet normal 0.0448493 -0.998994 0
outer loop
- vertex -14.4014 27.7989 -0.1
+ vertex -14.4014 27.7989 -0.2
vertex -13.5445 27.8374 0
vertex -14.4014 27.7989 0
endloop
@@ -42177,13 +42177,13 @@ solid OpenSCAD_Model
facet normal 0.0448493 -0.998994 0
outer loop
vertex -13.5445 27.8374 0
- vertex -14.4014 27.7989 -0.1
- vertex -13.5445 27.8374 -0.1
+ vertex -14.4014 27.7989 -0.2
+ vertex -13.5445 27.8374 -0.2
endloop
endfacet
facet normal -0.0227723 -0.999741 0
outer loop
- vertex -13.5445 27.8374 -0.1
+ vertex -13.5445 27.8374 -0.2
vertex -12.6053 27.816 0
vertex -13.5445 27.8374 0
endloop
@@ -42191,13 +42191,13 @@ solid OpenSCAD_Model
facet normal -0.0227723 -0.999741 -0
outer loop
vertex -12.6053 27.816 0
- vertex -13.5445 27.8374 -0.1
- vertex -12.6053 27.816 -0.1
+ vertex -13.5445 27.8374 -0.2
+ vertex -12.6053 27.816 -0.2
endloop
endfacet
facet normal -0.0752121 -0.997168 0
outer loop
- vertex -12.6053 27.816 -0.1
+ vertex -12.6053 27.816 -0.2
vertex -11.5342 27.7352 0
vertex -12.6053 27.816 0
endloop
@@ -42205,13 +42205,13 @@ solid OpenSCAD_Model
facet normal -0.0752121 -0.997168 -0
outer loop
vertex -11.5342 27.7352 0
- vertex -12.6053 27.816 -0.1
- vertex -11.5342 27.7352 -0.1
+ vertex -12.6053 27.816 -0.2
+ vertex -11.5342 27.7352 -0.2
endloop
endfacet
facet normal -0.110844 -0.993838 0
outer loop
- vertex -11.5342 27.7352 -0.1
+ vertex -11.5342 27.7352 -0.2
vertex -10.2816 27.5955 0
vertex -11.5342 27.7352 0
endloop
@@ -42219,13 +42219,13 @@ solid OpenSCAD_Model
facet normal -0.110844 -0.993838 -0
outer loop
vertex -10.2816 27.5955 0
- vertex -11.5342 27.7352 -0.1
- vertex -10.2816 27.5955 -0.1
+ vertex -11.5342 27.7352 -0.2
+ vertex -10.2816 27.5955 -0.2
endloop
endfacet
facet normal -0.132367 -0.991201 0
outer loop
- vertex -10.2816 27.5955 -0.1
+ vertex -10.2816 27.5955 -0.2
vertex -8.79778 27.3973 0
vertex -10.2816 27.5955 0
endloop
@@ -42233,13 +42233,13 @@ solid OpenSCAD_Model
facet normal -0.132367 -0.991201 -0
outer loop
vertex -8.79778 27.3973 0
- vertex -10.2816 27.5955 -0.1
- vertex -8.79778 27.3973 -0.1
+ vertex -10.2816 27.5955 -0.2
+ vertex -8.79778 27.3973 -0.2
endloop
endfacet
facet normal -0.122316 -0.992491 0
outer loop
- vertex -8.79778 27.3973 -0.1
+ vertex -8.79778 27.3973 -0.2
vertex -7.89877 27.2865 0
vertex -8.79778 27.3973 0
endloop
@@ -42247,13 +42247,13 @@ solid OpenSCAD_Model
facet normal -0.122316 -0.992491 -0
outer loop
vertex -7.89877 27.2865 0
- vertex -8.79778 27.3973 -0.1
- vertex -7.89877 27.2865 -0.1
+ vertex -8.79778 27.3973 -0.2
+ vertex -7.89877 27.2865 -0.2
endloop
endfacet
facet normal -0.0652699 -0.997868 0
outer loop
- vertex -7.89877 27.2865 -0.1
+ vertex -7.89877 27.2865 -0.2
vertex -7.24334 27.2437 0
vertex -7.89877 27.2865 0
endloop
@@ -42261,13 +42261,13 @@ solid OpenSCAD_Model
facet normal -0.0652699 -0.997868 -0
outer loop
vertex -7.24334 27.2437 0
- vertex -7.89877 27.2865 -0.1
- vertex -7.24334 27.2437 -0.1
+ vertex -7.89877 27.2865 -0.2
+ vertex -7.24334 27.2437 -0.2
endloop
endfacet
facet normal 0.0157984 -0.999875 0
outer loop
- vertex -7.24334 27.2437 -0.1
+ vertex -7.24334 27.2437 -0.2
vertex -6.99768 27.2475 0
vertex -7.24334 27.2437 0
endloop
@@ -42275,13 +42275,13 @@ solid OpenSCAD_Model
facet normal 0.0157984 -0.999875 0
outer loop
vertex -6.99768 27.2475 0
- vertex -7.24334 27.2437 -0.1
- vertex -6.99768 27.2475 -0.1
+ vertex -7.24334 27.2437 -0.2
+ vertex -6.99768 27.2475 -0.2
endloop
endfacet
facet normal 0.104958 -0.994477 0
outer loop
- vertex -6.99768 27.2475 -0.1
+ vertex -6.99768 27.2475 -0.2
vertex -6.80178 27.2682 0
vertex -6.99768 27.2475 0
endloop
@@ -42289,13 +42289,13 @@ solid OpenSCAD_Model
facet normal 0.104958 -0.994477 0
outer loop
vertex -6.80178 27.2682 0
- vertex -6.99768 27.2475 -0.1
- vertex -6.80178 27.2682 -0.1
+ vertex -6.99768 27.2475 -0.2
+ vertex -6.80178 27.2682 -0.2
endloop
endfacet
facet normal 0.242196 -0.970227 0
outer loop
- vertex -6.80178 27.2682 -0.1
+ vertex -6.80178 27.2682 -0.2
vertex -6.65192 27.3056 0
vertex -6.80178 27.2682 0
endloop
@@ -42303,13 +42303,13 @@ solid OpenSCAD_Model
facet normal 0.242196 -0.970227 0
outer loop
vertex -6.65192 27.3056 0
- vertex -6.80178 27.2682 -0.1
- vertex -6.65192 27.3056 -0.1
+ vertex -6.80178 27.2682 -0.2
+ vertex -6.65192 27.3056 -0.2
endloop
endfacet
facet normal 0.449315 -0.893373 0
outer loop
- vertex -6.65192 27.3056 -0.1
+ vertex -6.65192 27.3056 -0.2
vertex -6.54439 27.3597 0
vertex -6.65192 27.3056 0
endloop
@@ -42317,209 +42317,209 @@ solid OpenSCAD_Model
facet normal 0.449315 -0.893373 0
outer loop
vertex -6.54439 27.3597 0
- vertex -6.65192 27.3056 -0.1
- vertex -6.54439 27.3597 -0.1
+ vertex -6.65192 27.3056 -0.2
+ vertex -6.54439 27.3597 -0.2
endloop
endfacet
facet normal 0.709468 -0.704738 0
outer loop
vertex -6.54439 27.3597 0
- vertex -6.44763 27.4571 -0.1
+ vertex -6.44763 27.4571 -0.2
vertex -6.44763 27.4571 0
endloop
endfacet
facet normal 0.709468 -0.704738 0
outer loop
- vertex -6.44763 27.4571 -0.1
+ vertex -6.44763 27.4571 -0.2
vertex -6.54439 27.3597 0
- vertex -6.54439 27.3597 -0.1
+ vertex -6.54439 27.3597 -0.2
endloop
endfacet
facet normal 0.90334 -0.428926 0
outer loop
vertex -6.44763 27.4571 0
- vertex -6.37156 27.6173 -0.1
+ vertex -6.37156 27.6173 -0.2
vertex -6.37156 27.6173 0
endloop
endfacet
facet normal 0.90334 -0.428926 0
outer loop
- vertex -6.37156 27.6173 -0.1
+ vertex -6.37156 27.6173 -0.2
vertex -6.44763 27.4571 0
- vertex -6.44763 27.4571 -0.1
+ vertex -6.44763 27.4571 -0.2
endloop
endfacet
facet normal 0.975305 -0.220862 0
outer loop
vertex -6.37156 27.6173 0
- vertex -6.31368 27.8729 -0.1
+ vertex -6.31368 27.8729 -0.2
vertex -6.31368 27.8729 0
endloop
endfacet
facet normal 0.975305 -0.220862 0
outer loop
- vertex -6.31368 27.8729 -0.1
+ vertex -6.31368 27.8729 -0.2
vertex -6.37156 27.6173 0
- vertex -6.37156 27.6173 -0.1
+ vertex -6.37156 27.6173 -0.2
endloop
endfacet
facet normal 0.994005 -0.109334 0
outer loop
vertex -6.31368 27.8729 0
- vertex -6.27149 28.2565 -0.1
+ vertex -6.27149 28.2565 -0.2
vertex -6.27149 28.2565 0
endloop
endfacet
facet normal 0.994005 -0.109334 0
outer loop
- vertex -6.27149 28.2565 -0.1
+ vertex -6.27149 28.2565 -0.2
vertex -6.31368 27.8729 0
- vertex -6.31368 27.8729 -0.1
+ vertex -6.31368 27.8729 -0.2
endloop
endfacet
facet normal 0.998582 -0.0532268 0
outer loop
vertex -6.27149 28.2565 0
- vertex -6.24249 28.8007 -0.1
+ vertex -6.24249 28.8007 -0.2
vertex -6.24249 28.8007 0
endloop
endfacet
facet normal 0.998582 -0.0532268 0
outer loop
- vertex -6.24249 28.8007 -0.1
+ vertex -6.24249 28.8007 -0.2
vertex -6.27149 28.2565 0
- vertex -6.27149 28.2565 -0.1
+ vertex -6.27149 28.2565 -0.2
endloop
endfacet
facet normal 0.999691 -0.0248385 0
outer loop
vertex -6.24249 28.8007 0
- vertex -6.22417 29.538 -0.1
+ vertex -6.22417 29.538 -0.2
vertex -6.22417 29.538 0
endloop
endfacet
facet normal 0.999691 -0.0248385 0
outer loop
- vertex -6.22417 29.538 -0.1
+ vertex -6.22417 29.538 -0.2
vertex -6.24249 28.8007 0
- vertex -6.24249 28.8007 -0.1
+ vertex -6.24249 28.8007 -0.2
endloop
endfacet
facet normal 0.999978 -0.00667916 0
outer loop
vertex -6.22417 29.538 0
- vertex -6.20957 31.7226 -0.1
+ vertex -6.20957 31.7226 -0.2
vertex -6.20957 31.7226 0
endloop
endfacet
facet normal 0.999978 -0.00667916 0
outer loop
- vertex -6.20957 31.7226 -0.1
+ vertex -6.20957 31.7226 -0.2
vertex -6.22417 29.538 0
- vertex -6.22417 29.538 -0.1
+ vertex -6.22417 29.538 -0.2
endloop
endfacet
facet normal 0.999955 -0.00944041 0
outer loop
vertex -6.20957 31.7226 0
- vertex -6.19415 33.3563 -0.1
+ vertex -6.19415 33.3563 -0.2
vertex -6.19415 33.3563 0
endloop
endfacet
facet normal 0.999955 -0.00944041 0
outer loop
- vertex -6.19415 33.3563 -0.1
+ vertex -6.19415 33.3563 -0.2
vertex -6.20957 31.7226 0
- vertex -6.20957 31.7226 -0.1
+ vertex -6.20957 31.7226 -0.2
endloop
endfacet
facet normal 0.999658 -0.0261462 0
outer loop
vertex -6.19415 33.3563 0
- vertex -6.15766 34.7516 -0.1
+ vertex -6.15766 34.7516 -0.2
vertex -6.15766 34.7516 0
endloop
endfacet
facet normal 0.999658 -0.0261462 0
outer loop
- vertex -6.15766 34.7516 -0.1
+ vertex -6.15766 34.7516 -0.2
vertex -6.19415 33.3563 0
- vertex -6.19415 33.3563 -0.1
+ vertex -6.19415 33.3563 -0.2
endloop
endfacet
facet normal 0.998669 -0.0515827 0
outer loop
vertex -6.15766 34.7516 0
- vertex -6.10555 35.7605 -0.1
+ vertex -6.10555 35.7605 -0.2
vertex -6.10555 35.7605 0
endloop
endfacet
facet normal 0.998669 -0.0515827 0
outer loop
- vertex -6.10555 35.7605 -0.1
+ vertex -6.10555 35.7605 -0.2
vertex -6.15766 34.7516 0
- vertex -6.15766 34.7516 -0.1
+ vertex -6.15766 34.7516 -0.2
endloop
endfacet
facet normal 0.995383 -0.0959818 0
outer loop
vertex -6.10555 35.7605 0
- vertex -6.07534 36.0738 -0.1
+ vertex -6.07534 36.0738 -0.2
vertex -6.07534 36.0738 0
endloop
endfacet
facet normal 0.995383 -0.0959818 0
outer loop
- vertex -6.07534 36.0738 -0.1
+ vertex -6.07534 36.0738 -0.2
vertex -6.10555 35.7605 0
- vertex -6.10555 35.7605 -0.1
+ vertex -6.10555 35.7605 -0.2
endloop
endfacet
facet normal 0.980771 -0.195161 0
outer loop
vertex -6.07534 36.0738 0
- vertex -6.04327 36.2349 -0.1
+ vertex -6.04327 36.2349 -0.2
vertex -6.04327 36.2349 0
endloop
endfacet
facet normal 0.980771 -0.195161 0
outer loop
- vertex -6.04327 36.2349 -0.1
+ vertex -6.04327 36.2349 -0.2
vertex -6.07534 36.0738 0
- vertex -6.07534 36.0738 -0.1
+ vertex -6.07534 36.0738 -0.2
endloop
endfacet
facet normal 0.887411 -0.460979 0
outer loop
vertex -6.04327 36.2349 0
- vertex -5.92579 36.4611 -0.1
+ vertex -5.92579 36.4611 -0.2
vertex -5.92579 36.4611 0
endloop
endfacet
facet normal 0.887411 -0.460979 0
outer loop
- vertex -5.92579 36.4611 -0.1
+ vertex -5.92579 36.4611 -0.2
vertex -6.04327 36.2349 0
- vertex -6.04327 36.2349 -0.1
+ vertex -6.04327 36.2349 -0.2
endloop
endfacet
facet normal 0.77348 -0.633821 0
outer loop
vertex -5.92579 36.4611 0
- vertex -5.86569 36.5344 -0.1
+ vertex -5.86569 36.5344 -0.2
vertex -5.86569 36.5344 0
endloop
endfacet
facet normal 0.77348 -0.633821 0
outer loop
- vertex -5.86569 36.5344 -0.1
+ vertex -5.86569 36.5344 -0.2
vertex -5.92579 36.4611 0
- vertex -5.92579 36.4611 -0.1
+ vertex -5.92579 36.4611 -0.2
endloop
endfacet
facet normal 0.607425 -0.794377 0
outer loop
- vertex -5.86569 36.5344 -0.1
+ vertex -5.86569 36.5344 -0.2
vertex -5.80457 36.5812 0
vertex -5.86569 36.5344 0
endloop
@@ -42527,13 +42527,13 @@ solid OpenSCAD_Model
facet normal 0.607425 -0.794377 0
outer loop
vertex -5.80457 36.5812 0
- vertex -5.86569 36.5344 -0.1
- vertex -5.80457 36.5812 -0.1
+ vertex -5.86569 36.5344 -0.2
+ vertex -5.80457 36.5812 -0.2
endloop
endfacet
facet normal 0.306429 -0.951894 0
outer loop
- vertex -5.80457 36.5812 -0.1
+ vertex -5.80457 36.5812 -0.2
vertex -5.74234 36.6012 0
vertex -5.80457 36.5812 0
endloop
@@ -42541,13 +42541,13 @@ solid OpenSCAD_Model
facet normal 0.306429 -0.951894 0
outer loop
vertex -5.74234 36.6012 0
- vertex -5.80457 36.5812 -0.1
- vertex -5.74234 36.6012 -0.1
+ vertex -5.80457 36.5812 -0.2
+ vertex -5.74234 36.6012 -0.2
endloop
endfacet
facet normal -0.106116 -0.994354 0
outer loop
- vertex -5.74234 36.6012 -0.1
+ vertex -5.74234 36.6012 -0.2
vertex -5.67893 36.5944 0
vertex -5.74234 36.6012 0
endloop
@@ -42555,13 +42555,13 @@ solid OpenSCAD_Model
facet normal -0.106116 -0.994354 -0
outer loop
vertex -5.67893 36.5944 0
- vertex -5.74234 36.6012 -0.1
- vertex -5.67893 36.5944 -0.1
+ vertex -5.74234 36.6012 -0.2
+ vertex -5.67893 36.5944 -0.2
endloop
endfacet
facet normal -0.461592 -0.887092 0
outer loop
- vertex -5.67893 36.5944 -0.1
+ vertex -5.67893 36.5944 -0.2
vertex -5.61425 36.5608 0
vertex -5.67893 36.5944 0
endloop
@@ -42569,13 +42569,13 @@ solid OpenSCAD_Model
facet normal -0.461592 -0.887092 -0
outer loop
vertex -5.61425 36.5608 0
- vertex -5.67893 36.5944 -0.1
- vertex -5.61425 36.5608 -0.1
+ vertex -5.67893 36.5944 -0.2
+ vertex -5.61425 36.5608 -0.2
endloop
endfacet
facet normal -0.67638 -0.736553 0
outer loop
- vertex -5.61425 36.5608 -0.1
+ vertex -5.61425 36.5608 -0.2
vertex -5.54821 36.5001 0
vertex -5.61425 36.5608 0
endloop
@@ -42583,237 +42583,237 @@ solid OpenSCAD_Model
facet normal -0.67638 -0.736553 -0
outer loop
vertex -5.54821 36.5001 0
- vertex -5.61425 36.5608 -0.1
- vertex -5.54821 36.5001 -0.1
+ vertex -5.61425 36.5608 -0.2
+ vertex -5.54821 36.5001 -0.2
endloop
endfacet
facet normal -0.829388 -0.558673 0
outer loop
- vertex -5.41174 36.2975 -0.1
+ vertex -5.41174 36.2975 -0.2
vertex -5.54821 36.5001 0
- vertex -5.54821 36.5001 -0.1
+ vertex -5.54821 36.5001 -0.2
endloop
endfacet
facet normal -0.829388 -0.558673 0
outer loop
vertex -5.54821 36.5001 0
- vertex -5.41174 36.2975 -0.1
+ vertex -5.41174 36.2975 -0.2
vertex -5.41174 36.2975 0
endloop
endfacet
facet normal -0.909006 -0.416783 0
outer loop
- vertex -5.26884 35.9859 -0.1
+ vertex -5.26884 35.9859 -0.2
vertex -5.41174 36.2975 0
- vertex -5.41174 36.2975 -0.1
+ vertex -5.41174 36.2975 -0.2
endloop
endfacet
facet normal -0.909006 -0.416783 0
outer loop
vertex -5.41174 36.2975 0
- vertex -5.26884 35.9859 -0.1
+ vertex -5.26884 35.9859 -0.2
vertex -5.26884 35.9859 0
endloop
endfacet
facet normal -0.942118 -0.335281 0
outer loop
- vertex -5.11886 35.5644 -0.1
+ vertex -5.11886 35.5644 -0.2
vertex -5.26884 35.9859 0
- vertex -5.26884 35.9859 -0.1
+ vertex -5.26884 35.9859 -0.2
endloop
endfacet
facet normal -0.942118 -0.335281 0
outer loop
vertex -5.26884 35.9859 0
- vertex -5.11886 35.5644 -0.1
+ vertex -5.11886 35.5644 -0.2
vertex -5.11886 35.5644 0
endloop
endfacet
facet normal -0.958738 -0.28429 0
outer loop
- vertex -4.96111 35.0324 -0.1
+ vertex -4.96111 35.0324 -0.2
vertex -5.11886 35.5644 0
- vertex -5.11886 35.5644 -0.1
+ vertex -5.11886 35.5644 -0.2
endloop
endfacet
facet normal -0.958738 -0.28429 0
outer loop
vertex -5.11886 35.5644 0
- vertex -4.96111 35.0324 -0.1
+ vertex -4.96111 35.0324 -0.2
vertex -4.96111 35.0324 0
endloop
endfacet
facet normal -0.959965 -0.280118 0
outer loop
- vertex -4.73722 34.2652 -0.1
+ vertex -4.73722 34.2652 -0.2
vertex -4.96111 35.0324 0
- vertex -4.96111 35.0324 -0.1
+ vertex -4.96111 35.0324 -0.2
endloop
endfacet
facet normal -0.959965 -0.280118 0
outer loop
vertex -4.96111 35.0324 0
- vertex -4.73722 34.2652 -0.1
+ vertex -4.73722 34.2652 -0.2
vertex -4.73722 34.2652 0
endloop
endfacet
facet normal -0.950901 -0.309494 0
outer loop
- vertex -4.49616 33.5245 -0.1
+ vertex -4.49616 33.5245 -0.2
vertex -4.73722 34.2652 0
- vertex -4.73722 34.2652 -0.1
+ vertex -4.73722 34.2652 -0.2
endloop
endfacet
facet normal -0.950901 -0.309494 0
outer loop
vertex -4.73722 34.2652 0
- vertex -4.49616 33.5245 -0.1
+ vertex -4.49616 33.5245 -0.2
vertex -4.49616 33.5245 0
endloop
endfacet
facet normal -0.940636 -0.339418 0
outer loop
- vertex -4.23933 32.8128 -0.1
+ vertex -4.23933 32.8128 -0.2
vertex -4.49616 33.5245 0
- vertex -4.49616 33.5245 -0.1
+ vertex -4.49616 33.5245 -0.2
endloop
endfacet
facet normal -0.940636 -0.339418 0
outer loop
vertex -4.49616 33.5245 0
- vertex -4.23933 32.8128 -0.1
+ vertex -4.23933 32.8128 -0.2
vertex -4.23933 32.8128 0
endloop
endfacet
facet normal -0.928971 -0.370153 0
outer loop
- vertex -3.96814 32.1322 -0.1
+ vertex -3.96814 32.1322 -0.2
vertex -4.23933 32.8128 0
- vertex -4.23933 32.8128 -0.1
+ vertex -4.23933 32.8128 -0.2
endloop
endfacet
facet normal -0.928971 -0.370153 0
outer loop
vertex -4.23933 32.8128 0
- vertex -3.96814 32.1322 -0.1
+ vertex -3.96814 32.1322 -0.2
vertex -3.96814 32.1322 0
endloop
endfacet
facet normal -0.915636 -0.402008 0
outer loop
- vertex -3.68399 31.485 -0.1
+ vertex -3.68399 31.485 -0.2
vertex -3.96814 32.1322 0
- vertex -3.96814 32.1322 -0.1
+ vertex -3.96814 32.1322 -0.2
endloop
endfacet
facet normal -0.915636 -0.402008 0
outer loop
vertex -3.96814 32.1322 0
- vertex -3.68399 31.485 -0.1
+ vertex -3.68399 31.485 -0.2
vertex -3.68399 31.485 0
endloop
endfacet
facet normal -0.900273 -0.435326 0
outer loop
- vertex -3.38828 30.8734 -0.1
+ vertex -3.38828 30.8734 -0.2
vertex -3.68399 31.485 0
- vertex -3.68399 31.485 -0.1
+ vertex -3.68399 31.485 -0.2
endloop
endfacet
facet normal -0.900273 -0.435326 0
outer loop
vertex -3.68399 31.485 0
- vertex -3.38828 30.8734 -0.1
+ vertex -3.38828 30.8734 -0.2
vertex -3.38828 30.8734 0
endloop
endfacet
facet normal -0.882395 -0.47051 0
outer loop
- vertex -3.08241 30.2998 -0.1
+ vertex -3.08241 30.2998 -0.2
vertex -3.38828 30.8734 0
- vertex -3.38828 30.8734 -0.1
+ vertex -3.38828 30.8734 -0.2
endloop
endfacet
facet normal -0.882395 -0.47051 0
outer loop
vertex -3.38828 30.8734 0
- vertex -3.08241 30.2998 -0.1
+ vertex -3.08241 30.2998 -0.2
vertex -3.08241 30.2998 0
endloop
endfacet
facet normal -0.861349 -0.508014 0
outer loop
- vertex -2.7678 29.7664 -0.1
+ vertex -2.7678 29.7664 -0.2
vertex -3.08241 30.2998 0
- vertex -3.08241 30.2998 -0.1
+ vertex -3.08241 30.2998 -0.2
endloop
endfacet
facet normal -0.861349 -0.508014 0
outer loop
vertex -3.08241 30.2998 0
- vertex -2.7678 29.7664 -0.1
+ vertex -2.7678 29.7664 -0.2
vertex -2.7678 29.7664 0
endloop
endfacet
facet normal -0.83625 -0.548349 0
outer loop
- vertex -2.44583 29.2754 -0.1
+ vertex -2.44583 29.2754 -0.2
vertex -2.7678 29.7664 0
- vertex -2.7678 29.7664 -0.1
+ vertex -2.7678 29.7664 -0.2
endloop
endfacet
facet normal -0.83625 -0.548349 0
outer loop
vertex -2.7678 29.7664 0
- vertex -2.44583 29.2754 -0.1
+ vertex -2.44583 29.2754 -0.2
vertex -2.44583 29.2754 0
endloop
endfacet
facet normal -0.805875 -0.592086 0
outer loop
- vertex -2.11792 28.8291 -0.1
+ vertex -2.11792 28.8291 -0.2
vertex -2.44583 29.2754 0
- vertex -2.44583 29.2754 -0.1
+ vertex -2.44583 29.2754 -0.2
endloop
endfacet
facet normal -0.805875 -0.592086 0
outer loop
vertex -2.44583 29.2754 0
- vertex -2.11792 28.8291 -0.1
+ vertex -2.11792 28.8291 -0.2
vertex -2.11792 28.8291 0
endloop
endfacet
facet normal -0.768548 -0.639792 0
outer loop
- vertex -1.78547 28.4297 -0.1
+ vertex -1.78547 28.4297 -0.2
vertex -2.11792 28.8291 0
- vertex -2.11792 28.8291 -0.1
+ vertex -2.11792 28.8291 -0.2
endloop
endfacet
facet normal -0.768548 -0.639792 0
outer loop
vertex -2.11792 28.8291 0
- vertex -1.78547 28.4297 -0.1
+ vertex -1.78547 28.4297 -0.2
vertex -1.78547 28.4297 0
endloop
endfacet
facet normal -0.721954 -0.691941 0
outer loop
- vertex -1.44988 28.0795 -0.1
+ vertex -1.44988 28.0795 -0.2
vertex -1.78547 28.4297 0
- vertex -1.78547 28.4297 -0.1
+ vertex -1.78547 28.4297 -0.2
endloop
endfacet
facet normal -0.721954 -0.691941 0
outer loop
vertex -1.78547 28.4297 0
- vertex -1.44988 28.0795 -0.1
+ vertex -1.44988 28.0795 -0.2
vertex -1.44988 28.0795 0
endloop
endfacet
facet normal -0.662916 -0.748694 0
outer loop
- vertex -1.44988 28.0795 -0.1
+ vertex -1.44988 28.0795 -0.2
vertex -1.11256 27.7809 0
vertex -1.44988 28.0795 0
endloop
@@ -42821,13 +42821,13 @@ solid OpenSCAD_Model
facet normal -0.662916 -0.748694 -0
outer loop
vertex -1.11256 27.7809 0
- vertex -1.44988 28.0795 -0.1
- vertex -1.11256 27.7809 -0.1
+ vertex -1.44988 28.0795 -0.2
+ vertex -1.11256 27.7809 -0.2
endloop
endfacet
facet normal -0.5872 -0.809442 0
outer loop
- vertex -1.11256 27.7809 -0.1
+ vertex -1.11256 27.7809 -0.2
vertex -0.7749 27.5359 0
vertex -1.11256 27.7809 0
endloop
@@ -42835,13 +42835,13 @@ solid OpenSCAD_Model
facet normal -0.5872 -0.809442 -0
outer loop
vertex -0.7749 27.5359 0
- vertex -1.11256 27.7809 -0.1
- vertex -0.7749 27.5359 -0.1
+ vertex -1.11256 27.7809 -0.2
+ vertex -0.7749 27.5359 -0.2
endloop
endfacet
facet normal -0.48954 -0.871981 0
outer loop
- vertex -0.7749 27.5359 -0.1
+ vertex -0.7749 27.5359 -0.2
vertex -0.438314 27.347 0
vertex -0.7749 27.5359 0
endloop
@@ -42849,13 +42849,13 @@ solid OpenSCAD_Model
facet normal -0.48954 -0.871981 -0
outer loop
vertex -0.438314 27.347 0
- vertex -0.7749 27.5359 -0.1
- vertex -0.438314 27.347 -0.1
+ vertex -0.7749 27.5359 -0.2
+ vertex -0.438314 27.347 -0.2
endloop
endfacet
facet normal -0.364353 -0.931261 0
outer loop
- vertex -0.438314 27.347 -0.1
+ vertex -0.438314 27.347 -0.2
vertex -0.104203 27.2162 0
vertex -0.438314 27.347 0
endloop
@@ -42863,13 +42863,13 @@ solid OpenSCAD_Model
facet normal -0.364353 -0.931261 -0
outer loop
vertex -0.104203 27.2162 0
- vertex -0.438314 27.347 -0.1
- vertex -0.104203 27.2162 -0.1
+ vertex -0.438314 27.347 -0.2
+ vertex -0.104203 27.2162 -0.2
endloop
endfacet
facet normal -0.248562 -0.968616 0
outer loop
- vertex -0.104203 27.2162 -0.1
+ vertex -0.104203 27.2162 -0.2
vertex 0.215611 27.1342 0
vertex -0.104203 27.2162 0
endloop
@@ -42877,13 +42877,13 @@ solid OpenSCAD_Model
facet normal -0.248562 -0.968616 -0
outer loop
vertex 0.215611 27.1342 0
- vertex -0.104203 27.2162 -0.1
- vertex 0.215611 27.1342 -0.1
+ vertex -0.104203 27.2162 -0.2
+ vertex 0.215611 27.1342 -0.2
endloop
endfacet
facet normal -0.161031 -0.986949 0
outer loop
- vertex 0.215611 27.1342 -0.1
+ vertex 0.215611 27.1342 -0.2
vertex 0.505992 27.0868 0
vertex 0.215611 27.1342 0
endloop
@@ -42891,13 +42891,13 @@ solid OpenSCAD_Model
facet normal -0.161031 -0.986949 -0
outer loop
vertex 0.505992 27.0868 0
- vertex 0.215611 27.1342 -0.1
- vertex 0.505992 27.0868 -0.1
+ vertex 0.215611 27.1342 -0.2
+ vertex 0.505992 27.0868 -0.2
endloop
endfacet
facet normal -0.0401535 -0.999194 0
outer loop
- vertex 0.505992 27.0868 -0.1
+ vertex 0.505992 27.0868 -0.2
vertex 0.734953 27.0776 0
vertex 0.505992 27.0868 0
endloop
@@ -42905,13 +42905,13 @@ solid OpenSCAD_Model
facet normal -0.0401535 -0.999194 -0
outer loop
vertex 0.734953 27.0776 0
- vertex 0.505992 27.0868 -0.1
- vertex 0.734953 27.0776 -0.1
+ vertex 0.505992 27.0868 -0.2
+ vertex 0.734953 27.0776 -0.2
endloop
endfacet
facet normal 0.1315 -0.991316 0
outer loop
- vertex 0.734953 27.0776 -0.1
+ vertex 0.734953 27.0776 -0.2
vertex 0.816408 27.0884 0
vertex 0.734953 27.0776 0
endloop
@@ -42919,13 +42919,13 @@ solid OpenSCAD_Model
facet normal 0.1315 -0.991316 0
outer loop
vertex 0.816408 27.0884 0
- vertex 0.734953 27.0776 -0.1
- vertex 0.816408 27.0884 -0.1
+ vertex 0.734953 27.0776 -0.2
+ vertex 0.816408 27.0884 -0.2
endloop
endfacet
facet normal 0.371587 -0.928398 0
outer loop
- vertex 0.816408 27.0884 -0.1
+ vertex 0.816408 27.0884 -0.2
vertex 0.870515 27.1101 0
vertex 0.816408 27.0884 0
endloop
@@ -42933,293 +42933,293 @@ solid OpenSCAD_Model
facet normal 0.371587 -0.928398 0
outer loop
vertex 0.870515 27.1101 0
- vertex 0.816408 27.0884 -0.1
- vertex 0.870515 27.1101 -0.1
+ vertex 0.816408 27.0884 -0.2
+ vertex 0.870515 27.1101 -0.2
endloop
endfacet
facet normal 0.819454 -0.573145 0
outer loop
vertex 0.870515 27.1101 0
- vertex 0.908598 27.1645 -0.1
+ vertex 0.908598 27.1645 -0.2
vertex 0.908598 27.1645 0
endloop
endfacet
facet normal 0.819454 -0.573145 0
outer loop
- vertex 0.908598 27.1645 -0.1
+ vertex 0.908598 27.1645 -0.2
vertex 0.870515 27.1101 0
- vertex 0.870515 27.1101 -0.1
+ vertex 0.870515 27.1101 -0.2
endloop
endfacet
facet normal 0.947054 -0.321074 0
outer loop
vertex 0.908598 27.1645 0
- vertex 0.944126 27.2693 -0.1
+ vertex 0.944126 27.2693 -0.2
vertex 0.944126 27.2693 0
endloop
endfacet
facet normal 0.947054 -0.321074 0
outer loop
- vertex 0.944126 27.2693 -0.1
+ vertex 0.944126 27.2693 -0.2
vertex 0.908598 27.1645 0
- vertex 0.908598 27.1645 -0.1
+ vertex 0.908598 27.1645 -0.2
endloop
endfacet
facet normal 0.984285 -0.17659 0
outer loop
vertex 0.944126 27.2693 0
- vertex 1.00441 27.6053 -0.1
+ vertex 1.00441 27.6053 -0.2
vertex 1.00441 27.6053 0
endloop
endfacet
facet normal 0.984285 -0.17659 0
outer loop
- vertex 1.00441 27.6053 -0.1
+ vertex 1.00441 27.6053 -0.2
vertex 0.944126 27.2693 0
- vertex 0.944126 27.2693 -0.1
+ vertex 0.944126 27.2693 -0.2
endloop
endfacet
facet normal 0.996161 -0.0875344 0
outer loop
vertex 1.00441 27.6053 0
- vertex 1.04514 28.0688 -0.1
+ vertex 1.04514 28.0688 -0.2
vertex 1.04514 28.0688 0
endloop
endfacet
facet normal 0.996161 -0.0875344 0
outer loop
- vertex 1.04514 28.0688 -0.1
+ vertex 1.04514 28.0688 -0.2
vertex 1.00441 27.6053 0
- vertex 1.00441 27.6053 -0.1
+ vertex 1.00441 27.6053 -0.2
endloop
endfacet
facet normal 0.999619 -0.0276007 0
outer loop
vertex 1.04514 28.0688 0
- vertex 1.0601 28.6106 -0.1
+ vertex 1.0601 28.6106 -0.2
vertex 1.0601 28.6106 0
endloop
endfacet
facet normal 0.999619 -0.0276007 0
outer loop
- vertex 1.0601 28.6106 -0.1
+ vertex 1.0601 28.6106 -0.2
vertex 1.04514 28.0688 0
- vertex 1.04514 28.0688 -0.1
+ vertex 1.04514 28.0688 -0.2
endloop
endfacet
facet normal 0.999546 -0.0301211 0
outer loop
vertex 1.0601 28.6106 0
- vertex 1.07949 29.2543 -0.1
+ vertex 1.07949 29.2543 -0.2
vertex 1.07949 29.2543 0
endloop
endfacet
facet normal 0.999546 -0.0301211 0
outer loop
- vertex 1.07949 29.2543 -0.1
+ vertex 1.07949 29.2543 -0.2
vertex 1.0601 28.6106 0
- vertex 1.0601 28.6106 -0.1
+ vertex 1.0601 28.6106 -0.2
endloop
endfacet
facet normal 0.995652 -0.0931476 0
outer loop
vertex 1.07949 29.2543 0
- vertex 1.13903 29.8907 -0.1
+ vertex 1.13903 29.8907 -0.2
vertex 1.13903 29.8907 0
endloop
endfacet
facet normal 0.995652 -0.0931476 0
outer loop
- vertex 1.13903 29.8907 -0.1
+ vertex 1.13903 29.8907 -0.2
vertex 1.07949 29.2543 0
- vertex 1.07949 29.2543 -0.1
+ vertex 1.07949 29.2543 -0.2
endloop
endfacet
facet normal 0.987491 -0.157674 0
outer loop
vertex 1.13903 29.8907 0
- vertex 1.24074 30.5277 -0.1
+ vertex 1.24074 30.5277 -0.2
vertex 1.24074 30.5277 0
endloop
endfacet
facet normal 0.987491 -0.157674 0
outer loop
- vertex 1.24074 30.5277 -0.1
+ vertex 1.24074 30.5277 -0.2
vertex 1.13903 29.8907 0
- vertex 1.13903 29.8907 -0.1
+ vertex 1.13903 29.8907 -0.2
endloop
endfacet
facet normal 0.975385 -0.220507 0
outer loop
vertex 1.24074 30.5277 0
- vertex 1.38662 31.173 -0.1
+ vertex 1.38662 31.173 -0.2
vertex 1.38662 31.173 0
endloop
endfacet
facet normal 0.975385 -0.220507 0
outer loop
- vertex 1.38662 31.173 -0.1
+ vertex 1.38662 31.173 -0.2
vertex 1.24074 30.5277 0
- vertex 1.24074 30.5277 -0.1
+ vertex 1.24074 30.5277 -0.2
endloop
endfacet
facet normal 0.960327 -0.278878 0
outer loop
vertex 1.38662 31.173 0
- vertex 1.57871 31.8344 -0.1
+ vertex 1.57871 31.8344 -0.2
vertex 1.57871 31.8344 0
endloop
endfacet
facet normal 0.960327 -0.278878 0
outer loop
- vertex 1.57871 31.8344 -0.1
+ vertex 1.57871 31.8344 -0.2
vertex 1.38662 31.173 0
- vertex 1.38662 31.173 -0.1
+ vertex 1.38662 31.173 -0.2
endloop
endfacet
facet normal 0.943682 -0.330853 0
outer loop
vertex 1.57871 31.8344 0
- vertex 1.81903 32.5199 -0.1
+ vertex 1.81903 32.5199 -0.2
vertex 1.81903 32.5199 0
endloop
endfacet
facet normal 0.943682 -0.330853 0
outer loop
- vertex 1.81903 32.5199 -0.1
+ vertex 1.81903 32.5199 -0.2
vertex 1.57871 31.8344 0
- vertex 1.57871 31.8344 -0.1
+ vertex 1.57871 31.8344 -0.2
endloop
endfacet
facet normal 0.926833 -0.375474 0
outer loop
vertex 1.81903 32.5199 0
- vertex 2.10958 33.2371 -0.1
+ vertex 2.10958 33.2371 -0.2
vertex 2.10958 33.2371 0
endloop
endfacet
facet normal 0.926833 -0.375474 0
outer loop
- vertex 2.10958 33.2371 -0.1
+ vertex 2.10958 33.2371 -0.2
vertex 1.81903 32.5199 0
- vertex 1.81903 32.5199 -0.1
+ vertex 1.81903 32.5199 -0.2
endloop
endfacet
facet normal 0.910903 -0.412619 0
outer loop
vertex 2.10958 33.2371 0
- vertex 2.4524 33.9939 -0.1
+ vertex 2.4524 33.9939 -0.2
vertex 2.4524 33.9939 0
endloop
endfacet
facet normal 0.910903 -0.412619 0
outer loop
- vertex 2.4524 33.9939 -0.1
+ vertex 2.4524 33.9939 -0.2
vertex 2.10958 33.2371 0
- vertex 2.10958 33.2371 -0.1
+ vertex 2.10958 33.2371 -0.2
endloop
endfacet
facet normal 0.897899 -0.440202 0
outer loop
vertex 2.4524 33.9939 0
- vertex 2.84738 34.7996 -0.1
+ vertex 2.84738 34.7996 -0.2
vertex 2.84738 34.7996 0
endloop
endfacet
facet normal 0.897899 -0.440202 0
outer loop
- vertex 2.84738 34.7996 -0.1
+ vertex 2.84738 34.7996 -0.2
vertex 2.4524 33.9939 0
- vertex 2.4524 33.9939 -0.1
+ vertex 2.4524 33.9939 -0.2
endloop
endfacet
facet normal 0.887623 -0.460571 0
outer loop
vertex 2.84738 34.7996 0
- vertex 3.26543 35.6052 -0.1
+ vertex 3.26543 35.6052 -0.2
vertex 3.26543 35.6052 0
endloop
endfacet
facet normal 0.887623 -0.460571 0
outer loop
- vertex 3.26543 35.6052 -0.1
+ vertex 3.26543 35.6052 -0.2
vertex 2.84738 34.7996 0
- vertex 2.84738 34.7996 -0.1
+ vertex 2.84738 34.7996 -0.2
endloop
endfacet
facet normal 0.877821 -0.478989 0
outer loop
vertex 3.26543 35.6052 0
- vertex 3.68699 36.3778 -0.1
+ vertex 3.68699 36.3778 -0.2
vertex 3.68699 36.3778 0
endloop
endfacet
facet normal 0.877821 -0.478989 0
outer loop
- vertex 3.68699 36.3778 -0.1
+ vertex 3.68699 36.3778 -0.2
vertex 3.26543 35.6052 0
- vertex 3.26543 35.6052 -0.1
+ vertex 3.26543 35.6052 -0.2
endloop
endfacet
facet normal 0.867241 -0.497888 0
outer loop
vertex 3.68699 36.3778 0
- vertex 4.09252 37.0842 -0.1
+ vertex 4.09252 37.0842 -0.2
vertex 4.09252 37.0842 0
endloop
endfacet
facet normal 0.867241 -0.497888 0
outer loop
- vertex 4.09252 37.0842 -0.1
+ vertex 4.09252 37.0842 -0.2
vertex 3.68699 36.3778 0
- vertex 3.68699 36.3778 -0.1
+ vertex 3.68699 36.3778 -0.2
endloop
endfacet
facet normal 0.853923 -0.520399 0
outer loop
vertex 4.09252 37.0842 0
- vertex 4.46246 37.6912 -0.1
+ vertex 4.46246 37.6912 -0.2
vertex 4.46246 37.6912 0
endloop
endfacet
facet normal 0.853923 -0.520399 0
outer loop
- vertex 4.46246 37.6912 -0.1
+ vertex 4.46246 37.6912 -0.2
vertex 4.09252 37.0842 0
- vertex 4.09252 37.0842 -0.1
+ vertex 4.09252 37.0842 -0.2
endloop
endfacet
facet normal 0.833342 -0.552757 0
outer loop
vertex 4.46246 37.6912 0
- vertex 4.77727 38.1658 -0.1
+ vertex 4.77727 38.1658 -0.2
vertex 4.77727 38.1658 0
endloop
endfacet
facet normal 0.833342 -0.552757 0
outer loop
- vertex 4.77727 38.1658 -0.1
+ vertex 4.77727 38.1658 -0.2
vertex 4.46246 37.6912 0
- vertex 4.46246 37.6912 -0.1
+ vertex 4.46246 37.6912 -0.2
endloop
endfacet
facet normal 0.789667 -0.613535 0
outer loop
vertex 4.77727 38.1658 0
- vertex 5.01738 38.4749 -0.1
+ vertex 5.01738 38.4749 -0.2
vertex 5.01738 38.4749 0
endloop
endfacet
facet normal 0.789667 -0.613535 0
outer loop
- vertex 5.01738 38.4749 -0.1
+ vertex 5.01738 38.4749 -0.2
vertex 4.77727 38.1658 0
- vertex 4.77727 38.1658 -0.1
+ vertex 4.77727 38.1658 -0.2
endloop
endfacet
facet normal 0.690746 -0.723097 0
outer loop
- vertex 5.01738 38.4749 -0.1
+ vertex 5.01738 38.4749 -0.2
vertex 5.10332 38.557 0
vertex 5.01738 38.4749 0
endloop
@@ -43227,13 +43227,13 @@ solid OpenSCAD_Model
facet normal 0.690746 -0.723097 0
outer loop
vertex 5.10332 38.557 0
- vertex 5.01738 38.4749 -0.1
- vertex 5.10332 38.557 -0.1
+ vertex 5.01738 38.4749 -0.2
+ vertex 5.10332 38.557 -0.2
endloop
endfacet
facet normal 0.426773 -0.904359 0
outer loop
- vertex 5.10332 38.557 -0.1
+ vertex 5.10332 38.557 -0.2
vertex 5.16325 38.5852 0
vertex 5.10332 38.557 0
endloop
@@ -43241,13 +43241,13 @@ solid OpenSCAD_Model
facet normal 0.426773 -0.904359 0
outer loop
vertex 5.16325 38.5852 0
- vertex 5.10332 38.557 -0.1
- vertex 5.16325 38.5852 -0.1
+ vertex 5.10332 38.557 -0.2
+ vertex 5.16325 38.5852 -0.2
endloop
endfacet
facet normal -0.22248 -0.974937 0
outer loop
- vertex 5.16325 38.5852 -0.1
+ vertex 5.16325 38.5852 -0.2
vertex 5.20457 38.5758 0
vertex 5.16325 38.5852 0
endloop
@@ -43255,139 +43255,139 @@ solid OpenSCAD_Model
facet normal -0.22248 -0.974937 -0
outer loop
vertex 5.20457 38.5758 0
- vertex 5.16325 38.5852 -0.1
- vertex 5.20457 38.5758 -0.1
+ vertex 5.16325 38.5852 -0.2
+ vertex 5.20457 38.5758 -0.2
endloop
endfacet
facet normal -0.944948 0.327219 0
outer loop
- vertex 7.1242 19.0144 -0.1
+ vertex 7.1242 19.0144 -0.2
vertex 7.15267 19.0966 0
- vertex 7.15267 19.0966 -0.1
+ vertex 7.15267 19.0966 -0.2
endloop
endfacet
facet normal -0.944948 0.327219 0
outer loop
vertex 7.15267 19.0966 0
- vertex 7.1242 19.0144 -0.1
+ vertex 7.1242 19.0144 -0.2
vertex 7.1242 19.0144 0
endloop
endfacet
facet normal -0.999677 -0.0254292 0
outer loop
- vertex 7.1273 18.8927 -0.1
+ vertex 7.1273 18.8927 -0.2
vertex 7.1242 19.0144 0
- vertex 7.1242 19.0144 -0.1
+ vertex 7.1242 19.0144 -0.2
endloop
endfacet
facet normal -0.999677 -0.0254292 0
outer loop
vertex 7.1242 19.0144 0
- vertex 7.1273 18.8927 -0.1
+ vertex 7.1273 18.8927 -0.2
vertex 7.1273 18.8927 0
endloop
endfacet
facet normal -0.971548 -0.236844 0
outer loop
- vertex 7.16351 18.7442 -0.1
+ vertex 7.16351 18.7442 -0.2
vertex 7.1273 18.8927 0
- vertex 7.1273 18.8927 -0.1
+ vertex 7.1273 18.8927 -0.2
endloop
endfacet
facet normal -0.971548 -0.236844 0
outer loop
vertex 7.1273 18.8927 0
- vertex 7.16351 18.7442 -0.1
+ vertex 7.16351 18.7442 -0.2
vertex 7.16351 18.7442 0
endloop
endfacet
facet normal -0.922269 -0.38655 0
outer loop
- vertex 7.29207 18.4374 -0.1
+ vertex 7.29207 18.4374 -0.2
vertex 7.16351 18.7442 0
- vertex 7.16351 18.7442 -0.1
+ vertex 7.16351 18.7442 -0.2
endloop
endfacet
facet normal -0.922269 -0.38655 0
outer loop
vertex 7.16351 18.7442 0
- vertex 7.29207 18.4374 -0.1
+ vertex 7.29207 18.4374 -0.2
vertex 7.29207 18.4374 0
endloop
endfacet
facet normal -0.894309 -0.44745 0
outer loop
- vertex 7.49889 18.0241 -0.1
+ vertex 7.49889 18.0241 -0.2
vertex 7.29207 18.4374 0
- vertex 7.29207 18.4374 -0.1
+ vertex 7.29207 18.4374 -0.2
endloop
endfacet
facet normal -0.894309 -0.44745 0
outer loop
vertex 7.29207 18.4374 0
- vertex 7.49889 18.0241 -0.1
+ vertex 7.49889 18.0241 -0.2
vertex 7.49889 18.0241 0
endloop
endfacet
facet normal -0.872312 -0.488949 0
outer loop
- vertex 8.03973 17.0592 -0.1
+ vertex 8.03973 17.0592 -0.2
vertex 7.49889 18.0241 0
- vertex 7.49889 18.0241 -0.1
+ vertex 7.49889 18.0241 -0.2
endloop
endfacet
facet normal -0.872312 -0.488949 0
outer loop
vertex 7.49889 18.0241 0
- vertex 8.03973 17.0592 -0.1
+ vertex 8.03973 17.0592 -0.2
vertex 8.03973 17.0592 0
endloop
endfacet
facet normal -0.84697 -0.53164 0
outer loop
- vertex 8.57086 16.213 -0.1
+ vertex 8.57086 16.213 -0.2
vertex 8.03973 17.0592 0
- vertex 8.03973 17.0592 -0.1
+ vertex 8.03973 17.0592 -0.2
endloop
endfacet
facet normal -0.84697 -0.53164 0
outer loop
vertex 8.03973 17.0592 0
- vertex 8.57086 16.213 -0.1
+ vertex 8.57086 16.213 -0.2
vertex 8.57086 16.213 0
endloop
endfacet
facet normal -0.805848 -0.592122 0
outer loop
- vertex 8.76553 15.9481 -0.1
+ vertex 8.76553 15.9481 -0.2
vertex 8.57086 16.213 0
- vertex 8.57086 16.213 -0.1
+ vertex 8.57086 16.213 -0.2
endloop
endfacet
facet normal -0.805848 -0.592122 0
outer loop
vertex 8.57086 16.213 0
- vertex 8.76553 15.9481 -0.1
+ vertex 8.76553 15.9481 -0.2
vertex 8.76553 15.9481 0
endloop
endfacet
facet normal -0.732738 -0.680511 0
outer loop
- vertex 8.83337 15.875 -0.1
+ vertex 8.83337 15.875 -0.2
vertex 8.76553 15.9481 0
- vertex 8.76553 15.9481 -0.1
+ vertex 8.76553 15.9481 -0.2
endloop
endfacet
facet normal -0.732738 -0.680511 0
outer loop
vertex 8.76553 15.9481 0
- vertex 8.83337 15.875 -0.1
+ vertex 8.83337 15.875 -0.2
vertex 8.83337 15.875 0
endloop
endfacet
facet normal -0.509392 -0.860535 0
outer loop
- vertex 8.83337 15.875 -0.1
+ vertex 8.83337 15.875 -0.2
vertex 8.87708 15.8492 0
vertex 8.83337 15.875 0
endloop
@@ -43395,13 +43395,13 @@ solid OpenSCAD_Model
facet normal -0.509392 -0.860535 -0
outer loop
vertex 8.87708 15.8492 0
- vertex 8.83337 15.875 -0.1
- vertex 8.87708 15.8492 -0.1
+ vertex 8.83337 15.875 -0.2
+ vertex 8.87708 15.8492 -0.2
endloop
endfacet
facet normal 0.216566 -0.976268 0
outer loop
- vertex 8.87708 15.8492 -0.1
+ vertex 8.87708 15.8492 -0.2
vertex 8.99158 15.8746 0
vertex 8.87708 15.8492 0
endloop
@@ -43409,13 +43409,13 @@ solid OpenSCAD_Model
facet normal 0.216566 -0.976268 0
outer loop
vertex 8.99158 15.8746 0
- vertex 8.87708 15.8492 -0.1
- vertex 8.99158 15.8746 -0.1
+ vertex 8.87708 15.8492 -0.2
+ vertex 8.99158 15.8746 -0.2
endloop
endfacet
facet normal 0.333607 -0.942712 0
outer loop
- vertex 8.99158 15.8746 -0.1
+ vertex 8.99158 15.8746 -0.2
vertex 9.19116 15.9452 0
vertex 8.99158 15.8746 0
endloop
@@ -43423,13 +43423,13 @@ solid OpenSCAD_Model
facet normal 0.333607 -0.942712 0
outer loop
vertex 9.19116 15.9452 0
- vertex 8.99158 15.8746 -0.1
- vertex 9.19116 15.9452 -0.1
+ vertex 8.99158 15.8746 -0.2
+ vertex 9.19116 15.9452 -0.2
endloop
endfacet
facet normal 0.395815 -0.91833 0
outer loop
- vertex 9.19116 15.9452 -0.1
+ vertex 9.19116 15.9452 -0.2
vertex 9.73318 16.1788 0
vertex 9.19116 15.9452 0
endloop
@@ -43437,13 +43437,13 @@ solid OpenSCAD_Model
facet normal 0.395815 -0.91833 0
outer loop
vertex 9.73318 16.1788 0
- vertex 9.19116 15.9452 -0.1
- vertex 9.73318 16.1788 -0.1
+ vertex 9.19116 15.9452 -0.2
+ vertex 9.73318 16.1788 -0.2
endloop
endfacet
facet normal 0.425917 -0.904762 0
outer loop
- vertex 9.73318 16.1788 -0.1
+ vertex 9.73318 16.1788 -0.2
vertex 10.4375 16.5104 0
vertex 9.73318 16.1788 0
endloop
@@ -43451,27 +43451,27 @@ solid OpenSCAD_Model
facet normal 0.425917 -0.904762 0
outer loop
vertex 10.4375 16.5104 0
- vertex 9.73318 16.1788 -0.1
- vertex 10.4375 16.5104 -0.1
+ vertex 9.73318 16.1788 -0.2
+ vertex 10.4375 16.5104 -0.2
endloop
endfacet
facet normal 0.716732 0.697349 0
outer loop
vertex 10.4375 16.5104 0
- vertex 9.77546 17.1908 -0.1
+ vertex 9.77546 17.1908 -0.2
vertex 9.77546 17.1908 0
endloop
endfacet
facet normal 0.716732 0.697349 0
outer loop
- vertex 9.77546 17.1908 -0.1
+ vertex 9.77546 17.1908 -0.2
vertex 10.4375 16.5104 0
- vertex 10.4375 16.5104 -0.1
+ vertex 10.4375 16.5104 -0.2
endloop
endfacet
facet normal 0.695522 0.718505 -0
outer loop
- vertex 9.77546 17.1908 -0.1
+ vertex 9.77546 17.1908 -0.2
vertex 9.46246 17.4938 0
vertex 9.77546 17.1908 0
endloop
@@ -43479,13 +43479,13 @@ solid OpenSCAD_Model
facet normal 0.695522 0.718505 0
outer loop
vertex 9.46246 17.4938 0
- vertex 9.77546 17.1908 -0.1
- vertex 9.46246 17.4938 -0.1
+ vertex 9.77546 17.1908 -0.2
+ vertex 9.46246 17.4938 -0.2
endloop
endfacet
facet normal 0.663067 0.74856 -0
outer loop
- vertex 9.46246 17.4938 -0.1
+ vertex 9.46246 17.4938 -0.2
vertex 9.09841 17.8163 0
vertex 9.46246 17.4938 0
endloop
@@ -43493,13 +43493,13 @@ solid OpenSCAD_Model
facet normal 0.663067 0.74856 0
outer loop
vertex 9.09841 17.8163 0
- vertex 9.46246 17.4938 -0.1
- vertex 9.09841 17.8163 -0.1
+ vertex 9.46246 17.4938 -0.2
+ vertex 9.09841 17.8163 -0.2
endloop
endfacet
facet normal 0.6264 0.779502 -0
outer loop
- vertex 9.09841 17.8163 -0.1
+ vertex 9.09841 17.8163 -0.2
vertex 8.31493 18.4459 0
vertex 9.09841 17.8163 0
endloop
@@ -43507,13 +43507,13 @@ solid OpenSCAD_Model
facet normal 0.6264 0.779502 0
outer loop
vertex 8.31493 18.4459 0
- vertex 9.09841 17.8163 -0.1
- vertex 8.31493 18.4459 -0.1
+ vertex 9.09841 17.8163 -0.2
+ vertex 8.31493 18.4459 -0.2
endloop
endfacet
facet normal 0.58921 0.80798 -0
outer loop
- vertex 8.31493 18.4459 -0.1
+ vertex 8.31493 18.4459 -0.2
vertex 7.9444 18.7161 0
vertex 8.31493 18.4459 0
endloop
@@ -43521,13 +43521,13 @@ solid OpenSCAD_Model
facet normal 0.58921 0.80798 0
outer loop
vertex 7.9444 18.7161 0
- vertex 8.31493 18.4459 -0.1
- vertex 7.9444 18.7161 -0.1
+ vertex 8.31493 18.4459 -0.2
+ vertex 7.9444 18.7161 -0.2
endloop
endfacet
facet normal 0.554709 0.832044 -0
outer loop
- vertex 7.9444 18.7161 -0.1
+ vertex 7.9444 18.7161 -0.2
vertex 7.62063 18.9319 0
vertex 7.9444 18.7161 0
endloop
@@ -43535,13 +43535,13 @@ solid OpenSCAD_Model
facet normal 0.554709 0.832044 0
outer loop
vertex 7.62063 18.9319 0
- vertex 7.9444 18.7161 -0.1
- vertex 7.62063 18.9319 -0.1
+ vertex 7.9444 18.7161 -0.2
+ vertex 7.62063 18.9319 -0.2
endloop
endfacet
facet normal 0.492817 0.870133 -0
outer loop
- vertex 7.62063 18.9319 -0.1
+ vertex 7.62063 18.9319 -0.2
vertex 7.36805 19.075 0
vertex 7.62063 18.9319 0
endloop
@@ -43549,13 +43549,13 @@ solid OpenSCAD_Model
facet normal 0.492817 0.870133 0
outer loop
vertex 7.36805 19.075 0
- vertex 7.62063 18.9319 -0.1
- vertex 7.36805 19.075 -0.1
+ vertex 7.62063 18.9319 -0.2
+ vertex 7.36805 19.075 -0.2
endloop
endfacet
facet normal 0.313373 0.94963 -0
outer loop
- vertex 7.36805 19.075 -0.1
+ vertex 7.36805 19.075 -0.2
vertex 7.21113 19.1268 0
vertex 7.36805 19.075 0
endloop
@@ -43563,13 +43563,13 @@ solid OpenSCAD_Model
facet normal 0.313373 0.94963 0
outer loop
vertex 7.21113 19.1268 0
- vertex 7.36805 19.075 -0.1
- vertex 7.21113 19.1268 -0.1
+ vertex 7.36805 19.075 -0.2
+ vertex 7.21113 19.1268 -0.2
endloop
endfacet
facet normal -0.458832 0.888523 0
outer loop
- vertex 7.21113 19.1268 -0.1
+ vertex 7.21113 19.1268 -0.2
vertex 7.15267 19.0966 0
vertex 7.21113 19.1268 0
endloop
@@ -43577,13 +43577,13 @@ solid OpenSCAD_Model
facet normal -0.458832 0.888523 0
outer loop
vertex 7.15267 19.0966 0
- vertex 7.21113 19.1268 -0.1
- vertex 7.15267 19.0966 -0.1
+ vertex 7.21113 19.1268 -0.2
+ vertex 7.15267 19.0966 -0.2
endloop
endfacet
facet normal -0.0478819 0.998853 0
outer loop
- vertex -14.6988 24.986 -0.1
+ vertex -14.6988 24.986 -0.2
vertex -15.4289 24.9511 0
vertex -14.6988 24.986 0
endloop
@@ -43591,13 +43591,13 @@ solid OpenSCAD_Model
facet normal -0.0478819 0.998853 0
outer loop
vertex -15.4289 24.9511 0
- vertex -14.6988 24.986 -0.1
- vertex -15.4289 24.9511 -0.1
+ vertex -14.6988 24.986 -0.2
+ vertex -15.4289 24.9511 -0.2
endloop
endfacet
facet normal -0.102501 0.994733 0
outer loop
- vertex -15.4289 24.9511 -0.1
+ vertex -15.4289 24.9511 -0.2
vertex -16.0762 24.8844 0
vertex -15.4289 24.9511 0
endloop
@@ -43605,13 +43605,13 @@ solid OpenSCAD_Model
facet normal -0.102501 0.994733 0
outer loop
vertex -16.0762 24.8844 0
- vertex -15.4289 24.9511 -0.1
- vertex -16.0762 24.8844 -0.1
+ vertex -15.4289 24.9511 -0.2
+ vertex -16.0762 24.8844 -0.2
endloop
endfacet
facet normal -0.186067 0.982537 0
outer loop
- vertex -16.0762 24.8844 -0.1
+ vertex -16.0762 24.8844 -0.2
vertex -16.599 24.7853 0
vertex -16.0762 24.8844 0
endloop
@@ -43619,13 +43619,13 @@ solid OpenSCAD_Model
facet normal -0.186067 0.982537 0
outer loop
vertex -16.599 24.7853 0
- vertex -16.0762 24.8844 -0.1
- vertex -16.599 24.7853 -0.1
+ vertex -16.0762 24.8844 -0.2
+ vertex -16.599 24.7853 -0.2
endloop
endfacet
facet normal -0.197458 0.980311 0
outer loop
- vertex -16.599 24.7853 -0.1
+ vertex -16.599 24.7853 -0.2
vertex -17.1707 24.6702 0
vertex -16.599 24.7853 0
endloop
@@ -43633,13 +43633,13 @@ solid OpenSCAD_Model
facet normal -0.197458 0.980311 0
outer loop
vertex -17.1707 24.6702 0
- vertex -16.599 24.7853 -0.1
- vertex -17.1707 24.6702 -0.1
+ vertex -16.599 24.7853 -0.2
+ vertex -17.1707 24.6702 -0.2
endloop
endfacet
facet normal -0.159115 0.98726 0
outer loop
- vertex -17.1707 24.6702 -0.1
+ vertex -17.1707 24.6702 -0.2
vertex -18.0818 24.5233 0
vertex -17.1707 24.6702 0
endloop
@@ -43647,13 +43647,13 @@ solid OpenSCAD_Model
facet normal -0.159115 0.98726 0
outer loop
vertex -18.0818 24.5233 0
- vertex -17.1707 24.6702 -0.1
- vertex -18.0818 24.5233 -0.1
+ vertex -17.1707 24.6702 -0.2
+ vertex -18.0818 24.5233 -0.2
endloop
endfacet
facet normal -0.140489 0.990082 0
outer loop
- vertex -18.0818 24.5233 -0.1
+ vertex -18.0818 24.5233 -0.2
vertex -19.207 24.3637 0
vertex -18.0818 24.5233 0
endloop
@@ -43661,13 +43661,13 @@ solid OpenSCAD_Model
facet normal -0.140489 0.990082 0
outer loop
vertex -19.207 24.3637 0
- vertex -18.0818 24.5233 -0.1
- vertex -19.207 24.3637 -0.1
+ vertex -18.0818 24.5233 -0.2
+ vertex -19.207 24.3637 -0.2
endloop
endfacet
facet normal -0.125539 0.992089 0
outer loop
- vertex -19.207 24.3637 -0.1
+ vertex -19.207 24.3637 -0.2
vertex -20.4207 24.2101 0
vertex -19.207 24.3637 0
endloop
@@ -43675,13 +43675,13 @@ solid OpenSCAD_Model
facet normal -0.125539 0.992089 0
outer loop
vertex -20.4207 24.2101 0
- vertex -19.207 24.3637 -0.1
- vertex -20.4207 24.2101 -0.1
+ vertex -19.207 24.3637 -0.2
+ vertex -20.4207 24.2101 -0.2
endloop
endfacet
facet normal -0.117788 0.993039 0
outer loop
- vertex -20.4207 24.2101 -0.1
+ vertex -20.4207 24.2101 -0.2
vertex -23.3692 23.8604 0
vertex -20.4207 24.2101 0
endloop
@@ -43689,13 +43689,13 @@ solid OpenSCAD_Model
facet normal -0.117788 0.993039 0
outer loop
vertex -23.3692 23.8604 0
- vertex -20.4207 24.2101 -0.1
- vertex -23.3692 23.8604 -0.1
+ vertex -20.4207 24.2101 -0.2
+ vertex -23.3692 23.8604 -0.2
endloop
endfacet
facet normal -0.645441 -0.76381 0
outer loop
- vertex -23.3692 23.8604 -0.1
+ vertex -23.3692 23.8604 -0.2
vertex -22.6524 23.2546 0
vertex -23.3692 23.8604 0
endloop
@@ -43703,13 +43703,13 @@ solid OpenSCAD_Model
facet normal -0.645441 -0.76381 -0
outer loop
vertex -22.6524 23.2546 0
- vertex -23.3692 23.8604 -0.1
- vertex -22.6524 23.2546 -0.1
+ vertex -23.3692 23.8604 -0.2
+ vertex -22.6524 23.2546 -0.2
endloop
endfacet
facet normal -0.595678 -0.803224 0
outer loop
- vertex -22.6524 23.2546 -0.1
+ vertex -22.6524 23.2546 -0.2
vertex -22.3422 23.0246 0
vertex -22.6524 23.2546 0
endloop
@@ -43717,13 +43717,13 @@ solid OpenSCAD_Model
facet normal -0.595678 -0.803224 -0
outer loop
vertex -22.3422 23.0246 0
- vertex -22.6524 23.2546 -0.1
- vertex -22.3422 23.0246 -0.1
+ vertex -22.6524 23.2546 -0.2
+ vertex -22.3422 23.0246 -0.2
endloop
endfacet
facet normal -0.490603 -0.871383 0
outer loop
- vertex -22.3422 23.0246 -0.1
+ vertex -22.3422 23.0246 -0.2
vertex -22.0315 22.8497 0
vertex -22.3422 23.0246 0
endloop
@@ -43731,13 +43731,13 @@ solid OpenSCAD_Model
facet normal -0.490603 -0.871383 -0
outer loop
vertex -22.0315 22.8497 0
- vertex -22.3422 23.0246 -0.1
- vertex -22.0315 22.8497 -0.1
+ vertex -22.3422 23.0246 -0.2
+ vertex -22.0315 22.8497 -0.2
endloop
endfacet
facet normal -0.350196 -0.936677 0
outer loop
- vertex -22.0315 22.8497 -0.1
+ vertex -22.0315 22.8497 -0.2
vertex -21.755 22.7463 0
vertex -22.0315 22.8497 0
endloop
@@ -43745,13 +43745,13 @@ solid OpenSCAD_Model
facet normal -0.350196 -0.936677 -0
outer loop
vertex -21.755 22.7463 0
- vertex -22.0315 22.8497 -0.1
- vertex -21.755 22.7463 -0.1
+ vertex -22.0315 22.8497 -0.2
+ vertex -21.755 22.7463 -0.2
endloop
endfacet
facet normal -0.169545 -0.985522 0
outer loop
- vertex -21.755 22.7463 -0.1
+ vertex -21.755 22.7463 -0.2
vertex -21.6404 22.7266 0
vertex -21.755 22.7463 0
endloop
@@ -43759,13 +43759,13 @@ solid OpenSCAD_Model
facet normal -0.169545 -0.985522 -0
outer loop
vertex -21.6404 22.7266 0
- vertex -21.755 22.7463 -0.1
- vertex -21.6404 22.7266 -0.1
+ vertex -21.755 22.7463 -0.2
+ vertex -21.6404 22.7266 -0.2
endloop
endfacet
facet normal 0.0467747 -0.998905 0
outer loop
- vertex -21.6404 22.7266 -0.1
+ vertex -21.6404 22.7266 -0.2
vertex -21.5474 22.7309 0
vertex -21.6404 22.7266 0
endloop
@@ -43773,13 +43773,13 @@ solid OpenSCAD_Model
facet normal 0.0467747 -0.998905 0
outer loop
vertex -21.5474 22.7309 0
- vertex -21.6404 22.7266 -0.1
- vertex -21.5474 22.7309 -0.1
+ vertex -21.6404 22.7266 -0.2
+ vertex -21.5474 22.7309 -0.2
endloop
endfacet
facet normal 0.160131 -0.987096 0
outer loop
- vertex -21.5474 22.7309 -0.1
+ vertex -21.5474 22.7309 -0.2
vertex -20.7318 22.8633 0
vertex -21.5474 22.7309 0
endloop
@@ -43787,13 +43787,13 @@ solid OpenSCAD_Model
facet normal 0.160131 -0.987096 0
outer loop
vertex -20.7318 22.8633 0
- vertex -21.5474 22.7309 -0.1
- vertex -20.7318 22.8633 -0.1
+ vertex -21.5474 22.7309 -0.2
+ vertex -20.7318 22.8633 -0.2
endloop
endfacet
facet normal 0.141843 -0.989889 0
outer loop
- vertex -20.7318 22.8633 -0.1
+ vertex -20.7318 22.8633 -0.2
vertex -19.3158 23.0662 0
vertex -20.7318 22.8633 0
endloop
@@ -43801,13 +43801,13 @@ solid OpenSCAD_Model
facet normal 0.141843 -0.989889 0
outer loop
vertex -19.3158 23.0662 0
- vertex -20.7318 22.8633 -0.1
- vertex -19.3158 23.0662 -0.1
+ vertex -20.7318 22.8633 -0.2
+ vertex -19.3158 23.0662 -0.2
endloop
endfacet
facet normal 0.145154 -0.989409 0
outer loop
- vertex -19.3158 23.0662 -0.1
+ vertex -19.3158 23.0662 -0.2
vertex -17.0412 23.3999 0
vertex -19.3158 23.0662 0
endloop
@@ -43815,13 +43815,13 @@ solid OpenSCAD_Model
facet normal 0.145154 -0.989409 0
outer loop
vertex -17.0412 23.3999 0
- vertex -19.3158 23.0662 -0.1
- vertex -17.0412 23.3999 -0.1
+ vertex -19.3158 23.0662 -0.2
+ vertex -17.0412 23.3999 -0.2
endloop
endfacet
facet normal 0.153306 -0.988179 0
outer loop
- vertex -17.0412 23.3999 -0.1
+ vertex -17.0412 23.3999 -0.2
vertex -14.1612 23.8467 0
vertex -17.0412 23.3999 0
endloop
@@ -43829,13 +43829,13 @@ solid OpenSCAD_Model
facet normal 0.153306 -0.988179 0
outer loop
vertex -14.1612 23.8467 0
- vertex -17.0412 23.3999 -0.1
- vertex -14.1612 23.8467 -0.1
+ vertex -17.0412 23.3999 -0.2
+ vertex -14.1612 23.8467 -0.2
endloop
endfacet
facet normal 0.152324 -0.988331 0
outer loop
- vertex -14.1612 23.8467 -0.1
+ vertex -14.1612 23.8467 -0.2
vertex -10.5711 24.4 0
vertex -14.1612 23.8467 0
endloop
@@ -43843,13 +43843,13 @@ solid OpenSCAD_Model
facet normal 0.152324 -0.988331 0
outer loop
vertex -10.5711 24.4 0
- vertex -14.1612 23.8467 -0.1
- vertex -10.5711 24.4 -0.1
+ vertex -14.1612 23.8467 -0.2
+ vertex -10.5711 24.4 -0.2
endloop
endfacet
facet normal 0.28937 -0.957217 0
outer loop
- vertex -10.5711 24.4 -0.1
+ vertex -10.5711 24.4 -0.2
vertex -10.5349 24.4109 0
vertex -10.5711 24.4 0
endloop
@@ -43857,27 +43857,27 @@ solid OpenSCAD_Model
facet normal 0.28937 -0.957217 0
outer loop
vertex -10.5349 24.4109 0
- vertex -10.5711 24.4 -0.1
- vertex -10.5349 24.4109 -0.1
+ vertex -10.5711 24.4 -0.2
+ vertex -10.5349 24.4109 -0.2
endloop
endfacet
facet normal 0.978613 0.20571 0
outer loop
vertex -10.5349 24.4109 0
- vertex -10.5394 24.4322 -0.1
+ vertex -10.5394 24.4322 -0.2
vertex -10.5394 24.4322 0
endloop
endfacet
facet normal 0.978613 0.20571 0
outer loop
- vertex -10.5394 24.4322 -0.1
+ vertex -10.5394 24.4322 -0.2
vertex -10.5349 24.4109 0
- vertex -10.5349 24.4109 -0.1
+ vertex -10.5349 24.4109 -0.2
endloop
endfacet
facet normal 0.497201 0.867635 -0
outer loop
- vertex -10.5394 24.4322 -0.1
+ vertex -10.5394 24.4322 -0.2
vertex -10.6591 24.5009 0
vertex -10.5394 24.4322 0
endloop
@@ -43885,13 +43885,13 @@ solid OpenSCAD_Model
facet normal 0.497201 0.867635 0
outer loop
vertex -10.6591 24.5009 0
- vertex -10.5394 24.4322 -0.1
- vertex -10.6591 24.5009 -0.1
+ vertex -10.5394 24.4322 -0.2
+ vertex -10.6591 24.5009 -0.2
endloop
endfacet
facet normal 0.356744 0.934202 -0
outer loop
- vertex -10.6591 24.5009 -0.1
+ vertex -10.6591 24.5009 -0.2
vertex -10.9077 24.5958 0
vertex -10.6591 24.5009 0
endloop
@@ -43899,13 +43899,13 @@ solid OpenSCAD_Model
facet normal 0.356744 0.934202 0
outer loop
vertex -10.9077 24.5958 0
- vertex -10.6591 24.5009 -0.1
- vertex -10.9077 24.5958 -0.1
+ vertex -10.6591 24.5009 -0.2
+ vertex -10.9077 24.5958 -0.2
endloop
endfacet
facet normal 0.299009 0.95425 -0
outer loop
- vertex -10.9077 24.5958 -0.1
+ vertex -10.9077 24.5958 -0.2
vertex -11.2625 24.7069 0
vertex -10.9077 24.5958 0
endloop
@@ -43913,13 +43913,13 @@ solid OpenSCAD_Model
facet normal 0.299009 0.95425 0
outer loop
vertex -11.2625 24.7069 0
- vertex -10.9077 24.5958 -0.1
- vertex -11.2625 24.7069 -0.1
+ vertex -10.9077 24.5958 -0.2
+ vertex -11.2625 24.7069 -0.2
endloop
endfacet
facet normal 0.214726 0.976674 -0
outer loop
- vertex -11.2625 24.7069 -0.1
+ vertex -11.2625 24.7069 -0.2
vertex -11.7825 24.8213 0
vertex -11.2625 24.7069 0
endloop
@@ -43927,13 +43927,13 @@ solid OpenSCAD_Model
facet normal 0.214726 0.976674 0
outer loop
vertex -11.7825 24.8213 0
- vertex -11.2625 24.7069 -0.1
- vertex -11.7825 24.8213 -0.1
+ vertex -11.2625 24.7069 -0.2
+ vertex -11.7825 24.8213 -0.2
endloop
endfacet
facet normal 0.131639 0.991298 -0
outer loop
- vertex -11.7825 24.8213 -0.1
+ vertex -11.7825 24.8213 -0.2
vertex -12.4277 24.907 0
vertex -11.7825 24.8213 0
endloop
@@ -43941,13 +43941,13 @@ solid OpenSCAD_Model
facet normal 0.131639 0.991298 0
outer loop
vertex -12.4277 24.907 0
- vertex -11.7825 24.8213 -0.1
- vertex -12.4277 24.907 -0.1
+ vertex -11.7825 24.8213 -0.2
+ vertex -12.4277 24.907 -0.2
endloop
endfacet
facet normal 0.0771921 0.997016 -0
outer loop
- vertex -12.4277 24.907 -0.1
+ vertex -12.4277 24.907 -0.2
vertex -13.1566 24.9634 0
vertex -12.4277 24.907 0
endloop
@@ -43955,13 +43955,13 @@ solid OpenSCAD_Model
facet normal 0.0771921 0.997016 0
outer loop
vertex -13.1566 24.9634 0
- vertex -12.4277 24.907 -0.1
- vertex -13.1566 24.9634 -0.1
+ vertex -12.4277 24.907 -0.2
+ vertex -13.1566 24.9634 -0.2
endloop
endfacet
facet normal 0.0344425 0.999407 -0
outer loop
- vertex -13.1566 24.9634 -0.1
+ vertex -13.1566 24.9634 -0.2
vertex -13.9275 24.99 0
vertex -13.1566 24.9634 0
endloop
@@ -43969,13 +43969,13 @@ solid OpenSCAD_Model
facet normal 0.0344425 0.999407 0
outer loop
vertex -13.9275 24.99 0
- vertex -13.1566 24.9634 -0.1
- vertex -13.9275 24.99 -0.1
+ vertex -13.1566 24.9634 -0.2
+ vertex -13.9275 24.99 -0.2
endloop
endfacet
facet normal -0.00506693 0.999987 0
outer loop
- vertex -13.9275 24.99 -0.1
+ vertex -13.9275 24.99 -0.2
vertex -14.6988 24.986 0
vertex -13.9275 24.99 0
endloop
@@ -43983,8 +43983,8 @@ solid OpenSCAD_Model
facet normal -0.00506693 0.999987 0
outer loop
vertex -14.6988 24.986 0
- vertex -13.9275 24.99 -0.1
- vertex -14.6988 24.986 -0.1
+ vertex -13.9275 24.99 -0.2
+ vertex -14.6988 24.986 -0.2
endloop
endfacet
facet normal -1 0 0
@@ -58729,6 +58729,20 @@ solid OpenSCAD_Model
vertex 110 -110 -3
endloop
endfacet
+ facet normal 0 1 -0
+ outer loop
+ vertex 110 110 -3
+ vertex -110 110 0
+ vertex 110 110 0
+ endloop
+ endfacet
+ facet normal 0 1 0
+ outer loop
+ vertex -110 110 0
+ vertex 110 110 -3
+ vertex -110 110 -3
+ endloop
+ endfacet
facet normal 0 0 -1
outer loop
vertex -110 -110 -3
@@ -58757,18 +58771,4 @@ solid OpenSCAD_Model
vertex 110 -110 -3
endloop
endfacet
- facet normal 0 1 -0
- outer loop
- vertex 110 110 -3
- vertex -110 110 0
- vertex 110 110 0
- endloop
- endfacet
- facet normal 0 1 0
- outer loop
- vertex -110 110 0
- vertex 110 110 -3
- vertex -110 110 -3
- endloop
- endfacet
endsolid OpenSCAD_Model
From cb24d58ab8a023785038fcd8ebf3e0d275b9d01c Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 5 Oct 2018 12:56:40 +0200
Subject: [PATCH 195/390] Don't flood the printer with temperature requests
while says it is busy
Fixes #3994
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 36c5321180..fca0654d30 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -74,6 +74,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._accepts_commands = True
self._paused = False
+ self._printer_busy = False # when printer is preheating and waiting (M190/M109), or when waiting for action on the printer
self._firmware_view = None
self._firmware_location = None
@@ -320,8 +321,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
# Timeout, or no request has been sent at all.
self._command_received.set() # We haven't really received the ok, but we need to send a new command
- self.sendCommand("M105")
- self._last_temperature_request = time()
+ if not self._printer_busy: # don't flood the printer with temperature requests while it is busy
+ self.sendCommand("M105")
+ self._last_temperature_request = time()
if self._firmware_name is None:
self.sendCommand("M115")
@@ -360,7 +362,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if b"FIRMWARE_NAME:" in line:
self._setFirmwareName(line)
- if b"ok" in line:
+ if line.startswith(b"ok "):
+ self._printer_busy = False
+
self._command_received.set()
if not self._command_queue.empty():
self._sendCommand(self._command_queue.get())
@@ -370,16 +374,19 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
else:
self._sendNextGcodeLine()
+ if line.startswith(b"echo:busy: "):
+ self._printer_busy = True
+
if self._is_printing:
if line.startswith(b'!!'):
Logger.log('e', "Printer signals fatal error. Cancelling print. {}".format(line))
self.cancelPrint()
- elif b"resend" in line.lower() or b"rs" in line:
+ elif line.lower().startswith(b"resend") or line.startswith(b"rs"):
# A resend can be requested either by Resend, resend or rs.
try:
self._gcode_position = int(line.replace(b"N:", b" ").replace(b"N", b" ").replace(b":", b" ").split()[-1])
except:
- if b"rs" in line:
+ if line.startswith(b"rs"):
# In some cases of the RS command it needs to be handled differently.
self._gcode_position = int(line.split()[1])
From 94164c58654bf121db9fd8212b70771827293632 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 5 Oct 2018 15:29:52 +0200
Subject: [PATCH 196/390] Add Charon, Shapely, Trimesh and NetworkX to credits
---
resources/qml/AboutDialog.qml | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/resources/qml/AboutDialog.qml b/resources/qml/AboutDialog.qml
index 5d3b1d1544..9a7e53260b 100644
--- a/resources/qml/AboutDialog.qml
+++ b/resources/qml/AboutDialog.qml
@@ -19,6 +19,18 @@ UM.Dialog
width: minimumWidth
height: minimumHeight
+ Rectangle
+ {
+ width: parent.width + 2 * margin // margin from Dialog.qml
+ height: version.y + version.height + margin
+
+ anchors.top: parent.top
+ anchors.topMargin: - margin
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ color: UM.Theme.getColor("viewport_background")
+ }
+
Image
{
id: logo
@@ -42,6 +54,7 @@ UM.Dialog
text: catalog.i18nc("@label","version: %1").arg(UM.Application.version)
font: UM.Theme.getFont("large")
+ color: UM.Theme.getColor("text")
anchors.right : logo.right
anchors.top: logo.bottom
anchors.topMargin: (UM.Theme.getSize("default_margin").height / 2) | 0
@@ -75,6 +88,7 @@ UM.Dialog
ScrollView
{
+ id: credits
anchors.top: creditsNotes.bottom
anchors.topMargin: UM.Theme.getSize("default_margin").height
@@ -128,7 +142,11 @@ UM.Dialog
projectsModel.append({ name:"SciPy", description: catalog.i18nc("@label", "Support library for scientific computing"), license: "BSD-new", url: "https://www.scipy.org/" });
projectsModel.append({ name:"NumPy", description: catalog.i18nc("@label", "Support library for faster math"), license: "BSD", url: "http://www.numpy.org/" });
projectsModel.append({ name:"NumPy-STL", description: catalog.i18nc("@label", "Support library for handling STL files"), license: "BSD", url: "https://github.com/WoLpH/numpy-stl" });
+ projectsModel.append({ name:"Shapely", description: catalog.i18nc("@label", "Support library for handling planar objects"), license: "BSD", url: "https://github.com/Toblerity/Shapely" });
+ projectsModel.append({ name:"Trimesh", description: catalog.i18nc("@label", "Support library for handling triangular meshes"), license: "MIT", url: "https://trimsh.org" });
+ projectsModel.append({ name:"NetworkX", description: catalog.i18nc("@label", "Support library for analysis of complex networks"), license: "3-clause BSD", url: "https://networkx.github.io/" });
projectsModel.append({ name:"libSavitar", description: catalog.i18nc("@label", "Support library for handling 3MF files"), license: "LGPLv3", url: "https://github.com/ultimaker/libsavitar" });
+ projectsModel.append({ name:"libCharon", description: catalog.i18nc("@label", "Support library for file metadata and streaming"), license: "LGPLv3", url: "https://github.com/ultimaker/libcharon" });
projectsModel.append({ name:"PySerial", description: catalog.i18nc("@label", "Serial communication library"), license: "Python", url: "http://pyserial.sourceforge.net/" });
projectsModel.append({ name:"python-zeroconf", description: catalog.i18nc("@label", "ZeroConf discovery library"), license: "LGPL", url: "https://github.com/jstasiak/python-zeroconf" });
projectsModel.append({ name:"Clipper", description: catalog.i18nc("@label", "Polygon clipping library"), license: "Boost", url: "http://www.angusj.com/delphi/clipper.php" });
From 374b0995d34809c66efe3b9fffcead033d698890 Mon Sep 17 00:00:00 2001
From: Sacha Telgenhof Oude Koehorst
Date: Sat, 6 Oct 2018 19:21:22 +0900
Subject: [PATCH 197/390] Changed bed size to 235x235mm (including the STL
Mesh). Removed all M commands (M104, M140, M190, M109) from the custom start
GCode, and removed all M commands (M104, M140, M106, M107) from the custom
end GCode as Cura already generates these. Decreased the height position of
the extruder (from 3 to 2mm) upon purging. Increased the height position of
the extruder (from 10 to 20mm) after the print has finished.
---
.../definitions/creality_ender3.def.json | 10 +-
resources/meshes/creality_ender3_platform.stl | 334 +++++++++---------
2 files changed, 172 insertions(+), 172 deletions(-)
diff --git a/resources/definitions/creality_ender3.def.json b/resources/definitions/creality_ender3.def.json
index 2c9bfa04d0..c2bf1680aa 100755
--- a/resources/definitions/creality_ender3.def.json
+++ b/resources/definitions/creality_ender3.def.json
@@ -18,13 +18,13 @@
"default_value": "Creality Ender-3"
},
"machine_width": {
- "default_value": 220
+ "default_value": 235
},
"machine_height": {
"default_value": 250
},
"machine_depth": {
- "default_value": 220
+ "default_value": 235
},
"machine_heated_bed": {
"default_value": true
@@ -57,7 +57,7 @@
},
"layer_height_0": {
"default_value": 0.2
- },
+ },
"adhesion_type": {
"default_value": "skirt"
},
@@ -80,10 +80,10 @@
"default_value": 5
},
"machine_start_gcode": {
- "default_value": "; Ender 3 Custom Start G-code\nM104 S{material_print_temperature_layer_0} ; Set Extruder temperature\nM140 S{material_bed_temperature_layer_0} ; Set Heat Bed temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Heat Bed temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\nG1 Z5.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z5.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed"
+ "default_value": "; Ender 3 Custom Start G-code\nG28 ; Home all axes\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.3 F5000.0 ; Move to start position\nG1 X0.1 Y200.0 Z0.3 F1500.0 E15 ; Draw the first line\nG1 X0.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X0.4 Y20 Z0.3 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\n; End of custom start GCode"
},
"machine_end_gcode": {
- "default_value": "; Ender 3 Custom End G-code\nG4 ; Wait\nM220 S100 ; Reset Speed factor override percentage to default (100%)\nM221 S100 ; Reset Extrude factor override percentage to default (100%)\nG91 ; Set coordinates to relative\nG1 F1800 E-3 ; Retract filament 3 mm to prevent oozing\nG1 F3000 Z10 ; Move Z Axis up 10 mm to allow filament ooze freely\nG90 ; Set coordinates to absolute\nG1 X0 Y{machine_depth} F1000 ; Move Heat Bed to the front for easy print removal\nM104 S0 ; Turn off Extruder temperature\nM140 S0 ; Turn off Heat Bed\nM106 S0 ; Turn off Cooling Fan\nM107 ; Turn off Fan\nM84 ; Disable stepper motors"
+ "default_value": "; Ender 3 Custom End G-code\nG4 ; Wait\nM220 S100 ; Reset Speed factor override percentage to default (100%)\nM221 S100 ; Reset Extrude factor override percentage to default (100%)\nG91 ; Set coordinates to relative\nG1 F1800 E-3 ; Retract filament 3 mm to prevent oozing\nG1 F3000 Z20 ; Move Z Axis up 20 mm to allow filament ooze freely\nG90 ; Set coordinates to absolute\nG1 X0 Y{machine_depth} F1000 ; Move Heat Bed to the front for easy print removal\nM84 ; Disable stepper motors\n; End of custom end GCode"
}
}
}
\ No newline at end of file
diff --git a/resources/meshes/creality_ender3_platform.stl b/resources/meshes/creality_ender3_platform.stl
index 2b6540bdd3..b362330c9c 100644
--- a/resources/meshes/creality_ender3_platform.stl
+++ b/resources/meshes/creality_ender3_platform.stl
@@ -43989,16 +43989,16 @@ solid OpenSCAD_Model
endfacet
facet normal -1 0 0
outer loop
- vertex -110 -110 -3
- vertex -110 110 0
- vertex -110 110 -3
+ vertex -117.5 -117.5 -3
+ vertex -117.5 117.5 0
+ vertex -117.5 117.5 -3
endloop
endfacet
facet normal -1 -0 0
outer loop
- vertex -110 110 0
- vertex -110 -110 -3
- vertex -110 -110 0
+ vertex -117.5 117.5 0
+ vertex -117.5 -117.5 -3
+ vertex -117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -44283,7 +44283,7 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -39.1186 25.4589 0
vertex -39.13 25.5984 0
endloop
@@ -52858,42 +52858,42 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 47.9993 -20.1225 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 47.9745 -19.9807 0
vertex 47.9993 -20.1225 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 47.9233 -19.8512 0
vertex 47.9745 -19.9807 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 47.845 -19.7221 0
vertex 47.9233 -19.8512 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 47.7384 -19.5813 0
vertex 47.845 -19.7221 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 47.6302 -19.4614 0
vertex 47.7384 -19.5813 0
endloop
@@ -52902,7 +52902,7 @@ solid OpenSCAD_Model
outer loop
vertex 27.4995 15.0808 0
vertex 47.6302 -19.4614 0
- vertex 110 110 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -53031,6 +53031,13 @@ solid OpenSCAD_Model
vertex 42.1149 -19.4743 0
endloop
endfacet
+ facet normal 0 0 1
+ outer loop
+ vertex 44.9905 -19.265 0
+ vertex 41.7426 -19.1572 0
+ vertex 44.6026 -19.3768 0
+ endloop
+ endfacet
facet normal -0 -0 1
outer loop
vertex 41.9051 -19.2238 0
@@ -53059,13 +53066,6 @@ solid OpenSCAD_Model
vertex 43.8201 -19.7253 0
endloop
endfacet
- facet normal -0 -0 1
- outer loop
- vertex 42.1149 -19.4743 0
- vertex 43.8201 -19.7253 0
- vertex 42.0297 -19.3306 0
- endloop
- endfacet
facet normal -0 -0 1
outer loop
vertex 42.0297 -19.3306 0
@@ -53108,11 +53108,11 @@ solid OpenSCAD_Model
vertex 41.156 -19.2119 0
endloop
endfacet
- facet normal -0 -0 1
+ facet normal 0 0 1
outer loop
- vertex 30.3649 -19.705 0
- vertex 38.4916 -20.1181 0
+ vertex 39.5298 -19.7361 0
vertex 29.9546 -19.4981 0
+ vertex 38.4916 -20.1181 0
endloop
endfacet
facet normal 0 0 1
@@ -53311,11 +53311,11 @@ solid OpenSCAD_Model
vertex 35.2304 -21.2043 0
endloop
endfacet
- facet normal 0 0 1
+ facet normal -0 -0 1
outer loop
- vertex 39.5298 -19.7361 0
- vertex 29.9546 -19.4981 0
+ vertex 30.3649 -19.705 0
vertex 38.4916 -20.1181 0
+ vertex 29.9546 -19.4981 0
endloop
endfacet
facet normal -0 0 1
@@ -53325,16 +53325,16 @@ solid OpenSCAD_Model
vertex 26.9324 1.61996 0
endloop
endfacet
- facet normal 0 0 1
+ facet normal -0 -0 1
outer loop
- vertex 44.9905 -19.265 0
- vertex 41.7426 -19.1572 0
- vertex 44.6026 -19.3768 0
+ vertex 42.1149 -19.4743 0
+ vertex 43.8201 -19.7253 0
+ vertex 42.0297 -19.3306 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 27.4227 15.3534 0
vertex 27.4995 15.0808 0
endloop
@@ -53343,7 +53343,7 @@ solid OpenSCAD_Model
outer loop
vertex 26.5691 18.3624 0
vertex 27.4227 15.3534 0
- vertex 110 110 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal -0 -0 1
@@ -53404,35 +53404,35 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 26.4859 18.624 0
vertex 26.5691 18.3624 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 26.3832 18.8665 0
vertex 26.4859 18.624 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 26.2605 19.0904 0
vertex 26.3832 18.8665 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 26.1176 19.296 0
vertex 26.2605 19.0904 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 25.9541 19.4837 0
vertex 26.1176 19.296 0
endloop
@@ -53441,7 +53441,7 @@ solid OpenSCAD_Model
outer loop
vertex 21.4677 24.3609 0
vertex 25.9541 19.4837 0
- vertex 110 110 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -53600,14 +53600,14 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 21.2873 24.568 0
vertex 21.4677 24.3609 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 21.0733 24.7691 0
vertex 21.2873 24.568 0
endloop
@@ -53616,7 +53616,7 @@ solid OpenSCAD_Model
outer loop
vertex 15.4091 30.0386 0
vertex 21.0733 24.7691 0
- vertex 110 110 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -53754,7 +53754,7 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 15.3672 30.0768 0
vertex 15.4091 30.0386 0
endloop
@@ -53763,7 +53763,7 @@ solid OpenSCAD_Model
outer loop
vertex 5.23504 38.5484 0
vertex 15.3672 30.0768 0
- vertex 110 110 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -54081,13 +54081,6 @@ solid OpenSCAD_Model
vertex 5.39739 26.9794 0
endloop
endfacet
- facet normal -0 -0 1
- outer loop
- vertex 6.07308 26.3793 0
- vertex 7.12606 25.9588 0
- vertex 5.73586 26.6445 0
- endloop
- endfacet
facet normal -0 0 1
outer loop
vertex 5.25596 38.2865 0
@@ -54102,6 +54095,13 @@ solid OpenSCAD_Model
vertex 5.02596 37.5856 0
endloop
endfacet
+ facet normal -0 -0 1
+ outer loop
+ vertex 6.07308 26.3793 0
+ vertex 7.12606 25.9588 0
+ vertex 5.73586 26.6445 0
+ endloop
+ endfacet
facet normal 0 0 1
outer loop
vertex 7.12606 25.9588 0
@@ -54125,23 +54125,23 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 5.20457 38.5758 0
vertex 5.23504 38.5484 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex 110 110 0
+ vertex 117.5 117.5 0
vertex 5.16325 38.5852 0
vertex 5.20457 38.5758 0
endloop
endfacet
facet normal -0 0 1
outer loop
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex 5.16325 38.5852 0
- vertex 110 110 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -54414,7 +54414,7 @@ solid OpenSCAD_Model
outer loop
vertex -5.74234 36.6012 0
vertex 5.16325 38.5852 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -54713,16 +54713,16 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex -16.9758 27.3196 0
- vertex -20.3206 27.4738 0
- vertex -20.1227 27.3549 0
+ vertex -5.74234 36.6012 0
+ vertex -117.5 117.5 0
+ vertex -5.80457 36.5812 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -5.74234 36.6012 0
- vertex -110 110 0
- vertex -5.80457 36.5812 0
+ vertex -16.9758 27.3196 0
+ vertex -20.3206 27.4738 0
+ vertex -20.1227 27.3549 0
endloop
endfacet
facet normal 0 0 1
@@ -54746,13 +54746,6 @@ solid OpenSCAD_Model
vertex -20.7979 27.6578 0
endloop
endfacet
- facet normal 0 -0 1
- outer loop
- vertex -31.0145 27.539 0
- vertex -5.80457 36.5812 0
- vertex -110 110 0
- endloop
- endfacet
facet normal 0 0 1
outer loop
vertex -6.04327 36.2349 0
@@ -54760,6 +54753,13 @@ solid OpenSCAD_Model
vertex -21.1001 27.7294 0
endloop
endfacet
+ facet normal 0 -0 1
+ outer loop
+ vertex -31.0145 27.539 0
+ vertex -5.80457 36.5812 0
+ vertex -117.5 117.5 0
+ endloop
+ endfacet
facet normal 0 0 1
outer loop
vertex -5.92579 36.4611 0
@@ -54991,17 +54991,10 @@ solid OpenSCAD_Model
vertex -31.1289 27.5158 0
endloop
endfacet
- facet normal 0 0 1
- outer loop
- vertex -31.2795 27.2229 0
- vertex -37.0225 24.5398 0
- vertex -36.6025 24.2541 0
- endloop
- endfacet
facet normal 0 0 1
outer loop
vertex -31.0145 27.539 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -31.1289 27.5158 0
endloop
endfacet
@@ -55012,6 +55005,13 @@ solid OpenSCAD_Model
vertex -37.776 25.1404 0
endloop
endfacet
+ facet normal 0 0 1
+ outer loop
+ vertex -31.272 27.3506 0
+ vertex -37.776 25.1404 0
+ vertex -37.4147 24.8357 0
+ endloop
+ endfacet
facet normal 0 0 1
outer loop
vertex -31.272 27.3506 0
@@ -55021,9 +55021,9 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex -31.272 27.3506 0
- vertex -37.776 25.1404 0
- vertex -37.4147 24.8357 0
+ vertex -31.2795 27.2229 0
+ vertex -37.0225 24.5398 0
+ vertex -36.6025 24.2541 0
endloop
endfacet
facet normal 0 0 1
@@ -55044,7 +55044,7 @@ solid OpenSCAD_Model
outer loop
vertex -38.9416 25.8595 0
vertex -31.1289 27.5158 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
@@ -55175,7 +55175,7 @@ solid OpenSCAD_Model
endfacet
facet normal 0 0 1
outer loop
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -39.13 25.5984 0
vertex -39.1175 25.7085 0
endloop
@@ -55246,98 +55246,98 @@ solid OpenSCAD_Model
facet normal 0 0 1
outer loop
vertex -39.1186 25.4589 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -47.9322 -37.0315 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.984 -37.1977 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -47.9322 -37.0315 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -47.984 -37.1977 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -39.0817 25.7888 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -39.1175 25.7085 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -39.0229 25.8392 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -39.0817 25.7888 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -38.9416 25.8595 0
- vertex -110 110 0
+ vertex -117.5 117.5 0
vertex -39.0229 25.8392 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.9987 -20.2887 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.9993 -20.1225 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.9737 -20.4912 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.9987 -20.2887 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.8542 -21.0531 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.9737 -20.4912 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.7155 -21.5429 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.8542 -21.0531 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.5422 -21.9981 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.7155 -21.5429 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.3383 -22.4165 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.5422 -21.9981 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 47.1074 -22.796 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.3383 -22.4165 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 46.8534 -23.1343 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 47.1074 -22.796 0
endloop
endfacet
@@ -55555,83 +55555,83 @@ solid OpenSCAD_Model
outer loop
vertex 46.8534 -23.1343 0
vertex 38.0668 -37.4245 0
- vertex 110 -110 0
+ vertex 38.0057 -37.5705 0
endloop
endfacet
- facet normal -0 0 1
+ facet normal 0 0 1
outer loop
+ vertex 46.8534 -23.1343 0
vertex 38.0057 -37.5705 0
- vertex 110 -110 0
- vertex 38.0668 -37.4245 0
+ vertex 117.5 -117.5 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 37.9137 -37.6957 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 38.0057 -37.5705 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 37.7849 -37.8018 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 37.9137 -37.6957 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 37.6132 -37.8903 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 37.7849 -37.8018 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 37.3927 -37.9628 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 37.6132 -37.8903 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 37.1174 -38.0208 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 37.3927 -37.9628 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 36.7812 -38.066 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 37.1174 -38.0208 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 35.9024 -38.1241 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 36.7812 -38.066 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 34.7085 -38.1497 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 35.9024 -38.1241 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 33.1514 -38.1555 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 34.7085 -38.1497 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex 31.1824 -38.1409 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 33.1514 -38.1555 0
endloop
endfacet
@@ -55800,27 +55800,27 @@ solid OpenSCAD_Model
outer loop
vertex 31.1824 -38.1409 0
vertex 20.3202 -38.5182 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 19.7403 -38.5689 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 20.3202 -38.5182 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 19.1073 -38.5852 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 19.7403 -38.5689 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex 18.4669 -38.5591 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 19.1073 -38.5852 0
endloop
endfacet
@@ -56122,13 +56122,13 @@ solid OpenSCAD_Model
outer loop
vertex 18.4669 -38.5591 0
vertex 5.34756 -38.4712 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
endloop
endfacet
facet normal -0 0 1
outer loop
vertex 5.17491 -38.475 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 5.34756 -38.4712 0
endloop
endfacet
@@ -56248,13 +56248,13 @@ solid OpenSCAD_Model
outer loop
vertex 5.17491 -38.475 0
vertex 0.291868 -38.543 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -0.355246 -38.538 0
- vertex 110 -110 0
+ vertex 117.5 -117.5 0
vertex 0.291868 -38.543 0
endloop
endfacet
@@ -56507,26 +56507,26 @@ solid OpenSCAD_Model
outer loop
vertex -0.355246 -38.538 0
vertex -9.84865 -38.1451 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -9.84865 -38.1451 0
vertex -11.9896 -38.1555 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -11.9896 -38.1555 0
vertex -14.1677 -38.1469 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -14.1677 -38.1469 0
vertex -14.8486 -38.1282 0
endloop
@@ -56661,26 +56661,26 @@ solid OpenSCAD_Model
outer loop
vertex -14.8486 -38.1282 0
vertex -18.0369 -38.1201 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -18.0369 -38.1201 0
vertex -18.7028 -38.1359 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -18.7028 -38.1359 0
vertex -20.8109 -38.1301 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -20.8109 -38.1301 0
vertex -23.4866 -38.0828 0
endloop
@@ -56759,54 +56759,54 @@ solid OpenSCAD_Model
outer loop
vertex -23.4866 -38.0828 0
vertex -28.2718 -38.1638 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -28.2718 -38.1638 0
vertex -37.6203 -38.1325 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -37.6203 -38.1325 0
vertex -41.2883 -38.1087 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -41.2883 -38.1087 0
vertex -44.3648 -38.0673 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -44.3648 -38.0673 0
vertex -46.5272 -38.014 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -46.5272 -38.014 0
vertex -47.1648 -37.9848 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.1648 -37.9848 0
vertex -47.4529 -37.9547 0
endloop
endfacet
facet normal 0 0 1
outer loop
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.4529 -37.9547 0
vertex -47.6522 -37.8745 0
endloop
@@ -56814,42 +56814,42 @@ solid OpenSCAD_Model
facet normal 0 0 1
outer loop
vertex -47.984 -37.1977 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.9993 -37.3583 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -0.355246 -38.538 0
- vertex -110 -110 0
- vertex 110 -110 0
+ vertex -117.5 -117.5 0
+ vertex 117.5 -117.5 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -47.8044 -37.7712 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.6522 -37.8745 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -47.9115 -37.6485 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.8044 -37.7712 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -47.9758 -37.5097 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.9115 -37.6485 0
endloop
endfacet
facet normal 0 0 1
outer loop
vertex -47.9993 -37.3583 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 0
vertex -47.9758 -37.5097 0
endloop
endfacet
@@ -58717,58 +58717,58 @@ solid OpenSCAD_Model
endfacet
facet normal 1 -0 0
outer loop
- vertex 110 -110 0
- vertex 110 110 -3
- vertex 110 110 0
+ vertex 117.5 -117.5 0
+ vertex 117.5 117.5 -3
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 1 0 0
outer loop
- vertex 110 110 -3
- vertex 110 -110 0
- vertex 110 -110 -3
+ vertex 117.5 117.5 -3
+ vertex 117.5 -117.5 0
+ vertex 117.5 -117.5 -3
endloop
endfacet
facet normal 0 1 -0
outer loop
- vertex 110 110 -3
- vertex -110 110 0
- vertex 110 110 0
+ vertex 117.5 117.5 -3
+ vertex -117.5 117.5 0
+ vertex 117.5 117.5 0
endloop
endfacet
facet normal 0 1 0
outer loop
- vertex -110 110 0
- vertex 110 110 -3
- vertex -110 110 -3
+ vertex -117.5 117.5 0
+ vertex 117.5 117.5 -3
+ vertex -117.5 117.5 -3
endloop
endfacet
facet normal 0 0 -1
outer loop
- vertex -110 -110 -3
- vertex 110 110 -3
- vertex 110 -110 -3
+ vertex -117.5 -117.5 -3
+ vertex 117.5 117.5 -3
+ vertex 117.5 -117.5 -3
endloop
endfacet
facet normal -0 0 -1
outer loop
- vertex 110 110 -3
- vertex -110 -110 -3
- vertex -110 110 -3
+ vertex 117.5 117.5 -3
+ vertex -117.5 -117.5 -3
+ vertex -117.5 117.5 -3
endloop
endfacet
facet normal 0 -1 0
outer loop
- vertex -110 -110 -3
- vertex 110 -110 0
- vertex -110 -110 0
+ vertex -117.5 -117.5 -3
+ vertex 117.5 -117.5 0
+ vertex -117.5 -117.5 0
endloop
endfacet
facet normal 0 -1 -0
outer loop
- vertex 110 -110 0
- vertex -110 -110 -3
- vertex 110 -110 -3
+ vertex 117.5 -117.5 0
+ vertex -117.5 -117.5 -3
+ vertex 117.5 -117.5 -3
endloop
endfacet
endsolid OpenSCAD_Model
From 314b966cc90198b2526e405cc2bbea19201ee234 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 8 Oct 2018 15:03:21 +0200
Subject: [PATCH 198/390] Improvements to translated strings
These strings were recently found to have been confusing to the translators. Improvements are:
- Pulling the (untranslated) error message out of the message sentence. We really want the error message to be at the end so we'll force the translators to translate it as a prefix.
- Remove extra spaces at the end.
- Remove Python logic from within the i18nc call, since gettext doesn't understand that.
Contributes to issue CURA-5741.
---
cura/Settings/CuraContainerRegistry.py | 17 ++++++++---------
plugins/ImageReader/ConfigUI.qml | 10 +++++-----
.../qml/ToolboxConfirmUninstallResetDialog.qml | 2 +-
.../src/LegacyUM3OutputDevice.py | 3 +--
resources/qml/WorkspaceSummaryDialog.qml | 2 +-
5 files changed, 16 insertions(+), 18 deletions(-)
diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py
index e1f50a157d..962f4162b5 100644
--- a/cura/Settings/CuraContainerRegistry.py
+++ b/cura/Settings/CuraContainerRegistry.py
@@ -187,11 +187,11 @@ class CuraContainerRegistry(ContainerRegistry):
try:
profile_or_list = profile_reader.read(file_name) # Try to open the file with the profile reader.
except NoProfileException:
- return { "status": "ok", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "No custom profile to import in file {0} ", file_name)}
+ return { "status": "ok", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "No custom profile to import in file {0} ", file_name)}
except Exception as e:
# Note that this will fail quickly. That is, if any profile reader throws an exception, it will stop reading. It will only continue reading if the reader returned None.
Logger.log("e", "Failed to import profile from %s: %s while using profile reader. Got exception %s", file_name, profile_reader.getPluginId(), str(e))
- return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "Failed to import profile from {0} : {1} ", file_name, "\n" + str(e))}
+ return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Failed to import profile from {0} :", file_name) + "\n" + str(e) + " "}
if profile_or_list:
# Ensure it is always a list of profiles
@@ -215,7 +215,7 @@ class CuraContainerRegistry(ContainerRegistry):
if not global_profile:
Logger.log("e", "Incorrect profile [%s]. Could not find global profile", file_name)
return { "status": "error",
- "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "This profile {0} contains incorrect data, could not import it.", file_name)}
+ "message": catalog.i18nc("@info:status Don't translate the XML tags !", "This profile {0} contains incorrect data, could not import it.", file_name)}
profile_definition = global_profile.getMetaDataEntry("definition")
# Make sure we have a profile_definition in the file:
@@ -225,7 +225,7 @@ class CuraContainerRegistry(ContainerRegistry):
if not machine_definition:
Logger.log("e", "Incorrect profile [%s]. Unknown machine type [%s]", file_name, profile_definition)
return {"status": "error",
- "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "This profile {0} contains incorrect data, could not import it.", file_name)
+ "message": catalog.i18nc("@info:status Don't translate the XML tags !", "This profile {0} contains incorrect data, could not import it.", file_name)
}
machine_definition = machine_definition[0]
@@ -238,7 +238,7 @@ class CuraContainerRegistry(ContainerRegistry):
if profile_definition != expected_machine_definition:
Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition)
return { "status": "error",
- "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)}
+ "message": catalog.i18nc("@info:status Don't translate the XML tags !", "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)}
# Fix the global quality profile's definition field in case it's not correct
global_profile.setMetaDataEntry("definition", expected_machine_definition)
@@ -269,8 +269,7 @@ class CuraContainerRegistry(ContainerRegistry):
if idx == 0:
# move all per-extruder settings to the first extruder's quality_changes
for qc_setting_key in global_profile.getAllKeys():
- settable_per_extruder = global_stack.getProperty(qc_setting_key,
- "settable_per_extruder")
+ settable_per_extruder = global_stack.getProperty(qc_setting_key, "settable_per_extruder")
if settable_per_extruder:
setting_value = global_profile.getProperty(qc_setting_key, "value")
@@ -310,8 +309,8 @@ class CuraContainerRegistry(ContainerRegistry):
if result is not None:
return {"status": "error", "message": catalog.i18nc(
"@info:status Don't translate the XML tags or !",
- "Failed to import profile from {0} : {1} ",
- file_name, result)}
+ "Failed to import profile from {0} :",
+ file_name) + " " + result + " "}
return {"status": "ok", "message": catalog.i18nc("@info:status", "Successfully imported profile {0}", profile_or_list[0].getName())}
diff --git a/plugins/ImageReader/ConfigUI.qml b/plugins/ImageReader/ConfigUI.qml
index d829f46459..12c6aa8dde 100644
--- a/plugins/ImageReader/ConfigUI.qml
+++ b/plugins/ImageReader/ConfigUI.qml
@@ -35,7 +35,7 @@ UM.Dialog
width: parent.width
Label {
- text: catalog.i18nc("@action:label","Height (mm)")
+ text: catalog.i18nc("@action:label", "Height (mm)")
width: 150 * screenScaleFactor
anchors.verticalCenter: parent.verticalCenter
}
@@ -58,7 +58,7 @@ UM.Dialog
width: parent.width
Label {
- text: catalog.i18nc("@action:label","Base (mm)")
+ text: catalog.i18nc("@action:label", "Base (mm)")
width: 150 * screenScaleFactor
anchors.verticalCenter: parent.verticalCenter
}
@@ -81,7 +81,7 @@ UM.Dialog
width: parent.width
Label {
- text: catalog.i18nc("@action:label","Width (mm)")
+ text: catalog.i18nc("@action:label", "Width (mm)")
width: 150 * screenScaleFactor
anchors.verticalCenter: parent.verticalCenter
}
@@ -105,7 +105,7 @@ UM.Dialog
width: parent.width
Label {
- text: catalog.i18nc("@action:label","Depth (mm)")
+ text: catalog.i18nc("@action:label", "Depth (mm)")
width: 150 * screenScaleFactor
anchors.verticalCenter: parent.verticalCenter
}
@@ -151,7 +151,7 @@ UM.Dialog
width: parent.width
Label {
- text: catalog.i18nc("@action:label","Smoothing")
+ text: catalog.i18nc("@action:label", "Smoothing")
width: 150 * screenScaleFactor
anchors.verticalCenter: parent.verticalCenter
}
diff --git a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml
index 4aa8b883b7..2c5d08aa72 100644
--- a/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml
+++ b/plugins/Toolbox/resources/qml/ToolboxConfirmUninstallResetDialog.qml
@@ -17,7 +17,7 @@ UM.Dialog
// This dialog asks the user whether he/she wants to open a project file as a project or import models.
id: base
- title: catalog.i18nc("@title:window", "Confirm uninstall ") + toolbox.pluginToUninstall
+ title: catalog.i18nc("@title:window", "Confirm uninstall") + toolbox.pluginToUninstall
width: 450 * screenScaleFactor
height: 50 * screenScaleFactor + dialogText.height + buttonBar.height
diff --git a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py
index fe94500aa1..e786840803 100644
--- a/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/LegacyUM3OutputDevice.py
@@ -100,8 +100,7 @@ class LegacyUM3OutputDevice(NetworkedPrinterOutputDevice):
title=i18n_catalog.i18nc("@info:title",
"Authentication status"))
- self._authentication_failed_message = Message(i18n_catalog.i18nc("@info:status", ""),
- title=i18n_catalog.i18nc("@info:title", "Authentication Status"))
+ self._authentication_failed_message = Message("", title=i18n_catalog.i18nc("@info:title", "Authentication Status"))
self._authentication_failed_message.addAction("Retry", i18n_catalog.i18nc("@action:button", "Retry"), None,
i18n_catalog.i18nc("@info:tooltip", "Re-send the access request"))
self._authentication_failed_message.actionTriggered.connect(self._messageCallback)
diff --git a/resources/qml/WorkspaceSummaryDialog.qml b/resources/qml/WorkspaceSummaryDialog.qml
index 24e94beb88..1b3a7aac55 100644
--- a/resources/qml/WorkspaceSummaryDialog.qml
+++ b/resources/qml/WorkspaceSummaryDialog.qml
@@ -117,7 +117,7 @@ UM.Dialog
height: childrenRect.height
Label
{
- text: catalog.i18nc("@action:label", Cura.MachineManager.activeMachineNetworkGroupName != "" ? "Printer Group" : "Name")
+ text: Cura.MachineManager.activeMachineNetworkGroupName != "" ? catalog.i18nc("@action:label", "Printer Group") : catalog.i18nc("@action:label", "Name")
width: Math.floor(scroll.width / 3) | 0
}
Label
From d1a51b26f765badf7c02ec84ee67d0ff63e8df27 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Mon, 8 Oct 2018 17:22:04 +0200
Subject: [PATCH 199/390] Simplified QML expression
---
resources/qml/Preferences/Materials/MaterialsSlot.qml | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/resources/qml/Preferences/Materials/MaterialsSlot.qml b/resources/qml/Preferences/Materials/MaterialsSlot.qml
index c75c34b81a..a5af17f47a 100644
--- a/resources/qml/Preferences/Materials/MaterialsSlot.qml
+++ b/resources/qml/Preferences/Materials/MaterialsSlot.qml
@@ -41,15 +41,7 @@ Rectangle
anchors.left: swatch.right
anchors.verticalCenter: materialSlot.verticalCenter
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
- font.italic:
- {
- var selected_material = Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex]
- if(selected_material == material.root_material_id)
- {
- return true
- }
- return false
- }
+ font.italic: Cura.MachineManager.currentRootMaterialId[Cura.ExtruderManager.activeExtruderIndex] == material.root_material_id
}
MouseArea
{
From a36deea651b6139f9290d585bb8945a29058c408 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Tue, 9 Oct 2018 16:26:45 +0200
Subject: [PATCH 200/390] Move updateFirmware to PrinterOutputDevice...
along with codestyle and typing fixes
---
cura/PrinterOutput/FirmwareUpdater.py | 22 +++++++++----------
cura/PrinterOutput/GenericOutputController.py | 8 +++----
cura/PrinterOutput/PrintJobOutputModel.py | 2 +-
cura/PrinterOutputDevice.py | 14 +++++++++---
.../FirmwareUpdaterMachineAction.py | 7 +++---
.../FirmwareUpdaterMachineAction.qml | 4 ++--
plugins/USBPrinting/USBPrinterOutputDevice.py | 11 +---------
7 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index 92e92437ad..c6d9513ee0 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -22,16 +22,16 @@ class FirmwareUpdater(QObject):
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
- self._firmware_location = ""
+ self._firmware_file = ""
self._firmware_progress = 0
self._firmware_update_state = FirmwareUpdateState.idle
- def updateFirmware(self, file: Union[str, QUrl]) -> None:
+ def updateFirmware(self, firmware_file: Union[str, QUrl]) -> None:
# the file path could be url-encoded.
- if file.startswith("file://"):
- self._firmware_location = QUrl(file).toLocalFile()
+ if firmware_file.startswith("file://"):
+ self._firmware_file = QUrl(firmware_file).toLocalFile()
else:
- self._firmware_location = file
+ self._firmware_file = firmware_file
self._setFirmwareUpdateState(FirmwareUpdateState.updating)
@@ -44,26 +44,26 @@ class FirmwareUpdater(QObject):
def _cleanupAfterUpdate(self) -> None:
# Clean up for next attempt.
self._update_firmware_thread = Thread(target=self._updateFirmware, daemon=True)
- self._firmware_location = ""
+ self._firmware_file = ""
self._onFirmwareProgress(100)
self._setFirmwareUpdateState(FirmwareUpdateState.completed)
- @pyqtProperty(float, notify = firmwareProgressChanged)
- def firmwareProgress(self) -> float:
+ @pyqtProperty(int, notify = firmwareProgressChanged)
+ def firmwareProgress(self) -> int:
return self._firmware_progress
@pyqtProperty(int, notify=firmwareUpdateStateChanged)
def firmwareUpdateState(self) -> "FirmwareUpdateState":
return self._firmware_update_state
- def _setFirmwareUpdateState(self, state) -> None:
+ def _setFirmwareUpdateState(self, state: "FirmwareUpdateState") -> None:
if self._firmware_update_state != state:
self._firmware_update_state = state
self.firmwareUpdateStateChanged.emit()
# Callback function for firmware update progress.
- def _onFirmwareProgress(self, progress, max_progress = 100) -> None:
- self._firmware_progress = (progress / max_progress) * 100 # Convert to scale of 0-100
+ def _onFirmwareProgress(self, progress: int, max_progress: int = 100) -> None:
+ self._firmware_progress = int(progress * 100 / max_progress) # Convert to scale of 0-100
self.firmwareProgressChanged.emit()
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index 9434feea62..c538ae79f8 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -20,15 +20,15 @@ class GenericOutputController(PrinterOutputController):
self._preheat_bed_timer = QTimer()
self._preheat_bed_timer.setSingleShot(True)
self._preheat_bed_timer.timeout.connect(self._onPreheatBedTimerFinished)
- self._preheat_printer = None #type: Optional[PrinterOutputModel]
+ self._preheat_printer = None # type: Optional[PrinterOutputModel]
self._preheat_hotends_timer = QTimer()
self._preheat_hotends_timer.setSingleShot(True)
self._preheat_hotends_timer.timeout.connect(self._onPreheatHotendsTimerFinished)
- self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
+ self._preheat_hotends = set() # type: Set[ExtruderOutputModel]
self._output_device.printersChanged.connect(self._onPrintersChanged)
- self._active_printer = None #type: Optional[PrinterOutputModel]
+ self._active_printer = None # type: Optional[PrinterOutputModel]
def _onPrintersChanged(self) -> None:
if self._active_printer:
@@ -54,7 +54,7 @@ class GenericOutputController(PrinterOutputController):
self._preheat_hotends_timer.stop()
for extruder in self._preheat_hotends:
extruder.updateIsPreheating(False)
- self._preheat_hotends = set() #type: Set[ExtruderOutputModel]
+ self._preheat_hotends = set() # type: Set[ExtruderOutputModel]
def moveHead(self, printer: "PrinterOutputModel", x, y, z, speed) -> None:
self._output_device.sendCommand("G91")
diff --git a/cura/PrinterOutput/PrintJobOutputModel.py b/cura/PrinterOutput/PrintJobOutputModel.py
index 70878a7573..1415db16bd 100644
--- a/cura/PrinterOutput/PrintJobOutputModel.py
+++ b/cura/PrinterOutput/PrintJobOutputModel.py
@@ -91,7 +91,7 @@ class PrintJobOutputModel(QObject):
def assignedPrinter(self):
return self._assigned_printer
- def updateAssignedPrinter(self, assigned_printer: Optional["PrinterOutputModel"]):
+ def updateAssignedPrinter(self, assigned_printer: Optional["PrinterOutputModel"]) -> None:
if self._assigned_printer != assigned_printer:
old_printer = self._assigned_printer
self._assigned_printer = assigned_printer
diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py
index c63f9c35b5..236b658eba 100644
--- a/cura/PrinterOutputDevice.py
+++ b/cura/PrinterOutputDevice.py
@@ -4,7 +4,7 @@
from UM.Decorators import deprecated
from UM.i18n import i18nCatalog
from UM.OutputDevice.OutputDevice import OutputDevice
-from PyQt5.QtCore import pyqtProperty, QObject, QTimer, pyqtSignal
+from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, QTimer, QUrl
from PyQt5.QtWidgets import QMessageBox
from UM.Logger import Logger
@@ -12,9 +12,10 @@ from UM.FileHandler.FileHandler import FileHandler #For typing.
from UM.Scene.SceneNode import SceneNode #For typing.
from UM.Signal import signalemitter
from UM.Qt.QtApplication import QtApplication
+from UM.FlameProfiler import pyqtSlot
from enum import IntEnum # For the connection state tracking.
-from typing import Callable, List, Optional
+from typing import Callable, List, Optional, Union
MYPY = False
if MYPY:
@@ -230,4 +231,11 @@ class PrinterOutputDevice(QObject, OutputDevice):
return self._firmware_name
def getFirmwareUpdater(self) -> Optional["FirmwareUpdater"]:
- return self._firmware_updater
\ No newline at end of file
+ return self._firmware_updater
+
+ @pyqtSlot(str)
+ def updateFirmware(self, firmware_file: Union[str, QUrl]) -> None:
+ if not self._firmware_updater:
+ return
+
+ self._firmware_updater.updateFirmware(firmware_file)
\ No newline at end of file
diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
index 981fb819eb..0a3e3a0ff0 100644
--- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
@@ -15,6 +15,7 @@ MYPY = False
if MYPY:
from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice
+ from UM.Settings.ContainerInterface import ContainerInterface
catalog = i18nCatalog("cura")
@@ -25,15 +26,15 @@ class FirmwareUpdaterMachineAction(MachineAction):
self._qml_url = "FirmwareUpdaterMachineAction.qml"
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
- self._active_output_device = None #type: Optional[PrinterOutputDevice]
- self._active_firmware_updater = None #type: Optional[FirmwareUpdater]
+ self._active_output_device = None # type: Optional[PrinterOutputDevice]
+ self._active_firmware_updater = None # type: Optional[FirmwareUpdater]
CuraApplication.getInstance().engineCreatedSignal.connect(self._onEngineCreated)
def _onEngineCreated(self) -> None:
CuraApplication.getInstance().getMachineManager().outputDevicesChanged.connect(self._onOutputDevicesChanged)
- def _onContainerAdded(self, container) -> None:
+ def _onContainerAdded(self, container: "ContainerInterface") -> None:
# Add this action as a supported action to all machine definitions if they support USB connection
if isinstance(container, DefinitionContainer) and container.getMetaDataEntry("type") == "machine" and container.getMetaDataEntry("supports_usb_connection"):
CuraApplication.getInstance().getMachineActionManager().addSupportedAction(container.getId(), self.getKey())
diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml
index ab5bb89347..9a56dbb20a 100644
--- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.qml
@@ -16,7 +16,7 @@ Cura.MachineAction
anchors.fill: parent;
property bool printerConnected: Cura.MachineManager.printerConnected
property var activeOutputDevice: printerConnected ? Cura.MachineManager.printerOutputDevices[0] : null
- property var canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : false
+ property bool canUpdateFirmware: activeOutputDevice ? activeOutputDevice.activePrinter.canUpdateFirmware : false
Column
{
@@ -51,7 +51,7 @@ Cura.MachineAction
anchors.horizontalCenter: parent.horizontalCenter
width: childrenRect.width
spacing: UM.Theme.getSize("default_margin").width
- property var firmwareName: Cura.MachineManager.activeMachine.getDefaultFirmwareName()
+ property string firmwareName: Cura.MachineManager.activeMachine.getDefaultFirmwareName()
Button
{
id: autoUpgradeButton
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 1fd2fdeb5c..b5ada76e6c 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -15,8 +15,6 @@ from cura.PrinterOutput.GenericOutputController import GenericOutputController
from .AutoDetectBaudJob import AutoDetectBaudJob
from .AvrFirmwareUpdater import AvrFirmwareUpdater
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QUrl
-
from serial import Serial, SerialException, SerialTimeoutException
from threading import Thread, Event
from time import time, sleep
@@ -98,13 +96,6 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
application = CuraApplication.getInstance()
application.triggerNextExitCheck()
- @pyqtSlot(str)
- def updateFirmware(self, file: Union[str, QUrl]) -> None:
- if not self._firmware_updater:
- return
-
- self._firmware_updater.updateFirmware(file)
-
## Reset USB device settings
#
def resetDeviceSettings(self) -> None:
@@ -169,7 +160,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._baud_rate = baud_rate
def connect(self):
- self._firmware_name = None # after each connection ensure that the firmware name is removed
+ self._firmware_name = None # after each connection ensure that the firmware name is removed
if self._baud_rate is None:
if self._use_auto_detect:
From ab7fe3138d8bdfa2e1ef1d5a91be93709896099f Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Tue, 9 Oct 2018 17:06:20 +0200
Subject: [PATCH 201/390] Remove unused imports
---
cura/PrinterOutputDevice.py | 6 +++---
plugins/USBPrinting/AvrFirmwareUpdater.py | 8 ++++++--
plugins/USBPrinting/USBPrinterOutputDevice.py | 4 +---
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py
index 236b658eba..969aa3c460 100644
--- a/cura/PrinterOutputDevice.py
+++ b/cura/PrinterOutputDevice.py
@@ -8,8 +8,6 @@ from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, QTimer, QUrl
from PyQt5.QtWidgets import QMessageBox
from UM.Logger import Logger
-from UM.FileHandler.FileHandler import FileHandler #For typing.
-from UM.Scene.SceneNode import SceneNode #For typing.
from UM.Signal import signalemitter
from UM.Qt.QtApplication import QtApplication
from UM.FlameProfiler import pyqtSlot
@@ -22,6 +20,8 @@ if MYPY:
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater
+ from UM.FileHandler.FileHandler import FileHandler
+ from UM.Scene.SceneNode import SceneNode
i18n_catalog = i18nCatalog("cura")
@@ -131,7 +131,7 @@ class PrinterOutputDevice(QObject, OutputDevice):
return None
- def requestWrite(self, nodes: List[SceneNode], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional[FileHandler] = None, **kwargs: str) -> None:
+ def requestWrite(self, nodes: List["SceneNode"], file_name: Optional[str] = None, limit_mimetypes: bool = False, file_handler: Optional["FileHandler"] = None, **kwargs: str) -> None:
raise NotImplementedError("requestWrite needs to be implemented")
@pyqtProperty(QObject, notify = printersChanged)
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index 505e1ddb7e..b8650e9208 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -4,7 +4,6 @@
from UM.Logger import Logger
from cura.CuraApplication import CuraApplication
-from cura.PrinterOutputDevice import PrinterOutputDevice
from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdater, FirmwareUpdateState
from .avr_isp import stk500v2, intelHex
@@ -12,8 +11,13 @@ from serial import SerialException
from time import sleep
+MYPY = False
+if MYPY:
+ from cura.PrinterOutputDevice import PrinterOutputDevice
+
+
class AvrFirmwareUpdater(FirmwareUpdater):
- def __init__(self, output_device: PrinterOutputDevice) -> None:
+ def __init__(self, output_device: "PrinterOutputDevice") -> None:
super().__init__(output_device)
def _updateFirmware(self) -> None:
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index b5ada76e6c..4c3e7ee131 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -4,7 +4,6 @@
from UM.Logger import Logger
from UM.i18n import i18nCatalog
from UM.Qt.Duration import DurationFormat
-from UM.PluginRegistry import PluginRegistry
from cura.CuraApplication import CuraApplication
from cura.PrinterOutputDevice import PrinterOutputDevice, ConnectionState
@@ -17,13 +16,12 @@ from .AvrFirmwareUpdater import AvrFirmwareUpdater
from serial import Serial, SerialException, SerialTimeoutException
from threading import Thread, Event
-from time import time, sleep
+from time import time
from queue import Queue
from typing import Union, Optional, List, cast
import re
import functools # Used for reduce
-import os
catalog = i18nCatalog("cura")
From d3101b2fd95735a910750f4fbcfae5e702966a04 Mon Sep 17 00:00:00 2001
From: THeijmans
Date: Wed, 10 Oct 2018 09:26:16 +0200
Subject: [PATCH 202/390] Fixed prim blob visibility
Changed the wrong prime_blob setting, now it should be visible but disabled.
---
resources/definitions/ultimaker_s5.def.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 2024acdf73..57ba6e864e 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -63,7 +63,8 @@
"machine_end_gcode": { "default_value": "" },
"prime_tower_position_x": { "default_value": 345 },
"prime_tower_position_y": { "default_value": 222.5 },
- "prime_blob_enable": { "enabled": false },
+ "prime_blob_enable": { "enabled": true },
+ "prime_blob_enable": { "default_value": false },
"speed_travel":
{
From 6d852228e31fff075cc7381551e5c3287718c733 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 10 Oct 2018 09:29:42 +0200
Subject: [PATCH 203/390] Update ultimaker_s5.def.json
---
resources/definitions/ultimaker_s5.def.json | 1 -
1 file changed, 1 deletion(-)
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 57ba6e864e..94e28eb8a5 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -63,7 +63,6 @@
"machine_end_gcode": { "default_value": "" },
"prime_tower_position_x": { "default_value": 345 },
"prime_tower_position_y": { "default_value": 222.5 },
- "prime_blob_enable": { "enabled": true },
"prime_blob_enable": { "default_value": false },
"speed_travel":
From 01d95f51c8168e78a3900ca5127dfb99cfa134b9 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 10 Oct 2018 09:34:27 +0200
Subject: [PATCH 204/390] Fix prime blob enabled for S5
Still need that enabled = true...
---
resources/definitions/ultimaker_s5.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 94e28eb8a5..2e634787af 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -63,7 +63,7 @@
"machine_end_gcode": { "default_value": "" },
"prime_tower_position_x": { "default_value": 345 },
"prime_tower_position_y": { "default_value": 222.5 },
- "prime_blob_enable": { "default_value": false },
+ "prime_blob_enable": { "enabled": true, "default_value": false },
"speed_travel":
{
From cc34e14215c234d0b448e0665a76d7d8a6360360 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Wed, 10 Oct 2018 11:52:14 +0200
Subject: [PATCH 205/390] Use ElideRight for long script names
CURA-5683
---
plugins/PostProcessingPlugin/PostProcessingPlugin.qml | 1 +
1 file changed, 1 insertion(+)
diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml
index e91fc73cf4..22555562c0 100644
--- a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml
+++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml
@@ -115,6 +115,7 @@ UM.Dialog
{
wrapMode: Text.Wrap
text: control.text
+ elide: Text.ElideRight
color: activeScriptButton.checked ? palette.highlightedText : palette.text
}
}
From e3861b0d90a6d90d94fb5e82a74a8c0d5144db14 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 10 Oct 2018 12:48:22 +0200
Subject: [PATCH 206/390] Add few more elide properties to ensure text doesnt'
overlap
---
plugins/PostProcessingPlugin/PostProcessingPlugin.qml | 2 ++
1 file changed, 2 insertions(+)
diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml
index 22555562c0..d492e06462 100644
--- a/plugins/PostProcessingPlugin/PostProcessingPlugin.qml
+++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.qml
@@ -62,6 +62,7 @@ UM.Dialog
anchors.right: parent.right
anchors.rightMargin: base.textMargin
font: UM.Theme.getFont("large")
+ elide: Text.ElideRight
}
ListView
{
@@ -276,6 +277,7 @@ UM.Dialog
anchors.leftMargin: base.textMargin
anchors.right: parent.right
anchors.rightMargin: base.textMargin
+ elide: Text.ElideRight
height: 20 * screenScaleFactor
font: UM.Theme.getFont("large")
color: UM.Theme.getColor("text")
From b37252f124c76fa06c860fa20de4b6cca85645a1 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Wed, 10 Oct 2018 14:18:37 +0200
Subject: [PATCH 207/390] Minor code style fixes
Contributes to issue CURA-5734.
---
cura/Machines/Models/SettingVisibilityPresetsModel.py | 2 +-
cura/Settings/SettingVisibilityPreset.py | 8 ++++----
resources/qml/Preferences/SettingVisibilityPage.qml | 6 ++++--
tests/Settings/TestSettingVisibilityPresets.py | 2 +-
4 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index b5f7fa8626..d9bf105c0b 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -18,7 +18,7 @@ class SettingVisibilityPresetsModel(QObject):
onItemsChanged = pyqtSignal()
activePresetChanged = pyqtSignal()
- def __init__(self, preferences, parent = None):
+ def __init__(self, preferences, parent = None):
super().__init__(parent)
self._items = [] # type: List[SettingVisibilityPreset]
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
index b1828362d1..6e75a5a208 100644
--- a/cura/Settings/SettingVisibilityPreset.py
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -26,15 +26,15 @@ class SettingVisibilityPreset(QObject):
def settings(self) -> List[str]:
return self._settings
- @pyqtProperty(str, notify=onIdChanged)
+ @pyqtProperty(str, notify = onIdChanged)
def id(self) -> str:
return self._id
- @pyqtProperty(int, notify=onWeightChanged)
+ @pyqtProperty(int, notify = onWeightChanged)
def weight(self) -> int:
return self._weight
- @pyqtProperty(str, notify=onNameChanged)
+ @pyqtProperty(str, notify = onNameChanged)
def name(self) -> str:
return self._name
@@ -66,7 +66,7 @@ class SettingVisibilityPreset(QObject):
Logger.log("e", "[%s] is not a file", file_path)
return None
- parser = ConfigParser(allow_no_value=True) # Accept options without any value,
+ parser = ConfigParser(allow_no_value = True) # Accept options without any value,
parser.read([file_path])
if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
diff --git a/resources/qml/Preferences/SettingVisibilityPage.qml b/resources/qml/Preferences/SettingVisibilityPage.qml
index 90c805f854..8896d0611e 100644
--- a/resources/qml/Preferences/SettingVisibilityPage.qml
+++ b/resources/qml/Preferences/SettingVisibilityPage.qml
@@ -115,8 +115,10 @@ UM.PreferencesPage
currentIndex:
{
- for(var i = 0; i < settingVisibilityPresetsModel.items.length; ++i) {
- if(settingVisibilityPresetsModel.items[i].id == settingVisibilityPresetsModel.activePreset) {
+ for(var i = 0; i < settingVisibilityPresetsModel.items.length; ++i)
+ {
+ if(settingVisibilityPresetsModel.items[i].id == settingVisibilityPresetsModel.activePreset)
+ {
currentIndex = i;
return;
}
diff --git a/tests/Settings/TestSettingVisibilityPresets.py b/tests/Settings/TestSettingVisibilityPresets.py
index 68e8a6eb7b..1209437d25 100644
--- a/tests/Settings/TestSettingVisibilityPresets.py
+++ b/tests/Settings/TestSettingVisibilityPresets.py
@@ -49,7 +49,7 @@ def test_setActivePreset():
preferences = Preferences()
visibility_model = SettingVisibilityPresetsModel(preferences)
visibility_model.activePresetChanged = MagicMock()
- # Ensure that we start of with basic (since we didn't change anyting just yet!)
+ # Ensure that we start off with basic (since we didn't change anyting just yet!)
assert visibility_model.activePreset == "basic"
# Everything should be the same.
From 4c6744b6fc75a3a9403bdd8c98664c807b8c597b Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Wed, 10 Oct 2018 14:28:50 +0200
Subject: [PATCH 208/390] Code style: Space around binary operators
I just looked for lines with interpolation = None because I was looking for another possible bug, but fixing this in the meanwhile too.
---
cura/Settings/CuraContainerRegistry.py | 2 +-
plugins/3MFReader/ThreeMFWorkspaceReader.py | 4 ++--
plugins/CuraProfileReader/CuraProfileReader.py | 2 +-
plugins/LegacyProfileReader/LegacyProfileReader.py | 2 +-
.../VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py | 2 +-
.../VersionUpgrade25to26/VersionUpgrade25to26.py | 2 +-
.../VersionUpgrade30to31/VersionUpgrade30to31.py | 6 +++---
7 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py
index 962f4162b5..11640adc0f 100644
--- a/cura/Settings/CuraContainerRegistry.py
+++ b/cura/Settings/CuraContainerRegistry.py
@@ -685,7 +685,7 @@ class CuraContainerRegistry(ContainerRegistry):
if not os.path.isfile(file_path):
continue
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
try:
parser.read([file_path])
except:
diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py
index 36a725d148..429d4ab7d4 100755
--- a/plugins/3MFReader/ThreeMFWorkspaceReader.py
+++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py
@@ -1012,7 +1012,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
## Get the list of ID's of all containers in a container stack by partially parsing it's serialized data.
def _getContainerIdListFromSerialized(self, serialized):
- parser = ConfigParser(interpolation=None, empty_lines_in_values=False)
+ parser = ConfigParser(interpolation = None, empty_lines_in_values = False)
parser.read_string(serialized)
container_ids = []
@@ -1033,7 +1033,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
return container_ids
def _getMachineNameFromSerializedStack(self, serialized):
- parser = ConfigParser(interpolation=None, empty_lines_in_values=False)
+ parser = ConfigParser(interpolation = None, empty_lines_in_values = False)
parser.read_string(serialized)
return parser["general"].get("name", "")
diff --git a/plugins/CuraProfileReader/CuraProfileReader.py b/plugins/CuraProfileReader/CuraProfileReader.py
index 5957b2cecf..11e58dac6d 100644
--- a/plugins/CuraProfileReader/CuraProfileReader.py
+++ b/plugins/CuraProfileReader/CuraProfileReader.py
@@ -50,7 +50,7 @@ class CuraProfileReader(ProfileReader):
# \param profile_id \type{str} The name of the profile.
# \return \type{List[Tuple[str,str]]} List of serialized profile strings and matching profile names.
def _upgradeProfile(self, serialized, profile_id):
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialized)
if "general" not in parser:
diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py
index 93c15ca8e0..cd577218d5 100644
--- a/plugins/LegacyProfileReader/LegacyProfileReader.py
+++ b/plugins/LegacyProfileReader/LegacyProfileReader.py
@@ -152,7 +152,7 @@ class LegacyProfileReader(ProfileReader):
profile.setDirty(True)
#Serialise and deserialise in order to perform the version upgrade.
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
data = profile.serialize()
parser.read_string(data)
parser["general"]["version"] = "1"
diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py
index 730a62e591..a56f1f807b 100644
--- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py
+++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py
@@ -73,7 +73,7 @@ class VersionUpgrade22to24(VersionUpgrade):
def __convertVariant(self, variant_path):
# Copy the variant to the machine_instances/*_settings.inst.cfg
- variant_config = configparser.ConfigParser(interpolation=None)
+ variant_config = configparser.ConfigParser(interpolation = None)
with open(variant_path, "r", encoding = "utf-8") as fhandle:
variant_config.read_file(fhandle)
diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py
index 2430b35ea0..6643edb765 100644
--- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py
+++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py
@@ -117,7 +117,7 @@ class VersionUpgrade25to26(VersionUpgrade):
# \param serialised The serialised form of a quality profile.
# \param filename The name of the file to upgrade.
def upgradeMachineStack(self, serialised, filename):
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialised)
# NOTE: This is for Custom FDM printers
diff --git a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py
index a88ff5ac1c..399eb18b5d 100644
--- a/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py
+++ b/plugins/VersionUpgrade/VersionUpgrade30to31/VersionUpgrade30to31.py
@@ -84,7 +84,7 @@ class VersionUpgrade30to31(VersionUpgrade):
# \param serialised The serialised form of a preferences file.
# \param filename The name of the file to upgrade.
def upgradePreferences(self, serialised, filename):
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialised)
# Update version numbers
@@ -105,7 +105,7 @@ class VersionUpgrade30to31(VersionUpgrade):
# \param serialised The serialised form of the container file.
# \param filename The name of the file to upgrade.
def upgradeInstanceContainer(self, serialised, filename):
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialised)
for each_section in ("general", "metadata"):
@@ -130,7 +130,7 @@ class VersionUpgrade30to31(VersionUpgrade):
# \param serialised The serialised form of a container stack.
# \param filename The name of the file to upgrade.
def upgradeStack(self, serialised, filename):
- parser = configparser.ConfigParser(interpolation=None)
+ parser = configparser.ConfigParser(interpolation = None)
parser.read_string(serialised)
for each_section in ("general", "metadata"):
From 10b5584ca68457dd25659a3273d9375602667c19 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Wed, 10 Oct 2018 16:24:13 +0200
Subject: [PATCH 209/390] [CURA-5483] Support more than just the UM3(E) for the
firmware-update-check (add S5 only for now).
---
.../FirmwareUpdateChecker.py | 22 +++-
.../FirmwareUpdateCheckerJob.py | 103 ++++++++++++++----
2 files changed, 100 insertions(+), 25 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index f01e8cb276..80a954c1cc 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -12,23 +12,34 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.GlobalStack import GlobalStack
-from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
+from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob, MachineId, get_settings_key_for_machine
i18n_catalog = i18nCatalog("cura")
-
## This Extension checks for new versions of the firmware based on the latest checked version number.
# The plugin is currently only usable for applications maintained by Ultimaker. But it should be relatively easy
# to change it to work for other applications.
class FirmwareUpdateChecker(Extension):
JEDI_VERSION_URL = "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources"
+ UM_NEW_URL_TEMPLATE = "http://software.ultimaker.com/releases/firmware/{0}/stable/version.txt"
+ VERSION_URLS_PER_MACHINE = \
+ {
+ MachineId.UM3: [JEDI_VERSION_URL, UM_NEW_URL_TEMPLATE.format(MachineId.UM3.value)],
+ MachineId.UM3E: [JEDI_VERSION_URL, UM_NEW_URL_TEMPLATE.format(MachineId.UM3E.value)],
+ MachineId.S5: [UM_NEW_URL_TEMPLATE.format(MachineId.S5.value)]
+ }
+ # The 'new'-style URL is the only way to check for S5 firmware,
+ # and in the future, the UM3 line will also switch over, but for now the old 'JEDI'-style URL is still needed.
+ # TODO: Parse all of that from a file, because this will be a big mess of large static values which gets worse with each printer.
+ # See also the to-do in FirmWareCheckerJob.
def __init__(self):
super().__init__()
# Initialize the Preference called `latest_checked_firmware` that stores the last version
- # checked for the UM3. In the future if we need to check other printers' firmware
- Application.getInstance().getPreferences().addPreference("info/latest_checked_firmware", "")
+ # checked for each printer.
+ for machine_id in MachineId:
+ Application.getInstance().getPreferences().addPreference(get_settings_key_for_machine(machine_id), "")
# Listen to a Signal that indicates a change in the list of printers, just if the user has enabled the
# 'check for updates' option
@@ -68,7 +79,8 @@ class FirmwareUpdateChecker(Extension):
Logger.log("i", "A firmware update check is already running, do nothing.")
return
- self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent, url = self.JEDI_VERSION_URL,
+ self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
+ urls = self.VERSION_URLS_PER_MACHINE,
callback = self._onActionTriggered,
set_download_url_callback = self._onSetDownloadUrl)
self._check_job.start()
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index eadacf2c02..658e820b4b 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -1,10 +1,13 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from enum import Enum, unique
+
from UM.Application import Application
from UM.Message import Message
from UM.Logger import Logger
from UM.Job import Job
+from UM.Version import Version
import urllib.request
import codecs
@@ -12,49 +15,104 @@ import codecs
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
+# For UM-machines, these need to match the unique firmware-ID (also used in the URLs), i.o.t. only define in one place.
+@unique
+class MachineId(Enum):
+ UM3 = 9066
+ UM3E = 9511
+ S5 = 9051
+
+
+def get_settings_key_for_machine(machine_id: MachineId) -> str:
+ return "info/latest_checked_firmware_for_{0}".format(machine_id.value)
+
+
+def default_parse_version_response(response: str) -> Version:
+ raw_str = response.split('\n', 1)[0].rstrip()
+ return Version(raw_str.split('.')) # Split it into a list; the default parsing of 'single string' is different.
+
## This job checks if there is an update available on the provided URL.
class FirmwareUpdateCheckerJob(Job):
- def __init__(self, container = None, silent = False, url = None, callback = None, set_download_url_callback = None):
+ MACHINE_PER_NAME = \
+ {
+ "ultimaker 3": MachineId.UM3,
+ "ultimaker 3 extended": MachineId.UM3E,
+ "ultimaker s5": MachineId.S5
+ }
+ PARSE_VERSION_URL_PER_MACHINE = \
+ {
+ MachineId.UM3: default_parse_version_response,
+ MachineId.UM3E: default_parse_version_response,
+ MachineId.S5: default_parse_version_response
+ }
+ REDIRECT_USER_PER_MACHINE = \
+ {
+ MachineId.UM3: "https://ultimaker.com/en/resources/20500-upgrade-firmware",
+ MachineId.UM3E: "https://ultimaker.com/en/resources/20500-upgrade-firmware",
+ MachineId.S5: "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ }
+ # TODO: Parse all of that from a file, because this will be a big mess of large static values which gets worse with each printer.
+
+ def __init__(self, container=None, silent=False, urls=None, callback=None, set_download_url_callback=None):
super().__init__()
self._container = container
self.silent = silent
- self._url = url
+ self._urls = urls
self._callback = callback
self._set_download_url_callback = set_download_url_callback
+ application_name = Application.getInstance().getApplicationName()
+ application_version = Application.getInstance().getVersion()
+ self._headers = {"User-Agent": "%s - %s" % (application_name, application_version)}
+
+ def getUrlResponse(self, url: str) -> str:
+ request = urllib.request.Request(url, headers=self._headers)
+ current_version_file = urllib.request.urlopen(request)
+ reader = codecs.getreader("utf-8")
+
+ return reader(current_version_file).read(firstline=True)
+
+ def getCurrentVersionForMachine(self, machine_id: MachineId) -> Version:
+ max_version = Version([0, 0, 0])
+
+ machine_urls = self._urls.get(machine_id)
+ parse_function = self.PARSE_VERSION_URL_PER_MACHINE.get(machine_id)
+ if machine_urls is not None and parse_function is not None:
+ for url in machine_urls:
+ version = parse_function(self.getUrlResponse(url))
+ if version > max_version:
+ max_version = version
+
+ if max_version < Version([0, 0, 1]):
+ Logger.log('w', "MachineID {0} not handled!".format(repr(machine_id)))
+
+ return max_version
+
def run(self):
- if not self._url:
+ if not self._urls or self._urls is None:
Logger.log("e", "Can not check for a new release. URL not set!")
return
try:
- application_name = Application.getInstance().getApplicationName()
- headers = {"User-Agent": "%s - %s" % (application_name, Application.getInstance().getVersion())}
- request = urllib.request.Request(self._url, headers = headers)
- current_version_file = urllib.request.urlopen(request)
- reader = codecs.getreader("utf-8")
-
# get machine name from the definition container
machine_name = self._container.definition.getName()
machine_name_parts = machine_name.lower().split(" ")
# If it is not None, then we compare between the checked_version and the current_version
- # Now we just do that if the active printer is Ultimaker 3 or Ultimaker 3 Extended or any
- # other Ultimaker 3 that will come in the future
- if len(machine_name_parts) >= 2 and machine_name_parts[:2] == ["ultimaker", "3"]:
- Logger.log("i", "You have a UM3 in printer list. Let's check the firmware!")
+ machine_id = self.MACHINE_PER_NAME.get(machine_name.lower())
+ if machine_id is not None:
+ Logger.log("i", "You have a {0} in the printer list. Let's check the firmware!".format(machine_name))
- # Nothing to parse, just get the string
- # TODO: In the future may be done by parsing a JSON file with diferent version for each printer model
- current_version = reader(current_version_file).readline().rstrip()
+ current_version = self.getCurrentVersionForMachine(machine_id)
# If it is the first time the version is checked, the checked_version is ''
- checked_version = Application.getInstance().getPreferences().getValue("info/latest_checked_firmware")
+ setting_key_str = get_settings_key_for_machine(machine_id)
+ checked_version = Application.getInstance().getPreferences().getValue(setting_key_str)
# If the checked_version is '', it's because is the first time we check firmware and in this case
# we will not show the notification, but we will store it for the next time
- Application.getInstance().getPreferences().setValue("info/latest_checked_firmware", current_version)
+ Application.getInstance().getPreferences().setValue(setting_key_str, current_version)
Logger.log("i", "Reading firmware version of %s: checked = %s - latest = %s", machine_name, checked_version, current_version)
# The first time we want to store the current version, the notification will not be shown,
@@ -78,12 +136,17 @@ class FirmwareUpdateCheckerJob(Job):
button_style=Message.ActionButtonStyle.LINK,
button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
-
# If we do this in a cool way, the download url should be available in the JSON file
if self._set_download_url_callback:
- self._set_download_url_callback("https://ultimaker.com/en/resources/20500-upgrade-firmware")
+ redirect = self.REDIRECT_USER_PER_MACHINE.get(machine_id)
+ if redirect is not None:
+ self._set_download_url_callback(redirect)
+ else:
+ Logger.log('w', "No callback-url for firmware of {0}".format(repr(machine_id)))
message.actionTriggered.connect(self._callback)
message.show()
+ else:
+ Logger.log('i', "No machine with name {0} in list of firmware to check.".format(repr(machine_id)))
except Exception as e:
Logger.log("w", "Failed to check for new version: %s", e)
From 487ef52c6616b8f15af9d7cd3140eaff5e46fbcb Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Wed, 10 Oct 2018 16:52:47 +0200
Subject: [PATCH 210/390] Warn on error and continue on encountering
'future-proof' (now) or old (later) version-URLs.
---
.../FirmwareUpdateCheckerJob.py | 23 +++++++++++++------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 658e820b4b..40546d4a05 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -10,6 +10,7 @@ from UM.Job import Job
from UM.Version import Version
import urllib.request
+from urllib.error import URLError
import codecs
from UM.i18n import i18nCatalog
@@ -62,16 +63,20 @@ class FirmwareUpdateCheckerJob(Job):
self._callback = callback
self._set_download_url_callback = set_download_url_callback
- application_name = Application.getInstance().getApplicationName()
- application_version = Application.getInstance().getVersion()
- self._headers = {"User-Agent": "%s - %s" % (application_name, application_version)}
+ self._headers = {} # Don't set headers yet.
def getUrlResponse(self, url: str) -> str:
- request = urllib.request.Request(url, headers=self._headers)
- current_version_file = urllib.request.urlopen(request)
- reader = codecs.getreader("utf-8")
+ result = "0.0.0"
- return reader(current_version_file).read(firstline=True)
+ try:
+ request = urllib.request.Request(url, headers=self._headers)
+ current_version_file = urllib.request.urlopen(request)
+ reader = codecs.getreader("utf-8")
+ result = reader(current_version_file).read(firstline=True)
+ except URLError:
+ Logger.log('w', "Could not reach '{0}', if this URL is old, consider removal.".format(url))
+
+ return result
def getCurrentVersionForMachine(self, machine_id: MachineId) -> Version:
max_version = Version([0, 0, 0])
@@ -95,6 +100,10 @@ class FirmwareUpdateCheckerJob(Job):
return
try:
+ application_name = Application.getInstance().getApplicationName()
+ application_version = Application.getInstance().getVersion()
+ self._headers = {"User-Agent": "%s - %s" % (application_name, application_version)}
+
# get machine name from the definition container
machine_name = self._container.definition.getName()
machine_name_parts = machine_name.lower().split(" ")
From d8ed3d607403e34205dd46da300f2feaef82b2b0 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 11 Oct 2018 14:56:07 +0200
Subject: [PATCH 211/390] Check the whole list for firmware-updates instead of
just the first added container.
---
plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py | 7 ++++---
plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py | 3 ++-
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 80a954c1cc..459d29265d 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -49,6 +49,7 @@ class FirmwareUpdateChecker(Extension):
self._download_url = None
self._check_job = None
+ self._name_cache = []
## Callback for the message that is spawned when there is a new version.
def _onActionTriggered(self, message, action):
@@ -74,10 +75,10 @@ class FirmwareUpdateChecker(Extension):
# \param silent type(boolean) Suppresses messages other than "new version found" messages.
# This is used when checking for a new firmware version at startup.
def checkFirmwareVersion(self, container = None, silent = False):
- # Do not run multiple check jobs in parallel
- if self._check_job is not None:
- Logger.log("i", "A firmware update check is already running, do nothing.")
+ container_name = container.definition.getName()
+ if container_name in self._name_cache:
return
+ self._name_cache.append(container_name)
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
urls = self.VERSION_URLS_PER_MACHINE,
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 40546d4a05..14a40e3cce 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -34,6 +34,7 @@ def default_parse_version_response(response: str) -> Version:
## This job checks if there is an update available on the provided URL.
+
class FirmwareUpdateCheckerJob(Job):
MACHINE_PER_NAME = \
{
@@ -155,7 +156,7 @@ class FirmwareUpdateCheckerJob(Job):
message.actionTriggered.connect(self._callback)
message.show()
else:
- Logger.log('i', "No machine with name {0} in list of firmware to check.".format(repr(machine_id)))
+ Logger.log('i', "No machine with name {0} in list of firmware to check.".format(machine_name))
except Exception as e:
Logger.log("w", "Failed to check for new version: %s", e)
From 12999f48c848359e6ed33d8997bb9c193a63ae30 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 11 Oct 2018 15:27:04 +0200
Subject: [PATCH 212/390] FirmwareUpdateCheckerJob: Move introduced hardcoded
values to static variables.
---
.../FirmwareUpdateCheckerJob.py | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 14a40e3cce..41710e7e86 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -34,8 +34,11 @@ def default_parse_version_response(response: str) -> Version:
## This job checks if there is an update available on the provided URL.
-
class FirmwareUpdateCheckerJob(Job):
+ STRING_ZERO_VERSION = "0.0.0"
+ STRING_EPSILON_VERSION = "0.0.1"
+ ZERO_VERSION = Version(STRING_ZERO_VERSION)
+ EPSILON_VERSION = Version(STRING_EPSILON_VERSION)
MACHINE_PER_NAME = \
{
"ultimaker 3": MachineId.UM3,
@@ -67,7 +70,7 @@ class FirmwareUpdateCheckerJob(Job):
self._headers = {} # Don't set headers yet.
def getUrlResponse(self, url: str) -> str:
- result = "0.0.0"
+ result = self.STRING_ZERO_VERSION
try:
request = urllib.request.Request(url, headers=self._headers)
@@ -80,7 +83,7 @@ class FirmwareUpdateCheckerJob(Job):
return result
def getCurrentVersionForMachine(self, machine_id: MachineId) -> Version:
- max_version = Version([0, 0, 0])
+ max_version = self.ZERO_VERSION
machine_urls = self._urls.get(machine_id)
parse_function = self.PARSE_VERSION_URL_PER_MACHINE.get(machine_id)
@@ -90,7 +93,7 @@ class FirmwareUpdateCheckerJob(Job):
if version > max_version:
max_version = version
- if max_version < Version([0, 0, 1]):
+ if max_version < self.EPSILON_VERSION:
Logger.log('w', "MachineID {0} not handled!".format(repr(machine_id)))
return max_version
@@ -107,7 +110,6 @@ class FirmwareUpdateCheckerJob(Job):
# get machine name from the definition container
machine_name = self._container.definition.getName()
- machine_name_parts = machine_name.lower().split(" ")
# If it is not None, then we compare between the checked_version and the current_version
machine_id = self.MACHINE_PER_NAME.get(machine_name.lower())
@@ -118,7 +120,7 @@ class FirmwareUpdateCheckerJob(Job):
# If it is the first time the version is checked, the checked_version is ''
setting_key_str = get_settings_key_for_machine(machine_id)
- checked_version = Application.getInstance().getPreferences().getValue(setting_key_str)
+ checked_version = Version(Application.getInstance().getPreferences().getValue(setting_key_str))
# If the checked_version is '', it's because is the first time we check firmware and in this case
# we will not show the notification, but we will store it for the next time
From 6c2791f38240992465014969b7d0fb9c6335dfa6 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 11 Oct 2018 17:16:01 +0200
Subject: [PATCH 213/390] Parse the firmware-update-check lookup-tables from a
(new) .json instead of hardcoded.
---
.../FirmwareUpdateChecker.py | 47 +++++++-----
.../FirmwareUpdateCheckerJob.py | 73 ++++++++++---------
.../resources/machines.json | 36 +++++++++
3 files changed, 101 insertions(+), 55 deletions(-)
create mode 100644 plugins/FirmwareUpdateChecker/resources/machines.json
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 459d29265d..1736bb228a 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -1,18 +1,20 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+import json, os
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
from UM.Extension import Extension
from UM.Application import Application
from UM.Logger import Logger
+from UM.PluginRegistry import PluginRegistry
from UM.i18n import i18nCatalog
from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.GlobalStack import GlobalStack
-from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob, MachineId, get_settings_key_for_machine
+from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob, get_settings_key_for_machine
i18n_catalog = i18nCatalog("cura")
@@ -20,38 +22,23 @@ i18n_catalog = i18nCatalog("cura")
# The plugin is currently only usable for applications maintained by Ultimaker. But it should be relatively easy
# to change it to work for other applications.
class FirmwareUpdateChecker(Extension):
- JEDI_VERSION_URL = "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources"
- UM_NEW_URL_TEMPLATE = "http://software.ultimaker.com/releases/firmware/{0}/stable/version.txt"
- VERSION_URLS_PER_MACHINE = \
- {
- MachineId.UM3: [JEDI_VERSION_URL, UM_NEW_URL_TEMPLATE.format(MachineId.UM3.value)],
- MachineId.UM3E: [JEDI_VERSION_URL, UM_NEW_URL_TEMPLATE.format(MachineId.UM3E.value)],
- MachineId.S5: [UM_NEW_URL_TEMPLATE.format(MachineId.S5.value)]
- }
- # The 'new'-style URL is the only way to check for S5 firmware,
- # and in the future, the UM3 line will also switch over, but for now the old 'JEDI'-style URL is still needed.
- # TODO: Parse all of that from a file, because this will be a big mess of large static values which gets worse with each printer.
- # See also the to-do in FirmWareCheckerJob.
def __init__(self):
super().__init__()
- # Initialize the Preference called `latest_checked_firmware` that stores the last version
- # checked for each printer.
- for machine_id in MachineId:
- Application.getInstance().getPreferences().addPreference(get_settings_key_for_machine(machine_id), "")
-
# Listen to a Signal that indicates a change in the list of printers, just if the user has enabled the
# 'check for updates' option
Application.getInstance().getPreferences().addPreference("info/automatic_update_check", True)
if Application.getInstance().getPreferences().getValue("info/automatic_update_check"):
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
+ self._late_init = True # Init some things after creation, since we need the path from the plugin-mgr.
self._download_url = None
self._check_job = None
self._name_cache = []
## Callback for the message that is spawned when there is a new version.
+ # TODO: Set the right download URL for each message!
def _onActionTriggered(self, message, action):
if action == "download":
if self._download_url is not None:
@@ -68,6 +55,25 @@ class FirmwareUpdateChecker(Extension):
def _onJobFinished(self, *args, **kwargs):
self._check_job = None
+ def lateInit(self):
+ self._late_init = False
+
+ # Open the .json file with the needed lookup-lists for each machine(/model) and retrieve 'raw' json.
+ self._machines_json = None
+ json_path = os.path.join(PluginRegistry.getInstance().getPluginPath("FirmwareUpdateChecker"),
+ "resources/machines.json")
+ with open(json_path, "r", encoding="utf-8") as json_file:
+ self._machines_json = json.load(json_file).get("machines")
+ if self._machines_json is None:
+ Logger.log('e', "Missing or inaccessible: {0}".format(json_path))
+ return
+
+ # Initialize the Preference called `latest_checked_firmware` that stores the last version
+ # checked for each printer.
+ for machine_json in self._machines_json:
+ machine_id = machine_json.get("id")
+ Application.getInstance().getPreferences().addPreference(get_settings_key_for_machine(machine_id), "")
+
## Connect with software.ultimaker.com, load latest.version and check version info.
# If the version info is different from the current version, spawn a message to
# allow the user to download it.
@@ -75,13 +81,16 @@ class FirmwareUpdateChecker(Extension):
# \param silent type(boolean) Suppresses messages other than "new version found" messages.
# This is used when checking for a new firmware version at startup.
def checkFirmwareVersion(self, container = None, silent = False):
+ if self._late_init:
+ self.lateInit()
+
container_name = container.definition.getName()
if container_name in self._name_cache:
return
self._name_cache.append(container_name)
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
- urls = self.VERSION_URLS_PER_MACHINE,
+ machines_json = self._machines_json,
callback = self._onActionTriggered,
set_download_url_callback = self._onSetDownloadUrl)
self._check_job.start()
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 41710e7e86..336b954f5e 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -16,16 +16,9 @@ import codecs
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
-# For UM-machines, these need to match the unique firmware-ID (also used in the URLs), i.o.t. only define in one place.
-@unique
-class MachineId(Enum):
- UM3 = 9066
- UM3E = 9511
- S5 = 9051
-
-def get_settings_key_for_machine(machine_id: MachineId) -> str:
- return "info/latest_checked_firmware_for_{0}".format(machine_id.value)
+def get_settings_key_for_machine(machine_id: int) -> str:
+ return "info/latest_checked_firmware_for_{0}".format(machine_id)
def default_parse_version_response(response: str) -> Version:
@@ -39,31 +32,39 @@ class FirmwareUpdateCheckerJob(Job):
STRING_EPSILON_VERSION = "0.0.1"
ZERO_VERSION = Version(STRING_ZERO_VERSION)
EPSILON_VERSION = Version(STRING_EPSILON_VERSION)
- MACHINE_PER_NAME = \
- {
- "ultimaker 3": MachineId.UM3,
- "ultimaker 3 extended": MachineId.UM3E,
- "ultimaker s5": MachineId.S5
- }
- PARSE_VERSION_URL_PER_MACHINE = \
- {
- MachineId.UM3: default_parse_version_response,
- MachineId.UM3E: default_parse_version_response,
- MachineId.S5: default_parse_version_response
- }
- REDIRECT_USER_PER_MACHINE = \
- {
- MachineId.UM3: "https://ultimaker.com/en/resources/20500-upgrade-firmware",
- MachineId.UM3E: "https://ultimaker.com/en/resources/20500-upgrade-firmware",
- MachineId.S5: "https://ultimaker.com/en/resources/20500-upgrade-firmware"
- }
- # TODO: Parse all of that from a file, because this will be a big mess of large static values which gets worse with each printer.
+ JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": default_parse_version_response}
- def __init__(self, container=None, silent=False, urls=None, callback=None, set_download_url_callback=None):
+ def __init__(self, container=None, silent=False, machines_json=None, callback=None, set_download_url_callback=None):
super().__init__()
self._container = container
self.silent = silent
- self._urls = urls
+
+ # Parse all the needed lookup-tables from the '.json' file(s) in the resources folder.
+ # TODO: This should not be here when the merge to master is done, as it will be repeatedly recreated.
+ # It should be a separate object this constructor receives instead.
+ self._machine_ids = []
+ self._machine_per_name = {}
+ self._parse_version_url_per_machine = {}
+ self._check_urls_per_machine = {}
+ self._redirect_user_per_machine = {}
+ try:
+ for machine_json in machines_json:
+ machine_id = machine_json.get("id")
+ machine_name = machine_json.get("name")
+ self._machine_ids.append(machine_id)
+ self._machine_per_name[machine_name] = machine_id
+ version_parse_function = self.JSON_NAME_TO_VERSION_PARSE_FUNCTION.get(machine_json.get("version_parser"))
+ if version_parse_function is None:
+ Logger.log('w', "No version-parse-function specified for machine {0}.".format(machine_name))
+ version_parse_function = default_parse_version_response # Use default instead if nothing is found.
+ self._parse_version_url_per_machine[machine_id] = version_parse_function
+ self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see '_comment' in the .json file.
+ for check_url in machine_json.get("check_urls"):
+ self._check_urls_per_machine[machine_id].append(check_url)
+ self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
+ except:
+ Logger.log('e', "Couldn't parse firmware-update-check loopup-lists from file.")
+
self._callback = callback
self._set_download_url_callback = set_download_url_callback
@@ -82,11 +83,11 @@ class FirmwareUpdateCheckerJob(Job):
return result
- def getCurrentVersionForMachine(self, machine_id: MachineId) -> Version:
+ def getCurrentVersionForMachine(self, machine_id: int) -> Version:
max_version = self.ZERO_VERSION
- machine_urls = self._urls.get(machine_id)
- parse_function = self.PARSE_VERSION_URL_PER_MACHINE.get(machine_id)
+ machine_urls = self._check_urls_per_machine.get(machine_id)
+ parse_function = self._parse_version_url_per_machine.get(machine_id)
if machine_urls is not None and parse_function is not None:
for url in machine_urls:
version = parse_function(self.getUrlResponse(url))
@@ -99,7 +100,7 @@ class FirmwareUpdateCheckerJob(Job):
return max_version
def run(self):
- if not self._urls or self._urls is None:
+ if not self._machine_ids or self._machine_ids is None:
Logger.log("e", "Can not check for a new release. URL not set!")
return
@@ -112,7 +113,7 @@ class FirmwareUpdateCheckerJob(Job):
machine_name = self._container.definition.getName()
# If it is not None, then we compare between the checked_version and the current_version
- machine_id = self.MACHINE_PER_NAME.get(machine_name.lower())
+ machine_id = self._machine_per_name.get(machine_name.lower())
if machine_id is not None:
Logger.log("i", "You have a {0} in the printer list. Let's check the firmware!".format(machine_name))
@@ -150,7 +151,7 @@ class FirmwareUpdateCheckerJob(Job):
# If we do this in a cool way, the download url should be available in the JSON file
if self._set_download_url_callback:
- redirect = self.REDIRECT_USER_PER_MACHINE.get(machine_id)
+ redirect = self._redirect_user_per_machine.get(machine_id)
if redirect is not None:
self._set_download_url_callback(redirect)
else:
diff --git a/plugins/FirmwareUpdateChecker/resources/machines.json b/plugins/FirmwareUpdateChecker/resources/machines.json
new file mode 100644
index 0000000000..5dc9aadbbf
--- /dev/null
+++ b/plugins/FirmwareUpdateChecker/resources/machines.json
@@ -0,0 +1,36 @@
+{
+ "_comment": "Multiple 'update_urls': The 'new'-style URL is the only way to check for S5 firmware, and in the future, the UM3 line will also switch over, but for now the old 'JEDI'-style URL is still needed.",
+
+ "machines":
+ [
+ {
+ "id": 9066,
+ "name": "ultimaker 3",
+ "check_urls":
+ [
+ "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
+ "http://software.ultimaker.com/releases/firmware/9066/stable/version.txt"
+ ],
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware",
+ "version_parser": "default"
+ },
+ {
+ "id": 9511,
+ "name": "ultimaker 3 extended",
+ "check_urls":
+ [
+ "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
+ "http://software.ultimaker.com/releases/firmware/9511/stable/version.txt"
+ ],
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware",
+ "version_parser": "default"
+ },
+ {
+ "id": 9051,
+ "name": "ultimaker s5",
+ "check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/version.txt"],
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware",
+ "version_parser": "default"
+ }
+ ]
+}
From 472d012c08f8c28a8eba29cf65baa50fa802aeda Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 11 Oct 2018 17:52:06 +0200
Subject: [PATCH 214/390] Move firmware-update-checker json-parsing to its own
class (also don't repeat parsing each time).
---
.../FirmwareUpdateChecker.py | 17 ++---
.../FirmwareUpdateCheckerJob.py | 51 +++-----------
.../FirmwareUpdateCheckerLookup.py | 67 +++++++++++++++++++
3 files changed, 81 insertions(+), 54 deletions(-)
create mode 100644 plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 1736bb228a..223cf2d433 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -15,6 +15,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.GlobalStack import GlobalStack
from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob, get_settings_key_for_machine
+from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup
i18n_catalog = i18nCatalog("cura")
@@ -58,20 +59,12 @@ class FirmwareUpdateChecker(Extension):
def lateInit(self):
self._late_init = False
- # Open the .json file with the needed lookup-lists for each machine(/model) and retrieve 'raw' json.
- self._machines_json = None
- json_path = os.path.join(PluginRegistry.getInstance().getPluginPath("FirmwareUpdateChecker"),
- "resources/machines.json")
- with open(json_path, "r", encoding="utf-8") as json_file:
- self._machines_json = json.load(json_file).get("machines")
- if self._machines_json is None:
- Logger.log('e', "Missing or inaccessible: {0}".format(json_path))
- return
+ self._lookups = FirmwareUpdateCheckerLookup(os.path.join(PluginRegistry.getInstance().getPluginPath(
+ "FirmwareUpdateChecker"), "resources/machines.json"))
# Initialize the Preference called `latest_checked_firmware` that stores the last version
# checked for each printer.
- for machine_json in self._machines_json:
- machine_id = machine_json.get("id")
+ for machine_id in self._lookups.getMachineIds():
Application.getInstance().getPreferences().addPreference(get_settings_key_for_machine(machine_id), "")
## Connect with software.ultimaker.com, load latest.version and check version info.
@@ -90,7 +83,7 @@ class FirmwareUpdateChecker(Extension):
self._name_cache.append(container_name)
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
- machines_json = self._machines_json,
+ lookups = self._lookups,
callback = self._onActionTriggered,
set_download_url_callback = self._onSetDownloadUrl)
self._check_job.start()
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 336b954f5e..6d72e130b2 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -1,8 +1,6 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from enum import Enum, unique
-
from UM.Application import Application
from UM.Message import Message
from UM.Logger import Logger
@@ -13,6 +11,8 @@ import urllib.request
from urllib.error import URLError
import codecs
+from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup
+
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
@@ -21,53 +21,20 @@ def get_settings_key_for_machine(machine_id: int) -> str:
return "info/latest_checked_firmware_for_{0}".format(machine_id)
-def default_parse_version_response(response: str) -> Version:
- raw_str = response.split('\n', 1)[0].rstrip()
- return Version(raw_str.split('.')) # Split it into a list; the default parsing of 'single string' is different.
-
-
## This job checks if there is an update available on the provided URL.
class FirmwareUpdateCheckerJob(Job):
STRING_ZERO_VERSION = "0.0.0"
STRING_EPSILON_VERSION = "0.0.1"
ZERO_VERSION = Version(STRING_ZERO_VERSION)
EPSILON_VERSION = Version(STRING_EPSILON_VERSION)
- JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": default_parse_version_response}
- def __init__(self, container=None, silent=False, machines_json=None, callback=None, set_download_url_callback=None):
+ def __init__(self, container=None, silent=False, lookups:FirmwareUpdateCheckerLookup=None, callback=None, set_download_url_callback=None):
super().__init__()
self._container = container
self.silent = silent
-
- # Parse all the needed lookup-tables from the '.json' file(s) in the resources folder.
- # TODO: This should not be here when the merge to master is done, as it will be repeatedly recreated.
- # It should be a separate object this constructor receives instead.
- self._machine_ids = []
- self._machine_per_name = {}
- self._parse_version_url_per_machine = {}
- self._check_urls_per_machine = {}
- self._redirect_user_per_machine = {}
- try:
- for machine_json in machines_json:
- machine_id = machine_json.get("id")
- machine_name = machine_json.get("name")
- self._machine_ids.append(machine_id)
- self._machine_per_name[machine_name] = machine_id
- version_parse_function = self.JSON_NAME_TO_VERSION_PARSE_FUNCTION.get(machine_json.get("version_parser"))
- if version_parse_function is None:
- Logger.log('w', "No version-parse-function specified for machine {0}.".format(machine_name))
- version_parse_function = default_parse_version_response # Use default instead if nothing is found.
- self._parse_version_url_per_machine[machine_id] = version_parse_function
- self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see '_comment' in the .json file.
- for check_url in machine_json.get("check_urls"):
- self._check_urls_per_machine[machine_id].append(check_url)
- self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
- except:
- Logger.log('e', "Couldn't parse firmware-update-check loopup-lists from file.")
-
self._callback = callback
self._set_download_url_callback = set_download_url_callback
-
+ self._lookups = lookups
self._headers = {} # Don't set headers yet.
def getUrlResponse(self, url: str) -> str:
@@ -86,8 +53,8 @@ class FirmwareUpdateCheckerJob(Job):
def getCurrentVersionForMachine(self, machine_id: int) -> Version:
max_version = self.ZERO_VERSION
- machine_urls = self._check_urls_per_machine.get(machine_id)
- parse_function = self._parse_version_url_per_machine.get(machine_id)
+ machine_urls = self._lookups.getCheckUrlsFor(machine_id)
+ parse_function = self._lookups.getParseVersionUrlFor(machine_id)
if machine_urls is not None and parse_function is not None:
for url in machine_urls:
version = parse_function(self.getUrlResponse(url))
@@ -100,7 +67,7 @@ class FirmwareUpdateCheckerJob(Job):
return max_version
def run(self):
- if not self._machine_ids or self._machine_ids is None:
+ if self._lookups is None:
Logger.log("e", "Can not check for a new release. URL not set!")
return
@@ -113,7 +80,7 @@ class FirmwareUpdateCheckerJob(Job):
machine_name = self._container.definition.getName()
# If it is not None, then we compare between the checked_version and the current_version
- machine_id = self._machine_per_name.get(machine_name.lower())
+ machine_id = self._lookups.getMachineByName(machine_name.lower())
if machine_id is not None:
Logger.log("i", "You have a {0} in the printer list. Let's check the firmware!".format(machine_name))
@@ -151,7 +118,7 @@ class FirmwareUpdateCheckerJob(Job):
# If we do this in a cool way, the download url should be available in the JSON file
if self._set_download_url_callback:
- redirect = self._redirect_user_per_machine.get(machine_id)
+ redirect = self._lookups.getRedirectUseror(machine_id)
if redirect is not None:
self._set_download_url_callback(redirect)
else:
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
new file mode 100644
index 0000000000..62d43553c1
--- /dev/null
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -0,0 +1,67 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+import json, os
+
+from UM.Logger import Logger
+from UM.Version import Version
+
+from UM.i18n import i18nCatalog
+i18n_catalog = i18nCatalog("cura")
+
+def default_parse_version_response(response: str) -> Version:
+ raw_str = response.split('\n', 1)[0].rstrip()
+ return Version(raw_str.split('.')) # Split it into a list; the default parsing of 'single string' is different.
+
+
+class FirmwareUpdateCheckerLookup:
+ JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": default_parse_version_response}
+
+ def __init__(self, json_path):
+ # Open the .json file with the needed lookup-lists for each machine(/model) and retrieve 'raw' json.
+ machines_json = None
+ with open(json_path, "r", encoding="utf-8") as json_file:
+ machines_json = json.load(json_file).get("machines")
+ if machines_json is None:
+ Logger.log('e', "Missing or inaccessible: {0}".format(json_path))
+ return
+
+ # Parse all the needed lookup-tables from the '.json' file(s) in the resources folder.
+ self._machine_ids = []
+ self._machine_per_name = {}
+ self._parse_version_url_per_machine = {}
+ self._check_urls_per_machine = {}
+ self._redirect_user_per_machine = {}
+ try:
+ for machine_json in machines_json:
+ machine_id = machine_json.get("id")
+ machine_name = machine_json.get("name")
+ self._machine_ids.append(machine_id)
+ self._machine_per_name[machine_name] = machine_id
+ version_parse_function = \
+ self.JSON_NAME_TO_VERSION_PARSE_FUNCTION.get(machine_json.get("version_parser"))
+ if version_parse_function is None:
+ Logger.log('w', "No version-parse-function specified for machine {0}.".format(machine_name))
+ version_parse_function = default_parse_version_response # Use default instead if nothing is found.
+ self._parse_version_url_per_machine[machine_id] = version_parse_function
+ self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see '_comment' in the .json file.
+ for check_url in machine_json.get("check_urls"):
+ self._check_urls_per_machine[machine_id].append(check_url)
+ self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
+ except:
+ Logger.log('e', "Couldn't parse firmware-update-check loopup-lists from file.")
+
+ def getMachineIds(self) -> [int]:
+ return self._machine_ids
+
+ def getMachineByName(self, machine_name: str) -> int:
+ return self._machine_per_name.get(machine_name)
+
+ def getParseVersionUrlFor(self, machine_id: int) -> str:
+ return self._parse_version_url_per_machine.get(machine_id)
+
+ def getCheckUrlsFor(self, machine_id: int) -> [str]:
+ return self._check_urls_per_machine.get(machine_id)
+
+ def getRedirectUseror(self, machine_id: int) -> str:
+ return self._redirect_user_per_machine.get(machine_id)
From 4ecac6e27f71b9b8e6cd65aa8e96cc816c7e5428 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 11 Oct 2018 18:24:07 +0200
Subject: [PATCH 215/390] Set the right firmware-download-URL in the actual
update-firmware-message.
---
.../FirmwareUpdateChecker.py | 26 +++++++++----------
.../FirmwareUpdateCheckerJob.py | 19 +++-----------
.../FirmwareUpdateCheckerLookup.py | 7 ++++-
3 files changed, 23 insertions(+), 29 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 223cf2d433..90590fc5a2 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -14,8 +14,8 @@ from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.GlobalStack import GlobalStack
-from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob, get_settings_key_for_machine
-from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup
+from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
+from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, get_settings_key_for_machine
i18n_catalog = i18nCatalog("cura")
@@ -39,14 +39,15 @@ class FirmwareUpdateChecker(Extension):
self._name_cache = []
## Callback for the message that is spawned when there is a new version.
- # TODO: Set the right download URL for each message!
def _onActionTriggered(self, message, action):
- if action == "download":
- if self._download_url is not None:
- QDesktopServices.openUrl(QUrl(self._download_url))
-
- def _onSetDownloadUrl(self, download_url):
- self._download_url = download_url
+ try:
+ download_url = self._lookups.getRedirectUserFor(int(action))
+ if download_url is not None:
+ QDesktopServices.openUrl(QUrl(download_url))
+ else:
+ Logger.log('e', "Can't find URL for {0}".format(action))
+ except:
+ Logger.log('e', "Don't know what to do with {0}".format(action))
def _onContainerAdded(self, container):
# Only take care when a new GlobalStack was added
@@ -56,7 +57,7 @@ class FirmwareUpdateChecker(Extension):
def _onJobFinished(self, *args, **kwargs):
self._check_job = None
- def lateInit(self):
+ def doLateInit(self):
self._late_init = False
self._lookups = FirmwareUpdateCheckerLookup(os.path.join(PluginRegistry.getInstance().getPluginPath(
@@ -75,7 +76,7 @@ class FirmwareUpdateChecker(Extension):
# This is used when checking for a new firmware version at startup.
def checkFirmwareVersion(self, container = None, silent = False):
if self._late_init:
- self.lateInit()
+ self.doLateInit()
container_name = container.definition.getName()
if container_name in self._name_cache:
@@ -84,7 +85,6 @@ class FirmwareUpdateChecker(Extension):
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
lookups = self._lookups,
- callback = self._onActionTriggered,
- set_download_url_callback = self._onSetDownloadUrl)
+ callback = self._onActionTriggered)
self._check_job.start()
self._check_job.finished.connect(self._onJobFinished)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 6d72e130b2..342287ca76 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -11,16 +11,12 @@ import urllib.request
from urllib.error import URLError
import codecs
-from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup
+from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, get_settings_key_for_machine
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
-def get_settings_key_for_machine(machine_id: int) -> str:
- return "info/latest_checked_firmware_for_{0}".format(machine_id)
-
-
## This job checks if there is an update available on the provided URL.
class FirmwareUpdateCheckerJob(Job):
STRING_ZERO_VERSION = "0.0.0"
@@ -28,12 +24,12 @@ class FirmwareUpdateCheckerJob(Job):
ZERO_VERSION = Version(STRING_ZERO_VERSION)
EPSILON_VERSION = Version(STRING_EPSILON_VERSION)
- def __init__(self, container=None, silent=False, lookups:FirmwareUpdateCheckerLookup=None, callback=None, set_download_url_callback=None):
+ def __init__(self, container=None, silent=False, lookups:FirmwareUpdateCheckerLookup=None, callback=None):
super().__init__()
self._container = container
self.silent = silent
self._callback = callback
- self._set_download_url_callback = set_download_url_callback
+
self._lookups = lookups
self._headers = {} # Don't set headers yet.
@@ -109,20 +105,13 @@ class FirmwareUpdateCheckerJob(Job):
"@info:title The %s gets replaced with the printer name.",
"New %s firmware available") % machine_name)
- message.addAction("download",
+ message.addAction(machine_id,
i18n_catalog.i18nc("@action:button", "How to update"),
"[no_icon]",
"[no_description]",
button_style=Message.ActionButtonStyle.LINK,
button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
- # If we do this in a cool way, the download url should be available in the JSON file
- if self._set_download_url_callback:
- redirect = self._lookups.getRedirectUseror(machine_id)
- if redirect is not None:
- self._set_download_url_callback(redirect)
- else:
- Logger.log('w', "No callback-url for firmware of {0}".format(repr(machine_id)))
message.actionTriggered.connect(self._callback)
message.show()
else:
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index 62d43553c1..f2c9082f76 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -9,6 +9,11 @@ from UM.Version import Version
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
+
+def get_settings_key_for_machine(machine_id: int) -> str:
+ return "info/latest_checked_firmware_for_{0}".format(machine_id)
+
+
def default_parse_version_response(response: str) -> Version:
raw_str = response.split('\n', 1)[0].rstrip()
return Version(raw_str.split('.')) # Split it into a list; the default parsing of 'single string' is different.
@@ -63,5 +68,5 @@ class FirmwareUpdateCheckerLookup:
def getCheckUrlsFor(self, machine_id: int) -> [str]:
return self._check_urls_per_machine.get(machine_id)
- def getRedirectUseror(self, machine_id: int) -> str:
+ def getRedirectUserFor(self, machine_id: int) -> str:
return self._redirect_user_per_machine.get(machine_id)
From 6a50487bf0c2a0226650fbb96cd2bf3d0fd28db6 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Thu, 11 Oct 2018 19:16:10 +0200
Subject: [PATCH 216/390] Catch the one that got away
---
plugins/USBPrinting/AvrFirmwareUpdater.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/USBPrinting/AvrFirmwareUpdater.py b/plugins/USBPrinting/AvrFirmwareUpdater.py
index b8650e9208..56e3f99c23 100644
--- a/plugins/USBPrinting/AvrFirmwareUpdater.py
+++ b/plugins/USBPrinting/AvrFirmwareUpdater.py
@@ -22,7 +22,7 @@ class AvrFirmwareUpdater(FirmwareUpdater):
def _updateFirmware(self) -> None:
try:
- hex_file = intelHex.readHex(self._firmware_location)
+ hex_file = intelHex.readHex(self._firmware_file)
assert len(hex_file) > 0
except (FileNotFoundError, AssertionError):
Logger.log("e", "Unable to read provided hex file. Could not update firmware.")
From f2b50c748c1aea35e61de119fb3a08a28afdb295 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Thu, 11 Oct 2018 21:54:27 +0200
Subject: [PATCH 217/390] Fix typing in the FirmwareUpdateChecker plugin.
---
.../FirmwareUpdateChecker.py | 14 +++++----
.../FirmwareUpdateCheckerJob.py | 5 ++--
.../FirmwareUpdateCheckerLookup.py | 30 ++++++++++---------
3 files changed, 28 insertions(+), 21 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 90590fc5a2..71bdd0bc23 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -1,10 +1,12 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-import json, os
+import os
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
+from typing import List
+
from UM.Extension import Extension
from UM.Application import Application
from UM.Logger import Logger
@@ -19,12 +21,13 @@ from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, get_settin
i18n_catalog = i18nCatalog("cura")
+
## This Extension checks for new versions of the firmware based on the latest checked version number.
# The plugin is currently only usable for applications maintained by Ultimaker. But it should be relatively easy
# to change it to work for other applications.
class FirmwareUpdateChecker(Extension):
- def __init__(self):
+ def __init__(self) -> None:
super().__init__()
# Listen to a Signal that indicates a change in the list of printers, just if the user has enabled the
@@ -36,7 +39,8 @@ class FirmwareUpdateChecker(Extension):
self._late_init = True # Init some things after creation, since we need the path from the plugin-mgr.
self._download_url = None
self._check_job = None
- self._name_cache = []
+ self._name_cache = [] # type: List[str]
+ self._lookups = None
## Callback for the message that is spawned when there is a new version.
def _onActionTriggered(self, message, action):
@@ -46,8 +50,8 @@ class FirmwareUpdateChecker(Extension):
QDesktopServices.openUrl(QUrl(download_url))
else:
Logger.log('e', "Can't find URL for {0}".format(action))
- except:
- Logger.log('e', "Don't know what to do with {0}".format(action))
+ except Exception as ex:
+ Logger.log('e', "Don't know what to do with '{0}' because {1}".format(action, ex))
def _onContainerAdded(self, container):
# Only take care when a new GlobalStack was added
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 342287ca76..d186cbb4e4 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -9,6 +9,7 @@ from UM.Version import Version
import urllib.request
from urllib.error import URLError
+from typing import Dict
import codecs
from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, get_settings_key_for_machine
@@ -24,14 +25,14 @@ class FirmwareUpdateCheckerJob(Job):
ZERO_VERSION = Version(STRING_ZERO_VERSION)
EPSILON_VERSION = Version(STRING_EPSILON_VERSION)
- def __init__(self, container=None, silent=False, lookups:FirmwareUpdateCheckerLookup=None, callback=None):
+ def __init__(self, container, silent, lookups: FirmwareUpdateCheckerLookup, callback) -> None:
super().__init__()
self._container = container
self.silent = silent
self._callback = callback
self._lookups = lookups
- self._headers = {} # Don't set headers yet.
+ self._headers = {} # type:Dict[str, str] # Don't set headers yet.
def getUrlResponse(self, url: str) -> str:
result = self.STRING_ZERO_VERSION
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index f2c9082f76..f6d7a24da0 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -1,7 +1,9 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-import json, os
+import json
+
+from typing import Callable, Dict, List, Optional
from UM.Logger import Logger
from UM.Version import Version
@@ -22,7 +24,7 @@ def default_parse_version_response(response: str) -> Version:
class FirmwareUpdateCheckerLookup:
JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": default_parse_version_response}
- def __init__(self, json_path):
+ def __init__(self, json_path) -> None:
# Open the .json file with the needed lookup-lists for each machine(/model) and retrieve 'raw' json.
machines_json = None
with open(json_path, "r", encoding="utf-8") as json_file:
@@ -32,11 +34,11 @@ class FirmwareUpdateCheckerLookup:
return
# Parse all the needed lookup-tables from the '.json' file(s) in the resources folder.
- self._machine_ids = []
- self._machine_per_name = {}
- self._parse_version_url_per_machine = {}
- self._check_urls_per_machine = {}
- self._redirect_user_per_machine = {}
+ self._machine_ids = [] # type:List[int]
+ self._machine_per_name = {} # type:Dict[str, int]
+ self._parse_version_url_per_machine = {} # type:Dict[int, Callable]
+ self._check_urls_per_machine = {} # type:Dict[int, List[str]]
+ self._redirect_user_per_machine = {} # type:Dict[int, str]
try:
for machine_json in machines_json:
machine_id = machine_json.get("id")
@@ -53,20 +55,20 @@ class FirmwareUpdateCheckerLookup:
for check_url in machine_json.get("check_urls"):
self._check_urls_per_machine[machine_id].append(check_url)
self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
- except:
- Logger.log('e', "Couldn't parse firmware-update-check loopup-lists from file.")
+ except Exception as ex:
+ Logger.log('e', "Couldn't parse firmware-update-check loopup-lists from file because {0}.".format(ex))
- def getMachineIds(self) -> [int]:
+ def getMachineIds(self) -> List[int]:
return self._machine_ids
- def getMachineByName(self, machine_name: str) -> int:
+ def getMachineByName(self, machine_name: str) -> Optional[int]:
return self._machine_per_name.get(machine_name)
- def getParseVersionUrlFor(self, machine_id: int) -> str:
+ def getParseVersionUrlFor(self, machine_id: int) -> Optional[Callable]:
return self._parse_version_url_per_machine.get(machine_id)
- def getCheckUrlsFor(self, machine_id: int) -> [str]:
+ def getCheckUrlsFor(self, machine_id: int) -> Optional[List[str]]:
return self._check_urls_per_machine.get(machine_id)
- def getRedirectUserFor(self, machine_id: int) -> str:
+ def getRedirectUserFor(self, machine_id: int) -> Optional[str]:
return self._redirect_user_per_machine.get(machine_id)
From 69cef98c3041244bc9edb77ffe3f8c85f517ba19 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Fri, 12 Oct 2018 10:11:46 +0200
Subject: [PATCH 218/390] FirmwareUpdateChecker: Small fixes (typing and
lowercase input).
---
plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py | 5 ++---
plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py | 2 +-
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index d186cbb4e4..09be95597b 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -39,9 +39,8 @@ class FirmwareUpdateCheckerJob(Job):
try:
request = urllib.request.Request(url, headers=self._headers)
- current_version_file = urllib.request.urlopen(request)
- reader = codecs.getreader("utf-8")
- result = reader(current_version_file).read(firstline=True)
+ response = urllib.request.urlopen(request)
+ result = response.read().decode('utf-8')
except URLError:
Logger.log('w', "Could not reach '{0}', if this URL is old, consider removal.".format(url))
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index f6d7a24da0..2e97a8869d 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -42,7 +42,7 @@ class FirmwareUpdateCheckerLookup:
try:
for machine_json in machines_json:
machine_id = machine_json.get("id")
- machine_name = machine_json.get("name")
+ machine_name = machine_json.get("name").lower() # Lower in case upper-case char are added to the json.
self._machine_ids.append(machine_id)
self._machine_per_name[machine_name] = machine_id
version_parse_function = \
From f7bef851db0ab01d2bbd832ab3b466e17049661f Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 11:09:46 +0200
Subject: [PATCH 219/390] Remove code duplication for recreate network timer
---
cura/PrinterOutput/NetworkedPrinterOutputDevice.py | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
index d9c5707a03..f7c7f5d233 100644
--- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
+++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
@@ -130,9 +130,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
# We need to check if the manager needs to be re-created. If we don't, we get some issues when OSX goes to
# sleep.
if time_since_last_response > self._recreate_network_manager_time:
- if self._last_manager_create_time is None:
- self._createNetworkManager()
- elif time() - self._last_manager_create_time > self._recreate_network_manager_time:
+ if self._last_manager_create_time is None or time() - self._last_manager_create_time > self._recreate_network_manager_time:
self._createNetworkManager()
assert(self._manager is not None)
elif self._connection_state == ConnectionState.closed:
From ad80ea6dd47fdff1a67db98a66afa9e29202f031 Mon Sep 17 00:00:00 2001
From: Tim Kuipers
Date: Fri, 12 Oct 2018 11:16:24 +0200
Subject: [PATCH 220/390] fix: limit to extruder of top/bottom polygon
connector
---
resources/definitions/fdmprinter.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 305d841175..9da27f5040 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1221,7 +1221,7 @@
"type": "bool",
"default_value": false,
"enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric'",
- "limit_to_extruder": "infill_extruder_nr",
+ "limit_to_extruder": "top_bottom_extruder_nr",
"settable_per_mesh": true
},
"skin_angles":
From 3c626453a69c3c66c76540d8ca2035a396c58b74 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 11:28:13 +0200
Subject: [PATCH 221/390] Fix spelling
---
resources/definitions/fdmprinter.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 9da27f5040..f17dd63c0a 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -1217,7 +1217,7 @@
"connect_skin_polygons":
{
"label": "Connect Top/Bottom Polygons",
- "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happend midway over infill this feature can reduce the top surface quality.",
+ "description": "Connect top/bottom skin paths where they run next to each other. For the concentric pattern enabling this setting greatly reduces the travel time, but because the connections can happen midway over infill this feature can reduce the top surface quality.",
"type": "bool",
"default_value": false,
"enabled": "(top_layers > 0 or bottom_layers > 0) and top_bottom_pattern == 'concentric'",
From 85b835118dc91d829f7f5c31eb2b6b254f023d92 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 13:24:09 +0200
Subject: [PATCH 222/390] Log which firmware file you're about to upload
Kind of critical information, really.
Contributes to issue CURA-5749.
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 36c5321180..769820d6d0 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -59,9 +59,9 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
self._all_baud_rates = [115200, 250000, 230400, 57600, 38400, 19200, 9600]
# Instead of using a timer, we really need the update to be as a thread, as reading from serial can block.
- self._update_thread = Thread(target=self._update, daemon = True)
+ self._update_thread = Thread(target = self._update, daemon = True)
- self._update_firmware_thread = Thread(target=self._updateFirmware, daemon = True)
+ self._update_firmware_thread = Thread(target = self._updateFirmware, daemon = True)
self._last_temperature_request = None # type: Optional[int]
@@ -160,6 +160,7 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if self._connection_state != ConnectionState.closed:
self.close()
+ Logger.log("i", "Uploading hex file from: {firmware_location}".format(firmware_location = self._firmware_location))
try:
hex_file = intelHex.readHex(self._firmware_location)
assert len(hex_file) > 0
From 287689a073befd0d4da7612d26810410b1a03ae0 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 13:25:34 +0200
Subject: [PATCH 223/390] Don't cache the automatic firmware name
The QML property was not updated when you change the printer. By not caching it, it gets the current printer's firmware file upon clicking the button. Simple and effective, and not that tough on computational power that it needs caching.
Contributes to issue CURA-5749.
---
.../UltimakerMachineActions/UpgradeFirmwareMachineAction.qml | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
index ed771d2a04..fff7d2c46f 100644
--- a/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
+++ b/plugins/UltimakerMachineActions/UpgradeFirmwareMachineAction.qml
@@ -1,4 +1,4 @@
-// Copyright (c) 2016 Ultimaker B.V.
+// Copyright (c) 2018 Ultimaker B.V.
// Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.2
@@ -58,7 +58,6 @@ Cura.MachineAction
anchors.horizontalCenter: parent.horizontalCenter
width: childrenRect.width
spacing: UM.Theme.getSize("default_margin").width
- property var firmwareName: Cura.USBPrinterManager.getDefaultFirmwareName()
Button
{
id: autoUpgradeButton
@@ -66,7 +65,7 @@ Cura.MachineAction
enabled: parent.firmwareName != "" && activeOutputDevice
onClicked:
{
- activeOutputDevice.updateFirmware(parent.firmwareName)
+ activeOutputDevice.updateFirmware(Cura.USBPrinterManager.getDefaultFirmwareName())
}
}
Button
From 99fc372b32058287e4113c211231458f1d129fae Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 14:55:13 +0200
Subject: [PATCH 224/390] Update printer information when switching global
container stacks
This was just evaluated once during the creating of a USB connection. But you can switch out the printer without breaking/making a USB connection, so in that case we have to update it here.
Contributes to issue CURA-5749.
---
cura/PrinterOutput/PrinterOutputModel.py | 2 +-
plugins/USBPrinting/USBPrinterOutputDevice.py | 14 +++++++++-----
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py
index f009a33178..cc9463baec 100644
--- a/cura/PrinterOutput/PrinterOutputModel.py
+++ b/cura/PrinterOutput/PrinterOutputModel.py
@@ -172,7 +172,7 @@ class PrinterOutputModel(QObject):
def getController(self):
return self._controller
- @pyqtProperty(str, notify=nameChanged)
+ @pyqtProperty(str, notify = nameChanged)
def name(self):
return self._name
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 769820d6d0..b61a62adc0 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -273,14 +273,18 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
except SerialException:
Logger.log("w", "An exception occured while trying to create serial connection")
return
- container_stack = CuraApplication.getInstance().getGlobalContainerStack()
- num_extruders = container_stack.getProperty("machine_extruder_count", "value")
- # Ensure that a printer is created.
- self._printers = [PrinterOutputModel(output_controller=GenericOutputController(self), number_of_extruders=num_extruders)]
- self._printers[0].updateName(container_stack.getName())
+ CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerStackChanged)
+ self._onGlobalContainerStackChanged()
self.setConnectionState(ConnectionState.connected)
self._update_thread.start()
+ def _onGlobalContainerStackChanged(self):
+ container_stack = CuraApplication.getInstance().getGlobalContainerStack()
+ num_extruders = container_stack.getProperty("machine_extruder_count", "value")
+ #Ensure that a printer is created.
+ self._printers = [PrinterOutputModel(output_controller = GenericOutputController(self), number_of_extruders = num_extruders)]
+ self._printers[0].updateName(container_stack.getName())
+
def close(self):
super().close()
if self._serial is not None:
From 9e4fcd820eaf67cf431c2e2fe9a3957d6c14d4f9 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 14:56:27 +0200
Subject: [PATCH 225/390] Update outputDevice when the global container changed
And directly link the active printer name to it, so that that also gets updated. With the property var it just gets evaluated upon creating the rectangle.
Contributes to issue CURA-5749.
---
resources/qml/PrintMonitor.qml | 2 +-
resources/qml/PrinterOutput/OutputDeviceHeader.qml | 12 ++++++++++--
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/resources/qml/PrintMonitor.qml b/resources/qml/PrintMonitor.qml
index 3bfcea7025..12e95d1e89 100644
--- a/resources/qml/PrintMonitor.qml
+++ b/resources/qml/PrintMonitor.qml
@@ -44,7 +44,7 @@ Column
Repeater
{
id: extrudersRepeater
- model: activePrinter!=null ? activePrinter.extruders : null
+ model: activePrinter != null ? activePrinter.extruders : null
ExtruderBox
{
diff --git a/resources/qml/PrinterOutput/OutputDeviceHeader.qml b/resources/qml/PrinterOutput/OutputDeviceHeader.qml
index 03e6d78699..b5ed1b7b4e 100644
--- a/resources/qml/PrinterOutput/OutputDeviceHeader.qml
+++ b/resources/qml/PrinterOutput/OutputDeviceHeader.qml
@@ -14,11 +14,19 @@ Item
implicitHeight: Math.floor(childrenRect.height + UM.Theme.getSize("default_margin").height * 2)
property var outputDevice: null
+ Connections
+ {
+ target: Cura.MachineManager
+ onGlobalContainerChanged:
+ {
+ outputDevice = Cura.MachineManager.printerOutputDevices.length >= 1 ? Cura.MachineManager.printerOutputDevices[0] : null;
+ }
+ }
+
Rectangle
{
height: childrenRect.height
color: UM.Theme.getColor("setting_category")
- property var activePrinter: outputDevice != null ? outputDevice.activePrinter : null
Label
{
@@ -28,7 +36,7 @@ Item
anchors.left: parent.left
anchors.top: parent.top
anchors.margins: UM.Theme.getSize("default_margin").width
- text: outputDevice != null ? activePrinter.name : ""
+ text: outputDevice != null ? outputDevice.activePrinter.name : ""
}
Label
From 6ac10db58248a3e0492b112ab816f39a9278a24f Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 15:37:43 +0200
Subject: [PATCH 226/390] Code style: Use double quotes for strings
Contributes to issue CURA-5483.
---
.../FirmwareUpdateChecker.py | 8 ++++----
.../FirmwareUpdateCheckerJob.py | 12 ++++++------
.../FirmwareUpdateCheckerLookup.py | 16 ++++++++--------
3 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 71bdd0bc23..e030d8f796 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import os
@@ -31,7 +31,7 @@ class FirmwareUpdateChecker(Extension):
super().__init__()
# Listen to a Signal that indicates a change in the list of printers, just if the user has enabled the
- # 'check for updates' option
+ # "check for updates" option
Application.getInstance().getPreferences().addPreference("info/automatic_update_check", True)
if Application.getInstance().getPreferences().getValue("info/automatic_update_check"):
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
@@ -49,9 +49,9 @@ class FirmwareUpdateChecker(Extension):
if download_url is not None:
QDesktopServices.openUrl(QUrl(download_url))
else:
- Logger.log('e', "Can't find URL for {0}".format(action))
+ Logger.log("e", "Can't find URL for {0}".format(action))
except Exception as ex:
- Logger.log('e', "Don't know what to do with '{0}' because {1}".format(action, ex))
+ Logger.log("e", "Don't know what to do with '{0}' because {1}".format(action, ex))
def _onContainerAdded(self, container):
# Only take care when a new GlobalStack was added
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 09be95597b..41cc2358c1 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -40,9 +40,9 @@ class FirmwareUpdateCheckerJob(Job):
try:
request = urllib.request.Request(url, headers=self._headers)
response = urllib.request.urlopen(request)
- result = response.read().decode('utf-8')
+ result = response.read().decode("utf-8")
except URLError:
- Logger.log('w', "Could not reach '{0}', if this URL is old, consider removal.".format(url))
+ Logger.log("w", "Could not reach '{0}', if this URL is old, consider removal.".format(url))
return result
@@ -58,7 +58,7 @@ class FirmwareUpdateCheckerJob(Job):
max_version = version
if max_version < self.EPSILON_VERSION:
- Logger.log('w', "MachineID {0} not handled!".format(repr(machine_id)))
+ Logger.log("w", "MachineID {0} not handled!".format(repr(machine_id)))
return max_version
@@ -82,11 +82,11 @@ class FirmwareUpdateCheckerJob(Job):
current_version = self.getCurrentVersionForMachine(machine_id)
- # If it is the first time the version is checked, the checked_version is ''
+ # If it is the first time the version is checked, the checked_version is ""
setting_key_str = get_settings_key_for_machine(machine_id)
checked_version = Version(Application.getInstance().getPreferences().getValue(setting_key_str))
- # If the checked_version is '', it's because is the first time we check firmware and in this case
+ # If the checked_version is "", it's because is the first time we check firmware and in this case
# we will not show the notification, but we will store it for the next time
Application.getInstance().getPreferences().setValue(setting_key_str, current_version)
Logger.log("i", "Reading firmware version of %s: checked = %s - latest = %s", machine_name, checked_version, current_version)
@@ -115,7 +115,7 @@ class FirmwareUpdateCheckerJob(Job):
message.actionTriggered.connect(self._callback)
message.show()
else:
- Logger.log('i', "No machine with name {0} in list of firmware to check.".format(machine_name))
+ Logger.log("i", "No machine with name {0} in list of firmware to check.".format(machine_name))
except Exception as e:
Logger.log("w", "Failed to check for new version: %s", e)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index 2e97a8869d..ec8e7cc073 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -17,23 +17,23 @@ def get_settings_key_for_machine(machine_id: int) -> str:
def default_parse_version_response(response: str) -> Version:
- raw_str = response.split('\n', 1)[0].rstrip()
- return Version(raw_str.split('.')) # Split it into a list; the default parsing of 'single string' is different.
+ raw_str = response.split("\n", 1)[0].rstrip()
+ return Version(raw_str.split(".")) # Split it into a list; the default parsing of "single string" is different.
class FirmwareUpdateCheckerLookup:
JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": default_parse_version_response}
def __init__(self, json_path) -> None:
- # Open the .json file with the needed lookup-lists for each machine(/model) and retrieve 'raw' json.
+ # Open the .json file with the needed lookup-lists for each machine(/model) and retrieve "raw" json.
machines_json = None
with open(json_path, "r", encoding="utf-8") as json_file:
machines_json = json.load(json_file).get("machines")
if machines_json is None:
- Logger.log('e', "Missing or inaccessible: {0}".format(json_path))
+ Logger.log("e", "Missing or inaccessible: {0}".format(json_path))
return
- # Parse all the needed lookup-tables from the '.json' file(s) in the resources folder.
+ # Parse all the needed lookup-tables from the ".json" file(s) in the resources folder.
self._machine_ids = [] # type:List[int]
self._machine_per_name = {} # type:Dict[str, int]
self._parse_version_url_per_machine = {} # type:Dict[int, Callable]
@@ -48,15 +48,15 @@ class FirmwareUpdateCheckerLookup:
version_parse_function = \
self.JSON_NAME_TO_VERSION_PARSE_FUNCTION.get(machine_json.get("version_parser"))
if version_parse_function is None:
- Logger.log('w', "No version-parse-function specified for machine {0}.".format(machine_name))
+ Logger.log("w", "No version-parse-function specified for machine {0}.".format(machine_name))
version_parse_function = default_parse_version_response # Use default instead if nothing is found.
self._parse_version_url_per_machine[machine_id] = version_parse_function
- self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see '_comment' in the .json file.
+ self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see "_comment" in the .json file.
for check_url in machine_json.get("check_urls"):
self._check_urls_per_machine[machine_id].append(check_url)
self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
except Exception as ex:
- Logger.log('e', "Couldn't parse firmware-update-check loopup-lists from file because {0}.".format(ex))
+ Logger.log("e", "Couldn't parse firmware-update-check loopup-lists from file because {0}.".format(ex))
def getMachineIds(self) -> List[int]:
return self._machine_ids
From e3b05f086740b0faba00d13a21ab5d3a23a0c224 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 16:46:39 +0200
Subject: [PATCH 227/390] Code style: Spaces around binary operators
Also removed the unused machines_json value.
Contributes to issue CURA-5483.
---
.../FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py | 10 +++++-----
.../FirmwareUpdateCheckerLookup.py | 3 +--
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 41cc2358c1..ee5eaac25b 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -38,7 +38,7 @@ class FirmwareUpdateCheckerJob(Job):
result = self.STRING_ZERO_VERSION
try:
- request = urllib.request.Request(url, headers=self._headers)
+ request = urllib.request.Request(url, headers = self._headers)
response = urllib.request.urlopen(request)
result = response.read().decode("utf-8")
except URLError:
@@ -100,8 +100,8 @@ class FirmwareUpdateCheckerJob(Job):
message = Message(i18n_catalog.i18nc(
"@info Don't translate {machine_name}, since it gets replaced by a printer name!",
"New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(
- machine_name=machine_name),
- title=i18n_catalog.i18nc(
+ machine_name = machine_name),
+ title = i18n_catalog.i18nc(
"@info:title The %s gets replaced with the printer name.",
"New %s firmware available") % machine_name)
@@ -109,8 +109,8 @@ class FirmwareUpdateCheckerJob(Job):
i18n_catalog.i18nc("@action:button", "How to update"),
"[no_icon]",
"[no_description]",
- button_style=Message.ActionButtonStyle.LINK,
- button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
+ button_style = Message.ActionButtonStyle.LINK,
+ button_align = Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
message.actionTriggered.connect(self._callback)
message.show()
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index ec8e7cc073..e283d58b2b 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -26,8 +26,7 @@ class FirmwareUpdateCheckerLookup:
def __init__(self, json_path) -> None:
# Open the .json file with the needed lookup-lists for each machine(/model) and retrieve "raw" json.
- machines_json = None
- with open(json_path, "r", encoding="utf-8") as json_file:
+ with open(json_path, "r", encoding = "utf-8") as json_file:
machines_json = json.load(json_file).get("machines")
if machines_json is None:
Logger.log("e", "Missing or inaccessible: {0}".format(json_path))
From 1b7055f0f39f339f8bd1d4801203732ed8b1d318 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 12 Oct 2018 17:03:48 +0200
Subject: [PATCH 228/390] Fix spelling of error message
Loopup -> Lookup.
Contributes to issue CURA-5483.
---
plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index e283d58b2b..6d96ee36bb 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -55,7 +55,7 @@ class FirmwareUpdateCheckerLookup:
self._check_urls_per_machine[machine_id].append(check_url)
self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
except Exception as ex:
- Logger.log("e", "Couldn't parse firmware-update-check loopup-lists from file because {0}.".format(ex))
+ Logger.log("e", "Couldn't parse firmware-update-check lookup-lists from file because {0}.".format(ex))
def getMachineIds(self) -> List[int]:
return self._machine_ids
From 6cf2e89f6b37b5d077d20b8e8dae2dd81c97c18c Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Sat, 13 Oct 2018 16:40:26 +0200
Subject: [PATCH 229/390] Document CameraImageProvider
Makes it easier than looking up the Qt documentation online.
---
cura/CameraImageProvider.py | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/cura/CameraImageProvider.py b/cura/CameraImageProvider.py
index 6a07f6b029..edb0f205c7 100644
--- a/cura/CameraImageProvider.py
+++ b/cura/CameraImageProvider.py
@@ -1,15 +1,26 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
from PyQt5.QtGui import QImage
from PyQt5.QtQuick import QQuickImageProvider
from PyQt5.QtCore import QSize
from UM.Application import Application
-
+## Creates screenshots of the current scene.
class CameraImageProvider(QQuickImageProvider):
def __init__(self):
super().__init__(QQuickImageProvider.Image)
## Request a new image.
+ #
+ # The image will be taken using the current camera position.
+ # Only the actual objects in the scene will get rendered. Not the build
+ # plate and such!
+ # \param id The ID for the image to create. This is the requested image
+ # source, with the "image:" scheme and provider identifier removed. It's
+ # a Qt thing, they'll provide this parameter.
+ # \param size The dimensions of the image to scale to.
def requestImage(self, id, size):
for output_device in Application.getInstance().getOutputDeviceManager().getOutputDevices():
try:
From 60408c14bcac5aac9ac8b623f1d455b06032cd09 Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Sat, 13 Oct 2018 19:21:22 +0200
Subject: [PATCH 230/390] FirmwareUpdateChecker: Small refactors due to code
review.
---
.../FirmwareUpdateChecker.py | 33 ++++++++++---------
.../FirmwareUpdateCheckerJob.py | 6 ++--
.../FirmwareUpdateCheckerLookup.py | 10 +++---
.../resources/machines.json | 2 +-
4 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index e030d8f796..61604ff78b 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -5,19 +5,20 @@ import os
from PyQt5.QtCore import QUrl
from PyQt5.QtGui import QDesktopServices
-from typing import List
+from typing import Set
from UM.Extension import Extension
from UM.Application import Application
from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry
+from UM.Qt.QtApplication import QtApplication
from UM.i18n import i18nCatalog
from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.GlobalStack import GlobalStack
from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
-from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, get_settings_key_for_machine
+from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine
i18n_catalog = i18nCatalog("cura")
@@ -36,22 +37,23 @@ class FirmwareUpdateChecker(Extension):
if Application.getInstance().getPreferences().getValue("info/automatic_update_check"):
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
- self._late_init = True # Init some things after creation, since we need the path from the plugin-mgr.
+ # Partly initialize after creation, since we need our own path from the plugin-manager.
self._download_url = None
self._check_job = None
- self._name_cache = [] # type: List[str]
+ self._checked_printer_names = [] # type: Set[str]
self._lookups = None
+ QtApplication.pluginsLoaded.connect(self._onPluginsLoaded)
## Callback for the message that is spawned when there is a new version.
def _onActionTriggered(self, message, action):
- try:
download_url = self._lookups.getRedirectUserFor(int(action))
if download_url is not None:
- QDesktopServices.openUrl(QUrl(download_url))
+ if QDesktopServices.openUrl(QUrl(download_url)):
+ Logger.log("i", "Redirected browser to {0} to show newly available firmware.".format(download_url))
+ else:
+ Logger.log("e", "Can't reach URL: {0}".format(download_url))
else:
Logger.log("e", "Can't find URL for {0}".format(action))
- except Exception as ex:
- Logger.log("e", "Don't know what to do with '{0}' because {1}".format(action, ex))
def _onContainerAdded(self, container):
# Only take care when a new GlobalStack was added
@@ -61,8 +63,9 @@ class FirmwareUpdateChecker(Extension):
def _onJobFinished(self, *args, **kwargs):
self._check_job = None
- def doLateInit(self):
- self._late_init = False
+ def _onPluginsLoaded(self):
+ if self._lookups is not None:
+ return
self._lookups = FirmwareUpdateCheckerLookup(os.path.join(PluginRegistry.getInstance().getPluginPath(
"FirmwareUpdateChecker"), "resources/machines.json"))
@@ -70,7 +73,7 @@ class FirmwareUpdateChecker(Extension):
# Initialize the Preference called `latest_checked_firmware` that stores the last version
# checked for each printer.
for machine_id in self._lookups.getMachineIds():
- Application.getInstance().getPreferences().addPreference(get_settings_key_for_machine(machine_id), "")
+ Application.getInstance().getPreferences().addPreference(getSettingsKeyForMachine(machine_id), "")
## Connect with software.ultimaker.com, load latest.version and check version info.
# If the version info is different from the current version, spawn a message to
@@ -79,13 +82,13 @@ class FirmwareUpdateChecker(Extension):
# \param silent type(boolean) Suppresses messages other than "new version found" messages.
# This is used when checking for a new firmware version at startup.
def checkFirmwareVersion(self, container = None, silent = False):
- if self._late_init:
- self.doLateInit()
+ if self._lookups is None:
+ self._onPluginsLoaded()
container_name = container.definition.getName()
- if container_name in self._name_cache:
+ if container_name in self._checked_printer_names:
return
- self._name_cache.append(container_name)
+ self._checked_printer_names.append(container_name)
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
lookups = self._lookups,
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index ee5eaac25b..5bb9d076b6 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -12,7 +12,7 @@ from urllib.error import URLError
from typing import Dict
import codecs
-from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, get_settings_key_for_machine
+from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
@@ -78,12 +78,12 @@ class FirmwareUpdateCheckerJob(Job):
# If it is not None, then we compare between the checked_version and the current_version
machine_id = self._lookups.getMachineByName(machine_name.lower())
if machine_id is not None:
- Logger.log("i", "You have a {0} in the printer list. Let's check the firmware!".format(machine_name))
+ Logger.log("i", "You have a(n) {0} in the printer list. Let's check the firmware!".format(machine_name))
current_version = self.getCurrentVersionForMachine(machine_id)
# If it is the first time the version is checked, the checked_version is ""
- setting_key_str = get_settings_key_for_machine(machine_id)
+ setting_key_str = getSettingsKeyForMachine(machine_id)
checked_version = Version(Application.getInstance().getPreferences().getValue(setting_key_str))
# If the checked_version is "", it's because is the first time we check firmware and in this case
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index 6d96ee36bb..ceecef61ba 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -12,17 +12,17 @@ from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
-def get_settings_key_for_machine(machine_id: int) -> str:
+def getSettingsKeyForMachine(machine_id: int) -> str:
return "info/latest_checked_firmware_for_{0}".format(machine_id)
-def default_parse_version_response(response: str) -> Version:
+def defaultParseVersionResponse(response: str) -> Version:
raw_str = response.split("\n", 1)[0].rstrip()
- return Version(raw_str.split(".")) # Split it into a list; the default parsing of "single string" is different.
+ return Version(raw_str)
class FirmwareUpdateCheckerLookup:
- JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": default_parse_version_response}
+ JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": defaultParseVersionResponse}
def __init__(self, json_path) -> None:
# Open the .json file with the needed lookup-lists for each machine(/model) and retrieve "raw" json.
@@ -48,7 +48,7 @@ class FirmwareUpdateCheckerLookup:
self.JSON_NAME_TO_VERSION_PARSE_FUNCTION.get(machine_json.get("version_parser"))
if version_parse_function is None:
Logger.log("w", "No version-parse-function specified for machine {0}.".format(machine_name))
- version_parse_function = default_parse_version_response # Use default instead if nothing is found.
+ version_parse_function = defaultParseVersionResponse # Use default instead if nothing is found.
self._parse_version_url_per_machine[machine_id] = version_parse_function
self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see "_comment" in the .json file.
for check_url in machine_json.get("check_urls"):
diff --git a/plugins/FirmwareUpdateChecker/resources/machines.json b/plugins/FirmwareUpdateChecker/resources/machines.json
index 5dc9aadbbf..ee072f75c3 100644
--- a/plugins/FirmwareUpdateChecker/resources/machines.json
+++ b/plugins/FirmwareUpdateChecker/resources/machines.json
@@ -1,5 +1,5 @@
{
- "_comment": "Multiple 'update_urls': The 'new'-style URL is the only way to check for S5 firmware, and in the future, the UM3 line will also switch over, but for now the old 'JEDI'-style URL is still needed.",
+ "_comment": "There are multiple 'check_urls', because sometimes an URL is about to be phased out, and it's useful to have a new 'future-proof' one at the ready.",
"machines":
[
From 8c71a8855c9f80ce0beb5daad6bd643633db010b Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Sat, 13 Oct 2018 19:36:11 +0200
Subject: [PATCH 231/390] FirmwareUpdateChecker: Remove superfluous
'version_parser' as a setting, since it broke lean principles.
---
.../FirmwareUpdateCheckerJob.py | 9 ++++++---
.../FirmwareUpdateCheckerLookup.py | 12 ------------
.../FirmwareUpdateChecker/resources/machines.json | 9 +++------
3 files changed, 9 insertions(+), 21 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 5bb9d076b6..a873f17d61 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -46,14 +46,17 @@ class FirmwareUpdateCheckerJob(Job):
return result
+ def parseVersionResponse(self, response: str) -> Version:
+ raw_str = response.split("\n", 1)[0].rstrip()
+ return Version(raw_str)
+
def getCurrentVersionForMachine(self, machine_id: int) -> Version:
max_version = self.ZERO_VERSION
machine_urls = self._lookups.getCheckUrlsFor(machine_id)
- parse_function = self._lookups.getParseVersionUrlFor(machine_id)
- if machine_urls is not None and parse_function is not None:
+ if machine_urls is not None:
for url in machine_urls:
- version = parse_function(self.getUrlResponse(url))
+ version = self.parseVersionResponse(self.getUrlResponse(url))
if version > max_version:
max_version = version
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index ceecef61ba..4813e3ecbb 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -16,13 +16,7 @@ def getSettingsKeyForMachine(machine_id: int) -> str:
return "info/latest_checked_firmware_for_{0}".format(machine_id)
-def defaultParseVersionResponse(response: str) -> Version:
- raw_str = response.split("\n", 1)[0].rstrip()
- return Version(raw_str)
-
-
class FirmwareUpdateCheckerLookup:
- JSON_NAME_TO_VERSION_PARSE_FUNCTION = {"default": defaultParseVersionResponse}
def __init__(self, json_path) -> None:
# Open the .json file with the needed lookup-lists for each machine(/model) and retrieve "raw" json.
@@ -44,12 +38,6 @@ class FirmwareUpdateCheckerLookup:
machine_name = machine_json.get("name").lower() # Lower in case upper-case char are added to the json.
self._machine_ids.append(machine_id)
self._machine_per_name[machine_name] = machine_id
- version_parse_function = \
- self.JSON_NAME_TO_VERSION_PARSE_FUNCTION.get(machine_json.get("version_parser"))
- if version_parse_function is None:
- Logger.log("w", "No version-parse-function specified for machine {0}.".format(machine_name))
- version_parse_function = defaultParseVersionResponse # Use default instead if nothing is found.
- self._parse_version_url_per_machine[machine_id] = version_parse_function
self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see "_comment" in the .json file.
for check_url in machine_json.get("check_urls"):
self._check_urls_per_machine[machine_id].append(check_url)
diff --git a/plugins/FirmwareUpdateChecker/resources/machines.json b/plugins/FirmwareUpdateChecker/resources/machines.json
index ee072f75c3..d9eaad0abf 100644
--- a/plugins/FirmwareUpdateChecker/resources/machines.json
+++ b/plugins/FirmwareUpdateChecker/resources/machines.json
@@ -11,8 +11,7 @@
"http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
"http://software.ultimaker.com/releases/firmware/9066/stable/version.txt"
],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware",
- "version_parser": "default"
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
},
{
"id": 9511,
@@ -22,15 +21,13 @@
"http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
"http://software.ultimaker.com/releases/firmware/9511/stable/version.txt"
],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware",
- "version_parser": "default"
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
},
{
"id": 9051,
"name": "ultimaker s5",
"check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/version.txt"],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware",
- "version_parser": "default"
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
}
]
}
From 931143ceaabe02f88bd4f0eca7357ed494733c0c Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Sat, 13 Oct 2018 20:05:20 +0200
Subject: [PATCH 232/390] Added FirmwareUpdateCheckerMessage, so no variables
have to be hidden in the action of a plain Message.
---
.../FirmwareUpdateChecker.py | 11 ++++---
.../FirmwareUpdateCheckerJob.py | 19 ++----------
.../FirmwareUpdateCheckerLookup.py | 1 -
.../FirmwareUpdateCheckerMessage.py | 31 +++++++++++++++++++
4 files changed, 40 insertions(+), 22 deletions(-)
create mode 100644 plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 61604ff78b..8c0ea1bea2 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -19,6 +19,7 @@ from cura.Settings.GlobalStack import GlobalStack
from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine
+from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage
i18n_catalog = i18nCatalog("cura")
@@ -40,20 +41,22 @@ class FirmwareUpdateChecker(Extension):
# Partly initialize after creation, since we need our own path from the plugin-manager.
self._download_url = None
self._check_job = None
- self._checked_printer_names = [] # type: Set[str]
+ self._checked_printer_names = set() # type: Set[str]
self._lookups = None
QtApplication.pluginsLoaded.connect(self._onPluginsLoaded)
## Callback for the message that is spawned when there is a new version.
def _onActionTriggered(self, message, action):
- download_url = self._lookups.getRedirectUserFor(int(action))
+ if action == FirmwareUpdateCheckerMessage.STR_ACTION_DOWNLOAD:
+ machine_id = message.getMachineId()
+ download_url = self._lookups.getRedirectUserFor(machine_id)
if download_url is not None:
if QDesktopServices.openUrl(QUrl(download_url)):
Logger.log("i", "Redirected browser to {0} to show newly available firmware.".format(download_url))
else:
Logger.log("e", "Can't reach URL: {0}".format(download_url))
else:
- Logger.log("e", "Can't find URL for {0}".format(action))
+ Logger.log("e", "Can't find URL for {0}".format(machine_id))
def _onContainerAdded(self, container):
# Only take care when a new GlobalStack was added
@@ -88,7 +91,7 @@ class FirmwareUpdateChecker(Extension):
container_name = container.definition.getName()
if container_name in self._checked_printer_names:
return
- self._checked_printer_names.append(container_name)
+ self._checked_printer_names.add(container_name)
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
lookups = self._lookups,
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index a873f17d61..f39f4c8cea 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -10,9 +10,9 @@ from UM.Version import Version
import urllib.request
from urllib.error import URLError
from typing import Dict
-import codecs
from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine
+from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
@@ -99,22 +99,7 @@ class FirmwareUpdateCheckerJob(Job):
# notify the user when no new firmware version is available.
if (checked_version != "") and (checked_version != current_version):
Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE")
-
- message = Message(i18n_catalog.i18nc(
- "@info Don't translate {machine_name}, since it gets replaced by a printer name!",
- "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(
- machine_name = machine_name),
- title = i18n_catalog.i18nc(
- "@info:title The %s gets replaced with the printer name.",
- "New %s firmware available") % machine_name)
-
- message.addAction(machine_id,
- i18n_catalog.i18nc("@action:button", "How to update"),
- "[no_icon]",
- "[no_description]",
- button_style = Message.ActionButtonStyle.LINK,
- button_align = Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
-
+ message = FirmwareUpdateCheckerMessage(machine_id, machine_name)
message.actionTriggered.connect(self._callback)
message.show()
else:
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index 4813e3ecbb..ff4e9ce73d 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -6,7 +6,6 @@ import json
from typing import Callable, Dict, List, Optional
from UM.Logger import Logger
-from UM.Version import Version
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
new file mode 100644
index 0000000000..0f13796c29
--- /dev/null
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
@@ -0,0 +1,31 @@
+
+from UM.i18n import i18nCatalog
+from UM.Message import Message
+
+i18n_catalog = i18nCatalog("cura")
+
+
+# Make a separate class, since we need an extra field: The machine-id that this message is about.
+class FirmwareUpdateCheckerMessage(Message):
+ STR_ACTION_DOWNLOAD = "download"
+
+ def __init__(self, machine_id: int, machine_name: str) -> None:
+ super().__init__(i18n_catalog.i18nc(
+ "@info Don't translate {machine_name}, since it gets replaced by a printer name!",
+ "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(
+ machine_name=machine_name),
+ title=i18n_catalog.i18nc(
+ "@info:title The %s gets replaced with the printer name.",
+ "New %s firmware available") % machine_name)
+
+ self._machine_id = machine_id
+
+ self.addAction(self.STR_ACTION_DOWNLOAD,
+ i18n_catalog.i18nc("@action:button", "How to update"),
+ "[no_icon]",
+ "[no_description]",
+ button_style=Message.ActionButtonStyle.LINK,
+ button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
+
+ def getMachineId(self) -> int:
+ return self._machine_id
From 2e3abbc9044c82e5dc858f52e34d027b0cbee10c Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Sat, 13 Oct 2018 21:55:33 +0200
Subject: [PATCH 233/390] Put the firmware-update meta-data in the 'normal'
printer definitions and make the code handle that.
---
.../FirmwareUpdateChecker.py | 31 +++-------
.../FirmwareUpdateCheckerJob.py | 30 ++++++----
.../FirmwareUpdateCheckerLookup.py | 57 ++++++-------------
.../FirmwareUpdateCheckerMessage.py | 6 +-
.../resources/machines.json | 33 -----------
resources/definitions/ultimaker3.def.json | 11 +++-
.../definitions/ultimaker3_extended.def.json | 11 +++-
resources/definitions/ultimaker_s5.def.json | 7 ++-
8 files changed, 73 insertions(+), 113 deletions(-)
delete mode 100644 plugins/FirmwareUpdateChecker/resources/machines.json
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 8c0ea1bea2..415931b7ec 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -10,15 +10,12 @@ from typing import Set
from UM.Extension import Extension
from UM.Application import Application
from UM.Logger import Logger
-from UM.PluginRegistry import PluginRegistry
-from UM.Qt.QtApplication import QtApplication
from UM.i18n import i18nCatalog
from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.Settings.GlobalStack import GlobalStack
from .FirmwareUpdateCheckerJob import FirmwareUpdateCheckerJob
-from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine
from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage
i18n_catalog = i18nCatalog("cura")
@@ -38,18 +35,14 @@ class FirmwareUpdateChecker(Extension):
if Application.getInstance().getPreferences().getValue("info/automatic_update_check"):
ContainerRegistry.getInstance().containerAdded.connect(self._onContainerAdded)
- # Partly initialize after creation, since we need our own path from the plugin-manager.
- self._download_url = None
self._check_job = None
self._checked_printer_names = set() # type: Set[str]
- self._lookups = None
- QtApplication.pluginsLoaded.connect(self._onPluginsLoaded)
## Callback for the message that is spawned when there is a new version.
def _onActionTriggered(self, message, action):
if action == FirmwareUpdateCheckerMessage.STR_ACTION_DOWNLOAD:
machine_id = message.getMachineId()
- download_url = self._lookups.getRedirectUserFor(machine_id)
+ download_url = message.getDownloadUrl()
if download_url is not None:
if QDesktopServices.openUrl(QUrl(download_url)):
Logger.log("i", "Redirected browser to {0} to show newly available firmware.".format(download_url))
@@ -66,18 +59,6 @@ class FirmwareUpdateChecker(Extension):
def _onJobFinished(self, *args, **kwargs):
self._check_job = None
- def _onPluginsLoaded(self):
- if self._lookups is not None:
- return
-
- self._lookups = FirmwareUpdateCheckerLookup(os.path.join(PluginRegistry.getInstance().getPluginPath(
- "FirmwareUpdateChecker"), "resources/machines.json"))
-
- # Initialize the Preference called `latest_checked_firmware` that stores the last version
- # checked for each printer.
- for machine_id in self._lookups.getMachineIds():
- Application.getInstance().getPreferences().addPreference(getSettingsKeyForMachine(machine_id), "")
-
## Connect with software.ultimaker.com, load latest.version and check version info.
# If the version info is different from the current version, spawn a message to
# allow the user to download it.
@@ -85,16 +66,18 @@ class FirmwareUpdateChecker(Extension):
# \param silent type(boolean) Suppresses messages other than "new version found" messages.
# This is used when checking for a new firmware version at startup.
def checkFirmwareVersion(self, container = None, silent = False):
- if self._lookups is None:
- self._onPluginsLoaded()
-
container_name = container.definition.getName()
if container_name in self._checked_printer_names:
return
self._checked_printer_names.add(container_name)
+ metadata = container.definition.getMetaData().get("firmware_update_info")
+ if metadata is None:
+ Logger.log("i", "No machine with name {0} in list of firmware to check.".format(container_name))
+ return
+
self._check_job = FirmwareUpdateCheckerJob(container = container, silent = silent,
- lookups = self._lookups,
+ machine_name = container_name, metadata = metadata,
callback = self._onActionTriggered)
self._check_job.start()
self._check_job.finished.connect(self._onJobFinished)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index f39f4c8cea..2e15208336 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -9,7 +9,7 @@ from UM.Version import Version
import urllib.request
from urllib.error import URLError
-from typing import Dict
+from typing import Dict, Optional
from .FirmwareUpdateCheckerLookup import FirmwareUpdateCheckerLookup, getSettingsKeyForMachine
from .FirmwareUpdateCheckerMessage import FirmwareUpdateCheckerMessage
@@ -25,13 +25,15 @@ class FirmwareUpdateCheckerJob(Job):
ZERO_VERSION = Version(STRING_ZERO_VERSION)
EPSILON_VERSION = Version(STRING_EPSILON_VERSION)
- def __init__(self, container, silent, lookups: FirmwareUpdateCheckerLookup, callback) -> None:
+ def __init__(self, container, silent, machine_name, metadata, callback) -> None:
super().__init__()
self._container = container
self.silent = silent
self._callback = callback
- self._lookups = lookups
+ self._machine_name = machine_name
+ self._metadata = metadata
+ self._lookups = None # type:Optional[FirmwareUpdateCheckerLookup]
self._headers = {} # type:Dict[str, str] # Don't set headers yet.
def getUrlResponse(self, url: str) -> str:
@@ -50,10 +52,12 @@ class FirmwareUpdateCheckerJob(Job):
raw_str = response.split("\n", 1)[0].rstrip()
return Version(raw_str)
- def getCurrentVersionForMachine(self, machine_id: int) -> Version:
+ def getCurrentVersion(self) -> Version:
max_version = self.ZERO_VERSION
+ if self._lookups is None:
+ return max_version
- machine_urls = self._lookups.getCheckUrlsFor(machine_id)
+ machine_urls = self._lookups.getCheckUrls()
if machine_urls is not None:
for url in machine_urls:
version = self.parseVersionResponse(self.getUrlResponse(url))
@@ -61,16 +65,20 @@ class FirmwareUpdateCheckerJob(Job):
max_version = version
if max_version < self.EPSILON_VERSION:
- Logger.log("w", "MachineID {0} not handled!".format(repr(machine_id)))
+ Logger.log("w", "MachineID {0} not handled!".format(self._lookups.getMachineName()))
return max_version
def run(self):
if self._lookups is None:
- Logger.log("e", "Can not check for a new release. URL not set!")
- return
+ self._lookups = FirmwareUpdateCheckerLookup(self._machine_name, self._metadata)
try:
+ # Initialize a Preference that stores the last version checked for this printer.
+ Application.getInstance().getPreferences().addPreference(
+ getSettingsKeyForMachine(self._lookups.getMachineId()), "")
+
+ # Get headers
application_name = Application.getInstance().getApplicationName()
application_version = Application.getInstance().getVersion()
self._headers = {"User-Agent": "%s - %s" % (application_name, application_version)}
@@ -79,11 +87,11 @@ class FirmwareUpdateCheckerJob(Job):
machine_name = self._container.definition.getName()
# If it is not None, then we compare between the checked_version and the current_version
- machine_id = self._lookups.getMachineByName(machine_name.lower())
+ machine_id = self._lookups.getMachineId()
if machine_id is not None:
Logger.log("i", "You have a(n) {0} in the printer list. Let's check the firmware!".format(machine_name))
- current_version = self.getCurrentVersionForMachine(machine_id)
+ current_version = self.getCurrentVersion()
# If it is the first time the version is checked, the checked_version is ""
setting_key_str = getSettingsKeyForMachine(machine_id)
@@ -99,7 +107,7 @@ class FirmwareUpdateCheckerJob(Job):
# notify the user when no new firmware version is available.
if (checked_version != "") and (checked_version != current_version):
Logger.log("i", "SHOWING FIRMWARE UPDATE MESSAGE")
- message = FirmwareUpdateCheckerMessage(machine_id, machine_name)
+ message = FirmwareUpdateCheckerMessage(machine_id, machine_name, self._lookups.getRedirectUserUrl())
message.actionTriggered.connect(self._callback)
message.show()
else:
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
index ff4e9ce73d..a21ad3f0e5 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerLookup.py
@@ -1,11 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-import json
-
-from typing import Callable, Dict, List, Optional
-
-from UM.Logger import Logger
+from typing import List, Optional
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
@@ -17,44 +13,23 @@ def getSettingsKeyForMachine(machine_id: int) -> str:
class FirmwareUpdateCheckerLookup:
- def __init__(self, json_path) -> None:
- # Open the .json file with the needed lookup-lists for each machine(/model) and retrieve "raw" json.
- with open(json_path, "r", encoding = "utf-8") as json_file:
- machines_json = json.load(json_file).get("machines")
- if machines_json is None:
- Logger.log("e", "Missing or inaccessible: {0}".format(json_path))
- return
-
+ def __init__(self, machine_name, machine_json) -> None:
# Parse all the needed lookup-tables from the ".json" file(s) in the resources folder.
- self._machine_ids = [] # type:List[int]
- self._machine_per_name = {} # type:Dict[str, int]
- self._parse_version_url_per_machine = {} # type:Dict[int, Callable]
- self._check_urls_per_machine = {} # type:Dict[int, List[str]]
- self._redirect_user_per_machine = {} # type:Dict[int, str]
- try:
- for machine_json in machines_json:
- machine_id = machine_json.get("id")
- machine_name = machine_json.get("name").lower() # Lower in case upper-case char are added to the json.
- self._machine_ids.append(machine_id)
- self._machine_per_name[machine_name] = machine_id
- self._check_urls_per_machine[machine_id] = [] # Multiple check-urls: see "_comment" in the .json file.
- for check_url in machine_json.get("check_urls"):
- self._check_urls_per_machine[machine_id].append(check_url)
- self._redirect_user_per_machine[machine_id] = machine_json.get("update_url")
- except Exception as ex:
- Logger.log("e", "Couldn't parse firmware-update-check lookup-lists from file because {0}.".format(ex))
+ self._machine_id = machine_json.get("id")
+ self._machine_name = machine_name.lower() # Lower in-case upper-case chars are added to the original json.
+ self._check_urls = [] # type:List[str]
+ for check_url in machine_json.get("check_urls"):
+ self._check_urls.append(check_url)
+ self._redirect_user = machine_json.get("update_url")
- def getMachineIds(self) -> List[int]:
- return self._machine_ids
+ def getMachineId(self) -> Optional[int]:
+ return self._machine_id
- def getMachineByName(self, machine_name: str) -> Optional[int]:
- return self._machine_per_name.get(machine_name)
+ def getMachineName(self) -> Optional[int]:
+ return self._machine_name
- def getParseVersionUrlFor(self, machine_id: int) -> Optional[Callable]:
- return self._parse_version_url_per_machine.get(machine_id)
+ def getCheckUrls(self) -> Optional[List[str]]:
+ return self._check_urls
- def getCheckUrlsFor(self, machine_id: int) -> Optional[List[str]]:
- return self._check_urls_per_machine.get(machine_id)
-
- def getRedirectUserFor(self, machine_id: int) -> Optional[str]:
- return self._redirect_user_per_machine.get(machine_id)
+ def getRedirectUserUrl(self) -> Optional[str]:
+ return self._redirect_user
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
index 0f13796c29..d509c432b4 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
@@ -9,7 +9,7 @@ i18n_catalog = i18nCatalog("cura")
class FirmwareUpdateCheckerMessage(Message):
STR_ACTION_DOWNLOAD = "download"
- def __init__(self, machine_id: int, machine_name: str) -> None:
+ def __init__(self, machine_id: int, machine_name: str, download_url: str) -> None:
super().__init__(i18n_catalog.i18nc(
"@info Don't translate {machine_name}, since it gets replaced by a printer name!",
"New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(
@@ -19,6 +19,7 @@ class FirmwareUpdateCheckerMessage(Message):
"New %s firmware available") % machine_name)
self._machine_id = machine_id
+ self._download_url = download_url
self.addAction(self.STR_ACTION_DOWNLOAD,
i18n_catalog.i18nc("@action:button", "How to update"),
@@ -29,3 +30,6 @@ class FirmwareUpdateCheckerMessage(Message):
def getMachineId(self) -> int:
return self._machine_id
+
+ def getDownloadUrl(self) -> str:
+ return self._download_url
diff --git a/plugins/FirmwareUpdateChecker/resources/machines.json b/plugins/FirmwareUpdateChecker/resources/machines.json
deleted file mode 100644
index d9eaad0abf..0000000000
--- a/plugins/FirmwareUpdateChecker/resources/machines.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "_comment": "There are multiple 'check_urls', because sometimes an URL is about to be phased out, and it's useful to have a new 'future-proof' one at the ready.",
-
- "machines":
- [
- {
- "id": 9066,
- "name": "ultimaker 3",
- "check_urls":
- [
- "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
- "http://software.ultimaker.com/releases/firmware/9066/stable/version.txt"
- ],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
- },
- {
- "id": 9511,
- "name": "ultimaker 3 extended",
- "check_urls":
- [
- "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
- "http://software.ultimaker.com/releases/firmware/9511/stable/version.txt"
- ],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
- },
- {
- "id": 9051,
- "name": "ultimaker s5",
- "check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/version.txt"],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
- }
- ]
-}
diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json
index b1daa6b780..f5e31890f6 100644
--- a/resources/definitions/ultimaker3.def.json
+++ b/resources/definitions/ultimaker3.def.json
@@ -24,7 +24,16 @@
},
"first_start_actions": [ "DiscoverUM3Action" ],
"supported_actions": [ "DiscoverUM3Action" ],
- "supports_usb_connection": false
+ "supports_usb_connection": false,
+ "firmware_update_info": {
+ "id": 9066,
+ "check_urls":
+ [
+ "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
+ "http://software.ultimaker.com/releases/firmware/9066/stable/version.txt"
+ ],
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ }
},
diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json
index eb3cda9320..d13857e428 100644
--- a/resources/definitions/ultimaker3_extended.def.json
+++ b/resources/definitions/ultimaker3_extended.def.json
@@ -23,7 +23,16 @@
"1": "ultimaker3_extended_extruder_right"
},
"first_start_actions": [ "DiscoverUM3Action" ],
- "supported_actions": [ "DiscoverUM3Action" ]
+ "supported_actions": [ "DiscoverUM3Action" ],
+ "firmware_update_info": {
+ "id": 9511,
+ "check_urls":
+ [
+ "http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
+ "http://software.ultimaker.com/releases/firmware/9511/stable/version.txt"
+ ],
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ }
},
"overrides": {
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 2e634787af..6195933869 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -30,7 +30,12 @@
"first_start_actions": [ "DiscoverUM3Action" ],
"supported_actions": [ "DiscoverUM3Action" ],
"supports_usb_connection": false,
- "weight": -1
+ "weight": -1,
+ "firmware_update_info": {
+ "id": 9051,
+ "check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/version.txt"],
+ "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ }
},
"overrides": {
From e747219bbec338736eb8ce683e15cf1cfbb77511 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 15 Oct 2018 01:30:36 +0200
Subject: [PATCH 234/390] Let Makerbot Replicator use Replicator's X3G variant
---
resources/definitions/makerbotreplicator.def.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/resources/definitions/makerbotreplicator.def.json b/resources/definitions/makerbotreplicator.def.json
index 1770b7a979..3b02215e74 100644
--- a/resources/definitions/makerbotreplicator.def.json
+++ b/resources/definitions/makerbotreplicator.def.json
@@ -6,6 +6,7 @@
"visible": true,
"author": "Ultimaker",
"manufacturer": "MakerBot",
+ "machine_x3g_variant": "r1",
"file_formats": "application/x3g",
"platform_offset": [ 0, 0, 0],
"machine_extruder_trains":
From 02efd7a1f5a312ea4124a45025ac2dc3bdac99da Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 15 Oct 2018 13:55:47 +0200
Subject: [PATCH 235/390] Correct some printers to use 1.75mm filament
This should fix some underextrusion problems... Hmm.
Sources:
* https://alya3dp.com/pages/teknik-ozellikler
* https://www.creality3d.cn/creality-cr-10-s4-3d-printer-p00098p1.html
* https://www.creality3d.cn/creality-cr-10-s5-3d-printer-p00099p1.html
* https://3dprint.com/3643/german-repraps-neo-3d-printer-now-available-in-the-us-uk/
* https://somosmaker.com/pegasus-impresora-3d/
* http://www.3dmaker.vn/3d-printer-3dmaker-starter/?lang=en# (assuming the filaments they sell on that website are compatible)
* https://makezine.com/product-review/printrbot-play/
I could not find a source for the Deltabot, but got that information from here: https://github.com/Ultimaker/Cura/issues/4573
Contributes to issue CURA-5817.
---
resources/extruders/alya3dp_extruder_0.def.json | 2 +-
resources/extruders/creality_cr10s4_extruder_0.def.json | 2 +-
resources/extruders/creality_cr10s5_extruder_0.def.json | 2 +-
resources/extruders/deltabot_extruder_0.def.json | 2 +-
resources/extruders/grr_neo_extruder_0.def.json | 2 +-
resources/extruders/kupido_extruder_0.def.json | 2 +-
resources/extruders/makeR_pegasus_extruder_0.def.json | 2 +-
resources/extruders/maker_starter_extruder_0.def.json | 2 +-
resources/extruders/printrbot_play_heated_extruder_0.def.json | 2 +-
9 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/resources/extruders/alya3dp_extruder_0.def.json b/resources/extruders/alya3dp_extruder_0.def.json
index e34db5dfbf..3676f01ad2 100644
--- a/resources/extruders/alya3dp_extruder_0.def.json
+++ b/resources/extruders/alya3dp_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/creality_cr10s4_extruder_0.def.json b/resources/extruders/creality_cr10s4_extruder_0.def.json
index 9afe1cee35..8a40c6431f 100644
--- a/resources/extruders/creality_cr10s4_extruder_0.def.json
+++ b/resources/extruders/creality_cr10s4_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/creality_cr10s5_extruder_0.def.json b/resources/extruders/creality_cr10s5_extruder_0.def.json
index fed86eb2b5..98b701ae2e 100644
--- a/resources/extruders/creality_cr10s5_extruder_0.def.json
+++ b/resources/extruders/creality_cr10s5_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/deltabot_extruder_0.def.json b/resources/extruders/deltabot_extruder_0.def.json
index 43fce74fa5..e13d6a6ee3 100644
--- a/resources/extruders/deltabot_extruder_0.def.json
+++ b/resources/extruders/deltabot_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.5 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/grr_neo_extruder_0.def.json b/resources/extruders/grr_neo_extruder_0.def.json
index 9fe86d9eed..6d76c90796 100644
--- a/resources/extruders/grr_neo_extruder_0.def.json
+++ b/resources/extruders/grr_neo_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.5 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/kupido_extruder_0.def.json b/resources/extruders/kupido_extruder_0.def.json
index d93395e667..ef988d4fde 100644
--- a/resources/extruders/kupido_extruder_0.def.json
+++ b/resources/extruders/kupido_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/makeR_pegasus_extruder_0.def.json b/resources/extruders/makeR_pegasus_extruder_0.def.json
index 8d2a98340a..e37891abde 100644
--- a/resources/extruders/makeR_pegasus_extruder_0.def.json
+++ b/resources/extruders/makeR_pegasus_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/maker_starter_extruder_0.def.json b/resources/extruders/maker_starter_extruder_0.def.json
index 5c60e536b7..ee94250248 100644
--- a/resources/extruders/maker_starter_extruder_0.def.json
+++ b/resources/extruders/maker_starter_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
diff --git a/resources/extruders/printrbot_play_heated_extruder_0.def.json b/resources/extruders/printrbot_play_heated_extruder_0.def.json
index ba8bc5c34c..0a3eeb3d06 100644
--- a/resources/extruders/printrbot_play_heated_extruder_0.def.json
+++ b/resources/extruders/printrbot_play_heated_extruder_0.def.json
@@ -11,6 +11,6 @@
"overrides": {
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
- "material_diameter": { "default_value": 2.85 }
+ "material_diameter": { "default_value": 1.75 }
}
}
From 56a383814b78bc6dc9d7349381a4a4b23d286edc Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 15 Oct 2018 14:48:18 +0200
Subject: [PATCH 236/390] Code style: Spaces around binary operators
Contributes to issue CURA-5483.
---
.../FirmwareUpdateCheckerMessage.py | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
index d509c432b4..fd56c101a0 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py
@@ -1,3 +1,5 @@
+# Copyright (c) 2018 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
from UM.i18n import i18nCatalog
from UM.Message import Message
@@ -13,8 +15,8 @@ class FirmwareUpdateCheckerMessage(Message):
super().__init__(i18n_catalog.i18nc(
"@info Don't translate {machine_name}, since it gets replaced by a printer name!",
"New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format(
- machine_name=machine_name),
- title=i18n_catalog.i18nc(
+ machine_name = machine_name),
+ title = i18n_catalog.i18nc(
"@info:title The %s gets replaced with the printer name.",
"New %s firmware available") % machine_name)
@@ -25,8 +27,8 @@ class FirmwareUpdateCheckerMessage(Message):
i18n_catalog.i18nc("@action:button", "How to update"),
"[no_icon]",
"[no_description]",
- button_style=Message.ActionButtonStyle.LINK,
- button_align=Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
+ button_style = Message.ActionButtonStyle.LINK,
+ button_align = Message.ActionButtonStyle.BUTTON_ALIGN_LEFT)
def getMachineId(self) -> int:
return self._machine_id
From 53dc28db891f1d49d4cd6662468fb8f68c272175 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Mon, 15 Oct 2018 15:12:42 +0200
Subject: [PATCH 237/390] Change URL of firmware update page for Ultimaker 3
and S5
I just got word of a new page to read up about the firmware update. Apparently we now have to link to this one.
Contributes to issue CURA-5483.
---
plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py | 2 +-
resources/definitions/ultimaker3.def.json | 2 +-
resources/definitions/ultimaker3_extended.def.json | 2 +-
resources/definitions/ultimaker_s5.def.json | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
index 2e15208336..4c60b95824 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 Ultimaker B.V.
+# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from UM.Application import Application
diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json
index f5e31890f6..72756de2a5 100644
--- a/resources/definitions/ultimaker3.def.json
+++ b/resources/definitions/ultimaker3.def.json
@@ -32,7 +32,7 @@
"http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
"http://software.ultimaker.com/releases/firmware/9066/stable/version.txt"
],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ "update_url": "https://ultimaker.com/firmware"
}
},
diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json
index d13857e428..68f26969b7 100644
--- a/resources/definitions/ultimaker3_extended.def.json
+++ b/resources/definitions/ultimaker3_extended.def.json
@@ -31,7 +31,7 @@
"http://software.ultimaker.com/jedi/releases/latest.version?utm_source=cura&utm_medium=software&utm_campaign=resources",
"http://software.ultimaker.com/releases/firmware/9511/stable/version.txt"
],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ "update_url": "https://ultimaker.com/firmware"
}
},
diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json
index 6195933869..310765dbc3 100644
--- a/resources/definitions/ultimaker_s5.def.json
+++ b/resources/definitions/ultimaker_s5.def.json
@@ -34,7 +34,7 @@
"firmware_update_info": {
"id": 9051,
"check_urls": ["http://software.ultimaker.com/releases/firmware/9051/stable/version.txt"],
- "update_url": "https://ultimaker.com/en/resources/20500-upgrade-firmware"
+ "update_url": "https://ultimaker.com/firmware"
}
},
From 1fa7a8880be988389a59e31fedea1a98fce4cb16 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Mon, 15 Oct 2018 17:02:27 +0200
Subject: [PATCH 238/390] Clean up some QML warnings
Contributes to CL-1051
---
.../qml/ConfigurationChangeBlock.qml | 18 +++++++++++-----
.../resources/qml/PrintCoreConfiguration.qml | 2 +-
.../resources/qml/PrintJobContextMenu.qml | 15 +++++++++----
.../resources/qml/PrintJobInfoBlock.qml | 21 ++++++++++++-------
.../resources/qml/PrintJobTitle.qml | 2 +-
.../resources/qml/PrinterCard.qml | 5 ++++-
.../resources/qml/PrinterCardDetails.qml | 2 +-
.../resources/qml/PrinterCardProgressBar.qml | 10 +++++----
.../resources/qml/PrinterInfoBlock.qml | 2 +-
9 files changed, 51 insertions(+), 26 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
index 250449a763..63815b58bf 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
@@ -136,6 +136,9 @@ Item {
elide: Text.ElideRight;
font: UM.Theme.getFont("large_nonbold");
text: {
+ if (root.job === null) {
+ return "";
+ }
if (root.job.configurationChanges.length === 0) {
return "";
}
@@ -182,11 +185,13 @@ Item {
}
text: catalog.i18nc("@label", "Override");
visible: {
- var length = root.job.configurationChanges.length;
- for (var i = 0; i < length; i++) {
- var typeOfChange = root.job.configurationChanges[i].typeOfChange;
- if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
- return false;
+ if (root.job & root.job.configurationChanges) {
+ var length = root.job.configurationChanges.length;
+ for (var i = 0; i < length; i++) {
+ var typeOfChange = root.job.configurationChanges[i].typeOfChange;
+ if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
+ return false;
+ }
}
}
return true;
@@ -203,6 +208,9 @@ Item {
onYes: OutputDevice.forceSendJob(root.job.key);
standardButtons: StandardButton.Yes | StandardButton.No;
text: {
+ if (!root.job) {
+ return "";
+ }
var printJobName = formatPrintJobName(root.job.name);
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
return confirmText;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
index bede597287..e8abb8109e 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
@@ -73,7 +73,7 @@ Item {
elide: Text.ElideRight;
font: UM.Theme.getFont("default");
text: {
- if (printCoreConfiguration != undefined && printCoreConfiguration.activeMaterial != undefined) {
+ if (printCoreConfiguration && printCoreConfiguration.activeMaterial != undefined) {
return printCoreConfiguration.activeMaterial.name;
}
return "";
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index 41d28c89f1..7b956a2101 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -101,7 +101,14 @@ Item {
width: parent.width;
PrintJobContextMenuItem {
- enabled: printJob && !running ? OutputDevice.queuedPrintJobs[0].key != printJob.key : false;
+ enabled: {
+ if (printJob && !running) {
+ if (OutputDevice && OutputDevice.queuedPrintJobs[0]) {
+ return OutputDevice.queuedPrintJobs[0].key != printJob.key;
+ }
+ }
+ return false;
+ }
onClicked: {
sendToTopConfirmationDialog.visible = true;
popup.close();
@@ -169,7 +176,7 @@ Item {
icon: StandardIcon.Warning;
onYes: OutputDevice.sendJobToTop(printJob.key);
standardButtons: StandardButton.Yes | StandardButton.No;
- text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
+ text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to move %1 to the top of the queue?").arg(printJob.name) : "";
title: catalog.i18nc("@window:title", "Move print job to top");
}
@@ -179,7 +186,7 @@ Item {
icon: StandardIcon.Warning;
onYes: OutputDevice.deleteJobFromQueue(printJob.key);
standardButtons: StandardButton.Yes | StandardButton.No;
- text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
+ text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to delete %1?").arg(printJob.name) : "";
title: catalog.i18nc("@window:title", "Delete print job");
}
@@ -189,7 +196,7 @@ Item {
icon: StandardIcon.Warning;
onYes: printJob.setState("abort");
standardButtons: StandardButton.Yes | StandardButton.No;
- text: printJob ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "";
+ text: printJob && printJob.name ? catalog.i18nc("@label %1 is the name of a print job.", "Are you sure you want to abort %1?").arg(printJob.name) : "";
title: catalog.i18nc("@window:title", "Abort print");
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
index 335ee2ba47..fcdf3ba955 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobInfoBlock.qml
@@ -78,7 +78,7 @@ Item {
anchors.fill: parent;
elide: Text.ElideRight;
font: UM.Theme.getFont("default_bold");
- text: printJob ? printJob.name : ""; // Supress QML warnings
+ text: printJob && printJob.name ? printJob.name : ""; // Supress QML warnings
visible: printJob;
}
}
@@ -204,7 +204,7 @@ Item {
elide: Text.ElideRight;
font: UM.Theme.getFont("default_bold");
text: {
- if (printJob) {
+ if (printJob !== null) {
if (printJob.assignedPrinter == null) {
if (printJob.state == "error") {
return catalog.i18nc("@label", "Waiting for: Unavailable printer");
@@ -222,7 +222,7 @@ Item {
PrinterInfoBlock {
anchors.bottom: parent.bottom;
- printer: root.printJob.assignedPrinter;
+ printer: root.printJon && root.printJob.assignedPrinter;
printJob: root.printJob;
}
}
@@ -398,11 +398,13 @@ Item {
}
text: catalog.i18nc("@label", "Override");
visible: {
- var length = printJob.configurationChanges.length;
- for (var i = 0; i < length; i++) {
- var typeOfChange = printJob.configurationChanges[i].typeOfChange;
- if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
- return false;
+ if (printJob && printJob.configurationChanges) {
+ var length = printJob.configurationChanges.length;
+ for (var i = 0; i < length; i++) {
+ var typeOfChange = printJob.configurationChanges[i].typeOfChange;
+ if (typeOfChange === "material_insert" || typeOfChange === "buildplate_change") {
+ return false;
+ }
}
}
return true;
@@ -418,6 +420,9 @@ Item {
onYes: OutputDevice.forceSendJob(printJob.key);
standardButtons: StandardButton.Yes | StandardButton.No;
text: {
+ if (!root.job) {
+ return "";
+ }
var printJobName = formatPrintJobName(printJob.name);
var confirmText = catalog.i18nc("@label", "Starting a print job with an incompatible configuration could damage your 3D printer. Are you sure you want to override the configuration and print %1?").arg(printJobName);
return confirmText;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
index 9dc7dff62e..bfbddb7dce 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobTitle.qml
@@ -27,7 +27,7 @@ Column {
anchors.fill: parent;
elide: Text.ElideRight;
font: UM.Theme.getFont("default_bold");
- text: job ? job.name : "";
+ text: job && job.name ? job.name : "";
visible: job;
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index ebfe160e06..1dcf5fd3ad 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -161,12 +161,15 @@ Item {
elide: Text.ElideRight;
font: UM.Theme.getFont("default");
text: {
+ if (!printer) {
+ return "";
+ }
if (printer.state == "disabled") {
return catalog.i18nc("@label", "Not available");
} else if (printer.state == "unreachable") {
return catalog.i18nc("@label", "Unreachable");
}
- if (printer.activePrintJob != null) {
+ if (printer.activePrintJob != null && printer.activePrintJob.name) {
return printer.activePrintJob.name;
}
return catalog.i18nc("@label", "Available");
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
index 0971776cc6..35a9372713 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -60,7 +60,7 @@ Item {
PrintJobPreview {
- job: root.printer.activePrintJob;
+ job: root.printer && root.printer.activePrintJob ? root.printer.activePrintJob : null;
anchors.horizontalCenter: parent.horizontalCenter;
}
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
index 4fac99f7a2..81ad95bea9 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
@@ -8,7 +8,7 @@ import UM 1.3 as UM
ProgressBar {
property var progress: {
- if (printer.activePrintJob == null) {
+ if (!printer || printer.activePrintJob == null) {
return 0;
}
var result = printer.activePrintJob.timeElapsed / printer.activePrintJob.timeTotal;
@@ -25,11 +25,10 @@ ProgressBar {
/* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining
time from ever being less than 0. Negative durations cause strange behavior such
as displaying "-1h -1m". */
- var activeJob = printer.activePrintJob;
- return Math.max(activeJob.timeTotal - activeJob.timeElapsed, 0);
+ return Math.max(printer.activePrintJob.timeTotal - printer.activePrintJob.timeElapsed, 0);
}
property var progressText: {
- if (printer.activePrintJob == null) {
+ if (!printer.activePrintJob || !printer.activePrintJob.state ) {
return "";
}
switch (printer.activePrintJob.state) {
@@ -65,6 +64,9 @@ ProgressBar {
progress: Rectangle {
id: progressItem;
color: {
+ if (!printer.activePrintJob) {
+ return "black";
+ }
var state = printer.activePrintJob.state
var inactiveStates = [
"pausing",
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
index b054eb458f..1b20593f9a 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -41,7 +41,7 @@ Item {
}
PrinterFamilyPill {
- text: printer.type;
+ text: printer ? printer.type : "";
visible: !compatiblePills.visible && printer;
}
}
From b99bc06d1cc8a3353981cee13135da9ebb8b3e7a Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Tue, 16 Oct 2018 09:34:50 +0200
Subject: [PATCH 239/390] Clean up more errors
Contributes to CL-1051
---
.../resources/qml/PrintJobContextMenu.qml | 4 ++--
plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml | 3 +++
.../UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml | 4 ++--
.../resources/qml/PrinterCardProgressBar.qml | 6 +++---
.../UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml | 1 -
5 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index 7b956a2101..da4499adf6 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -39,8 +39,8 @@ Item {
Popup {
id: popup;
background: Item {
- height: popup.height;
- width: popup.width;
+ height: childrenRect.height;
+ width: childrenRect.width;
DropShadow {
anchors.fill: pointedRectangle;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index 1dcf5fd3ad..61009a0ec3 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -77,6 +77,9 @@ Item {
UM.RecolorImage {
anchors.centerIn: parent;
color: {
+ if (!printer) {
+ return "black";
+ }
if (printer.state == "disabled") {
return UM.Theme.getColor("monitor_tab_text_inactive");
}
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
index 35a9372713..d0aa4bf80a 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -35,7 +35,7 @@ Item {
PrinterInfoBlock {
printer: root.printer;
- printJob: root.printer.activePrintJob;
+ printJob: root.printer ? root.printer.activePrintJob : null;
}
HorizontalLine {}
@@ -45,7 +45,7 @@ Item {
width: parent.width;
PrintJobTitle {
- job: root.printer.activePrintJob;
+ job: root.printer ? root.printer.activePrintJob : null;
}
PrintJobContextMenu {
id: contextButton;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
index 81ad95bea9..d31dd09af3 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardProgressBar.qml
@@ -19,7 +19,7 @@ ProgressBar {
}
style: ProgressBarStyle {
property var remainingTime: {
- if (printer.activePrintJob == null) {
+ if (!printer || printer.activePrintJob == null) {
return 0;
}
/* Sometimes total minus elapsed is less than 0. Use Math.max() to prevent remaining
@@ -28,7 +28,7 @@ ProgressBar {
return Math.max(printer.activePrintJob.timeTotal - printer.activePrintJob.timeElapsed, 0);
}
property var progressText: {
- if (!printer.activePrintJob || !printer.activePrintJob.state ) {
+ if (printer === null ) {
return "";
}
switch (printer.activePrintJob.state) {
@@ -64,7 +64,7 @@ ProgressBar {
progress: Rectangle {
id: progressItem;
color: {
- if (!printer.activePrintJob) {
+ if (! printer || !printer.activePrintJob) {
return "black";
}
var state = printer.activePrintJob.state
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
index 1b20593f9a..92a8f1dcb3 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterInfoBlock.qml
@@ -24,7 +24,6 @@ Item {
anchors {
left: parent.left;
right: parent.right;
-
}
height: childrenRect.height;
spacing: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
From 6eb8b754903f3fe1db5baa55ad90305fda94de38 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Tue, 16 Oct 2018 11:31:33 +0200
Subject: [PATCH 240/390] Update typing and fixed the bug it exposes.
---
cura/Settings/SettingInheritanceManager.py | 61 ++++++++++++++--------
1 file changed, 38 insertions(+), 23 deletions(-)
diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py
index 9cd24558b7..12b541c3d8 100644
--- a/cura/Settings/SettingInheritanceManager.py
+++ b/cura/Settings/SettingInheritanceManager.py
@@ -1,6 +1,6 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import List
+from typing import List, Optional, TYPE_CHECKING
from PyQt5.QtCore import QObject, QTimer, pyqtProperty, pyqtSignal
from UM.FlameProfiler import pyqtSlot
@@ -20,13 +20,18 @@ from UM.Settings.SettingInstance import InstanceState
from cura.Settings.ExtruderManager import ExtruderManager
+if TYPE_CHECKING:
+ from cura.Settings.ExtruderStack import ExtruderStack
+ from UM.Settings.SettingDefinition import SettingDefinition
+
+
class SettingInheritanceManager(QObject):
- def __init__(self, parent = None):
+ def __init__(self, parent = None) -> None:
super().__init__(parent)
Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged)
- self._global_container_stack = None
- self._settings_with_inheritance_warning = []
- self._active_container_stack = None
+ self._global_container_stack = None # type: Optional[ContainerStack]
+ self._settings_with_inheritance_warning = [] # type: List[str]
+ self._active_container_stack = None # type: Optional[ExtruderStack]
self._onGlobalContainerChanged()
ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderChanged)
@@ -41,7 +46,9 @@ class SettingInheritanceManager(QObject):
## Get the keys of all children settings with an override.
@pyqtSlot(str, result = "QStringList")
- def getChildrenKeysWithOverride(self, key):
+ def getChildrenKeysWithOverride(self, key: str) -> List[str]:
+ if self._global_container_stack is None:
+ return []
definitions = self._global_container_stack.definition.findDefinitions(key=key)
if not definitions:
Logger.log("w", "Could not find definition for key [%s]", key)
@@ -53,9 +60,11 @@ class SettingInheritanceManager(QObject):
return result
@pyqtSlot(str, str, result = "QStringList")
- def getOverridesForExtruder(self, key, extruder_index):
- result = []
+ def getOverridesForExtruder(self, key: str, extruder_index: str) -> List[str]:
+ if self._global_container_stack is None:
+ return []
+ result = [] # type: List[str]
extruder_stack = ExtruderManager.getInstance().getExtruderStack(extruder_index)
if not extruder_stack:
Logger.log("w", "Unable to find extruder for current machine with index %s", extruder_index)
@@ -73,16 +82,16 @@ class SettingInheritanceManager(QObject):
return result
@pyqtSlot(str)
- def manualRemoveOverride(self, key):
+ def manualRemoveOverride(self, key: str) -> None:
if key in self._settings_with_inheritance_warning:
self._settings_with_inheritance_warning.remove(key)
self.settingsWithIntheritanceChanged.emit()
@pyqtSlot()
- def forceUpdate(self):
+ def forceUpdate(self) -> None:
self._update()
- def _onActiveExtruderChanged(self):
+ def _onActiveExtruderChanged(self) -> None:
new_active_stack = ExtruderManager.getInstance().getActiveExtruderStack()
if not new_active_stack:
self._active_container_stack = None
@@ -94,13 +103,14 @@ class SettingInheritanceManager(QObject):
self._active_container_stack.containersChanged.disconnect(self._onContainersChanged)
self._active_container_stack = new_active_stack
- self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
- self._active_container_stack.containersChanged.connect(self._onContainersChanged)
+ if self._active_container_stack is not None:
+ self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
+ self._active_container_stack.containersChanged.connect(self._onContainersChanged)
self._update() # Ensure that the settings_with_inheritance_warning list is populated.
- def _onPropertyChanged(self, key, property_name):
+ def _onPropertyChanged(self, key: str, property_name: str) -> None:
if (property_name == "value" or property_name == "enabled") and self._global_container_stack:
- definitions = self._global_container_stack.definition.findDefinitions(key = key)
+ definitions = self._global_container_stack.definition.findDefinitions(key = key) # type: List["SettingDefinition"]
if not definitions:
return
@@ -139,7 +149,7 @@ class SettingInheritanceManager(QObject):
if settings_with_inheritance_warning_changed:
self.settingsWithIntheritanceChanged.emit()
- def _recursiveCheck(self, definition):
+ def _recursiveCheck(self, definition: "SettingDefinition") -> bool:
for child in definition.children:
if child.key in self._settings_with_inheritance_warning:
return True
@@ -149,7 +159,7 @@ class SettingInheritanceManager(QObject):
return False
@pyqtProperty("QVariantList", notify = settingsWithIntheritanceChanged)
- def settingsWithInheritanceWarning(self):
+ def settingsWithInheritanceWarning(self) -> List[str]:
return self._settings_with_inheritance_warning
## Check if a setting has an inheritance function that is overwritten
@@ -157,9 +167,14 @@ class SettingInheritanceManager(QObject):
has_setting_function = False
if not stack:
stack = self._active_container_stack
- if not stack: #No active container stack yet!
+ if not stack: # No active container stack yet!
return False
- containers = [] # type: List[ContainerInterface]
+
+ if self._active_container_stack is None:
+ return False
+ all_keys = self._active_container_stack.getAllKeys()
+
+ containers = [] # type: List[ContainerInterface]
## Check if the setting has a user state. If not, it is never overwritten.
has_user_state = stack.getProperty(key, "state") == InstanceState.User
@@ -190,8 +205,8 @@ class SettingInheritanceManager(QObject):
has_setting_function = isinstance(value, SettingFunction)
if has_setting_function:
for setting_key in value.getUsedSettingKeys():
- if setting_key in self._active_container_stack.getAllKeys():
- break # We found an actual setting. So has_setting_function can remain true
+ if setting_key in all_keys:
+ break # We found an actual setting. So has_setting_function can remain true
else:
# All of the setting_keys turned out to not be setting keys at all!
# This can happen due enum keys also being marked as settings.
@@ -205,7 +220,7 @@ class SettingInheritanceManager(QObject):
break # There is a setting function somewhere, stop looking deeper.
return has_setting_function and has_non_function_value
- def _update(self):
+ def _update(self) -> None:
self._settings_with_inheritance_warning = [] # Reset previous data.
# Make sure that the GlobalStack is not None. sometimes the globalContainerChanged signal gets here late.
@@ -226,7 +241,7 @@ class SettingInheritanceManager(QObject):
# Notify others that things have changed.
self.settingsWithIntheritanceChanged.emit()
- def _onGlobalContainerChanged(self):
+ def _onGlobalContainerChanged(self) -> None:
if self._global_container_stack:
self._global_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
self._global_container_stack.containersChanged.disconnect(self._onContainersChanged)
From 4a0808378b9a224cde179b95c8326343b33a5202 Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Tue, 16 Oct 2018 13:23:35 +0200
Subject: [PATCH 241/390] Allow whitespaces in the job name.
Fixes #4530.
---
resources/qml/JobSpecs.qml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/qml/JobSpecs.qml b/resources/qml/JobSpecs.qml
index 31ca84d66e..1a5b604886 100644
--- a/resources/qml/JobSpecs.qml
+++ b/resources/qml/JobSpecs.qml
@@ -86,7 +86,7 @@ Item {
printJobTextfield.focus = false;
}
validator: RegExpValidator {
- regExp: /^[^\\ \/ \*\?\|\[\]]*$/
+ regExp: /^[^\\\/\*\?\|\[\]]*$/
}
style: TextFieldStyle{
textColor: UM.Theme.getColor("text_scene");
From 25000e8a6b9232bebdb4565463dcd41e347aeb4c Mon Sep 17 00:00:00 2001
From: Remco Burema
Date: Tue, 16 Oct 2018 13:05:15 +0200
Subject: [PATCH 242/390] Fix typo's. [CURA-5760] Feature support brim.
---
resources/definitions/fdmprinter.def.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json
index 22491417ab..138e1adcc5 100644
--- a/resources/definitions/fdmprinter.def.json
+++ b/resources/definitions/fdmprinter.def.json
@@ -4613,7 +4613,7 @@
"brim_replaces_support":
{
"label": "Brim Replaces Support",
- "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions fo the first layer of supprot by brim regions.",
+ "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions.",
"type": "bool",
"default_value": true,
"enabled": "resolveOrValue('adhesion_type') == 'brim' and support_enable",
From 20fa7f4dd8c55c32547c5157f5d7b9f94ea16af9 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Tue, 16 Oct 2018 16:47:05 +0200
Subject: [PATCH 243/390] Display retractions lines for the loaded Gcode files
CURA-5769
---
plugins/GCodeReader/FlavorParser.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py
index eb19853748..1dc20d5602 100644
--- a/plugins/GCodeReader/FlavorParser.py
+++ b/plugins/GCodeReader/FlavorParser.py
@@ -44,6 +44,7 @@ class FlavorParser:
self._extruder_offsets = {} # type: Dict[int, List[float]] # Offsets for multi extruders. key is index, value is [x-offset, y-offset]
self._current_layer_thickness = 0.2 # default
self._filament_diameter = 2.85 # default
+ self._previous_extrusion_value = 0 # keep track of the filament retractions
CuraApplication.getInstance().getPreferences().addPreference("gcodereader/show_caution", True)
@@ -182,6 +183,7 @@ class FlavorParser:
new_extrusion_value = params.e if self._is_absolute_extrusion else e[self._extruder_number] + params.e
if new_extrusion_value > e[self._extruder_number]:
path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], self._layer_type]) # extrusion
+ self._previous_extrusion_value = new_extrusion_value
else:
path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) # retraction
e[self._extruder_number] = new_extrusion_value
@@ -191,6 +193,12 @@ class FlavorParser:
if z > self._previous_z and (z - self._previous_z < 1.5):
self._current_layer_thickness = z - self._previous_z # allow a tiny overlap
self._previous_z = z
+ elif self._previous_extrusion_value > e[self._extruder_number]:
+ path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType])
+
+ # This case only for initial start, for the first coordinate in GCode
+ elif e[self._extruder_number] == 0 and self._previous_extrusion_value == 0:
+ path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType])
else:
path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveCombingType])
return self._position(x, y, z, f, e)
@@ -235,6 +243,7 @@ class FlavorParser:
position.e)
def processGCode(self, G: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position:
+ self.previous_extrusion_value = 0
func = getattr(self, "_gCode%s" % G, None)
line = line.split(";", 1)[0] # Remove comments (if any)
if func is not None:
From a7be605b9d3c1cd52bb7323373237f7c7554411d Mon Sep 17 00:00:00 2001
From: alekseisasin
Date: Wed, 17 Oct 2018 09:50:22 +0200
Subject: [PATCH 244/390] Typing error in CI CURA-5769
---
plugins/GCodeReader/FlavorParser.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py
index 1dc20d5602..9ba1deb410 100644
--- a/plugins/GCodeReader/FlavorParser.py
+++ b/plugins/GCodeReader/FlavorParser.py
@@ -44,7 +44,7 @@ class FlavorParser:
self._extruder_offsets = {} # type: Dict[int, List[float]] # Offsets for multi extruders. key is index, value is [x-offset, y-offset]
self._current_layer_thickness = 0.2 # default
self._filament_diameter = 2.85 # default
- self._previous_extrusion_value = 0 # keep track of the filament retractions
+ self._previous_extrusion_value = 0.0 # keep track of the filament retractions
CuraApplication.getInstance().getPreferences().addPreference("gcodereader/show_caution", True)
@@ -243,7 +243,7 @@ class FlavorParser:
position.e)
def processGCode(self, G: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position:
- self.previous_extrusion_value = 0
+ self._previous_extrusion_value = 0.0
func = getattr(self, "_gCode%s" % G, None)
line = line.split(";", 1)[0] # Remove comments (if any)
if func is not None:
From d086e6fa86ce5f4ad32207a30bfa26fbdf55d8ca Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 10:47:34 +0200
Subject: [PATCH 245/390] Fix review comments
CURA-5734
---
.../Models/SettingVisibilityPresetsModel.py | 20 +++++++++----------
cura/Settings/SettingVisibilityPreset.py | 9 ++++++---
.../Menus/SettingVisibilityPresetsMenu.qml | 4 ++--
.../Settings/TestSettingVisibilityPresets.py | 3 +--
4 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index d9bf105c0b..2702001d8a 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -51,7 +51,7 @@ class SettingVisibilityPresetsModel(QObject):
def getVisibilityPresetById(self, item_id: str) -> Optional[SettingVisibilityPreset]:
result = None
for item in self._items:
- if item.id == item_id:
+ if item.presetId == item_id:
result = item
break
return result
@@ -60,7 +60,7 @@ class SettingVisibilityPresetsModel(QObject):
from cura.CuraApplication import CuraApplication
items = [] # type: List[SettingVisibilityPreset]
- custom_preset = SettingVisibilityPreset(id = "custom", name = "Custom selection", weight = -100)
+ custom_preset = SettingVisibilityPreset(preset_id="custom", name ="Custom selection", weight = -100)
items.append(custom_preset)
for file_path in Resources.getAllResourcesOfType(CuraApplication.ResourceTypes.SettingVisibilityPreset):
setting_visibility_preset = SettingVisibilityPreset()
@@ -72,7 +72,7 @@ class SettingVisibilityPresetsModel(QObject):
items.append(setting_visibility_preset)
# Sort them on weight (and if that fails, use ID)
- items.sort(key = lambda k: (int(k.weight), k.id))
+ items.sort(key = lambda k: (int(k.weight), k.presetId))
self.setItems(items)
@@ -87,7 +87,7 @@ class SettingVisibilityPresetsModel(QObject):
@pyqtSlot(str)
def setActivePreset(self, preset_id: str) -> None:
- if preset_id == self._active_preset_item.id:
+ if preset_id == self._active_preset_item.presetId:
Logger.log("d", "Same setting visibility preset [%s] selected, do nothing.", preset_id)
return
@@ -96,7 +96,7 @@ class SettingVisibilityPresetsModel(QObject):
Logger.log("w", "Tried to set active preset to unknown id [%s]", preset_id)
return
- need_to_save_to_custom = self._active_preset_item.id == "custom" and preset_id != "custom"
+ need_to_save_to_custom = self._active_preset_item.presetId == "custom" and preset_id != "custom"
if need_to_save_to_custom:
# Save the current visibility settings to custom
current_visibility_string = self._preferences.getValue("general/visible_settings")
@@ -117,7 +117,7 @@ class SettingVisibilityPresetsModel(QObject):
@pyqtProperty(str, notify = activePresetChanged)
def activePreset(self) -> str:
- return self._active_preset_item.id
+ return self._active_preset_item.presetId
def _onPreferencesChanged(self, name: str) -> None:
if name != "general/visible_settings":
@@ -131,7 +131,7 @@ class SettingVisibilityPresetsModel(QObject):
visibility_set = set(visibility_string.split(";"))
matching_preset_item = None
for item in self._items:
- if item.id == "custom":
+ if item.presetId == "custom":
continue
if set(item.settings) == visibility_set:
matching_preset_item = item
@@ -140,7 +140,7 @@ class SettingVisibilityPresetsModel(QObject):
item_to_set = self._active_preset_item
if matching_preset_item is None:
# The new visibility setup is "custom" should be custom
- if self._active_preset_item.id == "custom":
+ if self._active_preset_item.presetId == "custom":
# We are already in custom, just save the settings
self._preferences.setValue("cura/custom_visible_settings", visibility_string)
else:
@@ -149,7 +149,7 @@ class SettingVisibilityPresetsModel(QObject):
else:
item_to_set = matching_preset_item
- if self._active_preset_item is None or self._active_preset_item.id != item_to_set.id:
+ if self._active_preset_item is None or self._active_preset_item.presetId != item_to_set.presetId:
self._active_preset_item = item_to_set
- self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item.id)
+ self._preferences.setValue("cura/active_setting_visibility_preset", self._active_preset_item.presetId)
self.activePresetChanged.emit()
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
index 6e75a5a208..78807ea2fb 100644
--- a/cura/Settings/SettingVisibilityPreset.py
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -15,10 +15,10 @@ class SettingVisibilityPreset(QObject):
onWeightChanged = pyqtSignal()
onIdChanged = pyqtSignal()
- def __init__(self, id: str = "", name: str = "", weight: int = 0, parent = None) -> None:
+ def __init__(self, preset_id: str = "", name: str = "", weight: int = 0, parent = None) -> None:
super().__init__(parent)
self._settings = [] # type: List[str]
- self._id = id
+ self._id = preset_id
self._weight = weight
self._name = name
@@ -27,7 +27,7 @@ class SettingVisibilityPreset(QObject):
return self._settings
@pyqtProperty(str, notify = onIdChanged)
- def id(self) -> str:
+ def presetId(self) -> str:
return self._id
@pyqtProperty(int, notify = onWeightChanged)
@@ -58,6 +58,9 @@ class SettingVisibilityPreset(QObject):
self._settings = list(set(settings)) # filter out non unique
self.onSettingsChanged.emit()
+ # Load a preset from file. We expect a file that can be parsed by means of the config parser.
+ # The sections indicate the categories and the parameters placed in it (which don't need values) are the settings
+ # that should be considered visible.
def loadFromFile(self, file_path: str) -> None:
mime_type = MimeTypeDatabase.getMimeTypeForFile(file_path)
diff --git a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
index fecabfa860..8116b6def1 100644
--- a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
+++ b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml
@@ -24,11 +24,11 @@ Menu
{
text: modelData.name
checkable: true
- checked: modelData.id == settingVisibilityPresetsModel.activePreset
+ checked: modelData.presetId == settingVisibilityPresetsModel.activePreset
exclusiveGroup: group
onTriggered:
{
- settingVisibilityPresetsModel.setActivePreset(modelData.id);
+ settingVisibilityPresetsModel.setActivePreset(modelData.presetId);
}
}
diff --git a/tests/Settings/TestSettingVisibilityPresets.py b/tests/Settings/TestSettingVisibilityPresets.py
index 1209437d25..48e8fc76cc 100644
--- a/tests/Settings/TestSettingVisibilityPresets.py
+++ b/tests/Settings/TestSettingVisibilityPresets.py
@@ -1,6 +1,5 @@
from unittest.mock import MagicMock
-from UM.Preferences import Preferences
import os.path
from UM.Preferences import Preferences
@@ -9,7 +8,7 @@ from cura.CuraApplication import CuraApplication
from cura.Machines.Models.SettingVisibilityPresetsModel import SettingVisibilityPresetsModel
from cura.Settings.SettingVisibilityPreset import SettingVisibilityPreset
-setting_visibility_preset_test_settings = set(["test", "zomg", "derp", "yay", "whoo"])
+setting_visibility_preset_test_settings = {"test", "zomg", "derp", "yay", "whoo"}
Resources.addSearchPath(os.path.abspath(os.path.join(os.path.join(os.path.dirname(__file__)), "../..", "resources")))
Resources.addStorageType(CuraApplication.ResourceTypes.SettingVisibilityPreset, "setting_visibility")
From e9e95b85e74ed4c01f9b94955ef560adff6e33d4 Mon Sep 17 00:00:00 2001
From: Diego Prado Gesto
Date: Wed, 17 Oct 2018 10:51:28 +0200
Subject: [PATCH 246/390] Remove support_roof_enable to True in Tevo Black
Widow quality profiles, since the support interface is already enabled.
Fixes #4587.
---
resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg | 1 -
resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg | 1 -
.../quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg | 1 -
3 files changed, 3 deletions(-)
diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg
index b059b3c65f..be83533e0b 100644
--- a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg
+++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg
@@ -25,7 +25,6 @@ support_angle = 60
support_enable = True
support_interface_enable = True
support_pattern = triangles
-support_roof_enable = True
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.7
diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg
index 6a6c605c00..5ca8a6e4ef 100644
--- a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg
+++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg
@@ -25,7 +25,6 @@ support_angle = 60
support_enable = True
support_interface_enable = True
support_pattern = triangles
-support_roof_enable = True
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.7
diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg
index 7cba03853f..f542952fab 100644
--- a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg
+++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg
@@ -25,7 +25,6 @@ support_angle = 60
support_enable = True
support_interface_enable = True
support_pattern = triangles
-support_roof_enable = True
support_type = everywhere
support_use_towers = False
support_xy_distance = 0.7
From a58c63bbb8a031e0ea384a85093805fd889b73a2 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 10:51:47 +0200
Subject: [PATCH 247/390] Minor fixes for visibility preset tests
CURA-5734
---
tests/Settings/TestSettingVisibilityPresets.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tests/Settings/TestSettingVisibilityPresets.py b/tests/Settings/TestSettingVisibilityPresets.py
index 48e8fc76cc..b82aa62ea7 100644
--- a/tests/Settings/TestSettingVisibilityPresets.py
+++ b/tests/Settings/TestSettingVisibilityPresets.py
@@ -10,11 +10,11 @@ from cura.Settings.SettingVisibilityPreset import SettingVisibilityPreset
setting_visibility_preset_test_settings = {"test", "zomg", "derp", "yay", "whoo"}
-Resources.addSearchPath(os.path.abspath(os.path.join(os.path.join(os.path.dirname(__file__)), "../..", "resources")))
+Resources.addSearchPath(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "resources")))
Resources.addStorageType(CuraApplication.ResourceTypes.SettingVisibilityPreset, "setting_visibility")
-def test_settingVisibilityPreset():
+def test_createVisibilityPresetFromLocalFile():
# Simple creation test. This is seperated from the visibilityFromPrevious, since we can't check for the contents
# of the other profiles, since they might change over time.
visibility_preset = SettingVisibilityPreset()
From 6555f4d4f3599c9aaa806db77f57f8921c93d4d7 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 13:31:03 +0200
Subject: [PATCH 248/390] Add typing
Because of boyscouting. CURA-5814
---
cura/PrintInformation.py | 103 ++++++++++++++++++++++-----------------
1 file changed, 57 insertions(+), 46 deletions(-)
diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py
index 85cf6651fa..9cbe46ebb1 100644
--- a/cura/PrintInformation.py
+++ b/cura/PrintInformation.py
@@ -6,7 +6,7 @@ import math
import os
import unicodedata
import re # To create abbreviations for printer names.
-from typing import Dict
+from typing import Dict, List, Optional
from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot
@@ -16,6 +16,12 @@ from UM.Scene.SceneNode import SceneNode
from UM.i18n import i18nCatalog
from UM.MimeTypeDatabase import MimeTypeDatabase
+
+from typing import TYPE_CHECKING
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+
catalog = i18nCatalog("cura")
@@ -47,24 +53,26 @@ class PrintInformation(QObject):
ActiveMachineChanged = 3
Other = 4
- def __init__(self, application, parent = None):
+ UNTITLED_JOB_NAME = "Untitled"
+
+ def __init__(self, application: "CuraApplication", parent = None) -> None:
super().__init__(parent)
self._application = application
- self.UNTITLED_JOB_NAME = "Untitled"
-
self.initializeCuraMessagePrintTimeProperties()
- self._material_lengths = {} # indexed by build plate number
- self._material_weights = {}
- self._material_costs = {}
- self._material_names = {}
+ # Indexed by build plate number
+ self._material_lengths = {} # type: Dict[int, List[float]]
+ self._material_weights = {} # type: Dict[int, List[float]]
+ self._material_costs = {} # type: Dict[int, List[float]]
+ self._material_names = {} # type: Dict[int, List[str]]
self._pre_sliced = False
self._backend = self._application.getBackend()
if self._backend:
self._backend.printDurationMessage.connect(self._onPrintDurationMessage)
+
self._application.getController().getScene().sceneChanged.connect(self._onSceneChanged)
self._is_user_specified_job_name = False
@@ -76,25 +84,23 @@ class PrintInformation(QObject):
self._multi_build_plate_model = self._application.getMultiBuildPlateModel()
- ss = self._multi_build_plate_model.maxBuildPlate
-
self._application.globalContainerStackChanged.connect(self._updateJobName)
self._application.globalContainerStackChanged.connect(self.setToZeroPrintInformation)
self._application.fileLoaded.connect(self.setBaseName)
self._application.workspaceLoaded.connect(self.setProjectName)
- self._multi_build_plate_model.activeBuildPlateChanged.connect(self._onActiveBuildPlateChanged)
-
+ self._application.getMachineManager().rootMaterialChanged.connect(self._onActiveMaterialsChanged)
self._application.getInstance().getPreferences().preferenceChanged.connect(self._onPreferencesChanged)
- self._application.getMachineManager().rootMaterialChanged.connect(self._onActiveMaterialsChanged)
+ self._multi_build_plate_model.activeBuildPlateChanged.connect(self._onActiveBuildPlateChanged)
+
self._onActiveMaterialsChanged()
- self._material_amounts = []
+ self._material_amounts = [] # type: List[float]
# Crate cura message translations and using translation keys initialize empty time Duration object for total time
# and time for each feature
- def initializeCuraMessagePrintTimeProperties(self):
- self._current_print_time = {} # Duration(None, self)
+ def initializeCuraMessagePrintTimeProperties(self) -> None:
+ self._current_print_time = {} # type: Dict[int, Duration]
self._print_time_message_translations = {
"inset_0": catalog.i18nc("@tooltip", "Outer Wall"),
@@ -110,15 +116,15 @@ class PrintInformation(QObject):
"none": catalog.i18nc("@tooltip", "Other")
}
- self._print_time_message_values = {}
+ self._print_time_message_values = {} # type: Dict[int, Dict[str, Duration]]
- def _initPrintTimeMessageValues(self, build_plate_number):
+ def _initPrintTimeMessageValues(self, build_plate_number: int) -> None:
# Full fill message values using keys from _print_time_message_translations
self._print_time_message_values[build_plate_number] = {}
for key in self._print_time_message_translations.keys():
self._print_time_message_values[build_plate_number][key] = Duration(None, self)
- def _initVariablesWithBuildPlate(self, build_plate_number):
+ def _initVariablesWithBuildPlate(self, build_plate_number: int) -> None:
if build_plate_number not in self._print_time_message_values:
self._initPrintTimeMessageValues(build_plate_number)
if self._active_build_plate not in self._material_lengths:
@@ -130,23 +136,24 @@ class PrintInformation(QObject):
if self._active_build_plate not in self._material_names:
self._material_names[self._active_build_plate] = []
if self._active_build_plate not in self._current_print_time:
- self._current_print_time[self._active_build_plate] = Duration(None, self)
+ self._current_print_time[self._active_build_plate] = Duration(parent = self)
currentPrintTimeChanged = pyqtSignal()
preSlicedChanged = pyqtSignal()
@pyqtProperty(bool, notify=preSlicedChanged)
- def preSliced(self):
+ def preSliced(self) -> bool:
return self._pre_sliced
- def setPreSliced(self, pre_sliced):
- self._pre_sliced = pre_sliced
- self._updateJobName()
- self.preSlicedChanged.emit()
+ def setPreSliced(self, pre_sliced: bool) -> None:
+ if self._pre_sliced != pre_sliced:
+ self._pre_sliced = pre_sliced
+ self._updateJobName()
+ self.preSlicedChanged.emit()
@pyqtProperty(Duration, notify = currentPrintTimeChanged)
- def currentPrintTime(self):
+ def currentPrintTime(self) -> Duration:
return self._current_print_time[self._active_build_plate]
materialLengthsChanged = pyqtSignal()
@@ -176,33 +183,37 @@ class PrintInformation(QObject):
def printTimes(self):
return self._print_time_message_values[self._active_build_plate]
- def _onPrintDurationMessage(self, build_plate_number, print_time: Dict[str, int], material_amounts: list):
+ def _onPrintDurationMessage(self, build_plate_number: int, print_time: Dict[str, int], material_amounts: List[float]) -> None:
self._updateTotalPrintTimePerFeature(build_plate_number, print_time)
self.currentPrintTimeChanged.emit()
self._material_amounts = material_amounts
self._calculateInformation(build_plate_number)
- def _updateTotalPrintTimePerFeature(self, build_plate_number, print_time: Dict[str, int]):
+ def _updateTotalPrintTimePerFeature(self, build_plate_number: int, print_times: Dict[str, int]) -> None:
total_estimated_time = 0
if build_plate_number not in self._print_time_message_values:
self._initPrintTimeMessageValues(build_plate_number)
- for feature, time in print_time.items():
+ for feature, time in print_times.items():
+ if feature not in self._print_time_message_values[build_plate_number]:
+ self._print_time_message_values[build_plate_number][feature] = Duration(parent=self)
+ duration = self._print_time_message_values[build_plate_number][feature]
+
if time != time: # Check for NaN. Engine can sometimes give us weird values.
- self._print_time_message_values[build_plate_number].get(feature).setDuration(0)
+ duration.setDuration(0)
Logger.log("w", "Received NaN for print duration message")
continue
total_estimated_time += time
- self._print_time_message_values[build_plate_number].get(feature).setDuration(time)
+ duration.setDuration(time)
if build_plate_number not in self._current_print_time:
self._current_print_time[build_plate_number] = Duration(None, self)
self._current_print_time[build_plate_number].setDuration(total_estimated_time)
- def _calculateInformation(self, build_plate_number):
+ def _calculateInformation(self, build_plate_number: int) -> None:
global_stack = self._application.getGlobalContainerStack()
if global_stack is None:
return
@@ -227,7 +238,7 @@ class PrintInformation(QObject):
radius = extruder_stack.getProperty("material_diameter", "value") / 2
weight = float(amount) * float(density) / 1000
- cost = 0
+ cost = 0.
material_name = catalog.i18nc("@label unknown material", "Unknown")
if material:
material_guid = material.getMetaDataEntry("GUID")
@@ -258,14 +269,14 @@ class PrintInformation(QObject):
self.materialCostsChanged.emit()
self.materialNamesChanged.emit()
- def _onPreferencesChanged(self, preference):
+ def _onPreferencesChanged(self, preference: str) -> None:
if preference != "cura/material_settings":
return
for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1):
self._calculateInformation(build_plate_number)
- def _onActiveBuildPlateChanged(self):
+ def _onActiveBuildPlateChanged(self) -> None:
new_active_build_plate = self._multi_build_plate_model.activeBuildPlate
if new_active_build_plate != self._active_build_plate:
self._active_build_plate = new_active_build_plate
@@ -279,14 +290,14 @@ class PrintInformation(QObject):
self.materialNamesChanged.emit()
self.currentPrintTimeChanged.emit()
- def _onActiveMaterialsChanged(self, *args, **kwargs):
+ def _onActiveMaterialsChanged(self, *args, **kwargs) -> None:
for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1):
self._calculateInformation(build_plate_number)
# Manual override of job name should also set the base name so that when the printer prefix is updated, it the
# prefix can be added to the manually added name, not the old base name
@pyqtSlot(str, bool)
- def setJobName(self, name, is_user_specified_job_name = False):
+ def setJobName(self, name: str, is_user_specified_job_name = False) -> None:
self._is_user_specified_job_name = is_user_specified_job_name
self._job_name = name
self._base_name = name.replace(self._abbr_machine + "_", "")
@@ -300,7 +311,7 @@ class PrintInformation(QObject):
def jobName(self):
return self._job_name
- def _updateJobName(self):
+ def _updateJobName(self) -> None:
if self._base_name == "":
self._job_name = self.UNTITLED_JOB_NAME
self._is_user_specified_job_name = False
@@ -335,12 +346,12 @@ class PrintInformation(QObject):
self.jobNameChanged.emit()
@pyqtSlot(str)
- def setProjectName(self, name):
+ def setProjectName(self, name: str) -> None:
self.setBaseName(name, is_project_file = True)
baseNameChanged = pyqtSignal()
- def setBaseName(self, base_name: str, is_project_file: bool = False):
+ def setBaseName(self, base_name: str, is_project_file: bool = False) -> None:
self._is_user_specified_job_name = False
# Ensure that we don't use entire path but only filename
@@ -384,7 +395,7 @@ class PrintInformation(QObject):
## Created an acronym-like abbreviated machine name from the currently
# active machine name.
# Called each time the global stack is switched.
- def _defineAbbreviatedMachineName(self):
+ def _defineAbbreviatedMachineName(self) -> None:
global_container_stack = self._application.getGlobalContainerStack()
if not global_container_stack:
self._abbr_machine = ""
@@ -408,8 +419,8 @@ class PrintInformation(QObject):
self._abbr_machine = abbr_machine
## Utility method that strips accents from characters (eg: â -> a)
- def _stripAccents(self, str):
- return ''.join(char for char in unicodedata.normalize('NFD', str) if unicodedata.category(char) != 'Mn')
+ def _stripAccents(self, to_strip: str) -> str:
+ return ''.join(char for char in unicodedata.normalize('NFD', to_strip) if unicodedata.category(char) != 'Mn')
@pyqtSlot(result = "QVariantMap")
def getFeaturePrintTimes(self):
@@ -424,7 +435,7 @@ class PrintInformation(QObject):
return result
# Simulate message with zero time duration
- def setToZeroPrintInformation(self, build_plate = None):
+ def setToZeroPrintInformation(self, build_plate: Optional[int] = None) -> None:
if build_plate is None:
build_plate = self._active_build_plate
@@ -434,12 +445,12 @@ class PrintInformation(QObject):
self._print_time_message_values[build_plate] = {}
for key in self._print_time_message_values[build_plate].keys():
temp_message[key] = 0
- temp_material_amounts = [0]
+ temp_material_amounts = [0.]
self._onPrintDurationMessage(build_plate, temp_message, temp_material_amounts)
## Listen to scene changes to check if we need to reset the print information
- def _onSceneChanged(self, scene_node):
+ def _onSceneChanged(self, scene_node: SceneNode) -> None:
# Ignore any changes that are not related to sliceable objects
if not isinstance(scene_node, SceneNode)\
or not scene_node.callDecoration("isSliceable")\
From 3fd9d35ea4e7067c50215d02ad9711ceb814c565 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 13:31:58 +0200
Subject: [PATCH 249/390] Removed outdated documentation
CURA-5814
---
cura/PrintInformation.py | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py
index 9cbe46ebb1..9c9a0a6a1d 100644
--- a/cura/PrintInformation.py
+++ b/cura/PrintInformation.py
@@ -25,19 +25,7 @@ if TYPE_CHECKING:
catalog = i18nCatalog("cura")
-## A class for processing and calculating minimum, current and maximum print time as well as managing the job name
-#
-# This class contains all the logic relating to calculation and slicing for the
-# time/quality slider concept. It is a rather tricky combination of event handling
-# and state management. The logic behind this is as follows:
-#
-# - A scene change or setting change event happens.
-# We track what the source was of the change, either a scene change, a setting change, an active machine change or something else.
-# - This triggers a new slice with the current settings - this is the "current settings pass".
-# - When the slice is done, we update the current print time and material amount.
-# - If the source of the slice was not a Setting change, we start the second slice pass, the "low quality settings pass". Otherwise we stop here.
-# - When that is done, we update the minimum print time and start the final slice pass, the "Extra Fine settings pass".
-# - When the Extra Fine pass is done, we update the maximum print time.
+## A class for processing and the print times per build plate as well as managing the job name
#
# This class also mangles the current machine name and the filename of the first loaded mesh into a job name.
# This job name is requested by the JobSpecs qml file.
From 440dee2191f23662590cf865e8f70fe5fa711c3d Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 13:32:26 +0200
Subject: [PATCH 250/390] Removed unused code
CURA-5814
---
cura/PrintInformation.py | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py
index 9c9a0a6a1d..931951b3da 100644
--- a/cura/PrintInformation.py
+++ b/cura/PrintInformation.py
@@ -30,17 +30,7 @@ catalog = i18nCatalog("cura")
# This class also mangles the current machine name and the filename of the first loaded mesh into a job name.
# This job name is requested by the JobSpecs qml file.
class PrintInformation(QObject):
- class SlicePass:
- CurrentSettings = 1
- LowQualitySettings = 2
- HighQualitySettings = 3
-
- class SliceReason:
- SceneChanged = 1
- SettingChanged = 2
- ActiveMachineChanged = 3
- Other = 4
-
+
UNTITLED_JOB_NAME = "Untitled"
def __init__(self, application: "CuraApplication", parent = None) -> None:
From ccb0d63041a4f622f58e9767bf823744a93e5a04 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 13:50:52 +0200
Subject: [PATCH 251/390] Rename print_time_message_values to something
print_times_per_feature
Since this actually makes sense and describes what it holds. CURA-5814
---
cura/PrintInformation.py | 60 ++++++++++++++++++++--------------------
1 file changed, 30 insertions(+), 30 deletions(-)
diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py
index 931951b3da..c7826fcee4 100644
--- a/cura/PrintInformation.py
+++ b/cura/PrintInformation.py
@@ -30,7 +30,7 @@ catalog = i18nCatalog("cura")
# This class also mangles the current machine name and the filename of the first loaded mesh into a job name.
# This job name is requested by the JobSpecs qml file.
class PrintInformation(QObject):
-
+
UNTITLED_JOB_NAME = "Untitled"
def __init__(self, application: "CuraApplication", parent = None) -> None:
@@ -58,7 +58,7 @@ class PrintInformation(QObject):
self._abbr_machine = ""
self._job_name = ""
self._active_build_plate = 0
- self._initVariablesWithBuildPlate(self._active_build_plate)
+ self._initVariablesByBuildPlate(self._active_build_plate)
self._multi_build_plate_model = self._application.getMultiBuildPlateModel()
@@ -75,8 +75,6 @@ class PrintInformation(QObject):
self._material_amounts = [] # type: List[float]
- # Crate cura message translations and using translation keys initialize empty time Duration object for total time
- # and time for each feature
def initializeCuraMessagePrintTimeProperties(self) -> None:
self._current_print_time = {} # type: Dict[int, Duration]
@@ -94,17 +92,17 @@ class PrintInformation(QObject):
"none": catalog.i18nc("@tooltip", "Other")
}
- self._print_time_message_values = {} # type: Dict[int, Dict[str, Duration]]
+ self._print_times_per_feature = {} # type: Dict[int, Dict[str, Duration]]
- def _initPrintTimeMessageValues(self, build_plate_number: int) -> None:
+ def _initPrintTimesPerFeature(self, build_plate_number: int) -> None:
# Full fill message values using keys from _print_time_message_translations
- self._print_time_message_values[build_plate_number] = {}
+ self._print_times_per_feature[build_plate_number] = {}
for key in self._print_time_message_translations.keys():
- self._print_time_message_values[build_plate_number][key] = Duration(None, self)
+ self._print_times_per_feature[build_plate_number][key] = Duration(None, self)
- def _initVariablesWithBuildPlate(self, build_plate_number: int) -> None:
- if build_plate_number not in self._print_time_message_values:
- self._initPrintTimeMessageValues(build_plate_number)
+ def _initVariablesByBuildPlate(self, build_plate_number: int) -> None:
+ if build_plate_number not in self._print_times_per_feature:
+ self._initPrintTimesPerFeature(build_plate_number)
if self._active_build_plate not in self._material_lengths:
self._material_lengths[self._active_build_plate] = []
if self._active_build_plate not in self._material_weights:
@@ -158,26 +156,27 @@ class PrintInformation(QObject):
def materialNames(self):
return self._material_names[self._active_build_plate]
- def printTimes(self):
- return self._print_time_message_values[self._active_build_plate]
+ # Get all print times (by feature) of the active buildplate.
+ def printTimes(self) -> Dict[str, Duration]:
+ return self._print_times_per_feature[self._active_build_plate]
- def _onPrintDurationMessage(self, build_plate_number: int, print_time: Dict[str, int], material_amounts: List[float]) -> None:
- self._updateTotalPrintTimePerFeature(build_plate_number, print_time)
+ def _onPrintDurationMessage(self, build_plate_number: int, print_times_per_feature: Dict[str, int], material_amounts: List[float]) -> None:
+ self._updateTotalPrintTimePerFeature(build_plate_number, print_times_per_feature)
self.currentPrintTimeChanged.emit()
self._material_amounts = material_amounts
self._calculateInformation(build_plate_number)
- def _updateTotalPrintTimePerFeature(self, build_plate_number: int, print_times: Dict[str, int]) -> None:
+ def _updateTotalPrintTimePerFeature(self, build_plate_number: int, print_times_per_feature: Dict[str, int]) -> None:
total_estimated_time = 0
- if build_plate_number not in self._print_time_message_values:
- self._initPrintTimeMessageValues(build_plate_number)
+ if build_plate_number not in self._print_times_per_feature:
+ self._initPrintTimesPerFeature(build_plate_number)
- for feature, time in print_times.items():
- if feature not in self._print_time_message_values[build_plate_number]:
- self._print_time_message_values[build_plate_number][feature] = Duration(parent=self)
- duration = self._print_time_message_values[build_plate_number][feature]
+ for feature, time in print_times_per_feature.items():
+ if feature not in self._print_times_per_feature[build_plate_number]:
+ self._print_times_per_feature[build_plate_number][feature] = Duration(parent=self)
+ duration = self._print_times_per_feature[build_plate_number][feature]
if time != time: # Check for NaN. Engine can sometimes give us weird values.
duration.setDuration(0)
@@ -209,7 +208,7 @@ class PrintInformation(QObject):
if index >= len(self._material_amounts):
continue
amount = self._material_amounts[index]
- ## Find the right extruder stack. As the list isn't sorted because it's a annoying generator, we do some
+ # Find the right extruder stack. As the list isn't sorted because it's a annoying generator, we do some
# list comprehension filtering to solve this for us.
density = extruder_stack.getMetaDataEntry("properties", {}).get("density", 0)
material = extruder_stack.findContainer({"type": "material"})
@@ -237,6 +236,7 @@ class PrintInformation(QObject):
length = round((amount / (math.pi * radius ** 2)) / 1000, 2)
else:
length = 0
+
self._material_weights[build_plate_number].append(weight)
self._material_lengths[build_plate_number].append(length)
self._material_costs[build_plate_number].append(cost)
@@ -260,7 +260,7 @@ class PrintInformation(QObject):
self._active_build_plate = new_active_build_plate
self._updateJobName()
- self._initVariablesWithBuildPlate(self._active_build_plate)
+ self._initVariablesByBuildPlate(self._active_build_plate)
self.materialLengthsChanged.emit()
self.materialWeightsChanged.emit()
@@ -403,9 +403,9 @@ class PrintInformation(QObject):
@pyqtSlot(result = "QVariantMap")
def getFeaturePrintTimes(self):
result = {}
- if self._active_build_plate not in self._print_time_message_values:
- self._initPrintTimeMessageValues(self._active_build_plate)
- for feature, time in self._print_time_message_values[self._active_build_plate].items():
+ if self._active_build_plate not in self._print_times_per_feature:
+ self._initPrintTimesPerFeature(self._active_build_plate)
+ for feature, time in self._print_times_per_feature[self._active_build_plate].items():
if feature in self._print_time_message_translations:
result[self._print_time_message_translations[feature]] = time
else:
@@ -419,9 +419,9 @@ class PrintInformation(QObject):
# Construct the 0-time message
temp_message = {}
- if build_plate not in self._print_time_message_values:
- self._print_time_message_values[build_plate] = {}
- for key in self._print_time_message_values[build_plate].keys():
+ if build_plate not in self._print_times_per_feature:
+ self._print_times_per_feature[build_plate] = {}
+ for key in self._print_times_per_feature[build_plate].keys():
temp_message[key] = 0
temp_material_amounts = [0.]
From 45da5b91301bb7d499727e4f7947de4a4e729986 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 14:07:12 +0200
Subject: [PATCH 252/390] Added more specific overrides for get/set
globalContainerStack
This helps a lot with the type hinting in other bits of the code, since for CuraApplicaiton we know it's always going to be a GlobalStack
CURA-5814
---
cura/CuraApplication.py | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 0b2940044f..b12bc975d4 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -13,6 +13,7 @@ from PyQt5.QtGui import QColor, QIcon
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qmlRegisterType
+from UM.Application import Application
from UM.PluginError import PluginNotFoundError
from UM.Scene.SceneNode import SceneNode
from UM.Scene.Camera import Camera
@@ -114,12 +115,13 @@ from cura.Settings.CuraFormulaFunctions import CuraFormulaFunctions
from cura.ObjectsModel import ObjectsModel
from UM.FlameProfiler import pyqtSlot
-
+from UM.Decorators import override
if TYPE_CHECKING:
from cura.Machines.MaterialManager import MaterialManager
from cura.Machines.QualityManager import QualityManager
from UM.Settings.EmptyInstanceContainer import EmptyInstanceContainer
+ from cura.Settings.GlobalStack import GlobalStack
numpy.seterr(all = "ignore")
@@ -575,6 +577,14 @@ class CuraApplication(QtApplication):
def showPreferences(self):
self.showPreferencesWindow.emit()
+ @override(Application)
+ def getGlobalContainerStack(self) -> Optional["GlobalStack"]:
+ return self._global_container_stack
+
+ @override(Application)
+ def setGlobalContainerStack(self, stack: "GlobalStack") -> None:
+ super().setGlobalContainerStack(stack)
+
## A reusable dialogbox
#
showMessageBox = pyqtSignal(str, str, str, str, int, int, arguments = ["title", "text", "informativeText", "detailedText", "buttons", "icon"])
From 3ad113f70feb4a4bc7eba6d9bd6a536f4defe3a5 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 14:14:12 +0200
Subject: [PATCH 253/390] Added some missing typing.
Since i was changing some stuff here, i better leave it more typed as I found it.
CURA-5814
---
cura/CuraApplication.py | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index b12bc975d4..059802c198 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -4,7 +4,7 @@
import os
import sys
import time
-from typing import cast, TYPE_CHECKING, Optional
+from typing import cast, TYPE_CHECKING, Optional, Callable
import numpy
@@ -421,7 +421,7 @@ class CuraApplication(QtApplication):
)
# Runs preparations that needs to be done before the starting process.
- def startSplashWindowPhase(self):
+ def startSplashWindowPhase(self) -> None:
super().startSplashWindowPhase()
self.setWindowIcon(QIcon(Resources.getPath(Resources.Images, "cura-icon.png")))
@@ -527,15 +527,15 @@ class CuraApplication(QtApplication):
self._qml_engine.addImageProvider("print_job_preview", PrintJobPreviewImageProvider.PrintJobPreviewImageProvider())
@pyqtProperty(bool)
- def needToShowUserAgreement(self):
+ def needToShowUserAgreement(self) -> bool:
return self._need_to_show_user_agreement
- def setNeedToShowUserAgreement(self, set_value = True):
+ def setNeedToShowUserAgreement(self, set_value = True) -> None:
self._need_to_show_user_agreement = set_value
# DO NOT call this function to close the application, use checkAndExitApplication() instead which will perform
# pre-exit checks such as checking for in-progress USB printing, etc.
- def closeApplication(self):
+ def closeApplication(self) -> None:
Logger.log("i", "Close application")
main_window = self.getMainWindow()
if main_window is not None:
@@ -562,11 +562,11 @@ class CuraApplication(QtApplication):
showConfirmExitDialog = pyqtSignal(str, arguments = ["message"])
- def setConfirmExitDialogCallback(self, callback):
+ def setConfirmExitDialogCallback(self, callback: Callable) -> None:
self._confirm_exit_dialog_callback = callback
@pyqtSlot(bool)
- def callConfirmExitDialogCallback(self, yes_or_no: bool):
+ def callConfirmExitDialogCallback(self, yes_or_no: bool) -> None:
self._confirm_exit_dialog_callback(yes_or_no)
## Signal to connect preferences action in QML
@@ -574,7 +574,7 @@ class CuraApplication(QtApplication):
## Show the preferences window
@pyqtSlot()
- def showPreferences(self):
+ def showPreferences(self) -> None:
self.showPreferencesWindow.emit()
@override(Application)
@@ -596,7 +596,7 @@ class CuraApplication(QtApplication):
showDiscardOrKeepProfileChanges = pyqtSignal()
- def discardOrKeepProfileChanges(self):
+ def discardOrKeepProfileChanges(self) -> bool:
has_user_interaction = False
choice = self.getPreferences().getValue("cura/choice_on_profile_override")
if choice == "always_discard":
@@ -612,7 +612,7 @@ class CuraApplication(QtApplication):
return has_user_interaction
@pyqtSlot(str)
- def discardOrKeepProfileChangesClosed(self, option):
+ def discardOrKeepProfileChangesClosed(self, option: str) -> None:
global_stack = self.getGlobalContainerStack()
if option == "discard":
for extruder in global_stack.extruders.values():
From 2dcfc049bae3acfebd6ece56fac7e28f940950fc Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Wed, 17 Oct 2018 14:28:17 +0200
Subject: [PATCH 254/390] Remove skeleton loading after print jobs received
Contributes to CL-1051
---
.../resources/qml/ClusterMonitorItem.qml | 3 ++-
plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py | 9 +++++++++
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
index 6148a53343..eb52bdc513 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ClusterMonitorItem.qml
@@ -70,7 +70,7 @@ Component {
top: queuedLabel.bottom;
topMargin: UM.Theme.getSize("default_margin").height;
}
- visible: printJobList.count === 0;
+ visible: !queuedPrintJobs.visible;
width: Math.min(800 * screenScaleFactor, maximumWidth);
PrintJobInfoBlock {
@@ -104,6 +104,7 @@ Component {
bottom: parent.bottom;
}
style: UM.Theme.styles.scrollview;
+ visible: OutputDevice.receivedPrintJobs;
width: Math.min(800 * screenScaleFactor, maximumWidth);
ListView {
diff --git a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
index 88ac1c1e76..4c7b93c145 100644
--- a/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/ClusterUM3OutputDevice.py
@@ -48,6 +48,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
printJobsChanged = pyqtSignal()
activePrinterChanged = pyqtSignal()
activeCameraChanged = pyqtSignal()
+ receivedPrintJobsChanged = pyqtSignal()
# This is a bit of a hack, as the notify can only use signals that are defined by the class that they are in.
# Inheritance doesn't seem to work. Tying them together does work, but i'm open for better suggestions.
@@ -62,6 +63,7 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
self._dummy_lambdas = ("", {}, io.BytesIO()) #type: Tuple[str, Dict, Union[io.StringIO, io.BytesIO]]
self._print_jobs = [] # type: List[UM3PrintJobOutputModel]
+ self._received_print_jobs = False # type: bool
self._monitor_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterMonitorItem.qml")
self._control_view_qml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../resources/qml/ClusterControlItem.qml")
@@ -353,6 +355,10 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
def printJobs(self)-> List[UM3PrintJobOutputModel]:
return self._print_jobs
+ @pyqtProperty(bool, notify = receivedPrintJobsChanged)
+ def receivedPrintJobs(self) -> bool:
+ return self._received_print_jobs
+
@pyqtProperty("QVariantList", notify = printJobsChanged)
def queuedPrintJobs(self) -> List[UM3PrintJobOutputModel]:
return [print_job for print_job in self._print_jobs if print_job.state == "queued" or print_job.state == "error"]
@@ -461,6 +467,9 @@ class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
self.get("print_jobs/{uuid}/preview_image".format(uuid=print_job.key), on_finished=self._onGetPreviewImageFinished)
def _onGetPrintJobsFinished(self, reply: QNetworkReply) -> None:
+ self._received_print_jobs = True
+ self.receivedPrintJobsChanged.emit()
+
if not checkValidGetReply(reply):
return
From 6f33c4410c090166112909bd4e38290066a5ff43 Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Wed, 17 Oct 2018 14:39:42 +0200
Subject: [PATCH 255/390] Review tweaks
Contributes to CL-897 and CL-1051
---
.../resources/qml/ConfigurationChangeBlock.qml | 2 +-
plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
index 63815b58bf..3d55ee40e2 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
@@ -185,7 +185,7 @@ Item {
}
text: catalog.i18nc("@label", "Override");
visible: {
- if (root.job & root.job.configurationChanges) {
+ if (root.job && root.job.configurationChanges) {
var length = root.job.configurationChanges.length;
for (var i = 0; i < length; i++) {
var typeOfChange = root.job.configurationChanges[i].typeOfChange;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
index 61009a0ec3..fa4fada0bb 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCard.qml
@@ -233,7 +233,7 @@ Item {
// Progress bar
PrinterCardProgressBar {
- visible: printer && printer.activePrintJob != null && printer.activePrintJob != undefined;
+ visible: printer && printer.activePrintJob != null;
}
}
}
From 907ecc54bd4bfe6b94e92c3cd46d7af365fd0396 Mon Sep 17 00:00:00 2001
From: Jaime van Kessel
Date: Wed, 17 Oct 2018 14:49:03 +0200
Subject: [PATCH 256/390] Use the material weight as fallback
CURA-5814
---
cura/PrintInformation.py | 35 ++++++++++++++++++++---------------
1 file changed, 20 insertions(+), 15 deletions(-)
diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py
index c7826fcee4..21b57d0806 100644
--- a/cura/PrintInformation.py
+++ b/cura/PrintInformation.py
@@ -203,33 +203,38 @@ class PrintInformation(QObject):
material_preference_values = json.loads(self._application.getInstance().getPreferences().getValue("cura/material_settings"))
extruder_stacks = global_stack.extruders
- for position, extruder_stack in extruder_stacks.items():
+
+ for position in extruder_stacks:
+ extruder_stack = extruder_stacks[position]
index = int(position)
if index >= len(self._material_amounts):
continue
amount = self._material_amounts[index]
# Find the right extruder stack. As the list isn't sorted because it's a annoying generator, we do some
- # list comprehension filtering to solve this for us.
+ # list comprehension filtering to solve this for us.
density = extruder_stack.getMetaDataEntry("properties", {}).get("density", 0)
- material = extruder_stack.findContainer({"type": "material"})
+ material = extruder_stack.material
radius = extruder_stack.getProperty("material_diameter", "value") / 2
weight = float(amount) * float(density) / 1000
cost = 0.
- material_name = catalog.i18nc("@label unknown material", "Unknown")
- if material:
- material_guid = material.getMetaDataEntry("GUID")
- material_name = material.getName()
- if material_guid in material_preference_values:
- material_values = material_preference_values[material_guid]
- weight_per_spool = float(material_values["spool_weight"] if material_values and "spool_weight" in material_values else 0)
- cost_per_spool = float(material_values["spool_cost"] if material_values and "spool_cost" in material_values else 0)
+ material_guid = material.getMetaDataEntry("GUID")
+ material_name = material.getName()
+ if material_guid in material_preference_values:
+ material_values = material_preference_values[material_guid]
- if weight_per_spool != 0:
- cost = cost_per_spool * weight / weight_per_spool
- else:
- cost = 0
+ if material_values and "spool_weight" in material_values:
+ weight_per_spool = float(material_values["spool_weight"])
+ else:
+ weight_per_spool = float(extruder_stack.getMetaDataEntry("properties", {}).get("weight", 0))
+
+ cost_per_spool = float(material_values["spool_cost"] if material_values and "spool_cost" in material_values else 0)
+
+ if weight_per_spool != 0:
+ cost = cost_per_spool * weight / weight_per_spool
+ else:
+ cost = 0
# Material amount is sent as an amount of mm^3, so calculate length from that
if radius != 0:
From 1ad008f45cbea479a1a99c31e8188eb731732d8d Mon Sep 17 00:00:00 2001
From: Ian Paschal
Date: Wed, 17 Oct 2018 16:32:30 +0200
Subject: [PATCH 257/390] Style improvements
Contributes to CL-897 and CL-1051
---
.../resources/qml/ConfigurationChangeBlock.qml | 1 -
.../resources/qml/PrintCoreConfiguration.qml | 1 -
.../resources/qml/PrintJobContextMenu.qml | 4 ++--
.../resources/qml/PrinterCardDetails.qml | 10 ++++++++--
4 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
index 3d55ee40e2..29996e405f 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/ConfigurationChangeBlock.qml
@@ -36,7 +36,6 @@ Item {
anchors {
left: parent.left;
right: parent.right;
- top: parent.top;
}
color: {
if(configurationChangeToggle.containsMouse) {
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
index e8abb8109e..84ecd71d7c 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintCoreConfiguration.qml
@@ -15,7 +15,6 @@ Item {
// Extruder circle
Item {
id: extruderCircle;
- anchors.verticalCenter: parent.verticalCenter;
height: UM.Theme.getSize("monitor_tab_extruder_circle").height;
width: UM.Theme.getSize("monitor_tab_extruder_circle").width;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
index da4499adf6..7b956a2101 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrintJobContextMenu.qml
@@ -39,8 +39,8 @@ Item {
Popup {
id: popup;
background: Item {
- height: childrenRect.height;
- width: childrenRect.width;
+ height: popup.height;
+ width: popup.width;
DropShadow {
anchors.fill: pointedRectangle;
diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
index d0aa4bf80a..bc819b3aaa 100644
--- a/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
+++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterCardDetails.qml
@@ -10,6 +10,7 @@ import QtQuick.Controls 1.4 as LegacyControls
import UM 1.3 as UM
Item {
+ id: root;
property var printer: null;
property var printJob: printer ? printer.activePrintJob : null;
property var collapsed: true;
@@ -38,10 +39,13 @@ Item {
printJob: root.printer ? root.printer.activePrintJob : null;
}
- HorizontalLine {}
+ HorizontalLine {
+ visible: root.printJob;
+ }
Row {
height: childrenRect.height;
+ visible: root.printJob;
width: parent.width;
PrintJobTitle {
@@ -60,8 +64,9 @@ Item {
PrintJobPreview {
- job: root.printer && root.printer.activePrintJob ? root.printer.activePrintJob : null;
anchors.horizontalCenter: parent.horizontalCenter;
+ job: root.printer && root.printer.activePrintJob ? root.printer.activePrintJob : null;
+ visible: root.printJob;
}
}
@@ -74,5 +79,6 @@ Item {
leftMargin: Math.round(0.5 * UM.Theme.getSize("default_margin").width);
}
iconSource: "../svg/camera-icon.svg";
+ visible: root.printJob;
}
}
From 38b615c7348c2dcda63679c80e4dadd9a6ec970a Mon Sep 17 00:00:00 2001
From: ChrisTerBeke
Date: Wed, 17 Oct 2018 17:43:04 +0200
Subject: [PATCH 258/390] Update OAuth2 scopes
Part of STAR-273.
---
cura/API/Account.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/API/Account.py b/cura/API/Account.py
index bc1ce8c2b9..397e220478 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -45,7 +45,7 @@ class Account(QObject):
CALLBACK_PORT=self._callback_port,
CALLBACK_URL="http://localhost:{}/callback".format(self._callback_port),
CLIENT_ID="um---------------ultimaker_cura_drive_plugin",
- CLIENT_SCOPES="user.read drive.backups.read drive.backups.write",
+ CLIENT_SCOPES="account.user.read drive.backup.read drive.backup.write packages.download packages.rating.read packages.rating.write",
AUTH_DATA_PREFERENCE_KEY="general/ultimaker_auth_data",
AUTH_SUCCESS_REDIRECT="{}/app/auth-success".format(self._oauth_root),
AUTH_FAILED_REDIRECT="{}/app/auth-error".format(self._oauth_root)
From db0da61506b12e61dc276b79a4e3370c0a3c3c57 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 18 Oct 2018 14:54:20 +0200
Subject: [PATCH 259/390] Forbid interpolation in setting visibility preset
files
We might use characters that collide with this.
Contributes to issue CURA-5734.
---
cura/Settings/SettingVisibilityPreset.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
index 78807ea2fb..e8a4211d69 100644
--- a/cura/Settings/SettingVisibilityPreset.py
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -69,7 +69,7 @@ class SettingVisibilityPreset(QObject):
Logger.log("e", "[%s] is not a file", file_path)
return None
- parser = ConfigParser(allow_no_value = True) # Accept options without any value,
+ parser = ConfigParser(interpolation = None, allow_no_value = True) # Accept options without any value,
parser.read([file_path])
if not parser.has_option("general", "name") or not parser.has_option("general", "weight"):
From 777470db7f06eb64d70e73468d195ab1140eba42 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Thu, 18 Oct 2018 15:47:25 +0200
Subject: [PATCH 260/390] Don't force sending M105 requests without OK
This prevents serial buffer overflow on the printer.
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index 3609950b7e..ce3342bb72 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -226,14 +226,12 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if self._last_temperature_request is None or time() > self._last_temperature_request + self._timeout:
# Timeout, or no request has been sent at all.
- self._command_received.set() # We haven't really received the ok, but we need to send a new command
-
- if not self._printer_busy: # don't flood the printer with temperature requests while it is busy
+ if not self._printer_busy: # Don't flood the printer with temperature requests while it is busy
self.sendCommand("M105")
self._last_temperature_request = time()
- if self._firmware_name is None:
- self.sendCommand("M115")
+ if self._firmware_name is None:
+ self.sendCommand("M115")
if re.search(b"[B|T\d*]: ?\d+\.?\d*", line): # Temperature message. 'T:' for extruder and 'B:' for bed
extruder_temperature_matches = re.findall(b"T(\d*): ?(\d+\.?\d*) ?\/?(\d+\.?\d*)?", line)
From 05c2349411e84a2b0883412968f3733708c79f9e Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 18 Oct 2018 17:15:28 +0200
Subject: [PATCH 261/390] No longer run setting visibility script
It no longer exists.
Contributes to issue CURA-5734.
---
Jenkinsfile | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 274e383ffa..1cb2eea877 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -23,16 +23,6 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
} catch(e) {
currentBuild.result = "UNSTABLE"
}
-
- // Check setting visibilities
- try {
- sh """
- echo 'Check for duplicate shortcut keys in all translation files.'
- ${env.CURA_ENVIRONMENT_PATH}/master/bin/python3 scripts/check_setting_visibility.py
- """
- } catch(e) {
- currentBuild.result = "UNSTABLE"
- }
}
}
From 4e54f13145746e75f2133617eda7a6b188677cb1 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 18 Oct 2018 17:22:57 +0200
Subject: [PATCH 262/390] Move shortcut keys test to CMake
So that when you run tests locally, you also test this one.
---
Jenkinsfile | 14 --------------
cmake/CuraTests.cmake | 10 +++++++++-
2 files changed, 9 insertions(+), 15 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 1cb2eea877..3ca803d338 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -12,20 +12,6 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
// If any error occurs during building, we want to catch it and continue with the "finale" stage.
catchError {
- stage('Pre Checks') {
- if (isUnix()) {
- // Check shortcut keys
- try {
- sh """
- echo 'Check for duplicate shortcut keys in all translation files.'
- ${env.CURA_ENVIRONMENT_PATH}/master/bin/python3 scripts/check_shortcut_keys.py
- """
- } catch(e) {
- currentBuild.result = "UNSTABLE"
- }
- }
- }
-
// Building and testing should happen in a subdirectory.
dir('build') {
// Perform the "build". Since Uranium is Python code, this basically only ensures CMake is setup.
diff --git a/cmake/CuraTests.cmake b/cmake/CuraTests.cmake
index 30794ed608..f2ee92d65b 100644
--- a/cmake/CuraTests.cmake
+++ b/cmake/CuraTests.cmake
@@ -57,5 +57,13 @@ endforeach()
#Add code style test.
add_test(
NAME "code-style"
- COMMAND ${PYTHON_EXECUTABLE} run_mypy.py WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND ${PYTHON_EXECUTABLE} run_mypy.py
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+)
+
+#Add test for whether the shortcut alt-keys are unique in every translation.
+add_test(
+ NAME "shortcut-keys"
+ COMMAND ${PYTHON_EXECUTABLE} scripts/check_shortcut_keys.py
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
\ No newline at end of file
From 7b140277d6942d1c131bb50c2decb59961ed7b34 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Thu, 18 Oct 2018 17:27:15 +0200
Subject: [PATCH 263/390] Code style: Brackets on new line
---
Jenkinsfile | 64 +++++++++++++++++++++++++++++++++++------------------
1 file changed, 43 insertions(+), 21 deletions(-)
diff --git a/Jenkinsfile b/Jenkinsfile
index 3ca803d338..f9a3a9864a 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,8 +1,11 @@
-parallel_nodes(['linux && cura', 'windows && cura']) {
- timeout(time: 2, unit: "HOURS") {
+parallel_nodes(['linux && cura', 'windows && cura'])
+{
+ timeout(time: 2, unit: "HOURS")
+ {
// Prepare building
- stage('Prepare') {
+ stage('Prepare')
+ {
// Ensure we start with a clean build directory.
step([$class: 'WsCleanup'])
@@ -11,13 +14,17 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
}
// If any error occurs during building, we want to catch it and continue with the "finale" stage.
- catchError {
+ catchError
+ {
// Building and testing should happen in a subdirectory.
- dir('build') {
+ dir('build')
+ {
// Perform the "build". Since Uranium is Python code, this basically only ensures CMake is setup.
- stage('Build') {
+ stage('Build')
+ {
def branch = env.BRANCH_NAME
- if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) {
+ if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}"))
+ {
branch = "master"
}
@@ -27,11 +34,14 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
}
// Try and run the unit tests. If this stage fails, we consider the build to be "unstable".
- stage('Unit Test') {
- if (isUnix()) {
+ stage('Unit Test')
+ {
+ if (isUnix())
+ {
// For Linux to show everything
def branch = env.BRANCH_NAME
- if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) {
+ if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}"))
+ {
branch = "master"
}
def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}")
@@ -42,37 +52,48 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
export PYTHONPATH=.:"${uranium_dir}"
${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/pytest -x --verbose --full-trace --capture=no ./tests
"""
- } catch(e) {
+ } catch(e)
+ {
currentBuild.result = "UNSTABLE"
}
}
- else {
+ else
+ {
// For Windows
- try {
+ try
+ {
// This also does code style checks.
bat 'ctest -V'
- } catch(e) {
+ } catch(e)
+ {
currentBuild.result = "UNSTABLE"
}
}
}
- stage('Code Style') {
- if (isUnix()) {
- // For Linux to show everything
+ stage('Code Style')
+ {
+ if (isUnix())
+ {
+ // For Linux to show everything.
+ // CMake also runs this test, but if it fails then the test just shows "failed" without details of what exactly failed.
def branch = env.BRANCH_NAME
- if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}")) {
+ if(!fileExists("${env.CURA_ENVIRONMENT_PATH}/${branch}"))
+ {
branch = "master"
}
def uranium_dir = get_workspace_dir("Ultimaker/Uranium/${branch}")
- try {
+ try
+ {
sh """
cd ..
export PYTHONPATH=.:"${uranium_dir}"
${env.CURA_ENVIRONMENT_PATH}/${branch}/bin/python3 run_mypy.py
"""
- } catch(e) {
+ }
+ catch(e)
+ {
currentBuild.result = "UNSTABLE"
}
}
@@ -81,7 +102,8 @@ parallel_nodes(['linux && cura', 'windows && cura']) {
}
// Perform any post-build actions like notification and publishing of unit tests.
- stage('Finalize') {
+ stage('Finalize')
+ {
// Publish the test results to Jenkins.
junit allowEmptyResults: true, testResults: 'build/junit*.xml'
From 9aa7b76dbe9b4ef5a04b9afa8299d6c920b2d171 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 19 Oct 2018 07:55:39 +0200
Subject: [PATCH 264/390] Update change log with 3.5.1 changes
Too little, too late. But at least you'll be able to look back on it.
---
plugins/ChangeLogPlugin/ChangeLog.txt | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt
index fec177ca60..382b72b0b8 100755
--- a/plugins/ChangeLogPlugin/ChangeLog.txt
+++ b/plugins/ChangeLogPlugin/ChangeLog.txt
@@ -1,3 +1,16 @@
+[3.5.1]
+*Bug fixes
+- Fixed M104 temperature commands giving inaccurate results.
+- Fixed crashes caused by loading files from USB stick on Windows platforms.
+- Fixed several issues with configuration files that missed the type in the metadata.
+- Fixed issues caused by skin/infill optimization.
+- Fixed several issues related to missing definition files for third-party printers.
+- Fixed an issue where combing path generation cuts corners.
+- Fixed a range of crashes caused by lock files.
+- Fixed issues with remembering save directories on MacOS.
+- Fixed an issue where CuraEngine uses incorrect material settings.
+- Fixed an issue where some support layers don't have support infill.
+
[3.5.0]
*Monitor page
The monitor page of Ultimaker Cura has been remodeled for better consistency with the Cura Connect ‘Print jobs’ interface. This means less switching between interfaces, and more control from within Ultimaker Cura.
From 2512800340c3757a530a14dd03b79eb093527f91 Mon Sep 17 00:00:00 2001
From: THeijmans
Date: Fri, 19 Oct 2018 09:25:13 +0200
Subject: [PATCH 265/390] Support - Brim interactions
Enable Support - brims and disable 'brim replaces support' for all support materials.
---
resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg | 2 ++
resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg | 2 ++
.../quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg | 2 ++
resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg | 2 ++
resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg | 2 ++
.../quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg | 2 ++
.../quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg | 2 ++
resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg | 2 ++
.../quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg | 2 ++
.../quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg | 2 ++
.../quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg | 2 ++
.../quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg | 2 ++
.../ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg | 2 ++
.../quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg | 2 ++
.../quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg | 2 ++
.../quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg | 2 ++
.../ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg | 2 ++
.../quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg | 2 ++
.../ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg | 2 ++
.../ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg | 2 ++
20 files changed, 40 insertions(+)
diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg
index a1fc6b7e6f..df7f0fdf02 100644
--- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg
@@ -12,6 +12,7 @@ material = generic_bam
variant = AA 0.4
[values]
+brim_replaces_support = False
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
machine_nozzle_cool_down_speed = 0.75
@@ -26,6 +27,7 @@ speed_wall = =math.ceil(speed_print * 50 / 70)
speed_wall_0 = =math.ceil(speed_wall * 35 / 50)
top_bottom_thickness = 1
wall_thickness = 1
+support_brim_enable = True
support_interface_enable = True
support_interface_density = =min(extruderValues('material_surface_energy'))
support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric'
diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg
index ac21cce120..cf330dc984 100644
--- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg
@@ -12,6 +12,7 @@ material = generic_bam
variant = AA 0.4
[values]
+brim_replaces_support = False
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
machine_nozzle_cool_down_speed = 0.75
@@ -25,6 +26,7 @@ speed_wall = =math.ceil(speed_print * 40 / 80)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
top_bottom_thickness = 1
wall_thickness = 1
+support_brim_enable = True
support_interface_enable = True
support_interface_density = =min(extruderValues('material_surface_energy'))
support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric'
diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg
index 290ee6c4db..705c9c4105 100644
--- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg
@@ -12,6 +12,7 @@ material = generic_bam
variant = AA 0.4
[values]
+brim_replaces_support = False
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
cool_min_speed = 7
@@ -21,6 +22,7 @@ material_print_temperature = =default_material_print_temperature - 10
prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100
skin_overlap = 10
speed_layer_0 = =math.ceil(speed_print * 20 / 70)
+support_brim_enable = True
support_interface_enable = True
support_interface_density = =min(extruderValues('material_surface_energy'))
support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric'
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg
index 816238fe69..7010d292b2 100644
--- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Draft_Print.inst.cfg
@@ -12,7 +12,9 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_print_temperature = =default_material_print_temperature + 10
material_standby_temperature = 100
prime_tower_enable = False
skin_overlap = 20
+support_brim_enable = True
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg
index 58d5d58802..325609362f 100644
--- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Fast_Print.inst.cfg
@@ -12,8 +12,10 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_print_temperature = =default_material_print_temperature + 5
material_standby_temperature = 100
prime_tower_enable = False
skin_overlap = 15
+support_brim_enable = True
support_infill_sparse_thickness = 0.3
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg
index 3d7a54564a..a0507299fb 100644
--- a/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_High_Quality.inst.cfg
@@ -12,6 +12,8 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_standby_temperature = 100
prime_tower_enable = False
+support_brim_enable = True
support_infill_sparse_thickness = 0.18
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg
index ffd99ed9ef..086f811b36 100644
--- a/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.4_PVA_Normal_Quality.inst.cfg
@@ -12,5 +12,7 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_standby_temperature = 100
prime_tower_enable = False
+support_brim_enable = True
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg
index 51c27f6a14..28556ca7bf 100644
--- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Draft_Print.inst.cfg
@@ -12,5 +12,7 @@ material = generic_pva
variant = BB 0.8
[values]
+brim_replaces_support = False
material_print_temperature = =default_material_print_temperature + 5
material_standby_temperature = 100
+support_brim_enable = True
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg
index 3f645a2a50..9ad5499f18 100644
--- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Superdraft_Print.inst.cfg
@@ -12,6 +12,8 @@ material = generic_pva
variant = BB 0.8
[values]
+brim_replaces_support = False
layer_height = 0.4
material_standby_temperature = 100
+support_brim_enable = True
support_interface_height = 0.9
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg
index 285b9bb9ed..e616214704 100644
--- a/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg
+++ b/resources/quality/ultimaker3/um3_bb0.8_PVA_Verydraft_Print.inst.cfg
@@ -12,7 +12,9 @@ material = generic_pva
variant = BB 0.8
[values]
+brim_replaces_support = False
layer_height = 0.3
material_standby_temperature = 100
+support_brim_enable = True
support_infill_sparse_thickness = 0.3
support_interface_height = 1.2
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg
index 1c316da6ba..254afbc109 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg
@@ -12,6 +12,7 @@ material = generic_bam
variant = AA 0.4
[values]
+brim_replaces_support = False
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
machine_nozzle_cool_down_speed = 0.75
@@ -26,6 +27,7 @@ speed_wall = =math.ceil(speed_print * 50 / 70)
speed_wall_0 = =math.ceil(speed_wall * 35 / 50)
top_bottom_thickness = 1
wall_thickness = 1
+support_brim_enable = True
support_interface_enable = True
support_interface_density = =min(extruderValues('material_surface_energy'))
support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric'
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg
index 2913a021f0..39bedce77f 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg
@@ -12,6 +12,7 @@ material = generic_bam
variant = AA 0.4
[values]
+brim_replaces_support = False
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
machine_nozzle_cool_down_speed = 0.75
@@ -25,6 +26,7 @@ speed_wall = =math.ceil(speed_print * 40 / 80)
speed_wall_0 = =math.ceil(speed_wall * 30 / 40)
top_bottom_thickness = 1
wall_thickness = 1
+support_brim_enable = True
support_interface_enable = True
support_interface_density = =min(extruderValues('material_surface_energy'))
support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric'
diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg
index 65c922fe6f..c87d590650 100644
--- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg
@@ -12,6 +12,7 @@ material = generic_bam
variant = AA 0.4
[values]
+brim_replaces_support = False
cool_fan_full_at_height = =layer_height_0 + 2 * layer_height
cool_fan_speed_max = =cool_fan_speed
cool_min_speed = 7
@@ -22,6 +23,7 @@ material_print_temperature = =default_material_print_temperature - 10
prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100
skin_overlap = 10
speed_layer_0 = =math.ceil(speed_print * 20 / 70)
+support_brim_enable = True
support_interface_enable = True
support_interface_density = =min(extruderValues('material_surface_energy'))
support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric'
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg
index 3997943db1..73639be0b6 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Draft_Print.inst.cfg
@@ -12,7 +12,9 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_print_temperature = =default_material_print_temperature + 10
material_standby_temperature = 100
prime_tower_enable = False
skin_overlap = 20
+support_brim_enable = True
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg
index 52fcca9934..5da25be32d 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Fast_Print.inst.cfg
@@ -12,8 +12,10 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_print_temperature = =default_material_print_temperature + 5
material_standby_temperature = 100
prime_tower_enable = False
skin_overlap = 15
+support_brim_enable = True
support_infill_sparse_thickness = 0.3
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg
index bc183a4549..36634af2c8 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_High_Quality.inst.cfg
@@ -12,6 +12,8 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_standby_temperature = 100
prime_tower_enable = False
+support_brim_enable = True
support_infill_sparse_thickness = 0.18
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg
index 0d5cc5bcfc..f76c4c944a 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_PVA_Normal_Quality.inst.cfg
@@ -12,5 +12,7 @@ material = generic_pva
variant = BB 0.4
[values]
+brim_replaces_support = False
material_standby_temperature = 100
prime_tower_enable = False
+support_brim_enable = True
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg
index 465c526f2c..e4e3ab772a 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Draft_Print.inst.cfg
@@ -12,5 +12,7 @@ material = generic_pva
variant = BB 0.8
[values]
+brim_replaces_support = False
material_print_temperature = =default_material_print_temperature + 5
material_standby_temperature = 100
+support_brim_enable = True
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg
index b3f6df39f9..5e78e51014 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Superdraft_Print.inst.cfg
@@ -12,5 +12,7 @@ material = generic_pva
variant = BB 0.8
[values]
+brim_replaces_support = False
material_standby_temperature = 100
+support_brim_enable = True
support_interface_height = 0.9
diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg
index d6ef272a4d..5af09aebcc 100644
--- a/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg
+++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_PVA_Verydraft_Print.inst.cfg
@@ -12,6 +12,8 @@ material = generic_pva
variant = BB 0.8
[values]
+brim_replaces_support = False
material_standby_temperature = 100
+support_brim_enable = True
support_infill_sparse_thickness = 0.3
support_interface_height = 1.2
From 2eb9b111fc099d73d555f26fb76d42232dffb0b5 Mon Sep 17 00:00:00 2001
From: Ghostkeeper
Date: Fri, 19 Oct 2018 09:55:23 +0200
Subject: [PATCH 266/390] Fix changing flow rate in dual extrusion
This potentially set the flow rate to -1, since it was changing the flow rate to the old['flowrateTwo'] which was left at -1 since initialisation because it didn't update here.
---
plugins/PostProcessingPlugin/scripts/ChangeAtZ.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py
index 54d6fdb155..919b06d28e 100644
--- a/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py
+++ b/plugins/PostProcessingPlugin/scripts/ChangeAtZ.py
@@ -407,13 +407,13 @@ class ChangeAtZ(Script):
if "M106" in line and state < 3: #looking for fan speed
old["fanSpeed"] = self.getValue(line, "S", old["fanSpeed"])
if "M221" in line and state < 3: #looking for flow rate
- tmp_extruder = self.getValue(line,"T",None)
+ tmp_extruder = self.getValue(line, "T", None)
if tmp_extruder == None: #check if extruder is specified
old["flowrate"] = self.getValue(line, "S", old["flowrate"])
elif tmp_extruder == 0: #first extruder
old["flowrateOne"] = self.getValue(line, "S", old["flowrateOne"])
elif tmp_extruder == 1: #second extruder
- old["flowrateOne"] = self.getValue(line, "S", old["flowrateOne"])
+ old["flowrateTwo"] = self.getValue(line, "S", old["flowrateTwo"])
if ("M84" in line or "M25" in line):
if state>0 and ChangeProp["speed"]: #"finish" commands for UM Original and UM2
modified_gcode += "M220 S100 ; speed reset to 100% at the end of print\n"
From e5efd1e41f839cc6be173948e94806a966e15221 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:32:40 +0200
Subject: [PATCH 267/390] Move constant definition into constructor
CURA-5812
---
cura/CuraApplication.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index f8fc081d5c..c91514c37a 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -166,6 +166,8 @@ class CuraApplication(QtApplication):
self.default_theme = "cura-light"
+ self.change_log_url = "https://ultimaker.com/ultimaker-cura-latest-features"
+
self._boot_loading_time = time.time()
self._on_exit_callback_manager = OnExitCallbackManager(self)
@@ -302,8 +304,6 @@ class CuraApplication(QtApplication):
self._machine_action_manager = MachineActionManager.MachineActionManager(self)
self._machine_action_manager.initialize()
- self.change_log_url = "https://ultimaker.com/ultimaker-cura-latest-features"
-
def __sendCommandToSingleInstance(self):
self._single_instance = SingleInstance(self, self._files_to_open)
From 9b94db8957fcd3c6f6bdddab6708406a276e1ee9 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:37:20 +0200
Subject: [PATCH 268/390] Directly use empty containers in MachineManager
CURA-5812
Instead of looking up for the empty containers via ContainerRegistry,
import and use them directly.
---
cura/CuraApplication.py | 2 +-
cura/Settings/MachineManager.py | 87 ++++++++++++++++-----------------
2 files changed, 43 insertions(+), 46 deletions(-)
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index c91514c37a..9f309c9e7b 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -691,7 +691,7 @@ class CuraApplication(QtApplication):
self._quality_manager.initialize()
Logger.log("i", "Initializing machine manager")
- self._machine_manager = MachineManager(self)
+ self._machine_manager = MachineManager(self, parent = self)
Logger.log("i", "Initializing container manager")
self._container_manager = ContainerManager(self)
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 063f894d23..e5902106e3 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -20,7 +20,6 @@ from UM.Message import Message
from UM.Settings.SettingFunction import SettingFunction
from UM.Signal import postponeSignals, CompressTechnique
-import cura.CuraApplication
from cura.Machines.QualityManager import getMachineDefinitionIDForQualitySearch
from cura.PrinterOutputDevice import PrinterOutputDevice
from cura.PrinterOutput.ConfigurationModel import ConfigurationModel
@@ -29,6 +28,9 @@ from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
from cura.Settings.ExtruderManager import ExtruderManager
from cura.Settings.ExtruderStack import ExtruderStack
+from cura.Settings.cura_empty_instance_containers import (empty_definition_changes_container, empty_variant_container,
+ empty_material_container, empty_quality_container,
+ empty_quality_changes_container)
from .CuraStackBuilder import CuraStackBuilder
@@ -36,6 +38,7 @@ from UM.i18n import i18nCatalog
catalog = i18nCatalog("cura")
if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
from cura.Settings.CuraContainerStack import CuraContainerStack
from cura.Settings.GlobalStack import GlobalStack
from cura.Machines.MaterialManager import MaterialManager
@@ -47,7 +50,7 @@ if TYPE_CHECKING:
class MachineManager(QObject):
- def __init__(self, parent: QObject = None) -> None:
+ def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
self._active_container_stack = None # type: Optional[ExtruderStack]
@@ -66,9 +69,10 @@ class MachineManager(QObject):
self._instance_container_timer.setSingleShot(True)
self._instance_container_timer.timeout.connect(self.__emitChangedSignals)
- self._application = cura.CuraApplication.CuraApplication.getInstance() #type: cura.CuraApplication.CuraApplication
+ self._application = application
+ self._container_registry = self._application.getContainerRegistry()
self._application.globalContainerStackChanged.connect(self._onGlobalContainerChanged)
- self._application.getContainerRegistry().containerLoadComplete.connect(self._onContainersChanged)
+ self._container_registry.containerLoadComplete.connect(self._onContainersChanged)
## When the global container is changed, active material probably needs to be updated.
self.globalContainerChanged.connect(self.activeMaterialChanged)
@@ -80,13 +84,6 @@ class MachineManager(QObject):
self._stacks_have_errors = None # type: Optional[bool]
- self._empty_container = CuraContainerRegistry.getInstance().getEmptyInstanceContainer() #type: InstanceContainer
- self._empty_definition_changes_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_definition_changes")[0] #type: InstanceContainer
- self._empty_variant_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_variant")[0] #type: InstanceContainer
- self._empty_material_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_material")[0] #type: InstanceContainer
- self._empty_quality_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_quality")[0] #type: InstanceContainer
- self._empty_quality_changes_container = CuraContainerRegistry.getInstance().findContainers(id = "empty_quality_changes")[0] #type: InstanceContainer
-
self._onGlobalContainerChanged()
ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderStackChanged)
@@ -192,19 +189,19 @@ class MachineManager(QObject):
for extruder in self._global_container_stack.extruders.values():
extruder_configuration = ExtruderConfigurationModel()
# For compare just the GUID is needed at this moment
- mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != self._empty_material_container else None
- mat_guid = extruder.material.getMetaDataEntry("GUID") if extruder.material != self._empty_material_container else None
- mat_color = extruder.material.getMetaDataEntry("color_name") if extruder.material != self._empty_material_container else None
- mat_brand = extruder.material.getMetaDataEntry("brand") if extruder.material != self._empty_material_container else None
- mat_name = extruder.material.getMetaDataEntry("name") if extruder.material != self._empty_material_container else None
+ mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != empty_material_container else None
+ mat_guid = extruder.material.getMetaDataEntry("GUID") if extruder.material != empty_material_container else None
+ mat_color = extruder.material.getMetaDataEntry("color_name") if extruder.material != empty_material_container else None
+ mat_brand = extruder.material.getMetaDataEntry("brand") if extruder.material != empty_material_container else None
+ mat_name = extruder.material.getMetaDataEntry("name") if extruder.material != empty_material_container else None
material_model = MaterialOutputModel(mat_guid, mat_type, mat_color, mat_brand, mat_name)
extruder_configuration.position = int(extruder.getMetaDataEntry("position"))
extruder_configuration.material = material_model
- extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != self._empty_variant_container else None
+ extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != empty_variant_container else None
self._current_printer_configuration.extruderConfigurations.append(extruder_configuration)
- self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != self._empty_variant_container else None
+ self._current_printer_configuration.buildplateConfiguration = self._global_container_stack.getProperty("machine_buildplate_type", "value") if self._global_container_stack.variant != empty_variant_container else None
self.currentConfigurationChanged.emit()
@pyqtSlot(QObject, result = bool)
@@ -258,14 +255,14 @@ class MachineManager(QObject):
# Global stack can have only a variant if it is a buildplate
global_variant = self._global_container_stack.variant
- if global_variant != self._empty_variant_container:
+ if global_variant != empty_variant_container:
if global_variant.getMetaDataEntry("hardware_type") != "buildplate":
- self._global_container_stack.setVariant(self._empty_variant_container)
+ self._global_container_stack.setVariant(empty_variant_container)
# set the global material to empty as we now use the extruder stack at all times - CURA-4482
global_material = self._global_container_stack.material
- if global_material != self._empty_material_container:
- self._global_container_stack.setMaterial(self._empty_material_container)
+ if global_material != empty_material_container:
+ self._global_container_stack.setMaterial(empty_material_container)
# Listen for changes on all extruder stacks
for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks():
@@ -593,7 +590,7 @@ class MachineManager(QObject):
def globalVariantName(self) -> str:
if self._global_container_stack:
variant = self._global_container_stack.variant
- if variant and not isinstance(variant, type(self._empty_variant_container)):
+ if variant and not isinstance(variant, type(empty_variant_container)):
return variant.getName()
return ""
@@ -781,7 +778,7 @@ class MachineManager(QObject):
if not stack.isEnabled:
continue
material_container = stack.material
- if material_container == self._empty_material_container:
+ if material_container == empty_material_container:
continue
if material_container.getMetaDataEntry("buildplate_compatible"):
buildplate_compatible = buildplate_compatible and material_container.getMetaDataEntry("buildplate_compatible")[self.activeVariantBuildplateName]
@@ -803,7 +800,7 @@ class MachineManager(QObject):
extruder_stacks = self._global_container_stack.extruders.values()
for stack in extruder_stacks:
material_container = stack.material
- if material_container == self._empty_material_container:
+ if material_container == empty_material_container:
continue
buildplate_compatible = material_container.getMetaDataEntry("buildplate_compatible")[self.activeVariantBuildplateName] if material_container.getMetaDataEntry("buildplate_compatible") else True
buildplate_usable = material_container.getMetaDataEntry("buildplate_recommended")[self.activeVariantBuildplateName] if material_container.getMetaDataEntry("buildplate_recommended") else True
@@ -873,7 +870,7 @@ class MachineManager(QObject):
extruder_manager = self._application.getExtruderManager()
definition_changes_container = self._global_container_stack.definitionChanges
- if not self._global_container_stack or definition_changes_container == self._empty_definition_changes_container:
+ if not self._global_container_stack or definition_changes_container == empty_definition_changes_container:
return
previous_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value")
@@ -1072,7 +1069,7 @@ class MachineManager(QObject):
for stack in active_stacks:
variant_container = stack.variant
position = stack.getMetaDataEntry("position")
- if variant_container and variant_container != self._empty_variant_container:
+ if variant_container and variant_container != empty_variant_container:
result[position] = variant_container.getName()
return result
@@ -1086,11 +1083,11 @@ class MachineManager(QObject):
return
self._current_quality_group = None
self._current_quality_changes_group = None
- self._global_container_stack.quality = self._empty_quality_container
- self._global_container_stack.qualityChanges = self._empty_quality_changes_container
+ self._global_container_stack.quality = empty_quality_container
+ self._global_container_stack.qualityChanges = empty_quality_changes_container
for extruder in self._global_container_stack.extruders.values():
- extruder.quality = self._empty_quality_container
- extruder.qualityChanges = self._empty_quality_changes_container
+ extruder.quality = empty_quality_container
+ extruder.qualityChanges = empty_quality_changes_container
self.activeQualityGroupChanged.emit()
self.activeQualityChangesGroupChanged.emit()
@@ -1115,13 +1112,13 @@ class MachineManager(QObject):
# Set quality and quality_changes for the GlobalStack
self._global_container_stack.quality = quality_group.node_for_global.getContainer()
if empty_quality_changes:
- self._global_container_stack.qualityChanges = self._empty_quality_changes_container
+ self._global_container_stack.qualityChanges = empty_quality_changes_container
# Set quality and quality_changes for each ExtruderStack
for position, node in quality_group.nodes_for_extruders.items():
self._global_container_stack.extruders[str(position)].quality = node.getContainer()
if empty_quality_changes:
- self._global_container_stack.extruders[str(position)].qualityChanges = self._empty_quality_changes_container
+ self._global_container_stack.extruders[str(position)].qualityChanges = empty_quality_changes_container
self.activeQualityGroupChanged.emit()
self.activeQualityChangesGroupChanged.emit()
@@ -1147,8 +1144,8 @@ class MachineManager(QObject):
if quality_group is None:
self._fixQualityChangesGroupToNotSupported(quality_changes_group)
- quality_changes_container = self._empty_quality_changes_container
- quality_container = self._empty_quality_container # type: Optional[InstanceContainer]
+ quality_changes_container = empty_quality_changes_container
+ quality_container = empty_quality_container # type: Optional[InstanceContainer]
if quality_changes_group.node_for_global and quality_changes_group.node_for_global.getContainer():
quality_changes_container = cast(InstanceContainer, quality_changes_group.node_for_global.getContainer())
if quality_group is not None and quality_group.node_for_global and quality_group.node_for_global.getContainer():
@@ -1163,8 +1160,8 @@ class MachineManager(QObject):
if quality_group is not None:
quality_node = quality_group.nodes_for_extruders.get(position)
- quality_changes_container = self._empty_quality_changes_container
- quality_container = self._empty_quality_container
+ quality_changes_container = empty_quality_changes_container
+ quality_container = empty_quality_container
if quality_changes_node and quality_changes_node.getContainer():
quality_changes_container = cast(InstanceContainer, quality_changes_node.getContainer())
if quality_node and quality_node.getContainer():
@@ -1198,7 +1195,7 @@ class MachineManager(QObject):
self._global_container_stack.extruders[position].material = container_node.getContainer()
root_material_id = container_node.getMetaDataEntry("base_file", None)
else:
- self._global_container_stack.extruders[position].material = self._empty_material_container
+ self._global_container_stack.extruders[position].material = empty_material_container
root_material_id = None
# The _current_root_material_id is used in the MaterialMenu to see which material is selected
if root_material_id != self._current_root_material_id[position]:
@@ -1273,7 +1270,7 @@ class MachineManager(QObject):
current_material_base_name = extruder.material.getMetaDataEntry("base_file")
current_nozzle_name = None
- if extruder.variant.getId() != self._empty_variant_container.getId():
+ if extruder.variant.getId() != empty_variant_container.getId():
current_nozzle_name = extruder.variant.getMetaDataEntry("name")
from UM.Settings.Interfaces import PropertyEvaluationContext
@@ -1348,12 +1345,12 @@ class MachineManager(QObject):
if variant_container_node:
self._setVariantNode(position, variant_container_node)
else:
- self._global_container_stack.extruders[position].variant = self._empty_variant_container
+ self._global_container_stack.extruders[position].variant = empty_variant_container
if material_container_node:
self._setMaterial(position, material_container_node)
else:
- self._global_container_stack.extruders[position].material = self._empty_material_container
+ self._global_container_stack.extruders[position].material = empty_material_container
self.updateMaterialWithVariant(position)
if configuration.buildplateConfiguration is not None:
@@ -1361,9 +1358,9 @@ class MachineManager(QObject):
if global_variant_container_node:
self._setGlobalVariant(global_variant_container_node)
else:
- self._global_container_stack.variant = self._empty_variant_container
+ self._global_container_stack.variant = empty_variant_container
else:
- self._global_container_stack.variant = self._empty_variant_container
+ self._global_container_stack.variant = empty_variant_container
self._updateQualityWithMaterial()
# See if we need to show the Discard or Keep changes screen
@@ -1481,7 +1478,7 @@ class MachineManager(QObject):
# This is not changing the quality for the active machine !!!!!!!!
global_stack.quality = quality_group.node_for_global.getContainer()
for extruder_nr, extruder_stack in global_stack.extruders.items():
- quality_container = self._empty_quality_container
+ quality_container = empty_quality_container
if extruder_nr in quality_group.nodes_for_extruders:
container = quality_group.nodes_for_extruders[extruder_nr].getContainer()
quality_container = container if container is not None else quality_container
@@ -1525,7 +1522,7 @@ class MachineManager(QObject):
@pyqtProperty(str, notify = activeQualityGroupChanged)
def activeQualityOrQualityChangesName(self) -> str:
- name = self._empty_quality_container.getName()
+ name = empty_quality_container.getName()
if self._current_quality_changes_group:
name = self._current_quality_changes_group.name
elif self._current_quality_group:
From c1b9d527bb1d72e95b76c8ebe18eea6b8e702446 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:38:39 +0200
Subject: [PATCH 269/390] Add typing for MachineAction
CURA-5812
---
cura/MachineAction.py | 34 ++++++++++++++++++++--------------
1 file changed, 20 insertions(+), 14 deletions(-)
diff --git a/cura/MachineAction.py b/cura/MachineAction.py
index 969fef0edf..94b096f9c1 100644
--- a/cura/MachineAction.py
+++ b/cura/MachineAction.py
@@ -1,13 +1,13 @@
# Copyright (c) 2016 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+import os
+
from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
+from UM.Logger import Logger
from UM.PluginObject import PluginObject
from UM.PluginRegistry import PluginRegistry
-from UM.Application import Application
-
-import os
## Machine actions are actions that are added to a specific machine type. Examples of such actions are
@@ -19,7 +19,7 @@ class MachineAction(QObject, PluginObject):
## Create a new Machine action.
# \param key unique key of the machine action
# \param label Human readable label used to identify the machine action.
- def __init__(self, key, label = ""):
+ def __init__(self, key: str, label: str = "") -> None:
super().__init__()
self._key = key
self._label = label
@@ -30,14 +30,14 @@ class MachineAction(QObject, PluginObject):
labelChanged = pyqtSignal()
onFinished = pyqtSignal()
- def getKey(self):
+ def getKey(self) -> str:
return self._key
@pyqtProperty(str, notify = labelChanged)
- def label(self):
+ def label(self) -> str:
return self._label
- def setLabel(self, label):
+ def setLabel(self, label: str) -> None:
if self._label != label:
self._label = label
self.labelChanged.emit()
@@ -46,29 +46,35 @@ class MachineAction(QObject, PluginObject):
# This should not be re-implemented by child classes, instead re-implement _reset.
# /sa _reset
@pyqtSlot()
- def reset(self):
+ def reset(self) -> None:
self._finished = False
self._reset()
## Protected implementation of reset.
# /sa reset()
- def _reset(self):
+ def _reset(self) -> None:
pass
@pyqtSlot()
- def setFinished(self):
+ def setFinished(self) -> None:
self._finished = True
self._reset()
self.onFinished.emit()
@pyqtProperty(bool, notify = onFinished)
- def finished(self):
+ def finished(self) -> bool:
return self._finished
## Protected helper to create a view object based on provided QML.
- def _createViewFromQML(self):
- path = os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), self._qml_url)
- self._view = Application.getInstance().createQmlComponent(path, {"manager": self})
+ def _createViewFromQML(self) -> None:
+ plugin_path = PluginRegistry.getInstance().getPluginPath(self.getPluginId())
+ if plugin_path is None:
+ Logger.log("e", "Cannot create QML view: cannot find plugin path for plugin [%s]", self.getPluginId())
+ return
+ path = os.path.join(plugin_path, self._qml_url)
+
+ from cura.CuraApplication import CuraApplication
+ self._view = CuraApplication.getInstance().createQmlComponent(path, {"manager": self})
@pyqtProperty(QObject, constant = True)
def displayItem(self):
From 6dc01d4c0811d6d368ed1a76a825fc9b6a5cbe43 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:42:08 +0200
Subject: [PATCH 270/390] Add typing for MachineActionsManager
CURA-5812
---
cura/MachineActionManager.py | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/cura/MachineActionManager.py b/cura/MachineActionManager.py
index 65eb33b54c..1c99b45c9d 100644
--- a/cura/MachineActionManager.py
+++ b/cura/MachineActionManager.py
@@ -1,12 +1,18 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
+from typing import TYPE_CHECKING, Optional, List, Set
+
from PyQt5.QtCore import QObject
from UM.FlameProfiler import pyqtSlot
from UM.Logger import Logger
from UM.PluginRegistry import PluginRegistry # So MachineAction can be added as plugin type
-from UM.Settings.DefinitionContainer import DefinitionContainer
+
+if TYPE_CHECKING:
+ from cura.CuraApplication import CuraApplication
+ from cura.Settings.GlobalStack import GlobalStack
+ from .MachineAction import MachineAction
## Raised when trying to add an unknown machine action as a required action
@@ -20,9 +26,10 @@ class NotUniqueMachineActionError(Exception):
class MachineActionManager(QObject):
- def __init__(self, application, parent = None):
- super().__init__(parent)
+ def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None):
+ super().__init__(parent = parent)
self._application = application
+ self._container_registry = self._application.getContainerRegistry()
self._machine_actions = {} # Dict of all known machine actions
self._required_actions = {} # Dict of all required actions by definition ID
@@ -30,8 +37,6 @@ class MachineActionManager(QObject):
self._first_start_actions = {} # Dict of all actions that need to be done when first added by definition ID
def initialize(self):
- container_registry = self._application.getContainerRegistry()
-
# Add machine_action as plugin type
PluginRegistry.addType("machine_action", self.addMachineAction)
@@ -59,7 +64,7 @@ class MachineActionManager(QObject):
## Add a required action to a machine
# Raises an exception when the action is not recognised.
- def addRequiredAction(self, definition_id, action_key):
+ def addRequiredAction(self, definition_id: str, action_key: str) -> None:
if action_key in self._machine_actions:
if definition_id in self._required_actions:
if self._machine_actions[action_key] not in self._required_actions[definition_id]:
@@ -70,7 +75,7 @@ class MachineActionManager(QObject):
raise UnknownMachineActionError("Action %s, which is required for %s is not known." % (action_key, definition_id))
## Add a supported action to a machine.
- def addSupportedAction(self, definition_id, action_key):
+ def addSupportedAction(self, definition_id: str, action_key: str) -> None:
if action_key in self._machine_actions:
if definition_id in self._supported_actions:
if self._machine_actions[action_key] not in self._supported_actions[definition_id]:
@@ -95,7 +100,7 @@ class MachineActionManager(QObject):
## Add a (unique) MachineAction
# if the Key of the action is not unique, an exception is raised.
- def addMachineAction(self, action):
+ def addMachineAction(self, action: "MachineAction") -> None:
if action.getKey() not in self._machine_actions:
self._machine_actions[action.getKey()] = action
else:
@@ -105,7 +110,7 @@ class MachineActionManager(QObject):
# \param definition_id The ID of the definition you want the supported actions of
# \returns set of supported actions.
@pyqtSlot(str, result = "QVariantList")
- def getSupportedActions(self, definition_id):
+ def getSupportedActions(self, definition_id: str) -> List["MachineAction"]:
if definition_id in self._supported_actions:
return list(self._supported_actions[definition_id])
else:
@@ -114,7 +119,7 @@ class MachineActionManager(QObject):
## Get all actions required by given machine
# \param definition_id The ID of the definition you want the required actions of
# \returns set of required actions.
- def getRequiredActions(self, definition_id):
+ def getRequiredActions(self, definition_id: str) -> Set["MachineAction"]:
if definition_id in self._required_actions:
return self._required_actions[definition_id]
else:
@@ -126,7 +131,7 @@ class MachineActionManager(QObject):
# \param definition_id The ID of the definition that you want to get the "on added" actions for.
# \returns List of actions.
@pyqtSlot(str, result="QVariantList")
- def getFirstStartActions(self, definition_id):
+ def getFirstStartActions(self, definition_id: str) -> List["MachineAction"]:
if definition_id in self._first_start_actions:
return self._first_start_actions[definition_id]
else:
@@ -134,7 +139,7 @@ class MachineActionManager(QObject):
## Remove Machine action from manager
# \param action to remove
- def removeMachineAction(self, action):
+ def removeMachineAction(self, action: "MachineAction") -> None:
try:
del self._machine_actions[action.getKey()]
except KeyError:
@@ -143,7 +148,7 @@ class MachineActionManager(QObject):
## Get MachineAction by key
# \param key String of key to select
# \return Machine action if found, None otherwise
- def getMachineAction(self, key):
+ def getMachineAction(self, key: str) -> Optional["MachineAction"]:
if key in self._machine_actions:
return self._machine_actions[key]
else:
From c67abb61a8daf8d55f8ac177c585d6a239922d25 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:43:48 +0200
Subject: [PATCH 271/390] Remove unused argument "index" in
addFirstStartAction()
CURA-5812
---
cura/MachineActionManager.py | 7 ++-----
tests/TestMachineAction.py | 9 ---------
2 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/cura/MachineActionManager.py b/cura/MachineActionManager.py
index 1c99b45c9d..cfa40e9e4b 100644
--- a/cura/MachineActionManager.py
+++ b/cura/MachineActionManager.py
@@ -86,13 +86,10 @@ class MachineActionManager(QObject):
Logger.log("w", "Unable to add %s to %s, as the action is not recognised", action_key, definition_id)
## Add an action to the first start list of a machine.
- def addFirstStartAction(self, definition_id, action_key, index = None):
+ def addFirstStartAction(self, definition_id: str, action_key: str) -> None:
if action_key in self._machine_actions:
if definition_id in self._first_start_actions:
- if index is not None:
- self._first_start_actions[definition_id].insert(index, self._machine_actions[action_key])
- else:
- self._first_start_actions[definition_id].append(self._machine_actions[action_key])
+ self._first_start_actions[definition_id].append(self._machine_actions[action_key])
else:
self._first_start_actions[definition_id] = [self._machine_actions[action_key]]
else:
diff --git a/tests/TestMachineAction.py b/tests/TestMachineAction.py
index 7121fcc218..f23d15adcc 100755
--- a/tests/TestMachineAction.py
+++ b/tests/TestMachineAction.py
@@ -65,12 +65,3 @@ def test_addMachineAction(machine_action_manager):
machine_action_manager.addFirstStartAction(test_machine, "test_action")
machine_action_manager.addFirstStartAction(test_machine, "test_action")
assert machine_action_manager.getFirstStartActions(test_machine) == [test_action, test_action]
-
- # Check if inserting an action works
- machine_action_manager.addFirstStartAction(test_machine, "test_action_2", index = 1)
- assert machine_action_manager.getFirstStartActions(test_machine) == [test_action, test_action_2, test_action]
-
- # Check that adding a unknown action doesn't change anything.
- machine_action_manager.addFirstStartAction(test_machine, "key_that_doesnt_exist", index = 1)
- assert machine_action_manager.getFirstStartActions(test_machine) == [test_action, test_action_2, test_action]
-
From 59704e4c0eeefb0a8139b2993d555511caf39ca5 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:44:45 +0200
Subject: [PATCH 272/390] Make sure that a machine's default actions are added
before it gets activated
CURA-5812
---
cura/MachineActionManager.py | 39 +++++++++++++++++++--------------
cura/Settings/MachineManager.py | 4 ++++
2 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/cura/MachineActionManager.py b/cura/MachineActionManager.py
index cfa40e9e4b..f436db82f7 100644
--- a/cura/MachineActionManager.py
+++ b/cura/MachineActionManager.py
@@ -31,6 +31,9 @@ class MachineActionManager(QObject):
self._application = application
self._container_registry = self._application.getContainerRegistry()
+ # Keeps track of which machines have already been processed so we don't do that again.
+ self._definition_ids_with_default_actions_added = set() # type: Set[str]
+
self._machine_actions = {} # Dict of all known machine actions
self._required_actions = {} # Dict of all required actions by definition ID
self._supported_actions = {} # Dict of all supported actions by definition ID
@@ -40,27 +43,29 @@ class MachineActionManager(QObject):
# Add machine_action as plugin type
PluginRegistry.addType("machine_action", self.addMachineAction)
- # Ensure that all containers that were registered before creation of this registry are also handled.
- # This should not have any effect, but it makes it safer if we ever refactor the order of things.
- for container in container_registry.findDefinitionContainers():
- self._onContainerAdded(container)
+ # Adds all default machine actions that are defined in the machine definition for the given machine.
+ def addDefaultMachineActions(self, global_stack: "GlobalStack") -> None:
+ definition_id = global_stack.definition.getId()
- container_registry.containerAdded.connect(self._onContainerAdded)
+ if definition_id in self._definition_ids_with_default_actions_added:
+ Logger.log("i", "Default machine actions have been added for machine definition [%s], do nothing.",
+ definition_id)
+ return
- def _onContainerAdded(self, container):
- ## Ensure that the actions are added to this manager
- if isinstance(container, DefinitionContainer):
- supported_actions = container.getMetaDataEntry("supported_actions", [])
- for action in supported_actions:
- self.addSupportedAction(container.getId(), action)
+ supported_actions = global_stack.getMetaDataEntry("supported_actions", [])
+ for action in supported_actions:
+ self.addSupportedAction(definition_id, action)
- required_actions = container.getMetaDataEntry("required_actions", [])
- for action in required_actions:
- self.addRequiredAction(container.getId(), action)
+ required_actions = global_stack.getMetaDataEntry("required_actions", [])
+ for action in required_actions:
+ self.addRequiredAction(definition_id, action)
- first_start_actions = container.getMetaDataEntry("first_start_actions", [])
- for action in first_start_actions:
- self.addFirstStartAction(container.getId(), action)
+ first_start_actions = global_stack.getMetaDataEntry("first_start_actions", [])
+ for action in first_start_actions:
+ self.addFirstStartAction(definition_id, action)
+
+ self._definition_ids_with_default_actions_added.add(definition_id)
+ Logger.log("i", "Default machine actions added for machine definition [%s]", definition_id)
## Add a required action to a machine
# Raises an exception when the action is not recognised.
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index e5902106e3..b6a08bb4cc 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -364,6 +364,10 @@ class MachineManager(QObject):
return
global_stack = containers[0]
+
+ # Make sure that the default machine actions for this machine have been added
+ self._application.getMachineActionManager().addDefaultMachineActions(global_stack)
+
ExtruderManager.getInstance()._fixSingleExtrusionMachineExtruderDefinition(global_stack)
if not global_stack.isValid():
# Mark global stack as invalid
From 0e772beb14e1841076d468e7a7f025de4ea9f623 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:55:53 +0200
Subject: [PATCH 273/390] Fix typing in MachineActionManager
CURA-5812
---
cura/MachineActionManager.py | 32 ++++++++++++++++++--------------
tests/TestMachineAction.py | 2 +-
2 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/cura/MachineActionManager.py b/cura/MachineActionManager.py
index f436db82f7..db0f7bfbff 100644
--- a/cura/MachineActionManager.py
+++ b/cura/MachineActionManager.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from typing import TYPE_CHECKING, Optional, List, Set
+from typing import TYPE_CHECKING, Optional, List, Set, Dict
from PyQt5.QtCore import QObject
@@ -26,7 +26,7 @@ class NotUniqueMachineActionError(Exception):
class MachineActionManager(QObject):
- def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None):
+ def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None:
super().__init__(parent = parent)
self._application = application
self._container_registry = self._application.getContainerRegistry()
@@ -34,10 +34,14 @@ class MachineActionManager(QObject):
# Keeps track of which machines have already been processed so we don't do that again.
self._definition_ids_with_default_actions_added = set() # type: Set[str]
- self._machine_actions = {} # Dict of all known machine actions
- self._required_actions = {} # Dict of all required actions by definition ID
- self._supported_actions = {} # Dict of all supported actions by definition ID
- self._first_start_actions = {} # Dict of all actions that need to be done when first added by definition ID
+ # Dict of all known machine actions
+ self._machine_actions = {} # type: Dict[str, MachineAction]
+ # Dict of all required actions by definition ID
+ self._required_actions = {} # type: Dict[str, List[MachineAction]]
+ # Dict of all supported actions by definition ID
+ self._supported_actions = {} # type: Dict[str, List[MachineAction]]
+ # Dict of all actions that need to be done when first added by definition ID
+ self._first_start_actions = {} # type: Dict[str, List[MachineAction]]
def initialize(self):
# Add machine_action as plugin type
@@ -53,16 +57,16 @@ class MachineActionManager(QObject):
return
supported_actions = global_stack.getMetaDataEntry("supported_actions", [])
- for action in supported_actions:
- self.addSupportedAction(definition_id, action)
+ for action_key in supported_actions:
+ self.addSupportedAction(definition_id, action_key)
required_actions = global_stack.getMetaDataEntry("required_actions", [])
- for action in required_actions:
- self.addRequiredAction(definition_id, action)
+ for action_key in required_actions:
+ self.addRequiredAction(definition_id, action_key)
first_start_actions = global_stack.getMetaDataEntry("first_start_actions", [])
- for action in first_start_actions:
- self.addFirstStartAction(definition_id, action)
+ for action_key in first_start_actions:
+ self.addFirstStartAction(definition_id, action_key)
self._definition_ids_with_default_actions_added.add(definition_id)
Logger.log("i", "Default machine actions added for machine definition [%s]", definition_id)
@@ -121,11 +125,11 @@ class MachineActionManager(QObject):
## Get all actions required by given machine
# \param definition_id The ID of the definition you want the required actions of
# \returns set of required actions.
- def getRequiredActions(self, definition_id: str) -> Set["MachineAction"]:
+ def getRequiredActions(self, definition_id: str) -> List["MachineAction"]:
if definition_id in self._required_actions:
return self._required_actions[definition_id]
else:
- return set()
+ return list()
## Get all actions that need to be performed upon first start of a given machine.
# Note that contrary to required / supported actions a list is returned (as it could be required to run the same
diff --git a/tests/TestMachineAction.py b/tests/TestMachineAction.py
index f23d15adcc..0d819b9120 100755
--- a/tests/TestMachineAction.py
+++ b/tests/TestMachineAction.py
@@ -44,7 +44,7 @@ def test_addMachineAction(machine_action_manager):
assert machine_action_manager.getSupportedActions(test_machine) == [test_action, test_action_2]
# Check that the machine has no required actions yet.
- assert machine_action_manager.getRequiredActions(test_machine) == set()
+ assert machine_action_manager.getRequiredActions(test_machine) == list()
## Ensure that only known actions can be added.
with pytest.raises(UnknownMachineActionError):
From 537108032e0beb4c1caba7b9dc8f2296e7f39ee4 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 09:57:34 +0200
Subject: [PATCH 274/390] Fix typing in PrinterOutputModel
CURA-5812
---
cura/PrinterOutput/PrinterOutputModel.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/cura/PrinterOutput/PrinterOutputModel.py b/cura/PrinterOutput/PrinterOutputModel.py
index 5870414c26..c1c5586f9f 100644
--- a/cura/PrinterOutput/PrinterOutputModel.py
+++ b/cura/PrinterOutput/PrinterOutputModel.py
@@ -50,7 +50,7 @@ class PrinterOutputModel(QObject):
self._printer_configuration.extruderConfigurations = [extruder.extruderConfiguration for extruder in
self._extruders]
- self._camera = None
+ self._camera = None # type: Optional[NetworkCamera]
@pyqtProperty(str, constant = True)
def firmwareVersion(self) -> str:
From ea10d5e6087135609b3d0b3fa87ff5af9cdc3940 Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 11:36:11 +0200
Subject: [PATCH 275/390] Rename to comptabileMaterialDiameter
CURA-5834
This property returns the material diameter an extruder is compatible
with, so this makes it more clear.
---
cura/Settings/ExtruderStack.py | 4 ++--
plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py
index ca687e358b..ae0c2a7893 100644
--- a/cura/Settings/ExtruderStack.py
+++ b/cura/Settings/ExtruderStack.py
@@ -70,7 +70,7 @@ class ExtruderStack(CuraContainerStack):
# If the machine has no requirement for the diameter, -1 is returned.
# \return The filament diameter for the printer
@property
- def materialDiameter(self) -> float:
+ def comptabileMaterialDiameter(self) -> float:
context = PropertyEvaluationContext(self)
context.context["evaluate_from_container_index"] = _ContainerIndexes.Variant
@@ -86,7 +86,7 @@ class ExtruderStack(CuraContainerStack):
# \return The approximate filament diameter for the printer
@pyqtProperty(float)
def approximateMaterialDiameter(self) -> float:
- return round(float(self.materialDiameter))
+ return round(float(self.comptabileMaterialDiameter))
## Overridden from ContainerStack
#
diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py
index 429d4ab7d4..e56e4c0f13 100755
--- a/plugins/3MFReader/ThreeMFWorkspaceReader.py
+++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py
@@ -926,7 +926,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
build_plate_id = global_stack.variant.getId()
# get material diameter of this extruder
- machine_material_diameter = extruder_stack.materialDiameter
+ machine_material_diameter = extruder_stack.comptabileMaterialDiameter
material_node = material_manager.getMaterialNode(global_stack.definition.getId(),
extruder_stack.variant.getName(),
build_plate_id,
From 22db3cb32bbfd42972cc484b4d419175e1756a30 Mon Sep 17 00:00:00 2001
From: Aleksei S
Date: Fri, 19 Oct 2018 13:18:42 +0200
Subject: [PATCH 276/390] Show retraction for G92 command CURA-5769
---
plugins/GCodeReader/FlavorParser.py | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py
index 9ba1deb410..6fe2cb5260 100644
--- a/plugins/GCodeReader/FlavorParser.py
+++ b/plugins/GCodeReader/FlavorParser.py
@@ -195,10 +195,6 @@ class FlavorParser:
self._previous_z = z
elif self._previous_extrusion_value > e[self._extruder_number]:
path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType])
-
- # This case only for initial start, for the first coordinate in GCode
- elif e[self._extruder_number] == 0 and self._previous_extrusion_value == 0:
- path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType])
else:
path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveCombingType])
return self._position(x, y, z, f, e)
@@ -235,6 +231,9 @@ class FlavorParser:
# Sometimes a G92 E0 is introduced in the middle of the GCode so we need to keep those offsets for calculate the line_width
self._extrusion_length_offset[self._extruder_number] += position.e[self._extruder_number] - params.e
position.e[self._extruder_number] = params.e
+ self._previous_extrusion_value = params.e
+ else:
+ self._previous_extrusion_value = 0.0
return self._position(
params.x if params.x is not None else position.x,
params.y if params.y is not None else position.y,
@@ -243,7 +242,6 @@ class FlavorParser:
position.e)
def processGCode(self, G: int, line: str, position: Position, path: List[List[Union[float, int]]]) -> Position:
- self._previous_extrusion_value = 0.0
func = getattr(self, "_gCode%s" % G, None)
line = line.split(";", 1)[0] # Remove comments (if any)
if func is not None:
@@ -295,7 +293,7 @@ class FlavorParser:
self._cancelled = False
# We obtain the filament diameter from the selected extruder to calculate line widths
global_stack = CuraApplication.getInstance().getGlobalContainerStack()
-
+
if not global_stack:
return None
@@ -338,6 +336,7 @@ class FlavorParser:
min_layer_number = 0
negative_layers = 0
previous_layer = 0
+ self._previous_extrusion_value = 0.0
for line in stream.split("\n"):
if self._cancelled:
From 97e6354c13be511152e8f683dde275026ee5e3eb Mon Sep 17 00:00:00 2001
From: Lipu Fei
Date: Fri, 19 Oct 2018 13:48:50 +0200
Subject: [PATCH 277/390] Fix material update upon extruder-compatible diameter
change
CURA-5834
Material models and the material container on an extruder need to be
updated when the extruder's compatible diameter gets changes.
---
cura/Machines/MaterialManager.py | 22 +++++++++----
cura/Machines/Models/BaseMaterialsModel.py | 2 ++
cura/Settings/CuraStackBuilder.py | 2 +-
cura/Settings/ExtruderStack.py | 31 +++++++++++++++----
cura/Settings/MachineManager.py | 8 ++---
.../MachineSettingsAction.qml | 14 ++++++++-
6 files changed, 59 insertions(+), 20 deletions(-)
diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py
index be97fbc161..f91259723d 100644
--- a/cura/Machines/MaterialManager.py
+++ b/cura/Machines/MaterialManager.py
@@ -365,7 +365,7 @@ class MaterialManager(QObject):
nozzle_name = None
if extruder_stack.variant.getId() != "empty_variant":
nozzle_name = extruder_stack.variant.getName()
- diameter = extruder_stack.approximateMaterialDiameter
+ diameter = extruder_stack.getApproximateMaterialDiameter()
# Fetch the available materials (ContainerNode) for the current active machine and extruder setup.
return self.getAvailableMaterials(machine.definition, nozzle_name, buildplate_name, diameter)
@@ -478,12 +478,22 @@ class MaterialManager(QObject):
buildplate_name = global_stack.getBuildplateName()
machine_definition = global_stack.definition
- if extruder_definition is None:
- extruder_definition = global_stack.extruders[position].definition
- if extruder_definition and parseBool(global_stack.getMetaDataEntry("has_materials", False)):
- # At this point the extruder_definition is not None
- material_diameter = extruder_definition.getProperty("material_diameter", "value")
+ # The extruder-compatible material diameter in the extruder definition may not be the correct value because
+ # the user can change it in the definition_changes container.
+ if extruder_definition is None:
+ extruder_stack_or_definition = global_stack.extruders[position]
+ is_extruder_stack = True
+ else:
+ extruder_stack_or_definition = extruder_definition
+ is_extruder_stack = False
+
+ if extruder_stack_or_definition and parseBool(global_stack.getMetaDataEntry("has_materials", False)):
+ if is_extruder_stack:
+ material_diameter = extruder_stack_or_definition.getComptabileMaterialDiameter()
+ else:
+ material_diameter = extruder_stack_or_definition.getProperty("material_diameter", "value")
+
if isinstance(material_diameter, SettingFunction):
material_diameter = material_diameter(global_stack)
approximate_material_diameter = str(round(material_diameter))
diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py
index be9f8be1ed..ef2e760330 100644
--- a/cura/Machines/Models/BaseMaterialsModel.py
+++ b/cura/Machines/Models/BaseMaterialsModel.py
@@ -64,9 +64,11 @@ class BaseMaterialsModel(ListModel):
if self._extruder_stack is not None:
self._extruder_stack.pyqtContainersChanged.disconnect(self._update)
+ self._extruder_stack.approximateMaterialDiameterChanged.disconnect(self._update)
self._extruder_stack = global_stack.extruders.get(str(self._extruder_position))
if self._extruder_stack is not None:
self._extruder_stack.pyqtContainersChanged.connect(self._update)
+ self._extruder_stack.approximateMaterialDiameterChanged.connect(self._update)
# Force update the model when the extruder stack changes
self._update()
diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py
index 58109d3a8d..95aa364a2e 100644
--- a/cura/Settings/CuraStackBuilder.py
+++ b/cura/Settings/CuraStackBuilder.py
@@ -129,7 +129,7 @@ class CuraStackBuilder:
# get material container for extruders
material_container = application.empty_material_container
- material_node = material_manager.getDefaultMaterial(global_stack, extruder_position, extruder_variant_name,
+ material_node = material_manager.getDefaultMaterial(global_stack, str(extruder_position), extruder_variant_name,
extruder_definition = extruder_definition)
if material_node and material_node.getContainer():
material_container = material_node.getContainer()
diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py
index ae0c2a7893..02e8824a9d 100644
--- a/cura/Settings/ExtruderStack.py
+++ b/cura/Settings/ExtruderStack.py
@@ -65,16 +65,33 @@ class ExtruderStack(CuraContainerStack):
def getLoadingPriority(cls) -> int:
return 3
+ compatibleMaterialDiameterChanged = pyqtSignal()
+
## Return the filament diameter that the machine requires.
#
# If the machine has no requirement for the diameter, -1 is returned.
# \return The filament diameter for the printer
- @property
- def comptabileMaterialDiameter(self) -> float:
+ def getComptabileMaterialDiameter(self) -> float:
context = PropertyEvaluationContext(self)
context.context["evaluate_from_container_index"] = _ContainerIndexes.Variant
- return self.getProperty("material_diameter", "value", context = context)
+ return float(self.getProperty("material_diameter", "value", context = context))
+
+ def setCompatibleMaterialDiameter(self, value: float) -> None:
+ old_approximate_diameter = self.getApproximateMaterialDiameter()
+ if self.getComptabileMaterialDiameter() != value:
+ self.definitionChanges.setProperty("material_diameter", "value", value)
+ self.compatibleMaterialDiameterChanged.emit()
+
+ # Emit approximate diameter changed signal if needed
+ if old_approximate_diameter != self.getApproximateMaterialDiameter():
+ self.approximateMaterialDiameterChanged.emit()
+
+ compatibleMaterialDiameter = pyqtProperty(float, fset = setCompatibleMaterialDiameter,
+ fget = getComptabileMaterialDiameter,
+ notify = compatibleMaterialDiameterChanged)
+
+ approximateMaterialDiameterChanged = pyqtSignal()
## Return the approximate filament diameter that the machine requires.
#
@@ -84,9 +101,11 @@ class ExtruderStack(CuraContainerStack):
# If the machine has no requirement for the diameter, -1 is returned.
#
# \return The approximate filament diameter for the printer
- @pyqtProperty(float)
- def approximateMaterialDiameter(self) -> float:
- return round(float(self.comptabileMaterialDiameter))
+ def getApproximateMaterialDiameter(self) -> float:
+ return round(self.getComptabileMaterialDiameter())
+
+ approximateMaterialDiameter = pyqtProperty(float, fget = getApproximateMaterialDiameter,
+ notify = approximateMaterialDiameterChanged)
## Overridden from ContainerStack
#
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 063f894d23..c27e95bbf0 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -1276,11 +1276,7 @@ class MachineManager(QObject):
if extruder.variant.getId() != self._empty_variant_container.getId():
current_nozzle_name = extruder.variant.getMetaDataEntry("name")
- from UM.Settings.Interfaces import PropertyEvaluationContext
- from cura.Settings.CuraContainerStack import _ContainerIndexes
- context = PropertyEvaluationContext(extruder)
- context.context["evaluate_from_container_index"] = _ContainerIndexes.DefinitionChanges
- material_diameter = extruder.getProperty("material_diameter", "value", context)
+ material_diameter = extruder.getComptabileMaterialDiameter()
candidate_materials = self._material_manager.getAvailableMaterials(
self._global_container_stack.definition,
current_nozzle_name,
@@ -1415,7 +1411,7 @@ class MachineManager(QObject):
position = str(position)
extruder_stack = self._global_container_stack.extruders[position]
nozzle_name = extruder_stack.variant.getName()
- material_diameter = extruder_stack.approximateMaterialDiameter
+ material_diameter = extruder_stack.getApproximateMaterialDiameter()
material_node = self._material_manager.getMaterialNode(machine_definition_id, nozzle_name, buildplate_name,
material_diameter, root_material_id)
self.setMaterial(position, material_node)
diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml
index 6c95dc2c92..275f1d2a41 100644
--- a/plugins/MachineSettingsAction/MachineSettingsAction.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml
@@ -408,6 +408,10 @@ Cura.MachineAction
manager.updateMaterialForDiameter(settingsTabs.currentIndex - 1);
}
}
+ function setValueFunction(value)
+ {
+ Cura.MachineManager.activeStack.compatibleMaterialDiameter = value;
+ }
property bool isExtruderSetting: true
}
@@ -564,6 +568,7 @@ Cura.MachineAction
property bool _forceUpdateOnChange: (typeof(forceUpdateOnChange) === 'undefined') ? false : forceUpdateOnChange
property string _label: (typeof(label) === 'undefined') ? "" : label
property string _tooltip: (typeof(tooltip) === 'undefined') ? propertyProvider.properties.description : tooltip
+ property var _setValueFunction: (typeof(setValueFunction) === 'undefined') ? undefined : setValueFunction
UM.SettingPropertyProvider
{
@@ -616,7 +621,14 @@ Cura.MachineAction
{
if (propertyProvider && text != propertyProvider.properties.value)
{
- propertyProvider.setPropertyValue("value", text);
+ if (_setValueFunction !== undefined)
+ {
+ _setValueFunction(text);
+ }
+ else
+ {
+ propertyProvider.setPropertyValue("value", text);
+ }
if(_forceUpdateOnChange)
{
manager.forceUpdate();
From 71d365c0c62aee12f6a78c03bfa070efe24dac53 Mon Sep 17 00:00:00 2001
From: fieldOfView
Date: Fri, 19 Oct 2018 14:37:20 +0200
Subject: [PATCH 278/390] Fix case where Cura and the firmware could be waiting
for eachother
---
plugins/USBPrinting/USBPrinterOutputDevice.py | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/plugins/USBPrinting/USBPrinterOutputDevice.py b/plugins/USBPrinting/USBPrinterOutputDevice.py
index ce3342bb72..dc4c31ac9c 100644
--- a/plugins/USBPrinting/USBPrinterOutputDevice.py
+++ b/plugins/USBPrinting/USBPrinterOutputDevice.py
@@ -267,19 +267,27 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
if b"FIRMWARE_NAME:" in line:
self._setFirmwareName(line)
- if line.startswith(b"ok "):
+ if line == b"":
+ # An empty line means that the firmware is idle
+ # Multiple empty lines probably means that the firmware and Cura are waiting
+ # for eachother due to a missed "ok", so we keep track of empty lines
+ self._firmware_idle_count += 1
+ else:
+ self._firmware_idle_count = 0
+
+ if line.startswith(b"ok") or self._firmware_idle_count > 1:
self._printer_busy = False
self._command_received.set()
if not self._command_queue.empty():
self._sendCommand(self._command_queue.get())
- if self._is_printing:
+ elif self._is_printing:
if self._paused:
pass # Nothing to do!
else:
self._sendNextGcodeLine()
- if line.startswith(b"echo:busy: "):
+ if line.startswith(b"echo:busy:"):
self._printer_busy = True
if self._is_printing:
From 68c3023a465482ec25ae5cbf57a0adb279dc182d Mon Sep 17 00:00:00 2001
From: fieldOfView