From 565ac58fd5ff116d4513632bce764b001e59e0ca Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 28 Sep 2025 10:33:33 +0800 Subject: [PATCH 01/20] Revamp OrcaSlicer updater (#10884) * Revamp OrcaSlicer updater --- .github/workflows/build_orca.yml | 3 +- AGENTS.md | 23 ++ build_linux.sh | 3 + build_release.bat | 4 +- build_release_macos.sh | 1 + build_release_vs2022.bat | 4 +- src/libslic3r/AppConfig.cpp | 7 +- src/libslic3r/AppConfig.hpp | 2 +- src/slic3r/CMakeLists.txt | 29 +- src/slic3r/GUI/GUI_App.cpp | 470 +++++++++++++++++++++++++----- src/slic3r/GeneratedConfig.hpp.in | 5 + src/slic3r/Utils/InstanceID.cpp | 209 +++++++++++++ src/slic3r/Utils/InstanceID.hpp | 20 ++ version.inc | 4 + 14 files changed, 693 insertions(+), 91 deletions(-) create mode 100644 AGENTS.md create mode 100644 src/slic3r/GeneratedConfig.hpp.in create mode 100644 src/slic3r/Utils/InstanceID.cpp create mode 100644 src/slic3r/Utils/InstanceID.hpp diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index ac0a1bd96bb..b6cb12d21d5 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -22,6 +22,7 @@ jobs: date: ver: ver_pure: + ORCA_UPDATER_SIG_KEY: ${{ secrets.ORCA_UPDATER_SIG_KEY }} steps: - name: Checkout @@ -317,7 +318,7 @@ jobs: - name: Install dependencies from build_linux.sh if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' shell: bash - run: sudo ./build_linux.sh -ur + run: sudo env "ORCA_UPDATER_SIG_KEY=$ORCA_UPDATER_SIG_KEY" ./build_linux.sh -ur - name: Fix permissions if: inputs.os == 'ubuntu-20.04' || inputs.os == 'ubuntu-24.04' diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..5446ab270ee --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,23 @@ +# Repository Guidelines + +## Project Structure & Module Organization +OrcaSlicer’s C++17 sources live in `src/`, split by feature modules and platform adapters. User assets, icons, and printer presets are in `resources/`; translations stay in `localization/`. Tests sit in `tests/`, grouped by domain (`libslic3r/`, `sla_print/`, etc.) with fixtures under `tests/data/`. CMake helpers reside in `cmake/`, and longer references in `doc/` and `SoftFever_doc/`. Automation scripts belong in `scripts/` and `tools/`. Treat everything in `deps/` and `deps_src/` as vendored snapshots—do not modify without mirroring upstream tags. + +## Build, Test, and Development Commands +Use out-of-source builds: +- `cmake -S . -B build -DCMAKE_BUILD_TYPE=Release` configures dependencies and generates build files. +- `cmake --build build --target OrcaSlicer --config Release` compiles the app; add `--parallel` to speed up. +- `cmake --build build --target tests` then `ctest --test-dir build --output-on-failure` runs automated suites. +Platform helpers such as `build_linux.sh`, `build_release_macos.sh`, and `build_release_vs2022.bat` wrap the same flow with toolchain flags. Use `build_release_macos.sh -sx` when reproducing macOS build issues, and `scripts/DockerBuild.sh` for reproducible container builds. + +## Coding Style & Naming Conventions +`.clang-format` enforces 4-space indents, a 140-column limit, aligned initializers, and brace wrapping for classes and functions. Run `clang-format -i ` before committing; the CMake `clang-format` target is available when LLVM tools are on your PATH. Prefer `CamelCase` for classes, `snake_case` for functions and locals, and `SCREAMING_CASE` for constants, matching conventions in `src/`. Keep headers self-contained and align include order with the IWYU pragmas. + +## Testing Guidelines +Unit tests rely on Catch2 (`tests/catch2/`). Name specs after the component under test—for example `tests/libslic3r/TestPlanarHole.cpp`—and tag long-running cases so `ctest -L fast` remains useful. Cover new algorithms with deterministic fixtures or sample G-code stored in `tests/data/`. Document manual printer validation or regression slicer checks in your PR when automated coverage is insufficient. + +## Commit & Pull Request Guidelines +The history favors concise, sentence-style subject lines with optional issue references, e.g., `Fix grid lines origin for multiple plates (#10724)`. Squash fixups locally before opening a PR. Complete `.github/pull_request_template.md`, include reproduction steps or screenshots for UI changes, and mention impacted presets or translations. Link issues via `Closes #NNNN` when applicable, and call out dependency bumps or profile migrations for maintainer review. + +## Security & Configuration Tips +Follow `SECURITY.md` for vulnerability reporting. Keep API tokens and printer credentials out of tracked configs; use `sandboxes/` for experimental settings. When touching third-party code in `deps_src/`, record the upstream commit or release in your PR description and run the relevant platform build script to confirm integration. diff --git a/build_linux.sh b/build_linux.sh index 5be72253fb3..a6961779381 100755 --- a/build_linux.sh +++ b/build_linux.sh @@ -225,6 +225,9 @@ if [[ -n "${BUILD_ORCA}" ]] ; then if [[ -n "${BUILD_TESTS}" ]] ; then BUILD_ARGS+=(-DBUILD_TESTS=ON) fi + if [[ -n "${ORCA_UPDATER_SIG_KEY}" ]] ; then + BUILD_ARGS+=(-DORCA_UPDATER_SIG_KEY="${ORCA_UPDATER_SIG_KEY}") + fi echo "Configuring OrcaSlicer..." set -x diff --git a/build_release.bat b/build_release.bat index 05d38a52bc0..6317e277c95 100644 --- a/build_release.bat +++ b/build_release.bat @@ -24,6 +24,8 @@ cd deps mkdir %build_dir% cd %build_dir% set DEPS=%CD%/OrcaSlicer_dep +set "SIG_FLAG=" +if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" if "%1"=="slicer" ( GOTO :slicer ) @@ -42,7 +44,7 @@ mkdir %build_dir% cd %build_dir% echo cmake .. -G "Visual Studio 16 2019" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -cmake .. -G "Visual Studio 16 2019" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0" +cmake .. -G "Visual Studio 16 2019" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 %SIG_FLAG% -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0" cmake --build . --config %build_type% --target ALL_BUILD -- -m cd .. call scripts/run_gettext.bat diff --git a/build_release_macos.sh b/build_release_macos.sh index 4ef49bbc6e5..e336da09c71 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -174,6 +174,7 @@ function build_slicer() { -G "${SLICER_CMAKE_GENERATOR}" \ -DBBL_RELEASE_TO_PUBLIC=1 \ -DORCA_TOOLS=ON \ + ${ORCA_UPDATER_SIG_KEY:+-DORCA_UPDATER_SIG_KEY="$ORCA_UPDATER_SIG_KEY"} \ -DCMAKE_PREFIX_PATH="$DEPS/usr/local" \ -DCMAKE_INSTALL_PREFIX="$PWD/OrcaSlicer" \ -DCMAKE_BUILD_TYPE="$BUILD_CONFIG" \ diff --git a/build_release_vs2022.bat b/build_release_vs2022.bat index c7a225a6845..b9c377488f9 100644 --- a/build_release_vs2022.bat +++ b/build_release_vs2022.bat @@ -38,6 +38,8 @@ cd deps mkdir %build_dir% cd %build_dir% set DEPS=%CD%/OrcaSlicer_dep +set "SIG_FLAG=" +if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" if "%1"=="slicer" ( GOTO :slicer @@ -58,7 +60,7 @@ mkdir %build_dir% cd %build_dir% echo on -cmake .. -G "Visual Studio 17 2022" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DORCA_TOOLS=ON -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="%WindowsSdkDir%Include\%WindowsSDKVersion%\" +cmake .. -G "Visual Studio 17 2022" -A x64 -DBBL_RELEASE_TO_PUBLIC=1 -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_PREFIX_PATH="%DEPS%/usr/local" -DCMAKE_INSTALL_PREFIX="./OrcaSlicer" -DCMAKE_BUILD_TYPE=%build_type% -DWIN10SDK_PATH="%WindowsSdkDir%Include\%WindowsSDKVersion%\" cmake --build . --config %build_type% --target ALL_BUILD -- -m @echo off cd .. diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 38cd03a8ac8..68eed40e0fc 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -37,8 +37,7 @@ using namespace nlohmann; namespace Slic3r { -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 VERSION_CHECK_URL = "https://check-version.orcaslicer.com/latest"; static const std::string PROFILE_UPDATE_URL = "https://api.github.com/repos/OrcaSlicer/orcaslicer-profiles/releases/tags"; static const std::string MODELS_STR = "models"; @@ -1383,10 +1382,10 @@ std::string AppConfig::config_path() return path; } -std::string AppConfig::version_check_url(bool stable_only/* = false*/) const +std::string AppConfig::version_check_url() const { auto from_settings = get("version_check_url"); - return from_settings.empty() ? stable_only ? VERSION_CHECK_URL_STABLE : VERSION_CHECK_URL : from_settings; + return from_settings.empty() ? VERSION_CHECK_URL : from_settings; } std::string AppConfig::profile_update_url() const diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 96fca84e239..aef70c06d6e 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -294,7 +294,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(bool stable_only = false) const; + std::string version_check_url() const; // Get the Orca profile update url. std::string profile_update_url() const; diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 8af6530b8a0..7f0e1e2b173 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -537,6 +537,8 @@ set(SLIC3R_GUI_SOURCES Utils/HexFile.hpp Utils/Http.cpp Utils/Http.hpp + Utils/InstanceID.cpp + Utils/InstanceID.hpp Utils/json_diff.cpp Utils/json_diff.hpp Utils/minilzo_extension.cpp @@ -615,11 +617,28 @@ if (UNIX AND NOT APPLE) ) endif () +set(ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY}") +string(STRIP "${ORCA_UPDATER_SIG_KEY_B64}" ORCA_UPDATER_SIG_KEY_B64) +string(REPLACE "\n" "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") +string(REPLACE "\r" "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") +string(REPLACE "\t" "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") +string(REPLACE " " "" ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY_B64}") + +set(ORCA_UPDATER_SIG_KEY_AVAILABLE 0) +if(ORCA_UPDATER_SIG_KEY_B64) + set(ORCA_UPDATER_SIG_KEY_AVAILABLE 1) +endif() + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/GeneratedConfig.hpp.in + ${CMAKE_CURRENT_BINARY_DIR}/GeneratedConfig.hpp + @ONLY) + add_library(libslic3r_gui STATIC ${SLIC3R_GUI_SOURCES}) -target_include_directories(libslic3r_gui PRIVATE Utils) +target_include_directories(libslic3r_gui PRIVATE Utils ${CMAKE_CURRENT_BINARY_DIR}) if (WIN32) target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../deps/WebView2/include) + target_link_libraries(libslic3r_gui Advapi32) endif() source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) @@ -645,7 +664,7 @@ elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") ${CURL_LIBRARIES} ) elseif (APPLE) - target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY}) + target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY} "-framework Security") endif() if (SLIC3R_STATIC) @@ -670,7 +689,9 @@ endif () # layer and sub-libraries. This forces us to use the include locations and # link these libraries. if (UNIX AND NOT APPLE) + find_package(PkgConfig REQUIRED) find_package(GTK${SLIC3R_GTK} REQUIRED) + pkg_check_modules(LIBSECRET REQUIRED libsecret-1) if (FLATPAK) # I don't know why this is needed, but for whatever reason slic3r isn't # linking to X11 and webkit2gtk. force it. @@ -679,8 +700,8 @@ if (UNIX AND NOT APPLE) pkg_check_modules(webkit2gtk REQUIRED webkit2gtk-4.1) target_link_libraries (libslic3r_gui ${X11_LIBRARIES} ${webkit2gtk_LIBRARIES}) endif() - target_include_directories(libslic3r_gui SYSTEM PRIVATE ${GTK${SLIC3R_GTK}_INCLUDE_DIRS}) - target_link_libraries(libslic3r_gui ${GTK${SLIC3R_GTK}_LIBRARIES} fontconfig) + target_include_directories(libslic3r_gui SYSTEM PRIVATE ${GTK${SLIC3R_GTK}_INCLUDE_DIRS} ${LIBSECRET_INCLUDE_DIRS}) + target_link_libraries(libslic3r_gui ${GTK${SLIC3R_GTK}_LIBRARIES} fontconfig ${LIBSECRET_LIBRARIES}) # We add GStreamer for bambu:/// support. diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index f27d9dbd395..96199a0cb18 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,9 @@ #include #include #include +#include +#include +#include #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" @@ -70,12 +74,14 @@ #include "MainFrame.hpp" #include "Plater.hpp" #include "GLCanvas3D.hpp" +#include "GeneratedConfig.hpp" #include "../Utils/PresetUpdater.hpp" #include "../Utils/PrintHost.hpp" #include "../Utils/Process.hpp" #include "../Utils/MacDarkMode.hpp" #include "../Utils/Http.hpp" +#include "../Utils/InstanceID.hpp" #include "../Utils/UndoRedo.hpp" #include "slic3r/Config/Snapshot.hpp" #include "Preferences.hpp" @@ -4381,108 +4387,414 @@ Semver get_version(const std::string& str, const std::regex& regexp) { return Semver::invalid(); } +namespace +{ + +struct UpdaterQuery +{ + std::string iid; + std::string version; + std::string os; + std::string arch; + std::string os_info; +}; + +std::string detect_updater_os() +{ +#if defined(_WIN32) + return "win"; +#elif defined(__APPLE__) + return "macos"; +#elif defined(__linux__) || defined(__LINUX__) + return "linux"; +#else + return "unknown"; +#endif +} + +std::string detect_updater_arch() +{ +#if defined(__aarch64__) || defined(_M_ARM64) + return "arm64"; +#elif defined(__x86_64__) || defined(_M_X64) + return "x86_64"; +#elif defined(__i386__) || defined(_M_IX86) + return "i386"; +#else + std::string arch = wxPlatformInfo::Get().GetArchName().ToStdString(); + boost::algorithm::to_lower(arch); + if (arch.find("aarch64") != std::string::npos || arch.find("arm64") != std::string::npos) + return "arm64"; + if (arch.find("x86_64") != std::string::npos || arch.find("amd64") != std::string::npos) + return "x86_64"; + if (arch.find("i686") != std::string::npos || arch.find("i386") != std::string::npos || arch.find("x86") != std::string::npos) + return "i386"; + return "unknown"; +#endif +} + +std::string detect_updater_os_info() +{ + wxString description = wxPlatformInfo::Get().GetOperatingSystemDescription(); +#if defined(__LINUX__) || defined(__linux__) + wxLinuxDistributionInfo distro = wxGetLinuxDistributionInfo(); + if (!distro.Id.empty()) { + wxString normalized = distro.Id; + if (!distro.Release.empty()) + normalized << " " << distro.Release; + normalized.Trim(true); + normalized.Trim(false); + if (!normalized.empty()) + description = normalized; + } +#endif + if (description.empty()) + description = wxGetOsDescription(); + + //Orca: workaround: wxGetOsVersion can't recognize Windows 11 + // For Windows, use actual version numbers to properly detect Windows 11 + // Windows 11 starts at build 22000 +#if defined(_WIN32) + int major = 0, minor = 0, micro = 0; + wxGetOsVersion(&major, &minor, µ); + if (micro >= 22000) { + // replace Windows 10 with Windows 11 + description.Replace("Windows 10", "Windows 11"); + } +#endif + std::string os_info = description.ToStdString(); + boost::replace_all(os_info, "\r", " "); + boost::replace_all(os_info, "\n", " "); + boost::algorithm::trim(os_info); + if (os_info.size() > 120) + os_info.resize(120); + boost::algorithm::to_lower(os_info); + return os_info; +} + +std::string detect_updater_version() +{ + return SoftFever_VERSION; +} + +std::string detect_updater_iid(AppConfig* config) +{ + if (config == nullptr) + return {}; + return instance_id::ensure(*config); +} + +std::string encode_uri_component(const std::string& value) +{ + static constexpr const char* hex = "0123456789ABCDEF"; + std::string out; + out.reserve(value.size()); + for (unsigned char ch : value) { + if ((ch >= 'A' && ch <= 'Z') || + (ch >= 'a' && ch <= 'z') || + (ch >= '0' && ch <= '9') || + ch == '-' || ch == '_' || ch == '.' || ch == '~' || + ch == '!' || ch == '*' || ch == '(' || ch == ')' || ch == '\'') { + out.push_back(static_cast(ch)); + } else { + out.push_back('%'); + out.push_back(hex[(ch >> 4) & 0xF]); + out.push_back(hex[ch & 0xF]); + } + } + return out; +} + +std::string build_updater_query(const UpdaterQuery& query) +{ + std::vector> params; + + auto add_param = [¶ms](const char* key, const std::string& value) { + if (!value.empty()) + params.emplace_back(key, encode_uri_component(value)); + }; + + add_param("iid", query.iid); + add_param("v", query.version); + add_param("os", query.os); + add_param("arch", query.arch); + add_param("os_info", query.os_info); + + std::sort(params.begin(), params.end(), [](const auto& lhs, const auto& rhs) { + return lhs.first < rhs.first; + }); + + if (params.empty()) + return {}; + + std::string encoded; + for (size_t idx = 0; idx < params.size(); ++idx) { + if (idx > 0) + encoded.push_back('&'); + encoded += params[idx].first; + encoded.push_back('='); + encoded += params[idx].second; + } + return encoded; +} + +std::string base64url_encode(const unsigned char* data, std::size_t length) +{ + std::string encoded; + encoded.resize(boost::beast::detail::base64::encoded_size(length)); + encoded.resize(boost::beast::detail::base64::encode(encoded.data(), data, length)); + std::replace(encoded.begin(), encoded.end(), '+', '-'); + std::replace(encoded.begin(), encoded.end(), '/', '_'); + while (!encoded.empty() && encoded.back() == '=') + encoded.pop_back(); + return encoded; +} + +std::optional> load_signature_key() +{ +#if ORCA_UPDATER_SIG_KEY_AVAILABLE + std::string key = ORCA_UPDATER_SIG_KEY_B64; + boost::algorithm::trim(key); + if (key.empty()) + return std::nullopt; + + key.erase(std::remove_if(key.begin(), key.end(), [](unsigned char ch) { return std::isspace(ch); }), key.end()); + std::replace(key.begin(), key.end(), '-', '+'); + std::replace(key.begin(), key.end(), '_', '/'); + while (key.size() % 4 != 0) + key.push_back('='); + + std::string decoded; + decoded.resize(boost::beast::detail::base64::decoded_size(key.size())); + auto decode_result = boost::beast::detail::base64::decode(decoded.data(), key.data(), key.size()); + if (!decode_result.second) + return std::nullopt; + decoded.resize(decode_result.first); + + return std::vector(decoded.begin(), decoded.end()); +#else + return std::nullopt; +#endif +} + +const std::optional>& get_signature_key() +{ + static std::optional> cached; + static bool loaded = false; + if (!loaded) { + cached = load_signature_key(); + loaded = true; + } + return cached; +} + +std::string extract_path_from_url(const std::string& url) +{ + if (url.empty()) + return "/latest"; + + std::string path; + const auto scheme_pos = url.find("://"); + if (scheme_pos != std::string::npos) { + const auto path_pos = url.find('/', scheme_pos + 3); + if (path_pos != std::string::npos) + path = url.substr(path_pos); + else + path = "/"; + } else { + path = url; + } + + const auto fragment_pos = path.find('#'); + if (fragment_pos != std::string::npos) + path = path.substr(0, fragment_pos); + + const auto query_pos = path.find('?'); + if (query_pos != std::string::npos) + path = path.substr(0, query_pos); + + if (path.empty()) + path = "/"; + return path; +} + +void maybe_attach_updater_signature(Http& http, const std::string& canonical_query, const std::string& request_url) +{ + if (canonical_query.empty()) + return; + + const auto& key = get_signature_key(); + if (!key || key->empty()) + return; + + const auto now = std::chrono::time_point_cast(std::chrono::system_clock::now()); + const std::string timestamp = std::to_string(now.time_since_epoch().count()); + const std::string path = extract_path_from_url(request_url); + + std::string string_to_sign = "GET\n"; + string_to_sign += path; + string_to_sign += "\n"; + string_to_sign += canonical_query; + string_to_sign += "\n"; + string_to_sign += timestamp; + + unsigned int digest_length = 0; + unsigned char digest[EVP_MAX_MD_SIZE] = {}; + if (HMAC(EVP_sha256(), key->data(), static_cast(key->size()), + reinterpret_cast(string_to_sign.data()), + string_to_sign.size(), digest, &digest_length) == nullptr || digest_length == 0) + return; + + const std::string signature = base64url_encode(digest, digest_length); + http.header("X-Orca-Ts", timestamp); + http.header("X-Orca-Sig", "v1:" + signature); +} + +} // namespace + void GUI_App::check_new_version_sf(bool show_tips, int by_user) { AppConfig* app_config = wxGetApp().app_config; 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) + auto version_check_url = app_config->version_check_url(); + + UpdaterQuery query{ + detect_updater_iid(app_config), + detect_updater_version(), + detect_updater_os(), + detect_updater_arch(), + detect_updater_os_info() + }; + + const std::string query_string = build_updater_query(query); + if (!query_string.empty()) { + const bool has_query = version_check_url.find('?') != std::string::npos; + if (!has_query) + version_check_url.push_back('?'); + else if (!version_check_url.empty() && version_check_url.back() != '&' && version_check_url.back() != '?') + version_check_url.push_back('&'); + version_check_url += query_string; + } + + auto http = Http::get(version_check_url); + maybe_attach_updater_signature(http, query_string, version_check_url); + + http.header("accept", "application/vnd.github.v3+json") + .timeout_connect(5) + .timeout_max(10) .on_error([&](std::string body, std::string error, unsigned http_status) { (void)body; BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%", "check_new_version_sf", http_status, error); }) - .timeout_connect(1) - .on_complete([this,by_user, check_stable_only](std::string body, unsigned http_status) { - // Http response OK + .on_complete([this, by_user, check_stable_only](std::string body, unsigned http_status) { if (http_status != 200) return; try { boost::trim(body); - // 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); - - // 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 best_pre(1, 0, 0); - Semver best_release(1, 0, 0); - std::string best_pre_url; - std::string best_release_url; - std::string best_release_content; - std::string best_pre_content; - const std::regex reg_num("([0-9]+)"); - if (check_stable_only) { - std::string tag = root.get("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("prerelease")) { - if (best_pre < tag_version) { - best_pre = tag_version; - best_pre_url = root.get("html_url"); - best_pre_content = root.get("body"); - } - } else { - if (best_release < tag_version) { - best_release = tag_version; - best_release_url = root.get("html_url"); - best_release_content = root.get("body"); - } - } - } else { - for (auto json_version : root) { - std::string tag = json_version.second.get("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("prerelease")) { - if (best_pre < tag_version) { - best_pre = tag_version; - best_pre_url = json_version.second.get("html_url"); - best_pre_content = json_version.second.get("body"); - } - } else { - if (best_release < tag_version) { - best_release = tag_version; - best_release_url = json_version.second.get("html_url"); - best_release_content = json_version.second.get("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; - } - // if we're the most recent, don't do anything - if ((check_stable_only ? best_release : best_pre) <= current_version) { + if (body.empty()) { if (by_user != 0) this->no_new_version(); return; } - 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; + boost::property_tree::ptree root; + std::stringstream json_stream(body); + boost::property_tree::read_json(json_stream, root); + + 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 best_pre(0, 0, 0); + Semver best_release(0, 0, 0); + bool best_pre_valid = false; + bool best_release_valid = false; + std::string best_pre_url; + std::string best_release_url; + std::string best_release_content; + std::string best_pre_content; + + auto consider_release = [&](const boost::property_tree::ptree& node) { + auto tag_opt = node.get_optional("tag_name"); + if (!tag_opt) + return; + + std::string tag = *tag_opt; + if (!tag.empty() && tag.front() == 'v') + tag.erase(0, 1); + + Semver tag_version = get_version(tag, matcher); + if (!tag_version.valid()) + return; + + const bool is_prerelease = node.get_optional("prerelease").get_value_or(false); + const std::string html_url = node.get_optional("html_url").get_value_or(std::string()); + const std::string body_copy = node.get_optional("body").get_value_or(std::string()); + + if (is_prerelease) { + if (!best_pre_valid || best_pre < tag_version) { + best_pre = tag_version; + best_pre_url = html_url; + best_pre_content = body_copy; + best_pre_valid = true; + } + } else { + if (!best_release_valid || best_release < tag_version) { + best_release = tag_version; + best_release_url = html_url; + best_release_content = body_copy; + best_release_valid = true; + } + } + }; + + if (root.get_optional("tag_name")) { + consider_release(root); + } else { + for (const auto& child : root) + consider_release(child.second); + } + + if (!best_release_valid && !best_pre_valid) { + if (by_user != 0) + this->no_new_version(); + return; + } + + if (best_pre_valid && best_release_valid && best_pre < best_release) { + best_pre = best_release; + best_pre_url = best_release_url; + best_pre_content = best_release_content; + best_pre_valid = true; + } + + const bool prefer_release = check_stable_only || !best_pre_valid; + const Semver& chosen_version = prefer_release ? best_release : best_pre; + const bool chosen_valid = prefer_release ? best_release_valid : best_pre_valid; + + if (!chosen_valid) { + if (by_user != 0) + this->no_new_version(); + return; + } + + if (current_version.valid() && chosen_version <= current_version) { + if (by_user != 0) + this->no_new_version(); + return; + } + + version_info.url = prefer_release ? best_release_url : best_pre_url; + version_info.version_str = prefer_release ? best_release.to_string_sf() : best_pre.to_string(); + version_info.description = prefer_release ? best_release_content : best_pre_content; version_info.force_upgrade = false; wxCommandEvent* evt = new wxCommandEvent(EVT_SLIC3R_VERSION_ONLINE); - evt->SetString((check_stable_only ? best_release : best_pre).to_string()); + evt->SetString((prefer_release ? best_release : best_pre).to_string()); GUI::wxGetApp().QueueEvent(evt); } catch (...) {} - }) - .perform(); + }); + + http.perform(); } void GUI_App::process_network_msg(std::string dev_id, std::string msg) diff --git a/src/slic3r/GeneratedConfig.hpp.in b/src/slic3r/GeneratedConfig.hpp.in new file mode 100644 index 00000000000..130f113034a --- /dev/null +++ b/src/slic3r/GeneratedConfig.hpp.in @@ -0,0 +1,5 @@ +#pragma once + +#define ORCA_UPDATER_SIG_KEY_B64 "@ORCA_UPDATER_SIG_KEY_B64@" +#define ORCA_UPDATER_SIG_KEY_AVAILABLE @ORCA_UPDATER_SIG_KEY_AVAILABLE@ + diff --git a/src/slic3r/Utils/InstanceID.cpp b/src/slic3r/Utils/InstanceID.cpp new file mode 100644 index 00000000000..d4a903e2767 --- /dev/null +++ b/src/slic3r/Utils/InstanceID.cpp @@ -0,0 +1,209 @@ +#include "InstanceID.hpp" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "libslic3r/AppConfig.hpp" +#include "libslic3r/Utils.hpp" + +namespace Slic3r { +namespace instance_id { +namespace { + +constexpr const char* CONFIG_KEY = "updater_iid"; +constexpr const char* LEGACY_KEY = "iid"; + +std::mutex& cache_mutex() +{ + static std::mutex mtx; + return mtx; +} + +std::string& cached_iid() +{ + static std::string value; + return value; +} + +bool& cache_ready() +{ + static bool ready = false; + return ready; +} + +std::optional normalize_uuid(std::string value) +{ + boost::algorithm::trim(value); + boost::algorithm::to_lower(value); + if (value.size() != 36) + return std::nullopt; + try { + const boost::uuids::uuid parsed = boost::uuids::string_generator()(value); + if (parsed.version() != boost::uuids::uuid::version_random_number_based) + return std::nullopt; + return value; + } catch (...) { + return std::nullopt; + } +} + +std::optional read_config_value(AppConfig& config) +{ + const auto read_key = [&](const char* key) -> std::optional { + const std::string raw = config.get(key); + if (raw.empty()) + return std::nullopt; + if (auto normalized = normalize_uuid(raw)) + return normalized; + return std::nullopt; + }; + + if (auto value = read_key(CONFIG_KEY)) + return value; + return read_key(LEGACY_KEY); +} + +void write_config_value(AppConfig& config, const std::string& value) +{ + config.set(CONFIG_KEY, value); + if (config.get(LEGACY_KEY) != value) + config.set(LEGACY_KEY, value); +} + +void prune_config_value(AppConfig& config) +{ + if (config.has(CONFIG_KEY)) + config.erase("app", CONFIG_KEY); + if (config.has(LEGACY_KEY)) + config.erase("app", LEGACY_KEY); +} + +boost::filesystem::path storage_path() +{ + const std::string& base_dir = Slic3r::data_dir(); + if (base_dir.empty()) + return {}; + return boost::filesystem::path(base_dir) / ".orcaslicer_machine_id"; +} + +std::optional read_storage_file() +{ + const auto path = storage_path(); + if (path.empty() || !boost::filesystem::exists(path)) + return std::nullopt; + + boost::nowide::ifstream file(path.string()); + if (!file) + return std::nullopt; + + std::string value; + std::getline(file, value); + file.close(); + + return normalize_uuid(value); +} + +bool write_storage_file(const std::string& value) +{ + if (value.empty()) + return false; + + const auto path = storage_path(); + if (path.empty()) + return false; + + const auto parent = path.parent_path(); + boost::system::error_code ec; + if (!parent.empty() && !boost::filesystem::exists(parent)) + boost::filesystem::create_directories(parent, ec); + + if (ec) + return false; + + boost::nowide::ofstream file(path.string(), std::ios::trunc); + if (!file) + return false; + + file << value; + file.close(); + + return file.good(); +} + +std::optional read_secure() +{ + return read_storage_file(); +} + +bool write_secure(const std::string& value) +{ + return write_storage_file(value); +} + +std::string generate_uuid() +{ + const auto uuid = boost::uuids::random_generator()(); + return boost::uuids::to_string(uuid); +} + +} // namespace + +std::string ensure(AppConfig& config) +{ + std::lock_guard lock(cache_mutex()); + if (cache_ready()) + return cached_iid(); + + if (auto secure = read_secure()) { + cached_iid() = *secure; + cache_ready() = true; + prune_config_value(config); + return cached_iid(); + } + + if (auto from_config = read_config_value(config)) { + cached_iid() = *from_config; + cache_ready() = true; + if (!write_secure(cached_iid())) + write_config_value(config, cached_iid()); + else + prune_config_value(config); + return cached_iid(); + } + + cached_iid() = generate_uuid(); + cache_ready() = true; + + if (!write_secure(cached_iid())) + write_config_value(config, cached_iid()); + else + prune_config_value(config); + + return cached_iid(); +} + +void reset_cache_for_tests() +{ + std::lock_guard lock(cache_mutex()); + cached_iid().clear(); + cache_ready() = false; +} + +} // namespace instance_id +} // namespace Slic3r diff --git a/src/slic3r/Utils/InstanceID.hpp b/src/slic3r/Utils/InstanceID.hpp new file mode 100644 index 00000000000..112e4af2b4e --- /dev/null +++ b/src/slic3r/Utils/InstanceID.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include + +namespace Slic3r { + +class AppConfig; + +namespace instance_id { + +// Returns the canonical IID, generating and storing one when missing. +std::string ensure(AppConfig& config); + +// Clears the cached IID (primarily for tests). +void reset_cache_for_tests(); + +} // namespace instance_id + +} // namespace Slic3r + diff --git a/version.inc b/version.inc index fa0de080fef..4af1e2cccb3 100644 --- a/version.inc +++ b/version.inc @@ -18,3 +18,7 @@ set(ORCA_VERSION_MINOR ${CMAKE_MATCH_2}) set(ORCA_VERSION_PATCH ${CMAKE_MATCH_3}) set(SLIC3R_VERSION "01.10.01.50") + +if (NOT DEFINED ORCA_UPDATER_SIG_KEY) + set(ORCA_UPDATER_SIG_KEY "" CACHE STRING "Base64url encoded updater signature key") +endif() From d7208005dad0bb3507aecf57cbeb0073fbf1cd99 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 28 Sep 2025 13:38:13 +0800 Subject: [PATCH 02/20] Update DMG creation process in build workflow (#10891) Refactor DMG creation process in build workflow * Update the OrcaSlicer DMG creation steps to exclude the profile validator helper from the main DMG. * Introduce a dedicated directory for the main OrcaSlicer DMG and the profile validator DMG, ensuring a cleaner build process. * Use symbolic links with the `-sfn` option to avoid issues with existing links. This change enhances the organization of the build artifacts and improves the clarity of the DMG creation process. --- .github/workflows/build_orca.yml | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index b6cb12d21d5..bebcaba1b21 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -125,16 +125,20 @@ jobs: codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app fi - # Create main OrcaSlicer DMG - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer/Applications - hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg + # Create main OrcaSlicer DMG without the profile validator helper + mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/* + cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer.app ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/ + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/Applications + hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_Mac_universal_${{ env.ver }}.dmg # Create separate OrcaSlicer_profile_validator DMG if the app exists if [ -f "${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator" ]; then mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/* cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/ - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg codesign --deep --force --verbose --options runtime --timestamp --entitlements ${{ github.workspace }}/scripts/disable_validation.entitlements --sign "$CERTIFICATE_ID" OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg fi @@ -154,14 +158,18 @@ jobs: if: github.ref != 'refs/heads/main' && inputs.os == 'macos-14' working-directory: ${{ github.workspace }} run: | - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer/Applications - hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg + mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/* + cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer.app ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/ + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_dmg/Applications + hdiutil create -volname "OrcaSlicer" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_dmg -ov -format UDZO OrcaSlicer_Mac_universal_${{ env.ver }}.dmg # Create separate OrcaSlicer_profile_validator DMG if the app exists if [ -f "${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator" ]; then mkdir -p ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg + rm -rf ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/* cp -R ${{ github.workspace }}/build/universal/OrcaSlicer/OrcaSlicer_profile_validator.app ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/ - ln -s /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications + ln -sfn /Applications ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg/Applications hdiutil create -volname "OrcaSlicer Profile Validator" -srcfolder ${{ github.workspace }}/build/universal/OrcaSlicer_profile_validator_dmg -ov -format UDZO OrcaSlicer_profile_validator_Mac_universal_${{ env.ver }}.dmg fi From 35cc4867ad054780a066e839f6fc52095b30b508 Mon Sep 17 00:00:00 2001 From: Andrew Sun Date: Sun, 28 Sep 2025 01:59:47 -0400 Subject: [PATCH 03/20] Set NSWindow color space to sRGB on macOS (#10827) --- src/slic3r/Utils/RetinaHelperImpl.mm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/slic3r/Utils/RetinaHelperImpl.mm b/src/slic3r/Utils/RetinaHelperImpl.mm index 509029a10e9..a1760a84516 100644 --- a/src/slic3r/Utils/RetinaHelperImpl.mm +++ b/src/slic3r/Utils/RetinaHelperImpl.mm @@ -53,6 +53,11 @@ float RetinaHelper::get_scale_factor() [nc addObserver:self selector:@selector(windowDidChangeBackingProperties:) name:NSWindowDidChangeBackingPropertiesNotification object:nil]; } + + NSWindow* window = [aView window]; + if (window) { + [window setColorSpace:[NSColorSpace sRGBColorSpace]]; + } } return self; } From fb25dda337e2565cc1dc946cc666e8f8d48c15a1 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 28 Sep 2025 14:32:15 +0800 Subject: [PATCH 04/20] Revert "Set NSWindow color space to sRGB on macOS" (#10892) Revert "Set NSWindow color space to sRGB on macOS (#10827)" This reverts commit 32ca697e9eafce2df9f528a16ce0201d3513c63f. --- src/slic3r/Utils/RetinaHelperImpl.mm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/slic3r/Utils/RetinaHelperImpl.mm b/src/slic3r/Utils/RetinaHelperImpl.mm index a1760a84516..509029a10e9 100644 --- a/src/slic3r/Utils/RetinaHelperImpl.mm +++ b/src/slic3r/Utils/RetinaHelperImpl.mm @@ -53,11 +53,6 @@ float RetinaHelper::get_scale_factor() [nc addObserver:self selector:@selector(windowDidChangeBackingProperties:) name:NSWindowDidChangeBackingPropertiesNotification object:nil]; } - - NSWindow* window = [aView window]; - if (window) { - [window setColorSpace:[NSColorSpace sRGBColorSpace]]; - } } return self; } From b92795846aba62bb1291008f5176304804195bb1 Mon Sep 17 00:00:00 2001 From: "Ozge Sevin K." Date: Sun, 28 Sep 2025 10:09:03 +0300 Subject: [PATCH 05/20] Update OrcaSlicer_tr.po (#10856) --- localization/i18n/tr/OrcaSlicer_tr.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 77f0b857175..020e2fcc253 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -178,7 +178,7 @@ msgid "Smart fill" msgstr "Akıllı boyama" msgid "Bucket fill" -msgstr "Kova boya aracı" +msgstr "Boya kovası aracı" msgid "Height range" msgstr "Yükseklik aralığı" @@ -336,7 +336,7 @@ msgid "Auto" msgstr "Otomatik" msgid "Manual" -msgstr "Manual" +msgstr "Manuel" msgid "Plug" msgstr "Tak" @@ -369,7 +369,7 @@ msgid "Flip upside down" msgstr "Baş aşağı çevir" msgid "Connectors" -msgstr "Konektörler" +msgstr "Bağlayıcılar" msgid "Type" msgstr "Tür" @@ -566,7 +566,7 @@ msgstr[0] "%1$d bağlayıcı nesnenin dışında" msgstr[1] "%1$d bağlayıcı nesnenin dışında" msgid "Some connectors are overlapped" -msgstr "Bazı konektörler üst üste binmiş" +msgstr "Bazı bağlayıcılar üst üste binmiş" msgid "Select at least one object to keep after cutting." msgstr "Kesimden sonra saklanacak en az bir nesne seçin." From bba371da8d38f9449591e62e2d43b43f5b4a067c Mon Sep 17 00:00:00 2001 From: FlyingbearOfficial <150423627+FlyingbearOfficial@users.noreply.github.com> Date: Sun, 28 Sep 2025 15:12:53 +0800 Subject: [PATCH 06/20] [PROFILE]Add a new printer Model with Flyingbear (#10889) * TEST --- resources/profiles/FlyingBear.json | 46 ++++ .../FlyingBear/FlyingBear Ghost7-bed.stl | Bin 0 -> 21684 bytes .../FlyingBear/FlyingBear Ghost7-bed1.stl | Bin 0 -> 21684 bytes .../FlyingBear/FlyingBear Ghost7-texture.png | Bin 0 -> 142658 bytes .../FlyingBear/FlyingBear Ghost7_cover.png | Bin 0 -> 36119 bytes resources/profiles/FlyingBear/error_hull_show | 0 .../Ghost7/FlyingBear PLA @Ghost7.json | 27 +++ .../Ghost7/fdm_filament_common_Ghost7.json | 144 ++++++++++++ .../Ghost7/fdm_filament_pla @Ghost7.json | 97 ++++++++ .../Ghost7/FlyingBear Ghost7 0.4 nozzle.json | 204 +++++++++++++++++ .../machine/Ghost7/FlyingBear Ghost7.json | 12 + .../0.08mm Extra Fine @FlyingBear Ghost7.json | 30 +++ .../0.12mm Fine @FlyingBear Ghost7.json | 30 +++ .../0.16mm Optimal @FlyingBear Ghost7.json | 39 ++++ .../0.20mm Standard @FlyingBear Ghost7.json | 28 +++ .../0.24mm Draft @FlyingBear Ghost7.json | 27 +++ .../Ghost7/fdm_process_common_Ghost7.json | 214 ++++++++++++++++++ 17 files changed, 898 insertions(+) create mode 100644 resources/profiles/FlyingBear/FlyingBear Ghost7-bed.stl create mode 100644 resources/profiles/FlyingBear/FlyingBear Ghost7-bed1.stl create mode 100644 resources/profiles/FlyingBear/FlyingBear Ghost7-texture.png create mode 100644 resources/profiles/FlyingBear/FlyingBear Ghost7_cover.png create mode 100644 resources/profiles/FlyingBear/error_hull_show create mode 100644 resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json create mode 100644 resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json create mode 100644 resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json create mode 100644 resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json create mode 100644 resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json create mode 100644 resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json create mode 100644 resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json create mode 100644 resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json create mode 100644 resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json create mode 100644 resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json create mode 100644 resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index ebe1b362101..17b1089ba52 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -12,6 +12,10 @@ "name": "FlyingBear Reborn3", "sub_path": "machine/FlyingBear Reborn3.json" }, + { + "name": "FlyingBear Ghost7", + "sub_path": "machine/Ghost7/FlyingBear Ghost7.json" + }, { "name": "FlyingBear S1", "sub_path": "machine/S1/FlyingBear S1.json" @@ -26,6 +30,10 @@ "name": "fdm_process_common_S1", "sub_path": "process/S1/fdm_process_common_S1.json" }, + { + "name": "fdm_process_common_Ghost7", + "sub_path": "process/Ghost7/fdm_process_common_Ghost7.json" + }, { "name": "0.08mm Extra Fine @FlyingBear Reborn3", "sub_path": "process/0.08mm Extra Fine @FlyingBear Reborn3.json" @@ -46,6 +54,28 @@ "name": "0.24mm Draft @FlyingBear Reborn3", "sub_path": "process/0.24mm Draft @FlyingBear Reborn3.json" }, + + { + "name": "0.08mm Extra Fine @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json" + }, + { + "name": "0.12mm Fine @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json" + }, + { + "name": "0.16mm Optimal @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json" + }, + { + "name": "0.20mm Standard @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json" + }, + { + "name": "0.24mm Draft @FlyingBear Ghost7", + "sub_path": "process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json" + }, + { "name": "fdm_process_marlin_common", "sub_path": "process/fdm_process_marlin_common.json" @@ -100,6 +130,10 @@ "name": "fdm_filament_common_S1", "sub_path": "filament/S1/fdm_filament_common_S1.json" }, + { + "name": "fdm_filament_common_Ghost7", + "sub_path": "filament/Ghost7/fdm_filament_common_Ghost7.json" + }, { "name": "fdm_filament_abs", "sub_path": "filament/fdm_filament_abs.json" @@ -164,6 +198,10 @@ "name": "fdm_filament_pla @S1", "sub_path": "filament/S1/fdm_filament_pla @S1.json" }, + { + "name": "fdm_filament_pla @Ghost7", + "sub_path": "filament/Ghost7/fdm_filament_pla @Ghost7.json" + }, { "name": "fdm_filament_pla_Hyper @S1", "sub_path": "filament/S1/fdm_filament_pla_Hyper @S1.json" @@ -244,6 +282,10 @@ "name": "Other PETG @S1", "sub_path": "filament/S1/Other PETG @S1.json" }, + { + "name": "FlyingBear PLA @Ghost7", + "sub_path": "filament/Ghost7/FlyingBear PLA @Ghost7.json" + }, { "name": "FlyingBear PLA @S1", "sub_path": "filament/S1/FlyingBear PLA @S1.json" @@ -290,6 +332,10 @@ "name": "FlyingBear Reborn3 0.4 nozzle", "sub_path": "machine/FlyingBear Reborn3 0.4 nozzle.json" }, + { + "name": "FlyingBear Ghost7 0.4 nozzle", + "sub_path": "machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json" + }, { "name": "FlyingBear S1 0.4 nozzle", "sub_path": "machine/S1/FlyingBear S1 0.4 nozzle.json" diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7-bed.stl b/resources/profiles/FlyingBear/FlyingBear Ghost7-bed.stl new file mode 100644 index 0000000000000000000000000000000000000000..d3c81370b759833585195792970452ba5f05bfda GIT binary patch literal 21684 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7-bed1.stl b/resources/profiles/FlyingBear/FlyingBear Ghost7-bed1.stl new file mode 100644 index 0000000000000000000000000000000000000000..5d0df36e6738448a380a33b53a226f59f0d8e22c GIT binary patch literal 21684 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7-texture.png b/resources/profiles/FlyingBear/FlyingBear Ghost7-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..456ba1f9354b96005e97e957940a282882fcd09e GIT binary patch literal 142658 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/FlyingBear/FlyingBear Ghost7_cover.png b/resources/profiles/FlyingBear/FlyingBear Ghost7_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..536bb86c69cc556ca0d3001ebda935fce135feb5 GIT binary patch literal 36119 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 PfM4>m$}(lrh5`QrnEOm5 literal 0 HcmV?d00001 diff --git a/resources/profiles/FlyingBear/error_hull_show b/resources/profiles/FlyingBear/error_hull_show new file mode 100644 index 00000000000..e69de29bb2d diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json new file mode 100644 index 00000000000..46d83cd19e9 --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA @Ghost7.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "FlyingBear PLA @Ghost7", + "inherits": "fdm_filament_pla @Ghost7", + "from": "system", + "setting_id": "GFSA04", + "filament_id": "GFL99", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "0" + ], + "pressure_advance": [ + "0.032" + ], + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json new file mode 100644 index 00000000000..2822e10b250 --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_common_Ghost7.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "fdm_filament_common_Ghost7", + "from": "system", + "instantiation": "false", + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "bed_type": [ + "Cool Plate" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json new file mode 100644 index 00000000000..c24daf01ccc --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Ghost7/fdm_filament_pla @Ghost7.json @@ -0,0 +1,97 @@ +{ + "type": "filament", + "name": "fdm_filament_pla @Ghost7", + "inherits": "fdm_filament_common_Ghost7", + "from": "system", + "instantiation": "false", + "filament_vendor": [ + "FlyingBear" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "8" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json new file mode 100644 index 00000000000..c261f331117 --- /dev/null +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json @@ -0,0 +1,204 @@ +{ + "type": "machine", + "name": "FlyingBear Ghost7 0.4 nozzle", + "inherits": "fdm_klipper_common", + "from": "system", + "setting_id": "GM001", + "instantiation": "true", + "printer_model": "FlyingBear Ghost7", + "auxiliary_fan": "1", + "bed_exclude_area": [ + "242x0", + "250x0", + "250x30", + "242x30" + ], + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", + "change_filament_gcode": "", + "cooling_tube_length": "5", + "cooling_tube_retraction": "91.5", + "default_filament_profile": [ + "FlyingBear PLA @Ghost7" + ], + "default_print_profile": "0.20mm Standard @FlyingBear Ghost7", + "deretraction_speed": [ + "30" + ], + "enable_filament_ramming": "1", + "extra_loading_move": "-2", + "extruder_clearance_height_to_lid": "69", + "extruder_clearance_height_to_rod": "69", + "extruder_clearance_radius": "55", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "high_current_on_filament_swap": "0", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]\nM117 Layer {layer_num+1}/[total_layer_count] : {filament_settings_id[0]}", + "machine_end_gcode": "PRINT_END", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "200" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "0.4" + ], + "machine_max_speed_e": [ + "30", + "25" + ], + "machine_max_speed_x": [ + "600", + "200" + ], + "machine_max_speed_y": [ + "600", + "200" + ], + "machine_max_speed_z": [ + "20", + "12" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": ";v1.0.1-20250822;\n;*****************************\nBED_MESH_CLEAR\nM140 S[bed_temperature_initial_layer_single]\nPRINT_START\n;*************PRINT START*************\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 80,print_bed_max[0])} F6000 ;move head to drawing line position\nG1 Z0 F100\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\n;BED_MESH_CLEAR \n;BED_MESH_PROFILE LOAD=default # bedmesh load\nG1 Z2.0 F200 ;Move Z Axis up\n ; ; ; ; ; ; ; ; ; draw line along model\n;G92 E0 ;reset extruder\nG1 E8 F300 ;extrude filament\nG90\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 80,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F1500 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E10\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count] ; display layers begin\n;***********model start************\n", + "machine_unload_filament_time": "0", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ], + "nozzle_hrc": "0", + "nozzle_type": "brass", + "nozzle_volume": "151.32", + "parking_pos_retraction": "92", + "print_host_webui": "", + "printable_area": [ + "0x0", + "250x0", + "250x250", + "0x250" + ], + "printable_height": "205", + "printer_notes": "", + "printer_settings_id": "FlyingBear Ghost7 0.4 nozzle", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_apikey": "", + "printhost_authorization_type": "key", + "printhost_cafile": "", + "printhost_password": "", + "printhost_port": "", + "printhost_ssl_ignore_revoke": "0", + "printhost_user": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "249" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.8" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "silent_mode": "0", + "single_extruder_multi_material": "1", + "template_custom_gcode": "", + "thumbnails": [ + "430x410" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Normal Lift" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json new file mode 100644 index 00000000000..529b03825d1 --- /dev/null +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "FlyingBear Ghost7", + "model_id": "FlyingBear_Ghost7", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FlyingBearDesign", + "bed_model": "FlyingBear Ghost7-bed.stl", + "bed_texture": "FlyingBear Ghost7-texture.png", + "hotend_model": "", + "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json new file mode 100644 index 00000000000..90e72f336a0 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.08mm Extra Fine @FlyingBear Ghost7.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "name": "0.08mm Extra Fine @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "inner_wall_acceleration": "3000", + "bottom_shell_layers": "7", + "overhang_1_4_speed": "30", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "top_shell_layers": "9", + "top_shell_thickness": "0.8", + "tree_support_wall_count": "1", + "brim_width": "5", + "gap_infill_speed": "120", + "outer_wall_speed": "60", + "inner_wall_speed": "120", + "internal_solid_infill_speed": "150", + "top_surface_speed": "150", + "layer_height": "0.08", + "print_settings_id": "0.08mm Extra Fine @FlyingBear Ghost7", + "sparse_infill_speed": "150", + "exclude_object": "1", + "internal_bridge_speed": "50", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json new file mode 100644 index 00000000000..2d3769bc1ac --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.12mm Fine @FlyingBear Ghost7.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "name": "0.12mm Fine @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "inner_wall_acceleration": "3000", + "bottom_shell_layers": "5", + "overhang_1_4_speed": "30", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "tree_support_wall_count": "0", + "brim_width": "5", + "gap_infill_speed": "180", + "outer_wall_speed": "80", + "inner_wall_speed": "150", + "internal_solid_infill_speed": "180", + "top_surface_speed": "150", + "layer_height": "0.12", + "print_settings_id": "0.12mm Fine @FlyingBear Ghost7", + "sparse_infill_speed": "180", + "exclude_object": "1", + "internal_bridge_speed": "50", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json new file mode 100644 index 00000000000..c0ef17a3e32 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json @@ -0,0 +1,39 @@ +{ + "type": "process", + "name": "0.16mm Optimal @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP005", + "instantiation": "true", + "inner_wall_acceleration": "3000", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "top_shell_layers": "6", + "overhang_1_4_speed": "50", + "accel_to_decel_enable": "0", + "bottom_shell_layers": "4", + "bridge_speed": "25", + "brim_object_gap": "0.1", + "exclude_object": "1", + "gap_infill_speed": "250", + "inner_wall_speed": "250", + "outer_wall_speed": "120", + "internal_bridge_speed": "50", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "layer_height": "0.16", + "line_width": "0.42", + "outer_wall_line_width": "0.42", + "overhang_speed_classic": "0", + "precise_outer_wall": "0", + "print_flow_ratio": "0.95", + "seam_gap": "10%", + "skirt_speed": "50", + "sparse_infill_speed": "330", + "support_line_width": "0.42", + "top_shell_thickness": "1", + "top_surface_line_width": "0.42", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json new file mode 100644 index 00000000000..c3c71b666df --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.20mm Standard @FlyingBear Ghost7.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.20mm Standard @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "bottom_shell_layers": "3", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "tree_support_wall_count": "1", + "brim_width": "5", + "gap_infill_speed": "250", + "inner_wall_speed": "300", + "internal_solid_infill_speed": "250", + "layer_height": "0.2", + "print_settings_id": "0.20mm Standard @FlyingBear Ghost7", + "sparse_infill_speed": "270", + "exclude_object": "1", + "internal_bridge_speed": "50", + "top_solid_infill_flow_ratio": "0.97", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json new file mode 100644 index 00000000000..5023e69e376 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/0.24mm Draft @FlyingBear Ghost7.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "0.24mm Draft @FlyingBear Ghost7", + "inherits": "fdm_process_common_Ghost7", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "bottom_shell_layers": "3", + "overhang_1_4_speed": "50", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "tree_support_wall_count": "1", + "brim_width": "3", + "gap_infill_speed": "230", + "inner_wall_speed": "230", + "internal_solid_infill_speed": "230", + "layer_height": "0.24", + "print_settings_id": "0.24mm Draft @FlyingBear Ghost7", + "sparse_infill_speed": "230", + "exclude_object": "1", + "internal_bridge_speed": "50", + "compatible_printers": [ + "FlyingBear Ghost7 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json new file mode 100644 index 00000000000..caf2f7d7e22 --- /dev/null +++ b/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json @@ -0,0 +1,214 @@ +{ + "type": "process", + "name": "fdm_process_common_Ghost7", + "from": "system", + "instantiation": "false", + "accel_to_decel_enable": "0", + "accel_to_decel_factor": "50%", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "25", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "compatible_printers_condition": "", + "default_acceleration": "10000", + "default_jerk": "0", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "0", + "enable_overhang_speed": "1", + "enable_prime_tower": "0", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "1", + "extra_perimeters_on_overhangs": "0", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_thickness": "0.3", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "0", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "interface_shells": "0", + "internal_bridge_speed": "50%", + "internal_bridge_support_thickness": "0.8", + "internal_solid_infill_acceleration": "100%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "monotonic", + "ironing_flow": "10%", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_width_top_surface": "100%", + "minimum_sparse_infill_area": "15", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_4_4_speed": "10", + "overhang_speed_classic": "0", + "post_process": [], + "precise_outer_wall": "0", + "prime_tower_brim_width": "3", + "prime_tower_width": "35", + "prime_volume": "45", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "2", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "seam_gap": "10%", + "seam_position": "aligned", + "single_extruder_multi_material_priming": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "crosshatch", + "spiral_mode": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "30", + "support_top_z_distance": "0.2", + "support_type": "normal(auto)", + "thick_bridges": "0", + "timelapse_type": "0", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "12", + "travel_speed": "500", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "0", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_double_wall": "3", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "0", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_infill_order": "inner wall/outer wall/infill", + "wall_loops": "2", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "0", + "wipe_tower_extra_spacing": "100%", + "wipe_tower_extruder": "0", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0", + "exclude_object": "1" +} \ No newline at end of file From 53775efe23afcc45558f60d577f0c13cddb570b2 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 28 Sep 2025 16:12:34 +0800 Subject: [PATCH 07/20] [PROFILE]add Rolohaun Delta Flyer Refit (#10893) * [PROFILE]add Rolohaun Delta Flyer Refit --- resources/profiles/RolohaunDesign.json | 38 +++++- ...Rolohaun Delta Flyer Refit 0.4 nozzle.json | 117 ++++++++++++++++++ .../machine/Rolohaun Delta Flyer Refit.json | 12 ++ ...uper Fine @Rolohaun Delta Flyer Refit.json | 19 +++ ...10mm Fine @Rolohaun Delta Flyer Refit.json | 19 +++ ...m Optimal @Rolohaun Delta Flyer Refit.json | 17 +++ ... Standard @Rolohaun Delta Flyer Refit.json | 14 +++ ...4mm Draft @Rolohaun Delta Flyer Refit.json | 19 +++ ...ugh Draft @Rolohaun Delta Flyer Refit.json | 19 +++ ...Vase Mode @Rolohaun Delta Flyer Refit.json | 20 +++ 10 files changed, 293 insertions(+), 1 deletion(-) create mode 100644 resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json create mode 100644 resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json create mode 100644 resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json diff --git a/resources/profiles/RolohaunDesign.json b/resources/profiles/RolohaunDesign.json index 65c07de54e3..e37fc759821 100644 --- a/resources/profiles/RolohaunDesign.json +++ b/resources/profiles/RolohaunDesign.json @@ -1,9 +1,13 @@ { "name": "RolohaunDesign", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "RolohaunDesign Printer Profiles", "machine_model_list": [ + { + "name": "Rolohaun Delta Flyer Refit", + "sub_path": "machine/Rolohaun Delta Flyer Refit.json" + }, { "name": "Rook MK1 LDO", "sub_path": "machine/Rook MK1 LDO.json" @@ -22,18 +26,38 @@ "name": "0.08mm Extra Fine @Rook MK1 LDO", "sub_path": "process/0.08mm Extra Fine @Rook MK1 LDO.json" }, + { + "name": "0.08mm Super Fine @Delta Flyer Refit", + "sub_path": "process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json" + }, + { + "name": "0.10mm Fine @Delta Flyer Refit", + "sub_path": "process/0.10mm Fine @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.12mm Fine @Rook MK1 LDO", "sub_path": "process/0.12mm Fine @Rook MK1 LDO.json" }, + { + "name": "0.16mm Optimal @Delta Flyer Refit", + "sub_path": "process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.16mm Optimal @Rook MK1 LDO", "sub_path": "process/0.16mm Optimal @Rook MK1 LDO.json" }, + { + "name": "0.20mm Standard @Delta Flyer Refit", + "sub_path": "process/0.20mm Standard @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.20mm Standard @Rook MK1 LDO", "sub_path": "process/0.20mm Standard @Rook MK1 LDO.json" }, + { + "name": "0.24mm Draft @Delta Flyer Refit", + "sub_path": "process/0.24mm Draft @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.24mm Draft @Rook MK1 LDO", "sub_path": "process/0.24mm Draft @Rook MK1 LDO.json" @@ -42,6 +66,14 @@ "name": "0.28mm Extra Draft @Rook MK1 LDO", "sub_path": "process/0.28mm Extra Draft @Rook MK1 LDO.json" }, + { + "name": "0.28mm Rough Draft @Delta Flyer Refit", + "sub_path": "process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json" + }, + { + "name": "0.2mm Vase Mode @Delta Flyer Refit", + "sub_path": "process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json" + }, { "name": "0.32mm Standard @Rook MK1 LDO", "sub_path": "process/0.32mm Extra Draft @Rook MK1 LDO.json" @@ -65,6 +97,10 @@ "name": "fdm_common_Rook MK1 LDO", "sub_path": "machine/fdm_common_Rook MK1 LDO.json" }, + { + "name": "Rolohaun Delta Flyer Refit 0.4 nozzle", + "sub_path": "machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json" + }, { "name": "Rook MK1 LDO 0.2 nozzle", "sub_path": "machine/Rook MK1 LDO 0.2 nozzle.json" diff --git a/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json new file mode 100644 index 00000000000..3ac283ccba0 --- /dev/null +++ b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit 0.4 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "machine", + "name": "Rolohaun Delta Flyer Refit 0.4 nozzle", + "inherits": "fdm_common_Rook MK1 LDO", + "from": "system", + "instantiation": "true", + "setting_id": "RDFR_01", + "bed_custom_model": "", + "printer_structure": "delta", + "deretraction_speed": [ + "60" + ], + "machine_max_acceleration_extruding": [ + "10000", + "20000" + ], + "machine_max_acceleration_x": [ + "10000", + "20000" + ], + "machine_max_acceleration_y": [ + "10000", + "20000" + ], + "machine_start_gcode": "PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n", + "min_layer_height": [ + "0.04" + ], + "nozzle_type": "brass", + "printable_area": [ + "54.7907x4.79357", + "54.1644x9.55065", + "53.1259x14.235", + "51.6831x18.8111", + "49.8469x23.244", + "47.6314x27.5", + "45.0534x31.5467", + "42.1324x35.3533", + "38.8909x38.8909", + "35.3533x42.1324", + "31.5467x45.0534", + "27.5x47.6314", + "23.244x49.8469", + "18.8111x51.6831", + "14.235x53.1259", + "9.55065x54.1644", + "4.79357x54.7907", + "3.36778e-15x55", + "-4.79357x54.7907", + "-9.55065x54.1644", + "-14.235x53.1259", + "-18.8111x51.6831", + "-23.244x49.8469", + "-27.5x47.6314", + "-31.5467x45.0534", + "-35.3533x42.1324", + "-38.8909x38.8909", + "-42.1324x35.3533", + "-45.0534x31.5467", + "-47.6314x27.5", + "-49.8469x23.244", + "-51.6831x18.8111", + "-53.1259x14.235", + "-54.1644x9.55065", + "-54.7907x4.79357", + "-55x6.73556e-15", + "-54.7907x-4.79357", + "-54.1644x-9.55065", + "-53.1259x-14.235", + "-51.6831x-18.8111", + "-49.8469x-23.244", + "-47.6314x-27.5", + "-45.0534x-31.5467", + "-42.1324x-35.3533", + "-38.8909x-38.8909", + "-35.3533x-42.1324", + "-31.5467x-45.0534", + "-27.5x-47.6314", + "-23.244x-49.8469", + "-18.8111x-51.6831", + "-14.235x-53.1259", + "-9.55065x-54.1644", + "-4.79357x-54.7907", + "-1.01033e-14x-55", + "4.79357x-54.7907", + "9.55065x-54.1644", + "14.235x-53.1259", + "18.8111x-51.6831", + "23.244x-49.8469", + "27.5x-47.6314", + "31.5467x-45.0534", + "35.3533x-42.1324", + "38.8909x-38.8909", + "42.1324x-35.3533", + "45.0534x-31.5467", + "47.6314x-27.5", + "49.8469x-23.244", + "51.6831x-18.8111", + "53.1259x-14.235", + "54.1644x-9.55065", + "54.7907x-4.79357", + "55x-1.34711e-14" + ], + "printer_model": "Rolohaun Delta Flyer Refit", + "printable_height": "115", + "retraction_length": [ + "1.8" + ], + "retraction_speed": [ + "60" + ], + "support_multi_bed_types": "1", + "thumbnails": "48x48/PNG, 300x300/PNG", + "z_hop": [ + "0.8" + ] +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..95c20aed188 --- /dev/null +++ b/resources/profiles/RolohaunDesign/machine/Rolohaun Delta Flyer Refit.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Rolohaun Delta Flyer Refit", + "model_id": "RDFR1_1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "RolohaunDesign", + "bed_model": "", + "bed_texture": "bedtexture-rook-green-120.png", + "hotend_model": "", + "default_materials": "Generic PLA @System;Generic PETG @System" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..f8af4a582ea --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.08mm Super Fine @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.08mm Super Fine @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "4", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.08", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "5%", + "top_shell_layers": "6", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "4" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..a65b454205a --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.10mm Fine @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.10mm Fine @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "4", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.1", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "5%", + "top_shell_layers": "6", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "4" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..ed75234630c --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.16mm Optimal @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "name": "0.16mm Optimal @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.16", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "10%", + "top_shell_layers": "5", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..57a39e636e1 --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.20mm Standard @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "0.20mm Standard @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..6d2970466ac --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.24mm Draft @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.24mm Draft @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "2", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.24", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "10%", + "top_shell_layers": "3", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "2" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..14c8236e751 --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.28mm Rough Draft @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.28mm Rough Draft @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "2", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "layer_height": "0.28", + "min_skirt_length": "8", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "10%", + "top_shell_layers": "3", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "2" +} \ No newline at end of file diff --git a/resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json b/resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json new file mode 100644 index 00000000000..9114024f53d --- /dev/null +++ b/resources/profiles/RolohaunDesign/process/0.2mm Vase Mode @Rolohaun Delta Flyer Refit.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "name": "0.2mm Vase Mode @Delta Flyer Refit", + "inherits": "fdm_process_Rook MK1 LDO_common", + "from": "system", + "instantiation": "true", + "bottom_shell_layers": "4", + "initial_layer_infill_speed": "100", + "initial_layer_speed": "80", + "min_skirt_length": "8", + "outer_wall_line_width": "1", + "skirt_height": "1", + "skirt_loops": "2", + "sparse_infill_density": "0%", + "spiral_mode": "1", + "top_shell_layers": "0", + "top_solid_infill_flow_ratio": "0.95", + "travel_speed": "300", + "wall_loops": "1" +} \ No newline at end of file From 007af34337506360bc7fc3f01e2526043e6237e9 Mon Sep 17 00:00:00 2001 From: Maor Avni Date: Sun, 28 Sep 2025 13:14:57 +0300 Subject: [PATCH 08/20] [PROFILE] fix for Ender 3 V3 KE (#10860) * profile fix for Ender 3 V3 KE * main creality.json --------- Co-authored-by: SoftFever --- resources/profiles/Creality.json | 12 ++++++++++++ .../machine/Creality Ender-3 V3 KE 0.2 nozzle.json | 6 +++--- .../machine/Creality Ender-3 V3 KE 0.6 nozzle.json | 6 +++--- .../machine/Creality Ender-3 V3 KE 0.8 nozzle.json | 6 +++--- .../process/0.12mm Fine @Creality Ender3V3KE.json | 4 +++- .../process/0.16mm Optimal @Creality Ender3V3KE.json | 5 ++++- .../0.20mm Standard @Creality Ender3V3KE.json | 5 ++++- .../process/0.24mm Draft @Creality Ender3V3KE.json | 5 ++++- 8 files changed, 36 insertions(+), 13 deletions(-) diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 893f79e010d..b09200497e4 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1650,10 +1650,22 @@ "name": "Creality Ender-3 V3 0.6 nozzle", "sub_path": "machine/Creality Ender-3 V3 0.6 nozzle.json" }, + { + "name": "Creality Ender-3 V3 KE 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.2 nozzle.json" + }, { "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 KE 0.6 nozzle", "sub_path": "machine/Creality Ender-3 V3 KE 0.6 nozzle.json" }, + { + "name": "Creality Ender-3 V3 KE 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 V3 KE 0.8 nozzle.json" + }, { "name": "Creality Ender-3 V3 Plus 0.4 nozzle", "sub_path": "machine/Creality Ender-3 V3 Plus 0.4 nozzle.json" diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json index 4384b0c1bde..6b876509ba0 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "name": "Creality Ender-3 V3 KE 0.2 nozzle", "inherits": "fdm_creality_common", "from": "system", "setting_id": "GM001", @@ -83,10 +83,10 @@ "0.4" ], "max_layer_height": [ - "0.32" + "0.16" ], "min_layer_height": [ - "0.08" + "0.04" ], "retraction_minimum_travel": [ "2" diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json index e222da5a062..eeff131c025 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "name": "Creality Ender-3 V3 KE 0.6 nozzle", "inherits": "fdm_creality_common", "from": "system", "setting_id": "GM001", @@ -83,10 +83,10 @@ "0.4" ], "max_layer_height": [ - "0.32" + "0.48" ], "min_layer_height": [ - "0.08" + "0.12" ], "retraction_minimum_travel": [ "2" diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json index fe022482539..36cfcffb60d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json @@ -1,6 +1,6 @@ { "type": "machine", - "name": "Creality Ender-3 V3 KE 0.4 nozzle", + "name": "Creality Ender-3 V3 KE 0.8 nozzle", "inherits": "fdm_creality_common", "from": "system", "setting_id": "GM001", @@ -83,10 +83,10 @@ "0.4" ], "max_layer_height": [ - "0.32" + "0.64" ], "min_layer_height": [ - "0.08" + "0.16" ], "retraction_minimum_travel": [ "2" diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json index 3258d94963e..2a832e0cad2 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json @@ -115,6 +115,8 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json index 2e6ca2df4f1..e0ab6808dcc 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json @@ -115,6 +115,9 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle", + "Creality Ender-3 V3 KE 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json index f654684651e..bf3811574ae 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json @@ -115,6 +115,9 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle", + "Creality Ender-3 V3 KE 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json index e6b02349d26..10ade575cc0 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json @@ -115,6 +115,9 @@ "travel_jerk": "7", "accel_to_decel_enable": "0", "compatible_printers": [ - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.2 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 KE 0.6 nozzle", + "Creality Ender-3 V3 KE 0.8 nozzle" ] } \ No newline at end of file From 2edae765cc07fc59571749f39ad4652fae71b551 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Sun, 28 Sep 2025 07:44:37 -0300 Subject: [PATCH 09/20] Disable smooth sprial in input_shaping calibrations (#10748) * Disable spiral_mode_smooth in calibrations Causes problems when using absolute distances (use_relative_e_distances = false). * Add note about absolute E distances in Smooth Spiral --- doc/print_settings/others/others_settings_special_mode.md | 3 +++ src/slic3r/GUI/Plater.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/doc/print_settings/others/others_settings_special_mode.md b/doc/print_settings/others/others_settings_special_mode.md index 7945cd819ae..753fe4415cb 100644 --- a/doc/print_settings/others/others_settings_special_mode.md +++ b/doc/print_settings/others/others_settings_special_mode.md @@ -68,6 +68,9 @@ This creates a smooth, vase-like appearance. When enabled, Smooth Spiral smooths out X and Y moves as well, resulting in no visible seams even on non-vertical walls. This produces the smoothest possible spiral print. +> [!NOTE] +> If you are using absolute e distances, the smoothing may not work as expected. + #### Max XY Smoothing Maximum distance to move points in XY to achieve a smooth spiral. If expressed as a percentage, it is calculated relative to the nozzle diameter. diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a99f608247f..d9c95d6d063 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10258,7 +10258,7 @@ void Plater::calib_input_shaping_freq(const Calib_Params& params) print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false)); print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); - print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); @@ -10306,7 +10306,7 @@ void Plater::calib_input_shaping_damp(const Calib_Params& params) print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false)); print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); - print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); @@ -10355,7 +10355,7 @@ void Plater::calib_junction_deviation(const Calib_Params& params) print_config->set_key_value("sparse_infill_density", new ConfigOptionPercent(0)); print_config->set_key_value("detect_thin_wall", new ConfigOptionBool(false)); print_config->set_key_value("spiral_mode", new ConfigOptionBool(true)); - print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(true)); + print_config->set_key_value("spiral_mode_smooth", new ConfigOptionBool(false)); print_config->set_key_value("bottom_surface_pattern", new ConfigOptionEnum(ipRectilinear)); print_config->set_key_value("outer_wall_speed", new ConfigOptionFloat(200)); print_config->set_key_value("default_acceleration", new ConfigOptionFloat(2000)); From 4b92d0f45dee9ddcea32742b6835323eb4dc5826 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 28 Sep 2025 22:12:14 +0800 Subject: [PATCH 10/20] Update SoftFever version to 2.3.2-dev --- version.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.inc b/version.inc index 4af1e2cccb3..0ca14c629ed 100644 --- a/version.inc +++ b/version.inc @@ -10,7 +10,7 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "0") endif() -set(SoftFever_VERSION "2.3.1-beta") +set(SoftFever_VERSION "2.3.2-dev") string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" SoftFever_VERSION_MATCH ${SoftFever_VERSION}) set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1}) From 91bc768e9094500fea8690b682efeacec87eae7e Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 29 Sep 2025 21:43:51 +0800 Subject: [PATCH 11/20] [Profile]add missing cover image --- .../Rolohaun Delta Flyer Refit_cover.png | Bin 0 -> 26304 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 resources/profiles/RolohaunDesign/Rolohaun Delta Flyer Refit_cover.png diff --git a/resources/profiles/RolohaunDesign/Rolohaun Delta Flyer Refit_cover.png b/resources/profiles/RolohaunDesign/Rolohaun Delta Flyer Refit_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..ed8df37ac99ec1755e15d8bdad13dbbdfd5beb61 GIT binary patch literal 26304 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 xbM_ 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 IM6N<$g5b{FEdT%j literal 0 HcmV?d00001 From f239e06d6e8a91b02627bcb08aea023815e872b2 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 29 Sep 2025 22:16:14 +0800 Subject: [PATCH 12/20] update locale --- localization/i18n/OrcaSlicer.pot | 17 ++- localization/i18n/ca/OrcaSlicer_ca.po | 19 +++- localization/i18n/cs/OrcaSlicer_cs.po | 19 +++- localization/i18n/de/OrcaSlicer_de.po | 49 ++++++--- localization/i18n/en/OrcaSlicer_en.po | 17 ++- localization/i18n/es/OrcaSlicer_es.po | 19 +++- localization/i18n/fr/OrcaSlicer_fr.po | 19 +++- localization/i18n/hu/OrcaSlicer_hu.po | 19 +++- localization/i18n/it/OrcaSlicer_it.po | 19 +++- localization/i18n/ja/OrcaSlicer_ja.po | 19 +++- localization/i18n/ko/OrcaSlicer_ko.po | 19 +++- localization/i18n/lt/OrcaSlicer_lt.po | 19 +++- localization/i18n/nl/OrcaSlicer_nl.po | 17 ++- localization/i18n/pl/OrcaSlicer_pl.po | 19 +++- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 115 +++++++++++--------- localization/i18n/ru/OrcaSlicer_ru.po | 19 +++- localization/i18n/sv/OrcaSlicer_sv.po | 19 +++- localization/i18n/tr/OrcaSlicer_tr.po | 20 +++- localization/i18n/uk/OrcaSlicer_uk.po | 19 +++- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 21 +++- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 19 +++- 21 files changed, 378 insertions(+), 144 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 4c92f920546..b618d4ecd6e 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -5846,6 +5846,17 @@ msgstr "" msgid "Load 3mf" msgstr "" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, possible-c-format, possible-boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8224,10 +8235,10 @@ msgstr "" msgid "Global shortcuts" msgstr "" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 16835a17bde..14f211cea8f 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -6291,6 +6291,17 @@ msgstr "" msgid "Load 3mf" msgstr "Carregar 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8987,12 +8998,12 @@ msgstr "Mostrar la llista de dreceres de teclat" msgid "Global shortcuts" msgstr "Dreceres Globals" -msgid "Rotate View" -msgstr "Rotar la vista" - msgid "Pan View" msgstr "Vista Panoràmica" +msgid "Rotate View" +msgstr "Rotar la vista" + msgid "Zoom View" msgstr "Vista amb Zoom" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 9e15bf82a97..c60c571d675 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2024-11-03 20:59+0100\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -6170,6 +6170,17 @@ msgstr "" msgid "Load 3mf" msgstr "Načíst 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8733,12 +8744,12 @@ msgstr "Zobrazit přehled klávesových zkratek" msgid "Global shortcuts" msgstr "Globální zkratky" -msgid "Rotate View" -msgstr "Otočit pohled" - msgid "Pan View" msgstr "Zobrazení panorama" +msgid "Rotate View" +msgstr "Otočit pohled" + msgid "Zoom View" msgstr "Zvětšit zobrazení" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 87a8a947a14..2d86aa61413 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -4296,8 +4296,8 @@ msgid "" "Invalid pattern. Use N, N#K, or a comma-separated list with optional #K per " "entry. Examples: 5, 5#2, 1,7,9, 5,9#2,18." msgstr "" -"Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennte Liste " -"mit optionalem #K pro Eintrag. Beispiele: 5, 5#2, 1,7,9, 5,9#2,18." +"Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennte " +"Liste mit optionalem #K pro Eintrag. Beispiele: 5, 5#2, 1,7,9, 5,9#2,18." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" @@ -6361,6 +6361,17 @@ msgstr "Der 3mf stammt nicht vom OrcaSlicer, lade nur die Geometriedaten." msgid "Load 3mf" msgstr "Lade 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -7212,7 +7223,9 @@ msgid "Maximum count of recent files" msgstr "Maximale Anzahl der zuletzt verwendeten Dateien" msgid "Add model files (stl/step) to recent file list." -msgstr "Modell-Dateien (stl/step) zur Liste der zuletzt verwendeten Dateien hinzufügen." +msgstr "" +"Modell-Dateien (stl/step) zur Liste der zuletzt verwendeten Dateien " +"hinzufügen." msgid "Clear my choice on the unsaved projects." msgstr "Meine Auswahl für nicht gespeicherte Projekte löschen." @@ -9110,12 +9123,12 @@ msgstr "Liste der Tastaturkürzel anzeigen" msgid "Global shortcuts" msgstr "Globale Tastaturkürzel" -msgid "Rotate View" -msgstr "Drehen der Ansicht" - msgid "Pan View" msgstr "Pan-Ansicht" +msgid "Rotate View" +msgstr "Drehen der Ansicht" + msgid "Zoom View" msgstr "Ansicht zoomen" @@ -12355,11 +12368,11 @@ msgid "" "'5#' equals '5#1'), or a comma-separated list (e.g. 1,7,9) to insert at " "explicit layers. Layers are 1-based." msgstr "" -"Fügt an bestimmten Schichten massive Füllung ein. Verwenden Sie N, um jede " -"N-te Schicht einzufügen, N#K, um K aufeinanderfolgende massive Schichten alle N " -"Schichten einzufügen (K ist optional, z.B. '5#' entspricht '5#1'), oder eine " -"kommagetrennte Liste (z.B. 1,7,9), um sie in expliziten Schichten einzufügen. " -"Schichten sind 1-basiert." +"Fügt an bestimmten Schichten massive Füllung ein. Verwenden Sie N, um jede N-" +"te Schicht einzufügen, N#K, um K aufeinanderfolgende massive Schichten alle " +"N Schichten einzufügen (K ist optional, z.B. '5#' entspricht '5#1'), oder " +"eine kommagetrennte Liste (z.B. 1,7,9), um sie in expliziten Schichten " +"einzufügen. Schichten sind 1-basiert." msgid "Fill Multiline" msgstr "Mehrzeilige Füllung" @@ -13229,12 +13242,12 @@ msgid "" msgstr "" "Drehen Sie die Richtung der spärlichen Füllung pro Schicht mit einer Vorlage " "von Winkeln. Geben Sie durch Kommas getrennte Grad ein (z.B. '0,30,60,90'). " -"Winkel werden schichtweise in der Reihenfolge angewendet und wiederholt, wenn " -"die Liste endet. Erweiterte Syntax wird unterstützt: '+5' dreht +5° jede " -"Schicht; '+5#5' dreht +5° alle 5 Schichten. Siehe das Wiki für Details. Wenn eine " -"Vorlage festgelegt ist, wird die Standardfüllrichtungseinstellung ignoriert. " -"Beachten Sie: Einige Füllmuster (z.B. Gyroid) steuern die Rotation selbst; " -"verwenden Sie sie mit Vorsicht." +"Winkel werden schichtweise in der Reihenfolge angewendet und wiederholt, " +"wenn die Liste endet. Erweiterte Syntax wird unterstützt: '+5' dreht +5° " +"jede Schicht; '+5#5' dreht +5° alle 5 Schichten. Siehe das Wiki für Details. " +"Wenn eine Vorlage festgelegt ist, wird die Standardfüllrichtungseinstellung " +"ignoriert. Beachten Sie: Einige Füllmuster (z.B. Gyroid) steuern die " +"Rotation selbst; verwenden Sie sie mit Vorsicht." msgid "°" msgstr "°" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 0fa63ef7eb0..e08e0a15b3e 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-05-18 09:32-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -5938,6 +5938,17 @@ msgstr "The 3mf is not supported by OrcaSlicer, loading geometry data only." msgid "Load 3mf" msgstr "" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8389,10 +8400,10 @@ msgstr "" msgid "Global shortcuts" msgstr "" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index e5880739297..eee318dcd48 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -6309,6 +6309,17 @@ msgstr "El 3mf no es de Orca Slicer, cargando sólo datos de geometría." msgid "Load 3mf" msgstr "Cargar 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9004,12 +9015,12 @@ msgstr "Muestra lista de atajos de teclado" msgid "Global shortcuts" msgstr "Atajos globales" -msgid "Rotate View" -msgstr "Rotar Vista" - msgid "Pan View" msgstr "Desplazar vista" +msgid "Rotate View" +msgstr "Rotar Vista" + msgid "Zoom View" msgstr "Hacer Zoom" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index c612f696b3b..644babb0e73 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -6334,6 +6334,17 @@ msgstr "" msgid "Load 3mf" msgstr "Charger 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9100,12 +9111,12 @@ msgstr "Afficher la liste des raccourcis clavier" msgid "Global shortcuts" msgstr "Raccourcis globaux" -msgid "Rotate View" -msgstr "Rotation de la vue" - msgid "Pan View" msgstr "Déplacement de vue" +msgid "Rotate View" +msgstr "Rotation de la vue" + msgid "Zoom View" msgstr "Vue agrandie" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index fb9631f35b8..f0fb387e07e 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6082,6 +6082,17 @@ msgstr "" msgid "Load 3mf" msgstr "3mf betöltése" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8629,12 +8640,12 @@ msgstr "Gyorsgombok listájának megjelenítése" msgid "Global shortcuts" msgstr "Globális gyorsbillentyűk" -msgid "Rotate View" -msgstr "Nézet elforgatása" - msgid "Pan View" msgstr "Pásztázó nézet" +msgid "Rotate View" +msgstr "Nézet elforgatása" + msgid "Zoom View" msgstr "Nagyítás nézet" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 6cd23ecd2bc..6f0b1aea45d 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6312,6 +6312,17 @@ msgstr "" msgid "Load 3mf" msgstr "Carica 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9030,12 +9041,12 @@ msgstr "Mostra elenco scorciatoie da tastiera" msgid "Global shortcuts" msgstr "Scorciatoie globali" -msgid "Rotate View" -msgstr "Ruota vista" - msgid "Pan View" msgstr "Vista panoramica" +msgid "Rotate View" +msgstr "Ruota vista" + msgid "Zoom View" msgstr "Ingrandimento vista" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index ea13d0c7135..1cfd1645223 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -5964,6 +5964,17 @@ msgstr "" msgid "Load 3mf" msgstr "3mfを読込み" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8423,12 +8434,12 @@ msgstr "ショートカット一覧を表示" msgid "Global shortcuts" msgstr "ショートカット" -msgid "Rotate View" -msgstr "回転" - msgid "Pan View" msgstr "移動" +msgid "Rotate View" +msgstr "回転" + msgid "Zoom View" msgstr "ズーム" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index db4ca3161f9..eabc193bd6c 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -6122,6 +6122,17 @@ msgstr "이 3mf는 OrcaSlicer에서 지원되지 않습니다. 형상 데이터 msgid "Load 3mf" msgstr "3mf 불러오기" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8707,12 +8718,12 @@ msgstr "키보드 단축키 목록 보기" msgid "Global shortcuts" msgstr "전역 단축키" -msgid "Rotate View" -msgstr "시점 회전" - msgid "Pan View" msgstr "시점 이동" +msgid "Rotate View" +msgstr "시점 회전" + msgid "Zoom View" msgstr "시점 확대/축소" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 670e2cc0af7..c4e2e8ded33 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-21 21:00+0200\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -6256,6 +6256,17 @@ msgstr "3MF nepalaikomas Orca Slicer. Įkeliami tik geometrijos duomenys." msgid "Load 3mf" msgstr "Įkelti 3MF" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8945,12 +8956,12 @@ msgstr "Rodyti sparčiųjų klavišų sąrašą" msgid "Global shortcuts" msgstr "Bendrieji spartieji klavišai" -msgid "Rotate View" -msgstr "Pasukti vaizdą" - msgid "Pan View" msgstr "Judinti vaizdą" +msgid "Rotate View" +msgstr "Pasukti vaizdą" + msgid "Zoom View" msgstr "Padidinti vaizdą" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index b0eab2b19d9..4891f995f8b 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -6144,6 +6144,17 @@ msgstr "" msgid "Load 3mf" msgstr "Laad 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8772,10 +8783,10 @@ msgstr "Toon lijst met sneltoetsen" msgid "Global shortcuts" msgstr "Globale snelkoppelingen" -msgid "Rotate View" +msgid "Pan View" msgstr "" -msgid "Pan View" +msgid "Rotate View" msgstr "" msgid "Zoom View" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index ae27552cc01..a76934bf0af 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -6275,6 +6275,17 @@ msgstr "" msgid "Load 3mf" msgstr "Wczytaj 3MF" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8944,12 +8955,12 @@ msgstr "Pokaż listę skrótów klawiszowych" msgid "Global shortcuts" msgstr "Globalne skróty" -msgid "Rotate View" -msgstr "Obróć widok" - msgid "Pan View" msgstr "Przesuń widok" +msgid "Rotate View" +msgstr "Obróć widok" + msgid "Zoom View" msgstr "Przybliż widok" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 9fea5db9cc4..f7add0d5100 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-08-13 10:05-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -1568,8 +1568,8 @@ msgid "" "features.\n" "Click Yes to install it now." msgstr "" -"O OrcaSlicer requer o Microsoft WebView2 Runtime para operar " -"determinados recursos.\n" +"O OrcaSlicer requer o Microsoft WebView2 Runtime para operar determinados " +"recursos.\n" "Clique em Sim para instalá-lo agora." msgid "WebView2 Runtime" @@ -4245,8 +4245,8 @@ msgid "" "Invalid pattern. Use N, N#K, or a comma-separated list with optional #K per " "entry. Examples: 5, 5#2, 1,7,9, 5,9#2,18." msgstr "" -"Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K opcional " -"por entrada. Examplos: 5, 5#2, 1,7,9, 5,9#2,18." +"Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K " +"opcional por entrada. Examplos: 5, 5#2, 1,7,9, 5,9#2,18." #, boost-format msgid "Invalid format. Expected vector format: \"%1%\"" @@ -6216,8 +6216,8 @@ msgid "" "presets." msgstr "" "Alguns filamentos desconhecidos foram mapeados para a predefinição genérica. " -"Por favor, atualize o OrcaSlicer ou reinicie o OrcaSlicer para verificar " -"se há uma atualização para as predefinições do sistema." +"Por favor, atualize o OrcaSlicer ou reinicie o OrcaSlicer para verificar se " +"há uma atualização para as predefinições do sistema." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -6286,6 +6286,17 @@ msgstr "" msgid "Load 3mf" msgstr "Carregar 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -6985,8 +6996,9 @@ msgid "Orbit speed multiplier" msgstr "Multiplicador de velocidade de órbita" msgid "Multiplies the orbit speed for finer or coarser camera movement." -msgstr "Multiplica a velocidade da órbita para um movimento de câmera " -"mais fino ou mais grosseiro." +msgstr "" +"Multiplica a velocidade da órbita para um movimento de câmera mais fino ou " +"mais grosseiro." msgid "Show splash screen" msgstr "Mostrar tela de abertura" @@ -7869,9 +7881,9 @@ msgid "" "A prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Are you sure you want to disable prime tower?" msgstr "" -"Uma torre de preparo é necessária para um timelapse suave. Pode haver " -"falhas no modelo sem a torre de preparo. Tem certeza de que deseja " -"desativar a torre de preparo?" +"Uma torre de preparo é necessária para um timelapse suave. Pode haver falhas " +"no modelo sem a torre de preparo. Tem certeza de que deseja desativar a " +"torre de preparo?" msgid "" "Enabling both precise Z height and the prime tower may cause the size of " @@ -7884,9 +7896,8 @@ msgid "" "A prime tower is required for smooth timelapse. There may be flaws on the " "model without prime tower. Do you want to enable prime tower?" msgstr "" -"Uma torre de preparo é necessária para um timelapse suave. Pode haver " -"falhas no modelo sem a torre de preparo. Deseja ativar a torre de " -"preparo?" +"Uma torre de preparo é necessária para um timelapse suave. Pode haver falhas " +"no modelo sem a torre de preparo. Deseja ativar a torre de preparo?" msgid "Still print by object?" msgstr "Ainda imprimir por objeto?" @@ -9009,12 +9020,12 @@ msgstr "Mostrar lista de atalhos de teclado" msgid "Global shortcuts" msgstr "Atalhos globais" -msgid "Rotate View" -msgstr "Rotacionar vista" - msgid "Pan View" msgstr "Movimentar vista" +msgid "Rotate View" +msgstr "Rotacionar vista" + msgid "Zoom View" msgstr "Aproximar vista" @@ -9280,8 +9291,7 @@ msgstr "Conecte a impressora usando IP e código de acesso" msgid "" "Step 1. Please confirm Orca Slicer and your printer are in the same LAN." -msgstr "" -"Passo 1. Confirme se o OrcaSlicer e sua impressora estão na mesma LAN." +msgstr "Passo 1. Confirme se o OrcaSlicer e sua impressora estão na mesma LAN." msgid "" "Step 2. If the IP and Access Code below are different from the actual values " @@ -9782,8 +9792,8 @@ msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " "RepRapFirmware and Repetier G-code flavors." msgstr "" -"A torre de preparo atualmente só é suportada para os G-code do tipo " -"Marlin, RepRap/Sprinter, RepRapFirmware e Repetier." +"A torre de preparo atualmente só é suportada para os G-code do tipo Marlin, " +"RepRap/Sprinter, RepRapFirmware e Repetier." msgid "The prime tower is not supported in \"By object\" print." msgstr "A torre de preparo não é suportada na impressão \"Por objeto\"." @@ -9792,26 +9802,26 @@ msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"A torre de preparo não é suportada quando a altura de camada adaptativa " -"está ativa. Isso requer que todos os objetos tenham a mesma altura de camada." +"A torre de preparo não é suportada quando a altura de camada adaptativa está " +"ativa. Isso requer que todos os objetos tenham a mesma altura de camada." msgid "" "The prime tower requires \"support gap\" to be multiple of layer height." msgstr "" -"A torre de preparo requer que o \"vão de suporte\" seja múltiplo da " -"altura da camada." +"A torre de preparo requer que o \"vão de suporte\" seja múltiplo da altura " +"da camada." msgid "The prime tower requires that all objects have the same layer heights." msgstr "" -"A torre de preparo requer que todos os objetos tenham as mesmas alturas " -"de camada." +"A torre de preparo requer que todos os objetos tenham as mesmas alturas de " +"camada." msgid "" "The prime tower requires that all objects are printed over the same number " "of raft layers." msgstr "" -"A torre de preparo requer que todos os objetos sejam impressos sobre o " -"mesmo número de camadas da jangada." +"A torre de preparo requer que todos os objetos sejam impressos sobre o mesmo " +"número de camadas da jangada." msgid "" "The prime tower is only supported for multiple objects if they are printed " @@ -9824,15 +9834,15 @@ msgid "" "The prime tower requires that all objects are sliced with the same layer " "heights." msgstr "" -"A torre de preparo requer que todos os objetos sejam fatiados com as " -"mesmas alturas de camada." +"A torre de preparo requer que todos os objetos sejam fatiados com as mesmas " +"alturas de camada." msgid "" "The prime tower is only supported if all objects have the same variable " "layer height." msgstr "" -"A torre de preparo só é suportada se todos os objetos tiverem a mesma " -"altura de camada variável." +"A torre de preparo só é suportada se todos os objetos tiverem a mesma altura " +"de camada variável." msgid "" "One or more object were assigned an extruder that the printer does not have." @@ -10308,7 +10318,8 @@ msgstr "Tipo de placa padrão" msgid "" "Default bed type for the printer (supports both numeric and string format)." -msgstr "Tipo de placa padrão para a impressora (suporta formato numérico ou string)." +msgstr "" +"Tipo de placa padrão para a impressora (suporta formato numérico ou string)." msgid "First layer print sequence" msgstr "Sequência de impressão da primeira camada" @@ -10635,10 +10646,9 @@ msgid "" "layer consistency. NOTE: This option will be ignored for outer-inner or " "inner-outer-inner wall sequences." msgstr "" -"Melhora a precisão da casca ajustando o espaçamento da parede externa. " -"Isso também melhora a consistência da camada. Nota: Esta opção será ignorada " -"se a sequência da parede for externa-interna ou interna-externa-interna." - +"Melhora a precisão da casca ajustando o espaçamento da parede externa. Isso " +"também melhora a consistência da camada. Nota: Esta opção será ignorada se a " +"sequência da parede for externa-interna ou interna-externa-interna." msgid "Only one wall on top surfaces" msgstr "Parede única em superfícies superiores" @@ -12216,8 +12226,8 @@ msgstr "" "Insere preenchimento sólido em camadas específicas. Use N para inserir a " "cada enésima camada, N#K para inserir K camadas sólidas consecutivas a cada " "enésima camada (K é opcional, ou seja, '5#' é igual a '5#1'), ou uma lista " -"separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. Camadas " -"são baseadas em 1." +"separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. " +"Camadas são baseadas em 1." msgid "Fill Multiline" msgstr "Multilinhas de Preenchimento" @@ -13468,10 +13478,10 @@ msgid "" "semicolon, in the following format: \"1.234, 5.678;\"" msgstr "" "Modelo de Compensação de Fluxo, usado para ajustar o fluxo para áreas de " -"preenchimento pequenas. O modelo é expresso como um par de valores " -"separados por vírgula para o comprimento de extrusão e o fator de " -"correção de fluxo. Cada par em uma linha separeada, seguido por " -"ponto-e-vírgula, no seguinte formato: \"1.234, 5.678;\"" +"preenchimento pequenas. O modelo é expresso como um par de valores separados " +"por vírgula para o comprimento de extrusão e o fator de correção de fluxo. " +"Cada par em uma linha separeada, seguido por ponto-e-vírgula, no seguinte " +"formato: \"1.234, 5.678;\"" msgid "Maximum speed X" msgstr "Velocidade máxima X" @@ -15093,8 +15103,7 @@ msgid "" msgstr "" "A camada de suporte usa uma altura de camada independente da camada do " "objeto. Isso é para suportar a personalização do vão-Z e economizar tempo de " -"impressão. Esta opção será inválida quando a torre de preparo estiver " -"ativa." +"impressão. Esta opção será inválida quando a torre de preparo estiver ativa." msgid "Threshold angle" msgstr "Ângulo limiar" @@ -15272,8 +15281,8 @@ msgid "" "the surface." msgstr "" "A quantidade de material a extrudar durante o passar a ferro. Relativo ao " -"fluxo da altura normal da camada de interface. Um valor muito alto resulta em " -"superextrusão na superfície." +"fluxo da altura normal da camada de interface. Um valor muito alto resulta " +"em superextrusão na superfície." msgid "Support Ironing line spacing" msgstr "" @@ -16911,8 +16920,8 @@ msgstr "" "Agora adicionamos a auto-calibração para diferentes filamentos, que é " "totalmente automatizada e o resultado será salvo na impressora para uso " "futuro. Você só precisa fazer a calibração nos seguintes casos limitados:\n" -"1. Se você introduzir um novo filamento de marcas/modelos diferentes ou " -"se o filamento estiver úmido;\n" +"1. Se você introduzir um novo filamento de marcas/modelos diferentes ou se o " +"filamento estiver úmido;\n" "2. Se o bico estiver desgastado ou for substituído por um novo;\n" "3. Se o fluxo volumétrico máximo ou a temperatura de impressão forem " "alteradas na configuração do filamento." @@ -19749,8 +19758,8 @@ msgstr "" #~ msgid "" #~ "Ooze prevention is currently not supported with the prime tower enabled." #~ msgstr "" -#~ "A prevenção de vazamento atualmente não é suportada com a torre de " -#~ "prepao ativa." +#~ "A prevenção de vazamento atualmente não é suportada com a torre de prepao " +#~ "ativa." #~ msgid "" #~ "Interlocking depth of a segmented region. Zero disables this feature." diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 04799758ba8..b3b8c231bc8 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.3.0 Official Release\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-07-06 21:08+0700\n" "Last-Translator: \n" "Language-Team: Andylg \n" @@ -6350,6 +6350,17 @@ msgstr "" msgid "Load 3mf" msgstr "Загрузка 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -9099,12 +9110,12 @@ msgstr "Показать список сочетаний клавиш" msgid "Global shortcuts" msgstr "Глобальные горячие клавиши" -msgid "Rotate View" -msgstr "Вращение камеры" - msgid "Pan View" msgstr "Перемещение камеры" +msgid "Rotate View" +msgstr "Вращение камеры" + msgid "Zoom View" msgstr "Масштабирование вида" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index af38cde9e01..b8a40711c62 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -6070,6 +6070,17 @@ msgstr "3mf kommer inte från Orca Slicer, laddar endast geometri data." msgid "Load 3mf" msgstr "Ladda 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8618,12 +8629,12 @@ msgstr "Visa tangentbordets genvägs lista" msgid "Global shortcuts" msgstr "Övergripande genvägar" -msgid "Rotate View" -msgstr "Rotera vy" - msgid "Pan View" msgstr "Panoreringsvy" +msgid "Rotate View" +msgstr "Rotera vy" + msgid "Zoom View" msgstr "Zoomvy" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 020e2fcc253..c71b461a709 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-09-14 23:43+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -6235,6 +6235,17 @@ msgstr "" msgid "Load 3mf" msgstr "3mf yükle" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8914,12 +8925,12 @@ msgstr "Klavye kısayolları listesini göster" msgid "Global shortcuts" msgstr "Genel kısayollar" -msgid "Rotate View" -msgstr "Görüntüyü döndür" - msgid "Pan View" msgstr "Pan Görünümü" +msgid "Rotate View" +msgstr "Görüntüyü döndür" + msgid "Zoom View" msgstr "Zoom Görünümü" @@ -12475,6 +12486,7 @@ msgstr "İlk katmana pütürlü yüzey uygulanıp uygulanmayacağı." msgid "Fuzzy skin generator mode" msgstr "Pütürlü yüzey oluşturma modu" +#, fuzzy, c-format, boost-format msgid "" "Fuzzy skin generation mode. Works only with Arachne!\n" "Displacement: Сlassic mode when the pattern is formed by shifting the nozzle " diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 31facff165a..df839c8b9e4 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-07 09:30+0200\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" @@ -6294,6 +6294,17 @@ msgstr "3mf не від Orca Slicer, завантажуйте лише дані msgid "Load 3mf" msgstr "Завантажити 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8972,12 +8983,12 @@ msgstr "Показати список клавіш" msgid "Global shortcuts" msgstr "Глобальні ярлики" -msgid "Rotate View" -msgstr "Повернути вигляд" - msgid "Pan View" msgstr "Панорамний вигляд" +msgid "Rotate View" +msgstr "Повернути вигляд" + msgid "Zoom View" msgstr "Перегляд масштабу" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 15c3e9203c9..4e8abfa2d24 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2024-07-28 07:12+0000\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -6001,6 +6001,19 @@ msgstr "该3mf文件不是来自Orca Slicer,将只加载几何数据。" msgid "Load 3mf" msgstr "加载3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" +"该项目由 OrcaSlicer 2.3.1-alpha 创建,并使用了填充旋转模板设置,这些设置可能" +"无法与您当前的填充模式正常配合,可能导致支撑不足或打印质量问题。" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "您是否希望 OrcaSlicer 清除旋转模板设置以自动修复此问题?" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8503,12 +8516,12 @@ msgstr "显示键盘快捷键列表" msgid "Global shortcuts" msgstr "全局快捷键" -msgid "Rotate View" -msgstr "旋转视角" - msgid "Pan View" msgstr "移动视角" +msgid "Rotate View" +msgstr "旋转视角" + msgid "Zoom View" msgstr "缩放视角" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index d7165954c43..95f16659b84 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-09-11 21:06+0800\n" +"POT-Creation-Date: 2025-09-28 18:44+0800\n" "PO-Revision-Date: 2025-03-27 19:32+0800\n" "Last-Translator: 5idereal \n" "Language-Team: \n" @@ -6017,6 +6017,17 @@ msgstr "該 3mf 檔案不是來自 Orca Slicer,將只載入幾何資料。" msgid "Load 3mf" msgstr "載入 3mf" +msgid "" +"This project was created with an OrcaSlicer 2.3.1-alpha and uses infill " +"rotation template settings that may not work properly with your current " +"infill pattern. This could result in weak support or print quality issues." +msgstr "" + +msgid "" +"Would you like OrcaSlicer to automatically fix this by clearing the rotation " +"template settings?" +msgstr "" + #, c-format, boost-format msgid "" "The 3mf's version %s is newer than %s's version %s, found following " @@ -8525,12 +8536,12 @@ msgstr "顯示鍵盤快捷鍵清單" msgid "Global shortcuts" msgstr "全域快捷鍵" -msgid "Rotate View" -msgstr "旋轉視角" - msgid "Pan View" msgstr "移動視角" +msgid "Rotate View" +msgstr "旋轉視角" + msgid "Zoom View" msgstr "縮放視角" From deeb5c490224afa144bea5741efe7738661249a8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 29 Sep 2025 22:57:27 +0800 Subject: [PATCH 13/20] update profile version --- resources/profiles/Afinia.json | 2 +- resources/profiles/Anker.json | 2 +- resources/profiles/Anycubic.json | 2 +- resources/profiles/Artillery.json | 2 +- resources/profiles/BIQU.json | 2 +- resources/profiles/Blocks.json | 2 +- resources/profiles/CONSTRUCT3D.json | 2 +- resources/profiles/Chuanying.json | 2 +- resources/profiles/Co Print.json | 2 +- resources/profiles/CoLiDo.json | 2 +- resources/profiles/Comgrow.json | 2 +- resources/profiles/Creality.json | 2 +- resources/profiles/Cubicon.json | 2 +- resources/profiles/Custom.json | 2 +- resources/profiles/DeltaMaker.json | 2 +- resources/profiles/Dremel.json | 2 +- resources/profiles/Elegoo.json | 2 +- resources/profiles/Eryone.json | 2 +- resources/profiles/FLSun.json | 2 +- resources/profiles/Flashforge.json | 2 +- resources/profiles/FlyingBear.json | 2 +- resources/profiles/Folgertech.json | 2 +- resources/profiles/Geeetech.json | 2 +- resources/profiles/Ginger Additive.json | 2 +- resources/profiles/InfiMech.json | 2 +- resources/profiles/Kingroon.json | 2 +- resources/profiles/Lulzbot.json | 2 +- resources/profiles/MagicMaker.json | 2 +- resources/profiles/Mellow.json | 2 +- resources/profiles/OrcaArena.json | 2 +- resources/profiles/OrcaFilamentLibrary.json | 2 +- resources/profiles/Peopoly.json | 2 +- resources/profiles/Phrozen.json | 2 +- resources/profiles/Positron3D.json | 2 +- resources/profiles/Prusa.json | 2 +- resources/profiles/Qidi.json | 2 +- resources/profiles/Raise3D.json | 2 +- resources/profiles/Ratrig.json | 2 +- resources/profiles/SecKit.json | 2 +- resources/profiles/Snapmaker.json | 2 +- resources/profiles/Sovol.json | 2 +- resources/profiles/Tiertime.json | 2 +- resources/profiles/Tronxy.json | 2 +- resources/profiles/TwoTrees.json | 2 +- resources/profiles/UltiMaker.json | 2 +- resources/profiles/Vivedino.json | 2 +- resources/profiles/Volumic.json | 2 +- resources/profiles/Voron.json | 2 +- resources/profiles/Voxelab.json | 2 +- resources/profiles/Vzbot.json | 2 +- resources/profiles/Wanhao France.json | 2 +- resources/profiles/Wanhao.json | 2 +- resources/profiles/WonderMaker.json | 2 +- resources/profiles/Z-Bolt.json | 2 +- resources/profiles/iQ.json | 2 +- 55 files changed, 55 insertions(+), 55 deletions(-) diff --git a/resources/profiles/Afinia.json b/resources/profiles/Afinia.json index b25329b0ed0..74f204bec53 100644 --- a/resources/profiles/Afinia.json +++ b/resources/profiles/Afinia.json @@ -1,6 +1,6 @@ { "name": "Afinia", - "version": "02.03.01.01", + "version": "02.03.01.10", "force_update": "0", "description": "Afinia configurations", "machine_model_list": [ diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index ff877c5e89b..fbc580759a1 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index 031d7a70a4a..d0e7881a75f 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,6 +1,6 @@ { "name": "Anycubic", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Anycubic configurations", "machine_model_list": [ diff --git a/resources/profiles/Artillery.json b/resources/profiles/Artillery.json index 0c6c56f1676..c7c16326787 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ diff --git a/resources/profiles/BIQU.json b/resources/profiles/BIQU.json index cd351581a1f..19ed0a55784 100644 --- a/resources/profiles/BIQU.json +++ b/resources/profiles/BIQU.json @@ -1,6 +1,6 @@ { "name": "BIQU", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "BIQU configurations", "machine_model_list": [ diff --git a/resources/profiles/Blocks.json b/resources/profiles/Blocks.json index 18b7e5fecc8..a02cc11de7f 100644 --- a/resources/profiles/Blocks.json +++ b/resources/profiles/Blocks.json @@ -1,6 +1,6 @@ { "name": "Blocks", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Blocks configurations", "machine_model_list": [ diff --git a/resources/profiles/CONSTRUCT3D.json b/resources/profiles/CONSTRUCT3D.json index c33ea7913dc..4b7f40a42f0 100644 --- a/resources/profiles/CONSTRUCT3D.json +++ b/resources/profiles/CONSTRUCT3D.json @@ -1,6 +1,6 @@ { "name": "CONSTRUCT3D", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Construct3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index 05bcd8cb20a..a32b5cdfb6c 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ diff --git a/resources/profiles/Co Print.json b/resources/profiles/Co Print.json index ae33032424b..2ae48573ce8 100644 --- a/resources/profiles/Co Print.json +++ b/resources/profiles/Co Print.json @@ -1,6 +1,6 @@ { "name": "Co Print", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "CoPrint configurations", "machine_model_list": [ diff --git a/resources/profiles/CoLiDo.json b/resources/profiles/CoLiDo.json index c79dead66bc..2e04c82aa4c 100644 --- a/resources/profiles/CoLiDo.json +++ b/resources/profiles/CoLiDo.json @@ -1,6 +1,6 @@ { "name": "CoLiDo", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "CoLiDo configurations", "machine_model_list": [ diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index fce85779a47..b97479aa272 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index b09200497e4..9433656cfb3 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json index 5fb70426ecd..7f7f0ab1954 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 7364ebb3c3b..dbba652ccb1 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json index 539e5ddabeb..381bf0b9128 100755 --- a/resources/profiles/DeltaMaker.json +++ b/resources/profiles/DeltaMaker.json @@ -1,7 +1,7 @@ { "name": "DeltaMaker", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "DeltaMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json index 13c5451f7a2..e3a29314e06 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index 67125df3f3f..c9335e84ae0 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,6 +1,6 @@ { "name": "Elegoo", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Elegoo configurations", "machine_model_list": [ diff --git a/resources/profiles/Eryone.json b/resources/profiles/Eryone.json index 812bc61fe51..00bf7255734 100644 --- a/resources/profiles/Eryone.json +++ b/resources/profiles/Eryone.json @@ -1,6 +1,6 @@ { "name": "Thinker X400", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Eryone configurations", "machine_model_list": [ diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 25e55e95e01..7a58bbcdd67 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 5a0a97d1719..e346afd7e11 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index 17b1089ba52..92779a45b1b 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ diff --git a/resources/profiles/Folgertech.json b/resources/profiles/Folgertech.json index afaab30751d..6dfeb210976 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ diff --git a/resources/profiles/Geeetech.json b/resources/profiles/Geeetech.json index 7f32204edd3..342b7379d8a 100644 --- a/resources/profiles/Geeetech.json +++ b/resources/profiles/Geeetech.json @@ -1,6 +1,6 @@ { "name": "Geeetech", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Geeetech configurations", "machine_model_list": [ diff --git a/resources/profiles/Ginger Additive.json b/resources/profiles/Ginger Additive.json index 36bfd1dc45e..5ba04ac0be6 100644 --- a/resources/profiles/Ginger Additive.json +++ b/resources/profiles/Ginger Additive.json @@ -1,6 +1,6 @@ { "name": "Ginger Additive", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "Ginger configuration", "machine_model_list": [ diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 8d71b124dd4..4950c00185a 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ diff --git a/resources/profiles/Kingroon.json b/resources/profiles/Kingroon.json index d99244403f3..87f6b1cade0 100644 --- a/resources/profiles/Kingroon.json +++ b/resources/profiles/Kingroon.json @@ -1,7 +1,7 @@ { "name": "Kingroon", "url": "https://kingroon.com/", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "Kingroon configuration files", "machine_model_list": [ diff --git a/resources/profiles/Lulzbot.json b/resources/profiles/Lulzbot.json index 39847f58efa..a304e7b3701 100644 --- a/resources/profiles/Lulzbot.json +++ b/resources/profiles/Lulzbot.json @@ -1,7 +1,7 @@ { "name": "Lulzbot", "url": "https://ohai.lulzbot.com/group/taz-6/", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Lulzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/MagicMaker.json b/resources/profiles/MagicMaker.json index 898c73bd269..bdde757811e 100644 --- a/resources/profiles/MagicMaker.json +++ b/resources/profiles/MagicMaker.json @@ -1,6 +1,6 @@ { "name": "MagicMaker", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "MagicMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Mellow.json b/resources/profiles/Mellow.json index 759df6cce8f..3de321f29c1 100644 --- a/resources/profiles/Mellow.json +++ b/resources/profiles/Mellow.json @@ -1,6 +1,6 @@ { "name": "Mellow", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Mellow Printer Profiles", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index dedd0cfd6a9..2d316ca62c4 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index acf755110dd..d622ad4771d 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ diff --git a/resources/profiles/Peopoly.json b/resources/profiles/Peopoly.json index e607bfa70c4..6ea855d55f1 100644 --- a/resources/profiles/Peopoly.json +++ b/resources/profiles/Peopoly.json @@ -1,6 +1,6 @@ { "name": "Peopoly", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Peopoly configurations", "machine_model_list": [ diff --git a/resources/profiles/Phrozen.json b/resources/profiles/Phrozen.json index afc4add52f5..f1852f10c07 100644 --- a/resources/profiles/Phrozen.json +++ b/resources/profiles/Phrozen.json @@ -1,6 +1,6 @@ { "name": "Phrozen", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Phrozen configurations", "machine_model_list": [ diff --git a/resources/profiles/Positron3D.json b/resources/profiles/Positron3D.json index 1d98ead28a8..266e2780d9d 100644 --- a/resources/profiles/Positron3D.json +++ b/resources/profiles/Positron3D.json @@ -1,6 +1,6 @@ { "name": "Positron 3D", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Positron 3D Printer Profile", "machine_model_list": [ diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 5ccf1dd8227..afdcf55018f 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.03.01.01", + "version": "02.03.01.10", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 8529cb9cf5b..3e53cd158fe 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Raise3D.json b/resources/profiles/Raise3D.json index 4db23e8ecf7..846a4c7c0a8 100644 --- a/resources/profiles/Raise3D.json +++ b/resources/profiles/Raise3D.json @@ -1,7 +1,7 @@ { "name": "Raise3D", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Raise3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index de8a5f87d4c..2b007c3e3f1 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ diff --git a/resources/profiles/SecKit.json b/resources/profiles/SecKit.json index 5a2672ce0c8..a7e75aa6c87 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index ce3673cc360..e5b3b2b155f 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index 1ffbee4d958..1d073180103 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ diff --git a/resources/profiles/Tiertime.json b/resources/profiles/Tiertime.json index c9bf2cccc80..f17069a5284 100644 --- a/resources/profiles/Tiertime.json +++ b/resources/profiles/Tiertime.json @@ -1,6 +1,6 @@ { "name": "Tiertime", - "version": "02.03.01.01", + "version": "02.03.01.10", "force_update": "0", "description": "Tiertime configurations", "machine_model_list": [ diff --git a/resources/profiles/Tronxy.json b/resources/profiles/Tronxy.json index 32cdb47775e..5493c8a48b8 100644 --- a/resources/profiles/Tronxy.json +++ b/resources/profiles/Tronxy.json @@ -1,6 +1,6 @@ { "name": "Tronxy", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Tronxy configurations", "machine_model_list": [ diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index d986a317a2b..d610f7726e6 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ diff --git a/resources/profiles/UltiMaker.json b/resources/profiles/UltiMaker.json index 7d8128e14e4..1c08c8ce3e2 100644 --- a/resources/profiles/UltiMaker.json +++ b/resources/profiles/UltiMaker.json @@ -1,7 +1,7 @@ { "name": "UltiMaker", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "UltiMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Vivedino.json b/resources/profiles/Vivedino.json index 9e680b5fde9..4d97b09a7ba 100644 --- a/resources/profiles/Vivedino.json +++ b/resources/profiles/Vivedino.json @@ -1,6 +1,6 @@ { "name": "Vivedino", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Vivedino configurations", "machine_model_list": [ diff --git a/resources/profiles/Volumic.json b/resources/profiles/Volumic.json index 79943e255db..d239257943f 100644 --- a/resources/profiles/Volumic.json +++ b/resources/profiles/Volumic.json @@ -1,6 +1,6 @@ { "name": "Volumic", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "VOLUMIC configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 31c372e1b33..a20bdbb394c 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voxelab.json b/resources/profiles/Voxelab.json index b1c0b056b18..45b1dcc94ca 100644 --- a/resources/profiles/Voxelab.json +++ b/resources/profiles/Voxelab.json @@ -1,7 +1,7 @@ { "name": "Voxelab", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Voxelab configurations", "machine_model_list": [ diff --git a/resources/profiles/Vzbot.json b/resources/profiles/Vzbot.json index 2e6e0caab71..143f22884fb 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao France.json b/resources/profiles/Wanhao France.json index 369bda7aaf2..83e7a9bbd93 100644 --- a/resources/profiles/Wanhao France.json +++ b/resources/profiles/Wanhao France.json @@ -1,6 +1,6 @@ { "name": "Wanhao France", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Wanhao France D12 configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao.json b/resources/profiles/Wanhao.json index 76b9c8038b6..163c24a9658 100644 --- a/resources/profiles/Wanhao.json +++ b/resources/profiles/Wanhao.json @@ -1,6 +1,6 @@ { "name": "Wanhao", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Wanhao configurations", "machine_model_list": [ diff --git a/resources/profiles/WonderMaker.json b/resources/profiles/WonderMaker.json index 2e4aef93cde..e53f6875eb7 100755 --- a/resources/profiles/WonderMaker.json +++ b/resources/profiles/WonderMaker.json @@ -1,7 +1,7 @@ { "name": "WonderMaker", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "WonderMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/Z-Bolt.json b/resources/profiles/Z-Bolt.json index 89de4d2c702..ace9b0814b5 100644 --- a/resources/profiles/Z-Bolt.json +++ b/resources/profiles/Z-Bolt.json @@ -1,7 +1,7 @@ { "name": "Z-Bolt", "url": "", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "0", "description": "Z-Bolt configurations", "machine_model_list": [ diff --git a/resources/profiles/iQ.json b/resources/profiles/iQ.json index 56d5962fae0..cd63d729649 100644 --- a/resources/profiles/iQ.json +++ b/resources/profiles/iQ.json @@ -1,6 +1,6 @@ { "name": "innovatiQ", - "version": "02.03.01.00", + "version": "02.03.01.10", "force_update": "1", "description": "innovatiQ configuration", "machine_model_list": [ From 71b4b4072f7da4944040eab4b3773829438402b7 Mon Sep 17 00:00:00 2001 From: Heiko Liebscher Date: Thu, 2 Oct 2025 19:28:06 +0200 Subject: [PATCH 14/20] update de for 2.3.1 after update locale (#10912) update de --- localization/i18n/de/OrcaSlicer_de.po | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 2d86aa61413..37cc4b4e075 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -6366,11 +6366,17 @@ msgid "" "rotation template settings that may not work properly with your current " "infill pattern. This could result in weak support or print quality issues." msgstr "" +"Dieses Projekt wurde mit einem OrcaSlicer 2.3.1-alpha erstellt und verwendet " +"Vorlageneinstellungen für die Infill-Rotation, die möglicherweise nicht " +"richtig mit Ihrem aktuellen Infill-Muster funktionieren. Dies könnte zu " +"schwacher Unterstützung oder Druckqualitätsproblemen führen." msgid "" "Would you like OrcaSlicer to automatically fix this by clearing the rotation " "template settings?" msgstr "" +"Möchten Sie, dass OrcaSlicer dies automatisch behebt, indem die " +"Vorlageneinstellungen für die Rotation gelöscht werden?" #, c-format, boost-format msgid "" From 5b2b2da4f8b77251137d170a3d3b066384c0b622 Mon Sep 17 00:00:00 2001 From: Erik GS Date: Thu, 2 Oct 2025 14:32:12 -0300 Subject: [PATCH 15/20] [Profiles] Fix bed_exclude_area excluding the whole bed on Anycubic Kobra 3 (#10914) --- .../machine/Anycubic Kobra 3 0.2 nozzle.json | 20 +++++++------------ .../machine/Anycubic Kobra 3 0.4 nozzle.json | 20 +++++++------------ .../machine/Anycubic Kobra 3 0.6 nozzle.json | 20 +++++++------------ .../machine/Anycubic Kobra 3 0.8 nozzle.json | 20 +++++++------------ 4 files changed, 28 insertions(+), 52 deletions(-) diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json index 248b0be814a..33fb9036ee3 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json index 21ce7ac5346..f34d6a7ef32 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json index 3268312d9bc..afe0b5c5967 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json index b76c3dd32d5..e9ea28c2509 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json @@ -36,21 +36,15 @@ "bed_custom_texture": "", "bed_exclude_area": [ "0x0", - "2.5x0", - "2.5x255", - "0x255", - "0x255", - "255x255", - "255x252.5", - "0x252.5", - "255x255", - "252.5x255", - "252.5x0", "255x0", + "255x255", + "0x255", "0x0", - "0x2.5", - "255x2.5", - "255x0" + "2x2", + "2x253", + "253x253", + "253x2", + "2x2" ], "bed_mesh_max": "0,0", "bed_mesh_min": "0,0", From 9f468dad1f9c2b05320a6785db9a1974a748fb2a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:01:26 +0800 Subject: [PATCH 16/20] Bump actions/stale from 9 to 10 (#10919) Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10. - [Release notes](https://github.com/actions/stale/releases) - [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/stale/compare/v9...v10) --- updated-dependencies: - dependency-name: actions/stale dependency-version: '10' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/orca_bot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/orca_bot.yml b/.github/workflows/orca_bot.yml index 05598df749a..81664be04eb 100644 --- a/.github/workflows/orca_bot.yml +++ b/.github/workflows/orca_bot.yml @@ -17,7 +17,7 @@ jobs: pull-requests: write contents: write # only for delete-branch option steps: - - uses: actions/stale@v9 + - uses: actions/stale@v10 with: # PAT for GitHub API authentication repo-token: ${{ secrets.GITHUB_TOKEN }} From eb172df02dbd852cda0c6088561a631f56ebc0cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:01:53 +0800 Subject: [PATCH 17/20] Bump actions/github-script from 7 to 8 (#10920) Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8. - [Release notes](https://github.com/actions/github-script/releases) - [Commits](https://github.com/actions/github-script/compare/v7...v8) --- updated-dependencies: - dependency-name: actions/github-script dependency-version: '8' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/validate-documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-documentation.yml b/.github/workflows/validate-documentation.yml index bd4c1c1f726..a3b9c4176ea 100644 --- a/.github/workflows/validate-documentation.yml +++ b/.github/workflows/validate-documentation.yml @@ -318,7 +318,7 @@ jobs: - name: Comment on PR if: failure() && github.event_name == 'pull_request' - uses: actions/github-script@v7 + uses: actions/github-script@v8 with: script: | const validationErrors = process.env.VALIDATION_ERRORS || ''; From c694f2751f1b03b7d6d548de72d19ff7b5b8c5ca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:01:58 +0800 Subject: [PATCH 18/20] Bump actions/setup-python from 5 to 6 (#10921) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v5...v6) --- updated-dependencies: - dependency-name: actions/setup-python dependency-version: '6' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update-translation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-translation.yml b/.github/workflows/update-translation.yml index 86c4b86c403..aeae4a37b2a 100644 --- a/.github/workflows/update-translation.yml +++ b/.github/workflows/update-translation.yml @@ -13,7 +13,7 @@ jobs: uses: actions/checkout@v5 - name: Setup Python - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: '3.12' From bd5615a83a6207dd912adbd838445e46f9bd9a26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 5 Oct 2025 14:02:07 +0800 Subject: [PATCH 19/20] Bump tj-actions/changed-files from 46 to 47 (#10922) Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 46 to 47. - [Release notes](https://github.com/tj-actions/changed-files/releases) - [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md) - [Commits](https://github.com/tj-actions/changed-files/compare/v46...v47) --- updated-dependencies: - dependency-name: tj-actions/changed-files dependency-version: '47' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/validate-documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-documentation.yml b/.github/workflows/validate-documentation.yml index a3b9c4176ea..8fc7d6926b8 100644 --- a/.github/workflows/validate-documentation.yml +++ b/.github/workflows/validate-documentation.yml @@ -23,7 +23,7 @@ jobs: - name: Get changed files id: changed-files - uses: tj-actions/changed-files@v46 + uses: tj-actions/changed-files@v47 with: files: | src/slic3r/GUI/Tab.cpp From ac3b86622ee065f327064dce01a5295e7a7122aa Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 11 Oct 2025 21:37:46 +0800 Subject: [PATCH 20/20] Attempt to get the correct PR commit hash (#10900) * Attempt to get the correct PR commit hash * Add commit hash to flatpak * Use given hash if `git_commit_hash` env variable is present --- .github/workflows/build_all.yml | 3 +++ .github/workflows/build_orca.yml | 6 ++++++ CMakeLists.txt | 29 +++++++++++++++++++++-------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index ea721501894..db95d67040d 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -97,12 +97,15 @@ jobs: ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then ver="PR-${{ github.event.number }}" + git_commit_hash="${{ github.event.pull_request.head.sha }}" else ver=V$ver_pure + git_commit_hash="" fi echo "ver=$ver" >> $GITHUB_ENV echo "ver_pure=$ver_pure" >> $GITHUB_ENV echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV + echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV shell: bash - uses: flathub-infra/flatpak-github-actions/flatpak-builder@master with: diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index bebcaba1b21..29984fab2e6 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -47,12 +47,15 @@ jobs: ver_pure=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) if [[ "${{ github.event_name }}" == "pull_request" ]]; then ver="PR-${{ github.event.number }}" + git_commit_hash="${{ github.event.pull_request.head.sha }}" else ver=V$ver_pure + git_commit_hash="" fi echo "ver=$ver" >> $GITHUB_ENV echo "ver_pure=$ver_pure" >> $GITHUB_ENV echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV + echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV shell: bash - name: Get the version and date on Windows @@ -65,16 +68,19 @@ jobs: if ($eventName -eq 'pull_request') { $ver = "PR" + $prNumber + $git_commit_hash = "${{ github.event.pull_request.head.sha }}" } else { $versionContent = Get-Content version.inc -Raw if ($versionContent -match 'set\(SoftFever_VERSION "(.*?)"\)') { $ver = $matches[1] } $ver = "V$ver" + $git_commit_hash = "" } echo "ver=$ver" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date=$date" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 + echo "git_commit_hash=$git_commit_hash" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 echo "date: ${{ env.date }} version: ${{ env.ver }}" shell: pwsh diff --git a/CMakeLists.txt b/CMakeLists.txt index f58a5876ed5..6bd575188d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -69,14 +69,27 @@ endif() find_package(Git) if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Check current Git commit hash - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + if(DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") + message(STATUS "Specified git commit hash: $ENV{git_commit_hash}") + + # Convert the given hash to short hash + execute_process( + COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + else() + # Check current Git commit hash + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + endif() endif() if(DEFINED ENV{SLIC3R_STATIC})