mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-29 20:01:26 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
22bd674c1d | ||
|
|
536ef75894 |
@@ -1,7 +1,5 @@
|
|||||||
name: Daily OFL OTA Update
|
name: Daily OFL OTA Update
|
||||||
|
|
||||||
run-name: Daily OFL OTA Update [OFL barrier]
|
|
||||||
|
|
||||||
# This workflow is intended for creating and publishing the OrcaFilamentLibrary (OFL) OPC package to
|
# This workflow is intended for creating and publishing the OrcaFilamentLibrary (OFL) OPC package to
|
||||||
# https://github.com/OrcaSlicer/orcaslicer-profiles, which generates an OTA update.
|
# https://github.com/OrcaSlicer/orcaslicer-profiles, which generates an OTA update.
|
||||||
# This cronjob runs daily at 00:00 UTC every day and scans main plus every release/vX.Y.Z branch for
|
# This cronjob runs daily at 00:00 UTC every day and scans main plus every release/vX.Y.Z branch for
|
||||||
@@ -14,9 +12,9 @@ run-name: Daily OFL OTA Update [OFL barrier]
|
|||||||
# vendor-dispatch path is also what makes post_merge_profiles.yml call the OTA auto-publish API after
|
# vendor-dispatch path is also what makes post_merge_profiles.yml call the OTA auto-publish API after
|
||||||
# uploading - see post_merge_profiles.yml for both sides of that contract.
|
# uploading - see post_merge_profiles.yml for both sides of that contract.
|
||||||
#
|
#
|
||||||
# Each run captures a timestamp, dispatches the needed OFL publishers, waits for
|
# At the start of each run, the pending-publish table is cleared up to a captured
|
||||||
# all of them to finish, then clears the pending-publish table once. Changes merged
|
# timestamp (POST /api/v1/ota/ofl/pending/clear?timestamp=...). Changes merged after
|
||||||
# after that timestamp remain pending for the next run.
|
# that timestamp remain pending for the next run.
|
||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
@@ -36,14 +34,32 @@ jobs:
|
|||||||
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' }}
|
if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' }}
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Capture start timestamp
|
- name: Capture start timestamp and clear OFL pending queue
|
||||||
id: start
|
id: start
|
||||||
shell: bash
|
shell: bash
|
||||||
|
env:
|
||||||
|
OTA_API_BASE_URL: ${{ vars.OTA_API_BASE_URL }}
|
||||||
|
OTA_API_KEY: ${{ secrets.OFL_OTA_PUBLISH_KEY }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
[ -n "$OTA_API_BASE_URL" ] || { echo "::error::vars.OTA_API_BASE_URL is not set"; exit 1; }
|
||||||
|
[ -n "$OTA_API_KEY" ] || { echo "::error::secrets.OFL_OTA_PUBLISH_KEY is not set"; exit 1; }
|
||||||
|
|
||||||
timestamp="$(date -u +%s)"
|
timestamp="$(date -u +%s)"
|
||||||
echo "timestamp=$timestamp" >> "$GITHUB_OUTPUT"
|
echo "timestamp=$timestamp" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
resp_file="$RUNNER_TEMP/ota-pending-clear-response.json"
|
||||||
|
status="$(curl -sS -o "$resp_file" -w '%{http_code}' -X POST \
|
||||||
|
"${OTA_API_BASE_URL%/}/api/v1/ota/ofl/pending/clear?timestamp=$timestamp" \
|
||||||
|
-H "Authorization: Bearer $OTA_API_KEY")"
|
||||||
|
body="$(cat "$resp_file")"
|
||||||
|
echo "$body"
|
||||||
|
|
||||||
|
if [ "$status" != "200" ]; then
|
||||||
|
echo "::error::OTA pending-clear call failed with HTTP $status"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v7
|
||||||
with:
|
with:
|
||||||
@@ -68,21 +84,27 @@ jobs:
|
|||||||
| grep -E '^(main|release/v[0-9]+\.[0-9]+\.[0-9]+)$' | sort -u
|
| grep -E '^(main|release/v[0-9]+\.[0-9]+\.[0-9]+)$' | sort -u
|
||||||
)
|
)
|
||||||
|
|
||||||
# The cron run is the checkpoint: a successful run means every
|
|
||||||
# dispatched branch publisher completed and the pending queue was
|
|
||||||
# cleared. Manual or push-triggered post_merge_profiles runs are not
|
|
||||||
# checkpoints for this scan.
|
|
||||||
successful_cron_runs="$(gh api --method GET \
|
|
||||||
"repos/${{ github.repository }}/actions/workflows/ofl-ota-cronjob.yml/runs" \
|
|
||||||
-f status=success -f branch=main -f per_page=100 --paginate \
|
|
||||||
--jq '.workflow_runs[] | select((.display_title // "") | contains("[OFL barrier]"))')"
|
|
||||||
since="$(jq -rs 'sort_by(.run_started_at) | last.run_started_at // empty' <<< "$successful_cron_runs")"
|
|
||||||
|
|
||||||
for branch in "${branches[@]}"; do
|
for branch in "${branches[@]}"; do
|
||||||
echo "::group::$branch"
|
echo "::group::$branch"
|
||||||
|
|
||||||
|
# post_merge_profiles.yml's own run history, not this workflow's: this
|
||||||
|
# workflow only ever runs against main (schedule, or workflow_dispatch
|
||||||
|
# --ref main), so its head branch never varies - filtering ITS history
|
||||||
|
# by $branch would never match anything except main. post_merge_profiles.yml
|
||||||
|
# genuinely runs per-branch (this dispatch below sets --ref "$branch"),
|
||||||
|
# so its history is the real per-branch checkpoint. It also means a
|
||||||
|
# failed publish naturally gets retried tomorrow: the checkpoint only
|
||||||
|
# advances on a run that actually succeeded.
|
||||||
|
# --method GET is required, not cosmetic: gh api defaults to POST
|
||||||
|
# whenever -f fields are present unless a method is given
|
||||||
|
# explicitly, and POST on this list-runs endpoint 404s - confirmed
|
||||||
|
# on real Actions infrastructure, not just reasoned about.
|
||||||
|
since="$(gh api --method GET "repos/${{ github.repository }}/actions/workflows/post_merge_profiles.yml/runs" \
|
||||||
|
-f status=success -f branch="$branch" -f per_page=1 \
|
||||||
|
--jq '.workflow_runs[0].run_started_at // empty')"
|
||||||
|
|
||||||
if [ -z "$since" ]; then
|
if [ -z "$since" ]; then
|
||||||
echo "No prior successful OFL cron run; checking $branch through $SCAN_UNTIL."
|
echo "No prior successful run for $branch; checking OFL changes up to $SCAN_UNTIL."
|
||||||
changed_files="$(git log --until="$SCAN_UNTIL" --name-only --pretty=format: "origin/$branch" -- \
|
changed_files="$(git log --until="$SCAN_UNTIL" --name-only --pretty=format: "origin/$branch" -- \
|
||||||
resources/profiles/OrcaFilamentLibrary resources/profiles/OrcaFilamentLibrary.json \
|
resources/profiles/OrcaFilamentLibrary resources/profiles/OrcaFilamentLibrary.json \
|
||||||
| sed '/^$/d')"
|
| sed '/^$/d')"
|
||||||
@@ -102,98 +124,16 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$changed" = true ]; then
|
if [ "$changed" = true ]; then
|
||||||
dispatch_id="${GITHUB_RUN_ID}-${branch//\//-}"
|
# Tolerate a per-branch failure (e.g. a pre-existing release branch
|
||||||
# Record successful dispatches for the barrier step below.
|
# whose post_merge_profiles.yml predates the vendor/auto_publish
|
||||||
# Branches whose workflow predates workflow_dispatch are skipped
|
# inputs) rather than aborting the whole scan under set -e.
|
||||||
# with a warning, as they were before the barrier was added.
|
if ! gh workflow run post_merge_profiles.yml \
|
||||||
if gh workflow run post_merge_profiles.yml \
|
|
||||||
--repo "${{ github.repository }}" \
|
--repo "${{ github.repository }}" \
|
||||||
--ref "$branch" \
|
--ref "$branch" \
|
||||||
-f vendor="$VENDOR" -f auto_publish=true \
|
-f vendor="$VENDOR" -f auto_publish=true; then
|
||||||
-f ofl_cron_dispatch_id="$dispatch_id"; then
|
echo "::warning::failed to dispatch post_merge_profiles.yml for $branch - its post_merge_profiles.yml at this ref may predate the vendor/auto_publish inputs"
|
||||||
printf '%s\t%s\n' "$branch" "$dispatch_id" >> "$RUNNER_TEMP/ofl-dispatches.tsv"
|
|
||||||
else
|
|
||||||
echo "::warning::skipping $branch because post_merge_profiles.yml could not be dispatched at that ref"
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "::endgroup::"
|
echo "::endgroup::"
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Wait for OFL publishers
|
|
||||||
id: wait
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
DISPATCHES_FILE: ${{ runner.temp }}/ofl-dispatches.tsv
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
if [ ! -s "$DISPATCHES_FILE" ]; then
|
|
||||||
echo "No OFL publisher workflows were dispatched; pending queue will not be cleared."
|
|
||||||
echo "publishers_dispatched=false" >> "$GITHUB_OUTPUT"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
: > "$RUNNER_TEMP/ofl-run-ids.tsv"
|
|
||||||
while IFS=$'\t' read -r branch dispatch_id; do
|
|
||||||
[ -n "$branch" ] || continue
|
|
||||||
echo "Waiting for OFL publisher on $branch ($dispatch_id)"
|
|
||||||
|
|
||||||
run_id=""
|
|
||||||
for _ in {1..120}; do
|
|
||||||
runs_json="$(gh api --method GET \
|
|
||||||
"repos/${{ github.repository }}/actions/workflows/post_merge_profiles.yml/runs" \
|
|
||||||
-f branch="$branch" -f event=workflow_dispatch -f per_page=100)"
|
|
||||||
run_id="$(jq -r --arg marker "[OFL cron $dispatch_id]" \
|
|
||||||
'[.workflow_runs[] | select((.display_title // "") | contains($marker))] \
|
|
||||||
| sort_by(.created_at) | last | .id // empty' <<< "$runs_json")"
|
|
||||||
[ -n "$run_id" ] && break
|
|
||||||
sleep 5
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$run_id" ]; then
|
|
||||||
echo "::error::could not find dispatched post_merge_profiles run for $branch ($dispatch_id)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
printf '%s\t%s\n' "$branch" "$run_id" >> "$RUNNER_TEMP/ofl-run-ids.tsv"
|
|
||||||
done < "$DISPATCHES_FILE"
|
|
||||||
|
|
||||||
all_success=true
|
|
||||||
while IFS=$'\t' read -r branch run_id; do
|
|
||||||
[ -n "$run_id" ] || continue
|
|
||||||
echo "Watching OFL publisher run $run_id for $branch"
|
|
||||||
if ! gh run watch "$run_id" --repo "${{ github.repository }}" --exit-status; then
|
|
||||||
all_success=false
|
|
||||||
fi
|
|
||||||
done < "$RUNNER_TEMP/ofl-run-ids.tsv"
|
|
||||||
|
|
||||||
if [ "$all_success" != true ]; then
|
|
||||||
echo "::error::one or more OFL publisher workflows failed; pending queue will not be cleared"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "publishers_dispatched=true" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Clear OFL pending queue
|
|
||||||
if: steps.wait.outputs.publishers_dispatched == 'true'
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
OTA_API_BASE_URL: ${{ vars.OTA_API_BASE_URL }}
|
|
||||||
OTA_API_KEY: ${{ secrets.OFL_OTA_PUBLISH_KEY }}
|
|
||||||
TIMESTAMP: ${{ steps.start.outputs.timestamp }}
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
[ -n "$OTA_API_BASE_URL" ] || { echo "::error::vars.OTA_API_BASE_URL is not set"; exit 1; }
|
|
||||||
[ -n "$OTA_API_KEY" ] || { echo "::error::secrets.OFL_OTA_PUBLISH_KEY is not set"; exit 1; }
|
|
||||||
|
|
||||||
resp_file="$RUNNER_TEMP/ota-pending-clear-response.json"
|
|
||||||
status="$(curl -sS -o "$resp_file" -w '%{http_code}' -X POST \
|
|
||||||
"${OTA_API_BASE_URL%/}/api/v1/ota/ofl/pending/clear?timestamp=$TIMESTAMP" \
|
|
||||||
-H "Authorization: Bearer $OTA_API_KEY")"
|
|
||||||
body="$(cat "$resp_file")"
|
|
||||||
echo "$body"
|
|
||||||
|
|
||||||
if [ "$status" != "200" ]; then
|
|
||||||
echo "::error::OTA pending-clear call failed with HTTP $status"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|||||||
@@ -1,14 +1,5 @@
|
|||||||
name: Post-merge profiles
|
name: Post-merge profiles
|
||||||
|
|
||||||
run-name: >-
|
|
||||||
Post-merge profiles${{
|
|
||||||
inputs.ofl_cron_dispatch_id != '' &&
|
|
||||||
inputs.vendor == 'OrcaFilamentLibrary' &&
|
|
||||||
(inputs.auto_publish == true || inputs.auto_publish == 'true') &&
|
|
||||||
format(' [OFL cron {0}]', inputs.ofl_cron_dispatch_id) ||
|
|
||||||
''
|
|
||||||
}}
|
|
||||||
|
|
||||||
# Push-triggered counterpart to check_profiles.yml (which only gates PRs). When a
|
# Push-triggered counterpart to check_profiles.yml (which only gates PRs). When a
|
||||||
# profile change lands on main or a release branch, rebuild the affected vendors'
|
# profile change lands on main or a release branch, rebuild the affected vendors'
|
||||||
# binary preset caches (<vendor>.opc) and publish each as a versioned ZIP asset on
|
# binary preset caches (<vendor>.opc) and publish each as a versioned ZIP asset on
|
||||||
@@ -68,12 +59,6 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
ofl_cron_dispatch_id:
|
|
||||||
description: >-
|
|
||||||
Unique marker supplied by the trusted OFL daily cron so it can find
|
|
||||||
and wait for this dispatched workflow run.
|
|
||||||
required: false
|
|
||||||
type: string
|
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|||||||
+55
-155
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "Blocks",
|
"name": "Blocks",
|
||||||
"version": "02.04.00.13",
|
"version": "02.04.00.04",
|
||||||
"force_update": "0",
|
"force_update": "0",
|
||||||
"description": "Blocks configurations",
|
"description": "Blocks configurations",
|
||||||
"machine_model_list": [
|
"machine_model_list": [
|
||||||
@@ -43,8 +43,8 @@
|
|||||||
"sub_path": "process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100",
|
"name": "0.20mm Standard 0.4 nozzle @Blocks",
|
||||||
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.20mm Standard 0.4 nozzle @Blocks_RD50_V2",
|
"name": "0.20mm Standard 0.4 nozzle @Blocks_RD50_V2",
|
||||||
@@ -55,8 +55,8 @@
|
|||||||
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.24mm Draft 0.4 nozzle @Blocks_Pro_S100",
|
"name": "0.24mm Draft 0.4 nozzle @Blocks",
|
||||||
"sub_path": "process/0.24mm Draft 0.4 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.24mm Draft 0.4 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.24mm Draft 0.4 nozzle @Blocks_RD50_V2",
|
"name": "0.24mm Draft 0.4 nozzle @Blocks_RD50_V2",
|
||||||
@@ -75,8 +75,8 @@
|
|||||||
"sub_path": "process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks",
|
||||||
"sub_path": "process/0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.30mm Extra Draft 0.4 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fdm_process_common 0.6 nozzle",
|
"name": "fdm_process_common 0.6 nozzle",
|
||||||
@@ -111,8 +111,8 @@
|
|||||||
"sub_path": "process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Standard 0.6 nozzle @Blocks",
|
||||||
"sub_path": "process/0.30mm Standard 0.6 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.30mm Standard 0.6 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.32mm Draft 0.6 nozzle @Blocks_RD50_V2",
|
"name": "0.32mm Draft 0.6 nozzle @Blocks_RD50_V2",
|
||||||
@@ -131,12 +131,12 @@
|
|||||||
"sub_path": "process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.40mm Draft 0.6 nozzle @Blocks_Pro_S100",
|
"name": "0.40mm Draft 0.6 nozzle @Blocks",
|
||||||
"sub_path": "process/0.40mm Draft 0.6 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.40mm Draft 0.6 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Optimal 0.8 nozzle @Blocks",
|
||||||
"sub_path": "process/0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.30mm Optimal 0.8 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks_RD50_V2",
|
"name": "0.30mm Optimal 0.8 nozzle @Blocks_RD50_V2",
|
||||||
@@ -155,8 +155,8 @@
|
|||||||
"sub_path": "process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100",
|
"name": "0.40mm Standard 0.8 nozzle @Blocks",
|
||||||
"sub_path": "process/0.40mm Standard 0.8 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.40mm Standard 0.8 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.46mm Draft 0.8 nozzle @Blocks_RD50_V2",
|
"name": "0.46mm Draft 0.8 nozzle @Blocks_RD50_V2",
|
||||||
@@ -167,8 +167,8 @@
|
|||||||
"sub_path": "process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.50mm Draft 0.8 nozzle @Blocks_Pro_S100",
|
"name": "0.50mm Draft 0.8 nozzle @Blocks",
|
||||||
"sub_path": "process/0.50mm Draft 0.8 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.50mm Draft 0.8 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.54mm Extra Draft 0.8 nozzle @Blocks_RD50_V2",
|
"name": "0.54mm Extra Draft 0.8 nozzle @Blocks_RD50_V2",
|
||||||
@@ -179,36 +179,36 @@
|
|||||||
"sub_path": "process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json"
|
"sub_path": "process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Optimal 1.0 nozzle @Blocks",
|
||||||
"sub_path": "process/0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.30mm Optimal 1.0 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.50mm Standard 1.0 nozzle @Blocks",
|
||||||
"sub_path": "process/0.50mm Standard 1.0 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.50mm Standard 1.0 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.60mm Draft 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.60mm Draft 1.0 nozzle @Blocks",
|
||||||
"sub_path": "process/0.60mm Draft 1.0 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.60mm Draft 1.0 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks",
|
||||||
"sub_path": "process/0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.70mm Extra Draft 1.0 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.50mm Optimal 1.2 nozzle @Blocks",
|
||||||
"sub_path": "process/0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.50mm Optimal 1.2 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.60mm Standard 1.2 nozzle @Blocks",
|
||||||
"sub_path": "process/0.60mm Standard 1.2 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.60mm Standard 1.2 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.70mm Draft 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.70mm Draft 1.2 nozzle @Blocks",
|
||||||
"sub_path": "process/0.70mm Draft 1.2 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.70mm Draft 1.2 nozzle @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks",
|
||||||
"sub_path": "process/0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100.json"
|
"sub_path": "process/0.80mm Extra Draft 1.2 nozzle @Blocks.json"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"filament_list": [
|
"filament_list": [
|
||||||
@@ -249,148 +249,48 @@
|
|||||||
"sub_path": "filament/fdm_filament_tpu.json"
|
"sub_path": "filament/fdm_filament_tpu.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks ABS @base",
|
"name": "Generic ABS @Blocks",
|
||||||
"sub_path": "filament/Blocks ABS @base.json"
|
"sub_path": "filament/Generic ABS @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks ASA @base",
|
"name": "Generic ASA @Blocks",
|
||||||
"sub_path": "filament/Blocks ASA @base.json"
|
"sub_path": "filament/Generic ASA @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks ASA-CF @base",
|
"name": "Generic ASA-CF @Blocks",
|
||||||
"sub_path": "filament/Blocks ASA-CF @base.json"
|
"sub_path": "filament/Generic ASA-CF @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PA @base",
|
"name": "Generic PA @Blocks",
|
||||||
"sub_path": "filament/Blocks PA @base.json"
|
"sub_path": "filament/Generic PA @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PA-CF @base",
|
"name": "Generic PA-CF @Blocks",
|
||||||
"sub_path": "filament/Blocks PA-CF @base.json"
|
"sub_path": "filament/Generic PA-CF @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PC @base",
|
"name": "Generic PC @Blocks",
|
||||||
"sub_path": "filament/Blocks PC @base.json"
|
"sub_path": "filament/Generic PC @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PETG @base",
|
"name": "Generic PETG @Blocks",
|
||||||
"sub_path": "filament/Blocks PETG @base.json"
|
"sub_path": "filament/Generic PETG @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PLA @base",
|
"name": "Generic PLA @Blocks",
|
||||||
"sub_path": "filament/Blocks PLA @base.json"
|
"sub_path": "filament/Generic PLA @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PLA-CF @base",
|
"name": "Generic PLA-CF @Blocks",
|
||||||
"sub_path": "filament/Blocks PLA-CF @base.json"
|
"sub_path": "filament/Generic PLA-CF @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks PVA @base",
|
"name": "Generic PVA @Blocks",
|
||||||
"sub_path": "filament/Blocks PVA @base.json"
|
"sub_path": "filament/Generic PVA @Blocks.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Blocks TPU @base",
|
"name": "Generic TPU @Blocks",
|
||||||
"sub_path": "filament/Blocks TPU @base.json"
|
"sub_path": "filament/Generic TPU @Blocks.json"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks ABS @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks ABS @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks ABS @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks ABS @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks ASA @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks ASA @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks ASA @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks ASA @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks ASA-CF @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks ASA-CF @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks ASA-CF @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks ASA-CF @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PA @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PA @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PA @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PA @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PA-CF @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PA-CF @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PA-CF @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PA-CF @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PC @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PC @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PC @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PC @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PETG @Blocks_Pro_S100",
|
|
||||||
"sub_path": "filament/Blocks PETG @Blocks_Pro_S100.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PETG @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PETG @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PETG @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PETG @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PLA @Blocks_Pro_S100",
|
|
||||||
"sub_path": "filament/Blocks PLA @Blocks_Pro_S100.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PLA @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PLA @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PLA @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PLA @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PLA-CF @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PLA-CF @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PLA-CF @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PLA-CF @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PVA @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks PVA @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks PVA @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks PVA @Blocks_RF50.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks TPU @Blocks_Pro_S100",
|
|
||||||
"sub_path": "filament/Blocks TPU @Blocks_Pro_S100.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks TPU @Blocks_RD50_V2",
|
|
||||||
"sub_path": "filament/Blocks TPU @Blocks_RD50_V2.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Blocks TPU @Blocks_RF50",
|
|
||||||
"sub_path": "filament/Blocks TPU @Blocks_RF50.json"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"machine_list": [
|
"machine_list": [
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks ABS @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks ABS @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "qhQ0qQDGJgsueCAF",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic ABS;Generic ABS @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks ABS @Blocks_RF50",
|
|
||||||
"inherits": "Blocks ABS @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "bGYMFFdKiROKuSiY",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks ASA @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks ASA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "HW7xDXThvpVFbMq5",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic ASA;Generic ASA @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks ASA @Blocks_RF50",
|
|
||||||
"inherits": "Blocks ASA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "lBW7SCsvawi4icNU",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks ASA-CF @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks ASA-CF @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "x5ksnGLGGy1PgDns",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic ASA-CF;Generic ASA-CF @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks ASA-CF @Blocks_RF50",
|
|
||||||
"inherits": "Blocks ASA-CF @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "pcbd5qFiMZAvDPg1",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PA @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "gxD81n2jjrReLD29",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PA;Generic PA @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PA @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "PzKxRMDnQUzVWRer",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PA @base",
|
|
||||||
"inherits": "fdm_filament_pa",
|
|
||||||
"from": "system",
|
|
||||||
"filament_id": "OFidOgK4",
|
|
||||||
"instantiation": "false",
|
|
||||||
"filament_vendor": [
|
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.98"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"10"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PA-CF @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PA-CF @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "EtbeKx3rbhUo1TtM",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PA-CF;Generic PA-CF @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PA-CF @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PA-CF @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "udI8Q4X7HaPIaPt4",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PC @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PC @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "HLc0shWnKwJzSFyW",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PC;Generic PC @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PC @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PC @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "9a6bccZopMTeNHYu",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PC @base",
|
|
||||||
"inherits": "fdm_filament_pc",
|
|
||||||
"from": "system",
|
|
||||||
"filament_id": "OFlGY0MN",
|
|
||||||
"instantiation": "false",
|
|
||||||
"filament_vendor": [
|
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.94"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"10"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PETG @Blocks_Pro_S100",
|
|
||||||
"inherits": "Blocks PETG @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "AhMR49fcFqtrQ6hI",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS Pro S100 0.4 nozzle",
|
|
||||||
"BLOCKS Pro S100 0.6 nozzle",
|
|
||||||
"BLOCKS Pro S100 0.8 nozzle",
|
|
||||||
"BLOCKS Pro S100 1.0 nozzle",
|
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PETG;Generic PETG @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PETG @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PETG @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "3v7ah1zVG8MERPSJ",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PETG @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PETG @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "S7weR19wo9meJ6Yz",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PLA @Blocks_Pro_S100",
|
|
||||||
"inherits": "Blocks PLA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "vWojuLYIfduLGFLL",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS Pro S100 0.4 nozzle",
|
|
||||||
"BLOCKS Pro S100 0.6 nozzle",
|
|
||||||
"BLOCKS Pro S100 0.8 nozzle",
|
|
||||||
"BLOCKS Pro S100 1.0 nozzle",
|
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PLA;Generic PLA @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PLA @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PLA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "y7y8NcXNdp17sJUs",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PLA @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PLA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "jt1MJF4eZzkkscEJ",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PLA-CF @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PLA-CF @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "lhBtMKP1DmOB3HOI",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PLA-CF;Generic PLA-CF @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PLA-CF @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PLA-CF @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "6CU83mAyhcZ4FCPI",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PLA-CF @base",
|
|
||||||
"inherits": "fdm_filament_pla",
|
|
||||||
"from": "system",
|
|
||||||
"filament_id": "OF6FfwOP",
|
|
||||||
"instantiation": "false",
|
|
||||||
"filament_vendor": [
|
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.95"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"20"
|
|
||||||
],
|
|
||||||
"filament_type": [
|
|
||||||
"PLA-CF"
|
|
||||||
],
|
|
||||||
"slow_down_layer_time": [
|
|
||||||
"7"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PVA @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks PVA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "hREDqwKF6qyKkakp",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic PVA;Generic PVA @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PVA @Blocks_RF50",
|
|
||||||
"inherits": "Blocks PVA @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "q6pKqHY7Iz4OZaAC",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks PVA @base",
|
|
||||||
"inherits": "fdm_filament_pva",
|
|
||||||
"from": "system",
|
|
||||||
"filament_id": "OFqcNuE1",
|
|
||||||
"instantiation": "false",
|
|
||||||
"filament_vendor": [
|
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
|
||||||
"0.98"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
|
||||||
"20"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks TPU @Blocks_Pro_S100",
|
|
||||||
"inherits": "Blocks TPU @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "6Rkz2je91JRTRoTi",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS Pro S100 0.4 nozzle",
|
|
||||||
"BLOCKS Pro S100 0.6 nozzle",
|
|
||||||
"BLOCKS Pro S100 0.8 nozzle",
|
|
||||||
"BLOCKS Pro S100 1.0 nozzle",
|
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
|
||||||
],
|
|
||||||
"renamed_from": "Blocks Generic TPU;Generic TPU @Blocks"
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks TPU @Blocks_RD50_V2",
|
|
||||||
"inherits": "Blocks TPU @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "mkCqRQTtXldzoEUg",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RD50 V2 0.4 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.6 nozzle",
|
|
||||||
"BLOCKS RD50 V2 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "filament",
|
|
||||||
"name": "Blocks TPU @Blocks_RF50",
|
|
||||||
"inherits": "Blocks TPU @base",
|
|
||||||
"from": "system",
|
|
||||||
"setting_id": "bCCvu5Ow1JkwIrRR",
|
|
||||||
"instantiation": "true",
|
|
||||||
"compatible_printers": [
|
|
||||||
"BLOCKS RF50 0.4 nozzle",
|
|
||||||
"BLOCKS RF50 0.6 nozzle",
|
|
||||||
"BLOCKS RF50 0.8 nozzle"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
+13
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks ABS @base",
|
"name": "Generic ABS @Blocks",
|
||||||
"inherits": "fdm_filament_abs",
|
"inherits": "fdm_filament_abs",
|
||||||
|
"renamed_from": "Blocks Generic ABS",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OFBBhiX8",
|
"setting_id": "TL1Q1kA4t36GGObG",
|
||||||
"instantiation": "false",
|
"filament_id": "OFY9muEs",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
"filament_flow_ratio": [
|
||||||
"0.95"
|
"0.95"
|
||||||
],
|
],
|
||||||
@@ -82,5 +81,13 @@
|
|||||||
],
|
],
|
||||||
"during_print_exhaust_fan_speed": [
|
"during_print_exhaust_fan_speed": [
|
||||||
"100"
|
"100"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
+13
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks ASA @base",
|
"name": "Generic ASA @Blocks",
|
||||||
"inherits": "fdm_filament_asa",
|
"inherits": "fdm_filament_asa",
|
||||||
|
"renamed_from": "Blocks Generic ASA",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OFTz2YXa",
|
"setting_id": "xP7cB4RHgbm4cYDD",
|
||||||
"instantiation": "false",
|
"filament_id": "OFLPAxz3",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
"filament_flow_ratio": [
|
||||||
"0.95"
|
"0.95"
|
||||||
],
|
],
|
||||||
@@ -82,5 +81,13 @@
|
|||||||
],
|
],
|
||||||
"during_print_exhaust_fan_speed": [
|
"during_print_exhaust_fan_speed": [
|
||||||
"100"
|
"100"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
+13
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks ASA-CF @base",
|
"name": "Generic ASA-CF @Blocks",
|
||||||
"inherits": "fdm_filament_asa",
|
"inherits": "fdm_filament_asa",
|
||||||
|
"renamed_from": "Blocks Generic ASA-CF",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OF8b9I7o",
|
"setting_id": "ju4ue7yJoz3ujny6",
|
||||||
"instantiation": "false",
|
"filament_id": "OF53eLVD",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_type": [
|
"filament_type": [
|
||||||
"ASA-CF"
|
"ASA-CF"
|
||||||
],
|
],
|
||||||
@@ -85,5 +84,13 @@
|
|||||||
],
|
],
|
||||||
"during_print_exhaust_fan_speed": [
|
"during_print_exhaust_fan_speed": [
|
||||||
"100"
|
"100"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"name": "Generic PA @Blocks",
|
||||||
|
"inherits": "fdm_filament_pa",
|
||||||
|
"renamed_from": "Blocks Generic PA",
|
||||||
|
"from": "system",
|
||||||
|
"setting_id": "hL3p8gAeciwDkjNK",
|
||||||
|
"filament_id": "OFg8ndtj",
|
||||||
|
"instantiation": "true",
|
||||||
|
"filament_flow_ratio": [
|
||||||
|
"0.98"
|
||||||
|
],
|
||||||
|
"filament_max_volumetric_speed": [
|
||||||
|
"10"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
|
]
|
||||||
|
}
|
||||||
+13
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks PA-CF @base",
|
"name": "Generic PA-CF @Blocks",
|
||||||
"inherits": "fdm_filament_pa",
|
"inherits": "fdm_filament_pa",
|
||||||
|
"renamed_from": "Blocks Generic PA-CF",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OFdWrXpL",
|
"setting_id": "T6SO0WRdnG6wcyG8",
|
||||||
"instantiation": "false",
|
"filament_id": "OFQLcbps",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_type": [
|
"filament_type": [
|
||||||
"PA-CF"
|
"PA-CF"
|
||||||
],
|
],
|
||||||
@@ -88,5 +87,13 @@
|
|||||||
],
|
],
|
||||||
"during_print_exhaust_fan_speed": [
|
"during_print_exhaust_fan_speed": [
|
||||||
"80"
|
"80"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"name": "Generic PC @Blocks",
|
||||||
|
"inherits": "fdm_filament_pc",
|
||||||
|
"renamed_from": "Blocks Generic PC",
|
||||||
|
"from": "system",
|
||||||
|
"setting_id": "Xhs8PjtmwwVj0ksE",
|
||||||
|
"filament_id": "OFLakOUI",
|
||||||
|
"instantiation": "true",
|
||||||
|
"filament_flow_ratio": [
|
||||||
|
"0.94"
|
||||||
|
],
|
||||||
|
"filament_max_volumetric_speed": [
|
||||||
|
"10"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
|
]
|
||||||
|
}
|
||||||
+18
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks PETG @base",
|
"name": "Generic PETG @Blocks",
|
||||||
"inherits": "fdm_filament_petg",
|
"inherits": "fdm_filament_petg",
|
||||||
|
"renamed_from": "Blocks Generic PETG",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OF9t1Ga0",
|
"setting_id": "NgzPlYItKHbmGgv3",
|
||||||
"instantiation": "false",
|
"filament_id": "OFYPdQJh",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
"filament_flow_ratio": [
|
||||||
"0.94"
|
"0.94"
|
||||||
],
|
],
|
||||||
@@ -82,5 +81,18 @@
|
|||||||
],
|
],
|
||||||
"slow_down_layer_time": [
|
"slow_down_layer_time": [
|
||||||
"5"
|
"5"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS Pro S100 0.4 nozzle",
|
||||||
|
"BLOCKS Pro S100 0.6 nozzle",
|
||||||
|
"BLOCKS Pro S100 0.8 nozzle",
|
||||||
|
"BLOCKS Pro S100 1.0 nozzle",
|
||||||
|
"BLOCKS Pro S100 1.2 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
+18
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks PLA @base",
|
"name": "Generic PLA @Blocks",
|
||||||
"inherits": "fdm_filament_pla",
|
"inherits": "fdm_filament_pla",
|
||||||
|
"renamed_from": "Blocks Generic PLA",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OFVGAC8g",
|
"setting_id": "kjhuttx4T8OtTNmV",
|
||||||
"instantiation": "false",
|
"filament_id": "OFDSrzZ8",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_flow_ratio": [
|
"filament_flow_ratio": [
|
||||||
"0.95"
|
"0.95"
|
||||||
],
|
],
|
||||||
@@ -40,5 +39,18 @@
|
|||||||
],
|
],
|
||||||
"during_print_exhaust_fan_speed": [
|
"during_print_exhaust_fan_speed": [
|
||||||
"100"
|
"100"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS Pro S100 0.4 nozzle",
|
||||||
|
"BLOCKS Pro S100 0.6 nozzle",
|
||||||
|
"BLOCKS Pro S100 0.8 nozzle",
|
||||||
|
"BLOCKS Pro S100 1.0 nozzle",
|
||||||
|
"BLOCKS Pro S100 1.2 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"name": "Generic PLA-CF @Blocks",
|
||||||
|
"inherits": "fdm_filament_pla",
|
||||||
|
"renamed_from": "Blocks Generic PLA-CF",
|
||||||
|
"from": "system",
|
||||||
|
"setting_id": "oKUqzwAWMrpiyGLf",
|
||||||
|
"filament_id": "OFWbdGsC",
|
||||||
|
"instantiation": "true",
|
||||||
|
"filament_flow_ratio": [
|
||||||
|
"0.95"
|
||||||
|
],
|
||||||
|
"filament_max_volumetric_speed": [
|
||||||
|
"20"
|
||||||
|
],
|
||||||
|
"filament_type": [
|
||||||
|
"PLA-CF"
|
||||||
|
],
|
||||||
|
"slow_down_layer_time": [
|
||||||
|
"7"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"type": "filament",
|
||||||
|
"name": "Generic PVA @Blocks",
|
||||||
|
"inherits": "fdm_filament_pva",
|
||||||
|
"renamed_from": "Blocks Generic PVA",
|
||||||
|
"from": "system",
|
||||||
|
"setting_id": "tNw3oe7VovLkgUbB",
|
||||||
|
"filament_id": "OFDvXujf",
|
||||||
|
"instantiation": "true",
|
||||||
|
"filament_flow_ratio": [
|
||||||
|
"0.98"
|
||||||
|
],
|
||||||
|
"filament_max_volumetric_speed": [
|
||||||
|
"20"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
|
]
|
||||||
|
}
|
||||||
+18
-6
@@ -1,13 +1,12 @@
|
|||||||
{
|
{
|
||||||
"type": "filament",
|
"type": "filament",
|
||||||
"name": "Blocks TPU @base",
|
"name": "Generic TPU @Blocks",
|
||||||
"inherits": "fdm_filament_tpu",
|
"inherits": "fdm_filament_tpu",
|
||||||
|
"renamed_from": "Blocks Generic TPU",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"filament_id": "OFYnedOZ",
|
"setting_id": "6iVYOCZo8ugs4JA0",
|
||||||
"instantiation": "false",
|
"filament_id": "OFgbpcy9",
|
||||||
"filament_vendor": [
|
"instantiation": "true",
|
||||||
"Blocks"
|
|
||||||
],
|
|
||||||
"filament_max_volumetric_speed": [
|
"filament_max_volumetric_speed": [
|
||||||
"4"
|
"4"
|
||||||
],
|
],
|
||||||
@@ -55,5 +54,18 @@
|
|||||||
],
|
],
|
||||||
"during_print_exhaust_fan_speed": [
|
"during_print_exhaust_fan_speed": [
|
||||||
"80"
|
"80"
|
||||||
|
],
|
||||||
|
"compatible_printers": [
|
||||||
|
"BLOCKS Pro S100 0.4 nozzle",
|
||||||
|
"BLOCKS Pro S100 0.6 nozzle",
|
||||||
|
"BLOCKS Pro S100 0.8 nozzle",
|
||||||
|
"BLOCKS Pro S100 1.0 nozzle",
|
||||||
|
"BLOCKS Pro S100 1.2 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.4 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.6 nozzle",
|
||||||
|
"BLOCKS RD50 V2 0.8 nozzle",
|
||||||
|
"BLOCKS RF50 0.4 nozzle",
|
||||||
|
"BLOCKS RF50 0.6 nozzle",
|
||||||
|
"BLOCKS RF50 0.8 nozzle"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
"setting_id": "G7HQgaspHXduDM8O",
|
"setting_id": "G7HQgaspHXduDM8O",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"printer_model": "BLOCKS Pro S100",
|
"printer_model": "BLOCKS Pro S100",
|
||||||
"default_print_profile": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100",
|
"default_print_profile": "0.20mm Standard 0.4 nozzle @Blocks",
|
||||||
"max_layer_height": [
|
"max_layer_height": [
|
||||||
"0.30"
|
"0.30"
|
||||||
],
|
],
|
||||||
@@ -25,8 +25,5 @@
|
|||||||
"printable_height": "900",
|
"printable_height": "900",
|
||||||
"upward_compatible_machine": [
|
"upward_compatible_machine": [
|
||||||
"BLOCKS Pro S100"
|
"BLOCKS Pro S100"
|
||||||
],
|
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_Pro_S100"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"setting_id": "XkWdS210oUMQN17N",
|
"setting_id": "XkWdS210oUMQN17N",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"printer_model": "BLOCKS Pro S100",
|
"printer_model": "BLOCKS Pro S100",
|
||||||
"default_print_profile": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100",
|
"default_print_profile": "0.30mm Standard 0.6 nozzle @Blocks",
|
||||||
"max_layer_height": [
|
"max_layer_height": [
|
||||||
"0.50"
|
"0.50"
|
||||||
],
|
],
|
||||||
@@ -26,8 +26,5 @@
|
|||||||
"upward_compatible_machine": [
|
"upward_compatible_machine": [
|
||||||
"BLOCKS Pro S100"
|
"BLOCKS Pro S100"
|
||||||
],
|
],
|
||||||
"printer_variant": "0.6",
|
"printer_variant": "0.6"
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_Pro_S100"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"setting_id": "I6PdeCS7SbvIlkZf",
|
"setting_id": "I6PdeCS7SbvIlkZf",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"printer_model": "BLOCKS Pro S100",
|
"printer_model": "BLOCKS Pro S100",
|
||||||
"default_print_profile": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100",
|
"default_print_profile": "0.40mm Standard 0.8 nozzle @Blocks",
|
||||||
"max_layer_height": [
|
"max_layer_height": [
|
||||||
"0.56"
|
"0.56"
|
||||||
],
|
],
|
||||||
@@ -26,8 +26,5 @@
|
|||||||
"upward_compatible_machine": [
|
"upward_compatible_machine": [
|
||||||
"BLOCKS Pro S100"
|
"BLOCKS Pro S100"
|
||||||
],
|
],
|
||||||
"printer_variant": "0.8",
|
"printer_variant": "0.8"
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_Pro_S100"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"setting_id": "elLdUyy9RhUoa37o",
|
"setting_id": "elLdUyy9RhUoa37o",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"printer_model": "BLOCKS Pro S100",
|
"printer_model": "BLOCKS Pro S100",
|
||||||
"default_print_profile": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100",
|
"default_print_profile": "0.50mm Standard 1.0 nozzle @Blocks",
|
||||||
"max_layer_height": [
|
"max_layer_height": [
|
||||||
"0.7"
|
"0.7"
|
||||||
],
|
],
|
||||||
@@ -26,8 +26,5 @@
|
|||||||
"upward_compatible_machine": [
|
"upward_compatible_machine": [
|
||||||
"BLOCKS Pro S100"
|
"BLOCKS Pro S100"
|
||||||
],
|
],
|
||||||
"printer_variant": "1.0",
|
"printer_variant": "1.0"
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_Pro_S100"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"setting_id": "xtsGSJ4JkbHTPi44",
|
"setting_id": "xtsGSJ4JkbHTPi44",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"printer_model": "BLOCKS Pro S100",
|
"printer_model": "BLOCKS Pro S100",
|
||||||
"default_print_profile": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100",
|
"default_print_profile": "0.60mm Standard 1.2 nozzle @Blocks",
|
||||||
"max_layer_height": [
|
"max_layer_height": [
|
||||||
"0.8"
|
"0.8"
|
||||||
],
|
],
|
||||||
@@ -26,8 +26,5 @@
|
|||||||
"upward_compatible_machine": [
|
"upward_compatible_machine": [
|
||||||
"BLOCKS Pro S100"
|
"BLOCKS Pro S100"
|
||||||
],
|
],
|
||||||
"printer_variant": "1.2",
|
"printer_variant": "1.2"
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_Pro_S100"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,5 +8,5 @@
|
|||||||
"bed_model": "PRO S100 HotBed model.stl",
|
"bed_model": "PRO S100 HotBed model.stl",
|
||||||
"bed_texture": "PRO S100 HotBed texture.svg",
|
"bed_texture": "PRO S100 HotBed texture.svg",
|
||||||
"hotend_model": "BLOCKS PrintCore.stl",
|
"hotend_model": "BLOCKS PrintCore.stl",
|
||||||
"default_materials": "Blocks PLA @Blocks_Pro_S100;Blocks PETG @Blocks_Pro_S100;Blocks TPU @Blocks_Pro_S100"
|
"default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,5 @@
|
|||||||
"printable_height": "500",
|
"printable_height": "500",
|
||||||
"upward_compatible_machine": [
|
"upward_compatible_machine": [
|
||||||
"BLOCKS RD50 V2"
|
"BLOCKS RD50 V2"
|
||||||
],
|
|
||||||
"printer_variant": "0.4",
|
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_RD50_V2"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,8 +35,5 @@
|
|||||||
"deretraction_speed": [
|
"deretraction_speed": [
|
||||||
"80"
|
"80"
|
||||||
],
|
],
|
||||||
"printer_variant": "0.6",
|
"printer_variant": "0.6"
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_RD50_V2"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,8 +35,5 @@
|
|||||||
"deretraction_speed": [
|
"deretraction_speed": [
|
||||||
"80"
|
"80"
|
||||||
],
|
],
|
||||||
"printer_variant": "0.8",
|
"printer_variant": "0.8"
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_RD50_V2"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,5 +8,5 @@
|
|||||||
"bed_model": "RD50 V2 HotBed model.stl",
|
"bed_model": "RD50 V2 HotBed model.stl",
|
||||||
"bed_texture": "RD50 V2 HotBed texture.svg",
|
"bed_texture": "RD50 V2 HotBed texture.svg",
|
||||||
"hotend_model": "BLOCKS PrintCore.stl",
|
"hotend_model": "BLOCKS PrintCore.stl",
|
||||||
"default_materials": "Blocks PLA @Blocks_RD50_V2;Blocks PETG @Blocks_RD50_V2;Blocks TPU @Blocks_RD50_V2"
|
"default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
"12"
|
"12"
|
||||||
],
|
],
|
||||||
"retraction_length": [
|
"retraction_length": [
|
||||||
"1.2"
|
"1"
|
||||||
],
|
],
|
||||||
"retraction_speed": [
|
"retraction_speed": [
|
||||||
"60"
|
"60"
|
||||||
@@ -79,10 +79,5 @@
|
|||||||
],
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0"
|
"0"
|
||||||
],
|
]
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_RF50"
|
|
||||||
],
|
|
||||||
"support_multi_bed_types": "1",
|
|
||||||
"default_bed_type": "Textured PEI Plate"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
"12"
|
"12"
|
||||||
],
|
],
|
||||||
"retraction_length": [
|
"retraction_length": [
|
||||||
"1.2"
|
"1"
|
||||||
],
|
],
|
||||||
"retraction_speed": [
|
"retraction_speed": [
|
||||||
"60"
|
"60"
|
||||||
@@ -75,8 +75,8 @@
|
|||||||
"BLOCKS RF50"
|
"BLOCKS RF50"
|
||||||
],
|
],
|
||||||
"machine_start_gcode": [
|
"machine_start_gcode": [
|
||||||
"PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer]\n",
|
"PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer]",
|
||||||
"SET_PRESSURE_ADVANCE ADVANCE=0.046\n"
|
"SET_PRESSURE_ADVANCE ADVANCE=0.046"
|
||||||
],
|
],
|
||||||
"printer_variant": "0.6",
|
"printer_variant": "0.6",
|
||||||
"wipe_distance": [
|
"wipe_distance": [
|
||||||
@@ -84,10 +84,5 @@
|
|||||||
],
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0"
|
"0"
|
||||||
],
|
]
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_RF50"
|
|
||||||
],
|
|
||||||
"support_multi_bed_types": "1",
|
|
||||||
"default_bed_type": "Textured PEI Plate"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
"12"
|
"12"
|
||||||
],
|
],
|
||||||
"retraction_length": [
|
"retraction_length": [
|
||||||
"1.2"
|
"1"
|
||||||
],
|
],
|
||||||
"retraction_speed": [
|
"retraction_speed": [
|
||||||
"60"
|
"60"
|
||||||
@@ -80,10 +80,5 @@
|
|||||||
],
|
],
|
||||||
"retract_before_wipe": [
|
"retract_before_wipe": [
|
||||||
"0"
|
"0"
|
||||||
],
|
]
|
||||||
"default_filament_profile": [
|
|
||||||
"Blocks PLA @Blocks_RF50"
|
|
||||||
],
|
|
||||||
"support_multi_bed_types": "1",
|
|
||||||
"default_bed_type": "Textured PEI Plate"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,5 @@
|
|||||||
"bed_model": "RF50 HotBed model.stl",
|
"bed_model": "RF50 HotBed model.stl",
|
||||||
"bed_texture": "RF50 HotBed texture.svg",
|
"bed_texture": "RF50 HotBed texture.svg",
|
||||||
"hotend_model": "BLOCKS PrintCore.stl",
|
"hotend_model": "BLOCKS PrintCore.stl",
|
||||||
"default_materials": "Blocks PLA @Blocks_RF50;Blocks PETG @Blocks_RF50;Blocks TPU @Blocks_RF50",
|
"default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks"
|
||||||
"not_support_bed_type": "Smooth Cool Plate;Engineering Plate;Textured Cool Plate;Cool Plate (SuperTack)"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,9 @@
|
|||||||
"wipe": [
|
"wipe": [
|
||||||
"1"
|
"1"
|
||||||
],
|
],
|
||||||
|
"default_filament_profile": [
|
||||||
|
"Generic PLA @Blocks"
|
||||||
|
],
|
||||||
"bed_exclude_area": [
|
"bed_exclude_area": [
|
||||||
"0x0"
|
"0x0"
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.20mm Standard 0.4 nozzle @Blocks_Pro_S100",
|
"name": "0.20mm Standard 0.4 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_blocks_common",
|
"inherits": "fdm_process_blocks_common",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "QSEguMMChNFZsK5H",
|
"setting_id": "47aDtVL6E5DVr7Mt",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"layer_height": "0.2",
|
"layer_height": "0.2",
|
||||||
"bottom_shell_layers": "4",
|
"bottom_shell_layers": "4",
|
||||||
"top_shell_layers": "5",
|
"top_shell_layers": "5",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.4 nozzle"
|
"BLOCKS Pro S100 0.4 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.20mm Standard 0.4 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -61,7 +61,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.24mm Draft 0.4 nozzle @Blocks_Pro_S100",
|
"name": "0.24mm Draft 0.4 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_blocks_common",
|
"inherits": "fdm_process_blocks_common",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "uALfEFHGmup6vBYI",
|
"setting_id": "ETADjxV6ViJQdnHA",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"layer_height": "0.24",
|
"layer_height": "0.24",
|
||||||
"bottom_shell_layers": "4",
|
"bottom_shell_layers": "4",
|
||||||
"top_shell_layers": "5",
|
"top_shell_layers": "5",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.4 nozzle"
|
"BLOCKS Pro S100 0.4 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.24mm Draft 0.4 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Extra Draft 0.4 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_blocks_common",
|
"inherits": "fdm_process_blocks_common",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "HYKF5l2OGvpugSQy",
|
"setting_id": "UbuICsmppKDsaaZ4",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "3",
|
"bottom_shell_layers": "3",
|
||||||
"top_shell_layers": "4",
|
"top_shell_layers": "4",
|
||||||
"layer_height": "0.30",
|
"layer_height": "0.30",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.4 nozzle"
|
"BLOCKS Pro S100 0.4 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.30mm Extra Draft 0.4 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.30mm Optimal 0.8 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Optimal 0.8 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 0.8 nozzle",
|
"inherits": "fdm_process_common 0.8 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "OUfZvizM5MGnvHfp",
|
"setting_id": "YqkYzp5zdH4R5upm",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "3",
|
"bottom_shell_layers": "3",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.3",
|
"layer_height": "0.3",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.8 nozzle"
|
"BLOCKS Pro S100 0.8 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.30mm Optimal 0.8 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.30mm Optimal 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Optimal 1.0 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.0 nozzle",
|
"inherits": "fdm_process_common 1.0 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "HGG9WxKVr89qNFDx",
|
"setting_id": "8pBawPScHkyQu0SW",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "4",
|
"bottom_shell_layers": "4",
|
||||||
"top_shell_layers": "4",
|
"top_shell_layers": "4",
|
||||||
"layer_height": "0.30",
|
"layer_height": "0.30",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.0 nozzle"
|
"BLOCKS Pro S100 1.0 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.30mm Optimal 1.0 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.30mm Standard 0.6 nozzle @Blocks_Pro_S100",
|
"name": "0.30mm Standard 0.6 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 0.6 nozzle",
|
"inherits": "fdm_process_common 0.6 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "gO2I1YjBl4nf8yzr",
|
"setting_id": "EPI3PAVK9LpJOZWO",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "3",
|
"bottom_shell_layers": "3",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.30",
|
"layer_height": "0.30",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.6 nozzle"
|
"BLOCKS Pro S100 0.6 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.30mm Standard 0.6 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.40mm Draft 0.6 nozzle @Blocks_Pro_S100",
|
"name": "0.40mm Draft 0.6 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 0.6 nozzle",
|
"inherits": "fdm_process_common 0.6 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "OjsLUl1heqv1cevs",
|
"setting_id": "CShVKoGspbMJNPw8",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "2",
|
"top_shell_layers": "2",
|
||||||
"layer_height": "0.40",
|
"layer_height": "0.40",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.6 nozzle"
|
"BLOCKS Pro S100 0.6 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.40mm Draft 0.6 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.40mm Standard 0.8 nozzle @Blocks_Pro_S100",
|
"name": "0.40mm Standard 0.8 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 0.8 nozzle",
|
"inherits": "fdm_process_common 0.8 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "laOTioBGySeudJpl",
|
"setting_id": "TSRjmfWaatY7oLJB",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "3",
|
"bottom_shell_layers": "3",
|
||||||
"top_shell_layers": "4",
|
"top_shell_layers": "4",
|
||||||
"layer_height": "0.40",
|
"layer_height": "0.40",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.8 nozzle"
|
"BLOCKS Pro S100 0.8 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.40mm Standard 0.8 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.50mm Draft 0.8 nozzle @Blocks_Pro_S100",
|
"name": "0.50mm Draft 0.8 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 0.8 nozzle",
|
"inherits": "fdm_process_common 0.8 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "oAhgUZdADR7kP87e",
|
"setting_id": "vOtZHrDS88Shmf2m",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "3",
|
"bottom_shell_layers": "3",
|
||||||
"top_shell_layers": "4",
|
"top_shell_layers": "4",
|
||||||
"layer_height": "0.50",
|
"layer_height": "0.50",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 0.8 nozzle"
|
"BLOCKS Pro S100 0.8 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.50mm Draft 0.8 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.50mm Optimal 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.50mm Optimal 1.2 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.2 nozzle",
|
"inherits": "fdm_process_common 1.2 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "0eqNgX26jemsBfV5",
|
"setting_id": "BKrEAKqDYzdH43wc",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.50",
|
"layer_height": "0.50",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
"BLOCKS Pro S100 1.2 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.50mm Optimal 1.2 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.50mm Standard 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.50mm Standard 1.0 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.0 nozzle",
|
"inherits": "fdm_process_common 1.0 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "z1qCW1cEMc4QvBbV",
|
"setting_id": "D40iksDm7mFjhSKn",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "3",
|
"bottom_shell_layers": "3",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.50",
|
"layer_height": "0.50",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.0 nozzle"
|
"BLOCKS Pro S100 1.0 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.50mm Standard 1.0 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
"top_solid_infill_flow_ratio": "0.97",
|
"top_solid_infill_flow_ratio": "0.97",
|
||||||
"bottom_solid_infill_flow_ratio": "1.08",
|
"bottom_solid_infill_flow_ratio": "1.08",
|
||||||
"seam_position": "aligned",
|
"seam_position": "aligned",
|
||||||
"sparse_infill_pattern": "grid",
|
"sparse_infill_patter": "grid",
|
||||||
"initial_layer_speed": "60",
|
"initial_layer_speed": "60",
|
||||||
"initial_layer_infill_speed": "80",
|
"initial_layer_infill_speed": "80",
|
||||||
"initial_travel_speed": "100%",
|
"initial_travel_speed": "100%",
|
||||||
@@ -57,7 +57,5 @@
|
|||||||
"accel_to_decel_enable": "1",
|
"accel_to_decel_enable": "1",
|
||||||
"accel_to_decel_factor": "50%",
|
"accel_to_decel_factor": "50%",
|
||||||
"elefant_foot_compensation": "0.25",
|
"elefant_foot_compensation": "0.25",
|
||||||
"elefant_foot_compensation_layers": "1",
|
"elefant_foot_compensation_layers": "1"
|
||||||
"skirt_loops": "2",
|
|
||||||
"skirt_type": "perobject"
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.60mm Draft 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.60mm Draft 1.0 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.0 nozzle",
|
"inherits": "fdm_process_common 1.0 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "gTTgtfG8qb9My3hH",
|
"setting_id": "UJUe8XCBzZf8NyCL",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.60",
|
"layer_height": "0.60",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.0 nozzle"
|
"BLOCKS Pro S100 1.0 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.60mm Draft 1.0 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.60mm Standard 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.60mm Standard 1.2 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.2 nozzle",
|
"inherits": "fdm_process_common 1.2 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "ApcyToENCIANrI71",
|
"setting_id": "PSBFrTykpkytPI2Q",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.60",
|
"layer_height": "0.60",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
"BLOCKS Pro S100 1.2 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.60mm Standard 1.2 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.70mm Draft 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.70mm Draft 1.2 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.2 nozzle",
|
"inherits": "fdm_process_common 1.2 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "DEv7X7zaTfxRQmjo",
|
"setting_id": "0ZQ0USGX9SwAKr29",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.70",
|
"layer_height": "0.70",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
"BLOCKS Pro S100 1.2 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.70mm Draft 1.2 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks_Pro_S100",
|
"name": "0.70mm Extra Draft 1.0 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.0 nozzle",
|
"inherits": "fdm_process_common 1.0 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "nUW7N9dJmTyQT4AG",
|
"setting_id": "69PFmjOVFBOIp3Qg",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "3",
|
"top_shell_layers": "3",
|
||||||
"layer_height": "0.70",
|
"layer_height": "0.70",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.0 nozzle"
|
"BLOCKS Pro S100 1.0 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.70mm Extra Draft 1.0 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
+3
-4
@@ -1,15 +1,14 @@
|
|||||||
{
|
{
|
||||||
"type": "process",
|
"type": "process",
|
||||||
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks_Pro_S100",
|
"name": "0.80mm Extra Draft 1.2 nozzle @Blocks",
|
||||||
"inherits": "fdm_process_common 1.2 nozzle",
|
"inherits": "fdm_process_common 1.2 nozzle",
|
||||||
"from": "system",
|
"from": "system",
|
||||||
"setting_id": "JMy62SonRfK0cAdL",
|
"setting_id": "iBwRI5JJewW5HJSv",
|
||||||
"instantiation": "true",
|
"instantiation": "true",
|
||||||
"bottom_shell_layers": "2",
|
"bottom_shell_layers": "2",
|
||||||
"top_shell_layers": "2",
|
"top_shell_layers": "2",
|
||||||
"layer_height": "0.80",
|
"layer_height": "0.80",
|
||||||
"compatible_printers": [
|
"compatible_printers": [
|
||||||
"BLOCKS Pro S100 1.2 nozzle"
|
"BLOCKS Pro S100 1.2 nozzle"
|
||||||
],
|
]
|
||||||
"renamed_from": "0.80mm Extra Draft 1.2 nozzle @Blocks"
|
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "OrcaFilamentLibrary",
|
"name": "OrcaFilamentLibrary",
|
||||||
"version": "02.04.00.13",
|
"version": "02.04.00.12",
|
||||||
"force_update": "0",
|
"force_update": "0",
|
||||||
"description": "Orca Filament Library",
|
"description": "Orca Filament Library",
|
||||||
"filament_list": [
|
"filament_list": [
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
"filament_id": "OFvgE0Zh",
|
"filament_id": "OFvgE0Zh",
|
||||||
"instantiation": "false",
|
"instantiation": "false",
|
||||||
"fan_cooling_layer_time": [
|
"fan_cooling_layer_time": [
|
||||||
"81"
|
"80"
|
||||||
],
|
],
|
||||||
"fan_min_speed": [
|
"fan_min_speed": [
|
||||||
"50"
|
"50"
|
||||||
|
|||||||
+47
-6
@@ -2116,9 +2116,14 @@ int CLI::run(int argc, char **argv)
|
|||||||
|
|
||||||
// One resolver for the whole run, so presets from the same vendor tree share its load.
|
// One resolver for the whole run, so presets from the same vendor tree share its load.
|
||||||
std::unique_ptr<PresetBundle> system_preset_resolver;
|
std::unique_ptr<PresetBundle> system_preset_resolver;
|
||||||
auto resolve_preset = [&ensure_cli_preset_bundle, &system_preset_resolver](const std::string &file, DynamicPrintConfig &config,
|
auto ensure_system_preset_resolver = [&system_preset_resolver]() -> PresetBundle & {
|
||||||
std::string &config_type, const std::string &config_from,
|
if (!system_preset_resolver)
|
||||||
bool probe_type, std::string &error) {
|
system_preset_resolver = std::make_unique<PresetBundle>();
|
||||||
|
return *system_preset_resolver;
|
||||||
|
};
|
||||||
|
auto resolve_preset = [&ensure_cli_preset_bundle, &ensure_system_preset_resolver](const std::string &file, DynamicPrintConfig &config,
|
||||||
|
std::string &config_type, const std::string &config_from,
|
||||||
|
bool probe_type, std::string &error) {
|
||||||
const auto *inherits = config.option<ConfigOptionString>(BBL_JSON_KEY_INHERITS);
|
const auto *inherits = config.option<ConfigOptionString>(BBL_JSON_KEY_INHERITS);
|
||||||
if (!probe_type && (inherits == nullptr || inherits->value.empty()))
|
if (!probe_type && (inherits == nullptr || inherits->value.empty()))
|
||||||
return true;
|
return true;
|
||||||
@@ -2126,9 +2131,7 @@ int CLI::run(int argc, char **argv)
|
|||||||
PresetBundle *bundle = nullptr;
|
PresetBundle *bundle = nullptr;
|
||||||
bool allow_source_manifest = false;
|
bool allow_source_manifest = false;
|
||||||
if (config_from == "system") {
|
if (config_from == "system") {
|
||||||
if (!system_preset_resolver)
|
bundle = &ensure_system_preset_resolver();
|
||||||
system_preset_resolver = std::make_unique<PresetBundle>();
|
|
||||||
bundle = system_preset_resolver.get();
|
|
||||||
allow_source_manifest = true;
|
allow_source_manifest = true;
|
||||||
} else {
|
} else {
|
||||||
bundle = ensure_cli_preset_bundle(error);
|
bundle = ensure_cli_preset_bundle(error);
|
||||||
@@ -3120,6 +3123,44 @@ int CLI::run(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Load the project's printer and process settings as the GUI loads its presets: over the default preset,
|
||||||
|
// with every key the project does not list as changed, including keys saved before an option existed,
|
||||||
|
// taken from its current system preset.
|
||||||
|
auto load_project_preset = [this, &ensure_system_preset_resolver, ¤t_different_settings, filament_count](const std::string &system_name, Preset::Type type) {
|
||||||
|
if (system_name.empty())
|
||||||
|
return;
|
||||||
|
// Preset bookkeeping the CLI keeps in its own groups, e.g. inherits_group and print_compatible_printers.
|
||||||
|
static const std::set<std::string> bookkeeping_keys = {"inherits", "compatible_printers", "compatible_prints", "compatible_printers_condition",
|
||||||
|
"compatible_prints_condition", "print_settings_id", "printer_settings_id"};
|
||||||
|
const size_t index = type == Preset::TYPE_PRINTER ? filament_count + 1 : 0;
|
||||||
|
PresetBundle &resolver = ensure_system_preset_resolver();
|
||||||
|
DynamicPrintConfig system_config;
|
||||||
|
t_config_option_keys keys;
|
||||||
|
const DynamicPrintConfig config = Preset::load_external_config(type,
|
||||||
|
type == Preset::TYPE_PRINTER ? resolver.printers.default_preset_for(m_print_config).config : resolver.prints.default_preset().config,
|
||||||
|
m_print_config, PresetBundle::project_different_keys(index < current_different_settings.size() ? current_different_settings[index] : std::string()),
|
||||||
|
[&](const std::string &) -> DynamicPrintConfig * {
|
||||||
|
std::string error;
|
||||||
|
if (resolver.resolve_system_preset(system_config, type, system_name, config_substitution_rule, error))
|
||||||
|
return &system_config;
|
||||||
|
BOOST_LOG_TRIVIAL(warning) << boost::format("CLI: system preset '%1%' not resolved (%2%); the project keeps its values") % system_name % error;
|
||||||
|
return nullptr;
|
||||||
|
}, &keys);
|
||||||
|
for (const std::string &key : keys) {
|
||||||
|
const ConfigOption *opt = config.option(key);
|
||||||
|
const ConfigOption *old = m_print_config.option(key);
|
||||||
|
if (bookkeeping_keys.count(key) != 0 || opt == nullptr || (old != nullptr && *old == *opt))
|
||||||
|
continue;
|
||||||
|
BOOST_LOG_TRIVIAL(info) << boost::format("CLI: %1% from '%2%': %3% -> %4%") % key % system_name % (old ? old->serialize() : std::string("(missing)")) % opt->serialize();
|
||||||
|
m_print_config.set_key_value(key, opt->clone());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// The --uptodate path refreshes the project from its own system configs.
|
||||||
|
if (new_printer_name.empty() && load_machine_config.empty())
|
||||||
|
load_project_preset(current_printer_system_name, Preset::TYPE_PRINTER);
|
||||||
|
if (new_process_name.empty() && load_process_config.empty())
|
||||||
|
load_project_preset(current_process_system_name, Preset::TYPE_PRINT);
|
||||||
|
|
||||||
std::vector<std::string>& different_settings = m_print_config.option<ConfigOptionStrings>("different_settings_to_system", true)->values;
|
std::vector<std::string>& different_settings = m_print_config.option<ConfigOptionStrings>("different_settings_to_system", true)->values;
|
||||||
std::vector<std::string>& inherits_group = m_print_config.option<ConfigOptionStrings>("inherits_group", true)->values;
|
std::vector<std::string>& inherits_group = m_print_config.option<ConfigOptionStrings>("inherits_group", true)->values;
|
||||||
inherits_group.resize(filament_count + 2, std::string());
|
inherits_group.resize(filament_count + 2, std::string());
|
||||||
|
|||||||
@@ -2673,10 +2673,10 @@ void CadDocument::apply_feature(TopoDS_Shape& result, bool& have_body,
|
|||||||
ridge = pipe.Shape();
|
ridge = pipe.Shape();
|
||||||
have_ridge = !ridge.IsNull();
|
have_ridge = !ridge.IsNull();
|
||||||
}
|
}
|
||||||
} catch (const Standard_Failure&) {
|
|
||||||
have_ridge = false; // OCCT failure — on OCCT >= 8 Standard_Failure derives from std::exception, so this handler must come first
|
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
have_ridge = false; // fall back to the bare cylinder/bore below
|
have_ridge = false; // fall back to the bare cylinder/bore below
|
||||||
|
} catch (const Standard_Failure&) {
|
||||||
|
have_ridge = false; // OCCT failure (not a std::exception) — must be caught here too
|
||||||
}
|
}
|
||||||
|
|
||||||
if (f.thread_internal) {
|
if (f.thread_internal) {
|
||||||
|
|||||||
@@ -15,8 +15,6 @@
|
|||||||
#include <TopExp.hxx>
|
#include <TopExp.hxx>
|
||||||
#include <TopTools.hxx>
|
#include <TopTools.hxx>
|
||||||
#include <TopTools_IndexedMapOfShape.hxx>
|
#include <TopTools_IndexedMapOfShape.hxx>
|
||||||
#include <TopTools_ListOfShape.hxx>
|
|
||||||
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
|
|
||||||
#include <Poly_Triangulation.hxx>
|
#include <Poly_Triangulation.hxx>
|
||||||
#include <gp_Ax2.hxx>
|
#include <gp_Ax2.hxx>
|
||||||
#include <gp_Dir.hxx>
|
#include <gp_Dir.hxx>
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
#include "XCAFDoc_DocumentTool.hxx"
|
#include "XCAFDoc_DocumentTool.hxx"
|
||||||
#include "XCAFDoc_ShapeTool.hxx"
|
#include "XCAFDoc_ShapeTool.hxx"
|
||||||
#include "XCAFApp_Application.hxx"
|
#include "XCAFApp_Application.hxx"
|
||||||
#include "TDF_LabelSequence.hxx"
|
|
||||||
#include "TopoDS_Solid.hxx"
|
#include "TopoDS_Solid.hxx"
|
||||||
#include "TopoDS_Compound.hxx"
|
#include "TopoDS_Compound.hxx"
|
||||||
#include "TopoDS_Builder.hxx"
|
#include "TopoDS_Builder.hxx"
|
||||||
|
|||||||
+23
-28
@@ -7969,20 +7969,6 @@ double GCode::calc_max_volumetric_speed(const double layer_height, const double
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ORCA: Overlap at or below which the overhang fan switches on; negative when it does not depend on overlap
|
|
||||||
// (Overhang_threshold_none cools every external perimeter).
|
|
||||||
static float overhang_fan_overlap_threshold(int overhang_fan_threshold)
|
|
||||||
{
|
|
||||||
switch (overhang_fan_threshold) {
|
|
||||||
case (int) Overhang_threshold_1_4: return 0.9f;
|
|
||||||
case (int) Overhang_threshold_2_4: return 0.75f;
|
|
||||||
case (int) Overhang_threshold_3_4: return 0.5f;
|
|
||||||
case (int) Overhang_threshold_4_4: return 0.25f;
|
|
||||||
case (int) Overhang_threshold_bridge: return 0.05f;
|
|
||||||
default: return -1.f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string GCode::_extrude(const ExtrusionPath &path, std::string description, double speed)
|
std::string GCode::_extrude(const ExtrusionPath &path, std::string description, double speed)
|
||||||
{
|
{
|
||||||
std::string gcode;
|
std::string gcode;
|
||||||
@@ -8325,13 +8311,6 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
|||||||
|
|
||||||
ConfigOptionPercents overhang_overlap_levels({90, 75, 50, 25, 13, 0});
|
ConfigOptionPercents overhang_overlap_levels({90, 75, 50, 25, 13, 0});
|
||||||
|
|
||||||
// ORCA: Lets the path be split where the overhang fan switches, not only where the speed changes.
|
|
||||||
// Bridges and overhang perimeters are cooled regardless of overlap.
|
|
||||||
float fan_overlap_threshold = -1.f;
|
|
||||||
if (FILAMENT_CONFIG(enable_overhang_bridge_fan) && m_enable_cooling_markers && path.role() != erBridgeInfill &&
|
|
||||||
path.role() != erOverhangPerimeter)
|
|
||||||
fan_overlap_threshold = overhang_fan_overlap_threshold(FILAMENT_CONFIG(overhang_fan_threshold));
|
|
||||||
|
|
||||||
if (NOZZLE_CONFIG(slowdown_for_curled_perimeters)){
|
if (NOZZLE_CONFIG(slowdown_for_curled_perimeters)){
|
||||||
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
||||||
{FloatOrPercent{100, true},
|
{FloatOrPercent{100, true},
|
||||||
@@ -8352,8 +8331,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
|||||||
FloatOrPercent{NOZZLE_CONFIG(overhang_4_4_speed).get_abs_value(ref_speed) * 100 / ref_speed, true}});
|
FloatOrPercent{NOZZLE_CONFIG(overhang_4_4_speed).get_abs_value(ref_speed) * 100 / ref_speed, true}});
|
||||||
|
|
||||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
||||||
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters),
|
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters));
|
||||||
fan_overlap_threshold);
|
|
||||||
}else{
|
}else{
|
||||||
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
ConfigOptionFloatsOrPercents dynamic_overhang_speeds(
|
||||||
{FloatOrPercent{100, true},
|
{FloatOrPercent{100, true},
|
||||||
@@ -8372,8 +8350,7 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
|||||||
FloatOrPercent{NOZZLE_CONFIG(bridge_speed) * 100 / ref_speed, true}});
|
FloatOrPercent{NOZZLE_CONFIG(bridge_speed) * 100 / ref_speed, true}});
|
||||||
|
|
||||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhang_overlap_levels, dynamic_overhang_speeds,
|
||||||
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters),
|
ref_speed, speed, NOZZLE_CONFIG(slowdown_for_curled_perimeters));
|
||||||
fan_overlap_threshold);
|
|
||||||
}
|
}
|
||||||
variable_speed = std::any_of(new_points.begin(), new_points.end(),
|
variable_speed = std::any_of(new_points.begin(), new_points.end(),
|
||||||
[speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > 1; }); // Ignore small speed variations (under 1mm/sec)
|
[speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > 1; }); // Ignore small speed variations (under 1mm/sec)
|
||||||
@@ -8525,10 +8502,28 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description,
|
|||||||
if (role == erBridgeInfill || role == erOverhangPerimeter) { // ORCA: Split out bridge infill to internal and external to apply separate fan settings
|
if (role == erBridgeInfill || role == erOverhangPerimeter) { // ORCA: Split out bridge infill to internal and external to apply separate fan settings
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (overhang_fan_threshold == Overhang_threshold_none)
|
switch (overhang_fan_threshold) {
|
||||||
|
case (int)Overhang_threshold_1_4:
|
||||||
|
return overlap <= 0.9f;
|
||||||
|
break;
|
||||||
|
case (int)Overhang_threshold_2_4:
|
||||||
|
return overlap <= 0.75f;
|
||||||
|
break;
|
||||||
|
case (int)Overhang_threshold_3_4:
|
||||||
|
return overlap <= 0.5f;
|
||||||
|
break;
|
||||||
|
case (int)Overhang_threshold_4_4:
|
||||||
|
return overlap <= 0.25f;
|
||||||
|
break;
|
||||||
|
case (int)Overhang_threshold_bridge:
|
||||||
|
return overlap <= 0.05f;
|
||||||
|
break;
|
||||||
|
case (int)Overhang_threshold_none:
|
||||||
return is_external_perimeter(role);
|
return is_external_perimeter(role);
|
||||||
const float overlap_threshold = overhang_fan_overlap_threshold(overhang_fan_threshold);
|
break;
|
||||||
return overlap_threshold >= 0.f && overlap <= overlap_threshold;
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string comment;
|
std::string comment;
|
||||||
|
|||||||
@@ -41,12 +41,10 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
|||||||
float flow_width,
|
float flow_width,
|
||||||
float max_line_length = -1.0f,
|
float max_line_length = -1.0f,
|
||||||
float min_distance = -1.0f,
|
float min_distance = -1.0f,
|
||||||
// Speed an overhang distance prints at. Without it, interior sampling
|
// Maps an overhang distance onto the speed it will be printed at. Interior sampling
|
||||||
// is skipped and every line over 4mm is split.
|
// needs it to tell which of the points it could add would change the G-code, and is
|
||||||
const std::function<float(float)>& distance_to_speed = {},
|
// skipped without it.
|
||||||
// Overlap (1 - distance / flow_width) at or below which the overhang
|
const std::function<float(float)>& distance_to_speed = {})
|
||||||
// fan switches on; negative when the fan does not depend on overlap.
|
|
||||||
float fan_overlap_threshold = -1.0f)
|
|
||||||
{
|
{
|
||||||
bool looped = input_points.front() == input_points.back();
|
bool looped = input_points.front() == input_points.back();
|
||||||
std::function<size_t(size_t,size_t)> get_prev_index = [](size_t idx, size_t count) {
|
std::function<size_t(size_t,size_t)> get_prev_index = [](size_t idx, size_t count) {
|
||||||
@@ -127,43 +125,29 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
|||||||
points.push_back(next_point);
|
points.push_back(next_point);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ORCA: How an overhang distance prints, which is what the passes below compare. A segment is printed at the lower
|
|
||||||
// of the speeds at its two ends, and with the overhang fan on if the overlap at either end turns it on. A point
|
|
||||||
// added to a path can therefore only change the G-code where it prints at a different speed or fan state from the
|
|
||||||
// points either side of it, and the passes below add points there and nowhere else.
|
|
||||||
const float width_inv = 1.f / flow_width;
|
|
||||||
// Whether an overhang distance turns the overhang fan on. The overlap test check_overhang_fan applies in GCode.cpp.
|
|
||||||
auto fan_on = [fan_overlap_threshold, width_inv](float distance) {
|
|
||||||
return fan_overlap_threshold >= 0.f && 1.f - distance * width_inv <= fan_overlap_threshold;
|
|
||||||
};
|
|
||||||
// Whether two overhang distances are interchangeable ie have the same speed (beyond a 1mm/sec threshold that gcode.cpp filters out on)
|
|
||||||
// and the same fan state.
|
|
||||||
auto same_speed_and_fan = [&distance_to_speed, &fan_on](float a, float b) {
|
|
||||||
return std::abs(distance_to_speed(a) - distance_to_speed(b)) <= 1.f && fan_on(a) == fan_on(b);
|
|
||||||
};
|
|
||||||
// Whether the first overhang distance prints slower than the second, beyond the 1mm/sec gcode.cpp tolerance, or turns the overhang
|
|
||||||
// fan on where the second does not. Against a supported point (overhang distance 0) it tells whether an end is
|
|
||||||
// affected by the overhang.
|
|
||||||
auto slower_or_cooled = [&distance_to_speed, &fan_on](float a, float b) {
|
|
||||||
return distance_to_speed(a) < distance_to_speed(b) - 1.f || (fan_on(a) && !fan_on(b));
|
|
||||||
};
|
|
||||||
|
|
||||||
// ORCA: Interior sampling
|
// ORCA: Interior sampling
|
||||||
// The passes below infer the support under a span from its endpoints alone, so a part that is supported
|
// The passes below infer the support under a span from its endpoints alone, so an interior that is supported
|
||||||
// differently from both ends is invisible to them. The outer perimeter of an overhang whose ends are supported by
|
// differently from both ends is invisible to them: the outer perimeter of an overhang whose ends are caged by
|
||||||
// reads as supported along its whole length. Probe the interior, keep the samples the endpoint interpolation fails to predict,
|
// full height walls reads as supported along its whole length. Probe the interior, keep the samples the
|
||||||
// and bisect either side of each one, so a span that is only partly unsupported gets points where its support actually changes
|
// endpoint interpolation fails to predict, and bisect either side of each one, so a span that is only partly
|
||||||
// instead of one reading being spread across all of it.
|
// unsupported gets points where its support actually changes instead of one reading spread across all of it.
|
||||||
// Skipped where there is nothing to find: min_distance <= 0 when no overhang can slow this path down, and
|
if (PREV_LAYER_BOUNDARY_OFFSET && ADD_INTERSECTIONS && min_distance > 0 && distance_to_speed) {
|
||||||
// fan_overlap_threshold < 0 when no overhang switches the fan on. It also needs distance_to_speed to tell which of
|
|
||||||
// the points it could add would change the G-code.
|
|
||||||
if (PREV_LAYER_BOUNDARY_OFFSET && ADD_INTERSECTIONS && distance_to_speed && (min_distance > 0 || fan_overlap_threshold >= 0.f)) {
|
|
||||||
// Probe at least this densely before treating matching samples as evidence that a span is uniform. The
|
// Probe at least this densely before treating matching samples as evidence that a span is uniform. The
|
||||||
// segmentation pass below only splits lines of 2mm or more, and every pass here drops points closer
|
// segmentation pass below only splits lines of 2mm or more, and every pass here drops points closer
|
||||||
// together than min_spacing, so finer discovery would not produce a more precise transition.
|
// together than min_spacing, so finer discovery would not produce a more precise speed transition.
|
||||||
const double max_probe_spacing = std::max(2., 4. * min_spacing);
|
const double max_probe_spacing = std::max(2., 4. * min_spacing);
|
||||||
// A backstop for that length test, which on a non-finite length would never be met.
|
// A backstop for that length test, which on a non-finite length would never be met.
|
||||||
constexpr int max_bisection_depth = 10;
|
constexpr int max_bisection_depth = 10;
|
||||||
|
// Whether two readings are interchangeable. A segment is printed at the lower of the speeds its ends
|
||||||
|
// read, so a sample that agrees on speed with what is already known cannot change the G-code, whatever
|
||||||
|
// its distance says. The distances themselves are far too coarse a stand-in for this: the speed sections
|
||||||
|
// interpolate, so readings a small fraction of min_distance apart can still be tens of mm/s apart.
|
||||||
|
// The tolerance matches the one GCode.cpp applies when it decides a path has a variable speed at all.
|
||||||
|
auto same_speed = [&distance_to_speed](float a, float b) {
|
||||||
|
return std::abs(distance_to_speed(a) - distance_to_speed(b)) <= 1.f;
|
||||||
|
};
|
||||||
|
// Whether the first reading is printed slower than the second, once they are known to differ.
|
||||||
|
auto prints_slower = [&distance_to_speed](float a, float b) { return distance_to_speed(a) < distance_to_speed(b); };
|
||||||
|
|
||||||
// Part of a segment still to bisect: its positions along the segment and bisections left.
|
// Part of a segment still to bisect: its positions along the segment and bisections left.
|
||||||
struct Subspan { double t0, t1; int depth; };
|
struct Subspan { double t0, t1; int depth; };
|
||||||
@@ -201,8 +185,8 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
|||||||
if (!interior.empty()) {
|
if (!interior.empty()) {
|
||||||
std::sort(interior.begin(), interior.end(),
|
std::sort(interior.begin(), interior.end(),
|
||||||
[](const std::pair<double, float>& l, const std::pair<double, float>& r) { return l.first < r.first; });
|
[](const std::pair<double, float>& l, const std::pair<double, float>& r) { return l.first < r.first; });
|
||||||
// Coarse probing keeps every sample it took until this pass can see which ones bracket a speed or
|
// Coarse probing keeps every sample it took until this pass can see which ones bracket a speed
|
||||||
// fan transition. Matching samples cannot be discarded during discovery: one may be the last
|
// transition. Matching samples cannot be discarded during discovery: one may be the last
|
||||||
// supported point before a narrow unsupported pocket found by a later probe.
|
// supported point before a narrow unsupported pocket found by a later probe.
|
||||||
size_t kept = 0;
|
size_t kept = 0;
|
||||||
for (size_t i = 0; i < interior.size(); ++i) {
|
for (size_t i = 0; i < interior.size(); ++i) {
|
||||||
@@ -211,15 +195,15 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
|||||||
const bool at_end = i + 1 == interior.size(); // And nothing follows the last sample but the segment's end
|
const bool at_end = i + 1 == interior.size(); // And nothing follows the last sample but the segment's end
|
||||||
const float before = at_start ? curr.distance : interior[kept - 1].second;
|
const float before = at_start ? curr.distance : interior[kept - 1].second;
|
||||||
const float after = at_end ? next.distance : interior[i + 1].second;
|
const float after = at_end ? next.distance : interior[i + 1].second;
|
||||||
// A sample is worth a point in the path only where it prints differently, in speed or fan state,
|
// A sample is worth a point in the path only where it prints at a different speed from the
|
||||||
// from the points either side of it. Differing from one of the segment's own ends is not enough on
|
// readings either side of it. Differing from one of the segment's own ends is not enough on
|
||||||
// its own where the sample is not the slower or cooled of the two: the segmentation pass below
|
// its own where the sample is the faster of the two: the segmentation pass below already
|
||||||
// already confines the slowdown and cooling at an end, at a distance taken from how far out that
|
// ends the slowdown an end reads, at a distance taken from how far out that end is rather
|
||||||
// end is rather than from wherever bisection happened to stop, and a point here would leave the
|
// than from wherever bisection happened to stop, and a point here would leave the span
|
||||||
// span beside the end too short for that pass to run at all. Support an end cannot account for,
|
// beside the end too short for that pass to run at all. Support an end cannot account for,
|
||||||
// where the interior is the slower or cooled of the two, is exactly what this pass is here to find.
|
// where the interior is the slower reading, is exactly what this pass is here to find.
|
||||||
const bool worth_before = !same_speed_and_fan(sample, before) && (!at_start || slower_or_cooled(sample, before));
|
const bool worth_before = !same_speed(sample, before) && (!at_start || prints_slower(sample, before));
|
||||||
const bool worth_after = !same_speed_and_fan(sample, after) && (!at_end || slower_or_cooled(sample, after));
|
const bool worth_after = !same_speed(sample, after) && (!at_end || prints_slower(sample, after));
|
||||||
if (worth_before || worth_after)
|
if (worth_before || worth_after)
|
||||||
interior[kept++] = interior[i];
|
interior[kept++] = interior[i];
|
||||||
}
|
}
|
||||||
@@ -254,60 +238,52 @@ std::vector<ExtendedPoint<L::Dim>> estimate_points_properties(const POINTS&
|
|||||||
if ((curr.distance > -boundary_offset && curr.distance < boundary_offset + 2.0f) ||
|
if ((curr.distance > -boundary_offset && curr.distance < boundary_offset + 2.0f) ||
|
||||||
(next.distance > -boundary_offset && next.distance < boundary_offset + 2.0f)) {
|
(next.distance > -boundary_offset && next.distance < boundary_offset + 2.0f)) {
|
||||||
double line_len = (next.position - curr.position).norm();
|
double line_len = (next.position - curr.position).norm();
|
||||||
|
|
||||||
// ORCA: A line prints as slow as its slower end and is cooled if either end is, so an overhang at one
|
// ORCA: Segment path to smaller lines by adding additional points only if the path has an overhang that
|
||||||
// end would otherwise slow down or cool the whole line. Split the line so that only the part beside
|
// will trigger a slowdown and the path is also reasonably large, i.e. 2mm in length or more
|
||||||
// that end prints that way, if the line is reasonably long (2mm or more) and at least one end prints
|
// If there is no overhang in the start/end point, dont segment it.
|
||||||
// slower or cooled compared with a supported point (overhang distance 0). Deciding on how the end
|
// Ignore this check if the control of segmentation for overhangs is disabled (min_distance=-1)
|
||||||
// prints, rather than on its overhang distance against min_distance, also catches an end whose overhang
|
if ((min_distance > 0 && ((std::abs(curr.distance) > min_distance) || (std::abs(next.distance) > min_distance)) && line_len >= 2.f) ||
|
||||||
// distance is exactly where the slowdown begins, such as an outline crossing at half a line width.
|
(min_distance <= 0 && line_len > 4.0f)) {
|
||||||
// Without distance_to_speed, split every line over 4mm.
|
|
||||||
const bool split_line = distance_to_speed ?
|
|
||||||
line_len >= 2.f && (slower_or_cooled(curr.distance, 0.f) || slower_or_cooled(next.distance, 0.f)) :
|
|
||||||
line_len > 4.0f;
|
|
||||||
if (split_line) {
|
|
||||||
// Each end's piece is that end's overhang distance plus 1.5 line widths (3 * boundary_offset) long:
|
|
||||||
// a0 ends the piece beside curr, a1 starts the piece beside next.
|
|
||||||
double a0 = std::clamp((curr.distance + 3 * boundary_offset) / line_len, 0.0, 1.0);
|
double a0 = std::clamp((curr.distance + 3 * boundary_offset) / line_len, 0.0, 1.0);
|
||||||
double a1 = std::clamp(1.0f - (next.distance + 3 * boundary_offset) / line_len, 0.0, 1.0);
|
double a1 = std::clamp(1.0f - (next.distance + 3 * boundary_offset) / line_len, 0.0, 1.0);
|
||||||
double t0 = std::min(a0, a1);
|
double t0 = std::min(a0, a1);
|
||||||
double t1 = std::max(a0, a1);
|
double t1 = std::max(a0, a1);
|
||||||
|
|
||||||
// Up to two cut points, in order along the line. Each takes its own overhang distance, so every
|
if (t0 < 1.0) {
|
||||||
// piece prints by the overhang distances at its own two ends. t0 >= 1 or t1 <= 0 falls on the
|
Vec p0 = curr.position + t0 * (next.position - curr.position);
|
||||||
// line's own end, so there is no cut. A cut closer than min_spacing to either end of the line is
|
auto [p0_dist, p0_near_l, p0_x] = unscaled_prev_layer.template distance_from_lines_extra<SIGNED_DISTANCE>(
|
||||||
// not meaningful and is filtered out (#6714).
|
p0.template cast<AABBScalar>());
|
||||||
ExtendedPoint<L::Dim> cut[2]{};
|
ExtendedPoint<L::Dim> new_p{};
|
||||||
bool keep[2] = {false, false};
|
new_p.position = p0;
|
||||||
for (int k = 0; k < 2; ++k) {
|
new_p.distance = float(p0_dist + boundary_offset);
|
||||||
const double t = k == 0 ? t0 : t1;
|
// ORCA: only create a new point in the path if the new point overhang distance will be used to generate a speed change
|
||||||
if (k == 0 ? t >= 1.0 : t <= 0.0)
|
// or if this option is disabled (min_distance<=0)
|
||||||
continue;
|
if( (std::abs(p0_dist) > min_distance) || (min_distance<=0)){
|
||||||
const Vec p = curr.position + t * (next.position - curr.position);
|
// ORCA: also filter out points that are introduced to the start of the path when their distance from the start point is
|
||||||
auto [p_dist, p_near_l, p_x] = unscaled_prev_layer.template distance_from_lines_extra<SIGNED_DISTANCE>(
|
// not meaningful
|
||||||
p.template cast<AABBScalar>());
|
if ((p0 - curr.position).norm() > min_spacing && (next.position - p0).norm() > min_spacing) {
|
||||||
cut[k].position = p;
|
new_points.push_back(new_p);
|
||||||
cut[k].distance = float(p_dist + boundary_offset);
|
}
|
||||||
keep[k] = (p - curr.position).norm() > min_spacing && (next.position - p).norm() > min_spacing;
|
}
|
||||||
}
|
}
|
||||||
if (distance_to_speed) {
|
if (t1 > 0.0) {
|
||||||
// Only keep a cut that changes the G-code: one that prints differently from at least one of the
|
Vec p1 = curr.position + t1 * (next.position - curr.position);
|
||||||
// points either side of it, which are the line's ends or the other cut where that is kept. A cut
|
auto [p1_dist, p1_near_l, p1_x] = unscaled_prev_layer.template distance_from_lines_extra<SIGNED_DISTANCE>(
|
||||||
// that prints like both would only split a move into two identical ones.
|
p1.template cast<AABBScalar>());
|
||||||
if (keep[0])
|
ExtendedPoint<L::Dim> new_p{};
|
||||||
keep[0] = !same_speed_and_fan(cut[0].distance, curr.distance) ||
|
new_p.position = p1;
|
||||||
!same_speed_and_fan(cut[0].distance, keep[1] ? cut[1].distance : next.distance);
|
new_p.distance = float(p1_dist + boundary_offset);
|
||||||
if (keep[1])
|
// ORCA: only create a new point in the path if the new point overhang distance will be used to generate a speed change
|
||||||
keep[1] = !same_speed_and_fan(cut[1].distance, keep[0] ? cut[0].distance : curr.distance) ||
|
// or if this option is disabled (min_distance<=0)
|
||||||
!same_speed_and_fan(cut[1].distance, next.distance);
|
if( (std::abs(p1_dist) > min_distance) || (min_distance<=0)){
|
||||||
// Two cuts closer together than min_spacing would leave a micro segment between them, so only the
|
// ORCA: filter out points that are introduced to the end of the path when their distance from the end point is
|
||||||
// first is kept.
|
// not meaningful
|
||||||
if (keep[0] && keep[1] && (cut[1].position - cut[0].position).norm() <= min_spacing)
|
if ((p1 - curr.position).norm() > min_spacing && (next.position - p1).norm() > min_spacing) {
|
||||||
keep[1] = false;
|
new_points.push_back(new_p);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (int k = 0; k < 2; ++k)
|
|
||||||
if (keep[k])
|
|
||||||
new_points.push_back(cut[k]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new_points.push_back(next);
|
new_points.push_back(next);
|
||||||
@@ -447,10 +423,7 @@ public:
|
|||||||
const ConfigOptionFloatsOrPercents &speeds,
|
const ConfigOptionFloatsOrPercents &speeds,
|
||||||
float ext_perimeter_speed,
|
float ext_perimeter_speed,
|
||||||
float original_speed,
|
float original_speed,
|
||||||
bool slowdown_for_curled_edges,
|
bool slowdown_for_curled_edges)
|
||||||
// Overlap at or below which the overhang fan switches on; negative when the fan
|
|
||||||
// does not depend on overlap.
|
|
||||||
float fan_overlap_threshold = -1.0f)
|
|
||||||
{
|
{
|
||||||
size_t speed_sections_count = std::min(overlaps.values.size(), speeds.values.size());
|
size_t speed_sections_count = std::min(overlaps.values.size(), speeds.values.size());
|
||||||
std::vector<std::pair<float, float>> speed_sections;
|
std::vector<std::pair<float, float>> speed_sections;
|
||||||
@@ -490,8 +463,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no overhang distance slows this path down, -1 turns interior sampling off unless the overhang fan can switch.
|
// If a meaningful (i.e. needing slowdown) overhang distance was not found, then we shouldn't split the lines
|
||||||
// Lines are only split where an end prints slower or cooled, so here only a fan switch splits them.
|
|
||||||
if (!found)
|
if (!found)
|
||||||
smallest_distance_with_lower_speed=-1.f;
|
smallest_distance_with_lower_speed=-1.f;
|
||||||
|
|
||||||
@@ -515,17 +487,9 @@ public:
|
|||||||
return round(final_speed);
|
return round(final_speed);
|
||||||
};
|
};
|
||||||
|
|
||||||
// ORCA: The speed sections are built from ext_perimeter_speed, which can be above the speed this path prints at
|
|
||||||
// (original_speed, e.g. held down by resonance avoidance). Every segment is capped at original_speed below, so
|
|
||||||
// overhang distances whose speeds differ only above it print the same and must not count as a speed change when
|
|
||||||
// the path is split.
|
|
||||||
auto effective_speed = [&calculate_speed, original_speed](float distance) {
|
|
||||||
return std::min(calculate_speed(distance), original_speed);
|
|
||||||
};
|
|
||||||
|
|
||||||
std::vector<ExtendedPoint<3>> extended_points =
|
std::vector<ExtendedPoint<3>> extended_points =
|
||||||
estimate_points_properties<true, true, true, true>(path.polyline.points, prev_layer_boundaries[current_object], path.width, -1,
|
estimate_points_properties<true, true, true, true>(path.polyline.points, prev_layer_boundaries[current_object], path.width, -1,
|
||||||
smallest_distance_with_lower_speed, effective_speed, fan_overlap_threshold);
|
smallest_distance_with_lower_speed, calculate_speed);
|
||||||
const auto width_inv = 1.0f / path.width;
|
const auto width_inv = 1.0f / path.width;
|
||||||
std::vector<ProcessedPoint> processed_points;
|
std::vector<ProcessedPoint> processed_points;
|
||||||
processed_points.reserve(extended_points.size());
|
processed_points.reserve(extended_points.size());
|
||||||
|
|||||||
+50
-32
@@ -974,6 +974,37 @@ void Preset::get_extruder_names_and_keysets(Type type, std::string& extruder_id_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DynamicPrintConfig Preset::load_external_config(Type type, const DynamicPrintConfig &default_config, const DynamicPrintConfig &project_config,
|
||||||
|
const std::set<std::string> &different_settings_list,
|
||||||
|
const std::function<DynamicPrintConfig *(const std::string &inherits)> &find_base,
|
||||||
|
t_config_option_keys *keys)
|
||||||
|
{
|
||||||
|
// Load the preset over a default preset, so that the missing fields are filled in from the default preset.
|
||||||
|
DynamicPrintConfig cfg(default_config);
|
||||||
|
// SoftFever: ignore print connection info from project
|
||||||
|
auto cfg_keys = cfg.keys();
|
||||||
|
cfg_keys.erase(std::remove_if(cfg_keys.begin(), cfg_keys.end(),
|
||||||
|
[](std::string &val) {
|
||||||
|
return val == "print_host" || val == "print_host_webui" || val == "printhost_apikey" ||
|
||||||
|
val == "printhost_cafile" || val == "printhost_user" || val == "printhost_password" || val == "printhost_port";
|
||||||
|
}),
|
||||||
|
cfg_keys.end());
|
||||||
|
cfg.apply_only(project_config, cfg_keys, true);
|
||||||
|
|
||||||
|
//add different settings check logic, replace the old system preset's default value with new system preset's default values
|
||||||
|
if (!different_settings_list.empty()) {
|
||||||
|
if (DynamicPrintConfig *base_config = find_base(Preset::inherits(cfg))) {
|
||||||
|
std::string extruder_id_name, extruder_variant_name;
|
||||||
|
std::set<std::string> *key_set1 = nullptr, *key_set2 = nullptr;
|
||||||
|
Preset::get_extruder_names_and_keysets(type, extruder_id_name, extruder_variant_name, &key_set1, &key_set2);
|
||||||
|
cfg.update_non_diff_values_to_base_config(*base_config, cfg_keys, different_settings_list, extruder_id_name, extruder_variant_name, *key_set1, *key_set2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (keys)
|
||||||
|
*keys = std::move(cfg_keys);
|
||||||
|
return cfg;
|
||||||
|
}
|
||||||
|
|
||||||
bool Preset::has_lidar(PresetBundle *preset_bundle)
|
bool Preset::has_lidar(PresetBundle *preset_bundle)
|
||||||
{
|
{
|
||||||
bool has_lidar = false;
|
bool has_lidar = false;
|
||||||
@@ -2596,20 +2627,6 @@ std::pair<Preset*, bool> PresetCollection::load_external_preset(
|
|||||||
const Semver file_version,
|
const Semver file_version,
|
||||||
const std::string filament_id)
|
const std::string filament_id)
|
||||||
{
|
{
|
||||||
// Load the preset over a default preset, so that the missing fields are filled in from the default preset.
|
|
||||||
DynamicPrintConfig cfg(this->default_preset_for(combined_config).config);
|
|
||||||
// SoftFever: ignore print connection info from project
|
|
||||||
auto keys = cfg.keys();
|
|
||||||
keys.erase(std::remove_if(keys.begin(), keys.end(),
|
|
||||||
[](std::string &val) {
|
|
||||||
return val == "print_host" || val == "print_host_webui" || val == "printhost_apikey" ||
|
|
||||||
val == "printhost_cafile" || val == "printhost_user" || val == "printhost_password" || val == "printhost_port";
|
|
||||||
}),
|
|
||||||
keys.end());
|
|
||||||
cfg.apply_only(combined_config, keys, true);
|
|
||||||
std::string &inherits = Preset::inherits(cfg);
|
|
||||||
|
|
||||||
//add different settings check logic, replace the old system preset's default value with new system preset's default values
|
|
||||||
std::deque<Preset>::iterator it = this->find_preset_internal(original_name);
|
std::deque<Preset>::iterator it = this->find_preset_internal(original_name);
|
||||||
bool found = it != m_presets.end() && it->name == original_name;
|
bool found = it != m_presets.end() && it->name == original_name;
|
||||||
if (! found) {
|
if (! found) {
|
||||||
@@ -2618,24 +2635,25 @@ std::pair<Preset*, bool> PresetCollection::load_external_preset(
|
|||||||
found = it != m_presets.end();
|
found = it != m_presets.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string extruder_id_name, extruder_variant_name;
|
t_config_option_keys keys;
|
||||||
std::set<std::string> *key_set1 = nullptr, *key_set2 = nullptr;
|
DynamicPrintConfig cfg = Preset::load_external_config(m_type, this->default_preset_for(combined_config).config, combined_config, different_settings_list,
|
||||||
Preset::get_extruder_names_and_keysets(m_type, extruder_id_name, extruder_variant_name, &key_set1, &key_set2);
|
[this, &original_name, &path, found, it](const std::string &inherits) -> DynamicPrintConfig * {
|
||||||
|
if (!inherits.empty()) {
|
||||||
if (!inherits.empty() && (different_settings_list.size() > 0)) {
|
auto iter = this->find_preset_internal(inherits);
|
||||||
auto iter = this->find_preset_internal(inherits);
|
if (iter == m_presets.end() || iter->name != inherits)
|
||||||
if (iter == m_presets.end() || iter->name != inherits)
|
iter = this->find_preset_renamed(inherits);
|
||||||
iter = this->find_preset_renamed(inherits);
|
if (iter == m_presets.end())
|
||||||
if (iter != m_presets.end()) {
|
return nullptr;
|
||||||
//std::vector<std::string> dirty_options = cfg.diff(iter->config);
|
BOOST_LOG_TRIVIAL(info) << "load_external_preset" << boost::format(": change preset %1% inherit %2% 's value to %3% 's values")%original_name %inherits %path;
|
||||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": change preset %1% inherit %2% 's value to %3% 's values")%original_name %inherits %path;
|
return &iter->config;
|
||||||
cfg.update_non_diff_values_to_base_config(iter->config, keys, different_settings_list, extruder_id_name, extruder_variant_name, *key_set1, *key_set2);
|
}
|
||||||
}
|
if (found && it->is_system) {
|
||||||
}
|
BOOST_LOG_TRIVIAL(info) << "load_external_preset" << boost::format(": change preset %1% 's value to %2% 's values")%original_name %path;
|
||||||
else if (found && it->is_system && (different_settings_list.size() > 0)) {
|
return &it->config;
|
||||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": change preset %1% 's value to %2% 's values")%original_name %path;
|
}
|
||||||
cfg.update_non_diff_values_to_base_config(it->config, keys, different_settings_list, extruder_id_name, extruder_variant_name, *key_set1, *key_set2);
|
return nullptr;
|
||||||
}
|
}, &keys);
|
||||||
|
std::string &inherits = Preset::inherits(cfg);
|
||||||
|
|
||||||
//BBS: add config related logs
|
//BBS: add config related logs
|
||||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, type %1% , path %2%, name %3%, original_name %4%, inherits %5%")%Preset::get_type_string(m_type) %path %name %original_name %inherits;
|
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, type %1% , path %2%, name %3%, original_name %4%, inherits %5%")%Preset::get_type_string(m_type) %path %name %original_name %inherits;
|
||||||
|
|||||||
@@ -403,6 +403,15 @@ public:
|
|||||||
std::string get_current_printer_type(PresetBundle *preset_bundle); // get current preset type
|
std::string get_current_printer_type(PresetBundle *preset_bundle); // get current preset type
|
||||||
|
|
||||||
static void get_extruder_names_and_keysets(Type type, std::string& extruder_id_name, std::string& extruder_variant_name, std::set<std::string>** p_key_set1, std::set<std::string>** p_key_set2);
|
static void get_extruder_names_and_keysets(Type type, std::string& extruder_id_name, std::string& extruder_variant_name, std::set<std::string>** p_key_set1, std::set<std::string>** p_key_set2);
|
||||||
|
// Config of a preset loaded from a project or config file: the project's values over the type's
|
||||||
|
// default preset config, without the print-host keys. When different_settings_list is not empty,
|
||||||
|
// every key not listed in it is then refreshed from the base system preset, which find_base returns
|
||||||
|
// for the project's "inherits" (nullptr when there is none), with the listed per-variant values
|
||||||
|
// mapped onto the base's extruder variants. keys, if given, receives the keys taken from the project.
|
||||||
|
static DynamicPrintConfig load_external_config(Type type, const DynamicPrintConfig &default_config, const DynamicPrintConfig &project_config,
|
||||||
|
const std::set<std::string> &different_settings_list,
|
||||||
|
const std::function<DynamicPrintConfig *(const std::string &inherits)> &find_base,
|
||||||
|
t_config_option_keys *keys = nullptr);
|
||||||
std::string get_printer_id() const { return vendor ? vendor->id : ""; }
|
std::string get_printer_id() const { return vendor ? vendor->id : ""; }
|
||||||
|
|
||||||
bool has_lidar(PresetBundle *preset_bundle);
|
bool has_lidar(PresetBundle *preset_bundle);
|
||||||
|
|||||||
@@ -575,18 +575,20 @@ bool PresetBundle::resolve_preset_config(DynamicPrintConfig &config, Preset::Typ
|
|||||||
const PresetBundle *PresetBundle::load_source_vendor(const boost::filesystem::path &root_dir,
|
const PresetBundle *PresetBundle::load_source_vendor(const boost::filesystem::path &root_dir,
|
||||||
const std::string &vendor_id,
|
const std::string &vendor_id,
|
||||||
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
||||||
std::string &error)
|
std::string &error, bool allow_cache)
|
||||||
{
|
{
|
||||||
auto key = std::make_tuple(root_dir.string(), vendor_id, compatibility_rule);
|
auto key = std::make_tuple(root_dir.string(), vendor_id, compatibility_rule, allow_cache);
|
||||||
if (auto it = m_source_vendor_bundles.find(key); it != m_source_vendor_bundles.end())
|
if (auto it = m_source_vendor_bundles.find(key); it != m_source_vendor_bundles.end())
|
||||||
return it->second.get();
|
return it->second.get();
|
||||||
|
|
||||||
// The library loads with no base of its own, so the tree a vendor inherits from
|
// The library loads with no base of its own, so the tree a vendor inherits from
|
||||||
// is the same one that resolves the library's own presets.
|
// is the same one that resolves the library's own presets.
|
||||||
const PresetBundle *library = nullptr;
|
const std::string library_file = std::string(ORCA_FILAMENT_LIBRARY);
|
||||||
|
const PresetBundle *library = nullptr;
|
||||||
if (vendor_id != ORCA_FILAMENT_LIBRARY &&
|
if (vendor_id != ORCA_FILAMENT_LIBRARY &&
|
||||||
boost::filesystem::is_regular_file(root_dir / (std::string(ORCA_FILAMENT_LIBRARY) + ".json"))) {
|
(boost::filesystem::is_regular_file(root_dir / (library_file + ".json")) ||
|
||||||
library = load_source_vendor(root_dir, ORCA_FILAMENT_LIBRARY, compatibility_rule, error);
|
(allow_cache && boost::filesystem::is_regular_file(root_dir / (library_file + ".opc"))))) {
|
||||||
|
library = load_source_vendor(root_dir, ORCA_FILAMENT_LIBRARY, compatibility_rule, error, allow_cache);
|
||||||
if (library == nullptr) {
|
if (library == nullptr) {
|
||||||
error = "OrcaFilamentLibrary contains invalid presets";
|
error = "OrcaFilamentLibrary contains invalid presets";
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -595,7 +597,7 @@ const PresetBundle *PresetBundle::load_source_vendor(const boost::filesystem::pa
|
|||||||
|
|
||||||
auto bundle = std::make_unique<PresetBundle>();
|
auto bundle = std::make_unique<PresetBundle>();
|
||||||
bundle->m_preserve_vendor_source_paths = true;
|
bundle->m_preserve_vendor_source_paths = true;
|
||||||
bundle->load_vendor_configs_from_json(root_dir.string(), vendor_id, LoadSystem, compatibility_rule, library, false);
|
bundle->load_vendor_configs_from_json(root_dir.string(), vendor_id, LoadSystem, compatibility_rule, library, allow_cache);
|
||||||
if (bundle->error_count() != 0) {
|
if (bundle->error_count() != 0) {
|
||||||
error = "Vendor bundle contains invalid presets";
|
error = "Vendor bundle contains invalid presets";
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -638,6 +640,43 @@ bool PresetBundle::resolve_preset_config_type(DynamicPrintConfig &config, Preset
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PresetBundle::resolve_system_preset(DynamicPrintConfig &config, Preset::Type type, const std::string &name,
|
||||||
|
ForwardCompatibilitySubstitutionRule compatibility_rule, std::string &error)
|
||||||
|
{
|
||||||
|
const std::string vendor_id = find_preset_vendor(name, type);
|
||||||
|
if (vendor_id.empty()) {
|
||||||
|
error = "No vendor lists the preset";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// Release builds ship a vendor as its preset cache alone, without the profile JSONs.
|
||||||
|
auto installed = [&vendor_id](const fs::path &root) {
|
||||||
|
return fs::is_regular_file(root / (vendor_id + ".json")) || fs::is_regular_file(root / (vendor_id + ".opc"));
|
||||||
|
};
|
||||||
|
fs::path root_dir = fs::path(data_dir()) / PRESET_SYSTEM_DIR;
|
||||||
|
if (!installed(root_dir))
|
||||||
|
root_dir = fs::path(resources_dir()) / PRESET_PROFILES_DIR;
|
||||||
|
const bool cache_only = !fs::is_regular_file(root_dir / (vendor_id + ".json"));
|
||||||
|
|
||||||
|
try {
|
||||||
|
const PresetBundle *vendor = load_source_vendor(root_dir, vendor_id, compatibility_rule, error, cache_only);
|
||||||
|
if (vendor == nullptr)
|
||||||
|
return false;
|
||||||
|
const PresetCollection &collection = type == Preset::TYPE_PRINTER ? vendor->printers :
|
||||||
|
type == Preset::TYPE_PRINT ? vendor->prints : vendor->filaments;
|
||||||
|
const Preset *preset = collection.find_preset(name, false);
|
||||||
|
if (preset == nullptr) {
|
||||||
|
error = "Preset was not found in its vendor bundle";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
config = preset->config;
|
||||||
|
} catch (const std::exception &ex) {
|
||||||
|
error = ex.what();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
error.clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
PresetBundle::PresetBundle(const PresetBundle &rhs)
|
PresetBundle::PresetBundle(const PresetBundle &rhs)
|
||||||
{
|
{
|
||||||
*this = rhs;
|
*this = rhs;
|
||||||
@@ -4574,6 +4613,15 @@ const std::set<std::string> ignore_settings_list ={
|
|||||||
"print_settings_id", "filament_settings_id", "printer_settings_id"
|
"print_settings_id", "filament_settings_id", "printer_settings_id"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
std::set<std::string> PresetBundle::project_different_keys(const std::string &different_settings)
|
||||||
|
{
|
||||||
|
std::vector<std::string> keys;
|
||||||
|
Slic3r::unescape_strings_cstyle(different_settings, keys);
|
||||||
|
std::set<std::string> keys_set(keys.begin(), keys.end());
|
||||||
|
keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end());
|
||||||
|
return keys_set;
|
||||||
|
}
|
||||||
|
|
||||||
DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optional<std::vector<int>> filament_maps_new, std::optional<std::vector<int>> filament_volume_maps_new) const
|
DynamicPrintConfig PresetBundle::full_fff_config(bool apply_extruder, std::optional<std::vector<int>> filament_maps_new, std::optional<std::vector<int>> filament_volume_maps_new) const
|
||||||
{
|
{
|
||||||
DynamicPrintConfig out;
|
DynamicPrintConfig out;
|
||||||
@@ -5279,15 +5327,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
|
|||||||
if (!is_published) {
|
if (!is_published) {
|
||||||
//BBS: add different settings logic
|
//BBS: add different settings logic
|
||||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load print preset from print_settings_id");
|
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load print preset from print_settings_id");
|
||||||
std::vector<std::string> print_different_keys_vector;
|
std::set<std::string> print_different_keys_set = project_different_keys(different_values[0]);
|
||||||
std::string print_different_settings = different_values[0];
|
|
||||||
Slic3r::unescape_strings_cstyle(print_different_settings, print_different_keys_vector);
|
|
||||||
std::set<std::string> print_different_keys_set(print_different_keys_vector.begin(), print_different_keys_vector.end());
|
|
||||||
//if (!has_different_settings_to_system) {
|
|
||||||
// print_different_keys_set.clear();
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
print_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end());
|
|
||||||
if (!print_compatible_printers.empty()) {
|
if (!print_compatible_printers.empty()) {
|
||||||
ConfigOptionStrings* compatible_printers = config.option<ConfigOptionStrings>("compatible_printers", true);
|
ConfigOptionStrings* compatible_printers = config.option<ConfigOptionStrings>("compatible_printers", true);
|
||||||
compatible_printers->values = print_compatible_printers;
|
compatible_printers->values = print_compatible_printers;
|
||||||
@@ -5298,15 +5338,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
|
|||||||
//clear compatible printers
|
//clear compatible printers
|
||||||
clear_compatible_printers(config);
|
clear_compatible_printers(config);
|
||||||
|
|
||||||
std::vector<std::string> printer_different_keys_vector;
|
std::set<std::string> printer_different_keys_set = project_different_keys(different_values[num_filaments + 1]);
|
||||||
std::string printer_different_settings = different_values[num_filaments + 1];
|
|
||||||
Slic3r::unescape_strings_cstyle(printer_different_settings, printer_different_keys_vector);
|
|
||||||
std::set<std::string> printer_different_keys_set(printer_different_keys_vector.begin(), printer_different_keys_vector.end());
|
|
||||||
//if (!has_different_settings_to_system) {
|
|
||||||
// printer_different_keys_set.clear();
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
printer_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end());
|
|
||||||
//BBS: add config related logs
|
//BBS: add config related logs
|
||||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load printer preset from printer_settings_id");
|
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load printer preset from printer_settings_id");
|
||||||
load_preset(this->printers, num_filaments + 1, "printer_settings_id", printer_different_keys_set, std::string());
|
load_preset(this->printers, num_filaments + 1, "printer_settings_id", printer_different_keys_set, std::string());
|
||||||
@@ -5325,15 +5357,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
|
|||||||
Preset *loaded = nullptr;
|
Preset *loaded = nullptr;
|
||||||
|
|
||||||
//BBS: add different settings logic
|
//BBS: add different settings logic
|
||||||
std::vector<std::string> filament_different_keys_vector;
|
std::set<std::string> filament_different_keys_set = project_different_keys(different_values[1]);
|
||||||
std::string filament_different_settings = different_values[1];
|
|
||||||
Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector);
|
|
||||||
std::set<std::string> filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end());
|
|
||||||
//if (!has_different_settings_to_system) {
|
|
||||||
// filament_different_keys_set.clear();
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end());
|
|
||||||
|
|
||||||
std::string filament_id = filament_ids[0];
|
std::string filament_id = filament_ids[0];
|
||||||
//BBS: add config related logs
|
//BBS: add config related logs
|
||||||
@@ -5396,15 +5420,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool
|
|||||||
cfg.opt_string("inherits", true) = inherits_values[i + 1];
|
cfg.opt_string("inherits", true) = inherits_values[i + 1];
|
||||||
|
|
||||||
//BBS: add different settings logic
|
//BBS: add different settings logic
|
||||||
std::vector<std::string> filament_different_keys_vector;
|
std::set<std::string> filament_different_keys_set = project_different_keys(different_values[i+1]);
|
||||||
std::string filament_different_settings = different_values[i+1];
|
|
||||||
Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector);
|
|
||||||
std::set<std::string> filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end());
|
|
||||||
//if (!has_different_settings_to_system) {
|
|
||||||
// filament_different_keys_set.clear();
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end());
|
|
||||||
|
|
||||||
std::string filament_id = filament_ids[i];
|
std::string filament_id = filament_ids[i];
|
||||||
|
|
||||||
|
|||||||
@@ -234,6 +234,9 @@ public:
|
|||||||
|
|
||||||
// ORCA: utility function to find the vendor for a given preset name
|
// ORCA: utility function to find the vendor for a given preset name
|
||||||
static std::string find_preset_vendor(const std::string& preset_name, Preset::Type type);
|
static std::string find_preset_vendor(const std::string& preset_name, Preset::Type type);
|
||||||
|
// Keys a project keeps when its presets are loaded: those listed in its escaped
|
||||||
|
// "different_settings_to_system" entry for the preset, plus the preset bookkeeping keys.
|
||||||
|
static std::set<std::string> project_different_keys(const std::string &different_settings);
|
||||||
|
|
||||||
PresetBundle();
|
PresetBundle();
|
||||||
PresetBundle(const PresetBundle &rhs);
|
PresetBundle(const PresetBundle &rhs);
|
||||||
@@ -273,6 +276,10 @@ public:
|
|||||||
const std::string &source_file,
|
const std::string &source_file,
|
||||||
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
||||||
std::string &error, bool allow_source_manifest = true);
|
std::string &error, bool allow_source_manifest = true);
|
||||||
|
// Resolve a system preset by name. The vendor tree is read from data_dir()/system when installed
|
||||||
|
// there, as the GUI reads it, and from the bundled profiles otherwise.
|
||||||
|
bool resolve_system_preset(DynamicPrintConfig &config, Preset::Type type, const std::string &name,
|
||||||
|
ForwardCompatibilitySubstitutionRule compatibility_rule, std::string &error);
|
||||||
|
|
||||||
// Load selections (current print, current filaments, current printer) from config.ini
|
// Load selections (current print, current filaments, current printer) from config.ini
|
||||||
// This is done just once on application start up.
|
// This is done just once on application start up.
|
||||||
@@ -663,13 +670,14 @@ private:
|
|||||||
// Vendor trees loaded by resolve_preset_config's manifest path, so every preset
|
// Vendor trees loaded by resolve_preset_config's manifest path, so every preset
|
||||||
// resolved through this bundle shares one load per source root and vendor. The
|
// resolved through this bundle shares one load per source root and vendor. The
|
||||||
// filament library is one such tree, shared by every vendor under its root.
|
// filament library is one such tree, shared by every vendor under its root.
|
||||||
std::map<std::tuple<std::string, std::string, ForwardCompatibilitySubstitutionRule>, std::unique_ptr<PresetBundle>>
|
// A tree read from its preset cache is kept apart: its presets carry no source file.
|
||||||
|
std::map<std::tuple<std::string, std::string, ForwardCompatibilitySubstitutionRule, bool>, std::unique_ptr<PresetBundle>>
|
||||||
m_source_vendor_bundles;
|
m_source_vendor_bundles;
|
||||||
|
|
||||||
const PresetBundle *load_source_vendor(const boost::filesystem::path &root_dir,
|
const PresetBundle *load_source_vendor(const boost::filesystem::path &root_dir,
|
||||||
const std::string &vendor_id,
|
const std::string &vendor_id,
|
||||||
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
||||||
std::string &error);
|
std::string &error, bool allow_cache = false);
|
||||||
|
|
||||||
// Orca: validation only - flag any printer with two or more compatible
|
// Orca: validation only - flag any printer with two or more compatible
|
||||||
// filament presets sharing one filament_id (ambiguous AMS subtype match).
|
// filament presets sharing one filament_id (ambiguous AMS subtype match).
|
||||||
|
|||||||
@@ -4862,13 +4862,13 @@ void DesignPanel::on_import_mesh()
|
|||||||
try {
|
try {
|
||||||
shape = GeometryEngine::mesh_to_brep(mesh.its, MESH_IMPORT_TOLERANCE,
|
shape = GeometryEngine::mesh_to_brep(mesh.its, MESH_IMPORT_TOLERANCE,
|
||||||
MESH_IMPORT_MERGE_ANGLE_DEG, stats);
|
MESH_IMPORT_MERGE_ANGLE_DEG, stats);
|
||||||
} catch (const Standard_Failure& e) { // on OCCT >= 8 Standard_Failure derives from std::exception — must precede that handler
|
|
||||||
fail(_L("Mesh conversion failed: ") + wxString::FromUTF8(
|
|
||||||
e.GetMessageString() ? e.GetMessageString() : "OCCT error"));
|
|
||||||
return;
|
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
fail(_L("Mesh conversion failed: ") + wxString::FromUTF8(e.what()));
|
fail(_L("Mesh conversion failed: ") + wxString::FromUTF8(e.what()));
|
||||||
return;
|
return;
|
||||||
|
} catch (const Standard_Failure& e) { // OCCT throws outside std::exception
|
||||||
|
fail(_L("Mesh conversion failed: ") + wxString::FromUTF8(
|
||||||
|
e.GetMessageString() ? e.GetMessageString() : "OCCT error"));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (shape.IsNull()) { fail(_L("Mesh conversion produced no geometry")); return; }
|
if (shape.IsNull()) { fail(_L("Mesh conversion produced no geometry")); return; }
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user