mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-16 21:42:43 +00:00
Compare commits
38
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
08577429ac | ||
|
|
5a14fa2581 | ||
|
|
b4633dc863 | ||
|
|
fbea2072f9 | ||
|
|
0d49816796 | ||
|
|
696778e8e2 | ||
|
|
9b1f7ed928 | ||
|
|
3364fc4d4c | ||
|
|
a5f1bf7fa8 | ||
|
|
781b187e40 | ||
|
|
8e49fa1ade | ||
|
|
3607d805c7 | ||
|
|
b46f46f47d | ||
|
|
08b1447276 | ||
|
|
bd700071f2 | ||
|
|
9208767b18 | ||
|
|
3537bd29ae | ||
|
|
90aa9b1268 | ||
|
|
7101f5ba53 | ||
|
|
f92cce494a | ||
|
|
a9c0e3a1c5 | ||
|
|
6060777dd0 | ||
|
|
08ba3af15d | ||
|
|
1a9332f91f | ||
|
|
3f9fa08c92 | ||
|
|
bc76677e51 | ||
|
|
cd029a3727 | ||
|
|
f82b50f521 | ||
|
|
8396fc0622 | ||
|
|
e1c9915d49 | ||
|
|
0de3b0352d | ||
|
|
5b3b064954 | ||
|
|
485e1ccc49 | ||
|
|
fedd2bd1d0 | ||
|
|
2436988e4d | ||
|
|
38b22fcee6 | ||
|
|
0b0fd2f518 | ||
|
|
0fa5100933 |
@@ -74,7 +74,10 @@ jobs:
|
||||
brew list
|
||||
mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}
|
||||
mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}/OrcaSlicer_dep_${{ inputs.arch }}
|
||||
./build_release_macos.sh -dp -a ${{ inputs.arch }}
|
||||
brew uninstall --ignore-dependencies zstd
|
||||
./build_release_macos.sh -dp -a ${{ inputs.arch }} -t 10.15
|
||||
brew install zstd
|
||||
|
||||
|
||||
- name: Build on Ubuntu
|
||||
if: inputs.os == 'ubuntu-20.04'
|
||||
|
||||
@@ -76,15 +76,17 @@ jobs:
|
||||
- name: Install tools mac
|
||||
if: inputs.os == 'macos-12'
|
||||
run: |
|
||||
brew install cmake git gettext zstd tree
|
||||
brew install cmake git gettext tree
|
||||
brew list
|
||||
mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}
|
||||
mkdir -p ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}}
|
||||
tree ${{ github.workspace }}/deps/build_${{inputs.arch}}/OrcaSlicer_dep_${{inputs.arch}}
|
||||
|
||||
- name: Build slicer mac
|
||||
if: inputs.os == 'macos-12'
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: |
|
||||
./build_release_macos.sh -s -n -a ${{inputs.arch}}
|
||||
./build_release_macos.sh -s -n -a ${{inputs.arch}} -t 10.15
|
||||
|
||||
# Thanks to RaySajuuk, it's working now
|
||||
- name: Sign app and notary
|
||||
|
||||
@@ -30,3 +30,4 @@ src/OrcaSlicer-doc/
|
||||
**/process_full/
|
||||
**/machine_full/
|
||||
**/filament_full/
|
||||
/deps/DL_CACHE/
|
||||
+14
-6
@@ -1,4 +1,12 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
if (APPLE)
|
||||
# if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3
|
||||
if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
project(OrcaSlicer)
|
||||
|
||||
include("version.inc")
|
||||
@@ -52,9 +60,10 @@ if (APPLE)
|
||||
if (CMAKE_MACOSX_BUNDLE)
|
||||
set(CMAKE_INSTALL_RPATH @executable_path/../Frameworks)
|
||||
endif()
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE)
|
||||
SET(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.softfever3d.orca-slicer")
|
||||
|
||||
message(STATUS "Orca: IS_CROSS_COMPILE: ${IS_CROSS_COMPILE}")
|
||||
endif ()
|
||||
|
||||
# Proposal for C++ unit tests and sandboxes
|
||||
@@ -436,11 +445,8 @@ find_package(TBB REQUIRED)
|
||||
# add_definitions(-DTBB_USE_CAPTURED_EXCEPTION=0)
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
if (APPLE)
|
||||
find_package(CURL CONFIG REQUIRED)
|
||||
else()
|
||||
find_package(CURL REQUIRED)
|
||||
endif()
|
||||
|
||||
|
||||
add_library(libcurl INTERFACE)
|
||||
target_link_libraries(libcurl INTERFACE CURL::libcurl)
|
||||
@@ -509,6 +515,8 @@ find_package(PNG REQUIRED)
|
||||
set(OpenGL_GL_PREFERENCE "LEGACY")
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
||||
set(GLEW_ROOT "${CMAKE_PREFIX_PATH}")
|
||||
message("GLEW_ROOT: ${GLEW_ROOT}")
|
||||
# Find glew or use bundled version
|
||||
if (SLIC3R_STATIC AND NOT SLIC3R_STATIC_EXCLUDE_GLEW)
|
||||
set(GLEW_USE_STATIC_LIBS ON)
|
||||
@@ -786,4 +794,4 @@ set (CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE.txt) # must also in
|
||||
|
||||
set(CPACK_WIX_UPGRADE_GUID "058245e8-20e0-4a95-9ab7-1acfe17ad511")
|
||||
set(CPACK_GENERATOR NSIS)
|
||||
include(CPack)
|
||||
include(CPack)
|
||||
|
||||
@@ -30,7 +30,7 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr
|
||||
**Mac**:
|
||||
1. Download the DMG for your computer: `arm64` version for Apple Silicon and `x86_64` for Intel CPU.
|
||||
2. Drag OrcaSlicer.app to Application folder.
|
||||
3. *If you want to run a build from a PR, you also need following instructions bellow*
|
||||
3. *If you want to run a build from a PR, you also need following instructions below*
|
||||
<details quarantine>
|
||||
- Option 1 (You only need to do this once. After that the app can be opened normally.):
|
||||
- Step 1: Hold _cmd_ and right click the app, from the context menu choose **Open**.
|
||||
|
||||
+21
-16
@@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
while getopts ":a:sdphn" opt; do
|
||||
while getopts ":a:sdpt:hn" opt; do
|
||||
case ${opt} in
|
||||
d )
|
||||
export BUILD_TARGET="deps"
|
||||
@@ -17,11 +17,15 @@ while getopts ":a:sdphn" opt; do
|
||||
n )
|
||||
export NIGHTLY_BUILD="1"
|
||||
;;
|
||||
t )
|
||||
export OSX_DEPLOYMENT_TARGET="$OPTARG"
|
||||
;;
|
||||
h ) echo "Usage: ./build_release_macos.sh [-d]"
|
||||
echo " -d: Build deps only"
|
||||
echo " -a: Set ARCHITECTURE (arm64 or x86_64)"
|
||||
echo " -s: Build slicer only"
|
||||
echo " -n: Nightly build"
|
||||
echo " -t: Specify minimum version of the target platform, default is 11.3"
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
@@ -34,19 +38,20 @@ fi
|
||||
|
||||
echo "Arch: $ARCH"
|
||||
echo "BUILD_TARGET: $BUILD_TARGET"
|
||||
echo "OSX_DEPLOYMENT_TARGET: $OSX_DEPLOYMENT_TARGET"
|
||||
# if which -s brew; then
|
||||
# brew --prefix libiconv
|
||||
# brew --prefix zstd
|
||||
# export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/
|
||||
# elif which -s port; then
|
||||
# port install libiconv
|
||||
# port install zstd
|
||||
# export LIBRARY_PATH=$LIBRARY_PATH:/opt/local/lib
|
||||
# else
|
||||
# echo "Need either brew or macports to successfully build deps"
|
||||
# exit 1
|
||||
# fi
|
||||
|
||||
if which -s brew; then
|
||||
brew --prefix libiconv
|
||||
brew --prefix zstd
|
||||
export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/
|
||||
elif which -s port; then
|
||||
port install libiconv
|
||||
port install zstd
|
||||
export LIBRARY_PATH=$LIBRARY_PATH:/opt/local/lib
|
||||
else
|
||||
echo "Need either brew or macports to successfully build deps"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WD="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd $WD/deps
|
||||
@@ -57,8 +62,8 @@ mkdir -p $DEPS
|
||||
if [ "slicer." != $BUILD_TARGET. ];
|
||||
then
|
||||
echo "building deps..."
|
||||
echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}"
|
||||
cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH}
|
||||
echo "cmake ../ -DDESTDIR=$DEPS -DOPENSSL_ARCH=darwin64-${ARCH}-cc -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}"
|
||||
cmake ../ -DDESTDIR="$DEPS" -DOPENSSL_ARCH="darwin64-${ARCH}-cc" -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES:STRING=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}
|
||||
cmake --build . --config Release --target deps
|
||||
if [ "1." == "$PACK_DEPS". ];
|
||||
then
|
||||
@@ -76,7 +81,7 @@ cd $WD
|
||||
mkdir -p build_$ARCH
|
||||
cd build_$ARCH
|
||||
echo "building slicer..."
|
||||
cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH}
|
||||
cmake .. -GXcode -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="$DEPS/usr/local" -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" -DCMAKE_BUILD_TYPE=Release -DCMAKE_MACOSX_RPATH=ON -DCMAKE_INSTALL_RPATH="$DEPS/usr/local" -DCMAKE_MACOSX_BUNDLE=ON -DCMAKE_OSX_ARCHITECTURES=${ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${OSX_DEPLOYMENT_TARGET}
|
||||
cmake --build . --config Release --target ALL_BUILD
|
||||
cd ..
|
||||
./run_gettext.sh
|
||||
|
||||
@@ -64,16 +64,6 @@ This module defines the following variables:
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package(GLEW CONFIG QUIET)
|
||||
|
||||
if(GLEW_FOUND)
|
||||
find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_CONFIG)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(GLEW_VERBOSE)
|
||||
message(STATUS "FindGLEW: did not find GLEW CMake config file. Searching for libraries.")
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
find_package(OpenGL QUIET)
|
||||
|
||||
Vendored
+10
-3
@@ -20,8 +20,15 @@
|
||||
# therefore, unfortunatelly, the installation cannot be copied/moved elsewhere without re-installing wxWidgets.
|
||||
#
|
||||
|
||||
project(OrcaSlicer-deps)
|
||||
cmake_minimum_required(VERSION 3.2)
|
||||
if (APPLE)
|
||||
# if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3
|
||||
if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
project(OrcaSlicer-deps)
|
||||
|
||||
include(ExternalProject)
|
||||
include(ProcessorCount)
|
||||
@@ -32,7 +39,7 @@ if (NPROC EQUAL 0)
|
||||
endif ()
|
||||
|
||||
set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/destdir" CACHE PATH "Destination directory")
|
||||
set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/DL_CACHE CACHE PATH "Path for downloaded source packages.")
|
||||
set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/../DL_CACHE CACHE PATH "Path for downloaded source packages.")
|
||||
|
||||
option(DEP_DEBUG "Build debug variants (only applicable on Windows)" OFF)
|
||||
|
||||
@@ -163,7 +170,7 @@ if (MSVC)
|
||||
endif ()
|
||||
elseif (APPLE)
|
||||
message("OS X SDK Path: ${CMAKE_OSX_SYSROOT}")
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE)
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE)
|
||||
if (CMAKE_OSX_DEPLOYMENT_TARGET)
|
||||
set(DEP_OSX_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||
message("OS X Deployment Target: ${DEP_OSX_TARGET}")
|
||||
|
||||
Vendored
+2
-2
@@ -12,8 +12,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
endif()
|
||||
|
||||
orcaslicer_add_cmake_project(JPEG
|
||||
URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/2.0.6.zip
|
||||
URL_HASH SHA256=017bdc33ff3a72e11301c0feb4657cb27719d7f97fa67a78ed506c594218bbf1
|
||||
URL https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/3.0.1.zip
|
||||
URL_HASH SHA256=d6d99e693366bc03897677650e8b2dfa76b5d6c54e2c9e70c03f0af821b0a52f
|
||||
DEPENDS ${ZLIB_PKG}
|
||||
CMAKE_ARGS
|
||||
-DENABLE_SHARED=OFF
|
||||
|
||||
+905
-162
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1018
-196
File diff suppressed because it is too large
Load Diff
+1028
-181
File diff suppressed because it is too large
Load Diff
+1001
-219
File diff suppressed because it is too large
Load Diff
+1253
-433
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1100
-218
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1340
-536
File diff suppressed because it is too large
Load Diff
@@ -7,13 +7,16 @@ src/slic3r/GUI/Gizmos/GLGizmoScale.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmosManager.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp
|
||||
src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoCut.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoFaceDetector.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoText.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoText.hpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoSVG.cpp
|
||||
src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp
|
||||
src/slic3r/GUI/GUI.cpp
|
||||
src/slic3r/GUI/GUI_App.cpp
|
||||
src/slic3r/GUI/GUI_AuxiliaryList.cpp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+1095
-222
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -85,9 +85,18 @@ documentation_link = https://github.com/SoftFever/OrcaSlicer/wiki/Auxiliary-fan
|
||||
text = Air filtration/Exhuast Fan\nDid you know that OrcaSlicer can support Air filtration/Exhuast Fan?
|
||||
documentation_link = https://github.com/SoftFever/OrcaSlicer/wiki/air-filtration
|
||||
|
||||
[hint:G-code window]
|
||||
text = G-code window\nYou can turn on/off the G-code window by pressing the <b>C</b> key.
|
||||
|
||||
[hint:Switch workspaces]
|
||||
text = Switch workspaces\nYou can switch between <b>Prepare</b> and <b>Preview</b> workspaces by pressing the <b>Tab</b> key.
|
||||
|
||||
[hint:How to use keyboard shortcuts]
|
||||
text = How to use keyboard shortcuts\nDid you know that Orca Slicer offers a wide range of keyboard shortcuts and 3D scene operations.
|
||||
|
||||
[hint:Reverse on odd]
|
||||
text = Reverse on odd\nDid you know that <b>Reverse on odd</b> feature can significantly improve the surface quality of your overhangs?
|
||||
|
||||
[hint:Cut Tool]
|
||||
text = Cut Tool\nDid you know that you can cut a model at any angle and position with the cutting tool?
|
||||
|
||||
|
||||
@@ -23,10 +23,8 @@
|
||||
"0x235"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S{first_layer_temperature[0]-30} ; Anti-ooze - Set hotend temp to 30 degrees less than target\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home",
|
||||
"machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
|
||||
"layer_change_gcode": "",
|
||||
"scan_first_layer": "0",
|
||||
"nozzle_type": "hardened_steel",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
}
|
||||
@@ -23,10 +23,8 @@
|
||||
"0x220"
|
||||
],
|
||||
"printable_height": "250",
|
||||
"machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S{first_layer_temperature[0]-30} ; Anti-ooze - Set hotend temp to 30 degrees less than target\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home",
|
||||
"machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
|
||||
"layer_change_gcode": "",
|
||||
"scan_first_layer": "0",
|
||||
"nozzle_type": "hardened_steel",
|
||||
"auxiliary_fan": "0"
|
||||
}
|
||||
}
|
||||
@@ -4,9 +4,9 @@
|
||||
"from": "system",
|
||||
"instantiation": "false",
|
||||
"gcode_flavor": "marlin2",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n",
|
||||
"machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 Sfirst_layer_temperature[0] ; Set hotend temp\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home",
|
||||
"machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84",
|
||||
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n",
|
||||
"machine_start_gcode": "M4899 T3 ; Enable v3 jerk and S-curve acceleration \nM104 S150 ; Set hotend temp to 150 degrees to prevent ooze\nM190 S{first_layer_bed_temperature[0]} ; set and wait for bed temp to stabilize\nM109 S{first_layer_temperature[0]} ; set final nozzle temp to stabilize\nG28 ;Home",
|
||||
"machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM18",
|
||||
"change_filament_gcode": "M600",
|
||||
"machine_pause_gcode": "M601",
|
||||
"extruder_colour": [
|
||||
@@ -117,4 +117,4 @@
|
||||
"0"
|
||||
],
|
||||
"z_hop_types": "Normal Lift"
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,6 @@
|
||||
"support_bottom_z_distance": "0.15",
|
||||
"support_top_z_distance": "0.15",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_thickness": "0",
|
||||
"top_shell_thickness": "0",
|
||||
"default_acceleration": "6000",
|
||||
@@ -38,4 +37,4 @@
|
||||
"Anker M5 0.4 nozzle",
|
||||
"Anker M5C 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@
|
||||
"support_bottom_z_distance": "0.20",
|
||||
"support_top_z_distance": "0.20",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_thickness": "0",
|
||||
"top_shell_thickness": "0",
|
||||
"default_acceleration": "6000",
|
||||
@@ -37,4 +36,4 @@
|
||||
"Anker M5 0.4 nozzle",
|
||||
"Anker M5C 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -14,7 +14,6 @@
|
||||
"support_bottom_z_distance": "0.25",
|
||||
"support_top_z_distance": "0.25",
|
||||
"top_surface_pattern": "monotonic",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_thickness": "0",
|
||||
"top_shell_thickness": "0",
|
||||
"default_acceleration": "6000",
|
||||
@@ -37,4 +36,4 @@
|
||||
"Anker M5 0.4 nozzle",
|
||||
"Anker M5C 0.4 nozzle"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
"adaptive_layer_height": "0",
|
||||
"reduce_crossing_wall": "0",
|
||||
"max_travel_detour_distance": "0",
|
||||
"bottom_surface_pattern": "monotonicline",
|
||||
"bottom_surface_pattern": "monotonic",
|
||||
"bottom_shell_thickness": "0.5",
|
||||
"bridge_speed": "50",
|
||||
"bridge_acceleration": "500",
|
||||
@@ -93,8 +93,8 @@
|
||||
"bottom_shell_layers": "4",
|
||||
"top_shell_layers": "5",
|
||||
"bridge_flow": "0.95",
|
||||
"initial_layer_speed": "65",
|
||||
"initial_layer_infill_speed": "125",
|
||||
"initial_layer_speed": "50",
|
||||
"initial_layer_infill_speed": "50",
|
||||
"initial_layer_travel_speed": "100%",
|
||||
"outer_wall_speed": "125",
|
||||
"inner_wall_speed": "250",
|
||||
@@ -115,4 +115,4 @@
|
||||
"outer_wall_jerk": "10",
|
||||
"top_surface_jerk": "12",
|
||||
"travel_jerk": "20"
|
||||
}
|
||||
}
|
||||
@@ -14,8 +14,6 @@
|
||||
"extruder_clearance_max_radius": "90",
|
||||
"extruder_clearance_radius": "90",
|
||||
"machine_load_filament_time": "11",
|
||||
"support_chamber_temp_control": "false",
|
||||
"support_air_filtration": ["false"],
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
"extruder_clearance_max_radius": "90",
|
||||
"extruder_clearance_radius": "90",
|
||||
"machine_load_filament_time": "11",
|
||||
"support_chamber_temp_control": "false",
|
||||
"support_air_filtration": ["false"],
|
||||
"nozzle_diameter": [
|
||||
"0.4"
|
||||
],
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"printable_height": "300",
|
||||
"nozzle_type": "hardened_steel",
|
||||
"auxiliary_fan": "1",
|
||||
"support_air_filtration": "1",
|
||||
"machine_max_acceleration_e": ["5000", "5000"],
|
||||
"machine_max_acceleration_extruding": ["20000", "20000"],
|
||||
"machine_max_acceleration_retracting": ["5000", "5000"],
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"printable_height": "300",
|
||||
"nozzle_type": "hardened_steel",
|
||||
"auxiliary_fan": "1",
|
||||
"support_air_filtration": "1",
|
||||
"machine_max_acceleration_e": ["5000", "5000"],
|
||||
"machine_max_acceleration_extruding": ["20000", "20000"],
|
||||
"machine_max_acceleration_retracting": ["5000", "5000"],
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
"printable_height": "300",
|
||||
"nozzle_type": "hardened_steel",
|
||||
"auxiliary_fan": "1",
|
||||
"support_air_filtration": "1",
|
||||
"machine_max_acceleration_e": ["5000", "5000"],
|
||||
"machine_max_acceleration_extruding": ["20000", "20000"],
|
||||
"machine_max_acceleration_retracting": ["5000", "5000"],
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
],
|
||||
"gcode_flavor": "marlin",
|
||||
"silent_mode": "0",
|
||||
"support_chamber_temp_control": "0",
|
||||
"support_air_filtration": "0",
|
||||
"machine_max_acceleration_e": [
|
||||
"5000"
|
||||
],
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "default",
|
||||
"support_interface_pattern": "auto",
|
||||
"support_base_pattern": "default",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_speed": "50",
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "default",
|
||||
"support_interface_pattern": "auto",
|
||||
"support_base_pattern": "default",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_speed": "50",
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"support_interface_bottom_layers": "2",
|
||||
"support_interface_spacing": "0.5",
|
||||
"support_interface_speed": "100%",
|
||||
"support_interface_pattern": "default",
|
||||
"support_interface_pattern": "auto",
|
||||
"support_base_pattern": "default",
|
||||
"support_base_pattern_spacing": "2.5",
|
||||
"support_speed": "50",
|
||||
|
||||
@@ -10,5 +10,7 @@
|
||||
"infill_jerk": "12",
|
||||
"travel_jerk": "12",
|
||||
"inner_wall_jerk": "7",
|
||||
"top_surface_jerk": "7"
|
||||
"top_surface_jerk": "7",
|
||||
"exclude_object": "1"
|
||||
|
||||
}
|
||||
|
||||
@@ -104,5 +104,6 @@
|
||||
"enable_arc_fitting": "0",
|
||||
"compatible_printers": [
|
||||
"MyKlipper 0.4 nozzle"
|
||||
]
|
||||
],
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -110,5 +110,6 @@
|
||||
"top_surface_speed": "120",
|
||||
"gap_infill_speed": "120",
|
||||
"sparse_infill_speed": "200",
|
||||
"travel_speed": "350"
|
||||
"travel_speed": "350",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -30,5 +30,6 @@
|
||||
"top_surface_speed": "120",
|
||||
"gap_infill_speed": "120",
|
||||
"sparse_infill_speed": "200",
|
||||
"travel_speed": "300"
|
||||
"travel_speed": "300",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -25,5 +25,6 @@
|
||||
"travel_speed": "400",
|
||||
"compatible_printers": [
|
||||
"FLSun V400 0.4 nozzle"
|
||||
]
|
||||
],
|
||||
"exclude_object": "1"
|
||||
}
|
||||
@@ -219,5 +219,6 @@
|
||||
"70"
|
||||
],
|
||||
"xy_contour_compensation": "0",
|
||||
"xy_hole_compensation": "0"
|
||||
"xy_hole_compensation": "0",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
@@ -67,5 +67,6 @@
|
||||
"enable_prime_tower": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0"
|
||||
"xy_contour_compensation": "0",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -24,5 +24,6 @@
|
||||
"top_surface_acceleration": "1000",
|
||||
"travel_acceleration": "4000",
|
||||
"inner_wall_acceleration": "4000",
|
||||
"outer_wall_acceleration": "3000"
|
||||
"outer_wall_acceleration": "3000",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
@@ -579,6 +579,14 @@
|
||||
{
|
||||
"name": "QIDI ABS-GF10",
|
||||
"sub_path": "filament/QIDI ABS-GF10.json"
|
||||
},
|
||||
{
|
||||
"name": "Qidi PC-ABS-FR",
|
||||
"sub_path": "filament/Qidi PC-ABS-FR.json"
|
||||
},
|
||||
{
|
||||
"name": "Qidi ASA-Aero",
|
||||
"sub_path": "filament/Qidi ASA-Aero.json"
|
||||
}
|
||||
],
|
||||
"machine_list": [
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_abs",
|
||||
"filament_flow_ratio": [
|
||||
"0.8"
|
||||
"0.9"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"15"
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB99",
|
||||
"setting_id": "GFSA04",
|
||||
"name": "Qidi ASA-Aero",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_asa",
|
||||
"filament_max_volumetric_speed": [
|
||||
"16"
|
||||
],
|
||||
"filament_flow_ratio": [
|
||||
"0.7"
|
||||
],
|
||||
"nozzle_temperature_initial_layer": [
|
||||
"250"
|
||||
],
|
||||
"nozzle_temperature": [
|
||||
"270"
|
||||
],
|
||||
"cool_plate_temp" : [
|
||||
"90"
|
||||
],
|
||||
"eng_plate_temp" : [
|
||||
"90"
|
||||
],
|
||||
"hot_plate_temp" : [
|
||||
"90"
|
||||
],
|
||||
"textured_plate_temp" : [
|
||||
"90"
|
||||
],
|
||||
"cool_plate_temp_initial_layer" : [
|
||||
"90"
|
||||
],
|
||||
"eng_plate_temp_initial_layer" : [
|
||||
"90"
|
||||
],
|
||||
"hot_plate_temp_initial_layer" : [
|
||||
"90"
|
||||
],
|
||||
"textured_plate_temp_initial_layer" : [
|
||||
"90"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.021"
|
||||
],
|
||||
"filament_retraction_length": [
|
||||
"0"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\nM141 S60\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Qidi X-Plus 0.4 nozzle",
|
||||
"Qidi X-Max 0.4 nozzle",
|
||||
"Qidi X-CF Pro 0.4 nozzle",
|
||||
"Qidi X-Smart 3 0.4 nozzle",
|
||||
"Qidi X-Plus 3 0.4 nozzle",
|
||||
"Qidi X-Max 3 0.4 nozzle",
|
||||
"Qidi X-Max 0.6 nozzle",
|
||||
"Qidi X-CF Pro 0.6 nozzle",
|
||||
"Qidi X-Smart 3 0.6 nozzle",
|
||||
"Qidi X-Plus 3 0.6 nozzle",
|
||||
"Qidi X-Max 3 0.6 nozzle",
|
||||
"Qidi X-Plus 0.8 nozzle",
|
||||
"Qidi X-Max 0.8 nozzle",
|
||||
"Qidi X-CF Pro 0.8 nozzle",
|
||||
"Qidi X-Smart 3 0.8 nozzle",
|
||||
"Qidi X-Plus 3 0.8 nozzle",
|
||||
"Qidi X-Max 3 0.8 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"type": "filament",
|
||||
"filament_id": "GFB99",
|
||||
"setting_id": "GFSA04",
|
||||
"name": "Qidi PC-ABS-FR",
|
||||
"from": "system",
|
||||
"instantiation": "true",
|
||||
"inherits": "fdm_filament_abs",
|
||||
"filament_flow_ratio": [
|
||||
"0.92"
|
||||
],
|
||||
"filament_max_volumetric_speed": [
|
||||
"8"
|
||||
],
|
||||
"enable_pressure_advance": [
|
||||
"1"
|
||||
],
|
||||
"pressure_advance": [
|
||||
"0.04"
|
||||
],
|
||||
"overhang_fan_speed": [
|
||||
"60"
|
||||
],
|
||||
"filament_start_gcode": [
|
||||
"; filament start gcode\nM141 S55\n{if (bed_temperature[current_extruder] >90)||(bed_temperature_initial_layer[current_extruder] >90)}M106 P3 S0\n{elsif(bed_temperature[current_extruder] >70)||(bed_temperature_initial_layer[current_extruder] >70)}M106 P3 S153\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{endif}"
|
||||
],
|
||||
"compatible_printers": [
|
||||
"Qidi X-Plus 0.4 nozzle",
|
||||
"Qidi X-Max 0.4 nozzle",
|
||||
"Qidi X-CF Pro 0.4 nozzle",
|
||||
"Qidi X-Smart 3 0.4 nozzle",
|
||||
"Qidi X-Plus 3 0.4 nozzle",
|
||||
"Qidi X-Max 3 0.4 nozzle",
|
||||
"Qidi X-Max 0.6 nozzle",
|
||||
"Qidi X-CF Pro 0.6 nozzle",
|
||||
"Qidi X-Smart 3 0.6 nozzle",
|
||||
"Qidi X-Plus 3 0.6 nozzle",
|
||||
"Qidi X-Max 3 0.6 nozzle",
|
||||
"Qidi X-Plus 0.8 nozzle",
|
||||
"Qidi X-Max 0.8 nozzle",
|
||||
"Qidi X-CF Pro 0.8 nozzle",
|
||||
"Qidi X-Smart 3 0.8 nozzle",
|
||||
"Qidi X-Plus 3 0.8 nozzle",
|
||||
"Qidi X-Max 3 0.8 nozzle"
|
||||
]
|
||||
}
|
||||
@@ -89,6 +89,6 @@
|
||||
"4"
|
||||
],
|
||||
"additional_cooling_fan_speed": [
|
||||
"100"
|
||||
"0"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -114,5 +114,6 @@
|
||||
"internal_solid_infill_pattern": "monotonic",
|
||||
"initial_layer_travel_speed": "50%",
|
||||
"filter_out_gap_fill": "2",
|
||||
"notes": "If you want to use Orca's chamber temperature control feature, check that printer.cfg has added the following M191 macro.\nTo add it: go to Fluidd web interface--configuration, copy the following code to the top of the printer.cfg document, SAVE&RESATART \n\n[gcode_macro M191]\ngcode:\n {% set s = params.S|float %}\n {% if s == 0 %}\n # If target temperature is 0, do nothing\n M117 Chamber heating cancelled\n {% else %}\n SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={s}\n # Orca: uncomment the following line if you want to use heat bed to assist chamber heating\n M140 S90\n TEMPERATURE_WAIT SENSOR=\"heater_generic chamber_heater\" MINIMUM={s-1} MAXIMUM={s+1}\n M117 Chamber at target temperature\n {% endif %}"
|
||||
"notes": "If you want to use Orca's chamber temperature control feature, check that printer.cfg has added the following M191 macro.\nTo add it: go to Fluidd web interface--configuration, copy the following code to the top of the printer.cfg document, SAVE&RESATART \n\n[gcode_macro M191]\ngcode:\n {% set s = params.S|float %}\n {% if s == 0 %}\n # If target temperature is 0, do nothing\n M117 Chamber heating cancelled\n {% else %}\n SET_HEATER_TEMPERATURE HEATER=chamber_heater TARGET={s}\n # Orca: uncomment the following line if you want to use heat bed to assist chamber heating\n M140 S90\n TEMPERATURE_WAIT SENSOR=\"heater_generic chamber_heater\" MINIMUM={s-1} MAXIMUM={s+1}\n M117 Chamber at target temperature\n {% endif %}",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -111,5 +111,6 @@
|
||||
"RatRig V-Minion 0.4 nozzle",
|
||||
"RatRig V-Cast 0.4 nozzle",
|
||||
"RatRig V-Cast 0.6 nozzle"
|
||||
]
|
||||
],
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -106,5 +106,6 @@
|
||||
"compatible_printers": [
|
||||
"Troodon 2.0 Klipper 0.4 nozzle",
|
||||
"Troodon 2.0 RRF 0.4 nozzle"
|
||||
]
|
||||
],
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -67,5 +67,6 @@
|
||||
"enable_prime_tower": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0"
|
||||
"xy_contour_compensation": "0",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -107,5 +107,6 @@
|
||||
"compatible_printers": [
|
||||
"Vzbot 235 AWD 0.4 nozzle",
|
||||
"Vzbot 330 AWD 0.4 nozzle"
|
||||
]
|
||||
],
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -67,5 +67,6 @@
|
||||
"enable_prime_tower": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0"
|
||||
"xy_contour_compensation": "0",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -68,5 +68,6 @@
|
||||
"enable_prime_tower": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0"
|
||||
"xy_contour_compensation": "0",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
@@ -68,5 +68,6 @@
|
||||
"enable_prime_tower": "0",
|
||||
"prime_tower_width": "60",
|
||||
"xy_hole_compensation": "0",
|
||||
"xy_contour_compensation": "0"
|
||||
"xy_contour_compensation": "0",
|
||||
"exclude_object": "1"
|
||||
}
|
||||
|
||||
+1
-1
@@ -5355,7 +5355,7 @@ bool CLI::setup(int argc, char **argv)
|
||||
for (const t_optiondef_map::value_type &optdef : *options)
|
||||
m_config.option(optdef.first, true);
|
||||
|
||||
//set_data_dir(m_config.opt_string("datadir"));
|
||||
set_data_dir(m_config.opt_string("datadir"));
|
||||
|
||||
//FIXME Validating at this stage most likely does not make sense, as the config is not fully initialized yet.
|
||||
if (!validity.empty()) {
|
||||
|
||||
@@ -42,7 +42,8 @@ using namespace nlohmann;
|
||||
|
||||
namespace Slic3r {
|
||||
|
||||
static const std::string VERSION_CHECK_URL = "https://api.github.com/repos/softfever/OrcaSlicer/releases/latest";
|
||||
static const std::string VERSION_CHECK_URL_STABLE = "https://api.github.com/repos/softfever/OrcaSlicer/releases/latest";
|
||||
static const std::string VERSION_CHECK_URL = "https://api.github.com/repos/softfever/OrcaSlicer/releases";
|
||||
static const std::string MODELS_STR = "models";
|
||||
|
||||
const std::string AppConfig::SECTION_FILAMENTS = "filaments";
|
||||
@@ -240,6 +241,10 @@ void AppConfig::set_defaults()
|
||||
set_bool("stealth_mode", false);
|
||||
}
|
||||
|
||||
if(get("check_stable_update_only").empty()) {
|
||||
set_bool("check_stable_update_only", false);
|
||||
}
|
||||
|
||||
// Orca
|
||||
if(get("show_splash_screen").empty()) {
|
||||
set_bool("show_splash_screen", true);
|
||||
@@ -1253,10 +1258,10 @@ std::string AppConfig::config_path()
|
||||
return path;
|
||||
}
|
||||
|
||||
std::string AppConfig::version_check_url() const
|
||||
std::string AppConfig::version_check_url(bool stable_only/* = false*/) const
|
||||
{
|
||||
auto from_settings = get("version_check_url");
|
||||
return from_settings.empty() ? VERSION_CHECK_URL : from_settings;
|
||||
return from_settings.empty() ? stable_only ? VERSION_CHECK_URL_STABLE : VERSION_CHECK_URL : from_settings;
|
||||
}
|
||||
|
||||
bool AppConfig::exists()
|
||||
|
||||
@@ -247,7 +247,7 @@ public:
|
||||
|
||||
// Get the Slic3r version check url.
|
||||
// This returns a hardcoded string unless it is overriden by "version_check_url" in the ini file.
|
||||
std::string version_check_url() const;
|
||||
std::string version_check_url(bool stable_only = false) const;
|
||||
|
||||
// Returns the original Slic3r version found in the ini file before it was overwritten
|
||||
// by the current version
|
||||
|
||||
@@ -4437,6 +4437,58 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou
|
||||
|
||||
// extrude along the path
|
||||
std::string gcode;
|
||||
|
||||
// Port of "wipe inside before extruding an external perimeter" feature from super slicer
|
||||
if (m_config.wipe_before_external_loop.value && !paths.empty() && paths.front().size() > 1 && paths.back().size() > 1 && paths.front().role() == erExternalPerimeter) {
|
||||
const bool is_full_loop_ccw = loop.polygon().is_counter_clockwise();
|
||||
bool is_hole_loop = (loop.loop_role() & ExtrusionLoopRole::elrHole) != 0; // loop.make_counter_clockwise();
|
||||
const double nozzle_diam = EXTRUDER_CONFIG(nozzle_diameter);
|
||||
|
||||
// note: previous & next are inverted to extrude "in the opposite direction, and we are "rewinding"
|
||||
Point previous_point = paths.front().polyline.points[1];
|
||||
Point current_point = paths.front().polyline.points.front();
|
||||
Point next_point = paths.back().polyline.points.back();
|
||||
|
||||
// can happen if seam_gap is null
|
||||
if (next_point == current_point) {
|
||||
next_point = paths.back().polyline.points[paths.back().polyline.points.size() - 2];
|
||||
}
|
||||
|
||||
Point a = next_point; // second point
|
||||
Point b = previous_point; // second to last point
|
||||
if ((is_hole_loop ? !is_full_loop_ccw : is_full_loop_ccw)) {
|
||||
// swap points
|
||||
std::swap(a, b);
|
||||
}
|
||||
|
||||
double angle = current_point.ccw_angle(a, b) / 3;
|
||||
|
||||
// turn outwards if contour, turn inwwards if hole
|
||||
if (is_hole_loop ? !is_full_loop_ccw : is_full_loop_ccw) angle *= -1;
|
||||
|
||||
Vec2d current_pos = current_point.cast<double>();
|
||||
Vec2d next_pos = next_point.cast<double>();
|
||||
Vec2d vec_dist = next_pos - current_pos;
|
||||
double vec_norm = vec_dist.norm();
|
||||
// Offset distance is the minimum between half the nozzle diameter or half the line width for the upcomming perimeter
|
||||
// This is to mimimize potential instances where the de-retraction is performed on top of a neighbouring
|
||||
// thin perimeter due to arachne reducing line width.
|
||||
coordf_t dist = std::min(scaled(nozzle_diam) * 0.5, scaled(paths.front().width) * 0.5);
|
||||
|
||||
// FIXME Hiding the seams will not work nicely for very densely discretized contours!
|
||||
Point pt = (current_pos + vec_dist * (2 * dist / vec_norm)).cast<coord_t>();
|
||||
pt.rotate(angle, current_point);
|
||||
pt = (current_pos + vec_dist * (2 * dist / vec_norm)).cast<coord_t>();
|
||||
pt.rotate(angle, current_point);
|
||||
|
||||
// use extrude instead of travel_to_xy to trigger the unretract
|
||||
ExtrusionPath fake_path_wipe(Polyline{pt, current_point}, paths.front());
|
||||
fake_path_wipe.mm3_per_mm = 0;
|
||||
gcode += extrude_path(fake_path_wipe, "move inwards before retraction/seam", speed);
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool is_small_peri = false;
|
||||
for (ExtrusionPaths::iterator path = paths.begin(); path != paths.end(); ++path) {
|
||||
// description += ExtrusionLoop::role_to_string(loop.loop_role());
|
||||
|
||||
@@ -808,7 +808,7 @@ static std::vector<std::string> s_Preset_print_options {
|
||||
"small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", "min_width_top_surface",
|
||||
"default_jerk", "outer_wall_jerk", "inner_wall_jerk", "infill_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk",
|
||||
"top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio", "seam_gap",
|
||||
"role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops",
|
||||
"role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", "wipe_before_external_loop",
|
||||
"bridge_density", "precise_outer_wall", "overhang_speed_classic", "bridge_acceleration",
|
||||
"sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim",
|
||||
"tree_support_brim_width", "gcode_comments", "gcode_label_objects",
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "Utils.hpp"
|
||||
#include "Model.hpp"
|
||||
#include "format.hpp"
|
||||
#include "libslic3r_version.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <set>
|
||||
@@ -675,7 +676,7 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector<std::string>
|
||||
import_json_presets(substitutions, file, override_confirm, rule, overwrite, result);
|
||||
}
|
||||
// Determine if it is a preset bundle
|
||||
if (boost::iends_with(file, ".bbscfg") || boost::iends_with(file, ".bbsflmt") || boost::iends_with(file, ".zip")) {
|
||||
if (boost::iends_with(file, ".orca_printer") || boost::iends_with(file, ".orca_filament") || boost::iends_with(file, ".zip")) {
|
||||
boost::system::error_code ec;
|
||||
// create user folder
|
||||
fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR);
|
||||
@@ -767,7 +768,7 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & s
|
||||
std::string version_str = key_values[BBL_JSON_KEY_VERSION];
|
||||
boost::optional<Semver> version = Semver::parse(version_str);
|
||||
if (!version) return false;
|
||||
Semver app_version = *(Semver::parse(SLIC3R_VERSION));
|
||||
Semver app_version = *(Semver::parse(SoftFever_VERSION));
|
||||
if (version->maj() != app_version.maj()) {
|
||||
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset incompatibla, not loading: " << name;
|
||||
return false;
|
||||
|
||||
@@ -487,7 +487,7 @@ void PrintConfigDef::init_common_params()
|
||||
|
||||
def = this->add("print_host", coString);
|
||||
def->label = L("Hostname, IP or URL");
|
||||
def->tooltip = L("Slic3r can upload G-code files to a printer host. This field should contain "
|
||||
def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain "
|
||||
"the hostname, IP address or URL of the printer host instance. "
|
||||
"Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL "
|
||||
"in the following format: https://username:password@your-octopi-address/");
|
||||
@@ -505,7 +505,7 @@ void PrintConfigDef::init_common_params()
|
||||
|
||||
def = this->add("printhost_apikey", coString);
|
||||
def->label = L("API Key / Password");
|
||||
def->tooltip = L("Slic3r can upload G-code files to a printer host. This field should contain "
|
||||
def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field should contain "
|
||||
"the API Key or the password required for authentication.");
|
||||
def->mode = comAdvanced;
|
||||
def->cli = ConfigOptionDef::nocli;
|
||||
@@ -1633,7 +1633,7 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->label = L("Minimal purge on wipe tower");
|
||||
def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside "
|
||||
"the nozzle may not be known, and the filament pressure is likely not yet stable. "
|
||||
"Before purging the print head into an infill or a sacrificial object, Slic3r will always prime "
|
||||
"Before purging the print head into an infill or a sacrificial object, Orca Slicer will always prime "
|
||||
"this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably.");
|
||||
def->sidetext = L("mm³");
|
||||
def->min = 0;
|
||||
@@ -1837,7 +1837,7 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->label = L("Sparse infill anchor length");
|
||||
def->category = L("Strength");
|
||||
def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
|
||||
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Slic3r tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
|
||||
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
|
||||
"shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side "
|
||||
"and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max. "
|
||||
"\nSet this parameter to zero to disable anchoring perimeters connected to a single infill line.");
|
||||
@@ -1864,7 +1864,7 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->label = L("Maximum length of the infill anchor");
|
||||
def->category = L("Strength");
|
||||
def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
|
||||
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Slic3r tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
|
||||
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
|
||||
"shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side "
|
||||
"and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. "
|
||||
"\nIf set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0.");
|
||||
@@ -2367,7 +2367,7 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->label = L("Exclude objects");
|
||||
def->tooltip = L("Enable this option to add EXCLUDE OBJECT command in g-code");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(1));
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("gcode_comments", coBool);
|
||||
def->label = L("Verbose G-code");
|
||||
@@ -2826,7 +2826,7 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
|
||||
def = this->add("host_type", coEnum);
|
||||
def->label = L("Host Type");
|
||||
def->tooltip = L("Slic3r can upload G-code files to a printer host. This field must contain "
|
||||
def->tooltip = L("Orca Slicer can upload G-code files to a printer host. This field must contain "
|
||||
"the kind of the host.");
|
||||
def->enum_keys_map = &ConfigOptionEnum<PrintHostType>::get_enum_values();
|
||||
def->enum_values.push_back("prusalink");
|
||||
@@ -3021,7 +3021,7 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->tooltip = L("If you want to process the output G-code through custom scripts, "
|
||||
"just list their absolute paths here. Separate multiple scripts with a semicolon. "
|
||||
"Scripts will be passed the absolute path to the G-code file as the first argument, "
|
||||
"and they can access the Slic3r config settings by reading environment variables.");
|
||||
"and they can access the Orca Slicer config settings by reading environment variables.");
|
||||
def->gui_flags = "serialized";
|
||||
def->multiline = true;
|
||||
def->full_width = true;
|
||||
@@ -3327,6 +3327,16 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->tooltip = L("To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop.");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("wipe_before_external_loop", coBool);
|
||||
def->label = L("Wipe before external loop");
|
||||
def->tooltip = L("To minimise visibility of potential overextrusion at the start of an external perimeter when printing with "
|
||||
"Outer/Inner or Inner/Outer/Inner wall print order, the deretraction is performed slightly on the inside from the "
|
||||
"start of the external perimeter. That way any potential over extrusion is hidden from the outside surface. \n\nThis "
|
||||
"is useful when printing with Outer/Inner or Inner/Outer/Inner wall print order as in these modes it is more likely "
|
||||
"an external perimeter is printed immediately after a deretraction move.");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("wipe_speed", coFloatOrPercent);
|
||||
def->label = L("Wipe speed");
|
||||
@@ -4451,8 +4461,8 @@ def = this->add("filament_loading_speed", coFloats);
|
||||
def->label = L("Use relative E distances");
|
||||
def->tooltip = L("Relative extrusion is recommended when using \"label_objects\" option."
|
||||
"Some extruders work better with this option unckecked (absolute extrusion mode). "
|
||||
"Wipe tower is only compatible with relative mode. It is always enabled on "
|
||||
"BambuLab printers. Default is checked");
|
||||
"Wipe tower is only compatible with relative mode. It is recommended on "
|
||||
"most printers. Default is checked");
|
||||
def->mode = comAdvanced;
|
||||
def->set_default_value(new ConfigOptionBool(true));
|
||||
|
||||
|
||||
@@ -880,6 +880,7 @@ PRINT_CONFIG_CLASS_DEFINE(
|
||||
((ConfigOptionBool, role_based_wipe_speed))
|
||||
((ConfigOptionFloatOrPercent, wipe_speed))
|
||||
((ConfigOptionBool, wipe_on_loops))
|
||||
((ConfigOptionBool, wipe_before_external_loop))
|
||||
((ConfigOptionEnum<WallInfillOrder>, wall_infill_order))
|
||||
((ConfigOptionBool, precise_outer_wall))
|
||||
((ConfigOptionBool, overhang_speed_classic))
|
||||
|
||||
@@ -272,6 +272,9 @@ static std::string g_data_dir;
|
||||
void set_data_dir(const std::string &dir)
|
||||
{
|
||||
g_data_dir = dir;
|
||||
if (!g_data_dir.empty() && !boost::filesystem::exists(g_data_dir)) {
|
||||
boost::filesystem::create_directory(g_data_dir);
|
||||
}
|
||||
}
|
||||
|
||||
const std::string& data_dir()
|
||||
|
||||
@@ -242,7 +242,7 @@ void SelectMObjectPopup::Popup(wxWindow* WXUNUSED(focus))
|
||||
|
||||
if (wxGetApp().is_user_login()) {
|
||||
if (!get_print_info_thread) {
|
||||
get_print_info_thread = new boost::thread(Slic3r::create_thread([this, token = std::weak_ptr(m_token)] {
|
||||
get_print_info_thread = new boost::thread(Slic3r::create_thread([this, token = std::weak_ptr<int>(m_token)] {
|
||||
NetworkAgent* agent = wxGetApp().getAgent();
|
||||
unsigned int http_code;
|
||||
std::string body;
|
||||
@@ -716,4 +716,4 @@ CalibrationPanel::~CalibrationPanel() {
|
||||
delete m_refresh_timer;
|
||||
}
|
||||
|
||||
}}
|
||||
}}
|
||||
|
||||
@@ -528,7 +528,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
||||
|
||||
bool has_spiral_vase = config->opt_bool("spiral_mode");
|
||||
toggle_line("spiral_mode_smooth", has_spiral_vase);
|
||||
toggle_line("spiral_mode_max_xy_smoothing", config->opt_bool("spiral_mode_smooth"));
|
||||
toggle_line("spiral_mode_max_xy_smoothing", has_spiral_vase && config->opt_bool("spiral_mode_smooth"));
|
||||
bool has_top_solid_infill = config->opt_int("top_shell_layers") > 0;
|
||||
bool has_bottom_solid_infill = config->opt_int("bottom_shell_layers") > 0;
|
||||
bool has_solid_infill = has_top_solid_infill || has_bottom_solid_infill;
|
||||
@@ -712,8 +712,6 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
|
||||
toggle_line("make_overhang_printable_angle", have_make_overhang_printable);
|
||||
toggle_line("make_overhang_printable_hole_size", have_make_overhang_printable);
|
||||
|
||||
toggle_line("exclude_object", gcflavor == gcfKlipper);
|
||||
|
||||
toggle_line("min_width_top_surface",config->opt_bool("only_one_wall_top"));
|
||||
|
||||
for (auto el : { "hole_to_polyhole_threshold", "hole_to_polyhole_twisted" })
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include "FileHelp.hpp"
|
||||
#include "Tab.hpp"
|
||||
#include "MainFrame.hpp"
|
||||
#include "libslic3r_version.h"
|
||||
|
||||
#define NAME_OPTION_COMBOBOX_SIZE wxSize(FromDIP(200), FromDIP(24))
|
||||
#define FILAMENT_PRESET_COMBOBOX_SIZE wxSize(FromDIP(300), FromDIP(24))
|
||||
@@ -179,7 +180,7 @@ static bool delete_filament_preset_by_name(std::string delete_preset_name, std::
|
||||
return true;
|
||||
}
|
||||
|
||||
static std::string get_curr_time()
|
||||
static std::string get_curr_time(const char* format = "%Y_%m_%d_%H_%M_%S")
|
||||
{
|
||||
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
|
||||
|
||||
@@ -187,7 +188,7 @@ static std::string get_curr_time()
|
||||
|
||||
std::tm local_time = *std::localtime(&time);
|
||||
std::ostringstream time_stream;
|
||||
time_stream << std::put_time(&local_time, "%Y_%m_%d_%H_%M_%S");
|
||||
time_stream << std::put_time(&local_time, format);
|
||||
|
||||
std::string current_time = time_stream.str();
|
||||
return current_time;
|
||||
@@ -195,11 +196,12 @@ static std::string get_curr_time()
|
||||
|
||||
static std::string get_curr_timestmp()
|
||||
{
|
||||
std::time_t currentTime = std::time(nullptr);
|
||||
std::ostringstream oss;
|
||||
oss << currentTime;
|
||||
std::string timestampString = oss.str();
|
||||
return timestampString;
|
||||
return get_curr_time("%Y%m%d%H%M%S");
|
||||
// std::time_t currentTime = std::time(nullptr);
|
||||
// std::ostringstream oss;
|
||||
// oss << currentTime;
|
||||
// std::string timestampString = oss.str();
|
||||
// return timestampString;
|
||||
}
|
||||
|
||||
static void get_filament_compatible_printer(Preset* preset, vector<std::string>& printers)
|
||||
@@ -1474,9 +1476,9 @@ wxBoxSizer *CreatePrinterPresetDialog::create_step_switch_item()
|
||||
{
|
||||
wxBoxSizer *step_switch_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/3rd-party-printer-profile";
|
||||
wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(this, wxID_ANY, _L("wiki"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
|
||||
step_switch_sizer->Add(m_download_hyperlink, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(5));
|
||||
// std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/3rd-party-printer-profile";
|
||||
// wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(this, wxID_ANY, _L("wiki"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
|
||||
// step_switch_sizer->Add(m_download_hyperlink, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(5));
|
||||
|
||||
wxBoxSizer *horizontal_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxPanel * step_switch_panel = new wxPanel(this);
|
||||
@@ -3266,8 +3268,8 @@ void CreatePresetSuccessfulDialog::on_dpi_changed(const wxRect &suggested_rect)
|
||||
ExportConfigsDialog::ExportConfigsDialog(wxWindow *parent)
|
||||
: DPIDialog(parent ? parent : nullptr, wxID_ANY, _L("Export Configs"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX)
|
||||
{
|
||||
m_exprot_type.preset_bundle = _L("Printer config bundle(.bbscfg)");
|
||||
m_exprot_type.filament_bundle = _L("Filament bundle(.bbsflmt)");
|
||||
m_exprot_type.preset_bundle = _L("Printer config bundle(.orca_printer)");
|
||||
m_exprot_type.filament_bundle = _L("Filament bundle(.orca_filament)");
|
||||
m_exprot_type.printer_preset = _L("Printer presets(.zip)");
|
||||
m_exprot_type.filament_preset = _L("Filament presets(.zip)");
|
||||
m_exprot_type.process_preset = _L("Process presets(.zip)");
|
||||
@@ -3407,49 +3409,7 @@ std::string ExportConfigsDialog::initial_file_path(const wxString &path, const s
|
||||
std::string export_path = into_u8(path);
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "initial file path and path is:" << export_path << " and sub path is: " << sub_file_path;
|
||||
boost::filesystem::path printer_export_path = (boost::filesystem::path(export_path) / sub_file_path).make_preferred();
|
||||
if (boost::filesystem::exists(printer_export_path)) {
|
||||
MessageDialog dlg(this, wxString::Format(_L("The '%s' folder already exists in the current directory. Do you want to clear it and rebuild it.\nIf not, a time suffix will be "
|
||||
"added, and you can modify the name after creation."), sub_file_path), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES_NO | wxYES_DEFAULT | wxCENTRE);
|
||||
int res = dlg.ShowModal();
|
||||
if (wxID_YES == res) {
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and need to rebuild, and path is: " << printer_export_path.string();
|
||||
try {
|
||||
boost::filesystem::remove_all(printer_export_path);
|
||||
} catch (...) {
|
||||
MessageDialog dlg(this, _L(wxString::Format("The file: %s \nin the directory may have been opened by another program. \nPlease close it and try again.",
|
||||
encode_path(printer_export_path.string().c_str()))),
|
||||
wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"),
|
||||
wxYES | wxYES_DEFAULT | wxCENTRE);
|
||||
dlg.ShowModal();
|
||||
return "initial_failed";
|
||||
}
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "delete path";
|
||||
boost::filesystem::create_directories(printer_export_path);
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "create path";
|
||||
export_path = printer_export_path.string();
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and rebuild, and path is: " << export_path;
|
||||
} else if (wxID_NO == res) {
|
||||
export_path = printer_export_path.string();
|
||||
std::string export_path_with_time;
|
||||
boost::filesystem::path *printer_export_path_with_time = nullptr;
|
||||
do {
|
||||
if (printer_export_path_with_time) {
|
||||
delete printer_export_path_with_time;
|
||||
printer_export_path_with_time = nullptr;
|
||||
}
|
||||
export_path_with_time = export_path + " " + get_curr_time();
|
||||
printer_export_path_with_time = new boost::filesystem::path(export_path_with_time);
|
||||
} while (boost::filesystem::exists(*printer_export_path_with_time));
|
||||
export_path = export_path_with_time;
|
||||
boost::filesystem::create_directories(*printer_export_path_with_time);
|
||||
if (printer_export_path_with_time) {
|
||||
delete printer_export_path_with_time;
|
||||
printer_export_path_with_time = nullptr;
|
||||
}
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
} else {
|
||||
if (!boost::filesystem::exists(printer_export_path)) {
|
||||
boost::filesystem::create_directories(printer_export_path);
|
||||
export_path = printer_export_path.string();
|
||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Same path exists, delete and rebuild, and path is: " << export_path;
|
||||
@@ -3519,7 +3479,7 @@ wxBoxSizer *ExportConfigsDialog::create_export_config_item(wxWindow *parent)
|
||||
|
||||
radioBoxSizer->Add(create_radio_item(m_exprot_type.preset_bundle, parent, wxEmptyString, m_export_type_btns), 0, wxEXPAND | wxALL, 0);
|
||||
radioBoxSizer->Add(0, 0, 0, wxTOP, FromDIP(6));
|
||||
wxStaticText *static_export_printer_preset_bundle_text = new wxStaticText(parent, wxID_ANY, _L("Printer and all the filament&process presets that belongs to the printer. \nCan be shared with others."), wxDefaultPosition, wxDefaultSize);
|
||||
wxStaticText *static_export_printer_preset_bundle_text = new wxStaticText(parent, wxID_ANY, _L("Printer and all the filament&&process presets that belongs to the printer. \nCan be shared with others."), wxDefaultPosition, wxDefaultSize);
|
||||
static_export_printer_preset_bundle_text->SetFont(Label::Body_12);
|
||||
static_export_printer_preset_bundle_text->SetForegroundColour(wxColour("#6B6B6B"));
|
||||
radioBoxSizer->Add(static_export_printer_preset_bundle_text, 0, wxEXPAND | wxLEFT, FromDIP(22));
|
||||
@@ -3707,7 +3667,7 @@ void ExportConfigsDialog::select_curr_radiobox(std::vector<std::pair<RadioBox *,
|
||||
|
||||
ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_file(const wxString &path)
|
||||
{
|
||||
std::string export_path = initial_file_path(path, "Printer config bundle");
|
||||
std::string export_path = initial_file_path(path, "");
|
||||
if (export_path.empty() || "initial_failed" == export_path) return ExportCase::EXPORT_CANCEL;
|
||||
BOOST_LOG_TRIVIAL(info) << "Export printer preset bundle";
|
||||
|
||||
@@ -3717,19 +3677,11 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi
|
||||
std::string printer_preset_name_ = printer_preset->name;
|
||||
|
||||
json bundle_structure;
|
||||
NetworkAgent *agent = wxGetApp().getAgent();
|
||||
std::string clock = get_curr_timestmp();
|
||||
if (agent) {
|
||||
bundle_structure["user_name"] = agent->get_user_name();
|
||||
bundle_structure["user_id"] = agent->get_user_id();
|
||||
bundle_structure["version"] = agent->get_version();
|
||||
bundle_structure["bundle_id"] = agent->get_user_id() + "_" + printer_preset_name_ + "_" + clock;
|
||||
} else {
|
||||
bundle_structure["user_name"] = "";
|
||||
bundle_structure["user_id"] = "";
|
||||
bundle_structure["version"] = "";
|
||||
bundle_structure["bundle_id"] = "offline_" + printer_preset_name_ + "_" + clock;
|
||||
}
|
||||
bundle_structure["user_name"] = "";
|
||||
bundle_structure["user_id"] = "";
|
||||
bundle_structure["version"] = SoftFever_VERSION;
|
||||
bundle_structure["bundle_id"] = printer_preset_name_ + "_" + clock;
|
||||
bundle_structure["bundle_type"] = "printer config bundle";
|
||||
bundle_structure["printer_preset_name"] = printer_preset_name_;
|
||||
json printer_config = json::array();
|
||||
@@ -3737,21 +3689,21 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi
|
||||
json process_configs = json::array();
|
||||
|
||||
mz_zip_archive zip_archive;
|
||||
mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + printer_preset->name + ".bbscfg");
|
||||
mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + printer_preset->name + ".orca_printer");
|
||||
if (MZ_FALSE == status) {
|
||||
BOOST_LOG_TRIVIAL(info) << "Failed to initialize ZIP archive";
|
||||
return ExportCase::INITIALIZE_FAIL;
|
||||
}
|
||||
|
||||
boost::filesystem::path pronter_file_path = boost::filesystem::path(printer_preset->file);
|
||||
std::string preset_path = pronter_file_path.make_preferred().string();
|
||||
boost::filesystem::path printer_file_path = boost::filesystem::path(printer_preset->file);
|
||||
std::string preset_path = printer_file_path.make_preferred().string();
|
||||
if (preset_path.empty()) {
|
||||
BOOST_LOG_TRIVIAL(info) << "Export printer preset: " << printer_preset->name << " skip because of the preset file path is empty.";
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add a file to the ZIP file
|
||||
std::string printer_config_file_name = "printer/" + pronter_file_path.filename().string();
|
||||
std::string printer_config_file_name = "printer/" + printer_file_path.filename().string();
|
||||
status = mz_zip_writer_add_file(&zip_archive, printer_config_file_name.c_str(), encode_path(preset_path.c_str()).c_str(), NULL, 0, MZ_DEFAULT_COMPRESSION);
|
||||
//status = mz_zip_writer_add_mem(&zip_archive, ("printer/" + printer_preset->name + ".json").c_str(), json_contents, strlen(json_contents), MZ_DEFAULT_COMPRESSION);
|
||||
if (MZ_FALSE == status) {
|
||||
@@ -3831,7 +3783,7 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_preset_bundle_to_fi
|
||||
|
||||
ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_file(const wxString &path)
|
||||
{
|
||||
std::string export_path = initial_file_path(path, "Filament bundle");
|
||||
std::string export_path = initial_file_path(path, "");
|
||||
if (export_path.empty() || "initial_failed" == export_path) return ExportCase::EXPORT_CANCEL;
|
||||
BOOST_LOG_TRIVIAL(info) << "Export filament preset bundle";
|
||||
|
||||
@@ -3840,25 +3792,17 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_
|
||||
std::string filament_name = checkbox_filament_name.second;
|
||||
|
||||
json bundle_structure;
|
||||
NetworkAgent *agent = wxGetApp().getAgent();
|
||||
std::string clock = get_curr_timestmp();
|
||||
if (agent) {
|
||||
bundle_structure["user_name"] = agent->get_user_name();
|
||||
bundle_structure["user_id"] = agent->get_user_id();
|
||||
bundle_structure["version"] = agent->get_version();
|
||||
bundle_structure["bundle_id"] = agent->get_user_id() + "_" + filament_name + "_" + clock;
|
||||
} else {
|
||||
bundle_structure["user_name"] = "";
|
||||
bundle_structure["user_id"] = "";
|
||||
bundle_structure["version"] = "";
|
||||
bundle_structure["bundle_id"] = "offline_" + filament_name + "_" + clock;
|
||||
}
|
||||
bundle_structure["user_name"] = "";
|
||||
bundle_structure["user_id"] = "";
|
||||
bundle_structure["version"] = SoftFever_VERSION;
|
||||
bundle_structure["bundle_id"] = filament_name + "_" + clock;
|
||||
bundle_structure["bundle_type"] = "filament config bundle";
|
||||
bundle_structure["filament_name"] = filament_name;
|
||||
std::unordered_map<std::string, json> vendor_structure;
|
||||
|
||||
mz_zip_archive zip_archive;
|
||||
mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + filament_name + ".bbsflmt");
|
||||
mz_bool status = initial_zip_archive(zip_archive, export_path + "/" + filament_name + ".orca_filament");
|
||||
if (MZ_FALSE == status) {
|
||||
BOOST_LOG_TRIVIAL(info) << "Failed to initialize ZIP archive";
|
||||
return ExportCase::INITIALIZE_FAIL;
|
||||
@@ -4070,7 +4014,7 @@ wxBoxSizer *ExportConfigsDialog::create_button_item(wxWindow* parent)
|
||||
return;
|
||||
}
|
||||
|
||||
wxDirDialog dlg(this, _L("Choose a directory"), from_u8(wxGetApp().app_config->get_last_dir()), wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
|
||||
wxDirDialog dlg(this, _L("Choose a directory"), "", wxDD_DEFAULT_STYLE | wxDD_DIR_MUST_EXIST);
|
||||
wxString path;
|
||||
if (dlg.ShowModal() == wxID_OK) path = dlg.GetPath();
|
||||
ExportCase export_case = ExportCase::EXPORT_CANCEL;
|
||||
|
||||
@@ -1378,9 +1378,13 @@ void MachineObject::parse_status(int flag)
|
||||
}
|
||||
|
||||
if (!is_support_p1s_plus) {
|
||||
is_support_p1s_plus = ((flag >> 27) & 0x1) != 0;
|
||||
}
|
||||
auto supported_plus = ((flag >> 27) & 0x1) != 0;
|
||||
auto installed_plus = ((flag >> 26) & 0x1) != 0;
|
||||
|
||||
if (installed_plus && supported_plus) {
|
||||
is_support_p1s_plus = true;
|
||||
}
|
||||
}
|
||||
|
||||
sdcard_state = MachineObject::SdcardState((flag >> 8) & 0x11);
|
||||
|
||||
@@ -4064,12 +4068,6 @@ int MachineObject::parse_json(std::string payload)
|
||||
} else if (jj["command"].get<std::string>() == "gcode_line") {
|
||||
//ack of gcode_line
|
||||
BOOST_LOG_TRIVIAL(debug) << "parse_json, ack of gcode_line = " << j.dump(4);
|
||||
if (m_agent && is_studio_cmd(sequence_id)) {
|
||||
json t;
|
||||
t["dev_id"] = this->dev_id;
|
||||
t["signal"] = this->wifi_signal;
|
||||
m_agent->track_event("ack_cmd_gcode_line", t.dump());
|
||||
}
|
||||
} else if (jj["command"].get<std::string>() == "project_prepare") {
|
||||
//ack of project file
|
||||
BOOST_LOG_TRIVIAL(info) << "parse_json, ack of project_prepare = " << j.dump(4);
|
||||
@@ -4082,13 +4080,6 @@ int MachineObject::parse_json(std::string payload)
|
||||
} else if (jj["command"].get<std::string>() == "project_file") {
|
||||
//ack of project file
|
||||
BOOST_LOG_TRIVIAL(debug) << "parse_json, ack of project_file = " << j.dump(4);
|
||||
|
||||
if (m_agent && is_studio_cmd(sequence_id)) {
|
||||
json t;
|
||||
t["dev_id"] = this->dev_id;
|
||||
t["signal"] = this->wifi_signal;
|
||||
m_agent->track_event("ack_cmd_project_file", t.dump());
|
||||
}
|
||||
std::string result;
|
||||
if (jj.contains("result")) {
|
||||
result = jj["result"].get<std::string>();
|
||||
|
||||
@@ -4504,16 +4504,17 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||
return ret;
|
||||
};
|
||||
|
||||
auto calculate_offsets = [max_width, window_padding](const std::vector<std::pair<std::string, std::vector<::string>>>& title_columns, float extra_size = 0.0f) {
|
||||
auto calculate_offsets = [&imgui, max_width, window_padding](const std::vector<std::pair<std::string, std::vector<::string>>>& title_columns, float extra_size = 0.0f) {
|
||||
const ImGuiStyle& style = ImGui::GetStyle();
|
||||
std::vector<float> offsets;
|
||||
offsets.push_back(max_width(title_columns[0].second, title_columns[0].first, extra_size) + 3.0f * style.ItemSpacing.x);
|
||||
for (size_t i = 1; i < title_columns.size() - 1; i++)
|
||||
offsets.push_back(offsets.back() + max_width(title_columns[i].second, title_columns[i].first) + style.ItemSpacing.x);
|
||||
if (title_columns.back().first == _u8L("Display")) {
|
||||
const auto preferred_offset = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding;
|
||||
const auto preferred_offset = ImGui::GetWindowWidth() - ImGui::CalcTextSize(_u8L("Display").c_str()).x - ImGui::GetFrameHeight() / 2 - 2 * window_padding - ImGui::GetStyle().ScrollbarSize;
|
||||
if (preferred_offset > offsets.back()) {
|
||||
offsets.back() = preferred_offset;
|
||||
imgui.set_requires_extra_frame();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+73
-65
@@ -4,6 +4,7 @@
|
||||
#include "GUI_ObjectList.hpp"
|
||||
#include "GUI_Factories.hpp"
|
||||
#include "format.hpp"
|
||||
#include "libslic3r_version.h"
|
||||
|
||||
// Localization headers: include libslic3r version first so everything in this file
|
||||
// uses the slic3r/GUI version (the macros will take precedence over the functions).
|
||||
@@ -4290,7 +4291,8 @@ Semver get_version(const std::string& str, const std::regex& regexp) {
|
||||
void GUI_App::check_new_version_sf(bool show_tips, int by_user)
|
||||
{
|
||||
AppConfig* app_config = wxGetApp().app_config;
|
||||
auto version_check_url = app_config->version_check_url();
|
||||
bool check_stable_only = app_config->get_bool("check_stable_update_only");
|
||||
auto version_check_url = app_config->version_check_url(check_stable_only);
|
||||
Http::get(version_check_url)
|
||||
.on_error([&](std::string body, std::string error, unsigned http_status) {
|
||||
(void)body;
|
||||
@@ -4298,25 +4300,22 @@ void GUI_App::check_new_version_sf(bool show_tips, int by_user)
|
||||
error);
|
||||
})
|
||||
.timeout_connect(1)
|
||||
.on_complete([this,by_user](std::string body, unsigned http_status) {
|
||||
.on_complete([this,by_user, check_stable_only](std::string body, unsigned http_status) {
|
||||
// Http response OK
|
||||
if (http_status != 200)
|
||||
return;
|
||||
try {
|
||||
boost::trim(body);
|
||||
// SoftFever: parse github release, ported from SS
|
||||
|
||||
// Orca: parse github release, inspired by SS
|
||||
boost::property_tree::ptree root;
|
||||
|
||||
std::stringstream json_stream(body);
|
||||
boost::property_tree::read_json(json_stream, root);
|
||||
|
||||
bool i_am_pre = false;
|
||||
// at least two number, use '.' as separator. can be followed by -Az23 for prereleased and +Az42 for
|
||||
// metadata
|
||||
std::regex matcher("[0-9]+\\.[0-9]+(\\.[0-9]+)*(-[A-Za-z0-9]+)?(\\+[A-Za-z0-9]+)?");
|
||||
|
||||
Semver current_version = get_version(SoftFever_VERSION, matcher);
|
||||
Semver current_version = get_version(SoftFever_VERSION, matcher);
|
||||
Semver best_pre(1, 0, 0);
|
||||
Semver best_release(1, 0, 0);
|
||||
std::string best_pre_url;
|
||||
@@ -4324,56 +4323,73 @@ void GUI_App::check_new_version_sf(bool show_tips, int by_user)
|
||||
std::string best_release_content;
|
||||
std::string best_pre_content;
|
||||
const std::regex reg_num("([0-9]+)");
|
||||
std::string tag = root.get<std::string>("tag_name");
|
||||
if (tag[0] == 'v')
|
||||
tag.erase(0, 1);
|
||||
for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num);
|
||||
it != std::sregex_iterator(); ++it) {
|
||||
}
|
||||
Semver tag_version = get_version(tag, matcher);
|
||||
if (current_version == tag_version)
|
||||
i_am_pre = root.get<bool>("prerelease");
|
||||
if (root.get<bool>("prerelease")) {
|
||||
if (best_pre < tag_version) {
|
||||
best_pre = tag_version;
|
||||
best_pre_url = root.get<std::string>("html_url");
|
||||
best_pre_content = root.get<std::string>("body");
|
||||
best_pre.set_prerelease("Preview");
|
||||
}
|
||||
if (check_stable_only) {
|
||||
std::string tag = root.get<std::string>("tag_name");
|
||||
if (tag[0] == 'v')
|
||||
tag.erase(0, 1);
|
||||
for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); it != std::sregex_iterator(); ++it) {}
|
||||
Semver tag_version = get_version(tag, matcher);
|
||||
if (root.get<bool>("prerelease")) {
|
||||
if (best_pre < tag_version) {
|
||||
best_pre = tag_version;
|
||||
best_pre_url = root.get<std::string>("html_url");
|
||||
best_pre_content = root.get<std::string>("body");
|
||||
best_pre.set_prerelease("Preview");
|
||||
}
|
||||
} else {
|
||||
if (best_release < tag_version) {
|
||||
best_release = tag_version;
|
||||
best_release_url = root.get<std::string>("html_url");
|
||||
best_release_content = root.get<std::string>("body");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (best_release < tag_version) {
|
||||
best_release = tag_version;
|
||||
best_release_url = root.get<std::string>("html_url");
|
||||
best_release_content = root.get<std::string>("body");
|
||||
}
|
||||
for (auto json_version : root) {
|
||||
std::string tag = json_version.second.get<std::string>("tag_name");
|
||||
if (tag[0] == 'v')
|
||||
tag.erase(0, 1);
|
||||
for (std::regex_iterator it = std::sregex_iterator(tag.begin(), tag.end(), reg_num); it != std::sregex_iterator();
|
||||
++it) {}
|
||||
Semver tag_version = get_version(tag, matcher);
|
||||
if (json_version.second.get<bool>("prerelease")) {
|
||||
if (best_pre < tag_version) {
|
||||
best_pre = tag_version;
|
||||
best_pre_url = json_version.second.get<std::string>("html_url");
|
||||
best_pre_content = json_version.second.get<std::string>("body");
|
||||
best_pre.set_prerelease("Preview");
|
||||
}
|
||||
} else {
|
||||
if (best_release < tag_version) {
|
||||
best_release = tag_version;
|
||||
best_release_url = json_version.second.get<std::string>("html_url");
|
||||
best_release_content = json_version.second.get<std::string>("body");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if release is more recent than beta, use release anyway
|
||||
if (best_pre < best_release) {
|
||||
best_pre = best_release;
|
||||
best_pre_url = best_release_url;
|
||||
best_pre_content = best_release_content;
|
||||
best_pre = best_release;
|
||||
best_pre_url = best_release_url;
|
||||
best_pre_content = best_release_content;
|
||||
}
|
||||
// if we're the most recent, don't do anything
|
||||
if ((i_am_pre ? best_pre : best_release) <= current_version) {
|
||||
if (by_user != 0)
|
||||
this->no_new_version();
|
||||
return;
|
||||
if ((check_stable_only ? best_release : best_pre) <= current_version) {
|
||||
if (by_user != 0)
|
||||
this->no_new_version();
|
||||
return;
|
||||
}
|
||||
|
||||
// BOOST_LOG_TRIVIAL(info) << format("Got %1% online version: `%2%`. Sending to GUI thread...",
|
||||
// SLIC3R_APP_NAME, i_am_pre ? best_pre.to_string(): best_release.to_string());
|
||||
|
||||
version_info.url = i_am_pre ? best_pre_url : best_release_url;
|
||||
version_info.version_str = i_am_pre ? best_pre.to_string() : best_release.to_string_sf();
|
||||
version_info.description = i_am_pre ? best_pre_content : best_release_content;
|
||||
version_info.url = check_stable_only ? best_release_url : best_pre_url;
|
||||
version_info.version_str = check_stable_only ? best_release.to_string_sf() : best_pre.to_string();
|
||||
version_info.description = check_stable_only ? best_release_content : best_pre_content;
|
||||
version_info.force_upgrade = false;
|
||||
|
||||
wxCommandEvent *evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE);
|
||||
evt->SetString((i_am_pre ? best_pre : best_release).to_string());
|
||||
wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE);
|
||||
evt->SetString((check_stable_only ? best_release : best_pre).to_string());
|
||||
GUI::wxGetApp().QueueEvent(evt);
|
||||
} catch (...) {
|
||||
}
|
||||
} catch (...) {}
|
||||
})
|
||||
.perform();
|
||||
}
|
||||
@@ -4591,8 +4607,7 @@ void GUI_App::sync_preset(Preset* preset)
|
||||
if (http_code >= 400) {
|
||||
result = 0;
|
||||
updated_info = "hold";
|
||||
}
|
||||
else
|
||||
} else
|
||||
result = -1;
|
||||
}
|
||||
}
|
||||
@@ -4614,8 +4629,7 @@ void GUI_App::sync_preset(Preset* preset)
|
||||
auto update_time_str = values_map[BBL_JSON_KEY_UPDATE_TIME];
|
||||
if (!update_time_str.empty())
|
||||
update_time = std::atoll(update_time_str.c_str());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(trace) << "[sync_preset]create: request_setting_id failed, http code "<<http_code;
|
||||
// do not post new preset this time if http code >= 400
|
||||
if (http_code >= 400) {
|
||||
@@ -4625,12 +4639,10 @@ void GUI_App::sync_preset(Preset* preset)
|
||||
else
|
||||
result = -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(trace) << "[sync_preset]create: can not generate differed preset";
|
||||
}
|
||||
}
|
||||
else if (preset->sync_info.compare("update") == 0) {
|
||||
} else if (preset->sync_info.compare("update") == 0) {
|
||||
if (!setting_id.empty()) {
|
||||
int ret = preset_bundle->get_differed_values_to_update(*preset, values_map);
|
||||
if (!ret) {
|
||||
@@ -4724,7 +4736,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
|
||||
cancelFn = [this, dlg]() {
|
||||
return m_is_closing || dlg->WasCanceled();
|
||||
};
|
||||
finishFn = [this, userid = m_agent->get_user_id(), dlg, t = std::weak_ptr(m_user_sync_token)](bool ok) {
|
||||
finishFn = [this, userid = m_agent->get_user_id(), dlg, t = std::weak_ptr<int>(m_user_sync_token)](bool ok) {
|
||||
CallAfter([=]{
|
||||
dlg->Destroy();
|
||||
if (ok && m_agent && t.lock() == m_user_sync_token && userid == m_agent->get_user_id()) reload_settings();
|
||||
@@ -4732,7 +4744,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
|
||||
};
|
||||
}
|
||||
else {
|
||||
finishFn = [this, userid = m_agent->get_user_id(), t = std::weak_ptr(m_user_sync_token)](bool ok) {
|
||||
finishFn = [this, userid = m_agent->get_user_id(), t = std::weak_ptr<int>(m_user_sync_token)](bool ok) {
|
||||
CallAfter([=] {
|
||||
if (ok && m_agent && t.lock() == m_user_sync_token && userid == m_agent->get_user_id()) reload_settings();
|
||||
});
|
||||
@@ -4740,7 +4752,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg)
|
||||
}
|
||||
|
||||
m_sync_update_thread = Slic3r::create_thread(
|
||||
[this, progressFn, cancelFn, finishFn, t = std::weak_ptr(m_user_sync_token)] {
|
||||
[this, progressFn, cancelFn, finishFn, t = std::weak_ptr<int>(m_user_sync_token)] {
|
||||
// get setting list, update setting list
|
||||
std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string();
|
||||
int ret = m_agent->get_setting_list2(version, [this](auto info) {
|
||||
@@ -5028,7 +5040,7 @@ bool GUI_App::select_language()
|
||||
// 3) new_language_info->CanonicalName is a safe bet. It points to a valid dictionary name.
|
||||
app_config->set("language", new_language_info->CanonicalName.ToUTF8().data());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -5936,18 +5948,15 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames)
|
||||
input_files.push_back(non_gcode_files[i]);
|
||||
}
|
||||
this->plater()->load_files(input_files);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
for (size_t i = 0; i < files.size(); ++i) {
|
||||
this->init_params->input_files.emplace_back(files[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
if (m_post_initialized) {
|
||||
this->plater()->load_gcode(gcode_files.front());
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this->init_params->input_gcode = true;
|
||||
this->init_params->input_files = { into_u8(gcode_files.front()) };
|
||||
}
|
||||
@@ -6296,8 +6305,7 @@ void GUI_App::gcode_thumbnails_debug()
|
||||
width = 0;
|
||||
height = 0;
|
||||
rows.clear();
|
||||
}
|
||||
else if (reading_image)
|
||||
} else if (reading_image)
|
||||
row += gcode_line.substr(2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -220,7 +220,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_
|
||||
optgroup->sidetext_width = 5;
|
||||
optgroup->set_config_category_and_type(GUI::from_u8(group_category), Preset::TYPE_PRINT);
|
||||
|
||||
std::weak_ptr weak_optgroup(optgroup);
|
||||
std::weak_ptr<ConfigOptionsGroup> weak_optgroup(optgroup);
|
||||
optgroup->m_on_change = [this, is_object, object, config, group_category](const t_config_option_key &opt_id, const boost::any &value) {
|
||||
this->m_parent->Freeze();
|
||||
this->update_config_values(is_object, object, config, group_category);
|
||||
|
||||
@@ -668,7 +668,7 @@ void GLGizmoAdvancedCut::perform_cut(const Selection& selection)
|
||||
if (its_num_open_edges(new_objects[i]->volumes[j]->mesh().its) > 0) {
|
||||
if (!is_showed_dialog) {
|
||||
is_showed_dialog = true;
|
||||
MessageDialog dlg(nullptr, _L("non-mainifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL);
|
||||
MessageDialog dlg(nullptr, _L("non-manifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL);
|
||||
int ret = dlg.ShowModal();
|
||||
if (ret == wxID_YES) {
|
||||
user_fix_model = true;
|
||||
|
||||
@@ -3392,7 +3392,7 @@ void GLGizmoCut3D::perform_cut(const Selection& selection)
|
||||
if (its_num_open_edges(new_objects[i]->volumes[j]->mesh().its) > 0) {
|
||||
if (!is_showed_dialog) {
|
||||
is_showed_dialog = true;
|
||||
MessageDialog dlg(nullptr, _L("non-mainifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL);
|
||||
MessageDialog dlg(nullptr, _L("non-manifold edges be caused by cut tool, do you want to fix it now?"), "", wxYES | wxCANCEL);
|
||||
int ret = dlg.ShowModal();
|
||||
if (ret == wxID_YES) {
|
||||
user_fix_model = true;
|
||||
|
||||
@@ -258,7 +258,7 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
{ "F", L("Gizmo Place face on bed") },
|
||||
{ "L", L("Gizmo SLA support points") },
|
||||
{ "P", L("Gizmo FDM paint-on seam") },
|
||||
{ "Tab", L("Swtich between Prepare/Prewview") },
|
||||
{ "Tab", L("Switch between Prepare/Preview") },
|
||||
|
||||
};
|
||||
m_full_shortcuts.push_back({ { _L("Plater"), "" }, plater_shortcuts });
|
||||
@@ -300,7 +300,7 @@ void KBShortcutsDialog::fill_shortcuts()
|
||||
{ L("Arrow Right"), L("Horizontal slider - Move active thumb Right")},
|
||||
{ "L", L("On/Off one layer mode of the vertical slider")},
|
||||
{ "C", L("On/Off g-code window")},
|
||||
{ "Tab", L("Swtich between Prepare/Prewview") },
|
||||
{ "Tab", L("Switch between Prepare/Preview") },
|
||||
{L("Shift+Any arrow"), L("Move slider 5x faster")},
|
||||
{L("Shift+Mouse wheel"), L("Move slider 5x faster")},
|
||||
#ifdef __APPLE__
|
||||
|
||||
@@ -3084,7 +3084,7 @@ void MainFrame::load_config_file()
|
||||
// return;
|
||||
wxFileDialog dlg(this, _L("Select profile to load:"),
|
||||
!m_last_config.IsEmpty() ? get_dir_name(m_last_config) : wxGetApp().app_config->get_last_dir(),
|
||||
"config.json", "Config files (*.json;*.zip;*.bbscfg;*.bbsflmt)|*.json;*.zip;*.bbscfg;*.bbsflmt", wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST);
|
||||
"config.json", "Config files (*.json;*.zip;*.orca_printer;*.orca_filament)|*.json;*.zip;*.orca_printer;*.orca_filament", wxFD_OPEN | wxFD_MULTIPLE | wxFD_FILE_MUST_EXIST);
|
||||
wxArrayString files;
|
||||
if (dlg.ShowModal() != wxID_OK)
|
||||
return;
|
||||
@@ -3113,8 +3113,11 @@ void MainFrame::load_config_file()
|
||||
}
|
||||
wxGetApp().preset_bundle->update_compatible(PresetSelectCompatibleType::Always);
|
||||
update_side_preset_ui();
|
||||
MessageDialog dlg2(this, wxString::Format(_L_PLURAL("There is %d config imported. (Only non-system and compatible configs)",
|
||||
"There are %d configs imported. (Only non-system and compatible configs)", cfiles.size()), cfiles.size()),
|
||||
auto msg = wxString::Format(_L_PLURAL("There is %d config imported. (Only non-system and compatible configs)",
|
||||
"There are %d configs imported. (Only non-system and compatible configs)", cfiles.size()), cfiles.size());
|
||||
if(cfiles.empty())
|
||||
msg += _L("\nHint: Make sure you have added the corresponding printer before importing the configs.");
|
||||
MessageDialog dlg2(this,msg ,
|
||||
_L("Import result"), wxOK);
|
||||
dlg2.ShowModal();
|
||||
}
|
||||
|
||||
@@ -37,10 +37,10 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w
|
||||
|
||||
m_button_play->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &e) { TogglePlay(); });
|
||||
m_button_play->Bind(wxEVT_RIGHT_UP, [this](auto & e) { m_media_ctrl->Play(); });
|
||||
m_label_status->Bind(wxEVT_LEFT_UP, [this](auto &e) {
|
||||
auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/faq/live-view", L"en");
|
||||
wxLaunchDefaultBrowser(url);
|
||||
});
|
||||
// m_label_status->Bind(wxEVT_LEFT_UP, [this](auto &e) {
|
||||
// auto url = wxString::Format(L"https://wiki.bambulab.com/%s/software/bambu-studio/faq/live-view", L"en");
|
||||
// wxLaunchDefaultBrowser(url);
|
||||
// });
|
||||
|
||||
Bind(wxEVT_RIGHT_UP, [this](auto & e) {
|
||||
wxClipboard & c = *wxTheClipboard;
|
||||
|
||||
@@ -701,9 +701,6 @@ Sidebar::Sidebar(Plater *parent)
|
||||
bed_type_title->SetFont(font);
|
||||
SetCursor(wxCURSOR_ARROW);
|
||||
});
|
||||
bed_type_title->Bind(wxEVT_LEFT_UP, [bed_type_title, this](wxMouseEvent &e) {
|
||||
wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/x1/manual/compatibility-and-parameter-settings-of-filaments");
|
||||
});
|
||||
|
||||
AppConfig *app_config = wxGetApp().app_config;
|
||||
std::string str_bed_type = app_config->get("curr_bed_type");
|
||||
|
||||
@@ -159,19 +159,16 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(
|
||||
language_name = wxString::FromUTF8("\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4");
|
||||
}
|
||||
else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_RUSSIAN)) {
|
||||
language_name = wxString::FromUTF8("\xD0\xA0\xD1\x83\xD1\x81\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9");
|
||||
}
|
||||
else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CZECH)) {
|
||||
language_name = wxString::FromUTF8("\xC4\x8D\x65\xC5\xA1\x74\x69\x6E\x61");
|
||||
language_name = wxString::FromUTF8("\xd0\xa0\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xb8\xd0\xb9");
|
||||
}
|
||||
else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_UKRAINIAN)) {
|
||||
language_name = wxString::FromUTF8("\xC4\x8D\x65\xC5\xA1\x74\x69\x6E\x61");
|
||||
language_name = wxString::FromUTF8("Ukrainian");
|
||||
}
|
||||
else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_TURKISH)) {
|
||||
language_name = wxString::FromUTF8("\xD1\x83\xD0\xBA\xD1\x80\xD0\xB0\xD1\x97\xD1\x9D\xD1\x81\xD1\x8C\xD0\xBA\xD0\xB0");
|
||||
language_name = wxString::FromUTF8("Turkish");
|
||||
}
|
||||
|
||||
if (language == vlist[i]->CanonicalName) {
|
||||
if (app_config->get(param) == vlist[i]->CanonicalName) {
|
||||
m_current_language_selected = i;
|
||||
}
|
||||
combobox->Append(language_name);
|
||||
@@ -999,6 +996,7 @@ wxWindow* PreferencesDialog::create_general_page()
|
||||
auto item_region= create_item_region_combobox(_L("Login Region"), page, _L("Login Region"), Regions);
|
||||
|
||||
auto item_stealth_mode = create_item_checkbox(_L("Stealth Mode"), page, _L("Stealth Mode"), 50, "stealth_mode");
|
||||
auto item_check_stable_version_only = create_item_checkbox(_L("Check for stable updates only"), page, _L("Check for stable updates only"), 50, "check_stable_update_only");
|
||||
|
||||
std::vector<wxString> Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"};
|
||||
auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units);
|
||||
@@ -1075,6 +1073,7 @@ wxWindow* PreferencesDialog::create_general_page()
|
||||
sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3));
|
||||
sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20));
|
||||
sizer_page->Add(item_stealth_mode, 0, wxTOP, FromDIP(3));
|
||||
sizer_page->Add(item_check_stable_version_only, 0, wxTOP, FromDIP(3));
|
||||
sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3));
|
||||
sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3));
|
||||
sizer_page->Add(item_system_sync, 0, wxTOP, FromDIP(3));
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <algorithm>
|
||||
#include "Plater.hpp"
|
||||
#include "BitmapCache.hpp"
|
||||
#include "slic3r/GUI/GUI_App.hpp"
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
@@ -293,7 +294,8 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
|
||||
m_vebview_release_note->Bind(wxEVT_WEBVIEW_NAVIGATING,[=](wxWebViewEvent& event){
|
||||
static bool load_url_first = false;
|
||||
if(load_url_first){
|
||||
wxLaunchDefaultBrowser(url_line);
|
||||
// Orca: not used in Orca Slicer
|
||||
// wxLaunchDefaultBrowser(url_line);
|
||||
event.Veto();
|
||||
}else{
|
||||
load_url_first = true;
|
||||
@@ -317,11 +319,6 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
|
||||
|
||||
|
||||
|
||||
m_bitmap_open_in_browser = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("open_in_browser", this, 12), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_link_open_in_browser = new wxHyperlinkCtrl(this, wxID_ANY, "Open in browser", "");
|
||||
m_link_open_in_browser->SetFont(Label::Body_12);
|
||||
|
||||
|
||||
auto sizer_button = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
|
||||
@@ -357,6 +354,17 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
|
||||
EndModal(wxID_NO);
|
||||
});
|
||||
|
||||
m_cb_stable_only = new CheckBox(this);
|
||||
m_cb_stable_only->SetValue(wxGetApp().app_config->get_bool("check_stable_update_only"));
|
||||
m_cb_stable_only->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) {
|
||||
wxGetApp().app_config->set_bool("check_stable_update_only", m_cb_stable_only->GetValue());
|
||||
e.Skip();
|
||||
});
|
||||
|
||||
auto stable_only_label = new Label(this, _L("Check for stable updates only"));
|
||||
stable_only_label->SetFont(Label::Body_13);
|
||||
stable_only_label->SetForegroundColour(wxColour(38, 46, 48));
|
||||
stable_only_label->SetFont(Label::Body_12);
|
||||
|
||||
m_button_cancel = new Button(this, _L("Cancel"));
|
||||
m_button_cancel->SetBackgroundColor(btn_bg_white);
|
||||
@@ -372,10 +380,10 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent)
|
||||
|
||||
m_sizer_main->Add(m_line_top, 0, wxEXPAND | wxBOTTOM, 0);
|
||||
|
||||
sizer_button->Add(m_bitmap_open_in_browser, 0, wxALIGN_CENTER | wxLEFT, FromDIP(7));
|
||||
sizer_button->Add(m_link_open_in_browser, 0, wxALIGN_CENTER| wxLEFT, FromDIP(3));
|
||||
//sizer_button->Add(m_remind_choice, 0, wxALL | wxEXPAND, FromDIP(5));
|
||||
sizer_button->AddStretchSpacer();
|
||||
sizer_button->Add(stable_only_label, 0, wxALIGN_CENTER | wxLEFT, FromDIP(7));
|
||||
sizer_button->Add(m_cb_stable_only, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5));
|
||||
sizer_button->Add(m_button_download, 0, wxALL, FromDIP(5));
|
||||
sizer_button->Add(m_button_skip_version, 0, wxALL, FromDIP(5));
|
||||
sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5));
|
||||
@@ -510,7 +518,6 @@ void UpdateVersionDialog::update_version_info(wxString release_note, wxString ve
|
||||
m_text_up_info->Hide();
|
||||
m_simplebook_release_note->SetSelection(1);
|
||||
m_vebview_release_note->LoadURL(from_u8(url_line));
|
||||
m_link_open_in_browser->SetURL(url_line);
|
||||
}
|
||||
else {
|
||||
m_simplebook_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430)));
|
||||
|
||||
@@ -99,8 +99,8 @@ public:
|
||||
wxBoxSizer * sizer_text_release_note{nullptr};
|
||||
Label * m_staticText_release_note{nullptr};
|
||||
wxStaticBitmap* m_bitmap_open_in_browser;
|
||||
wxHyperlinkCtrl* m_link_open_in_browser;
|
||||
Button* m_button_skip_version;
|
||||
CheckBox* m_cb_stable_only;
|
||||
Button* m_button_download;
|
||||
Button* m_button_cancel;
|
||||
std::string url_line;
|
||||
|
||||
@@ -433,7 +433,7 @@ void SelectMachinePopup::Popup(wxWindow *WXUNUSED(focus))
|
||||
|
||||
if (wxGetApp().is_user_login()) {
|
||||
if (!get_print_info_thread) {
|
||||
get_print_info_thread = new boost::thread(Slic3r::create_thread([this, token = std::weak_ptr(m_token)] {
|
||||
get_print_info_thread = new boost::thread(Slic3r::create_thread([this, token = std::weak_ptr<int>(m_token)] {
|
||||
NetworkAgent* agent = wxGetApp().getAgent();
|
||||
unsigned int http_code;
|
||||
std::string body;
|
||||
@@ -2347,14 +2347,19 @@ bool SelectMachineDialog::is_same_printer_model()
|
||||
const auto source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle);
|
||||
const auto target_model = obj_->printer_type;
|
||||
// Orca: ignore P1P -> P1S
|
||||
if (source_model != target_model && !(preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle) == "C12") && !(target_model == "C11" && source_model == "C12")) {
|
||||
if (source_model != target_model) {
|
||||
if ((source_model == "C12" && target_model == "C11") || (source_model == "C11" && target_model == "C12") ||
|
||||
(obj_->is_support_p1s_plus && (source_model == "C12"))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOST_LOG_TRIVIAL(info) << "printer_model: source = " << source_model;
|
||||
BOOST_LOG_TRIVIAL(info) << "printer_model: target = " << target_model;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (obj_->is_support_p1s_plus) {
|
||||
BOOST_LOG_TRIVIAL(info) << "printer_model: source = " << preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle);
|
||||
BOOST_LOG_TRIVIAL(info) << "printer_model: source = " << source_model;
|
||||
BOOST_LOG_TRIVIAL(info) << "printer_model: target = " << obj_->printer_type << " (plus)";
|
||||
return false;
|
||||
}
|
||||
@@ -2833,7 +2838,7 @@ void SelectMachineDialog::update_user_machine_list()
|
||||
{
|
||||
NetworkAgent* m_agent = wxGetApp().getAgent();
|
||||
if (m_agent && m_agent->is_user_login()) {
|
||||
boost::thread get_print_info_thread = Slic3r::create_thread([this, token = std::weak_ptr(m_token)] {
|
||||
boost::thread get_print_info_thread = Slic3r::create_thread([this, token = std::weak_ptr<int>(m_token)] {
|
||||
NetworkAgent* agent = wxGetApp().getAgent();
|
||||
unsigned int http_code;
|
||||
std::string body;
|
||||
|
||||
@@ -813,7 +813,7 @@ void SendToPrinterDialog::update_user_machine_list()
|
||||
{
|
||||
NetworkAgent* m_agent = wxGetApp().getAgent();
|
||||
if (m_agent && m_agent->is_user_login()) {
|
||||
boost::thread get_print_info_thread = Slic3r::create_thread([this, token = std::weak_ptr(m_token)] {
|
||||
boost::thread get_print_info_thread = Slic3r::create_thread([this, token = std::weak_ptr<int>(m_token)] {
|
||||
NetworkAgent* agent = wxGetApp().getAgent();
|
||||
unsigned int http_code;
|
||||
std::string body;
|
||||
@@ -1391,4 +1391,4 @@ SendToPrinterDialog::~SendToPrinterDialog()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+28
-14
@@ -26,6 +26,7 @@
|
||||
|
||||
#include <boost/algorithm/string/predicate.hpp>
|
||||
#include <boost/algorithm/string/replace.hpp>
|
||||
#include "libslic3r/libslic3r.h"
|
||||
#include "wxExtensions.hpp"
|
||||
#include "PresetComboBoxes.hpp"
|
||||
#include <wx/wupdlock.h>
|
||||
@@ -1518,23 +1519,35 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value)
|
||||
auto max_layer_height_from_nozzle=wxGetApp().preset_bundle->full_config().option<ConfigOptionFloats>("max_layer_height")->values;
|
||||
auto layer_height_floor = *std::min_element(min_layer_height_from_nozzle.begin(), min_layer_height_from_nozzle.end());
|
||||
auto layer_height_ceil = *std::max_element(max_layer_height_from_nozzle.begin(), max_layer_height_from_nozzle.end());
|
||||
bool exceed_minimum_flag = m_config->opt_float("layer_height") < layer_height_floor;
|
||||
bool exceed_maximum_flag = m_config->opt_float("layer_height") > layer_height_ceil;
|
||||
const auto lh = m_config->opt_float("layer_height");
|
||||
bool exceed_minimum_flag = lh < layer_height_floor;
|
||||
bool exceed_maximum_flag = lh > layer_height_ceil;
|
||||
|
||||
if (exceed_maximum_flag || exceed_minimum_flag) {
|
||||
wxString msg_text = _(L("Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits ,this may cause printing quality issues."));
|
||||
msg_text += "\n\n" + _(L("Adjust to the set range automatically? \n"));
|
||||
MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxYES | wxNO);
|
||||
dialog.SetButtonLabel(wxID_YES, _L("Adjust"));
|
||||
dialog.SetButtonLabel(wxID_NO, _L("Ignore"));
|
||||
auto answer = dialog.ShowModal();
|
||||
auto new_conf = *m_config;
|
||||
if (answer == wxID_YES) {
|
||||
if (exceed_maximum_flag)
|
||||
new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_ceil));
|
||||
if (exceed_minimum_flag)
|
||||
new_conf.set_key_value("layer_height",new ConfigOptionFloat(layer_height_floor));
|
||||
if (lh < EPSILON) {
|
||||
auto msg_text = _(L("Layer height is too small.\nIt will set to min_layer_height\n"));
|
||||
MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxOK);
|
||||
dialog.SetButtonLabel(wxID_OK, _L("OK"));
|
||||
dialog.ShowModal();
|
||||
auto new_conf = *m_config;
|
||||
new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_floor));
|
||||
m_config_manipulation.apply(m_config, &new_conf);
|
||||
} else {
|
||||
wxString msg_text = _(L("Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits ,this may "
|
||||
"cause printing quality issues."));
|
||||
msg_text += "\n\n" + _(L("Adjust to the set range automatically? \n"));
|
||||
MessageDialog dialog(wxGetApp().plater(), msg_text, "", wxICON_WARNING | wxYES | wxNO);
|
||||
dialog.SetButtonLabel(wxID_YES, _L("Adjust"));
|
||||
dialog.SetButtonLabel(wxID_NO, _L("Ignore"));
|
||||
auto answer = dialog.ShowModal();
|
||||
auto new_conf = *m_config;
|
||||
if (answer == wxID_YES) {
|
||||
if (exceed_maximum_flag)
|
||||
new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_ceil));
|
||||
if (exceed_minimum_flag)
|
||||
new_conf.set_key_value("layer_height", new ConfigOptionFloat(layer_height_floor));
|
||||
m_config_manipulation.apply(m_config, &new_conf);
|
||||
}
|
||||
}
|
||||
wxGetApp().plater()->update();
|
||||
}
|
||||
@@ -1911,6 +1924,7 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("role_based_wipe_speed","seam");
|
||||
optgroup->append_single_option_line("wipe_speed", "seam");
|
||||
optgroup->append_single_option_line("wipe_on_loops","seam");
|
||||
optgroup->append_single_option_line("wipe_before_external_loop","seam");
|
||||
|
||||
|
||||
optgroup = page->new_optgroup(L("Precision"), L"param_precision");
|
||||
|
||||
@@ -272,8 +272,8 @@ SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const
|
||||
wxBoxSizer* connection_sizer_V = new wxBoxSizer(wxVERTICAL);
|
||||
wxBoxSizer* connection_sizer_H = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
m_hyperlink = new wxHyperlinkCtrl(m_connection_info, wxID_ANY, _L("Failed to connect to the server"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
|
||||
m_hyperlink->SetBackgroundColour(wxColour(255, 111, 0));
|
||||
// m_hyperlink = new wxHyperlinkCtrl(m_connection_info, wxID_ANY, _L("Failed to connect to the server"), wxT("https://wiki.bambulab.com/en/software/bambu-studio/failed-to-connect-printer"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
|
||||
// m_hyperlink->SetBackgroundColour(wxColour(255, 111, 0));
|
||||
|
||||
m_more_err_open = ScalableBitmap(this, "monitir_err_open", 16);
|
||||
m_more_err_close = ScalableBitmap(this, "monitir_err_close", 16);
|
||||
@@ -302,7 +302,7 @@ SideTools::SideTools(wxWindow *parent, wxWindowID id, const wxPoint &pos, const
|
||||
|
||||
});
|
||||
|
||||
connection_sizer_H->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
|
||||
// connection_sizer_H->Add(m_hyperlink, 0, wxALIGN_CENTER | wxALL, 5);
|
||||
connection_sizer_H->Add(m_more_button, 0, wxALIGN_CENTER | wxALL, 3);
|
||||
connection_sizer_V->Add(connection_sizer_H, 0, wxALIGN_CENTER, 0);
|
||||
|
||||
|
||||
@@ -525,7 +525,7 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector<float>& matrix, con
|
||||
auto message_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
tip_message_panel->SetSizer(message_sizer);
|
||||
{
|
||||
wxString message = _L("Studio would re-calculate your flushing volumes everytime the filaments color changed. You could disable the auto-calculate in Bambu Studio > Preferences");
|
||||
wxString message = _L("Orca would re-calculate your flushing volumes everytime the filaments color changed. You could disable the auto-calculate in Orca Slicer > Preferences");
|
||||
m_tip_message_label = new Label(tip_message_panel, wxEmptyString);
|
||||
wxClientDC dc(tip_message_panel);
|
||||
wxString multiline_message;
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ endif()
|
||||
if(NOT DEFINED BBL_INTERNAL_TESTING)
|
||||
set(BBL_INTERNAL_TESTING "0")
|
||||
endif()
|
||||
set(SoftFever_VERSION "1.9.0-alpha")
|
||||
set(SoftFever_VERSION "1.9.0-beta")
|
||||
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)"
|
||||
SoftFever_VERSION_MATCH ${SoftFever_VERSION})
|
||||
set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1})
|
||||
|
||||
Reference in New Issue
Block a user