mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-15 03:41:28 +00:00
Merge main
This commit is contained in:
+22
-3
@@ -8,7 +8,7 @@ SCRIPT_PATH=$(dirname "$(readlink -f "${0}")")
|
||||
pushd "${SCRIPT_PATH}" > /dev/null
|
||||
|
||||
function usage() {
|
||||
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-D][-e][-F][-g][-h][-i][-j N][-J N][-p][-r][-s][-t][-u][-l][-L]"
|
||||
echo "Usage: ./${SCRIPT_NAME} [-1][-b][-c][-d][-D][-e][-F][-g][-h][-i][-j N][-J N][-p][-r][-s][-t][-u][-l][-L] [-- CMAKE_ARGS...]"
|
||||
echo " -1: limit builds to one core (where possible)"
|
||||
echo " -j N: limit builds to N cores (where possible)"
|
||||
echo " -J N: build up to N dependencies at a time, each still using -j jobs (default: 1)"
|
||||
@@ -29,11 +29,15 @@ function usage() {
|
||||
echo " -u: install system dependencies (asks for sudo password; build prerequisite)"
|
||||
echo " -l: use Clang instead of GCC (default: GCC)"
|
||||
echo " -L: use ld.lld as linker (if available)"
|
||||
echo " -- CMAKE_ARGS...: pass everything after '--' to the cmake configure step of the deps (-d) and OrcaSlicer (-s/-t) builds,"
|
||||
echo " e.g. -DCMAKE_CXX_FLAGS=\"-O2 -march=native\", -DCMAKE_CXX_COMPILER=g++-14, -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=mold."
|
||||
echo " They come last on the cmake command line, so they override what -l and -L set."
|
||||
echo "For a first use, you want to './${SCRIPT_NAME} -u'"
|
||||
echo " and then './${SCRIPT_NAME} -dsi'"
|
||||
echo "For a GitHub Actions-like Linux build locally, use './${SCRIPT_NAME} -g -istrlL'"
|
||||
echo "Use './${SCRIPT_NAME} -gF -istrlL' to rebuild the cached runner image first."
|
||||
echo "Set ORCA_CONTAINER_CLI, ORCA_DOCKER_IMAGE, ORCA_DOCKER_BASE_IMAGE, or ORCA_DOCKER_CMAKE_VERSION to override the container runtime, cached image tag, base image, or CMake version."
|
||||
echo "DEPS_EXTRA_BUILD_ARGS and ORCA_EXTRA_BUILD_ARGS add whitespace-separated cmake configure arguments to the deps and OrcaSlicer builds; prefer '--' for arguments that contain spaces."
|
||||
}
|
||||
|
||||
SLIC3R_PRECOMPILED_HEADERS="ON"
|
||||
@@ -131,6 +135,20 @@ while getopts ":1j:J:bcCdDeFghiprstulL" opt ; do
|
||||
esac
|
||||
done
|
||||
|
||||
# getopts stops at '--'; whatever follows is handed to cmake unchanged.
|
||||
if [[ ${OPTIND} -le $# ]] ; then
|
||||
separator_index=$((OPTIND-1))
|
||||
if [[ "${!separator_index}" != "--" ]] ; then
|
||||
echo "Unexpected argument '${!OPTIND}': cmake arguments must follow '--', aborting."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
shift $((OPTIND-1))
|
||||
EXTRA_CMAKE_ARGS=("$@")
|
||||
if [[ ${#EXTRA_CMAKE_ARGS[@]} -gt 0 ]] ; then
|
||||
FORWARDED_ARGS+=("--" "${EXTRA_CMAKE_ARGS[@]}")
|
||||
fi
|
||||
|
||||
if [ ${OPTIND} -eq 1 ] ; then
|
||||
usage
|
||||
exit 1
|
||||
@@ -547,7 +565,7 @@ if [[ -n "${BUILD_DEPS}" ]] ; then
|
||||
BUILD_ARGS+=(-DCMAKE_BUILD_TYPE="${BUILD_CONFIG}")
|
||||
fi
|
||||
|
||||
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}"
|
||||
print_and_run cmake -S deps -B deps/$BUILD_DIR "${CMAKE_C_CXX_COMPILER_CLANG[@]}" "${CMAKE_LLD_LINKER_ARGS[@]}" "${CMAKE_CCACHE_ARGS[@]}" -G Ninja "${COLORED_OUTPUT}" "${BUILD_ARGS[@]}" "${EXTRA_CMAKE_ARGS[@]}"
|
||||
# The top-level build runs one dependency at a time by default, which keeps the console
|
||||
# output readable and lets that dependency's own build use all of CMAKE_BUILD_PARALLEL_LEVEL.
|
||||
# -J raises the top level instead, and -j still applies in full to every dependency, so the
|
||||
@@ -593,7 +611,8 @@ if [[ -n "${BUILD_ORCA}" ]] || [[ -n "${BUILD_TESTS}" ]] ; then
|
||||
-DSLIC3R_PCH=${SLIC3R_PRECOMPILED_HEADERS} \
|
||||
-DORCA_TOOLS=ON \
|
||||
"${COLORED_OUTPUT}" \
|
||||
"${BUILD_ARGS[@]}"
|
||||
"${BUILD_ARGS[@]}" \
|
||||
"${EXTRA_CMAKE_ARGS[@]}"
|
||||
echo "done"
|
||||
if [[ -n "${BUILD_ORCA}" ]]; then
|
||||
echo "Building OrcaSlicer ..."
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"name": "Goofoo",
|
||||
"version": "02.04.00.01",
|
||||
"force_update": "0",
|
||||
"description": "Goofoo configurations",
|
||||
"machine_model_list": [
|
||||
{
|
||||
"name": "Goofoo GP1",
|
||||
"sub_path": "machine/Goofoo GP1.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo TurboM",
|
||||
"sub_path": "machine/Goofoo TurboM.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo Velo+",
|
||||
"sub_path": "machine/Goofoo Velo+.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo Velo+ Tool",
|
||||
"sub_path": "machine/Goofoo Velo+ Tool.json"
|
||||
}
|
||||
],
|
||||
"process_list": [
|
||||
{
|
||||
"name": "fdm_process_common",
|
||||
"sub_path": "process/fdm_process_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_process_klipper_common",
|
||||
"sub_path": "process/fdm_process_klipper_common.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Goofoo GP1",
|
||||
"sub_path": "process/0.20mm Standard @Goofoo GP1.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Goofoo TurboM",
|
||||
"sub_path": "process/0.20mm Standard @Goofoo TurboM.json"
|
||||
},
|
||||
{
|
||||
"name": "0.20mm Standard @Goofoo Velo+",
|
||||
"sub_path": "process/0.20mm Standard @Goofoo Velo+.json"
|
||||
},
|
||||
{
|
||||
"name": "0.30mm Standard @Goofoo Velo+",
|
||||
"sub_path": "process/0.30mm Standard @Goofoo Velo+.json"
|
||||
},
|
||||
{
|
||||
"name": "0.10mm Standard @Goofoo Velo+",
|
||||
"sub_path": "process/0.10mm Standard @Goofoo Velo+.json"
|
||||
}
|
||||
],
|
||||
"filament_list": [],
|
||||
"machine_list": [
|
||||
{
|
||||
"name": "fdm_machine_common",
|
||||
"sub_path": "machine/fdm_machine_common.json"
|
||||
},
|
||||
{
|
||||
"name": "fdm_klipper_common",
|
||||
"sub_path": "machine/fdm_klipper_common.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo GP1 0.4 nozzle",
|
||||
"sub_path": "machine/Goofoo GP1 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo TurboM 0.4 nozzle",
|
||||
"sub_path": "machine/Goofoo TurboM 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo Velo+ 0.2 nozzle",
|
||||
"sub_path": "machine/Goofoo Velo+ 0.2 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo Velo+ 0.4 nozzle",
|
||||
"sub_path": "machine/Goofoo Velo+ 0.4 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo Velo+ 0.6 nozzle",
|
||||
"sub_path": "machine/Goofoo Velo+ 0.6 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo Velo+ Tool 0.4",
|
||||
"sub_path": "machine/Goofoo Velo+ Tool 0.4.json"
|
||||
}
|
||||
]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="256" height="256" viewBox="0 0 256 256">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<text fill="#0000ff" x="31.38885" y="400.22266" id="svg_1" font-size="24" font-family="Noto Sans JP" text-anchor="start" xml:space="preserve" stroke="#0000ff" transform="matrix(2.19884 0 0 1.66297 -63.896 -416.238)">GP1</text>
|
||||
</g>
|
||||
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 373 B |
Binary file not shown.
@@ -0,0 +1,7 @@
|
||||
<svg width="600" height="480" xmlns="http://www.w3.org/2000/svg">
|
||||
|
||||
<g>
|
||||
<title>Layer 1</title>
|
||||
<text transform="matrix(2.3401 0 0 1.462 -92.4668 -168.496)" stroke="#000" stroke-width="3" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_1" y="421.25588" x="52.33404" fill="#000000">TurboM</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 353 B |
Binary file not shown.
@@ -0,0 +1,6 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="480" viewBox="0 0 600 480">
|
||||
<g id="Layer_1">
|
||||
<title>Layer 1</title>
|
||||
<text transform="matrix(2.19884 0 0 1.66297 -203.896 -238.238)" stroke="#0000ff" xml:space="preserve" text-anchor="start" font-family="Noto Sans JP" font-size="24" id="svg_1" y="400.22266" x="120.07198" fill="#0000ff">VELO+</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 376 B |
Binary file not shown.
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Goofoo GP1 0.4 nozzle",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "x4GJ08PooNDQ8WJj",
|
||||
"instantiation": "true",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"default_filament_profile": [
|
||||
"Goofoo ABS @System"
|
||||
],
|
||||
"printer_model": "Goofoo GP1",
|
||||
"default_print_profile": "0.20mm Standard @Goofoo GP1",
|
||||
"printer_variant": "0.4",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\n;G92 E0",
|
||||
"change_filament_gcode": "G5",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\n;layer\n;{if layer_num == 2}\n;M106 P1 S255\n;{endif}\nSET_PRINT_STATS_INFO CURRENT_LAYER=[layer_num]\n",
|
||||
"machine_end_gcode": "; End G-code\nEND_PRINT",
|
||||
"machine_pause_gcode": "G5",
|
||||
"machine_start_gcode": "M117 Printing...\nM107 ; Turn off the fan\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nM104 S140\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n;G32 ;Load bed mesh\nG28 ;home\nG29 bed leveling\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG0 Z2.0 F600;\nG0 X50 Y10 F8000;\nG92 E0.0 ; reset extruder distance position\nG0 Z0.4 F600;\nG1 X100.0 E10 F3000.0 ; intro line\nG92 E0.0 ; reset extruder distance position\nG1 X200.0 E15 F3000.0 ; intro line\nG92 E0.0 ; reset extruder distance position\nG0 Z0.8 F600;\nG1 X100.0 E15 F3000.0 ; intro line\nG1 Z0.4 F600 ;Wipe\nG0 Y12 F6000 ;Wipe\nG1 X100 F6000 ;Wipe\nG0 Y8 F12000 ;Wipe\nG1 X200 F6000 ;Wipe\nG1 X190 Y12 F6000 ;Wipe\nG1 X180 Y8 F6000 ;Wipe\nG1 X170 Y12 F6000 ;Wipe\nG1 X160 Y8 F6000 ;Wipe\nG1 X150 Y12 F6000 ;Wipe\n;G0 Z2.0 F600;\nG92 E0.0 ; reset extruder distance position\n;START_PRINT",
|
||||
"purge_in_prime_tower": "0",
|
||||
"time_lapse_gcode": ";TIMELAPSE_TAKE_FRAME",
|
||||
"printable_height": "250",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"250x0",
|
||||
"250x250",
|
||||
"0x250"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"0"
|
||||
],
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_radius": "65",
|
||||
"machine_max_acceleration_e": [
|
||||
"20000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"15000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"200"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"1",
|
||||
"2.5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"25",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"12",
|
||||
"12"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"100%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"10"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"50"
|
||||
],
|
||||
"thumbnails": "300x300/PNG",
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"upward_compatible_machine": []
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Goofoo GP1",
|
||||
"nozzle_diameter": "0.4",
|
||||
"bed_model": "Goofoo-GP1.stl",
|
||||
"bed_texture": "Goofoo-GP1-texture.svg",
|
||||
"family": "Goofoo",
|
||||
"machine_tech": "FFF",
|
||||
"model_id": "V003",
|
||||
"default_materials": "Goofoo ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Goofoo TurboM 0.4 nozzle",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "Wmdn5zTy1HH93Q5d",
|
||||
"instantiation": "true",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"nozzle_type": "brass",
|
||||
"printer_model": "Goofoo TurboM",
|
||||
"printer_variant": "0.4",
|
||||
"default_filament_profile": [
|
||||
"Goofoo ABS @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @Goofoo TurboM",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"230x0",
|
||||
"230x200",
|
||||
"0x200"
|
||||
],
|
||||
"extruder_clearance_height_to_lid": "350",
|
||||
"extruder_clearance_height_to_rod": "60",
|
||||
"extruder_clearance_radius": "50",
|
||||
"machine_end_gcode": "M104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nG92 E0.0 ; reset extruder distance position;\nG1 E-1 F2100 ; retract\nG28 X Y; home X Y axis\n;M84 ; disable motors\nM107 ; turn off fan\n;SET_VELOCITY_LIMIT ACCEL_TO_DECEL=4000",
|
||||
"machine_max_jerk_z": [
|
||||
"3",
|
||||
"0.4"
|
||||
],
|
||||
"machine_start_gcode": "M107 ; Turn off the fan\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\n\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG28 ;home\n\nG1 X2 Y10 F3000;\n\nM104 S[first_layer_temperature] ; set extruder temp\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG1 Z0.28 F240\n\nG92 E0\n\nG1 Y140 E10 F1500 ; prime the nozzle\n\nG1 X2.3 F5000\nG92 E0\n\nG1 Y10 E10 F1200 ; prime the nozzle\n;G0 Z2.0 F600;\nG92 E0.0 ; reset extruder distance position;\nM82\n;SET_PRESSURE_ADVANCE ADVANCE=0.05\n;SET_VELOCITY_LIMIT ACCEL_TO_DECEL=10000\n",
|
||||
"printable_height": "200",
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"25",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"12",
|
||||
"12"
|
||||
],
|
||||
"upward_compatible_machine": []
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Goofoo TurboM",
|
||||
"nozzle_diameter": "0.4",
|
||||
"bed_model": "Goofoo-TurboM.stl",
|
||||
"bed_texture": "Goofoo-TurboM-texture.svg",
|
||||
"family": "Goofoo",
|
||||
"machine_tech": "FFF",
|
||||
"model_id": "V002",
|
||||
"default_materials": "Goofoo ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Goofoo Velo+ 0.2 nozzle",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "wSr6VNECZHekeNRi",
|
||||
"instantiation": "true",
|
||||
"nozzle_diameter": [
|
||||
"0.2"
|
||||
],
|
||||
"nozzle_type": "hardened_steel",
|
||||
"printer_model": "Goofoo Velo+",
|
||||
"printer_variant": "0.2",
|
||||
"default_filament_profile": [
|
||||
"Goofoo ABS @System"
|
||||
],
|
||||
"default_print_profile": "0.10mm Standard @Goofoo Velo+",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"600x0",
|
||||
"600x500",
|
||||
"0x500"
|
||||
],
|
||||
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
|
||||
"printable_height": "600",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0",
|
||||
"change_filament_gcode": "PAUSE",
|
||||
"deretraction_speed": [
|
||||
"0"
|
||||
],
|
||||
"extruder_clearance_height_to_lid": "350",
|
||||
"extruder_clearance_height_to_rod": "60",
|
||||
"extruder_clearance_radius": "50",
|
||||
"machine_max_acceleration_e": [
|
||||
"20000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"15000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"200"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"1",
|
||||
"2.5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"50",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"730",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"730",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"15",
|
||||
"12"
|
||||
],
|
||||
"machine_start_gcode": "G90 ; 绝对坐标模式\nM83 ; 挤出机相对模式\nM140 S[first_layer_bed_temperature] ; 设置热床温度\nM104 S140 ; 临时喷嘴温度=切片首层设定(防止归零渗料)\nG4 S10 ; 预热等待10秒\nG28 ; 归零所有轴\nG1 Z50 F240 ; Z轴抬升\nG1 X2 Y10 F3000 ; 移动至起始位置\nM104 S[nozzle_temperature_initial_layer] ; 正式设置喷嘴温度(与切片设置一致)\nM190 S[bed_temperature_initial_layer_single] ; 等待热床温度稳定\nM109 S[nozzle_temperature_initial_layer] ; 等待喷嘴温度稳定\nG1 Z0.28 F240 ; 喷嘴下降至打印高度\nG92 E0 ; 挤出机归零\nG1 Y140 E10 F1500 ; 画第一条 priming 线\nG1 X2.3 F5000 ; X轴微调\nG92 E0 ; 挤出机归零\nG1 Y10 E10 F1200 ; 画第二条 priming 线\nG92 E0 ; 最终挤出机归零",
|
||||
|
||||
"retract_before_wipe": [
|
||||
"100%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"10"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"50"
|
||||
],
|
||||
"thumbnails": "300x300/PNG",
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"10000",
|
||||
"10000"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.16"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.04"
|
||||
],
|
||||
"upward_compatible_machine": []
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Goofoo Velo+ 0.4 nozzle",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "XzHz1vNOYg3Ofe8X",
|
||||
"instantiation": "true",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"nozzle_type": "hardened_steel",
|
||||
"printer_model": "Goofoo Velo+",
|
||||
"printer_variant": "0.4",
|
||||
"default_filament_profile": [
|
||||
"Goofoo ABS @System"
|
||||
],
|
||||
"default_print_profile": "0.20mm Standard @Goofoo Velo+",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"600x0",
|
||||
"600x500",
|
||||
"0x500"
|
||||
],
|
||||
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
|
||||
"printable_height": "600",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0",
|
||||
"change_filament_gcode": "PAUSE",
|
||||
"deretraction_speed": [
|
||||
"0"
|
||||
],
|
||||
"extruder_clearance_height_to_lid": "350",
|
||||
"extruder_clearance_height_to_rod": "60",
|
||||
"extruder_clearance_radius": "50",
|
||||
"machine_max_acceleration_e": [
|
||||
"20000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"15000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"200"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"1",
|
||||
"2.5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"50",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"730",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"730",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"15",
|
||||
"12"
|
||||
],
|
||||
"machine_start_gcode": "G90 ; 绝对坐标模式\nM83 ; 挤出机相对模式\nM140 S[first_layer_bed_temperature] ; 设置热床温度\nM104 S140 ; 临时喷嘴温度=切片首层设定(防止归零渗料)\nG4 S10 ; 预热等待10秒\nG28 ; 归零所有轴\nG1 Z50 F240 ; Z轴抬升\nG1 X2 Y10 F3000 ; 移动至起始位置\nM104 S[nozzle_temperature_initial_layer] ; 正式设置喷嘴温度(与切片设置一致)\nM190 S[bed_temperature_initial_layer_single] ; 等待热床温度稳定\nM109 S[nozzle_temperature_initial_layer] ; 等待喷嘴温度稳定\nG1 Z0.28 F240 ; 喷嘴下降至打印高度\nG92 E0 ; 挤出机归零\nG1 Y140 E10 F1500 ; 画第一条 priming 线\nG1 X2.3 F5000 ; X轴微调\nG92 E0 ; 挤出机归零\nG1 Y10 E10 F1200 ; 画第二条 priming 线\nG92 E0 ; 最终挤出机归零",
|
||||
|
||||
"retract_before_wipe": [
|
||||
"100%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"10"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"50"
|
||||
],
|
||||
"thumbnails": "300x300/PNG",
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"10000",
|
||||
"10000"
|
||||
],
|
||||
"upward_compatible_machine": []
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Goofoo Velo+ 0.6 nozzle",
|
||||
"inherits": "fdm_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "Pauu7JRq7u2OD6kv",
|
||||
"instantiation": "true",
|
||||
"nozzle_diameter": [
|
||||
"0.6"
|
||||
],
|
||||
"nozzle_type": "hardened_steel",
|
||||
"printer_model": "Goofoo Velo+",
|
||||
"printer_variant": "0.6",
|
||||
"default_filament_profile": [
|
||||
"Goofoo ABS @System"
|
||||
],
|
||||
"default_print_profile": "0.30mm Standard @Goofoo Velo+",
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"600x0",
|
||||
"600x500",
|
||||
"0x500"
|
||||
],
|
||||
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
|
||||
"printable_height": "600",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0",
|
||||
"change_filament_gcode": "PAUSE",
|
||||
"deretraction_speed": [
|
||||
"0"
|
||||
],
|
||||
"extruder_clearance_height_to_lid": "350",
|
||||
"extruder_clearance_height_to_rod": "60",
|
||||
"extruder_clearance_radius": "50",
|
||||
"machine_max_acceleration_e": [
|
||||
"20000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"15000",
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"100",
|
||||
"200"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"1",
|
||||
"2.5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"5",
|
||||
"9"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"50",
|
||||
"25"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"730",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"730",
|
||||
"200"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"15",
|
||||
"12"
|
||||
],
|
||||
"machine_start_gcode": "G90 ; 绝对坐标模式\nM83 ; 挤出机相对模式\nM140 S[first_layer_bed_temperature] ; 设置热床温度\nM104 S140 ; 临时喷嘴温度=切片首层设定(防止归零渗料)\nG4 S10 ; 预热等待10秒\nG28 ; 归零所有轴\nG1 Z50 F240 ; Z轴抬升\nG1 X2 Y10 F3000 ; 移动至起始位置\nM104 S[nozzle_temperature_initial_layer] ; 正式设置喷嘴温度(与切片设置一致)\nM190 S[bed_temperature_initial_layer_single] ; 等待热床温度稳定\nM109 S[nozzle_temperature_initial_layer] ; 等待喷嘴温度稳定\nG1 Z0.28 F240 ; 喷嘴下降至打印高度\nG92 E0 ; 挤出机归零\nG1 Y140 E10 F1500 ; 画第一条 priming 线\nG1 X2.3 F5000 ; X轴微调\nG92 E0 ; 挤出机归零\nG1 Y10 E10 F1200 ; 画第二条 priming 线\nG92 E0 ; 最终挤出机归零",
|
||||
|
||||
"retract_before_wipe": [
|
||||
"100%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"10"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.5"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"50"
|
||||
],
|
||||
"thumbnails": "300x300/PNG",
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"machine_max_acceleration_travel": [
|
||||
"10000",
|
||||
"10000"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.4"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.12"
|
||||
],
|
||||
"upward_compatible_machine": []
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "Goofoo Velo+ Tool 0.4",
|
||||
"inherits": "Goofoo Velo+ 0.4 nozzle",
|
||||
"from": "system",
|
||||
"setting_id": "ww39WeaF5nYks1em",
|
||||
"instantiation": "true",
|
||||
"nozzle_diameter": [
|
||||
"0.4",
|
||||
"0.4"
|
||||
],
|
||||
"printer_model": "Goofoo Velo+ Tool",
|
||||
"change_filament_gcode": "T[next_extruder]\n;M104 S[nozzle_temperature_initial_layer] T[next_extruder]; 正式设置喷嘴温度(与切片设置一致)\n;M109 S[nozzle_temperature_initial_layer] T[next_extruder] ; 等待喷嘴温度稳定\n",
|
||||
"default_nozzle_volume_type": [
|
||||
"Standard",
|
||||
"Standard"
|
||||
],
|
||||
"deretraction_speed": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F",
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0",
|
||||
"0x0"
|
||||
],
|
||||
"extruder_printable_height": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"extruder_type": [
|
||||
"Direct Drive",
|
||||
"Direct Drive"
|
||||
],
|
||||
"extruder_variant_list": [
|
||||
"Direct Drive Standard",
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"long_retractions_when_cut": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nT0\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
|
||||
"machine_start_gcode": "G90 ; 绝对坐标模式\nM83 ; 挤出机相对模式\nM140 S[first_layer_bed_temperature] ; 设置热床温度\nM104 S140 T0 ; 临时喷嘴温度=切片首层设定(防止归零渗料)\nM104 S140 T1\nG4 S10 ; 预热等待10秒\nG28 ; 归零所有轴\nG1 Z50 F240 ; Z轴抬升\nG1 X2 Y10 F3000 ; 移动至起始位置\nM104 S[nozzle_temperature_initial_layer] T0 ; 正式设置喷嘴温度(与切片设置一致)\nM104 S[nozzle_temperature_initial_layer] T1 ; 正式设置喷嘴温度(与切片设置一致)\nM190 S[bed_temperature_initial_layer_single] T0; 等待热床温度稳定\nM109 S[nozzle_temperature_initial_layer] T0 ; 等待喷嘴温度稳定\nG1 Z0.28 F240 ; 喷嘴下降至打印高度\nG92 E0 ; 挤出机归零\nG1 Y140 E10 F1500 ; 画第一条 priming 线\nG1 X2.3 F5000 ; X轴微调\nG92 E0 ; 挤出机归零\nG1 Y10 E10 F1200 ; 画第二条 priming 线\nG92 E0 ; 最终挤出机归零\nG1 Z20 F240 ; Z轴抬升\nG1 X280 Y10 F3000 ; 移动至起始位置\nT1\nM104 S[nozzle_temperature_initial_layer] T1 ; 正式设置喷嘴温度(与切片设置一致)\nM190 S[bed_temperature_initial_layer_single] T1; 等待热床温度稳定\nM109 S[nozzle_temperature_initial_layer] T1; 等待喷嘴温度稳定\nG4 S10 ; 预热等待10秒\nG1 Z0.28 F240 ; 喷嘴下降至打印高度\nG92 E0 ; 挤出机归零\nG1 Y140 E10 F1500 ; 画第一条 priming 线\nG1 X282.3 F5000 ; X轴微调\nG92 E0 ; 挤出机归零\nG1 Y10 E10 F1200 ; 画第二条 priming 线\nG92 E0 ; 最终挤出机归零",
|
||||
"max_layer_height": [
|
||||
"0.32",
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08",
|
||||
"0.08"
|
||||
],
|
||||
"nozzle_flush_dataset": [
|
||||
"nil",
|
||||
"0"
|
||||
],
|
||||
"nozzle_type": [
|
||||
"nil",
|
||||
"hardened_steel"
|
||||
],
|
||||
"nozzle_volume": [
|
||||
"nil",
|
||||
"0"
|
||||
],
|
||||
"printable_area": [
|
||||
"0x0",
|
||||
"300x0",
|
||||
"300x300",
|
||||
"0x300"
|
||||
],
|
||||
"printer_extruder_id": [
|
||||
"1",
|
||||
"2"
|
||||
],
|
||||
"printer_extruder_variant": [
|
||||
"Direct Drive Standard",
|
||||
"Direct Drive Standard"
|
||||
],
|
||||
"purge_in_prime_tower": "0",
|
||||
"retract_before_wipe": [
|
||||
"100%",
|
||||
"100%"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"10",
|
||||
"10"
|
||||
],
|
||||
"retract_lift_above": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"retract_lift_below": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"retract_lift_enforce": [
|
||||
"All Surfaces",
|
||||
"All Surfaces"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1",
|
||||
"1"
|
||||
],
|
||||
"retraction_distances_when_cut": [
|
||||
"18",
|
||||
"18"
|
||||
],
|
||||
"retraction_length": [
|
||||
"0.5",
|
||||
"0.5"
|
||||
],
|
||||
"retraction_minimum_travel": [
|
||||
"2",
|
||||
"2"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"50",
|
||||
"50"
|
||||
],
|
||||
"single_extruder_multi_material": "0",
|
||||
"travel_slope": [
|
||||
"3",
|
||||
"3"
|
||||
],
|
||||
"wipe": [
|
||||
"1",
|
||||
"1"
|
||||
],
|
||||
"wipe_distance": [
|
||||
"1",
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0",
|
||||
"0"
|
||||
],
|
||||
"z_hop_types": [
|
||||
"Slope Lift",
|
||||
"Slope Lift"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Goofoo Velo+ Tool",
|
||||
"nozzle_diameter": "0.4",
|
||||
"bed_model": "Goofoo-Velo+.stl",
|
||||
"bed_texture": "Goofoo-Velo+-texture.svg",
|
||||
"family": "Goofoo",
|
||||
"machine_tech": "FFF",
|
||||
"model_id": "V006",
|
||||
"default_materials": "Goofoo ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"type": "machine_model",
|
||||
"name": "Goofoo Velo+",
|
||||
"nozzle_diameter": "0.2;0.4;0.6",
|
||||
"bed_model": "Goofoo-Velo+.stl",
|
||||
"bed_texture": "Goofoo-Velo+-texture.svg",
|
||||
"family": "Goofoo",
|
||||
"machine_tech": "FFF",
|
||||
"model_id": "V001",
|
||||
"default_materials": "Goofoo ABS @System"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_klipper_common",
|
||||
"inherits": "fdm_machine_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "klipper",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n",
|
||||
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nM140 S{first_layer_bed_temperature[0]} ; set bed temp\nM104 S140 ; set temporary nozzle temp to prevent oozing\nG4 S10 ; wait 10s for preheating\nG28 ; home all axes\nG1 Z50 F240 ; raise Z axis\nG1 X2 Y10 F3000 ; move to start position\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S{first_layer_bed_temperature[0]} ; wait for bed temp\nM109 S{first_layer_temperature[0]} ; wait for nozzle temp\nG1 Z0.28 F240 ; lower nozzle to print height\nG92 E0 ; reset extrusion distance\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000 ; slight X adjustment\nG92 E0 ; reset extrusion distance\nG1 Y10 E10 F1200 ; prime again\nG92 E0 ; final extrusion reset",
|
||||
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
|
||||
"change_filament_gcode": "PAUSE",
|
||||
"machine_pause_gcode": "PAUSE"
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
{
|
||||
"type": "machine",
|
||||
"name": "fdm_machine_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"printer_technology": "FFF",
|
||||
"deretraction_speed": [
|
||||
"40"
|
||||
],
|
||||
"extruder_colour": [
|
||||
"#FCE94F"
|
||||
],
|
||||
"extruder_offset": [
|
||||
"0x0"
|
||||
],
|
||||
"gcode_flavor": "marlin",
|
||||
"machine_max_acceleration_e": [
|
||||
"5000"
|
||||
],
|
||||
"machine_max_acceleration_extruding": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_retracting": [
|
||||
"1000"
|
||||
],
|
||||
"machine_max_acceleration_x": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_y": [
|
||||
"10000"
|
||||
],
|
||||
"machine_max_acceleration_z": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_e": [
|
||||
"60"
|
||||
],
|
||||
"machine_max_speed_x": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_y": [
|
||||
"500"
|
||||
],
|
||||
"machine_max_speed_z": [
|
||||
"10"
|
||||
],
|
||||
"machine_max_jerk_e": [
|
||||
"5"
|
||||
],
|
||||
"machine_max_jerk_x": [
|
||||
"8"
|
||||
],
|
||||
"machine_max_jerk_y": [
|
||||
"8"
|
||||
],
|
||||
"machine_max_jerk_z": [
|
||||
"0.4"
|
||||
],
|
||||
"machine_min_extruding_rate": [
|
||||
"0"
|
||||
],
|
||||
"machine_min_travel_rate": [
|
||||
"0"
|
||||
],
|
||||
"max_layer_height": [
|
||||
"0.32"
|
||||
],
|
||||
"min_layer_height": [
|
||||
"0.08"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"extruder_clearance_radius": "65",
|
||||
"extruder_clearance_height_to_rod": "36",
|
||||
"extruder_clearance_height_to_lid": "140",
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
"printer_settings_id": "",
|
||||
"printer_variant": "0.4",
|
||||
"retraction_minimum_travel": [
|
||||
"2"
|
||||
],
|
||||
"retract_before_wipe": [
|
||||
"70%"
|
||||
],
|
||||
"retract_when_changing_layer": [
|
||||
"1"
|
||||
],
|
||||
"retraction_length": [
|
||||
"1"
|
||||
],
|
||||
"retract_length_toolchange": [
|
||||
"1"
|
||||
],
|
||||
"z_hop": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra": [
|
||||
"0"
|
||||
],
|
||||
"retract_restart_extra_toolchange": [
|
||||
"0"
|
||||
],
|
||||
"retraction_speed": [
|
||||
"60"
|
||||
],
|
||||
"single_extruder_multi_material": "1",
|
||||
"change_filament_gcode": "",
|
||||
"wipe": [
|
||||
"1"
|
||||
],
|
||||
"default_print_profile": "",
|
||||
"machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",
|
||||
"machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end",
|
||||
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
|
||||
"machine_pause_gcode": "M601"
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.10mm Standard @Goofoo Velo+",
|
||||
"inherits": "0.20mm Standard @Goofoo Velo+",
|
||||
"from": "system",
|
||||
"setting_id": "dJV4bTrLbOPzW2YB",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Goofoo Velo+ 0.2 nozzle"
|
||||
],
|
||||
"layer_height": "0.1",
|
||||
"initial_layer_print_height": "0.1",
|
||||
"bottom_shell_layers": "6",
|
||||
"top_shell_layers": "12",
|
||||
"wall_loops": "4",
|
||||
"line_width": "0.22",
|
||||
"initial_layer_line_width": "0.25",
|
||||
"inner_wall_line_width": "0.22",
|
||||
"outer_wall_line_width": "0.22",
|
||||
"sparse_infill_line_width": "0.22",
|
||||
"internal_solid_infill_line_width": "0.22",
|
||||
"top_surface_line_width": "0.22",
|
||||
"support_line_width": "0.22",
|
||||
"support_top_z_distance": "0.1",
|
||||
"support_bottom_z_distance": "0.1"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Goofoo GP1",
|
||||
"inherits": "fdm_process_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "zrscQBUxp6L7BlQ9",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Goofoo GP1 0.4 nozzle"
|
||||
],
|
||||
"layer_height": "0.2",
|
||||
"accel_to_decel_enable": "0",
|
||||
"bridge_acceleration": "100%",
|
||||
"bridge_speed": "100",
|
||||
"brim_type": "no_brim",
|
||||
"gap_infill_speed": "250",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"initial_layer_infill_speed": "100",
|
||||
"initial_layer_speed": "70",
|
||||
"inner_wall_speed": "250",
|
||||
"internal_bridge_speed": "200%",
|
||||
"internal_solid_infill_speed": "250",
|
||||
"outer_wall_acceleration": "5000",
|
||||
"outer_wall_speed": "100",
|
||||
"overhang_4_4_speed": "0",
|
||||
"reduce_crossing_wall": "1",
|
||||
"skirt_distance": "6",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "1",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"sparse_infill_speed": "250",
|
||||
"top_surface_acceleration": "5000",
|
||||
"top_surface_speed": "200",
|
||||
"travel_acceleration": "5000"
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Goofoo TurboM",
|
||||
"inherits": "fdm_process_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "LVXxUtAcYGCY6irA",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Goofoo TurboM 0.4 nozzle"
|
||||
],
|
||||
"layer_height": "0.2",
|
||||
"bridge_acceleration": "2000",
|
||||
"bridge_speed": "60",
|
||||
"brim_type": "no_brim",
|
||||
"default_acceleration": "10000",
|
||||
"enable_support": "1",
|
||||
"exclude_object": "0",
|
||||
"gap_infill_speed": "200",
|
||||
"infill_anchor": "600%",
|
||||
"infill_combination": "1",
|
||||
"infill_wall_overlap": "15%",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"initial_layer_line_width": "0.45",
|
||||
"initial_layer_speed": "60",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"inner_wall_line_width": "0.42",
|
||||
"inner_wall_speed": "150",
|
||||
"internal_solid_infill_acceleration": "3000",
|
||||
"internal_solid_infill_line_width": "0.42",
|
||||
"internal_solid_infill_speed": "150",
|
||||
"line_width": "0.42",
|
||||
"min_skirt_length": "0",
|
||||
"minimum_sparse_infill_area": "70",
|
||||
"only_one_wall_top": "1",
|
||||
"outer_wall_acceleration": "2500",
|
||||
"outer_wall_line_width": "0.42",
|
||||
"outer_wall_speed": "100",
|
||||
"reduce_crossing_wall": "1",
|
||||
"skirt_distance": "6",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "4",
|
||||
"small_perimeter_speed": "200",
|
||||
"sparse_infill_acceleration": "3000",
|
||||
"sparse_infill_line_width": "0.42",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"sparse_infill_speed": "150",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_pattern": "rectilinear",
|
||||
"support_interface_spacing": "0",
|
||||
"support_interface_speed": "100",
|
||||
"support_interface_top_layers": "3",
|
||||
"support_line_width": "0.35",
|
||||
"support_object_xy_distance": "0.21",
|
||||
"support_speed": "100",
|
||||
"thick_bridges": "1",
|
||||
"top_shell_layers": "6",
|
||||
"top_shell_thickness": "0",
|
||||
"top_surface_acceleration": "2500",
|
||||
"top_surface_line_width": "0.42",
|
||||
"top_surface_speed": "150",
|
||||
"travel_acceleration": "10000",
|
||||
"travel_speed": "200",
|
||||
"wall_generator": "classic",
|
||||
"wall_loops": "2",
|
||||
"wall_sequence": "outer wall/inner wall"
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.20mm Standard @Goofoo Velo+",
|
||||
"inherits": "fdm_process_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "iWjynhCcvbF8MWev",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Goofoo Velo+ 0.4 nozzle",
|
||||
"Goofoo Velo+ Tool 0.4"
|
||||
],
|
||||
"layer_height": "0.2",
|
||||
"initial_layer_print_height": "0.2",
|
||||
"bottom_shell_layers": "3",
|
||||
"top_shell_layers": "6",
|
||||
"bridge_acceleration": "2000",
|
||||
"bridge_speed": "60",
|
||||
"brim_type": "no_brim",
|
||||
"default_acceleration": "10000",
|
||||
"enable_support": "1",
|
||||
"exclude_object": "0",
|
||||
"gap_infill_speed": "200",
|
||||
"infill_anchor": "600%",
|
||||
"infill_combination": "1",
|
||||
"infill_wall_overlap": "15%",
|
||||
"initial_layer_acceleration": "1000",
|
||||
"initial_layer_line_width": "0.45",
|
||||
"initial_layer_speed": "60",
|
||||
"inner_wall_acceleration": "3000",
|
||||
"inner_wall_line_width": "0.42",
|
||||
"inner_wall_speed": "150",
|
||||
"internal_solid_infill_acceleration": "3000",
|
||||
"internal_solid_infill_line_width": "0.42",
|
||||
"internal_solid_infill_speed": "150",
|
||||
"line_width": "0.42",
|
||||
"min_skirt_length": "0",
|
||||
"minimum_sparse_infill_area": "70",
|
||||
"only_one_wall_top": "1",
|
||||
"outer_wall_acceleration": "2500",
|
||||
"outer_wall_line_width": "0.42",
|
||||
"outer_wall_speed": "100",
|
||||
"reduce_crossing_wall": "1",
|
||||
"skirt_distance": "6",
|
||||
"skirt_height": "1",
|
||||
"skirt_loops": "4",
|
||||
"small_perimeter_speed": "200",
|
||||
"sparse_infill_acceleration": "3000",
|
||||
"sparse_infill_line_width": "0.42",
|
||||
"sparse_infill_pattern": "grid",
|
||||
"sparse_infill_speed": "150",
|
||||
"support_base_pattern": "rectilinear",
|
||||
"support_interface_bottom_layers": "-1",
|
||||
"support_interface_pattern": "rectilinear",
|
||||
"support_interface_spacing": "0",
|
||||
"support_interface_speed": "100",
|
||||
"support_interface_top_layers": "3",
|
||||
"support_line_width": "0.35",
|
||||
"support_object_xy_distance": "0.21",
|
||||
"support_speed": "100",
|
||||
"thick_bridges": "1",
|
||||
"top_shell_thickness": "0",
|
||||
"top_surface_acceleration": "2500",
|
||||
"top_surface_line_width": "0.42",
|
||||
"top_surface_speed": "150",
|
||||
"travel_acceleration": "10000",
|
||||
"travel_speed": "300",
|
||||
"wall_generator": "classic",
|
||||
"wall_loops": "2",
|
||||
"wall_sequence": "outer wall/inner wall"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "0.30mm Standard @Goofoo Velo+",
|
||||
"inherits": "fdm_process_klipper_common",
|
||||
"from": "system",
|
||||
"setting_id": "mi8ogYOYpqb2x60z",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": [
|
||||
"Goofoo Velo+ 0.6 nozzle"
|
||||
],
|
||||
"initial_layer_print_height": "0.3",
|
||||
"layer_height": "0.3"
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"seam_position": "aligned",
|
||||
"resolution": "0.012",
|
||||
"elefant_foot_compensation": "0.2",
|
||||
"precise_outer_wall": "1",
|
||||
"ironing_type": "no ironing",
|
||||
"ironing_speed": "30",
|
||||
"ironing_flow": "10%",
|
||||
"ironing_spacing": "0.15",
|
||||
"reduce_crossing_wall": "1",
|
||||
"max_travel_detour_distance": "0",
|
||||
"detect_overhang_wall": "1",
|
||||
"wall_loops": "3",
|
||||
"top_surface_pattern": "monotonicline",
|
||||
"top_shell_layers": "5",
|
||||
"top_shell_thickness": "0.7",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_layers": "4",
|
||||
"bottom_shell_thickness": "0.5",
|
||||
"sparse_infill_density": "15%",
|
||||
"sparse_infill_pattern": "crosshatch",
|
||||
"infill_wall_overlap": "23%",
|
||||
"infill_direction": "45",
|
||||
"minimum_sparse_infill_area": "15",
|
||||
"infill_combination": "0",
|
||||
"ensure_vertical_shell_thickness": "1",
|
||||
"initial_layer_speed": "50",
|
||||
"initial_layer_infill_speed": "50",
|
||||
"initial_layer_travel_speed": "100%",
|
||||
"outer_wall_speed": "125",
|
||||
"inner_wall_speed": "250",
|
||||
"sparse_infill_speed": "250",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "150",
|
||||
"gap_infill_speed": "150",
|
||||
"support_speed": "125",
|
||||
"support_interface_speed": "80",
|
||||
"enable_overhang_speed": "1",
|
||||
"overhang_1_4_speed": "0",
|
||||
"overhang_2_4_speed": "50",
|
||||
"overhang_3_4_speed": "25",
|
||||
"overhang_4_4_speed": "15",
|
||||
"bridge_speed": "50",
|
||||
"travel_speed": "300",
|
||||
"default_acceleration": "2500",
|
||||
"outer_wall_acceleration": "500",
|
||||
"inner_wall_acceleration": "500",
|
||||
"bridge_acceleration": "500",
|
||||
"travel_acceleration": "2500",
|
||||
"default_jerk": "15",
|
||||
"outer_wall_jerk": "10",
|
||||
"inner_wall_jerk": "15",
|
||||
"infill_jerk": "15",
|
||||
"top_surface_jerk": "12",
|
||||
"initial_layer_jerk": "12",
|
||||
"travel_jerk": "20",
|
||||
"enable_support": "0",
|
||||
"support_type": "normal(auto)",
|
||||
"support_threshold_angle": "30",
|
||||
"support_on_build_plate_only": "0",
|
||||
"raft_layers": "0",
|
||||
"support_filament": "0",
|
||||
"support_interface_filament": "0",
|
||||
"support_top_z_distance": "0.2",
|
||||
"support_base_pattern": "default",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_interface_top_layers": "2",
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_object_xy_distance": "0.5",
|
||||
"bridge_no_support": "0",
|
||||
"independent_support_layer_height": "1",
|
||||
"tree_support_branch_angle": "30",
|
||||
"tree_support_wall_count": "0",
|
||||
"skirt_loops": "2",
|
||||
"skirt_distance": "3",
|
||||
"skirt_height": "1",
|
||||
"brim_width": "5",
|
||||
"brim_object_gap": "0.1",
|
||||
"enable_prime_tower": "0",
|
||||
"prime_tower_width": "60",
|
||||
"wipe_tower_no_sparse_layers": "0",
|
||||
"print_sequence": "by layer",
|
||||
"spiral_mode": "0",
|
||||
"reduce_infill_retraction": "1",
|
||||
"filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[0]}_{printer_model}.gcode"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "process",
|
||||
"name": "fdm_process_klipper_common",
|
||||
"inherits": "fdm_process_common",
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"default_acceleration": "5000",
|
||||
"top_surface_acceleration": "3000",
|
||||
"travel_acceleration": "7000",
|
||||
"inner_wall_acceleration": "5000",
|
||||
"outer_wall_acceleration": "3000",
|
||||
"initial_layer_acceleration": "500",
|
||||
"initial_layer_speed": "50",
|
||||
"initial_layer_infill_speed": "105",
|
||||
"outer_wall_speed": "120",
|
||||
"inner_wall_speed": "200",
|
||||
"internal_solid_infill_speed": "200",
|
||||
"top_surface_speed": "100",
|
||||
"gap_infill_speed": "100",
|
||||
"sparse_infill_speed": "200",
|
||||
"travel_speed": "350",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "OrcaFilamentLibrary",
|
||||
"version": "02.04.00.15",
|
||||
"version": "02.04.00.16",
|
||||
"force_update": "0",
|
||||
"description": "Orca Filament Library",
|
||||
"filament_list": [
|
||||
@@ -1396,6 +1396,10 @@
|
||||
"name": "addnorth ABS rABS",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth ABS rABS.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo ABS @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo ABS @base.json"
|
||||
},
|
||||
{
|
||||
"name": "NIT ABS @System",
|
||||
"sub_path": "filament/NIT/NIT ABS @System.json"
|
||||
@@ -1480,6 +1484,10 @@
|
||||
"name": "Elegoo ASA-CF @base",
|
||||
"sub_path": "filament/Elegoo/Elegoo ASA-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo ASA @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo ASA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Overture ASA @BBL X1",
|
||||
"sub_path": "filament/Overture/BBL/Overture ASA @BBL X1.json"
|
||||
@@ -1636,10 +1644,22 @@
|
||||
"name": "addnorth PVDF Adamant S1",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PVDF Adamant S1.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PA @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "addnorth PA-CF Adura X",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PA-CF Adura X.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PA-CF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PA-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PA-GF10 @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PA-GF10 @base.json"
|
||||
},
|
||||
{
|
||||
"name": "INSLOGIC PA6-66 @BBL P2S",
|
||||
"sub_path": "filament/INSLOGIC/BBL/INSLOGIC PA6-66 @BBL P2S.json"
|
||||
@@ -1712,6 +1732,10 @@
|
||||
"name": "COEX PCTG PRIME @System",
|
||||
"sub_path": "filament/COEX/COEX PCTG PRIME @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PE @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PE @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PE-CF @System",
|
||||
"sub_path": "filament/Generic PE-CF @System.json"
|
||||
@@ -2176,6 +2200,10 @@
|
||||
"name": "addnorth PETG rPETG Matte",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PETG rPETG Matte.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PETG @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PETG @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PETG HF @System",
|
||||
"sub_path": "filament/Generic PETG HF @System.json"
|
||||
@@ -2236,6 +2264,10 @@
|
||||
"name": "eSUN PETG @System",
|
||||
"sub_path": "filament/eSUN/eSUN PETG @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PHA @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PHA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "AliZ PLA @P1-X1",
|
||||
"sub_path": "filament/AliZ/BBL/AliZ PLA @P1-X1.json"
|
||||
@@ -3120,6 +3152,10 @@
|
||||
"name": "addnorth PLA rPLA RE-ADD",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PLA rPLA RE-ADD.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PLA @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PLA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "addnorth PLA X-PLA High Speed",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PLA X-PLA High Speed.json"
|
||||
@@ -3136,6 +3172,10 @@
|
||||
"name": "addnorth PLA-CF Carbon Fiber",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PLA-CF Carbon Fiber.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PLA-CF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PLA-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "INSLOGIC PLA Pro @BBL P2S",
|
||||
"sub_path": "filament/INSLOGIC/BBL/INSLOGIC PLA Pro @BBL P2S.json"
|
||||
@@ -3820,6 +3860,10 @@
|
||||
"name": "FILL3D PPCF @System",
|
||||
"sub_path": "filament/FILL3D/FILL3D PPCF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PP @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PP @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Generic PP-CF @System",
|
||||
"sub_path": "filament/Generic PP-CF @System.json"
|
||||
@@ -3840,6 +3884,10 @@
|
||||
"name": "Bambu PVA @System",
|
||||
"sub_path": "filament/Bambu/Bambu PVA @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PVA @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PVA @base.json"
|
||||
},
|
||||
{
|
||||
"name": "FDplast SBS @System",
|
||||
"sub_path": "filament/FDplast/FDplast SBS @System.json"
|
||||
@@ -4112,6 +4160,14 @@
|
||||
"name": "addnorth TPU Pro Matte 95A",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth TPU Pro Matte 95A.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo 90A TPU @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo 90A TPU @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo 95A TPU @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo 95A TPU @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Overture TPU @BBL A1",
|
||||
"sub_path": "filament/Overture/BBL/Overture TPU @BBL A1.json"
|
||||
@@ -4156,10 +4212,30 @@
|
||||
"name": "Overture TPU @System",
|
||||
"sub_path": "filament/Overture/Overture TPU @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo ABS @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo ABS @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Elegoo ASA-CF @System",
|
||||
"sub_path": "filament/Elegoo/Elegoo ASA-CF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo ASA @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo ASA @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PA @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PA @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PA-CF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PA-CF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PA-GF10 @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PA-GF10 @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Elegoo PC-FR @System",
|
||||
"sub_path": "filament/Elegoo/Elegoo PC-FR @System.json"
|
||||
@@ -4176,6 +4252,14 @@
|
||||
"name": "COEX PCTG PRIME @BBL A1M 0.8 nozzle",
|
||||
"sub_path": "filament/COEX/BBL/COEX PCTG PRIME @BBL A1M 0.8 nozzle.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PE @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PE @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PE-CF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PE-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "AliZ PETG-CF @P1-X1",
|
||||
"sub_path": "filament/AliZ/BBL/AliZ PETG-CF @P1-X1.json"
|
||||
@@ -4236,10 +4320,26 @@
|
||||
"name": "Fiberon PETG-ESD @BBL X1",
|
||||
"sub_path": "filament/Polymaker/BBL/Fiberon PETG-ESD @BBL X1.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PETG @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PETG @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PETG HF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PETG HF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "addnorth PETG-CF Rigid X",
|
||||
"sub_path": "filament/addnorth/BBL/addnorth PETG-CF Rigid X.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PETG-CF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PETG-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PHA @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PHA @System.json"
|
||||
},
|
||||
{
|
||||
"name": "COEX PLA @BBL A1M 0.2 nozzle",
|
||||
"sub_path": "filament/COEX/BBL/COEX PLA @BBL A1M 0.2 nozzle.json"
|
||||
@@ -4304,6 +4404,14 @@
|
||||
"name": "Elegoo Rapid PLA+ @System",
|
||||
"sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PLA @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PLA @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PLA-CF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PLA-CF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Numakers PLA+ @BBL A1",
|
||||
"sub_path": "filament/Numakers/BBL/Numakers PLA+ @BBL A1.json"
|
||||
@@ -5188,9 +5296,61 @@
|
||||
"name": "COEX PLA+Silk @System",
|
||||
"sub_path": "filament/COEX/COEX PLA+Silk @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PLA Silk @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PLA Silk @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PP @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PP @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PP-CF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PP-CF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PP-GF @base",
|
||||
"sub_path": "filament/Goofoo/Goofoo PP-GF @base.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PVA @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PVA @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Elegoo Rapid TPU 95A @System",
|
||||
"sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo 90A TPU @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo 90A TPU @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo 95A TPU @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo 95A TPU @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PE-CF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PE-CF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PETG HF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PETG HF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PETG-CF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PETG-CF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PLA Silk @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PLA Silk @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PP-CF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PP-CF @System.json"
|
||||
},
|
||||
{
|
||||
"name": "Goofoo PP-GF @System",
|
||||
"sub_path": "filament/Goofoo/Goofoo PP-GF @System.json"
|
||||
}
|
||||
],
|
||||
"process_list": [],
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo 90A TPU @System",
|
||||
"inherits": "Goofoo 90A TPU @base",
|
||||
"from": "system",
|
||||
"setting_id": "tjq76AQe9SCzZVo6",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo 90A TPU @base",
|
||||
"inherits": "Generic TPU @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFlVOXX3",
|
||||
"instantiation": "false",
|
||||
"fan_cooling_layer_time": [
|
||||
"60"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"35"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"2"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"40"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"40"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"220"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"220"
|
||||
],
|
||||
"reduce_fan_stop_start_freq": [
|
||||
"0"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"TPU"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo 95A TPU @System",
|
||||
"inherits": "Goofoo 95A TPU @base",
|
||||
"from": "system",
|
||||
"setting_id": "2YTvrE1gu1yHHTNM",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo 95A TPU @base",
|
||||
"inherits": "Generic TPU @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFk50t30",
|
||||
"instantiation": "false",
|
||||
"fan_cooling_layer_time": [
|
||||
"60"
|
||||
],
|
||||
"fan_min_speed": [
|
||||
"35"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"40"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"40"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"220"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"220"
|
||||
],
|
||||
"reduce_fan_stop_start_freq": [
|
||||
"0"
|
||||
],
|
||||
"slow_down_layer_time": [
|
||||
"5"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"TPU"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo ABS @System",
|
||||
"inherits": "Goofoo ABS @base",
|
||||
"from": "system",
|
||||
"setting_id": "UeINgPGH4eaSJinC",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo ABS @base",
|
||||
"inherits": "Generic ABS @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFd3PmW4",
|
||||
"instantiation": "false",
|
||||
"close_fan_the_first_x_layers": [
|
||||
"1"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"110"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"110"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"ABS"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo ASA @System",
|
||||
"inherits": "Goofoo ASA @base",
|
||||
"from": "system",
|
||||
"setting_id": "9ohqNl44uygTPfS9",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo ASA @base",
|
||||
"inherits": "Generic ASA @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFyncHIG",
|
||||
"instantiation": "false",
|
||||
"filament_flow_ratio": [
|
||||
"0.93"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"100"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"ASA"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PA @System",
|
||||
"inherits": "Goofoo PA @base",
|
||||
"from": "system",
|
||||
"setting_id": "1ximJVgZZfGmGyzD",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PA @base",
|
||||
"inherits": "Generic PA @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFc2x7Ly",
|
||||
"instantiation": "false",
|
||||
"filament_max_volumetric_speed": [
|
||||
"12"
|
||||
],
|
||||
"reduce_fan_stop_start_freq": [
|
||||
"1"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PA"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PA-CF @System",
|
||||
"inherits": "Goofoo PA-CF @base",
|
||||
"from": "system",
|
||||
"setting_id": "US4zznMNti8tLUHG",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PA-CF @base",
|
||||
"inherits": "Generic PA-CF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OF7skcRj",
|
||||
"instantiation": "false",
|
||||
"filament_max_volumetric_speed": [
|
||||
"12"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PA-CF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PA-GF10 @System",
|
||||
"inherits": "Goofoo PA-GF10 @base",
|
||||
"from": "system",
|
||||
"setting_id": "Lea3hf2lQG0M9eTC",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PA-GF10 @base",
|
||||
"inherits": "Generic PA-CF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFtjqw2h",
|
||||
"instantiation": "false",
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"230"
|
||||
],
|
||||
"reduce_fan_stop_start_freq": [
|
||||
"1"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PA-GF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PE @System",
|
||||
"inherits": "Goofoo PE @base",
|
||||
"from": "system",
|
||||
"setting_id": "muNxvgr0vdavMaOJ",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PE @base",
|
||||
"inherits": "Generic PE @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFAln723",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PE"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PE-CF @System",
|
||||
"inherits": "Goofoo PE-CF @base",
|
||||
"from": "system",
|
||||
"setting_id": "58fMbg6AClvalw5o",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PE-CF @base",
|
||||
"inherits": "Generic PE-CF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OF4Ll1Sk",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PE-CF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PETG @System",
|
||||
"inherits": "Goofoo PETG @base",
|
||||
"from": "system",
|
||||
"setting_id": "a9OKgJeoJgzfZiAB",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PETG @base",
|
||||
"inherits": "Generic PETG @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFHdIbiu",
|
||||
"instantiation": "false",
|
||||
"hot_plate_temp": [
|
||||
"80"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"80"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"240"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"240"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PETG"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PETG HF @System",
|
||||
"inherits": "Goofoo PETG HF @base",
|
||||
"from": "system",
|
||||
"setting_id": "eMjhTRf5qPeeqSgk",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PETG HF @base",
|
||||
"inherits": "Generic PETG HF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OF5bjxyx",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PETG HF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PETG-CF @System",
|
||||
"inherits": "Goofoo PETG-CF @base",
|
||||
"from": "system",
|
||||
"setting_id": "ULNFo6zjgjc5MEIa",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PETG-CF @base",
|
||||
"inherits": "Generic PETG-CF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFo6Ff38",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PETG-CF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PHA @System",
|
||||
"inherits": "Goofoo PHA @base",
|
||||
"from": "system",
|
||||
"setting_id": "cfdeMyqld72Lqh38",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PHA @base",
|
||||
"inherits": "Generic PHA @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFicmNhN",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PHA"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PLA @System",
|
||||
"inherits": "Goofoo PLA @base",
|
||||
"from": "system",
|
||||
"setting_id": "UFWRE1b3706Cu1Iq",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PLA @base",
|
||||
"inherits": "Generic PLA @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFoq0Cmt",
|
||||
"instantiation": "false",
|
||||
"hot_plate_temp": [
|
||||
"40"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"40"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"230"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"230"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PLA Silk @System",
|
||||
"inherits": "Goofoo PLA Silk @base",
|
||||
"from": "system",
|
||||
"setting_id": "2pW2NEoY4hFCkNun",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PLA Silk @base",
|
||||
"inherits": "Generic PLA Silk @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFpta2gc",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA Silk"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PLA-CF @System",
|
||||
"inherits": "Goofoo PLA-CF @base",
|
||||
"from": "system",
|
||||
"setting_id": "R0UMDUPY9ryat8gQ",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PLA-CF @base",
|
||||
"inherits": "Generic PLA-CF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFMNABGJ",
|
||||
"instantiation": "false",
|
||||
"filament_flow_ratio": [
|
||||
"0.98"
|
||||
],
|
||||
"hot_plate_temp": [
|
||||
"40"
|
||||
],
|
||||
"hot_plate_temp_initial_layer": [
|
||||
"40"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"240"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"240"
|
||||
],
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PLA-CF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PP @System",
|
||||
"inherits": "Goofoo PP @base",
|
||||
"from": "system",
|
||||
"setting_id": "TaB8JUtjJWgRcNrv",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PP @base",
|
||||
"inherits": "Generic PP @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFlqlUSx",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PP"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PP-CF @System",
|
||||
"inherits": "Goofoo PP-CF @base",
|
||||
"from": "system",
|
||||
"setting_id": "uHocbocT6flJhlBz",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PP-CF @base",
|
||||
"inherits": "Generic PP-CF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFUUiuIV",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PP-CF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PP-GF @System",
|
||||
"inherits": "Goofoo PP-GF @base",
|
||||
"from": "system",
|
||||
"setting_id": "mns8gICV0aNwJ02L",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PP-GF @base",
|
||||
"inherits": "Generic PP-GF @System",
|
||||
"from": "system",
|
||||
"filament_id": "OFaOhzl8",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PP-GF"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PVA @System",
|
||||
"inherits": "Goofoo PVA @base",
|
||||
"from": "system",
|
||||
"setting_id": "tUXbv31nYkXJ87OT",
|
||||
"instantiation": "true",
|
||||
"compatible_printers": []
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"name": "Goofoo PVA @base",
|
||||
"inherits": "Generic PVA @System",
|
||||
"from": "system",
|
||||
"filament_id": "OF86rkt6",
|
||||
"instantiation": "false",
|
||||
"filament_vendor": [
|
||||
"Goofoo"
|
||||
],
|
||||
"filament_type": [
|
||||
"PVA"
|
||||
]
|
||||
}
|
||||
@@ -174,6 +174,8 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/Gizmos/GLGizmoAssembly.hpp
|
||||
GUI/Gizmos/GLGizmoBase.cpp
|
||||
GUI/Gizmos/GLGizmoBase.hpp
|
||||
GUI/Gizmos/GLGizmoAlignment.cpp
|
||||
GUI/Gizmos/GLGizmoAlignment.hpp
|
||||
GUI/Gizmos/GLGizmoBrimEars.cpp
|
||||
GUI/Gizmos/GLGizmoBrimEars.hpp
|
||||
GUI/Gizmos/GLGizmoCut.cpp
|
||||
|
||||
@@ -5520,7 +5520,7 @@ void GLCanvas3D::set_tooltip(const std::string& tooltip)
|
||||
m_tooltip.set_text(tooltip);
|
||||
}
|
||||
|
||||
void GLCanvas3D::do_move(const std::string& snapshot_type)
|
||||
void GLCanvas3D::do_move(const std::string& snapshot_type, bool force_volume_move)
|
||||
{
|
||||
if (m_model == nullptr)
|
||||
return;
|
||||
@@ -5552,10 +5552,18 @@ void GLCanvas3D::do_move(const std::string& snapshot_type)
|
||||
|
||||
// Move instances/volumes
|
||||
ModelObject* model_object = m_model->objects[object_idx];
|
||||
if (model_object == nullptr)
|
||||
if (model_object == nullptr)
|
||||
continue;
|
||||
|
||||
if (selection_mode == Selection::Instance) {
|
||||
if (force_volume_move || selection_mode == Selection::Volume) {
|
||||
auto cur_mv = model_object->volumes[volume_idx];
|
||||
if (cur_mv->get_transformation() != v->get_volume_transformation()) {
|
||||
cur_mv->set_transformation(v->get_volume_transformation());
|
||||
// BBS: backup
|
||||
Slic3r::save_object_mesh(*model_object);
|
||||
}
|
||||
}
|
||||
else if (selection_mode == Selection::Instance) {
|
||||
if (m_canvas_type == GLCanvas3D::ECanvasType::CanvasAssembleView) {
|
||||
if ((model_object->instances[instance_idx]->get_assemble_offset() - v->get_instance_offset()).norm() > 1e-2) {
|
||||
model_object->instances[instance_idx]->set_assemble_transformation(v->get_instance_transformation());
|
||||
@@ -5564,14 +5572,6 @@ void GLCanvas3D::do_move(const std::string& snapshot_type)
|
||||
model_object->instances[instance_idx]->set_transformation(v->get_instance_transformation());
|
||||
}
|
||||
}
|
||||
else if (selection_mode == Selection::Volume) {
|
||||
auto cur_mv = model_object->volumes[volume_idx];
|
||||
if (cur_mv->get_transformation() != v->get_volume_transformation()) {
|
||||
cur_mv->set_transformation(v->get_volume_transformation());
|
||||
// BBS: backup
|
||||
Slic3r::save_object_mesh(*model_object);
|
||||
}
|
||||
}
|
||||
|
||||
object_moved = true;
|
||||
model_object->invalidate_bounding_box();
|
||||
|
||||
@@ -1305,7 +1305,7 @@ public:
|
||||
void set_tooltip(const std::string& tooltip);
|
||||
|
||||
// the following methods add a snapshot to the undo/redo stack, unless the given string is empty
|
||||
void do_move(const std::string& snapshot_type);
|
||||
void do_move(const std::string& snapshot_type, bool force_volume_move = false);
|
||||
void do_rotate(const std::string& snapshot_type);
|
||||
void do_scale(const std::string& snapshot_type);
|
||||
void do_center();
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "Selection.hpp"
|
||||
//BBS: add partplate related logic
|
||||
#include "PartPlate.hpp"
|
||||
#include "Gizmos/GLGizmoAlignment.hpp"
|
||||
#include "Gizmos/GLGizmoEmboss.hpp"
|
||||
#include "Gizmos/GLGizmoSVG.hpp"
|
||||
|
||||
@@ -1672,6 +1673,8 @@ void MenuFactory::create_extra_object_menu()
|
||||
append_menu_item_merge_parts_to_single_part(&m_object_menu);
|
||||
// Object Center
|
||||
append_menu_item_center(&m_object_menu);
|
||||
// Object Align/Distribute
|
||||
append_menu_item_align_distribute(&m_object_menu);
|
||||
// Object Drop
|
||||
append_menu_item_drop(&m_object_menu);
|
||||
// Object Split
|
||||
@@ -1779,6 +1782,7 @@ void MenuFactory::create_text_part_menu()
|
||||
append_menu_item_fix_through_cgal(menu);
|
||||
append_menu_item_simplify(menu);
|
||||
append_menu_item_center(menu);
|
||||
append_menu_item_align_distribute(menu);
|
||||
append_menu_items_mirror(menu);
|
||||
menu->AppendSeparator();
|
||||
append_menu_item_per_object_process(menu);
|
||||
@@ -1811,6 +1815,7 @@ void MenuFactory::create_bbl_part_menu()
|
||||
append_menu_item_simplify(menu);
|
||||
append_menu_item_smooth_mesh(menu);
|
||||
append_menu_item_center(menu);
|
||||
append_menu_item_align_distribute(menu);
|
||||
append_menu_item_drop(menu);
|
||||
append_menu_items_mirror(menu);
|
||||
wxMenu* split_menu = new wxMenu();
|
||||
@@ -2136,6 +2141,7 @@ wxMenu* MenuFactory::multi_selection_menu()
|
||||
index++;
|
||||
}
|
||||
append_menu_item_center(menu);
|
||||
append_menu_item_align_distribute(menu);
|
||||
append_menu_item_drop(menu);
|
||||
append_menu_item_fix_through_cgal(menu);
|
||||
//append_menu_item_simplify(menu);
|
||||
@@ -2144,13 +2150,13 @@ wxMenu* MenuFactory::multi_selection_menu()
|
||||
|
||||
append_menu_item_set_printable(menu);
|
||||
menu->AppendSeparator();
|
||||
|
||||
|
||||
append_menu_item_set_auto_drop(menu);
|
||||
menu->AppendSeparator();
|
||||
|
||||
|
||||
append_menu_item_per_object_process(menu);
|
||||
menu->AppendSeparator();
|
||||
|
||||
|
||||
append_menu_items_convert_unit(menu);
|
||||
append_menu_item_replace_all_with_stl(menu);
|
||||
//BBS
|
||||
@@ -2161,6 +2167,7 @@ wxMenu* MenuFactory::multi_selection_menu()
|
||||
}
|
||||
else {
|
||||
append_menu_item_center(menu);
|
||||
append_menu_item_align_distribute(menu);
|
||||
append_menu_item_drop(menu);
|
||||
append_menu_item_fix_through_cgal(menu);
|
||||
//append_menu_item_simplify(menu);
|
||||
@@ -2325,6 +2332,247 @@ void MenuFactory::append_menu_item_center(wxMenu* menu)
|
||||
}, m_parent);
|
||||
}
|
||||
|
||||
void MenuFactory::append_menu_item_align_distribute(wxMenu *menu)
|
||||
{
|
||||
wxMenu* align_distribute_menu = new wxMenu();
|
||||
if (!align_distribute_menu)
|
||||
return;
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Distribute left-right") + " (X)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->distribute_selection_x();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_distribute(GLGizmoAlignment::AlignType::DISTRIBUTE_X);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Distribute front-back") + " (Y)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->distribute_selection_y();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_distribute(GLGizmoAlignment::AlignType::DISTRIBUTE_Y);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Distribute top-bottom") + " (Z)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->distribute_selection_z();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_distribute(GLGizmoAlignment::AlignType::DISTRIBUTE_Z);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
align_distribute_menu->AppendSeparator();
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align left") + " (-X)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_x_min();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::X_MIN);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align left-right center") + " (X)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_x_center();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::CENTER_X);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align right") + " (+X)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_x_max();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::X_MAX);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
align_distribute_menu->AppendSeparator();
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align front") + " (-Y)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_y_min();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::Y_MIN);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align front-back center") + " (Y)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_y_center();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::CENTER_Y);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align back") + " (+Y)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_y_max();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::Y_MAX);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
align_distribute_menu->AppendSeparator();
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align bottom") + " (-Z)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_z_min();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::Z_MIN);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align top-bottom center") + " (Z)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_z_center();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::CENTER_Z);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_menu_item(
|
||||
align_distribute_menu, wxID_ANY, _L("Align top") + " (+Z)", "",
|
||||
[](wxCommandEvent &) {
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
|
||||
plater()->align_selection_z_max();
|
||||
},
|
||||
"", nullptr,
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
return alignment_helper.can_align(GLGizmoAlignment::AlignType::Z_MAX);
|
||||
},
|
||||
m_parent);
|
||||
|
||||
append_submenu(menu, align_distribute_menu, wxID_ANY, _L("Align/Distribute"), _L("Align and distribute objects"), "",
|
||||
[]() {
|
||||
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
|
||||
return false;
|
||||
auto canvas3d = plater()->get_view3D_canvas3D();
|
||||
GLGizmoAlignment alignment_helper(*canvas3d);
|
||||
|
||||
bool has_any_align = alignment_helper.can_align(GLGizmoAlignment::AlignType::CENTER_X) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::CENTER_Y) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::CENTER_Z) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::X_MAX) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::X_MIN) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::Y_MAX) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::Y_MIN) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::Z_MAX) ||
|
||||
alignment_helper.can_align(GLGizmoAlignment::AlignType::Z_MIN);
|
||||
|
||||
bool has_any_distribute = alignment_helper.can_distribute(GLGizmoAlignment::AlignType::DISTRIBUTE_X) ||
|
||||
alignment_helper.can_distribute(GLGizmoAlignment::AlignType::DISTRIBUTE_Y) ||
|
||||
alignment_helper.can_distribute(GLGizmoAlignment::AlignType::DISTRIBUTE_Z);
|
||||
|
||||
return has_any_align || has_any_distribute;
|
||||
}, m_parent);
|
||||
}
|
||||
|
||||
void MenuFactory::append_menu_item_drop(wxMenu* menu)
|
||||
{
|
||||
append_menu_item(menu, wxID_ANY, _L("Drop") , "",
|
||||
|
||||
@@ -175,6 +175,7 @@ private:
|
||||
void append_menu_item_merge_to_single_object(wxMenu* menu);
|
||||
void append_menu_item_merge_parts_to_single_part(wxMenu *menu);
|
||||
void append_menu_items_mirror(wxMenu *menu);
|
||||
void append_menu_item_align_distribute(wxMenu *menu);
|
||||
void append_menu_item_precise_seam_submenu(wxMenu* menu);
|
||||
void append_menu_item_invalidate_cut_info(wxMenu *menu);
|
||||
void append_menu_item_edit_text(wxMenu *menu);
|
||||
|
||||
@@ -0,0 +1,694 @@
|
||||
#include "GLGizmoAlignment.hpp"
|
||||
#include "slic3r/GUI/GLCanvas3D.hpp"
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
#include "slic3r/GUI/Plater.hpp"
|
||||
#include "libslic3r/Model.hpp"
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
GLGizmoAlignment::GLGizmoAlignment(GLCanvas3D& canvas) : m_canvas(canvas)
|
||||
{
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_objects(AlignType type, bool align_parent)
|
||||
{
|
||||
if (!validate_selection_for_align()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case AlignType::CENTER_X: return align_to_center(type, align_parent);
|
||||
case AlignType::CENTER_Y: return align_to_center(type, align_parent);
|
||||
case AlignType::CENTER_Z: return align_to_center(type, align_parent);
|
||||
case AlignType::Y_MAX: return align_to_y_max(align_parent);
|
||||
case AlignType::Y_MIN: return align_to_y_min(align_parent);
|
||||
case AlignType::X_MAX: return align_to_x_max(align_parent);
|
||||
case AlignType::X_MIN: return align_to_x_min(align_parent);
|
||||
case AlignType::Z_MAX: return align_to_z_max(align_parent);
|
||||
case AlignType::Z_MIN: return align_to_z_min(align_parent);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::distribute_objects(AlignType type)
|
||||
{
|
||||
if (!can_distribute(type)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case AlignType::DISTRIBUTE_X:
|
||||
return distribute_x();
|
||||
case AlignType::DISTRIBUTE_Y:
|
||||
return distribute_y();
|
||||
case AlignType::DISTRIBUTE_Z:
|
||||
return distribute_z();
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_y_max(bool align_parent)
|
||||
{
|
||||
return align_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.bbox.max.y(); },
|
||||
[](Vec3d& displacement, double target, double current_max) {
|
||||
displacement.y() = target - current_max;
|
||||
}, "Align Y Max", align_parent
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_y_min(bool align_parent)
|
||||
{
|
||||
return align_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.bbox.min.y(); },
|
||||
[](Vec3d& displacement, double target, double current_min) {
|
||||
displacement.y() = target - current_min;
|
||||
}, "Align Y Min", align_parent
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_x_max(bool align_parent)
|
||||
{
|
||||
return align_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.bbox.max.x(); },
|
||||
[](Vec3d& displacement, double target, double current_max) {
|
||||
displacement.x() = target - current_max;
|
||||
}, "Align X Max", align_parent
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_x_min(bool align_parent)
|
||||
{
|
||||
return align_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.bbox.min.x(); },
|
||||
[](Vec3d& displacement, double target, double current_min) {
|
||||
displacement.x() = target - current_min;
|
||||
}, "Align X Min", align_parent
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_center(AlignType type,bool align_parent)
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
std::string type_str = type == AlignType::CENTER_X ? "X" : (type == AlignType::CENTER_Y ? "Y" : "Z");
|
||||
std::string operation_name = type == AlignType::CENTER_X ? "X Center" : (type == AlignType::CENTER_Y ? "Y Center" : "Z Center");
|
||||
double selection_center = 0.f;
|
||||
if (align_parent) {
|
||||
selection_center = get_current_coord(operation_name, m_parent_box);
|
||||
|
||||
// Handle multiple volume selection
|
||||
if (is_part_align_parent()) {
|
||||
if (!take_snapshot("Align to parent center " + type_str)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
auto selection_bbox = selection.get_bounding_box();
|
||||
double current_coord = get_current_coord(operation_name, selection_bbox);
|
||||
Vec3d displacement = generate_displacement(operation_name, selection_center - current_coord);
|
||||
// Move each selected volume to align to the center of their collective bounding box
|
||||
for (unsigned int idx : selection.get_volume_idxs()) {
|
||||
const GLVolume *volume = selection.get_volume(idx);
|
||||
if (volume) {
|
||||
get_selection().translate(volume->object_idx(), volume->instance_idx(), volume->volume_idx(), displacement);
|
||||
}
|
||||
}
|
||||
finish_operation("Align to parent center " + type_str);
|
||||
return true;
|
||||
}
|
||||
BoundingBoxf3 big_bb;
|
||||
auto objects = get_selected_objects_info(big_bb);
|
||||
if (objects.empty()) return false;
|
||||
// Handle multiple objects or parts selection
|
||||
|
||||
BoundingBoxf3 selection_bbox = selection.get_bounding_box();
|
||||
if (!take_snapshot("Align to parent center " + type_str)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
double current_coord = get_current_coord(operation_name, big_bb);
|
||||
Vec3d displacement = generate_displacement(operation_name, selection_center - current_coord);
|
||||
// Multiple objects: use selection bounding box for alignment
|
||||
for (const auto &obj : objects) {
|
||||
apply_transformation(obj.object_idx, obj.instance_idx, displacement);
|
||||
}
|
||||
|
||||
finish_operation("Align to parent center " + type_str);
|
||||
return true;
|
||||
}
|
||||
// Handle single object selection// Handle multiple volume selection
|
||||
if (selection.is_single_full_object() ||
|
||||
selection.is_multiple_volume() || selection.is_multiple_modifier() || selection.is_single_volume() || selection.is_single_modifier()) {
|
||||
if (!take_snapshot("Align Parts Center " + type_str)){
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
BoundingBoxf3 selection_bbox = selection.get_bounding_box();
|
||||
selection_center = get_current_coord(operation_name, selection_bbox);
|
||||
|
||||
// Move each selected volume to align to the center of their collective bounding box
|
||||
for (unsigned int idx : selection.get_volume_idxs()) {
|
||||
const GLVolume* volume = selection.get_volume(idx);
|
||||
if (volume) {
|
||||
auto temp_box = volume->transformed_convex_hull_bounding_box();
|
||||
double current = get_current_coord(operation_name, temp_box);
|
||||
double offset = selection_center - current;
|
||||
Vec3d displacement = generate_displacement(operation_name, offset);
|
||||
get_selection().translate(volume->object_idx(), volume->instance_idx(), volume->volume_idx(), displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation("Align Parts Center" + type_str, true);
|
||||
return true;
|
||||
}
|
||||
BoundingBoxf3 big_bb;
|
||||
auto objects = get_selected_objects_info(big_bb);
|
||||
if (objects.empty()) return false;
|
||||
// Handle multiple objects or parts selection
|
||||
if (selection.is_multiple_full_object()) {
|
||||
BoundingBoxf3 selection_bbox = selection.get_bounding_box();
|
||||
double selection_center = get_current_coord(operation_name, selection_bbox);
|
||||
|
||||
if (!take_snapshot("Align Objects Center" + type_str)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
// Multiple objects: use selection bounding box for alignment
|
||||
for (const auto& obj : objects) {
|
||||
BoundingBoxf3 temp_bbox = obj.bbox;
|
||||
double current_coord = get_current_coord(operation_name, temp_bbox);
|
||||
Vec3d displacement = generate_displacement(operation_name, selection_center - current_coord);
|
||||
apply_transformation(obj.object_idx, obj.instance_idx, displacement);
|
||||
}
|
||||
finish_operation("Align Objects Center" + type_str);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_z_max(bool align_parent)
|
||||
{
|
||||
return align_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.bbox.max.z(); },
|
||||
[](Vec3d& displacement, double target, double current_max) {
|
||||
displacement.z() = target - current_max;
|
||||
}, "Align Z Max", align_parent
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::align_to_z_min(bool align_parent)
|
||||
{
|
||||
return align_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.bbox.min.z(); },
|
||||
[](Vec3d& displacement, double target, double current_min) {
|
||||
displacement.z() = target - current_min;
|
||||
}, "Align Z Min", align_parent
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::distribute_y()
|
||||
{
|
||||
return distribute_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.center.y(); },
|
||||
1,
|
||||
"Distribute Y"
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::distribute_x()
|
||||
{
|
||||
return distribute_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.center.x(); },
|
||||
0,
|
||||
"Distribute X"
|
||||
);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::distribute_z()
|
||||
{
|
||||
return distribute_objects_generic(
|
||||
[](const ObjectInfo& obj) { return obj.center.z(); },
|
||||
2,
|
||||
"Distribute Z"
|
||||
);
|
||||
}
|
||||
|
||||
template<typename GetCoordFunc, typename SetCoordFunc>
|
||||
bool GLGizmoAlignment::align_objects_generic(GetCoordFunc get_coord, SetCoordFunc set_coord, const std::string &operation_name ,bool align_parent)
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
if (align_parent) {
|
||||
// Find reference coordinate
|
||||
double reference_coord = get_current_coord(operation_name, m_parent_box);
|
||||
// Handle parts selection differently
|
||||
if (is_part_align_parent()) {
|
||||
if (!take_snapshot("align to parent node " + operation_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
// Get all selected volumes
|
||||
std::vector<const GLVolume *> volumes;
|
||||
for (unsigned int idx : selection.get_volume_idxs()) {
|
||||
const GLVolume *volume = selection.get_volume(idx);
|
||||
if (volume) { volumes.push_back(volume); }
|
||||
}
|
||||
|
||||
if (volumes.empty())
|
||||
return false;
|
||||
BoundingBoxf3 selection_bbox = selection.get_bounding_box();
|
||||
double current_coord = get_current_coord(operation_name, selection_bbox);
|
||||
Vec3d displacement = generate_displacement(operation_name, reference_coord - current_coord);
|
||||
for (const GLVolume *volume : volumes) {
|
||||
if (displacement.norm() > 1e-6) {
|
||||
get_selection().translate(volume->object_idx(), volume->instance_idx(), volume->volume_idx(), displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation("align to parent node " + operation_name);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Handle objects selection (original logic)
|
||||
BoundingBoxf3 big_bb;
|
||||
auto objects = get_selected_objects_info(big_bb);
|
||||
if (objects.empty()) return false;
|
||||
|
||||
if (!take_snapshot("align to parent node " + operation_name)) { return false; }
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
double current_coord = get_current_coord(operation_name, big_bb);
|
||||
Vec3d displacement = generate_displacement(operation_name, reference_coord - current_coord);
|
||||
|
||||
for (const auto &obj : objects) {
|
||||
if (displacement.norm() > 1e-6) {
|
||||
apply_transformation(obj.object_idx, obj.instance_idx, displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation("align to parent node " + operation_name);
|
||||
return true;
|
||||
}
|
||||
// Handle parts selection differently
|
||||
if (selection.is_single_full_object() || selection.is_multiple_volume() || selection.is_multiple_modifier()) {
|
||||
if (!take_snapshot(operation_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
// Get all selected volumes
|
||||
std::vector<const GLVolume*> volumes;
|
||||
for (unsigned int idx : selection.get_volume_idxs()) {
|
||||
const GLVolume* volume = selection.get_volume(idx);
|
||||
if (volume) {
|
||||
volumes.push_back(volume);
|
||||
}
|
||||
}
|
||||
|
||||
if (volumes.empty()) return false;
|
||||
|
||||
// Find reference coordinate
|
||||
double reference_coord = 0.0;
|
||||
bool first = true;
|
||||
|
||||
for (const GLVolume* volume : volumes) {
|
||||
BoundingBoxf3 bbox = volume->transformed_convex_hull_bounding_box();
|
||||
double coord = 0.0;
|
||||
|
||||
if (operation_name.find("X Max") != std::string::npos) {
|
||||
coord = bbox.max.x();
|
||||
} else if (operation_name.find("X Min") != std::string::npos) {
|
||||
coord = bbox.min.x();
|
||||
} else if (operation_name.find("Y Max") != std::string::npos) {
|
||||
coord = bbox.max.y();
|
||||
} else if (operation_name.find("Y Min") != std::string::npos) {
|
||||
coord = bbox.min.y();
|
||||
} else if (operation_name.find("Z Max") != std::string::npos) {
|
||||
coord = bbox.max.z();
|
||||
} else if (operation_name.find("Z Min") != std::string::npos) {
|
||||
coord = bbox.min.z();
|
||||
}
|
||||
|
||||
if (first) {
|
||||
reference_coord = coord;
|
||||
first = false;
|
||||
} else {
|
||||
if (operation_name.find("Max") != std::string::npos) {
|
||||
reference_coord = std::max(reference_coord, coord);
|
||||
} else if (operation_name.find("Min") != std::string::npos) {
|
||||
reference_coord = std::min(reference_coord, coord);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const GLVolume* volume : volumes) {
|
||||
BoundingBoxf3 bbox = volume->transformed_convex_hull_bounding_box();
|
||||
double current_coord = 0.0;
|
||||
|
||||
if (operation_name.find("X Max") != std::string::npos) {
|
||||
current_coord = bbox.max.x();
|
||||
} else if (operation_name.find("X Min") != std::string::npos) {
|
||||
current_coord = bbox.min.x();
|
||||
} else if (operation_name.find("Y Max") != std::string::npos) {
|
||||
current_coord = bbox.max.y();
|
||||
} else if (operation_name.find("Y Min") != std::string::npos) {
|
||||
current_coord = bbox.min.y();
|
||||
} else if (operation_name.find("Z Max") != std::string::npos) {
|
||||
current_coord = bbox.max.z();
|
||||
} else if (operation_name.find("Z Min") != std::string::npos) {
|
||||
current_coord = bbox.min.z();
|
||||
}
|
||||
|
||||
Vec3d displacement = Vec3d::Zero();
|
||||
|
||||
if (operation_name.find("X") != std::string::npos) {
|
||||
displacement.x() = reference_coord - current_coord;
|
||||
} else if (operation_name.find("Y") != std::string::npos) {
|
||||
displacement.y() = reference_coord - current_coord;
|
||||
} else if (operation_name.find("Z") != std::string::npos) {
|
||||
displacement.z() = reference_coord - current_coord;
|
||||
}
|
||||
|
||||
if (displacement.norm() > 1e-6) {
|
||||
get_selection().translate(volume->object_idx(), volume->instance_idx(), volume->volume_idx(), displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation(operation_name,true);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Handle objects selection (original logic)
|
||||
BoundingBoxf3 big_bb;
|
||||
auto objects = get_selected_objects_info(big_bb);
|
||||
if (objects.empty()) return false;
|
||||
|
||||
if (!take_snapshot(operation_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
double reference_coord = get_coord(objects[0]);
|
||||
for (const auto& obj : objects) {
|
||||
double coord = get_coord(obj);
|
||||
if (operation_name.find("Max") != std::string::npos) {
|
||||
reference_coord = std::max(reference_coord, coord);
|
||||
} else if (operation_name.find("Min") != std::string::npos) {
|
||||
reference_coord = std::min(reference_coord, coord);
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto& obj : objects) {
|
||||
double current_coord = get_coord(obj);
|
||||
Vec3d displacement = Vec3d::Zero();
|
||||
set_coord(displacement, reference_coord, current_coord);
|
||||
|
||||
if (displacement.norm() > 1e-6) {
|
||||
apply_transformation(obj.object_idx, obj.instance_idx, displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation(operation_name);
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename GetCoordFunc>
|
||||
bool GLGizmoAlignment::distribute_objects_generic(GetCoordFunc get_coord, int axis, const std::string& operation_name)
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
|
||||
if (selection.is_single_full_object() || selection.is_multiple_volume() || selection.is_multiple_modifier()) {
|
||||
std::vector<const GLVolume*> volumes;
|
||||
for (unsigned int idx : selection.get_volume_idxs()) {
|
||||
const GLVolume* v = selection.get_volume(idx);
|
||||
if (v) volumes.push_back(v);
|
||||
}
|
||||
|
||||
if (volumes.size() < 3) return false;
|
||||
if (!take_snapshot(operation_name)) {
|
||||
return false;
|
||||
}
|
||||
get_selection().setup_cache();
|
||||
|
||||
struct VolEntry { const GLVolume* v; double coord; };
|
||||
std::vector<VolEntry> entries;
|
||||
entries.reserve(volumes.size());
|
||||
for (const GLVolume* v : volumes) {
|
||||
BoundingBoxf3 bbox = v->transformed_convex_hull_bounding_box();
|
||||
Vec3d c = bbox.center();
|
||||
double coord = (axis == 0 ? c.x() : axis == 1 ? c.y() : c.z());
|
||||
entries.push_back({v, coord});
|
||||
}
|
||||
|
||||
std::sort(entries.begin(), entries.end(), [](const VolEntry& a, const VolEntry& b){ return a.coord < b.coord; });
|
||||
|
||||
BoundingBoxf3 selection_bbox = selection.get_bounding_box();
|
||||
BoundingBoxf3 left_bbox = entries.front().v->transformed_convex_hull_bounding_box();
|
||||
BoundingBoxf3 right_bbox = entries.back().v->transformed_convex_hull_bounding_box();
|
||||
auto axis_extent = [&](const BoundingBoxf3 &bb) { return (axis == 0 ? (bb.max.x() - bb.min.x()) : axis == 1 ? (bb.max.y() - bb.min.y()) : (bb.max.z() - bb.min.z())); };
|
||||
double left_width = axis_extent(left_bbox);
|
||||
double right_width = axis_extent(right_bbox);
|
||||
double bbox_min = (axis == 0 ? selection_bbox.min.x() : axis == 1 ? selection_bbox.min.y() : selection_bbox.min.z());
|
||||
double bbox_max = (axis == 0 ? selection_bbox.max.x() : axis == 1 ? selection_bbox.max.y() : selection_bbox.max.z());
|
||||
double min_center = bbox_min + left_width * 0.5;
|
||||
double max_center = bbox_max - right_width * 0.5;
|
||||
double total_distance = max_center - min_center;
|
||||
double interval = (entries.size() > 1) ? total_distance / (entries.size() - 1) : 0;
|
||||
for (size_t i = 1; i < entries.size() - 1; ++i) {
|
||||
double target_coord = min_center + i * interval;
|
||||
double current_coord = entries[i].coord;
|
||||
double offset = target_coord - current_coord;
|
||||
|
||||
if (std::abs(offset) > 1e-6) {
|
||||
Vec3d displacement = Vec3d::Zero();
|
||||
displacement[axis] = offset;
|
||||
const GLVolume *v = entries[i].v;
|
||||
get_selection().translate(v->object_idx(), v->instance_idx(), v->volume_idx(), displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation(operation_name,true);
|
||||
return true;
|
||||
}
|
||||
BoundingBoxf3 big_bb;
|
||||
auto objects = get_selected_objects_info(big_bb);
|
||||
if (objects.size() < 3) return false;
|
||||
|
||||
if (!take_snapshot(operation_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
get_selection().setup_cache();
|
||||
|
||||
std::sort(objects.begin(), objects.end(),
|
||||
[&get_coord](const ObjectInfo& a, const ObjectInfo& b) {
|
||||
return get_coord(a) < get_coord(b);
|
||||
});
|
||||
|
||||
double min_coord = get_coord(objects.front());
|
||||
double max_coord = get_coord(objects.back());
|
||||
double total_distance = max_coord - min_coord;
|
||||
double interval = (objects.size() > 1) ? total_distance / (objects.size() - 1) : 0;
|
||||
for (size_t i = 1; i < objects.size() - 1; ++i) {
|
||||
double target_coord = min_coord + i * interval;
|
||||
double current_coord = get_coord(objects[i]);
|
||||
double offset = target_coord - current_coord;
|
||||
|
||||
if (std::abs(offset) > 1e-6) {
|
||||
Vec3d displacement = Vec3d::Zero();
|
||||
displacement[axis] = offset;
|
||||
apply_transformation(objects[i].object_idx, objects[i].instance_idx, displacement);
|
||||
}
|
||||
}
|
||||
|
||||
finish_operation(operation_name);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::can_align(AlignType type) const
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
|
||||
bool is_single_object = selection.is_single_full_object();
|
||||
bool is_multiple_objects = selection.is_multiple_full_object();
|
||||
bool is_single_part = selection.is_single_volume() || selection.is_single_modifier();
|
||||
bool is_multiple_parts = selection.is_multiple_volume() || selection.is_multiple_modifier();
|
||||
|
||||
|
||||
return validate_selection_for_align();
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::can_distribute(AlignType type) const
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
if (selection.is_single_full_object()) {
|
||||
size_t count = selection.get_volume_idxs().size();
|
||||
if (count >= 3)
|
||||
return true;
|
||||
}
|
||||
if (selection.is_single_volume() ||
|
||||
selection.is_single_modifier()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (selection.is_multiple_volume() || selection.is_multiple_modifier()) {
|
||||
size_t count = selection.get_volume_idxs().size();
|
||||
if (count < 3) return false;
|
||||
return (type == AlignType::DISTRIBUTE_X ||
|
||||
type == AlignType::DISTRIBUTE_Y ||
|
||||
type == AlignType::DISTRIBUTE_Z);
|
||||
}
|
||||
|
||||
if (selection.is_multiple_full_object()) {
|
||||
BoundingBoxf3 big_bb;
|
||||
auto objects = get_selected_objects_info(big_bb);
|
||||
if (objects.size() < 3) return false;
|
||||
return (type == AlignType::DISTRIBUTE_X || type == AlignType::DISTRIBUTE_Y || type == AlignType::DISTRIBUTE_Z);
|
||||
}
|
||||
|
||||
return validate_selection_for_distribute();
|
||||
}
|
||||
|
||||
double GLGizmoAlignment::get_current_coord(std::string operation_name, BoundingBoxf3 &bbox)
|
||||
{
|
||||
double current_coord = 0.0;
|
||||
if (operation_name.find("X Max") != std::string::npos) {
|
||||
current_coord = bbox.max.x();
|
||||
} else if (operation_name.find("X Min") != std::string::npos) {
|
||||
current_coord = bbox.min.x();
|
||||
} else if (operation_name.find("Y Max") != std::string::npos) {
|
||||
current_coord = bbox.max.y();
|
||||
} else if (operation_name.find("Y Min") != std::string::npos) {
|
||||
current_coord = bbox.min.y();
|
||||
} else if (operation_name.find("Z Max") != std::string::npos) {
|
||||
current_coord = bbox.max.z();
|
||||
} else if (operation_name.find("Z Min") != std::string::npos) {
|
||||
current_coord = bbox.min.z();
|
||||
} else if (operation_name.find("X Center") != std::string::npos) {
|
||||
current_coord = bbox.center().x();
|
||||
} else if (operation_name.find("Y Center") != std::string::npos) {
|
||||
current_coord = bbox.center().y();
|
||||
} else if (operation_name.find("Z Center") != std::string::npos) {
|
||||
current_coord = bbox.center().z();
|
||||
}
|
||||
return current_coord;
|
||||
}
|
||||
|
||||
Vec3d GLGizmoAlignment::generate_displacement(std::string operation_name, double offset) {
|
||||
Vec3d displacement = Vec3d::Zero();
|
||||
if (operation_name.find("X") != std::string::npos) {
|
||||
displacement.x() = offset;
|
||||
} else if (operation_name.find("Y") != std::string::npos) {
|
||||
displacement.y() = offset;
|
||||
} else if (operation_name.find("Z") != std::string::npos) {
|
||||
displacement.z() = offset;
|
||||
}
|
||||
return displacement;
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::is_part_align_parent()
|
||||
{
|
||||
Selection &selection = get_selection();
|
||||
if (selection.is_multiple_volume() || selection.is_multiple_modifier() || selection.is_single_volume() || selection.is_single_modifier()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<GLGizmoAlignment::ObjectInfo> GLGizmoAlignment::get_selected_objects_info(BoundingBoxf3 &big_bb) const
|
||||
{
|
||||
std::vector<ObjectInfo> objects;
|
||||
Selection& selection = get_selection();
|
||||
|
||||
if (selection.is_empty()) return objects;
|
||||
|
||||
const auto& content = selection.get_content();
|
||||
for (const auto& obj_it : content) {
|
||||
for (const auto& inst_idx : obj_it.second) {
|
||||
int obj_idx = obj_it.first;
|
||||
|
||||
if (obj_idx >= 0 && obj_idx < selection.get_model()->objects.size()) {
|
||||
ModelObject* object = selection.get_model()->objects[obj_idx];
|
||||
if (inst_idx >= 0 && inst_idx < object->instances.size()) {
|
||||
BoundingBoxf3 bbox = object->instance_bounding_box(inst_idx);
|
||||
big_bb.merge(bbox);
|
||||
objects.emplace_back(obj_idx, inst_idx, bbox);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return objects;
|
||||
}
|
||||
|
||||
void GLGizmoAlignment::set_parent_box(const BoundingBoxf3 &bb) {
|
||||
m_parent_box = bb;
|
||||
}
|
||||
|
||||
Selection& GLGizmoAlignment::get_selection() const
|
||||
{
|
||||
return m_canvas.get_selection();
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::take_snapshot(const std::string& name)
|
||||
{
|
||||
wxGetApp().plater()->take_snapshot(name);
|
||||
return true;
|
||||
}
|
||||
|
||||
void GLGizmoAlignment::apply_transformation(int obj_idx, int inst_idx, const Vec3d& displacement)
|
||||
{
|
||||
get_selection().translate(obj_idx, inst_idx, displacement);
|
||||
}
|
||||
|
||||
void GLGizmoAlignment::finish_operation(const std::string &operation_name, bool force_volume_move)
|
||||
{
|
||||
get_selection().notify_instance_update(-1, -1);
|
||||
m_canvas.do_move(operation_name, force_volume_move);
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::validate_selection_for_align() const
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
|
||||
if (selection.is_single_full_object() ||
|
||||
selection.is_single_volume() ||
|
||||
selection.is_single_modifier()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return selection.get_volume_idxs().size() >= 2;
|
||||
}
|
||||
|
||||
bool GLGizmoAlignment::validate_selection_for_distribute() const
|
||||
{
|
||||
const Selection& selection = get_selection();
|
||||
|
||||
if (selection.is_single_full_object() || selection.is_multiple_full_object()) {
|
||||
std::set<int> object_indices;
|
||||
for (int volume_idx : selection.get_volume_idxs()) {
|
||||
const GLVolume* volume = selection.get_volume(volume_idx);
|
||||
if (volume) {
|
||||
object_indices.insert(volume->object_idx());
|
||||
}
|
||||
}
|
||||
return object_indices.size() >= 3;
|
||||
}
|
||||
|
||||
return selection.get_volume_idxs().size() >= 3;
|
||||
}
|
||||
|
||||
} // namespace GUI
|
||||
} // namespace Slic3r
|
||||
@@ -0,0 +1,95 @@
|
||||
#ifndef slic3r_GLGizmoAlignment_hpp_
|
||||
#define slic3r_GLGizmoAlignment_hpp_
|
||||
|
||||
#include "libslic3r/Point.hpp"
|
||||
#include "libslic3r/BoundingBox.hpp"
|
||||
#include "slic3r/GUI/Selection.hpp"
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
class GLCanvas3D;
|
||||
|
||||
class GLGizmoAlignment
|
||||
{
|
||||
public:
|
||||
enum class AlignType {
|
||||
NONE = -1,
|
||||
CENTER_X,
|
||||
CENTER_Y,
|
||||
CENTER_Z,
|
||||
Y_MAX,
|
||||
Y_MIN,
|
||||
X_MAX,
|
||||
X_MIN,
|
||||
Z_MAX,
|
||||
Z_MIN,
|
||||
DISTRIBUTE_X,
|
||||
DISTRIBUTE_Y,
|
||||
DISTRIBUTE_Z
|
||||
};
|
||||
struct ObjectInfo {
|
||||
int object_idx;
|
||||
int instance_idx;
|
||||
BoundingBoxf3 bbox;
|
||||
Vec3d center;
|
||||
|
||||
ObjectInfo(int obj_idx, int inst_idx, const BoundingBoxf3& bb)
|
||||
: object_idx(obj_idx), instance_idx(inst_idx), bbox(bb), center(bb.center()) {}
|
||||
};
|
||||
|
||||
explicit GLGizmoAlignment(GLCanvas3D& canvas);
|
||||
~GLGizmoAlignment() = default;
|
||||
|
||||
bool align_objects(AlignType type,bool align_parent = false);
|
||||
bool distribute_objects(AlignType type);
|
||||
|
||||
bool align_to_center(AlignType type,bool align_parent = false);
|
||||
bool align_to_y_max(bool align_parent = false);
|
||||
bool align_to_y_min(bool align_parent = false);
|
||||
bool align_to_x_max(bool align_parent = false);
|
||||
bool align_to_x_min(bool align_parent = false);
|
||||
bool align_to_z_max(bool align_parent = false);
|
||||
bool align_to_z_min(bool align_parent = false);
|
||||
|
||||
bool distribute_x();
|
||||
bool distribute_y();
|
||||
bool distribute_z();
|
||||
|
||||
bool can_align(AlignType type) const;
|
||||
bool can_distribute(AlignType type) const;
|
||||
|
||||
std::vector<ObjectInfo> get_selected_objects_info(BoundingBoxf3 &big_bb) const;
|
||||
double get_current_coord(std::string operation_name, BoundingBoxf3 &bbox);
|
||||
Vec3d generate_displacement(std::string operation_name, double offset);
|
||||
bool is_part_align_parent();
|
||||
void set_parent_box(const BoundingBoxf3 &bb);
|
||||
|
||||
private:
|
||||
GLCanvas3D& m_canvas;
|
||||
|
||||
template<typename GetCoordFunc, typename SetCoordFunc>
|
||||
bool align_objects_generic(GetCoordFunc get_coord, SetCoordFunc set_coord, const std::string &operation_name, bool align_parent = false);
|
||||
|
||||
template<typename GetCoordFunc>
|
||||
bool distribute_objects_generic(GetCoordFunc get_coord, int axis,
|
||||
const std::string& operation_name);
|
||||
|
||||
Selection& get_selection() const;
|
||||
bool take_snapshot(const std::string& name);
|
||||
void apply_transformation(int obj_idx, int inst_idx, const Vec3d& displacement);
|
||||
void finish_operation(const std::string &operation_name, bool force_volume_move = false);
|
||||
|
||||
bool validate_selection_for_align() const;
|
||||
bool validate_selection_for_distribute() const;
|
||||
|
||||
private:
|
||||
BoundingBoxf3 m_parent_box;
|
||||
};
|
||||
|
||||
} // namespace GUI
|
||||
} // namespace Slic3r
|
||||
|
||||
#endif // slic3r_GLGizmoAlignment_hpp_
|
||||
@@ -470,6 +470,37 @@ bool GLGizmosManager::check_gizmos_closed_except(EType type) const
|
||||
return true;
|
||||
}
|
||||
|
||||
// Switches the active plate to the one containing the first selected object,
|
||||
// so that subsequent operations (align/distribute) act on a plate the user
|
||||
// can actually see.
|
||||
void GLGizmosManager::check_object_located_outside_plate(bool change_plate)
|
||||
{
|
||||
PartPlateList& plate_list = wxGetApp().plater()->get_partplate_list();
|
||||
auto curr_plate_index = plate_list.get_curr_plate_index();
|
||||
Selection& selection = m_parent.get_selection();
|
||||
auto idxs = selection.get_volume_idxs();
|
||||
if (idxs.empty())
|
||||
return;
|
||||
|
||||
const GLVolume* v = selection.get_volume(*idxs.begin());
|
||||
int object_idx = v->object_idx();
|
||||
const Model* model = m_parent.get_model();
|
||||
if (object_idx < 0 || object_idx >= (int) model->objects.size())
|
||||
return;
|
||||
|
||||
ModelObject* model_object = model->objects[object_idx];
|
||||
for (size_t i = 0; i < plate_list.get_plate_count(); ++i) {
|
||||
auto plate = plate_list.get_plate(i);
|
||||
for (auto object : plate->get_objects_on_this_plate()) {
|
||||
if (model_object == object) {
|
||||
if (change_plate && curr_plate_index != (int) i)
|
||||
plate_list.select_plate(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GLGizmosManager::set_hover_id(int id)
|
||||
{
|
||||
// Measure and assembly handles hover by itself
|
||||
|
||||
@@ -261,6 +261,7 @@ public:
|
||||
void reset_all_states();
|
||||
bool open_gizmo(EType type);
|
||||
bool check_gizmos_closed_except(EType) const;
|
||||
void check_object_located_outside_plate(bool change_plate = true);
|
||||
|
||||
void set_hover_id(int id);
|
||||
|
||||
|
||||
@@ -245,6 +245,7 @@
|
||||
#include "Widgets/MultiNozzleSync.hpp" // NozzleOption, tryPopUpMultiNozzleDialog, setExtruderNozzleCount
|
||||
#include "DeviceCore/DevNozzleSystem.h" // DevNozzle, GetExtNozzles / GetRackNozzles
|
||||
#include "ProjectDirtyStateManager.hpp"
|
||||
#include "Gizmos/GLGizmoAlignment.hpp"
|
||||
#include "Gizmos/GLGizmoSimplify.hpp" // create suggestion notification
|
||||
#include "Gizmos/GLGizmoSVG.hpp" // Drop SVG file
|
||||
#include "Gizmos/GizmoObjectManipulation.hpp"
|
||||
@@ -7484,6 +7485,18 @@ struct Plater::priv
|
||||
void delete_all_objects_from_model();
|
||||
void reset(bool apply_presets_change = false, bool reload_presets = true);
|
||||
void center_selection();
|
||||
void distribute_selection_x();
|
||||
void distribute_selection_y();
|
||||
void distribute_selection_z();
|
||||
void align_selection_x_min();
|
||||
void align_selection_x_center();
|
||||
void align_selection_x_max();
|
||||
void align_selection_y_min();
|
||||
void align_selection_y_center();
|
||||
void align_selection_y_max();
|
||||
void align_selection_z_min();
|
||||
void align_selection_z_center();
|
||||
void align_selection_z_max();
|
||||
void drop_selection();
|
||||
void mirror(Axis axis);
|
||||
void split_object(bool auto_drop = true);
|
||||
@@ -10913,6 +10926,78 @@ void Plater::priv::center_selection()
|
||||
view3D->center_selected();
|
||||
}
|
||||
|
||||
void Plater::priv::distribute_selection_x()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.distribute_objects(GLGizmoAlignment::AlignType::DISTRIBUTE_X);
|
||||
}
|
||||
|
||||
void Plater::priv::distribute_selection_y()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.distribute_objects(GLGizmoAlignment::AlignType::DISTRIBUTE_Y);
|
||||
}
|
||||
|
||||
void Plater::priv::distribute_selection_z()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.distribute_objects(GLGizmoAlignment::AlignType::DISTRIBUTE_Z);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_x_min()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::X_MIN);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_x_center()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::CENTER_X);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_x_max()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::X_MAX);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_y_min()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::Y_MIN);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_y_center()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::CENTER_Y);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_y_max()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::Y_MAX);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_z_min()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::Z_MIN);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_z_center()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::CENTER_Z);
|
||||
}
|
||||
|
||||
void Plater::priv::align_selection_z_max()
|
||||
{
|
||||
GLGizmoAlignment alignment_helper(*view3D->get_canvas3d());
|
||||
alignment_helper.align_objects(GLGizmoAlignment::AlignType::Z_MAX);
|
||||
}
|
||||
|
||||
void Plater::priv::drop_selection()
|
||||
{
|
||||
view3D->drop_selected();
|
||||
@@ -22226,6 +22311,18 @@ void Plater::suppress_background_process(const bool stop_background_process)
|
||||
BackgroundSlicingProcess& Plater::background_process() { return p->background_process; }
|
||||
|
||||
void Plater::center_selection() { p->center_selection(); }
|
||||
void Plater::distribute_selection_x() { p->distribute_selection_x(); }
|
||||
void Plater::distribute_selection_y() { p->distribute_selection_y(); }
|
||||
void Plater::distribute_selection_z() { p->distribute_selection_z(); }
|
||||
void Plater::align_selection_x_min() { p->align_selection_x_min(); }
|
||||
void Plater::align_selection_x_center() { p->align_selection_x_center(); }
|
||||
void Plater::align_selection_x_max() { p->align_selection_x_max(); }
|
||||
void Plater::align_selection_y_min() { p->align_selection_y_min(); }
|
||||
void Plater::align_selection_y_center() { p->align_selection_y_center(); }
|
||||
void Plater::align_selection_y_max() { p->align_selection_y_max(); }
|
||||
void Plater::align_selection_z_min() { p->align_selection_z_min(); }
|
||||
void Plater::align_selection_z_center() { p->align_selection_z_center(); }
|
||||
void Plater::align_selection_z_max() { p->align_selection_z_max(); }
|
||||
void Plater::drop_selection() { p->drop_selection(); }
|
||||
void Plater::mirror(Axis axis) { p->mirror(axis); }
|
||||
void Plater::split_object(bool auto_drop) { p->split_object(auto_drop); }
|
||||
|
||||
@@ -762,6 +762,18 @@ public:
|
||||
//BBS: add clone logic
|
||||
void clone_selection();
|
||||
void center_selection();
|
||||
void distribute_selection_x();
|
||||
void distribute_selection_y();
|
||||
void distribute_selection_z();
|
||||
void align_selection_x_min();
|
||||
void align_selection_x_center();
|
||||
void align_selection_x_max();
|
||||
void align_selection_y_min();
|
||||
void align_selection_y_center();
|
||||
void align_selection_y_max();
|
||||
void align_selection_z_min();
|
||||
void align_selection_z_center();
|
||||
void align_selection_z_max();
|
||||
void drop_selection();
|
||||
void search(bool plater_is_active, Preset::Type type, wxWindow *tag, TextInput *etag, wxWindow *stag);
|
||||
void mirror(Axis axis);
|
||||
|
||||
Reference in New Issue
Block a user