Merge branch 'main' into CURA-11288

This commit is contained in:
c.lamboo 2023-11-30 11:15:00 +01:00
commit ed378f61ed
59 changed files with 564 additions and 186 deletions

View File

@ -23,14 +23,14 @@ body:
- type: input - type: input
attributes: attributes:
label: Cura Version label: Cura Version
placeholder: 5.3.1 placeholder: 5.6.0
validations: validations:
required: true required: true
- type: markdown - type: markdown
attributes: attributes:
value: | value: |
We work hard on improving our slicing crashes. Our most recent release is 5.3.1. We work hard on improving our slicing crashes. Our most recent release is 5.6.0.
If you are not on the latest version of Cura, [you can download it here](https://github.com/Ultimaker/Cura/releases/tag/5.3.1) If you are not on the latest version of Cura, [you can download it here](https://github.com/Ultimaker/Cura/releases/latest)
- type: input - type: input
attributes: attributes:
label: Operating System label: Operating System

View File

@ -139,26 +139,18 @@ jobs:
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Add Cura private Artifactory remote - name: Add Cura private Artifactory remote
run: | run: conan remote add cura-private-conan-dev https://cura.jfrog.io/artifactory/api/conan/cura-private-conan-dev True
conan remote add cura-private https://ultimaker.jfrog.io/artifactory/api/conan/cura-private True
conan remote add cura-private-conan-dev https://cura.jfrog.io/artifactory/api/conan/cura-private-conan-dev True
- name: Set GH service account for remote cura-conan-dev - name: Set GH service account for remote cura-conan-dev
run: | run: conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-private-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-private-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
- name: Create the Packages - name: Create the Packages
run: conan install ${{ inputs.recipe_id_full }} --build=missing --update -c tools.build:skip_test=True run: conan install ${{ inputs.recipe_id_full }} --build=missing --update -c tools.build:skip_test=True
- name: Upload the Package(s) - name: Upload the Package(s)
if: ${{ always() && inputs.conan_upload_community }} if: ${{ always() && inputs.conan_upload_community }}
run: | run: conan upload ${{ inputs.recipe_id_full }} -r cura --all -c
conan upload ${{ inputs.recipe_id_full }} -r cura --all -c
conan upload ${{ inputs.recipe_id_full }} -r cura-conan-dev --all -c
- name: Upload the Package(s) to the private Artifactory - name: Upload the Package(s) to the private Artifactory
if: ${{ always() && ! inputs.conan_upload_community }} if: ${{ always() && ! inputs.conan_upload_community }}
run: | run: conan upload ${{ inputs.recipe_id_full }} -r cura-private-conan-dev --all -c
conan upload ${{ inputs.recipe_id_full }} -r cura-private --all -c
conan upload ${{ inputs.recipe_id_full }} -r cura-private-conan-dev --all -c

View File

@ -41,12 +41,12 @@ on:
branches: branches:
- main - main
- 'CURA-*' - 'CURA-*'
- '[1-9].[0-9]' - '[0-9].[0-9]'
- '[1-9].[0-9][0-9]' - '[0-9].[0-9][0-9]'
tags: tags:
- '[1-9].[0-9].[0-9]*' - '[0-9].[0-9].[0-9]*'
- '[1-9].[0-9].[0-9]' - '[0-9].[0-9].[0-9]'
- '[1-9].[0-9][0-9].[0-9]*' - '[0-9].[0-9][0-9].[0-9]*'
env: env:
CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }} CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }}
@ -102,7 +102,7 @@ jobs:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt update sudo apt update
sudo apt upgrade sudo apt upgrade
sudo apt install efibootmgr build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config flex bison g++-12 gcc-12 -y sudo apt install efibootmgr build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config flex bison libxcb-cursor-dev g++-12 gcc-12 -y
- name: Install GCC-13 - name: Install GCC-13
run: | run: |
@ -118,9 +118,6 @@ jobs:
conan config install https://github.com/Ultimaker/conan-config.git conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Set GH service account for remote cura-conan-dev
run: conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
- name: Create the Packages - name: Create the Packages
run: conan create . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} --build=missing --update -o ${{ needs.conan-recipe-version.outputs.project_name }}:devtools=True -o ${{ needs.conan-recipe-version.outputs.project_name }}:enable_i18n=True -c tools.build:skip_test=True run: conan create . ${{ needs.conan-recipe-version.outputs.recipe_id_full }} --build=missing --update -o ${{ needs.conan-recipe-version.outputs.project_name }}:devtools=True -o ${{ needs.conan-recipe-version.outputs.project_name }}:enable_i18n=True -c tools.build:skip_test=True
@ -132,9 +129,7 @@ jobs:
if: always() if: always()
run: | run: |
conan upload ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -r cura --all -c conan upload ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -r cura --all -c
conan upload ${{ needs.conan-recipe-version.outputs.recipe_id_full }} -r cura-conan-dev --all -c
conan upload ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} -r cura -c conan upload ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} -r cura -c
conan upload ${{ needs.conan-recipe-version.outputs.recipe_id_latest }} -r cura-conan-dev -c
notify-create: notify-create:
if: ${{ always() && (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }} if: ${{ always() && (github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'master' || needs.conan-recipe-version.outputs.is_release_branch == 'true')) }}

View File

@ -80,14 +80,10 @@ jobs:
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Add Cura private Artifactory remote - name: Add Cura private Artifactory remote
run: | run: conan remote add cura-private-conan-dev https://cura.jfrog.io/artifactory/api/conan/cura-private-conan-dev True
conan remote add cura-private https://ultimaker.jfrog.io/artifactory/api/conan/cura-private True
conan remote add cura-private-conan-dev https://cura.jfrog.io/artifactory/api/conan/cura-private-conan-dev True
- name: Set GH service account for remote cura-conan-dev - name: Set GH service account for remote cura-conan-dev
run: | run: conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-private-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-private-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
- name: Export the Package (binaries) - name: Export the Package (binaries)
if: ${{ inputs.conan_export_binaries }} if: ${{ inputs.conan_export_binaries }}
@ -105,14 +101,10 @@ jobs:
if: ${{ always() && inputs.conan_upload_community }} if: ${{ always() && inputs.conan_upload_community }}
run: | run: |
conan upload ${{ inputs.recipe_id_full }} -r cura --all -c conan upload ${{ inputs.recipe_id_full }} -r cura --all -c
conan upload ${{ inputs.recipe_id_full }} -r cura-conan-dev --all -c
conan upload ${{ inputs.recipe_id_latest }} -r cura -c conan upload ${{ inputs.recipe_id_latest }} -r cura -c
conan upload ${{ inputs.recipe_id_latest }} -r cura-conan-dev -c
- name: Upload the Package(s) to the private Artifactory - name: Upload the Package(s) to the private Artifactory
if: ${{ always() && ! inputs.conan_upload_community }} if: ${{ always() && ! inputs.conan_upload_community }}
run: | run: |
conan upload ${{ inputs.recipe_id_full }} -r cura-private --all -c
conan upload ${{ inputs.recipe_id_full }} -r cura-private-conan-dev --all -c conan upload ${{ inputs.recipe_id_full }} -r cura-private-conan-dev --all -c
conan upload ${{ inputs.recipe_id_latest }} -r cura-private -c
conan upload ${{ inputs.recipe_id_latest }} -r cura-private-conan-dev -c conan upload ${{ inputs.recipe_id_latest }} -r cura-private-conan-dev -c

View File

@ -111,7 +111,7 @@ jobs:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
sudo apt update sudo apt update
sudo apt upgrade sudo apt upgrade
sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config binutils coreutils desktop-file-utils fakeroot fuse libgdk-pixbuf2.0-dev patchelf squashfs-tools strace util-linux zsync -y sudo apt install build-essential checkinstall libegl-dev zlib1g-dev libssl-dev ninja-build autoconf libx11-dev libx11-xcb-dev libfontenc-dev libice-dev libsm-dev libxau-dev libxaw7-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxi-dev libxinerama-dev libxkbfile-dev libxmu-dev libxmuu-dev libxpm-dev libxrandr-dev libxrender-dev libxres-dev libxss-dev libxt-dev libxtst-dev libxv-dev libxvmc-dev libxxf86vm-dev xtrans-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-xkb-dev libxcb-icccm4-dev libxcb-image0-dev libxcb-keysyms1-dev libxcb-randr0-dev libxcb-shape0-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-xinerama0-dev xkb-data libxcb-dri3-dev uuid-dev libxcb-util-dev libxkbcommon-x11-dev pkg-config binutils coreutils desktop-file-utils fakeroot fuse libgdk-pixbuf2.0-dev patchelf squashfs-tools strace util-linux zsync libxcb-cursor-dev -y
# Get the AppImage tool # Get the AppImage tool
wget --no-check-certificate --quiet https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O $GITHUB_WORKSPACE/appimagetool wget --no-check-certificate --quiet https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage -O $GITHUB_WORKSPACE/appimagetool
@ -143,9 +143,6 @@ jobs:
conan config install https://github.com/Ultimaker/conan-config.git conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Set GH service account for remote cura-conan-dev
run: conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
- name: Use Conan download cache (Bash) - name: Use Conan download cache (Bash)
run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache"

View File

@ -145,16 +145,13 @@ jobs:
p12-password: ${{ secrets.MACOS_CERT_PASSPHRASE }} p12-password: ${{ secrets.MACOS_CERT_PASSPHRASE }}
- name: Remove private Artifactory - name: Remove private Artifactory
run: conan remote remove cura-conan-private || true run: conan remote remove cura-private-conan-dev || true
- name: Get Conan configuration - name: Get Conan configuration
run: | run: |
conan config install https://github.com/Ultimaker/conan-config.git conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Set GH service account for remote cura-conan-dev
run: conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
- name: Use Conan download cache (Bash) - name: Use Conan download cache (Bash)
run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache" run: conan config set storage.download_cache="$HOME/.conan/conan_download_cache"

View File

@ -118,9 +118,6 @@ jobs:
conan config install https://github.com/Ultimaker/conan-config.git conan config install https://github.com/Ultimaker/conan-config.git
conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}" conan config install https://github.com/Ultimaker/conan-config.git -a "-b runner/${{ runner.os }}/${{ runner.arch }}"
- name: Set GH service account for remote cura-conan-dev
run: conan user -p ${{ secrets.CONAN_GH_RUNNER_PASS }} -r cura-conan-dev "${{ secrets.CONAN_GH_RUNNER_USER }}"
- name: Use Conan download cache (Powershell) - name: Use Conan download cache (Powershell)
run: conan config set storage.download_cache="C:\Users\runneradmin\.conan\conan_download_cache" run: conan config set storage.download_cache="C:\Users\runneradmin\.conan\conan_download_cache"
@ -143,13 +140,13 @@ jobs:
.\cura_inst\Scripts\activate_github_actions_env.ps1 .\cura_inst\Scripts\activate_github_actions_env.ps1
.\cura_inst\Scripts\activate_github_actions_version_env.ps1 .\cura_inst\Scripts\activate_github_actions_version_env.ps1
- name: Install OpenSSL shared # - name: Install OpenSSL shared
run: conan install openssl/1.1.1l@_/_ --build=missing --update -o openssl:shared=True -g deploy # run: conan install openssl/1.1.1l@_/_ --build=missing --update -o openssl:shared=True -g deploy
#
- name: Copy OpenSSL shared (Powershell) # - name: Copy OpenSSL shared (Powershell)
run: | # run: |
cp openssl/bin/*.dll ./cura_inst/Scripts/ # cp openssl/bin/*.dll ./cura_inst/Scripts/
cp openssl/lib/*.lib ./cura_inst/Lib/ # cp openssl/lib/*.lib ./cura_inst/Lib/
- name: Create the Cura dist - name: Create the Cura dist
run: pyinstaller ./cura_inst/UltiMaker-Cura.spec run: pyinstaller ./cura_inst/UltiMaker-Cura.spec

View File

@ -12,7 +12,7 @@
[![Badge Test]][Test] [![Badge Test]][Test]
[![Badge Conan]][Conan] [![Badge Conan]][Conan]
![Badge Downloads] [![Badge Downloads]][Downloads]
<br> <br>
<br> <br>
@ -67,6 +67,7 @@
[Issues]: https://github.com/Ultimaker/Cura/issues [Issues]: https://github.com/Ultimaker/Cura/issues
[Conan]: https://github.com/Ultimaker/Cura/actions/workflows/conan-package.yml [Conan]: https://github.com/Ultimaker/Cura/actions/workflows/conan-package.yml
[Test]: https://github.com/Ultimaker/Cura/actions/workflows/unit-test.yml [Test]: https://github.com/Ultimaker/Cura/actions/workflows/unit-test.yml
[Downloads]: https://github.com/Ultimaker/Cura/releases/latest
[License]: LICENSE [License]: LICENSE
[Report]: docs/Report.md [Report]: docs/Report.md
@ -81,8 +82,8 @@
[Badge License]: https://img.shields.io/badge/License-LGPL3-336887.svg?style=for-the-badge&labelColor=458cb5&logoColor=white&logo=GNU [Badge License]: https://img.shields.io/badge/License-LGPL3-336887.svg?style=for-the-badge&labelColor=458cb5&logoColor=white&logo=GNU
[Badge Closed]: https://img.shields.io/github/issues-closed/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=629944&color=446a30&logo=AddThis [Badge Closed]: https://img.shields.io/github/issues-closed/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=629944&color=446a30&logo=AddThis
[Badge Issues]: https://img.shields.io/github/issues/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=c34360&color=933349&logo=AdBlock [Badge Issues]: https://img.shields.io/github/issues/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=c34360&color=933349&logo=AdBlock
[Badge Conan]: https://img.shields.io/github/workflow/status/Ultimaker/Cura/conan-package?style=for-the-badge&logoColor=white&labelColor=6185aa&color=4c6987&logo=Conan&label=Conan%20Package [Badge Conan]: https://img.shields.io/github/actions/workflow/status/Ultimaker/Cura/conan-package.yml?branch=main&style=for-the-badge&logoColor=white&labelColor=6185aa&color=4c6987&logo=Conan&label=Conan%20Package
[Badge Test]: https://img.shields.io/github/workflow/status/Ultimaker/Cura/unit-test?style=for-the-badge&logoColor=white&labelColor=4a999d&color=346c6e&logo=Codacy&label=Unit%20Test [Badge Test]: https://img.shields.io/github/actions/workflow/status/Ultimaker/Cura/unit-test.yml?branch=main&style=for-the-badge&logoColor=white&labelColor=4a999d&color=346c6e&logo=Codacy&label=Unit%20Test
[Badge Size]: https://img.shields.io/github/repo-size/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=715a97&color=584674&logo=GoogleAnalytics [Badge Size]: https://img.shields.io/github/repo-size/ultimaker/cura?style=for-the-badge&logoColor=white&labelColor=715a97&color=584674&logo=GoogleAnalytics
[Badge Downloads]: https://img.shields.io/github/downloads-pre/Ultimaker/Cura/latest/total?style=for-the-badge [Badge Downloads]: https://img.shields.io/github/downloads-pre/Ultimaker/Cura/latest/total?style=for-the-badge

View File

@ -322,7 +322,7 @@ class CuraConan(ConanFile):
self.requires("curaengine_grpc_definitions/0.1.0") self.requires("curaengine_grpc_definitions/0.1.0")
self.requires("zlib/1.2.13") self.requires("zlib/1.2.13")
self.requires("pyarcus/5.3.0") self.requires("pyarcus/5.3.0")
self.requires("dulcificum/(latest)@ultimaker/stable") self.requires("dulcificum/0.1.0-beta.1")
self.requires("curaengine/(latest)@ultimaker/testing") self.requires("curaengine/(latest)@ultimaker/testing")
self.requires("pysavitar/5.3.0") self.requires("pysavitar/5.3.0")
self.requires("pynest2d/5.3.0") self.requires("pynest2d/5.3.0")
@ -338,7 +338,7 @@ class CuraConan(ConanFile):
def build_requirements(self): def build_requirements(self):
if self.options.get_safe("enable_i18n", False): if self.options.get_safe("enable_i18n", False):
self.tool_requires("gettext/0.21@ultimaker/testing", force_host_context = True) self.tool_requires("gettext/0.21", force_host_context = True)
def layout(self): def layout(self):
self.folders.source = "." self.folders.source = "."

View File

@ -120,6 +120,8 @@ class BuildVolume(SceneNode):
# Objects loaded at the moment. We are connected to the property changed events of these objects. # Objects loaded at the moment. We are connected to the property changed events of these objects.
self._scene_objects = set() # type: Set[SceneNode] self._scene_objects = set() # type: Set[SceneNode]
# Number of toplevel printable meshes. If there is more than one, the build volume needs to take account of the gantry height in One at a Time printing.
self._root_printable_object_count = 0
self._scene_change_timer = QTimer() self._scene_change_timer = QTimer()
self._scene_change_timer.setInterval(200) self._scene_change_timer.setInterval(200)
@ -151,6 +153,7 @@ class BuildVolume(SceneNode):
def _onSceneChangeTimerFinished(self): def _onSceneChangeTimerFinished(self):
root = self._application.getController().getScene().getRoot() root = self._application.getController().getScene().getRoot()
new_scene_objects = set(node for node in BreadthFirstIterator(root) if node.callDecoration("isSliceable")) new_scene_objects = set(node for node in BreadthFirstIterator(root) if node.callDecoration("isSliceable"))
if new_scene_objects != self._scene_objects: if new_scene_objects != self._scene_objects:
for node in new_scene_objects - self._scene_objects: #Nodes that were added to the scene. for node in new_scene_objects - self._scene_objects: #Nodes that were added to the scene.
self._updateNodeListeners(node) self._updateNodeListeners(node)
@ -166,6 +169,26 @@ class BuildVolume(SceneNode):
self.rebuild() self.rebuild()
self._scene_objects = new_scene_objects self._scene_objects = new_scene_objects
# This also needs to be called when objects are grouped/ungrouped,
# which is not reflected in a change in self._scene_objects
self._updateRootPrintableObjectCount()
def _updateRootPrintableObjectCount(self):
# Get the number of models in the scene root, excluding modifier meshes and counting grouped models as 1
root = self._application.getController().getScene().getRoot()
scene_objects = set(node for node in BreadthFirstIterator(root) if node.callDecoration("isSliceable") or node.callDecoration("isGroup"))
new_root_printable_object_count = len(list(node for node in scene_objects if node.getParent() == root and not (
node_stack := node.callDecoration("getStack") and (
node.callDecoration("getStack").getProperty("anti_overhang_mesh", "value") or
node.callDecoration("getStack").getProperty("support_mesh", "value") or
node.callDecoration("getStack").getProperty("cutting_mesh", "value") or
node.callDecoration("getStack").getProperty("infill_mesh", "value")
))
))
if new_root_printable_object_count != self._root_printable_object_count:
self._root_printable_object_count = new_root_printable_object_count
self._onSettingPropertyChanged("print_sequence", "value") # Create fake event, so right settings are triggered. self._onSettingPropertyChanged("print_sequence", "value") # Create fake event, so right settings are triggered.
def _updateNodeListeners(self, node: SceneNode): def _updateNodeListeners(self, node: SceneNode):
@ -650,7 +673,7 @@ class BuildVolume(SceneNode):
self._width = self._global_container_stack.getProperty("machine_width", "value") self._width = self._global_container_stack.getProperty("machine_width", "value")
machine_height = self._global_container_stack.getProperty("machine_height", "value") machine_height = self._global_container_stack.getProperty("machine_height", "value")
if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1: if self._global_container_stack.getProperty("print_sequence", "value") == "one_at_a_time" and self._root_printable_object_count > 1:
new_height = min(self._global_container_stack.getProperty("gantry_height", "value") * self._scale_vector.z, machine_height) new_height = min(self._global_container_stack.getProperty("gantry_height", "value") * self._scale_vector.z, machine_height)
if self._height > new_height: if self._height > new_height:
@ -692,9 +715,12 @@ class BuildVolume(SceneNode):
update_extra_z_clearance = True update_extra_z_clearance = True
for setting_key in self._changed_settings_since_last_rebuild: for setting_key in self._changed_settings_since_last_rebuild:
if setting_key in ["print_sequence", "support_mesh", "infill_mesh", "cutting_mesh", "anti_overhang_mesh"]:
self._updateRootPrintableObjectCount()
if setting_key == "print_sequence": if setting_key == "print_sequence":
machine_height = self._global_container_stack.getProperty("machine_height", "value") machine_height = self._global_container_stack.getProperty("machine_height", "value")
if self._application.getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and len(self._scene_objects) > 1: if self._application.getGlobalContainerStack().getProperty("print_sequence", "value") == "one_at_a_time" and self._root_printable_object_count > 1:
new_height = min( new_height = min(
self._global_container_stack.getProperty("gantry_height", "value") * self._scale_vector.z, self._global_container_stack.getProperty("gantry_height", "value") * self._scale_vector.z,
machine_height) machine_height)

View File

@ -10,13 +10,16 @@ class VariantDatabaseHandler(DatabaseMetadataContainerController):
"""The Database handler for Variant containers""" """The Database handler for Variant containers"""
def __init__(self): def __init__(self):
super().__init__(SQLQueryFactory(table = "variant", super().__init__(SQLQueryFactory(
fields = { table="variant",
"id": "text", fields={
"name": "text", "id": "text",
"hardware_type": "text", "name": "text",
"definition": "text", "hardware_type": "text",
"version": "text", "definition": "text",
"setting_version": "text" "version": "text",
})) "setting_version": "text",
"reference_extruder_id": "text",
},
))
self._container_type = InstanceContainer self._container_type = InstanceContainer

View File

@ -50,60 +50,6 @@ class MakerbotWriter(MeshWriter):
{"prefix": "thumbnail", "width": 90, "height": 90}, {"prefix": "thumbnail", "width": 90, "height": 90},
] ]
_META_VERSION = "3.0.0" _META_VERSION = "3.0.0"
_PRINT_NAME_MAP = {
"UltiMaker Method": "fire_e",
"UltiMaker Method X": "lava_f",
"UltiMaker Method XL": "magma_10",
}
_EXTRUDER_NAME_MAP = {
"1XA": "mk14_hot",
"2XA": "mk14_hot_s",
"1C": "mk14_c",
"1A": "mk14",
"2A": "mk14_s",
"LABS": "mk14_e",
}
_MATERIAL_MAP = {"2780b345-577b-4a24-a2c5-12e6aad3e690": "abs",
"88c8919c-6a09-471a-b7b6-e801263d862d": "abs-wss1",
"416eead4-0d8e-4f0b-8bfc-a91a519befa5": "asa",
"85bbae0e-938d-46fb-989f-c9b3689dc4f0": "nylon-cf",
"283d439a-3490-4481-920c-c51d8cdecf9c": "nylon",
"62414577-94d1-490d-b1e4-7ef3ec40db02": "pc",
"69386c85-5b6c-421a-bec5-aeb1fb33f060": "petg",
"0ff92885-617b-4144-a03c-9989872454bc": "pla",
"a4255da2-cb2a-4042-be49-4a83957a2f9a": "pva",
"a140ef8f-4f26-4e73-abe0-cfc29d6d1024": "wss1",
"77873465-83a9-4283-bc44-4e542b8eb3eb": "sr30",
"96fca5d9-0371-4516-9e96-8e8182677f3c": "im-pla",
"9f52c514-bb53-46a6-8c0c-d507cd6ee742": "abs",
"0f9a2a91-f9d6-4b6b-bd9b-a120a29391be": "abs",
"d3e972f2-68c0-4d2f-8cfd-91028dfc3381": "abs",
"495a0ce5-9daf-4a16-b7b2-06856d82394d": "abs-cf10",
"cb76bd6e-91fd-480c-a191-12301712ec77": "abs-wss1",
"a017777e-3f37-4d89-a96c-dc71219aac77": "abs-wss1",
"4d96000d-66de-4d54-a580-91827dcfd28f": "abs-wss1",
"0ecb0e1a-6a66-49fb-b9ea-61a8924e0cf5": "asa",
"efebc2ea-2381-4937-926f-e824524524a5": "asa",
"b0199512-5714-4951-af85-be19693430f8": "asa",
"b9f55a0a-a2b6-4b8d-8d48-07802c575bd1": "pla",
"c439d884-9cdc-4296-a12c-1bacae01003f": "pla",
"16a723e3-44df-49f4-82ec-2a1173c1e7d9": "pla",
"74d0f5c2-fdfd-4c56-baf1-ff5fa92d177e": "pla",
"64dcb783-470d-4400-91b1-7001652f20da": "pla",
"3a1b479b-899c-46eb-a2ea-67050d1a4937": "pla",
"4708ac49-5dde-4cc2-8c0a-87425a92c2b3": "pla",
"4b560eda-1719-407f-b085-1c2c1fc8ffc1": "pla",
"e10a287d-0067-4a58-9083-b7054f479991": "im-pla",
"01a6b5b0-fab1-420c-a5d9-31713cbeb404": "im-pla",
"f65df4ad-a027-4a48-a51d-975cc8b87041": "im-pla",
"f48739f8-6d96-4a3d-9a2e-8505a47e2e35": "im-pla",
"5c7d7672-e885-4452-9a78-8ba90ec79937": "petg",
"91e05a6e-2f5b-4964-b973-d83b5afe6db4": "petg",
"bdc7dd03-bf38-48ee-aeca-c3e11cee799e": "petg",
"54f66c89-998d-4070-aa60-1cb0fd887518": "nylon",
"002c84b3-84ac-4b5a-b57d-fe1f555a6351": "pva",
"e4da5fcb-f62d-48a2-aaef-0b645aa6973b": "wss1",
"77f06146-6569-437d-8380-9edb0d635a32": "sr30"}
# must be called from the main thread because of OpenGL # must be called from the main thread because of OpenGL
@staticmethod @staticmethod
@ -198,7 +144,7 @@ class MakerbotWriter(MeshWriter):
meta = dict() meta = dict()
meta["bot_type"] = MakerbotWriter._PRINT_NAME_MAP.get((name := global_stack.definition.name), name) meta["bot_type"] = global_stack.definition.getMetaDataEntry("reference_machine_id")
bounds: Optional[AxisAlignedBox] = None bounds: Optional[AxisAlignedBox] = None
for node in nodes: for node in nodes:
@ -240,12 +186,7 @@ class MakerbotWriter(MeshWriter):
meta["uuid"] = print_information.slice_uuid meta["uuid"] = print_information.slice_uuid
materials = [] materials = [extruder.material.getMetaData().get("reference_material_id") for extruder in extruders]
for extruder in extruders:
guid = extruder.material.getMetaData().get("GUID")
material_name = extruder.material.getMetaData().get("material")
material = self._MATERIAL_MAP.get(guid, material_name)
materials.append(material)
meta["material"] = materials[0] meta["material"] = materials[0]
meta["materials"] = materials meta["materials"] = materials
@ -257,8 +198,7 @@ class MakerbotWriter(MeshWriter):
meta["model_counts"] = [{"count": 1, "name": node.getName()} for node in nodes] meta["model_counts"] = [{"count": 1, "name": node.getName()} for node in nodes]
tool_types = [MakerbotWriter._EXTRUDER_NAME_MAP.get((name := extruder.variant.getName()), name) for extruder in tool_types = [extruder.variant.getMetaDataEntry("reference_extruder_id") for extruder in extruders]
extruders]
meta["tool_type"] = tool_types[0] meta["tool_type"] = tool_types[0]
meta["tool_types"] = tool_types meta["tool_types"] = tool_types

View File

@ -24,7 +24,8 @@
# - Example line on LCD: 1/479 | ET 2h13m # - Example line on LCD: 1/479 | ET 2h13m
# - Time to Pauses changes the M117/M118 lines to countdown to the next pause as 1/479 | TP 2h36m # - Time to Pauses changes the M117/M118 lines to countdown to the next pause as 1/479 | TP 2h36m
# - 'Add M118 Line' is available with either option. M118 will bounce the message back to a remote print server through the USB connection. # - 'Add M118 Line' is available with either option. M118 will bounce the message back to a remote print server through the USB connection.
# - Enable 'Finish-Time' Message - when enabled, takes the Print Time, adds 15 minutes for print start-up, and calculates when the print will end. It takes into account the Time Fudge Factor. The user may enter a print start time. This is also available for Display Filename. # - 'Add M73 Line' is used by 'Display Progress' only. There are options to incluse M73 P(percent) and M73 R(time remaining)
# - Enable 'Finish-Time' Message - when enabled, takes the Print Time and calculates when the print will end. It takes into account the Time Fudge Factor. The user may enter a print start time. This is also available for Display Filename.
from ..Script import Script from ..Script import Script
from UM.Application import Application from UM.Application import Application
@ -34,6 +35,7 @@ import configparser
from UM.Preferences import Preferences from UM.Preferences import Preferences
import time import time
import datetime import datetime
import math
from UM.Message import Message from UM.Message import Message
class DisplayInfoOnLCD(Script): class DisplayInfoOnLCD(Script):
@ -118,14 +120,38 @@ class DisplayInfoOnLCD(Script):
"add_m118_line": "add_m118_line":
{ {
"label": "Add M118 Line", "label": "Add M118 Line",
"description": "Adds M118 in addition to the M117. It will bounce the message back through the USB port to a computer print server (if a printer server is enabled).", "description": "Adds M118 in addition to the M117. It will bounce the message back through the USB port to a computer print server (if a printer server like Octoprint or Pronterface is in use).",
"type": "bool", "type": "bool",
"default_value": false "default_value": false
}, },
"add_m73_line":
{
"label": "Add M73 Line(s)",
"description": "Adds M73 in addition to the M117. For some firmware this will set the printers time and or percentage.",
"type": "bool",
"default_value": false,
"enabled": "display_option == 'display_progress'"
},
"add_m73_percent":
{
"label": " Add M73 Percentage",
"description": "Adds M73 with the P parameter. For some firmware this will set the printers 'percentage' of layers completed and it will count upward.",
"type": "bool",
"default_value": false,
"enabled": "add_m73_line and display_option == 'display_progress'"
},
"add_m73_time":
{
"label": " Add M73 Time",
"description": "Adds M73 with the R parameter. For some firmware this will set the printers 'print time' and it will count downward.",
"type": "bool",
"default_value": false,
"enabled": "add_m73_line and display_option == 'display_progress'"
},
"speed_factor": "speed_factor":
{ {
"label": "Time Fudge Factor %", "label": "Time Fudge Factor %",
"description": "When using 'Display Progress' tweak this value to get better estimates. ([Actual Print Time]/[Cura Estimate]) x 100 = Time Fudge Factor. If Cura estimated 9hr and the print actually took 10hr30min then enter 117 here to adjust any estimate closer to reality. This Fudge Factor is also used to calculate the time that the print will end if you were to start it 15 minutes after slicing.", "description": "When using 'Display Progress' tweak this value to get better estimates. ([Actual Print Time]/[Cura Estimate]) x 100 = Time Fudge Factor. If Cura estimated 9hr and the print actually took 10hr30min then enter 117 here to adjust any estimate closer to reality. This Fudge Factor is also used to calculate the print finish time.",
"type": "float", "type": "float",
"unit": "%", "unit": "%",
"default_value": 100, "default_value": 100,
@ -134,7 +160,7 @@ class DisplayInfoOnLCD(Script):
"countdown_to_pause": "countdown_to_pause":
{ {
"label": "Countdown to Pauses", "label": "Countdown to Pauses",
"description": "When enabled - DisplayInfoOnLCD must run AFTER all PauseAtHeight and Filament Change scripts. Instead of layer number and remaining print time the LCD will show 'layers remaining before pause/filament change and the time to pause/filament change' (TP).", "description": "Instead of the remaining print time the LCD will show the estimated time to pause (TP).",
"type": "bool", "type": "bool",
"default_value": false, "default_value": false,
"enabled": "display_option == 'display_progress'" "enabled": "display_option == 'display_progress'"
@ -142,7 +168,7 @@ class DisplayInfoOnLCD(Script):
"enable_end_message": "enable_end_message":
{ {
"label": "Enable 'Finish-Time' Message", "label": "Enable 'Finish-Time' Message",
"description": "Get a message when you save a fresh slice. It will show the estimated date and time that the print would finish (with a 15 minute lag from the end of slicing to the start of the print).", "description": "Get a message when you save a fresh slice. It will show the estimated date and time that the print would finish.",
"type": "bool", "type": "bool",
"default_value": true, "default_value": true,
"enabled": true "enabled": true
@ -150,7 +176,7 @@ class DisplayInfoOnLCD(Script):
"print_start_time": "print_start_time":
{ {
"label": "Print Start Time (Ex 16:45)", "label": "Print Start Time (Ex 16:45)",
"description": "Use 'Military' time. 16:45 would be 4:45PM. 09:30 would be 9:30AM. If you leave this blank it will be assumed that the print start will 15 minutes after slicing.", "description": "Use 'Military' time. 16:45 would be 4:45PM. 09:30 would be 9:30AM. If you leave this blank it will be assumed that the print will start Now. If you enter a guesstimate of your printer start time and that time is before 'Now' the guesstimate will consider that the print will start tomorrow at the entered time. ",
"type": "str", "type": "str",
"default_value": "", "default_value": "",
"unit": "hrs ", "unit": "hrs ",
@ -163,6 +189,9 @@ class DisplayInfoOnLCD(Script):
def execute(self, data): def execute(self, data):
display_option = self.getSettingValueByKey("display_option") display_option = self.getSettingValueByKey("display_option")
add_m118_line = self.getSettingValueByKey("add_m118_line") add_m118_line = self.getSettingValueByKey("add_m118_line")
add_m73_line = self.getSettingValueByKey("add_m73_line")
add_m73_time = self.getSettingValueByKey("add_m73_time")
add_m73_percent = self.getSettingValueByKey("add_m73_percent")
# This is Display Filename and Layer on LCD--------------------------------------------------------- # This is Display Filename and Layer on LCD---------------------------------------------------------
if display_option == "filename_layer": if display_option == "filename_layer":
@ -217,6 +246,12 @@ class DisplayInfoOnLCD(Script):
display_total_layers = self.getSettingValueByKey("display_total_layers") display_total_layers = self.getSettingValueByKey("display_total_layers")
display_remaining_time = self.getSettingValueByKey("display_remaining_time") display_remaining_time = self.getSettingValueByKey("display_remaining_time")
speed_factor = self.getSettingValueByKey("speed_factor") / 100 speed_factor = self.getSettingValueByKey("speed_factor") / 100
m73_time = False
m73_percent = False
if add_m73_line and add_m73_time:
m73_time = True
if add_m73_line and add_m73_percent:
m73_percent = True
# initialize global variables # initialize global variables
first_layer_index = 0 first_layer_index = 0
time_total = 0 time_total = 0
@ -235,27 +270,26 @@ class DisplayInfoOnLCD(Script):
mmm = round((hhh % 1) * 60) mmm = round((hhh % 1) * 60)
orig_hhh = cura_time/3600 orig_hhh = cura_time/3600
orig_hr = round(orig_hhh // 1) orig_hr = round(orig_hhh // 1)
orig_min = int((cura_time - (orig_hr * 3600))/60) # Not rounded up orig_mmm = math.floor((orig_hhh % 1) * 60)
orig_mmm = round((orig_hhh % 1) * 60) # Rounded up orig_sec = round((((orig_hhh % 1) * 60) % 1) * 60)
orig_sec = round(cura_time - orig_hr * 3600 - orig_min * 60)
if add_m118_line: lines.insert(tindex + 3,"M118 Adjusted Print Time " + str(hr) + "hr " + str(mmm) + "min") if add_m118_line: lines.insert(tindex + 3,"M118 Adjusted Print Time " + str(hr) + "hr " + str(mmm) + "min")
lines.insert(tindex + 3,"M117 ET " + str(hr) + "hr " + str(mmm) + "min") lines.insert(tindex + 3,"M117 ET " + str(hr) + "hr " + str(mmm) + "min")
# If Countdown to pause is enabled then count the pauses and/or filament changes # add M73 line at beginning
mins = int(60 * hr + mmm)
if m73_time:
lines.insert(tindex + 3, "M73 R{}".format(mins))
if m73_percent:
lines.insert(tindex + 3, "M73 P0")
# If Countdonw to pause is enabled then count the pauses
pause_str = "" pause_str = ""
if bool(self.getSettingValueByKey("countdown_to_pause")): if bool(self.getSettingValueByKey("countdown_to_pause")):
pause_count = 0 pause_count = 0
filament_change_count = 0
for num in range(2,len(data) - 1, 1): for num in range(2,len(data) - 1, 1):
if "PauseAtHeight.py" in data[num]: if "PauseAtHeight.py" in data[num]:
pause_count += 1 pause_count += 1
if "M600" in data[num]:
filament_change_count += 1
if pause_count > 0:
pause_str = f" with {pause_count} pause(s)" pause_str = f" with {pause_count} pause(s)"
if filament_change_count > 0:
pause_str += f" and {filament_change_count} filament change(s)"
# This line goes in to convert seconds to hours and minutes # This line goes in to convert seconds to hours and minutes
lines.insert(tindex + 3, f";Cura Time Estimate: {cura_time}sec = {orig_hr}hr {orig_min}min {orig_sec}sec {pause_str}") lines.insert(tindex + 3, f";Cura Time Estimate: {cura_time}sec = {orig_hr}hr {orig_mmm}min {orig_sec}sec {pause_str}")
data[0] = "\n".join(lines) data[0] = "\n".join(lines)
data[len(data)-1] += "M117 Orig Cura Est " + str(orig_hr) + "hr " + str(orig_mmm) + "min\n" data[len(data)-1] += "M117 Orig Cura Est " + str(orig_hr) + "hr " + str(orig_mmm) + "min\n"
if add_m118_line: data[len(data)-1] += "M118 Est w/FudgeFactor " + str(speed_factor * 100) + "% was " + str(hr) + "hr " + str(mmm) + "min\n" if add_m118_line: data[len(data)-1] += "M118 Est w/FudgeFactor " + str(speed_factor * 100) + "% was " + str(hr) + "hr " + str(mmm) + "min\n"
@ -322,6 +356,12 @@ class DisplayInfoOnLCD(Script):
for l_index, line in enumerate(lines): for l_index, line in enumerate(lines):
if line.startswith(";LAYER:"): if line.startswith(";LAYER:"):
lines[l_index] += "\nM117 " + display_text lines[l_index] += "\nM117 " + display_text
# add M73 line
mins = int(60 * h + m)
if m73_time:
lines[l_index] += "\nM73 R{}".format(mins)
if m73_percent:
lines[l_index] += "\nM73 P" + str(round(int(current_layer) / int(number_of_layers) * 100))
if add_m118_line: if add_m118_line:
lines[l_index] += "\nM118 " + display_text lines[l_index] += "\nM118 " + display_text
break break
@ -344,7 +384,7 @@ class DisplayInfoOnLCD(Script):
if line.startswith(";TIME_ELAPSED:"): if line.startswith(";TIME_ELAPSED:"):
this_time = (float(line.split(":")[1]))*speed_factor this_time = (float(line.split(":")[1]))*speed_factor
time_list.append(str(this_time)) time_list.append(str(this_time))
if "PauseAtHeight.py" in layer or "M600" in layer: if "PauseAtHeight.py" in layer:
for qnum in range(num - 1, pause_index, -1): for qnum in range(num - 1, pause_index, -1):
time_list[qnum] = str(float(this_time) - float(time_list[qnum])) + "P" time_list[qnum] = str(float(this_time) - float(time_list[qnum])) + "P"
pause_index = num-1 pause_index = num-1
@ -380,7 +420,7 @@ class DisplayInfoOnLCD(Script):
return data return data
def message_to_user(self, speed_factor: float): def message_to_user(self, speed_factor: float):
# Message the user of the projected finish time of the print (figuring a 15 minute delay from end-of-slice to start-of-print # Message the user of the projected finish time of the print
print_time = Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601) print_time = Application.getInstance().getPrintInformation().currentPrintTime.getDisplayString(DurationFormat.Format.ISO8601)
print_start_time = self.getSettingValueByKey("print_start_time") print_start_time = self.getSettingValueByKey("print_start_time")
# If the user entered a print start time make sure it is in the correct format or ignore it. # If the user entered a print start time make sure it is in the correct format or ignore it.
@ -391,12 +431,10 @@ class DisplayInfoOnLCD(Script):
hr = int(print_start_time.split(":")[0]) hr = int(print_start_time.split(":")[0])
min = int(print_start_time.split(":")[1]) min = int(print_start_time.split(":")[1])
sec = 0 sec = 0
fifteen_minute_delay = 0
else: else:
hr = int(time.strftime("%H")) hr = int(time.strftime("%H"))
min = int(time.strftime("%M")) min = int(time.strftime("%M"))
sec = int(time.strftime("%S")) sec = int(time.strftime("%S"))
fifteen_minute_delay = 900
#Get the current data/time info #Get the current data/time info
yr = int(time.strftime("%Y")) yr = int(time.strftime("%Y"))
@ -409,7 +447,7 @@ class DisplayInfoOnLCD(Script):
pr_min = int(print_time.split(":")[1]) pr_min = int(print_time.split(":")[1])
pr_sec = int(print_time.split(":")[2]) pr_sec = int(print_time.split(":")[2])
#Adjust the print time if none was entered #Adjust the print time if none was entered
print_seconds = pr_hr*3600 + pr_min*60 + pr_sec + fifteen_minute_delay print_seconds = pr_hr*3600 + pr_min*60 + pr_sec
#Adjust the total seconds by the Fudge Factor #Adjust the total seconds by the Fudge Factor
adjusted_print_time = print_seconds * speed_factor adjusted_print_time = print_seconds * speed_factor
#Break down the adjusted seconds back into hh:mm:ss #Break down the adjusted seconds back into hh:mm:ss
@ -435,13 +473,13 @@ class DisplayInfoOnLCD(Script):
show_hr = str(new_time.strftime("%H")) + ":" show_hr = str(new_time.strftime("%H")) + ":"
show_ampm = " AM" show_ampm = " AM"
if print_start_time == "": if print_start_time == "":
start_str = "and a 15 minute lag between saving the file and starting the print." start_str = "Now"
else: else:
start_str = "and your entered 'print start time' of " + print_start_time + "hrs." start_str = "and your entered 'print start time' of " + print_start_time + "hrs."
if print_start_time != "": if print_start_time != "":
print_start_str = "Print Start Time................." + str(print_start_time) + "hrs" print_start_str = "Print Start Time................." + str(print_start_time) + "hrs"
else: else:
print_start_str = "Print Start Time.................15 minutes from now." print_start_str = "Print Start Time.................Now."
estimate_str = "Cura Time Estimate.........." + str(print_time) estimate_str = "Cura Time Estimate.........." + str(print_time)
adjusted_str = "Adjusted Time Estimate..." + str(time_change) adjusted_str = "Adjusted Time Estimate..." + str(time_change)
finish_str = week_day + " " + str(mo_str) + " " + str(new_time.strftime("%d")) + ", " + str(new_time.strftime("%Y")) + " at " + str(show_hr) + str(new_time.strftime("%M")) + str(show_ampm) finish_str = week_day + " " + str(mo_str) + " " + str(new_time.strftime("%d")) + ", " + str(new_time.strftime("%Y")) + " at " + str(show_hr) + str(new_time.strftime("%M")) + str(show_ampm)

View File

@ -130,8 +130,7 @@
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
"support_interface_density": { "value": 33.333 }, "support_interface_density": { "value": 33.333 },
"support_interface_height": { "value": "layer_height * 3" }, "support_interface_height": { "value": "layer_height * 3" },
"support_interface_pattern": { "value": "zigzag" }, "support_interface_pattern": { "value": "'zigzag'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" }, "support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 0 }, "support_wall_count": { "value": 0 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" }, "support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -131,8 +131,7 @@
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
"support_interface_density": { "value": 33.333 }, "support_interface_density": { "value": 33.333 },
"support_interface_height": { "value": "layer_height * 3" }, "support_interface_height": { "value": "layer_height * 3" },
"support_interface_pattern": { "value": "zigzag" }, "support_interface_pattern": { "value": "'zigzag'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" }, "support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 0 }, "support_wall_count": { "value": 0 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" }, "support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -118,8 +118,7 @@
"support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" }, "support_infill_rate": { "value": "0 if support_enable and support_structure == 'tree' else 20" },
"support_interface_density": { "value": 33.333 }, "support_interface_density": { "value": 33.333 },
"support_interface_height": { "value": "layer_height * 3" }, "support_interface_height": { "value": "layer_height * 3" },
"support_interface_pattern": { "value": "zigzag" }, "support_interface_pattern": { "value": "'zigzag'" },
"support_interface_skip_height": { "value": 0.2 },
"support_pattern": { "value": "'zigzag'" }, "support_pattern": { "value": "'zigzag'" },
"support_wall_count": { "value": 0 }, "support_wall_count": { "value": 0 },
"support_xy_distance": { "value": "wall_line_width_0 * 2" }, "support_xy_distance": { "value": "wall_line_width_0 * 2" },

View File

@ -59,7 +59,7 @@
"machine_width": { "default_value": 280 }, "machine_width": { "default_value": 280 },
"material_diameter": { "default_value": 1.75 }, "material_diameter": { "default_value": 1.75 },
"material_initial_print_temperature": { "value": "material_print_temperature" }, "material_initial_print_temperature": { "value": "material_print_temperature" },
"prime_tower_min_volume": { "value": "((resolveOrValue('layer_height'))/2" }, "prime_tower_min_volume": { "value": "resolveOrValue('layer_height')/2" },
"prime_tower_size": { "value": "30" }, "prime_tower_size": { "value": "30" },
"prime_tower_wipe_enabled": { "default_value": true }, "prime_tower_wipe_enabled": { "default_value": true },
"retraction_amount": { "default_value": 5 }, "retraction_amount": { "default_value": 5 },

View File

@ -0,0 +1,90 @@
{
"version": 2,
"name": "Anycubic Kobra 2",
"inherits": "fdmprinter",
"metadata":
{
"visible": true,
"author": "ThatGuyZim",
"manufacturer": "Anycubic",
"file_formats": "text/x-gcode",
"platform": "anycubic_kobra2_platform.stl",
"machine_extruder_trains": { "0": "anycubic_kobra2_extruder_0" }
},
"overrides":
{
"acceleration_enabled": { "value": true },
"acceleration_print": { "value": 2500 },
"acceleration_travel": { "value": 3000 },
"acceleration_travel_layer_0": { "value": "acceleration_travel" },
"gantry_height": { "value": "0" },
"infill_before_walls": { "value": false },
"jerk_enabled": { "value": true },
"jerk_print": { "value": 8 },
"jerk_travel": { "value": 10 },
"jerk_travel_layer_0": { "value": "jerk_travel" },
"layer_height": { "default_value": 0.2 },
"machine_center_is_zero": { "default_value": false },
"machine_depth": { "default_value": 220 },
"machine_end_gcode": { "default_value": "M104 S0 ; turn off extruder\nM140 S0 ; turn off bed\nM107 ; fan off\nG91 ;relative positioning\nG1 E-2 F3000 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 F3000 ;move Z up a bit and retract filament even more\nG28 X0 Y0 F3000 ;move X/Y to min endstops, so the head is out of the way\nG1 Y210 F3000\nM84 ;steppers off\nG90\nM300 S1318 P266" },
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
"machine_heated_bed": { "default_value": true },
"machine_height": { "default_value": 250 },
"machine_max_acceleration_e": { "value": 2500 },
"machine_max_acceleration_x": { "value": 2500 },
"machine_max_acceleration_y": { "value": 2500 },
"machine_max_acceleration_z": { "value": 800 },
"machine_max_feedrate_e": { "default_value": 100 },
"machine_max_feedrate_x": { "default_value": 300 },
"machine_max_feedrate_y": { "default_value": 250 },
"machine_max_feedrate_z": { "default_value": 40 },
"machine_max_jerk_e": { "value": 10 },
"machine_max_jerk_xy": { "value": 10 },
"machine_max_jerk_z": { "value": 2 },
"machine_name": { "default_value": "Anycubic Kobra 2" },
"machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ; use absolute coordinates\nM82 ; use absolute distances for extrusion\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nG28 ; home all axes\nM300 S1318 P266\nG1 Z5 F5000 ; lift nozzle\nG1 X5 Y0 F3000\nG1 Z0.3 ; set nozzle height\nG92 E0\nG1 X50 Y0 E20 F500 ; Extrude 20mm of filament in a 5cm line \nG92 E0 ; zero the extruded length again \nG1 E-4.5 F4800 ; Retract a little \nG92 E0\nG1 X120 F4000 ; Quickly wipe away from the filament line\nM117 ; Printing\u2026\nG5" },
"machine_width": { "default_value": 220 },
"material_bed_temperature": { "maximum_value_warning": 110 },
"material_bed_temperature_layer_0": { "maximum_value_warning": 110 },
"material_diameter": { "default_value": 1.75 },
"material_final_print_temperature": { "value": "material_print_temperature" },
"material_initial_print_temperature":
{
"maximum_value_warning": 260,
"value": "material_print_temperature + 5"
},
"material_print_temperature": { "maximum_value_warning": 260 },
"material_print_temperature_layer_0":
{
"maximum_value_warning": 260,
"value": "material_print_temperature + 5"
},
"retraction_amount": { "value": 2 },
"retraction_combing": { "value": "'off'" },
"retraction_combing_max_distance": { "value": 30 },
"retraction_min_travel": { "value": 1 },
"retraction_prime_speed": { "maximum_value_warning": 100 },
"retraction_retract_speed": { "maximum_value_warning": 100 },
"retraction_speed":
{
"maximum_value_warning": 100,
"value": 80
},
"speed_print": { "value": 80 },
"speed_support": { "value": "speed_wall_0" },
"speed_support_interface": { "value": "speed_topbottom" },
"speed_travel":
{
"maximum_value": 200.0,
"maximum_value_warning": 175.0,
"value": 125
},
"speed_travel_layer_0": { "value": "speed_travel" },
"speed_wall_x": { "value": "speed_wall" },
"top_bottom_pattern": { "default_value": "zigzag" },
"travel_avoid_supports": { "value": true },
"travel_retract_before_outer_wall": { "value": true },
"wall_line_count": { "value": 3 },
"wall_thickness": { "value": 1.2 }
}
}

View File

@ -20,15 +20,18 @@
}, },
"overrides": "overrides":
{ {
"gantry_height": { "value": 25 }, "gantry_height": { "value": 38 },
"machine_depth": { "default_value": 220 }, "machine_depth": { "default_value": 220 },
"machine_head_with_fans_polygon": "machine_head_with_fans_polygon":
{ {
"default_value": [ "default_value": [
[-20, 10], [-36, -18],
[10, 10], [-20, -42],
[10, -10], [6, -42],
[-20, -10] [30, -18],
[30, 52],
[-3, 56],
[-36, 52]
] ]
}, },
"machine_heated_bed": { "default_value": true }, "machine_heated_bed": { "default_value": true },

View File

@ -41,10 +41,9 @@
"infill_line_width": { "value": "line_width + 0.1" }, "infill_line_width": { "value": "line_width + 0.1" },
"infill_overlap": { "value": 30 }, "infill_overlap": { "value": 30 },
"infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" }, "infill_pattern": { "value": "'lines' if infill_sparse_density > 50 else 'cubic'" },
"infill_sparse_density": { "value": 20 },
"infill_wipe_dist": { "value": 0.0 }, "infill_wipe_dist": { "value": 0.0 },
"layer_height_0": { "value": 0.2 }, "layer_height_0": { "value": 0.2 },
"machine_buildplate_type": { "value": "glass" }, "machine_buildplate_type": { "value": "'glass'" },
"machine_center_is_zero": { "default_value": false }, "machine_center_is_zero": { "default_value": false },
"machine_end_gcode": { "default_value": "G91 ;use relative coordinates\nG1 E-4 F1500 ;retract the filament\nG1 X5 Y5 Z0.2 F5000 ;wipe\nG1 Z5 F1500 ;raise z\nG90 ;use absolute coordinates\nG1 X10 Y{machine_depth} F5000 ;park print head\n\nM107 ;turn off fan\nM104 S0 ;turn off hotend\nM140 S0 ;turn off heatbed\nM84 ;disable motors" }, "machine_end_gcode": { "default_value": "G91 ;use relative coordinates\nG1 E-4 F1500 ;retract the filament\nG1 X5 Y5 Z0.2 F5000 ;wipe\nG1 Z5 F1500 ;raise z\nG90 ;use absolute coordinates\nG1 X10 Y{machine_depth} F5000 ;park print head\n\nM107 ;turn off fan\nM104 S0 ;turn off hotend\nM140 S0 ;turn off heatbed\nM84 ;disable motors" },
"machine_heated_bed": { "default_value": true }, "machine_heated_bed": { "default_value": true },

View File

@ -0,0 +1,48 @@
{
"version": 2,
"name": "Flying Bear Ghost 6",
"inherits": "flyingbear_base",
"metadata":
{
"visible": true,
"author": "barrnet",
"platform": "flyingbear_platform.obj",
"platform_texture": "flyingbear_platform.png",
"quality_definition": "flyingbear_base"
},
"overrides":
{
"acceleration_enabled": { "value": false },
"acceleration_print": { "value": 1500 },
"acceleration_roofing": { "enabled": "acceleration_enabled and roofing_layer_count > 0 and top_layers > 0" },
"acceleration_travel": { "value": 3000 },
"acceleration_travel_layer_0": { "value": "acceleration_travel" },
"jerk_enabled": { "value": false },
"jerk_print": { "value": 20 },
"jerk_travel": { "value": "jerk_print" },
"jerk_travel_layer_0": { "value": "jerk_travel" },
"machine_acceleration": { "value": 1500 },
"machine_depth": { "default_value": 210 },
"machine_height": { "default_value": 210 },
"machine_max_acceleration_e": { "value": 80000 },
"machine_max_acceleration_x": { "value": 1000 },
"machine_max_acceleration_y": { "value": 1000 },
"machine_max_acceleration_z": { "value": 200 },
"machine_max_feedrate_e": { "value": 70 },
"machine_max_feedrate_x": { "value": 200 },
"machine_max_feedrate_y": { "value": 200 },
"machine_max_feedrate_z": { "value": 20 },
"machine_max_jerk_e": { "value": 5.0 },
"machine_max_jerk_xy": { "value": 15 },
"machine_max_jerk_z": { "value": 0.4 },
"machine_name": { "default_value": "Flying Bear Ghost 6" },
"machine_steps_per_mm_e": { "default_value": 405 },
"machine_steps_per_mm_x": { "default_value": 160 },
"machine_steps_per_mm_y": { "default_value": 160 },
"machine_steps_per_mm_z": { "default_value": 800 },
"machine_width": { "default_value": 255 },
"retraction_amount": { "value": 0.8 },
"retraction_extrusion_window": { "value": 1.5 },
"retraction_speed": { "default_value": 35 }
}
}

View File

@ -20,10 +20,9 @@
"cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" }, "cool_fan_full_at_height": { "value": "layer_height_0 + 2 * layer_height" },
"cool_min_layer_time": { "value": 10 }, "cool_min_layer_time": { "value": 10 },
"gantry_height": { "value": 40 }, "gantry_height": { "value": 40 },
"jerk_enabled": { "value": false },
"jerk_print": { "value": 8 }, "jerk_print": { "value": 8 },
"jerk_travel": { "value": "jerk_print" }, "jerk_travel": { "value": "jerk_print" },
"jerk_travel_layer_0": { "value": " jerk_travel" }, "jerk_travel_layer_0": { "value": "jerk_travel" },
"machine_depth": { "default_value": 235 }, "machine_depth": { "default_value": 235 },
"machine_end_gcode": { "default_value": "; SC-10 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" }, "machine_end_gcode": { "default_value": "; SC-10 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" },
"machine_head_with_fans_polygon": "machine_head_with_fans_polygon":

View File

@ -78,7 +78,7 @@
"minimum_value_warning": "0.01" "minimum_value_warning": "0.01"
}, },
"retraction_amount": { "default_value": 2 }, "retraction_amount": { "default_value": 2 },
"retraction_combing": { "value": "off" }, "retraction_combing": { "value": "'off'" },
"retraction_combing_max_distance": { "default_value": 0.5 }, "retraction_combing_max_distance": { "default_value": 0.5 },
"retraction_count_max": { "default_value": 100 }, "retraction_count_max": { "default_value": 100 },
"retraction_extrusion_window": "retraction_extrusion_window":

View File

@ -82,6 +82,6 @@
"travel_avoid_supports": { "value": true }, "travel_avoid_supports": { "value": true },
"travel_retract_before_outer_wall": { "value": true }, "travel_retract_before_outer_wall": { "value": true },
"wall_thickness": { "value": "line_width * 2" }, "wall_thickness": { "value": "line_width * 2" },
"z_seam_corner": { "value": "z_seam_corner_weighted" } "z_seam_corner": { "value": "'z_seam_corner_weighted'" }
} }
} }

View File

@ -82,6 +82,6 @@
"travel_avoid_supports": { "value": true }, "travel_avoid_supports": { "value": true },
"travel_retract_before_outer_wall": { "value": true }, "travel_retract_before_outer_wall": { "value": true },
"wall_thickness": { "value": "line_width * 2" }, "wall_thickness": { "value": "line_width * 2" },
"z_seam_corner": { "value": "z_seam_corner_weighted" } "z_seam_corner": { "value": "'z_seam_corner_weighted'" }
} }
} }

View File

@ -0,0 +1,18 @@
{
"version": 2,
"name": "Multicomp Pro MCPI-200",
"inherits": "goofoo_near",
"metadata":
{
"visible": true,
"author": "Woosh",
"manufacturer": "Multicomp Pro"
},
"overrides":
{
"machine_depth": { "default_value": 200 },
"machine_height": { "default_value": 200 },
"machine_name": { "default_value": "Multicomp Pro MCPI-200" },
"machine_width": { "default_value": 200 }
}
}

View File

@ -0,0 +1,18 @@
{
"version": 2,
"name": "Renkforce Pro 10+",
"inherits": "goofoo_near",
"metadata":
{
"visible": true,
"author": "Woosh (based on RF100.ini by Conrad Electronic SE)",
"manufacturer": "Renkforce"
},
"overrides":
{
"machine_depth": { "default_value": 360 },
"machine_height": { "default_value": 400 },
"machine_name": { "default_value": "Renkforce Pro 10+" },
"machine_width": { "default_value": 360 }
}
}

View File

@ -13,8 +13,6 @@
"machine_acceleration": { "value": 1000 }, "machine_acceleration": { "value": 1000 },
"machine_max_feedrate_e": { "value": 40 }, "machine_max_feedrate_e": { "value": 40 },
"machine_max_jerk_xy": { "value": 5 }, "machine_max_jerk_xy": { "value": 5 },
"material_print_temperature": { "value": 195 },
"retraction_speed": { "default_value": 30 },
"z_seam_corner": { "value": "'z_seam_corner_weighted'" } "z_seam_corner": { "value": "'z_seam_corner_weighted'" }
} }
} }

View File

@ -75,6 +75,7 @@
"preferred_material": "ultimaker_absr_175", "preferred_material": "ultimaker_absr_175",
"preferred_quality_type": "draft", "preferred_quality_type": "draft",
"preferred_variant_name": "1XA", "preferred_variant_name": "1XA",
"reference_machine_id": "lava_f",
"supports_network_connection": true, "supports_network_connection": true,
"supports_usb_connection": false, "supports_usb_connection": false,
"variant_definition": "ultimaker_methodx", "variant_definition": "ultimaker_methodx",

View File

@ -25,6 +25,7 @@
], ],
"platform_texture": "MakerbotMethod.png", "platform_texture": "MakerbotMethod.png",
"preferred_quality_type": "draft", "preferred_quality_type": "draft",
"reference_machine_id": "magma_10",
"supports_network_connection": true, "supports_network_connection": true,
"supports_usb_connection": false, "supports_usb_connection": false,
"variants_name": "Extruder", "variants_name": "Extruder",

View File

@ -47,10 +47,8 @@
"infill_enable_travel_optimization": { "value": "True" }, "infill_enable_travel_optimization": { "value": "True" },
"infill_line_width": { "value": "round(line_width * 1.1, 2)" }, "infill_line_width": { "value": "round(line_width * 1.1, 2)" },
"infill_pattern": { "value": "'gyroid'" }, "infill_pattern": { "value": "'gyroid'" },
"initial_layer_line_width_factor": { "value": "100" },
"layer_height_0": { "value": "layer_height" }, "layer_height_0": { "value": "layer_height" },
"line_width": { "value": "machine_nozzle_size" }, "machine_buildplate_type": { "value": "'glass'" },
"machine_buildplate_type": { "value": "glass" },
"machine_center_is_zero": { "default_value": false }, "machine_center_is_zero": { "default_value": false },
"machine_depth": { "default_value": 220 }, "machine_depth": { "default_value": 220 },
"machine_end_gcode": { "default_value": "G91\nG1 E-1 F600\nG1 Z+1 E-3 X-20 Y-20 F4800\nM104 S0\nM106 S0\nM140 S0\nM220 S100\nM221 S100\nG28\nG90\nM84\n;\n" }, "machine_end_gcode": { "default_value": "G91\nG1 E-1 F600\nG1 Z+1 E-3 X-20 Y-20 F4800\nM104 S0\nM106 S0\nM140 S0\nM220 S100\nM221 S100\nG28\nG90\nM84\n;\n" },

View File

@ -222,7 +222,7 @@
"raft_surface_speed": { "value": 40.0 }, "raft_surface_speed": { "value": 40.0 },
"raft_surface_thickness": { "value": 0.25 }, "raft_surface_thickness": { "value": 0.25 },
"retraction_amount": { "default_value": 3 }, "retraction_amount": { "default_value": 3 },
"retraction_combing": { "value": "off" }, "retraction_combing": { "value": "'off'" },
"retraction_extrusion_window": { "value": 1.0 }, "retraction_extrusion_window": { "value": 1.0 },
"retraction_hop_after_extruder_switch": { "default_value": false }, "retraction_hop_after_extruder_switch": { "default_value": false },
"retraction_min_travel": { "value": 0.8 }, "retraction_min_travel": { "value": 0.8 },

View File

@ -46,10 +46,8 @@
"infill_enable_travel_optimization": { "value": "True" }, "infill_enable_travel_optimization": { "value": "True" },
"infill_line_width": { "value": "round(line_width * 1.1, 2)" }, "infill_line_width": { "value": "round(line_width * 1.1, 2)" },
"infill_pattern": { "value": "'gyroid'" }, "infill_pattern": { "value": "'gyroid'" },
"initial_layer_line_width_factor": { "value": "100" },
"layer_height_0": { "value": "layer_height" }, "layer_height_0": { "value": "layer_height" },
"line_width": { "value": "machine_nozzle_size" }, "machine_buildplate_type": { "value": "'glass'" },
"machine_buildplate_type": { "value": "glass" },
"machine_center_is_zero": { "default_value": false }, "machine_center_is_zero": { "default_value": false },
"machine_depth": { "default_value": 200 }, "machine_depth": { "default_value": 200 },
"machine_end_gcode": { "default_value": ";---- Ending Script Start ----\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-4 F300 ;retract the filament a bit before lifting the nozzle to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F5000 ;move Z up a bit and retract filament even more\nG28 Z0 ;move bed down\nG28 X0 Y0 ;move X/Y to min endstops so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;switch off cooling fan\nM355 S0 P0 ;switch off case light\n;---- Ending Script End ----\n" }, "machine_end_gcode": { "default_value": ";---- Ending Script Start ----\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-4 F300 ;retract the filament a bit before lifting the nozzle to release some of the pressure\nG1 Z+0.5 E-5 X-20 Y-20 F5000 ;move Z up a bit and retract filament even more\nG28 Z0 ;move bed down\nG28 X0 Y0 ;move X/Y to min endstops so the head is out of the way\nM84 ;steppers off\nG90 ;absolute positioning\nM107 ;switch off cooling fan\nM355 S0 P0 ;switch off case light\n;---- Ending Script End ----\n" },

View File

@ -0,0 +1,16 @@
{
"version": 2,
"name": "Extruder 1",
"inherits": "fdmextruder",
"metadata":
{
"machine": "anycubic_kobra2",
"position": "0"
},
"overrides":
{
"extruder_nr": { "default_value": 0 },
"machine_nozzle_size": { "default_value": 0.4 },
"material_diameter": { "default_value": 1.75 }
}
}

Binary file not shown.

View File

@ -0,0 +1,13 @@
[general]
definition = flyingbear_ghost_6
name = 0.25mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.25

View File

@ -0,0 +1,13 @@
[general]
definition = flyingbear_ghost_6
name = 0.3mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.3

View File

@ -0,0 +1,13 @@
[general]
definition = flyingbear_ghost_6
name = 0.4mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.4

View File

@ -0,0 +1,13 @@
[general]
definition = flyingbear_ghost_6
name = 0.5mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.5

View File

@ -0,0 +1,13 @@
[general]
definition = flyingbear_ghost_6
name = 0.6mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.6

View File

@ -0,0 +1,13 @@
[general]
definition = flyingbear_ghost_6
name = 0.8mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.8

View File

@ -0,0 +1,13 @@
[general]
definition = multicomp_mcpi200
name = 0.2mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.2

View File

@ -0,0 +1,13 @@
[general]
definition = multicomp_mcpi200
name = 0.4mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.4

View File

@ -0,0 +1,13 @@
[general]
definition = multicomp_mcpi200
name = 0.6mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.6

View File

@ -0,0 +1,13 @@
[general]
definition = multicomp_mcpi200
name = 0.8mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.8

View File

@ -0,0 +1,13 @@
[general]
definition = multicomp_mcpi200
name = 1.0mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 1.0

View File

@ -0,0 +1,13 @@
[general]
definition = renkforce_pro10plus
name = 0.2mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.2

View File

@ -0,0 +1,13 @@
[general]
definition = renkforce_pro10plus
name = 0.4mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.4

View File

@ -0,0 +1,13 @@
[general]
definition = renkforce_pro10plus
name = 0.6mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.6

View File

@ -0,0 +1,13 @@
[general]
definition = renkforce_pro10plus
name = 0.8mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 0.8

View File

@ -0,0 +1,13 @@
[general]
definition = renkforce_pro10plus
name = 1.0mm Nozzle
version = 4
[metadata]
hardware_type = nozzle
setting_version = 22
type = variant
[values]
machine_nozzle_size = 1.0

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_c
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_hot
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_hot_s
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_e
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_c
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_hot
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_hot_s
setting_version = 22 setting_version = 22
type = variant type = variant

View File

@ -5,6 +5,7 @@ version = 4
[metadata] [metadata]
hardware_type = nozzle hardware_type = nozzle
reference_extruder_id = mk14_e
setting_version = 22 setting_version = 22
type = variant type = variant