mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Merge branch 'main' into 5.7-merge-to-main
This commit is contained in:
commit
772692250f
78 changed files with 15278 additions and 258 deletions
9
.github/ISSUE_TEMPLATE/SlicingCrash.yaml
vendored
9
.github/ISSUE_TEMPLATE/SlicingCrash.yaml
vendored
|
@ -5,11 +5,10 @@ body:
|
|||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
### 💥 Slicing Crash Analysis Tool 💥
|
||||
We are taking steps to analyze an increase in reported crashes more systematically. We'll need some help with that. 😇
|
||||
Before filling out the report below, we want you to try a special Cura 5.7 Alpha.
|
||||
This version of Cura has an updated slicing engine that will automatically send a report to the Cura Team for analysis.
|
||||
#### [You can find the downloads here](https://github.com/Ultimaker/Cura/discussions/18080) ####
|
||||
### ✨Try our improved Cura 5.7✨
|
||||
Before filling out the report below, we want you to try the latest Cura 5.7 Beta.
|
||||
This version of Cura has become significantly more reliable and has an updated slicing engine that will automatically send a report to the Cura Team for analysis.
|
||||
#### [You can find the downloads here](https://github.com/Ultimaker/Cura/releases/tag/5.7.0-beta.1) ####
|
||||
If you still encounter a crash you are still welcome to report the issue so we can use your model as a test case, you can find instructions on how to do that below.
|
||||
|
||||
### Project File
|
||||
|
|
40
.github/workflows/conan-package-resources.yml
vendored
Normal file
40
.github/workflows/conan-package-resources.yml
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
name: conan-package-resources
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- '.github/workflows/conan-package-resources.yml'
|
||||
- 'resources/definitions/**'
|
||||
- 'resources/extruders/**'
|
||||
- 'resources/images/**'
|
||||
- 'resources/intent/**'
|
||||
- 'resources/meshes/**'
|
||||
- 'resources/quality/**'
|
||||
- 'resources/variants/**'
|
||||
- 'resources/conanfile.py'
|
||||
branches:
|
||||
- 'main'
|
||||
- 'CURA-*'
|
||||
- 'PP-*'
|
||||
- 'NP-*'
|
||||
- '[0-9].[0-9]*'
|
||||
- '[0-9].[0-9][0-9]*'
|
||||
|
||||
env:
|
||||
CONAN_LOGIN_USERNAME_CURA: ${{ secrets.CONAN_USER }}
|
||||
CONAN_PASSWORD_CURA: ${{ secrets.CONAN_PASS }}
|
||||
|
||||
jobs:
|
||||
conan-recipe-version:
|
||||
uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-version.yml@main
|
||||
with:
|
||||
project_name: cura_resources
|
||||
|
||||
conan-package-export:
|
||||
needs: [ conan-recipe-version ]
|
||||
uses: ultimaker/cura-workflows/.github/workflows/conan-recipe-export.yml@main
|
||||
with:
|
||||
recipe_id_full: ${{ needs.conan-recipe-version.outputs.recipe_id_full }}
|
||||
recipe_id_latest: ${{ needs.conan-recipe-version.outputs.recipe_id_latest }}
|
||||
conan_recipe_root: "./resources/"
|
||||
secrets: inherit
|
13
.github/workflows/conan-package.yml
vendored
13
.github/workflows/conan-package.yml
vendored
|
@ -4,12 +4,20 @@ on:
|
|||
push:
|
||||
paths:
|
||||
- 'plugins/**'
|
||||
- 'resources/**'
|
||||
- 'cura/**'
|
||||
- 'resources/bundled_packages/**'
|
||||
- 'resources/i18n/**'
|
||||
- 'resources/qml/**'
|
||||
- 'resources/setting_visibility/**'
|
||||
- 'resources/shaders/**'
|
||||
- 'resources/texts/**'
|
||||
- 'resources/themes/**'
|
||||
- 'resources/public_key.pem'
|
||||
- 'resources/README_resources.txt'
|
||||
- 'icons/**'
|
||||
- 'tests/**'
|
||||
- 'packaging/**'
|
||||
- '.github/workflows/conan-*.yml'
|
||||
- '.github/workflows/conan-package.yml'
|
||||
- '.github/workflows/notify.yml'
|
||||
- '.github/workflows/requirements-runner.txt'
|
||||
- 'requirements*.txt'
|
||||
|
@ -20,6 +28,7 @@ on:
|
|||
- 'main'
|
||||
- 'CURA-*'
|
||||
- 'PP-*'
|
||||
- 'NP-*'
|
||||
- '[0-9].[0-9]*'
|
||||
- '[0-9].[0-9][0-9]*'
|
||||
|
||||
|
|
41
.github/workflows/installers.yml
vendored
41
.github/workflows/installers.yml
vendored
|
@ -30,6 +30,29 @@ on:
|
|||
required: true
|
||||
type: boolean
|
||||
|
||||
workflow_call:
|
||||
inputs:
|
||||
cura_conan_version:
|
||||
default: 'cura/latest@ultimaker/testing'
|
||||
required: true
|
||||
type: string
|
||||
conan_args:
|
||||
default: ''
|
||||
required: false
|
||||
type: string
|
||||
enterprise:
|
||||
default: false
|
||||
required: true
|
||||
type: boolean
|
||||
staging:
|
||||
default: false
|
||||
required: true
|
||||
type: boolean
|
||||
nightly:
|
||||
default: false
|
||||
required: true
|
||||
type: boolean
|
||||
|
||||
schedule:
|
||||
# Daily at 4:15 CET (main-branch) and 5:15 CET (release-branch)
|
||||
- cron: '15 3 * * *'
|
||||
|
@ -109,7 +132,7 @@ jobs:
|
|||
fetch-depth: 1
|
||||
|
||||
- name: Download the run info
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: linux-run-info
|
||||
|
||||
|
@ -151,13 +174,13 @@ jobs:
|
|||
f.writelines(f"NIGHTLY_TIME={nightly_creation_time}\n")
|
||||
|
||||
- name: Download linux installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.LINUX }}-AppImage
|
||||
path: installers
|
||||
|
||||
- name: Download linux installer jobs asc artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.LINUX }}-asc
|
||||
path: installers
|
||||
|
@ -175,13 +198,13 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download win msi installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.WIN_MSI }}-msi
|
||||
path: installers
|
||||
|
||||
- name: Download win exe installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.WIN_EXE }}-exe
|
||||
path: installers
|
||||
|
@ -199,13 +222,13 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download MacOS (X64) dmg installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.MAC_X64_DMG }}-dmg
|
||||
path: installers
|
||||
|
||||
- name: Download MacOS (X64) pkg installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.MAC_X64_PKG }}-pkg
|
||||
path: installers
|
||||
|
@ -223,13 +246,13 @@ jobs:
|
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download MacOS (ARM-64) dmg installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.MAC_ARM_DMG }}-dmg
|
||||
path: installers
|
||||
|
||||
- name: Download MacOS (ARM-64) pkg installer jobs artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{ steps.filename.outputs.MAC_ARM_PKG }}-pkg
|
||||
path: installers
|
||||
|
|
10
.github/workflows/printer-linter-pr-diagnose.yml
vendored
10
.github/workflows/printer-linter-pr-diagnose.yml
vendored
|
@ -5,6 +5,9 @@ on:
|
|||
path:
|
||||
- "resources/**"
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
printer-linter-diagnose:
|
||||
name: Printer linter PR diagnose
|
||||
|
@ -18,6 +21,7 @@ jobs:
|
|||
|
||||
- uses: technote-space/get-diff-action@v6
|
||||
with:
|
||||
DIFF_FILTER: AMRCD
|
||||
PATTERNS: |
|
||||
resources/+(extruders|definitions)/*.def.json
|
||||
resources/+(intent|quality|variants)/**/*.inst.cfg
|
||||
|
@ -41,11 +45,15 @@ jobs:
|
|||
if: env.GIT_DIFF && !env.MATCHED_FILES
|
||||
run: python printer-linter/src/terminal.py --diagnose --report printer-linter-result/fixes.yml ${{ env.GIT_DIFF_FILTERED }}
|
||||
|
||||
- name: Check Deleted Files(s)
|
||||
if: env.GIT_DIFF
|
||||
run: python printer-linter/src/terminal.py --deleted --report printer-linter-result/comment.md ${{ env.GIT_DIFF_FILTERED }}
|
||||
|
||||
- name: Save PR metadata
|
||||
run: |
|
||||
echo ${{ github.event.number }} > printer-linter-result/pr-id.txt
|
||||
echo ${{ github.event.pull_request.head.repo.full_name }} > printer-linter-result/pr-head-repo.txt
|
||||
echo ${{ github.event.pull_request.head.ref }} > printer-linter-result/pr-head-ref.txt
|
||||
echo ${{ github.event.pull_request.head.sha }} > printer-linter-result/pr-head-sha.txt
|
||||
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
|
120
.github/workflows/printer-linter-pr-post.yml
vendored
120
.github/workflows/printer-linter-pr-post.yml
vendored
|
@ -6,76 +6,106 @@ on:
|
|||
types: [completed]
|
||||
|
||||
jobs:
|
||||
clang-tidy-results:
|
||||
printer-linter-result:
|
||||
# Trigger the job only if the previous (insecure) workflow completed successfully
|
||||
if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }}
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Download analysis results
|
||||
uses: actions/github-script@v3.1.0
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
let artifacts = await github.actions.listWorkflowRunArtifacts({
|
||||
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{github.event.workflow_run.id }},
|
||||
});
|
||||
let matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
const matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name == "printer-linter-result"
|
||||
})[0];
|
||||
let download = await github.actions.downloadArtifact({
|
||||
const download = await github.rest.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact.id,
|
||||
archive_format: "zip",
|
||||
});
|
||||
let fs = require("fs");
|
||||
fs.writeFileSync("${{github.workspace}}/printer-linter-result.zip", Buffer.from(download.data));
|
||||
|
||||
- name: Set environment variables
|
||||
run: |
|
||||
mkdir printer-linter-result
|
||||
unzip printer-linter-result.zip -d printer-linter-result
|
||||
echo "pr_id=$(cat printer-linter-result/pr-id.txt)" >> $GITHUB_ENV
|
||||
echo "pr_head_repo=$(cat printer-linter-result/pr-head-repo.txt)" >> $GITHUB_ENV
|
||||
echo "pr_head_ref=$(cat printer-linter-result/pr-head-ref.txt)" >> $GITHUB_ENV
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
repository: ${{ env.pr_head_repo }}
|
||||
ref: ${{ env.pr_head_ref }}
|
||||
persist-credentials: false
|
||||
|
||||
- name: Redownload analysis results
|
||||
uses: actions/github-script@v3.1.0
|
||||
with:
|
||||
script: |
|
||||
let artifacts = await github.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{github.event.workflow_run.id }},
|
||||
});
|
||||
let matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name == "printer-linter-result"
|
||||
})[0];
|
||||
let download = await github.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact.id,
|
||||
archive_format: "zip",
|
||||
});
|
||||
let fs = require("fs");
|
||||
fs.writeFileSync("${{github.workspace}}/printer-linter-result.zip", Buffer.from(download.data));
|
||||
const fs = require("fs");
|
||||
fs.writeFileSync("${{ github.workspace }}/printer-linter-result.zip", Buffer.from(download.data));
|
||||
|
||||
- name: Extract analysis results
|
||||
run: |
|
||||
mkdir printer-linter-result
|
||||
unzip printer-linter-result.zip -d printer-linter-result
|
||||
unzip -j printer-linter-result.zip -d printer-linter-result
|
||||
|
||||
- name: Set PR details environment variables
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const assert = require("node:assert").strict;
|
||||
const fs = require("fs");
|
||||
function exportVar(varName, fileName, regEx) {
|
||||
const val = fs.readFileSync("${{ github.workspace }}/printer-linter-result/" + fileName, {
|
||||
encoding: "ascii"
|
||||
}).trimEnd();
|
||||
assert.ok(regEx.test(val), "Invalid value format for " + varName);
|
||||
core.exportVariable(varName, val);
|
||||
}
|
||||
exportVar("PR_ID", "pr-id.txt", /^[0-9]+$/);
|
||||
exportVar("PR_HEAD_REPO", "pr-head-repo.txt", /^[-./0-9A-Z_a-z]+$/);
|
||||
exportVar("PR_HEAD_SHA", "pr-head-sha.txt", /^[0-9A-Fa-f]+$/);
|
||||
fs.access("${{ github.workspace }}/printer-linter-result/comment.md", fs.constants.F_OK, (err) => {
|
||||
if (err) {
|
||||
core.exportVariable("commentFileExists", "false");
|
||||
} else {
|
||||
core.exportVariable("commentFileExists", "true");
|
||||
}
|
||||
});
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ${{ env.PR_HEAD_REPO }}
|
||||
ref: ${{ env.PR_HEAD_SHA }}
|
||||
persist-credentials: false
|
||||
|
||||
- name: Redownload analysis results
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: ${{github.event.workflow_run.id }},
|
||||
});
|
||||
const matchArtifact = artifacts.data.artifacts.filter((artifact) => {
|
||||
return artifact.name == "printer-linter-result"
|
||||
})[0];
|
||||
const download = await github.rest.actions.downloadArtifact({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
artifact_id: matchArtifact.id,
|
||||
archive_format: "zip",
|
||||
});
|
||||
const fs = require("fs");
|
||||
fs.writeFileSync("${{ github.workspace }}/printer-linter-result.zip", Buffer.from(download.data));
|
||||
|
||||
- name: Extract analysis results
|
||||
run: |
|
||||
mkdir printer-linter-result
|
||||
unzip -j printer-linter-result.zip -d printer-linter-result
|
||||
|
||||
- name: Run PR Comments
|
||||
if: env.commentFileExists == 'true'
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
with:
|
||||
issue-number: ${{ env.PR_ID }}
|
||||
body-path: 'printer-linter-result/comment.md'
|
||||
|
||||
- name: Run clang-tidy-pr-comments action
|
||||
uses: platisd/clang-tidy-pr-comments@bc0bb7da034a8317d54e7fe1e819159002f4cc40
|
||||
uses: platisd/clang-tidy-pr-comments@v1
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
clang_tidy_fixes: printer-linter-result/fixes.yml
|
||||
pull_request_id: ${{ env.pr_id }}
|
||||
pull_request_id: ${{ env.PR_ID }}
|
||||
request_changes: true
|
||||
|
|
32
.github/workflows/release-process_feature-freeze.yml
vendored
Normal file
32
.github/workflows/release-process_feature-freeze.yml
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
name: Feature Freeze
|
||||
run-name: Feature freeze Cura ${{ inputs.cura_version }} by @${{ github.actor }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
cura_version:
|
||||
description: 'Cura version major and minor, e.g. 5.7'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
parse-version:
|
||||
name: Parse input version string
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
package_version: ${{ steps.version_parser.outputs.major }}.${{ steps.version_parser.outputs.minor }}.0-alpha.1
|
||||
steps:
|
||||
- name: Parse version string
|
||||
id: version_parser
|
||||
uses: booxmedialtd/ws-action-parse-semver@v1.4.7
|
||||
with:
|
||||
input_string: ${{ inputs.cura_version }}.0
|
||||
|
||||
feature-freeze:
|
||||
name: Process feature freeze
|
||||
uses: Ultimaker/Cura-workflows/.github/workflows/cura-set-packages-versions.yml@main
|
||||
needs: [parse-version]
|
||||
with:
|
||||
cura_version: ${{ needs.parse-version.outputs.package_version }}
|
||||
create_feature_branch: true
|
||||
secrets: inherit
|
179
.github/workflows/release-process_release-candidate.yml
vendored
Normal file
179
.github/workflows/release-process_release-candidate.yml
vendored
Normal file
|
@ -0,0 +1,179 @@
|
|||
name: Prepare Release Candidate
|
||||
run-name: Release Candidate for Cura ${{ inputs.cura_version }} by @${{ github.actor }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
cura_version:
|
||||
description: 'Cura version number, e.g. 5.7.0, 5.7.2 or 5.8.0-beta.2'
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
parse-version:
|
||||
name: Parse input version string
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version_major: ${{ steps.version_parser.outputs.major }}
|
||||
version_minor: ${{ steps.version_parser.outputs.minor }}
|
||||
version_patch: ${{ steps.version_parser.outputs.patch }}
|
||||
branch_name: ${{ steps.version_parser.outputs.major }}.${{ steps.version_parser.outputs.minor }}
|
||||
steps:
|
||||
- name: Parse version string
|
||||
id: version_parser
|
||||
uses: booxmedialtd/ws-action-parse-semver@v1.4.7
|
||||
with:
|
||||
input_string: ${{ inputs.cura_version }}
|
||||
|
||||
freeze-packages-versions:
|
||||
name: Freeze packges versions
|
||||
uses: Ultimaker/Cura-workflows/.github/workflows/cura-set-packages-versions.yml@main
|
||||
needs: [parse-version]
|
||||
with:
|
||||
cura_version: ${{ inputs.cura_version }}
|
||||
create_feature_branch: false
|
||||
secrets: inherit
|
||||
|
||||
find-rc-tag:
|
||||
name: Find RC tag name
|
||||
runs-on: ubuntu-latest
|
||||
needs: [freeze-packages-versions]
|
||||
outputs:
|
||||
tag_name: ${{ steps.find-available-tag-name.outputs.tag_name }}
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-tags: true
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Find available tag name
|
||||
id: find-available-tag-name
|
||||
run: |
|
||||
VERSION=${{ inputs.cura_version }}
|
||||
|
||||
RC_INDEX=0
|
||||
while
|
||||
RC_INDEX=$((RC_INDEX+1))
|
||||
TAG_NAME="$VERSION-RC$RC_INDEX"
|
||||
[[ $(git tag -l "$TAG_NAME") ]]
|
||||
do true; done
|
||||
|
||||
echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT"
|
||||
|
||||
create-tags:
|
||||
name: Create tags
|
||||
runs-on: ubuntu-latest
|
||||
needs: [parse-version, find-rc-tag]
|
||||
strategy:
|
||||
matrix:
|
||||
repository: [Cura, Uranium, CuraEngine, cura-binary-data, fdm_materials]
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: Ultimaker/${{ matrix.repository }}
|
||||
ref: ${{ needs.parse-version.outputs.branch_name }}
|
||||
token: ${{ secrets.CURA_AUTORELEASE_PAT }}
|
||||
|
||||
- name: Create tag
|
||||
run: |
|
||||
git tag ${{ needs.find-rc-tag.outputs.tag_name }}
|
||||
git push origin tag ${{ needs.find-rc-tag.outputs.tag_name }}
|
||||
|
||||
create-dependencies-packages:
|
||||
name: Create conan packages for dependencies
|
||||
uses: ultimaker/cura-workflows/.github/workflows/conan-package-release.yml@main
|
||||
needs: [parse-version, freeze-packages-versions]
|
||||
strategy:
|
||||
matrix:
|
||||
repository: [Cura, Uranium, CuraEngine, cura-binary-data, fdm_materials]
|
||||
include:
|
||||
- conan_recipe_root: "."
|
||||
- repository: Cura
|
||||
conan_recipe_root: "resources"
|
||||
with:
|
||||
repository: ${{ matrix.repository }}
|
||||
ref_name: ${{ needs.parse-version.outputs.branch_name }}
|
||||
version: ${{ inputs.cura_version }}
|
||||
conan_release: true
|
||||
conan_user_channel: ultimaker/stable
|
||||
conan_internal: false
|
||||
conan_latest: true
|
||||
conan_recipe_root: ${{ matrix.conan_recipe_root }}
|
||||
secrets: inherit
|
||||
|
||||
create-cura-package:
|
||||
name: Create conan package for Cura
|
||||
uses: ultimaker/cura-workflows/.github/workflows/conan-package-release.yml@main
|
||||
needs: [parse-version, create-dependencies-packages]
|
||||
with:
|
||||
repository: Cura
|
||||
ref_name: ${{ needs.parse-version.outputs.branch_name }}
|
||||
version: ${{ inputs.cura_version }}
|
||||
conan_release: true
|
||||
conan_user_channel: ultimaker/stable
|
||||
conan_internal: false
|
||||
conan_latest: true
|
||||
secrets: inherit
|
||||
|
||||
create-installers:
|
||||
name: Create installers
|
||||
uses: ./.github/workflows/installers.yml
|
||||
needs: [parse-version, create-cura-package]
|
||||
with:
|
||||
cura_conan_version: cura/${{ inputs.cura_version }}@/
|
||||
enterprise: false
|
||||
staging: false
|
||||
nightly: false
|
||||
secrets: inherit
|
||||
|
||||
create-release-draft:
|
||||
name: Create the release draft
|
||||
runs-on: ubuntu-latest
|
||||
needs: [create-installers, parse-version]
|
||||
steps:
|
||||
- name: Checkout Cura repo
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ needs.parse-version.outputs.branch_name }}
|
||||
|
||||
- name: Extract changelog
|
||||
run: python ./scripts/extract_changelog.py --version ${{ needs.parse-version.outputs.version_major }}.${{ needs.parse-version.outputs.version_minor }}.${{ needs.parse-version.outputs.version_patch }} --changelog ./resources/texts/change_log.txt > formatted_changelog.txt
|
||||
|
||||
- name: Get commit id for release
|
||||
id: get-commit-id
|
||||
uses: iawia002/get-tag-or-commit-id@v1.0.1
|
||||
with:
|
||||
length: 40
|
||||
|
||||
- name: Create release
|
||||
uses: notpeelz/action-gh-create-release@v5.0.1
|
||||
with:
|
||||
target: ${{ steps.get-commit-id.outputs.id }}
|
||||
tag: ${{ inputs.cura_version }}
|
||||
strategy: replace
|
||||
title: UltiMaker Cura ${{ inputs.cura_version }}
|
||||
draft: true
|
||||
body-source: file
|
||||
body: formatted_changelog.txt
|
||||
|
||||
- name: Download artifacts
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
path: artifacts
|
||||
merge-multiple: true
|
||||
|
||||
- name: Upload artifacts
|
||||
working-directory: artifacts
|
||||
run: |
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-linux-X64.AppImage --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-linux-X64.AppImage.asc --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-ARM64.dmg --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-ARM64.pkg --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-X64.dmg --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-macos-X64.pkg --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-win64-X64.exe --clobber
|
||||
gh release upload ${{ inputs.cura_version }} UltiMaker-Cura-${{ inputs.cura_version }}-win64-X64.msi --clobber
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
43
.github/workflows/security_badge.yml
vendored
43
.github/workflows/security_badge.yml
vendored
|
@ -1,5 +1,5 @@
|
|||
# NOTE: Best to keep all of these remarks in, they might prove useful in the future.
|
||||
# This is basically just the standard one that is sugested on 'new workflow'.
|
||||
# This is basically just the standard one that is suggested on 'new workflow'.
|
||||
|
||||
name: Scorecard supply-chain security
|
||||
on:
|
||||
|
@ -21,51 +21,42 @@ jobs:
|
|||
name: Scorecard analysis
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# Needed to upload the results to code-scanning dashboard.
|
||||
# Needed for Code scanning upload
|
||||
security-events: write
|
||||
# Needed to publish results and get a badge (see publish_results below).
|
||||
# Needed for GitHub OIDC token if publish_results is true
|
||||
id-token: write
|
||||
# Uncomment the permissions below if installing in a private repository.
|
||||
# contents: read
|
||||
# actions: read
|
||||
|
||||
steps:
|
||||
- name: "Checkout code"
|
||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: "Run analysis"
|
||||
uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 # v2.1.2
|
||||
uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
|
||||
with:
|
||||
results_file: results.sarif
|
||||
results_format: sarif
|
||||
# (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
|
||||
# - you want to enable the Branch-Protection check on a *public* repository, or
|
||||
# - you are installing Scorecard on a *private* repository
|
||||
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
|
||||
# repo_token: ${{ secrets.SCORECARD_TOKEN }}
|
||||
|
||||
# Public repositories:
|
||||
# - Publish results to OpenSSF REST API for easy access by consumers
|
||||
# - Allows the repository to include the Scorecard badge.
|
||||
# - See https://github.com/ossf/scorecard-action#publishing-results.
|
||||
# For private repositories:
|
||||
# - `publish_results` will always be set to `false`, regardless
|
||||
# of the value entered here.
|
||||
# Scorecard team runs a weekly scan of public GitHub repos,
|
||||
# see https://github.com/ossf/scorecard#public-data.
|
||||
# Setting `publish_results: true` helps us scale by leveraging your workflow to
|
||||
# extract the results instead of relying on our own infrastructure to run scans.
|
||||
# And it's free for you!
|
||||
publish_results: true
|
||||
|
||||
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
|
||||
# format to the repository Actions tab.
|
||||
# Upload the results as artifacts (optional). Commenting out will disable
|
||||
# uploads of run results in SARIF format to the repository Actions tab.
|
||||
# https://docs.github.com/en/actions/advanced-guides/storing-workflow-data-as-artifacts
|
||||
- name: "Upload artifact"
|
||||
uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 # v3.1.0
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
|
||||
with:
|
||||
name: SARIF file
|
||||
path: results.sarif
|
||||
retention-days: 5
|
||||
|
||||
# Upload the results to GitHub's code scanning dashboard.
|
||||
# Upload the results to GitHub's code scanning dashboard (optional).
|
||||
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
|
||||
- name: "Upload to code-scanning"
|
||||
uses: github/codeql-action/upload-sarif@17573ee1cc1b9d061760f3a006fc4aac4f944fd5 # v2.2.4
|
||||
uses: github/codeql-action/upload-sarif@83a02f7883b12e0e4e1a146174f5e2292a01e601 # v2.16.4
|
||||
with:
|
||||
sarif_file: results.sarif
|
||||
|
|
|
@ -3,6 +3,10 @@ checks:
|
|||
diagnostic-mesh-file-size: true
|
||||
diagnostic-definition-redundant-override: true
|
||||
diagnostic-resources-macos-app-directory-name: true
|
||||
diagnostic-incorrect-formula: true
|
||||
diagnostic-resource-file-deleted: true
|
||||
diagnostic-material-temperature-defined: true
|
||||
diagnostic-long-profile-names: true
|
||||
fixes:
|
||||
diagnostic-definition-redundant-override: true
|
||||
format:
|
||||
|
|
|
@ -26,7 +26,9 @@
|
|||
*With hundreds of settings & community-managed print profiles,* <br>
|
||||
*Ultimaker Cura is sure to lead your next project to a success.*
|
||||
|
||||
<br>
|
||||
**Contribute Printer Profiles?** -- Please [look here](https://github.com/Ultimaker/Cura/wiki/Adding-new-machine-profiles-to-Cura) first. <br>
|
||||
**Contribute Translations?** -- Please [look here](https://github.com/Ultimaker/Cura/wiki/Translating-Cura) first.
|
||||
|
||||
<br>
|
||||
|
||||
[![Button Building]][Building]
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
version: "5.7.2"
|
||||
version: "5.8.0-alpha.0"
|
||||
requirements:
|
||||
- "uranium/5.7.2"
|
||||
- "curaengine/5.7.2"
|
||||
- "cura_binary_data/5.7.2"
|
||||
- "fdm_materials/5.7.2"
|
||||
- "cura_resources/(latest)@ultimaker/testing"
|
||||
- "uranium/(latest)@ultimaker/testing"
|
||||
- "curaengine/(latest)@ultimaker/testing"
|
||||
- "cura_binary_data/(latest)@ultimaker/testing"
|
||||
- "fdm_materials/(latest)@ultimaker/testing"
|
||||
- "curaengine_plugin_gradual_flow/0.1.0-beta.3"
|
||||
- "dulcificum/0.2.0-alpha.0"
|
||||
- "dulcificum/latest@ultimaker/testing"
|
||||
- "pysavitar/5.3.0"
|
||||
- "pynest2d/5.3.0"
|
||||
- "curaengine_grpc_definitions/0.2.0"
|
||||
|
@ -54,6 +55,10 @@ pyinstaller:
|
|||
package: "cura"
|
||||
src: "resources"
|
||||
dst: "share/cura/resources"
|
||||
cura_shared_resources:
|
||||
package: "cura_resources"
|
||||
src: "res"
|
||||
dst: "share/cura/resources"
|
||||
cura_private_data:
|
||||
package: "cura_private_data"
|
||||
src: "res"
|
||||
|
|
12
conanfile.py
12
conanfile.py
|
@ -468,6 +468,12 @@ class CuraConan(ConanFile):
|
|||
copy(self, "*", os.path.join(self.package_folder, self.cpp_info.resdirs[0]), str(self._share_dir.joinpath("cura", "resources")), keep_path = True)
|
||||
copy(self, "*", os.path.join(self.package_folder, self.cpp_info.resdirs[1]), str(self._share_dir.joinpath("cura", "plugins")), keep_path = True)
|
||||
|
||||
# Copy the cura_resources resources from the package
|
||||
rm(self, "conanfile.py", os.path.join(self.package_folder, self.cpp.package.resdirs[0]))
|
||||
cura_resources = self.dependencies["cura_resources"].cpp_info
|
||||
for res_dir in cura_resources.resdirs:
|
||||
copy(self, "*", res_dir, str(self._share_dir.joinpath("cura", "resources", Path(res_dir).name)), keep_path = True)
|
||||
|
||||
# Copy resources of Uranium (keep folder structure)
|
||||
uranium = self.dependencies["uranium"].cpp_info
|
||||
copy(self, "*", uranium.resdirs[0], str(self._share_dir.joinpath("uranium", "resources")), keep_path = True)
|
||||
|
@ -519,6 +525,12 @@ echo "CURA_APP_NAME={{ cura_app_name }}" >> ${{ env_prefix }}GITHUB_ENV
|
|||
# Remove the fdm_materials from the package
|
||||
rmdir(self, os.path.join(self.package_folder, self.cpp.package.resdirs[0], "materials"))
|
||||
|
||||
# Remove the cura_resources resources from the package
|
||||
rm(self, "conanfile.py", os.path.join(self.package_folder, self.cpp.package.resdirs[0]))
|
||||
cura_resources = self.dependencies["cura_resources"].cpp_info
|
||||
for res_dir in cura_resources.resdirs:
|
||||
rmdir(self, os.path.join(self.package_folder, self.cpp.package.resdirs[0], Path(res_dir).name))
|
||||
|
||||
def package_info(self):
|
||||
self.user_info.pip_requirements = "requirements.txt"
|
||||
self.user_info.pip_requirements_git = "requirements-ultimaker.txt"
|
||||
|
|
|
@ -422,7 +422,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
|
|||
_PRINTER_TYPE_NAME = {
|
||||
"fire_e": "ultimaker_method",
|
||||
"lava_f": "ultimaker_methodx",
|
||||
"magma_10": "ultimaker_methodxl"
|
||||
"magma_10": "ultimaker_methodxl",
|
||||
"sketch": "ultimaker_sketch"
|
||||
}
|
||||
if printer_type in _PRINTER_TYPE_NAME:
|
||||
return _PRINTER_TYPE_NAME[printer_type]
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
# Copyright (c) 2023 UltiMaker
|
||||
# Cura is released under the terms of the LGPLv3 or higher.
|
||||
|
||||
from io import StringIO, BufferedIOBase
|
||||
import json
|
||||
from typing import cast, List, Optional, Dict
|
||||
from typing import cast, List, Optional, Dict, Tuple
|
||||
from zipfile import BadZipFile, ZipFile, ZIP_DEFLATED
|
||||
import pyDulcificum as du
|
||||
|
||||
|
@ -39,16 +38,27 @@ class MakerbotWriter(MeshWriter):
|
|||
suffixes=["makerbot"]
|
||||
)
|
||||
)
|
||||
MimeTypeDatabase.addMimeType(
|
||||
MimeType(
|
||||
name="application/x-makerbot-sketch",
|
||||
comment="Makerbot Toolpath Package",
|
||||
suffixes=["makerbot"]
|
||||
)
|
||||
)
|
||||
|
||||
_PNG_FORMATS = [
|
||||
_PNG_FORMAT = [
|
||||
{"prefix": "isometric_thumbnail", "width": 120, "height": 120},
|
||||
{"prefix": "isometric_thumbnail", "width": 320, "height": 320},
|
||||
{"prefix": "isometric_thumbnail", "width": 640, "height": 640},
|
||||
{"prefix": "thumbnail", "width": 90, "height": 90},
|
||||
]
|
||||
|
||||
_PNG_FORMAT_METHOD = [
|
||||
{"prefix": "thumbnail", "width": 140, "height": 106},
|
||||
{"prefix": "thumbnail", "width": 212, "height": 300},
|
||||
{"prefix": "thumbnail", "width": 960, "height": 1460},
|
||||
{"prefix": "thumbnail", "width": 90, "height": 90},
|
||||
]
|
||||
|
||||
_META_VERSION = "3.0.0"
|
||||
|
||||
# must be called from the main thread because of OpenGL
|
||||
|
@ -74,6 +84,7 @@ class MakerbotWriter(MeshWriter):
|
|||
return None
|
||||
|
||||
def write(self, stream: BufferedIOBase, nodes: List[SceneNode], mode=MeshWriter.OutputMode.BinaryMode) -> bool:
|
||||
metadata, file_format = self._getMeta(nodes)
|
||||
if mode != MeshWriter.OutputMode.BinaryMode:
|
||||
Logger.log("e", "MakerbotWriter does not support text mode.")
|
||||
self.setInformation(catalog.i18nc("@error:not supported", "MakerbotWriter does not support text mode."))
|
||||
|
@ -92,14 +103,20 @@ class MakerbotWriter(MeshWriter):
|
|||
|
||||
gcode_text_io = StringIO()
|
||||
success = gcode_writer.write(gcode_text_io, None)
|
||||
|
||||
filename, filedata = "", ""
|
||||
# Writing the g-code failed. Then I can also not write the gzipped g-code.
|
||||
if not success:
|
||||
self.setInformation(gcode_writer.getInformation())
|
||||
return False
|
||||
|
||||
json_toolpaths = du.gcode_2_miracle_jtp(gcode_text_io.getvalue())
|
||||
metadata = self._getMeta(nodes)
|
||||
match file_format:
|
||||
case "application/x-makerbot-sketch":
|
||||
filename, filedata = "print.gcode", gcode_text_io.getvalue()
|
||||
self._PNG_FORMATS = self._PNG_FORMAT
|
||||
case "application/x-makerbot":
|
||||
filename, filedata = "print.jsontoolpath", du.gcode_2_miracle_jtp(gcode_text_io.getvalue())
|
||||
self._PNG_FORMATS = self._PNG_FORMAT + self._PNG_FORMAT_METHOD
|
||||
case _:
|
||||
raise Exception("Unsupported Mime type")
|
||||
|
||||
png_files = []
|
||||
for png_format in self._PNG_FORMATS:
|
||||
|
@ -116,7 +133,7 @@ class MakerbotWriter(MeshWriter):
|
|||
try:
|
||||
with ZipFile(stream, "w", compression=ZIP_DEFLATED) as zip_stream:
|
||||
zip_stream.writestr("meta.json", json.dumps(metadata, indent=4))
|
||||
zip_stream.writestr("print.jsontoolpath", json_toolpaths)
|
||||
zip_stream.writestr(filename, filedata)
|
||||
for png_file in png_files:
|
||||
file, data = png_file["file"], png_file["data"]
|
||||
zip_stream.writestr(file, data)
|
||||
|
@ -127,7 +144,7 @@ class MakerbotWriter(MeshWriter):
|
|||
|
||||
return True
|
||||
|
||||
def _getMeta(self, root_nodes: List[SceneNode]) -> Dict[str, any]:
|
||||
def _getMeta(self, root_nodes: List[SceneNode]) -> Tuple[Dict[str, any], str]:
|
||||
application = CuraApplication.getInstance()
|
||||
machine_manager = application.getMachineManager()
|
||||
global_stack = machine_manager.activeMachine
|
||||
|
@ -143,7 +160,9 @@ class MakerbotWriter(MeshWriter):
|
|||
nodes.append(node)
|
||||
|
||||
meta = dict()
|
||||
|
||||
# This is a bit of a "hack", the mime type should be passed through with the export writer but
|
||||
# since this is not the case we get the mime type from the global stack instead
|
||||
file_format = global_stack.definition.getMetaDataEntry("file_formats")
|
||||
meta["bot_type"] = global_stack.definition.getMetaDataEntry("reference_machine_id")
|
||||
|
||||
bounds: Optional[AxisAlignedBox] = None
|
||||
|
@ -155,7 +174,8 @@ class MakerbotWriter(MeshWriter):
|
|||
bounds = node_bounds
|
||||
else:
|
||||
bounds = bounds + node_bounds
|
||||
|
||||
if file_format == "application/x-makerbot-sketch":
|
||||
bounds = None
|
||||
if bounds is not None:
|
||||
meta["bounding_box"] = {
|
||||
"x_min": bounds.left,
|
||||
|
@ -196,7 +216,7 @@ class MakerbotWriter(MeshWriter):
|
|||
meta["extruder_temperature"] = materials_temps[0]
|
||||
meta["extruder_temperatures"] = materials_temps
|
||||
|
||||
meta["model_counts"] = [{"count": 1, "name": node.getName()} for node in nodes]
|
||||
meta["model_counts"] = [{"count": len(nodes), "name": "instance0"}]
|
||||
|
||||
tool_types = [extruder.variant.getMetaDataEntry("reference_extruder_id") for extruder in extruders]
|
||||
meta["tool_type"] = tool_types[0]
|
||||
|
@ -205,9 +225,8 @@ class MakerbotWriter(MeshWriter):
|
|||
meta["version"] = MakerbotWriter._META_VERSION
|
||||
|
||||
meta["preferences"] = dict()
|
||||
for node in nodes:
|
||||
bounds = node.getBoundingBox()
|
||||
meta["preferences"][str(node.getName())] = {
|
||||
bounds = application.getBuildVolume().getBoundingBox()
|
||||
meta["preferences"]["instance0"] = {
|
||||
"machineBounds": [bounds.right, bounds.back, bounds.left, bounds.front] if bounds is not None else None,
|
||||
"printMode": CuraApplication.getInstance().getIntentManager().currentIntentCategory,
|
||||
}
|
||||
|
@ -245,7 +264,7 @@ class MakerbotWriter(MeshWriter):
|
|||
# platform_temperature
|
||||
# total_commands
|
||||
|
||||
return meta
|
||||
return meta, file_format
|
||||
|
||||
|
||||
def meterToMillimeter(value: float) -> float:
|
||||
|
|
|
@ -11,14 +11,23 @@ catalog = i18nCatalog("cura")
|
|||
def getMetaData():
|
||||
file_extension = "makerbot"
|
||||
return {
|
||||
"mesh_writer": {
|
||||
"output": [{
|
||||
"mesh_writer":
|
||||
{
|
||||
"output": [
|
||||
{
|
||||
"extension": file_extension,
|
||||
"description": catalog.i18nc("@item:inlistbox", "Makerbot Printfile"),
|
||||
"mime_type": "application/x-makerbot",
|
||||
"mode": MakerbotWriter.MakerbotWriter.OutputMode.BinaryMode,
|
||||
}],
|
||||
},
|
||||
{
|
||||
"extension": file_extension,
|
||||
"description": catalog.i18nc("@item:inlistbox", "Makerbot Sketch Printfile"),
|
||||
"mime_type": "application/x-makerbot-sketch",
|
||||
"mode": MakerbotWriter.MakerbotWriter.OutputMode.BinaryMode,
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -26,27 +26,40 @@ class InsertAtLayerChange(Script):
|
|||
},
|
||||
"gcode_to_add":
|
||||
{
|
||||
"label": "G-code to insert.",
|
||||
"label": "G-code to insert",
|
||||
"description": "G-code to add before or after layer change.",
|
||||
"type": "str",
|
||||
"default_value": ""
|
||||
},
|
||||
"skip_layers":
|
||||
{
|
||||
"label": "Skip layers",
|
||||
"description": "Number of layers to skip between insertions (0 for every layer).",
|
||||
"type": "int",
|
||||
"default_value": 0,
|
||||
"minimum_value": 0
|
||||
}
|
||||
}
|
||||
}"""
|
||||
|
||||
def execute(self, data):
|
||||
gcode_to_add = self.getSettingValueByKey("gcode_to_add") + "\n"
|
||||
skip_layers = self.getSettingValueByKey("skip_layers")
|
||||
count = 0
|
||||
for layer in data:
|
||||
# Check that a layer is being printed
|
||||
lines = layer.split("\n")
|
||||
for line in lines:
|
||||
if ";LAYER:" in line:
|
||||
index = data.index(layer)
|
||||
if count == 0:
|
||||
if self.getSettingValueByKey("insert_location") == "before":
|
||||
layer = gcode_to_add + layer
|
||||
else:
|
||||
layer = layer + gcode_to_add
|
||||
|
||||
data[index] = layer
|
||||
|
||||
count = (count + 1) % (skip_layers + 1)
|
||||
break
|
||||
return data
|
||||
|
|
|
@ -356,7 +356,10 @@ geometry41core =
|
|||
EndPrimitive();
|
||||
}
|
||||
|
||||
if ((u_show_starts == 1) && (v_prev_line_type[0] != 1) && (v_line_type[0] == 1)) {
|
||||
if ((u_show_starts == 1) && (
|
||||
((v_prev_line_type[0] != 1) && (v_line_type[0] == 1)) ||
|
||||
((v_prev_line_type[0] != 4) && (v_line_type[0] == 4))
|
||||
)) {
|
||||
float w = size_x;
|
||||
float h = size_y;
|
||||
|
||||
|
|
BIN
plugins/UM3NetworkPrinting/resources/png/MakerBot Sketch.png
Normal file
BIN
plugins/UM3NetworkPrinting/resources/png/MakerBot Sketch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 185 KiB |
|
@ -331,7 +331,7 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice):
|
|||
return False
|
||||
|
||||
[printer, *_] = self._printers
|
||||
return printer.type in ("MakerBot Method X", "MakerBot Method XL")
|
||||
return printer.type in ("MakerBot Method X", "MakerBot Method XL", "MakerBot Sketch")
|
||||
|
||||
@pyqtProperty(bool, notify=_cloudClusterPrintersChanged)
|
||||
def supportsPrintJobActions(self) -> bool:
|
||||
|
|
|
@ -2,5 +2,6 @@
|
|||
"ultimaker_method": "MakerBot Method",
|
||||
"ultimaker_methodx": "MakerBot Method X",
|
||||
"ultimaker_methodxl": "MakerBot Method XL",
|
||||
"ultimaker_factor4": "Ultimaker Factor 4"
|
||||
"ultimaker_factor4": "Ultimaker Factor 4",
|
||||
"ultimaker_sketch": "MakerBot Sketch"
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[project]
|
||||
name = "printerlinter"
|
||||
description = "Cura UltiMaker printer linting tool"
|
||||
version = "0.1.1"
|
||||
version = "0.1.2"
|
||||
authors = [
|
||||
{ name = "UltiMaker", email = "cura@ultimaker.com" }
|
||||
]
|
||||
|
|
|
@ -32,3 +32,13 @@ class Diagnostic:
|
|||
},
|
||||
"Level": self.level
|
||||
}
|
||||
|
||||
class GitComment:
|
||||
def __init__(self, comment: str) -> None:
|
||||
"""
|
||||
@param comment: The comment text.
|
||||
"""
|
||||
self.comment = comment
|
||||
|
||||
def toDict(self) -> Dict[str, Any]:
|
||||
return self.comment
|
|
@ -6,20 +6,21 @@ from .linters.defintion import Definition
|
|||
from .linters.linter import Linter
|
||||
from .linters.meshes import Meshes
|
||||
from .linters.directory import Directory
|
||||
from .linters.formulas import Formulas
|
||||
|
||||
|
||||
def getLinter(file: Path, settings: dict) -> Optional[List[Linter]]:
|
||||
""" Returns a Linter depending on the file format """
|
||||
if not file.exists():
|
||||
return None
|
||||
return [Directory(file, settings)]
|
||||
|
||||
if ".inst" in file.suffixes and ".cfg" in file.suffixes:
|
||||
return [Directory(file, settings), Profile(file, settings)]
|
||||
return [Directory(file, settings), Profile(file, settings), Formulas(file, settings)]
|
||||
|
||||
if ".def" in file.suffixes and ".json" in file.suffixes:
|
||||
if file.stem in ("fdmprinter.def", "fdmextruder.def"):
|
||||
return None
|
||||
return [Directory(file, settings), Definition(file, settings)]
|
||||
return [Formulas(file, settings)]
|
||||
return [Directory(file, settings), Definition(file, settings), Formulas(file, settings)]
|
||||
|
||||
if file.parent.stem == "meshes":
|
||||
return [Meshes(file, settings)]
|
||||
|
|
|
@ -28,6 +28,10 @@ class Definition(Linter):
|
|||
for check in self.checkRedefineOverride():
|
||||
yield check
|
||||
|
||||
if self._settings["checks"].get("diagnostic-material-temperature-defined", False):
|
||||
for check in self.checkMaterialTemperature():
|
||||
yield check
|
||||
|
||||
# Add other which will yield Diagnostic's
|
||||
# TODO: A check to determine if the user set value is with the min and max value defined in the parent and doesn't trigger a warning
|
||||
# TODO: A check if the key exist in the first place
|
||||
|
@ -41,7 +45,7 @@ class Definition(Linter):
|
|||
definition = self._definitions[definition_name]
|
||||
if "overrides" in definition and definition_name not in ("fdmprinter", "fdmextruder"):
|
||||
for key, value_dict in definition["overrides"].items():
|
||||
is_redefined, child_key, child_value, parent = self._isDefinedInParent(key, value_dict, definition['inherits'])
|
||||
is_redefined, child_key, child_value, parent, inherited_by= self._isDefinedInParent(key, value_dict, definition['inherits'])
|
||||
if is_redefined:
|
||||
redefined = re.compile(r'.*(\"' + key + r'\"[\s\:\S]*?)\{[\s\S]*?\},?')
|
||||
found = redefined.search(self._content)
|
||||
|
@ -59,12 +63,40 @@ class Definition(Linter):
|
|||
yield Diagnostic(
|
||||
file = self._file,
|
||||
diagnostic_name = "diagnostic-definition-redundant-override",
|
||||
message = f"Overriding {key} with the same value ({child_key}: {child_value}) as defined in parent definition: {definition['inherits']}",
|
||||
message = f"Overriding {key} with the same value ({child_key}: {child_value}) as defined in parent definition: {inherited_by}",
|
||||
level = "Warning",
|
||||
offset = found.span(0)[0],
|
||||
replacements = replacements
|
||||
)
|
||||
|
||||
def checkMaterialTemperature(self) -> Iterator[Diagnostic]:
|
||||
"""Checks if definition file has material tremperature defined within them"""
|
||||
definition_name = list(self._definitions.keys())[0]
|
||||
definition = self._definitions[definition_name]
|
||||
if "overrides" in definition and definition_name not in ("fdmprinter", "fdmextruder"):
|
||||
for key, value_dict in definition["overrides"].items():
|
||||
if "temperature" in key and "material" in key:
|
||||
|
||||
redefined = re.compile(r'.*(\"' + key + r'\"[\s\:\S]*?)\{[\s\S]*?\},?')
|
||||
found = redefined.search(self._content)
|
||||
if len(found.group().splitlines()) > 1:
|
||||
replacements = []
|
||||
else:
|
||||
replacements = [Replacement(
|
||||
file=self._file,
|
||||
offset=found.span(1)[0],
|
||||
length=len(found.group()),
|
||||
replacement_text="")]
|
||||
|
||||
yield Diagnostic(
|
||||
file=self._file,
|
||||
diagnostic_name="diagnostic-material-temperature-defined",
|
||||
message=f"Overriding {key} as it belongs to material temperature catagory and shouldn't be placed in machine definitions",
|
||||
level="Warning",
|
||||
offset=found.span(0)[0],
|
||||
replacements=replacements
|
||||
)
|
||||
|
||||
def _loadDefinitionFiles(self, definition_file) -> None:
|
||||
""" Loads definition file contents into self._definitions. Also load parent definition if it exists. """
|
||||
definition_name = Path(definition_file.stem).stem
|
||||
|
@ -85,7 +117,7 @@ class Definition(Linter):
|
|||
|
||||
def _isDefinedInParent(self, key, value_dict, inherits_from):
|
||||
if self._ignore(key, "diagnostic-definition-redundant-override"):
|
||||
return False, None, None, None
|
||||
return False, None, None, None, None
|
||||
if "overrides" not in self._definitions[inherits_from]:
|
||||
return self._isDefinedInParent(key, value_dict, self._definitions[inherits_from]["inherits"])
|
||||
|
||||
|
@ -114,11 +146,11 @@ class Definition(Linter):
|
|||
v = child_value
|
||||
cv = check_value
|
||||
if v == cv:
|
||||
return True, child_key, child_value, parent
|
||||
return True, child_key, child_value, parent, inherits_from
|
||||
|
||||
if "inherits" in parent:
|
||||
return self._isDefinedInParent(key, value_dict, parent["inherits"])
|
||||
return False, None, None, None
|
||||
return False, None, None, None, None
|
||||
|
||||
def _loadBasePrinterSettings(self):
|
||||
settings = {}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from pathlib import Path
|
||||
from typing import Iterator
|
||||
|
||||
from ..diagnostic import Diagnostic
|
||||
from ..diagnostic import Diagnostic, GitComment
|
||||
from .linter import Linter
|
||||
|
||||
|
||||
|
@ -11,9 +11,12 @@ class Directory(Linter):
|
|||
super().__init__(file, settings)
|
||||
|
||||
def check(self) -> Iterator[Diagnostic]:
|
||||
if self._settings["checks"].get("diagnostic-resources-macos-app-directory-name", False):
|
||||
if self._file.exists() and self._settings["checks"].get("diagnostic-resources-macos-app-directory-name", False):
|
||||
for check in self.checkForDotInDirName():
|
||||
yield check
|
||||
elif self._settings["checks"].get("diagnostic-resource-file-deleted", False):
|
||||
for check in self.checkFilesDeleted():
|
||||
yield check
|
||||
|
||||
yield
|
||||
|
||||
|
@ -29,3 +32,8 @@ class Directory(Linter):
|
|||
)
|
||||
yield
|
||||
|
||||
def checkFilesDeleted(self) -> Iterator[GitComment]:
|
||||
if not self._file.exists():
|
||||
""" Check if there is a file that is deleted, this causes upgrade scripts to not work properly """
|
||||
yield GitComment( f'File: **{self._file}** must not be deleted as it is not allowed. It will create issues upgrading Cura' )
|
||||
yield
|
177
printer-linter/src/printerlinter/linters/formulas.py
Normal file
177
printer-linter/src/printerlinter/linters/formulas.py
Normal file
|
@ -0,0 +1,177 @@
|
|||
import difflib
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
from configparser import ConfigParser
|
||||
from pathlib import Path
|
||||
from typing import Iterator
|
||||
|
||||
from ..diagnostic import Diagnostic
|
||||
from ..replacement import Replacement
|
||||
from .linter import Linter
|
||||
|
||||
FORMULA_NAMES = [
|
||||
"extruderValue",
|
||||
"extruderValues",
|
||||
"anyExtruderWithMaterial",
|
||||
"anyExtruderNrWithOrDefault",
|
||||
"resolveOrValue",
|
||||
"defaultExtruderPosition",
|
||||
"valueFromContainer",
|
||||
"extruderValueFromContainer",
|
||||
"math",
|
||||
"round",
|
||||
"max",
|
||||
"ceil",
|
||||
"min",
|
||||
"sqrt",
|
||||
"log",
|
||||
"tan",
|
||||
"cos",
|
||||
"sin",
|
||||
"atan",
|
||||
"acos",
|
||||
"asin",
|
||||
"floor",
|
||||
"sum",
|
||||
"len",
|
||||
"radians",
|
||||
"degrees"
|
||||
]
|
||||
|
||||
DELIMITERS = [r'\+', '-', '=', '/', '\*', r'\(', r'\)', r'\[', r'\]', '{', '}', ' ', '^']
|
||||
|
||||
|
||||
class Formulas(Linter):
|
||||
"""Finds Typos in the definition files and their formulas."""
|
||||
|
||||
def __init__(self, file: Path, settings: dict) -> None:
|
||||
super().__init__(file, settings)
|
||||
self._cura_correction_strings = FORMULA_NAMES + list(self.getCuraSettingList())
|
||||
self._definition = {}
|
||||
|
||||
def getCuraSettingList(self) -> list:
|
||||
with open(os.path.join(os.path.dirname(__file__), "..", "..", "..", "..", "resources", "definitions", "fdmprinter.def.json")) as data:
|
||||
json_data = json.load(data)
|
||||
return self.extractKeys(json_data)
|
||||
|
||||
def extractKeys(self, json_obj, parent_key=''):
|
||||
keys_with_value = []
|
||||
for key, values in json_obj.items():
|
||||
new_key = key
|
||||
if isinstance(values, dict):
|
||||
if 'label' in values:
|
||||
keys_with_value.append(new_key)
|
||||
keys_with_value.extend(self.extractKeys(values, new_key))
|
||||
return keys_with_value
|
||||
|
||||
def check(self) -> Iterator[Diagnostic]:
|
||||
if self._settings["checks"].get("diagnostic-incorrect-formula", False):
|
||||
for check in self.checkFormulas():
|
||||
yield check
|
||||
yield
|
||||
|
||||
def checkFormulas(self) -> Iterator[Diagnostic]:
|
||||
|
||||
self._loadDefinitionFiles(self._file)
|
||||
self._content = self._file.read_text()
|
||||
definition_name = list(self._definition.keys())[0]
|
||||
definition = self._definition[definition_name]
|
||||
if "overrides" in definition:
|
||||
for key, value_dict in definition["overrides"].items():
|
||||
for value in value_dict:
|
||||
if value in ("enable", "resolve", "value", "minimum_value_warning", "maximum_value_warning",
|
||||
"maximum_value", "minimum_value"):
|
||||
key_incorrect = self.checkValueIncorrect(key)
|
||||
if key_incorrect:
|
||||
found = self._appendCorrections(key, key)
|
||||
value_incorrect = self.checkValueIncorrect(value_dict[value])
|
||||
if value_incorrect:
|
||||
found = self._appendCorrections(key, value_dict[value])
|
||||
if key_incorrect or value_incorrect:
|
||||
|
||||
if len(found.group().splitlines()) > 1:
|
||||
replacements = []
|
||||
else:
|
||||
replacements = [Replacement(
|
||||
file=self._file,
|
||||
offset=found.span(1)[0],
|
||||
length=len(found.group()),
|
||||
replacement_text=self._replacement_text)]
|
||||
yield Diagnostic(
|
||||
file=self._file,
|
||||
diagnostic_name="diagnostic-incorrect-formula",
|
||||
message=f"Given formula {found.group()} seems incorrect, Do you mean {self._correct_formula}? please correct the formula and try again.",
|
||||
level="Error",
|
||||
offset=found.span(0)[0],
|
||||
replacements=replacements
|
||||
)
|
||||
|
||||
yield
|
||||
|
||||
def _appendCorrections(self, key, incorrectString):
|
||||
|
||||
if self._file.suffix == '.cfg':
|
||||
key_with_incorrectValue = re.compile(r'(\b' + key + r'\b\s*=\s*[^=\n]+.*)')
|
||||
else:
|
||||
key_with_incorrectValue = re.compile(r'.*(\"' + key + r'\"[\s\:\S]*?)\{[\s\S]*?\},?')
|
||||
found = key_with_incorrectValue.search(self._content)
|
||||
if len(found.group().splitlines()) > 1:
|
||||
self._replacement_text = ''
|
||||
else:
|
||||
self._replacement_text = found.group().replace(incorrectString, self._correct_formula).strip(' ')
|
||||
return found
|
||||
|
||||
|
||||
def _loadDefinitionFiles(self, definition_file) -> None:
|
||||
""" Loads definition file contents into self._definition. Also load parent definition if it exists. """
|
||||
definition_name = Path(definition_file.stem).stem
|
||||
|
||||
if not definition_file.exists() or definition_name in self._definition:
|
||||
return
|
||||
|
||||
if definition_file.suffix == ".json":
|
||||
# Load definition file into dictionary
|
||||
self._definition[definition_name] = json.loads(definition_file.read_text())
|
||||
|
||||
if definition_file.suffix == ".cfg":
|
||||
self._definition[definition_name] = self._parseCfg(definition_file)
|
||||
|
||||
|
||||
def _parseCfg(self, file_path:Path) -> dict:
|
||||
config = ConfigParser()
|
||||
config.read([file_path])
|
||||
file_data ={}
|
||||
overrides = {}
|
||||
|
||||
available_sections = ["values"]
|
||||
for section in available_sections:
|
||||
options = config.options(section)
|
||||
for option in options:
|
||||
values ={}
|
||||
values["value"] = config.get(section, option)
|
||||
overrides[option] = values
|
||||
file_data["overrides"]= overrides# Process the value here
|
||||
|
||||
return file_data
|
||||
|
||||
def checkValueIncorrect(self, formula) -> bool:
|
||||
if isinstance(formula, str):
|
||||
self._correct_formula = self._correctTyposInFormula(formula)
|
||||
return self._correct_formula != formula
|
||||
else:
|
||||
return False
|
||||
|
||||
def _correctTyposInFormula(self, formula):
|
||||
pattern = '|'.join(DELIMITERS)
|
||||
tokens = re.split(pattern, formula)
|
||||
|
||||
output = formula
|
||||
for token in tokens:
|
||||
if '(' not in token and ')' not in token:
|
||||
cleaned_token = re.sub(r'[^\w\s]', '', token)
|
||||
possible_matches = difflib.get_close_matches(cleaned_token, self._cura_correction_strings, n=1, cutoff=0.8)
|
||||
if possible_matches:
|
||||
output = output.replace(cleaned_token, possible_matches[0])
|
||||
return output
|
||||
|
|
@ -1,9 +1,42 @@
|
|||
from typing import Iterator
|
||||
import re
|
||||
from typing import Iterator, Tuple
|
||||
|
||||
from ..diagnostic import Diagnostic
|
||||
from .linter import Linter
|
||||
|
||||
from pathlib import Path
|
||||
from configparser import ConfigParser
|
||||
|
||||
class Profile(Linter):
|
||||
MAX_SIZE_OF_NAME = 20
|
||||
def __init__(self, file: Path, settings: dict) -> None:
|
||||
""" Finds issues in the parent directory"""
|
||||
super().__init__(file, settings)
|
||||
self._content = self._file.read_text()
|
||||
|
||||
|
||||
def check(self) -> Iterator[Diagnostic]:
|
||||
yield
|
||||
if self._file.exists() and self._settings["checks"].get("diagnostic-long-profile-names", False):
|
||||
for check in self.checklengthofProfileName():
|
||||
yield check
|
||||
|
||||
|
||||
def checklengthofProfileName(self) -> Iterator[Diagnostic]:
|
||||
|
||||
""" check the name of profile and where it is found"""
|
||||
name_of_profile, found = self._getprofileName()
|
||||
if len(name_of_profile) > Profile.MAX_SIZE_OF_NAME:
|
||||
yield Diagnostic(
|
||||
file=self._file,
|
||||
diagnostic_name="diagnostic-long-profile-names",
|
||||
message = f"The profile name **{name_of_profile}** exceeds the maximum length limit. For optimal results, please limit it to 20 characters or fewer.",
|
||||
level="Warning",
|
||||
offset = found.span(0)[0]
|
||||
)
|
||||
|
||||
def _getprofileName(self) -> Tuple[str, bool]:
|
||||
config = ConfigParser()
|
||||
config.read([self._file])
|
||||
name_of_profile = config.get("general", "name")
|
||||
redefined = re.compile(name_of_profile)
|
||||
found = redefined.search(self._content)
|
||||
return name_of_profile, found
|
||||
|
|
|
@ -19,6 +19,7 @@ def main() -> None:
|
|||
parser.add_argument("--report", required=False, type=Path, help="Path where the diagnostic report should be stored")
|
||||
parser.add_argument("--format", action="store_true", help="Format the files")
|
||||
parser.add_argument("--diagnose", action="store_true", help="Diagnose the files")
|
||||
parser.add_argument("--deleted", action="store_true", help="Check for deleted files")
|
||||
parser.add_argument("--fix", action="store_true", help="Attempt to apply the suggested fixes on the files")
|
||||
parser.add_argument("Files", metavar="F", type=Path, nargs="+", help="Files or directories to format")
|
||||
|
||||
|
@ -41,12 +42,26 @@ def main() -> None:
|
|||
settings = yaml.load(f, yaml.FullLoader)
|
||||
|
||||
full_body_check = {"Diagnostics": []}
|
||||
comments_check = {"Error Files": []}
|
||||
|
||||
for file in files:
|
||||
if not path.exists(file):
|
||||
print(f"Can't find the file: {file}")
|
||||
return
|
||||
|
||||
if args.deleted:
|
||||
for file in args.Files:
|
||||
if file not in files:
|
||||
deletedFiles = diagnoseIssuesWithFile(file, settings)
|
||||
comments_check["Error Files"].extend([d.toDict() for d in deletedFiles])
|
||||
|
||||
results = yaml.dump(comments_check, default_flow_style=False, indent=4, width=240)
|
||||
|
||||
if report:
|
||||
report.write_text(results)
|
||||
else:
|
||||
print(results)
|
||||
|
||||
if to_fix or to_diagnose:
|
||||
for file in files:
|
||||
diagnostics = diagnoseIssuesWithFile(file, settings)
|
||||
|
@ -82,7 +97,6 @@ def diagnoseIssuesWithFile(file: Path, settings: dict) -> List[Diagnostic]:
|
|||
|
||||
return linter_results
|
||||
|
||||
|
||||
def applyFixesToFile(file, settings, full_body_check) -> None:
|
||||
if not file.exists():
|
||||
return
|
||||
|
|
|
@ -213,9 +213,9 @@ requests==2.22.0 \
|
|||
--hash=sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4 \
|
||||
--hash=sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31
|
||||
# twisted
|
||||
Twisted==21.2.0 \
|
||||
--hash=sha256:77544a8945cf69b98d2946689bbe0c75de7d145cdf11f391dd487eae8fc95a12 \
|
||||
--hash=sha256:aab38085ea6cda5b378b519a0ec99986874921ee8881318626b0a3414bb2631e
|
||||
Twisted==23.8.0 \
|
||||
--hash=sha256:3c73360add17336a622c0d811c2a2ce29866b6e59b1125fd6509b17252098a24 \
|
||||
--hash=sha256:b8bdba145de120ffb36c20e6e071cce984e89fba798611ed0704216fb7f884cd
|
||||
constantly==15.1.0 \
|
||||
--hash=sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35 \
|
||||
--hash=sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d
|
||||
|
|
1
resources/conandata.yml
Normal file
1
resources/conandata.yml
Normal file
|
@ -0,0 +1 @@
|
|||
version: "5.8.0-alpha.0"
|
62
resources/conanfile.py
Normal file
62
resources/conanfile.py
Normal file
|
@ -0,0 +1,62 @@
|
|||
import os
|
||||
|
||||
from conan import ConanFile
|
||||
from conan.tools.files import copy, update_conandata
|
||||
from conan.tools.scm import Version
|
||||
from conan.errors import ConanInvalidConfiguration
|
||||
|
||||
required_conan_version = ">=1.58.0 <2.0.0"
|
||||
|
||||
|
||||
class CuraResource(ConanFile):
|
||||
name = "cura_resources"
|
||||
license = ""
|
||||
author = "UltiMaker"
|
||||
url = "https://github.com/Ultimaker/cura"
|
||||
description = "Cura Resources"
|
||||
topics = ("conan", "cura")
|
||||
settings = "os", "compiler", "build_type", "arch"
|
||||
no_copy_source = True
|
||||
|
||||
|
||||
@property
|
||||
def _shared_resources(self):
|
||||
return ["definitions", "extruders", "images", "intent", "meshes", "quality", "variants"]
|
||||
|
||||
def set_version(self):
|
||||
if not self.version:
|
||||
self.version = self.conan_data["version"]
|
||||
|
||||
def export(self):
|
||||
copy(self, pattern="LICENSE*", src=os.path.join(self.recipe_folder, ".."), dst=self.export_folder,
|
||||
keep_path=False)
|
||||
update_conandata(self, {"version": self.version})
|
||||
|
||||
def export_sources(self):
|
||||
for shared_resources in self._shared_resources:
|
||||
copy(self, pattern="*", src=os.path.join(self.recipe_folder, shared_resources),
|
||||
dst=os.path.join(self.export_sources_folder, shared_resources))
|
||||
|
||||
def validate(self):
|
||||
if Version(self.version) <= Version("4"):
|
||||
raise ConanInvalidConfiguration("Only versions 5+ are support")
|
||||
|
||||
def layout(self):
|
||||
self.cpp.source.resdirs = self._shared_resources
|
||||
self.cpp.package.resdirs = [f"res/{res}" for res in self._shared_resources]
|
||||
|
||||
def package(self):
|
||||
copy(self, "*", os.path.join(self.export_sources_folder),
|
||||
os.path.join(self.package_folder, "res"))
|
||||
|
||||
def package_info(self):
|
||||
self.cpp_info.includedirs = []
|
||||
self.runenv_info.append_path("CURA_RESOURCES", os.path.join(self.package_folder, "res"))
|
||||
self.runenv_info.append_path("CURA_ENGINE_SEARCH_PATH", os.path.join(self.package_folder, "res", "definitions"))
|
||||
self.runenv_info.append_path("CURA_ENGINE_SEARCH_PATH", os.path.join(self.package_folder, "res", "extruders"))
|
||||
self.env_info.CURA_RESOURCES.append(os.path.join(self.package_folder, "res"))
|
||||
self.env_info.CURA_ENGINE_SEARCH_PATH.append(os.path.join(self.package_folder, "res", "definitions"))
|
||||
self.env_info.CURA_ENGINE_SEARCH_PATH.append(os.path.join(self.package_folder, "res", "definitions"))
|
||||
|
||||
def package_id(self):
|
||||
self.info.clear()
|
246
resources/definitions/ankermake_m5c.def.json
Normal file
246
resources/definitions/ankermake_m5c.def.json
Normal file
|
@ -0,0 +1,246 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "AnkerMake M5C",
|
||||
"inherits": "fdmprinter",
|
||||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "just-trey",
|
||||
"manufacturer": "AnkerMake",
|
||||
"file_formats": "text/x-gcode",
|
||||
"platform": "ankermake_m5c_platform.obj",
|
||||
"has_machine_quality": true,
|
||||
"machine_extruder_trains": { "0": "ankermake_m5c_extruder_0" },
|
||||
"platform_texture": "ankermake_m5c.png",
|
||||
"preferred_material": "generic_pla",
|
||||
"preferred_quality_type": "normal"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"acceleration_enabled": { "value": true },
|
||||
"acceleration_infill": { "value": 5000 },
|
||||
"acceleration_layer_0": { "value": 2500 },
|
||||
"acceleration_prime_tower": { "value": 5000 },
|
||||
"acceleration_print": { "value": 5000 },
|
||||
"acceleration_print_layer_0": { "value": 2500 },
|
||||
"acceleration_roofing": { "value": 2500 },
|
||||
"acceleration_skirt_brim": { "value": 2500 },
|
||||
"acceleration_support": { "value": 5000 },
|
||||
"acceleration_support_bottom": { "value": 5000 },
|
||||
"acceleration_support_infill": { "value": 5000 },
|
||||
"acceleration_support_interface": { "value": 5000 },
|
||||
"acceleration_support_roof": { "value": 5000 },
|
||||
"acceleration_topbottom": { "value": 2500 },
|
||||
"acceleration_travel_layer_0": { "value": 2500 },
|
||||
"acceleration_wall": { "value": 5000 },
|
||||
"acceleration_wall_x": { "value": 5000 },
|
||||
"adhesion_type": { "default_value": "skirt" },
|
||||
"alternate_extra_perimeter": { "value": true },
|
||||
"bottom_layers": { "value": 3 },
|
||||
"bottom_skin_expand_distance": { "value": 0.84 },
|
||||
"bottom_skin_preshrink": { "value": 0.84 },
|
||||
"bottom_thickness": { "value": 0.8 },
|
||||
"bridge_fan_speed_2": { "value": 100 },
|
||||
"bridge_fan_speed_3": { "value": 100 },
|
||||
"bridge_settings_enabled": { "value": true },
|
||||
"bridge_skin_density_2": { "value": 80 },
|
||||
"bridge_skin_material_flow": { "value": 100 },
|
||||
"bridge_skin_material_flow_2": { "value": 80 },
|
||||
"bridge_skin_speed": { "value": 20 },
|
||||
"bridge_skin_speed_2": { "value": 50 },
|
||||
"bridge_skin_speed_3": { "value": 50 },
|
||||
"bridge_wall_material_flow": { "value": 100 },
|
||||
"bridge_wall_speed": { "value": 20 },
|
||||
"connect_infill_polygons": { "value": false },
|
||||
"cool_fan_full_at_height": { "value": 0.14 },
|
||||
"cool_min_layer_time": { "value": 6 },
|
||||
"cool_min_speed": { "value": 30 },
|
||||
"cross_infill_pocket_size": { "value": 8 },
|
||||
"expand_skins_expand_distance": { "value": 0.84 },
|
||||
"fill_outline_gaps": { "value": false },
|
||||
"gantry_height": { "value": 25 },
|
||||
"gradual_infill_step_height": { "value": 2 },
|
||||
"infill_angles":
|
||||
{
|
||||
"value": [
|
||||
90
|
||||
]
|
||||
},
|
||||
"infill_extruder_nr": { "value": -1 },
|
||||
"infill_line_distance": { "value": 8 },
|
||||
"infill_material_flow": { "value": 90 },
|
||||
"infill_pattern": { "value": "'lines' if infill_sparse_density >= 25 else 'grid'" },
|
||||
"infill_sparse_density": { "value": 10 },
|
||||
"infill_sparse_thickness": { "value": 0.25 },
|
||||
"infill_wipe_dist": { "value": 0.1 },
|
||||
"initial_bottom_layers": { "value": 3 },
|
||||
"jerk_enabled": { "value": true },
|
||||
"jerk_infill": { "value": 15 },
|
||||
"jerk_layer_0": { "value": 15 },
|
||||
"jerk_prime_tower": { "value": 15 },
|
||||
"jerk_print": { "value": 15 },
|
||||
"jerk_print_layer_0": { "value": 15 },
|
||||
"jerk_roofing": { "value": 15 },
|
||||
"jerk_skirt_brim": { "value": 15 },
|
||||
"jerk_support": { "value": 15 },
|
||||
"jerk_support_bottom": { "value": 15 },
|
||||
"jerk_support_infill": { "value": 15 },
|
||||
"jerk_support_interface": { "value": 15 },
|
||||
"jerk_support_roof": { "value": 15 },
|
||||
"jerk_topbottom": { "value": 15 },
|
||||
"jerk_travel": { "value": 15 },
|
||||
"jerk_travel_layer_0": { "value": 15 },
|
||||
"jerk_wall": { "value": 15 },
|
||||
"jerk_wall_0": { "value": 15 },
|
||||
"jerk_wall_x": { "value": 15 },
|
||||
"machine_buildplate_type": { "value": "glass" },
|
||||
"machine_depth": { "value": 220 },
|
||||
"machine_heated_bed": { "value": true },
|
||||
"machine_height": { "value": 250 },
|
||||
"machine_max_jerk_e": { "value": 5 },
|
||||
"machine_max_jerk_xy": { "value": 30 },
|
||||
"machine_max_jerk_z": { "value": 0.3 },
|
||||
"machine_name": { "default_value": "AnkerMake M5" },
|
||||
"machine_shape": { "value": "rectangular" },
|
||||
"machine_show_variants": { "value": false },
|
||||
"machine_start_gcode": { "default_value": "M104 S{material_print_temperature_layer_0} ; set final nozzle temp\nM190 S{material_bed_temperature_layer_0} ; set and wait for nozzle temp to stabilize\nM109 S{material_print_temperature_layer_0} ; wait for nozzle temp to stabilize\nG28 ;Home\nG1 E10 F3600; push out retracted filament(fix for over retraction after prime)" },
|
||||
"machine_width": { "value": 220 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"material_flow_layer_0": { "value": 120 },
|
||||
"material_no_load_move_factor": { "value": 0.94 },
|
||||
"minimum_interface_area": { "value": 10 },
|
||||
"minimum_support_area": { "value": "2 if support_structure == 'normal' else 0" },
|
||||
"retract_at_layer_change": { "value": true },
|
||||
"retraction_amount": { "value": 0.8 },
|
||||
"retraction_combing": { "value": "noskin" },
|
||||
"retraction_combing_max_distance": { "value": 3 },
|
||||
"retraction_extrusion_window": { "value": 0.8 },
|
||||
"retraction_min_travel": { "value": 0.8 },
|
||||
"retraction_prime_speed": { "value": 60 },
|
||||
"retraction_retract_speed": { "value": 60 },
|
||||
"retraction_speed": { "value": 60 },
|
||||
"roofing_angles": { "value": [] },
|
||||
"roofing_monotonic": { "value": false },
|
||||
"roofing_pattern": { "value": "zigzag" },
|
||||
"skin_material_flow": { "value": 97 },
|
||||
"skin_monotonic": { "default_value": true },
|
||||
"skirt_brim_speed":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 50
|
||||
},
|
||||
"skirt_line_count": { "value": 3 },
|
||||
"small_feature_max_length": { "value": 9.42 },
|
||||
"small_hole_max_size": { "value": 3 },
|
||||
"speed_infill":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 270
|
||||
},
|
||||
"speed_layer_0":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 50
|
||||
},
|
||||
"speed_prime_tower":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 500
|
||||
},
|
||||
"speed_print":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 500
|
||||
},
|
||||
"speed_print_layer_0":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 50
|
||||
},
|
||||
"speed_roofing":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 150
|
||||
},
|
||||
"speed_support":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 250
|
||||
},
|
||||
"speed_support_bottom":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 166.667
|
||||
},
|
||||
"speed_support_infill":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 250
|
||||
},
|
||||
"speed_support_interface":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 166.667
|
||||
},
|
||||
"speed_support_roof":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 166.667
|
||||
},
|
||||
"speed_topbottom":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 150
|
||||
},
|
||||
"speed_travel":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 500
|
||||
},
|
||||
"speed_travel_layer_0":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 150
|
||||
},
|
||||
"speed_wall":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 250
|
||||
},
|
||||
"speed_wall_0":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 150
|
||||
},
|
||||
"speed_wall_x":
|
||||
{
|
||||
"maximum_value_warning": "550",
|
||||
"value": 250
|
||||
},
|
||||
"speed_wall_x_roofing": { "maximum_value_warning": "550" },
|
||||
"support_bottom_distance": { "value": 0.2 },
|
||||
"support_brim_enable": { "value": false },
|
||||
"support_brim_line_count": { "value": 20 },
|
||||
"support_brim_width": { "value": 8 },
|
||||
"support_infill_angles": { "value": [] },
|
||||
"support_infill_rate": { "value": 30 },
|
||||
"support_initial_layer_line_distance": { "value": 1.333 },
|
||||
"support_line_distance": { "value": 1.333 },
|
||||
"support_offset": { "value": 2 },
|
||||
"support_top_distance": { "value": 0.2 },
|
||||
"support_xy_distance": { "value": 0.8 },
|
||||
"support_xy_overrides_z": { "value": "xy_overrides_z" },
|
||||
"top_layers": { "value": 4 },
|
||||
"top_skin_expand_distance": { "value": 0.84 },
|
||||
"top_skin_preshrink": { "value": 0.84 },
|
||||
"travel_avoid_distance": { "value": 0.63 },
|
||||
"wall_0_extruder_nr": { "value": -1 },
|
||||
"wall_extruder_nr": { "value": -1 },
|
||||
"wall_line_width_0": { "value": 0.44 },
|
||||
"wall_overhang_angle": { "value": 45 },
|
||||
"wall_overhang_speed_factor": { "value": 40 },
|
||||
"wall_thickness": { "value": 0.84 },
|
||||
"wall_x_extruder_nr": { "value": -1 },
|
||||
"zig_zaggify_infill": { "value": true }
|
||||
}
|
||||
}
|
|
@ -13,7 +13,7 @@
|
|||
"cool_min_layer_time": { "value": 5 },
|
||||
"gantry_height": { "value": 25 },
|
||||
"machine_depth": { "default_value": 225 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y0 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\n\nG1 X0 Y0 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
|
|
55
resources/definitions/creality_k1max.def.json
Executable file
55
resources/definitions/creality_k1max.def.json
Executable file
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Creality K1 Max",
|
||||
"inherits": "creality_base",
|
||||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "Itay Grudev",
|
||||
"manufacturer": "Creality3D",
|
||||
"file_formats": "text/x-gcode",
|
||||
"first_start_actions": [ "MachineSettingsAction" ],
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": true,
|
||||
"machine_extruder_trains": { "0": "creality_k1max_extruder_0" },
|
||||
"preferred_material": "generic_pla",
|
||||
"preferred_quality_type": "standard",
|
||||
"preferred_variant_name": "0.4mm Nozzle",
|
||||
"quality_definition": "creality_base",
|
||||
"variants_name": "Nozzle Size"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"gantry_height": { "value": 45 },
|
||||
"machine_depth": { "default_value": 300 },
|
||||
"machine_end_gcode": { "default_value": "END_PRINT" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
[-50, 40],
|
||||
[-50, -62],
|
||||
[25, 40],
|
||||
[25, -62]
|
||||
]
|
||||
},
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_height": { "default_value": 300 },
|
||||
"machine_max_acceleration_e": { "value": 5000 },
|
||||
"machine_max_acceleration_x": { "value": 20000.0 },
|
||||
"machine_max_acceleration_y": { "value": 20000.0 },
|
||||
"machine_max_acceleration_z": { "value": 500.0 },
|
||||
"machine_max_feedrate_e": { "value": 100 },
|
||||
"machine_max_feedrate_x": { "value": 800 },
|
||||
"machine_max_feedrate_y": { "value": 800 },
|
||||
"machine_max_feedrate_z": { "value": 30 },
|
||||
"machine_max_jerk_e": { "value": 2.5 },
|
||||
"machine_max_jerk_xy": { "value": 9 },
|
||||
"machine_max_jerk_z": { "value": 2 },
|
||||
"machine_name": { "default_value": "Creality K1 Max" },
|
||||
"machine_start_gcode": { "default_value": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP={material_print_temperature_layer_0} BED_TEMP={material_bed_temperature_layer_0}\n" },
|
||||
"machine_width": { "default_value": 300 },
|
||||
"retraction_amount": { "default_value": 0.5 },
|
||||
"retraction_speed": { "default_value": 40 }
|
||||
}
|
||||
}
|
|
@ -11,7 +11,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 210 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"value": [
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"brim_width": { "default_value": 5 },
|
||||
"gantry_height": { "value": 30 },
|
||||
"machine_depth": { "default_value": 235 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F1600 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F1600 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
"gantry_height": { "value": 30 },
|
||||
"machine_always_write_active_tool": { "default_value": true },
|
||||
"machine_depth": { "default_value": 235 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-80 Z0.2 F1600 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-80 Z0.2 F1600 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"machine_extruders_share_heater": { "default_value": true },
|
||||
"machine_extruders_share_nozzle": { "default_value": true },
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 235 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"value": [
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 235 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"value": [
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
{
|
||||
"infill_overlap": { "value": "0 if infill_sparse_density < 40.01 and infill_pattern != 'concentric' else -5" },
|
||||
"machine_depth": { "default_value": 235 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-8 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-8 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"value": [
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
"initial_layer_line_width_factor": { "value": "100.0 if resolveOrValue('adhesion_type') == 'raft' else 125 if line_width < 0.5 else 110" },
|
||||
"machine_acceleration": { "value": 5000 },
|
||||
"machine_depth": { "default_value": 230 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z2 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth - 5} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z2 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth - 5} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 235 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-10 X5 Y5 Z3 F3000 ;Retract\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"value": [
|
||||
|
|
|
@ -4775,6 +4775,34 @@
|
|||
"settable_per_mesh": true,
|
||||
"settable_per_extruder": true
|
||||
},
|
||||
"support_z_seam_away_from_model":
|
||||
{
|
||||
"label": "Support Z Seam Away from Model",
|
||||
"description": "Manage the spatial relationship between the z seam of the support structure and the actual 3D model. This control is crucial as it allows users to ensure the seamless removal of support structures post-printing, without inflicting damage or leaving marks on the printed model.",
|
||||
"type": "bool",
|
||||
"default_value": true,
|
||||
"enabled": "support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true,
|
||||
"settable_per_meshgroup": false,
|
||||
"children":
|
||||
{
|
||||
"support_z_seam_min_distance":
|
||||
{
|
||||
"label": "Min Z Seam Distance from Model",
|
||||
"description": "The distance between the model and its support structure at the z-axis seam.",
|
||||
"unit": "mm",
|
||||
"minimum_value": "0.001",
|
||||
"value": "line_width * 2",
|
||||
"default_value": 0.8,
|
||||
"maximum_value_warning": "line_width * 4",
|
||||
"type": "float",
|
||||
"enabled": "support_z_seam_away_from_model and support_enable",
|
||||
"settable_per_mesh": false,
|
||||
"settable_per_extruder": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"support_type":
|
||||
{
|
||||
"label": "Support Placement",
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 302 },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_height": { "default_value": 402 },
|
||||
"machine_name": { "default_value": "SV04 Copy Mode" },
|
||||
"machine_start_gcode": { "default_value": ";SV04 start\nM140 S{material_bed_temperature};\nM104 S{material_print_temperature};\nM280 P0 S160;\nG4 P100;\nG28;\nM420 S1;\nM190 S{material_bed_temperature};\nM109 S{material_print_temperature};\nG92 E0;\nG1 X10.1 Y20 Z0.28 F5000.0;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15;\nG1 X10.4 Y200.0 Z0.28 F5000.0;\nG1 X10.4 Y20 Z0.28 F1500.0 E30;\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000;" },
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 302 },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_extruder_count": { "default_value": 2 },
|
||||
"machine_height": { "default_value": 402 },
|
||||
"machine_name": { "default_value": "SV04 Dual Mode" },
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 302 },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_height": { "default_value": 402 },
|
||||
"machine_name": { "default_value": "SV04 Mirror Mode" },
|
||||
"machine_start_gcode": { "default_value": ";SV04 start\nM140 S{material_bed_temperature};\nM104 S{material_print_temperature};\nM280 P0 S160;\nG4 P100;\nG28;\nM420 S1;\nM190 S{material_bed_temperature};\nM109 S{material_print_temperature};\nG92 E0;\nG1 X10.1 Y20 Z0.28 F5000.0;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15;\nG1 X10.4 Y200.0 Z0.28 F5000.0;\nG1 X10.4 Y20 Z0.28 F1500.0 E30;\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000;" },
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 302 },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_height": { "default_value": 402 },
|
||||
"machine_name": { "default_value": "SV04 Single Mode 01" },
|
||||
"machine_start_gcode": { "default_value": ";SV04 start\nM140 S{material_bed_temperature};\nM104 S{material_print_temperature};\nM280 P0 S160;\nG4 P100;\nG28;\nM420 S1;\nM190 S{material_bed_temperature};\nM109 S{material_print_temperature};\nG92 E0;\nG1 X10.1 Y20 Z0.28 F5000.0;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15;\nG1 X10.4 Y200.0 Z0.28 F5000.0;\nG1 X10.4 Y20 Z0.28 F1500.0 E30;\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000;" },
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"overrides":
|
||||
{
|
||||
"machine_depth": { "default_value": 302 },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_end_gcode": { "default_value": ";SV04 end\nG91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y240 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM84 X Y E ;Disable all steppers but Z" },
|
||||
"machine_height": { "default_value": 402 },
|
||||
"machine_name": { "default_value": "SV04 Single Mode 02" },
|
||||
"machine_start_gcode": { "default_value": ";SV04 start\nM140 S{material_bed_temperature};\nM104 S{material_print_temperature};\nM280 P0 S160;\nG4 P100;\nG28;\nM420 S1;\nM190 S{material_bed_temperature};\nM109 S{material_print_temperature};\nG92 E0;\nG1 X10.1 Y20 Z0.28 F5000.0;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15;\nG1 X10.4 Y200.0 Z0.28 F5000.0;\nG1 X10.4 Y20 Z0.28 F1500.0 E30;\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000;" },
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
"infill_wipe_dist": { "value": 0.1 },
|
||||
"jerk_travel": { "value": "jerk_print" },
|
||||
"machine_depth": { "default_value": 300 },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y220 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
|
||||
"machine_end_gcode": { "default_value": "G91 ;Relative positioning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X0 Y220 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positioning\n\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" },
|
||||
"machine_head_with_fans_polygon":
|
||||
{
|
||||
"default_value": [
|
||||
|
|
259
resources/definitions/ultimaker_sketch.def.json
Normal file
259
resources/definitions/ultimaker_sketch.def.json
Normal file
|
@ -0,0 +1,259 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "UltiMaker Sketch",
|
||||
"inherits": "ultimaker",
|
||||
"metadata":
|
||||
{
|
||||
"visible": true,
|
||||
"author": "Ultimaker",
|
||||
"manufacturer": "Ultimaker B.V.",
|
||||
"file_formats": "application/x-makerbot-sketch",
|
||||
"platform": "ultimaker_sketch_platform.obj",
|
||||
"exclude_materials": [
|
||||
"dsm_175_novamidid1030cf",
|
||||
"Essentium_175_UltrafuseZPCTG",
|
||||
"imade3d_petg_175",
|
||||
"imade3d_pla_175",
|
||||
"imade3d_petg_green",
|
||||
"imade3d_pla_green",
|
||||
"imade3d_petg_pink",
|
||||
"imade3d_pla_pink",
|
||||
"chromatik_pla",
|
||||
"3D-Fuel_PLA_PRO_Black",
|
||||
"3D-Fuel_PLA_SnapSupport",
|
||||
"bestfilament_abs_skyblue",
|
||||
"bestfilament_petg_orange",
|
||||
"bestfilament_pla_green",
|
||||
"dsm_arnitel2045_175",
|
||||
"dsm_novamid1070_175",
|
||||
"emotiontech_abs",
|
||||
"emotiontech_absx",
|
||||
"emotiontech_acetate",
|
||||
"emotiontech_asax",
|
||||
"emotiontech_bvoh",
|
||||
"emotiontech_copa",
|
||||
"emotiontech_hips",
|
||||
"emotiontech_nylon_1030",
|
||||
"emotiontech_nylon_1030cf",
|
||||
"emotiontech_nylon_1070",
|
||||
"emotiontech_pc",
|
||||
"emotiontech_pekk",
|
||||
"emotiontech_petg",
|
||||
"emotiontech_pla",
|
||||
"emotiontech_pla_hr_870",
|
||||
"emotiontech_pva-m",
|
||||
"emotiontech_pva-s",
|
||||
"emotiontech_tpu98a",
|
||||
"eryone_petg",
|
||||
"eryone_pla",
|
||||
"eryone_pla_glow",
|
||||
"eryone_pla_matte",
|
||||
"eryone_pla_wood",
|
||||
"eryone_tpu",
|
||||
"eSUN_PETG_Black",
|
||||
"eSUN_PETG_Grey",
|
||||
"eSUN_PETG_Purple",
|
||||
"eSUN_PLA_PRO_Black",
|
||||
"eSUN_PLA_PRO_Grey",
|
||||
"eSUN_PLA_PRO_Purple",
|
||||
"eSUN_PLA_PRO_White",
|
||||
"Extrudr_GreenTECPro_Anthracite_175",
|
||||
"Extrudr_GreenTECPro_Black_175",
|
||||
"Extrudr_GreenTECPro_Blue_175",
|
||||
"Extrudr_GreenTECPro_Nature_175",
|
||||
"Extrudr_GreenTECPro_Red_175",
|
||||
"Extrudr_GreenTECPro_Silver_175",
|
||||
"Extrudr_GreenTECPro_White_175",
|
||||
"fabtotum_abs",
|
||||
"fabtotum_nylon",
|
||||
"fabtotum_pla",
|
||||
"fabtotum_tpu",
|
||||
"fdplast_abs_tomato",
|
||||
"fdplast_petg_gray",
|
||||
"fdplast_pla_olive",
|
||||
"filo3d_pla",
|
||||
"filo3d_pla_green",
|
||||
"filo3d_pla_red",
|
||||
"generic_asa_175",
|
||||
"generic_abs_175",
|
||||
"generic_absr_175",
|
||||
"generic_bvoh_175",
|
||||
"generic_cpe_175",
|
||||
"generic_cffpa_175",
|
||||
"generic_hips_175",
|
||||
"generic_nylon_175",
|
||||
"generic_pc_175",
|
||||
"generic_petg_175",
|
||||
"generic_pva_175",
|
||||
"generic_rapidrinse_175",
|
||||
"generic_sr30_175",
|
||||
"generic_tpu_175",
|
||||
"goofoo_abs",
|
||||
"goofoo_asa",
|
||||
"goofoo_bronze_pla",
|
||||
"goofoo_emarble_pla",
|
||||
"goofoo_esilk_pla",
|
||||
"goofoo_hips",
|
||||
"goofoo_pa",
|
||||
"goofoo_pa_cf",
|
||||
"goofoo_pc",
|
||||
"goofoo_peek",
|
||||
"goofoo_petg",
|
||||
"goofoo_pla",
|
||||
"goofoo_pva",
|
||||
"goofoo_tpe_83a",
|
||||
"goofoo_tpu_87a",
|
||||
"goofoo_tpu_95a",
|
||||
"goofoo_wood_pla",
|
||||
"ideagen3D_ToughPLA",
|
||||
"imade3d_petg_175",
|
||||
"imade3d_pla_175",
|
||||
"innofill_innoflex60_175",
|
||||
"layer_one_black_pla",
|
||||
"layer_one_dark_gray_pla",
|
||||
"layer_one_white_pla",
|
||||
"leapfrog_abs_natural",
|
||||
"leapfrog_epla_natural",
|
||||
"leapfrog_pva_natural",
|
||||
"polyflex_pla",
|
||||
"polymax_pla",
|
||||
"polyplus_pla",
|
||||
"polywood_pla",
|
||||
"redd_abs",
|
||||
"redd_asa",
|
||||
"redd_hips",
|
||||
"redd_nylon",
|
||||
"redd_petg",
|
||||
"redd_pla",
|
||||
"redd_tpe",
|
||||
"tizyx_abs",
|
||||
"tizyx_flex",
|
||||
"tizyx_petg",
|
||||
"tizyx_pla",
|
||||
"tizyx_pla_bois",
|
||||
"tizyx_pva",
|
||||
"verbatim_bvoh_175",
|
||||
"Vertex_Delta_ABS",
|
||||
"Vertex_Delta_PET",
|
||||
"Vertex_Delta_PLA",
|
||||
"Vertex_Delta_PLA_Glitter",
|
||||
"Vertex_Delta_PLA_Mat",
|
||||
"Vertex_Delta_PLA_Satin",
|
||||
"Vertex_Delta_PLA_Wood",
|
||||
"Vertex_Delta_TPU",
|
||||
"volumic_abs_ultra",
|
||||
"volumic_arma_ultra",
|
||||
"volumic_asa_ultra",
|
||||
"volumic_br80_ultra",
|
||||
"volumic_bumper_ultra",
|
||||
"volumic_cu80_ultra",
|
||||
"volumic_flex93_ultra",
|
||||
"volumic_medical_ultra",
|
||||
"volumic_nylon_ultra",
|
||||
"volumic_pekk_carbone",
|
||||
"volumic_petgcarbone_ultra",
|
||||
"volumic_petg_ultra",
|
||||
"volumic_pla_ultra",
|
||||
"volumic_pp_ultra",
|
||||
"volumic_strong_ultra",
|
||||
"volumic_support_ultra",
|
||||
"xyzprinting_abs",
|
||||
"xyzprinting_antibact_pla",
|
||||
"xyzprinting_carbon_fiber",
|
||||
"xyzprinting_colorinkjet_pla",
|
||||
"xyzprinting_flexible",
|
||||
"xyzprinting_metallic_pla",
|
||||
"xyzprinting_nylon",
|
||||
"xyzprinting_pahtcf15",
|
||||
"xyzprinting_pc",
|
||||
"xyzprinting_petcf15",
|
||||
"xyzprinting_petg",
|
||||
"xyzprinting_pla",
|
||||
"xyzprinting_ppgf30",
|
||||
"xyzprinting_tough_pla",
|
||||
"xyzprinting_tpu",
|
||||
"zyyx_pro_flex",
|
||||
"zyyx_pro_pla",
|
||||
"octofiber_pla",
|
||||
"fiberlogy_hd_pla"
|
||||
],
|
||||
"has_machine_quality": true,
|
||||
"has_materials": true,
|
||||
"has_variants": false,
|
||||
"machine_extruder_trains": { "0": "ultimaker_sketch_extruder" },
|
||||
"platform_offset": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"platform_texture": "MakerbotSketch.png",
|
||||
"preferred_quality_type": "draft",
|
||||
"preferred_variant_name": "0.4mm",
|
||||
"reference_machine_id": "sketch",
|
||||
"supports_network_connection": true,
|
||||
"supports_usb_connection": false,
|
||||
"variant_definition": "ultimaker_sketch",
|
||||
"variants_name": "Extruder",
|
||||
"weight": -1
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"acceleration_enabled": { "value": false },
|
||||
"adhesion_type": { "value": "'raft'" },
|
||||
"brim_width": { "value": "3" },
|
||||
"cool_fan_speed": { "value": "100" },
|
||||
"extruder_prime_pos_abs": { "default_value": true },
|
||||
"gantry_height": { "value": "60" },
|
||||
"infill_overlap": { "value": 15 },
|
||||
"infill_pattern": { "value": "'zigzag' if infill_sparse_density > 80 else 'triangles'" },
|
||||
"infill_sparse_density": { "value": 15 },
|
||||
"jerk_enabled": { "value": false },
|
||||
"layer_start_x": { "value": "sum(extruderValues('machine_extruder_start_pos_x')) / len(extruderValues('machine_extruder_start_pos_x'))" },
|
||||
"layer_start_y": { "value": "sum(extruderValues('machine_extruder_start_pos_y')) / len(extruderValues('machine_extruder_start_pos_y'))" },
|
||||
"machine_center_is_zero": { "default_value": true },
|
||||
"machine_depth": { "default_value": 150 },
|
||||
"machine_end_gcode": { "default_value": "M107; Disable Fan; \n; End of print; \n; End GCode\nM104 S0 T0; Set Toolhead Temp to 0\nM140 S0 T0; Set Platform Temp to 0\nG162 Z F1800; Move to max axes position\nG28 X Y; Home\nM652; Turn off back fan\nM132 X Y Z A B; Set Home Position\nG91; Use Relative Positioning\nM18; Disable Axes\n\n" },
|
||||
"machine_extruder_count": { "default_value": 1 },
|
||||
"machine_gcode_flavor": { "default_value": "Griffin" },
|
||||
"machine_heated_bed": { "default_value": true },
|
||||
"machine_height": { "default_value": 150 },
|
||||
"machine_max_feedrate_x": { "default_value": 300 },
|
||||
"machine_max_feedrate_y": { "default_value": 300 },
|
||||
"machine_max_feedrate_z": { "default_value": 40 },
|
||||
"machine_min_cool_heat_time_window": { "value": "15" },
|
||||
"machine_name": { "default_value": "UltiMaker Sketch" },
|
||||
"machine_nozzle_cool_down_speed": { "default_value": 0.8 },
|
||||
"machine_nozzle_heat_up_speed": { "default_value": 1.4 },
|
||||
"machine_start_gcode": { "default_value": "M140 S50 T0; Set Platform Temp\nM104 S220 T0; Set Extruder Temp\nG90; Use Absolute Positioning\nG28; Home\nM132 X Y Z A B; Set Current Position to Home\nG161 X Y F3300; Move to min axes positions\nM7 T0; Wait For Platform to Heat\nM6 T0; Wait For Extruders to Heat\nM651; Turn on back fan\nM907 X100 Y100 Z40 A80 B20; Set Stepper Currents\nM106; Enable Cooling Fan\n; Purge Line\nG92 E0; Reset Extruder Axis Position\nG1 X-26.18 Y-75.90 Z0.200 F420\nG1 X26.18 Y-75.90 E10\nG92 E0; Reset Extruder Axis Position\n; Start GCode\n" },
|
||||
"machine_width": { "default_value": 150 },
|
||||
"material_diameter": { "default_value": 1.75 },
|
||||
"material_flow": { "default_value": 109 },
|
||||
"multiple_mesh_overlap": { "value": "0" },
|
||||
"optimize_wall_printing_order": { "value": "True" },
|
||||
"prime_blob_enable":
|
||||
{
|
||||
"default_value": true,
|
||||
"enabled": true,
|
||||
"value": "resolveOrValue('print_sequence') != 'one_at_a_time'"
|
||||
},
|
||||
"raft_margin": { "value": "5" },
|
||||
"retraction_amount": { "value": "5.5" },
|
||||
"retraction_prime_speed": { "value": "15" },
|
||||
"retraction_speed": { "value": "25" },
|
||||
"speed_print": { "value": 60 },
|
||||
"speed_support": { "value": "0.7 * speed_print" },
|
||||
"speed_support_interface": { "value": "speed_topbottom" },
|
||||
"speed_topbottom": { "value": "0.7 * speed_print" },
|
||||
"speed_travel": { "value": 80 },
|
||||
"speed_wall": { "value": "0.7 * speed_print" },
|
||||
"speed_wall_0": { "value": "0.5 * speed_print " },
|
||||
"speed_wall_x": { "value": "speed_wall" },
|
||||
"speed_z_hop": { "value": 7 },
|
||||
"support_angle": { "value": "45" },
|
||||
"top_bottom_thickness": { "value": "4 * layer_height" },
|
||||
"travel_avoid_distance": { "value": "machine_nozzle_tip_outer_diameter / 2 * 1.5" },
|
||||
"wall_0_inset": { "value": "0" },
|
||||
"wall_thickness": { "value": "2 * machine_nozzle_size" },
|
||||
"zig_zaggify_infill": { "value": "gradual_infill_steps == 0" }
|
||||
}
|
||||
}
|
15
resources/extruders/ankermake_m5c_extruder_0.def.json
Normal file
15
resources/extruders/ankermake_m5c_extruder_0.def.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "ankermake_m5c",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
16
resources/extruders/creality_k1max_extruder_0.def.json
Executable file
16
resources/extruders/creality_k1max_extruder_0.def.json
Executable file
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Extruder 1",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "creality_k1max",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
22
resources/extruders/ultimaker_sketch_extruder.def.json
Normal file
22
resources/extruders/ultimaker_sketch_extruder.def.json
Normal file
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"version": 2,
|
||||
"name": "Extruder",
|
||||
"inherits": "fdmextruder",
|
||||
"metadata":
|
||||
{
|
||||
"machine": "ultimaker_sketch",
|
||||
"position": "0"
|
||||
},
|
||||
"overrides":
|
||||
{
|
||||
"extruder_nr":
|
||||
{
|
||||
"default_value": 0,
|
||||
"maximum_value": "1"
|
||||
},
|
||||
"machine_nozzle_offset_x": { "default_value": 0 },
|
||||
"machine_nozzle_offset_y": { "default_value": 0 },
|
||||
"machine_nozzle_size": { "default_value": 0.4 },
|
||||
"material_diameter": { "default_value": 1.75 }
|
||||
}
|
||||
}
|
5
resources/i18n/README.md
Normal file
5
resources/i18n/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
If you aim to contribute translations please [look here](https://github.com/Ultimaker/Cura/wiki/Translating-Cura) first.
|
||||
|
||||
In particular, take heed of the following: <br>
|
||||
When we're in the release-window (so that's when we have the beta out for the next Cura, but not the final release yet), we're also in the process of updating translations.
|
||||
_**If you make a PR with updated or fixed translations within this timespan, it's likely that your additions/changes will be ignored in favour of the 'official' ones, due to how our process is set up.**_
|
BIN
resources/images/MakerbotSketch.png
Normal file
BIN
resources/images/MakerbotSketch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
resources/images/ankermake_m5c.png
Normal file
BIN
resources/images/ankermake_m5c.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 517 KiB |
745
resources/meshes/ankermake_m5c_platform.obj
Normal file
745
resources/meshes/ankermake_m5c_platform.obj
Normal file
|
@ -0,0 +1,745 @@
|
|||
# Exported from 3D Builder
|
||||
mtllib D:\Documents\Projects\AnkerMake-M5-Profile\5.1\images\AM-M5-bed.mtl
|
||||
|
||||
o Object.1
|
||||
v 121.092972 123.154205 -0.102764
|
||||
v 119.840958 123.932068 -0.102778
|
||||
v 119.840958 123.932068 0.097220
|
||||
v 121.092972 123.154205 0.097234
|
||||
v 78.657051 -126.525543 0.102253
|
||||
v 78.012062 -126.955132 0.102262
|
||||
v 78.012062 -126.955139 -0.097736
|
||||
v 78.657051 -126.525551 -0.097745
|
||||
v -75.704933 -141.014282 -0.097276
|
||||
v -75.352928 -141.851379 -0.097260
|
||||
v -75.352928 -141.851364 0.102738
|
||||
v -75.704933 -141.014282 0.102722
|
||||
v -74.881927 -142.616196 -0.097246
|
||||
v -74.881927 -142.616180 0.102752
|
||||
v 116.994965 124.874573 -0.102794
|
||||
v 118.468956 124.512222 -0.102788
|
||||
v 115.440956 125.000031 -0.102794
|
||||
v 122.205963 122.196655 -0.102746
|
||||
v 123.159973 121.079498 -0.102725
|
||||
v 123.935974 119.821854 -0.102701
|
||||
v 124.513977 118.444763 -0.102674
|
||||
v 124.874969 116.966278 -0.102645
|
||||
v 124.999969 115.405518 -0.102615
|
||||
v 79.364059 -126.202339 0.102246
|
||||
v 79.364059 -126.202347 -0.097752
|
||||
v -76.946938 -128.027161 0.102464
|
||||
v -76.946938 -128.027161 -0.097534
|
||||
v -76.547928 -128.674576 -0.097521
|
||||
v -76.547928 -128.674561 0.102477
|
||||
v 80.123062 -125.999588 0.102241
|
||||
v 80.123062 -125.999596 -0.097757
|
||||
v 80.924057 -125.929337 -0.097759
|
||||
v 80.924057 -125.929329 0.102239
|
||||
v 125.000061 -116.334778 -0.098002
|
||||
v 124.875061 -117.895561 -0.097971
|
||||
v -115.441032 124.999939 -0.102525
|
||||
v 75.924065 -140.114868 -0.097471
|
||||
v 75.924065 -140.114868 0.102527
|
||||
v 75.705070 -141.014221 0.102545
|
||||
v 75.705070 -141.014221 -0.097453
|
||||
v 74.301064 -143.294632 -0.097406
|
||||
v 74.301064 -143.294632 0.102592
|
||||
v 73.625069 -143.876816 -0.097394
|
||||
v 118.468956 124.512222 0.097210
|
||||
v 74.881050 -142.616135 -0.097420
|
||||
v 74.881050 -142.616135 0.102578
|
||||
v 116.994965 124.874573 0.097204
|
||||
v 75.353065 -141.851318 -0.097436
|
||||
v 75.353065 -141.851318 0.102562
|
||||
v 115.440956 125.000031 0.097204
|
||||
v 115.441055 -125.929314 0.102198
|
||||
v 115.441055 -125.929321 -0.097800
|
||||
v 116.995064 -125.803848 -0.097804
|
||||
v 116.995064 -125.803841 0.102194
|
||||
v 118.469055 -125.441521 -0.097813
|
||||
v 118.469055 -125.441513 0.102185
|
||||
v -124.999947 -116.334877 -0.097710
|
||||
v -125.000031 115.405426 0.097675
|
||||
v -125.000031 115.405418 -0.102323
|
||||
v 119.841057 -124.861359 -0.097826
|
||||
v 119.841057 -124.861351 0.102172
|
||||
v 121.093071 -124.082481 -0.097843
|
||||
v 121.093071 -124.082474 0.102155
|
||||
v -124.874954 -117.895653 0.102319
|
||||
v -124.513947 -119.374130 0.102348
|
||||
v -124.999947 -116.334869 0.102288
|
||||
v 124.514069 -119.374039 -0.097941
|
||||
v 123.936066 -120.751137 -0.097913
|
||||
v 123.160065 -122.008789 -0.097887
|
||||
v 122.206055 -123.124947 -0.097863
|
||||
v 122.206055 -123.124939 0.102135
|
||||
v 74.000061 -122.918182 -0.097811
|
||||
v -72.999939 -122.918236 -0.097640
|
||||
v 123.160065 -122.008789 0.102111
|
||||
v 123.936066 -120.751137 0.102085
|
||||
v -116.996040 124.874481 0.097477
|
||||
v -116.996040 124.874481 -0.102521
|
||||
v -118.469032 124.512131 -0.102512
|
||||
v -118.469032 124.512131 0.097486
|
||||
v 124.514069 -119.374039 0.102057
|
||||
v -119.841042 123.931976 -0.102499
|
||||
v -119.841042 123.931976 0.097499
|
||||
v 124.875061 -117.895561 0.102027
|
||||
v -121.094032 123.154114 -0.102482
|
||||
v -121.094032 123.154114 0.097516
|
||||
v 125.000061 -116.334778 0.101996
|
||||
v -122.207047 122.196564 -0.102462
|
||||
v -122.207047 122.196564 0.097537
|
||||
v -123.161026 121.079407 -0.102438
|
||||
v -123.161026 121.079407 0.097560
|
||||
v -123.936020 119.821762 -0.102412
|
||||
v -123.936020 119.821762 0.097586
|
||||
v 76.250061 -129.496536 -0.097683
|
||||
v 76.548050 -128.762833 -0.097698
|
||||
v 76.948059 -128.086334 -0.097712
|
||||
v -124.514038 118.444664 -0.102384
|
||||
v -124.514038 118.444672 0.097614
|
||||
v -124.875038 116.966179 -0.102354
|
||||
v -124.875038 116.966187 0.097644
|
||||
v 77.439056 -127.480080 -0.097724
|
||||
v 76.000069 -139.166367 0.102508
|
||||
v 76.000069 -139.166367 -0.097490
|
||||
v -115.441032 124.999939 0.097473
|
||||
v 76.000061 -131.083420 0.102347
|
||||
v 76.000061 -131.083420 -0.097651
|
||||
v -80.121941 -126.071922 0.102429
|
||||
v -80.922943 -126.007690 0.102429
|
||||
v -80.922943 -126.007698 -0.097569
|
||||
v -80.121941 -126.071930 -0.097569
|
||||
v 124.874969 116.966278 0.097353
|
||||
v 124.999969 115.405518 0.097383
|
||||
v 76.064056 -130.274429 0.102331
|
||||
v 76.064056 -130.274445 -0.097667
|
||||
v 124.513977 118.444763 0.097324
|
||||
v -79.363937 -126.258606 0.102432
|
||||
v -79.363937 -126.258614 -0.097566
|
||||
v 74.000069 -142.992523 -0.097412
|
||||
v 123.935974 119.821869 0.097297
|
||||
v 76.250061 -129.496536 0.102315
|
||||
v -78.656929 -126.557716 0.102437
|
||||
v -78.656929 -126.557724 -0.097561
|
||||
v 123.159973 121.079514 0.097273
|
||||
v 76.548050 -128.762817 0.102300
|
||||
v 122.205963 122.196655 0.097252
|
||||
v -78.011940 -126.959198 0.102444
|
||||
v -78.011940 -126.959206 -0.097554
|
||||
v 76.948059 -128.086319 0.102286
|
||||
v -77.438934 -127.452026 0.102454
|
||||
v -77.438934 -127.452034 -0.097544
|
||||
v 77.439056 -127.480072 0.102274
|
||||
v -74.301933 -143.294693 -0.097233
|
||||
v -74.301933 -143.294678 0.102765
|
||||
v -73.624931 -143.876877 -0.097222
|
||||
v -73.624931 -143.876862 0.102776
|
||||
v -88.022942 -125.929398 -0.097562
|
||||
v -121.093933 -124.082565 0.102437
|
||||
v -76.249939 -129.384201 -0.097507
|
||||
v -88.022942 -126.007698 -0.097561
|
||||
v -76.063942 -130.146011 -0.097492
|
||||
v -75.999939 -130.948990 -0.097476
|
||||
v -72.999931 -142.992584 -0.097240
|
||||
v 71.133072 -144.923676 -0.097370
|
||||
v 72.029060 -144.703873 -0.097375
|
||||
v 70.188072 -144.999969 -0.097367
|
||||
v 72.863068 -144.350555 -0.097383
|
||||
v -70.187927 -145.000031 -0.097204
|
||||
v -72.028931 -144.703934 -0.097207
|
||||
v -71.133934 -144.923737 -0.097204
|
||||
v -72.863922 -144.350616 -0.097213
|
||||
v -75.999931 -139.166428 -0.097313
|
||||
v -75.923935 -140.114929 -0.097294
|
||||
v 70.188072 -144.999969 0.102631
|
||||
v -70.187927 -145.000015 0.102794
|
||||
v 71.133072 -144.923676 0.102628
|
||||
v 72.029060 -144.703873 0.102623
|
||||
v 72.863068 -144.350555 0.102615
|
||||
v 73.625069 -143.876816 0.102604
|
||||
v -72.863922 -144.350601 0.102785
|
||||
v -72.028931 -144.703918 0.102791
|
||||
v -71.133934 -144.923721 0.102794
|
||||
v -115.440933 -125.929413 -0.097530
|
||||
v -116.995941 -125.803940 -0.097531
|
||||
v -118.468933 -125.441612 -0.097537
|
||||
v -119.840942 -124.861450 -0.097547
|
||||
v -121.093933 -124.082573 -0.097561
|
||||
v -122.206947 -123.125038 -0.097578
|
||||
v -123.160934 -122.008888 -0.097599
|
||||
v -123.935928 -120.751236 -0.097624
|
||||
v -124.513947 -119.374138 -0.097650
|
||||
v -124.874954 -117.895660 -0.097679
|
||||
v -76.249939 -129.384186 0.102491
|
||||
v -76.063942 -130.145996 0.102506
|
||||
v -75.999939 -130.948975 0.102522
|
||||
v -75.999931 -139.166428 0.102685
|
||||
v -88.022942 -125.929398 0.102436
|
||||
v -88.022942 -126.007698 0.102437
|
||||
v -123.935928 -120.751228 0.102374
|
||||
v -123.160934 -122.008881 0.102399
|
||||
v -122.206947 -123.125031 0.102420
|
||||
v -119.840942 -124.861443 0.102451
|
||||
v -118.468933 -125.441605 0.102461
|
||||
v -116.995941 -125.803932 0.102467
|
||||
v -115.440933 -125.929405 0.102468
|
||||
v -75.923935 -140.114929 0.102704
|
||||
|
||||
usemtl Material.001_0
|
||||
f 1 2 3
|
||||
f 1 3 4
|
||||
f 18 1 4
|
||||
f 18 4 124
|
||||
f 19 18 124
|
||||
f 19 124 122
|
||||
f 20 19 122
|
||||
f 20 122 118
|
||||
f 21 20 118
|
||||
f 21 118 114
|
||||
f 22 21 114
|
||||
f 22 114 110
|
||||
f 23 22 110
|
||||
f 23 110 111
|
||||
f 23 111 34
|
||||
f 17 36 50
|
||||
f 15 17 50
|
||||
f 15 50 47
|
||||
f 16 15 47
|
||||
f 16 47 44
|
||||
f 2 16 44
|
||||
f 70 74 71
|
||||
f 62 70 71
|
||||
f 69 68 75
|
||||
f 69 75 74
|
||||
f 35 86 83
|
||||
f 67 35 83
|
||||
f 35 34 86
|
||||
f 67 83 80
|
||||
f 68 67 80
|
||||
f 68 80 75
|
||||
f 60 62 63
|
||||
f 60 63 61
|
||||
f 55 60 61
|
||||
f 55 61 56
|
||||
f 53 55 56
|
||||
f 53 56 54
|
||||
f 51 53 54
|
||||
f 51 33 52
|
||||
f 32 52 33
|
||||
f 32 33 30
|
||||
f 32 30 31
|
||||
f 120 116 121
|
||||
f 125 120 121
|
||||
f 125 121 126
|
||||
f 128 125 126
|
||||
f 128 126 129
|
||||
f 128 129 27
|
||||
f 128 27 26
|
||||
f 130 127 95
|
||||
f 130 95 100
|
||||
f 6 130 100
|
||||
f 6 100 7
|
||||
f 5 6 7
|
||||
f 5 7 8
|
||||
f 24 5 8
|
||||
f 24 8 25
|
||||
f 30 24 25
|
||||
f 106 107 108
|
||||
f 106 108 109
|
||||
f 115 106 109
|
||||
f 115 109 116
|
||||
f 76 77 78
|
||||
f 76 78 79
|
||||
f 91 97 92
|
||||
f 89 91 92
|
||||
f 96 98 99
|
||||
f 96 99 97
|
||||
f 165 136 179
|
||||
f 165 179 166
|
||||
f 168 167 178
|
||||
f 168 178 177
|
||||
f 169 168 177
|
||||
f 169 177 65
|
||||
f 170 169 65
|
||||
f 170 65 64
|
||||
f 66 170 64
|
||||
f 66 57 170
|
||||
f 58 57 66
|
||||
f 57 58 59
|
||||
f 163 180 164
|
||||
f 164 180 136
|
||||
f 163 181 180
|
||||
f 162 181 163
|
||||
f 162 182 181
|
||||
f 175 183 135
|
||||
f 175 135 138
|
||||
f 175 138 176
|
||||
f 107 176 138
|
||||
f 161 183 182
|
||||
f 161 182 162
|
||||
f 161 135 183
|
||||
f 98 59 58
|
||||
f 167 166 179
|
||||
f 164 136 165
|
||||
f 167 179 178
|
||||
f 98 58 99
|
||||
f 87 89 90
|
||||
f 87 90 88
|
||||
f 84 87 88
|
||||
f 84 88 85
|
||||
f 81 84 85
|
||||
f 81 85 82
|
||||
f 78 81 82
|
||||
f 91 96 97
|
||||
f 89 92 90
|
||||
f 36 76 103
|
||||
f 78 82 79
|
||||
f 108 107 138
|
||||
f 123 93 94
|
||||
f 127 123 94
|
||||
f 123 119 93
|
||||
f 119 113 93
|
||||
f 119 112 113
|
||||
f 112 105 113
|
||||
f 104 102 105
|
||||
f 104 101 102
|
||||
f 102 101 37
|
||||
f 38 37 101
|
||||
f 37 38 39
|
||||
f 37 39 40
|
||||
f 45 42 41
|
||||
f 41 42 43
|
||||
f 43 42 157
|
||||
f 43 157 156
|
||||
f 43 156 145
|
||||
f 143 154 142
|
||||
f 142 154 152
|
||||
f 142 152 144
|
||||
f 144 152 146
|
||||
f 172 139 140
|
||||
f 172 140 173
|
||||
f 39 49 48
|
||||
f 48 49 46
|
||||
f 146 153 160
|
||||
f 146 160 148
|
||||
f 148 160 159
|
||||
f 148 159 147
|
||||
f 147 158 149
|
||||
f 149 158 133
|
||||
f 134 133 158
|
||||
f 13 132 14
|
||||
f 10 13 14
|
||||
f 133 132 131
|
||||
f 9 10 11
|
||||
f 9 11 12
|
||||
f 151 9 12
|
||||
f 151 12 184
|
||||
f 151 184 174
|
||||
f 150 151 174
|
||||
f 140 150 174
|
||||
f 13 131 132
|
||||
f 10 14 11
|
||||
f 133 134 132
|
||||
f 147 159 158
|
||||
f 140 174 173
|
||||
f 171 139 172
|
||||
f 171 137 139
|
||||
f 29 137 171
|
||||
f 29 28 137
|
||||
f 26 28 29
|
||||
f 146 152 153
|
||||
f 143 155 154
|
||||
f 145 155 143
|
||||
f 145 156 155
|
||||
f 45 46 42
|
||||
f 48 46 45
|
||||
f 39 48 40
|
||||
f 112 104 105
|
||||
f 127 94 95
|
||||
f 26 27 28
|
||||
f 120 115 116
|
||||
f 36 77 76
|
||||
f 30 25 31
|
||||
f 51 52 53
|
||||
f 70 69 74
|
||||
f 62 71 63
|
||||
f 103 50 36
|
||||
f 86 34 111
|
||||
f 2 44 3
|
||||
|
||||
vt -0.000000 0.964465
|
||||
vt 0.000000 0.106167
|
||||
vt 0.961764 1.000000
|
||||
vt 0.000500 0.100387
|
||||
vt 0.001944 0.094911
|
||||
vt 0.004256 0.089810
|
||||
vt 0.007360 0.085152
|
||||
vt 0.011176 0.081019
|
||||
vt 0.015628 0.077472
|
||||
vt 0.020636 0.074587
|
||||
vt 0.026124 0.072439
|
||||
vt 0.032020 0.071097
|
||||
vt 0.038236 0.070632
|
||||
vt 0.176304 0.070632
|
||||
vt 0.204000 0.081784
|
||||
vt 0.179508 0.070372
|
||||
vt 0.182544 0.069621
|
||||
vt 0.185372 0.068424
|
||||
vt 0.187952 0.066833
|
||||
vt 0.190244 0.064888
|
||||
vt 0.192208 0.062643
|
||||
vt 0.193808 0.060138
|
||||
vt 0.195000 0.057420
|
||||
vt 0.195744 0.054539
|
||||
vt 0.196000 0.051543
|
||||
vt 0.204000 0.007435
|
||||
vt 0.196000 0.021606
|
||||
vt 0.196304 0.018093
|
||||
vt 0.197180 0.014762
|
||||
vt 0.198588 0.011662
|
||||
vt 0.200476 0.008829
|
||||
vt 0.202796 0.006316
|
||||
vt 0.205500 0.004160
|
||||
vt 0.208548 0.002405
|
||||
vt 0.211884 0.001097
|
||||
vt 0.215468 0.000283
|
||||
vt 0.219248 0.000000
|
||||
vt 0.792000 0.007435
|
||||
vt 0.780752 0.000000
|
||||
vt 0.784536 0.000283
|
||||
vt 0.788116 0.001097
|
||||
vt 0.791456 0.002405
|
||||
vt 0.794500 0.004160
|
||||
vt 0.797208 0.006316
|
||||
vt 0.799528 0.008829
|
||||
vt 0.801412 0.011662
|
||||
vt 0.802820 0.014762
|
||||
vt 0.803696 0.018093
|
||||
vt 0.804000 0.021606
|
||||
vt 0.804000 0.052041
|
||||
vt 0.792000 0.081784
|
||||
vt 0.967984 0.999535
|
||||
vt 0.814628 0.068305
|
||||
vt 0.812048 0.066818
|
||||
vt 0.809756 0.064993
|
||||
vt 0.807788 0.062863
|
||||
vt 0.806192 0.060465
|
||||
vt 0.805000 0.057837
|
||||
vt 0.804256 0.055015
|
||||
vt 0.817456 0.069413
|
||||
vt 0.820488 0.070104
|
||||
vt 0.823692 0.070342
|
||||
vt 0.852092 0.070632
|
||||
vt 0.852092 0.070342
|
||||
vt 0.973876 0.998193
|
||||
vt 0.979364 0.996045
|
||||
vt 0.984376 0.993164
|
||||
vt 0.988828 0.989617
|
||||
vt 0.992644 0.985480
|
||||
vt 0.995744 0.980822
|
||||
vt 0.998056 0.975721
|
||||
vt 0.999500 0.970245
|
||||
vt 1.000000 0.964465
|
||||
vt 1.000000 0.106167
|
||||
vt 0.961764 0.070632
|
||||
vt 0.967984 0.071097
|
||||
vt 0.973876 0.072439
|
||||
vt 0.979364 0.074587
|
||||
vt 0.984376 0.077472
|
||||
vt 0.988828 0.081019
|
||||
vt 0.992644 0.085152
|
||||
vt 0.995744 0.089810
|
||||
vt 0.998056 0.094911
|
||||
vt 0.999500 0.100387
|
||||
vt 0.038236 1.000000
|
||||
vt 0.000500 0.970245
|
||||
vt 0.001944 0.975721
|
||||
vt 0.004256 0.980821
|
||||
vt 0.007360 0.985479
|
||||
vt 0.011176 0.989617
|
||||
vt 0.015628 0.993164
|
||||
vt 0.020636 0.996045
|
||||
vt 0.026124 0.998193
|
||||
vt 0.032020 0.999535
|
||||
|
||||
usemtl Mat_0
|
||||
f 23/1 34/2 36/3
|
||||
f 17/85 23/1 36/3
|
||||
f 16/93 2/92 17/85
|
||||
f 62/9 36/3 70/8
|
||||
f 70/8 36/3 69/7
|
||||
f 69/7 36/3 68/6
|
||||
f 67/5 36/3 35/4
|
||||
f 68/6 36/3 67/5
|
||||
f 60/10 36/3 62/9
|
||||
f 32/14 31/16 72/15
|
||||
f 32/14 72/15 36/3
|
||||
f 72/15 73/51 36/3
|
||||
f 77/52 36/3 73/51
|
||||
f 77/52 73/51 121/53
|
||||
f 116/60 77/52 121/53
|
||||
f 77/52 109/61 108/62
|
||||
f 108/62 135/63 77/52
|
||||
f 77/52 135/63 78/65
|
||||
f 89/69 135/63 91/70
|
||||
f 91/70 135/63 96/71
|
||||
f 96/71 135/63 98/72
|
||||
f 57/74 165/79 166/80
|
||||
f 57/74 166/80 167/81
|
||||
f 168/82 57/74 167/81
|
||||
f 57/74 59/73 135/63
|
||||
f 135/63 161/75 57/74
|
||||
f 161/75 162/76 57/74
|
||||
f 162/76 163/77 57/74
|
||||
f 57/74 163/77 164/78
|
||||
f 170/84 57/74 169/83
|
||||
f 169/83 57/74 168/82
|
||||
f 57/74 164/78 165/79
|
||||
f 59/73 98/72 135/63
|
||||
f 87/68 135/63 89/69
|
||||
f 81/66 135/63 84/67
|
||||
f 84/67 135/63 87/68
|
||||
f 78/65 135/63 81/66
|
||||
f 138/64 135/63 108/62
|
||||
f 25/17 8/18 72/15
|
||||
f 7/19 72/15 8/18
|
||||
f 7/19 100/20 72/15
|
||||
f 95/21 72/15 100/20
|
||||
f 95/21 94/22 72/15
|
||||
f 93/23 72/15 94/22
|
||||
f 105/25 72/15 113/24
|
||||
f 72/15 105/25 117/26
|
||||
f 102/27 117/26 105/25
|
||||
f 117/26 37/28 40/29
|
||||
f 117/26 40/29 48/30
|
||||
f 117/26 48/30 45/31
|
||||
f 41/32 117/26 45/31
|
||||
f 43/33 145/34 117/26
|
||||
f 145/34 143/35 117/26
|
||||
f 142/36 117/26 143/35
|
||||
f 146/39 141/38 144/37
|
||||
f 117/26 144/37 141/38
|
||||
f 141/38 73/51 117/26
|
||||
f 141/38 140/50 73/51
|
||||
f 139/59 73/51 140/50
|
||||
f 147/41 141/38 148/40
|
||||
f 149/42 141/38 147/41
|
||||
f 10/46 141/38 13/45
|
||||
f 131/44 13/45 141/38
|
||||
f 133/43 131/44 141/38
|
||||
f 9/47 141/38 10/46
|
||||
f 150/49 141/38 151/48
|
||||
f 151/48 141/38 9/47
|
||||
f 133/43 141/38 149/42
|
||||
f 137/58 28/57 73/51
|
||||
f 28/57 27/56 73/51
|
||||
f 139/59 137/58 73/51
|
||||
f 140/50 141/38 150/49
|
||||
f 146/39 148/40 141/38
|
||||
f 144/37 117/26 142/36
|
||||
f 43/33 117/26 41/32
|
||||
f 117/26 102/27 37/28
|
||||
f 93/23 113/24 72/15
|
||||
f 27/56 129/55 73/51
|
||||
f 129/55 126/54 73/51
|
||||
f 77/52 116/60 109/61
|
||||
f 126/54 121/53 73/51
|
||||
f 72/15 117/26 73/51
|
||||
f 25/17 72/15 31/16
|
||||
f 52/13 32/14 36/3
|
||||
f 53/12 52/13 36/3
|
||||
f 55/11 53/12 36/3
|
||||
f 55/11 36/3 60/10
|
||||
f 15/94 16/93 17/85
|
||||
f 34/2 35/4 36/3
|
||||
f 17/85 22/86 23/1
|
||||
f 17/85 21/87 22/86
|
||||
f 17/85 20/88 21/87
|
||||
f 17/85 19/89 20/88
|
||||
f 17/85 18/90 19/89
|
||||
f 17/85 1/91 18/90
|
||||
f 2/92 1/91 17/85
|
||||
|
||||
vt 0.992640 0.085152
|
||||
vt 0.038236 1.000000
|
||||
vt 0.015624 0.077472
|
||||
vt 0.995744 0.980822
|
||||
vt 0.979364 0.996045
|
||||
vt 0.967980 0.999535
|
||||
vt 0.973876 0.998193
|
||||
vt 0.961764 1.000000
|
||||
vt 0.988824 0.989617
|
||||
vt 0.992640 0.985480
|
||||
vt 0.984372 0.993164
|
||||
vt 1.000000 0.106167
|
||||
vt 0.998056 0.094911
|
||||
vt 0.995744 0.089810
|
||||
vt 0.999500 0.100387
|
||||
vt 0.999500 0.970245
|
||||
vt 1.000000 0.964465
|
||||
vt 0.998056 0.975721
|
||||
vt 0.001944 0.975721
|
||||
vt 0.015624 0.993164
|
||||
vt 0.026124 0.998193
|
||||
vt 0.032016 0.999535
|
||||
vt 0.020636 0.996045
|
||||
vt 0.007356 0.985479
|
||||
vt 0.011172 0.989617
|
||||
vt 0.004256 0.980821
|
||||
vt 0.001944 0.094911
|
||||
vt -0.000000 0.964465
|
||||
vt 0.000500 0.970245
|
||||
vt 0.000000 0.106167
|
||||
vt 0.000500 0.100387
|
||||
vt 0.007356 0.085152
|
||||
vt 0.004256 0.089810
|
||||
vt 0.011172 0.081019
|
||||
vt 0.147908 0.070632
|
||||
vt 0.026124 0.072439
|
||||
vt 0.020636 0.074587
|
||||
vt 0.032016 0.071097
|
||||
vt 0.038236 0.070632
|
||||
vt 0.973876 0.072439
|
||||
vt 0.823696 0.070632
|
||||
vt 0.176308 0.070342
|
||||
vt 0.147908 0.070342
|
||||
vt 0.820492 0.070372
|
||||
vt 0.179512 0.070104
|
||||
vt 0.817456 0.069621
|
||||
vt 0.182544 0.069413
|
||||
vt 0.814628 0.068424
|
||||
vt 0.185372 0.068305
|
||||
vt 0.812048 0.066833
|
||||
vt 0.187952 0.066818
|
||||
vt 0.809756 0.064889
|
||||
vt 0.190244 0.064993
|
||||
vt 0.807792 0.062643
|
||||
vt 0.192212 0.062862
|
||||
vt 0.806192 0.060138
|
||||
vt 0.193808 0.060465
|
||||
vt 0.805000 0.057420
|
||||
vt 0.195000 0.057836
|
||||
vt 0.804256 0.054539
|
||||
vt 0.195744 0.055015
|
||||
vt 0.794500 0.004160
|
||||
vt 0.196000 0.052041
|
||||
vt 0.208544 0.002405
|
||||
vt 0.198588 0.011662
|
||||
vt 0.202792 0.006316
|
||||
vt 0.205500 0.004160
|
||||
vt 0.200472 0.008829
|
||||
vt 0.196304 0.018093
|
||||
vt 0.196000 0.021606
|
||||
vt 0.197180 0.014762
|
||||
vt 0.780752 0.000000
|
||||
vt 0.215464 0.000283
|
||||
vt 0.211884 0.001097
|
||||
vt 0.219248 0.000000
|
||||
vt 0.788116 0.001097
|
||||
vt 0.784532 0.000283
|
||||
vt 0.791452 0.002405
|
||||
vt 0.804000 0.051543
|
||||
vt 0.802820 0.014762
|
||||
vt 0.799524 0.008829
|
||||
vt 0.797204 0.006316
|
||||
vt 0.801412 0.011662
|
||||
vt 0.804000 0.021606
|
||||
vt 0.803696 0.018093
|
||||
vt 0.967980 0.071097
|
||||
vt 0.961764 0.070632
|
||||
vt 0.984372 0.077472
|
||||
vt 0.979364 0.074587
|
||||
vt 0.988824 0.081019
|
||||
|
||||
usemtl Mat_0
|
||||
f 3/99 44/101 47/100
|
||||
f 3/99 47/100 103/96
|
||||
f 118/98 3/99 103/96
|
||||
f 74/95 118/98 103/96
|
||||
f 74/95 103/96 136/97
|
||||
f 136/97 175/129 74/95
|
||||
f 175/129 56/134 74/95
|
||||
f 56/134 63/182 74/95
|
||||
f 63/182 71/184 74/95
|
||||
f 74/95 75/108 80/107
|
||||
f 74/95 80/107 86/106
|
||||
f 80/107 83/109 86/106
|
||||
f 33/135 51/181 54/180
|
||||
f 128/147 26/149 127/148
|
||||
f 128/147 127/148 130/146
|
||||
f 106/139 24/140 30/138
|
||||
f 107/136 106/139 30/138
|
||||
f 103/96 76/116 79/115
|
||||
f 103/96 79/115 85/114
|
||||
f 103/96 85/114 97/113
|
||||
f 85/114 90/118 97/113
|
||||
f 90/118 92/120 97/113
|
||||
f 97/113 99/123 58/122
|
||||
f 97/113 58/122 65/121
|
||||
f 97/113 65/121 136/97
|
||||
f 65/121 178/126 136/97
|
||||
f 178/126 179/128 136/97
|
||||
f 136/97 180/131 181/130
|
||||
f 181/130 182/132 175/129
|
||||
f 182/132 183/133 175/129
|
||||
f 175/129 176/137 107/136
|
||||
f 175/129 107/136 33/135
|
||||
f 64/125 65/121 66/124
|
||||
f 65/121 177/127 178/126
|
||||
f 58/122 66/124 65/121
|
||||
f 85/114 88/119 90/118
|
||||
f 79/115 82/117 85/114
|
||||
f 106/139 115/141 24/140
|
||||
f 115/141 5/142 24/140
|
||||
f 115/141 120/143 5/142
|
||||
f 120/143 6/144 5/142
|
||||
f 125/145 130/146 6/144
|
||||
f 39/174 38/179 101/178
|
||||
f 172/155 173/157 157/156
|
||||
f 172/155 157/156 112/154
|
||||
f 171/153 172/155 112/154
|
||||
f 157/156 104/173 112/154
|
||||
f 157/156 39/174 104/173
|
||||
f 157/156 46/175 39/174
|
||||
f 46/175 49/177 39/174
|
||||
f 173/157 158/158 157/156
|
||||
f 158/158 152/166 157/156
|
||||
f 152/166 155/170 157/156
|
||||
f 158/158 160/167 152/166
|
||||
f 160/167 153/169 152/166
|
||||
f 132/160 134/161 158/158
|
||||
f 11/159 132/160 158/158
|
||||
f 11/159 14/162 132/160
|
||||
f 173/157 174/164 184/163
|
||||
f 173/157 184/163 11/159
|
||||
f 184/163 12/165 11/159
|
||||
f 158/158 159/168 160/167
|
||||
f 173/157 11/159 158/158
|
||||
f 29/151 171/153 119/152
|
||||
f 26/149 29/151 123/150
|
||||
f 152/166 154/171 155/170
|
||||
f 155/170 156/172 157/156
|
||||
f 157/156 42/176 46/175
|
||||
f 39/174 101/178 104/173
|
||||
f 171/153 112/154 119/152
|
||||
f 29/151 119/152 123/150
|
||||
f 26/149 123/150 127/148
|
||||
f 125/145 128/147 130/146
|
||||
f 120/143 125/145 6/144
|
||||
f 107/136 30/138 33/135
|
||||
f 33/135 54/180 56/134
|
||||
f 56/134 61/183 63/182
|
||||
f 175/129 33/135 56/134
|
||||
f 136/97 181/130 175/129
|
||||
f 103/96 97/113 136/97
|
||||
f 74/95 86/106 118/98
|
||||
f 86/106 110/110 118/98
|
||||
f 118/98 124/103 3/99
|
||||
f 47/100 50/102 103/96
|
||||
f 86/106 111/111 110/110
|
||||
f 110/110 114/112 118/98
|
||||
f 118/98 122/104 124/103
|
||||
f 124/103 4/105 3/99
|
||||
|
12393
resources/meshes/ultimaker_sketch_platform.obj
Normal file
12393
resources/meshes/ultimaker_sketch_platform.obj
Normal file
File diff suppressed because it is too large
Load diff
|
@ -85,7 +85,7 @@ UM.Dialog
|
|||
id: questionText
|
||||
width: parent.width
|
||||
text: base.is_ucp
|
||||
? catalog.i18nc("@text:window", "This is a Cura Universal project file. Would you like to open it as a Cura project or Cura Universal Project or import the models from it?")
|
||||
? catalog.i18nc("@text:window", "This is a Cura Universal project file. Would you like to open it as a Cura Universal Project or import the models from it?")
|
||||
: catalog.i18nc("@text:window", "This is a Cura project file. Would you like to open it as a project or import the models from it?")
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ ScrollView
|
|||
{
|
||||
id: bedTemperature
|
||||
containerStack: Cura.MachineManager.activeMachine
|
||||
key: "material_bed_temperature"
|
||||
key: "material_bed_temperature_layer_0"
|
||||
watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"]
|
||||
storeIndex: 0
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ Item
|
|||
{
|
||||
id: extruderTemperature
|
||||
containerStackId: Cura.ExtruderManager.extruderIds[position]
|
||||
key: "material_print_temperature"
|
||||
key: "material_print_temperature_layer_0"
|
||||
watchedProperties: ["value", "minimum_value", "maximum_value", "resolve"]
|
||||
storeIndex: 0
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ import Cura 1.1 as Cura
|
|||
Item
|
||||
{
|
||||
id: base
|
||||
|
||||
property bool hasSearchFilter: false
|
||||
// The currently selected machine item in the local machine list.
|
||||
property var currentItem: machineList.currentIndex >= 0 ? machineList.model.getItem(machineList.currentIndex) : null
|
||||
// The currently active (expanded) section/category, where section/category is the grouping of local machine items.
|
||||
|
@ -32,7 +32,7 @@ Item
|
|||
|
||||
onCurrentItemChanged:
|
||||
{
|
||||
printerName = currentItem == null ? "" : currentItem.name
|
||||
printerName = currentItem && currentItem.name? currentItem.name: ""
|
||||
}
|
||||
|
||||
function updateCurrentItemUponSectionChange(section)
|
||||
|
@ -43,25 +43,28 @@ Item
|
|||
const item = machineList.model.getItem(i);
|
||||
if (item.section == section)
|
||||
{
|
||||
machineList.currentIndex = i;
|
||||
updateCurrentItem(i)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getMachineName()
|
||||
function updateCurrentItem(index)
|
||||
{
|
||||
return machineList.model.getItem(machineList.currentIndex) != undefined ? machineList.model.getItem(machineList.currentIndex).name : "";
|
||||
machineList.currentIndex = index;
|
||||
currentItem = machineList.model.getItem(index);
|
||||
if (currentItem && currentItem.name)
|
||||
{
|
||||
machineName.text = currentItem.name
|
||||
manufacturer.text = currentItem.metadata["manufacturer"]
|
||||
author.text = currentItem.metadata["author"]
|
||||
}
|
||||
|
||||
function getMachineMetaDataEntry(key)
|
||||
else
|
||||
{
|
||||
var metadata = machineList.model.getItem(machineList.currentIndex) != undefined ? machineList.model.getItem(machineList.currentIndex).metadata : undefined;
|
||||
if (metadata)
|
||||
{
|
||||
return metadata[key];
|
||||
machineName.text = "No printers Found"
|
||||
manufacturer.text = ""
|
||||
author.text = ""
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
Component.onCompleted:
|
||||
|
@ -78,13 +81,118 @@ Item
|
|||
id: localPrinterSelectionItem
|
||||
anchors.fill: parent
|
||||
|
||||
Column
|
||||
{
|
||||
id: root
|
||||
width: Math.floor(parent.width * 0.48)
|
||||
height: parent.height
|
||||
Item
|
||||
{
|
||||
width: root.width
|
||||
height: filter.height
|
||||
Cura.TextField
|
||||
{
|
||||
id: filter
|
||||
width: parent.width
|
||||
implicitHeight: parent.height
|
||||
background: Rectangle {
|
||||
id: background
|
||||
color: UM.Theme.getColor("main_background")
|
||||
radius: UM.Theme.getSize("default_radius").width
|
||||
border.color: UM.Theme.getColor("primary_button")
|
||||
}
|
||||
height: UM.Theme.getSize("small_button_icon").height * 2
|
||||
placeholderText: catalog.i18nc("@label:textbox", "Search Printer")
|
||||
placeholderTextColor: UM.Theme.getColor("primary_button")
|
||||
font: UM.Theme.getFont("medium_italic")
|
||||
leftPadding: searchIcon.width + UM.Theme.getSize("default_margin").width * 2
|
||||
|
||||
UM.ColorImage
|
||||
{
|
||||
id: searchIcon
|
||||
source: UM.Theme.getIcon("Magnifier")
|
||||
anchors
|
||||
{
|
||||
verticalCenter: parent.verticalCenter
|
||||
left: parent.left
|
||||
leftMargin: UM.Theme.getSize("default_margin").width
|
||||
}
|
||||
height: UM.Theme.getSize("small_button_icon").height
|
||||
width: height
|
||||
color: UM.Theme.getColor("text")
|
||||
}
|
||||
|
||||
onTextChanged: editingFinished()
|
||||
onEditingFinished:
|
||||
{
|
||||
machineDefinitionsModel.filter = {"name" : "*" + text.toLowerCase() + "*", "visible": true}
|
||||
base.hasSearchFilter = (text.length > 0)
|
||||
updateDefinitionModel()
|
||||
}
|
||||
|
||||
Keys.onEscapePressed: filter.text = ""
|
||||
function updateDefinitionModel()
|
||||
{
|
||||
if (base.hasSearchFilter)
|
||||
{
|
||||
base.currentSections.clear()
|
||||
for (var i = 0; i < machineDefinitionsModel.count; i++)
|
||||
{
|
||||
var sectionexpanded = machineDefinitionsModel.getItem(i)["section"]
|
||||
if (!base.currentSections.has(sectionexpanded))
|
||||
{
|
||||
base.currentSections.add(sectionexpanded);
|
||||
}
|
||||
}
|
||||
base.updateCurrentItem(0)
|
||||
|
||||
// Trigger update on base.currentSections
|
||||
base.currentSections = base.currentSections;
|
||||
}
|
||||
else
|
||||
{
|
||||
const initialSection = "Ultimaker B.V.";
|
||||
base.currentSections.clear();
|
||||
base.currentSections.add(initialSection);
|
||||
updateCurrentItemUponSectionChange(initialSection);
|
||||
updateCurrentItem(0)
|
||||
// Trigger update on base.currentSections
|
||||
base.currentSections = base.currentSections;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
UM.SimpleButton
|
||||
{
|
||||
id: clearFilterButton
|
||||
iconSource: UM.Theme.getIcon("Cancel")
|
||||
visible: base.hasSearchFilter
|
||||
|
||||
height: Math.round(filter.height * 0.5)
|
||||
width: visible ? height : 0
|
||||
|
||||
anchors.verticalCenter: filter.verticalCenter
|
||||
anchors.right: filter.right
|
||||
anchors.rightMargin: UM.Theme.getSize("default_margin").width
|
||||
|
||||
color: UM.Theme.getColor("setting_control_button")
|
||||
hoverColor: UM.Theme.getColor("setting_control_button_hover")
|
||||
|
||||
onClicked:
|
||||
{
|
||||
filter.text = ""
|
||||
filter.forceActiveFocus()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Selecting a local printer to add from this list.
|
||||
ListView
|
||||
{
|
||||
id: machineList
|
||||
width: Math.floor(parent.width * 0.48)
|
||||
height: parent.height
|
||||
|
||||
width: root.width
|
||||
height: root.height - filter.height
|
||||
clip: true
|
||||
ScrollBar.vertical: UM.ScrollBar {}
|
||||
|
||||
|
@ -169,7 +277,8 @@ Item
|
|||
checked: machineList.currentIndex == index
|
||||
text: name
|
||||
visible: base.currentSections.has(section)
|
||||
onClicked: machineList.currentIndex = index
|
||||
onClicked: base.updateCurrentItem(index)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -193,8 +302,8 @@ Item
|
|||
|
||||
UM.Label
|
||||
{
|
||||
id: machineName
|
||||
width: parent.width - (2 * UM.Theme.getSize("default_margin").width)
|
||||
text: base.getMachineName()
|
||||
color: UM.Theme.getColor("primary_button")
|
||||
font: UM.Theme.getFont("huge")
|
||||
elide: Text.ElideRight
|
||||
|
@ -215,7 +324,7 @@ Item
|
|||
}
|
||||
UM.Label
|
||||
{
|
||||
text: base.getMachineMetaDataEntry("manufacturer")
|
||||
id: manufacturer
|
||||
width: parent.width - manufacturerLabel.width
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
@ -226,7 +335,7 @@ Item
|
|||
}
|
||||
UM.Label
|
||||
{
|
||||
text: base.getMachineMetaDataEntry("author")
|
||||
id: author
|
||||
width: parent.width - profileAuthorLabel.width
|
||||
wrapMode: Text.WordWrap
|
||||
}
|
||||
|
|
76
resources/quality/ankermake_m5c/ankermake_m5c_fast.inst.cfg
Normal file
76
resources/quality/ankermake_m5c/ankermake_m5c_fast.inst.cfg
Normal file
|
@ -0,0 +1,76 @@
|
|||
[general]
|
||||
definition = ankermake_m5c
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
quality_type = fast
|
||||
setting_version = 23
|
||||
type = quality
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
acceleration_enabled = true
|
||||
acceleration_infill = 5000
|
||||
acceleration_layer_0 = 2500
|
||||
acceleration_prime_tower = 5000
|
||||
acceleration_print = 5000
|
||||
acceleration_print_layer_0 = 2500
|
||||
acceleration_roofing = 2500
|
||||
acceleration_skirt_brim = 2500
|
||||
acceleration_support = 5000
|
||||
acceleration_support_bottom = 5000
|
||||
acceleration_support_infill = 5000
|
||||
acceleration_support_interface = 5000
|
||||
acceleration_support_roof = 5000
|
||||
acceleration_topbottom = 2500
|
||||
acceleration_travel = 5000
|
||||
acceleration_travel_layer_0 = 2500
|
||||
acceleration_wall = 5000
|
||||
acceleration_wall_0 = 3000
|
||||
acceleration_wall_x = 5000
|
||||
jerk_enabled = true
|
||||
jerk_infill = 15
|
||||
jerk_layer_0 = 15
|
||||
jerk_prime_tower = 15
|
||||
jerk_print = 15
|
||||
jerk_print_layer_0 = 15
|
||||
jerk_roofing = 15
|
||||
jerk_skirt_brim = 15
|
||||
jerk_support = 15
|
||||
jerk_support_bottom = 15
|
||||
jerk_support_infill = 15
|
||||
jerk_support_interface = 15
|
||||
jerk_support_roof = 15
|
||||
jerk_topbottom = 15
|
||||
jerk_travel = 15
|
||||
jerk_travel_layer_0 = 15
|
||||
jerk_wall = 15
|
||||
jerk_wall_0 = 15
|
||||
jerk_wall_x = 15
|
||||
layer_height = 0.25
|
||||
layer_height_0 = 0.14
|
||||
skirt_brim_speed = 50
|
||||
speed_equalize_flow_enabled = false
|
||||
speed_equalize_flow_max = 300
|
||||
speed_infill = 270
|
||||
speed_layer_0 = 50
|
||||
speed_prime_tower = 500
|
||||
speed_print = 500
|
||||
speed_print_layer_0 = 50
|
||||
speed_roofing = 150
|
||||
speed_slowdown_layers = 2
|
||||
speed_support = 250
|
||||
speed_support_bottom = 166.667
|
||||
speed_support_infill = 250
|
||||
speed_support_interface = 166.667
|
||||
speed_support_roof = 166.667
|
||||
speed_topbottom = 150
|
||||
speed_travel = 500
|
||||
speed_travel_layer_0 = 150
|
||||
speed_wall = 250
|
||||
speed_wall_0 = 150
|
||||
speed_wall_x = 250
|
||||
speed_z_hop = 10
|
||||
|
|
@ -0,0 +1,94 @@
|
|||
[general]
|
||||
definition = ankermake_m5c
|
||||
name = Normal
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
quality_type = normal
|
||||
setting_version = 23
|
||||
type = quality
|
||||
weight = 0
|
||||
|
||||
[values]
|
||||
acceleration_infill = 2500
|
||||
acceleration_layer_0 = 2500
|
||||
acceleration_prime_tower = 2500
|
||||
acceleration_print = 2500
|
||||
acceleration_print_layer_0 = 2500
|
||||
acceleration_roofing = 2500
|
||||
acceleration_skirt_brim = 2500
|
||||
acceleration_support = 2500
|
||||
acceleration_support_bottom = 2500
|
||||
acceleration_support_infill = 2500
|
||||
acceleration_support_interface = 2500
|
||||
acceleration_support_roof = 2500
|
||||
acceleration_topbottom = 2500
|
||||
acceleration_travel = 2500
|
||||
acceleration_travel_layer_0 = 2500
|
||||
acceleration_wall = 2500
|
||||
acceleration_wall_0 = 2500
|
||||
acceleration_wall_x = 2500
|
||||
bottom_layers = 4
|
||||
infill_line_width = 0.40
|
||||
initial_layer_line_width_factor = 100
|
||||
jerk_enabled = true
|
||||
jerk_infill = 10
|
||||
jerk_layer_0 = 10
|
||||
jerk_prime_tower = 10
|
||||
jerk_print = 10
|
||||
jerk_print_layer_0 = 10
|
||||
jerk_roofing = 10
|
||||
jerk_skirt_brim = 10
|
||||
jerk_support = 10
|
||||
jerk_support_bottom = 10
|
||||
jerk_support_infill = 10
|
||||
jerk_support_interface = 10
|
||||
jerk_support_roof = 10
|
||||
jerk_topbottom = 10
|
||||
jerk_travel = 10
|
||||
jerk_travel_layer_0 = 10
|
||||
jerk_wall = 10
|
||||
jerk_wall_0 = 8
|
||||
jerk_wall_x = 8
|
||||
layer_height = 0.2
|
||||
layer_height_0 = 0.14
|
||||
line_width = 0.40
|
||||
min_wall_line_width = 0.10
|
||||
prime_tower_line_width = 0.40
|
||||
skin_line_width = 0.40
|
||||
skirt_brim_line_width = 0.40
|
||||
skirt_brim_speed = 50
|
||||
speed_infill = 250
|
||||
speed_layer_0 = 50
|
||||
speed_prime_tower = 250
|
||||
speed_print = 250
|
||||
speed_print_layer_0 = 50
|
||||
speed_roofing = 150
|
||||
speed_support = 150
|
||||
speed_support_bottom = 100
|
||||
speed_support_infill = 150
|
||||
speed_support_interface = 100
|
||||
speed_support_roof = 100
|
||||
speed_topbottom = 150
|
||||
speed_travel = 250
|
||||
speed_travel_layer_0 = 50
|
||||
speed_wall = 150
|
||||
speed_wall_0 = 150
|
||||
speed_wall_x = 250
|
||||
support_bottom_line_width = 0.40
|
||||
support_interface_line_width = 0.40
|
||||
support_line_width = 0.40
|
||||
support_roof_line_width = 0.40
|
||||
top_layers = 4
|
||||
wall_0_extruder_nr = -1
|
||||
wall_0_inset = 0
|
||||
wall_0_wipe_dist = 0.20
|
||||
wall_extruder_nr = -1
|
||||
wall_line_count = 3
|
||||
wall_line_width = 0.40
|
||||
wall_line_width_0 = 0.44
|
||||
wall_line_width_x = 0.40
|
||||
wall_thickness = 1.24
|
||||
wall_x_extruder_nr = -1
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
[general]
|
||||
definition = ankermake_m5c
|
||||
name = Precision
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
quality_type = precision
|
||||
setting_version = 23
|
||||
type = quality
|
||||
weight = 1
|
||||
|
||||
[values]
|
||||
acceleration_enabled = true
|
||||
acceleration_infill = 4000
|
||||
acceleration_layer_0 = 2500
|
||||
acceleration_prime_tower = 4000
|
||||
acceleration_print = 4000
|
||||
acceleration_print_layer_0 = 2500
|
||||
acceleration_roofing = 1000
|
||||
acceleration_skirt_brim = 2500
|
||||
acceleration_support = 4000
|
||||
acceleration_support_bottom = 4000
|
||||
acceleration_support_infill = 4000
|
||||
acceleration_support_interface = 4000
|
||||
acceleration_support_roof = 4000
|
||||
acceleration_topbottom = 2500
|
||||
acceleration_travel = 4000
|
||||
acceleration_travel_layer_0 = 2500
|
||||
acceleration_wall = 4000
|
||||
acceleration_wall_0 = 3000
|
||||
acceleration_wall_x = 3000
|
||||
bottom_layers = 3
|
||||
infill_line_width = 0.30
|
||||
initial_layer_line_width_factor = 100
|
||||
jerk_enabled = true
|
||||
jerk_infill = 8
|
||||
jerk_layer_0 = 8
|
||||
jerk_prime_tower = 8
|
||||
jerk_print = 8
|
||||
jerk_print_layer_0 = 8
|
||||
jerk_roofing = 8
|
||||
jerk_skirt_brim = 8
|
||||
jerk_support = 8
|
||||
jerk_support_bottom = 8
|
||||
jerk_support_infill = 8
|
||||
jerk_support_interface = 8
|
||||
jerk_support_roof = 8
|
||||
jerk_topbottom = 8
|
||||
jerk_travel = 8
|
||||
jerk_travel_layer_0 = 8
|
||||
jerk_wall = 8
|
||||
jerk_wall_0 = 8
|
||||
jerk_wall_x = 8
|
||||
layer_height = 0.16
|
||||
layer_height_0 = 0.14
|
||||
line_width = 0.40
|
||||
prime_tower_line_width = 0.40
|
||||
skin_line_width = 0.40
|
||||
skirt_brim_line_width = 0.40
|
||||
skirt_brim_speed = 50
|
||||
speed_equalize_flow_enabled = false
|
||||
speed_equalize_flow_max = 300
|
||||
speed_infill = 250
|
||||
speed_layer_0 = 150
|
||||
speed_prime_tower = 250
|
||||
speed_print = 500
|
||||
speed_print_layer_0 = 50
|
||||
speed_roofing = 50
|
||||
speed_slowdown_layers = 2
|
||||
speed_support = 150
|
||||
speed_support_bottom = 100
|
||||
speed_support_infill = 150
|
||||
speed_support_interface = 100
|
||||
speed_support_roof = 100
|
||||
speed_topbottom = 150
|
||||
speed_travel = 500
|
||||
speed_travel_layer_0 = 150
|
||||
speed_wall = 250
|
||||
speed_wall_0 = 150
|
||||
speed_wall_x = 200
|
||||
speed_z_hop = 10
|
||||
support_bottom_line_width = 0.40
|
||||
support_interface_line_width = 0.40
|
||||
support_line_width = 0.40
|
||||
support_roof_line_width = 0.40
|
||||
top_layers = 5
|
||||
wall_0_extruder_nr = -1
|
||||
wall_0_inset = 0
|
||||
wall_0_wipe_dist = 0.20
|
||||
wall_extruder_nr = -1
|
||||
wall_line_count = 2
|
||||
wall_line_width = 0.40
|
||||
wall_line_width_0 = 0.40
|
||||
wall_line_width_x = 0.40
|
||||
wall_thickness = 0.84
|
||||
wall_x_extruder_nr = -1
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_pla_175
|
||||
quality_type = draft
|
||||
setting_version = 23
|
||||
type = quality
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
material = generic_tough_pla_175
|
||||
quality_type = draft
|
||||
setting_version = 23
|
||||
type = quality
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch
|
||||
name = Fast
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
global_quality = True
|
||||
quality_type = draft
|
||||
setting_version = 23
|
||||
type = quality
|
||||
weight = -2
|
||||
|
||||
[values]
|
||||
layer_height = 0.2
|
||||
|
|
@ -265,6 +265,8 @@ support_type
|
|||
support_angle
|
||||
support_pattern
|
||||
support_wall_count
|
||||
support_z_seam_away_from_model
|
||||
support_z_seam_min_distance
|
||||
zig_zaggify_support
|
||||
support_connect_zigzags
|
||||
support_infill_rate
|
||||
|
|
|
@ -56,7 +56,7 @@
|
|||
|
||||
"secondary_button": "background_1",
|
||||
"secondary_button_hover": "background_3",
|
||||
"secondary_button_text": [255, 255, 255, 255],
|
||||
"secondary_button_text": "text_secondary_button",
|
||||
|
||||
"icon": "text_default",
|
||||
"toolbar_background": "background_1",
|
||||
|
@ -71,8 +71,6 @@
|
|||
"main_window_header_background_gradient": "background_4",
|
||||
"main_window_header_button_background_hovered": [46, 46, 46, 255],
|
||||
|
||||
"secondary_button_text": "text_secondary_button",
|
||||
|
||||
"account_sync_state_icon": [255, 255, 255, 204],
|
||||
|
||||
"machine_selector_printer_icon": [204, 204, 204, 255],
|
||||
|
|
|
@ -110,6 +110,12 @@
|
|||
"italic": true,
|
||||
"family": "Noto Sans"
|
||||
},
|
||||
"medium_italic": {
|
||||
"size": 1.16,
|
||||
"weight": 400,
|
||||
"italic": true,
|
||||
"family": "Noto Sans"
|
||||
},
|
||||
"default_italic_ja_JP": {
|
||||
"size": 1.0,
|
||||
"weight": 400,
|
||||
|
|
13
resources/variants/creality/creality_k1_max_0.4.inst.cfg
Executable file
13
resources/variants/creality/creality_k1_max_0.4.inst.cfg
Executable file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = creality_k1max
|
||||
name = 0.4mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 23
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.4
|
||||
|
13
resources/variants/creality/creality_k1_max_0.6.inst.cfg
Executable file
13
resources/variants/creality/creality_k1_max_0.6.inst.cfg
Executable file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = creality_k1max
|
||||
name = 0.6mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 23
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.6
|
||||
|
13
resources/variants/creality/creality_k1_max_0.8.inst.cfg
Executable file
13
resources/variants/creality/creality_k1_max_0.8.inst.cfg
Executable file
|
@ -0,0 +1,13 @@
|
|||
[general]
|
||||
definition = creality_k1max
|
||||
name = 0.8mm Nozzle
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
setting_version = 23
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_size = 0.8
|
||||
|
15
resources/variants/ultimaker_sketch_0.4mm.inst.cfg
Normal file
15
resources/variants/ultimaker_sketch_0.4mm.inst.cfg
Normal file
|
@ -0,0 +1,15 @@
|
|||
[general]
|
||||
definition = ultimaker_sketch
|
||||
name = 0.4mm
|
||||
version = 4
|
||||
|
||||
[metadata]
|
||||
hardware_type = nozzle
|
||||
reference_extruder_id = sketch_extruder
|
||||
setting_version = 23
|
||||
type = variant
|
||||
|
||||
[values]
|
||||
machine_nozzle_id = 0.4mm
|
||||
machine_nozzle_size = 0.4
|
||||
|
38
scripts/extract_changelog.py
Normal file
38
scripts/extract_changelog.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
import argparse
|
||||
import re
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description = 'Extract the changelog to be inserted to the release description')
|
||||
parser.add_argument('--changelog', type = str, help = 'Path to the changelog file', required = True)
|
||||
parser.add_argument('--version', type = str, help = 'Cura version to be extracted', required = True)
|
||||
args = parser.parse_args()
|
||||
|
||||
# In the changelog we usually omit the patch number for minor release (i.e. 5.7.0 => 5.7)
|
||||
if args.version.endswith('.0'):
|
||||
args.version = args.version[:-2]
|
||||
|
||||
start_token = f"[{args.version}]"
|
||||
pattern_stop_log = "\[\d+(\.\d+){1,2}\]"
|
||||
log_line = False
|
||||
first_chapter = True
|
||||
|
||||
with open(args.changelog, "r") as changelog_file:
|
||||
for line in changelog_file.readlines():
|
||||
line = line.strip()
|
||||
|
||||
if log_line:
|
||||
if re.match(pattern_stop_log, line):
|
||||
log_line = False
|
||||
elif len(line) > 0:
|
||||
if line.startswith('*'):
|
||||
if not first_chapter:
|
||||
print("")
|
||||
first_chapter = False
|
||||
|
||||
line = line[1:].strip()
|
||||
print(f"<H2>{line}</H2>\n")
|
||||
else:
|
||||
print(line)
|
||||
elif line == start_token:
|
||||
log_line = True
|
Loading…
Add table
Add a link
Reference in a new issue