diff --git a/BuildLinux.sh b/BuildLinux.sh index 1a217c6830..f60e5c5f34 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -5,7 +5,7 @@ export ROOT=$(dirname $(readlink -f ${0})) set -e # exit on first error function check_available_memory_and_disk() { - FREE_MEM_GB=$(free -g -t | grep 'Mem:' | rev | cut -d" " -f1 | rev) + FREE_MEM_GB=$(free -g -t | grep 'Mem' | rev | cut -d" " -f1 | rev) MIN_MEM_GB=10 FREE_DISK_KB=$(df -k . | tail -1 | awk '{print $4}') @@ -79,6 +79,11 @@ then fi DISTRIBUTION=$(awk -F= '/^ID=/ {print $2}' /etc/os-release) +# treat ubuntu as debian +if [ "${DISTRIBUTION}" == "ubuntu" ] +then + DISTRIBUTION="debian" +fi if [ ! -f ./linux.d/${DISTRIBUTION} ] then echo "Your distribution does not appear to be currently supported by these build scripts" diff --git a/DockerRun.sh b/DockerRun.sh index da49bd3e61..c06628e6be 100755 --- a/DockerRun.sh +++ b/DockerRun.sh @@ -20,6 +20,8 @@ docker run \ --privileged=true \ `# Attach tty for running orca slicer with command line things` \ -ti \ + `# Clean up after yourself` \ + --rm \ `# Pass all parameters from this script to the orca slicer ENTRYPOINT binary` \ orcaslicer $* diff --git a/Dockerfile b/Dockerfile index befcc33de4..868779b0af 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,7 @@ RUN apt-get update && apt-get install -y \ libsoup2.4-dev \ libssl3 \ libssl-dev \ + libtool \ libudev-dev \ libwayland-dev \ libwebkit2gtk-4.0-dev \ @@ -67,9 +68,8 @@ WORKDIR OrcaSlicer RUN ./BuildLinux.sh -u # Build dependencies in ./deps -RUN ./BuildLinux.sh -d; exit 0 +RUN ./BuildLinux.sh -d -RUN apt-get install -y libcgal-dev # Build slic3r RUN ./BuildLinux.sh -s diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 02a07ffd3b..a21cc1bb5c 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -253,6 +253,7 @@ include(JPEG/JPEG.cmake) include(TIFF/TIFF.cmake) include(wxWidgets/wxWidgets.cmake) include(OCCT/OCCT.cmake) +include(OpenCV/OpenCV.cmake) include(FREETYPE/FREETYPE.cmake) set(_dep_list @@ -264,6 +265,7 @@ set(_dep_list dep_NLopt dep_OpenVDB dep_OpenCSG + dep_OpenCV dep_CGAL dep_OpenSSL dep_GLFW diff --git a/deps/OpenCV/OpenCV.cmake b/deps/OpenCV/OpenCV.cmake new file mode 100644 index 0000000000..f19569e86e --- /dev/null +++ b/deps/OpenCV/OpenCV.cmake @@ -0,0 +1,72 @@ +if (MSVC) + set(_use_IPP "-DWITH_IPP=ON") +else () + set(_use_IPP "-DWITH_IPP=OFF") +endif () + +orcaslicer_add_cmake_project(OpenCV + URL https://github.com/opencv/opencv/archive/refs/tags/4.6.0.tar.gz + URL_HASH SHA256=1ec1cba65f9f20fe5a41fda1586e01c70ea0c9a6d7b67c9e13edf0cfe2239277 + CMAKE_ARGS + -DBUILD_SHARED_LIBS=0 + -DBUILD_PERE_TESTS=OFF + -DBUILD_TESTS=OFF + -DBUILD_opencv_python_tests=OFF + -DBUILD_EXAMPLES=OFF + -DBUILD_JASPER=OFF + -DBUILD_JAVA=OFF + -DBUILD_JPEG=ON + -DBUILD_APPS_LIST=version + -DBUILD_opencv_apps=OFF + -DBUILD_opencv_java=OFF + -DBUILD_OPENEXR=OFF + -DBUILD_PNG=ON + -DBUILD_TBB=OFF + -DBUILD_WEBP=OFF + -DBUILD_ZLIB=OFF + -DWITH_1394=OFF + -DWITH_CUDA=OFF + -DWITH_EIGEN=ON + ${_use_IPP} + -DWITH_ITT=OFF + -DWITH_FFMPEG=OFF + -DWITH_GPHOTO2=OFF + -DWITH_GSTREAMER=OFF + -DOPENCV_GAPI_GSTREAMER=OFF + -DWITH_GTK_2_X=OFF + -DWITH_JASPER=OFF + -DWITH_LAPACK=OFF + -DWITH_MATLAB=OFF + -DWITH_MFX=OFF + -DWITH_DIRECTX=OFF + -DWITH_DIRECTML=OFF + -DWITH_OPENCL=OFF + -DWITH_OPENCL_D3D11_NV=OFF + -DWITH_OPENCLAMDBLAS=OFF + -DWITH_OPENCLAMDFFT=OFF + -DWITH_OPENEXR=OFF + -DWITH_OPENJPEG=OFF + -DWITH_QUIRC=OFF + -DWITH_VTK=OFF + -DWITH_WEBP=OFF + -DENABLE_PRECOMPILED_HEADERS=OFF + -DINSTALL_TESTS=OFF + -DINSTALL_C_EXAMPLES=OFF + -DINSTALL_PYTHON_EXAMPLES=OFF + -DOPENCV_GENERATE_SETUPVARS=OFF + -DOPENCV_INSTALL_FFMPEG_DOWNLOAD_SCRIPT=OFF + -DBUILD_opencv_python2=OFF + -DBUILD_opencv_python3=OFF + -DWITH_OPENVINO=OFF + -DWITH_INF_ENGINE=OFF + -DWITH_NGRAPH=OFF + -DBUILD_WITH_STATIC_CRT=OFF#set /MDd /MD + -DBUILD_LIST=core,imgcodecs,imgproc,world + -DBUILD_opencv_highgui=OFF + -DWITH_ADE=OFF + -DBUILD_opencv_world=ON + -DWITH_PROTOBUF=OFF + -DWITH_WIN32UI=OFF + -DHAVE_WIN32UI=FALSE +) + diff --git a/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch b/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch deleted file mode 100644 index e96c1f4d52..0000000000 --- a/deps/wxWidgets/0001-patch-v3.2.1-for-OrcaSlicer.patch +++ /dev/null @@ -1,683 +0,0 @@ -From f4fef135f0a58ca2916c45cd539923ab096935b6 Mon Sep 17 00:00:00 2001 -From: Ocraftyone -Date: Thu, 30 Nov 2023 03:25:54 -0500 -Subject: [PATCH] patch v3.2.1 for OrcaSlicer - ---- - build/cmake/lib/webview/CMakeLists.txt | 4 +- - include/wx/fontutil.h | 15 +++++++- - include/wx/gdicmn.h | 3 ++ - include/wx/generic/grid.h | 4 +- - include/wx/msw/font.h | 2 +- - include/wx/msw/tooltip.h | 4 +- - include/wx/osx/app.h | 2 +- - src/common/combocmn.cpp | 11 +++++- - src/common/datavcmn.cpp | 6 ++- - src/common/dcbufcmn.cpp | 6 +++ - src/common/gdicmn.cpp | 14 +++++++ - src/common/image.cpp | 6 +-- - src/generic/grid.cpp | 50 ++++++++++++++++++++----- - src/msw/bmpcbox.cpp | 9 ++++- - src/msw/font.cpp | 14 +++---- - src/msw/menuitem.cpp | 2 + - src/msw/window.cpp | 52 +++++++++++++++++--------- - src/osx/cocoa/dataview.mm | 26 +++++++++++-- - src/osx/cocoa/settings.mm | 6 +-- - src/osx/cocoa/window.mm | 4 ++ - 20 files changed, 184 insertions(+), 56 deletions(-) - -diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt -index 085381d785..62146abc04 100644 ---- a/build/cmake/lib/webview/CMakeLists.txt -+++ b/build/cmake/lib/webview/CMakeLists.txt -@@ -46,9 +46,9 @@ if(APPLE) - elseif(WXMSW) - if(wxUSE_WEBVIEW_EDGE) - # Update the following variables if updating WebView2 SDK -- set(WEBVIEW2_VERSION "1.0.705.50") -+ set(WEBVIEW2_VERSION "1.0.1418.22") - set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") -- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") -+ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") - - set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") - -diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h -index 30529db8ce..e6a12366d5 100644 ---- a/include/wx/fontutil.h -+++ b/include/wx/fontutil.h -@@ -294,7 +294,11 @@ public: - wxFontEncoding GetEncoding() const; - - void SetPointSize(int pointsize); -- void SetFractionalPointSize(double pointsize); -+ void SetFractionalPointSize(double pointsize -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ); - void SetPixelSize(const wxSize& pixelSize); - void SetStyle(wxFontStyle style); - void SetNumericWeight(int weight); -@@ -307,12 +311,19 @@ public: - - // Helper used in many ports: use the normal font size if the input is - // negative, as we handle -1 as meaning this for compatibility. -- void SetSizeOrDefault(double size) -+ void SetSizeOrDefault(double size -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ) - { - SetFractionalPointSize - ( - size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() - : size -+#if defined(__WXMSW__) -+ ,window -+#endif - ); - } - -diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h -index 2f5f8ee99f..39e9317d40 100644 ---- a/include/wx/gdicmn.h -+++ b/include/wx/gdicmn.h -@@ -38,6 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxRegion; - class WXDLLIMPEXP_FWD_BASE wxString; - class WXDLLIMPEXP_FWD_CORE wxIconBundle; - class WXDLLIMPEXP_FWD_CORE wxPoint; -+class WXDLLIMPEXP_FWD_CORE wxWindow; - - // --------------------------------------------------------------------------- - // constants -@@ -1106,7 +1107,9 @@ extern int WXDLLIMPEXP_CORE wxDisplayDepth(); - - // get the display size - extern void WXDLLIMPEXP_CORE wxDisplaySize(int *width, int *height); -+extern void WXDLLIMPEXP_CORE wxDisplaySize(const wxWindow *window, int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(); -+extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(const wxWindow *window); - extern void WXDLLIMPEXP_CORE wxDisplaySizeMM(int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySizeMM(); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplayPPI(); -diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h -index 1bd58bbf04..903cb81319 100644 ---- a/include/wx/generic/grid.h -+++ b/include/wx/generic/grid.h -@@ -3029,9 +3029,11 @@ private: - // Update the width/height of the column/row being drag-resized. - // Should be only called when m_dragRowOrCol != -1, i.e. dragging is - // actually in progress. -+ //BBS: add cursor mode for DoGridDragResize's paremeters - void DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow); -+ wxGridWindow* gridWindow, -+ CursorMode mode); - - // process different clicks on grid cells - void DoGridCellLeftDown(wxMouseEvent& event, -diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h -index 0f9768b44e..094d774918 100644 ---- a/include/wx/msw/font.h -+++ b/include/wx/msw/font.h -@@ -23,7 +23,7 @@ public: - // ctors and such - wxFont() { } - -- wxFont(const wxFontInfo& info); -+ wxFont(const wxFontInfo& info, const wxWindow *window = nullptr); - - wxFont(int size, - wxFontFamily family, -diff --git a/include/wx/msw/tooltip.h b/include/wx/msw/tooltip.h -index 4c3be08cec..96fb378d01 100644 ---- a/include/wx/msw/tooltip.h -+++ b/include/wx/msw/tooltip.h -@@ -91,10 +91,10 @@ private: - // the one and only one tooltip control we use - never access it directly - // but use GetToolTipCtrl() which will create it when needed - static WXHWND ms_hwndTT; -- -+public: - // create the tooltip ctrl if it doesn't exist yet and return its HWND - static WXHWND GetToolTipCtrl(); -- -+private: - // to be used in wxModule for deleting tooltip ctrl window when exiting mainloop - static void DeleteToolTipCtrl(); - -diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h -index 317a0ca96f..58014ec1d4 100644 ---- a/include/wx/osx/app.h -+++ b/include/wx/osx/app.h -@@ -161,7 +161,7 @@ private: - - public: - bool OSXInitWasCalled() { return m_inited; } -- void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } -+ virtual void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } - void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; } - void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; } - #endif -diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp -index 80408c6677..aa07caebdc 100644 ---- a/src/common/combocmn.cpp -+++ b/src/common/combocmn.cpp -@@ -2061,6 +2061,9 @@ void wxComboCtrlBase::ShowPopup() - - SetFocus(); - -+ //int displayIdx = wxDisplay::GetFromWindow(this); -+ //wxRect displayRect = wxDisplay(displayIdx != wxNOT_FOUND ? displayIdx : 0u).GetGeometry(); -+ - // Space above and below - int screenHeight; - wxPoint scrPos; -@@ -2183,9 +2186,13 @@ void wxComboCtrlBase::ShowPopup() - - int showFlags = CanDeferShow; - -- if ( spaceBelow < szp.y ) -+ int anchorSideVertical = m_anchorSide & (wxUP | wxDOWN); -+ if (// Pop up as asked for by the library user. -+ (anchorSideVertical & wxUP) || -+ // Automatic: Pop up if it does not fit down. -+ (anchorSideVertical == 0 && spaceBelow < szp.y )) - { -- popupY = scrPos.y - szp.y; -+ popupY = scrPos.y - szp.y + displayRect.GetTop(); - showFlags |= ShowAbove; - } - -diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp -index 0a1e43ad51..6c492aedab 100644 ---- a/src/common/datavcmn.cpp -+++ b/src/common/datavcmn.cpp -@@ -1334,7 +1334,11 @@ wxDataViewItem wxDataViewCtrlBase::GetSelection() const - - wxDataViewItemArray selections; - GetSelections(selections); -- return selections[0]; -+ // BBS -+ if (!selections.empty()) -+ return selections[0]; -+ else -+ return wxDataViewItem(0); - } - - namespace -diff --git a/src/common/dcbufcmn.cpp b/src/common/dcbufcmn.cpp -index 9b1c1f3159..ef5865ed4b 100644 ---- a/src/common/dcbufcmn.cpp -+++ b/src/common/dcbufcmn.cpp -@@ -83,9 +83,15 @@ private: - const double scale = dc ? dc->GetContentScaleFactor() : 1.0; - wxBitmap* const buffer = new wxBitmap; - -+#if __WXMSW__ -+ // we must always return a valid bitmap but creating a bitmap of -+ // size 0 would fail, so create a 1*1 bitmap in this case -+ buffer->Create(wxMax(w, 1), wxMax(h, 1), 24); -+#else - // we must always return a valid bitmap but creating a bitmap of - // size 0 would fail, so create a 1*1 bitmap in this case - buffer->CreateWithDIPSize(wxMax(w, 1), wxMax(h, 1), scale); -+#endif - - return buffer; - } -diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp -index db8a01f961..162c1ce2dc 100644 ---- a/src/common/gdicmn.cpp -+++ b/src/common/gdicmn.cpp -@@ -863,11 +863,25 @@ void wxDisplaySize(int *width, int *height) - *height = size.y; - } - -+void wxDisplaySize(const wxWindow *window, int *width, int *height) -+{ -+ const wxSize size = wxGetDisplaySize(window); -+ if ( width ) -+ *width = size.x; -+ if ( height ) -+ *height = size.y; -+} -+ - wxSize wxGetDisplaySize() - { - return wxDisplay().GetGeometry().GetSize(); - } - -+wxSize wxGetDisplaySize(const wxWindow *window) -+{ -+ return window ? wxDisplay(window).GetGeometry().GetSize() : wxDisplay().GetGeometry().GetSize(); -+} -+ - void wxClientDisplayRect(int *x, int *y, int *width, int *height) - { - const wxRect rect = wxGetClientDisplayRect(); -diff --git a/src/common/image.cpp b/src/common/image.cpp -index 19fe34ec91..a449b60930 100644 ---- a/src/common/image.cpp -+++ b/src/common/image.cpp -@@ -390,11 +390,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const - unsigned char red = pixel[0] ; - unsigned char green = pixel[1] ; - unsigned char blue = pixel[2] ; -- unsigned char alpha = 255 ; -- if ( source_alpha ) -- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) - { -+ unsigned char alpha = 255 ; -+ if ( source_alpha ) -+ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( alpha > 0 ) - { - avgRed += red ; -diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp -index ed3d988994..d71cda122d 100644 ---- a/src/generic/grid.cpp -+++ b/src/generic/grid.cpp -@@ -4068,7 +4068,8 @@ void wxGrid::ProcessRowColLabelMouseEvent( const wxGridOperations &oper, wxMouse - { - if ( m_cursorMode == oper.GetCursorModeResize() ) - { -- DoGridDragResize(event.GetPosition(), oper, gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), oper, gridWindow, m_cursorMode); - } - else if ( m_cursorMode == oper.GetCursorModeSelect() && line >=0 ) - { -@@ -4691,12 +4692,14 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event, - - case WXGRID_CURSOR_RESIZE_ROW: - if ( m_dragRowOrCol != -1 ) -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - break; - - case WXGRID_CURSOR_RESIZE_COL: - if ( m_dragRowOrCol != -1 ) -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - default: -@@ -4791,6 +4794,8 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event, - case wxGridSelectCells: - case wxGridSelectRowsOrColumns: - // nothing to do in these cases -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(coords.GetRow(), coords.GetCol(), coords.GetRow(), coords.GetCol(), event); - break; - - case wxGridSelectRows: -@@ -5049,9 +5054,11 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG - } - } - -+//BBS: add cursor mode for DoGridDragResize's paremeters - void wxGrid::DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow) -+ wxGridWindow* gridWindow, -+ CursorMode mode) - { - wxCHECK_RET( m_dragRowOrCol != -1, - "shouldn't be called when not drag resizing" ); -@@ -5064,10 +5071,28 @@ void wxGrid::DoGridDragResize(const wxPoint& position, - // orthogonal direction. - const int linePos = oper.Dual().Select(logicalPos); - -- const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -- oper.SetLineSize(this, m_dragRowOrCol, -+ //BBS: add logic for resize multiplexed cols -+ if (mode == WXGRID_CURSOR_RESIZE_COL) { -+ int col_to_resize = m_dragRowOrCol; -+ int num_rows, num_cols; -+ this->GetCellSize(0, m_dragRowOrCol, &num_rows, &num_cols); -+ if (num_cols < 1) -+ col_to_resize = m_dragRowOrCol - 1; -+ -+ const int lineEnd = oper.GetLineEndPos(this, m_dragRowOrCol); -+ const int lineSize = oper.GetLineSize(this, col_to_resize); -+ int size = linePos - lineEnd + lineSize; -+ oper.SetLineSize(this, col_to_resize, -+ wxMax(size, -+ oper.GetMinimalLineSize(this, col_to_resize))); -+ } -+ else { -+ const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -+ -+ oper.SetLineSize(this, m_dragRowOrCol, - wxMax(linePos - lineStart, - oper.GetMinimalLineSize(this, m_dragRowOrCol))); -+ } - - // TODO: generate RESIZING event, see #10754, if the size has changed. - } -@@ -5090,7 +5115,8 @@ wxPoint wxGrid::GetPositionForResizeEvent(int width) const - - void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - - SendGridSizeEvent(wxEVT_GRID_ROW_SIZE, m_dragRowOrCol, event); - -@@ -5099,7 +5125,8 @@ void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWin - - void wxGrid::DoEndDragResizeCol(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - - SendGridSizeEvent(wxEVT_GRID_COL_SIZE, m_dragRowOrCol, event); - -@@ -5113,9 +5140,10 @@ void wxGrid::DoHeaderStartDragResizeCol(int col) - - void wxGrid::DoHeaderDragResizeCol(int width) - { -+ //BBS: add cursor mode for DoGridDragResize's paremeters - DoGridDragResize(GetPositionForResizeEvent(width), - wxGridColumnOperations(), -- m_gridWin); -+ m_gridWin, WXGRID_CURSOR_RESIZE_COL); - } - - void wxGrid::DoHeaderEndDragResizeCol(int width) -@@ -6013,6 +6041,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) - DisableCellEditControl(); - - MoveCursorDown( event.ShiftDown() ); -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ event); - } - break; - -diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp -index 011bd4f534..17e7f18740 100644 ---- a/src/msw/bmpcbox.cpp -+++ b/src/msw/bmpcbox.cpp -@@ -156,13 +156,20 @@ void wxBitmapComboBox::RecreateControl() - - wxComboBox::DoClear(); - -- HWND hwnd = GetHwnd(); -+ WNDPROC wndproc_edit = nullptr; -+ WinStruct combobox_info; -+ HWND hwnd = GetHwnd(); -+if (::GetComboBoxInfo(hwnd, &combobox_info)) -+ wndproc_edit = (WNDPROC)wxGetWindowProc(combobox_info.hwndItem); - DissociateHandle(); - ::DestroyWindow(hwnd); - - if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) ) - return; - -+if (::GetComboBoxInfo(GetHwnd(), &combobox_info)) -+ wxSetWindowProc(combobox_info.hwndItem, wndproc_edit); -+ - // initialize the controls contents - for ( i = 0; i < numItems; i++ ) - { -diff --git a/src/msw/font.cpp b/src/msw/font.cpp -index 434876939c..91d4603018 100644 ---- a/src/msw/font.cpp -+++ b/src/msw/font.cpp -@@ -54,7 +54,7 @@ static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH; - class WXDLLEXPORT wxFontRefData: public wxGDIRefData - { - public: -- wxFontRefData(const wxFontInfo& info = wxFontInfo()); -+ wxFontRefData(const wxFontInfo& info = wxFontInfo(), const wxWindow* window = nullptr); - - wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0) - { -@@ -324,7 +324,7 @@ protected: - // wxFontRefData - // ---------------------------------------------------------------------------- - --wxFontRefData::wxFontRefData(const wxFontInfo& info) -+wxFontRefData::wxFontRefData(const wxFontInfo& info, const wxWindow *window) - { - m_hFont = NULL; - -@@ -335,7 +335,7 @@ wxFontRefData::wxFontRefData(const wxFontInfo& info) - } - else - { -- m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize()); -+ m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize(), window); - } - - SetStyle(info.GetStyle()); -@@ -518,12 +518,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const - return wxGetFontEncFromCharSet(lf.lfCharSet); - } - --void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew) -+void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew, const wxWindow *window) - { - // We don't have the correct DPI to use here, so use that of the - // primary screen and rely on WXAdjustToPPI() changing it later if - // necessary. -- const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); -+ const int ppi = window ? window->GetDPI().GetY() : ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); - lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi); - - pointSize = pointSizeNew; -@@ -812,9 +812,9 @@ wxFont::wxFont(const wxString& fontdesc) - (void)Create(info); - } - --wxFont::wxFont(const wxFontInfo& info) -+wxFont::wxFont(const wxFontInfo& info, const wxWindow *window) - { -- m_refData = new wxFontRefData(info); -+ m_refData = new wxFontRefData(info, window); - } - - bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont) -diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp -index 0bd017a36a..3b98bf1678 100644 ---- a/src/msw/menuitem.cpp -+++ b/src/msw/menuitem.cpp -@@ -368,6 +368,8 @@ void MenuDrawData::Init(wxWindow const* window) - // native menu uses small top margin for separator - if ( SeparatorMargin.cyTopHeight >= 2 ) - SeparatorMargin.cyTopHeight -= 2; -+ -+ SeparatorSize.cy = 0; - } - else - #endif // wxUSE_UXTHEME -diff --git a/src/msw/window.cpp b/src/msw/window.cpp -index c529a4fa3b..7e547c64df 100644 ---- a/src/msw/window.cpp -+++ b/src/msw/window.cpp -@@ -4809,33 +4809,49 @@ static wxSize GetWindowDPI(HWND hwnd) - } - - /*extern*/ --int wxGetSystemMetrics(int nIndex, const wxWindow* window) -+int wxGetSystemMetrics(int nIndex, const wxWindow* win) - { - #if wxUSE_DYNLIB_CLASS -- if ( !window ) -- window = wxApp::GetMainTopWindow(); -+ const wxWindow* window = (!win && wxTheApp) ? wxTheApp->GetTopWindow() : win; - -- if ( window ) -+ if (window) - { -- typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -- static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -- static bool s_initDone = false; -- -- if ( !s_initDone ) -- { -- wxLoadedDLL dllUser32("user32.dll"); -- wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -- s_initDone = true; -+#if 1 -+ if (window->GetHWND() && (nIndex == SM_CXSCREEN || nIndex == SM_CYSCREEN)) { -+ HDC hdc = GetDC(window->GetHWND()); -+#if 0 -+ double dim = GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES); -+ ReleaseDC(window->GetHWND(), hdc); -+ wxSize dpi = window->GetDPI(); -+ dim *= 96.0 / (nIndex == SM_CXSCREEN ? dpi.x : dpi.y); -+ return int(dim + 0.5); -+#else -+ return int(GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES)); -+#endif - } -- -- if ( s_pfnGetSystemMetricsForDpi ) -+ else -+#endif - { -- const int dpi = window->GetDPI().y; -- return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -+ static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -+ static bool s_initDone = false; -+ -+ if ( !s_initDone ) -+ { -+ wxLoadedDLL dllUser32("user32.dll"); -+ wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -+ s_initDone = true; -+ } -+ -+ if ( s_pfnGetSystemMetricsForDpi ) -+ { -+ const int dpi = window->GetDPI().y; -+ return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ } - } - } - #else -- wxUnusedVar(window); -+ wxUnusedVar(win); - #endif // wxUSE_DYNLIB_CLASS - - return ::GetSystemMetrics(nIndex); -diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm -index f188e61089..7b867002d1 100644 ---- a/src/osx/cocoa/dataview.mm -+++ b/src/osx/cocoa/dataview.mm -@@ -1604,6 +1604,15 @@ outlineView:(NSOutlineView*)outlineView - } - } - -+//FIXME Vojtech: This is a workaround to get at least the "mouse move" events at the wxDataViewControl, -+// so we can show the tooltips. The "mouse move" events are being send only if the wxDataViewControl -+// has focus, which is a limitation of wxWidgets. We may grab focus on "mouse entry" though. -+- (void)mouseMoved:(NSEvent *)event -+{ -+if (! implementation->DoHandleMouseEvent(event)) -+ [super mouseMoved:event]; -+} -+ - // - // contextual menus - // -@@ -2006,7 +2015,8 @@ void wxCocoaDataViewControl::keyEvent(WX_NSEvent event, WXWidget slf, void *_cmd - if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) - wxWidgetCocoaImpl::keyEvent(event, slf, _cmd); - } -- else -+ //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working. -+ else if (! DoHandleKeyEvent(event)) - { - wxWidgetCocoaImpl::keyEvent(event, slf, _cmd); // all other keys - } -@@ -2540,12 +2550,22 @@ void wxCocoaDataViewControl::DoSetIndent(int indent) - - void wxCocoaDataViewControl::HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const - { -- NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),point); -+ NSTableHeaderView *headerView = [m_OutlineView headerView]; -+ if (headerView && point.y < headerView.visibleRect.size.height) { -+ // The point is inside the header area. -+ columnPtr = NULL; -+ item = wxDataViewItem(); -+ return; -+ } -+ // Convert from the window coordinates to the virtual scrolled view coordinates. -+ NSScrollView *scrollView = [m_OutlineView enclosingScrollView]; -+ const NSRect &visibleRect = scrollView.contentView.visibleRect; -+ NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(), -+ wxPoint(point.x + visibleRect.origin.x, point.y + visibleRect.origin.y)); - - int indexColumn; - int indexRow; - -- - indexColumn = [m_OutlineView columnAtPoint:nativePoint]; - indexRow = [m_OutlineView rowAtPoint: nativePoint]; - if ((indexColumn >= 0) && (indexRow >= 0)) -diff --git a/src/osx/cocoa/settings.mm b/src/osx/cocoa/settings.mm -index c819deeb0c..dc3c3b0b53 100644 ---- a/src/osx/cocoa/settings.mm -+++ b/src/osx/cocoa/settings.mm -@@ -222,7 +222,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) - // ---------------------------------------------------------------------------- - - // Get a system metric, e.g. scrollbar size --int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUNUSED(win)) -+int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* win) - { - int value; - -@@ -257,11 +257,11 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUN - // TODO case wxSYS_WINDOWMIN_Y: - - case wxSYS_SCREEN_X: -- wxDisplaySize(&value, NULL); -+ wxDisplaySize(win, &value, NULL); - return value; - - case wxSYS_SCREEN_Y: -- wxDisplaySize(NULL, &value); -+ wxDisplaySize(win, NULL, &value); - return value; - - // TODO case wxSYS_FRAMESIZE_X: -diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm -index 635ea286d4..42ae67e27a 100644 ---- a/src/osx/cocoa/window.mm -+++ b/src/osx/cocoa/window.mm -@@ -191,6 +191,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - - (BOOL)isEnabled; - - (void)setEnabled:(BOOL)flag; - -+- (BOOL)clipsToBounds; -+- (void)setClipsToBounds:(BOOL)clipsToBounds; -+ - - (void)setImage:(NSImage *)image; - - (void)setControlSize:(NSControlSize)size; - -@@ -2559,6 +2562,7 @@ wxWidgetImpl( peer, flags ) - if ( m_osxView ) - CFRetain(m_osxView); - [m_osxView release]; -+ m_osxView.clipsToBounds = YES; - } - - --- -2.42.0.windows.2 - diff --git a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch b/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch deleted file mode 100644 index 325b933f66..0000000000 --- a/deps/wxWidgets/0001-wx-3.1.5-patch-for-Orca.patch +++ /dev/null @@ -1,743 +0,0 @@ -From 5e82980ed1762338794d06b3f9f22fa10e050622 Mon Sep 17 00:00:00 2001 -From: SoftFever -Date: Sat, 23 Dec 2023 20:08:41 +0800 -Subject: [PATCH] wx 3.1.5 patch for Orca - ---- - build/cmake/init.cmake | 4 ++ - build/cmake/lib/webview/CMakeLists.txt | 4 +- - include/wx/fontutil.h | 15 +++++++- - include/wx/gdicmn.h | 3 ++ - include/wx/generic/grid.h | 4 +- - include/wx/msw/font.h | 2 +- - include/wx/msw/tooltip.h | 4 +- - include/wx/osx/app.h | 2 +- - src/common/combocmn.cpp | 13 +++++-- - src/common/datavcmn.cpp | 6 ++- - src/common/dcbufcmn.cpp | 8 +++- - src/common/gdicmn.cpp | 14 +++++++ - src/common/image.cpp | 6 +-- - src/common/intl.cpp | 7 ++++ - src/generic/grid.cpp | 53 +++++++++++++++++++++----- - src/msw/bmpcbox.cpp | 9 ++++- - src/msw/font.cpp | 14 +++---- - src/msw/menuitem.cpp | 2 + - src/msw/window.cpp | 52 ++++++++++++++++--------- - src/osx/cocoa/dataview.mm | 26 +++++++++++-- - src/osx/cocoa/settings.mm | 6 +-- - src/osx/cocoa/window.mm | 4 ++ - 22 files changed, 199 insertions(+), 59 deletions(-) - -diff --git a/build/cmake/init.cmake b/build/cmake/init.cmake -index 0bc4f934b9..479431a69c 100644 ---- a/build/cmake/init.cmake -+++ b/build/cmake/init.cmake -@@ -413,7 +413,11 @@ if(wxUSE_GUI) - else() - find_package(OpenGL) - if(WXGTK3 AND OpenGL_EGL_FOUND AND wxUSE_GLCANVAS_EGL) -+ if(UNIX AND NOT APPLE) -+ set(OPENGL_LIBRARIES OpenGL EGL) -+ else() - set(OPENGL_LIBRARIES OpenGL::OpenGL OpenGL::EGL) -+ endif() - find_package(WAYLANDEGL) - if(WAYLANDEGL_FOUND AND wxHAVE_GDK_WAYLAND) - list(APPEND OPENGL_LIBRARIES ${WAYLANDEGL_LIBRARIES}) -diff --git a/build/cmake/lib/webview/CMakeLists.txt b/build/cmake/lib/webview/CMakeLists.txt -index cc3298ff33..aa103ae474 100644 ---- a/build/cmake/lib/webview/CMakeLists.txt -+++ b/build/cmake/lib/webview/CMakeLists.txt -@@ -56,9 +56,9 @@ if(APPLE) - elseif(WXMSW) - if(wxUSE_WEBVIEW_EDGE) - # Update the following variables if updating WebView2 SDK -- set(WEBVIEW2_VERSION "1.0.705.50") -+ set(WEBVIEW2_VERSION "1.0.1418.22") - set(WEBVIEW2_URL "https://www.nuget.org/api/v2/package/Microsoft.Web.WebView2/${WEBVIEW2_VERSION}") -- set(WEBVIEW2_SHA256 "6a34bb553e18cfac7297b4031f3eac2558e439f8d16a45945c22945ac404105d") -+ set(WEBVIEW2_SHA256 "51d2ef56196e2a9d768a6843385bcb9c6baf9ed34b2603ddb074fb4995543a99") - - set(WEBVIEW2_DEFAULT_PACKAGE_DIR "${CMAKE_BINARY_DIR}/packages/Microsoft.Web.WebView2.${WEBVIEW2_VERSION}") - -diff --git a/include/wx/fontutil.h b/include/wx/fontutil.h -index 09ad8c8ef3..c228e167d7 100644 ---- a/include/wx/fontutil.h -+++ b/include/wx/fontutil.h -@@ -294,7 +294,11 @@ public: - wxFontEncoding GetEncoding() const; - - void SetPointSize(int pointsize); -- void SetFractionalPointSize(double pointsize); -+ void SetFractionalPointSize(double pointsize -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ); - void SetPixelSize(const wxSize& pixelSize); - void SetStyle(wxFontStyle style); - void SetNumericWeight(int weight); -@@ -307,12 +311,19 @@ public: - - // Helper used in many ports: use the normal font size if the input is - // negative, as we handle -1 as meaning this for compatibility. -- void SetSizeOrDefault(double size) -+ void SetSizeOrDefault(double size -+#if defined(__WXMSW__) -+ , const wxWindow *window = nullptr -+#endif -+ ) - { - SetFractionalPointSize - ( - size < 0 ? wxNORMAL_FONT->GetFractionalPointSize() - : size -+#if defined(__WXMSW__) -+ ,window -+#endif - ); - } - -diff --git a/include/wx/gdicmn.h b/include/wx/gdicmn.h -index e29a77627c..dc48cf9451 100644 ---- a/include/wx/gdicmn.h -+++ b/include/wx/gdicmn.h -@@ -38,6 +38,7 @@ class WXDLLIMPEXP_FWD_CORE wxRegion; - class WXDLLIMPEXP_FWD_BASE wxString; - class WXDLLIMPEXP_FWD_CORE wxIconBundle; - class WXDLLIMPEXP_FWD_CORE wxPoint; -+class WXDLLIMPEXP_FWD_CORE wxWindow; - - // --------------------------------------------------------------------------- - // constants -@@ -1092,7 +1093,9 @@ extern int WXDLLIMPEXP_CORE wxDisplayDepth(); - - // get the display size - extern void WXDLLIMPEXP_CORE wxDisplaySize(int *width, int *height); -+extern void WXDLLIMPEXP_CORE wxDisplaySize(const wxWindow *window, int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(); -+extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySize(const wxWindow *window); - extern void WXDLLIMPEXP_CORE wxDisplaySizeMM(int *width, int *height); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplaySizeMM(); - extern wxSize WXDLLIMPEXP_CORE wxGetDisplayPPI(); -diff --git a/include/wx/generic/grid.h b/include/wx/generic/grid.h -index d7a3890764..e4dee51d5a 100644 ---- a/include/wx/generic/grid.h -+++ b/include/wx/generic/grid.h -@@ -2951,9 +2951,11 @@ private: - wxGridWindow* gridWindow); - - // Update the width/height of the column/row being drag-resized. -+ //BBS: add cursor mode for DoGridDragResize's paremeters - void DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow); -+ wxGridWindow* gridWindow, -+ CursorMode mode); - - // process different clicks on grid cells - void DoGridCellLeftDown(wxMouseEvent& event, -diff --git a/include/wx/msw/font.h b/include/wx/msw/font.h -index 0f9768b44e..094d774918 100644 ---- a/include/wx/msw/font.h -+++ b/include/wx/msw/font.h -@@ -23,7 +23,7 @@ public: - // ctors and such - wxFont() { } - -- wxFont(const wxFontInfo& info); -+ wxFont(const wxFontInfo& info, const wxWindow *window = nullptr); - - wxFont(int size, - wxFontFamily family, -diff --git a/include/wx/msw/tooltip.h b/include/wx/msw/tooltip.h -index 4c3be08cec..96fb378d01 100644 ---- a/include/wx/msw/tooltip.h -+++ b/include/wx/msw/tooltip.h -@@ -91,10 +91,10 @@ private: - // the one and only one tooltip control we use - never access it directly - // but use GetToolTipCtrl() which will create it when needed - static WXHWND ms_hwndTT; -- -+public: - // create the tooltip ctrl if it doesn't exist yet and return its HWND - static WXHWND GetToolTipCtrl(); -- -+private: - // to be used in wxModule for deleting tooltip ctrl window when exiting mainloop - static void DeleteToolTipCtrl(); - -diff --git a/include/wx/osx/app.h b/include/wx/osx/app.h -index 317a0ca96f..58014ec1d4 100644 ---- a/include/wx/osx/app.h -+++ b/include/wx/osx/app.h -@@ -161,7 +161,7 @@ private: - - public: - bool OSXInitWasCalled() { return m_inited; } -- void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } -+ virtual void OSXStoreOpenFiles(const wxArrayString &files ) { m_openFiles = files ; } - void OSXStorePrintFiles(const wxArrayString &files ) { m_printFiles = files ; } - void OSXStoreOpenURL(const wxString &url ) { m_getURL = url ; } - #endif -diff --git a/src/common/combocmn.cpp b/src/common/combocmn.cpp -index b61aac35bf..7cfc97d2f8 100644 ---- a/src/common/combocmn.cpp -+++ b/src/common/combocmn.cpp -@@ -2141,7 +2141,7 @@ void wxComboCtrlBase::CreatePopup() - #if !USES_GENERICTLW - m_winPopup = new wxComboPopupWindowBase2( this, wxNO_BORDER ); - #else -- int tlwFlags = wxNO_BORDER; -+ int tlwFlags = wxNO_BORDER | wxSTAY_ON_TOP; - #ifdef wxCC_GENERIC_TLW_IS_FRAME - tlwFlags |= wxFRAME_NO_TASKBAR; - #endif -@@ -2285,6 +2285,9 @@ void wxComboCtrlBase::ShowPopup() - - SetFocus(); - -+ //int displayIdx = wxDisplay::GetFromWindow(this); -+ //wxRect displayRect = wxDisplay(displayIdx != wxNOT_FOUND ? displayIdx : 0u).GetGeometry(); -+ - // Space above and below - int screenHeight; - wxPoint scrPos; -@@ -2407,9 +2410,13 @@ void wxComboCtrlBase::ShowPopup() - - int showFlags = CanDeferShow; - -- if ( spaceBelow < szp.y ) -+ int anchorSideVertical = m_anchorSide & (wxUP | wxDOWN); -+ if (// Pop up as asked for by the library user. -+ (anchorSideVertical & wxUP) || -+ // Automatic: Pop up if it does not fit down. -+ (anchorSideVertical == 0 && spaceBelow < szp.y )) - { -- popupY = scrPos.y - szp.y; -+ popupY = scrPos.y - szp.y + displayRect.GetTop(); - showFlags |= ShowAbove; - } - -diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp -index 1f5fd4d66b..14ea2f8ef1 100644 ---- a/src/common/datavcmn.cpp -+++ b/src/common/datavcmn.cpp -@@ -1322,7 +1322,11 @@ wxDataViewItem wxDataViewCtrlBase::GetSelection() const - - wxDataViewItemArray selections; - GetSelections(selections); -- return selections[0]; -+ // BBS -+ if (!selections.empty()) -+ return selections[0]; -+ else -+ return wxDataViewItem(0); - } - - namespace -diff --git a/src/common/dcbufcmn.cpp b/src/common/dcbufcmn.cpp -index 74958fce10..59844f4526 100644 ---- a/src/common/dcbufcmn.cpp -+++ b/src/common/dcbufcmn.cpp -@@ -82,9 +82,15 @@ private: - const double scale = dc ? dc->GetContentScaleFactor() : 1.0; - wxBitmap* const buffer = new wxBitmap; - -+#if __WXMSW__ - // we must always return a valid bitmap but creating a bitmap of - // size 0 would fail, so create a 1*1 bitmap in this case -- buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale); -+ buffer->Create(wxMax(w, 1), wxMax(h, 1), 24); -+#else -+ // we must always return a valid bitmap but creating a bitmap of -+ // size 0 would fail, so create a 1*1 bitmap in this case -+ buffer->CreateScaled(wxMax(w, 1), wxMax(h, 1), -1, scale); -+#endif - - return buffer; - } -diff --git a/src/common/gdicmn.cpp b/src/common/gdicmn.cpp -index 20442bbc73..bc2c35bee6 100644 ---- a/src/common/gdicmn.cpp -+++ b/src/common/gdicmn.cpp -@@ -863,11 +863,25 @@ void wxDisplaySize(int *width, int *height) - *height = size.y; - } - -+void wxDisplaySize(const wxWindow *window, int *width, int *height) -+{ -+ const wxSize size = wxGetDisplaySize(window); -+ if ( width ) -+ *width = size.x; -+ if ( height ) -+ *height = size.y; -+} -+ - wxSize wxGetDisplaySize() - { - return wxDisplay().GetGeometry().GetSize(); - } - -+wxSize wxGetDisplaySize(const wxWindow *window) -+{ -+ return window ? wxDisplay(window).GetGeometry().GetSize() : wxDisplay().GetGeometry().GetSize(); -+} -+ - void wxClientDisplayRect(int *x, int *y, int *width, int *height) - { - const wxRect rect = wxGetClientDisplayRect(); -diff --git a/src/common/image.cpp b/src/common/image.cpp -index 78fe5b82a3..46db8722ce 100644 ---- a/src/common/image.cpp -+++ b/src/common/image.cpp -@@ -383,11 +383,11 @@ wxImage wxImage::ShrinkBy( int xFactor , int yFactor ) const - unsigned char red = pixel[0] ; - unsigned char green = pixel[1] ; - unsigned char blue = pixel[2] ; -- unsigned char alpha = 255 ; -- if ( source_alpha ) -- alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( !hasMask || red != maskRed || green != maskGreen || blue != maskBlue ) - { -+ unsigned char alpha = 255 ; -+ if ( source_alpha ) -+ alpha = *(source_alpha + y_offset + x * xFactor + x1) ; - if ( alpha > 0 ) - { - avgRed += red ; -diff --git a/src/common/intl.cpp b/src/common/intl.cpp -index 0b0d8798f4..294f542b1f 100644 ---- a/src/common/intl.cpp -+++ b/src/common/intl.cpp -@@ -1628,6 +1628,12 @@ GetInfoFromLCID(LCID lcid, - { - str = buf; - -+//FIXME Vojtech: We forcefully set the locales for a decimal point to "C", but this -+// is not possible for the Win32 locales, therefore there is a discrepancy. -+// It looks like we live with the discrepancy for at least half a year, so we will -+// suppress the assert until we fix Slic3r to properly switch to "C" locales just -+// for file import / export. -+#if 0 - // As we get our decimal point separator from Win32 and not the - // CRT there is a possibility of mismatch between them and this - // can easily happen if the user code called setlocale() -@@ -1641,6 +1647,7 @@ GetInfoFromLCID(LCID lcid, - "Decimal separator mismatch -- did you use setlocale()?" - "If so, use wxLocale to change the locale instead." - ); -+#endif - } - break; - -diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp -index 41fd4524cf..f4a15cb839 100644 ---- a/src/generic/grid.cpp -+++ b/src/generic/grid.cpp -@@ -3824,7 +3824,8 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo - { - case WXGRID_CURSOR_RESIZE_ROW: - { -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - } - break; - -@@ -4166,7 +4167,8 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo - switch ( m_cursorMode ) - { - case WXGRID_CURSOR_RESIZE_COL: -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - case WXGRID_CURSOR_SELECT_COL: -@@ -4708,11 +4710,13 @@ bool wxGrid::DoGridDragEvent(wxMouseEvent& event, - return DoGridCellDrag(event, coords, isFirstDrag); - - case WXGRID_CURSOR_RESIZE_ROW: -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - break; - - case WXGRID_CURSOR_RESIZE_COL: -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - break; - - default: -@@ -4803,6 +4807,8 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event, - case wxGridSelectCells: - case wxGridSelectRowsOrColumns: - // nothing to do in these cases -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(coords.GetRow(), coords.GetCol(), coords.GetRow(), coords.GetCol(), event); - break; - - case wxGridSelectRows: -@@ -5044,9 +5050,11 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG - } - } - -+//BBS: add cursor mode for DoGridDragResize's paremeters - void wxGrid::DoGridDragResize(const wxPoint& position, - const wxGridOperations& oper, -- wxGridWindow* gridWindow) -+ wxGridWindow* gridWindow, -+ CursorMode mode) - { - // Get the logical position from the physical one we're passed. - const wxPoint -@@ -5056,10 +5064,28 @@ void wxGrid::DoGridDragResize(const wxPoint& position, - // orthogonal direction. - const int linePos = oper.Dual().Select(logicalPos); - -- const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -- oper.SetLineSize(this, m_dragRowOrCol, -+ //BBS: add logic for resize multiplexed cols -+ if (mode == WXGRID_CURSOR_RESIZE_COL) { -+ int col_to_resize = m_dragRowOrCol; -+ int num_rows, num_cols; -+ this->GetCellSize(0, m_dragRowOrCol, &num_rows, &num_cols); -+ if (num_cols < 1) -+ col_to_resize = m_dragRowOrCol - 1; -+ -+ const int lineEnd = oper.GetLineEndPos(this, m_dragRowOrCol); -+ const int lineSize = oper.GetLineSize(this, col_to_resize); -+ int size = linePos - lineEnd + lineSize; -+ oper.SetLineSize(this, col_to_resize, -+ wxMax(size, -+ oper.GetMinimalLineSize(this, col_to_resize))); -+ } -+ else { -+ const int lineStart = oper.GetLineStartPos(this, m_dragRowOrCol); -+ -+ oper.SetLineSize(this, m_dragRowOrCol, - wxMax(linePos - lineStart, - oper.GetMinimalLineSize(this, m_dragRowOrCol))); -+ } - - // TODO: generate RESIZING event, see #10754, if the size has changed. - } -@@ -5082,7 +5108,8 @@ wxPoint wxGrid::GetPositionForResizeEvent(int width) const - - void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridRowOperations(), gridWindow, WXGRID_CURSOR_RESIZE_ROW); - - SendGridSizeEvent(wxEVT_GRID_ROW_SIZE, m_dragRowOrCol, -1, event); - -@@ -5091,7 +5118,8 @@ void wxGrid::DoEndDragResizeRow(const wxMouseEvent& event, wxGridWindow* gridWin - - void wxGrid::DoEndDragResizeCol(const wxMouseEvent& event, wxGridWindow* gridWindow) - { -- DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow); -+ //BBS: add cursor mode for DoGridDragResize's paremeters -+ DoGridDragResize(event.GetPosition(), wxGridColumnOperations(), gridWindow, WXGRID_CURSOR_RESIZE_COL); - - SendGridSizeEvent(wxEVT_GRID_COL_SIZE, -1, m_dragRowOrCol, event); - -@@ -5105,9 +5133,10 @@ void wxGrid::DoHeaderStartDragResizeCol(int col) - - void wxGrid::DoHeaderDragResizeCol(int width) - { -+ //BBS: add cursor mode for DoGridDragResize's paremeters - DoGridDragResize(GetPositionForResizeEvent(width), - wxGridColumnOperations(), -- m_gridWin); -+ m_gridWin, WXGRID_CURSOR_RESIZE_COL); - } - - void wxGrid::DoHeaderEndDragResizeCol(int width) -@@ -5891,6 +5920,10 @@ void wxGrid::OnKeyDown( wxKeyEvent& event ) - DisableCellEditControl(); - - MoveCursorDown( event.ShiftDown() ); -+ //BBS: select this cell when first click -+ m_selection->SelectBlock(m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ m_currentCellCoords.GetRow(), m_currentCellCoords.GetCol(), -+ event); - } - break; - -diff --git a/src/msw/bmpcbox.cpp b/src/msw/bmpcbox.cpp -index 0a2d167ad7..0aeba45ea9 100644 ---- a/src/msw/bmpcbox.cpp -+++ b/src/msw/bmpcbox.cpp -@@ -156,13 +156,20 @@ void wxBitmapComboBox::RecreateControl() - - wxComboBox::DoClear(); - -- HWND hwnd = GetHwnd(); -+ WNDPROC wndproc_edit = nullptr; -+ WinStruct combobox_info; -+ HWND hwnd = GetHwnd(); -+if (::GetComboBoxInfo(hwnd, &combobox_info)) -+ wndproc_edit = (WNDPROC)wxGetWindowProc(combobox_info.hwndItem); - DissociateHandle(); - ::DestroyWindow(hwnd); - - if ( !MSWCreateControl(wxT("COMBOBOX"), wxEmptyString, pos, size) ) - return; - -+if (::GetComboBoxInfo(GetHwnd(), &combobox_info)) -+ wxSetWindowProc(combobox_info.hwndItem, wndproc_edit); -+ - // initialize the controls contents - for ( i = 0; i < numItems; i++ ) - { -diff --git a/src/msw/font.cpp b/src/msw/font.cpp -index 0bd240d79f..d38b1b00f5 100644 ---- a/src/msw/font.cpp -+++ b/src/msw/font.cpp -@@ -54,7 +54,7 @@ static const int PITCH_MASK = FIXED_PITCH | VARIABLE_PITCH; - class WXDLLEXPORT wxFontRefData: public wxGDIRefData - { - public: -- wxFontRefData(const wxFontInfo& info = wxFontInfo()); -+ wxFontRefData(const wxFontInfo& info = wxFontInfo(), const wxWindow* window = nullptr); - - wxFontRefData(const wxNativeFontInfo& info, WXHFONT hFont = 0) - { -@@ -324,7 +324,7 @@ protected: - // wxFontRefData - // ---------------------------------------------------------------------------- - --wxFontRefData::wxFontRefData(const wxFontInfo& info) -+wxFontRefData::wxFontRefData(const wxFontInfo& info, const wxWindow *window) - { - m_hFont = NULL; - -@@ -335,7 +335,7 @@ wxFontRefData::wxFontRefData(const wxFontInfo& info) - } - else - { -- m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize()); -+ m_nativeFontInfo.SetSizeOrDefault(info.GetFractionalPointSize(), window); - } - - SetStyle(info.GetStyle()); -@@ -518,12 +518,12 @@ wxFontEncoding wxNativeFontInfo::GetEncoding() const - return wxGetFontEncFromCharSet(lf.lfCharSet); - } - --void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew) -+void wxNativeFontInfo::SetFractionalPointSize(double pointSizeNew, const wxWindow *window) - { - // We don't have the correct DPI to use here, so use that of the - // primary screen and rely on WXAdjustToPPI() changing it later if - // necessary. -- const int ppi = ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); -+ const int ppi = window ? window->GetDPI().GetY() : ::GetDeviceCaps(ScreenHDC(), LOGPIXELSY); - lf.lfHeight = GetLogFontHeightAtPPI(pointSizeNew, ppi); - - pointSize = pointSizeNew; -@@ -812,9 +812,9 @@ wxFont::wxFont(const wxString& fontdesc) - (void)Create(info); - } - --wxFont::wxFont(const wxFontInfo& info) -+wxFont::wxFont(const wxFontInfo& info, const wxWindow *window) - { -- m_refData = new wxFontRefData(info); -+ m_refData = new wxFontRefData(info, window); - } - - bool wxFont::Create(const wxNativeFontInfo& info, WXHFONT hFont) -diff --git a/src/msw/menuitem.cpp b/src/msw/menuitem.cpp -index 9bb397d472..30af7154a7 100644 ---- a/src/msw/menuitem.cpp -+++ b/src/msw/menuitem.cpp -@@ -368,6 +368,8 @@ void MenuDrawData::Init(wxWindow const* window) - // native menu uses small top margin for separator - if ( SeparatorMargin.cyTopHeight >= 2 ) - SeparatorMargin.cyTopHeight -= 2; -+ -+ SeparatorSize.cy = 0; - } - else - #endif // wxUSE_UXTHEME -diff --git a/src/msw/window.cpp b/src/msw/window.cpp -index eadc2f5700..f64fea4446 100644 ---- a/src/msw/window.cpp -+++ b/src/msw/window.cpp -@@ -4773,33 +4773,49 @@ static wxSize GetWindowDPI(HWND hwnd) - } - - /*extern*/ --int wxGetSystemMetrics(int nIndex, const wxWindow* window) -+int wxGetSystemMetrics(int nIndex, const wxWindow* win) - { - #if wxUSE_DYNLIB_CLASS -- if ( !window ) -- window = wxApp::GetMainTopWindow(); -+ const wxWindow* window = (!win && wxTheApp) ? wxTheApp->GetTopWindow() : win; - -- if ( window ) -+ if (window) - { -- typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -- static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -- static bool s_initDone = false; -- -- if ( !s_initDone ) -- { -- wxLoadedDLL dllUser32("user32.dll"); -- wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -- s_initDone = true; -+#if 1 -+ if (window->GetHWND() && (nIndex == SM_CXSCREEN || nIndex == SM_CYSCREEN)) { -+ HDC hdc = GetDC(window->GetHWND()); -+#if 0 -+ double dim = GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES); -+ ReleaseDC(window->GetHWND(), hdc); -+ wxSize dpi = window->GetDPI(); -+ dim *= 96.0 / (nIndex == SM_CXSCREEN ? dpi.x : dpi.y); -+ return int(dim + 0.5); -+#else -+ return int(GetDeviceCaps(hdc, nIndex == SM_CXSCREEN ? HORZRES : VERTRES)); -+#endif - } -- -- if ( s_pfnGetSystemMetricsForDpi ) -+ else -+#endif - { -- const int dpi = window->GetDPI().y; -- return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ typedef int (WINAPI * GetSystemMetricsForDpi_t)(int nIndex, UINT dpi); -+ static GetSystemMetricsForDpi_t s_pfnGetSystemMetricsForDpi = NULL; -+ static bool s_initDone = false; -+ -+ if ( !s_initDone ) -+ { -+ wxLoadedDLL dllUser32("user32.dll"); -+ wxDL_INIT_FUNC(s_pfn, GetSystemMetricsForDpi, dllUser32); -+ s_initDone = true; -+ } -+ -+ if ( s_pfnGetSystemMetricsForDpi ) -+ { -+ const int dpi = window->GetDPI().y; -+ return s_pfnGetSystemMetricsForDpi(nIndex, (UINT)dpi); -+ } - } - } - #else -- wxUnusedVar(window); -+ wxUnusedVar(win); - #endif // wxUSE_DYNLIB_CLASS - - return ::GetSystemMetrics(nIndex); -diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm -index 6ff0cc3088..4943f3ea38 100644 ---- a/src/osx/cocoa/dataview.mm -+++ b/src/osx/cocoa/dataview.mm -@@ -1734,12 +1734,22 @@ outlineView:(NSOutlineView*)outlineView - if ( !dvc->GetEventHandler()->ProcessEvent(eventDV) ) - [super keyDown:event]; - } -- else -+ //FIXME Vojtech's hack to get the accelerators assigned to the wxDataViewControl working. -+ else if (! implementation->DoHandleKeyEvent(event)) - { - [super keyDown:event]; // all other keys - } - } - -+//FIXME Vojtech: This is a workaround to get at least the "mouse move" events at the wxDataViewControl, -+// so we can show the tooltips. The "mouse move" events are being send only if the wxDataViewControl -+// has focus, which is a limitation of wxWidgets. We may grab focus on "mouse entry" though. -+- (void)mouseMoved:(NSEvent *)event -+{ -+if (! implementation->DoHandleMouseEvent(event)) -+ [super mouseMoved:event]; -+} -+ - // - // contextual menus - // -@@ -2672,12 +2682,22 @@ void wxCocoaDataViewControl::DoSetIndent(int indent) - - void wxCocoaDataViewControl::HitTest(const wxPoint& point, wxDataViewItem& item, wxDataViewColumn*& columnPtr) const - { -- NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(),point); -+ NSTableHeaderView *headerView = [m_OutlineView headerView]; -+ if (headerView && point.y < headerView.visibleRect.size.height) { -+ // The point is inside the header area. -+ columnPtr = NULL; -+ item = wxDataViewItem(); -+ return; -+ } -+ // Convert from the window coordinates to the virtual scrolled view coordinates. -+ NSScrollView *scrollView = [m_OutlineView enclosingScrollView]; -+ const NSRect &visibleRect = scrollView.contentView.visibleRect; -+ NSPoint const nativePoint = wxToNSPoint((NSScrollView*) GetWXWidget(), -+ wxPoint(point.x + visibleRect.origin.x, point.y + visibleRect.origin.y)); - - int indexColumn; - int indexRow; - -- - indexColumn = [m_OutlineView columnAtPoint:nativePoint]; - indexRow = [m_OutlineView rowAtPoint: nativePoint]; - if ((indexColumn >= 0) && (indexRow >= 0)) -diff --git a/src/osx/cocoa/settings.mm b/src/osx/cocoa/settings.mm -index de5f52860c..a9581174a4 100644 ---- a/src/osx/cocoa/settings.mm -+++ b/src/osx/cocoa/settings.mm -@@ -224,7 +224,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) - // ---------------------------------------------------------------------------- - - // Get a system metric, e.g. scrollbar size --int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUNUSED(win)) -+int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* win) - { - int value; - -@@ -259,11 +259,11 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, const wxWindow* WXUN - // TODO case wxSYS_WINDOWMIN_Y: - - case wxSYS_SCREEN_X: -- wxDisplaySize(&value, NULL); -+ wxDisplaySize(win, &value, NULL); - return value; - - case wxSYS_SCREEN_Y: -- wxDisplaySize(NULL, &value); -+ wxDisplaySize(win, NULL, &value); - return value; - - // TODO case wxSYS_FRAMESIZE_X: -diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm -index b322e582c5..79de567333 100644 ---- a/src/osx/cocoa/window.mm -+++ b/src/osx/cocoa/window.mm -@@ -190,6 +190,9 @@ NSRect wxOSXGetFrameForControl( wxWindowMac* window , const wxPoint& pos , const - - (BOOL)isEnabled; - - (void)setEnabled:(BOOL)flag; - -+- (BOOL)clipsToBounds; -+- (void)setClipsToBounds:(BOOL)clipsToBounds; -+ - - (void)setImage:(NSImage *)image; - - (void)setControlSize:(NSControlSize)size; - -@@ -2505,6 +2508,7 @@ wxWidgetImpl( peer, flags ) - if ( m_osxView ) - CFRetain(m_osxView); - [m_osxView release]; -+ m_osxView.clipsToBounds = YES; - } - - --- -2.41.0.windows.2 - diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index f84f9a070f..fdc1abdc9a 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -20,16 +20,6 @@ else () set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF") endif () -set(_wx_orcaslicer_patch "${CMAKE_CURRENT_LIST_DIR}/0001-wx-3.1.5-patch-for-Orca.patch") -if (MSVC) - set(_patch_cmd if not exist WXWIDGETS_PATCHED ( "${GIT_EXECUTABLE}" apply --verbose --ignore-space-change --whitespace=fix ${_wx_orcaslicer_patch} && type nul > WXWIDGETS_PATCHED ) ) -else () - set(_patch_cmd test -f WXWIDGETS_PATCHED || ${PATCH_CMD} ${_wx_orcaslicer_patch} && touch WXWIDGETS_PATCHED) -endif () - -if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - set(_patch_cmd ${PATCH_CMD} ${_wx_orcaslicer_patch}) -endif () # Note: for anybody wanting to switch to tarball fetching - this won't just work as # git apply expects a git repo. Either git init empty repo, or change patching method. @@ -44,12 +34,12 @@ endif () orcaslicer_add_cmake_project( wxWidgets - GIT_REPOSITORY "https://github.com/wxWidgets/wxWidgets" - GIT_TAG ${_wx_git_tag} + GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets" + # GIT_TAG ${_wx_git_tag} GIT_SHALLOW ON # URL ${_wx_tarball_url} # URL_HASH SHA256=${_wx_tarball_hash} - PATCH_COMMAND ${_patch_cmd} + # PATCH_COMMAND ${_patch_cmd} DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} dep_TIFF dep_JPEG CMAKE_ARGS -DwxBUILD_PRECOMP=ON diff --git a/linux.d/ubuntu b/linux.d/debian similarity index 100% rename from linux.d/ubuntu rename to linux.d/debian diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 5a109815d4..bed88115d4 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: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1885,6 +1885,12 @@ msgstr "" msgid "arrange current plate" msgstr "" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "" @@ -2327,10 +2333,10 @@ msgstr "" msgid "AMS not connected" msgstr "" -msgid "Load Filament" +msgid "Load" msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "" msgid "Ext Spool" @@ -2348,7 +2354,7 @@ msgstr "" msgid "Calibrating AMS..." msgstr "" -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" msgid "Calibrate again" @@ -2389,7 +2395,7 @@ msgstr "" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" msgid "Edit" @@ -2937,6 +2943,14 @@ msgid "" "automatically when current filament runs out" msgstr "" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "" @@ -3008,6 +3022,45 @@ msgstr "" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, possible-boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, possible-boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, possible-boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "" @@ -3323,18 +3376,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "" @@ -3854,7 +3895,7 @@ msgstr "" msgid "Size:" msgstr "" -#, possible-boost-format +#, possible-c-format, possible-boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -3985,6 +4026,9 @@ msgstr "" msgid "Device" msgstr "" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "" @@ -4024,6 +4068,9 @@ msgstr "" msgid "Send all" msgstr "" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "" @@ -4789,9 +4836,6 @@ msgstr "" msgid "Bed" msgstr "" -msgid "Unload" -msgstr "" - msgid "Debug Info" msgstr "" @@ -4959,9 +5003,6 @@ msgstr "" msgid "Update" msgstr "" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "" @@ -5201,6 +5242,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5608,15 +5655,21 @@ msgstr "" msgid "prepare 3mf file..." msgstr "" +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "" +msgid "Download failed, File size exception." +msgstr "" + #, possible-c-format, possible-boost-format msgid "Project downloaded %d%%" msgstr "" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5874,6 +5927,21 @@ msgstr "" msgid "Units" msgstr "" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -5948,6 +6016,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6550,6 +6626,9 @@ msgstr "" msgid "Modifying the device name" msgstr "" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "" @@ -6601,6 +6680,26 @@ msgstr "" msgid "Unknown Failure" msgstr "" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "" @@ -6769,8 +6868,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" msgid "Line width" @@ -7146,25 +7245,22 @@ msgstr "" msgid "Unsaved Changes" msgstr "" -msgid "Actions For Unsaved Changes" +msgid "Transfer or discard changes" msgstr "" -msgid "Preset Value" +msgid "Old Value" msgstr "" -msgid "Modified Value" +msgid "New Value" msgstr "" -msgid "Transfer Modified Value" +msgid "Transfer" msgstr "" msgid "Don't save" msgstr "" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" +msgid "Discard" msgstr "" msgid "Click the right mouse button to display the full text." @@ -7219,28 +7315,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7258,9 +7348,6 @@ msgstr "" msgid "Select presets to compare" msgstr "" -msgid "Transfer" -msgstr "" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7724,6 +7811,39 @@ msgstr "" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -9552,6 +9672,9 @@ msgstr "" msgid "Lightning" msgstr "" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -9713,10 +9836,10 @@ msgstr "" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" msgid "Support interface fan speed" @@ -12096,6 +12219,9 @@ msgstr "" msgid "load_obj: failed to parse" msgstr "" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "" @@ -12212,6 +12338,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -12221,6 +12355,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, possible-c-format, possible-boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -12446,9 +12593,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -12492,12 +12636,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -12525,10 +12663,14 @@ msgstr "" msgid "Action" msgstr "" +#, possible-c-format, possible-boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -12537,13 +12679,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, possible-c-format, possible-boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -12924,8 +13059,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -13468,6 +13603,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index cff4dbcc1a..0275058262 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: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2024-03-17 22:08+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -1964,6 +1964,12 @@ msgstr "Ordenar" msgid "arrange current plate" msgstr "organitza la placa actual" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rota automàticament" @@ -2426,11 +2432,11 @@ msgstr "Recàrrega automàtica" msgid "AMS not connected" msgstr "AMS no connectat" -msgid "Load Filament" -msgstr "Carregar Filament" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Descarregar Filament" +msgid "Unload" +msgstr "Descarregar" msgid "Ext Spool" msgstr "Bobina Ext" @@ -2447,7 +2453,7 @@ msgstr "Reintentar" msgid "Calibrating AMS..." msgstr "Calibrant AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "S'ha produït un problema durant el calibratge. Feu clic per veure la solució." @@ -2489,10 +2495,8 @@ msgstr "Agafar filament nou" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Trieu una ranura AMS i premeu el botó \"Carregar\" o \"Descarregar\" per " -"carregar o descarregar el filament automàticament." msgid "Edit" msgstr "Editar" @@ -3115,6 +3119,14 @@ msgstr "" "AMS continuarà a una altra bobina amb les mateixes propietats del filament " "automàticament quan s'esgoti el filament actual" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fitxer" @@ -3194,6 +3206,45 @@ msgstr "Executant scripts de postprocessament" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Error desconegut en exportar el Codi-G." @@ -3579,18 +3630,6 @@ msgstr "Pausa d'error de la primera capa" msgid "Nozzle clog pause" msgstr "Pausa d'obstrucció del broquet" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Placa Base" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Desconegut" @@ -4128,7 +4167,7 @@ msgstr "Volum:" msgid "Size:" msgstr "Mida:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4270,6 +4309,9 @@ msgstr "Previsualització" msgid "Device" msgstr "Dispositiu" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projecte" @@ -4309,6 +4351,9 @@ msgstr "Imprimeix-ho tot" msgid "Send all" msgstr "Envia-ho tot" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Dreceres de teclat" @@ -5108,9 +5153,6 @@ msgstr "Cambra" msgid "Bed" msgstr "Llit" -msgid "Unload" -msgstr "Descarregar" - msgid "Debug Info" msgstr "Informació de depuració" @@ -5297,9 +5339,6 @@ msgstr "Estat" msgid "Update" msgstr "Actualitzar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "No tornis a mostrar" @@ -5546,6 +5585,12 @@ msgstr "Permet senyals acústics" msgid "Filament Tangle Detect" msgstr "Detecció de filament enredat" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -6006,19 +6051,23 @@ msgstr "Important Model" msgid "prepare 3mf file..." msgstr "preparar el fitxer 3MF..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "descarregant projecte ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projecte descarregat %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"La importació a Orca Slicer ha fallat. Descarregueu el fitxer manualment i " -"importeu-lo." msgid "Import SLA archive" msgstr "Importar fitxer SLA" @@ -6291,6 +6340,21 @@ msgstr "Imperial" msgid "Units" msgstr "Unitats" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Inici" @@ -6372,6 +6436,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -7024,6 +7096,9 @@ msgstr "Calibratge automàtic de flux mitjançant Micro Lidar" msgid "Modifying the device name" msgstr "Modificant el nom del dispositiu" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Enviar a la targeta SD de la impressora" @@ -7079,6 +7154,26 @@ msgstr "Excedit el temps d'espera de l'informe d'inici de sessió" msgid "Unknown Failure" msgstr "Falla desconeguda" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Iniciar sessió a la impressora" @@ -7295,8 +7390,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Quan graveu timelapse sense capçal d'impressió, es recomana afegir una " "\"Torre de Purga Timelapse\" \n" @@ -7711,26 +7806,23 @@ msgstr "No definit" msgid "Unsaved Changes" msgstr "Canvis no desats" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Transferir o descartar canvis" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Valor antic" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Valor nou" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Transferir" msgid "Don't save" msgstr "No desar" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Descartar" msgid "Click the right mouse button to display the full text." msgstr "Feu clic amb el botó dret del ratolí per mostrar el text complet." @@ -7792,28 +7884,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7831,9 +7917,6 @@ msgstr "Mostra tots els perfils ( inclosos els incompatibles )" msgid "Select presets to compare" msgstr "Seleccioneu els perfils a comparar" -msgid "Transfer" -msgstr "Transferir" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "Només es pot transferir al perfil actiu actual perquè s'ha modificat." @@ -8332,6 +8415,39 @@ msgstr "Fet" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Carregar Filament" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmar i Actualitzar el broquet" @@ -10662,6 +10778,9 @@ msgstr "Suport Cúbic" msgid "Lightning" msgstr "Llampec" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Longitud d'ancoratge de farciment poc dens" @@ -10864,15 +10983,15 @@ msgstr "Velocitat màxima del ventilador a la capa" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "La velocitat del ventilador augmentarà linealment de zero a la capa " -"\"close_fan_the_first_x_layers\" al màxim a la capa " -"\"full_fan_speed_layer\". S'ignorarà \"full_fan_speed_layer\" si és inferior " -"a \"close_fan_the_first_x_layers\", en aquest cas el ventilador funcionarà a " +"\"close_fan_the_first_x_layers\" al màxim a la capa \"full_fan_speed_layer" +"\". S'ignorarà \"full_fan_speed_layer\" si és inferior a " +"\"close_fan_the_first_x_layers\", en aquest cas el ventilador funcionarà a " "la velocitat màxima permesa a la capa \"close_fan_the_first_x_layers\" + 1." msgid "Support interface fan speed" @@ -13859,6 +13978,9 @@ msgstr "Cancel·lat" msgid "load_obj: failed to parse" msgstr "load_obj: no s'ha pogut analitzar" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "El fitxer conté polígons amb més de 4 vèrtexs." @@ -13985,6 +14107,14 @@ msgstr "Seleccioneu el filament per calibrar." msgid "The input value size must be 3." msgstr "El valor de mida d'entrada ha de ser 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Connectant amb la impressora..." @@ -13996,6 +14126,19 @@ msgstr "" "El resultat del Calibratge de les Dinàmiques de Flux s'ha desat a la " "impressora" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Error intern" @@ -14304,9 +14447,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Paràmetres d'impressió" -msgid "- ℃" -msgstr "- °C" - msgid "Plate Type" msgstr "Tipus de placa" @@ -14355,12 +14495,6 @@ msgstr "Al valor k" msgid "Step value" msgstr "Valor del pas" -msgid "0.5" -msgstr "0,5" - -msgid "0.005" -msgstr "0,005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "El diàmetre del broquet s'ha sincronitzat des de la configuració d'impressora" @@ -14390,10 +14524,14 @@ msgstr "" msgid "Action" msgstr "Acció" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editeu el Calibratge de Dinàmiques de Flux" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -14402,13 +14540,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "Cerca de xarxa" @@ -14825,8 +14956,8 @@ msgstr "" "Vols reescriure'l?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Canviaríem el nom dels perfils seleccionats com a \"Proveïdor Tipus " @@ -15452,6 +15583,175 @@ msgstr "" "Cos del missatge: \"%1%\"\n" "Error: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -15882,6 +16182,47 @@ msgstr "" "augmentar adequadament la temperatura del llit pot reduir la probabilitat de " "deformació." +#~ msgid "Unload Filament" +#~ msgstr "Descarregar Filament" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Trieu una ranura AMS i premeu el botó \"Carregar\" o \"Descarregar\" per " +#~ "carregar o descarregar el filament automàticament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa Base" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "La importació a Orca Slicer ha fallat. Descarregueu el fitxer manualment " +#~ "i importeu-lo." + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0,5" + +#~ msgid "0.005" +#~ msgstr "0,005" + #~ msgid "active" #~ msgstr "actiu" @@ -15990,18 +16331,6 @@ msgstr "" #~ "No s'ha pogut realitzar l'operació booleana a les malles del model. Només " #~ "s'exportaran les parts positives." -#~ msgid "Transfer or discard changes" -#~ msgstr "Transferir o descartar canvis" - -#~ msgid "Old Value" -#~ msgstr "Valor antic" - -#~ msgid "New Value" -#~ msgstr "Valor nou" - -#~ msgid "Discard" -#~ msgstr "Descartar" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 5efa8aacff..cb3c5ce17a 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: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2023-09-30 15:15+0200\n" "Last-Translator: René Mošner \n" "Language-Team: \n" @@ -1918,6 +1918,12 @@ msgstr "Uspořádat" msgid "arrange current plate" msgstr "uspořádat aktuální podložku" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Automatické otáčení" @@ -2380,11 +2386,11 @@ msgstr "Automatické Doplnění" msgid "AMS not connected" msgstr "AMS není připojen" -msgid "Load Filament" -msgstr "Zavézt Filament" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Vysunout Filament" +msgid "Unload" +msgstr "Vysunout" msgid "Ext Spool" msgstr "Ext Cívka" @@ -2401,7 +2407,7 @@ msgstr "Zkusit znovu" msgid "Calibrating AMS..." msgstr "Kalibruji AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "Během kalibrace došlo k problému. Kliknutím zobrazíte řešení." msgid "Calibrate again" @@ -2442,10 +2448,8 @@ msgstr "Vezměte nový filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Vyberte slot AMS a poté stiskněte \" Načíst \" nebo \" Uvolnit \" pro " -"automatické načtení nebo vyjměte vlákno." msgid "Edit" msgstr "Upravit" @@ -3057,6 +3061,14 @@ msgstr "" "AMS bude pokračovat na další cívku se stejnými vlastnostmi filamentu " "automaticky, když dojde aktuální filament" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Soubor" @@ -3134,6 +3146,45 @@ msgstr "Vykonávají se postprodukční skripty" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Neznámá chyba při exportu G-kódu." @@ -3509,18 +3560,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Základní deska" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Neznámý" @@ -4055,7 +4094,7 @@ msgstr "Objem:" msgid "Size:" msgstr "Velikost:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4196,6 +4235,9 @@ msgstr "Náhled" msgid "Device" msgstr "Zařízení" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projekt" @@ -4235,6 +4277,9 @@ msgstr "Vytisknout vše" msgid "Send all" msgstr "Odeslat vše" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Klávesové zkratky" @@ -5025,9 +5070,6 @@ msgstr "Komora" msgid "Bed" msgstr "Podložka" -msgid "Unload" -msgstr "Vysunout" - msgid "Debug Info" msgstr "Informace o ladění" @@ -5211,9 +5253,6 @@ msgstr "Stav" msgid "Update" msgstr "Aktualizovat" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Znovu Nezobrazovat" @@ -5461,6 +5500,12 @@ msgstr "Povolit zvuky upozornění" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5912,18 +5957,23 @@ msgstr "Import modelu" msgid "prepare 3mf file..." msgstr "připravte soubor 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "stahuji projekt ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt stažen %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Import do Orca Sliceru selhal. Stáhněte soubor a proveďte jeho ruční import." msgid "Import SLA archive" msgstr "" @@ -6189,6 +6239,21 @@ msgstr "Imperiální" msgid "Units" msgstr "Jednotky" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6265,6 +6330,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6901,6 +6974,9 @@ msgstr "Automatická kalibrace průtoku pomocí Mikro Lidar" msgid "Modifying the device name" msgstr "Úprava názvu zařízení" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Odeslat do tiskárny SD kartu" @@ -6953,6 +7029,26 @@ msgstr "Časový limit pro obdržení hlášení o přihlášení vypršel" msgid "Unknown Failure" msgstr "Neznámá chyba" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Přihlaste se k tiskárně" @@ -7156,8 +7252,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Při nahrávání časosběru bez nástrojové hlavy se doporučuje přidat " "\"Timelapse Wipe Tower\" \n" @@ -7572,26 +7668,23 @@ msgstr "Nedefinováno" msgid "Unsaved Changes" msgstr "Neuložené změny" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Zahodit nebo ponechat změny" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Stará hodnota" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Nová hodnota" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Přenést" msgid "Don't save" msgstr "Neukládat" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Zahodit" msgid "Click the right mouse button to display the full text." msgstr "Kliknutím pravým tlačítkem myši zobrazíte celý text." @@ -7653,28 +7746,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7692,9 +7779,6 @@ msgstr "Zobrazit všechna přednastavení (včetně nekompatibilních)" msgid "Select presets to compare" msgstr "Zvolte přednastavení k porovnání" -msgid "Transfer" -msgstr "Přenést" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8176,6 +8260,39 @@ msgstr "Hotovo" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Zavézt Filament" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -10259,6 +10376,9 @@ msgstr "Kubický podepíraný" msgid "Lightning" msgstr "Blesky" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Délka kotvy vnitřní výplně" @@ -10454,10 +10574,10 @@ msgstr "Maximální otáčky ventilátoru ve vrstvě" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Otáčky ventilátoru se lineárně zvýší z nuly ve vrstvě " "\"close_fan_first_layers\" na maximum ve vrstvě \"full_fan_speed_layer\". " @@ -13237,6 +13357,9 @@ msgstr "Zrušeno" msgid "load_obj: failed to parse" msgstr "load_obj: nepodařilo se zpracovat" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Soubor obsahuje polygon s více než 4 vrcholy." @@ -13362,6 +13485,14 @@ msgstr "Vyberte prosím filament pro kalibraci." msgid "The input value size must be 3." msgstr "Velikost vstupní hodnoty musí být 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Připojování k tiskárně..." @@ -13371,6 +13502,19 @@ msgstr "Výsledek neúspěšného testu byl zahozen." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Výsledek kalibrace dynamiky průtoku byl uložen do tiskárny" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Interní chyba" @@ -13667,9 +13811,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametry tisku" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "Typ Podložky" @@ -13717,12 +13858,6 @@ msgstr "Do hodnoty k" msgid "Step value" msgstr "Krok hodnoty" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Průměr trysky byl synchronizován z Nastavení tiskárny" @@ -13750,10 +13885,14 @@ msgstr "Aktualizace historických záznamů kalibrace dynamiky průtoku probíh msgid "Action" msgstr "Akce" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Upravit kalibraci dynamiky průtoku" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13762,13 +13901,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "Vyhledávání v síti" @@ -14167,8 +14299,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14722,6 +14854,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14883,8 +15184,8 @@ msgid "" msgstr "" "Plochou na podložku\n" "Věděli jste, že můžete rychle nastavit orientaci modelu tak, aby jedna z " -"jeho stěn spočívala na tiskovém podloží? Vyberte funkci \"Plochou na " -"podložku\" nebo stiskněte klávesu F." +"jeho stěn spočívala na tiskovém podloží? Vyberte funkci \"Plochou na podložku" +"\" nebo stiskněte klávesu F." #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -15100,6 +15401,47 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "Vysunout Filament" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Vyberte slot AMS a poté stiskněte \" Načíst \" nebo \" Uvolnit \" pro " +#~ "automatické načtení nebo vyjměte vlákno." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Základní deska" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Import do Orca Sliceru selhal. Stáhněte soubor a proveďte jeho ruční " +#~ "import." + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + #~ msgid "active" #~ msgstr "aktivní" @@ -15199,18 +15541,6 @@ msgstr "" #~ "Nelze provést logickou operaci nad mashí modelů. Budou exportovány pouze " #~ "kladné části." -#~ msgid "Transfer or discard changes" -#~ msgstr "Zahodit nebo ponechat změny" - -#~ msgid "Old Value" -#~ msgstr "Stará hodnota" - -#~ msgid "New Value" -#~ msgstr "Nová hodnota" - -#~ msgid "Discard" -#~ msgstr "Zahodit" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 3c49c3d81b..6f046ab33d 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -1963,6 +1963,12 @@ msgstr "Anordnen" msgid "arrange current plate" msgstr "Aktuelle Druckplatte anordnen" +msgid "Reload All" +msgstr "Alles neu laden" + +msgid "reload all from disk" +msgstr "Alles von der Festplatte neu laden" + msgid "Auto Rotate" msgstr "Automatisch rotieren" @@ -2441,10 +2447,10 @@ msgstr "Automatisch nachfüllen" msgid "AMS not connected" msgstr "AMS nicht verbunden" -msgid "Load Filament" +msgid "Load" msgstr "Laden" -msgid "Unload Filament" +msgid "Unload" msgstr "Entladen" msgid "Ext Spool" @@ -2462,7 +2468,7 @@ msgstr "Wiederholen" msgid "Calibrating AMS..." msgstr "AMS kalibrieren..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Während der Kalibrierung ist ein Problem aufgetreten. Klicken Sie hier, um " "die Lösung zu sehen." @@ -2505,10 +2511,10 @@ msgstr "Neues Filament holen" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Wählen Sie einen AMS-Slot und drücken Sie dann \"Laden\" oder \"Entladen\", " -"um automatisch Filament zu laden oder zu entladen." +"Wählen Sie einen AMS-Steckplatz aus und drücken Sie dann die Schaltfläche " +"„Laden“ oder „Entladen“, um Filamente automatisch zu laden oder zu entladen." msgid "Edit" msgstr "Bearbeiten" @@ -3146,6 +3152,16 @@ msgstr "" "AMS wechselt automatisch zu einer anderen Spule mit denselben " "Filamenteigenschaften, wenn das aktuelle Filament leer ist." +msgid "Air Printing Detection" +msgstr "Luftdruckerkennung" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Erkennt Verstopfungen und Filamentabrieb und stoppt den Druck sofort, um " +"Zeit und Filament zu sparen." + msgid "File" msgstr "Datei" @@ -3226,6 +3242,63 @@ msgstr "Ausführen von Nachbearbeitungsskripten" msgid "Successfully executed post-processing script" msgstr "Nachbearbeitungsskript erfolgreich ausgeführt" +msgid "Unknown error occured during exporting G-code." +msgstr "" +"Unbekannter Fehler beim Exportieren des G-Codes aufgetreten." + + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. " +"Ist die SD-Karte schreibgeschützt?\n" +"Fehlermeldung: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. " +"Es könnte ein Problem mit dem Zielgerät geben. Versuchen Sie es erneut oder " +"verwenden Sie ein anderes Gerät. Der beschädigte Ausgabe-G-Code befindet sich " +"in %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Das Umbenennen des G-Codes nach dem Kopieren in den ausgewählten " +"Zielordner ist fehlgeschlagen. Der aktuelle Pfad ist %1%.tmp. Bitte versuchen " +"Sie es erneut." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Das Kopieren des temporären G-Codes wurde abgeschlossen, aber der ursprüngliche " +"Code unter %1% konnte während der Überprüfung des Kopiervorgangs nicht geöffnet " +"werden. Der Ausgabe-G-Code befindet sich in %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Das Kopieren des temporären G-Codes wurde abgeschlossen, aber der exportierte " +"Code konnte während der Überprüfung des Kopiervorgangs nicht geöffnet werden. " +"Der Ausgabe-G-Code befindet sich in %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G-Code-Datei exportiert nach %1%" + msgid "Unknown error when export G-code." msgstr "Unbekannter Fehler beim exportieren des G-Code." @@ -3629,18 +3702,6 @@ msgstr "Pause bei Fehler der ersten Schicht" msgid "Nozzle clog pause" msgstr "Pause bei Düsenverstopfung" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Mainboard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Unbekannt" @@ -4182,7 +4243,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Größe:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4325,6 +4386,9 @@ msgstr "Vorschau" msgid "Device" msgstr "Gerät" +msgid "Multi-device" +msgstr "Multi-Gerät" + msgid "Project" msgstr "Projekt" @@ -4366,6 +4430,9 @@ msgstr "Alle Platten drucken" msgid "Send all" msgstr "Sende alle" +msgid "Send to Multi-device" +msgstr "An Multi-Gerät senden" + msgid "Keyboard Shortcuts" msgstr "Tastaturkürzel" @@ -5193,9 +5260,6 @@ msgstr "Cham" msgid "Bed" msgstr "Druckbett" -msgid "Unload" -msgstr "Entladen" - msgid "Debug Info" msgstr "Debug-Informationen" @@ -5385,9 +5449,6 @@ msgstr "Status" msgid "Update" msgstr "Update" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Nicht erneut anzeigen" @@ -5425,6 +5486,8 @@ msgid "" "The 3mf file version is in Beta and it is newer than the current OrcaSlicer " "version." msgstr "" +"Die 3mf-Dateiversion ist in der Beta und neuer als die aktuelle OrcaSlicer- " +"Version." msgid "If you would like to try Orca Slicer Beta, you may click to" msgstr "" @@ -5637,6 +5700,12 @@ msgstr "Erlaube akustische Signale" msgid "Filament Tangle Detect" msgstr "Filamentverwicklung erkannt" +msgid "Nozzle Clumping Detection" +msgstr "Düsenverklumpen-Erkennung" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "Überprüfen Sie, ob die Düse durch Filament oder andere Fremdkörper verklumpt ist." + msgid "Nozzle Type" msgstr "Düsentyp" @@ -6107,19 +6176,25 @@ msgstr "Modell importieren" msgid "prepare 3mf file..." msgstr "3mf-Datei vorbereiten…" +msgid "Download failed, unknown file format." +msgstr "Download fehlgeschlagen, unbekanntes Dateiformat." + msgid "downloading project ..." msgstr "Projekt wird heruntergeladen..." +msgid "Download failed, File size exception." +msgstr "Download fehlgeschlagen, Dateigröße nicht erlaubt." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt heruntergeladen %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" "Der Import in Orca Slicer ist fehlgeschlagen. Bitte laden Sie die Datei " -"manuell herunter und importieren Sie sie." +"herunter und importieren Sie sie manuell." msgid "Import SLA archive" msgstr "SLA-Archiv importieren" @@ -6204,18 +6279,21 @@ msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " "will be kept. You may fix the meshes and try agian." msgstr "" +"Die Boolesche Operation auf den Modellnetzen kann nicht durchgeführt werden. " +"Nur positive Teile werden beibehalten. Sie können die Netze reparieren und " +"es erneut versuchen." #, boost-format msgid "Reason: part \"%1%\" is empty." -msgstr "" +msgstr "Grund: Teil \"%1%\" ist leer." #, boost-format msgid "Reason: part \"%1%\" does not bound a volume." -msgstr "" +msgstr "Grund: Teil \"%1%\" hat kein Volumen." #, boost-format msgid "Reason: part \"%1%\" has self intersection." -msgstr "" +msgstr "Grund: Teil \"%1%\" hat Selbstüberschneidung." #, boost-format msgid "Reason: \"%1%\" and another part have no intersection." @@ -6395,6 +6473,27 @@ msgstr "Imperial" msgid "Units" msgstr "Einheiten" +msgid "Allow only one OrcaSlicer instance" +msgstr "Nur eine OrcaSlicer-Instanz zulassen" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"Auf OSX läuft standardmäßig immer nur eine Instanz der App. Es ist jedoch " +"möglich, mehrere Instanzen derselben App von der Befehlszeile aus zu " +"starten. In diesem Fall erlaubt diese Einstellung nur eine Instanz." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Wenn dies aktiviert ist und OrcaSlicer gestartet wird, während bereits eine " +"andere Instanz von OrcaSlicer läuft, wird diese Instanz stattdessen " +"reaktiviert." + msgid "Home" msgstr "Startseite" @@ -6476,6 +6575,16 @@ msgstr "" "Wenn aktiviert, merkt sich Orca die Filament-/Prozesskonfiguration für jeden " "Drucker und wechselt automatisch." +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "Multi-Geräte-Verwaltung (nach Neustart von Studio wirksam)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Wenn diese Option aktiviert ist, können Sie eine Aufgabe gleichzeitig an " +"mehrere Geräte senden und mehrere Geräte verwalten." + msgid "Network" msgstr "Netzwerk" @@ -7052,8 +7161,8 @@ msgstr "" msgid "" "Timelapse is not supported because Print sequence is set to \"By object\"." msgstr "" -"Zeitraffer wird nicht unterstützt, da die Druckreihenfolge auf \"Nach " -"Objekt\" eingestellt ist." +"Zeitraffer wird nicht unterstützt, da die Druckreihenfolge auf \"Nach Objekt" +"\" eingestellt ist." msgid "Errors" msgstr "Fehler" @@ -7092,6 +7201,9 @@ msgid "" "If you changed your nozzle lately, please go to Device > Printer Parts to " "change settings." msgstr "" +"Ihr Düsendurchmesser in der gesliceten Datei stimmt nicht mit der " +"gemerkten Düse überein. Wenn Sie Ihre Düse kürzlich gewechselt haben, gehen " +"Sie zu Gerät > Drucker-Teile, um die Einstellungen zu ändern." #, c-format, boost-format msgid "" @@ -7138,6 +7250,9 @@ msgstr "Automatische Flusskalibrierung mit Micro Lidar" msgid "Modifying the device name" msgstr "Den Gerätenamen ändern" +msgid "Bind with Pin Code" +msgstr "Mit Pin-Code verbinden" + msgid "Send to Printer SD card" msgstr "An MicroSD-Karte des Druckers senden" @@ -7194,6 +7309,28 @@ msgstr "Zeitüberschreitung beim Empfang des Anmeldeberichts" msgid "Unknown Failure" msgstr "Unbekannter Fehler" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Bitte finden Sie den Pin-Code auf der Konto-Seite auf dem Druckerbildschirm " +"und geben Sie den Pin-Code unten ein." + +msgid "Can't find Pin Code?" +msgstr "Können Sie den Pin-Code nicht finden?" + +msgid "Pin Code" +msgstr "Pin-Code" + +msgid "Binding..." +msgstr "Bindung..." + +msgid "Please confirm on the printer screen" +msgstr "Bitte bestätigen Sie auf dem Druckerbildschirm" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Anmeldung fehlgeschlagen. Bitte überprüfen Sie den Pin-Code." + msgid "Log in printer" msgstr "Drucker anmelden" @@ -7428,13 +7565,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Wenn Sie einen Zeitraffer ohne Werkzeugkopf aufnehmen, wird empfohlen, einen " "\"Timelapse Wischturm\" hinzuzufügen, indem Sie mit der rechten Maustaste " -"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"-" -">\"Timelapse Wischturm\" wählen." +"auf die leere Position der Bauplatte klicken und \"Primitiv hinzufügen\"->" +"\"Timelapse Wischturm\" wählen." msgid "Line width" msgstr "Breite der Linie" @@ -7854,26 +7991,23 @@ msgstr "Undefiniert" msgid "Unsaved Changes" msgstr "Nicht gespeicherte Änderungen" -msgid "Actions For Unsaved Changes" -msgstr "Aktivitäten für nicht gespeicherte Änderungen" +msgid "Transfer or discard changes" +msgstr "Änderungen verwerfen oder beibehalten" -msgid "Preset Value" -msgstr "voreingestellter Wert" +msgid "Old Value" +msgstr "Alter Wert" -msgid "Modified Value" -msgstr "geänderter Wert" +msgid "New Value" +msgstr "Neuer Wert" -msgid "Transfer Modified Value" -msgstr "geänderten Wert übertragen" +msgid "Transfer" +msgstr "Übertragen" msgid "Don't save" msgstr "Nicht speichern" -msgid "Use Preset Value" -msgstr "voreingestellten Wert verwenden" - -msgid "Save Modified Value" -msgstr "geänderten Wert speichern" +msgid "Discard" +msgstr "Verwerfen" msgid "Click the right mouse button to display the full text." msgstr "" @@ -7937,41 +8071,33 @@ msgstr "Sie haben einige Einstellungen des Profils \"%1%\" geändert. " msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" "\n" -"Möchten Sie diese geänderten Einstellungen (geänderter Wert) speichern?" +"Sie können die geänderten Profilwerte speichern oder verwerfen." msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" "\n" -"Möchten Sie diese geänderten Einstellungen (geänderter Wert) nach dem " -"Wechsel des Profils beibehalten?" +"Sie können die geänderten Profilwerte speichern oder verwerfen oder wählen, " +"ob Sie die geänderten Werte in das neue Profil übertragen möchten." -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." + +msgid "You have previously modified your settings." msgstr "" -"Sie haben Ihre Einstellungen zuvor geändert und sind dabei, sie durch neue " -"zu überschreiben." +"Sie haben Ihre Einstellungen zuvor geändert." msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" "\n" -"Möchten Sie Ihre aktuellen geänderten Einstellungen beibehalten oder die " -"voreingestellten Einstellungen verwenden?" - -msgid "" -"\n" -"Do you want to save your current modified settings?" -msgstr "" -"\n" -"Möchten Sie Ihre aktuellen geänderten Einstellungen speichern?" +"Sie können die geänderten Profilwerte verwerfen oder wählen, ob Sie die " +"geänderten Werte in das neue Projekt übertragen möchten." msgid "Extruders count" msgstr "Anzahl der Extruder" @@ -7988,9 +8114,6 @@ msgstr "Alle Profile anzeigen (auch inkompatible)" msgid "Select presets to compare" msgstr "Wähle Voreinstellungen zum Vergleich aus" -msgid "Transfer" -msgstr "Übertragen" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8486,6 +8609,39 @@ msgstr "Erledigt" msgid "resume" msgstr "Fortsetzen" +msgid "Resume Printing" +msgstr "Druck fortsetzen" + +msgid "Resume Printing(defects acceptable)" +msgstr "Druck fortsetzen (Fehler akzeptabel)" + +msgid "Resume Printing(problem solved)" +msgstr "Druck fortsetzen (Problem gelöst)" + +msgid "Stop Printing" +msgstr "Druck abbrechen" + +msgid "Check Assistant" +msgstr "Assistent überprüfen" + +msgid "Filament Extruded, Continue" +msgstr "Filament extrudiert, fortsetzen" + +msgid "Not Extruded Yet, Retry" +msgstr "Noch nicht extrudiert, erneut versuchen" + +msgid "Finished, Continue" +msgstr "Fertig, fortsetzen" + +msgid "Load Filament" +msgstr "Laden" + +msgid "Filament Loaded, Resume" +msgstr "Filament geladen, fortsetzen" + +msgid "View Liveview" +msgstr "Live-Ansicht anzeigen" + msgid "Confirm and Update Nozzle" msgstr "Bestätigen und Düse aktualisieren" @@ -10821,6 +10977,9 @@ msgstr "Kubisch Stützen" msgid "Lightning" msgstr "Blitz" +msgid "Cross Hatch" +msgstr "Kreuzschraffur" + msgid "Sparse infill anchor length" msgstr "Länge des Infill-Ankers" @@ -11031,13 +11190,13 @@ msgstr "Volle Lüfterdrehzahl ab Schicht" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" -"Die Lüftergeschwindigkeit wird linear von Null bei der " -"Schicht\"close_fan_the_first_x_layers\" auf das Maximum bei der Schicht " +"Die Lüftergeschwindigkeit wird linear von Null bei der Schicht" +"\"close_fan_the_first_x_layers\" auf das Maximum bei der Schicht " "\"full_fan_speed_layer\" erhöht. \"full_fan_speed_layer\" wird ignoriert, " "wenn es niedriger ist als \"close_fan_the_first_x_layers\",in diesem Fall " "läuft der Lüfter bei Schicht \"close_fan_the_first_x_layers\"+ 1 mit maximal " @@ -14037,6 +14196,9 @@ msgstr "Abgebrochen" msgid "load_obj: failed to parse" msgstr "load_obj: konnte nicht analysiert werden" +msgid "load mtl in obj: failed to parse" +msgstr "Laden von mtl in obj: konnte nicht analysiert werden" + msgid "The file contains polygons with more than 4 vertices." msgstr "Die Datei enthält Polygone mit mehr als 4 Eckpunkten." @@ -14165,6 +14327,19 @@ msgstr "Bitte wählen Sie das Filament zur Kalibrierung aus." msgid "The input value size must be 3." msgstr "Die Eingabewertgröße muss 3 sein." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Dieser Maschinentyp kann nur 16 historische Ergebnisse pro Düse speichern. " +"Sie können die vorhandenen historischen Ergebnisse löschen und dann die " +"Kalibrierung starten. Oder Sie können die Kalibrierung fortsetzen, aber Sie " +"können keine neuen Kalibrierungshistorien erstellen. \n" +"Möchten Sie die Kalibrierung dennoch fortsetzen?" + msgid "Connecting to printer..." msgstr "Verbindung zum Drucker wird hergestellt..." @@ -14174,6 +14349,24 @@ msgstr "Das fehlgeschlagene Testergebnis wurde verworfen." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Flussdynamik-Kalibrierungsergebnis wurde auf dem Drucker gespeichert" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Es gibt bereits ein historisches Kalibrierungsergebnis mit dem gleichen " +"Namen: %s. Nur eines der Ergebnisse mit dem gleichen Namen wird gespeichert. " +"Sind Sie sicher, dass Sie das historische Ergebnis überschreiben möchten?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Dieser Maschinentyp kann nur %d historische Ergebnisse pro Düse speichern. " +"Dieses Ergebnis wird nicht gespeichert." + msgid "Internal Error" msgstr "Interner Fehler" @@ -14484,9 +14677,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Druckparameter" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "Druckbetttyp" @@ -14535,12 +14725,6 @@ msgstr "bis zum k Wert" msgid "Step value" msgstr "Schrittweite" -msgid "0.5" -msgstr "0,5" - -msgid "0.005" -msgstr "0,005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Der Düsendurchmesser wurde aus den Druckereinstellungen synchronisiert" @@ -14568,10 +14752,14 @@ msgstr "Erneuern der historischen Flussdynamik-Kalibrierungsdatensätze" msgid "Action" msgstr "Aktivität" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "Dieser Maschinentyp kann nur %d historische Ergebnisse pro Düse speichern." + msgid "Edit Flow Dynamics Calibration" msgstr "Ändern der Flussdynamik-Kalibrierung" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "Neue Flussdynamik-Kalibrierung" msgid "Ok" @@ -14580,16 +14768,6 @@ msgstr "Ok" msgid "The filament must be selected." msgstr "Das Filament muss ausgewählt werden." -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" -"Es gibt bereits ein historisches Kalibrierungsergebnis mit dem gleichen " -"Namen: %s. Nur eines der Ergebnisse mit dem gleichen Namen wird gespeichert. " -"Sind Sie sicher, dass Sie das historische Ergebnis überschreiben möchten?" - msgid "Network lookup" msgstr "Netzwerk durchsuchen" @@ -15013,8 +15191,8 @@ msgstr "" "Möchten Sie es überschreiben?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Wir würden die Voreinstellungen als \"Hersteller Typ Seriennummer @Drucker, " @@ -15655,6 +15833,272 @@ msgstr "" "Nachrichtentext: \"%1%\"\n" "Fehler: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Es hat eine kleine Schichthöhe und führt zu fast vernachlässigbaren " +"Schichtlinien und hoher Druckqualität. Es ist für die meisten allgemeinen " +"Druckfälle geeignet." + + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es niedrigere " +"Geschwindigkeiten und Beschleunigungen, und das spärliche Füllmuster ist " +"Gyroid. Daher ergibt sich eine wesentlich höhere Druckqualität, aber eine " +"viel längere Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine etwas größere " +"Schichthöhe und führt zu fast vernachlässigbaren Schichtlinien und einer " +"etwas kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine größere " +"Schichthöhe und führt zu leicht sichtbaren Schichtlinien, aber einer kürzeren " +"Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu fast unsichtbaren Schichtlinien und einer höheren " +"Druckqualität, aber einer kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es kleinere Schicht-" +"linien, niedrigere Geschwindigkeiten und Beschleunigungen, und das spärliche " +"Füllmuster ist Gyroid. Daher ergibt sich fast unsichtbare Schichtlinien und " +"eine wesentlich höhere Druckqualität, aber eine wesentlich längere Druckzeit." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu minimalen Schichtlinien und einer höheren " +"Druckqualität, aber einer kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,2 mm Düse hat es kleinere Schicht-" +"linien, niedrigere Geschwindigkeiten und Beschleunigungen, und das spärliche " +"Füllmuster ist Gyroid. Daher ergibt sich minimale Schichtlinien und eine " +"wesentlich höhere Druckqualität, aber eine wesentlich längere Druckzeit." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Es hat eine allgemeine Schichthöhe und führt zu allgemeinen Schichtlinien " +"und Druckqualität. Es ist für die meisten allgemeinen Druckfälle geeignet." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es mehr Wand-Schleifen " +"und eine höhere spärliche Fülldichte. Daher ergibt sich eine höhere " +"Festigkeit der Drucke, aber mehr Filamentverbrauch und eine längere " +"Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine größere " +"Schichthöhe und führt zu deutlicheren Schichtlinien und einer niedrigeren " +"Druckqualität, aber einer etwas kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine größere " +"Schichthöhe und führt zu deutlicheren Schichtlinien und einer niedrigeren " +"Druckqualität, aber einer kürzeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger deutlichen Schichtlinien und einer höheren " +"Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe, niedrigere Geschwindigkeiten und Beschleunigungen, und das " +"spärliche Füllmuster ist Gyroid. Daher ergibt sich weniger deutliche " +"Schichtlinien und eine wesentlich höhere Druckqualität, aber eine wesentlich " +"längere Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu fast vernachlässigbaren Schichtlinien und einer " +"höheren Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe, niedrigere Geschwindigkeiten und Beschleunigungen, und das " +"spärliche Füllmuster ist Gyroid. Daher ergibt sich fast vernachlässigbare " +"Schichtlinien und eine wesentlich höhere Druckqualität, aber eine wesentlich " +"längere Druckzeit." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,4 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu fast vernachlässigbaren Schichtlinien und einer " +"längeren Druckzeit." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Es hat eine große Schichthöhe und führt zu deutlichen Schichtlinien und " +"normaler Druckqualität und Druckzeit." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es mehr Wand-Schleifen " +"und eine höhere spärliche Fülldichte. Daher ergibt sich eine höhere " +"Festigkeit der Drucke, aber mehr Filamentverbrauch und eine längere " +"Druckzeit." + + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine größere " +"Schichthöhe und führt zu deutlicheren Schichtlinien und einer niedrigeren " +"Druckqualität, aber einer kürzeren Druckzeit in einigen Druckfällen." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine größere " +"Schichthöhe und führt zu wesentlich deutlicheren Schichtlinien und einer " +"viel niedrigeren Druckqualität, aber einer kürzeren Druckzeit in einigen " +"Druckfällen." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger deutlichen Schichtlinien und einer leicht " +"höheren Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,6 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger deutlichen Schichtlinien und einer höheren " +"Druckqualität, aber einer längeren Druckzeit." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Es hat eine sehr große Schichthöhe und führt zu sehr deutlichen Schichtlinien, " +"niedriger Druckqualität und allgemeiner Druckzeit." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine größere " +"Schichthöhe und führt zu sehr deutlichen Schichtlinien und einer viel " +"niedrigeren Druckqualität, aber einer kürzeren Druckzeit in einigen " +"Druckfällen." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine viel größere " +"Schichthöhe und führt zu extrem deutlichen Schichtlinien und einer viel " +"niedrigeren Druckqualität, aber einer wesentlich kürzeren Druckzeit in " +"einigen Druckfällen." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine etwas kleinere " +"Schichthöhe und führt zu etwas weniger, aber immer noch deutlichen " +"Schichtlinien und einer leicht höheren Druckqualität, aber einer längeren " +"Druckzeit in einigen Druckfällen." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"Im Vergleich zum Standardprofil einer 0,8 mm Düse hat es eine kleinere " +"Schichthöhe und führt zu weniger, aber immer noch deutlichen Schichtlinien " +"und einer leicht höheren Druckqualität, aber einer längeren Druckzeit in " +"einigen Druckfällen." + msgid "Connected to Obico successfully!" msgstr "Erfolgreich mit Obico verbunden!" @@ -16097,6 +16541,107 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Aktivitäten für nicht gespeicherte Änderungen" + +#~ msgid "Preset Value" +#~ msgstr "voreingestellter Wert" + +#~ msgid "Modified Value" +#~ msgstr "geänderter Wert" + +#~ msgid "Transfer Modified Value" +#~ msgstr "geänderten Wert übertragen" + +#~ msgid "Use Preset Value" +#~ msgstr "voreingestellten Wert verwenden" + +#~ msgid "Save Modified Value" +#~ msgstr "geänderten Wert speichern" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie diese geänderten Einstellungen (geänderter Wert) speichern?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie diese geänderten Einstellungen (geänderter Wert) nach dem " +#~ "Wechsel des Profils beibehalten?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Sie haben Ihre Einstellungen zuvor geändert und sind dabei, sie durch " +#~ "neue zu überschreiben." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie Ihre aktuellen geänderten Einstellungen beibehalten oder die " +#~ "voreingestellten Einstellungen verwenden?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Möchten Sie Ihre aktuellen geänderten Einstellungen speichern?" + +#~ msgid "Unload Filament" +#~ msgstr "Entladen" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Wählen Sie einen AMS-Slot und drücken Sie dann \"Laden\" oder \"Entladen" +#~ "\", um automatisch Filament zu laden oder zu entladen." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Mainboard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Der Import in Orca Slicer ist fehlgeschlagen. Bitte laden Sie die Datei " +#~ "manuell herunter und importieren Sie sie." + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0,5" + +#~ msgid "0.005" +#~ msgstr "0,005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Neue Flussdynamik-Kalibrierung" + #~ msgid "" #~ "The 3mf file version is in Beta and it is newer than the current " #~ "OrcaSlicer version." @@ -16214,18 +16759,6 @@ msgstr "" #~ "Eine boolesche Operation kann für Modellnetze nicht ausgeführt werden. Es " #~ "werden nur positive Teile exportiert." -#~ msgid "Transfer or discard changes" -#~ msgstr "Änderungen verwerfen oder beibehalten" - -#~ msgid "Old Value" -#~ msgstr "Alter Wert" - -#~ msgid "New Value" -#~ msgstr "Neuer Wert" - -#~ msgid "Discard" -#~ msgstr "Verwerfen" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -16403,8 +16936,8 @@ msgstr "" #~ msgstr "Keine dünnen Schichten (EXPERIMENTELL)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" +#~ "\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "Wir würden die Voreinstellungen als \"Hersteller Typ Seriennummer " diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 00eea2416e..0e8af19aea 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1893,6 +1893,12 @@ msgstr "Arrange" msgid "arrange current plate" msgstr "Arrange current plate" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Auto Rotate" @@ -2348,10 +2354,10 @@ msgstr "" msgid "AMS not connected" msgstr "AMS not connected" -msgid "Load Filament" -msgstr "Load" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "Unload" msgid "Ext Spool" @@ -2369,8 +2375,8 @@ msgstr "Retry" msgid "Calibrating AMS..." msgstr "Calibrating AMS..." -msgid "A problem occured during calibration. Click to view the solution." -msgstr "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." +msgstr "A problem occurred during calibration. Click to view the solution." msgid "Calibrate again" msgstr "Calibrate again" @@ -2410,10 +2416,8 @@ msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Choose an AMS slot then press \"Load\" or \"Unload\" to automatically load " -"or unload filament." msgid "Edit" msgstr "Edit" @@ -3015,6 +3019,14 @@ msgstr "" "AMS will continue to another spool with the same filament properties " "automatically when current filament runs out." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "File" @@ -3094,6 +3106,45 @@ msgstr "Running post-processing scripts" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Unknown error with G-code export" @@ -3462,18 +3513,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Unknown" @@ -3996,7 +4035,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Size:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4136,6 +4175,9 @@ msgstr "Preview" msgid "Device" msgstr "Device" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Project" @@ -4175,6 +4217,9 @@ msgstr "Print all" msgid "Send all" msgstr "Send all" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Keyboard Shortcuts" @@ -4950,9 +4995,6 @@ msgstr "Cham" msgid "Bed" msgstr "Bed" -msgid "Unload" -msgstr "Unload" - msgid "Debug Info" msgstr "Debug Info" @@ -5122,9 +5164,6 @@ msgstr "Status" msgid "Update" msgstr "Update" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Don't show again" @@ -5370,6 +5409,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5808,15 +5853,21 @@ msgstr "Importing Model" msgid "prepare 3mf file..." msgstr "preparing 3mf file..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "downloading project ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Project downloaded %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -6083,6 +6134,21 @@ msgstr "Imperial" msgid "Units" msgstr "Units" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6159,6 +6225,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6792,6 +6866,9 @@ msgstr "" msgid "Modifying the device name" msgstr "Modifying the device name" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Send to Printer MicroSD card" @@ -6844,6 +6921,26 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Unknown Failure" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Log in printer" @@ -7046,13 +7143,13 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgid "Line width" msgstr "Line width" @@ -7448,26 +7545,23 @@ msgstr "Undefined" msgid "Unsaved Changes" msgstr "unsaved changes" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Transfer or discard changes" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Old value" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "New Value" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Transfer" msgid "Don't save" msgstr "Don't save" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Discard" msgid "Click the right mouse button to display the full text." msgstr "Click the right mouse button to display the full text." @@ -7529,28 +7623,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7568,9 +7656,6 @@ msgstr "Show all presets (including incompatible)" msgid "Select presets to compare" msgstr "Select presets to compare" -msgid "Transfer" -msgstr "Transfer" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8043,6 +8128,39 @@ msgstr "Done" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Load" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -10039,6 +10157,9 @@ msgstr "Support Cubic" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10208,10 +10329,10 @@ msgstr "Full fan speed at layer" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" msgid "Support interface fan speed" @@ -12786,6 +12907,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12902,6 +13026,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -12911,6 +13043,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -13136,9 +13281,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13182,12 +13324,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -13215,10 +13351,14 @@ msgstr "" msgid "Action" msgstr "" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13227,13 +13367,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -13614,8 +13747,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14159,6 +14292,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14531,6 +14833,31 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "Unload" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" to automatically " +#~ "load or unload filament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + #~ msgid "active" #~ msgstr "active" @@ -14626,18 +14953,6 @@ msgstr "" #~ "Unable to perform boolean operation on model meshes. Only positive parts " #~ "will be exported." -#~ msgid "Transfer or discard changes" -#~ msgstr "Transfer or discard changes" - -#~ msgid "Old Value" -#~ msgstr "Old value" - -#~ msgid "New Value" -#~ msgstr "New Value" - -#~ msgid "Discard" -#~ msgstr "Discard" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index b3fed2c507..dcfac06c88 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: Carlos Fco. Caruncho Serrano \n" "Language-Team: \n" @@ -1970,6 +1970,12 @@ msgstr "Organizar" msgid "arrange current plate" msgstr "posicionar la bandeja actual" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rotación Automática" @@ -2435,11 +2441,11 @@ msgstr "Auto Rellenado" msgid "AMS not connected" msgstr "AMS no conectado" -msgid "Load Filament" -msgstr "Cargar" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Descargar" +msgid "Unload" +msgstr "Descarga" msgid "Ext Spool" msgstr "Carrete Externo" @@ -2456,7 +2462,7 @@ msgstr "Reintentar" msgid "Calibrating AMS..." msgstr "Calibración de AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Se ha producido un problema durante la calibración. Haga clic para ver la " "solución." @@ -2499,10 +2505,8 @@ msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Elija una ranura AMS y pulse el botón \"Cargar\" o \"Descargar\" para cargar " -"o descargar automáticamente el filamento." msgid "Edit" msgstr "Editar" @@ -3128,6 +3132,14 @@ msgstr "" "El AMS continuará con otra bobina con las mismas propiedades de filamento " "automáticamente cuando el filamento se termine" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Archivo" @@ -3207,6 +3219,45 @@ msgstr "Ejecutando scripts de post-procesado" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Error desconocido al exportar el G-Code." @@ -3602,18 +3653,6 @@ msgstr "Pausa de error de primera capa" msgid "Nozzle clog pause" msgstr "Pausa de obstrucción de boquilla" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Placa Base" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Desconocido" @@ -4153,7 +4192,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Tamaño:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4295,6 +4334,9 @@ msgstr "Previsualización" msgid "Device" msgstr "Dispositivo" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Proyecto" @@ -4334,6 +4376,9 @@ msgstr "Imprimir todo" msgid "Send all" msgstr "Mandar todo" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Atajos de teclado" @@ -5128,9 +5173,6 @@ msgstr "Costura" msgid "Bed" msgstr "Cama" -msgid "Unload" -msgstr "Descarga" - msgid "Debug Info" msgstr "Información de Depuración" @@ -5320,9 +5362,6 @@ msgstr "Estado" msgid "Update" msgstr "Actualizar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "No mostrar de nuevo" @@ -5568,6 +5607,12 @@ msgstr "Permitir Sonido de Aviso" msgid "Filament Tangle Detect" msgstr "Detección de Enredos de Filamentos" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -6033,19 +6078,23 @@ msgstr "Importando modelo" msgid "prepare 3mf file..." msgstr "preparar el archivo 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "descargando proyecto..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Proyecto descargado %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"La importación a Orca Slicer ha fallado. Descargue el archivo e impórtelo " -"manualmente." msgid "Import SLA archive" msgstr "Importar archivo SLA" @@ -6322,6 +6371,21 @@ msgstr "Imperial" msgid "Units" msgstr "Unidades" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Página de Inicio" @@ -6400,6 +6464,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "Red" @@ -7052,6 +7124,9 @@ msgstr "Calibración automática de caudal usando Micro Lidar" msgid "Modifying the device name" msgstr "Modificar el nombre del dispositivo" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Enviar a la tarjeta SD de la impresora" @@ -7109,6 +7184,26 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Error Desconocido" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Iniciar sesión en la impresora" @@ -7326,8 +7421,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Cuando grabamos timelapse sin cabezal de impresión, es recomendable añadir " "un \"Torre de Purga de Intervalo\" \n" @@ -7751,26 +7846,23 @@ msgstr "No definido" msgid "Unsaved Changes" msgstr "Cambios No guardados" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Descartar o mantener los cambios" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Valor Antiguo" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Nuevo Valor" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Transferir" msgid "Don't save" msgstr "No guardar" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Descartar" msgid "Click the right mouse button to display the full text." msgstr "Pulse el botón derecho del ratón para mostrar el texto completo." @@ -7833,28 +7925,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7872,9 +7958,6 @@ msgstr "Mostrar todos los perfiles (incluyendo los compatibles)" msgid "Select presets to compare" msgstr "Seleccionar perfiles para comparar" -msgid "Transfer" -msgstr "Transferir" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8367,6 +8450,39 @@ msgstr "Hecho" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Cargar" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmar y Actualizar la Boquilla" @@ -10710,6 +10826,9 @@ msgstr "Soporte Cúbico" msgid "Lightning" msgstr "Rayo" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Longitud del anclaje de relleno de baja densidad" @@ -10914,10 +11033,10 @@ msgstr "Velocidad máxima del ventilador en la capa" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "La velocidad de ventilador se incrementará linealmente de cero a " "\"close_fan_the_first_x_layers\" al máximo de capa \"full_fan_speed_layer\". " @@ -13412,10 +13531,9 @@ msgstr "" "NOTA: Las superficies inferior y superior no se verán afectadas por este " "valor para evitar huecos visuales en el exterior del modelo. Ajuste \"Umbral " "de una perímetro\" en la configuración avanzada para ajustar la sensibilidad " -"de lo que se considera una superficie superior. El \"Umbral de una " -"perímetro\" sólo es visible si este valor es superior al valor " -"predeterminado de 0,5, o si las superficies superiores de una soel perímetro " -"están activadas." +"de lo que se considera una superficie superior. El \"Umbral de una perímetro" +"\" sólo es visible si este valor es superior al valor predeterminado de 0,5, " +"o si las superficies superiores de una soel perímetro están activadas." msgid "First layer minimum wall width" msgstr "Ancho mínimo del perímetro de la primera capa" @@ -13914,6 +14032,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -14039,6 +14160,14 @@ msgstr "Por favor, seleccione el filamento para calibrar." msgid "The input value size must be 3." msgstr "El valor de tamaño de entrada debe ser 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Conectando a la impresora." @@ -14050,6 +14179,19 @@ msgstr "" "El resultado de la Calibración de Dinámicas de Flujo se ha salvado en la " "impresora" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Error interno" @@ -14115,12 +14257,12 @@ msgstr "" "wiki.\n" "\n" "Normalmente la calibración es innecesaria. Cuando se inicia una impresión de " -"un solo color/material, con la opción \"Calibración de la dinámica de " -"caudal\" marcada en el menú de inicio de impresión, la impresora seguirá el " -"método antiguo, calibrar el filamento antes de la impresión; Cuando se " -"inicia una impresión de varios colores/materiales, la impresora utilizará el " -"parámetro de compensación por defecto para el filamento durante cada cambio " -"de filamento que tendrá un buen resultado en la mayoría de los casos.\n" +"un solo color/material, con la opción \"Calibración de la dinámica de caudal" +"\" marcada en el menú de inicio de impresión, la impresora seguirá el método " +"antiguo, calibrar el filamento antes de la impresión; Cuando se inicia una " +"impresión de varios colores/materiales, la impresora utilizará el parámetro " +"de compensación por defecto para el filamento durante cada cambio de " +"filamento que tendrá un buen resultado en la mayoría de los casos.\n" "\n" "Tenga en cuenta que hay algunos casos en los que el resultado de la " "calibración no es fiable: el uso de una placa de textura para hacer la " @@ -14362,9 +14504,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parámetros de Impresión" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "Plate Type" @@ -14414,12 +14553,6 @@ msgstr "Al valor k" msgid "Step value" msgstr "Valor del paso" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "El diámetro de la boquilla has sido sincronizado desde los ajustes de " @@ -14450,10 +14583,14 @@ msgstr "" msgid "Action" msgstr "Acción" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editar Calibración de Dinámicas de Flujo" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -14462,13 +14599,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "Búsqueda de red" @@ -14887,8 +15017,8 @@ msgstr "" "¿Quieres reescribirlo?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Cambiaríamos el nombre de los preajustes a \"Número de serie del Vendedor " @@ -15514,6 +15644,175 @@ msgstr "" "Cuerpo del mensaje: \"%1%\" \n" "Error: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "¡Conectado a Obico con éxito!" @@ -15950,6 +16249,47 @@ msgstr "" "aumentar adecuadamente la temperatura del lecho térmico puede reducir la " "probabilidad de deformaciones." +#~ msgid "Unload Filament" +#~ msgstr "Descargar" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Elija una ranura AMS y pulse el botón \"Cargar\" o \"Descargar\" para " +#~ "cargar o descargar automáticamente el filamento." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa Base" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "La importación a Orca Slicer ha fallado. Descargue el archivo e impórtelo " +#~ "manualmente." + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + #~ msgid "active" #~ msgstr "activo" @@ -16057,18 +16397,6 @@ msgstr "" #~ "Unable to perform boolean operation on model meshes. Only positive parts " #~ "will be exported." -#~ msgid "Transfer or discard changes" -#~ msgstr "Descartar o mantener los cambios" - -#~ msgid "Old Value" -#~ msgstr "Valor Antiguo" - -#~ msgid "New Value" -#~ msgstr "Nuevo Valor" - -#~ msgid "Discard" -#~ msgstr "Descartar" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -16220,8 +16548,8 @@ msgstr "" #~ msgstr "Capas de baja densidad (EXPERIMENTAL)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" +#~ "\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "Cambiaremos el nombre de los perfiles a \"Tipo Número de Serie @impresora " diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 808fa612fd..e68bc4b18c 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: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -1978,6 +1978,12 @@ msgstr "Organiser" msgid "arrange current plate" msgstr "organiser la plaque actuelle" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rotation automatique" @@ -2443,11 +2449,11 @@ msgstr "Recharge Automatique" msgid "AMS not connected" msgstr "AMS non connecté" -msgid "Load Filament" -msgstr "Charger" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Déchargement" +msgid "Unload" +msgstr "Décharger" msgid "Ext Spool" msgstr "Bobine Ext" @@ -2464,7 +2470,7 @@ msgstr "Réessayer" msgid "Calibrating AMS..." msgstr "Étalonnage de l'AMS…" -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Un problème est survenu lors de la calibration. Cliquez pour voir la " "solution." @@ -2507,10 +2513,8 @@ msgstr "Saisir un nouveau filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Choisissez un emplacement AMS puis appuyez sur le bouton correspondant pour " -"Charger ou Décharger le filament." msgid "Edit" msgstr "Éditer" @@ -3151,6 +3155,14 @@ msgstr "" "L'AMS passera automatiquement à une autre bobine avec les mêmes propriétés " "de filament lorsque la bobine actuelle est épuisé" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fichier" @@ -3230,6 +3242,45 @@ msgstr "Exécution de scripts de post-traitement" msgid "Successfully executed post-processing script" msgstr "Le script de post-traitement a été exécuté avec succès" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Erreur inconnue lors de l'exportation du G-code." @@ -3623,18 +3674,6 @@ msgstr "Pause en cas d'erreur de la première couche" msgid "Nozzle clog pause" msgstr "Pause en cas de buse bouchée" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Carte mère" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Inconnu" @@ -4172,7 +4211,7 @@ msgstr "Le volume:" msgid "Size:" msgstr "Taille:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4316,6 +4355,9 @@ msgstr "Aperçu" msgid "Device" msgstr "Appareil" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projet" @@ -4355,6 +4397,9 @@ msgstr "Tout imprimer" msgid "Send all" msgstr "Tout envoyer" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Raccourcis Clavier" @@ -5183,9 +5228,6 @@ msgstr "Chamb" msgid "Bed" msgstr "Plateau" -msgid "Unload" -msgstr "Décharger" - msgid "Debug Info" msgstr "Les informations de débogage" @@ -5373,9 +5415,6 @@ msgstr "État" msgid "Update" msgstr "Mise à jour" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Ne plus afficher" @@ -5624,6 +5663,12 @@ msgstr "Autoriser le son d’invite" msgid "Filament Tangle Detect" msgstr "Détection de filament coincé" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "Type de buse" @@ -6092,19 +6137,23 @@ msgstr "Importation du modèle" msgid "prepare 3mf file..." msgstr "préparation du fichier 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "téléchargement du projet..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projet téléchargé à %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"L’importation vers OrcaSlicer a échoué. Veuillez télécharger le fichier et " -"l’importer manuellement." msgid "Import SLA archive" msgstr "Importer les archives SLA" @@ -6390,6 +6439,21 @@ msgstr "Impérial" msgid "Units" msgstr "Unités" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Accueil" @@ -6482,6 +6546,14 @@ msgstr "" "Si cette option est activée, Orca se souviendra de la configuration du " "filament/processus pour chaque imprimante et la modifiera automatiquement." +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "Réseau" @@ -7154,6 +7226,9 @@ msgstr "Calibration automatique du débit à l’aide du Micro-Lidar" msgid "Modifying the device name" msgstr "Modification du nom de l'appareil" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Envoyer sur la carte SD de l'imprimante" @@ -7211,6 +7286,26 @@ msgstr "Délai d'expiration du rapport de connexion" msgid "Unknown Failure" msgstr "Erreur inconnue" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Connectez-vous à l'imprimante" @@ -7450,8 +7545,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Lorsque vous enregistrez un timelapse sans tête d’outil, il est recommandé " "d’ajouter une \"Tour d’essuyage timelapse\".\n" @@ -7603,9 +7698,9 @@ msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool " -"plate\") est installé. Une valeur à 0 signifie que ce filament ne peut pas " -"être imprimé sur le plateau froid." +"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool plate" +"\") est installé. Une valeur à 0 signifie que ce filament ne peut pas être " +"imprimé sur le plateau froid." msgid "Engineering plate" msgstr "Plaque Engineering" @@ -7882,26 +7977,23 @@ msgstr "Undef" msgid "Unsaved Changes" msgstr "Modifications non enregistrées" -msgid "Actions For Unsaved Changes" -msgstr "Actions pour les changements non enregistrés" +msgid "Transfer or discard changes" +msgstr "Ignorer ou conserver les modifications" -msgid "Preset Value" -msgstr "Valeur prédéfinie" +msgid "Old Value" +msgstr "Ancienne valeur" -msgid "Modified Value" -msgstr "Valeur modifiée" +msgid "New Value" +msgstr "Nouvelle Valeur" -msgid "Transfer Modified Value" -msgstr "Transfert de la valeur modifiée" +msgid "Transfer" +msgstr "Transférer" msgid "Don't save" msgstr "Ne pas enregistrer" -msgid "Use Preset Value" -msgstr "Utiliser la valeur prédéfinie" - -msgid "Save Modified Value" -msgstr "Enregistrer la valeur modifiée" +msgid "Discard" +msgstr "Ignorer" msgid "Click the right mouse button to display the full text." msgstr "" @@ -7965,41 +8057,23 @@ msgstr "Vous avez modifié certains paramètres du réglage prédéfini « %1% msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" -"\n" -"Souhaitez-vous enregistrer les paramètres modifiés (valeur modifiée) ?" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -"\n" -"Souhaitez-vous conserver ces paramètres modifiés (valeur modifiée) après " -"avoir changé de préréglage ?" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" -"Vous avez précédemment modifié vos paramètres et vous êtes sur le point de " -"les remplacer par de nouveaux." msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"\n" -"Souhaitez-vous conserver vos paramètres modifiés actuels ou utiliser des " -"paramètres prédéfinis ?" - -msgid "" -"\n" -"Do you want to save your current modified settings?" -msgstr "" -"\n" -"Souhaitez-vous sauvegarder vos paramètres modifiés actuels ?" msgid "Extruders count" msgstr "Nombre d'extrudeurs" @@ -8016,9 +8090,6 @@ msgstr "Afficher tous les préréglages (y compris incompatibles)" msgid "Select presets to compare" msgstr "Sélectionnez les préréglages à comparer" -msgid "Transfer" -msgstr "Transférer" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8524,6 +8595,39 @@ msgstr "Terminé" msgid "resume" msgstr "reprendre" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Charger" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmation et mise à jour de la buse" @@ -10893,6 +10997,9 @@ msgstr "Support Cubique" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Longueur de l’ancrage de remplissage interne" @@ -11100,10 +11207,10 @@ msgstr "Ventilateur à pleine vitesse à la couche" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "La vitesse du ventilateur augmentera de manière linéaire à partir de zéro à " "la couche \"close_fan_the_first_x_layers\" jusqu’au maximum à la couche " @@ -12747,8 +12854,8 @@ msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez " -"« Fermer les trous » pour fermer tous les trous du modèle." +"Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez « " +"Fermer les trous » pour fermer tous les trous du modèle." msgid "Regular" msgstr "Standard" @@ -13511,8 +13618,8 @@ msgid "" "Wipe tower is only compatible with relative mode. It is recommended on most " "printers. Default is checked" msgstr "" -"L’extrusion relative est recommandée lors de l’utilisation de l’option " -"« label_objects ». Certains extrudeurs fonctionnent mieux avec cette option " +"L’extrusion relative est recommandée lors de l’utilisation de l’option « " +"label_objects ». Certains extrudeurs fonctionnent mieux avec cette option " "non verrouillée (mode d’extrusion absolu). La tour d’essuyage n’est " "compatible qu’avec le mode relatif. Il est recommandé sur la plupart des " "imprimantes. L’option par défaut est cochée" @@ -14138,6 +14245,9 @@ msgstr "Annulé" msgid "load_obj: failed to parse" msgstr "load_obj : échec de l'analyse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Le fichier contient des polygones comportant plus de 4 sommets." @@ -14266,6 +14376,14 @@ msgstr "Veuillez sélectionner le filament à calibrer." msgid "The input value size must be 3." msgstr "La valeur saisie doit être 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Connexion à l’imprimante…" @@ -14277,6 +14395,22 @@ msgstr "" "Le résultat de la calibration dynamique du débit a été enregistré sur " "l’imprimante" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Il existe déjà un résultat d’étalonnage antérieur portant le même nom : %s. " +"Un seul des résultats portant le même nom est sauvegardé. Êtes-vous sûr de " +"vouloir remplacer le résultat antérieur ?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Erreur interne" @@ -14341,9 +14475,9 @@ msgstr "" "Wiki.\n" "\n" "Habituellement, la calibration est inutile. Lorsque vous démarrez une " -"impression d'une seule couleur/matériau, avec l'option \"Calibration du " -"débit\" cochée dans le menu de démarrage de l'impression, l'imprimante " -"suivra l'ancienne méthode de calibration du filament avant l'impression.\n" +"impression d'une seule couleur/matériau, avec l'option \"Calibration du débit" +"\" cochée dans le menu de démarrage de l'impression, l'imprimante suivra " +"l'ancienne méthode de calibration du filament avant l'impression.\n" "Lorsque vous démarrez une impression multi-couleurs/matériaux, l'imprimante " "utilise le paramètre de compensation par défaut pour le filament lors de " "chaque changement de filament, ce qui donne un bon résultat dans la plupart " @@ -14604,9 +14738,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Paramètres d’impression" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "Type de plaque" @@ -14654,12 +14785,6 @@ msgstr "À la valeur K" msgid "Step value" msgstr "Intervalle" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "Le diamètre de la buse a été synchronisé à partir des paramètres de " @@ -14689,11 +14814,15 @@ msgstr "Actualisation de historique des calibrations dynamiques du débit" msgid "Action" msgstr "Action" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editer la calibration dynamique du débit" -msgid "New Flow Dynamics Calibration" -msgstr "Nouvelle calibration de la dynamique du flux" +msgid "New Flow Dynamic Calibration" +msgstr "" msgid "Ok" msgstr "" @@ -14701,16 +14830,6 @@ msgstr "" msgid "The filament must be selected." msgstr "Le filament doit être sélectionné." -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" -"Il existe déjà un résultat d’étalonnage antérieur portant le même nom : %s. " -"Un seul des résultats portant le même nom est sauvegardé. Êtes-vous sûr de " -"vouloir remplacer le résultat antérieur ?" - msgid "Network lookup" msgstr "Recherche de réseau" @@ -15136,8 +15255,8 @@ msgstr "" "Voulez-vous le réécrire ?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Nous renommerions les préréglages en « Vendor Type Serial @printer you " @@ -15786,6 +15905,175 @@ msgstr "" "Corps du message : « %1% »\n" "Erreur : « %2% »" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "Connexion à Obico réussie !" @@ -16231,6 +16519,107 @@ msgstr "" "déformer, tels que l’ABS, une augmentation appropriée de la température du " "plateau chauffant peut réduire la probabilité de déformation." +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Actions pour les changements non enregistrés" + +#~ msgid "Preset Value" +#~ msgstr "Valeur prédéfinie" + +#~ msgid "Modified Value" +#~ msgstr "Valeur modifiée" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Transfert de la valeur modifiée" + +#~ msgid "Use Preset Value" +#~ msgstr "Utiliser la valeur prédéfinie" + +#~ msgid "Save Modified Value" +#~ msgstr "Enregistrer la valeur modifiée" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous enregistrer les paramètres modifiés (valeur modifiée) ?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous conserver ces paramètres modifiés (valeur modifiée) après " +#~ "avoir changé de préréglage ?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Vous avez précédemment modifié vos paramètres et vous êtes sur le point " +#~ "de les remplacer par de nouveaux." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous conserver vos paramètres modifiés actuels ou utiliser des " +#~ "paramètres prédéfinis ?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Souhaitez-vous sauvegarder vos paramètres modifiés actuels ?" + +#~ msgid "Unload Filament" +#~ msgstr "Déchargement" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Choisissez un emplacement AMS puis appuyez sur le bouton correspondant " +#~ "pour Charger ou Décharger le filament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Carte mère" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "L’importation vers OrcaSlicer a échoué. Veuillez télécharger le fichier " +#~ "et l’importer manuellement." + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Nouvelle calibration de la dynamique du flux" + #~ msgid "" #~ "The 3mf file version is in Beta and it is newer than the current " #~ "OrcaSlicer version." @@ -16348,18 +16737,6 @@ msgstr "" #~ "Impossible d'effectuer une opération booléenne sur les maillages du " #~ "modèle. Seules les parties positives seront exportées." -#~ msgid "Transfer or discard changes" -#~ msgstr "Ignorer ou conserver les modifications" - -#~ msgid "Old Value" -#~ msgstr "Ancienne valeur" - -#~ msgid "New Value" -#~ msgstr "Nouvelle Valeur" - -#~ msgid "Discard" -#~ msgstr "Ignorer" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -16471,8 +16848,8 @@ msgstr "" #~ "thickness (top+bottom solid layers)" #~ msgstr "" #~ "Ajoutez du remplissage solide à proximité des surfaces inclinées pour " -#~ "garantir l'épaisseur verticale de la coque (couches solides " -#~ "supérieure+inférieure)." +#~ "garantir l'épaisseur verticale de la coque (couches solides supérieure" +#~ "+inférieure)." #~ msgid "Further reduce solid infill on walls (beta)" #~ msgstr "Réduire davantage le remplissage solide des parois (expérimental)" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index cd7da5973b..2d4d4cd89b 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1897,6 +1897,12 @@ msgstr "Elrendezés" msgid "arrange current plate" msgstr "aktuális tálca elrendezése" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Automatikus forgatás" @@ -2361,11 +2367,11 @@ msgstr "" msgid "AMS not connected" msgstr "Az AMS nincs csatlakoztatva" -msgid "Load Filament" -msgstr "Filament betöltés" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Filament kitöltése" +msgid "Unload" +msgstr "Kitöltés" msgid "Ext Spool" msgstr "Kül. tekercs" @@ -2382,7 +2388,7 @@ msgstr "Újra" msgid "Calibrating AMS..." msgstr "AMS kalibrálása..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "A kalibráció során probléma merült fel. Kattintson a megoldás " "megtekintéséhez." @@ -2425,10 +2431,8 @@ msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Válassz egy AMS rekeszt, majd nyomd meg a \"Load\" vagy \"Unload\" gombot a " -"filament automatikus be- vagy kitöltéséhez." msgid "Edit" msgstr "Szerkesztés" @@ -3038,6 +3042,14 @@ msgstr "" "Az AMS automatikusan egy másik, azonos tulajdonságú filamentre vált, ha az " "aktuális filament kifogy." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fájl" @@ -3116,6 +3128,45 @@ msgstr "Utófeldolgozási szkriptek futtatása" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Ismeretlen hiba a G-kód exportálásakor." @@ -3485,18 +3536,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Ismeretlen" @@ -4019,7 +4058,7 @@ msgstr "Térfogat:" msgid "Size:" msgstr "Méret:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4159,6 +4198,9 @@ msgstr "Előnézet" msgid "Device" msgstr "Nyomtató" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projekt" @@ -4198,6 +4240,9 @@ msgstr "Összes nyomtatása" msgid "Send all" msgstr "Összes elküldése" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Gyorsbillentyűk" @@ -4973,9 +5018,6 @@ msgstr "Cham" msgid "Bed" msgstr "Asztal" -msgid "Unload" -msgstr "Kitöltés" - msgid "Debug Info" msgstr "Hibakeresési infó" @@ -5145,9 +5187,6 @@ msgstr "Állapot" msgid "Update" msgstr "Frissítés" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Ne mutasd újra" @@ -5394,6 +5433,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5835,15 +5880,21 @@ msgstr "Modell importálása" msgid "prepare 3mf file..." msgstr "3mf fájl előkészítése..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "projekt letöltése ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt letöltve %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -6111,6 +6162,21 @@ msgstr "Angolszász" msgid "Units" msgstr "Mértékegység" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6187,6 +6253,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6827,6 +6901,9 @@ msgstr "" msgid "Modifying the device name" msgstr "Eszköz nevének módosítása" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Küldés a nyomtatóban lévő MicroSD kártyára" @@ -6882,6 +6959,26 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Ismeretlen hiba" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Bejelentkezés a nyomtatóra" @@ -7085,8 +7182,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Ha a nyomtatófej nélküli timelapse engedélyezve van, javasoljuk, hogy " "helyezz el a tálcán egy „Timelapse törlőtornyot“. Ehhez kattints jobb " @@ -7494,26 +7591,23 @@ msgstr "Nincs meghatározva" msgid "Unsaved Changes" msgstr "mentetlen változások" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Változások elvetése vagy megtartása" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Régi érték" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Új érték" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Átvitel" msgid "Don't save" msgstr "Ne mentsd" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Elvetés" msgid "Click the right mouse button to display the full text." msgstr "Kattints a jobb egérgombbal a teljes szöveg megjelenítéséhez." @@ -7576,28 +7670,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7615,9 +7703,6 @@ msgstr "Minden beállítás megjelenítése (beleértve az inkompatibiliseket is msgid "Select presets to compare" msgstr "Select presets to compare" -msgid "Transfer" -msgstr "Átvitel" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8093,6 +8178,39 @@ msgstr "Done" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Filament betöltés" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -10110,6 +10228,9 @@ msgstr "Támasz kocka" msgid "Lightning" msgstr "Világítás" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10279,10 +10400,10 @@ msgstr "Teljes ventilátor fordulatszám ennél a rétegnél" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" msgid "Support interface fan speed" @@ -12877,6 +12998,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12993,6 +13117,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -13002,6 +13134,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -13227,9 +13372,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13273,12 +13415,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -13306,10 +13442,14 @@ msgstr "" msgid "Action" msgstr "" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13318,13 +13458,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -13705,8 +13838,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14249,6 +14382,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14621,6 +14923,31 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "Filament kitöltése" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Válassz egy AMS rekeszt, majd nyomd meg a \"Load\" vagy \"Unload\" gombot " +#~ "a filament automatikus be- vagy kitöltéséhez." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + #~ msgid "active" #~ msgstr "aktív" @@ -14718,18 +15045,6 @@ msgstr "" #~ "Unable to perform boolean operation on model meshes. Only positive parts " #~ "will be exported." -#~ msgid "Transfer or discard changes" -#~ msgstr "Változások elvetése vagy megtartása" - -#~ msgid "Old Value" -#~ msgstr "Régi érték" - -#~ msgid "New Value" -#~ msgstr "Új érték" - -#~ msgid "Discard" -#~ msgstr "Elvetés" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 90fcb198d9..55c5d23e32 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1962,6 +1962,12 @@ msgstr "Disponi" msgid "arrange current plate" msgstr "Disponi sul piatto corrente" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Rotazione automatica" @@ -2431,11 +2437,11 @@ msgstr "Ricarica automatica" msgid "AMS not connected" msgstr "AMS non collegato" -msgid "Load Filament" -msgstr "Carica" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Scarica Filamento" +msgid "Unload" +msgstr "Scarica" msgid "Ext Spool" msgstr "Bobina esterna" @@ -2452,7 +2458,7 @@ msgstr "Riprova" msgid "Calibrating AMS..." msgstr "Calibrazione AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Si è verificato un problema durante la calibrazione. Clicca per visualizzare " "la soluzione." @@ -2495,10 +2501,8 @@ msgstr "Prendo un nuovo filamento" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Seleziona uno slot AMS, premi \"Carica\" o \"Scarica\" per caricare o " -"scaricare automaticamente il filamento." msgid "Edit" msgstr "Modifica" @@ -3126,6 +3130,14 @@ msgstr "" "L'AMS passerà automaticamente a un altro filamento con stesse proprietà " "quando il filamento corrente si esaurisce" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "File" @@ -3206,6 +3218,45 @@ msgstr "Esecuzione script di post-elaborazione" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Errore sconosciuto nell'esportazione del G-code." @@ -3592,18 +3643,6 @@ msgstr "Pausa in caso di errore nel primo layer" msgid "Nozzle clog pause" msgstr "Pausa in caso di intasamento del nozzle" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "MainBoard" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Sconosciuto" @@ -4141,7 +4180,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Dimensione:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4283,6 +4322,9 @@ msgstr "Anteprima" msgid "Device" msgstr "Dispositivo" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Progetto" @@ -4322,6 +4364,9 @@ msgstr "Stampa tutto" msgid "Send all" msgstr "Invia tutto" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Scorciatoie Tastiera" @@ -5118,9 +5163,6 @@ msgstr "Camera" msgid "Bed" msgstr "Piano" -msgid "Unload" -msgstr "Scarica" - msgid "Debug Info" msgstr "Informazioni di debug" @@ -5307,9 +5349,6 @@ msgstr "Stato" msgid "Update" msgstr "Aggiorna" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Non mostrare più" @@ -5555,6 +5594,12 @@ msgstr "Consenti suono di richiesta" msgid "Filament Tangle Detect" msgstr "Rilevamento del groviglio del filamento" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -6021,19 +6066,23 @@ msgstr "Importazione del modello" msgid "prepare 3mf file..." msgstr "preparazione file 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "Download progetto..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Progetto scaricato %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"L'importazione di Orca Slicer non è riuscita. Si prega di scaricare il file " -"e importarlo manualmente." msgid "Import SLA archive" msgstr "Importa archivio SLA" @@ -6307,6 +6356,21 @@ msgstr "Imperiale" msgid "Units" msgstr "Unità" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Home" @@ -6385,6 +6449,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "Rete" @@ -7037,6 +7109,9 @@ msgstr "Calibrazione automatica del flusso tramite Micro Lidar" msgid "Modifying the device name" msgstr "Modifica nome del dispositivo" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Invia a microSD stampante" @@ -7092,6 +7167,26 @@ msgstr "Timeout ricezione del rapporto di login" msgid "Unknown Failure" msgstr "Fallimento sconosciuto" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Log in stampante" @@ -7310,8 +7405,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Quando si registra un timelapse senza testa di stampa, si consiglia di " "aggiungere un \"Timelapse Torre di pulizia\"\n" @@ -7732,26 +7827,23 @@ msgstr "Indefinito" msgid "Unsaved Changes" msgstr "Modifiche non salvate" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Scarta o mantieni le modifiche" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Valore precedente" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Nuovo valore" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Trasferisci" msgid "Don't save" msgstr "Non salvare" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Cancella" msgid "Click the right mouse button to display the full text." msgstr "" @@ -7814,28 +7906,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7853,9 +7939,6 @@ msgstr "Mostra tutti i preset (compresi non compatibili)" msgid "Select presets to compare" msgstr "Seleziona i preset da confrontare" -msgid "Transfer" -msgstr "Trasferisci" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8361,6 +8444,39 @@ msgstr "Fine" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Carica" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Conferma e aggiorna l'ugello" @@ -8456,8 +8572,8 @@ msgid "" msgstr "" "È stato rilevato un aggiornamento importante che deve essere eseguito prima " "che la stampa possa continuare. Si desidera aggiornare ora? È possibile " -"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna " -"firmware\"." +"effettuare l'aggiornamento anche in un secondo momento da \"Aggiorna firmware" +"\"." msgid "" "The firmware version is abnormal. Repairing and updating are required before " @@ -10712,6 +10828,9 @@ msgstr "Supporto cubico" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Lunghezza dell'ancora di riempimento sparsa" @@ -10919,17 +11038,16 @@ msgstr "Massima velocità della ventola al layer" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "La velocità della ventola aumenterà linearmente da zero al livello " -"\"close_fan_the_first_x_layers\" al massimo al livello " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" verrà ignorato se " -"inferiore a \"close_fan_the_first_x_layers\", nel qual caso la ventola " -"funzionerà alla massima velocità consentita al livello " -"\"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" al massimo al livello \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" verrà ignorato se inferiore a " +"\"close_fan_the_first_x_layers\", nel qual caso la ventola funzionerà alla " +"massima velocità consentita al livello \"close_fan_the_first_x_layers\" + 1." msgid "Support interface fan speed" msgstr "Supporta la velocità della ventola dell'interfaccia" @@ -13931,6 +14049,9 @@ msgstr "Annullato" msgid "load_obj: failed to parse" msgstr "load_obj: analisi non riuscita" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Il file contiene poligoni con più di 4 vertici." @@ -14059,6 +14180,14 @@ msgstr "Selezionare il filamento da calibrare." msgid "The input value size must be 3." msgstr "La dimensione del valore di input deve essere 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Collegamento alla stampante..." @@ -14070,6 +14199,19 @@ msgstr "" "Il risultato della calibrazione di Flow Dynamics è stato salvato nella " "stampante" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Errore interno" @@ -14385,9 +14527,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametri di stampa" -msgid "- ℃" -msgstr "- °C" - msgid "Plate Type" msgstr "Tipo di piatto" @@ -14437,12 +14576,6 @@ msgstr "Al valore k" msgid "Step value" msgstr "Valore del passaggio" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" "Il diametro del nozzle è stato sincronizzato dalle impostazioni della " @@ -14472,10 +14605,14 @@ msgstr "Aggiornamento dei record storici di calibrazione di Flow Dynamics" msgid "Action" msgstr "Azione" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Modifica calibrazione dinamica flusso (Edit Flow Dynamics)" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -14484,13 +14621,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "Ricerca network" @@ -14903,8 +15033,8 @@ msgstr "" "Vuoi riscriverlo?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Rinomineremo le preimpostazioni come \"Tipo di fornitore seriale @printer " @@ -15537,6 +15667,175 @@ msgstr "" "Corpo messaggio: \"%1%\"\n" "Errore: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -15966,6 +16265,47 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." +#~ msgid "Unload Filament" +#~ msgstr "Scarica Filamento" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Seleziona uno slot AMS, premi \"Carica\" o \"Scarica\" per caricare o " +#~ "scaricare automaticamente il filamento." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "L'importazione di Orca Slicer non è riuscita. Si prega di scaricare il " +#~ "file e importarlo manualmente." + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + #~ msgid "active" #~ msgstr "attivo" @@ -16076,18 +16416,6 @@ msgstr "" #~ "Impossibile eseguire operazioni booleane sulle mesh del modello. Verranno " #~ "esportate solo le parti positive." -#~ msgid "Transfer or discard changes" -#~ msgstr "Scarta o mantieni le modifiche" - -#~ msgid "Old Value" -#~ msgstr "Valore precedente" - -#~ msgid "New Value" -#~ msgstr "Nuovo valore" - -#~ msgid "Discard" -#~ msgstr "Cancella" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -16244,8 +16572,8 @@ msgstr "" #~ msgstr "Nessun layer sparso (SPERIMENTALE)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" +#~ "\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "Rinomineremo le impostazioni predefinite come \"Tipo di fornitore seriale " diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 0b8dd2e837..eeb821b872 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1885,6 +1885,12 @@ msgstr "レイアウト" msgid "arrange current plate" msgstr "現在のプレートをレイアウト" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自動回転" @@ -2333,11 +2339,11 @@ msgstr "" msgid "AMS not connected" msgstr "AMS が接続されていません" -msgid "Load Filament" -msgstr "ロード" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "アンロード" +msgid "Unload" +msgstr "アンロード" msgid "Ext Spool" msgstr "外部スプールホルダー" @@ -2354,7 +2360,7 @@ msgstr "再試行" msgid "Calibrating AMS..." msgstr "AMS キャリブレーション" -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "キャリブレーション中に問題が発生しました。クリックして解決策をご確認くださ" "い。" @@ -2397,10 +2403,8 @@ msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"AMS スロットを選択し、[ロード] または [アンロード] をタップすると、フィラメン" -"トが自動的にロードまたはアンロードされます。" msgid "Edit" msgstr "編集" @@ -2982,6 +2986,14 @@ msgid "" "automatically when current filament runs out" msgstr "使用中のフィラメントが切れた時に、同じ属性のフィラメントに切り替えます" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "ファイル" @@ -3057,6 +3069,45 @@ msgstr "後処理スクリプトを実行" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "不明なエラー: G-codeエクスポート" @@ -3408,18 +3459,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "メインボード" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "不明" @@ -3941,7 +3980,7 @@ msgstr "ボリューム" msgid "Size:" msgstr "サイズ:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4077,6 +4116,9 @@ msgstr "プレビュー" msgid "Device" msgstr "デバイス" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "プロジェクト" @@ -4116,6 +4158,9 @@ msgstr "造形開始 (全プレート)" msgid "Send all" msgstr "送信 (全プレート)" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "ショートカット" @@ -4884,9 +4929,6 @@ msgstr "筐体" msgid "Bed" msgstr "ベッド" -msgid "Unload" -msgstr "アンロード" - msgid "Debug Info" msgstr "デバッグ情報" @@ -5056,9 +5098,6 @@ msgstr "デバイス状態" msgid "Update" msgstr "更新" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "次回から表示しない" @@ -5298,6 +5337,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5730,15 +5775,21 @@ msgstr "モデルをインポート" msgid "prepare 3mf file..." msgstr "3mfファイルを準備" +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "プロジェクトをダウンロード中" +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "プロジェクトをダウンロード %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -6005,6 +6056,21 @@ msgstr "インチ" msgid "Units" msgstr "単位" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6081,6 +6147,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6692,6 +6766,9 @@ msgstr "" msgid "Modifying the device name" msgstr "デバイス名を変更" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "プリンターのSDカードに送信" @@ -6745,6 +6822,26 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "不明な失敗" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "プリンターを登録" @@ -6942,8 +7039,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "ヘッド無しのタイムラプスビデオを録画する時に、「タイムラプスプライムタワー」" "を追加してください。プレートで右クリックして、「プリミティブを追加」→「タイム" @@ -7333,26 +7430,23 @@ msgstr "未定義" msgid "Unsaved Changes" msgstr "未保存の変更" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "変更を破棄または保持" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "古い値" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "新しい値" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "流用" msgid "Don't save" msgstr "保存しない" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "破棄" msgid "Click the right mouse button to display the full text." msgstr "マウスを右クリックして全文を表示します" @@ -7410,28 +7504,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7449,9 +7537,6 @@ msgstr "全てのプリセットを表示" msgid "Select presets to compare" msgstr "Select presets to compare" -msgid "Transfer" -msgstr "流用" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7919,6 +8004,39 @@ msgstr "Done" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "ロード" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -9846,6 +9964,9 @@ msgstr "キュービックサポート" msgid "Lightning" msgstr "ライトニング" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10010,10 +10131,10 @@ msgstr "最大回転速度の積層" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" msgid "Support interface fan speed" @@ -12514,6 +12635,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -12630,6 +12754,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -12639,6 +12771,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -12864,9 +13009,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -12910,12 +13052,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -12943,10 +13079,14 @@ msgstr "" msgid "Action" msgstr "" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -12955,13 +13095,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -13342,8 +13475,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -13885,6 +14018,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14236,6 +14538,31 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "アンロード" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "AMS スロットを選択し、[ロード] または [アンロード] をタップすると、フィラ" +#~ "メントが自動的にロードまたはアンロードされます。" + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "メインボード" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + #~ msgid "active" #~ msgstr "アクティブ" @@ -14325,18 +14652,6 @@ msgstr "" #~ "Unable to perform boolean operation on model meshes. Only positive parts " #~ "will be exported." -#~ msgid "Transfer or discard changes" -#~ msgstr "変更を破棄または保持" - -#~ msgid "Old Value" -#~ msgstr "古い値" - -#~ msgid "New Value" -#~ msgstr "新しい値" - -#~ msgid "Discard" -#~ msgstr "破棄" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 524c6194c9..dfa4ce9e98 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" -"PO-Revision-Date: 2024-04-11 18:46+0900\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" +"PO-Revision-Date: 2024-05-01 04:51+0900\n" "Last-Translator: Hotsolidinfill <138652683+Hotsolidinfill@users.noreply." "github.com>, crwusiz \n" "Language-Team: \n" @@ -261,7 +261,7 @@ msgid "World coordinates" msgstr "영역 좌표" msgid "Object coordinates" -msgstr "" +msgstr "개체 좌표" msgid "°" msgstr "°" @@ -1933,6 +1933,12 @@ msgstr "정렬" msgid "arrange current plate" msgstr "현재 플레이트 정렬" +msgid "Reload All" +msgstr "모두 다시 불러오기" + +msgid "reload all from disk" +msgstr "디스크에서 모두 다시 로드" + msgid "Auto Rotate" msgstr "자동 회전" @@ -2379,11 +2385,11 @@ msgstr "자동 리필" msgid "AMS not connected" msgstr "AMS가 연결되지 않음" -msgid "Load Filament" -msgstr "필라멘트 넣기" +msgid "Load" +msgstr "불러오기" -msgid "Unload Filament" -msgstr "필라멘트 언로드" +msgid "Unload" +msgstr "언로드" msgid "Ext Spool" msgstr "외부 스풀" @@ -2400,7 +2406,7 @@ msgstr "재시도" msgid "Calibrating AMS..." msgstr "AMS 교정 중..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "교정하는 동안 문제가 발생했습니다. 솔루션을 보려면 클릭하세요." msgid "Calibrate again" @@ -2441,10 +2447,10 @@ msgstr "새 필라멘트 가져오기" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"AMS 슬롯을 선택한 후 \"넣기\" 또는 \"빼기\" 버튼을 눌러 필라멘트를 자동으로 " -"넣거나 뺍니다." +"AMS 슬롯을 선택한 다음 '로드' 또는 '언로드' 버튼을 누르면 필라멘트를 자동으" +"로 로드하거나 언로드할 수 있습니다." msgid "Edit" msgstr "편집" @@ -2911,7 +2917,7 @@ msgid "Print with the filament mounted on the back of chassis" msgstr "섀시 뒷면에 필라멘트를 장착한 상태에서 출력" msgid "Current Cabin humidity" -msgstr "" +msgstr "현재 기내 습도" msgid "" "Please change the desiccant when it is too wet. The indicator may not " @@ -2919,6 +2925,9 @@ msgid "" "desiccant pack is changed. it take hours to absorb the moisture, low " "temperatures also slow down the process." msgstr "" +"건조제가 너무 젖으면 교체하세요. 뚜껑이 열려 있거나 건조제 팩을 교체한 경우, " +"습기를 흡수하는 데 몇 시간이 걸리는 경우, 낮은 온도로 인해 공정이 느려지는 경" +"우 등에는 표시기가 정확하게 표시되지 않을 수 있습니다." msgid "" "Config which AMS slot should be used for a filament used in the print job" @@ -2971,10 +2980,10 @@ msgstr "" "(현재 동일한 브랜드, 재질, 색상의 소모품 자동 공급 지원)" msgid "DRY" -msgstr "" +msgstr "DRY" msgid "WET" -msgstr "" +msgstr "WET" msgid "AMS Settings" msgstr "AMS 설정" @@ -2993,6 +3002,8 @@ msgid "" "Note: if a new filament is inserted during printing, the AMS will not " "automatically read any information until printing is completed." msgstr "" +"참고: 출력 중에 새 필라멘트를 삽입하면 출력가 완료될 때까지 AMS가 자동으로 정" +"보를 읽지 않습니다." msgid "" "When inserting a new filament, the AMS will not automatically read its " @@ -3041,6 +3052,16 @@ msgstr "" "AMS는 현재 필라멘트가 소진되면 동일한 필라멘트 특성을 가진 다른 스풀로 자동으" "로 이동합니다" +msgid "Air Printing Detection" +msgstr "에어 프린팅 감지" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"막힘 및 필라멘트 연삭을 감지하여 출력를 즉시 중단하여 시간과 필라멘트를 절약" +"합니다." + msgid "File" msgstr "파일" @@ -3117,7 +3138,57 @@ msgid "Running post-processing scripts" msgstr "사후 처리 스크립트 실행중" msgid "Successfully executed post-processing script" +msgstr "성공적으로 실행된 후처리 스크립트" + +msgid "Unknown error occured during exporting G-code." +msgstr "G코드를 내보내는 동안 알 수 없는 오류가 발생했습니다." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" msgstr "" +"임시 G코드를 출력 G코드로 복사하지 못했습니다. SD 카드가 쓰기 잠겨 있나요?\n" +"오류 메시지입니다: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"임시 G코드를 출력 G코드로 복사하지 못했습니다. 대상 장치에 문제가 있을 수 있" +"으니 다시 내보내거나 다른 장치를 사용해 보세요. 손상된 출력 G코드는 %1%.tmp" +"에 있습니다." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"선택한 대상 폴더로 복사한 후 G코드의 이름을 바꾸지 못했습니다. 현재 경로는 " +"%1%.tmp입니다. 내보내기를 다시 시도하세요." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"임시 G코드의 복사가 완료되었지만 복사 확인 중에 %1%의 원본 코드를 열 수 없습" +"니다. 출력 G-코드는 %2%.tmp에 있습니다." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"임시 G코드 복사가 완료되었지만 복사 확인 중에 내보낸 코드를 열 수 없습니다. " +"출력 G-코드는 %1%.tmp에 있습니다." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "%1%로 내보낸 G코드 파일" msgid "Unknown error when export G-code." msgstr "G코드를 내보낼 때 알 수 없는 오류가 발생했습니다." @@ -3207,15 +3278,15 @@ msgstr "베드 모양" msgid "" "The recommended minimum temperature is less than 190 degree or the " "recommended maximum temperature is greater than 300 degree.\n" -msgstr "" +msgstr "권장 최저 온도는 190도 미만 또는 권장 최고 온도는 300도 이상입니다.\n" msgid "" "The recommended minimum temperature cannot be higher than the recommended " "maximum temperature.\n" -msgstr "" +msgstr "권장 최저 온도는 권장 최고 온도보다 높을 수 없습니다.\n" msgid "Please check.\n" -msgstr "" +msgstr "확인해 보세요.\n" msgid "" "Nozzle may be blocked when the temperature is out of recommended range.\n" @@ -3487,18 +3558,6 @@ msgstr "첫번째 레이어 오류 일시중지" msgid "Nozzle clog pause" msgstr "노즐 막힘 일시 중지" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "메인보드" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "알 수 없는" @@ -3618,7 +3677,7 @@ msgid "Slicing State" msgstr "슬라이싱 상태" msgid "Print Statistics" -msgstr "통계 인쇄" +msgstr "통계 출력" msgid "Objects Info" msgstr "개체 정보" @@ -3670,7 +3729,7 @@ msgstr "매개변수 유효성 검사" #, c-format, boost-format msgid "Value %s is out of range. The valid range is from %d to %d." -msgstr "" +msgstr "값 %s이 범위를 벗어났습니다. 유효한 범위는 %d에서 %d까지입니다." msgid "Value is out of range." msgstr "값이 범위를 벗어났습니다." @@ -3861,10 +3920,10 @@ msgid "Normal mode" msgstr "일반 모드" msgid "Total Filament" -msgstr "" +msgstr "총 필라멘트" msgid "Model Filament" -msgstr "" +msgstr "모델 필라멘트" msgid "Prepare time" msgstr "준비 시간" @@ -3960,7 +4019,7 @@ msgid "Spacing" msgstr "간격" msgid "0 means auto spacing." -msgstr "" +msgstr "0은 자동 간격을 의미합니다." msgid "Auto rotate for arrangement" msgstr "자동 회전 후 정렬" @@ -4031,7 +4090,7 @@ msgstr "용량:" msgid "Size:" msgstr "크기:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4108,7 +4167,7 @@ msgid "Go Live" msgstr "실시간" msgid "Liveview Retry" -msgstr "" +msgstr "라이브뷰 재시도" msgid "Resolution" msgstr "해상도" @@ -4171,6 +4230,9 @@ msgstr "미리 보기" msgid "Device" msgstr "장치" +msgid "Multi-device" +msgstr "멀티 디바이스" + msgid "Project" msgstr "프로젝트" @@ -4210,6 +4272,9 @@ msgstr "모두 출력" msgid "Send all" msgstr "모두 전송" +msgid "Send to Multi-device" +msgstr "여러 장치로 보내기" + msgid "Keyboard Shortcuts" msgstr "키보드 단축키" @@ -4621,45 +4686,49 @@ msgid "The device cannot handle more conversations. Please retry later." msgstr "장치에서 더 많은 대화를 처리할 수 없습니다. 나중에 다시 시도해 주세요." msgid "Player is malfunctioning. Please reinstall the system player." -msgstr "" +msgstr "플레이어가 오작동합니다. 시스템 플레이어를 다시 설치하세요." msgid "The player is not loaded, please click \"play\" button to retry." msgstr "" +"플레이어가 로드되지 않았습니다. 다시 시도하려면 '재생' 버튼을 클릭하세요." msgid "Please confirm if the printer is connected." -msgstr "" +msgstr "프린터가 연결되어 있는지 확인하세요." msgid "" "The printer is currently busy downloading. Please try again after it " "finishes." -msgstr "" +msgstr "프린터가 현재 다운로드 중입니다. 다운로드가 완료된 후 다시 시도하세요." msgid "Printer camera is malfunctioning." -msgstr "" +msgstr "프린터 카메라가 오작동합니다." msgid "Problem occured. Please update the printer firmware and try again." -msgstr "" +msgstr "문제가 발생했습니다. 프린터 펌웨어를 업데이트하고 다시 시도하세요." msgid "" "LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" +"LAN 전용 라이브뷰가 꺼져 있습니다. 프린터 화면에서 라이브뷰를 켜십시오." msgid "Please enter the IP of printer to connect." -msgstr "" +msgstr "연결할 프린터의 IP를 입력하세요." msgid "Initializing..." msgstr "초기화 중..." msgid "Connection Failed. Please check the network and try again" -msgstr "" +msgstr "연결에 실패했습니다. 네트워크를 확인한 후 다시 시도하세요" msgid "" "Please check the network and try again, You can restart or update the " "printer if the issue persists." msgstr "" +"네트워크를 확인하고 다시 시도해 보세요. 문제가 지속되면 프린터를 다시 시작하" +"거나 업데이트할 수 있습니다." msgid "The printer has been logged out and cannot connect." -msgstr "" +msgstr "프린터가 로그아웃되어 연결할 수 없습니다." msgid "Stopped." msgstr "중지됨." @@ -4754,7 +4823,7 @@ msgid "Refresh" msgstr "새로 고침" msgid "Reload file list from printer." -msgstr "" +msgstr "프린터에서 파일 목록을 다시 로드합니다." msgid "No printers." msgstr "프린터 없음." @@ -4767,10 +4836,10 @@ msgid "Loading file list..." msgstr "파일 목록 로드 중..." msgid "No files" -msgstr "" +msgstr "파일 없음" msgid "Load failed" -msgstr "" +msgstr "로드 실패" msgid "Initialize failed (Device connection not ready)!" msgstr "초기화 실패 (장치 연결 준비 안 됨)!" @@ -4779,15 +4848,18 @@ msgid "" "Browsing file in SD card is not supported in current firmware. Please update " "the printer firmware." msgstr "" +"현재 펌웨어에서는 SD 카드의 파일 검색이 지원되지 않습니다. 프린터 펌웨어를 업" +"데이트하세요." msgid "Initialize failed (Storage unavailable, insert SD card.)!" msgstr "" +"초기화에 실패했습니다(저장소를 사용할 수 없습니다. SD 카드를 삽입하세요.)!" msgid "LAN Connection Failed (Failed to view sdcard)" -msgstr "" +msgstr "LAN 연결 실패(sdcard를 볼 수 없음)" msgid "Browsing file in SD card is not supported in LAN Only Mode." -msgstr "" +msgstr "LAN 전용 모드에서는 SD 카드의 파일 탐색이 지원되지 않습니다." #, c-format, boost-format msgid "Initialize failed (%s)!" @@ -4813,10 +4885,10 @@ msgid "Fetching model infomations ..." msgstr "모델 정보 가져오는 중..." msgid "Failed to fetch model information from printer." -msgstr "" +msgstr "프린터에서 모델 정보를 가져오지 못했습니다." msgid "Failed to parse model information." -msgstr "" +msgstr "모델 정보를 구문 분석하지 못했습니다." msgid "" "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " @@ -4834,6 +4906,8 @@ msgid "" "File: %s\n" "Title: %s\n" msgstr "" +"파일: %s\n" +"제목: %s\n" msgid "Download waiting..." msgstr "다운로드 대기 중..." @@ -4855,14 +4929,18 @@ msgid "" "Reconnecting the printer, the operation cannot be completed immediately, " "please try again later." msgstr "" +"프린터를 다시 연결하는 중입니다. 작업을 즉시 완료할 수 없습니다. 나중에 다시 " +"시도해 주세요." msgid "" "Over 4 systems/handy are using remote access, you can close some and try " "again." msgstr "" +"4개 이상의 시스템/핸디가 원격 액세스를 사용하고 있습니다. 일부 시스템을 닫고 " +"다시 시도할 수 있습니다." msgid "File does not exist." -msgstr "" +msgstr "파일이 없습니다." msgid "File checksum error. Please retry." msgstr "파일 체크섬 오류입니다. 다시 시도해 주세요." @@ -4969,7 +5047,7 @@ msgid "Control" msgstr "제어" msgid "Printer Parts" -msgstr "" +msgstr "프린터 부품" msgid "Print Options" msgstr "출력 옵션" @@ -4989,9 +5067,6 @@ msgstr "챔버" msgid "Bed" msgstr "베드" -msgid "Unload" -msgstr "언로드" - msgid "Debug Info" msgstr "디버그 정보" @@ -5174,9 +5249,6 @@ msgstr "상태" msgid "Update" msgstr "업데이트" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "다시 표시하지 않음" @@ -5214,27 +5286,29 @@ msgid "" "The 3mf file version is in Beta and it is newer than the current OrcaSlicer " "version." msgstr "" +"3mf 파일 버전은 베타 버전이며 현재 OrcaSlicer 버전보다 최신 버전입니다." msgid "If you would like to try Orca Slicer Beta, you may click to" -msgstr "" +msgstr "Orca Slicer Beta를 사용해 보려면 다음을 클릭하세요" msgid "Download Beta Version" -msgstr "" +msgstr "베타 버전 다운로드" msgid "The 3mf file version is newer than the current Orca Slicer version." -msgstr "" +msgstr "3mf 파일 버전은 현재 Orca Slicer 버전보다 최신 버전입니다." msgid "Update your Orca Slicer could enable all functionality in the 3mf file." msgstr "" +"Orca Slicer를 업데이트하면 3mf 파일의 모든 기능을 활성화할 수 있습니다." msgid "Current Version: " -msgstr "" +msgstr "현재 버전: " msgid "Latest Version: " -msgstr "" +msgstr "최신 버전: " msgid "Not for now" -msgstr "" +msgstr "건너뛰기" msgid "3D Mouse disconnected." msgstr "3D 마우스가 분리됨." @@ -5419,8 +5493,14 @@ msgstr "프롬프트 소리 허용" msgid "Filament Tangle Detect" msgstr "필라멘트 엉킴 감지" +msgid "Nozzle Clumping Detection" +msgstr "노즐 응집 감지" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "노즐에 필라멘트나 기타 이물질이 뭉쳐져 있는지 확인하세요." + msgid "Nozzle Type" -msgstr "" +msgstr "노즐 유형" msgid "Stainless Steel" msgstr "스테인레스 스틸" @@ -5430,7 +5510,7 @@ msgstr "경화강" #, c-format, boost-format msgid "%.1f" -msgstr "" +msgstr "%.1f" msgid "Global" msgstr "전역" @@ -5868,19 +5948,25 @@ msgstr "모델 가져오는 중" msgid "prepare 3mf file..." msgstr "3mf 파일 준비..." +msgid "Download failed, unknown file format." +msgstr "다운로드에 실패했습니다. 파일 형식을 알 수 없습니다." + msgid "downloading project ..." msgstr "프로젝트 다운로드 중 ..." +msgid "Download failed, File size exception." +msgstr "다운로드에 실패했습니다. 파일 크기 예외입니다." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "프로젝트 다운로드 %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Orca Slicer로 가져오는 데 실패했습니다. 파일을 다운로드하여 수동으로 가져오세" -"요." +"Bambu Studio로 가져오는 데 실패했습니다. 파일을 다운로드하여 수동으로 가져오" +"세요." msgid "Import SLA archive" msgstr "SLA 압축파일 가져오기" @@ -5964,22 +6050,24 @@ msgid "" "Unable to perform boolean operation on model meshes. Only positive parts " "will be kept. You may fix the meshes and try agian." msgstr "" +"모델 메쉬에 대해 부울 연산을 수행할 수 없습니다. 긍정적인 부분만 유지됩니다. " +"메쉬를 수정하고 재시도해 볼 수 있습니다." #, boost-format msgid "Reason: part \"%1%\" is empty." -msgstr "" +msgstr "이유: \"%1%\" 부분이 비어 있습니다." #, boost-format msgid "Reason: part \"%1%\" does not bound a volume." -msgstr "" +msgstr "이유: \"%1%\" 부분이 볼륨을 바인딩하지 않습니다." #, boost-format msgid "Reason: part \"%1%\" has self intersection." -msgstr "" +msgstr "이유: 부품 \"%1%\"에 자체 교차가 있습니다." #, boost-format msgid "Reason: \"%1%\" and another part have no intersection." -msgstr "" +msgstr "이유: \"%1%\"과(와) 다른 부분에는 교차점이 없습니다." msgid "" "Are you sure you want to store original SVGs with their local paths into the " @@ -6147,6 +6235,26 @@ msgstr "야드파운드법" msgid "Units" msgstr "단위" +msgid "Allow only one OrcaSlicer instance" +msgstr "OrcaSlicer 인스턴스를 하나만 허용" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"OSX에서는 기본적으로 항상 하나의 앱 인스턴스만 실행됩니다. 그러나 명령줄에서 " +"동일한 앱의 여러 인스턴스를 실행할 수 있습니다. 그러한 경우 이 설정은 하나의 " +"인스턴스만 허용합니다." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"이 기능을 활성화하면 OrcaSlicer를 시작하고 동일한 OrcaSlicer의 다른 인스턴스" +"가 이미 실행 중일 때 해당 인스턴스가 대신 다시 활성화됩니다." + msgid "Home" msgstr "홈" @@ -6157,16 +6265,19 @@ msgid "Set the page opened on startup." msgstr "시작 시 열리는 페이지를 설정합니다." msgid "Touchpad" -msgstr "" +msgstr "터치패드" msgid "Camera style" -msgstr "" +msgstr "카메라 스타일" msgid "" "Select camera navigation style.\n" "Default: LMB+move for rotation, RMB/MMB+move for panning.\n" "Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" +"카메라 탐색 스타일을 선택합니다.\n" +"기본값: 회전의 경우 LMB+이동, 패닝의 경우 RMB/MMB+이동.\n" +"터치패드: 회전하려면 Alt+이동, 패닝하려면 Shift+이동." msgid "Zoom to mouse position" msgstr "마우스 위치로 확대" @@ -6185,10 +6296,10 @@ msgstr "" "카메라 앵글을 사용합니다." msgid "Reverse mouse zoom" -msgstr "" +msgstr "역방향 마우스 줌" msgid "If enabled, reverses the direction of zoom with mouse wheel." -msgstr "" +msgstr "활성화되면 마우스 휠을 사용하여 확대/축소 방향을 반대로 바꿉니다." msgid "Show splash screen" msgstr "스플래시 화면 표시" @@ -6210,18 +6321,30 @@ msgstr "활성화하면 색상이 변경될 때마다 자동 계산됩니다." msgid "" "Flushing volumes: Auto-calculate every time when the filament is changed." -msgstr "" +msgstr "플러싱량: 필라멘트가 교체될 때마다 자동 계산됩니다." msgid "If enabled, auto-calculate every time when filament is changed" -msgstr "" +msgstr "활성화하면 필라멘트가 교체될 때마다 자동 계산됩니다" msgid "Remember printer configuration" -msgstr "" +msgstr "프린터 구성 기억" msgid "" "If enabled, Orca will remember and switch filament/process configuration for " "each printer automatically." msgstr "" +"활성화된 경우 Orca는 각 프린터의 필라멘트/프로세스 구성을 자동으로 기억하고 " +"전환합니다." + +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "다중 장치 관리(Studio를 다시 시작한 후 적용)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"이 옵션을 활성화하면 동시에 여러 장치에 작업을 보내고 여러 장치를 관리할 수 " +"있습니다." msgid "Network" msgstr "네트워크" @@ -6442,16 +6565,16 @@ msgid "The selected preset is null!" msgstr "선택한 사전 설정의 값이 존재하지 않습니다!(null)" msgid "End" -msgstr "" +msgstr "끝" msgid "Customize" msgstr "사용자 정의" msgid "Other layer filament sequence" -msgstr "" +msgstr "다른 층 필라멘트 순서" msgid "Please input layer value (>= 2)." -msgstr "" +msgstr "레이어 값(>= 2)을 입력하세요." msgid "Plate name" msgstr "플레이트 이름" @@ -6463,10 +6586,10 @@ msgid "Print sequence" msgstr "출력 순서" msgid "Same as Global" -msgstr "" +msgstr "글로벌과 동일" msgid "Disable" -msgstr "" +msgstr "비활성" msgid "Spiral vase" msgstr "나선형 꽃병 모드" @@ -6748,6 +6871,8 @@ msgid "" "The selected printer (%s) is incompatible with the chosen printer profile in " "the slicer (%s)." msgstr "" +"선택한 프린터(%s)는 슬라이서(%s)에서 선택한 프린터 프로필과 호환되지 않습니" +"다." msgid "An SD card needs to be inserted to record timelapse." msgstr "타임랩스를 녹화하려면 SD 카드를 삽입해야 합니다." @@ -6810,15 +6935,17 @@ msgid "" "If you changed your nozzle lately, please go to Device > Printer Parts to " "change settings." msgstr "" +"슬라이스 파일의 노즐 직경이 기억된 노즐과 일치하지 않습니다. 최근에 노즐을 변" +"경한 경우 장치 > 프린터 부품으로 이동하여 설정을 변경하세요." #, c-format, boost-format msgid "" "Printing high temperature material(%s material) with %s may cause nozzle " "damage" -msgstr "" +msgstr "고온 재료(%s 재료)를 %s로 출력하면 노즐이 손상될 수 있습니다" msgid "Please fix the error above, otherwise printing cannot continue." -msgstr "" +msgstr "위의 오류를 수정하십시오. 그렇지 않으면 출력를 계속할 수 없습니다." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6850,6 +6977,9 @@ msgstr "마이크로 라이다를 사용한 자동 유량 교정" msgid "Modifying the device name" msgstr "장치 이름 수정" +msgid "Bind with Pin Code" +msgstr "핀 코드로 바인딩" + msgid "Send to Printer SD card" msgstr "프린터 SD 카드로 보내기" @@ -6901,6 +7031,28 @@ msgstr "로그인 보고서 수신 시간 초과" msgid "Unknown Failure" msgstr "알 수 없는 실패" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"프린터 화면의 계정 페이지에서 핀 코드를 찾으십시오.\n" +" 그리고 아래에 핀코드를 입력하세요." + +msgid "Can't find Pin Code?" +msgstr "핀 코드를 찾을 수 없나요?" + +msgid "Pin Code" +msgstr "핀 코드" + +msgid "Binding..." +msgstr "바인딩..." + +msgid "Please confirm on the printer screen" +msgstr "프린터 화면에서 확인해주세요" + +msgid "Log in failed. Please check the Pin Code." +msgstr "로그인 실패. 핀코드를 확인해주세요." + msgid "Log in printer" msgstr "프린터 로그인" @@ -7058,8 +7210,8 @@ msgid "" "precise dimensions or is part of an assembly, it's important to double-check " "whether this change in geometry impacts the functionality of your print." msgstr "" -"이 옵션을 활성화하면 모델의 모양이 수정됩니다. 인쇄물에 정확한 치수가 필요하" -"거나 어셈블리의 일부인 경우 이러한 형상 변경이 인쇄물의 기능에 영향을 미치는" +"이 옵션을 활성화하면 모델의 모양이 수정됩니다. 출력물에 정확한 치수가 필요하" +"거나 어셈블리의 일부인 경우 이러한 형상 변경이 출력물의 기능에 영향을 미치는" "지 다시 확인하는 것이 중요합니다." msgid "Are you sure you want to enable this option?" @@ -7094,6 +7246,9 @@ msgid "" "reduce flush, it may also elevate the risk of nozzle clogs or other " "printing complications." msgstr "" +"실험적 기능: 플러시를 최소화하기 위해 필라멘트 교체 중에 더 먼 거리에서 필라" +"멘트를 집어넣고 절단합니다. 플러시를 눈에 띄게 줄일 수 있지만 노즐 막힘이나 " +"기타 출력 문제의 위험이 높아질 수도 있습니다." msgid "" "Experimental feature: Retracting and cutting off the filament at a greater " @@ -7101,6 +7256,10 @@ msgid "" "reduce flush, it may also elevate the risk of nozzle clogs or other printing " "complications.Please use with the latest printer firmware." msgstr "" +"실험적 기능: 플러시를 최소화하기 위해 필라멘트 교체 중에 더 먼 거리에서 필라" +"멘트를 집어넣고 절단합니다. 플러시를 크게 줄일 수 있지만 노즐 막힘이나 기타 " +"출력 문제의 위험을 높일 수도 있습니다. 최신 프린터 펌웨어와 함께 사용하십시" +"오." msgid "" "When recording timelapse without toolhead, it is recommended to add a " @@ -7508,26 +7667,23 @@ msgstr "정의되지 않음" msgid "Unsaved Changes" msgstr "저장되지 않은 변경 사항" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "변경 사항 폐기 또는 유지" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "이전 값" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "새로운 값" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "이전" msgid "Don't save" msgstr "저장하지 않음" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "폐기" msgid "Click the right mouse button to display the full text." msgstr "마우스 오른쪽 버튼을 클릭하여 전체 텍스트를 표시합니다." @@ -7585,33 +7741,35 @@ msgstr "" #, boost-format msgid "You have changed some settings of preset \"%1%\". " -msgstr "" +msgstr "사전 설정 \"%1%\"의 일부 설정을 변경했습니다. " msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" +"\n" +"수정한 사전 설정 값을 저장하거나 삭제할 수 있습니다." msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" +"\n" +"수정한 사전 설정 값을 저장하거나 삭제하거나, 수정한 값을 새 사전 설정으로 전" +"송하도록 선택할 수 있습니다." -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." -msgstr "" +msgid "You have previously modified your settings." +msgstr "이전에 설정을 수정했습니다." msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" - -msgid "" "\n" -"Do you want to save your current modified settings?" -msgstr "" +"수정한 사전 설정 값을 삭제하거나 수정된 ​​값을 새 프로젝트로 전송하도록 선택할 " +"수 있습니다" msgid "Extruders count" msgstr "압출기 수" @@ -7628,9 +7786,6 @@ msgstr "모든 사전 설정 표시(미 호환 포함)" msgid "Select presets to compare" msgstr "비교할 사전 설정 선택" -msgid "Transfer" -msgstr "이전" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8114,7 +8269,40 @@ msgid "Done" msgstr "완료" msgid "resume" -msgstr "" +msgstr "재개" + +msgid "Resume Printing" +msgstr "출력 재개" + +msgid "Resume Printing(defects acceptable)" +msgstr "출력 재개(결함 허용)" + +msgid "Resume Printing(problem solved)" +msgstr "출력 재개(문제 해결)" + +msgid "Stop Printing" +msgstr "출력 중지" + +msgid "Check Assistant" +msgstr "어시스턴트 확인" + +msgid "Filament Extruded, Continue" +msgstr "필라멘트 압출, 계속" + +msgid "Not Extruded Yet, Retry" +msgstr "아직 압출되지 않았습니다. 다시 시도하세요" + +msgid "Finished, Continue" +msgstr "완료, 계속" + +msgid "Load Filament" +msgstr "필라멘트 넣기" + +msgid "Filament Loaded, Resume" +msgstr "필라멘트 로드됨, 재개" + +msgid "View Liveview" +msgstr "실시간 보기" msgid "Confirm and Update Nozzle" msgstr "노즐 확인 및 업데이트" @@ -8797,7 +8985,7 @@ msgid "Printer preset names" msgstr "프린터 사전 설정 이름" msgid "Use 3rd-party print host" -msgstr "타사 인쇄 호스트 사용" +msgstr "타사 출력 호스트 사용" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" msgstr "타사 프린트 호스트를 통해 밤부랩의 프린터 제어 허용" @@ -8982,13 +9170,13 @@ msgid "First layer print sequence" msgstr "첫 레이어 출력 순서" msgid "Other layers print sequence" -msgstr "" +msgstr "다른 레이어 출력 순서" msgid "The number of other layers print sequence" -msgstr "" +msgstr "다른 레이어 수 출력 순서" msgid "Other layers filament sequence" -msgstr "" +msgstr "다른 층 필라멘트 순서" msgid "This G-code is inserted at every layer change before lifting z" msgstr "이 G코드는 Z올리기 전에 모든 레이어 변경에 삽입됩니다" @@ -9262,7 +9450,7 @@ msgid "" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." msgstr "" -"이 옵션은 카운터보어 구멍에 대한 브릿지를 생성하여 지지대 없이 인쇄할 수 있도" +"이 옵션은 카운터보어 구멍에 대한 브릿지를 생성하여 지지대 없이 출력할 수 있도" "록 합니다. 사용 가능한 모드는 다음과 같습니다.\n" "1. 없음: 브릿지가 생성되지 않습니다.\n" "2. 부분적으로 브릿지됨: 지원되지 않는 영역의 일부만 브릿지됩니다.\n" @@ -9418,7 +9606,7 @@ msgid "Intra-layer order" msgstr "레이어 내 순서" msgid "Print order within a single layer" -msgstr "단일 레이어 내의 인쇄 순서" +msgstr "단일 레이어 내의 출력 순서" msgid "As object list" msgstr "개체 목록으로" @@ -9557,14 +9745,14 @@ msgstr "" "이는 데 도움이 될 수 있습니다.\n" "\n" "기본적으로 작은 내부 브릿지는 필터링되고 내부 솔리드 채우기는 희박한 채우기 " -"위에 직접 인쇄됩니다. 이는 대부분의 경우에 잘 작동하여 상단 표면 품질을 크게 " -"저하시키지 않고 인쇄 속도를 높입니다.\n" +"위에 직접 출력됩니다. 이는 대부분의 경우에 잘 작동하여 상단 표면 품질을 크게 " +"저하시키지 않고 출력 속도를 높입니다.\n" "\n" "그러나 특히 너무 낮은 희박 채우기 밀도가 사용되는 심하게 기울어지거나 곡선 모" "델에서는 지지되지 않는 고체 채우기가 말려 베개 현상이 발생할 수 있습니다.\n" "\n" "이 옵션을 활성화하면 약간 지원되지 않는 내부 솔리드 채우기 위에 내부 브릿지 " -"레이어가 인쇄됩니다. 아래 옵션은 필터링 양, 즉 생성된 내부 브릿지 양을 제어합" +"레이어가 출력됩니다. 아래 옵션은 필터링 양, 즉 생성된 내부 브릿지 양을 제어합" "니다.\n" "\n" "비활성화됨 - 이 옵션을 비활성화합니다. 이는 기본 동작이며 대부분의 경우 잘 작" @@ -9848,10 +10036,10 @@ msgid "" msgstr "압출기 주변의 회피 반경. 개체별 출력에서 충돌 방지에 사용됩니다." msgid "Nozzle height" -msgstr "" +msgstr "노즐 높이" msgid "The height of nozzle tip." -msgstr "" +msgstr "노즐 팁의 높이." msgid "Bed mesh min" msgstr "배드 메쉬 최소" @@ -9866,8 +10054,8 @@ msgid "" "your printer manufacturer. The default setting is (-99999, -99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" -"이 옵션은 허용되는 배드 메쉬 영역의 최소 지점을 설정합니다. 프로브의 XY 오프" -"셋으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" +"이 옵션은 허용되는 배드 메쉬 영역의 최소 지점을 설정합니다. 프로브의 XY 옵셋" +"으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" "가 베드 영역 밖으로 나가지 않도록 하려면 베드 메쉬의 최소 및 최대 지점을 적절" "하게 설정해야 합니다. OrcaSlicer는adaptive_bed_mesh_min/" "adaptive_bed_mesh_max 값이 이러한 최소/최대 포인트를 초과하지 않도록 보장합니" @@ -9888,8 +10076,8 @@ msgid "" "your printer manufacturer. The default setting is (99999, 99999), which " "means there are no limits, thus allowing probing across the entire bed." msgstr "" -"이 옵션은 허용되는 침대 메쉬 영역의 최대 지점을 설정합니다. 프로브의 XY 오프" -"셋으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" +"이 옵션은 허용되는 침대 메쉬 영역의 최대 지점을 설정합니다. 프로브의 XY 옵셋" +"으로 인해 대부분의 프린터는 전체 베드를 프로브할 수 없습니다. 프로브 포인트" "가 베드 영역 밖으로 나가지 않도록 하려면 베드 메쉬의 최소 및 최대 지점을 적절" "하게 설정해야 합니다. OrcaSlicer는adaptive_bed_mesh_min/" "adaptive_bed_mesh_max 값이 이러한 최소/최대 포인트를 초과하지 않도록 보장합니" @@ -9924,7 +10112,7 @@ msgid "Only used as a visual help on UI" msgstr "UI의 시각적 도움말로만 사용됨" msgid "Extruder offset" -msgstr "압출기 오프셋" +msgstr "압출기 옵셋" msgid "Flow ratio" msgstr "유량 비율" @@ -10292,6 +10480,9 @@ msgstr "정육면체 지지대" msgid "Lightning" msgstr "번개" +msgid "Cross Hatch" +msgstr "크로스 해치" + msgid "Sparse infill anchor length" msgstr "드문 채우기 고정점 길이" @@ -10562,13 +10753,16 @@ msgstr "" "야 합니다" msgid "Precise Z height" -msgstr "" +msgstr "정확한 Z 높이" msgid "" "Enable this to get precise z height of object after slicing. It will get the " "precise object height by fine-tuning the layer heights of the last few " "layers. Note that this is an experimental parameter." msgstr "" +"슬라이싱 후 객체의 정확한 z 높이를 얻으려면 이 옵션을 활성화하세요. 마지막 " +"몇 레이어의 레이어 높이를 미세 조정하여 정확한 개체 높이를 얻습니다. 이는 실" +"험적인 매개변수입니다." msgid "Arc fitting" msgstr "원호 맞춤" @@ -11182,7 +11376,7 @@ msgid "" "cooling is enabled." msgstr "" "더 나은 레이어 냉각을 위해 속도를 낮추는 경우 위의 최소 레이어 시간을 유지하" -"기 위해 프린터가 느려지는 최소 인쇄 속도입니다." +"기 위해 프린터가 느려지는 최소 출력 속도입니다." msgid "Nozzle diameter" msgstr "노즐 직경" @@ -11457,7 +11651,7 @@ msgstr "" "를 뒤로 당깁니다. 후퇴를 비활성화하려면 0을 설정하세요" msgid "Long retraction when cut(experimental)" -msgstr "" +msgstr "절단 시 긴 후퇴(실험적)" msgid "" "Experimental feature.Retracting and cutting off the filament at a longer " @@ -11465,14 +11659,17 @@ msgid "" "significantly, it may also raise the risk of nozzle clogs or other printing " "problems." msgstr "" +"실험적 기능. 퍼지를 최소화하기 위해 변경하는 동안 더 먼 거리에서 필라멘트를 " +"집어넣고 절단합니다. 이렇게 하면 플러시가 크게 줄어들지만 노즐 막힘이나 기타 " +"출력 문제가 발생할 위험이 높아질 수도 있습니다." msgid "Retraction distance when cut" -msgstr "" +msgstr "절단 시 후퇴 거리" msgid "" "Experimental feature.Retraction length before cutting off during filament " "change" -msgstr "" +msgstr "실험적 특징.필라멘트 교환시 절단 전 후퇴길이" msgid "Z hop when retract" msgstr "후퇴 시 Z 올리기" @@ -11607,7 +11804,7 @@ msgstr "설정된 남은 출력 시간 비활성화" msgid "" "Disable generating of the M73: Set remaining print time in the final gcode" -msgstr "M73 생성 비활성화: 최종 G코드에 남은 인쇄 시간 설정" +msgstr "M73 생성 비활성화: 최종 G코드에 남은 출력 시간 설정" msgid "Seam position" msgstr "솔기 위치" @@ -11711,8 +11908,8 @@ msgid "" "percentage (e.g., 80%), the speed is calculated based on the respective " "outer or inner wall speed. The default value is set to 100%." msgstr "" -"이 옵션은 스카프 조인트의 인쇄 속도를 설정합니다. 스카프 조인트를 느린 속도" -"(100mm/s 미만)로 인쇄하는 것이 좋습니다. 또한 설정 속도가 외벽 또는 내벽의 속" +"이 옵션은 스카프 조인트의 출력 속도를 설정합니다. 스카프 조인트를 느린 속도" +"(100mm/s 미만)로 출력하는 것이 좋습니다. 또한 설정 속도가 외벽 또는 내벽의 속" "도와 크게 다른 경우 '압출 속도 평탄화'를 활성화하는 것이 좋습니다. 여기에 지" "정된 속도가 외부 또는 내부 벽의 속도보다 높을 경우 프린터는 기본적으로 두 가" "지 속도 중 더 느린 속도로 설정됩니다. 백분율(예: 80%)로 지정되면 속도는 각각" @@ -11800,13 +11997,13 @@ msgid "" "print order as in these modes it is more likely an external perimeter is " "printed immediately after a deretraction move." msgstr "" -"외부/내부 또는 내부/외부/내부 벽 인쇄 순서로 인쇄할 때 외부 둘레 시작 부분에" +"외부/내부 또는 내부/외부/내부 벽 출력 순서로 출력할 때 외부 둘레 시작 부분에" "서 잠재적인 과잉 압출의 가시성을 최소화하기 위해 외부 둘레 시작 부분에서 내부" "에 후퇴가 약간 수행됩니다. 이렇게 하면 압출에 대한 모든 잠재력이 외부 표면에" "서 숨겨집니다.\n" "\n" -"외부/내부 또는 내부/외부/내부 벽 인쇄 순서로 인쇄할 때 유용합니다. 이러한 모" -"드에서는 후퇴 이동 직후 외부 둘레가 인쇄될 가능성이 더 높기 때문입니다." +"외부/내부 또는 내부/외부/내부 벽 출력 순서로 출력할 때 유용합니다. 이러한 모" +"드에서는 후퇴 이동 직후 외부 둘레가 출력될 가능성이 더 높기 때문입니다." msgid "Wipe speed" msgstr "닦기 속도" @@ -12016,7 +12213,7 @@ msgid "Close holes" msgstr "구멍 닫기" msgid "Z offset" -msgstr "Z 오프셋" +msgstr "Z 옵셋" msgid "" "This value will be added (or subtracted) from all the Z coordinates in the " @@ -12813,8 +13010,8 @@ msgid "" "top-surface. 'One wall threshold' is only visibile if this setting is set " "above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" -"짧고 닫히지 않은 벽이 인쇄되는 것을 방지하려면 이 값을 조정하십시오. 이로 인" -"해 인쇄 시간이 늘어날 수 있습니다. 값이 높을수록 더 많은 벽과 긴 벽이 제거됩" +"짧고 닫히지 않은 벽이 출력되는 것을 방지하려면 이 값을 조정하십시오. 이로 인" +"해 출력 시간이 늘어날 수 있습니다. 값이 높을수록 더 많은 벽과 긴 벽이 제거됩" "니다.\n" "\n" "참고: 모델 외부의 시각적 틈을 방지하기 위해 하단 및 상단 표면은 이 값의 영향" @@ -12966,13 +13163,13 @@ msgstr "현재 개체 인덱스" msgid "" "Specific for sequential printing. Zero-based index of currently printed " "object." -msgstr "순차 인쇄에만 해당됩니다. 현재 인쇄된 개체의 0 기반 인덱스입니다." +msgstr "순차 출력에만 해당됩니다. 현재 출력된 개체의 0 기반 인덱스입니다." msgid "Has wipe tower" msgstr "와이프 타워 있음" msgid "Whether or not wipe tower is being generated in the print." -msgstr "인쇄물에 와이프타워가 생성되는지 여부입니다." +msgstr "출력물에 와이프타워가 생성되는지 여부입니다." msgid "Initial extruder" msgstr "초기 압출기" @@ -12981,7 +13178,7 @@ msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_tool." msgstr "" -"인쇄에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기 도구와 동일합니다." +"출력에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기 도구와 동일합니다." msgid "Initial tool" msgstr "초기 도구" @@ -12990,13 +13187,13 @@ msgid "" "Zero-based index of the first extruder used in the print. Same as " "initial_extruder." msgstr "" -"인쇄에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기_압출기와 동일합니다." +"출력에 사용된 첫 번째 압출기의 0 기반 인덱스입니다. 초기_압출기와 동일합니다." msgid "Is extruder used?" msgstr "압출기를 사용하나요?" msgid "Vector of bools stating whether a given extruder is used in the print." -msgstr "특정 압출기가 인쇄에 사용되는지 여부를 나타내는 값 입니다." +msgstr "특정 압출기가 출력에 사용되는지 여부를 나타내는 값 입니다." msgid "Volume per extruder" msgstr "압출기당 부피" @@ -13008,7 +13205,7 @@ msgid "Total toolchanges" msgstr "총 도구 변경" msgid "Number of toolchanges during the print." -msgstr "인쇄 중 도구 교환 횟수." +msgstr "출력 중 도구 교환 횟수." msgid "Total volume" msgstr "총량" @@ -13033,25 +13230,25 @@ msgid "" "Total weight of the print. Calculated from filament_density value in " "Filament Settings." msgstr "" -"인쇄물의 총 무게입니다. 필라멘트 설정의 filment_density 값에서 계산됩니다." +"출력물의 총 무게입니다. 필라멘트 설정의 filment_density 값에서 계산됩니다." msgid "Total layer count" msgstr "총 레이어 수" msgid "Number of layers in the entire print." -msgstr "전체 인쇄의 레이어 수입니다." +msgstr "전체 출력의 레이어 수입니다." msgid "Number of objects" msgstr "개체 수" msgid "Total number of objects in the print." -msgstr "인쇄물의 총 개체 수입니다." +msgstr "출력물의 총 개체 수입니다." msgid "Number of instances" msgstr "인스턴스 수" msgid "Total number of object instances in the print, summed over all objects." -msgstr "모든 개체에 대해 합산된 인쇄물의 총 개체 인스턴스 수입니다." +msgstr "모든 개체에 대해 합산된 출력물의 총 개체 인스턴스 수입니다." msgid "Scale per object" msgstr "개체당 크기 조정" @@ -13101,13 +13298,13 @@ msgid "Size of the first layer bounding box" msgstr "첫 번째 레이어 경계 상자의 크기" msgid "Bottom-left corner of print bed bounding box" -msgstr "인쇄 베드 경계 상자의 왼쪽 하단 모서리" +msgstr "출력 베드 경계 상자의 왼쪽 하단 모서리" msgid "Top-right corner of print bed bounding box" -msgstr "인쇄 베드 경계 상자의 오른쪽 상단 모서리" +msgstr "출력 베드 경계 상자의 오른쪽 상단 모서리" msgid "Size of the print bed bounding box" -msgstr "인쇄 베드 경계 상자의 크기" +msgstr "출력 베드 경계 상자의 크기" msgid "Timestamp" msgstr "타임스탬프" @@ -13125,10 +13322,10 @@ msgid "Minute" msgstr "분" msgid "Print preset name" -msgstr "사전 설정 이름 인쇄" +msgstr "사전 설정 이름 출력" msgid "Name of the print preset used for slicing." -msgstr "슬라이스에 사용되는 인쇄 사전 설정의 이름입니다." +msgstr "슬라이스에 사용되는 출력 사전 설정의 이름입니다." msgid "Filament preset name" msgstr "필라멘트 사전 설정 이름" @@ -13164,13 +13361,13 @@ msgstr "레이어 z" msgid "" "Height of the current layer above the print bed, measured to the top of the " "layer." -msgstr "레이어 상단까지 측정된 인쇄 베드 위의 현재 레이어 높이입니다." +msgstr "레이어 상단까지 측정된 출력 베드 위의 현재 레이어 높이입니다." msgid "Maximal layer z" msgstr "최대 레이어 z" msgid "Height of the last layer above the print bed." -msgstr "인쇄 베드 위의 마지막 레이어 높이입니다." +msgstr "출력 베드 위의 마지막 레이어 높이입니다." msgid "Filament extruder ID" msgstr "필라멘트 압출기 ID" @@ -13290,6 +13487,9 @@ msgstr "취소됨" msgid "load_obj: failed to parse" msgstr "load_obj: 구문 분석에 실패" +msgid "load mtl in obj: failed to parse" +msgstr "obj에 mtl 로드: 구문 ​​분석에 실패했습니다" + msgid "The file contains polygons with more than 4 vertices." msgstr "이 파일에는 꼭지점이 4개 이상인 다각형이 포함되어 있습니다." @@ -13413,6 +13613,18 @@ msgstr "교정할 필라멘트를 선택하세요." msgid "The input value size must be 3." msgstr "입력 값 크기는 3이어야 합니다." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"이 기계 유형은 노즐당 16개의 기록 결과만 보유할 수 있습니다. 기존 기록 결과" +"를 삭제한 후 교정을 시작할 수 있습니다. 또는 교정을 계속할 수 있지만 새로운 " +"교정 기록 결과를 생성할 수는 없습니다.\n" +"그래도 교정을 계속하시겠습니까?" + msgid "Connecting to printer..." msgstr "프린터에 연결하는 중..." @@ -13422,6 +13634,23 @@ msgstr "실패한 테스트 결과가 삭제되었습니다." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "동적 유량 교정 결과가 프린터에 저장되었습니다" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"동일한 이름을 가진 기록 교정 결과가 이미 있습니다: %s. 동일한 이름의 결과 중 " +"하나만 저장됩니다. 과거 결과를 재정의하시겠습니까?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"이 기계 유형은 노즐당 %d개의 기록 결과만 보유할 수 있습니다. 이 결과는 저장되" +"지 않습니다." + msgid "Internal Error" msgstr "내부 오류" @@ -13707,9 +13936,6 @@ msgstr "" msgid "Printing Parameters" msgstr "출력 매개변수" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "플레이트 타입" @@ -13756,12 +13982,6 @@ msgstr "K 값으로" msgid "Step value" msgstr "단계 값" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "노즐 직경이 프린터 설정에서 동기화되었습니다" @@ -13775,7 +13995,7 @@ msgid "Flow Dynamics Calibration Result" msgstr "동적 유량 교정 결과" msgid "New" -msgstr "" +msgstr "새로운" msgid "No History Result" msgstr "기록 결과 없음" @@ -13789,24 +14009,21 @@ msgstr "과거 동적 유량 교정 기록 새로 고침" msgid "Action" msgstr "실행" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "이 기계 유형은 노즐당 %d개의 기록 결과만 보유할 수 있습니다." + msgid "Edit Flow Dynamics Calibration" msgstr "동적 유량 교정 편집" -msgid "New Flow Dynamics Calibration" -msgstr "" +msgid "New Flow Dynamic Calibration" +msgstr "새로운 흐름 동적 교정" msgid "Ok" -msgstr "" +msgstr "확인" msgid "The filament must be selected." -msgstr "" - -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" +msgstr "필라멘트를 선택해야 합니다." msgid "Network lookup" msgstr "네트워크 조회" @@ -14203,6 +14420,9 @@ msgid "" "If you continue creating, the preset created will be displayed with its full " "name. Do you want to continue?" msgstr "" +"생성한 필라멘트 이름 %s이(가) 이미 존재합니다.\n" +"계속 생성하면 생성된 사전 설정이 전체 이름과 함께 표시됩니다. 계속하시겠습니" +"까?" msgid "Some existing presets have failed to be created, as follows:\n" msgstr "다음과 같이 일부 기존 사전 설정을 생성하지 못했습니다.\n" @@ -14418,6 +14638,9 @@ msgid "" "volumetric speed has a significant impact on printing quality. Please set " "them carefully." msgstr "" +"필요한 경우 필라멘트 설정으로 이동하여 사전 설정을 편집하세요.\n" +"노즐 온도, 핫베드 온도 및 최대 체적 속도는 출력 품질에 큰 영향을 미칩니다. 신" +"중하게 설정해 주세요." msgid "" "\n" @@ -14427,6 +14650,11 @@ msgid "" "page. \n" "Click \"Sync user presets\" to enable the synchronization function." msgstr "" +"\n" +"\n" +"Studio에서는 사용자 사전 설정 동기화 기능이 활성화되어 있지 않아 장치 페이지" +"에서 필라멘트 설정이 실패할 수 있음을 감지했습니다.\n" +"동기화 기능을 활성화하려면 \"사용자 사전 설정 동기화\"를 클릭하세요." msgid "Printer Setting" msgstr "프린터 설정" @@ -14533,7 +14761,7 @@ msgid "Please select a type you want to export" msgstr "내보내려는 유형을 선택하세요" msgid "Failed to create temporary folder, please try Export Configs again." -msgstr "" +msgstr "임시 폴더를 생성하지 못했습니다. 구성 내보내기를 다시 시도해 보세요." msgid "Edit Filament" msgstr "필라멘트 편집" @@ -14815,6 +15043,243 @@ msgstr "" "메시지 본문: \"%1%\"\n" "오류: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"레이어 높이가 작기 때문에 레이어 라인이 거의 무시할 수 있고 출력 품질이 높습" +"니다. 대부분의 일반적인 출력 케이스에 적합합니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 속도와 가속도가 낮고 성긴 채우기 패턴" +"은 자이로이드입니다. 따라서 출력 품질은 훨씬 높아지지만 출력 시간은 훨씬 길어" +"집니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 약간 더 크고 레이어 라인" +"이 거의 무시할 수 있으며 출력 시간이 약간 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 선이 약간 " +"눈에 띄지만 출력 시간은 더 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 라인이 " +"거의 보이지 않고 출력 품질이 높아지지만 출력 시간은 단축됩니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 라인이 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 선이 거의 보이지 않" +"고 출력 품질이 훨씬 높아지지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 라인이 " +"최소화되고 출력 품질이 높아지지만 출력 시간은 단축됩니다." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0.2mm 노즐의 기본 프로파일과 비교하면 레이어 라인이 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 라인이 최소화되고 " +"출력 품질이 훨씬 높아지지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"이는 일반적인 레이어 높이를 가지며 일반적인 레이어 선과 출력 품질을 가져옵니" +"다. 대부분의 일반적인 출력 케이스에 적합합니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하여 더 많은 벽 루프와 더 높은 성긴 채우기 " +"밀도를 갖습니다. 따라서 출력 강도는 높아지지만 필라멘트 소비가 늘어나고 출력 " +"시간이 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 더 " +"뚜렷해지고 출력 품질이 낮아지지만 출력 시간은 약간 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 더 " +"뚜렷해지고 출력 품질이 낮아지지만 출력 시간은 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선이 덜 " +"뚜렷하고 출력 품질이 높아지지만 출력 시간은 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 선이 덜 뚜렷해지고 " +"출력 품질이 훨씬 높아지지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아 레이어 라인이 거" +"의 무시할 수 있고 출력 품질이 높아지지만 출력 시간은 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작고 속도와 가속도가 " +"낮으며 성긴 채우기 패턴은 자이로이드입니다. 따라서 레이어 라인은 거의 무시할 " +"수 있고 출력 품질은 훨씬 높지만 출력 시간은 훨씬 길어집니다." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"0.4mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 라인을 " +"거의 무시할 수 있고 출력 시간이 길어집니다." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"레이어 높이가 커서 레이어 선이 뚜렷이 보이고 출력 품질과 출력 시간이 보통입니" +"다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하여 더 많은 벽 루프와 더 높은 성긴 채우기 " +"밀도를 갖습니다. 따라서 출력 강도는 높아지지만 필라멘트 소비가 늘어나고 출력 " +"시간이 길어집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 더 " +"뚜렷해지고 출력 품질이 낮아지지만 일부 출력의 경우 출력 시간이 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 훨" +"씬 더 뚜렷해지고 출력 품질이 훨씬 낮아지지만 일부 출력의 경우 출력 시간이 짧" +"아집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선이 덜 " +"뚜렷해지고 출력 품질이 약간 높아지지만 출력 시간은 길어집니다." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0.6mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선이 덜 " +"뚜렷하고 출력 품질이 높아지지만 출력 시간이 길어집니다." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"레이어 높이가 매우 커서 레이어 선이 매우 뚜렷하고 출력 품질이 낮으며 일반적" +"인 출력 시간이 소요됩니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 크고 레이어 라인이 매" +"우 뚜렷해지고 출력 품질이 훨씬 낮아지지만 일부 출력의 경우 출력 시간이 짧아집" +"니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 훨씬 더 크고 레이어 라인" +"이 매우 뚜렷해지고 출력 품질이 훨씬 낮아지지만 일부 출력의 경우 출력 시간이 " +"훨씬 짧아집니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 약간 더 작아서 약간 적지" +"만 여전히 뚜렷한 레이어 라인이 나타나고 출력 품질이 약간 높아지지만 일부 출력" +"의 경우 출력 시간이 길어집니다." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"0.8mm 노즐의 기본 프로파일과 비교하면 레이어 높이가 더 작아서 레이어 선은 적" +"지만 여전히 뚜렷하고 출력 품질은 약간 높지만 일부 출력의 경우 출력 시간이 길" +"어집니다." + msgid "Connected to Obico successfully!" msgstr "Obico에 성공적으로 연결되었습니다!" @@ -15238,6 +15703,47 @@ msgstr "" "ABS 등 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이" "면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "Unload Filament" +#~ msgstr "필라멘트 언로드" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "AMS 슬롯을 선택한 후 \"넣기\" 또는 \"빼기\" 버튼을 눌러 필라멘트를 자동으" +#~ "로 넣거나 뺍니다." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "메인보드" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Orca Slicer로 가져오는 데 실패했습니다. 파일을 다운로드하여 수동으로 가져" +#~ "오세요." + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + #~ msgid "active" #~ msgstr "활성화" @@ -15338,18 +15844,6 @@ msgstr "" #~ msgstr "" #~ "모델 메쉬에 부울 연산을 수행할 수 없습니다. 오직 양수 부품만 내보내집니다." -#~ msgid "Transfer or discard changes" -#~ msgstr "변경 사항 폐기 또는 유지" - -#~ msgid "Old Value" -#~ msgstr "이전 값" - -#~ msgid "New Value" -#~ msgstr "새로운 값" - -#~ msgid "Discard" -#~ msgstr "폐기" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index 381e1b1f66..68eb1c4cf3 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -159,6 +159,7 @@ src/slic3r/Utils/FlashAir.cpp src/slic3r/Utils/MKS.cpp src/slic3r/Utils/OctoPrint.cpp src/slic3r/Utils/Repetier.cpp +src/slic3r/Utils/ProfileDescription.hpp src/slic3r/Utils/Obico.cpp src/slic3r/Utils/SimplyPrint.cpp src/slic3r/Utils/Flashforge.cpp diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index d77c007a59..a483824300 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1906,6 +1906,12 @@ msgstr "Rangschikken" msgid "arrange current plate" msgstr "Huidig printbed rangschikken" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Automatisch roteren" @@ -2378,10 +2384,10 @@ msgstr "" msgid "AMS not connected" msgstr "AMS niet aangesloten" -msgid "Load Filament" -msgstr "Filament laden" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "Lossen" msgid "Ext Spool" @@ -2399,7 +2405,7 @@ msgstr "Opnieuw proberen" msgid "Calibrating AMS..." msgstr "AMS kalibreren..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Er is een probleem opgetreden tijdens de kalibratie. Klik om de oplossing te " "bekijken." @@ -2442,10 +2448,8 @@ msgstr "Grab new filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Kies een AMS sleuf en druk op de \"Laden\" of \"Verwijderen\" knop om het " -"filament automatisch te laden of te verwijderen." msgid "Edit" msgstr "Bewerken" @@ -3059,6 +3063,14 @@ msgstr "" "AMS gaat automatisch verder met een andere spoel met dezelfde filament " "eigenschappen wanneer het huidige filament op is." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Bestand" @@ -3138,6 +3150,45 @@ msgstr "Het uitvoeren van post-processing scripts" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Onbekende fout tijdens het exporteren van de G-code" @@ -3514,18 +3565,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Moederbord" - -msgid "TH" -msgstr "th" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Onbekend" @@ -4048,7 +4087,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Maat:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4188,6 +4227,9 @@ msgstr "Voorvertoning" msgid "Device" msgstr "Apparaat" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Project" @@ -4227,6 +4269,9 @@ msgstr "Print alles" msgid "Send all" msgstr "Alles verzenden" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Sneltoesten" @@ -5002,9 +5047,6 @@ msgstr "Kamer" msgid "Bed" msgstr "Printbed" -msgid "Unload" -msgstr "Lossen" - msgid "Debug Info" msgstr "Informatie over Debuggen" @@ -5174,9 +5216,6 @@ msgstr "Status" msgid "Update" msgstr "Updaten" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Niet nogmaals tonen" @@ -5431,6 +5470,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5883,15 +5928,21 @@ msgstr "Model importeren" msgid "prepare 3mf file..." msgstr "voorbereiden van 3mf bestand..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "project downloaden..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Project %d%% gedownload" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -6163,6 +6214,21 @@ msgstr "Imperiaal" msgid "Units" msgstr "Eenheden" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6240,6 +6306,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6889,6 +6963,9 @@ msgstr "" msgid "Modifying the device name" msgstr "De naam van het apparaat wijzigen" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Verzenden naar de MicroSD-kaart in de printer" @@ -6943,6 +7020,26 @@ msgstr "Receive login report timeout" msgid "Unknown Failure" msgstr "Onbekende fout" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Inloggen op printer" @@ -7151,8 +7248,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "Bij het opnemen van timelapse zonder toolhead is het aan te raden om een " "„Timelapse Wipe Tower” toe te voegen \n" @@ -7562,26 +7659,23 @@ msgstr "Niet gedefinieerd" msgid "Unsaved Changes" msgstr "niet-opgeslagen wijzigingen" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Verwerp of bewaar aanpassingen" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Oude waarde" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Nieuwe waarde" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Overdracht" msgid "Don't save" msgstr "Niet opslaan" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Verwerpen" msgid "Click the right mouse button to display the full text." msgstr "Klik op de rechtermuisknop om de volledige tekst weer te geven." @@ -7647,28 +7741,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7686,9 +7774,6 @@ msgstr "Toon alle presets (inclusief incompatibele)" msgid "Select presets to compare" msgstr "Select presets to compare" -msgid "Transfer" -msgstr "Overdracht" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8170,6 +8255,39 @@ msgstr "Done" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Filament laden" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -10200,6 +10318,9 @@ msgstr "Ondersteuning Cubic" msgid "Lightning" msgstr "Lightning" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10372,10 +10493,10 @@ msgstr "Volledige snelheid op laag" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" msgid "Support interface fan speed" @@ -12991,6 +13112,9 @@ msgstr "Canceled" msgid "load_obj: failed to parse" msgstr "load_obj: failed to parse" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "The file contains polygons with more than 4 vertices." @@ -13107,6 +13231,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -13116,6 +13248,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -13341,9 +13486,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "Plate Type" @@ -13387,12 +13529,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -13420,10 +13556,14 @@ msgstr "" msgid "Action" msgstr "" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13432,13 +13572,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -13819,8 +13952,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14363,6 +14496,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14735,6 +15037,31 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "Lossen" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Kies een AMS sleuf en druk op de \"Laden\" of \"Verwijderen\" knop om het " +#~ "filament automatisch te laden of te verwijderen." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Moederbord" + +#~ msgid "TH" +#~ msgstr "th" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + #~ msgid "active" #~ msgstr "Actief" @@ -14832,18 +15159,6 @@ msgstr "" #~ "Unable to perform boolean operation on model meshes. Only positive parts " #~ "will be exported." -#~ msgid "Transfer or discard changes" -#~ msgstr "Verwerp of bewaar aanpassingen" - -#~ msgid "Old Value" -#~ msgstr "Oude waarde" - -#~ msgid "New Value" -#~ msgstr "Nieuwe waarde" - -#~ msgid "Discard" -#~ msgstr "Verwerpen" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index c586c0561a..1b9d28651c 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -1,8 +1,8 @@ msgid "" msgstr "" -"Project-Id-Version: OrcaSlicer 2.0\n" +"Project-Id-Version: OrcaSlicer 2.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga \n" "Language-Team: \n" @@ -1950,6 +1950,12 @@ msgstr "Ustaw" msgid "arrange current plate" msgstr "ustaw bieżącą płytę" +msgid "Reload All" +msgstr "Przeładuj wszystko" + +msgid "reload all from disk" +msgstr "Przeładuj z dysku" + msgid "Auto Rotate" msgstr "Automatyczna rotacja" @@ -2418,10 +2424,10 @@ msgstr "Auto. uzupełnienie" msgid "AMS not connected" msgstr "AMS niepodłączony" -msgid "Load Filament" +msgid "Load" msgstr "Ładuj" -msgid "Unload Filament" +msgid "Unload" msgstr "Wyładuj" msgid "Ext Spool" @@ -2439,7 +2445,7 @@ msgstr "Ponów" msgid "Calibrating AMS..." msgstr "Kalibracja AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Wystąpił problem podczas kalibracji. Kliknij, aby zobaczyć rozwiązanie." @@ -2485,10 +2491,10 @@ msgstr "" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" "Wybierz Slot AMS, a następnie naciśnij przycisk \"Ładuj\" lub \"Wyładuj\" ," -"aby automatycznie załadować lub wyładować filament." +"aby automatycznie załadować lub wyładować filamenty." msgid "Edit" msgstr "Edytuj" @@ -3123,6 +3129,16 @@ msgstr "" "AMS automatycznie przełączy się na inną szpule z tym samym rodzajem " "filamentu, gdy obecny filament się skończy" +msgid "Air Printing Detection" +msgstr "Wykrywanie druku w powietrzu" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Wykrywa zatkanie i zacięcie się filamentu, natychmiast zatrzymując " +"drukowanie w celu oszczędzenia czasu i filamentu." + msgid "File" msgstr "Plik" @@ -3201,6 +3217,60 @@ msgstr "Uruchamianie skryptu post-procesingu" msgid "Successfully executed post-processing script" msgstr "Pomyślnie wykonano skrypt post-processingu" +msgid "Unknown error occured during exporting G-code." +msgstr "Nieznany błąd podczas eksportowania kodu G." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. " +"Być może karta SD jest zablokowana do zapisu?\n" +"Komunikat błędu: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. " +"Może być problem z urządzeniem docelowym, spróbuj ponownie wyeksportować lub " +"użyć innego urządzenia. Uszkodzony plik wyjściowego G-code znajduje się w " +"pliku %1%.tmp." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Zmiana nazwy G-code po skopiowaniu pliku do folderu docelowego nie powiodła " +"się. Bieżąca ścieżka to %1%.tmp. Spróbuj ponownie go wyeksportować." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Kopiowanie tymczasowego G-code zakończono, ale oryginalny G-code w " +"lokalizacji %1% nie mógł być otwarty podczas sprawdzania kopii. Wygenerowany " +"G-code znajduje się w lokalizacji %2%.tmp." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Kopiowanie tymczasowego G-code zakończono, ale wyeksportowany G-code nie " +"mógł być otwarty podczas sprawdzania kopii. Wygenerowany G-code znajduje się " +"w lokalizacji %1%.tmp." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "Plik G-code został wyeksportowany do %1%" + msgid "Unknown error when export G-code." msgstr "Nieznany błąd podczas eksportowania kodu G." @@ -3313,9 +3383,9 @@ msgid "" "Please make sure whether to use the temperature to print.\n" "\n" msgstr "" -"Extruder może być zablokowany, gdy temperatura wykracza poza zalecany " +"Dysza może zostać zablokowana, gdy temperatura wykracza poza zalecany " "zakres.\n" -"Upewnij się, czy temperatura jest odpowiednia do drukowania.\n" +"Upewnij się, czy temperatura do druku jest odpowiednia.\n" "\n" #, c-format, boost-format @@ -3590,18 +3660,6 @@ msgstr "Pauza z powodu błędu pierwszej warstwy" msgid "Nozzle clog pause" msgstr "Pauza z powodu zatkanej dyszy" -msgid "MC" -msgstr "MC (Płytka główna)" - -msgid "MainBoard" -msgstr "MainBoard (Płyta główna)" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Nieznany" @@ -4137,7 +4195,7 @@ msgstr "Objętość:" msgid "Size:" msgstr "Rozmiar:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4278,6 +4336,9 @@ msgstr "Podgląd" msgid "Device" msgstr "Urządzenie" +msgid "Multi-device" +msgstr "Wiele-Urządzeń" + msgid "Project" msgstr "Projekt" @@ -4318,6 +4379,9 @@ msgstr "Drukuj wszystko" msgid "Send all" msgstr "Wyślij wszystko" +msgid "Send to Multi-device" +msgstr "Wyślij do wielu urządzeń" + msgid "Keyboard Shortcuts" msgstr "Skróty klawiszowe" @@ -5138,9 +5202,6 @@ msgstr "Cham" msgid "Bed" msgstr "Stół" -msgid "Unload" -msgstr "Wyładowaj" - msgid "Debug Info" msgstr "Informacje debugowania" @@ -5326,9 +5387,6 @@ msgstr "Status" msgid "Update" msgstr "Aktualizacja" -msgid "HMS" -msgstr "Stan drukarki (HMS)" - msgid "Don't show again" msgstr "Nie pokazuj ponownie" @@ -5581,6 +5639,14 @@ msgstr "Zezwól na dźwiękowe powiadomienia" msgid "Filament Tangle Detect" msgstr "Wykrywanie splątanych filamentów" +msgid "Nozzle Clumping Detection" +msgstr "Wykrywanie \"zalepienia\" się dyszy" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Sprawdź, czy dysza nie została zatkana filamentem lub innych obcych " +"przedmiotem." + msgid "Nozzle Type" msgstr "Rodzaj dyszy" @@ -6041,18 +6107,25 @@ msgstr "Importowanie modelu" msgid "prepare 3mf file..." msgstr "przygotuj plik 3mf..." +msgid "Download failed, unknown file format." +msgstr "Pobieranie nie powiodło się, nieznany format pliku." + msgid "downloading project ..." msgstr "pobieranie projektu ..." +msgid "Download failed, File size exception." +msgstr "Pobieranie nie powiodło się, wyjątek - rozmiar pliku." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projekt pobrany w %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Import do Orca Slicer nie powiódł się. Pobierz plik i zaimportuj go ręcznie." +"Importowanie do OrcaSlicer nie powiodło się. Proszę pobrać plik i ręcznie go " +"zaimportować." msgid "Import SLA archive" msgstr "Importuj archiwum SLA" @@ -6330,6 +6403,27 @@ msgstr "Imperialny" msgid "Units" msgstr "Jednostki" +msgid "Allow only one OrcaSlicer instance" +msgstr "Zezwól tylko na jedną instancję programu OrcaSlicer" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" +"W systemie macOS domyślnie działa tylko jedna instancja aplikacji. Jednak z " +"wiersza poleceń można uruchomić kilka instancji tej samej aplikacji. W takim " +"przypadku te ustawienia umożliwią działanie tylko jednej instancji." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" +"Jeśli ta opcja jest włączona, po uruchomieniu OrcaSlicer, gdy inna instancja " +"tego samego OrcaSlicer jest już uruchomiona, ta instancja zostanie ponownie " +"aktywowana." + msgid "Home" msgstr "Strona główna" @@ -6419,6 +6513,17 @@ msgstr "" "Jeśli ta opcja jest włączona, Orca będzie automatycznie zapamiętywać i " "przełączać konfigurację filamentu/procesu dla każdej drukarki." +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" +"Obsługa wielu urządzeń (zacznie być aktywna po ponownym uruchomieniu Slicera)" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" +"Dzięki tej opcji możesz wysyłać zadania do wielu urządzeń jednocześnie i " +"zarządzać nimi." + msgid "Network" msgstr "Sieć" @@ -7072,6 +7177,9 @@ msgstr "Automatyczna kalibracja przepływu za pomocą mikrolidaru" msgid "Modifying the device name" msgstr "Modyfikacja nazwy urządzenia" +msgid "Bind with Pin Code" +msgstr "Powiąż za pomocą kodu PIN" + msgid "Send to Printer SD card" msgstr "Wysłać na kartę SD drukarki" @@ -7124,6 +7232,28 @@ msgstr "Czas oczekiwania na otrzymanie raportu logowania minął" msgid "Unknown Failure" msgstr "Nieznana awaria" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Proszę znaleźć kod PIN na ekranie drukarki w zakładce konta\n" +"i wprowadź go poniżej." + +msgid "Can't find Pin Code?" +msgstr "Nie możesz odszukać kodu PIN?" + +msgid "Pin Code" +msgstr "Kod PIN" + +msgid "Binding..." +msgstr "Łączenie..." + +msgid "Please confirm on the printer screen" +msgstr "Proszę potwierdzić na ekranie drukarki" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Logowanie nie powiodło się. Proszę sprawdzić kod PIN." + msgid "Log in printer" msgstr "Zaloguj się do drukarki" @@ -7771,26 +7901,23 @@ msgstr "Niezdefiniowany" msgid "Unsaved Changes" msgstr "Niezapisane zmiany" -msgid "Actions For Unsaved Changes" -msgstr "Działania dotyczące niezapisanych zmian" +msgid "Transfer or discard changes" +msgstr "Przenieść lub odrzucić zmiany" -msgid "Preset Value" -msgstr "Wartość domyślna" +msgid "Old Value" +msgstr "Stara wartość" -msgid "Modified Value" -msgstr "Zmieniona wartość" +msgid "New Value" +msgstr "Nowa wartość" -msgid "Transfer Modified Value" -msgstr "Przenieś zmienioną wartość" +msgid "Transfer" +msgstr "Przenieś" msgid "Don't save" msgstr "Nie zapisuj" -msgid "Use Preset Value" -msgstr "Użyj wartości domyślnej" - -msgid "Save Modified Value" -msgstr "Zapisz zmienione wartości" +msgid "Discard" +msgstr "Odrzuć" msgid "Click the right mouse button to display the full text." msgstr "Kliknij prawym przyciskiem myszy, aby wyświetlić pełny tekst." @@ -7852,41 +7979,31 @@ msgstr "Zmieniono niektóre ustawienia profilu \"%1%\"." msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" "\n" -"Czy chciałbyś zapisać te zmienione ustawienia (zmodyfikowaną wartość)?" +"Możesz zapisać lub odrzucić zmienione wartości w profilu." msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" "\n" -"\n" -"Czy chciałbyś zachować te zmienione ustawienia (zmodyfikowaną wartość) po " -"przełączeniu profilu?" +"Możesz zapisać lub odrzucić zmodyfikowane wartości profilu, lub kontynuować " +"ich używanie w nowym profilu." -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." -msgstr "" -"Wcześniej zmodyfikowałeś swoje ustawienia i masz zamiar nadpisać je nowymi." +msgid "You have previously modified your settings." +msgstr "Wcześniej zmodyfikowałeś swoje ustawienia." msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" "\n" -"Czy chcesz zachować obecnie zmienione ustawienia, czy może chcesz użyć " -"ustawień domyślnych?" - -msgid "" -"\n" -"Do you want to save your current modified settings?" -msgstr "" -"\n" -"Czy chcesz zapisać obecnie zmodyfikowane ustawienia?" +"Możesz zapisać lub odrzucić zmodyfikowane wartości w profilu, lub " +"kontynuować ich używanie w nowym profilu" msgid "Extruders count" msgstr "Liczba extruderów" @@ -7903,9 +8020,6 @@ msgstr "Pokaż wszystkie profile (łącznie z niekompatybilnymi)" msgid "Select presets to compare" msgstr "Wybierz profile do porównania" -msgid "Transfer" -msgstr "Przenieś" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8398,6 +8512,39 @@ msgstr "Gotowe" msgid "resume" msgstr "wznów" +msgid "Resume Printing" +msgstr "Wznów zadanie drukowania" + +msgid "Resume Printing(defects acceptable)" +msgstr "Wznów drukowanie (wady są do zaakceptowania)" + +msgid "Resume Printing(problem solved)" +msgstr "Wznów drukowanie (problem został rozwiązany)" + +msgid "Stop Printing" +msgstr "Zatrzymaj Drukowanie" + +msgid "Check Assistant" +msgstr "Sprawdź Asystenta" + +msgid "Filament Extruded, Continue" +msgstr "Ekstruzja filamentu, Kontynuuj" + +msgid "Not Extruded Yet, Retry" +msgstr "Jeszcze nie wydrukowano, Spróbuj ponownie" + +msgid "Finished, Continue" +msgstr "Zakończono, Kontynuuj" + +msgid "Load Filament" +msgstr "Ładuj" + +msgid "Filament Loaded, Resume" +msgstr "Filament załadowany, Wznów" + +msgid "View Liveview" +msgstr "Podgląd na żywo" + msgid "Confirm and Update Nozzle" msgstr "Potwierdź i zaktualizuj dyszę" @@ -9216,7 +9363,7 @@ msgstr "" "grudek na powierzchni" msgid "Avoid crossing wall - Max detour length" -msgstr "- Maksymalna długość objazdu" +msgstr "Maksymalna długość objazdu" msgid "" "Maximum detour distance for avoiding crossing wall. Don't detour if the " @@ -10715,17 +10862,20 @@ msgid "Honeycomb" msgstr "Plaster miodu" msgid "Adaptive Cubic" -msgstr "Adaptacyjny sześcienny" +msgstr "Sześcian adaptacyjny" msgid "3D Honeycomb" msgstr "3D Plaster miodu" msgid "Support Cubic" -msgstr "Podpora sześcienna" +msgstr "Sześcian podparty" msgid "Lightning" msgstr "Piorun" +msgid "Cross Hatch" +msgstr "Krzyżowy podparty" + msgid "Sparse infill anchor length" msgstr "Długość kotwiczenia wypełnienia" @@ -12016,8 +12166,9 @@ msgid "" "Z hop will only come into effect when Z is above this value and is below the " "parameter: \"Z hop upper boundary\"" msgstr "" -"Z-hop będzie działać tylko wtedy, gdy Z jest powyżej tej wartości i poniżej " -"parametru: \"górna granica Z-hop\"" +"Jeśli podana jest dodatnia wartość, oś Z będzie podnosić się tylko poniżej " +"ustawionej tutaj granicy. W ten sposób możesz zablokować podnoszenie się osi " +"Z powyżej ustawionej wysokości." msgid "Z hop upper boundary" msgstr "Górna granica Z-hop" @@ -12026,8 +12177,9 @@ msgid "" "If this value is positive, Z hop will only come into effect when Z is above " "the parameter: \"Z hop lower boundary\" and is below this value" msgstr "" -"Jeśli ta wartość jest dodatnia to Z-hop będzie działał tylko wtedy, gdy oś Z " -"jest powyżej i poniżej parametru: \"dolna granica Z-hop\"" +"Jeśli podano wartość dodatnią, oś Z będzie podnosić się tylko powyżej " +"określonej tutaj wysokości. Dzięki temu możesz wyłączyć podnoszenie osi Z " +"podczas drukowania pierwszych warstw (na początku drukowania)." msgid "Z hop type" msgstr "Typ Z-hop" @@ -12081,7 +12233,7 @@ msgid "Top and Bottom" msgstr "Na górnych i dolnych" msgid "Extra length on restart" -msgstr "Dodatkowa ilość dla powrotu" +msgstr "Dodatkowa długość przed wznowieniem" msgid "" "When the retraction is compensated after the travel move, the extruder will " @@ -12445,7 +12597,8 @@ msgid "" "expressed as a %, it will be computed over nozzle diameter" msgstr "" "Maksymalna odległość przesuwania punktów w XY, aby osiągnąć gładką spiralę. " -"Jeśli wyrażona w procentach, będzie obliczona na podstawie średnicy dyszy" +"Jeśli zostanie wyrażona w procentach, będzie obliczona na podstawie średnicy " +"dyszy" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " @@ -13916,6 +14069,9 @@ msgstr "Anulowano" msgid "load_obj: failed to parse" msgstr "load_obj: nie udało się przetworzyć" +msgid "load mtl in obj: failed to parse" +msgstr "load_obj: nie udało się przetworzyć" + msgid "The file contains polygons with more than 4 vertices." msgstr "Plik zawiera wielokąty z więcej niż 4 wierzchołkami." @@ -14042,6 +14198,18 @@ msgstr "Proszę wybrać filament do kalibracji." msgid "The input value size must be 3." msgstr "Rozmiar wartości wejściowej musi wynosić 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"To urządzenie może przechowywać tylko 16 wyników w historii dla jednej " +"dyszy. Możesz usunąć istniejące wyniki w historii, a następnie rozpocząć " +"kalibrację lub kontynuować, ale nie będzie można tworzyć nowych wyników " +"kalibracji. Czy nadal chcesz kontynuować kalibrację?" + msgid "Connecting to printer..." msgstr "Łączenie z drukarką..." @@ -14051,6 +14219,23 @@ msgstr "Nieudany wynik testu został odrzucony." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Wynik Kalibracji Dynamiki Przepływu został zapisany w drukarce" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"W historii kalibracji istnieje już wynik o nazwie: %s. Czy na pewno chcesz " +"zastąpić poprzedni wynik?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"To urządzenie może przechowywać tylko %d wyników w historii dla jednej " +"dyszy. Ten wynik nie zostanie zapisany." + msgid "Internal Error" msgstr "Błąd wewnętrzny" @@ -14357,9 +14542,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Parametry drukowania" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "Typ Płyty" @@ -14407,12 +14589,6 @@ msgstr "Do wartości K" msgid "Step value" msgstr "Wartość kroku" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Średnica dyszy została zsynchronizowana z ustawień drukarki" @@ -14440,10 +14616,15 @@ msgstr "Odświeżanie historii zapisów kalibracji Flow Dynamics" msgid "Action" msgstr "Akcja" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"To urządzenie może przechowywać tylko %d wyników w historii dla jednej dyszy." + msgid "Edit Flow Dynamics Calibration" msgstr "Edytuj Kalibrację Dynamiki Przepływu" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "Nowa Kalibracji Dynamiki Przepływu" msgid "Ok" @@ -14452,15 +14633,6 @@ msgstr "Ok" msgid "The filament must be selected." msgstr "Należy wybrać filament." -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" -"W historii kalibracji istnieje już wynik o nazwie: %s. Czy na pewno chcesz " -"zastąpić poprzedni wynik?" - msgid "Network lookup" msgstr "Wyszukiwanie w sieci" @@ -15511,6 +15683,272 @@ msgstr "" "Treść wiadomości: \"%1%\"\n" "Błąd: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" +"Ta niska wysokość warstwy prowadzi do praktycznie niewidocznych warstw i " +"wysokiej jakości wydruku. Nadaje się do większości standardowych przypadków " +"druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.2 mm, ma niższe " +"prędkości i przyspieszenia, a wzorzec rzadkiego wypełnienia to Gyroidalny. " +"Dlatego daje znacznie lepszą jakość druku, ale znacznie wydłuża czas druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.2 mm, ma " +"nieznacznie większą wysokość warstwy, co skutkuje praktycznie " +"niezauważalnymi liniami warstw i nieco krótszym czasem druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.2 mm, ma większą " +"wysokość warstwy, co skutkuje lekko widocznymi liniami warstw, ale krótszym " +"czasem druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"W porównaniu z domyślnym profilem dyszy o średnicy 0.2 mm, ma mniejszą " +"wysokość warstwy, co prowadzi do praktycznie niewidocznych linii warstw i " +"wyższej jakości druku, ale wydłuża czas druku." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dyszy 0.2 mm, ma mniejszą wysokość " +"warstwy, niższe prędkości i przyspieszenie, oraz wzór wypełnienia jest " +"gyroidalny. To prowadzi do praktycznie niewidocznych linii warstw i wyższej " +"jakości druku, ale znacznie wydłuża czasu druku." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"W porównaniu ze standardowym profilem dyszy o średnicy 0.2 mm, ten profil ma " +"mniejszą wysokość warstwy, co prowadzi do praktycznie niewidocznych linii " +"warstw i znacznie wyższa jakość wydruku, ale jednocześnie wydłuża jego czas." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"W porównaniu ze standardowym profilem dyszy o średnicy 0.2 mm, ma on " +"mniejszą wysokość warstwy, niższe prędkości i przyspieszenia, a także " +"zastosowany jest wzór wypełnienia Gyroid. To prowadzi do praktycznie " +"niewidocznych warstw i znacznie lepszej jakości wydruku, ale jednocześnie " +"wydłuża jego czas." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Ta standardowa wysokość warstwy zapewnia normalną jakość druku, odpowiednią " +"dla większości standardowych przypadków druku." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"W porównaniu ze standardowym profilem dla dyszy o średnicy 0.4 mm, ten " +"profil ma więcej obwodów i większą gęstość wypełnienia. To zwiększa " +"wytrzymałość wydruku, ale prowadzi także do większego zużycia materiału i " +"dłuższego czasu druku." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"W porównaniu ze standardowym profilem dla dyszy o średnicy 0.4 mm, ten " +"profil ma większą wysokość warstwy. W rezultacie warstwy są bardziej " +"widoczne, co obniża jakość druku, ale jednocześnie delikatnie skraca jego " +"czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"W porównaniu ze standardowym profilem dla dyszy o średnicy 0.4 mm, ten " +"profil ma większą wysokość warstwy. W rezultacie warstwy są bardziej " +"widoczne, co obniża jakość druku, ale jednocześnie skraca jego czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są mniej widoczne, co " +"skutkuje wyższą jakością druku, ale jednocześnie wydłuża się jego czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy, niższe prędkości i przyspieszenia, oraz wzór " +"wypełnienia Gyroidalny. W rezultacie warstwy są mniej widoczne, co prowadzi " +"do znacznie wyższej jakości druku, ale zauważalnie dłuższego czasu druku." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są prawie niewidoczne, co " +"prowadzi do wyższej jakości druku, ale wydłużenia jego czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy, niższe prędkości i przyspieszenia, a także " +"zastosowany wzór wypełnienia gyroidalnego. W rezultacie warstwy są prawie " +"niewidoczne, co prowadzi do znacznie wyższej jakości druku, ale wydłuża jego " +"czas." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.4 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są prawie niewidoczne, co " +"prowadzi do wyższej jakości druku, ale wydłużenia jego czas." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Ta wyższa wysokość warstwy, skutkuje widocznymi liniami warstw i zwykłą " +"jakością i czasem druku." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"więcej obwodów i większą gęstość wypełnienia. Skutkuje to zwiększeniem " +"wytrzymałości wydrukowanego elementu, ale zwiększa zużycie materiału i czas " +"wydruku." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"większą wysokość warstwy. Skutkuje to bardziej zauważalnymi warstwami i " +"obniżeniem jakości druku, chociaż w niektórych przypadkach może skrócić jego " +"czas." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"większą wysokość warstwy. Skutkuje to bardziej zauważalnymi warstwami i " +"znacznym obniżeniem jakości druku, chociaż w niektórych przypadkach może " +"skrócić jego czas." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są mniej zauważalne, co " +"powoduje nieznaczny wzrost jakości druku, ale jednocześnie zwiększa czas " +"wydruku." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.6 mm, ten profil ma " +"mniejszą wysokość warstwy. W rezultacie warstwy są mniej zauważalne, co " +"prowadzi do wyższej jakości druku, ale wydłuża jego czas." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" +"Ta bardzo duża wysokość warstwy skutkuje wyraźnie widocznymi liniami warstw, " +"niską jakością druku, a także standardowym czasem druku." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0.8 mm, ten profil ma " +"nieco większą wysokość warstwy. W rezultacie są to wyraźnie widoczne warstwy " +"i znacznie niższa jakość druku, ale w niektórych przypadkach skraca to czas " +"wydruku." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0,8 mm, ten profil ma " +"znacznie większą wysokość warstwy. W rezultacie warstwy są bardzej widoczne, " +"a jakość druku znacznie niższa, ale w niektórych przypadkach znacznie skraca " +"się czas wydruku." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0,8 mm, ten profil ma " +"nieco mniejszą wysokość warstwy. W rezultacie warstwy są nieco mniej " +"widoczne, a jakość druku jest nieco lepsza, ale w niektórych przypadkach " +"czas druku może się nieco wydłużyć." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"W porównaniu z domyślnym profilem dla dyszy o średnicy 0,8 mm, ten profil ma " +"mniejszą wysokość warstwy, co prowadzi do mniejszych, ale nadal widocznych " +"warstw i lepszej jakości druku, a w niektórych przypadkach może się wydłużyć " +"czas wydruku." + msgid "Connected to Obico successfully!" msgstr "Pomyślnie połączono z SimplyPrint!" @@ -15944,11 +16382,94 @@ msgstr "" "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "zmniejszyć prawdopodobieństwo odkształceń." -#~ msgid "If you would like to try Bambu Studio Beta, you may click to" -#~ msgstr "Jeśli chciałbyś wypróbować OrcaSlicer Beta, możesz kliknąć tutaj." +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Działania dotyczące niezapisanych zmian" -#~ msgid "The 3mf file version is newer than the current Bambu Studio version." -#~ msgstr "Wersja pliku 3MF jest nowsza niż obecna w wersji OrcaSlicer." +#~ msgid "Preset Value" +#~ msgstr "Wartość domyślna" + +#~ msgid "Modified Value" +#~ msgstr "Zmieniona wartość" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Przenieś zmienioną wartość" + +#~ msgid "Use Preset Value" +#~ msgstr "Użyj wartości domyślnej" + +#~ msgid "Save Modified Value" +#~ msgstr "Zapisz zmienione wartości" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Czy chciałbyś zapisać te zmienione ustawienia (zmodyfikowaną wartość)?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "Czy chciałbyś zachować te zmienione ustawienia (zmodyfikowaną wartość) po " +#~ "przełączeniu profilu?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Wcześniej zmodyfikowałeś swoje ustawienia i masz zamiar nadpisać je " +#~ "nowymi." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Czy chcesz zachować obecnie zmienione ustawienia, czy może chcesz użyć " +#~ "ustawień domyślnych?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Czy chcesz zapisać obecnie zmodyfikowane ustawienia?" + +#~ msgid "Unload Filament" +#~ msgstr "Wyładuj" + +#~ msgid "A problem occured during calibration. Click to view the solution." +#~ msgstr "" +#~ "Wystąpił problem podczas kalibracji. Kliknij, aby zobaczyć rozwiązanie." + +#~ msgid "MC" +#~ msgstr "MC (Płytka główna)" + +#~ msgid "MainBoard" +#~ msgstr "MainBoard (Płyta główna)" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "Stan drukarki (HMS)" + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" #~ msgid "active" #~ msgstr "aktywny" @@ -16058,18 +16579,6 @@ msgstr "" #~ "Nie można wykonywać operacji boolowskich na siatkach modeli. Eksportowane " #~ "będą tylko części dodatnie." -#~ msgid "Transfer or discard changes" -#~ msgstr "Przenieść lub odrzucić zmiany" - -#~ msgid "Old Value" -#~ msgstr "Stara wartość" - -#~ msgid "New Value" -#~ msgstr "Nowa wartość" - -#~ msgid "Discard" -#~ msgstr "Odrzuć" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -17314,10 +17823,6 @@ msgstr "" #~ msgid "Connection to the printer failed" #~ msgstr "Nie udało się połączyć z drukarką" -#~ msgid "A problem occurred during calibration. Click to view the solution." -#~ msgstr "" -#~ "Wystąpił problem podczas kalibracji. Kliknij, aby zobaczyć rozwiązanie." - #~ msgid "" #~ "All the selected objects are on the locked plate,\n" #~ "We cannot do auto-arrange on these objects." diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index df6ba6fd86..f84e1d99c5 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-10 22:59+0800\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2024-04-16 11:17-0300\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" @@ -115,8 +115,13 @@ msgid "Lay on face" msgstr "Ajustar face à superfície" #, boost-format -msgid "Filament count exceeds the maximum number that painting tool supports. only the first %1% filaments will be available in painting tool." -msgstr "A contagem de filamentos excede o número máximo que a ferramenta de pintura suporta. Apenas os primeiros %1% filamentos estarão disponíveis na ferramenta de pintura." +msgid "" +"Filament count exceeds the maximum number that painting tool supports. only " +"the first %1% filaments will be available in painting tool." +msgstr "" +"A contagem de filamentos excede o número máximo que a ferramenta de pintura " +"suporta. Apenas os primeiros %1% filamentos estarão disponíveis na " +"ferramenta de pintura." msgid "Color Painting" msgstr "Pintura de cores" @@ -528,7 +533,9 @@ msgid "Cut by Plane" msgstr "Cortar por Plano" msgid "non-manifold edges be caused by cut tool, do you want to fix it now?" -msgstr "as arestas abertas podem ser causadas pela ferramenta de corte, você quer corrigi-las agora?" +msgstr "" +"as arestas abertas podem ser causadas pela ferramenta de corte, você quer " +"corrigi-las agora?" msgid "Repairing model object" msgstr "Reparando objeto do modelo" @@ -549,8 +556,12 @@ msgid "Decimate ratio" msgstr "Taxa de decimação" #, boost-format -msgid "Processing model '%1%' with more than 1M triangles could be slow. It is highly recommended to simplify the model." -msgstr "Processar modelo '%1%' com mais de 1M de triângulos pode ser lento. É altamente recomendável simplificar o modelo." +msgid "" +"Processing model '%1%' with more than 1M triangles could be slow. It is " +"highly recommended to simplify the model." +msgstr "" +"Processar modelo '%1%' com mais de 1M de triângulos pode ser lento. É " +"altamente recomendável simplificar o modelo." msgid "Simplify model" msgstr "Simplificar modelo" @@ -559,7 +570,8 @@ msgid "Simplify" msgstr "Simplificar" msgid "Simplification is currently only allowed when a single part is selected" -msgstr "A simplificação só é permitida quando uma única peça é selecionada no momento" +msgstr "" +"A simplificação só é permitida quando uma única peça é selecionada no momento" msgid "Error" msgstr "Erro" @@ -591,7 +603,8 @@ msgid "%1%" msgstr "%1%" msgid "Can't apply when proccess preview." -msgstr "Não é possível aplicar quando a visualização do processo está em andamento." +msgstr "" +"Não é possível aplicar quando a visualização do processo está em andamento." msgid "Operation already cancelling. Please wait few seconds." msgstr "Operação já sendo cancelada. Por favor, aguarde alguns segundos." @@ -718,14 +731,20 @@ msgstr "Fonte padrão" msgid "Advanced" msgstr "Avançado" -msgid "The text cannot be written using the selected font. Please try choosing a different font." -msgstr "O texto não pode ser escrito usando a fonte selecionada. Por favor, tente escolher uma fonte diferente." +msgid "" +"The text cannot be written using the selected font. Please try choosing a " +"different font." +msgstr "" +"O texto não pode ser escrito usando a fonte selecionada. Por favor, tente " +"escolher uma fonte diferente." msgid "Embossed text cannot contain only white spaces." msgstr "Texto em relevo não pode conter apenas espaços em branco." msgid "Text contains character glyph (represented by '?') unknown by font." -msgstr "O texto contém um glifo de caractere (representado por '?') desconhecido pela fonte." +msgstr "" +"O texto contém um glifo de caractere (representado por '?') desconhecido " +"pela fonte." msgid "Text input doesn't show font skew." msgstr "A entrada de texto não mostra a inclinação da fonte." @@ -979,10 +998,12 @@ msgid "Rotate text Clock-wise." msgstr "Girar o texto no sentido horário." msgid "Unlock the text's rotation when moving text along the object's surface." -msgstr "Desbloquear a rotação do texto ao movê-lo ao longo da superfície do objeto." +msgstr "" +"Desbloquear a rotação do texto ao movê-lo ao longo da superfície do objeto." msgid "Lock the text's rotation when moving text along the object's surface." -msgstr "Bloquear a rotação do texto ao movê-lo ao longo da superfície do objeto." +msgstr "" +"Bloquear a rotação do texto ao movê-lo ao longo da superfície do objeto." msgid "Select from True Type Collection." msgstr "Selecionar da Coleção True Type." @@ -994,8 +1015,13 @@ msgid "Orient the text towards the camera." msgstr "Orientar o texto em direção à câmera." #, boost-format -msgid "Can't load exactly same font(\"%1%\"). Aplication selected a similar one(\"%2%\"). You have to specify font for enable edit text." -msgstr "Não é possível carregar a mesma fonte exatamente (\"%1%\"). A aplicação selecionou uma similar (\"%2%\"). Você deve especificar uma fonte para habilitar a edição de texto." +msgid "" +"Can't load exactly same font(\"%1%\"). Aplication selected a similar " +"one(\"%2%\"). You have to specify font for enable edit text." +msgstr "" +"Não é possível carregar a mesma fonte exatamente (\"%1%\"). A aplicação " +"selecionou uma similar (\"%2%\"). Você deve especificar uma fonte para " +"habilitar a edição de texto." msgid "No symbol" msgstr "Sem símbolo" @@ -1110,8 +1136,12 @@ msgstr "Tipo de traço indefinido" msgid "Path can't be healed from selfintersection and multiple points." msgstr "O caminho não pode ser reparado de auto-interseção e pontos múltiplos." -msgid "Final shape constains selfintersection or multiple points with same coordinate." -msgstr "A forma final contém auto-interseção ou múltiplos pontos com mesma coordenada." +msgid "" +"Final shape constains selfintersection or multiple points with same " +"coordinate." +msgstr "" +"A forma final contém auto-interseção ou múltiplos pontos com mesma " +"coordenada." #, boost-format msgid "Shape is marked as invisible (%1%)." @@ -1232,7 +1262,8 @@ msgstr "O arquivo NÃO existe (%1%)." #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" -msgstr "O nome do arquivo precisa terminar com \".svg\", mas você selecionou %1%" +msgstr "" +"O nome do arquivo precisa terminar com \".svg\", mas você selecionou %1%" #, boost-format msgid "Nano SVG parser can't load from file (%1%)." @@ -1338,7 +1369,9 @@ msgid "%1% was replaced with %2%" msgstr "%1% foi substituído por %2%" msgid "The configuration may be generated by a newer version of OrcaSlicer." -msgstr "A configuração pode ter sido gerada por uma versão mais recente do OrcaSlicer." +msgstr "" +"A configuração pode ter sido gerada por uma versão mais recente do " +"OrcaSlicer." msgid "Some values have been replaced. Please check them:" msgstr "Alguns valores foram substituídos. Por favor, verifique-os:" @@ -1353,23 +1386,36 @@ msgid "Machine" msgstr "Máquina" msgid "Configuration package was loaded, but some values were not recognized." -msgstr "O pacote de configuração foi carregado, mas alguns valores não foram reconhecidos." +msgstr "" +"O pacote de configuração foi carregado, mas alguns valores não foram " +"reconhecidos." #, boost-format -msgid "Configuration file \"%1%\" was loaded, but some values were not recognized." -msgstr "O arquivo de configuração \"%1%\" foi carregado, mas alguns valores não foram reconhecidos." +msgid "" +"Configuration file \"%1%\" was loaded, but some values were not recognized." +msgstr "" +"O arquivo de configuração \"%1%\" foi carregado, mas alguns valores não " +"foram reconhecidos." msgid "V" msgstr "V" -msgid "OrcaSlicer will terminate because of running out of memory.It may be a bug. It will be appreciated if you report the issue to our team." -msgstr "OrcaSlicer será encerrado devido à falta de memória. Pode ser um bug. Agradecemos se você relatar o problema para nossa equipe." +msgid "" +"OrcaSlicer will terminate because of running out of memory.It may be a bug. " +"It will be appreciated if you report the issue to our team." +msgstr "" +"OrcaSlicer será encerrado devido à falta de memória. Pode ser um bug. " +"Agradecemos se você relatar o problema para nossa equipe." msgid "Fatal error" msgstr "Erro fatal" -msgid "OrcaSlicer will terminate because of a localization error. It will be appreciated if you report the specific scenario this issue happened." -msgstr "OrcaSlicer será encerrado devido a um erro de localização. Agradecemos se você relatar o cenário específico em que esse problema ocorreu." +msgid "" +"OrcaSlicer will terminate because of a localization error. It will be " +"appreciated if you report the specific scenario this issue happened." +msgstr "" +"OrcaSlicer será encerrado devido a um erro de localização. Agradecemos se " +"você relatar o cenário específico em que esse problema ocorreu." msgid "Critical error" msgstr "Erro crítico" @@ -1395,10 +1441,12 @@ msgid "Connect %s failed! [SN:%s, code=%s]" msgstr "Falha na conexão %s! [SN:%s, código=%s]" msgid "" -"Orca Slicer requires the Microsoft WebView2 Runtime to operate certain features.\n" +"Orca Slicer requires the Microsoft WebView2 Runtime to operate certain " +"features.\n" "Click Yes to install it now." msgstr "" -"Orca Slicer requer o tempo de execução Microsoft WebView2 para operar determinados recursos.\n" +"Orca Slicer requer o tempo de execução Microsoft WebView2 para operar " +"determinados recursos.\n" "Clique em Sim para instalá-lo agora." msgid "WebView2 Runtime" @@ -1434,11 +1482,14 @@ msgstr "Informações" msgid "" "The OrcaSlicer configuration file may be corrupted and cannot be parsed.\n" "OrcaSlicer has attempted to recreate the configuration file.\n" -"Please note, application settings will be lost, but printer profiles will not be affected." +"Please note, application settings will be lost, but printer profiles will " +"not be affected." msgstr "" -"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser analisado.\n" +"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser " +"analisado.\n" "O OrcaSlicer tentou recriar o arquivo de configuração.\n" -"Por favor, note que as configurações do aplicativo serão perdidas, mas os perfis de impressora não serão afetados." +"Por favor, note que as configurações do aplicativo serão perdidas, mas os " +"perfis de impressora não serão afetados." msgid "Rebuild" msgstr "Reconstruindo" @@ -1464,26 +1515,40 @@ msgstr "Escolha um arquivo (gcode/3mf):" msgid "Some presets are modified." msgstr "Alguns presets foram modificados." -msgid "You can keep the modifield presets to the new project, discard or save changes as new presets." -msgstr "Você pode manter os modelos modificados no novo projeto, descartar ou salvar as alterações como novos modelos." +msgid "" +"You can keep the modifield presets to the new project, discard or save " +"changes as new presets." +msgstr "" +"Você pode manter os modelos modificados no novo projeto, descartar ou salvar " +"as alterações como novos modelos." msgid "User logged out" msgstr "Usuário desconectado" msgid "new or open project file is not allowed during the slicing process!" -msgstr "criar ou abrir um arquivo de projeto novo não é permitido durante o processo de fatiamento!" +msgstr "" +"criar ou abrir um arquivo de projeto novo não é permitido durante o processo " +"de fatiamento!" msgid "Open Project" msgstr "Abrir Projeto" -msgid "The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally" -msgstr "A versão do Orca Slicer é muito antiga e precisa ser atualizada para a versão mais recente antes de poder ser usada normalmente" +msgid "" +"The version of Orca Slicer is too low and needs to be updated to the latest " +"version before it can be used normally" +msgstr "" +"A versão do Orca Slicer é muito antiga e precisa ser atualizada para a " +"versão mais recente antes de poder ser usada normalmente" msgid "Privacy Policy Update" msgstr "Atualização da Política de Privacidade" -msgid "The number of user presets cached in the cloud has exceeded the upper limit, newly created user presets can only be used locally." -msgstr "O número de presets de usuário em cache na nuvem excedeu o limite superior, os presets de usuário recém-criados só podem ser usados localmente." +msgid "" +"The number of user presets cached in the cloud has exceeded the upper limit, " +"newly created user presets can only be used locally." +msgstr "" +"O número de presets de usuário em cache na nuvem excedeu o limite superior, " +"os presets de usuário recém-criados só podem ser usados localmente." msgid "Sync user presets" msgstr "Sincronizar presets do usuário" @@ -1673,12 +1738,17 @@ msgid "Orca String Hell" msgstr "Orca String Hell" msgid "" -"This model features text embossment on the top surface. For optimal results, it is advisable to set the 'One Wall Threshold(min_width_top_surface)' to 0 for the 'Only One Wall on Top Surfaces' to work best.\n" +"This model features text embossment on the top surface. For optimal results, " +"it is advisable to set the 'One Wall Threshold(min_width_top_surface)' to 0 " +"for the 'Only One Wall on Top Surfaces' to work best.\n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Este modelo possui texto em alto relevo na superfície superior. Para obter os melhores resultados, é aconselhável definir o 'Limiar de perímetro único'\n" -" (min_width_top_surface)' como 0 para que 'Apenas uma Parede nas Superfícies Superiores' funcione melhor.\n" +"Este modelo possui texto em alto relevo na superfície superior. Para obter " +"os melhores resultados, é aconselhável definir o 'Limiar de perímetro " +"único'\n" +" (min_width_top_surface)' como 0 para que 'Apenas uma Parede nas Superfícies " +"Superiores' funcione melhor.\n" "Sim - Alterar essas configurações automaticamente\n" "Não - Não alterar essas configurações para mim" @@ -1861,7 +1931,8 @@ msgid "Auto orientation" msgstr "Orientação Automática" msgid "Auto orient the object to improve print quality." -msgstr "Orientar automaticamente o objeto para melhorar a qualidade de impressão." +msgstr "" +"Orientar automaticamente o objeto para melhorar a qualidade de impressão." msgid "Split the selected object into mutiple objects" msgstr "Dividir o objeto selecionado em vários objetos" @@ -1887,6 +1958,12 @@ msgstr "Organizar" msgid "arrange current plate" msgstr "organizar mesa atual" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Auto-orientação" @@ -1960,13 +2037,16 @@ msgid "Right click the icon to fix model object" msgstr "Clique com o botão direito no ícone para corrigir o objeto do modelo" msgid "Right button click the icon to drop the object settings" -msgstr "Clique com o botão direito no ícone para descartar as configurações do objeto" +msgstr "" +"Clique com o botão direito no ícone para descartar as configurações do objeto" msgid "Click the icon to reset all settings of the object" msgstr "Clique no ícone para redefinir todas as configurações do objeto" msgid "Right button click the icon to drop the object printable property" -msgstr "Clique com o botão direito no ícone para descartar a propriedade imprimível do objeto" +msgstr "" +"Clique com o botão direito no ícone para descartar a propriedade imprimível " +"do objeto" msgid "Click the icon to toggle printable property of the object" msgstr "Clique no ícone para alternar a propriedade imprimível do objeto" @@ -1998,8 +2078,12 @@ msgstr "Adicionar Modificador" msgid "Switch to per-object setting mode to edit modifier settings." msgstr "Mude para o modo de configuração por objeto para editar modificadores." -msgid "Switch to per-object setting mode to edit process settings of selected objects." -msgstr "Mude para o modo de configuração por objeto para editar processos dos objetos selecionados." +msgid "" +"Switch to per-object setting mode to edit process settings of selected " +"objects." +msgstr "" +"Mude para o modo de configuração por objeto para editar processos dos " +"objetos selecionados." msgid "Delete connector from object which is a part of cut" msgstr "Excluir conector do objeto que é parte do corte" @@ -2010,19 +2094,25 @@ msgstr "Excluir peça sólida do objeto que é peça do corte" msgid "Delete negative volume from object which is a part of cut" msgstr "Excluir volume negativo do objeto que é parte do corte" -msgid "To save cut correspondence you can delete all connectors from all related objects." -msgstr "Para salvar a correspondência de corte, você pode excluir todos os conectores de todos os objetos relacionados." +msgid "" +"To save cut correspondence you can delete all connectors from all related " +"objects." +msgstr "" +"Para salvar a correspondência de corte, você pode excluir todos os " +"conectores de todos os objetos relacionados." msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed .\n" "\n" -"To manipulate with solid parts or negative volumes you have to invalidate cut infornation first." +"To manipulate with solid parts or negative volumes you have to invalidate " +"cut infornation first." msgstr "" "Esta ação irá quebrar a correspondência de corte.\n" "Depois disso, a consistência do modelo não pode ser garantida.\n" "\n" -"Para manipular peças sólidas ou volumes negativos, você deve invalidar as informações de corte primeiro." +"Para manipular peças sólidas ou volumes negativos, você deve invalidar as " +"informações de corte primeiro." msgid "Delete all connectors" msgstr "Excluir todos os conectores" @@ -2072,11 +2162,18 @@ msgstr "Camada" msgid "Selection conflicts" msgstr "Conflitos de seleção" -msgid "If first selected item is an object, the second one should also be object." -msgstr "Se o primeiro item selecionado for um objeto, o segundo também deve ser um objeto." +msgid "" +"If first selected item is an object, the second one should also be object." +msgstr "" +"Se o primeiro item selecionado for um objeto, o segundo também deve ser um " +"objeto." -msgid "If first selected item is a part, the second one should be part in the same object." -msgstr "Se o primeiro item selecionado for uma peça, o segundo deve ser uma peça no mesmo objeto." +msgid "" +"If first selected item is a part, the second one should be part in the same " +"object." +msgstr "" +"Se o primeiro item selecionado for uma peça, o segundo deve ser uma peça no " +"mesmo objeto." msgid "The type of the last solid object part is not to be changed." msgstr "O tipo da última peça do objeto sólido não deve ser alterado." @@ -2134,7 +2231,8 @@ msgid "Invalid numeric." msgstr "Número inválido." msgid "one cell can only be copied to one or multiple cells in the same column" -msgstr "uma célula só pode ser copiada para uma ou várias células na mesma coluna" +msgstr "" +"uma célula só pode ser copiada para uma ou várias células na mesma coluna" msgid "multiple cells copy is not supported" msgstr "a cópia de múltiplas células não é suportada" @@ -2293,7 +2391,8 @@ msgid "Failed to connect to cloud service" msgstr "Falha ao conectar ao serviço de nuvem" msgid "Please click on the hyperlink above to view the cloud service status" -msgstr "Por favor, clique no link acima para visualizar o status do serviço de nuvem" +msgstr "" +"Por favor, clique no link acima para visualizar o status do serviço de nuvem" msgid "Failed to connect to the printer" msgstr "Falha ao conectar à impressora" @@ -2325,11 +2424,11 @@ msgstr "Recarga Automática" msgid "AMS not connected" msgstr "AMS não conectado" -msgid "Load Filament" -msgstr "Carregar Filamento" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Descarregar Filamento" +msgid "Unload" +msgstr "Descarregar" msgid "Ext Spool" msgstr "Bobina Externa" @@ -2346,7 +2445,7 @@ msgstr "Tentar Novamente" msgid "Calibrating AMS..." msgstr "Calibrando AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "Ocorreu um problema durante a calibração. Clique para ver a solução." msgid "Calibrate again" @@ -2385,8 +2484,12 @@ msgstr "Verificar localização do filamento" msgid "Grab new filament" msgstr "Pegar novo filamento" -msgid "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filiament." -msgstr "Escolha um slot AMS e pressione o botão \"Carregar\" ou \"Descarregar\" para carregar ou descarregar automaticamente o filamento." +msgid "" +"Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " +"load or unload filaments." +msgstr "" +"Escolha um slot AMS e pressione o botão \"Carregar\" ou \"Descarregar\" para " +"carregar ou descarregar automaticamente o filamento." msgid "Edit" msgstr "Editar" @@ -2417,21 +2520,29 @@ msgstr "Organizando" msgid "Arranging canceled." msgstr "Organização cancelada." -msgid "Arranging is done but there are unpacked items. Reduce spacing and try again." -msgstr "A organização foi concluída, mas há itens desembalados. Reduza o espaçamento e tente novamente." +msgid "" +"Arranging is done but there are unpacked items. Reduce spacing and try again." +msgstr "" +"A organização foi concluída, mas há itens desembalados. Reduza o espaçamento " +"e tente novamente." msgid "Arranging done." msgstr "Organização concluída." -msgid "Arrange failed. Found some exceptions when processing object geometries." -msgstr "Organização falhou. Encontrou algumas exceções ao processar geometrias de objetos." +msgid "" +"Arrange failed. Found some exceptions when processing object geometries." +msgstr "" +"Organização falhou. Encontrou algumas exceções ao processar geometrias de " +"objetos." #, c-format, boost-format msgid "" -"Arrangement ignored the following objects which can't fit into a single bed:\n" +"Arrangement ignored the following objects which can't fit into a single " +"bed:\n" "%s" msgstr "" -"A organização ignorou os seguintes objetos que não podem caber em uma única mesa:\n" +"A organização ignorou os seguintes objetos que não podem caber em uma única " +"mesa:\n" "%s" msgid "" @@ -2491,7 +2602,9 @@ msgid "Task canceled." msgstr "Tarefa cancelada." msgid "Upload task timed out. Please check the network status and try again." -msgstr "O tempo para envio da tarefa expirou. Verifique o estado da rede e tente novamente." +msgstr "" +"O tempo para envio da tarefa expirou. Verifique o estado da rede e tente " +"novamente." msgid "Cloud service connection failed. Please try again." msgstr "Falha na conexão com o serviço de nuvem. Por favor, tente novamente." @@ -2499,8 +2612,12 @@ msgstr "Falha na conexão com o serviço de nuvem. Por favor, tente novamente." msgid "Print file not found. please slice again." msgstr "Arquivo de impressão não encontrado. Por favor, fatie novamente." -msgid "The print file exceeds the maximum allowable size (1GB). Please simplify the model and slice again." -msgstr "O arquivo de impressão excede o tamanho máximo permitido (1GB). Por favor, simplifique o modelo e fatie novamente." +msgid "" +"The print file exceeds the maximum allowable size (1GB). Please simplify the " +"model and slice again." +msgstr "" +"O arquivo de impressão excede o tamanho máximo permitido (1GB). Por favor, " +"simplifique o modelo e fatie novamente." msgid "Failed to send the print job. Please try again." msgstr "Falha ao enviar o trabalho de impressão. Por favor, tente novamente." @@ -2508,17 +2625,28 @@ msgstr "Falha ao enviar o trabalho de impressão. Por favor, tente novamente." msgid "Failed to upload file to ftp. Please try again." msgstr "Falha ao enviar o arquivo via FTP. Por favor, tente novamente." -msgid "Check the current status of the bambu server by clicking on the link above." +msgid "" +"Check the current status of the bambu server by clicking on the link above." msgstr "Verifique o estado atual do servidor Bambu clicando no link acima." -msgid "The size of the print file is too large. Please adjust the file size and try again." -msgstr "O tamanho do arquivo de impressão é muito grande. Por favor, ajuste o tamanho do arquivo e tente novamente." +msgid "" +"The size of the print file is too large. Please adjust the file size and try " +"again." +msgstr "" +"O tamanho do arquivo de impressão é muito grande. Por favor, ajuste o " +"tamanho do arquivo e tente novamente." msgid "Print file not found, Please slice it again and send it for printing." -msgstr "Arquivo de impressão não encontrado. Por favor, fatie-o novamente e envie para impressão." +msgstr "" +"Arquivo de impressão não encontrado. Por favor, fatie-o novamente e envie " +"para impressão." -msgid "Failed to upload print file to FTP. Please check the network status and try again." -msgstr "Falha ao enviar o arquivo de impressão via FTP. Por favor, verifique o estado da rede e tente novamente." +msgid "" +"Failed to upload print file to FTP. Please check the network status and try " +"again." +msgstr "" +"Falha ao enviar o arquivo de impressão via FTP. Por favor, verifique o " +"estado da rede e tente novamente." msgid "Sending print job over LAN" msgstr "Enviando trabalho de impressão via LAN" @@ -2540,11 +2668,14 @@ msgstr "Enviando configuração de impressão" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the device page in %ss" -msgstr "Enviado com sucesso. Irá saltar automaticamente para a página do dispositivo em %ss" +msgstr "" +"Enviado com sucesso. Irá saltar automaticamente para a página do dispositivo " +"em %ss" #, c-format, boost-format msgid "Successfully sent. Will automatically jump to the next page in %ss" -msgstr "Enviado com sucesso. Irá saltar automaticamente para a próxima página em %ss" +msgstr "" +"Enviado com sucesso. Irá saltar automaticamente para a próxima página em %ss" msgid "An SD card needs to be inserted before printing via LAN." msgstr "Um cartão SD precisa ser inserido antes de imprimir via LAN." @@ -2565,8 +2696,12 @@ msgstr "Um cartão SD precisa ser inserido antes de enviar para a impressora." msgid "Importing SLA archive" msgstr "Importando arquivo SLA" -msgid "The SLA archive doesn't contain any presets. Please activate some SLA printer preset first before importing that SLA archive." -msgstr "O arquivo SLA não contém nenhum perfil. Por favor, ative alguns perfis de impressora SLA antes de importar esse arquivo SLA." +msgid "" +"The SLA archive doesn't contain any presets. Please activate some SLA " +"printer preset first before importing that SLA archive." +msgstr "" +"O arquivo SLA não contém nenhum perfil. Por favor, ative alguns perfis de " +"impressora SLA antes de importar esse arquivo SLA." msgid "Importing canceled." msgstr "Importação cancelada." @@ -2574,14 +2709,21 @@ msgstr "Importação cancelada." msgid "Importing done." msgstr "Importação concluída." -msgid "The imported SLA archive did not contain any presets. The current SLA presets were used as fallback." -msgstr "O arquivo SLA importado não contém nenhum perfil. Os perfis SLA atuais foram usados como alternativa." +msgid "" +"The imported SLA archive did not contain any presets. The current SLA " +"presets were used as fallback." +msgstr "" +"O arquivo SLA importado não contém nenhum perfil. Os perfis SLA atuais foram " +"usados como alternativa." msgid "You cannot load SLA project with a multi-part object on the bed" -msgstr "Você não pode carregar um projeto SLA com um objeto de várias peças na mesa" +msgstr "" +"Você não pode carregar um projeto SLA com um objeto de várias peças na mesa" msgid "Please check your object list before preset changing." -msgstr "Por favor, verifique sua lista de objetos antes de mudar a configuração predefinida." +msgstr "" +"Por favor, verifique sua lista de objetos antes de mudar a configuração " +"predefinida." msgid "Attention!" msgstr "Atenção!" @@ -2619,14 +2761,24 @@ msgstr "O Orca Slicer é licenciado sob " msgid "GNU Affero General Public License, version 3" msgstr "Licença Pública Geral Affero GNU, versão 3" -msgid "Orca Slicer is based on BambuStudio by Bambulab, which is from PrusaSlicer by Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and the RepRap community" -msgstr "O Orca Slicer é baseado no BambuStudio da Bambulab, que é derivado do PrusaSlicer da Prusa Research. O PrusaSlicer vem do Slic3r de Alessandro Ranellucci e da comunidade RepRap" +msgid "" +"Orca Slicer is based on BambuStudio by Bambulab, which is from PrusaSlicer " +"by Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and " +"the RepRap community" +msgstr "" +"O Orca Slicer é baseado no BambuStudio da Bambulab, que é derivado do " +"PrusaSlicer da Prusa Research. O PrusaSlicer vem do Slic3r de Alessandro " +"Ranellucci e da comunidade RepRap" msgid "Libraries" msgstr "Bibliotecas" -msgid "This software uses open source components whose copyright and other proprietary rights belong to their respective owners" -msgstr "Este software utiliza componentes open source cujos direitos autorais e outros direitos de propriedade pertencem aos seus respectivos proprietários" +msgid "" +"This software uses open source components whose copyright and other " +"proprietary rights belong to their respective owners" +msgstr "" +"Este software utiliza componentes open source cujos direitos autorais e " +"outros direitos de propriedade pertencem aos seus respectivos proprietários" #, c-format, boost-format msgid "About %s" @@ -2642,10 +2794,15 @@ msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "BambuStudio é originalmente baseado no PrusaSlicer pela PrusaResearch." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." -msgstr "PrusaSlicer é originalmente baseado no Slic3r por Alessandro Ranellucci." +msgstr "" +"PrusaSlicer é originalmente baseado no Slic3r por Alessandro Ranellucci." -msgid "Slic3r was created by Alessandro Ranellucci with the help of many other contributors." -msgstr "Slic3r foi criado por Alessandro Ranellucci com a ajuda de muitos outros colaboradores." +msgid "" +"Slic3r was created by Alessandro Ranellucci with the help of many other " +"contributors." +msgstr "" +"Slic3r foi criado por Alessandro Ranellucci com a ajuda de muitos outros " +"colaboradores." msgid "Version" msgstr "Versão" @@ -2683,7 +2840,9 @@ msgid "SN" msgstr "SN" msgid "Setting AMS slot information while printing is not supported" -msgstr "A configuração das informações do slot AMS durante a impressão não é suportada" +msgstr "" +"A configuração das informações do slot AMS durante a impressão não é " +"suportada" msgid "Factors of Flow Dynamics Calibration" msgstr "Fatores de Calibração de Dinâmica de Fluxo" @@ -2698,7 +2857,9 @@ msgid "Factor N" msgstr "Fator N" msgid "Setting Virtual slot information while printing is not supported" -msgstr "A configuração de informações do slot virtual durante a impressão não é suportada" +msgstr "" +"A configuração de informações do slot virtual durante a impressão não é " +"suportada" msgid "Are you sure you want to clear the filament information?" msgstr "Tem certeza de que deseja limpar as informações do filamento?" @@ -2721,8 +2882,14 @@ msgstr "Cor Personalizada" msgid "Dynamic flow calibration" msgstr "Calibração dinâmica do fluxo" -msgid "The nozzle temp and max volumetric speed will affect the calibration results. Please fill in the same values as the actual printing. They can be auto-filled by selecting a filament preset." -msgstr "A temperatura do bico e a fluxo volumétrico máximo afetarão os resultados da calibração. Preencha os mesmos valores que a impressão atual. Eles podem ser preenchidos automaticamente selecionando um perfil de filamento." +msgid "" +"The nozzle temp and max volumetric speed will affect the calibration " +"results. Please fill in the same values as the actual printing. They can be " +"auto-filled by selecting a filament preset." +msgstr "" +"A temperatura do bico e a fluxo volumétrico máximo afetarão os resultados da " +"calibração. Preencha os mesmos valores que a impressão atual. Eles podem ser " +"preenchidos automaticamente selecionando um perfil de filamento." msgid "Nozzle Diameter" msgstr "Diâmetro do bico" @@ -2754,8 +2921,14 @@ msgstr "Iniciar calibração" msgid "Next" msgstr "Próximo" -msgid "Calibration completed. Please find the most uniform extrusion line on your hot bed like the picture below, and fill the value on its left side into the factor K input box." -msgstr "Calibração concluída. Por favor, encontre a linha de extrusão mais uniforme na sua mesa aquecida como na imagem abaixo, e preencha o valor do seu lado esquerdo na caixa de entrada do fator K." +msgid "" +"Calibration completed. Please find the most uniform extrusion line on your " +"hot bed like the picture below, and fill the value on its left side into the " +"factor K input box." +msgstr "" +"Calibração concluída. Por favor, encontre a linha de extrusão mais uniforme " +"na sua mesa aquecida como na imagem abaixo, e preencha o valor do seu lado " +"esquerdo na caixa de entrada do fator K." msgid "Save" msgstr "Salvar" @@ -2786,8 +2959,11 @@ msgstr "Passo" msgid "AMS Slots" msgstr "Espaços do AMS" -msgid "Note: Only the AMS slots loaded with the same material type can be selected." -msgstr "Nota: Apenas os espaços do AMS carregados com o mesmo tipo de material podem ser selecionadas." +msgid "" +"Note: Only the AMS slots loaded with the same material type can be selected." +msgstr "" +"Nota: Apenas os espaços do AMS carregados com o mesmo tipo de material podem " +"ser selecionadas." msgid "Enable AMS" msgstr "Ativar AMS" @@ -2804,11 +2980,22 @@ msgstr "Imprimir com o filamento montado na parte de trás do chassi" msgid "Current Cabin humidity" msgstr "Umidade da cabine atual" -msgid "Please change the desiccant when it is too wet. The indicator may not represent accurately in following cases : when the lid is open or the desiccant pack is changed. it take hours to absorb the moisture, low temperatures also slow down the process." -msgstr "Por favor, mude o dessecante quando estiver muito úmido. O indicador pode não representar com precisão nos casos a seguir: quando a tampa está aberta ou quando o dessecante é trocado. Leva horas para absorver a umidade, baixas temperaturas também atrasam o processo." +msgid "" +"Please change the desiccant when it is too wet. The indicator may not " +"represent accurately in following cases : when the lid is open or the " +"desiccant pack is changed. it take hours to absorb the moisture, low " +"temperatures also slow down the process." +msgstr "" +"Por favor, mude o dessecante quando estiver muito úmido. O indicador pode " +"não representar com precisão nos casos a seguir: quando a tampa está aberta " +"ou quando o dessecante é trocado. Leva horas para absorver a umidade, baixas " +"temperaturas também atrasam o processo." -msgid "Config which AMS slot should be used for a filament used in the print job" -msgstr "Configure qual espaço do AMS deve ser usado para um filamento usado no trabalho de impressão" +msgid "" +"Config which AMS slot should be used for a filament used in the print job" +msgstr "" +"Configure qual espaço do AMS deve ser usado para um filamento usado no " +"trabalho de impressão" msgid "Filament used in this print job" msgstr "Filamento usado neste trabalho de impressão" @@ -2831,8 +3018,12 @@ msgstr "Imprimir com filamentos no AMS" msgid "Print with filaments mounted on the back of the chassis" msgstr "Imprimir com filamentos montados na parte de trás do chassi" -msgid "When the current material run out, the printer will continue to print in the following order." -msgstr "Quando o material atual acabar, a impressora continuará a imprimir na seguinte ordem." +msgid "" +"When the current material run out, the printer will continue to print in the " +"following order." +msgstr "" +"Quando o material atual acabar, a impressora continuará a imprimir na " +"seguinte ordem." msgid "Group" msgstr "Grupo" @@ -2840,15 +3031,22 @@ msgstr "Grupo" msgid "The printer does not currently support auto refill." msgstr "A impressora atualmente não suporta recarga automática." -msgid "AMS filament backup is not enabled, please enable it in the AMS settings." -msgstr "O backup de filamento do AMS não está ativado, por favor, ative-o nas configurações do AMS." +msgid "" +"AMS filament backup is not enabled, please enable it in the AMS settings." +msgstr "" +"O backup de filamento do AMS não está ativado, por favor, ative-o nas " +"configurações do AMS." msgid "" -"If there are two identical filaments in AMS, AMS filament backup will be enabled. \n" -"(Currently supporting automatic supply of consumables with the same brand, material type, and color)" +"If there are two identical filaments in AMS, AMS filament backup will be " +"enabled. \n" +"(Currently supporting automatic supply of consumables with the same brand, " +"material type, and color)" msgstr "" -"Se houver dois filamentos idênticos no AMS, o backup de filamento do AMS será ativado. \n" -"(Atualmente suportando o fornecimento automático de consumíveis da mesma marca, tipo de material e cor)" +"Se houver dois filamentos idênticos no AMS, o backup de filamento do AMS " +"será ativado. \n" +"(Atualmente suportando o fornecimento automático de consumíveis da mesma " +"marca, tipo de material e cor)" msgid "DRY" msgstr "SECO" @@ -2862,35 +3060,77 @@ msgstr "Configurações do AMS" msgid "Insertion update" msgstr "Atualização de inserção" -msgid "The AMS will automatically read the filament information when inserting a new Bambu Lab filament. This takes about 20 seconds." -msgstr "O AMS irá ler automaticamente as informações do filamento ao inserir um novo filamento da Bambu Lab. Isso leva cerca de 20 segundos." +msgid "" +"The AMS will automatically read the filament information when inserting a " +"new Bambu Lab filament. This takes about 20 seconds." +msgstr "" +"O AMS irá ler automaticamente as informações do filamento ao inserir um novo " +"filamento da Bambu Lab. Isso leva cerca de 20 segundos." -msgid "Note: if a new filament is inserted during printing, the AMS will not automatically read any information until printing is completed." -msgstr "Nota: se um novo filamento for inserido durante a impressão, o AMS não irá ler automaticamente nenhuma informação até que a impressão seja concluída." +msgid "" +"Note: if a new filament is inserted during printing, the AMS will not " +"automatically read any information until printing is completed." +msgstr "" +"Nota: se um novo filamento for inserido durante a impressão, o AMS não irá " +"ler automaticamente nenhuma informação até que a impressão seja concluída." -msgid "When inserting a new filament, the AMS will not automatically read its information, leaving it blank for you to enter manually." -msgstr "Ao inserir um novo filamento, o AMS não irá ler automaticamente suas informações, deixando-o em branco para você inserir manualmente." +msgid "" +"When inserting a new filament, the AMS will not automatically read its " +"information, leaving it blank for you to enter manually." +msgstr "" +"Ao inserir um novo filamento, o AMS não irá ler automaticamente suas " +"informações, deixando-o em branco para você inserir manualmente." msgid "Power on update" msgstr "Atualização de inicialização" -msgid "The AMS will automatically read the information of inserted filament on start-up. It will take about 1 minute.The reading process will roll filament spools." -msgstr "O AMS irá ler automaticamente as informações do filamento inserido na inicialização. Levará cerca de 1 minuto. O processo de leitura irá girar as bobinas de filamento." +msgid "" +"The AMS will automatically read the information of inserted filament on " +"start-up. It will take about 1 minute.The reading process will roll filament " +"spools." +msgstr "" +"O AMS irá ler automaticamente as informações do filamento inserido na " +"inicialização. Levará cerca de 1 minuto. O processo de leitura irá girar as " +"bobinas de filamento." -msgid "The AMS will not automatically read information from inserted filament during startup and will continue to use the information recorded before the last shutdown." -msgstr "O AMS não irá ler automaticamente informações do filamento inserido durante a inicialização e continuará a usar as informações registradas antes do último desligamento." +msgid "" +"The AMS will not automatically read information from inserted filament " +"during startup and will continue to use the information recorded before the " +"last shutdown." +msgstr "" +"O AMS não irá ler automaticamente informações do filamento inserido durante " +"a inicialização e continuará a usar as informações registradas antes do " +"último desligamento." msgid "Update remaining capacity" msgstr "Atualizar capacidade restante" -msgid "The AMS will estimate Bambu filament's remaining capacity after the filament info is updated. During printing, remaining capacity will be updated automatically." -msgstr "O AMS irá estimar a capacidade restante do filamento Bambu após as informações do filamento serem atualizadas. Durante a impressão, a capacidade restante será atualizada automaticamente." +msgid "" +"The AMS will estimate Bambu filament's remaining capacity after the filament " +"info is updated. During printing, remaining capacity will be updated " +"automatically." +msgstr "" +"O AMS irá estimar a capacidade restante do filamento Bambu após as " +"informações do filamento serem atualizadas. Durante a impressão, a " +"capacidade restante será atualizada automaticamente." msgid "AMS filament backup" msgstr "Backup de filamento do AMS" -msgid "AMS will continue to another spool with the same properties of filament automatically when current filament runs out" -msgstr "O AMS continuará para outra bobina com as mesmas propriedades do filamento automaticamente quando o filamento atual acabar" +msgid "" +"AMS will continue to another spool with the same properties of filament " +"automatically when current filament runs out" +msgstr "" +"O AMS continuará para outra bobina com as mesmas propriedades do filamento " +"automaticamente quando o filamento atual acabar" + +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" msgid "File" msgstr "Arquivo" @@ -2898,11 +3138,19 @@ msgstr "Arquivo" msgid "Calibration" msgstr "Calibração" -msgid "Failed to download the plug-in. Please check your firewall settings and vpn software, check and retry." -msgstr "Falha ao baixar o plug-in. Verifique as configurações do seu firewall e software vpn, verifique e tente novamente." +msgid "" +"Failed to download the plug-in. Please check your firewall settings and vpn " +"software, check and retry." +msgstr "" +"Falha ao baixar o plug-in. Verifique as configurações do seu firewall e " +"software vpn, verifique e tente novamente." -msgid "Failed to install the plug-in. Please check whether it is blocked or deleted by anti-virus software." -msgstr "Falha ao instalar o plug-in. Verifique se ele está bloqueado ou excluído pelo software antivírus." +msgid "" +"Failed to install the plug-in. Please check whether it is blocked or deleted " +"by anti-virus software." +msgstr "" +"Falha ao instalar o plug-in. Verifique se ele está bloqueado ou excluído " +"pelo software antivírus." msgid "click here to see more info" msgstr "clique aqui para ver mais informações" @@ -2910,14 +3158,22 @@ msgstr "clique aqui para ver mais informações" msgid "Please home all axes (click " msgstr "Por favor, mandar a origem todos os eixos (clique " -msgid ") to locate the toolhead's position. This prevents device moving beyond the printable boundary and causing equipment wear." -msgstr ") para localizar a posição da extrusora. Isso impede que o dispositivo se mova além do limite imprimível e cause desgaste no equipamento." +msgid "" +") to locate the toolhead's position. This prevents device moving beyond the " +"printable boundary and causing equipment wear." +msgstr "" +") para localizar a posição da extrusora. Isso impede que o dispositivo se " +"mova além do limite imprimível e cause desgaste no equipamento." msgid "Go Home" msgstr "Ir para Ínicio" -msgid "A error occurred. Maybe memory of system is not enough or it's a bug of the program" -msgstr "Ocorreu um erro. Talvez a memória do sistema não seja suficiente ou seja um bug do programa" +msgid "" +"A error occurred. Maybe memory of system is not enough or it's a bug of the " +"program" +msgstr "" +"Ocorreu um erro. Talvez a memória do sistema não seja suficiente ou seja um " +"bug do programa" msgid "Please save project and restart the program. " msgstr "Por favor, salve o projeto e reinicie o programa. " @@ -2955,6 +3211,45 @@ msgstr "Executando scripts de pós-processamento" msgid "Successfully executed post-processing script" msgstr "Script de pós-processamento executado com êxito" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Erro desconhecido ao exportar G-Code." @@ -2973,7 +3268,9 @@ msgstr "Cópia do G-Code temporário para o G-Code de saída falhou" #, boost-format msgid "Scheduling upload to `%1%`. See Window -> Print Host Upload Queue" -msgstr "Agendando o envio para `%1%`. Veja Janela -> Fila de Envio do Anfitrião de Impressão" +msgstr "" +"Agendando o envio para `%1%`. Veja Janela -> Fila de Envio do Anfitrião de " +"Impressão" msgid "Origin" msgstr "Origem" @@ -2981,11 +3278,18 @@ msgstr "Origem" msgid "Size in X and Y of the rectangular plate." msgstr "Tamanho em X e Y da mesa retangular." -msgid "Distance of the 0,0 G-code coordinate from the front left corner of the rectangle." -msgstr "Distância da coordenada do G-Code 0,0 do canto frontal esquerdo do retângulo." +msgid "" +"Distance of the 0,0 G-code coordinate from the front left corner of the " +"rectangle." +msgstr "" +"Distância da coordenada do G-Code 0,0 do canto frontal esquerdo do retângulo." -msgid "Diameter of the print bed. It is assumed that origin (0,0) is located in the center." -msgstr "Diâmetro da mesa de impressão. É assumido que a origem (0,0) está localizada no centro." +msgid "" +"Diameter of the print bed. It is assumed that origin (0,0) is located in the " +"center." +msgstr "" +"Diâmetro da mesa de impressão. É assumido que a origem (0,0) está localizada " +"no centro." msgid "Rectangular" msgstr "Retangular" @@ -3023,8 +3327,10 @@ msgstr "Erro! Modelo inválido" msgid "The selected file contains no geometry." msgstr "O arquivo selecionado não contém geometria." -msgid "The selected file contains several disjoint areas. This is not supported." -msgstr "O arquivo selecionado contém várias áreas disjuntas. Isso não é suportado." +msgid "" +"The selected file contains several disjoint areas. This is not supported." +msgstr "" +"O arquivo selecionado contém várias áreas disjuntas. Isso não é suportado." msgid "Choose a file to import bed texture from (PNG/SVG):" msgstr "Escolha um arquivo para importar a textura da mesa (PNG/SVG):" @@ -3035,11 +3341,19 @@ msgstr "Escolha um arquivo STL para importar o modelo da mesa:" msgid "Bed Shape" msgstr "Forma da Mesa" -msgid "The recommended minimum temperature is less than 190 degree or the recommended maximum temperature is greater than 300 degree.\n" -msgstr "A temperatura mínima recomendada é inferior a 190 graus ou a temperatura máxima recomendada é superior a 300 graus.\n" +msgid "" +"The recommended minimum temperature is less than 190 degree or the " +"recommended maximum temperature is greater than 300 degree.\n" +msgstr "" +"A temperatura mínima recomendada é inferior a 190 graus ou a temperatura " +"máxima recomendada é superior a 300 graus.\n" -msgid "The recommended minimum temperature cannot be higher than the recommended maximum temperature.\n" -msgstr "A temperatura mínima recomendada não pode ser superior à temperatura máxima recomendada.\n" +msgid "" +"The recommended minimum temperature cannot be higher than the recommended " +"maximum temperature.\n" +msgstr "" +"A temperatura mínima recomendada não pode ser superior à temperatura máxima " +"recomendada.\n" msgid "Please check.\n" msgstr "Por favor, verifique.\n" @@ -3049,13 +3363,18 @@ msgid "" "Please make sure whether to use the temperature to print.\n" "\n" msgstr "" -"O bico pode ficar bloqueado quando a temperatura estiver fora da faixa recomendada.\n" +"O bico pode ficar bloqueado quando a temperatura estiver fora da faixa " +"recomendada.\n" "Por favor, certifique-se de usar a temperatura para imprimir.\n" "\n" #, c-format, boost-format -msgid "Recommended nozzle temperature of this filament type is [%d, %d] degree centigrade" -msgstr "A temperatura do bico recomendada para este tipo de filamento é [%d, %d] graus centígrados" +msgid "" +"Recommended nozzle temperature of this filament type is [%d, %d] degree " +"centigrade" +msgstr "" +"A temperatura do bico recomendada para este tipo de filamento é [%d, %d] " +"graus centígrados" msgid "" "Too small max volumetric speed.\n" @@ -3065,8 +3384,14 @@ msgstr "" "Redefinir para 0,5" #, c-format, boost-format -msgid "Current chamber temperature is higher than the material's safe temperature,it may result in material softening and clogging.The maximum safe temperature for the material is %d" -msgstr "A temperatura da câmara atual está mais alta do que a temperatura segura do material, pode resultar em amolecimento e entupimento do material. A temperatura máxima segura para o material é %d" +msgid "" +"Current chamber temperature is higher than the material's safe temperature," +"it may result in material softening and clogging.The maximum safe " +"temperature for the material is %d" +msgstr "" +"A temperatura da câmara atual está mais alta do que a temperatura segura do " +"material, pode resultar em amolecimento e entupimento do material. A " +"temperatura máxima segura para o material é %d" msgid "" "Too small layer height.\n" @@ -3092,15 +3417,19 @@ msgstr "" "A altura da primeira camada será redefinida para 0.2." msgid "" -"This setting is only used for model size tunning with small value in some cases.\n" +"This setting is only used for model size tunning with small value in some " +"cases.\n" "For example, when model size has small error and hard to be assembled.\n" "For large size tuning, please use model scale function.\n" "\n" "The value will be reset to 0." msgstr "" -"Esta configuração é usada apenas para ajustar o tamanho do modelo com um valor pequeno em alguns casos.\n" -"Por exemplo, quando o tamanho do modelo tem um pequeno erro e é difícil de ser montado.\n" -"Para ajustes de tamanho grandes, por favor, use a função de escala do modelo.\n" +"Esta configuração é usada apenas para ajustar o tamanho do modelo com um " +"valor pequeno em alguns casos.\n" +"Por exemplo, quando o tamanho do modelo tem um pequeno erro e é difícil de " +"ser montado.\n" +"Para ajustes de tamanho grandes, por favor, use a função de escala do " +"modelo.\n" "\n" "O valor será redefinido para 0." @@ -3112,33 +3441,43 @@ msgid "" "The value will be reset to 0." msgstr "" "Uma compensação de pé de elefante muito grande é irrazoável.\n" -"Se realmente tiver um efeito sério de pé de elefante, por favor, verifique outras configurações.\n" +"Se realmente tiver um efeito sério de pé de elefante, por favor, verifique " +"outras configurações.\n" "Por exemplo, se a temperatura da mesa estiver muito alta.\n" "\n" "O valor será redefinido para 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All. " -msgstr "O perímetro extra alternado não funciona bem quando a espessura vertical da está definida para Todos. " +msgid "" +"Alternate extra wall does't work well when ensure vertical shell thickness " +"is set to All. " +msgstr "" +"O perímetro extra alternado não funciona bem quando a espessura vertical da " +"está definida para Todos. " msgid "" "Change these settings automatically? \n" -"Yes - Change ensure vertical shell thickness to Moderate and enable alternate extra wall\n" +"Yes - Change ensure vertical shell thickness to Moderate and enable " +"alternate extra wall\n" "No - Dont use alternate extra wall" msgstr "" "Alterar essas configurações automaticamente?\n" -"Sim - Alterar a espessura vertical do perímetro para Moderado e ativar o perímetro extra alternado\n" +"Sim - Alterar a espessura vertical do perímetro para Moderado e ativar o " +"perímetro extra alternado\n" "Não - Não usar o perímetro extra alternado" msgid "" -"Prime tower does not work when Adaptive Layer Height or Independent Support Layer Height is on.\n" +"Prime tower does not work when Adaptive Layer Height or Independent Support " +"Layer Height is on.\n" "Which do you want to keep?\n" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"A torre de priming não funciona quando a Altura de Camada Adaptativa ou a Altura de Camada de Suporte Independente está ativada.\n" +"A torre de priming não funciona quando a Altura de Camada Adaptativa ou a " +"Altura de Camada de Suporte Independente está ativada.\n" "Qual você deseja manter?\n" "SIM - Manter a Torre de Priming\n" -"NÃO - Manter a Altura de Camada Adaptativa e a Altura de Camada de Suporte Independente" +"NÃO - Manter a Altura de Camada Adaptativa e a Altura de Camada de Suporte " +"Independente" msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" @@ -3146,7 +3485,8 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"A torre de priming não funciona quando a Altura de Camada Adaptativa está ativada.\n" +"A torre de priming não funciona quando a Altura de Camada Adaptativa está " +"ativada.\n" "Qual você deseja manter?\n" "SIM - Manter a Torre de Priming\n" "NÃO - Manter a Altura de Camada Adaptativa" @@ -3157,7 +3497,8 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"A torre de priming não funciona quando a Altura da Camada de Suporte Independente está ativada.\n" +"A torre de priming não funciona quando a Altura da Camada de Suporte " +"Independente está ativada.\n" "Qual você deseja manter?\n" "SIM - Manter a Torre de Priming\n" "NÃO - Manter a Altura da Camada de Suporte Independente" @@ -3176,8 +3517,13 @@ msgstr "" "seam_slope_start_height precisa ser menor que layer_height.\n" "Redefinir para 0." -msgid "Spiral mode only works when wall loops is 1, support is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional." -msgstr "O modo espiral só funciona quando o perímetro é igual a 1, o suporte está desativado, as camadas de topo são 0, a densidade de preenchimento não sólido é 0 e o tipo de timelapse é tradicional." +msgid "" +"Spiral mode only works when wall loops is 1, support is disabled, top shell " +"layers is 0, sparse infill density is 0 and timelapse type is traditional." +msgstr "" +"O modo espiral só funciona quando o perímetro é igual a 1, o suporte está " +"desativado, as camadas de topo são 0, a densidade de preenchimento não " +"sólido é 0 e o tipo de timelapse é tradicional." msgid " But machines with I3 structure will not generate timelapse videos." msgstr " Mas máquinas com estrutura I3 não gerarão vídeos de timelapse." @@ -3270,7 +3616,8 @@ msgid "Paused due to AMS lost" msgstr "Pausado devido à perda do AMS" msgid "Paused due to low speed of the heat break fan" -msgstr "Pausado devido a baixa velocidade do ventilador do bloco de aquecimento" +msgstr "" +"Pausado devido a baixa velocidade do ventilador do bloco de aquecimento" msgid "Paused due to chamber temperature control error" msgstr "Pausado devido a erro no controle de temperatura da câmara" @@ -3296,18 +3643,6 @@ msgstr "Pausa de erro na primeira camada" msgid "Nozzle clog pause" msgstr "Pausa de obstrução do bico" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Placa principal" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Desconhecido" @@ -3332,19 +3667,38 @@ msgstr "Verificação falhou." msgid "Update failed." msgstr "Atualização falhou." -msgid "The current chamber temperature or the target chamber temperature exceeds 45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/TPU) is not allowed to be loaded." -msgstr "A temperatura atual da câmara ou a temperatura da câmara alvo excede 45℃. Para evitar obstrução do extrusor, não é permitido carregar filamento de baixa temperatura (PLA/PETG/TPU)." +msgid "" +"The current chamber temperature or the target chamber temperature exceeds " +"45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" +"TPU) is not allowed to be loaded." +msgstr "" +"A temperatura atual da câmara ou a temperatura da câmara alvo excede 45℃. " +"Para evitar obstrução do extrusor, não é permitido carregar filamento de " +"baixa temperatura (PLA/PETG/TPU)." -msgid "Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to avoid extruder clogging,it is not allowed to set the chamber temperature above 45℃." -msgstr "Filamento de baixa temperatura (PLA/PETG/TPU) está carregado na extrusora. Para evitar obstrução do extrusor, não é permitido ajustar a temperatura da câmara acima de 45℃." +msgid "" +"Low temperature filament(PLA/PETG/TPU) is loaded in the extruder.In order to " +"avoid extruder clogging,it is not allowed to set the chamber temperature " +"above 45℃." +msgstr "" +"Filamento de baixa temperatura (PLA/PETG/TPU) está carregado na extrusora. " +"Para evitar obstrução do extrusor, não é permitido ajustar a temperatura da " +"câmara acima de 45℃." -msgid "When you set the chamber temperature below 40℃, the chamber temperature control will not be activated. And the target chamber temperature will automatically be set to 0℃." -msgstr "Quando você definir a temperatura da câmara abaixo de 40℃, o controle de temperatura da câmara não será ativado. E a temperatura alvo da câmara será automaticamente definida como 0℃." +msgid "" +"When you set the chamber temperature below 40℃, the chamber temperature " +"control will not be activated. And the target chamber temperature will " +"automatically be set to 0℃." +msgstr "" +"Quando você definir a temperatura da câmara abaixo de 40℃, o controle de " +"temperatura da câmara não será ativado. E a temperatura alvo da câmara será " +"automaticamente definida como 0℃." msgid "Failed to start printing job" msgstr "Falha ao iniciar o trabalho de impressão" -msgid "This calibration does not support the currently selected nozzle diameter" +msgid "" +"This calibration does not support the currently selected nozzle diameter" msgstr "Esta calibração não suporta o diâmetro do bico atualmente selecionado" msgid "Current flowrate cali param is invalid" @@ -3365,11 +3719,19 @@ msgstr "TPU não é suportado pelo AMS." msgid "Bambu PET-CF/PA6-CF is not supported by AMS." msgstr "Bambu PET-CF/PA6-CF não é suportado pelo AMS." -msgid "Damp PVA will become flexible and get stuck inside AMS,please take care to dry it before use." -msgstr "O PVA úmido se tornará flexível e ficará preso dentro do AMS, por favor, tenha cuidado para secá-lo antes de usar." +msgid "" +"Damp PVA will become flexible and get stuck inside AMS,please take care to " +"dry it before use." +msgstr "" +"O PVA úmido se tornará flexível e ficará preso dentro do AMS, por favor, " +"tenha cuidado para secá-lo antes de usar." -msgid "CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, please use with caution." -msgstr "Os filamentos CF/GF são duros e quebradiços, é fácil quebrar ou ficar preso no AMS, por favor, use com cautela." +msgid "" +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " +"AMS, please use with caution." +msgstr "" +"Os filamentos CF/GF são duros e quebradiços, é fácil quebrar ou ficar preso " +"no AMS, por favor, use com cautela." msgid "default" msgstr "padrão" @@ -3379,7 +3741,9 @@ msgid "Edit Custom G-code (%1%)" msgstr "Editar G-Code personalizado (%1%)" msgid "Built-in placeholders (Double click item to add to G-code)" -msgstr "Marcadores de posição incorporados (Clique duas vezes no item para adicionar ao G-code)" +msgstr "" +"Marcadores de posição incorporados (Clique duas vezes no item para adicionar " +"ao G-code)" msgid "Search gcode placeholders" msgstr "Procurar marcadores de posição do G-code" @@ -3817,8 +4181,12 @@ msgid "Size:" msgstr "Tamanho:" #, c-format, boost-format -msgid "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please separate the conflicted objects farther (%s <-> %s)." -msgstr "Foram encontrados conflitos de caminhos de G-code na camada %d, z = %.2lf mm. Por favor, separe mais os objetos em conflito (%s <-> %s)." +msgid "" +"Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " +"separate the conflicted objects farther (%s <-> %s)." +msgstr "" +"Foram encontrados conflitos de caminhos de G-code na camada %d, z = %.2lf " +"mm. Por favor, separe mais os objetos em conflito (%s <-> %s)." msgid "An object is layed over the boundary of plate." msgstr "Um objeto está sobre a borda da mesa." @@ -3834,10 +4202,12 @@ msgstr "Apenas o objeto em edição está visível." msgid "" "An object is laid over the boundary of plate or exceeds the height limit.\n" -"Please solve the problem by moving it totally on or off the plate, and confirming that the height is within the build volume." +"Please solve the problem by moving it totally on or off the plate, and " +"confirming that the height is within the build volume." msgstr "" "Um objeto está sobre a borda da mesa ou ultrapassa o limite de altura.\n" -"Por favor, resolva o problema movendo-o totalmente para dentro ou para fora da mesa, e confirmando que a altura está dentro do volume de impressão." +"Por favor, resolva o problema movendo-o totalmente para dentro ou para fora " +"da mesa, e confirmando que a altura está dentro do volume de impressão." msgid "Calibration step selection" msgstr "Seleção de etapa de calibração" @@ -3858,10 +4228,12 @@ msgid "Calibration program" msgstr "Programa de calibração" msgid "" -"The calibration program detects the status of your device automatically to minimize deviation.\n" +"The calibration program detects the status of your device automatically to " +"minimize deviation.\n" "It keeps the device performing optimally." msgstr "" -"O programa de calibração detecta automaticamente o estado do seu dispositivo para minimizar desvios.\n" +"O programa de calibração detecta automaticamente o estado do seu dispositivo " +"para minimizar desvios.\n" "Mantém o dispositivo com desempenho ideal." msgid "Calibration Flow" @@ -3949,6 +4321,9 @@ msgstr "Pré-visualizar" msgid "Device" msgstr "Dispositivo" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projeto" @@ -3988,6 +4363,9 @@ msgstr "Imprimir tudo" msgid "Send all" msgstr "Enviar tudo" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Atalhos de Teclado" @@ -4345,8 +4723,10 @@ msgstr "Escolha um diretório" #, c-format, boost-format msgid "There is %d config exported. (Only non-system configs)" msgid_plural "There are %d configs exported. (Only non-system configs)" -msgstr[0] "Foi exportada uma configuração (%d). (Apenas configurações não do sistema)" -msgstr[1] "Foram exportadas %d configurações. (Apenas configurações não do sistema)" +msgstr[0] "" +"Foi exportada uma configuração (%d). (Apenas configurações não do sistema)" +msgstr[1] "" +"Foram exportadas %d configurações. (Apenas configurações não do sistema)" msgid "Export result" msgstr "Resultado da exportação" @@ -4356,16 +4736,23 @@ msgstr "Selecione o perfil para carregar:" #, c-format, boost-format msgid "There is %d config imported. (Only non-system and compatible configs)" -msgid_plural "There are %d configs imported. (Only non-system and compatible configs)" -msgstr[0] "Foi importada uma configuração (%d). (Apenas configurações compatíveis e não do sistema)" -msgstr[1] "Foram importadas %d configurações. (Apenas configurações compatíveis e não do sistema)" +msgid_plural "" +"There are %d configs imported. (Only non-system and compatible configs)" +msgstr[0] "" +"Foi importada uma configuração (%d). (Apenas configurações compatíveis e não " +"do sistema)" +msgstr[1] "" +"Foram importadas %d configurações. (Apenas configurações compatíveis e não " +"do sistema)" msgid "" "\n" -"Hint: Make sure you have added the corresponding printer before importing the configs." +"Hint: Make sure you have added the corresponding printer before importing " +"the configs." msgstr "" "\n" -"Dica: Certifique-se de ter adicionado a impressora correspondente antes de importar as configurações." +"Dica: Certifique-se de ter adicionado a impressora correspondente antes de " +"importar as configurações." msgid "Import result" msgstr "Resultado da importação" @@ -4396,28 +4783,42 @@ msgid "Synchronization" msgstr "Sincronização" msgid "The device cannot handle more conversations. Please retry later." -msgstr "O dispositivo não pode lidar com mais conversas. Por favor, tente novamente mais tarde." +msgstr "" +"O dispositivo não pode lidar com mais conversas. Por favor, tente novamente " +"mais tarde." msgid "Player is malfunctioning. Please reinstall the system player." -msgstr "O reprodutor está com problemas. Por favor, reinstale o reprodutor do sistema." +msgstr "" +"O reprodutor está com problemas. Por favor, reinstale o reprodutor do " +"sistema." msgid "The player is not loaded, please click \"play\" button to retry." -msgstr "O reprodutor não está carregado, por favor, clique no botão \"Reproduzir\" para tentar novamente." +msgstr "" +"O reprodutor não está carregado, por favor, clique no botão \"Reproduzir\" " +"para tentar novamente." msgid "Please confirm if the printer is connected." msgstr "Por favor, confirme se a impressora está conectada." -msgid "The printer is currently busy downloading. Please try again after it finishes." -msgstr "A impressora está sendo baixada no momento. Tente novamente após terminar." +msgid "" +"The printer is currently busy downloading. Please try again after it " +"finishes." +msgstr "" +"A impressora está sendo baixada no momento. Tente novamente após terminar." msgid "Printer camera is malfunctioning." msgstr "A câmera da impressora está com problemas." msgid "Problem occured. Please update the printer firmware and try again." -msgstr "Ocorreu um problema. Por favor, atualize o firmware da impressora e tente novamente." +msgstr "" +"Ocorreu um problema. Por favor, atualize o firmware da impressora e tente " +"novamente." -msgid "LAN Only Liveview is off. Please turn on the liveview on printer screen." -msgstr "Liveview via LAN está desativado. Por favor, ative a liveview na tela da impressora." +msgid "" +"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgstr "" +"Liveview via LAN está desativado. Por favor, ative a liveview na tela da " +"impressora." msgid "Please enter the IP of printer to connect." msgstr "Por favor, digite o IP da impressora para conectar." @@ -4428,8 +4829,12 @@ msgstr "Inicializando..." msgid "Connection Failed. Please check the network and try again" msgstr "Falha na conexão. Por favor, verifique a rede e tente novamente" -msgid "Please check the network and try again, You can restart or update the printer if the issue persists." -msgstr "Por favor, verifique a rede e tente novamente, você pode reiniciar ou atualizar a impressora se o problema persistir." +msgid "" +"Please check the network and try again, You can restart or update the " +"printer if the issue persists." +msgstr "" +"Por favor, verifique a rede e tente novamente, você pode reiniciar ou " +"atualizar a impressora se o problema persistir." msgid "The printer has been logged out and cannot connect." msgstr "A impressora foi desconectada e não pode se conectar." @@ -4548,8 +4953,12 @@ msgstr "Falha ao carregar" msgid "Initialize failed (Device connection not ready)!" msgstr "Inicialização falhou (Conexão do dispositivo não está pronta)!" -msgid "Browsing file in SD card is not supported in current firmware. Please update the printer firmware." -msgstr "Procurar arquivo no cartão SD não é suportado no firmware atual. Por favor, atualize o firmware da impressora." +msgid "" +"Browsing file in SD card is not supported in current firmware. Please update " +"the printer firmware." +msgstr "" +"Procurar arquivo no cartão SD não é suportado no firmware atual. Por favor, " +"atualize o firmware da impressora." msgid "Initialize failed (Storage unavailable, insert SD card.)!" msgstr "Inicialização falhou (falha no armazenamento, insira o cartão SD.)!" @@ -4566,9 +4975,14 @@ msgstr "Inicialização falhou (%s)!" #, c-format, boost-format msgid "You are going to delete %u file from printer. Are you sure to continue?" -msgid_plural "You are going to delete %u files from printer. Are you sure to continue?" -msgstr[0] "Você está prestes a excluir %u arquivo da impressora. Tem certeza de que deseja continuar?" -msgstr[1] "Você está prestes a excluir %u arquivos da impressora. Tem certeza de que deseja continuar?" +msgid_plural "" +"You are going to delete %u files from printer. Are you sure to continue?" +msgstr[0] "" +"Você está prestes a excluir %u arquivo da impressora. Tem certeza de que " +"deseja continuar?" +msgstr[1] "" +"Você está prestes a excluir %u arquivos da impressora. Tem certeza de que " +"deseja continuar?" msgid "Delete files" msgstr "Excluir arquivos" @@ -4589,8 +5003,12 @@ msgstr "Falha ao obter informação do modelo da impressora." msgid "Failed to parse model information." msgstr "Falha ao analisar a informação do modelo." -msgid "The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer and export a new .gcode.3mf file." -msgstr "O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com Orca Slicer e exporte um novo arquivo .gcode.3mf." +msgid "" +"The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer " +"and export a new .gcode.3mf file." +msgstr "" +"O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com Orca " +"Slicer e exporte um novo arquivo .gcode.3mf." #, c-format, boost-format msgid "File '%s' was lost! Please download it again." @@ -4620,11 +5038,17 @@ msgstr "Download concluído" msgid "Downloading %d%%..." msgstr "Baixando %d%%..." -msgid "Reconnecting the printer, the operation cannot be completed immediately, please try again later." -msgstr "Reconectando a impressora, a operação não pôde ser concluída imediatamente, por favor, tente novamente mais tarde." +msgid "" +"Reconnecting the printer, the operation cannot be completed immediately, " +"please try again later." +msgstr "" +"Reconectando a impressora, a operação não pôde ser concluída imediatamente, " +"por favor, tente novamente mais tarde." -msgid "Over 4 studio/handy are using remote access, you can close some and try again." -msgstr "Mais de 4 estúdio/prático estão usando o acesso remoto, você pode fechar alguns e tentar novamente." +msgid "" +"Over 4 systems/handy are using remote access, you can close some and try " +"again." +msgstr "" msgid "File does not exist." msgstr "O arquivo não existe." @@ -4709,8 +5133,11 @@ msgstr "" msgid "How do you like this printing file?" msgstr "O que você achou deste arquivo de impressão?" -msgid "(The model has already been rated. Your rating will overwrite the previous rating.)" -msgstr "(O modelo já foi avaliado. Sua avaliação substituirá a avaliação anterior.)" +msgid "" +"(The model has already been rated. Your rating will overwrite the previous " +"rating.)" +msgstr "" +"(O modelo já foi avaliado. Sua avaliação substituirá a avaliação anterior.)" msgid "Rate" msgstr "Avaliar" @@ -4751,9 +5178,6 @@ msgstr "Filhote" msgid "Bed" msgstr "Mesa" -msgid "Unload" -msgstr "Descarregar" - msgid "Debug Info" msgstr "Informações de Depuração" @@ -4787,8 +5211,12 @@ msgstr "Camada: %s" msgid "Layer: %d/%d" msgstr "Camada: %d/%d" -msgid "Please heat the nozzle to above 170 degree before loading or unloading filament." -msgstr "Aqueça o bico a mais de 170 graus antes de carregar ou descarregar o filamento." +msgid "" +"Please heat the nozzle to above 170 degree before loading or unloading " +"filament." +msgstr "" +"Aqueça o bico a mais de 170 graus antes de carregar ou descarregar o " +"filamento." msgid "Still unload" msgstr "Ainda descarregando" @@ -4799,8 +5227,13 @@ msgstr "Ainda carregando" msgid "Please select an AMS slot before calibration" msgstr "Selecione um slot AMS antes da calibração" -msgid "Cannot read filament info: the filament is loaded to the tool head,please unload the filament and try again." -msgstr "Não é possível ler as informações do filamento: o filamento está carregado na cabeça da ferramenta, por favor, descarregue o filamento e tente novamente." +msgid "" +"Cannot read filament info: the filament is loaded to the tool head,please " +"unload the filament and try again." +msgstr "" +"Não é possível ler as informações do filamento: o filamento está carregado " +"na cabeça da ferramenta, por favor, descarregue o filamento e tente " +"novamente." msgid "This only takes effect during printing" msgstr "Isso só tem efeito durante a impressão" @@ -4866,17 +5299,21 @@ msgid " can not be opened\n" msgstr " não pode ser aberto\n" msgid "" -"The following issues occurred during the process of uploading images. Do you want to ignore them?\n" +"The following issues occurred during the process of uploading images. Do you " +"want to ignore them?\n" "\n" msgstr "" -"Os seguintes problemas ocorreram durante o processo de carregamento das imagens. Você deseja ignorá-los?\n" +"Os seguintes problemas ocorreram durante o processo de carregamento das " +"imagens. Você deseja ignorá-los?\n" "\n" msgid "info" msgstr "informação" msgid "Synchronizing the printing results. Please retry a few seconds later." -msgstr "Sincronizando os resultados da impressão. Por favor, tente novamente alguns segundos depois." +msgstr "" +"Sincronizando os resultados da impressão. Por favor, tente novamente alguns " +"segundos depois." msgid "Upload failed\n" msgstr "Falha no envio\n" @@ -4889,7 +5326,8 @@ msgid "" "\n" " error code: " msgstr "" -"O resultado do seu comentário não pode ser enviado devido a alguns motivos. Como segue:\n" +"O resultado do seu comentário não pode ser enviado devido a alguns motivos. " +"Como segue:\n" "\n" " código de erro: " @@ -4905,8 +5343,12 @@ msgstr "" "\n" "Gostaria de ser redirecionado para a página da web para avaliar?" -msgid "Some of your images failed to upload. Would you like to redirect to the webpage for rating?" -msgstr "Algumas de suas imagens não puderam ser carregadas. Gostaria de ser redirecionado para a página da web para avaliar?" +msgid "" +"Some of your images failed to upload. Would you like to redirect to the " +"webpage for rating?" +msgstr "" +"Algumas de suas imagens não puderam ser carregadas. Gostaria de ser " +"redirecionado para a página da web para avaliar?" msgid "You can select up to 16 images." msgstr "Você pode selecionar até 16 imagens." @@ -4915,7 +5357,8 @@ msgid "" "At least one successful print record of this print profile is required \n" "to give a positive rating(4 or 5stars)." msgstr "" -"Pelo menos um registro de impressão bem-sucedido deste perfil de impressão é necessário \n" +"Pelo menos um registro de impressão bem-sucedido deste perfil de impressão é " +"necessário \n" "para dar uma avaliação positiva (4 ou 5 estrelas)." msgid "Status" @@ -4924,9 +5367,6 @@ msgstr "Status" msgid "Update" msgstr "Atualizar" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Não mostrar novamente" @@ -4960,20 +5400,22 @@ msgstr "Pular" msgid "Newer 3mf version" msgstr "Nova versão 3mf" -msgid "The 3mf file version is in Beta and it is newer than the current Bambu Studio version." -msgstr "A versão do arquivo 3mf está em Beta e é mais recente que a versão atual do Bambu Studio." +msgid "" +"The 3mf file version is in Beta and it is newer than the current OrcaSlicer " +"version." +msgstr "" -msgid "If you would like to try Bambu Studio Beta, you may click to" -msgstr "Se você gostaria de testar o Bambu Studio Beta, clique para" +msgid "If you would like to try Orca Slicer Beta, you may click to" +msgstr "" msgid "Download Beta Version" msgstr "Baixar versão beta" -msgid "The 3mf file version is newer than the current Bambu Studio version." -msgstr "A versão do arquivo 3mf é mais recente que a versão atual do Bambu Studio." +msgid "The 3mf file version is newer than the current Orca Slicer version." +msgstr "" -msgid "Update your Bambu Studio could enable all functionality in the 3mf file." -msgstr "Atualizar seu Bambu Studio pode habilitar todas as funcionalidades do arquivo 3mf." +msgid "Update your Orca Slicer could enable all functionality in the 3mf file." +msgstr "" msgid "Current Version: " msgstr "Versão Atual: " @@ -5110,8 +5552,12 @@ msgstr "Camadas" msgid "Range" msgstr "Intervalo" -msgid "The application cannot run normally because OpenGL version is lower than 2.0.\n" -msgstr "A aplicação não pode ser executada normalmente porque a versão do OpenGL é inferior a 2.0.\n" +msgid "" +"The application cannot run normally because OpenGL version is lower than " +"2.0.\n" +msgstr "" +"A aplicação não pode ser executada normalmente porque a versão do OpenGL é " +"inferior a 2.0.\n" msgid "Please upgrade your graphics card driver." msgstr "Por favor, atualize o driver da sua placa de vídeo." @@ -5147,8 +5593,12 @@ msgstr "Sensibilidade da pausa é" msgid "Enable detection of build plate position" msgstr "Ativar detecção da posição da mesa" -msgid "The localization tag of build plate is detected, and printing is paused if the tag is not in predefined range." -msgstr "A etiqueta de localização da mesa é detectada e a impressão é pausada se a etiqueta não estiver na faixa predefinida." +msgid "" +"The localization tag of build plate is detected, and printing is paused if " +"the tag is not in predefined range." +msgstr "" +"A etiqueta de localização da mesa é detectada e a impressão é pausada se a " +"etiqueta não estiver na faixa predefinida." msgid "First Layer Inspection" msgstr "Inspeção da Primeira Camada" @@ -5162,6 +5612,12 @@ msgstr "Permitir som de alerta" msgid "Filament Tangle Detect" msgstr "Detecção de emaranhado de filamento" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "Tipo de bico" @@ -5266,17 +5722,28 @@ msgstr "Definir filamentos para usar" msgid "Search plate, object and part." msgstr "Pesquisar mesa, objeto e peça." -msgid "No AMS filaments. Please select a printer in 'Device' page to load AMS info." -msgstr "Sem filamentos AMS. Por favor, selecione uma impressora na página 'Dispositivo' para carregar informações AMS." +msgid "" +"No AMS filaments. Please select a printer in 'Device' page to load AMS info." +msgstr "" +"Sem filamentos AMS. Por favor, selecione uma impressora na página " +"'Dispositivo' para carregar informações AMS." msgid "Sync filaments with AMS" msgstr "Sincronizar filamentos com AMS" -msgid "Sync filaments with AMS will drop all current selected filament presets and colors. Do you want to continue?" -msgstr "Sincronizar filamentos com AMS eliminará todas os presets de filamento e cores selecionadas atualmente. Deseja continuar?" +msgid "" +"Sync filaments with AMS will drop all current selected filament presets and " +"colors. Do you want to continue?" +msgstr "" +"Sincronizar filamentos com AMS eliminará todas os presets de filamento e " +"cores selecionadas atualmente. Deseja continuar?" -msgid "Already did a synchronization, do you want to sync only changes or resync all?" -msgstr "Já foi feita uma sincronização, deseja sincronizar apenas as alterações ou ressincronizar tudo?" +msgid "" +"Already did a synchronization, do you want to sync only changes or resync " +"all?" +msgstr "" +"Já foi feita uma sincronização, deseja sincronizar apenas as alterações ou " +"ressincronizar tudo?" msgid "Sync" msgstr "Sincronizar" @@ -5287,16 +5754,26 @@ msgstr "Ressincronizar" msgid "There are no compatible filaments, and sync is not performed." msgstr "Não há filamentos compatíveis, e a sincronização não é realizada." -msgid "There are some unknown filaments mapped to generic preset. Please update Orca Slicer or restart Orca Slicer to check if there is an update to system presets." -msgstr "Alguns filamentos desconhecidos foram mapeados para preset genérico. Por favor, atualize o Orca Slicer ou reinicie o Orca Slicer para verificar se há uma atualização para presets do sistema." +msgid "" +"There are some unknown filaments mapped to generic preset. Please update " +"Orca Slicer or restart Orca Slicer to check if there is an update to system " +"presets." +msgstr "" +"Alguns filamentos desconhecidos foram mapeados para preset genérico. Por " +"favor, atualize o Orca Slicer ou reinicie o Orca Slicer para verificar se há " +"uma atualização para presets do sistema." #, boost-format msgid "Do you want to save changes to \"%1%\"?" msgstr "Deseja salvar as alterações em \"%1%\"?" #, c-format, boost-format -msgid "Successfully unmounted. The device %s(%s) can now be safely removed from the computer." -msgstr "Desmontado com sucesso. O dispositivo %s(%s) agora pode ser removido com segurança do computador." +msgid "" +"Successfully unmounted. The device %s(%s) can now be safely removed from the " +"computer." +msgstr "" +"Desmontado com sucesso. O dispositivo %s(%s) agora pode ser removido com " +"segurança do computador." #, c-format, boost-format msgid "Ejecting of device %s(%s) has failed." @@ -5308,14 +5785,30 @@ msgstr "Projeto não salvo anterior detectado, deseja restaurá-lo?" msgid "Restore" msgstr "Restaurar" -msgid "The current hot bed temperature is relatively high. The nozzle may be clogged when printing this filament in a closed enclosure. Please open the front door and/or remove the upper glass." -msgstr "A temperatura atual da mesa aquecida está relativamente alta. A boquilha pode ficar obstruída ao imprimir este filamento em um compartimento fechado. Por favor, abra a porta frontal e/ou remova o vidro superior." +msgid "" +"The current hot bed temperature is relatively high. The nozzle may be " +"clogged when printing this filament in a closed enclosure. Please open the " +"front door and/or remove the upper glass." +msgstr "" +"A temperatura atual da mesa aquecida está relativamente alta. A boquilha " +"pode ficar obstruída ao imprimir este filamento em um compartimento fechado. " +"Por favor, abra a porta frontal e/ou remova o vidro superior." -msgid "The nozzle hardness required by the filament is higher than the default nozzle hardness of the printer. Please replace the hardened nozzle or filament, otherwise, the nozzle will be attrited or damaged." -msgstr "A dureza do bico necessária pelo filamento é maior do que a dureza padrão do bico da impressora. Por favor, substitua a boquilha endurecida ou o filamento, caso contrário, a boquilha será desgastada ou danificada." +msgid "" +"The nozzle hardness required by the filament is higher than the default " +"nozzle hardness of the printer. Please replace the hardened nozzle or " +"filament, otherwise, the nozzle will be attrited or damaged." +msgstr "" +"A dureza do bico necessária pelo filamento é maior do que a dureza padrão do " +"bico da impressora. Por favor, substitua a boquilha endurecida ou o " +"filamento, caso contrário, a boquilha será desgastada ou danificada." -msgid "Enabling traditional timelapse photography may cause surface imperfections. It is recommended to change to smooth mode." -msgstr "A habilitação da fotografia tradicional em timelapse pode causar imperfeições na superfície. É recomendado mudar para o modo suave." +msgid "" +"Enabling traditional timelapse photography may cause surface imperfections. " +"It is recommended to change to smooth mode." +msgstr "" +"A habilitação da fotografia tradicional em timelapse pode causar " +"imperfeições na superfície. É recomendado mudar para o modo suave." msgid "Expand sidebar" msgstr "Expandir barra lateral" @@ -5328,21 +5821,30 @@ msgid "Loading file: %s" msgstr "Carregando arquivo: %s" msgid "The 3mf is not supported by OrcaSlicer, load geometry data only." -msgstr "O 3mf não é suportado pelo OrcaSlicer, carregar apenas dados de geometria." +msgstr "" +"O 3mf não é suportado pelo OrcaSlicer, carregar apenas dados de geometria." msgid "Load 3mf" msgstr "Carregar 3mf" #, c-format, boost-format -msgid "The 3mf's version %s is newer than %s's version %s, Found following keys unrecognized:" -msgstr "A versão %s do 3mf é mais recente do que a versão %s do %s, encontradas as seguintes chaves não reconhecidas:" +msgid "" +"The 3mf's version %s is newer than %s's version %s, Found following keys " +"unrecognized:" +msgstr "" +"A versão %s do 3mf é mais recente do que a versão %s do %s, encontradas as " +"seguintes chaves não reconhecidas:" msgid "You'd better upgrade your software.\n" msgstr "Será melhor atualizar o seu software.\n" #, c-format, boost-format -msgid "The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your software." -msgstr "A versão %s do 3mf é mais recente do que a versão %s do %s, sugerimos atualizar seu software." +msgid "" +"The 3mf's version %s is newer than %s's version %s, Suggest to upgrade your " +"software." +msgstr "" +"A versão %s do 3mf é mais recente do que a versão %s do %s, sugerimos " +"atualizar seu software." msgid "Invalid values found in the 3mf:" msgstr "Valores inválidos encontrados no 3mf:" @@ -5351,32 +5853,46 @@ msgid "Please correct them in the param tabs" msgstr "Por favor, corrija-os nas guias de parâmetros" msgid "The 3mf has following modified G-codes in filament or printer presets:" -msgstr "O 3mf possui os seguintes G-codes modificados em presets de filamento ou impressora:" +msgstr "" +"O 3mf possui os seguintes G-codes modificados em presets de filamento ou " +"impressora:" -msgid "Please confirm that these modified G-codes are safe to prevent any damage to the machine!" -msgstr "Por favor, confirme se esses G-codes modificados são seguros para evitar qualquer dano à máquina!" +msgid "" +"Please confirm that these modified G-codes are safe to prevent any damage to " +"the machine!" +msgstr "" +"Por favor, confirme se esses G-codes modificados são seguros para evitar " +"qualquer dano à máquina!" msgid "Modified G-codes" msgstr "G-codes modificados" msgid "The 3mf has following customized filament or printer presets:" -msgstr "O 3mf possui os seguintes perfis de filamento ou impressora personalizados:" +msgstr "" +"O 3mf possui os seguintes perfis de filamento ou impressora personalizados:" -msgid "Please confirm that the G-codes within these presets are safe to prevent any damage to the machine!" -msgstr "Por favor, confirme se os G-codes dentro desses presets são seguros para evitar qualquer dano à máquina!" +msgid "" +"Please confirm that the G-codes within these presets are safe to prevent any " +"damage to the machine!" +msgstr "" +"Por favor, confirme se os G-codes dentro desses presets são seguros para " +"evitar qualquer dano à máquina!" msgid "Customized Preset" msgstr "Perfil Personalizado" msgid "Name of components inside step file is not UTF8 format!" -msgstr "O nome dos componentes dentro do arquivo STEP não está no formato UTF-8!" +msgstr "" +"O nome dos componentes dentro do arquivo STEP não está no formato UTF-8!" msgid "The name may show garbage characters!" msgstr "O nome pode exibir caracteres inválidos!" #, boost-format msgid "Failed loading file \"%1%\". An invalid configuration was found." -msgstr "Falha ao carregar o arquivo \"%1%\". Foi encontrada uma configuração inválida." +msgstr "" +"Falha ao carregar o arquivo \"%1%\". Foi encontrada uma configuração " +"inválida." msgid "Objects with zero volume removed" msgstr "Objetos com volume zero removidos" @@ -5401,7 +5917,8 @@ msgid "" "the file be loaded as a single object having multiple parts?" msgstr "" "Este arquivo contém vários objetos posicionados em alturas múltiplas.\n" -"Em vez de considerá-los como múltiplos objetos, o arquivo deve ser carregado\n" +"Em vez de considerá-los como múltiplos objetos, o arquivo deve ser " +"carregado\n" "como um único objeto com múltiplas peças?" msgid "Multi-part object detected" @@ -5416,8 +5933,12 @@ msgstr "Objeto com múltiplas peças foi detectado" msgid "The file does not contain any geometry data." msgstr "O arquivo não contém dados de geometria." -msgid "Your object appears to be too large, Do you want to scale it down to fit the heat bed automatically?" -msgstr "Seu objeto parece ser muito grande. Deseja dimensioná-lo para caber na mesa de aquecimento automaticamente?" +msgid "" +"Your object appears to be too large, Do you want to scale it down to fit the " +"heat bed automatically?" +msgstr "" +"Seu objeto parece ser muito grande. Deseja dimensioná-lo para caber na mesa " +"de aquecimento automaticamente?" msgid "Object too large" msgstr "Objeto muito grande" @@ -5518,18 +6039,23 @@ msgstr "Fatiando Mesa %d" msgid "Please resolve the slicing errors and publish again." msgstr "Por favor, resolva os erros de fatiamento e publique novamente." -msgid "Network Plug-in is not detected. Network related features are unavailable." -msgstr "O plug-in de rede não está detectado. Recursos relacionados à rede estão indisponíveis." +msgid "" +"Network Plug-in is not detected. Network related features are unavailable." +msgstr "" +"O plug-in de rede não está detectado. Recursos relacionados à rede estão " +"indisponíveis." msgid "" "Preview only mode:\n" "The loaded file contains gcode only, Can not enter the Prepare page" msgstr "" "Modo somente de visualização:\n" -"O arquivo carregado contém apenas código G, não é possível acessar a página de Preparação" +"O arquivo carregado contém apenas código G, não é possível acessar a página " +"de Preparação" msgid "You can keep the modified presets to the new project or discard them" -msgstr "Você pode manter os presets modificados no novo projeto ou descartá-los" +msgstr "" +"Você pode manter os presets modificados no novo projeto ou descartá-los" msgid "Creating a new project" msgstr "Criando um novo projeto" @@ -5539,10 +6065,12 @@ msgstr "Carregar Projeto" msgid "" "Failed to save the project.\n" -"Please check whether the folder exists online or if other programs open the project file." +"Please check whether the folder exists online or if other programs open the " +"project file." msgstr "" "Falha ao salvar o projeto.\n" -"Por favor, verifique se a pasta existe online ou se outros programas estão com o arquivo do projeto aberto." +"Por favor, verifique se a pasta existe online ou se outros programas estão " +"com o arquivo do projeto aberto." msgid "Save project" msgstr "Salvar Projeto" @@ -5553,15 +6081,23 @@ msgstr "Importando Modelo" msgid "prepare 3mf file..." msgstr "preparar o arquivo 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "baixando projeto..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projeto baixado %d%%" -msgid "Importing to Orca Slicer failed. Please download the file and manually import it." -msgstr "A importação para o Orca Slicer falhou. Por favor, baixe o arquivo e importe manualmente." +msgid "" +"Importing to Bambu Studio failed. Please download the file and manually " +"import it." +msgstr "" msgid "Import SLA archive" msgstr "Importar arquivo SLA" @@ -5627,17 +6163,27 @@ msgid "The provided file name is not valid." msgstr "O nome de arquivo fornecido não é válido." msgid "The following characters are not allowed by a FAT file system:" -msgstr "Os seguintes caracteres não são permitidos por um sistema de arquivos FAT:" +msgstr "" +"Os seguintes caracteres não são permitidos por um sistema de arquivos FAT:" msgid "Save Sliced file as:" msgstr "Salvar arquivo fatiado como:" #, c-format, boost-format -msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." -msgstr "O arquivo %s foi enviado para o espaço de armazenamento da impressora e pode ser visualizado na impressora." +msgid "" +"The file %s has been sent to the printer's storage space and can be viewed " +"on the printer." +msgstr "" +"O arquivo %s foi enviado para o espaço de armazenamento da impressora e pode " +"ser visualizado na impressora." -msgid "Unable to perform boolean operation on model meshes. Only positive parts will be kept. You may fix the meshes and try agian." -msgstr "Não é possível executar a operação booleana em malhas de modelo. Somente partes positivas serão mantidas. Você pode consertar as malhas e tentar novamente." +msgid "" +"Unable to perform boolean operation on model meshes. Only positive parts " +"will be kept. You may fix the meshes and try agian." +msgstr "" +"Não é possível executar a operação booleana em malhas de modelo. Somente " +"partes positivas serão mantidas. Você pode consertar as malhas e tentar " +"novamente." #, boost-format msgid "Reason: part \"%1%\" is empty." @@ -5656,17 +6202,20 @@ msgid "Reason: \"%1%\" and another part have no intersection." msgstr "Motivo: \"%1%\" e outra parte não tem intersecção." msgid "" -"Are you sure you want to store original SVGs with their local paths into the 3MF file?\n" +"Are you sure you want to store original SVGs with their local paths into the " +"3MF file?\n" "If you hit 'NO', all SVGs in the project will not be editable any more." msgstr "" -"Você tem certeza de que deseja armazenar os SVGs originais com seus caminhos locais no arquivo 3MF?\n" +"Você tem certeza de que deseja armazenar os SVGs originais com seus caminhos " +"locais no arquivo 3MF?\n" "Se pressionar 'NÃO', todos os SVGs no projeto não serão mais editáveis." msgid "Private protection" msgstr "Proteção privada" msgid "Is the printer ready? Is the print sheet in place, empty and clean?" -msgstr "A impressora está pronta? O folha de impressão está no lugar, vazia e limpa?" +msgstr "" +"A impressora está pronta? O folha de impressão está no lugar, vazia e limpa?" msgid "Upload and Print" msgstr "Enviar e Imprimir" @@ -5685,7 +6234,9 @@ msgid "Send to printer" msgstr "Enviar para a impressora" msgid "Custom supports and color painting were removed before repairing." -msgstr "Os suportes personalizados e a pintura de cores foram removidos antes do reparo." +msgstr "" +"Os suportes personalizados e a pintura de cores foram removidos antes do " +"reparo." msgid "Optimize Rotation" msgstr "Otimizar Rotação" @@ -5735,12 +6286,22 @@ msgstr "Triângulos: %1%\n" msgid "Tips:" msgstr "Dicas:" -msgid "\"Fix Model\" feature is currently only on Windows. Please repair the model on Orca Slicer(windows) or CAD softwares." -msgstr "A função \"Corrigir Modelo\" está atualmente disponível apenas no Windows. Por favor, repare o modelo no Orca Slicer (Windows) ou softwares CAD." +msgid "" +"\"Fix Model\" feature is currently only on Windows. Please repair the model " +"on Orca Slicer(windows) or CAD softwares." +msgstr "" +"A função \"Corrigir Modelo\" está atualmente disponível apenas no Windows. " +"Por favor, repare o modelo no Orca Slicer (Windows) ou softwares CAD." #, c-format, boost-format -msgid "Plate% d: %s is not suggested to be used to print filament %s(%s). If you still want to do this printing, please set this filament's bed temperature to non zero." -msgstr "Mesa %d: %s não é recomendada para ser usada para imprimir filamento %s(%s). Se você ainda quiser fazer esta impressão, por favor, defina a temperatura de mesa deste filamento para zero" +msgid "" +"Plate% d: %s is not suggested to be used to print filament %s(%s). If you " +"still want to do this printing, please set this filament's bed temperature " +"to non zero." +msgstr "" +"Mesa %d: %s não é recomendada para ser usada para imprimir filamento %s(%s). " +"Se você ainda quiser fazer esta impressão, por favor, defina a temperatura " +"de mesa deste filamento para zero" msgid "Switching the language requires application restart.\n" msgstr "Mudar o idioma requer reiniciar o aplicativo.\n" @@ -5752,7 +6313,8 @@ msgid "Language selection" msgstr "Seleção de Idioma" msgid "Switching application language while some presets are modified." -msgstr "A mudança do idioma do aplicativo enquanto alguns presets estão modificados." +msgstr "" +"A mudança do idioma do aplicativo enquanto alguns presets estão modificados." msgid "Changing application language" msgstr "Alterando o idioma do aplicativo" @@ -5811,6 +6373,21 @@ msgstr "Imperial" msgid "Units" msgstr "Unidades" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Início" @@ -5832,14 +6409,19 @@ msgid "" "Touchpad: Alt+move for rotation, Shift+move for panning." msgstr "" "Selecione o estilo de navegação da câmera.\n" -"Padrão: LMB + mover para rotacionar, RMB/MMB + mover para movimento lateral.\n" +"Padrão: LMB + mover para rotacionar, RMB/MMB + mover para movimento " +"lateral.\n" "Touchpad: Alt + mover para rotacionar, Shift + mover para movimento lateral." msgid "Zoom to mouse position" msgstr "Zoom para a posição do mouse" -msgid "Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center." -msgstr "Dar zoom em direção à posição do ponteiro do mouse na visualização 3D, em vez do centro da janela 2D." +msgid "" +"Zoom in towards the mouse pointer's position in the 3D view, rather than the " +"2D window center." +msgstr "" +"Dar zoom em direção à posição do ponteiro do mouse na visualização 3D, em " +"vez do centro da janela 2D." msgid "Use free camera" msgstr "Usar câmera livre" @@ -5871,7 +6453,8 @@ msgstr "Volumes de descarga: Auto-calcular toda vez que a cor mudar." msgid "If enabled, auto-calculate everytime the color changed." msgstr "Se ativado, auto-calcular toda vez que a cor mudar." -msgid "Flushing volumes: Auto-calculate every time when the filament is changed." +msgid "" +"Flushing volumes: Auto-calculate every time when the filament is changed." msgstr "Volumes de descarga: Auto-calcular toda vez que a cor mudar." msgid "If enabled, auto-calculate every time when filament is changed" @@ -5880,14 +6463,27 @@ msgstr "Se ativo, auto-calcular toda vez que a cor mudar" msgid "Remember printer configuration" msgstr "Lembrar configuração da impressora" -msgid "If enabled, Orca will remember and switch filament/process configuration for each printer automatically." -msgstr "Se ativo, Orca vai lembrar e alternar a configuração de filamento/processo para cada impressora automaticamente." +msgid "" +"If enabled, Orca will remember and switch filament/process configuration for " +"each printer automatically." +msgstr "" +"Se ativo, Orca vai lembrar e alternar a configuração de filamento/processo " +"para cada impressora automaticamente." + +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" msgid "Network" msgstr "Rede" msgid "Auto sync user presets(Printer/Filament/Process)" -msgstr "Sincronização automática de presets do usuário(Impressora/Filamento/Processo)" +msgstr "" +"Sincronização automática de presets do usuário(Impressora/Filamento/Processo)" msgid "User Sync" msgstr "Sincronização do Usuário" @@ -5908,19 +6504,23 @@ msgid "Associate .3mf files to OrcaSlicer" msgstr "Associar arquivos .3mf ao OrcaSlicer" msgid "If enabled, sets OrcaSlicer as default application to open .3mf files" -msgstr "Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .3mf" +msgstr "" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .3mf" msgid "Associate .stl files to OrcaSlicer" msgstr "Associar arquivos .stl ao OrcaSlicer" msgid "If enabled, sets OrcaSlicer as default application to open .stl files" -msgstr "Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .stl" +msgstr "" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .stl" msgid "Associate .step/.stp files to OrcaSlicer" msgstr "Associar arquivos .step/.stp ao OrcaSlicer" msgid "If enabled, sets OrcaSlicer as default application to open .step files" -msgstr "Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos .step" +msgstr "" +"Se ativado, define OrcaSlicer como aplicativo padrão para abrir arquivos ." +"step" msgid "Maximum recent projects" msgstr "Máximo de projetos recentes" @@ -5937,8 +6537,11 @@ msgstr "Sem avisos ao carregar 3MF com códigos G modificados" msgid "Auto-Backup" msgstr "Backup Automático" -msgid "Backup your project periodically for restoring from the occasional crash." -msgstr "Faça backup do seu projeto periodicamente para restaurar de falhas ocasionais." +msgid "" +"Backup your project periodically for restoring from the occasional crash." +msgstr "" +"Faça backup do seu projeto periodicamente para restaurar de falhas " +"ocasionais." msgid "every" msgstr "cada" @@ -6160,7 +6763,8 @@ msgid "Jump to model publish web page" msgstr "Ir para a página web de publicação de modelos" msgid "Note: The preparation may takes several minutes. Please be patiant." -msgstr "Nota: A preparação pode levar vários minutos. Por favor, seja paciente." +msgstr "" +"Nota: A preparação pode levar vários minutos. Por favor, seja paciente." msgid "Publish" msgstr "Publicar" @@ -6337,49 +6941,90 @@ msgid "Synchronizing device information time out" msgstr "Tempo limite de sincronização das informações do dispositivo" msgid "Cannot send the print job when the printer is updating firmware" -msgstr "Não é possível enviar o trabalho de impressão quando a impressora está atualizando o firmware" +msgstr "" +"Não é possível enviar o trabalho de impressão quando a impressora está " +"atualizando o firmware" -msgid "The printer is executing instructions. Please restart printing after it ends" -msgstr "A impressora está executando instruções. Por favor, reinicie a impressão após terminar" +msgid "" +"The printer is executing instructions. Please restart printing after it ends" +msgstr "" +"A impressora está executando instruções. Por favor, reinicie a impressão " +"após terminar" msgid "The printer is busy on other print job" msgstr "A impressora está ocupada com outro trabalho de impressão" #, c-format, boost-format -msgid "Filament %s exceeds the number of AMS slots. Please update the printer firmware to support AMS slot assignment." -msgstr "O filamento %s excede o número de slots AMS. Por favor, atualize o firmware da impressora para suportar a atribuição de slots AMS." +msgid "" +"Filament %s exceeds the number of AMS slots. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" +"O filamento %s excede o número de slots AMS. Por favor, atualize o firmware " +"da impressora para suportar a atribuição de slots AMS." -msgid "Filament exceeds the number of AMS slots. Please update the printer firmware to support AMS slot assignment." -msgstr "O filamento excede o número de slots AMS. Por favor, atualize o firmware da impressora para suportar a atribuição de slots AMS." +msgid "" +"Filament exceeds the number of AMS slots. Please update the printer firmware " +"to support AMS slot assignment." +msgstr "" +"O filamento excede o número de slots AMS. Por favor, atualize o firmware da " +"impressora para suportar a atribuição de slots AMS." -msgid "Filaments to AMS slots mappings have been established. You can click a filament above to change its mapping AMS slot" -msgstr "Foram estabelecidos mapeamentos de filamentos para slots AMS. Você pode clicar em um filamento acima para mudar seu slot AMS mapeado" +msgid "" +"Filaments to AMS slots mappings have been established. You can click a " +"filament above to change its mapping AMS slot" +msgstr "" +"Foram estabelecidos mapeamentos de filamentos para slots AMS. Você pode " +"clicar em um filamento acima para mudar seu slot AMS mapeado" -msgid "Please click each filament above to specify its mapping AMS slot before sending the print job" -msgstr "Por favor, clique em cada filamento acima para especificar seu slot AMS mapeado antes de enviar o trabalho de impressão" +msgid "" +"Please click each filament above to specify its mapping AMS slot before " +"sending the print job" +msgstr "" +"Por favor, clique em cada filamento acima para especificar seu slot AMS " +"mapeado antes de enviar o trabalho de impressão" #, c-format, boost-format -msgid "Filament %s does not match the filament in AMS slot %s. Please update the printer firmware to support AMS slot assignment." -msgstr "O filamento %s não corresponde ao filamento no slot AMS %s. Por favor, atualize o firmware da impressora para suportar a atribuição de slots AMS." +msgid "" +"Filament %s does not match the filament in AMS slot %s. Please update the " +"printer firmware to support AMS slot assignment." +msgstr "" +"O filamento %s não corresponde ao filamento no slot AMS %s. Por favor, " +"atualize o firmware da impressora para suportar a atribuição de slots AMS." -msgid "Filament does not match the filament in AMS slot. Please update the printer firmware to support AMS slot assignment." -msgstr "O filamento não corresponde ao filamento no slot AMS. Por favor, atualize o firmware da impressora para suportar a atribuição de slots AMS." +msgid "" +"Filament does not match the filament in AMS slot. Please update the printer " +"firmware to support AMS slot assignment." +msgstr "" +"O filamento não corresponde ao filamento no slot AMS. Por favor, atualize o " +"firmware da impressora para suportar a atribuição de slots AMS." -msgid "The printer firmware only supports sequential mapping of filament => AMS slot." -msgstr "O firmware da impressora só suporta mapeamento sequencial de filamento => slot AMS." +msgid "" +"The printer firmware only supports sequential mapping of filament => AMS " +"slot." +msgstr "" +"O firmware da impressora só suporta mapeamento sequencial de filamento => " +"slot AMS." msgid "An SD card needs to be inserted before printing." msgstr "Um cartão SD precisa ser inserido antes de imprimir." #, c-format, boost-format -msgid "The selected printer (%s) is incompatible with the chosen printer profile in the slicer (%s)." -msgstr "A impressora selecionada (%s) é incompatível com o perfil escolhido de impressora no fatiador (%s)." +msgid "" +"The selected printer (%s) is incompatible with the chosen printer profile in " +"the slicer (%s)." +msgstr "" +"A impressora selecionada (%s) é incompatível com o perfil escolhido de " +"impressora no fatiador (%s)." msgid "An SD card needs to be inserted to record timelapse." msgstr "Um cartão SD precisa ser inserido para gravar o timelapse." -msgid "Cannot send the print job to a printer whose firmware is required to get updated." -msgstr "Não é possível enviar o trabalho de impressão para uma impressora cujo firmware precisa ser atualizado." +msgid "" +"Cannot send the print job to a printer whose firmware is required to get " +"updated." +msgstr "" +"Não é possível enviar o trabalho de impressão para uma impressora cujo " +"firmware precisa ser atualizado." msgid "Cannot send the print job for empty plate" msgstr "Não é possível enviar o trabalho de impressão para uma mesa vazia" @@ -6387,11 +7032,18 @@ msgstr "Não é possível enviar o trabalho de impressão para uma mesa vazia" msgid "This printer does not support printing all plates" msgstr "Esta impressora não suporta a impressão em todas as mesas" -msgid "When enable spiral vase mode, machines with I3 structure will not generate timelapse videos." -msgstr "Quando o modo vaso espiral está ativado, máquinas com estrutura I3 não irão gerar vídeos timelapse." +msgid "" +"When enable spiral vase mode, machines with I3 structure will not generate " +"timelapse videos." +msgstr "" +"Quando o modo vaso espiral está ativado, máquinas com estrutura I3 não irão " +"gerar vídeos timelapse." -msgid "Timelapse is not supported because Print sequence is set to \"By object\"." -msgstr "Timelapse não é suportado porque a sequência de impressão está configurada para \"Por objeto\"." +msgid "" +"Timelapse is not supported because Print sequence is set to \"By object\"." +msgstr "" +"Timelapse não é suportado porque a sequência de impressão está configurada " +"para \"Por objeto\"." msgid "Errors" msgstr "Erros" @@ -6399,11 +7051,23 @@ msgstr "Erros" msgid "Please check the following:" msgstr "Por favor, verifique o seguinte:" -msgid "The printer type selected when generating G-Code is not consistent with the currently selected printer. It is recommended that you use the same printer type for slicing." -msgstr "O tipo de impressora selecionado ao gerar o G-Code não está consistente com a impressora atualmente selecionada. É recomendado que você use o mesmo tipo de impressora para fatiar." +msgid "" +"The printer type selected when generating G-Code is not consistent with the " +"currently selected printer. It is recommended that you use the same printer " +"type for slicing." +msgstr "" +"O tipo de impressora selecionado ao gerar o G-Code não está consistente com " +"a impressora atualmente selecionada. É recomendado que você use o mesmo tipo " +"de impressora para fatiar." -msgid "There are some unknown filaments in the AMS mappings. Please check whether they are the required filaments. If they are okay, press \"Confirm\" to start printing." -msgstr "Há alguns filamentos desconhecidos nos mapeamentos AMS. Por favor, verifique se eles são os filamentos necessários. Se estiverem corretos, pressione \"Confirmar\" para iniciar a impressão." +msgid "" +"There are some unknown filaments in the AMS mappings. Please check whether " +"they are the required filaments. If they are okay, press \"Confirm\" to " +"start printing." +msgstr "" +"Há alguns filamentos desconhecidos nos mapeamentos AMS. Por favor, verifique " +"se eles são os filamentos necessários. Se estiverem corretos, pressione " +"\"Confirmar\" para iniciar a impressão." #, c-format, boost-format msgid "nozzle in preset: %s %s" @@ -6413,21 +7077,39 @@ msgstr "bico no perfil: %s %s" msgid "nozzle memorized: %.1f %s" msgstr "bico memorizado: %.1f %s" -msgid "Your nozzle diameter in sliced file is not consistent with memorized nozzle. If you changed your nozzle lately, please go to Device > Printer Parts to change settings." -msgstr "Seu diâmetro de bico no arquivo fatiado não é consistente com o bico memorizado. Se você mudou seu bico recentemente, vá para Dispositivo > Partes da impressora para alterar as configurações." +msgid "" +"Your nozzle diameter in sliced file is not consistent with memorized nozzle. " +"If you changed your nozzle lately, please go to Device > Printer Parts to " +"change settings." +msgstr "" +"Seu diâmetro de bico no arquivo fatiado não é consistente com o bico " +"memorizado. Se você mudou seu bico recentemente, vá para Dispositivo > " +"Partes da impressora para alterar as configurações." #, c-format, boost-format -msgid "Printing high temperature material(%s material) with %s may cause nozzle damage" -msgstr "Imprimir material de temperatura alta (material %s) com %s poderá causar danos ao bico" +msgid "" +"Printing high temperature material(%s material) with %s may cause nozzle " +"damage" +msgstr "" +"Imprimir material de temperatura alta (material %s) com %s poderá causar " +"danos ao bico" msgid "Please fix the error above, otherwise printing cannot continue." -msgstr "Por favor, corrija o erro acima, caso contrário a impressão não poderá continuar." +msgstr "" +"Por favor, corrija o erro acima, caso contrário a impressão não poderá " +"continuar." -msgid "Please click the confirm button if you still want to proceed with printing." -msgstr "Por favor, clique no botão de confirmação se ainda deseja prosseguir com a impressão." +msgid "" +"Please click the confirm button if you still want to proceed with printing." +msgstr "" +"Por favor, clique no botão de confirmação se ainda deseja prosseguir com a " +"impressão." -msgid "Connecting to the printer. Unable to cancel during the connection process." -msgstr "Conectando à impressora. Não é possível cancelar durante o processo de conexão." +msgid "" +"Connecting to the printer. Unable to cancel during the connection process." +msgstr "" +"Conectando à impressora. Não é possível cancelar durante o processo de " +"conexão." msgid "Preparing print job" msgstr "Preparando trabalho de impressão" @@ -6438,8 +7120,12 @@ msgstr "Dados de arquivo de impressão anormais. Por favor, fatie novamente" msgid "The name length exceeds the limit." msgstr "O comprimento do nome excede o limite." -msgid "Caution to use! Flow calibration on Textured PEI Plate may fail due to the scattered surface." -msgstr "Cuidado ao usar! A calibração de fluxo no PEI Texturizado pode falhar devido à superfície irregular." +msgid "" +"Caution to use! Flow calibration on Textured PEI Plate may fail due to the " +"scattered surface." +msgstr "" +"Cuidado ao usar! A calibração de fluxo no PEI Texturizado pode falhar devido " +"à superfície irregular." msgid "Automatic flow calibration using Micro Lidar" msgstr "Calibração automática de fluxo usando Micro Lidar" @@ -6447,17 +7133,26 @@ msgstr "Calibração automática de fluxo usando Micro Lidar" msgid "Modifying the device name" msgstr "Modificando o nome do dispositivo" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Enviar para o cartão SD da impressora" msgid "Cannot send the print task when the upgrade is in progress" -msgstr "Não é possível enviar a tarefa de impressão quando a atualização está em progresso" +msgstr "" +"Não é possível enviar a tarefa de impressão quando a atualização está em " +"progresso" msgid "The selected printer is incompatible with the chosen printer presets." -msgstr "A impressora selecionada é incompatível com os perfis de impressora escolhidos." +msgstr "" +"A impressora selecionada é incompatível com os perfis de impressora " +"escolhidos." msgid "An SD card needs to be inserted before send to printer SD card." -msgstr "Um cartão SD precisa ser inserido antes de enviar para o cartão SD da impressora." +msgstr "" +"Um cartão SD precisa ser inserido antes de enviar para o cartão SD da " +"impressora." msgid "The printer is required to be in the same LAN as Orca Slicer." msgstr "A impressora deve estar na mesma LAN do Orca Slicer." @@ -6498,6 +7193,26 @@ msgstr "Tempo esgotado ao receber o relatório de login" msgid "Unknown Failure" msgstr "Falha desconhecida" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Entrar na impressora" @@ -6513,8 +7228,19 @@ msgstr "Ler e aceitar" msgid "Terms and Conditions" msgstr "Termos e Condições" -msgid "Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab device, please read the termsand conditions.By clicking to agree to use your Bambu Lab device, you agree to abide by the Privacy Policyand Terms of Use(collectively, the \"Terms\"). If you do not comply with or agree to the Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." -msgstr "Obrigado por adquirir um dispositivo Bambu Lab. Antes de usar seu dispositivo Bambu Lab, leia os termos e condições. Ao clicar para concordar em usar seu dispositivo Bambu Lab, você concorda em cumprir a Política de Privacidade e os Termos de Uso (coletivamente, os \"Termos\"). Se você não concordar ou não cumprir com a Política de Privacidade da Bambu Lab, não use os equipamentos e serviços da Bambu Lab." +msgid "" +"Thank you for purchasing a Bambu Lab device.Before using your Bambu Lab " +"device, please read the termsand conditions.By clicking to agree to use your " +"Bambu Lab device, you agree to abide by the Privacy Policyand Terms of " +"Use(collectively, the \"Terms\"). If you do not comply with or agree to the " +"Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." +msgstr "" +"Obrigado por adquirir um dispositivo Bambu Lab. Antes de usar seu " +"dispositivo Bambu Lab, leia os termos e condições. Ao clicar para concordar " +"em usar seu dispositivo Bambu Lab, você concorda em cumprir a Política de " +"Privacidade e os Termos de Uso (coletivamente, os \"Termos\"). Se você não " +"concordar ou não cumprir com a Política de Privacidade da Bambu Lab, não use " +"os equipamentos e serviços da Bambu Lab." msgid "and" msgstr "e" @@ -6529,8 +7255,32 @@ msgid "Statement about User Experience Improvement Program" msgstr "Declaração sobre o Programa de Melhoria da Experiência do Usuário" #, c-format, boost-format -msgid "In the 3D Printing community, we learn from each other's successes and failures to adjust our own slicing parameters and settings. %s follows the same principle and uses machine learning to improve its performance from the successes and failures of the vast number of prints by our users. We are training %s to be smarter by feeding them the real-world data. If you are willing, this service will access information from your error logs and usage logs, which may include information described in Privacy Policy. We will not collect any Personal Data by which an individual can be identified directly or indirectly, including without limitation names, addresses, payment information, or phone numbers. By enabling this service, you agree to these terms and the statement about Privacy Policy." -msgstr "Na comunidade de Impressão 3D, aprendemos com os sucessos e falhas uns dos outros para ajustar nossos próprios parâmetros de fatiamento e configurações. %s segue o mesmo princípio e utiliza aprendizado de máquina para melhorar seu desempenho a partir dos sucessos e falhas do grande número de impressões feitas por nossos usuários. Estamos treinando %s para ser mais inteligente alimentando-os com dados do mundo real. Se você concordar, este serviço acessará informações de seus registros de erros e registros de uso, que podem incluir informações descritas na Política de Privacidade. Não coletaremos quaisquer Dados Pessoais pelos quais um indivíduo possa ser identificado diretamente ou indiretamente, incluindo, sem limitação, nomes, endereços, informações de pagamento ou números de telefone. Ao ativar este serviço, você concorda com estes termos e com a declaração sobre a Política de Privacidade." +msgid "" +"In the 3D Printing community, we learn from each other's successes and " +"failures to adjust our own slicing parameters and settings. %s follows the " +"same principle and uses machine learning to improve its performance from the " +"successes and failures of the vast number of prints by our users. We are " +"training %s to be smarter by feeding them the real-world data. If you are " +"willing, this service will access information from your error logs and usage " +"logs, which may include information described in Privacy Policy. We will " +"not collect any Personal Data by which an individual can be identified " +"directly or indirectly, including without limitation names, addresses, " +"payment information, or phone numbers. By enabling this service, you agree " +"to these terms and the statement about Privacy Policy." +msgstr "" +"Na comunidade de Impressão 3D, aprendemos com os sucessos e falhas uns dos " +"outros para ajustar nossos próprios parâmetros de fatiamento e " +"configurações. %s segue o mesmo princípio e utiliza aprendizado de máquina " +"para melhorar seu desempenho a partir dos sucessos e falhas do grande número " +"de impressões feitas por nossos usuários. Estamos treinando %s para ser mais " +"inteligente alimentando-os com dados do mundo real. Se você concordar, este " +"serviço acessará informações de seus registros de erros e registros de uso, " +"que podem incluir informações descritas na Política de Privacidade. Não " +"coletaremos quaisquer Dados Pessoais pelos quais um indivíduo possa ser " +"identificado diretamente ou indiretamente, incluindo, sem limitação, nomes, " +"endereços, informações de pagamento ou números de telefone. Ao ativar este " +"serviço, você concorda com estes termos e com a declaração sobre a Política " +"de Privacidade." msgid "Statement on User Experience Improvement Plan" msgstr "Declaração sobre o Plano de Melhoria da Experiência do Usuário" @@ -6548,7 +7298,8 @@ msgid "Please log in first." msgstr "Por favor, faça login primeiro." msgid "There was a problem connecting to the printer. Please try again." -msgstr "Houve um problema ao conectar-se à impressora. Por favor, tente novamente." +msgstr "" +"Houve um problema ao conectar-se à impressora. Por favor, tente novamente." msgid "Failed to log out." msgstr "Falha ao desconectar." @@ -6565,23 +7316,36 @@ msgid "Search in preset" msgstr "Pesquisar nos predefinidos" msgid "Click to reset all settings to the last saved preset." -msgstr "Clique para redefinir todas as configurações para o último predefinido salvo." +msgstr "" +"Clique para redefinir todas as configurações para o último predefinido salvo." -msgid "Prime tower is required for smooth timeplase. There may be flaws on the model without prime tower. Are you sure you want to disable prime tower?" -msgstr "A torre de purga é necessária para um timelapse suave. Pode haver falhas no modelo sem a torre de purga. Tem certeza de que deseja desativar a torre de purga?" +msgid "" +"Prime tower is required for smooth timeplase. There may be flaws on the " +"model without prime tower. Are you sure you want to disable prime tower?" +msgstr "" +"A torre de purga é necessária para um timelapse suave. Pode haver falhas no " +"modelo sem a torre de purga. Tem certeza de que deseja desativar a torre de " +"purga?" -msgid "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 "A torre de purga é necessária para um timelapse suave. Pode haver falhas no modelo sem a torre de purga. Deseja ativar a torre de purga?" +msgid "" +"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 "" +"A torre de purga é necessária para um timelapse suave. Pode haver falhas no " +"modelo sem a torre de purga. Deseja ativar a torre de purga?" msgid "Still print by object?" msgstr "Ainda imprimir por objeto?" msgid "" -"We have added an experimental style \"Tree Slim\" that features smaller support volume but weaker strength.\n" +"We have added an experimental style \"Tree Slim\" that features smaller " +"support volume but weaker strength.\n" "We recommend using it with: 0 interface layers, 0 top distance, 2 walls." msgstr "" -"Adicionamos um estilo experimental \"Tree Slim\" que apresenta um volume de suporte menor, mas uma resistência mais fraca.\n" -"Recomendamos usar com: 0 camadas de interface, 0 distância superior, 2 paredes." +"Adicionamos um estilo experimental \"Tree Slim\" que apresenta um volume de " +"suporte menor, mas uma resistência mais fraca.\n" +"Recomendamos usar com: 0 camadas de interface, 0 distância superior, 2 " +"paredes." msgid "" "Change these settings automatically? \n" @@ -6592,18 +7356,35 @@ msgstr "" "Sim - Alterar essas configurações automaticamente\n" "Não - Não alterar essas configurações para mim" -msgid "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following settings: at least 2 interface layers, at least 0.1mm top z distance or using support materials on interface." -msgstr "Para os estilos \"Tree Strong\" e \"Tree Hybrid\", recomendamos as seguintes configurações: pelo menos 2 camadas de interface, pelo menos 0.1mm de distância superior em z ou uso de materiais de suporte na interface." +msgid "" +"For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " +"settings: at least 2 interface layers, at least 0.1mm top z distance or " +"using support materials on interface." +msgstr "" +"Para os estilos \"Tree Strong\" e \"Tree Hybrid\", recomendamos as seguintes " +"configurações: pelo menos 2 camadas de interface, pelo menos 0.1mm de " +"distância superior em z ou uso de materiais de suporte na interface." msgid "" -"When using support material for the support interface, We recommend the following settings:\n" -"0 top z distance, 0 interface spacing, concentric pattern and disable independent support layer height" +"When using support material for the support interface, We recommend the " +"following settings:\n" +"0 top z distance, 0 interface spacing, concentric pattern and disable " +"independent support layer height" msgstr "" -"Ao usar material de suporte para a interface de suporte, recomendamos as seguintes configurações:\n" -"distância z superior 0, espaçamento de interface 0, padrão concêntrico e desabilitar altura de camada de suporte independente" +"Ao usar material de suporte para a interface de suporte, recomendamos as " +"seguintes configurações:\n" +"distância z superior 0, espaçamento de interface 0, padrão concêntrico e " +"desabilitar altura de camada de suporte independente" -msgid "Enabling this option will modify the model's shape. If your print requires precise dimensions or is part of an assembly, it's important to double-check whether this change in geometry impacts the functionality of your print." -msgstr "Habilitar esta opção modificará a forma do modelo. Se sua impressão exigir dimensões precisas ou fizer parte de uma montagem, é importante verificar duplamente se essa mudança na geometria afeta a funcionalidade da sua impressão." +msgid "" +"Enabling this option will modify the model's shape. If your print requires " +"precise dimensions or is part of an assembly, it's important to double-check " +"whether this change in geometry impacts the functionality of your print." +msgstr "" +"Habilitar esta opção modificará a forma do modelo. Se sua impressão exigir " +"dimensões precisas ou fizer parte de uma montagem, é importante verificar " +"duplamente se essa mudança na geometria afeta a funcionalidade da sua " +"impressão." msgid "Are you sure you want to enable this option?" msgstr "Tem certeza de que deseja habilitar esta opção?" @@ -6617,8 +7398,13 @@ msgstr "" "A altura da camada é muito pequena.\n" "Ela será definida como altura mínima da camada\n" -msgid "Layer height exceeds the limit in Printer Settings -> Extruder -> Layer height limits ,this may cause printing quality issues." -msgstr "A altura da camada excede o limite em Configurações da Impressora -> Extrusora -> Limites de altura da camada, isso pode causar problemas de qualidade de impressão." +msgid "" +"Layer height exceeds the limit in Printer Settings -> Extruder -> Layer " +"height limits ,this may cause printing quality issues." +msgstr "" +"A altura da camada excede o limite em Configurações da Impressora -> " +"Extrusora -> Limites de altura da camada, isso pode causar problemas de " +"qualidade de impressão." msgid "Adjust to the set range automatically? \n" msgstr "Ajustar automaticamente à faixa definida? \n" @@ -6629,18 +7415,39 @@ msgstr "Ajustar" msgid "Ignore" msgstr "Ignorar" -msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush.Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." -msgstr "Recurso experimental: Retrair e cortar o filamento a uma distância maior durante mudanças de filamento para minimizar a descarga. Embora possa reduzir notavelmente a descarga, ele também pode elevar o risco de bolhas no bico ou outras complicações de impressão." - -msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush.Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications.Please use with the latest printer firmware." -msgstr "Recurso experimental: Retrair e cortar o filamento a uma distância maior durante mudanças de filamento para minimizar a descarga. Embora possa reduzir notavelmente a descarga, ele também pode elevar o risco de bolhas no bico ou outras complicações de impressão. Por favor, use com o firmware mais recente da impressora." +msgid "" +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other " +"printing complications." +msgstr "" +"Recurso experimental: Retrair e cortar o filamento a uma distância maior " +"durante mudanças de filamento para minimizar a descarga. Embora possa " +"reduzir notavelmente a descarga, ele também pode elevar o risco de bolhas no " +"bico ou outras complicações de impressão." msgid "" -"When recording timelapse without toolhead, it is recommended to add a \"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive\"->\"Timelapse Wipe Tower\"." +"Experimental feature: Retracting and cutting off the filament at a greater " +"distance during filament changes to minimize flush.Although it can notably " +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications.Please use with the latest printer firmware." msgstr "" -"Ao gravar um timelapse sem aparecer a hotend, é recomendável adicionar uma \"Torre de Limpeza de Timelapse\" \n" -"clique com o botão direito na posição vazia da mesa e escolha \"Adicionar Primitivo\"->\"Torre de Limpeza de Timelapse\"." +"Recurso experimental: Retrair e cortar o filamento a uma distância maior " +"durante mudanças de filamento para minimizar a descarga. Embora possa " +"reduzir notavelmente a descarga, ele também pode elevar o risco de bolhas no " +"bico ou outras complicações de impressão. Por favor, use com o firmware mais " +"recente da impressora." + +msgid "" +"When recording timelapse without toolhead, it is recommended to add a " +"\"Timelapse Wipe Tower\" \n" +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." +msgstr "" +"Ao gravar um timelapse sem aparecer a hotend, é recomendável adicionar uma " +"\"Torre de Limpeza de Timelapse\" \n" +"clique com o botão direito na posição vazia da mesa e escolha \"Adicionar " +"Primitivo\"->\"Torre de Limpeza de Timelapse\"." msgid "Line width" msgstr "Largura da linha" @@ -6678,8 +7485,15 @@ msgstr "Velocidade de outras camadas" msgid "Overhang speed" msgstr "Velocidade em overhangs" -msgid "This is the speed for various overhang degrees. Overhang degrees are expressed as a percentage of line width. 0 speed means no slowing down for the overhang degree range and wall speed is used" -msgstr "Esta é a velocidade para vários graus de avanço. Os graus de avanço são expressos como uma porcentagem da largura da linha. A velocidade 0 significa que não há desaceleração para o intervalo de graus de avanço e a velocidade do perímetro é usada" +msgid "" +"This is the speed for various overhang degrees. Overhang degrees are " +"expressed as a percentage of line width. 0 speed means no slowing down for " +"the overhang degree range and wall speed is used" +msgstr "" +"Esta é a velocidade para vários graus de avanço. Os graus de avanço são " +"expressos como uma porcentagem da largura da linha. A velocidade 0 significa " +"que não há desaceleração para o intervalo de graus de avanço e a velocidade " +"do perímetro é usada" msgid "Bridge" msgstr "Ponte" @@ -6726,16 +7540,20 @@ msgstr "Frequente" #, c-format, boost-format msgid "" "Following line %s contains reserved keywords.\n" -"Please remove it, or will beat G-code visualization and printing time estimation." +"Please remove it, or will beat G-code visualization and printing time " +"estimation." msgid_plural "" "Following lines %s contain reserved keywords.\n" -"Please remove them, or will beat G-code visualization and printing time estimation." +"Please remove them, or will beat G-code visualization and printing time " +"estimation." msgstr[0] "" "A linha %s seguinte contém palavras-chave reservadas.\n" -"Por favor, remova-a, ou afetará a visualização do código G e a estimativa de tempo de impressão." +"Por favor, remova-a, ou afetará a visualização do código G e a estimativa de " +"tempo de impressão." msgstr[1] "" "As linhas %s seguintes contêm palavras-chave reservadas.\n" -"Por favor, remova-as, ou afetará a visualização do código G e a estimativa de tempo de impressão." +"Por favor, remova-as, ou afetará a visualização do código G e a estimativa " +"de tempo de impressão." msgid "Reserved keywords found" msgstr "Palavras-chave reservadas encontradas" @@ -6753,7 +7571,8 @@ msgid "Recommended nozzle temperature" msgstr "Temperatura recomendada do bico" msgid "Recommended nozzle temperature range of this filament. 0 means no set" -msgstr "Faixa de temperatura recomendada para esta boquilha. 0 significa não definido" +msgstr "" +"Faixa de temperatura recomendada para esta boquilha. 0 significa não definido" msgid "Print chamber temperature" msgstr "Temperatura da câmara de impressão" @@ -6770,26 +7589,44 @@ msgstr "Temperatura do bico ao imprimir" msgid "Cool plate" msgstr "Cool plate (Mesa fria)" -msgid "Bed temperature when cool plate is installed. Value 0 means the filament does not support to print on the Cool Plate" -msgstr "Temperatura da mesa quando a cool plate (mesa fria) está instalada. Valor 0 significa que o filamento não suporta impressão na cool plate" +msgid "" +"Bed temperature when cool plate is installed. Value 0 means the filament " +"does not support to print on the Cool Plate" +msgstr "" +"Temperatura da mesa quando a cool plate (mesa fria) está instalada. Valor 0 " +"significa que o filamento não suporta impressão na cool plate" msgid "Engineering plate" msgstr "Mesa de engenharia" -msgid "Bed temperature when engineering plate is installed. Value 0 means the filament does not support to print on the Engineering Plate" -msgstr "Temperatura da mesa quando a mesa de engenharia está instalada. Valor 0 significa que o filamento não suporta impressão na Mesa de Engenharia" +msgid "" +"Bed temperature when engineering plate is installed. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"Temperatura da mesa quando a mesa de engenharia está instalada. Valor 0 " +"significa que o filamento não suporta impressão na Mesa de Engenharia" msgid "Smooth PEI Plate / High Temp Plate" msgstr "Mesa PEI lisa / Mesa de alta temperatura" -msgid "Bed temperature when Smooth PEI Plate/High temperature plate is installed. Value 0 means the filament does not support to print on the Smooth PEI Plate/High Temp Plate" -msgstr "Temperatura da mesa quando a mesa PEI lisa/ de alta temperatura está instalada. O valor 0 significa que o filamento não suporta a impressão na Mesa PEI lisa/Mesa de Alta Temperatura" +msgid "" +"Bed temperature when Smooth PEI Plate/High temperature plate is installed. " +"Value 0 means the filament does not support to print on the Smooth PEI Plate/" +"High Temp Plate" +msgstr "" +"Temperatura da mesa quando a mesa PEI lisa/ de alta temperatura está " +"instalada. O valor 0 significa que o filamento não suporta a impressão na " +"Mesa PEI lisa/Mesa de Alta Temperatura" msgid "Textured PEI Plate" msgstr "Mesa PEI Texturizada" -msgid "Bed temperature when Textured PEI Plate is installed. Value 0 means the filament does not support to print on the Textured PEI Plate" -msgstr "Temperatura da mesa quando a mesa PEI texturizada está instalada. O valor 0 significa que o filamento não suporta impressão na mesa PEI texturizada" +msgid "" +"Bed temperature when Textured PEI Plate is installed. Value 0 means the " +"filament does not support to print on the Textured PEI Plate" +msgstr "" +"Temperatura da mesa quando a mesa PEI texturizada está instalada. O valor 0 " +"significa que o filamento não suporta impressão na mesa PEI texturizada" msgid "Volumetric speed limitation" msgstr "Limitação de fluxo volumétrico" @@ -6806,14 +7643,27 @@ msgstr "Ventilador de resfriamento da peça" msgid "Min fan speed threshold" msgstr "Limiar de velocidade mínima do ventilador" -msgid "Part cooling fan speed will start to run at min speed when the estimated layer time is no longer than the layer time in setting. When layer time is shorter than threshold, fan speed is interpolated between the minimum and maximum fan speed according to layer printing time" -msgstr "A velocidade do ventilador de resfriamento da peça começará a funcionar na velocidade mínima quando o tempo estimado da camada não for mais longo do que o tempo da camada ajustado. Quando o tempo da camada for menor que o limite, a velocidade do ventilador é interpolada entre a velocidade mínima e máxima de acordo com o tempo de impressão da camada" +msgid "" +"Part cooling fan speed will start to run at min speed when the estimated " +"layer time is no longer than the layer time in setting. When layer time is " +"shorter than threshold, fan speed is interpolated between the minimum and " +"maximum fan speed according to layer printing time" +msgstr "" +"A velocidade do ventilador de resfriamento da peça começará a funcionar na " +"velocidade mínima quando o tempo estimado da camada não for mais longo do " +"que o tempo da camada ajustado. Quando o tempo da camada for menor que o " +"limite, a velocidade do ventilador é interpolada entre a velocidade mínima e " +"máxima de acordo com o tempo de impressão da camada" msgid "Max fan speed threshold" msgstr "Limiar de velocidade máxima do ventilador" -msgid "Part cooling fan speed will be max when the estimated layer time is shorter than the setting value" -msgstr "A velocidade do ventilador de resfriamento da peça será máxima quando o tempo estimado da camada for menor que o valor ajustado" +msgid "" +"Part cooling fan speed will be max when the estimated layer time is shorter " +"than the setting value" +msgstr "" +"A velocidade do ventilador de resfriamento da peça será máxima quando o " +"tempo estimado da camada for menor que o valor ajustado" msgid "Auxiliary part cooling fan" msgstr "Ventilador auxiliar de resfriamento da peça" @@ -6840,13 +7690,15 @@ msgid "Wipe tower parameters" msgstr "Parâmetros da torre de limpeza" msgid "Toolchange parameters with single extruder MM printers" -msgstr "Parâmetros de troca de ferramentas com impressoras MM de extrusora única" +msgstr "" +"Parâmetros de troca de ferramentas com impressoras MM de extrusora única" msgid "Ramming settings" msgstr "Configurações de empurrar" msgid "Toolchange parameters with multi extruder MM printers" -msgstr "Parâmetros de troca de ferramentas com impressoras MM de múltiplas extrusoras" +msgstr "" +"Parâmetros de troca de ferramentas com impressoras MM de múltiplas extrusoras" msgid "Printable space" msgstr "Espaço de impressão" @@ -6937,7 +7789,8 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" -"A opção de Limpeza não está disponível ao usar o modo de Retração de Firmware.\n" +"A opção de Limpeza não está disponível ao usar o modo de Retração de " +"Firmware.\n" "\n" "Deseja desativá-lo para habilitar a Retração de Firmware?" @@ -6948,8 +7801,12 @@ msgid "Detached" msgstr "Desanexado" #, c-format, boost-format -msgid "%d Filament Preset and %d Process Preset is attached to this printer. Those presets would be deleted if the printer is deleted." -msgstr "%d Preset de Filamento e %d Preset de Processo estão vinculados a esta impressora. Esses presets serão excluídos se a impressora for deletada." +msgid "" +"%d Filament Preset and %d Process Preset is attached to this printer. Those " +"presets would be deleted if the printer is deleted." +msgstr "" +"%d Preset de Filamento e %d Preset de Processo estão vinculados a esta " +"impressora. Esses presets serão excluídos se a impressora for deletada." msgid "Presets inherited by other presets can not be deleted!" msgstr "Os perfis herdados por outros perfis não podem ser excluídos!" @@ -6971,10 +7828,12 @@ msgstr[1] "Os seguintes perfis também serão excluídos." msgid "" "Are you sure to delete the selected preset? \n" -"If the preset corresponds to a filament currently in use on your printer, please reset the filament information for that slot." +"If the preset corresponds to a filament currently in use on your printer, " +"please reset the filament information for that slot." msgstr "" "Tem certeza de que deseja excluir o perfil selecionado? \n" -"Se o perfil corresponde a um filamento atualmente em uso em sua impressora, redefina as informações do filamento para esse slot." +"Se o perfil corresponde a um filamento atualmente em uso em sua impressora, " +"redefina as informações do filamento para esse slot." #, boost-format msgid "Are you sure to %1% the selected preset?" @@ -6990,7 +7849,8 @@ msgid "Click to reset current value and attach to the global value." msgstr "Clique para redefinir o valor atual e anexá-lo ao valor global." msgid "Click to drop current modify and reset to saved value." -msgstr "Clique para descartar a modificação atual e redefinir para o valor salvo." +msgstr "" +"Clique para descartar a modificação atual e redefinir para o valor salvo." msgid "Process Settings" msgstr "Configurações do Processo" @@ -7001,26 +7861,23 @@ msgstr "Indefinido" msgid "Unsaved Changes" msgstr "Alterações não salvas" -msgid "Actions For Unsaved Changes" -msgstr "Ações para Alterações Não Salvas" +msgid "Transfer or discard changes" +msgstr "" -msgid "Preset Value" -msgstr "Valor Predefinido" +msgid "Old Value" +msgstr "" -msgid "Modified Value" -msgstr "Valor Modificado" +msgid "New Value" +msgstr "" -msgid "Transfer Modified Value" -msgstr "Transferir Valor Modificado" +msgid "Transfer" +msgstr "Transferir" msgid "Don't save" msgstr "Não salvar" -msgid "Use Preset Value" -msgstr "Usar Valor Predefinido" - -msgid "Save Modified Value" -msgstr "Salvar Valor Modificado" +msgid "Discard" +msgstr "" msgid "Click the right mouse button to display the full text." msgstr "Clique com o botão direito do mouse para exibir o texto completo." @@ -7061,12 +7918,20 @@ msgid "Preset \"%1%\" contains the following unsaved changes:" msgstr "O perfil \"%1%\" contém as seguintes alterações não salvas:" #, boost-format -msgid "Preset \"%1%\" is not compatible with the new printer profile and it contains the following unsaved changes:" -msgstr "O perfil \"%1%\" não é compatível com o novo perfil da impressora e contém as seguintes alterações não salvas:" +msgid "" +"Preset \"%1%\" is not compatible with the new printer profile and it " +"contains the following unsaved changes:" +msgstr "" +"O perfil \"%1%\" não é compatível com o novo perfil da impressora e contém " +"as seguintes alterações não salvas:" #, boost-format -msgid "Preset \"%1%\" is not compatible with the new process profile and it contains the following unsaved changes:" -msgstr "O perfil \"%1%\" não é compatível com o novo perfil de processo e contém as seguintes alterações não salvas:" +msgid "" +"Preset \"%1%\" is not compatible with the new process profile and it " +"contains the following unsaved changes:" +msgstr "" +"O perfil \"%1%\" não é compatível com o novo perfil de processo e contém as " +"seguintes alterações não salvas:" #, boost-format msgid "You have changed some settings of preset \"%1%\". " @@ -7074,34 +7939,23 @@ msgstr "Você alterou algumas configurações do preset \"%1%\". " msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" -"\n" -"Você gostaria de salvar estas configurações alteradas (valor modificado)?" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -"\n" -"Você gostaria de manter estas configurações alteradas (valores modificados) após mudar o preset?" -msgid "You have previously modified your settings and are about to overwrite them with new ones." -msgstr "Você modificou suas configurações anteriormente e está prestes a substituí-las por novas." +msgid "You have previously modified your settings." +msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" -"\n" -"Você quer manter suas configurações atuais modificadas ou usar as configurações predefinidas?" - -msgid "" -"\n" -"Do you want to save your current modified settings?" -msgstr "" -"\n" -"Você quer salvar suas configurações atuais modificadas?" msgid "Extruders count" msgstr "Número de extrusoras" @@ -7118,24 +7972,29 @@ msgstr "Mostrar todos os perfis (incluindo os incompatíveis)" msgid "Select presets to compare" msgstr "Selecione os perfis para comparar" -msgid "Transfer" -msgstr "Transferir" - -msgid "You can only transfer to current active profile because it has been modified." -msgstr "Só é possível transferir para o perfil ativo atual porque ele foi modificado." +msgid "" +"You can only transfer to current active profile because it has been modified." +msgstr "" +"Só é possível transferir para o perfil ativo atual porque ele foi modificado." msgid "" "Transfer the selected options from left preset to the right.\n" -"Note: New modified presets will be selected in settings tabs after close this dialog." +"Note: New modified presets will be selected in settings tabs after close " +"this dialog." msgstr "" "Transfira as opções selecionadas do perfil à esquerda para o da direita.\n" -"Nota: Novos perfis modificados serão selecionados nas guias de configurações após fechar este diálogo." +"Nota: Novos perfis modificados serão selecionados nas guias de configurações " +"após fechar este diálogo." msgid "Transfer values from left to right" msgstr "Transferir valores da esquerda para a direita" -msgid "If enabled, this dialog can be used for transfer selected values from left to right preset." -msgstr "Se ativo, este diálogo pode ser usado para transferir valores selecionados do perfil à esquerda para o da direita." +msgid "" +"If enabled, this dialog can be used for transfer selected values from left " +"to right preset." +msgstr "" +"Se ativo, este diálogo pode ser usado para transferir valores selecionados " +"do perfil à esquerda para o da direita." msgid "Add File" msgstr "Adicionar arquivo" @@ -7196,7 +8055,8 @@ msgid "" "%s will update the configuration package, Otherwise it won't be able to start" msgstr "" "O pacote de configuração é incompatível com a aplicação atual.\n" -"%s atualizará o pacote de configuração, caso contrário, não será possível iniciar" +"%s atualizará o pacote de configuração, caso contrário, não será possível " +"iniciar" #, c-format, boost-format msgid "Exit %s" @@ -7218,13 +8078,27 @@ msgid "Ramming customization" msgstr "Customização de ramming" msgid "" -"Ramming denotes the rapid extrusion just before a tool change in a single-extruder MM printer. Its purpose is to properly shape the end of the unloaded filament so it does not prevent insertion of the new filament and can itself be reinserted later. This phase is important and different materials can require different extrusion speeds to get the good shape. For this reason, the extrusion rates during ramming are adjustable.\n" +"Ramming denotes the rapid extrusion just before a tool change in a single-" +"extruder MM printer. Its purpose is to properly shape the end of the " +"unloaded filament so it does not prevent insertion of the new filament and " +"can itself be reinserted later. This phase is important and different " +"materials can require different extrusion speeds to get the good shape. For " +"this reason, the extrusion rates during ramming are adjustable.\n" "\n" -"This is an expert-level setting, incorrect adjustment will likely lead to jams, extruder wheel grinding into filament etc." +"This is an expert-level setting, incorrect adjustment will likely lead to " +"jams, extruder wheel grinding into filament etc." msgstr "" -"O moldeamento de extremidade denota a extrusão rápida logo antes de uma troca de ferramentas em uma impressora MM de extrusão única. Seu propósito é dar forma adequadamente à extremidade do filamento descarregado para que não impeça a inserção do novo filamento e possa ser reinserido posteriormente. Essa fase é importante e diferentes materiais podem exigir velocidades de extrusão diferentes para obter uma boa forma. Por esse motivo, as taxas de extrusão durante o moldeamento de extremidade são ajustáveis.\n" +"O moldeamento de extremidade denota a extrusão rápida logo antes de uma " +"troca de ferramentas em uma impressora MM de extrusão única. Seu propósito é " +"dar forma adequadamente à extremidade do filamento descarregado para que não " +"impeça a inserção do novo filamento e possa ser reinserido posteriormente. " +"Essa fase é importante e diferentes materiais podem exigir velocidades de " +"extrusão diferentes para obter uma boa forma. Por esse motivo, as taxas de " +"extrusão durante o moldeamento de extremidade são ajustáveis.\n" "\n" -"Esta é uma configuração de nível especialista, ajustes incorretos provavelmente resultarão em travamentos, moagem da roda de extrusão no filamento, etc." +"Esta é uma configuração de nível especialista, ajustes incorretos " +"provavelmente resultarão em travamentos, moagem da roda de extrusão no " +"filamento, etc." msgid "Total ramming time" msgstr "Tempo total de moldeamento de extremidade" @@ -7250,8 +8124,13 @@ msgstr "Recalcular" msgid "Flushing volumes for filament change" msgstr "Volumes de limpeza para troca de filamento" -msgid "Orca would re-calculate your flushing volumes everytime the filaments color changed. You could disable the auto-calculate in Orca Slicer > Preferences" -msgstr "O Orca recalculará seus volumes de limpeza toda vez que a cor dos filamentos for alterada. Você pode desativar o cálculo automático em Orca Slicer > Preferências" +msgid "" +"Orca would re-calculate your flushing volumes everytime the filaments color " +"changed. You could disable the auto-calculate in Orca Slicer > Preferences" +msgstr "" +"O Orca recalculará seus volumes de limpeza toda vez que a cor dos filamentos " +"for alterada. Você pode desativar o cálculo automático em Orca Slicer > " +"Preferências" msgid "Flushing volume (mm³) for each filament pair." msgstr "Volume de limpeza (mm³) para cada par de filamentos." @@ -7345,8 +8224,14 @@ msgstr "Shift+A" msgid "Shift+R" msgstr "Shift+R" -msgid "Auto orientates selected objects or all objects.If there are selected objects, it just orientates the selected ones.Otherwise, it will orientates all objects in the current disk." -msgstr "Orienta automaticamente os objetos selecionados ou todos os objetos. Se houver objetos selecionados, ele apenas orientará os selecionados. Caso contrário, orientará todos os objetos no disco atual." +msgid "" +"Auto orientates selected objects or all objects.If there are selected " +"objects, it just orientates the selected ones.Otherwise, it will orientates " +"all objects in the current disk." +msgstr "" +"Orienta automaticamente os objetos selecionados ou todos os objetos. Se " +"houver objetos selecionados, ele apenas orientará os selecionados. Caso " +"contrário, orientará todos os objetos no disco atual." msgid "Shift+Tab" msgstr "Shift+Tab" @@ -7556,8 +8441,11 @@ msgstr "informações de atualização da versão %s:" msgid "Network plug-in update" msgstr "Atualização do plug-in de rede" -msgid "Click OK to update the Network plug-in when Orca Slicer launches next time." -msgstr "Clique em OK para atualizar o plug-in de rede quando o Orca Slicer for iniciado novamente." +msgid "" +"Click OK to update the Network plug-in when Orca Slicer launches next time." +msgstr "" +"Clique em OK para atualizar o plug-in de rede quando o Orca Slicer for " +"iniciado novamente." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" @@ -7575,17 +8463,57 @@ msgstr "Concluído" msgid "resume" msgstr "retomar" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Carregar Filamento" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Confirmar e Atualizar Bico" msgid "LAN Connection Failed (Sending print file)" msgstr "Falha na conexão LAN (enviando arquivo de impressão)" -msgid "Step 1, please confirm Orca Slicer and your printer are in the same LAN." -msgstr "Passo 1, por favor, confirme se o Orca Slicer e sua impressora estão na mesma LAN." +msgid "" +"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +msgstr "" +"Passo 1, por favor, confirme se o Orca Slicer e sua impressora estão na " +"mesma LAN." -msgid "Step 2, if the IP and Access Code below are different from the actual values on your printer, please correct them." -msgstr "Passo 2, se o IP e o Código de Acesso abaixo forem diferentes dos valores reais na sua impressora, corrija-os." +msgid "" +"Step 2, if the IP and Access Code below are different from the actual values " +"on your printer, please correct them." +msgstr "" +"Passo 2, se o IP e o Código de Acesso abaixo forem diferentes dos valores " +"reais na sua impressora, corrija-os." msgid "IP" msgstr "PI" @@ -7597,7 +8525,8 @@ msgid "Where to find your printer's IP and Access Code?" msgstr "Onde encontrar o IP e o Código de Acesso da sua impressora?" msgid "Step 3: Ping the IP address to check for packet loss and latency." -msgstr "Passo 3: Pingue o endereço IP para verificar a perda de pacotes e a latência." +msgstr "" +"Passo 3: Pingue o endereço IP para verificar a perda de pacotes e a latência." msgid "Test" msgstr "Testar" @@ -7648,14 +8577,30 @@ msgstr "Falha na atualização" msgid "Updating successful" msgstr "Atualização bem-sucedida" -msgid "Are you sure you want to update? This will take about 10 minutes. Do not turn off the power while the printer is updating." -msgstr "Tem certeza de que deseja atualizar? Isso levará cerca de 10 minutos. Não desligue a energia enquanto a impressora estiver atualizando." +msgid "" +"Are you sure you want to update? This will take about 10 minutes. Do not " +"turn off the power while the printer is updating." +msgstr "" +"Tem certeza de que deseja atualizar? Isso levará cerca de 10 minutos. Não " +"desligue a energia enquanto a impressora estiver atualizando." -msgid "An important update was detected and needs to be run before printing can continue. Do you want to update now? You can also update later from 'Upgrade firmware'." -msgstr "Uma atualização importante foi detectada e precisa ser executada antes que a impressão possa continuar. Deseja atualizar agora? Você também pode atualizar posteriormente em 'Atualizar firmware'." +msgid "" +"An important update was detected and needs to be run before printing can " +"continue. Do you want to update now? You can also update later from 'Upgrade " +"firmware'." +msgstr "" +"Uma atualização importante foi detectada e precisa ser executada antes que a " +"impressão possa continuar. Deseja atualizar agora? Você também pode " +"atualizar posteriormente em 'Atualizar firmware'." -msgid "The firmware version is abnormal. Repairing and updating are required before printing. Do you want to update now? You can also update later on printer or update next time starting the studio." -msgstr "A versão do firmware está anormal. É necessário reparar e atualizar antes de imprimir. Deseja atualizar agora? Você também pode atualizar mais tarde na impressora ou na próxima vez que iniciar o estúdio." +msgid "" +"The firmware version is abnormal. Repairing and updating are required before " +"printing. Do you want to update now? You can also update later on printer or " +"update next time starting the studio." +msgstr "" +"A versão do firmware está anormal. É necessário reparar e atualizar antes de " +"imprimir. Deseja atualizar agora? Você também pode atualizar mais tarde na " +"impressora ou na próxima vez que iniciar o estúdio." msgid "Extension Board" msgstr "Mesa de Extensão" @@ -7713,7 +8658,9 @@ msgid "Copying of file %1% to %2% failed: %3%" msgstr "Falha ao copiar o arquivo %1% para %2%: %3%" msgid "Need to check the unsaved changes before configuration updates." -msgstr "É necessário verificar as alterações não salvas antes das atualizações de configuração." +msgstr "" +"É necessário verificar as alterações não salvas antes das atualizações de " +"configuração." msgid "Configuration package: " msgstr "Pacote de configuração: " @@ -7724,19 +8671,28 @@ msgstr " atualizado para " msgid "Open G-code file:" msgstr "Abrir arquivo G-code:" -msgid "One object has empty initial layer and can't be printed. Please Cut the bottom or enable supports." -msgstr "Um objeto tem uma primeira camada vazia e não pode ser impresso. Por favor, corte a base ou habilite os suportes." +msgid "" +"One object has empty initial layer and can't be printed. Please Cut the " +"bottom or enable supports." +msgstr "" +"Um objeto tem uma primeira camada vazia e não pode ser impresso. Por favor, " +"corte a base ou habilite os suportes." #, boost-format msgid "Object can't be printed for empty layer between %1% and %2%." -msgstr "O objeto não pode ser impresso devido a uma camada vazia entre %1% e %2%." +msgstr "" +"O objeto não pode ser impresso devido a uma camada vazia entre %1% e %2%." #, boost-format msgid "Object: %1%" msgstr "Objeto: %1%" -msgid "Maybe parts of the object at these height are too thin, or the object has faulty mesh" -msgstr "Talvez partes do objeto nessa altura sejam muito finas, ou o objeto tenha uma malha com falhas" +msgid "" +"Maybe parts of the object at these height are too thin, or the object has " +"faulty mesh" +msgstr "" +"Talvez partes do objeto nessa altura sejam muito finas, ou o objeto tenha " +"uma malha com falhas" msgid "No object can be printed. Maybe too small" msgstr "Nenhum objeto pode ser impresso. Talvez seja muito pequeno" @@ -7796,10 +8752,16 @@ msgstr "Múltiplo" #, boost-format msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " -msgstr "Falha ao calcular a largura da linha de %1%. Não é possível obter o valor de \"%2%\". " +msgstr "" +"Falha ao calcular a largura da linha de %1%. Não é possível obter o valor de " +"\"%2%\". " -msgid "Invalid spacing supplied to Flow::with_spacing(), check your layer height and extrusion width" -msgstr "Espaçamento inválido fornecido para Flow::with_spacing(), verifique a altura da camada e a largura da extrusão." +msgid "" +"Invalid spacing supplied to Flow::with_spacing(), check your layer height " +"and extrusion width" +msgstr "" +"Espaçamento inválido fornecido para Flow::with_spacing(), verifique a altura " +"da camada e a largura da extrusão." msgid "undefined error" msgstr "erro indefinido" @@ -7895,8 +8857,11 @@ msgid "write callback failed" msgstr "falha na chamada de escrita" #, boost-format -msgid "%1% is too close to exclusion area, there may be collisions when printing." -msgstr "%1% está muito perto da área de exclusão, pode haver colisões durante a impressão." +msgid "" +"%1% is too close to exclusion area, there may be collisions when printing." +msgstr "" +"%1% está muito perto da área de exclusão, pode haver colisões durante a " +"impressão." #, boost-format msgid "%1% is too close to others, and collisions may be caused." @@ -7910,7 +8875,9 @@ msgid " is too close to others, there may be collisions when printing." msgstr " está muito perto de outros, pode haver colisões durante a impressão." msgid " is too close to exclusion area, there may be collisions when printing." -msgstr " está muito perto da área de exclusão, pode haver colisões durante a impressão." +msgstr "" +" está muito perto da área de exclusão, pode haver colisões durante a " +"impressão." msgid "Prime Tower" msgstr "Torre Principal" @@ -7921,67 +8888,128 @@ msgstr " está muito perto de outros, e colisões podem ocorrer.\n" msgid " is too close to exclusion area, and collisions will be caused.\n" msgstr " está muito perto da área de exclusão, e ocorrerão colisões.\n" -msgid "Can not print multiple filaments which have large difference of temperature together. Otherwise, the extruder and nozzle may be blocked or damaged during printing" -msgstr "Não é possível imprimir vários filamentos que têm grande diferença de temperatura juntos. Caso contrário, o extrusor e a bocal podem ficar bloqueados ou danificados durante a impressão" +msgid "" +"Can not print multiple filaments which have large difference of temperature " +"together. Otherwise, the extruder and nozzle may be blocked or damaged " +"during printing" +msgstr "" +"Não é possível imprimir vários filamentos que têm grande diferença de " +"temperatura juntos. Caso contrário, o extrusor e a bocal podem ficar " +"bloqueados ou danificados durante a impressão" msgid "No extrusions under current settings." msgstr "Nenhuma extrusão com as configurações atuais." -msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." -msgstr "O modo suave do timelapse não é suportado quando a sequência \"por objeto\" está ativada." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" +"O modo suave do timelapse não é suportado quando a sequência \"por objeto\" " +"está ativada." -msgid "Please select \"By object\" print sequence to print multiple objects in spiral vase mode." -msgstr "Por favor, selecione a sequência de impressão \"Por objeto\" para imprimir vários objetos no modo vaso espiral." +msgid "" +"Please select \"By object\" print sequence to print multiple objects in " +"spiral vase mode." +msgstr "" +"Por favor, selecione a sequência de impressão \"Por objeto\" para imprimir " +"vários objetos no modo vaso espiral." -msgid "The spiral vase mode does not work when an object contains more than one materials." -msgstr "O modo de vaso espiral não funciona quando um objeto contém mais de um material." +msgid "" +"The spiral vase mode does not work when an object contains more than one " +"materials." +msgstr "" +"O modo de vaso espiral não funciona quando um objeto contém mais de um " +"material." #, boost-format msgid "The object %1% exceeds the maximum build volume height." msgstr "O objeto %1% excede a altura máxima do volume de impressão." #, boost-format -msgid "While the object %1% itself fits the build volume, its last layer exceeds the maximum build volume height." -msgstr "Embora o objeto %1% em si se ajuste ao volume de impressão, sua última camada excede a altura máxima do volume de impressão." +msgid "" +"While the object %1% itself fits the build volume, its last layer exceeds " +"the maximum build volume height." +msgstr "" +"Embora o objeto %1% em si se ajuste ao volume de impressão, sua última " +"camada excede a altura máxima do volume de impressão." -msgid "You might want to reduce the size of your model or change current print settings and retry." -msgstr "Você pode querer reduzir o tamanho do seu modelo ou alterar as configurações de impressão atuais e tentar novamente." +msgid "" +"You might want to reduce the size of your model or change current print " +"settings and retry." +msgstr "" +"Você pode querer reduzir o tamanho do seu modelo ou alterar as configurações " +"de impressão atuais e tentar novamente." msgid "Variable layer height is not supported with Organic supports." msgstr "A altura de camada variável não é suportada com suportes orgânicos." -msgid "Different nozzle diameters and different filament diameters is not allowed when prime tower is enabled." -msgstr "Diâmetros de bocal diferentes e diâmetros de filamento diferentes não são permitidos quando a torre principal está ativada." +msgid "" +"Different nozzle diameters and different filament diameters is not allowed " +"when prime tower is enabled." +msgstr "" +"Diâmetros de bocal diferentes e diâmetros de filamento diferentes não são " +"permitidos quando a torre principal está ativada." -msgid "The Wipe Tower is currently only supported with the relative extruder addressing (use_relative_e_distances=1)." -msgstr "A Torre de Limpeza atualmente só é suportada com o endereçamento relativo do extrusor (use_relative_e_distances=1)." +msgid "" +"The Wipe Tower is currently only supported with the relative extruder " +"addressing (use_relative_e_distances=1)." +msgstr "" +"A Torre de Limpeza atualmente só é suportada com o endereçamento relativo do " +"extrusor (use_relative_e_distances=1)." -msgid "Ooze prevention is currently not supported with the prime tower enabled." -msgstr "A prevenção de oozing não é atualmente suportada com a torre principal ativada." +msgid "" +"Ooze prevention is currently not supported with the prime tower enabled." +msgstr "" +"A prevenção de oozing não é atualmente suportada com a torre principal " +"ativada." -msgid "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, RepRapFirmware and Repetier G-code flavors." -msgstr "A torre principal atualmente só é suportada para os G-code tipo Marlin, RepRap/Sprinter, RepRapFirmware e Repetier." +msgid "" +"The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " +"RepRapFirmware and Repetier G-code flavors." +msgstr "" +"A torre principal atualmente só é suportada para os G-code tipo Marlin, " +"RepRap/Sprinter, RepRapFirmware e Repetier." msgid "The prime tower is not supported in \"By object\" print." msgstr "A torre principal não é suportada na impressão \"Por objeto\"." -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 principal não é suportada quando a altura de camada adaptativa está ativada. Requer que todos os objetos tenham a mesma altura de camada." +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 principal não é suportada quando a altura de camada adaptativa está " +"ativada. 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 principal requer que o \"espaço de suporte\" seja múltiplo da altura da camada" +msgstr "" +"A torre principal requer que o \"espaç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 principal requer que todos os objetos tenham as mesmas alturas de camada" +msgstr "" +"A torre principal 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 principal requer que todos os objetos sejam impressos sobre o mesmo número de camadas de base" +msgid "" +"The prime tower requires that all objects are printed over the same number " +"of raft layers" +msgstr "" +"A torre principal requer que todos os objetos sejam impressos sobre o mesmo " +"número de camadas de base" -msgid "The prime tower requires that all objects are sliced with the same layer heights." -msgstr "A torre principal requer que todos os objetos sejam fatiados com as mesmas alturas de camada." +msgid "" +"The prime tower requires that all objects are sliced with the same layer " +"heights." +msgstr "" +"A torre principal 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 principal só é suportada se todos os objetos tiverem a mesma altura de camada variável" +msgid "" +"The prime tower is only supported if all objects have the same variable " +"layer height" +msgstr "" +"A torre principal só é suportada se todos os objetos tiverem a mesma altura " +"de camada variável" msgid "Too small line width" msgstr "Largura de linha muito pequena" @@ -7989,66 +9017,119 @@ msgstr "Largura de linha muito pequena" msgid "Too large line width" msgstr "Largura de linha muito grande" -msgid "The prime tower requires that support has the same layer height with object." -msgstr "A torre principal requer que o suporte tenha a mesma altura de camada do objeto." +msgid "" +"The prime tower requires that support has the same layer height with object." +msgstr "" +"A torre principal requer que o suporte tenha a mesma altura de camada do " +"objeto." -msgid "Organic support tree tip diameter must not be smaller than support material extrusion width." -msgstr "O diâmetro da ponta da árvore de suporte orgânico não deve ser menor do que a largura de extrusão do material de suporte." +msgid "" +"Organic support tree tip diameter must not be smaller than support material " +"extrusion width." +msgstr "" +"O diâmetro da ponta da árvore de suporte orgânico não deve ser menor do que " +"a largura de extrusão do material de suporte." -msgid "Organic support branch diameter must not be smaller than 2x support material extrusion width." -msgstr "O diâmetro do ramo de suporte orgânico não deve ser menor do que 2x a largura de extrusão do material de suporte." +msgid "" +"Organic support branch diameter must not be smaller than 2x support material " +"extrusion width." +msgstr "" +"O diâmetro do ramo de suporte orgânico não deve ser menor do que 2x a " +"largura de extrusão do material de suporte." -msgid "Organic support branch diameter must not be smaller than support tree tip diameter." -msgstr "O diâmetro do ramo de suporte orgânico não deve ser menor do que o diâmetro da ponta da árvore de suporte." +msgid "" +"Organic support branch diameter must not be smaller than support tree tip " +"diameter." +msgstr "" +"O diâmetro do ramo de suporte orgânico não deve ser menor do que o diâmetro " +"da ponta da árvore de suporte." -msgid "Support enforcers are used but support is not enabled. Please enable support." -msgstr "Os reforços de suporte são usados, mas o suporte não está habilitado. Por favor, habilite o suporte." +msgid "" +"Support enforcers are used but support is not enabled. Please enable support." +msgstr "" +"Os reforços de suporte são usados, mas o suporte não está habilitado. Por " +"favor, habilite o suporte." msgid "Layer height cannot exceed nozzle diameter" msgstr "A altura da camada não pode exceder o diâmetro da bocal" -msgid "Relative extruder addressing requires resetting the extruder position at each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to layer_gcode." -msgstr "O endereçamento relativo do extrusor requer a reinicialização da posição do extrusor em cada camada para evitar perda de precisão de ponto flutuante. Adicione \"G92 E0\" ao código de camada." +msgid "" +"Relative extruder addressing requires resetting the extruder position at " +"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"layer_gcode." +msgstr "" +"O endereçamento relativo do extrusor requer a reinicialização da posição do " +"extrusor em cada camada para evitar perda de precisão de ponto flutuante. " +"Adicione \"G92 E0\" ao código de camada." -msgid "\"G92 E0\" was found in before_layer_gcode, which is incompatible with absolute extruder addressing." -msgstr "\"G92 E0\" foi encontrado em before_layer_gcode, o que é incompatível com o endereçamento absoluto do extrusor." +msgid "" +"\"G92 E0\" was found in before_layer_gcode, which is incompatible with " +"absolute extruder addressing." +msgstr "" +"\"G92 E0\" foi encontrado em before_layer_gcode, o que é incompatível com o " +"endereçamento absoluto do extrusor." -msgid "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute extruder addressing." -msgstr "\"G92 E0\" foi encontrado em layer_gcode, o que é incompatível com o endereçamento absoluto do extrusor." +msgid "" +"\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " +"extruder addressing." +msgstr "" +"\"G92 E0\" foi encontrado em layer_gcode, o que é incompatível com o " +"endereçamento absoluto do extrusor." #, c-format, boost-format msgid "Plate %d: %s does not support filament %s" msgstr "Mesa %d: %s não suporta filamento %s" -msgid "Setting the jerk speed too low could lead to artifacts on curved surfaces" -msgstr "Definir a velocidade de jerk muito baixa pode levar a artefatos em superfícies curvas" +msgid "" +"Setting the jerk speed too low could lead to artifacts on curved surfaces" +msgstr "" +"Definir a velocidade de jerk muito baixa pode levar a artefatos em " +"superfícies curvas" msgid "" -"The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/machine_max_jerk_y).\n" -"Orca will automatically cap the jerk speed to ensure it doesn't surpass the printer's capabilities.\n" -"You can adjust the maximum jerk setting in your printer's configuration to get higher speeds." +"The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/" +"machine_max_jerk_y).\n" +"Orca will automatically cap the jerk speed to ensure it doesn't surpass the " +"printer's capabilities.\n" +"You can adjust the maximum jerk setting in your printer's configuration to " +"get higher speeds." msgstr "" -"A configuração de jerk excede o jerk máximo da impressora (machine_max_jerk_x/machine_max_jerk_y).\n" -"Orca automaticamente limitará a velocidade do jerk para garantir que não ultrapasse as capacidades da impressora.\n" -"Você pode ajustar a configuração de jerk máximo na configuração da sua impressora para obter velocidades mais altas." +"A configuração de jerk excede o jerk máximo da impressora " +"(machine_max_jerk_x/machine_max_jerk_y).\n" +"Orca automaticamente limitará a velocidade do jerk para garantir que não " +"ultrapasse as capacidades da impressora.\n" +"Você pode ajustar a configuração de jerk máximo na configuração da sua " +"impressora para obter velocidades mais altas." msgid "" -"The acceleration setting exceeds the printer's maximum acceleration (machine_max_acceleration_extruding).\n" -"Orca will automatically cap the acceleration speed to ensure it doesn't surpass the printer's capabilities.\n" -"You can adjust the machine_max_acceleration_extruding value in your printer's configuration to get higher speeds." +"The acceleration setting exceeds the printer's maximum acceleration " +"(machine_max_acceleration_extruding).\n" +"Orca will automatically cap the acceleration speed to ensure it doesn't " +"surpass the printer's capabilities.\n" +"You can adjust the machine_max_acceleration_extruding value in your " +"printer's configuration to get higher speeds." msgstr "" -"A configuração de aceleração excede a aceleração máxima da impressora (machine_max_acceleration_extruding).\n" -"Orca automaticamente limitará a velocidade de aceleração para garantir que não ultrapasse as capacidades da impressora.\n" -"Você pode ajustar o valor de machine_max_acceleration_extruding na configuração da sua impressora para obter velocidades mais altas." +"A configuração de aceleração excede a aceleração máxima da impressora " +"(machine_max_acceleration_extruding).\n" +"Orca automaticamente limitará a velocidade de aceleração para garantir que " +"não ultrapasse as capacidades da impressora.\n" +"Você pode ajustar o valor de machine_max_acceleration_extruding na " +"configuração da sua impressora para obter velocidades mais altas." msgid "" -"The travel acceleration setting exceeds the printer's maximum travel acceleration (machine_max_acceleration_travel).\n" -"Orca will automatically cap the travel acceleration speed to ensure it doesn't surpass the printer's capabilities.\n" -"You can adjust the machine_max_acceleration_travel value in your printer's configuration to get higher speeds." +"The travel acceleration setting exceeds the printer's maximum travel " +"acceleration (machine_max_acceleration_travel).\n" +"Orca will automatically cap the travel acceleration speed to ensure it " +"doesn't surpass the printer's capabilities.\n" +"You can adjust the machine_max_acceleration_travel value in your printer's " +"configuration to get higher speeds." msgstr "" -"A configuração de aceleração de deslocamento excede a aceleração máxima de deslocamento da impressora (machine_max_acceleration_travel).\n" -"O Orca irá automaticamente limitar a velocidade de aceleração de deslocamento para garantir que não ultrapasse as capacidades da impressora.\n" -"Você pode ajustar o valor de machine_max_acceleration_travel na configuração da sua impressora para obter velocidades mais altas." +"A configuração de aceleração de deslocamento excede a aceleração máxima de " +"deslocamento da impressora (machine_max_acceleration_travel).\n" +"O Orca irá automaticamente limitar a velocidade de aceleração de " +"deslocamento para garantir que não ultrapasse as capacidades da impressora.\n" +"Você pode ajustar o valor de machine_max_acceleration_travel na configuração " +"da sua impressora para obter velocidades mais altas." msgid "Generating skirt & brim" msgstr "Gerando saia e borda" @@ -8068,8 +9149,15 @@ msgstr "Área de impressão" msgid "Bed exclude area" msgstr "Área de exclusão da mesa" -msgid "Unprintable area in XY plane. For example, X1 Series printers use the front left corner to cut filament during filament change. The area is expressed as polygon by points in following format: \"XxY, XxY, ...\"" -msgstr "Área não imprimível no plano XY. Por exemplo, impressoras da série X1 usam o canto esquerdo frontal para cortar o filamento durante a troca de filamento. A área é expressa como um polígono por pontos no seguinte formato: \"XxY, XxY, ...\"" +msgid "" +"Unprintable area in XY plane. For example, X1 Series printers use the front " +"left corner to cut filament during filament change. The area is expressed as " +"polygon by points in following format: \"XxY, XxY, ...\"" +msgstr "" +"Área não imprimível no plano XY. Por exemplo, impressoras da série X1 usam o " +"canto esquerdo frontal para cortar o filamento durante a troca de filamento. " +"A área é expressa como um polígono por pontos no seguinte formato: \"XxY, " +"XxY, ...\"" msgid "Bed custom texture" msgstr "Textura personalizada da mesa" @@ -8080,20 +9168,35 @@ msgstr "Modelo personalizado da mesa" msgid "Elephant foot compensation" msgstr "Compensação de pé de elefante" -msgid "Shrink the initial layer on build plate to compensate for elephant foot effect" -msgstr "Reduza a primeira camada na mesa para compensar o efeito de pé de elefante" +msgid "" +"Shrink the initial layer on build plate to compensate for elephant foot " +"effect" +msgstr "" +"Reduza a primeira camada na mesa para compensar o efeito de pé de elefante" msgid "Elephant foot compensation layers" msgstr "Camadas de compensação de pé de elefante" -msgid "The number of layers on which the elephant foot compensation will be active. The first layer will be shrunk by the elephant foot compensation value, then the next layers will be linearly shrunk less, up to the layer indicated by this value." -msgstr "O número de camadas em que a compensação de pé de elefante estará ativa. A primeira camada será reduzida pelo valor de compensação de pé de elefante, e então as próximas camadas serão reduzidas linearmente, até a camada indicada por este valor." +msgid "" +"The number of layers on which the elephant foot compensation will be active. " +"The first layer will be shrunk by the elephant foot compensation value, then " +"the next layers will be linearly shrunk less, up to the layer indicated by " +"this value." +msgstr "" +"O número de camadas em que a compensação de pé de elefante estará ativa. A " +"primeira camada será reduzida pelo valor de compensação de pé de elefante, e " +"então as próximas camadas serão reduzidas linearmente, até a camada indicada " +"por este valor." msgid "layers" msgstr "camadas" -msgid "Slicing height for each layer. Smaller layer height means more accurate and more printing time" -msgstr "Altura de fatiamento para cada camada. Altura de camada menor significa mais precisão e mais tempo de impressão" +msgid "" +"Slicing height for each layer. Smaller layer height means more accurate and " +"more printing time" +msgstr "" +"Altura de fatiamento para cada camada. Altura de camada menor significa mais " +"precisão e mais tempo de impressão" msgid "Printable height" msgstr "Altura de impressão" @@ -8105,7 +9208,9 @@ msgid "Preferred orientation" msgstr "Orientação preferida" msgid "Automatically orient stls on the Z-axis upon initial import" -msgstr "Orientar automaticamente os arquivos STL no eixo Z durante a importação inicial" +msgstr "" +"Orientar automaticamente os arquivos STL no eixo Z durante a importação " +"inicial" msgid "Printer preset names" msgstr "Nomes de presets da impressora" @@ -8114,25 +9219,44 @@ msgid "Use 3rd-party print host" msgstr "Usar host de impressão de terceiros" msgid "Allow controlling BambuLab's printer through 3rd party print hosts" -msgstr "Permitir o controle da impressora BambuLab por meio de hosts de impressão de terceiros" +msgstr "" +"Permitir o controle da impressora BambuLab por meio de hosts de impressão de " +"terceiros" msgid "Hostname, IP or URL" msgstr "Nome do host, IP ou URL" -msgid "Orca Slicer can upload G-code files to a printer host. This field should contain the hostname, IP address or URL of the printer host instance. Print host behind HAProxy with basic auth enabled can be accessed by putting the user name and password into the URL in the following format: https://username:password@your-octopi-address/" -msgstr "O Orca Slicer pode enviar arquivos G-code para um host de impressora. Este campo deve conter o nome do host, o endereço IP ou a URL da instância do host de impressora. O host de impressão atrás do HAProxy com autenticação básica ativada pode ser acessado colocando o nome de usuário e senha na URL no seguinte formato: https://username:password@your-octopi-address/" +msgid "" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the hostname, IP address or URL of the printer host instance. Print " +"host behind HAProxy with basic auth enabled can be accessed by putting the " +"user name and password into the URL in the following format: https://" +"username:password@your-octopi-address/" +msgstr "" +"O Orca Slicer pode enviar arquivos G-code para um host de impressora. Este " +"campo deve conter o nome do host, o endereço IP ou a URL da instância do " +"host de impressora. O host de impressão atrás do HAProxy com autenticação " +"básica ativada pode ser acessado colocando o nome de usuário e senha na URL " +"no seguinte formato: https://username:password@your-octopi-address/" msgid "Device UI" msgstr "Interface do dispositivo" -msgid "Specify the URL of your device user interface if it's not same as print_host" -msgstr "Especifique a URL da interface do usuário do seu dispositivo se não for a mesma do print_host" +msgid "" +"Specify the URL of your device user interface if it's not same as print_host" +msgstr "" +"Especifique a URL da interface do usuário do seu dispositivo se não for a " +"mesma do print_host" msgid "API Key / Password" msgstr "Chave da API / Senha" -msgid "Orca Slicer can upload G-code files to a printer host. This field should contain the API Key or the password required for authentication." -msgstr "O Orca Slicer pode enviar arquivos G-code para um host de impressora. Este campo deve conter a Chave da API ou a senha necessária para autenticação." +msgid "" +"Orca Slicer can upload G-code files to a printer host. This field should " +"contain the API Key or the password required for authentication." +msgstr "" +"O Orca Slicer pode enviar arquivos G-code para um host de impressora. Este " +"campo deve conter a Chave da API ou a senha necessária para autenticação." msgid "Name of the printer" msgstr "Nome da impressora" @@ -8140,8 +9264,14 @@ msgstr "Nome da impressora" msgid "HTTPS CA File" msgstr "Arquivo CA HTTPS" -msgid "Custom CA certificate file can be specified for HTTPS OctoPrint connections, in crt/pem format. If left blank, the default OS CA certificate repository is used." -msgstr "O arquivo de certificado CA personalizado pode ser especificado para conexões HTTPS OctoPrint, no formato crt/pem. Se deixado em branco, o repositório de certificados CA padrão do sistema operacional é usado." +msgid "" +"Custom CA certificate file can be specified for HTTPS OctoPrint connections, " +"in crt/pem format. If left blank, the default OS CA certificate repository " +"is used." +msgstr "" +"O arquivo de certificado CA personalizado pode ser especificado para " +"conexões HTTPS OctoPrint, no formato crt/pem. Se deixado em branco, o " +"repositório de certificados CA padrão do sistema operacional é usado." msgid "User" msgstr "Usuário" @@ -8152,8 +9282,14 @@ msgstr "Senha" msgid "Ignore HTTPS certificate revocation checks" msgstr "Ignorar verificações de revogação de certificado HTTPS" -msgid "Ignore HTTPS certificate revocation checks in case of missing or offline distribution points. One may want to enable this option for self signed certificates if connection fails." -msgstr "Ignorar verificações de revogação de certificado HTTPS em caso de pontos de distribuição ausentes ou offline. Pode-se querer habilitar esta opção para certificados autoassinados se a conexão falhar." +msgid "" +"Ignore HTTPS certificate revocation checks in case of missing or offline " +"distribution points. One may want to enable this option for self signed " +"certificates if connection fails." +msgstr "" +"Ignorar verificações de revogação de certificado HTTPS em caso de pontos de " +"distribuição ausentes ou offline. Pode-se querer habilitar esta opção para " +"certificados autoassinados se a conexão falhar." msgid "Names of presets related to the physical printer" msgstr "Nomes dos presets relacionados à impressora física" @@ -8171,13 +9307,23 @@ msgid "Avoid crossing wall" msgstr "Evitar perímetros" msgid "Detour and avoid to travel across wall which may cause blob on surface" -msgstr "Desvio e evite viajar através do perímetro que pode causar irregularidade na superfície" +msgstr "" +"Desvio e evite viajar através do perímetro que pode causar irregularidade na " +"superfície" msgid "Avoid crossing wall - Max detour length" msgstr "Evitar perímetros - Distância máximo do desvio" -msgid "Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is large than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable" -msgstr "Distância máxima de desvio para evitar atravessar o perímetro. Não desviar se a distância de desvio for maior que esse valor. A distancia do desvio pode ser especificada como um valor absoluto ou como porcentagem (por exemplo, 50%) de um caminho de deslocamento direto. Zero para desativar" +msgid "" +"Maximum detour distance for avoiding crossing wall. Don't detour if the " +"detour distance is large than this value. Detour length could be specified " +"either as an absolute value or as percentage (for example 50%) of a direct " +"travel path. Zero to disable" +msgstr "" +"Distância máxima de desvio para evitar atravessar o perímetro. Não desviar " +"se a distância de desvio for maior que esse valor. A distancia do desvio " +"pode ser especificada como um valor absoluto ou como porcentagem (por " +"exemplo, 50%) de um caminho de deslocamento direto. Zero para desativar" msgid "mm or %" msgstr "mm ou %" @@ -8185,20 +9331,36 @@ msgstr "mm ou %" msgid "Other layers" msgstr "Outras camadas" -msgid "Bed temperature for layers except the initial one. Value 0 means the filament does not support to print on the Cool Plate" -msgstr "Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o filamento não suporta a impressão na Cool Plate (Mesa Fria)" +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Cool Plate" +msgstr "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão na Cool Plate (Mesa Fria)" msgid "°C" msgstr "°C" -msgid "Bed temperature for layers except the initial one. Value 0 means the filament does not support to print on the Engineering Plate" -msgstr "Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o filamento não suporta a impressão no Engenharia Plate" +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Engineering Plate" +msgstr "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão no Engenharia Plate" -msgid "Bed temperature for layers except the initial one. Value 0 means the filament does not support to print on the High Temp Plate" -msgstr "Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o filamento não suporta a impressão no Plate de Alta Temperatura" +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the High Temp Plate" +msgstr "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão no Plate de Alta Temperatura" -msgid "Bed temperature for layers except the initial one. Value 0 means the filament does not support to print on the Textured PEI Plate" -msgstr "Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o filamento não suporta a impressão no Plate de PEI Texturizado" +msgid "" +"Bed temperature for layers except the initial one. Value 0 means the " +"filament does not support to print on the Textured PEI Plate" +msgstr "" +"Temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o " +"filamento não suporta a impressão no Plate de PEI Texturizado" msgid "Initial layer" msgstr "Primeira camada" @@ -8206,17 +9368,33 @@ msgstr "Primeira camada" msgid "Initial layer bed temperature" msgstr "Temperatura da mesa da primeira camada" -msgid "Bed temperature of the initial layer. Value 0 means the filament does not support to print on the Cool Plate" -msgstr "Temperatura da mesa na primeira camada. O valor 0 significa que o filamento não suporta a impressão na Cool Plate (Mesa Fria)" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Cool Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão na Cool Plate (Mesa Fria)" -msgid "Bed temperature of the initial layer. Value 0 means the filament does not support to print on the Engineering Plate" -msgstr "Temperatura da mesa na primeira camada. O valor 0 significa que o filamento não suporta a impressão no Engenharia Plate" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Engineering Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão no Engenharia Plate" -msgid "Bed temperature of the initial layer. Value 0 means the filament does not support to print on the High Temp Plate" -msgstr "Temperatura da mesa na primeira camada. O valor 0 significa que o filamento não suporta a impressão no Plate de Alta Temperatura" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the High Temp Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão no Plate de Alta Temperatura" -msgid "Bed temperature of the initial layer. Value 0 means the filament does not support to print on the Textured PEI Plate" -msgstr "Temperatura da mesa na primeira camada. O valor 0 significa que o filamento não suporta a impressão no Plate de PEI Texturizado" +msgid "" +"Bed temperature of the initial layer. Value 0 means the filament does not " +"support to print on the Textured PEI Plate" +msgstr "" +"Temperatura da mesa na primeira camada. O valor 0 significa que o filamento " +"não suporta a impressão no Plate de PEI Texturizado" msgid "Bed types supported by the printer" msgstr "Tipos de mesa suportadas pela impressora" @@ -8245,31 +9423,53 @@ msgstr "Este código G é inserido em cada mudança de camada antes de levantar msgid "Bottom shell layers" msgstr "Camadas de base" -msgid "This is the number of solid layers of bottom shell, including the bottom surface layer. When the thickness calculated by this value is thinner than bottom shell thickness, the bottom shell layers will be increased" -msgstr "Este é o número de camadas sólidas da base, incluindo a primeira camada. Quando a espessura calculada por este valor for mais fina do que a espessura da base, o número das camadas da base serão aumentadas" +msgid "" +"This is the number of solid layers of bottom shell, including the bottom " +"surface layer. When the thickness calculated by this value is thinner than " +"bottom shell thickness, the bottom shell layers will be increased" +msgstr "" +"Este é o número de camadas sólidas da base, incluindo a primeira camada. " +"Quando a espessura calculada por este valor for mais fina do que a espessura " +"da base, o número das camadas da base serão aumentadas" msgid "Bottom shell thickness" msgstr "Espessura da base" -msgid "The number of bottom solid layers is increased when slicing if the thickness calculated by bottom shell layers is thinner than this value. This can avoid having too thin shell when layer height is small. 0 means that this setting is disabled and thickness of bottom shell is absolutely determained by bottom shell layers" -msgstr "O número de camadas sólidas da base é aumentado ao fatiar se a espessura calculada pelas camadas da base for mais fina do que este valor. Isso pode evitar que a base seja muito fina quando a altura da camada é pequena. 0 significa que esta configuração está desativada e a espessura da base é absolutamente determinada pelas camadas da base" +msgid "" +"The number of bottom solid layers is increased when slicing if the thickness " +"calculated by bottom shell layers is thinner than this value. This can avoid " +"having too thin shell when layer height is small. 0 means that this setting " +"is disabled and thickness of bottom shell is absolutely determained by " +"bottom shell layers" +msgstr "" +"O número de camadas sólidas da base é aumentado ao fatiar se a espessura " +"calculada pelas camadas da base for mais fina do que este valor. Isso pode " +"evitar que a base seja muito fina quando a altura da camada é pequena. 0 " +"significa que esta configuração está desativada e a espessura da base é " +"absolutamente determinada pelas camadas da base" msgid "Apply gap fill" msgstr "Preenchimento de vão" msgid "" -"Enables gap fill for the selected surfaces. The minimum gap length that will be filled can be controlled from the filter out tiny gaps option below.\n" +"Enables gap fill for the selected surfaces. The minimum gap length that will " +"be filled can be controlled from the filter out tiny gaps option below.\n" "\n" "Options:\n" "1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces\n" -"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only\n" +"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces " +"only\n" "3. Nowhere: Disables gap fill\n" msgstr "" -"Ativa o preenchimento de vão para as superfícies selecionadas. O comprimento mínimo do vão que será preenchida pode ser controlado a partir da opção de filtrar pequenas s abaixo.\n" +"Ativa o preenchimento de vão para as superfícies selecionadas. O comprimento " +"mínimo do vão que será preenchida pode ser controlado a partir da opção de " +"filtrar pequenas s abaixo.\n" "\n" "Opções:\n" -"1. Em todos os lugares: Aplica preenchimento de s às superfícies sólidas superior, inferior e interna\n" -"2. Superfícies superior e inferior: Aplica preenchimento de s apenas às superfícies superior e inferior\n" +"1. Em todos os lugares: Aplica preenchimento de s às superfícies sólidas " +"superior, inferior e interna\n" +"2. Superfícies superior e inferior: Aplica preenchimento de s apenas às " +"superfícies superior e inferior\n" "3. Em nenhum lugar: Desativa o preenchimento de s\n" msgid "Everywhere" @@ -8284,96 +9484,170 @@ msgstr "Nunca" msgid "Force cooling for overhang and bridge" msgstr "Forçar resfriamento para overhangs e pontes" -msgid "Enable this option to optimize part cooling fan speed for overhang and bridge to get better cooling" -msgstr "Ative esta opção para otimizar a velocidade do ventilador de resfriamento de peças para overhangs e ponte para obter melhor resfriamento" +msgid "" +"Enable this option to optimize part cooling fan speed for overhang and " +"bridge to get better cooling" +msgstr "" +"Ative esta opção para otimizar a velocidade do ventilador de resfriamento de " +"peças para overhangs e ponte para obter melhor resfriamento" msgid "Fan speed for overhang" msgstr "Velocidade do ventilador para overhangs" -msgid "Force part cooling fan to be this speed when printing bridge or overhang wall which has large overhang degree. Forcing cooling for overhang and bridge can get better quality for these part" -msgstr "Forçar o ventilador de resfriamento da peça a ser nesta velocidade ao imprimir ponte ou overhang que tenha um grande grau de inclinação. Forçar o resfriamento para overhang e ponte pode obter melhor qualidade para estas partes" +msgid "" +"Force part cooling fan to be this speed when printing bridge or overhang " +"wall which has large overhang degree. Forcing cooling for overhang and " +"bridge can get better quality for these part" +msgstr "" +"Forçar o ventilador de resfriamento da peça a ser nesta velocidade ao " +"imprimir ponte ou overhang que tenha um grande grau de inclinação. Forçar o " +"resfriamento para overhang e ponte pode obter melhor qualidade para estas " +"partes" msgid "Cooling overhang threshold" msgstr "Limiar de resfriamento de Overhang" #, c-format -msgid "Force cooling fan to be specific speed when overhang degree of printed part exceeds this value. Expressed as percentage which indicides how much width of the line without support from lower layer. 0% means forcing cooling for all outer wall no matter how much overhang degree" -msgstr "Forçar o ventilador de resfriamento a ser uma velocidade específica quando o grau de inclinação da peça impressa excede este valor. Expresso como porcentagem, que indica quanto da largura da linha sem suporte da camada inferior.Zero significa forçar o resfriamento para toda o perímetro externo, não importa quanto seja o grau de inclinação" +msgid "" +"Force cooling fan to be specific speed when overhang degree of printed part " +"exceeds this value. Expressed as percentage which indicides how much width " +"of the line without support from lower layer. 0% means forcing cooling for " +"all outer wall no matter how much overhang degree" +msgstr "" +"Forçar o ventilador de resfriamento a ser uma velocidade específica quando o " +"grau de inclinação da peça impressa excede este valor. Expresso como " +"porcentagem, que indica quanto da largura da linha sem suporte da camada " +"inferior.Zero significa forçar o resfriamento para toda o perímetro externo, " +"não importa quanto seja o grau de inclinação" msgid "Bridge infill direction" msgstr "Direção de preenchimento de ponte" -msgid "Bridging angle override. If left to zero, the bridging angle will be calculated automatically. Otherwise the provided angle will be used for external bridges. Use 180°for zero angle." -msgstr "Substituição de ângulo de ponte. Se deixado em zero, o ângulo de ponte será calculado automaticamente. Caso contrário, o ângulo fornecido será usado para pontes externas. Use 180° para ângulo zero." +msgid "" +"Bridging angle override. If left to zero, the bridging angle will be " +"calculated automatically. Otherwise the provided angle will be used for " +"external bridges. Use 180°for zero angle." +msgstr "" +"Substituição de ângulo de ponte. Se deixado em zero, o ângulo de ponte será " +"calculado automaticamente. Caso contrário, o ângulo fornecido será usado " +"para pontes externas. Use 180° para ângulo zero." msgid "Bridge density" msgstr "Densidade de ponte" msgid "Density of external bridges. 100% means solid bridge. Default is 100%." -msgstr "Densidade de pontes externas. 100% significa ponte sólida. O padrão é 100%." +msgstr "" +"Densidade de pontes externas. 100% significa ponte sólida. O padrão é 100%." msgid "Bridge flow ratio" msgstr "Fluxo em ponte" -msgid "Decrease this value slightly(for example 0.9) to reduce the amount of material for bridge, to improve sag" -msgstr "Diminua ligeiramente este valor (por exemplo, 0.9) para reduzir a quantidade de material para ponte, para melhorar a flacidez" +msgid "" +"Decrease this value slightly(for example 0.9) to reduce the amount of " +"material for bridge, to improve sag" +msgstr "" +"Diminua ligeiramente este valor (por exemplo, 0.9) para reduzir a quantidade " +"de material para ponte, para melhorar a flacidez" msgid "Internal bridge flow ratio" msgstr "Fluxo em ponte interna" -msgid "This value governs the thickness of the internal bridge layer. This is the first layer over sparse infill. Decrease this value slightly (for example 0.9) to improve surface quality over sparse infill." -msgstr "Este valor governa a espessura da camada interna da ponte. Esta é a primeira camada sobre o preenchimento. Diminua ligeiramente este valor (por exemplo, 0.9) para melhorar a qualidade da superfície sobre o preenchimento esparsamente." +msgid "" +"This value governs the thickness of the internal bridge layer. This is the " +"first layer over sparse infill. Decrease this value slightly (for example " +"0.9) to improve surface quality over sparse infill." +msgstr "" +"Este valor governa a espessura da camada interna da ponte. Esta é a primeira " +"camada sobre o preenchimento. Diminua ligeiramente este valor (por exemplo, " +"0.9) para melhorar a qualidade da superfície sobre o preenchimento " +"esparsamente." msgid "Top surface flow ratio" msgstr "Fluxo em superfície superior" -msgid "This factor affects the amount of material for top solid infill. You can decrease it slightly to have smooth surface finish" -msgstr "Este fator afeta a quantidade de material para o preenchimento sólido superior. Você pode diminuí-lo ligeiramente para ter um acabamento de superfície suave" +msgid "" +"This factor affects the amount of material for top solid infill. You can " +"decrease it slightly to have smooth surface finish" +msgstr "" +"Este fator afeta a quantidade de material para o preenchimento sólido " +"superior. Você pode diminuí-lo ligeiramente para ter um acabamento de " +"superfície suave" msgid "Bottom surface flow ratio" msgstr "Fluxo em superfície inferior" msgid "This factor affects the amount of material for bottom solid infill" -msgstr "Este fator afeta a quantidade de material para o preenchimento sólido inferior" +msgstr "" +"Este fator afeta a quantidade de material para o preenchimento sólido " +"inferior" msgid "Precise wall" msgstr "Parede precisa" msgid "" -"Improve shell precision by adjusting outer wall spacing. This also improves layer consistency.\n" -"Note: This setting will only take effect if the wall sequence is configured to Inner-Outer" +"Improve shell precision by adjusting outer wall spacing. This also improves " +"layer consistency.\n" +"Note: This setting will only take effect if the wall sequence is configured " +"to Inner-Outer" msgstr "" -"Melhore a precisão da parede ajustando o espaçamento do perímetro externo. Isso também melhora a consistência da camada.\n" -"Nota: Esta configuração só terá efeito se a sequência do perímetro estiver configurada para Interior-Exterior" +"Melhore a precisão da parede ajustando o espaçamento do perímetro externo. " +"Isso também melhora a consistência da camada.\n" +"Nota: Esta configuração só terá efeito se a sequência do perímetro estiver " +"configurada para Interior-Exterior" msgid "Only one wall on top surfaces" msgstr "Perímetro único em superfícies superiores" -msgid "Use only one wall on flat top surface, to give more space to the top infill pattern" -msgstr "Use apenas um perímetro em superfície superior, para dar mais espaço ao padrão de preenchimento superior" +msgid "" +"Use only one wall on flat top surface, to give more space to the top infill " +"pattern" +msgstr "" +"Use apenas um perímetro em superfície superior, para dar mais espaço ao " +"padrão de preenchimento superior" msgid "One wall threshold" msgstr "Limite de perímetro único" #, no-c-format, no-boost-format msgid "" -"If a top surface has to be printed and it's partially covered by another layer, it won't be considered at a top layer where its width is below this value. This can be useful to not let the 'one perimeter on top' trigger on surface that should be covered only by perimeters. This value can be a mm or a % of the perimeter extrusion width.\n" -"Warning: If enabled, artifacts can be created if you have some thin features on the next layer, like letters. Set this setting to 0 to remove these artifacts." +"If a top surface has to be printed and it's partially covered by another " +"layer, it won't be considered at a top layer where its width is below this " +"value. This can be useful to not let the 'one perimeter on top' trigger on " +"surface that should be covered only by perimeters. This value can be a mm or " +"a % of the perimeter extrusion width.\n" +"Warning: If enabled, artifacts can be created if you have some thin features " +"on the next layer, like letters. Set this setting to 0 to remove these " +"artifacts." msgstr "" -"Se uma superfície superior tiver que ser impressa e estiver parcialmente coberta por outra camada, ela não será considerada em uma camada superior onde sua largura estiver abaixo deste valor. Isso pode ser útil para não permitir que o 'um perímetro no topo' seja ativado em uma superfície que deve ser coberta apenas por perímetros. Este valor pode ser em mm ou % da largura de extrusão do perímetro.\n" -"Aviso: Se habilitado, artefatos podem ser criados se você tiver algumas características finas na próxima camada, como letras. Defina esta configuração para 0 para remover esses artefatos." +"Se uma superfície superior tiver que ser impressa e estiver parcialmente " +"coberta por outra camada, ela não será considerada em uma camada superior " +"onde sua largura estiver abaixo deste valor. Isso pode ser útil para não " +"permitir que o 'um perímetro no topo' seja ativado em uma superfície que " +"deve ser coberta apenas por perímetros. Este valor pode ser em mm ou % da " +"largura de extrusão do perímetro.\n" +"Aviso: Se habilitado, artefatos podem ser criados se você tiver algumas " +"características finas na próxima camada, como letras. Defina esta " +"configuração para 0 para remover esses artefatos." msgid "Only one wall on first layer" msgstr "Perímetro único na primeira camada" -msgid "Use only one wall on first layer, to give more space to the bottom infill pattern" -msgstr "Use apenas um perímetro na primeira camada, para dar mais espaço ao padrão de preenchimento inferior" +msgid "" +"Use only one wall on first layer, to give more space to the bottom infill " +"pattern" +msgstr "" +"Use apenas um perímetro na primeira camada, para dar mais espaço ao padrão " +"de preenchimento inferior" msgid "Extra perimeters on overhangs" msgstr "Perímetros extras em overhangs" -msgid "Create additional perimeter paths over steep overhangs and areas where bridges cannot be anchored. " -msgstr "Crie caminhos de perímetro adicionais em overhangs íngremes e áreas onde pontes não podem ser ancoradas. " +msgid "" +"Create additional perimeter paths over steep overhangs and areas where " +"bridges cannot be anchored. " +msgstr "" +"Crie caminhos de perímetro adicionais em overhangs íngremes e áreas onde " +"pontes não podem ser ancoradas. " msgid "Reverse on odd" msgstr "Inverter em ímpares" @@ -8382,13 +9656,19 @@ msgid "Overhang reversal" msgstr "Reversão de suspensão" msgid "" -"Extrude perimeters that have a part over an overhang in the reverse direction on odd layers. This alternating pattern can drastically improve steep overhangs.\n" +"Extrude perimeters that have a part over an overhang in the reverse " +"direction on odd layers. This alternating pattern can drastically improve " +"steep overhangs.\n" "\n" -"This setting can also help reduce part warping due to the reduction of stresses in the part walls." +"This setting can also help reduce part warping due to the reduction of " +"stresses in the part walls." msgstr "" -"Extruir perímetros, que tenham uma parte sobre um overhang, na direção reversa em camadas ímpares. Este padrão alternado pode melhorar drasticamente perímetros íngremes.\n" +"Extruir perímetros, que tenham uma parte sobre um overhang, na direção " +"reversa em camadas ímpares. Este padrão alternado pode melhorar " +"drasticamente perímetros íngremes.\n" "\n" -"Este ajuste também pode ajudar a reduzir a deformação da peça devido à redução das tensões nas paredes da peça." +"Este ajuste também pode ajudar a reduzir a deformação da peça devido à " +"redução das tensões nas paredes da peça." msgid "Reverse only internal perimeters" msgstr "Inverter apenas os perímetros internos" @@ -8396,28 +9676,45 @@ msgstr "Inverter apenas os perímetros internos" msgid "" "Apply the reverse perimeters logic only on internal perimeters. \n" "\n" -"This setting greatly reduces part stresses as they are now distributed in alternating directions. This should reduce part warping while also maintaining external wall quality. This feature can be very useful for warp prone material, like ABS/ASA, and also for elastic filaments, like TPU and Silk PLA. It can also help reduce warping on floating regions over supports.\n" +"This setting greatly reduces part stresses as they are now distributed in " +"alternating directions. This should reduce part warping while also " +"maintaining external wall quality. This feature can be very useful for warp " +"prone material, like ABS/ASA, and also for elastic filaments, like TPU and " +"Silk PLA. It can also help reduce warping on floating regions over " +"supports.\n" "\n" -"For this setting to be the most effective, it is recomended to set the Reverse Threshold to 0 so that all internal walls print in alternating directions on odd layers irrespective of their overhang degree." +"For this setting to be the most effective, it is recomended to set the " +"Reverse Threshold to 0 so that all internal walls print in alternating " +"directions on odd layers irrespective of their overhang degree." msgstr "" "Aplicar a lógica de perímetros reversos apenas em perímetros internos.\n" "\n" -"Este ajuste reduz muito as tensões na peça, já que agora são distribuídas em direções alternadas. Isso deve reduzir a deformação da peça, mantendo a qualidade do perímetro externo. Este recurso pode ser muito útil para materiais propensos a deformações, como ABS/ASA, e também para filamentos elásticos, como TPU e Silk PLA. Também pode ajudar a reduzir a deformação em regiões flutuantes sobre suportes.\n" +"Este ajuste reduz muito as tensões na peça, já que agora são distribuídas em " +"direções alternadas. Isso deve reduzir a deformação da peça, mantendo a " +"qualidade do perímetro externo. Este recurso pode ser muito útil para " +"materiais propensos a deformações, como ABS/ASA, e também para filamentos " +"elásticos, como TPU e Silk PLA. Também pode ajudar a reduzir a deformação em " +"regiões flutuantes sobre suportes.\n" "\n" -"Para que este ajuste seja mais eficaz, recomenda-se definir o Limiar Reverso como 0 para que todos os perímetros internos sejam impressos em direções alternadas em camadas ímpares, independentemente de seu grau de ." +"Para que este ajuste seja mais eficaz, recomenda-se definir o Limiar Reverso " +"como 0 para que todos os perímetros internos sejam impressos em direções " +"alternadas em camadas ímpares, independentemente de seu grau de ." msgid "Bridge counterbore holes" msgstr "Pontes para furos rebaixados" msgid "" -"This option creates bridges for counterbore holes, allowing them to be printed without support. Available modes include:\n" +"This option creates bridges for counterbore holes, allowing them to be " +"printed without support. Available modes include:\n" "1. None: No bridge is created.\n" "2. Partially Bridged: Only a part of the unsupported area will be bridged.\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created." msgstr "" -"Esta opção cria pontes para furos rebaixados, permitindo que sejam impressos sem suporte. Os modos disponíveis incluem:\n" +"Esta opção cria pontes para furos rebaixados, permitindo que sejam impressos " +"sem suporte. Os modos disponíveis incluem:\n" "1. Nenhum: Nenhuma ponte é criada.\n" -"2. Parcialmente Ponteada: Apenas uma parte da área não suportada será ponteada.\n" +"2. Parcialmente Ponteada: Apenas uma parte da área não suportada será " +"ponteada.\n" "3. Camada Sacrificial: Uma camada completa de ponte sacrificial é criada." msgid "Partially bridged" @@ -8434,10 +9731,12 @@ msgstr "Limiar de inversão de overhang" #, no-c-format, no-boost-format msgid "" -"Number of mm the overhang need to be for the reversal to be considered useful. Can be a % of the perimeter width.\n" +"Number of mm the overhang need to be for the reversal to be considered " +"useful. Can be a % of the perimeter width.\n" "Value 0 enables reversal on every odd layers regardless." msgstr "" -"Número de milímetros que o precisa ter para que a reversão seja considerada útil. Pode ser um % da largura do perímetro.\n" +"Número de milímetros que o precisa ter para que a reversão seja considerada " +"útil. Pode ser um % da largura do perímetro.\n" "O valor 0 permite a reversão em todas as camadas ímpares independentemente." msgid "Classic mode" @@ -8450,13 +9749,19 @@ msgid "Slow down for overhang" msgstr "Reduzir velocidade em overhangs" msgid "Enable this option to slow printing down for different overhang degree" -msgstr "Ative esta opção para diminuir a velocidade de impressão em diferentes graus de inclinação" +msgstr "" +"Ative esta opção para diminuir a velocidade de impressão em diferentes graus " +"de inclinação" msgid "Slow down for curled perimeters" msgstr "Reduzir vel. para perímetros encurvados" -msgid "Enable this option to slow printing down in areas where potential curled perimeters may exist" -msgstr "Ative esta opção para diminuir a velocidade de impressão em áreas onde podem existir potenciais perímetros curvados (warping)" +msgid "" +"Enable this option to slow printing down in areas where potential curled " +"perimeters may exist" +msgstr "" +"Ative esta opção para diminuir a velocidade de impressão em áreas onde podem " +"existir potenciais perímetros curvados (warping)" msgid "mm/s or %" msgstr "mm/s ou %" @@ -8473,8 +9778,12 @@ msgstr "mm/s" msgid "Internal" msgstr "Interno" -msgid "Speed of internal bridge. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%." -msgstr "Velocidade da ponte interna. Se o valor for expresso como porcentagem, será calculado com base na velocidade da ponte. O valor padrão é 150%." +msgid "" +"Speed of internal bridge. If the value is expressed as a percentage, it will " +"be calculated based on the bridge_speed. Default value is 150%." +msgstr "" +"Velocidade da ponte interna. Se o valor for expresso como porcentagem, será " +"calculado com base na velocidade da ponte. O valor padrão é 150%." msgid "Brim width" msgstr "Largura da borda" @@ -8485,14 +9794,23 @@ msgstr "Distância do modelo até a linha da borda mais externa" msgid "Brim type" msgstr "Tipo de borda" -msgid "This controls the generation of the brim at outer and/or inner side of models. Auto means the brim width is analysed and calculated automatically." -msgstr "Isso controla a geração da borda no lado externo e/ou interno dos modelos. Automático significa que a largura da borda é analisada e calculada automaticamente." +msgid "" +"This controls the generation of the brim at outer and/or inner side of " +"models. Auto means the brim width is analysed and calculated automatically." +msgstr "" +"Isso controla a geração da borda no lado externo e/ou interno dos modelos. " +"Automático significa que a largura da borda é analisada e calculada " +"automaticamente." msgid "Brim-object gap" msgstr "Espaço entre a borda e objeto" -msgid "A gap between innermost brim line and object can make brim be removed more easily" -msgstr "Um espaço entre a linha da borda mais interna e o objeto pode facilitar a remoção da borda" +msgid "" +"A gap between innermost brim line and object can make brim be removed more " +"easily" +msgstr "" +"Um espaço entre a linha da borda mais interna e o objeto pode facilitar a " +"remoção da borda" msgid "Brim ears" msgstr "Orelhas da borda" @@ -8516,10 +9834,12 @@ msgid "Brim ear detection radius" msgstr "Raio de detecção da orelha da borda" msgid "" -"The geometry will be decimated before dectecting sharp angles. This parameter indicates the minimum length of the deviation for the decimation.\n" +"The geometry will be decimated before dectecting sharp angles. This " +"parameter indicates the minimum length of the deviation for the decimation.\n" "0 to deactivate" msgstr "" -"A geometria será decimada antes de detectar ângulos agudos. Este parâmetro indica o comprimento mínimo da divergência para a decimação.\n" +"A geometria será decimada antes de detectar ângulos agudos. Este parâmetro " +"indica o comprimento mínimo da divergência para a decimação.\n" "0 para desativar" msgid "Compatible machine" @@ -8558,14 +9878,27 @@ msgstr "Como lista de objetos" msgid "Slow printing down for better layer cooling" msgstr "Diminuir a velocidade de impressão para melhor resfriamento da camada" -msgid "Enable this option to slow printing speed down to make the final layer time not shorter than the layer time threshold in \"Max fan speed threshold\", so that layer can be cooled for longer time. This can improve the cooling quality for needle and small details" -msgstr "Ative esta opção para diminuir a velocidade de impressão para que o tempo da camada final não seja menor do que o limite de tempo da camada em \"Limiar de velocidade máxima do ventilador\", para que a camada possa ser resfriada por mais tempo. Isso pode melhorar a qualidade de resfriamento para detalhes pequenos" +msgid "" +"Enable this option to slow printing speed down to make the final layer time " +"not shorter than the layer time threshold in \"Max fan speed threshold\", so " +"that layer can be cooled for longer time. This can improve the cooling " +"quality for needle and small details" +msgstr "" +"Ative esta opção para diminuir a velocidade de impressão para que o tempo da " +"camada final não seja menor do que o limite de tempo da camada em \"Limiar " +"de velocidade máxima do ventilador\", para que a camada possa ser resfriada " +"por mais tempo. Isso pode melhorar a qualidade de resfriamento para detalhes " +"pequenos" msgid "Normal printing" msgstr "Impressão normal" -msgid "The default acceleration of both normal printing and travel except initial layer" -msgstr "A aceleração padrão tanto para a impressão normal quanto para o movimento, exceto na primeira camada" +msgid "" +"The default acceleration of both normal printing and travel except initial " +"layer" +msgstr "" +"A aceleração padrão tanto para a impressão normal quanto para o movimento, " +"exceto na primeira camada" msgid "mm/s²" msgstr "mm/s²" @@ -8586,13 +9919,18 @@ msgid "Activate air filtration" msgstr "Ativar filtragem de ar" msgid "Activate for better air filtration. G-code command: M106 P3 S(0-255)" -msgstr "Ative para uma melhor filtragem de ar. Comando G-code: M106 P3 S(0-255)" +msgstr "" +"Ative para uma melhor filtragem de ar. Comando G-code: M106 P3 S(0-255)" msgid "Fan speed" msgstr "Velocidade do ventilador" -msgid "Speed of exhaust fan during printing.This speed will overwrite the speed in filament custom gcode" -msgstr "Velocidade do ventilador de exaustão durante a impressão. Esta velocidade substituirá a velocidade no gcode personalizado do filamento" +msgid "" +"Speed of exhaust fan during printing.This speed will overwrite the speed in " +"filament custom gcode" +msgstr "" +"Velocidade do ventilador de exaustão durante a impressão. Esta velocidade " +"substituirá a velocidade no gcode personalizado do filamento" msgid "Speed of exhaust fan after printing completes" msgstr "Velocidade do ventilador de exaustão após a conclusão da impressão" @@ -8600,58 +9938,107 @@ msgstr "Velocidade do ventilador de exaustão após a conclusão da impressão" msgid "No cooling for the first" msgstr "Sem resfriamento para o primeiro" -msgid "Close all cooling fan for the first certain layers. Cooling fan of the first layer used to be closed to get better build plate adhesion" -msgstr "Feche todos os ventiladores de resfriamento para as primeiras camadas. O ventilador de resfriamento da primeira camada costuma ser desligado para obter uma melhor adesão à mesa" +msgid "" +"Close all cooling fan for the first certain layers. Cooling fan of the first " +"layer used to be closed to get better build plate adhesion" +msgstr "" +"Feche todos os ventiladores de resfriamento para as primeiras camadas. O " +"ventilador de resfriamento da primeira camada costuma ser desligado para " +"obter uma melhor adesão à mesa" msgid "Don't support bridges" msgstr "Não suportar pontes" -msgid "Don't support the whole bridge area which make support very large. Bridge usually can be printing directly without support if not very long" -msgstr "Não suportar toda a área da ponte que faz com que o suporte seja muito grande. Ponte geralmente pode ser impressa diretamente sem suporte se não for muito longa" +msgid "" +"Don't support the whole bridge area which make support very large. Bridge " +"usually can be printing directly without support if not very long" +msgstr "" +"Não suportar toda a área da ponte que faz com que o suporte seja muito " +"grande. Ponte geralmente pode ser impressa diretamente sem suporte se não " +"for muito longa" msgid "Thick bridges" msgstr "Ponte grossa" -msgid "If enabled, bridges are more reliable, can bridge longer distances, but may look worse. If disabled, bridges look better but are reliable just for shorter bridged distances." -msgstr "Se ativado, as pontes são mais confiáveis, podem cobrir distâncias maiores, mas podem parecer piores. Se desativado, as pontes ficam melhores, mas são confiáveis apenas para distâncias de ponte mais curtas." +msgid "" +"If enabled, bridges are more reliable, can bridge longer distances, but may " +"look worse. If disabled, bridges look better but are reliable just for " +"shorter bridged distances." +msgstr "" +"Se ativado, as pontes são mais confiáveis, podem cobrir distâncias maiores, " +"mas podem parecer piores. Se desativado, as pontes ficam melhores, mas são " +"confiáveis apenas para distâncias de ponte mais curtas." msgid "Thick internal bridges" msgstr "Ponte interna grossa" -msgid "If enabled, thick internal bridges will be used. It's usually recommended to have this feature turned on. However, consider turning it off if you are using large nozzles." -msgstr "Se ativado, serão usadas pontes internas grossas. Geralmente é recomendado ter este recurso ativado. No entanto, considere desativá-lo se estiver usando bocais grandes." +msgid "" +"If enabled, thick internal bridges will be used. It's usually recommended to " +"have this feature turned on. However, consider turning it off if you are " +"using large nozzles." +msgstr "" +"Se ativado, serão usadas pontes internas grossas. Geralmente é recomendado " +"ter este recurso ativado. No entanto, considere desativá-lo se estiver " +"usando bocais grandes." msgid "Don't filter out small internal bridges (beta)" msgstr "Não filtrar pequenas pontes internas (beta)" msgid "" -"This option can help reducing pillowing on top surfaces in heavily slanted or curved models.\n" +"This option can help reducing pillowing on top surfaces in heavily slanted " +"or curved models.\n" "\n" -"By default, small internal bridges are filtered out and the internal solid infill is printed directly over the sparse infill. This works well in most cases, speeding up printing without too much compromise on top surface quality. \n" +"By default, small internal bridges are filtered out and the internal solid " +"infill is printed directly over the sparse infill. This works well in most " +"cases, speeding up printing without too much compromise on top surface " +"quality. \n" "\n" -"However, in heavily slanted or curved models especially where too low sparse infill density is used, this may result in curling of the unsupported solid infill, causing pillowing.\n" +"However, in heavily slanted or curved models especially where too low sparse " +"infill density is used, this may result in curling of the unsupported solid " +"infill, causing pillowing.\n" "\n" -"Enabling this option will print internal bridge layer over slightly unsupported internal solid infill. The options below control the amount of filtering, i.e. the amount of internal bridges created.\n" +"Enabling this option will print internal bridge layer over slightly " +"unsupported internal solid infill. The options below control the amount of " +"filtering, i.e. the amount of internal bridges created.\n" "\n" -"Disabled - Disables this option. This is the default behaviour and works well in most cases.\n" +"Disabled - Disables this option. This is the default behaviour and works " +"well in most cases.\n" "\n" -"Limited filtering - Creates internal bridges on heavily slanted surfaces, while avoiding creating uncessesary interal bridges. This works well for most difficult models.\n" +"Limited filtering - Creates internal bridges on heavily slanted surfaces, " +"while avoiding creating uncessesary interal bridges. This works well for " +"most difficult models.\n" "\n" -"No filtering - Creates internal bridges on every potential internal overhang. This option is useful for heavily slanted top surface models. However, in most cases it creates too many unecessary bridges." +"No filtering - Creates internal bridges on every potential internal " +"overhang. This option is useful for heavily slanted top surface models. " +"However, in most cases it creates too many unecessary bridges." msgstr "" -"Esta opção pode ajudar a reduzir o pillowing nas superfícies superiores em modelos fortemente inclinados ou curvos.\n" +"Esta opção pode ajudar a reduzir o pillowing nas superfícies superiores em " +"modelos fortemente inclinados ou curvos.\n" "\n" -"Por padrão, pequenas pontes internas são filtradas e o preenchimento sólido interno é impresso diretamente sobre o preenchimento não sólido. Isso funciona bem na maioria dos casos, acelerando a impressão sem comprometer muito a qualidade da superfície superior. \n" +"Por padrão, pequenas pontes internas são filtradas e o preenchimento sólido " +"interno é impresso diretamente sobre o preenchimento não sólido. Isso " +"funciona bem na maioria dos casos, acelerando a impressão sem comprometer " +"muito a qualidade da superfície superior. \n" "\n" -"No entanto, em modelos fortemente inclinados ou curvos, especialmente quando a densidade de preenchimento não sólido é muito baixa, isso pode resultar em enrolamento do preenchimento sólido não suportado, causando pillowing.\n" +"No entanto, em modelos fortemente inclinados ou curvos, especialmente quando " +"a densidade de preenchimento não sólido é muito baixa, isso pode resultar em " +"enrolamento do preenchimento sólido não suportado, causando pillowing.\n" "\n" -"Ativar esta opção imprimirá uma camada de ponte interna sobre o preenchimento sólido interno ligeiramente não suportado. As opções abaixo controlam a quantidade de filtragem, ou seja, a quantidade de pontes internas criadas.\n" +"Ativar esta opção imprimirá uma camada de ponte interna sobre o " +"preenchimento sólido interno ligeiramente não suportado. As opções abaixo " +"controlam a quantidade de filtragem, ou seja, a quantidade de pontes " +"internas criadas.\n" "\n" -"Desativado - Desativa esta opção. Este é o comportamento padrão e funciona bem na maioria dos casos.\n" +"Desativado - Desativa esta opção. Este é o comportamento padrão e funciona " +"bem na maioria dos casos.\n" "\n" -"Filtragem limitada - Cria pontes internas em superfícies fortemente inclinadas, evitando a criação de pontes internas desnecessárias. Isso funciona bem para a maioria dos modelos difíceis.\n" +"Filtragem limitada - Cria pontes internas em superfícies fortemente " +"inclinadas, evitando a criação de pontes internas desnecessárias. Isso " +"funciona bem para a maioria dos modelos difíceis.\n" "\n" -"Sem filtragem - Cria pontes internas em cada inclinação interna potencial. Esta opção é útil para modelos com superfície superior fortemente inclinada. No entanto, na maioria dos casos, cria pontes desnecessárias demais." +"Sem filtragem - Cria pontes internas em cada inclinação interna potencial. " +"Esta opção é útil para modelos com superfície superior fortemente inclinada. " +"No entanto, na maioria dos casos, cria pontes desnecessárias demais." msgid "Disabled" msgstr "Desativado" @@ -8665,8 +10052,14 @@ msgstr "Sem filtragem" msgid "Max bridge length" msgstr "Distância de ponte máxima" -msgid "Max length of bridges that don't need support. Set it to 0 if you want all bridges to be supported, and set it to a very large value if you don't want any bridges to be supported." -msgstr "Comprimento máximo de pontes que não precisam de suporte. Defina-o como 0 se desejar que todas as pontes tenham suporte, e defina-o como um valor muito grande se não desejar que nenhuma ponte tenha suporte." +msgid "" +"Max length of bridges that don't need support. Set it to 0 if you want all " +"bridges to be supported, and set it to a very large value if you don't want " +"any bridges to be supported." +msgstr "" +"Comprimento máximo de pontes que não precisam de suporte. Defina-o como 0 se " +"desejar que todas as pontes tenham suporte, e defina-o como um valor muito " +"grande se não desejar que nenhuma ponte tenha suporte." msgid "End G-code" msgstr "G-code de finalização" @@ -8677,8 +10070,12 @@ msgstr "G-code de finalização ao terminar a impressão completa" msgid "Between Object Gcode" msgstr "G-code entre objetos" -msgid "Insert Gcode between objects. This parameter will only come into effect when you print your models object by object" -msgstr "Insira o G-code entre objetos. Este parâmetro só terá efeito quando você imprimir seus modelos objeto por objeto" +msgid "" +"Insert Gcode between objects. This parameter will only come into effect when " +"you print your models object by object" +msgstr "" +"Insira o G-code entre objetos. Este parâmetro só terá efeito quando você " +"imprimir seus modelos objeto por objeto" msgid "End G-code when finish the printing of this filament" msgstr "G-code de finalização ao terminar a impressão deste filamento" @@ -8687,18 +10084,25 @@ msgid "Ensure vertical shell thickness" msgstr "Garantir a espessura vertical do perímetro" msgid "" -"Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)\n" -"None: No solid infill will be added anywhere. Caution: Use this option carefully if your model has sloped surfaces\n" +"Add solid infill near sloping surfaces to guarantee the vertical shell " +"thickness (top+bottom solid layers)\n" +"None: No solid infill will be added anywhere. Caution: Use this option " +"carefully if your model has sloped surfaces\n" "Critical Only: Avoid adding solid infill for walls\n" "Moderate: Add solid infill for heavily sloping surfaces only\n" "All: Add solid infill for all suitable sloping surfaces\n" "Default value is All." msgstr "" -"Adicione preenchimento sólido próximo a superfícies inclinadas para garantir a espessura vertical (camadas de topo+base)\n" -"Nenhum: Nenhum preenchimento sólido será adicionado em nenhum lugar. Cuidado: Use esta opção com cuidado se o seu modelo tiver superfícies inclinadas\n" +"Adicione preenchimento sólido próximo a superfícies inclinadas para garantir " +"a espessura vertical (camadas de topo+base)\n" +"Nenhum: Nenhum preenchimento sólido será adicionado em nenhum lugar. " +"Cuidado: Use esta opção com cuidado se o seu modelo tiver superfícies " +"inclinadas\n" "Apenas crítico: Evite adicionar preenchimento sólido para paredes\n" -"Moderado: Adicione preenchimento sólido apenas para superfícies fortemente inclinadas\n" -"Todos: Adicione preenchimento sólido para todas as superfícies inclinadas adequadas\n" +"Moderado: Adicione preenchimento sólido apenas para superfícies fortemente " +"inclinadas\n" +"Todos: Adicione preenchimento sólido para todas as superfícies inclinadas " +"adequadas\n" "O valor padrão é Todos." msgid "Critical Only" @@ -8741,31 +10145,57 @@ msgid "Bottom surface pattern" msgstr "Padrão de superfície inferior" msgid "Line pattern of bottom surface infill, not bridge infill" -msgstr "Padrão de linha do preenchimento da superfície inferior, não do preenchimento da ponte" +msgstr "" +"Padrão de linha do preenchimento da superfície inferior, não do " +"preenchimento da ponte" msgid "Internal solid infill pattern" msgstr "Padrão de preenchimento sólido interno" -msgid "Line pattern of internal solid infill. if the detect narrow internal solid infill be enabled, the concentric pattern will be used for the small area." -msgstr "Padrão de linha do preenchimento sólido interno. Se a detecção de preenchimento sólido interno estreito estiver ativada, o padrão concêntrico será usado para a área pequena." +msgid "" +"Line pattern of internal solid infill. if the detect narrow internal solid " +"infill be enabled, the concentric pattern will be used for the small area." +msgstr "" +"Padrão de linha do preenchimento sólido interno. Se a detecção de " +"preenchimento sólido interno estreito estiver ativada, o padrão concêntrico " +"será usado para a área pequena." -msgid "Line width of outer wall. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura da linha do perímetro externo. Se expresso como porcentagem, será calculado sobre o diâmetro do bico." +msgid "" +"Line width of outer wall. If expressed as a %, it will be computed over the " +"nozzle diameter." +msgstr "" +"Largura da linha do perímetro externo. Se expresso como porcentagem, será " +"calculado sobre o diâmetro do bico." -msgid "Speed of outer wall which is outermost and visible. It's used to be slower than inner wall speed to get better quality." -msgstr "Velocidade do perímetro externo que é o mais externo e visível. Geralmente é mais lenta que a velocidade do perímetro interno para obter melhor qualidade." +msgid "" +"Speed of outer wall which is outermost and visible. It's used to be slower " +"than inner wall speed to get better quality." +msgstr "" +"Velocidade do perímetro externo que é o mais externo e visível. Geralmente é " +"mais lenta que a velocidade do perímetro interno para obter melhor qualidade." msgid "Small perimeters" msgstr "Pequenos perímetros" -msgid "This separate setting will affect the speed of perimeters having radius <= small_perimeter_threshold (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the outer wall speed setting above. Set to zero for auto." -msgstr "Essa configuração separada afetará a velocidade dos perímetros com raio <= small_perimeter_threshold (geralmente buracos). Se expresso como porcentagem (por exemplo: 80%), será calculado com base na configuração de velocidade do perímetro externo acima. Defina como zero para automático." +msgid "" +"This separate setting will affect the speed of perimeters having radius <= " +"small_perimeter_threshold (usually holes). If expressed as percentage (for " +"example: 80%) it will be calculated on the outer wall speed setting above. " +"Set to zero for auto." +msgstr "" +"Essa configuração separada afetará a velocidade dos perímetros com raio <= " +"small_perimeter_threshold (geralmente buracos). Se expresso como porcentagem " +"(por exemplo: 80%), será calculado com base na configuração de velocidade do " +"perímetro externo acima. Defina como zero para automático." msgid "Small perimeters threshold" msgstr "Limiar de pequenos perímetros" -msgid "This sets the threshold for small perimeter length. Default threshold is 0mm" -msgstr "Isso define o limite para o comprimento do perímetro pequeno. O limite padrão é 0mm" +msgid "" +"This sets the threshold for small perimeter length. Default threshold is 0mm" +msgstr "" +"Isso define o limite para o comprimento do perímetro pequeno. O limite " +"padrão é 0mm" msgid "Walls printing order" msgstr "Ordem de impressão dos perímetros" @@ -8773,21 +10203,49 @@ msgstr "Ordem de impressão dos perímetros" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" "\n" -"Use Inner/Outer for best overhangs. This is because the overhanging walls can adhere to a neighouring perimeter while printing. However, this option results in slightly reduced surface quality as the external perimeter is deformed by being squashed to the internal perimeter.\n" +"Use Inner/Outer for best overhangs. This is because the overhanging walls " +"can adhere to a neighouring perimeter while printing. However, this option " +"results in slightly reduced surface quality as the external perimeter is " +"deformed by being squashed to the internal perimeter.\n" "\n" -"Use Inner/Outer/Inner for the best external surface finish and dimensional accuracy as the external wall is printed undisturbed from an internal perimeter. However, overhang performance will reduce as there is no internal perimeter to print the external wall against. This option requires a minimum of 3 walls to be effective as it prints the internal walls from the 3rd perimeter onwards first, then the external perimeter and, finally, the first internal perimeter. This option is recomended against the Outer/Inner option in most cases. \n" +"Use Inner/Outer/Inner for the best external surface finish and dimensional " +"accuracy as the external wall is printed undisturbed from an internal " +"perimeter. However, overhang performance will reduce as there is no internal " +"perimeter to print the external wall against. This option requires a minimum " +"of 3 walls to be effective as it prints the internal walls from the 3rd " +"perimeter onwards first, then the external perimeter and, finally, the first " +"internal perimeter. This option is recomended against the Outer/Inner option " +"in most cases. \n" "\n" -"Use Outer/Inner for the same external wall quality and dimensional accuracy benefits of Inner/Outer/Inner option. However, the z seams will appear less consistent as the first extrusion of a new layer starts on a visible surface.\n" +"Use Outer/Inner for the same external wall quality and dimensional accuracy " +"benefits of Inner/Outer/Inner option. However, the z seams will appear less " +"consistent as the first extrusion of a new layer starts on a visible " +"surface.\n" "\n" " " msgstr "" "Sequência de impressão dos perímetros internos e externos. \n" "\n" -"Use Interior/Exterior para melhores overhangs. Isso ocorre porque os perímetros salientes podem aderir a um perímetro vizinho durante a impressão. No entanto, esta opção resulta em uma qualidade superficial ligeiramente reduzida, pois o perímetro externo é deformado ao ser esmagado pelo perímetro interno.\n" +"Use Interior/Exterior para melhores overhangs. Isso ocorre porque os " +"perímetros salientes podem aderir a um perímetro vizinho durante a " +"impressão. No entanto, esta opção resulta em uma qualidade superficial " +"ligeiramente reduzida, pois o perímetro externo é deformado ao ser esmagado " +"pelo perímetro interno.\n" "\n" -"Use Interior/Exterior/Interior para o melhor acabamento superficial externo e precisão dimensional, pois o perímetro externo é impresso sem interrupções a partir de um perímetro interno. No entanto, o desempenho da inclinaçãoserá reduzido, pois não há perímetro interno para imprimir o perímetro externo. Esta opção requer um mínimo de 3 perímetros para ser eficaz, pois imprime os perímetros internos a partir do terceiro perímetro em diante primeiro, depois o perímetro externo e, por fim, o primeiro perímetro interno. Esta opção é recomendada em relação à opção Exterior/Interior na maioria dos casos. \n" +"Use Interior/Exterior/Interior para o melhor acabamento superficial externo " +"e precisão dimensional, pois o perímetro externo é impresso sem interrupções " +"a partir de um perímetro interno. No entanto, o desempenho da inclinaçãoserá " +"reduzido, pois não há perímetro interno para imprimir o perímetro externo. " +"Esta opção requer um mínimo de 3 perímetros para ser eficaz, pois imprime os " +"perímetros internos a partir do terceiro perímetro em diante primeiro, " +"depois o perímetro externo e, por fim, o primeiro perímetro interno. Esta " +"opção é recomendada em relação à opção Exterior/Interior na maioria dos " +"casos. \n" "\n" -"Use Exterior/Interior para obter os mesmos benefícios de qualidade de parede externa e precisão dimensional da opção Interior/Exterior/Interior. No entanto, as costuras z aparecerão menos consistentes, pois a primeira extrusão de uma nova camada começa em uma superfície visível.\n" +"Use Exterior/Interior para obter os mesmos benefícios de qualidade de parede " +"externa e precisão dimensional da opção Interior/Exterior/Interior. No " +"entanto, as costuras z aparecerão menos consistentes, pois a primeira " +"extrusão de uma nova camada começa em uma superfície visível.\n" "\n" " " @@ -8804,27 +10262,45 @@ msgid "Print infill first" msgstr "Preenchimento primeiro" msgid "" -"Order of wall/infill. When the tickbox is unchecked the walls are printed first, which works best in most cases.\n" +"Order of wall/infill. When the tickbox is unchecked the walls are printed " +"first, which works best in most cases.\n" "\n" -"Printing walls first may help with extreme overhangs as the walls have the neighbouring infill to adhere to. However, the infill will slighly push out the printed walls where it is attached to them, resulting in a worse external surface finish. It can also cause the infill to shine through the external surfaces of the part." +"Printing walls first may help with extreme overhangs as the walls have the " +"neighbouring infill to adhere to. However, the infill will slighly push out " +"the printed walls where it is attached to them, resulting in a worse " +"external surface finish. It can also cause the infill to shine through the " +"external surfaces of the part." msgstr "" -"Ordem de perímetro/preenchimento. Quando a caixa de seleção não está marcada, as paredes são impressas primeiro, o que funciona melhor na maioria dos casos.\n" +"Ordem de perímetro/preenchimento. Quando a caixa de seleção não está " +"marcada, as paredes são impressas primeiro, o que funciona melhor na maioria " +"dos casos.\n" "\n" -"Imprimir as paredes primeiro pode ajudar com overhangs extremos, pois as paredes têm o preenchimento vizinho para aderir. No entanto, o preenchimento empurrará levemente as paredes impressas onde está conectado a elas, resultando em um acabamento de superfície externa pior. Também pode fazer com que o preenchimento apareça através das superfícies externas da peça." +"Imprimir as paredes primeiro pode ajudar com overhangs extremos, pois as " +"paredes têm o preenchimento vizinho para aderir. No entanto, o preenchimento " +"empurrará levemente as paredes impressas onde está conectado a elas, " +"resultando em um acabamento de superfície externa pior. Também pode fazer " +"com que o preenchimento apareça através das superfícies externas da peça." msgid "Wall loop direction" msgstr "Direção da volta do perímetro" msgid "" -"The direction which the wall loops are extruded when looking down from the top.\n" +"The direction which the wall loops are extruded when looking down from the " +"top.\n" "\n" -"By default all walls are extruded in counter-clockwise, unless Reverse on odd is enabled. Set this to any option other than Auto will force the wall direction regardless of the Reverse on odd.\n" +"By default all walls are extruded in counter-clockwise, unless Reverse on " +"odd is enabled. Set this to any option other than Auto will force the wall " +"direction regardless of the Reverse on odd.\n" "\n" "This option will be disabled if sprial vase mode is enabled." msgstr "" -"A direção na qual os loops da perímetro são extrudados quando vistos de cima.\n" +"A direção na qual os loops da perímetro são extrudados quando vistos de " +"cima.\n" "\n" -"Por padrão, todas as paredes são extrudadas no sentido anti-horário, a menos que o Reverso em ímpar esteja ativado. Definir isso como qualquer opção que não seja Automático forçará a direção do perímetro, independentemente do Reverso em ímpar.\n" +"Por padrão, todas as paredes são extrudadas no sentido anti-horário, a menos " +"que o Reverso em ímpar esteja ativado. Definir isso como qualquer opção que " +"não seja Automático forçará a direção do perímetro, independentemente do " +"Reverso em ímpar.\n" "\n" "Esta opção será desativada se o modo de vaso espiral estiver ativado." @@ -8837,17 +10313,29 @@ msgstr "Sentido horário" msgid "Height to rod" msgstr "Altura até a haste" -msgid "Distance of the nozzle tip to the lower rod. Used for collision avoidance in by-object printing." -msgstr "Distância da ponta do bico ao tubo inferior. Usado para evitar colisões na impressão por objeto." +msgid "" +"Distance of the nozzle tip to the lower rod. Used for collision avoidance in " +"by-object printing." +msgstr "" +"Distância da ponta do bico ao tubo inferior. Usado para evitar colisões na " +"impressão por objeto." msgid "Height to lid" msgstr "Altura até a tampa" -msgid "Distance of the nozzle tip to the lid. Used for collision avoidance in by-object printing." -msgstr "Distância da ponta do bico à tampa. Usado para evitar colisões na impressão por objeto." +msgid "" +"Distance of the nozzle tip to the lid. Used for collision avoidance in by-" +"object printing." +msgstr "" +"Distância da ponta do bico à tampa. Usado para evitar colisões na impressão " +"por objeto." -msgid "Clearance radius around extruder. Used for collision avoidance in by-object printing." -msgstr "Raio de folga ao redor do extrusor. Usado para evitar colisões na impressão por objeto." +msgid "" +"Clearance radius around extruder. Used for collision avoidance in by-object " +"printing." +msgstr "" +"Raio de folga ao redor do extrusor. Usado para evitar colisões na impressão " +"por objeto." msgid "Nozzle height" msgstr "Altura do bico" @@ -8858,26 +10346,69 @@ msgstr "Altura da ponta do bico" msgid "Bed mesh min" msgstr "Mínimo do bed mesh" -msgid "This option sets the min point for the allowed bed mesh area. Due to the probe's XY offset, most printers are unable to probe the entire bed. To ensure the probe point does not go outside the bed area, the minimum and maximum points of the bed mesh should be set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max points. This information can usually be obtained from your printer manufacturer. The default setting is (-99999, -99999), which means there are no limits, thus allowing probing across the entire bed." -msgstr "Esta opção define o ponto mínimo para a área permitida do bed mesh. Devido ao deslocamento XY da sonda, a maioria das impressoras não consegue sondar toda a mesa. Para garantir que o ponto da sonda não saia da área da mesa, os pontos mínimo e máximo do bed mesh devem ser configurados adequadamente. O OrcaSlicer garante que os valores adaptive_bed_mesh_min/adaptive_bed_mesh_max não excedam esses pontos mínimo/máximo. Essas informações geralmente podem ser obtidas com o fabricante da sua impressora. A configuração padrão é (-99999, -99999), o que significa que não há limites, permitindo a sondagem em toda a mesa." +msgid "" +"This option sets the min point for the allowed bed mesh area. Due to the " +"probe's XY offset, most printers are unable to probe the entire bed. To " +"ensure the probe point does not go outside the bed area, the minimum and " +"maximum points of the bed mesh should be set appropriately. OrcaSlicer " +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " +"exceed these min/max points. This information can usually be obtained from " +"your printer manufacturer. The default setting is (-99999, -99999), which " +"means there are no limits, thus allowing probing across the entire bed." +msgstr "" +"Esta opção define o ponto mínimo para a área permitida do bed mesh. Devido " +"ao deslocamento XY da sonda, a maioria das impressoras não consegue sondar " +"toda a mesa. Para garantir que o ponto da sonda não saia da área da mesa, os " +"pontos mínimo e máximo do bed mesh devem ser configurados adequadamente. O " +"OrcaSlicer garante que os valores adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max não excedam esses pontos mínimo/máximo. Essas " +"informações geralmente podem ser obtidas com o fabricante da sua impressora. " +"A configuração padrão é (-99999, -99999), o que significa que não há " +"limites, permitindo a sondagem em toda a mesa." msgid "Bed mesh max" msgstr "Máximo do bed mesh" -msgid "This option sets the max point for the allowed bed mesh area. Due to the probe's XY offset, most printers are unable to probe the entire bed. To ensure the probe point does not go outside the bed area, the minimum and maximum points of the bed mesh should be set appropriately. OrcaSlicer ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed these min/max points. This information can usually be obtained from your printer manufacturer. The default setting is (99999, 99999), which means there are no limits, thus allowing probing across the entire bed." -msgstr "Esta opção define o ponto máximo para a área permitida do bed mesh. Devido ao deslocamento XY da sonda, a maioria das impressoras não consegue sondar toda a mesa. Para garantir que o ponto da sonda não saia da área da mesa, os pontos mínimo e máximo do bed mesh devem ser configurados adequadamente. O OrcaSlicer garante que os valores adaptive_bed_mesh_min/adaptive_bed_mesh_max não excedam esses pontos mínimo/máximo. Essas informações geralmente podem ser obtidas com o fabricante da sua impressora. A configuração padrão é (99999, 99999), o que significa que não há limites, permitindo a sondagem em toda a mesa." +msgid "" +"This option sets the max point for the allowed bed mesh area. Due to the " +"probe's XY offset, most printers are unable to probe the entire bed. To " +"ensure the probe point does not go outside the bed area, the minimum and " +"maximum points of the bed mesh should be set appropriately. OrcaSlicer " +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " +"exceed these min/max points. This information can usually be obtained from " +"your printer manufacturer. The default setting is (99999, 99999), which " +"means there are no limits, thus allowing probing across the entire bed." +msgstr "" +"Esta opção define o ponto máximo para a área permitida do bed mesh. Devido " +"ao deslocamento XY da sonda, a maioria das impressoras não consegue sondar " +"toda a mesa. Para garantir que o ponto da sonda não saia da área da mesa, os " +"pontos mínimo e máximo do bed mesh devem ser configurados adequadamente. O " +"OrcaSlicer garante que os valores adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max não excedam esses pontos mínimo/máximo. Essas " +"informações geralmente podem ser obtidas com o fabricante da sua impressora. " +"A configuração padrão é (99999, 99999), o que significa que não há limites, " +"permitindo a sondagem em toda a mesa." msgid "Probe point distance" msgstr "Distância entre pontos de sonda" -msgid "This option sets the preferred distance between probe points (grid size) for the X and Y directions, with the default being 50mm for both X and Y." -msgstr "Esta opção define a distância preferencial entre pontos de sonda (tamanho da grade) para as direções X e Y, sendo o padrão 50mm para ambas as direções X e Y." +msgid "" +"This option sets the preferred distance between probe points (grid size) for " +"the X and Y directions, with the default being 50mm for both X and Y." +msgstr "" +"Esta opção define a distância preferencial entre pontos de sonda (tamanho da " +"grade) para as direções X e Y, sendo o padrão 50mm para ambas as direções X " +"e Y." msgid "Mesh margin" msgstr "Margem da malha" -msgid "This option determines the additional distance by which the adaptive bed mesh area should be expanded in the XY directions." -msgstr "Esta opção determina a distância adicional pela qual a área do bed mesh adaptável deve ser expandida nas direções XY." +msgid "" +"This option determines the additional distance by which the adaptive bed " +"mesh area should be expanded in the XY directions." +msgstr "" +"Esta opção determina a distância adicional pela qual a área do bed mesh " +"adaptável deve ser expandida nas direções XY." msgid "Extruder Color" msgstr "Cor do extrusor" @@ -8891,32 +10422,63 @@ msgstr "Deslocamento do extrusor" msgid "Flow ratio" msgstr "Fluxo" -msgid "The material may have volumetric change after switching between molten state and crystalline state. This setting changes all extrusion flow of this filament in gcode proportionally. Recommended value range is between 0.95 and 1.05. Maybe you can tune this value to get nice flat surface when there has slight overflow or underflow" -msgstr "O material pode ter mudança volumétrica após a troca entre o estado fundido e o estado cristalino. Esta configuração altera todo o fluxo de extrusão deste filamento no gcode proporcionalmente. A faixa de valores recomendada está entre 0.95 e 1.05. Talvez você possa ajustar esse valor para obter uma superfície plana agradável quando houver um leve transbordamento ou subfluxo" +msgid "" +"The material may have volumetric change after switching between molten state " +"and crystalline state. This setting changes all extrusion flow of this " +"filament in gcode proportionally. Recommended value range is between 0.95 " +"and 1.05. Maybe you can tune this value to get nice flat surface when there " +"has slight overflow or underflow" +msgstr "" +"O material pode ter mudança volumétrica após a troca entre o estado fundido " +"e o estado cristalino. Esta configuração altera todo o fluxo de extrusão " +"deste filamento no gcode proporcionalmente. A faixa de valores recomendada " +"está entre 0.95 e 1.05. Talvez você possa ajustar esse valor para obter uma " +"superfície plana agradável quando houver um leve transbordamento ou subfluxo" msgid "Enable pressure advance" msgstr "Habilitar Pressure advance" -msgid "Enable pressure advance, auto calibration result will be overwriten once enabled." -msgstr "Habilitar Pressure advance, o resultado da calibração automática será sobrescrito uma vez habilitado." +msgid "" +"Enable pressure advance, auto calibration result will be overwriten once " +"enabled." +msgstr "" +"Habilitar Pressure advance, o resultado da calibração automática será " +"sobrescrito uma vez habilitado." msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" -msgstr "Pressure advance(Klipper) também conhecido como Linear advance factor(Marlin)" +msgstr "" +"Pressure advance(Klipper) também conhecido como Linear advance factor(Marlin)" -msgid "Default line width if other line widths are set to 0. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura de linha padrão se outras larguras de linha estiverem definidas como 0. Se expresso como %, será calculado sobre o diâmetro do bico." +msgid "" +"Default line width if other line widths are set to 0. If expressed as a %, " +"it will be computed over the nozzle diameter." +msgstr "" +"Largura de linha padrão se outras larguras de linha estiverem definidas como " +"0. Se expresso como %, será calculado sobre o diâmetro do bico." msgid "Keep fan always on" msgstr "Manter o ventilador sempre ligado" -msgid "If enable this setting, part cooling fan will never be stoped and will run at least at minimum speed to reduce the frequency of starting and stoping" -msgstr "Se habilitar esta configuração, o ventilador de resfriamento da peça nunca será desligado e funcionará pelo menos na velocidade mínima para reduzir a frequência de início e parada" +msgid "" +"If enable this setting, part cooling fan will never be stoped and will run " +"at least at minimum speed to reduce the frequency of starting and stoping" +msgstr "" +"Se habilitar esta configuração, o ventilador de resfriamento da peça nunca " +"será desligado e funcionará pelo menos na velocidade mínima para reduzir a " +"frequência de início e parada" msgid "Layer time" msgstr "Tempo da camada" -msgid "Part cooling fan will be enabled for layers of which estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time" -msgstr "O ventilador de resfriamento da peça será ativado para camadas cujo tempo estimado seja menor que esse valor. A velocidade do ventilador é interpolada entre as velocidades mínima e máxima do ventilador de acordo com o tempo de impressão da camada" +msgid "" +"Part cooling fan will be enabled for layers of which estimated time is " +"shorter than this value. Fan speed is interpolated between the minimum and " +"maximum fan speeds according to layer printing time" +msgstr "" +"O ventilador de resfriamento da peça será ativado para camadas cujo tempo " +"estimado seja menor que esse valor. A velocidade do ventilador é interpolada " +"entre as velocidades mínima e máxima do ventilador de acordo com o tempo de " +"impressão da camada" msgid "Default color" msgstr "Cor padrão" @@ -8933,11 +10495,22 @@ msgstr "Você pode colocar suas observações sobre o filamento aqui." msgid "Required nozzle HRC" msgstr "HRC do bico requerido" -msgid "Minimum HRC of nozzle required to print the filament. Zero means no checking of nozzle's HRC." -msgstr "HRC mínimo do bico necessário para imprimir o filamento. Zero significa que não há verificação do HRC do bico." +msgid "" +"Minimum HRC of nozzle required to print the filament. Zero means no checking " +"of nozzle's HRC." +msgstr "" +"HRC mínimo do bico necessário para imprimir o filamento. Zero significa que " +"não há verificação do HRC do bico." -msgid "This setting stands for how much volume of filament can be melted and extruded per second. Printing speed is limited by max volumetric speed, in case of too high and unreasonable speed setting. Can't be zero" -msgstr "Essa configuração representa quanto volume de filamento pode ser derretido e extrudado por segundo. A velocidade de impressão é limitada pela fluxo volumétrico máximo, no caso de configurações de velocidade muito altas e irrazoáveis. Não pode ser zero" +msgid "" +"This setting stands for how much volume of filament can be melted and " +"extruded per second. Printing speed is limited by max volumetric speed, in " +"case of too high and unreasonable speed setting. Can't be zero" +msgstr "" +"Essa configuração representa quanto volume de filamento pode ser derretido e " +"extrudado por segundo. A velocidade de impressão é limitada pela fluxo " +"volumétrico máximo, no caso de configurações de velocidade muito altas e " +"irrazoáveis. Não pode ser zero" msgid "mm³/s" msgstr "mm³/s" @@ -8946,27 +10519,42 @@ msgid "Filament load time" msgstr "Tempo de carga do filamento" msgid "Time to load new filament when switch filament. For statistics only" -msgstr "Tempo para carregar novo filamento ao trocar de filamento. Apenas para estatísticas" +msgstr "" +"Tempo para carregar novo filamento ao trocar de filamento. Apenas para " +"estatísticas" msgid "Filament unload time" msgstr "Tempo de descarga do filamento" msgid "Time to unload old filament when switch filament. For statistics only" -msgstr "Tempo para descarregar o filamento antigo ao trocar de filamento. Apenas para estatísticas" +msgstr "" +"Tempo para descarregar o filamento antigo ao trocar de filamento. Apenas " +"para estatísticas" -msgid "Filament diameter is used to calculate extrusion in gcode, so it's important and should be accurate" -msgstr "O diâmetro do filamento é usado para calcular a extrusão no gcode, portanto, é importante e deve ser preciso" +msgid "" +"Filament diameter is used to calculate extrusion in gcode, so it's important " +"and should be accurate" +msgstr "" +"O diâmetro do filamento é usado para calcular a extrusão no gcode, portanto, " +"é importante e deve ser preciso" msgid "Shrinkage" msgstr "Retração" #, no-c-format, no-boost-format msgid "" -"Enter the shrinkage percentage that the filament will get after cooling (94% if you measure 94mm instead of 100mm). The part will be scaled in xy to compensate. Only the filament used for the perimeter is taken into account.\n" -"Be sure to allow enough space between objects, as this compensation is done after the checks." +"Enter the shrinkage percentage that the filament will get after cooling (94% " +"if you measure 94mm instead of 100mm). The part will be scaled in xy to " +"compensate. Only the filament used for the perimeter is taken into account.\n" +"Be sure to allow enough space between objects, as this compensation is done " +"after the checks." msgstr "" -"Informe a porcentagem de retração que o filamento terá após o resfriamento (94% se você medir 94mm em vez de 100mm). A peça será escalada em xy para compensar. Apenas o filamento usado para o perímetro é levado em consideração.\n" -"Certifique-se de permitir espaço suficiente entre objetos, pois essa compensação é feita após as verificações." +"Informe a porcentagem de retração que o filamento terá após o resfriamento " +"(94% se você medir 94mm em vez de 100mm). A peça será escalada em xy para " +"compensar. Apenas o filamento usado para o perímetro é levado em " +"consideração.\n" +"Certifique-se de permitir espaço suficiente entre objetos, pois essa " +"compensação é feita após as verificações." msgid "Loading speed" msgstr "Velocidade de carregamento" @@ -8983,62 +10571,121 @@ msgstr "Velocidade usada no início da fase de carregamento." msgid "Unloading speed" msgstr "Velocidade de descarregamento" -msgid "Speed used for unloading the filament on the wipe tower (does not affect initial part of unloading just after ramming)." -msgstr "Velocidade usada para descarregar o filamento na torre de limpeza (não afeta a parte inicial do descarregamento logo após o esmagamento)." +msgid "" +"Speed used for unloading the filament on the wipe tower (does not affect " +"initial part of unloading just after ramming)." +msgstr "" +"Velocidade usada para descarregar o filamento na torre de limpeza (não afeta " +"a parte inicial do descarregamento logo após o esmagamento)." msgid "Unloading speed at the start" msgstr "Velocidade de descarregamento no início" -msgid "Speed used for unloading the tip of the filament immediately after ramming." -msgstr "Velocidade usada para descarregar a ponta do filamento imediatamente após o esmagamento." +msgid "" +"Speed used for unloading the tip of the filament immediately after ramming." +msgstr "" +"Velocidade usada para descarregar a ponta do filamento imediatamente após o " +"esmagamento." msgid "Delay after unloading" msgstr "Atraso após o descarregamento" -msgid "Time to wait after the filament is unloaded. May help to get reliable toolchanges with flexible materials that may need more time to shrink to original dimensions." -msgstr "Tempo de espera após o filamento ser descarregado. Pode ajudar a obter trocas de ferramentas confiáveis com materiais flexíveis que podem precisar de mais tempo para encolher para as dimensões originais." +msgid "" +"Time to wait after the filament is unloaded. May help to get reliable " +"toolchanges with flexible materials that may need more time to shrink to " +"original dimensions." +msgstr "" +"Tempo de espera após o filamento ser descarregado. Pode ajudar a obter " +"trocas de ferramentas confiáveis com materiais flexíveis que podem precisar " +"de mais tempo para encolher para as dimensões originais." msgid "Number of cooling moves" msgstr "Número de movimentos de resfriamento" -msgid "Filament is cooled by being moved back and forth in the cooling tubes. Specify desired number of these moves." -msgstr "O filamento é resfriado movendo-se para frente e para trás nos tubos de resfriamento. Especifique o número desejado desses movimentos." +msgid "" +"Filament is cooled by being moved back and forth in the cooling tubes. " +"Specify desired number of these moves." +msgstr "" +"O filamento é resfriado movendo-se para frente e para trás nos tubos de " +"resfriamento. Especifique o número desejado desses movimentos." msgid "Speed of the first cooling move" msgstr "Velocidade do primeiro movimento de resfriamento" msgid "Cooling moves are gradually accelerating beginning at this speed." -msgstr "Os movimentos de resfriamento estão gradualmente acelerando a partir desta velocidade." +msgstr "" +"Os movimentos de resfriamento estão gradualmente acelerando a partir desta " +"velocidade." msgid "Minimal purge on wipe tower" msgstr "Purga mínima na torre de limpeza" -msgid "After a tool change, the exact position of the newly loaded filament inside the nozzle may not be known, and the filament pressure is likely not yet stable. Before purging the print head into an infill or a sacrificial object, Orca Slicer will always prime this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably." -msgstr "Após uma troca de ferramenta, a posição exata do filamento recém-carregado dentro do bico pode não ser conhecida e a pressão do filamento provavelmente ainda não está estável. Antes de purgar a cabeça de impressão em um preenchimento ou objeto sacrificial, o Orca Slicer sempre irá primear essa quantidade de material na torre de limpeza para produzir extrusões de preenchimento ou objeto sacrificial sucessivas de forma confiável." +msgid "" +"After a tool change, the exact position of the newly loaded filament inside " +"the nozzle may not be known, and the filament pressure is likely not yet " +"stable. Before purging the print head into an infill or a sacrificial " +"object, Orca Slicer will always prime this amount of material into the wipe " +"tower to produce successive infill or sacrificial object extrusions reliably." +msgstr "" +"Após uma troca de ferramenta, a posição exata do filamento recém-carregado " +"dentro do bico pode não ser conhecida e a pressão do filamento provavelmente " +"ainda não está estável. Antes de purgar a cabeça de impressão em um " +"preenchimento ou objeto sacrificial, o Orca Slicer sempre irá primear essa " +"quantidade de material na torre de limpeza para produzir extrusões de " +"preenchimento ou objeto sacrificial sucessivas de forma confiável." msgid "Speed of the last cooling move" msgstr "Velocidade do último movimento de resfriamento" msgid "Cooling moves are gradually accelerating towards this speed." -msgstr "Os movimentos de resfriamento estão gradualmente acelerando em direção a esta velocidade." +msgstr "" +"Os movimentos de resfriamento estão gradualmente acelerando em direção a " +"esta velocidade." -msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator." -msgstr "Tempo para o firmware da impressora (ou a Unidade de Material Multi 2.0) carregar um novo filamento durante uma troca de ferramenta (ao executar o código T). Este tempo é adicionado ao tempo total de impressão pelo estimador de tempo do G-code." +msgid "" +"Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " +"filament during a tool change (when executing the T code). This time is " +"added to the total print time by the G-code time estimator." +msgstr "" +"Tempo para o firmware da impressora (ou a Unidade de Material Multi 2.0) " +"carregar um novo filamento durante uma troca de ferramenta (ao executar o " +"código T). Este tempo é adicionado ao tempo total de impressão pelo " +"estimador de tempo do G-code." msgid "Ramming parameters" msgstr "Parâmetros de esmagamento" -msgid "This string is edited by RammingDialog and contains ramming specific parameters." -msgstr "Esta frase é editada pelo RammingDialog e contém parâmetros específicos de esmagamento." +msgid "" +"This string is edited by RammingDialog and contains ramming specific " +"parameters." +msgstr "" +"Esta frase é editada pelo RammingDialog e contém parâmetros específicos de " +"esmagamento." -msgid "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator." -msgstr "Tempo para o firmware da impressora (ou a Unidade de Material Multi 2.0) descarregar um filamento durante uma troca de ferramenta (ao executar o código T). Este tempo é adicionado ao tempo total de impressão pelo estimador de tempo do G-code." +msgid "" +"Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " +"filament during a tool change (when executing the T code). This time is " +"added to the total print time by the G-code time estimator." +msgstr "" +"Tempo para o firmware da impressora (ou a Unidade de Material Multi 2.0) " +"descarregar um filamento durante uma troca de ferramenta (ao executar o " +"código T). Este tempo é adicionado ao tempo total de impressão pelo " +"estimador de tempo do G-code." msgid "Enable ramming for multitool setups" msgstr "Habilitar esmagamento para configurações de várias ferramentas" -msgid "Perform ramming when using multitool printer (i.e. when the 'Single Extruder Multimaterial' in Printer Settings is unchecked). When checked, a small amount of filament is rapidly extruded on the wipe tower just before the toolchange. This option is only used when the wipe tower is enabled." -msgstr "Realizar esmagamento ao usar impressora multitool (ou seja, quando a opção 'Único Extrusor Multimaterial' em Configurações de Impressora está desmarcada). Quando ativado, uma pequena quantidade de filamento é rapidamente extrudada na torre de limpeza logo antes da troca de ferramenta. Esta opção é usada apenas quando a torre de limpeza está habilitada." +msgid "" +"Perform ramming when using multitool printer (i.e. when the 'Single Extruder " +"Multimaterial' in Printer Settings is unchecked). When checked, a small " +"amount of filament is rapidly extruded on the wipe tower just before the " +"toolchange. This option is only used when the wipe tower is enabled." +msgstr "" +"Realizar esmagamento ao usar impressora multitool (ou seja, quando a opção " +"'Único Extrusor Multimaterial' em Configurações de Impressora está " +"desmarcada). Quando ativado, uma pequena quantidade de filamento é " +"rapidamente extrudada na torre de limpeza logo antes da troca de ferramenta. " +"Esta opção é usada apenas quando a torre de limpeza está habilitada." msgid "Multitool ramming volume" msgstr "Volume de esmagamento multitool" @@ -9067,20 +10714,32 @@ msgstr "O tipo de material do filamento" msgid "Soluble material" msgstr "Material solúvel" -msgid "Soluble material is commonly used to print support and support interface" -msgstr "O material solúvel é comumente usado para imprimir suporte e interface de suporte" +msgid "" +"Soluble material is commonly used to print support and support interface" +msgstr "" +"O material solúvel é comumente usado para imprimir suporte e interface de " +"suporte" msgid "Support material" msgstr "Material de suporte" -msgid "Support material is commonly used to print support and support interface" -msgstr "O material de suporte é comumente usado para imprimir suporte e interface de suporte" +msgid "" +"Support material is commonly used to print support and support interface" +msgstr "" +"O material de suporte é comumente usado para imprimir suporte e interface de " +"suporte" msgid "Softening temperature" msgstr "Temperatura de amolecimento" -msgid "The material softens at this temperature, so when the bed temperature is equal to or greater than it, it's highly recommended to open the front door and/or remove the upper glass to avoid cloggings." -msgstr "O material amolece a esta temperatura, portanto, quando a temperatura da mesa for igual ou maior que ela, é altamente recomendável abrir a porta da frente e/ou remover o vidro superior para evitar entupimentos." +msgid "" +"The material softens at this temperature, so when the bed temperature is " +"equal to or greater than it, it's highly recommended to open the front door " +"and/or remove the upper glass to avoid cloggings." +msgstr "" +"O material amolece a esta temperatura, portanto, quando a temperatura da " +"mesa for igual ou maior que ela, é altamente recomendável abrir a porta da " +"frente e/ou remover o vidro superior para evitar entupimentos." msgid "Price" msgstr "Preço" @@ -9103,15 +10762,24 @@ msgstr "(Indefinido)" msgid "Infill direction" msgstr "Direção de preenchimento" -msgid "Angle for sparse infill pattern, which controls the start or main direction of line" -msgstr "Ângulo para o padrão de preenchimento não sólido, que controla o início ou a direção principal da linha" +msgid "" +"Angle for sparse infill pattern, which controls the start or main direction " +"of line" +msgstr "" +"Ângulo para o padrão de preenchimento não sólido, que controla o início ou a " +"direção principal da linha" msgid "Sparse infill density" msgstr "Densidade do preenchimento" #, no-c-format, no-boost-format -msgid "Density of internal sparse infill, 100% turns all sparse infill into solid infill and internal solid infill pattern will be used" -msgstr "Densidade do preenchimento não sólido interno, 100% transforma todo o preenchimento não sólido em preenchimento sólido e será usado o padrão de preenchimento sólido interno" +msgid "" +"Density of internal sparse infill, 100% turns all sparse infill into solid " +"infill and internal solid infill pattern will be used" +msgstr "" +"Densidade do preenchimento não sólido interno, 100% transforma todo o " +"preenchimento não sólido em preenchimento sólido e será usado o padrão de " +"preenchimento sólido interno" msgid "Sparse infill pattern" msgstr "Padrão de preenchimento" @@ -9149,15 +10817,35 @@ msgstr "Cúbico de Suporte" msgid "Lightning" msgstr "Relâmpago" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Comp. da âncora de preenchimento" msgid "" -"Connect an infill line to an internal perimeter with a short segment of an additional perimeter. If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max. \n" -"Set this parameter to zero to disable anchoring perimeters connected to a single infill line." +"Connect an infill line to an internal perimeter with a short segment of an " +"additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than infill_anchor_max is found, the infill line is " +"connected to a perimeter segment at just one side and the length of the " +"perimeter segment taken is limited to this parameter, but no longer than " +"anchor_length_max. \n" +"Set this parameter to zero to disable anchoring perimeters connected to a " +"single infill line." msgstr "" -"Conecte uma linha de preenchimento a um perímetro interno com um segmento curto de um perímetro adicional. Se expresso como porcentagem (exemplo: 15%), é calculado sobre a largura de extrusão do preenchimento. O Orca Slicer tenta conectar duas linhas de preenchimento próximas a um segmento curto de perímetro. Se nenhum segmento de perímetro mais curto que infill_anchor_max for encontrado, a linha de preenchimento é conectada a um segmento de perímetro em apenas um lado e o comprimento do segmento de perímetro tomado é limitado a este parâmetro, mas não mais do que anchor_length_max. \n" -"Defina este parâmetro como zero para desabilitar os perímetros de ancoragem conectados a uma única linha de preenchimento." +"Conecte uma linha de preenchimento a um perímetro interno com um segmento " +"curto de um perímetro adicional. Se expresso como porcentagem (exemplo: " +"15%), é calculado sobre a largura de extrusão do preenchimento. O Orca " +"Slicer tenta conectar duas linhas de preenchimento próximas a um segmento " +"curto de perímetro. Se nenhum segmento de perímetro mais curto que " +"infill_anchor_max for encontrado, a linha de preenchimento é conectada a um " +"segmento de perímetro em apenas um lado e o comprimento do segmento de " +"perímetro tomado é limitado a este parâmetro, mas não mais do que " +"anchor_length_max. \n" +"Defina este parâmetro como zero para desabilitar os perímetros de ancoragem " +"conectados a uma única linha de preenchimento." msgid "0 (no open anchors)" msgstr "0 (sem ancoras abertas)" @@ -9169,11 +10857,27 @@ msgid "Maximum length of the infill anchor" msgstr "Comp. máx. da âncora de preench." msgid "" -"Connect an infill line to an internal perimeter with a short segment of an additional perimeter. If expressed as percentage (example: 15%) it is calculated over infill extrusion width. Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter. \n" -"If set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0." +"Connect an infill line to an internal perimeter with a short segment of an " +"additional perimeter. If expressed as percentage (example: 15%) it is " +"calculated over infill extrusion width. Orca Slicer tries to connect two " +"close infill lines to a short perimeter segment. If no such perimeter " +"segment shorter than this parameter is found, the infill line is connected " +"to a perimeter segment at just one side and the length of the perimeter " +"segment taken is limited to infill_anchor, but no longer than this " +"parameter. \n" +"If set to 0, the old algorithm for infill connection will be used, it should " +"create the same result as with 1000 & 0." msgstr "" -"Conecte uma linha de preenchimento a um perímetro interno com um segmento curto de um perímetro adicional. Se expresso como porcentagem (exemplo: 15%), é calculado sobre a largura de extrusão do preenchimento. O Orca Slicer tenta conectar duas linhas de preenchimento próximas a um segmento curto de perímetro. Se nenhum segmento de perímetro mais curto que este parâmetro for encontrado, a linha de preenchimento é conectada a um segmento de perímetro em apenas um lado e o comprimento do segmento de perímetro tomado é limitado a infill_anchor, mas não mais do que este parâmetro. \n" -"Se definido como 0, o antigo algoritmo de conexão de preenchimento será usado, ele deve criar o mesmo resultado que com 1000 e 0." +"Conecte uma linha de preenchimento a um perímetro interno com um segmento " +"curto de um perímetro adicional. Se expresso como porcentagem (exemplo: " +"15%), é calculado sobre a largura de extrusão do preenchimento. O Orca " +"Slicer tenta conectar duas linhas de preenchimento próximas a um segmento " +"curto de perímetro. Se nenhum segmento de perímetro mais curto que este " +"parâmetro for encontrado, a linha de preenchimento é conectada a um segmento " +"de perímetro em apenas um lado e o comprimento do segmento de perímetro " +"tomado é limitado a infill_anchor, mas não mais do que este parâmetro. \n" +"Se definido como 0, o antigo algoritmo de conexão de preenchimento será " +"usado, ele deve criar o mesmo resultado que com 1000 e 0." msgid "0 (Simple connect)" msgstr "0 (Conexão simples)" @@ -9187,26 +10891,51 @@ msgstr "Aceleração das paredes internas" msgid "Acceleration of travel moves" msgstr "Aceleração dos movimentos de deslocamento" -msgid "Acceleration of top surface infill. Using a lower value may improve top surface quality" -msgstr "Aceleração do preenchimento da superfície superior. Usar um valor menor pode melhorar a qualidade da superfície superior" +msgid "" +"Acceleration of top surface infill. Using a lower value may improve top " +"surface quality" +msgstr "" +"Aceleração do preenchimento da superfície superior. Usar um valor menor pode " +"melhorar a qualidade da superfície superior" msgid "Acceleration of outer wall. Using a lower value can improve quality" -msgstr "Aceleração do perímetro externo. Usar um valor menor pode melhorar a qualidade" +msgstr "" +"Aceleração do perímetro externo. Usar um valor menor pode melhorar a " +"qualidade" -msgid "Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration." -msgstr "Aceleração das pontes. Se o valor for expresso como uma porcentagem (por exemplo, 50%), será calculado com base na aceleração do perímetro externo." +msgid "" +"Acceleration of bridges. If the value is expressed as a percentage (e.g. " +"50%), it will be calculated based on the outer wall acceleration." +msgstr "" +"Aceleração das pontes. Se o valor for expresso como uma porcentagem (por " +"exemplo, 50%), será calculado com base na aceleração do perímetro externo." msgid "mm/s² or %" msgstr "mm/s² ou %" -msgid "Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration." -msgstr "Aceleração do preenchimento não sólido. Se o valor for expresso como uma porcentagem (por exemplo, 100%), será calculado com base na aceleração padrão." +msgid "" +"Acceleration of sparse infill. If the value is expressed as a percentage (e." +"g. 100%), it will be calculated based on the default acceleration." +msgstr "" +"Aceleração do preenchimento não sólido. Se o valor for expresso como uma " +"porcentagem (por exemplo, 100%), será calculado com base na aceleração " +"padrão." -msgid "Acceleration of internal solid infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration." -msgstr "Aceleração do preenchimento sólido interno. Se o valor for expresso como uma porcentagem (por exemplo, 100%), será calculado com base na aceleração padrão." +msgid "" +"Acceleration of internal solid infill. If the value is expressed as a " +"percentage (e.g. 100%), it will be calculated based on the default " +"acceleration." +msgstr "" +"Aceleração do preenchimento sólido interno. Se o valor for expresso como uma " +"porcentagem (por exemplo, 100%), será calculado com base na aceleração " +"padrão." -msgid "Acceleration of initial layer. Using a lower value can improve build plate adhesive" -msgstr "Aceleração da primeira camada. Usar um valor menor pode melhorar a adesão à mesa" +msgid "" +"Acceleration of initial layer. Using a lower value can improve build plate " +"adhesive" +msgstr "" +"Aceleração da primeira camada. Usar um valor menor pode melhorar a adesão à " +"mesa" msgid "Enable accel_to_decel" msgstr "Habilitar accel_to_decel" @@ -9218,8 +10947,10 @@ msgid "accel_to_decel" msgstr "accel_to_decel" #, c-format, boost-format -msgid "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" -msgstr "O max_accel_to_decel do Klipper será ajustado para esse %% de aceleração" +msgid "" +"Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" +msgstr "" +"O max_accel_to_decel do Klipper será ajustado para esse %% de aceleração" msgid "Jerk of outer walls" msgstr "Jerk nas paredes externas" @@ -9239,14 +10970,22 @@ msgstr "Jerk na primeira camada" msgid "Jerk for travel" msgstr "Jerk no deslocamento" -msgid "Line width of initial layer. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura da linha da primeira camada. Se expresso como uma %, será calculado sobre o diâmetro do bico." +msgid "" +"Line width of initial layer. If expressed as a %, it will be computed over " +"the nozzle diameter." +msgstr "" +"Largura da linha da primeira camada. Se expresso como uma %, será calculado " +"sobre o diâmetro do bico." msgid "Initial layer height" msgstr "Altura da primeira camada" -msgid "Height of initial layer. Making initial layer height to be thick slightly can improve build plate adhension" -msgstr "Altura da primeira camada. Tornar a altura da primeira camada ligeiramente espessa pode melhorar a adesão à mesa" +msgid "" +"Height of initial layer. Making initial layer height to be thick slightly " +"can improve build plate adhension" +msgstr "" +"Altura da primeira camada. Tornar a altura da primeira camada ligeiramente " +"espessa pode melhorar a adesão à mesa" msgid "Speed of initial layer except the solid infill part" msgstr "Velocidade da primeira camada, exceto a parte de preenchimento sólido" @@ -9266,35 +11005,60 @@ msgstr "Velocidade de deslocamento da primeira camada" msgid "Number of slow layers" msgstr "Número de camadas lentas" -msgid "The first few layers are printed slower than normal. The speed is gradually increased in a linear fashion over the specified number of layers." -msgstr "As primeiras camadas são impressas mais lentamente do que o normal. A velocidade é aumentada gradualmente de forma linear sobre o número especificado de camadas." +msgid "" +"The first few layers are printed slower than normal. The speed is gradually " +"increased in a linear fashion over the specified number of layers." +msgstr "" +"As primeiras camadas são impressas mais lentamente do que o normal. A " +"velocidade é aumentada gradualmente de forma linear sobre o número " +"especificado de camadas." msgid "Initial layer nozzle temperature" msgstr "Temperatura do bico da primeira camada" msgid "Nozzle temperature to print initial layer when using this filament" -msgstr "Temperatura do bico para imprimir a primeira camada ao usar este filamento" +msgstr "" +"Temperatura do bico para imprimir a primeira camada ao usar este filamento" msgid "Full fan speed at layer" msgstr "Velocidade total do ventilador na camada" -msgid "Fan speed will be ramped up linearly from zero at layer \"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower than \"close_fan_the_first_x_layers\", in which case the fan will be running at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." -msgstr "A velocidade do ventilador aumentará linearmente de zero na camada \"close_fan_the_first_x_layers\" para o máximo na camada \"full_fan_speed_layer\". \"full_fan_speed_layer\" será ignorado se for menor que \"close_fan_the_first_x_layers\", caso em que o ventilador funcionará na velocidade máxima permitida na camada \"close_fan_the_first_x_layers\" + 1." +msgid "" +"Fan speed will be ramped up linearly from zero at layer " +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +msgstr "" +"A velocidade do ventilador aumentará linearmente de zero na camada " +"\"close_fan_the_first_x_layers\" para o máximo na camada " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" será ignorado se for " +"menor que \"close_fan_the_first_x_layers\", caso em que o ventilador " +"funcionará na velocidade máxima permitida na camada " +"\"close_fan_the_first_x_layers\" + 1." msgid "Support interface fan speed" msgstr "Velocidade do ventilador de interface de suporte" msgid "" -"This fan speed is enforced during all support interfaces, to be able to weaken their bonding with a high fan speed.\n" +"This fan speed is enforced during all support interfaces, to be able to " +"weaken their bonding with a high fan speed.\n" "Set to -1 to disable this override.\n" "Can only be overriden by disable_fan_first_layers." msgstr "" -"Esta velocidade do ventilador é aplicada durante todas as interfaces de suporte, para enfraquecer sua ligação com uma alta velocidade do ventilador.\n" +"Esta velocidade do ventilador é aplicada durante todas as interfaces de " +"suporte, para enfraquecer sua ligação com uma alta velocidade do " +"ventilador.\n" "Defina como -1 para desativar esta substituição.\n" "Só pode ser substituído por disable_fan_first_layers." -msgid "Randomly jitter while printing the wall, so that the surface has a rough look. This setting controls the fuzzy position" -msgstr "Movimento aleatório durante a impressão do perímetro, de modo que a superfície tenha uma aparência áspera. Essa configuração controla a textura fuzzy" +msgid "" +"Randomly jitter while printing the wall, so that the surface has a rough " +"look. This setting controls the fuzzy position" +msgstr "" +"Movimento aleatório durante a impressão do perímetro, de modo que a " +"superfície tenha uma aparência áspera. Essa configuração controla a textura " +"fuzzy" msgid "Contour" msgstr "Contorno" @@ -9308,14 +11072,22 @@ msgstr "Todas as paredes" msgid "Fuzzy skin thickness" msgstr "Espessura da textura fuzzy" -msgid "The width within which to jitter. It's adversed to be below outer wall line width" -msgstr "A largura dentro da qual tremer. É desaconselhável que seja menor do que a largura da linha do perímetro externo" +msgid "" +"The width within which to jitter. It's adversed to be below outer wall line " +"width" +msgstr "" +"A largura dentro da qual tremer. É desaconselhável que seja menor do que a " +"largura da linha do perímetro externo" msgid "Fuzzy skin point distance" msgstr "Distância do ponto da textura fuzzy" -msgid "The average diatance between the random points introducded on each line segment" -msgstr "A distância média entre os pontos aleatórios introduzidos em cada segmento de linha" +msgid "" +"The average diatance between the random points introducded on each line " +"segment" +msgstr "" +"A distância média entre os pontos aleatórios introduzidos em cada segmento " +"de linha" msgid "Apply fuzzy skin to first layer" msgstr "Aplicar texture fuzzy à primeira camada" @@ -9332,38 +11104,62 @@ msgstr "Camadas e Perímetros" msgid "Filter out gaps smaller than the threshold specified" msgstr "Filtrar vazios menores que o limite especificado" -msgid "Speed of gap infill. Gap usually has irregular line width and should be printed more slowly" -msgstr "Velocidade de preenchimento de vão. Vazios geralmente têm largura de linha irregular e devem ser impressas mais lentamente" +msgid "" +"Speed of gap infill. Gap usually has irregular line width and should be " +"printed more slowly" +msgstr "" +"Velocidade de preenchimento de vão. Vazios geralmente têm largura de linha " +"irregular e devem ser impressas mais lentamente" msgid "Precise Z height" msgstr "Altura Z precisa" -msgid "Enable this to get precise z height of object after slicing. It will get the precise object height by fine-tuning the layer heights of the last few layers. Note that this is an experimental parameter." -msgstr "Ative isto para obter altura Z precisa do objeto após fatiar. Ele obterá a altura do objeto exata ajustando as alturas da camada das últimas camadas. Observe que este é um parâmetro experimental." +msgid "" +"Enable this to get precise z height of object after slicing. It will get the " +"precise object height by fine-tuning the layer heights of the last few " +"layers. Note that this is an experimental parameter." +msgstr "" +"Ative isto para obter altura Z precisa do objeto após fatiar. Ele obterá a " +"altura do objeto exata ajustando as alturas da camada das últimas camadas. " +"Observe que este é um parâmetro experimental." msgid "Arc fitting" msgstr "Ajuste de arco (Arc fitting)" -msgid "Enable this to get a G-code file which has G2 and G3 moves. And the fitting tolerance is same with resolution" -msgstr "Habilitar isso para obter um arquivo G-code que tenha movimentos G2 e G3. E a tolerância de ajuste é a mesma que a resolução" +msgid "" +"Enable this to get a G-code file which has G2 and G3 moves. And the fitting " +"tolerance is same with resolution" +msgstr "" +"Habilitar isso para obter um arquivo G-code que tenha movimentos G2 e G3. E " +"a tolerância de ajuste é a mesma que a resolução" msgid "Add line number" msgstr "Adicionar número da linha" msgid "Enable this to add line number(Nx) at the beginning of each G-Code line" -msgstr "Habilitar isso para adicionar o número da linha (Nx) no início de cada linha do G-Code" +msgstr "" +"Habilitar isso para adicionar o número da linha (Nx) no início de cada linha " +"do G-Code" msgid "Scan first layer" msgstr "Escanear primeira camada" -msgid "Enable this to enable the camera on printer to check the quality of first layer" -msgstr "Habilitar isso para ativar a câmera na impressora para verificar a qualidade da primeira camada" +msgid "" +"Enable this to enable the camera on printer to check the quality of first " +"layer" +msgstr "" +"Habilitar isso para ativar a câmera na impressora para verificar a qualidade " +"da primeira camada" msgid "Nozzle type" msgstr "Tipo de bico" -msgid "The metallic material of nozzle. This determines the abrasive resistance of nozzle, and what kind of filament can be printed" -msgstr "O material metálico do bico. Isso determina a resistência ao desgaste do bico e que tipo de filamento pode ser impresso" +msgid "" +"The metallic material of nozzle. This determines the abrasive resistance of " +"nozzle, and what kind of filament can be printed" +msgstr "" +"O material metálico do bico. Isso determina a resistência ao desgaste do " +"bico e que tipo de filamento pode ser impresso" msgid "Undefine" msgstr "Não definido" @@ -9380,8 +11176,12 @@ msgstr "Latão" msgid "Nozzle HRC" msgstr "Bico HRC" -msgid "The nozzle's hardness. Zero means no checking for nozzle's hardness during slicing." -msgstr "A dureza do bico. Zero significa que não há verificação da dureza do bico durante a fatiamento." +msgid "" +"The nozzle's hardness. Zero means no checking for nozzle's hardness during " +"slicing." +msgstr "" +"A dureza do bico. Zero significa que não há verificação da dureza do bico " +"durante a fatiamento." msgid "HRC" msgstr "RH" @@ -9408,20 +11208,36 @@ msgid "Best object position" msgstr "Melhor posição do objeto" msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." -msgstr "Melhor posição de arranjo automático na faixa [0,1] em relação ao formato da mesa." - -msgid "Enable this option if machine has auxiliary part cooling fan. G-code command: M106 P2 S(0-255)." -msgstr "Habilitar esta opção se a máquina tiver ventilador auxiliar de resfriamento da peça. Comando G-code: M106 P2 S(0-255)." +msgstr "" +"Melhor posição de arranjo automático na faixa [0,1] em relação ao formato da " +"mesa." msgid "" -"Start the fan this number of seconds earlier than its target start time (you can use fractional seconds). It assumes infinite acceleration for this time estimation, and will only take into account G1 and G0 moves (arc fitting is unsupported).\n" -"It won't move fan comands from custom gcodes (they act as a sort of 'barrier').\n" -"It won't move fan comands into the start gcode if the 'only custom start gcode' is activated.\n" +"Enable this option if machine has auxiliary part cooling fan. G-code " +"command: M106 P2 S(0-255)." +msgstr "" +"Habilitar esta opção se a máquina tiver ventilador auxiliar de resfriamento " +"da peça. Comando G-code: M106 P2 S(0-255)." + +msgid "" +"Start the fan this number of seconds earlier than its target start time (you " +"can use fractional seconds). It assumes infinite acceleration for this time " +"estimation, and will only take into account G1 and G0 moves (arc fitting is " +"unsupported).\n" +"It won't move fan comands from custom gcodes (they act as a sort of " +"'barrier').\n" +"It won't move fan comands into the start gcode if the 'only custom start " +"gcode' is activated.\n" "Use 0 to deactivate." msgstr "" -"Comece o ventilador este número de segundos antes do tempo de início do alvo (você pode usar segundos fracionários). Ele assume aceleração infinita para esta estimativa de tempo e só levará em conta os movimentos G1 e G0 (o ajuste de arco não é suportado).\n" -"Não moverá comandos do ventilador de gcodes personalizados (eles funcionam como uma espécie de 'barreira').\n" -"Não moverá comandos do ventilador para o início do gcode se o 'apenas gcode de início personalizado' estiver ativado.\n" +"Comece o ventilador este número de segundos antes do tempo de início do alvo " +"(você pode usar segundos fracionários). Ele assume aceleração infinita para " +"esta estimativa de tempo e só levará em conta os movimentos G1 e G0 (o " +"ajuste de arco não é suportado).\n" +"Não moverá comandos do ventilador de gcodes personalizados (eles funcionam " +"como uma espécie de 'barreira').\n" +"Não moverá comandos do ventilador para o início do gcode se o 'apenas gcode " +"de início personalizado' estiver ativado.\n" "Use 0 para desativar." msgid "Only overhangs" @@ -9434,12 +11250,18 @@ msgid "Fan kick-start time" msgstr "Tempo de inicialização do ventilador" msgid "" -"Emit a max fan speed command for this amount of seconds before reducing to target speed to kick-start the cooling fan.\n" -"This is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to get the fan up to speed faster.\n" +"Emit a max fan speed command for this amount of seconds before reducing to " +"target speed to kick-start the cooling fan.\n" +"This is useful for fans where a low PWM/power may be insufficient to get the " +"fan started spinning from a stop, or to get the fan up to speed faster.\n" "Set to 0 to deactivate." msgstr "" -"Emita um comando de velocidade máxima do ventilador por esta quantidade de segundos antes de reduzir para a velocidade alvo para iniciar o ventilador de resfriamento.\n" -"Isto é útil para ventiladores onde um baixo PWM/potência pode ser insuficiente para fazer o ventilador começar a girar a partir de uma parada, ou para fazer o ventilador alcançar a velocidade mais rapidamente.\n" +"Emita um comando de velocidade máxima do ventilador por esta quantidade de " +"segundos antes de reduzir para a velocidade alvo para iniciar o ventilador " +"de resfriamento.\n" +"Isto é útil para ventiladores onde um baixo PWM/potência pode ser " +"insuficiente para fazer o ventilador começar a girar a partir de uma parada, " +"ou para fazer o ventilador alcançar a velocidade mais rapidamente.\n" "Defina como 0 para desativar." msgid "Time cost" @@ -9458,7 +11280,8 @@ msgid "" "This option is enabled if machine support controlling chamber temperature\n" "G-code command: M141 S(0-255)" msgstr "" -"Esta opção está habilitada se a máquina suportar o controle da temperatura da câmara.\n" +"Esta opção está habilitada se a máquina suportar o controle da temperatura " +"da câmara.\n" "Comando G-code: M141 S(0-255)" msgid "Support air filtration" @@ -9468,7 +11291,8 @@ msgid "" "Enable this if printer support air filtration\n" "G-code command: M106 P3 S(0-255)" msgstr "" -"Esta opção está habilitada se a máquina suportar o controle da temperatura da câmara.\n" +"Esta opção está habilitada se a máquina suportar o controle da temperatura " +"da câmara.\n" "Comando G-code: M141 S(0-255)" msgid "G-code flavor" @@ -9489,8 +11313,17 @@ msgstr "Ative esta opção se quiser usar vários tipos de mesa" msgid "Label objects" msgstr "Etiquetar objetos" -msgid "Enable this to add comments into the G-Code labeling print moves with what object they belong to, which is useful for the Octoprint CancelObject plugin. This settings is NOT compatible with Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill." -msgstr "Ative isso para adicionar comentários no G-Code etiquetando movimentos de impressão com a qual objeto eles pertencem, o que é útil para o plugin CancelObject do Octoprint. Esta configuração NÃO é compatível com a configuração de Material Múltiplo de Extrusora Única e Limpeza em Objeto / Limpeza em Preenchimento." +msgid "" +"Enable this to add comments into the G-Code labeling print moves with what " +"object they belong to, which is useful for the Octoprint CancelObject " +"plugin. This settings is NOT compatible with Single Extruder Multi Material " +"setup and Wipe into Object / Wipe into Infill." +msgstr "" +"Ative isso para adicionar comentários no G-Code etiquetando movimentos de " +"impressão com a qual objeto eles pertencem, o que é útil para o plugin " +"CancelObject do Octoprint. Esta configuração NÃO é compatível com a " +"configuração de Material Múltiplo de Extrusora Única e Limpeza em Objeto / " +"Limpeza em Preenchimento." msgid "Exclude objects" msgstr "Excluir objetos" @@ -9501,26 +11334,46 @@ msgstr "Ative esta opção para adicionar o comando EXCLUDE OBJECT no g-code" msgid "Verbose G-code" msgstr "G-code detalhado" -msgid "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down." -msgstr "Ative isso para obter um arquivo G-code comentado, com cada linha explicada por um texto descritivo. Se você imprimir do cartão SD, o peso adicional do arquivo pode fazer com que o firmware fique mais lento." +msgid "" +"Enable this to get a commented G-code file, with each line explained by a " +"descriptive text. If you print from SD card, the additional weight of the " +"file could make your firmware slow down." +msgstr "" +"Ative isso para obter um arquivo G-code comentado, com cada linha explicada " +"por um texto descritivo. Se você imprimir do cartão SD, o peso adicional do " +"arquivo pode fazer com que o firmware fique mais lento." msgid "Infill combination" msgstr "Combinar preenchimento" -msgid "Automatically Combine sparse infill of several layers to print together to reduce time. Wall is still printed with original layer height." -msgstr "Combina automaticamente o preenchimento não sólido de várias camadas para imprimir juntas e reduzir o tempo. O perímetro ainda é impresso com a altura original da camada." +msgid "" +"Automatically Combine sparse infill of several layers to print together to " +"reduce time. Wall is still printed with original layer height." +msgstr "" +"Combina automaticamente o preenchimento não sólido de várias camadas para " +"imprimir juntas e reduzir o tempo. O perímetro ainda é impresso com a altura " +"original da camada." msgid "Filament to print internal sparse infill." msgstr "Filamento para imprimir preenchimento interno não sólido." -msgid "Line width of internal sparse infill. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura da linha do preenchimento interno não sólido. Se expresso como %, será calculado sobre o diâmetro do bico." +msgid "" +"Line width of internal sparse infill. If expressed as a %, it will be " +"computed over the nozzle diameter." +msgstr "" +"Largura da linha do preenchimento interno não sólido. Se expresso como %, " +"será calculado sobre o diâmetro do bico." msgid "Infill/Wall overlap" msgstr "Sobreposição de preenchimento/perímetro" -msgid "Infill area is enlarged slightly to overlap with wall for better bonding. The percentage value is relative to line width of sparse infill" -msgstr "A área de preenchimento é ligeiramente ampliada para se sobrepor ao perímetro para melhor aderência. O valor percentual é relativo à largura da linha do preenchimento não sólido" +msgid "" +"Infill area is enlarged slightly to overlap with wall for better bonding. " +"The percentage value is relative to line width of sparse infill" +msgstr "" +"A área de preenchimento é ligeiramente ampliada para se sobrepor ao " +"perímetro para melhor aderência. O valor percentual é relativo à largura da " +"linha do preenchimento não sólido" msgid "Speed of internal sparse infill" msgstr "Velocidade do preenchimento" @@ -9528,26 +11381,40 @@ msgstr "Velocidade do preenchimento" msgid "Interface shells" msgstr "Paredes de interface" -msgid "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material" -msgstr "Força a geração de perímetros sólidos entre materiais/volumes adjacentes. Útil para impressões com múltiplos extrusores com materiais translúcidos ou suporte solúvel manual" +msgid "" +"Force the generation of solid shells between adjacent materials/volumes. " +"Useful for multi-extruder prints with translucent materials or manual " +"soluble support material" +msgstr "" +"Força a geração de perímetros sólidos entre materiais/volumes adjacentes. " +"Útil para impressões com múltiplos extrusores com materiais translúcidos ou " +"suporte solúvel manual" msgid "Maximum width of a segmented region" msgstr "Largura máxima de uma região segmentada" msgid "Maximum width of a segmented region. Zero disables this feature." -msgstr "Largura máxima de uma região segmentada. Zero desativa essa funcionalidade." +msgstr "" +"Largura máxima de uma região segmentada. Zero desativa essa funcionalidade." msgid "Interlocking depth of a segmented region" msgstr "Profundidade de entrelaçamento de uma região segmentada" msgid "Interlocking depth of a segmented region. Zero disables this feature." -msgstr "Profundidade de entrelaçamento de uma região segmentada. Zero desativa essa funcionalidade." +msgstr "" +"Profundidade de entrelaçamento de uma região segmentada. Zero desativa essa " +"funcionalidade." msgid "Ironing Type" msgstr "Tipo do passar ferro" -msgid "Ironing is using small flow to print on same height of surface again to make flat surface more smooth. This setting controls which layer being ironed" -msgstr "Passar a ferro utiliza um pequeno fluxo para imprimir na mesma altura da superfície novamente para deixá-la mais lisa. Esta configuração controla qual camada está sendo passada a ferro" +msgid "" +"Ironing is using small flow to print on same height of surface again to make " +"flat surface more smooth. This setting controls which layer being ironed" +msgstr "" +"Passar a ferro utiliza um pequeno fluxo para imprimir na mesma altura da " +"superfície novamente para deixá-la mais lisa. Esta configuração controla " +"qual camada está sendo passada a ferro" msgid "No ironing" msgstr "Desativado" @@ -9570,8 +11437,13 @@ msgstr "O padrão que será usado ao passar a ferro" msgid "Ironing flow" msgstr "Fluxo do passar ferro" -msgid "The amount of material to extrude during ironing. Relative to flow of normal layer height. Too high value results in overextrusion on the surface" -msgstr "A quantidade de material a extrudar durante o passar a ferro. Relativo ao fluxo da altura normal da camada. Um valor muito alto resulta em superextrusão na superfície" +msgid "" +"The amount of material to extrude during ironing. Relative to flow of normal " +"layer height. Too high value results in overextrusion on the surface" +msgstr "" +"A quantidade de material a extrudar durante o passar a ferro. Relativo ao " +"fluxo da altura normal da camada. Um valor muito alto resulta em " +"superextrusão na superfície" msgid "Ironing line spacing" msgstr "Espaçamento de linha do passar ferro" @@ -9588,17 +11460,26 @@ msgstr "Velocidade de impressão das linhas do passar ferro" msgid "Ironing angle" msgstr "Ângulo do passar ferro" -msgid "The angle ironing is done at. A negative number disables this function and uses the default method." -msgstr "O ângulo em que o passar a ferro é feito. Um número negativo desativa essa função e usa o método padrão." +msgid "" +"The angle ironing is done at. A negative number disables this function and " +"uses the default method." +msgstr "" +"O ângulo em que o passar a ferro é feito. Um número negativo desativa essa " +"função e usa o método padrão." msgid "This gcode part is inserted at every layer change after lift z" -msgstr "Esta parte do gcode é inserida em cada mudança de camada após levantar z" +msgstr "" +"Esta parte do gcode é inserida em cada mudança de camada após levantar z" msgid "Supports silent mode" msgstr "Suporta modo silencioso" -msgid "Whether the machine supports silent mode in which machine use lower acceleration to print" -msgstr "Se a máquina suporta o modo silencioso, no qual a máquina usa uma aceleração mais baixa para imprimir" +msgid "" +"Whether the machine supports silent mode in which machine use lower " +"acceleration to print" +msgstr "" +"Se a máquina suporta o modo silencioso, no qual a máquina usa uma aceleração " +"mais baixa para imprimir" msgid "Emit limits to G-code" msgstr "Emitir limites para o G-code" @@ -9613,8 +11494,12 @@ msgstr "" "Se ativado, os limites da máquina serão emitidos para o arquivo de G-code.\n" "Esta opção será ignorada se o tipo do G-code estiver definido para Klipper." -msgid "This G-code will be used as a code for the pause print. User can insert pause G-code in gcode viewer" -msgstr "Este G-code será usado como um código para pausar a impressão. O usuário pode inserir o G-code de pausa no visualizador de G-code" +msgid "" +"This G-code will be used as a code for the pause print. User can insert " +"pause G-code in gcode viewer" +msgstr "" +"Este G-code será usado como um código para pausar a impressão. O usuário " +"pode inserir o G-code de pausa no visualizador de G-code" msgid "This G-code will be used as a custom code" msgstr "Este G-code será usado como um código personalizado" @@ -9628,8 +11513,16 @@ msgstr "Habilitar compensação de fluxo para áreas de preenchimento pequenas" msgid "Flow Compensation Model" msgstr "Modelo de Compensação de Fluxo" -msgid "Flow Compensation Model, used to adjust the flow for small infill areas. The model is expressed as a comma separated pair of values for extrusion length and flow correction factors, one per line, 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 os fatores de correção de fluxo, um por linha, no seguinte formato: \"1.234,5.678\"" +msgid "" +"Flow Compensation Model, used to adjust the flow for small infill areas. The " +"model is expressed as a comma separated pair of values for extrusion length " +"and flow correction factors, one per line, 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 os fatores de correção de " +"fluxo, um por linha, no seguinte formato: \"1.234,5.678\"" msgid "Maximum speed X" msgstr "Velocidade máxima X" @@ -9731,44 +11624,82 @@ msgid "Maximum acceleration for travel" msgstr "Aceleração máxima para deslocamento" msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2" -msgstr "Aceleração máxima para deslocamento (M204 T), aplica-se apenas ao Marlin 2" +msgstr "" +"Aceleração máxima para deslocamento (M204 T), aplica-se apenas ao Marlin 2" -msgid "Part cooling fan speed may be increased when auto cooling is enabled. This is the maximum speed limitation of part cooling fan" -msgstr "A velocidade do ventilador de resfriamento da peça pode ser aumentada quando o resfriamento automático está habilitado. Este é o limite máximo de velocidade do ventilador de resfriamento da peça" +msgid "" +"Part cooling fan speed may be increased when auto cooling is enabled. This " +"is the maximum speed limitation of part cooling fan" +msgstr "" +"A velocidade do ventilador de resfriamento da peça pode ser aumentada quando " +"o resfriamento automático está habilitado. Este é o limite máximo de " +"velocidade do ventilador de resfriamento da peça" msgid "Max" msgstr "Máx" -msgid "The largest printable layer height for extruder. Used tp limits the maximum layer hight when enable adaptive layer height" -msgstr "A maior altura de camada imprimível para o extrusor. Usado para limitar a altura máxima da camada quando a altura da camada adaptativa está ativada" +msgid "" +"The largest printable layer height for extruder. Used tp limits the maximum " +"layer hight when enable adaptive layer height" +msgstr "" +"A maior altura de camada imprimível para o extrusor. Usado para limitar a " +"altura máxima da camada quando a altura da camada adaptativa está ativada" msgid "Extrusion rate smoothing" msgstr "Suavização da extrusão" msgid "" -"This parameter smooths out sudden extrusion rate changes that happen when the printer transitions from printing a high flow (high speed/larger width) extrusion to a lower flow (lower speed/smaller width) extrusion and vice versa.\n" +"This parameter smooths out sudden extrusion rate changes that happen when " +"the printer transitions from printing a high flow (high speed/larger width) " +"extrusion to a lower flow (lower speed/smaller width) extrusion and vice " +"versa.\n" "\n" -"It defines the maximum rate by which the extruded volumetric flow in mm3/sec can change over time. Higher values mean higher extrusion rate changes are allowed, resulting in faster speed transitions.\n" +"It defines the maximum rate by which the extruded volumetric flow in mm3/sec " +"can change over time. Higher values mean higher extrusion rate changes are " +"allowed, resulting in faster speed transitions.\n" "\n" "A value of 0 disables the feature. \n" "\n" -"For a high speed, high flow direct drive printer (like the Bambu lab or Voron) this value is usually not needed. However it can provide some marginal benefit in certain cases where feature speeds vary greatly. For example, when there are aggressive slowdowns due to overhangs. In these cases a high value of around 300-350mm3/s2 is recommended as this allows for just enough smoothing to assist pressure advance achieve a smoother flow transition.\n" +"For a high speed, high flow direct drive printer (like the Bambu lab or " +"Voron) this value is usually not needed. However it can provide some " +"marginal benefit in certain cases where feature speeds vary greatly. For " +"example, when there are aggressive slowdowns due to overhangs. In these " +"cases a high value of around 300-350mm3/s2 is recommended as this allows for " +"just enough smoothing to assist pressure advance achieve a smoother flow " +"transition.\n" "\n" -"For slower printers without pressure advance, the value should be set much lower. A value of 10-15mm3/s2 is a good starting point for direct drive extruders and 5-10mm3/s2 for Bowden style. \n" +"For slower printers without pressure advance, the value should be set much " +"lower. A value of 10-15mm3/s2 is a good starting point for direct drive " +"extruders and 5-10mm3/s2 for Bowden style. \n" "\n" "This feature is known as Pressure Equalizer in Prusa slicer.\n" "\n" "Note: this parameter disables arc fitting." msgstr "" -"Este parâmetro suaviza as mudanças súbitas na taxa de extrusão que ocorrem quando a impressora faz a transição de uma extrusão de alto fluxo (alta velocidade/maior largura) para uma extrusão de baixo fluxo (baixa velocidade/menor largura) e vice-versa.\n" +"Este parâmetro suaviza as mudanças súbitas na taxa de extrusão que ocorrem " +"quando a impressora faz a transição de uma extrusão de alto fluxo (alta " +"velocidade/maior largura) para uma extrusão de baixo fluxo (baixa velocidade/" +"menor largura) e vice-versa.\n" "\n" -"Define a taxa máxima pela qual o fluxo volumétrico extrudado em mm3/seg pode mudar ao longo do tempo. Valores mais altos significam que mudanças de taxa de extrusão mais altas são permitidas, resultando em transições de velocidade mais rápidas.\n" +"Define a taxa máxima pela qual o fluxo volumétrico extrudado em mm3/seg pode " +"mudar ao longo do tempo. Valores mais altos significam que mudanças de taxa " +"de extrusão mais altas são permitidas, resultando em transições de " +"velocidade mais rápidas.\n" "\n" "Um valor de 0 desativa o recurso.\n" "\n" -"Para uma impressora de acionamento direto de alta velocidade e alto fluxo (como a Bambu lab ou Voron), esse valor geralmente não é necessário. No entanto, pode fornecer alguns benefícios marginais em certos casos em que as velocidades das características variam muito. Por exemplo, quando há desacelerações agressivas devido a overhangs. Nesses casos, um valor alto de cerca de 300-350mm3/s2 é recomendado, pois isso permite apenas suavização suficiente para ajudar o Pressure advance a alcançar uma transição de fluxo mais suave.\n" +"Para uma impressora de acionamento direto de alta velocidade e alto fluxo " +"(como a Bambu lab ou Voron), esse valor geralmente não é necessário. No " +"entanto, pode fornecer alguns benefícios marginais em certos casos em que as " +"velocidades das características variam muito. Por exemplo, quando há " +"desacelerações agressivas devido a overhangs. Nesses casos, um valor alto de " +"cerca de 300-350mm3/s2 é recomendado, pois isso permite apenas suavização " +"suficiente para ajudar o Pressure advance a alcançar uma transição de fluxo " +"mais suave.\n" "\n" -"Para impressoras mais lentas sem Pressure advance, o valor deve ser definido muito mais baixo. Um valor de 10-15mm3/s2 é um bom ponto de partida para extrusoras de acionamento direto e 5-10mm3/s2 para estilo Bowden.\n" +"Para impressoras mais lentas sem Pressure advance, o valor deve ser definido " +"muito mais baixo. Um valor de 10-15mm3/s2 é um bom ponto de partida para " +"extrusoras de acionamento direto e 5-10mm3/s2 para estilo Bowden.\n" "\n" "Este recurso é conhecido como Equalizador de Pressão no slicer Prusa.\n" "\n" @@ -9781,15 +11712,22 @@ msgid "Smoothing segment length" msgstr "Distancia do segmento de suavização" msgid "" -"A lower value results in smoother extrusion rate transitions. However, this results in a significantly larger gcode file and more instructions for the printer to process. \n" +"A lower value results in smoother extrusion rate transitions. However, this " +"results in a significantly larger gcode file and more instructions for the " +"printer to process. \n" "\n" -"Default value of 3 works well for most cases. If your printer is stuttering, increase this value to reduce the number of adjustments made\n" +"Default value of 3 works well for most cases. If your printer is stuttering, " +"increase this value to reduce the number of adjustments made\n" "\n" "Allowed values: 1-5" msgstr "" -"Um valor menor resulta em transições de extrusão mais suaves. No entanto, isso resulta em um arquivo Gcode significativamente maior e mais instruções para a impressora processar.\n" +"Um valor menor resulta em transições de extrusão mais suaves. No entanto, " +"isso resulta em um arquivo Gcode significativamente maior e mais instruções " +"para a impressora processar.\n" "\n" -"O valor padrão de 3 funciona bem para a maioria dos casos. Se sua impressora estiver engasgando, aumente este valor para reduzir o número de ajustes feitos.\n" +"O valor padrão de 3 funciona bem para a maioria dos casos. Se sua impressora " +"estiver engasgando, aumente este valor para reduzir o número de ajustes " +"feitos.\n" "\n" "Valores permitidos: 1-5" @@ -9797,24 +11735,40 @@ msgid "Minimum speed for part cooling fan" msgstr "Velocidade mínima para o ventilador de resfriamento da peça" msgid "" -"Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed during printing except the first several layers which is defined by no cooling layers.\n" -"Please enable auxiliary_fan in printer settings to use this feature. G-code command: M106 P2 S(0-255)" +"Speed of auxiliary part cooling fan. Auxiliary fan will run at this speed " +"during printing except the first several layers which is defined by no " +"cooling layers.\n" +"Please enable auxiliary_fan in printer settings to use this feature. G-code " +"command: M106 P2 S(0-255)" msgstr "" -"Velocidade do ventilador auxiliar de resfriamento de peças. O ventilador auxiliar funcionará nesta velocidade durante a impressão, exceto nas primeiras camadas, que são definidas por camadas sem resfriamento.\n" +"Velocidade do ventilador auxiliar de resfriamento de peças. O ventilador " +"auxiliar funcionará nesta velocidade durante a impressão, exceto nas " +"primeiras camadas, que são definidas por camadas sem resfriamento.\n" "\n" -"Por favor, habilite o ventilador auxiliar nas configurações da impressora para usar esta função. Comando G-code: M106 P2 S(0-255)" +"Por favor, habilite o ventilador auxiliar nas configurações da impressora " +"para usar esta função. Comando G-code: M106 P2 S(0-255)" msgid "Min" msgstr "Mín" -msgid "The lowest printable layer height for extruder. Used tp limits the minimum layer hight when enable adaptive layer height" -msgstr "A menor altura de camada imprimível para o extrusor. Usado para limitar a altura mínima da camada ao habilitar a altura de camada adaptativa" +msgid "" +"The lowest printable layer height for extruder. Used tp limits the minimum " +"layer hight when enable adaptive layer height" +msgstr "" +"A menor altura de camada imprimível para o extrusor. Usado para limitar a " +"altura mínima da camada ao habilitar a altura de camada adaptativa" msgid "Min print speed" msgstr "Velocidade de impressão mínima" -msgid "The minimum printing speed that the printer will slow down to to attempt to maintain the minimum layer time above, when slow down for better layer cooling is enabled." -msgstr "A velocidade de impressão mínima para a qual a impressora diminuirá a velocidade para tentar manter o tempo mínimo de camada acima, quando a desaceleração para um melhor resfriamento da camada estiver habilitada." +msgid "" +"The minimum printing speed that the printer will slow down to to attempt to " +"maintain the minimum layer time above, when slow down for better layer " +"cooling is enabled." +msgstr "" +"A velocidade de impressão mínima para a qual a impressora diminuirá a " +"velocidade para tentar manter o tempo mínimo de camada acima, quando a " +"desaceleração para um melhor resfriamento da camada estiver habilitada." msgid "Nozzle diameter" msgstr "Diâmetro do bico" @@ -9825,14 +11779,22 @@ msgstr "Diâmetro do bico" msgid "Configuration notes" msgstr "Notas de configuração" -msgid "You can put here your personal notes. This text will be added to the G-code header comments." -msgstr "Você pode colocar aqui suas notas pessoais. Este texto será adicionado aos comentários do cabeçalho do G-code." +msgid "" +"You can put here your personal notes. This text will be added to the G-code " +"header comments." +msgstr "" +"Você pode colocar aqui suas notas pessoais. Este texto será adicionado aos " +"comentários do cabeçalho do G-code." msgid "Host Type" msgstr "Tipo de Host" -msgid "Orca Slicer can upload G-code files to a printer host. This field must contain the kind of the host." -msgstr "O Orca Slicer pode carregar arquivos de código G para um hospedeiro de impressora. Este campo deve conter o tipo de hospedeiro." +msgid "" +"Orca Slicer can upload G-code files to a printer host. This field must " +"contain the kind of the host." +msgstr "" +"O Orca Slicer pode carregar arquivos de código G para um hospedeiro de " +"impressora. Este campo deve conter o tipo de hospedeiro." msgid "Nozzle volume" msgstr "Volume do bico" @@ -9844,43 +11806,74 @@ msgid "Cooling tube position" msgstr "Posição do tubo de resfriamento" msgid "Distance of the center-point of the cooling tube from the extruder tip." -msgstr "Distância do ponto central do tubo de resfriamento da ponta do extrusor." +msgstr "" +"Distância do ponto central do tubo de resfriamento da ponta do extrusor." msgid "Cooling tube length" msgstr "Comprimento do tubo de resfriamento" msgid "Length of the cooling tube to limit space for cooling moves inside it." -msgstr "Comprimento do tubo de resfriamento para limitar o espaço para movimentos de resfriamento dentro dele." +msgstr "" +"Comprimento do tubo de resfriamento para limitar o espaço para movimentos de " +"resfriamento dentro dele." msgid "High extruder current on filament swap" msgstr "Corrente do extrusor alta na troca de filamento" -msgid "It may be beneficial to increase the extruder motor current during the filament exchange sequence to allow for rapid ramming feed rates and to overcome resistance when loading a filament with an ugly shaped tip." -msgstr "Pode ser benéfico aumentar a corrente do motor do extrusor durante a sequência de troca de filamento para permitir taxas de avanço rápidas e para superar a resistência ao carregar um filamento com uma ponta com forma desagradável." +msgid "" +"It may be beneficial to increase the extruder motor current during the " +"filament exchange sequence to allow for rapid ramming feed rates and to " +"overcome resistance when loading a filament with an ugly shaped tip." +msgstr "" +"Pode ser benéfico aumentar a corrente do motor do extrusor durante a " +"sequência de troca de filamento para permitir taxas de avanço rápidas e para " +"superar a resistência ao carregar um filamento com uma ponta com forma " +"desagradável." msgid "Filament parking position" msgstr "Posição de estacionamento do filamento" -msgid "Distance of the extruder tip from the position where the filament is parked when unloaded. This should match the value in printer firmware." -msgstr "Distância da ponta do extrusor da posição onde o filamento é estacionado quando descarregado. Isso deve corresponder ao valor no firmware da impressora." +msgid "" +"Distance of the extruder tip from the position where the filament is parked " +"when unloaded. This should match the value in printer firmware." +msgstr "" +"Distância da ponta do extrusor da posição onde o filamento é estacionado " +"quando descarregado. Isso deve corresponder ao valor no firmware da " +"impressora." msgid "Extra loading distance" msgstr "Distância de carregamento extra" -msgid "When set to zero, the distance the filament is moved from parking position during load is exactly the same as it was moved back during unload. When positive, it is loaded further, if negative, the loading move is shorter than unloading." -msgstr "Quando definido como zero, a distância que o filamento é movido da posição de estacionamento durante o carregamento é exatamente a mesma que foi movida durante o descarregamento. Quando positivo, é carregado mais longe, se negativo, o movimento de carregamento é mais curto do que o descarregamento." +msgid "" +"When set to zero, the distance the filament is moved from parking position " +"during load is exactly the same as it was moved back during unload. When " +"positive, it is loaded further, if negative, the loading move is shorter " +"than unloading." +msgstr "" +"Quando definido como zero, a distância que o filamento é movido da posição " +"de estacionamento durante o carregamento é exatamente a mesma que foi movida " +"durante o descarregamento. Quando positivo, é carregado mais longe, se " +"negativo, o movimento de carregamento é mais curto do que o descarregamento." msgid "Start end points" msgstr "Pontos de início e fim" msgid "The start and end points which is from cutter area to garbage can." -msgstr "Os pontos de início e fim que vão da área do cortador até a lata de lixo." +msgstr "" +"Os pontos de início e fim que vão da área do cortador até a lata de lixo." msgid "Reduce infill retraction" msgstr "Reduzir retração durante o preenchimento" -msgid "Don't retract when the travel is in infill area absolutely. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower" -msgstr "Não retrair quando o movimento está na área de preenchimento completamente. Isso significa que o vazamento não pode ser visto. Isso pode reduzir o número de retratações para modelos complexos e economizar tempo de impressão, mas torna a geração de fatiamento e G-code mais lenta" +msgid "" +"Don't retract when the travel is in infill area absolutely. That means the " +"oozing can't been seen. This can reduce times of retraction for complex " +"model and save printing time, but make slicing and G-code generating slower" +msgstr "" +"Não retrair quando o movimento está na área de preenchimento completamente. " +"Isso significa que o vazamento não pode ser visto. Isso pode reduzir o " +"número de retratações para modelos complexos e economizar tempo de " +"impressão, mas torna a geração de fatiamento e G-code mais lenta" msgid "Filename format" msgstr "Formato do nome do arquivo" @@ -9897,14 +11890,24 @@ msgstr "Modifica a geometria para imprimir overhangs sem suporte." msgid "Make overhangs printable - Maximum angle" msgstr "Overhangs imprimíveis - ângulo máx" -msgid "Maximum angle of overhangs to allow after making more steep overhangs printable.90° will not change the model at all and allow any overhang, while 0 will replace all overhangs with conical material." -msgstr "Ângulo máximo do overhang permitido antes de fazer ângulos mais íngremes imprimíveis. 90° não vai fazer nenhuma mudança no modelo e vai permitir qualquer overhang. 0 vai substituir todos overhangs por uma forma cônica." +msgid "" +"Maximum angle of overhangs to allow after making more steep overhangs " +"printable.90° will not change the model at all and allow any overhang, while " +"0 will replace all overhangs with conical material." +msgstr "" +"Ângulo máximo do overhang permitido antes de fazer ângulos mais íngremes " +"imprimíveis. 90° não vai fazer nenhuma mudança no modelo e vai permitir " +"qualquer overhang. 0 vai substituir todos overhangs por uma forma cônica." msgid "Make overhangs printable - Hole area" msgstr "Overhangs imprimíveis - área do furo" -msgid "Maximum area of a hole in the base of the model before it's filled by conical material.A value of 0 will fill all the holes in the model base." -msgstr "Área maxima de um furo na base do modelo antes que ele seja preenchido por uma forma cônica. Um valor 0 irá preencher todos os furos do modelo." +msgid "" +"Maximum area of a hole in the base of the model before it's filled by " +"conical material.A value of 0 will fill all the holes in the model base." +msgstr "" +"Área maxima de um furo na base do modelo antes que ele seja preenchido por " +"uma forma cônica. Um valor 0 irá preencher todos os furos do modelo." msgid "mm²" msgstr "mm2" @@ -9913,11 +11916,20 @@ msgid "Detect overhang wall" msgstr "Detectar overhangs" #, c-format, boost-format -msgid "Detect the overhang percentage relative to line width and use different speed to print. For 100%% overhang, bridge speed is used." -msgstr "Detecta a porcentagem relativa de overhang em relação a largura do perímetro e usa uma velocidade diferente de impressão. Para overhangs 100%%, a velocidade de ponte é usada." +msgid "" +"Detect the overhang percentage relative to line width and use different " +"speed to print. For 100%% overhang, bridge speed is used." +msgstr "" +"Detecta a porcentagem relativa de overhang em relação a largura do perímetro " +"e usa uma velocidade diferente de impressão. Para overhangs 100%%, a " +"velocidade de ponte é usada." -msgid "Line width of inner wall. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura do perímetro interno. Se expressado como %, será computado de acordo com o diâmetro do bico." +msgid "" +"Line width of inner wall. If expressed as a %, it will be computed over the " +"nozzle diameter." +msgstr "" +"Largura do perímetro interno. Se expressado como %, será computado de acordo " +"com o diâmetro do bico." msgid "Speed of inner wall" msgstr "Velocidade do perímetro interno" @@ -9929,20 +11941,37 @@ msgid "Alternate extra wall" msgstr "Parede extra alternada" msgid "" -"This setting adds an extra wall to every other layer. This way the infill gets wedged vertically between the walls, resulting in stronger prints. \n" +"This setting adds an extra wall to every other layer. This way the infill " +"gets wedged vertically between the walls, resulting in stronger prints. \n" "\n" -"When this option is enabled, the ensure vertical shell thickness option needs to be disabled. \n" +"When this option is enabled, the ensure vertical shell thickness option " +"needs to be disabled. \n" "\n" -"Using lightning infill together with this option is not recommended as there is limited infill to anchor the extra perimeters to." +"Using lightning infill together with this option is not recommended as there " +"is limited infill to anchor the extra perimeters to." msgstr "" -"Esta configuração adiciona um perímetro extra a cada duas camadas. Dessa forma, o preenchimento fica encaixado verticalmente entre as paredes, resultando em impressões mais resistentes. \n" +"Esta configuração adiciona um perímetro extra a cada duas camadas. Dessa " +"forma, o preenchimento fica encaixado verticalmente entre as paredes, " +"resultando em impressões mais resistentes. \n" "\n" -"Quando esta opção está ativada, a opção de garantir a espessura vertical do perímetro precisa ser desativada. \n" +"Quando esta opção está ativada, a opção de garantir a espessura vertical do " +"perímetro precisa ser desativada. \n" "\n" -"Não é recomendado usar o preenchimento rápido juntamente com esta opção, pois há preenchimento limitado para ancorar os perímetros extras." +"Não é recomendado usar o preenchimento rápido juntamente com esta opção, " +"pois há preenchimento limitado para ancorar os perímetros extras." -msgid "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Orca Slicer config settings by reading environment variables." -msgstr "Se você deseja processar o G-code de saída por meio de scripts personalizados, basta listar seus caminhos absolutos aqui. Separe vários scripts com um ponto e vírgula. Os scripts receberão o caminho absoluto para o arquivo G-code como primeiro argumento, e eles podem acessar as configurações do Orca Slicer lendo variáveis de ambiente." +msgid "" +"If you want to process the output G-code through custom scripts, just list " +"their absolute paths here. Separate multiple scripts with a semicolon. " +"Scripts will be passed the absolute path to the G-code file as the first " +"argument, and they can access the Orca Slicer config settings by reading " +"environment variables." +msgstr "" +"Se você deseja processar o G-code de saída por meio de scripts " +"personalizados, basta listar seus caminhos absolutos aqui. Separe vários " +"scripts com um ponto e vírgula. Os scripts receberão o caminho absoluto para " +"o arquivo G-code como primeiro argumento, e eles podem acessar as " +"configurações do Orca Slicer lendo variáveis de ambiente." msgid "Printer notes" msgstr "Notas da impressora" @@ -9972,28 +12001,47 @@ msgid "Initial layer expansion" msgstr "Expansão da primeira camada" msgid "Expand the first raft or support layer to improve bed plate adhesion" -msgstr "Expanda a primeira camada da base ou suporte para melhorar a adesão à mesa de impressão" +msgstr "" +"Expanda a primeira camada da base ou suporte para melhorar a adesão à mesa " +"de impressão" msgid "Raft layers" msgstr "Camadas da base" -msgid "Object will be raised by this number of support layers. Use this function to avoid wrapping when print ABS" -msgstr "O objeto será elevado por este número de camadas de suporte. Use esta função para evitar o enrugamento ao imprimir ABS" +msgid "" +"Object will be raised by this number of support layers. Use this function to " +"avoid wrapping when print ABS" +msgstr "" +"O objeto será elevado por este número de camadas de suporte. Use esta função " +"para evitar o enrugamento ao imprimir ABS" -msgid "G-code path is genereated after simplifing the contour of model to avoid too much points and gcode lines in gcode file. Smaller value means higher resolution and more time to slice" -msgstr "O caminho do G-code é gerado após simplificar o contorno do modelo para evitar muitos pontos e linhas de código G no arquivo de código G. Um valor menor significa maior resolução e mais tempo para fatiar" +msgid "" +"G-code path is genereated after simplifing the contour of model to avoid too " +"much points and gcode lines in gcode file. Smaller value means higher " +"resolution and more time to slice" +msgstr "" +"O caminho do G-code é gerado após simplificar o contorno do modelo para " +"evitar muitos pontos e linhas de código G no arquivo de código G. Um valor " +"menor significa maior resolução e mais tempo para fatiar" msgid "Travel distance threshold" msgstr "Limiar de distância de deslocamento" -msgid "Only trigger retraction when the travel distance is longer than this threshold" -msgstr "Disparar a retração somente quando a distância da deslocamento for maior que este limite" +msgid "" +"Only trigger retraction when the travel distance is longer than this " +"threshold" +msgstr "" +"Disparar a retração somente quando a distância da deslocamento for maior que " +"este limite" msgid "Retract amount before wipe" msgstr "Quantidade de retração antes da limpeza" -msgid "The length of fast retraction before wipe, relative to retraction length" -msgstr "O comprimento da retração rápida antes da limpeza, em relação ao comprimento da retração" +msgid "" +"The length of fast retraction before wipe, relative to retraction length" +msgstr "" +"O comprimento da retração rápida antes da limpeza, em relação ao comprimento " +"da retração" msgid "Retract when change layer" msgstr "Retrair ao mudar de camada" @@ -10004,38 +12052,68 @@ msgstr "Forçar uma retração ao mudar de camada" msgid "Retraction Length" msgstr "Distância de retração" -msgid "Some amount of material in extruder is pulled back to avoid ooze during long travel. Set zero to disable retraction" -msgstr "Alguma quantidade de material no extrusor é puxada para trás para evitar oozing durante viagens longas. Defina zero para desativar a retração" +msgid "" +"Some amount of material in extruder is pulled back to avoid ooze during long " +"travel. Set zero to disable retraction" +msgstr "" +"Alguma quantidade de material no extrusor é puxada para trás para evitar " +"oozing durante viagens longas. Defina zero para desativar a retração" msgid "Long retraction when cut(experimental)" msgstr "Retração longa quando cortado(experimental)" -msgid "Experimental feature.Retracting and cutting off the filament at a longer distance during changes to minimize purge.While this reduces flush significantly, it may also raise the risk of nozzle clogs or other printing problems." -msgstr "Recurso experimental. Retrair e cortar o filamento a uma distância mais longa durante mudanças para minimizar a purgação. Isto reduz significativamente o destaque, pode também aumentar o risco de bolhas no bico ou de outros problemas de impressão." +msgid "" +"Experimental feature.Retracting and cutting off the filament at a longer " +"distance during changes to minimize purge.While this reduces flush " +"significantly, it may also raise the risk of nozzle clogs or other printing " +"problems." +msgstr "" +"Recurso experimental. Retrair e cortar o filamento a uma distância mais " +"longa durante mudanças para minimizar a purgação. Isto reduz " +"significativamente o destaque, pode também aumentar o risco de bolhas no " +"bico ou de outros problemas de impressão." msgid "Retraction distance when cut" msgstr "Distância de retração ao cortar" -msgid "Experimental feature.Retraction length before cutting off during filament change" -msgstr "Funcionalidade experimental. Comprimento de retração antes de cortar durante a mudança de filamento" +msgid "" +"Experimental feature.Retraction length before cutting off during filament " +"change" +msgstr "" +"Funcionalidade experimental. Comprimento de retração antes de cortar durante " +"a mudança de filamento" msgid "Z hop when retract" msgstr "Z hop ao retrair" -msgid "Whenever the retraction is done, the nozzle is lifted a little to create clearance between nozzle and the print. It prevents nozzle from hitting the print when travel move. Using spiral line to lift z can prevent stringing" -msgstr "Sempre que a retração é feita, o bico é levantado um pouco para criar folga entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se mover. Usar linha espiral para levantar z pode evitar stringing" +msgid "" +"Whenever the retraction is done, the nozzle is lifted a little to create " +"clearance between nozzle and the print. It prevents nozzle from hitting the " +"print when travel move. Using spiral line to lift z can prevent stringing" +msgstr "" +"Sempre que a retração é feita, o bico é levantado um pouco para criar folga " +"entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se " +"mover. Usar linha espiral para levantar z pode evitar stringing" msgid "Z hop lower boundary" msgstr "Limite inferior do Z hop" -msgid "Z hop will only come into effect when Z is above this value and is below the parameter: \"Z hop upper boundary\"" -msgstr "O Z hop só entrará em vigor quando Z estiver acima deste valor e abaixo do parâmetro: \"Limite superior do Z hop\"" +msgid "" +"Z hop will only come into effect when Z is above this value and is below the " +"parameter: \"Z hop upper boundary\"" +msgstr "" +"O Z hop só entrará em vigor quando Z estiver acima deste valor e abaixo do " +"parâmetro: \"Limite superior do Z hop\"" msgid "Z hop upper boundary" msgstr "Limite superior do Z hop" -msgid "If this value is positive, Z hop will only come into effect when Z is above the parameter: \"Z hop lower boundary\" and is below this value" -msgstr "Se este valor for positivo, o Z hop só entrará em vigor quando Z estiver acima do parâmetro: \"Limite inferior do Z hop\" e abaixo deste valor" +msgid "" +"If this value is positive, Z hop will only come into effect when Z is above " +"the parameter: \"Z hop lower boundary\" and is below this value" +msgstr "" +"Se este valor for positivo, o Z hop só entrará em vigor quando Z estiver " +"acima do parâmetro: \"Limite inferior do Z hop\" e abaixo deste valor" msgid "Z hop type" msgstr "Tipo de Z hop" @@ -10049,20 +12127,32 @@ msgstr "Espiral" msgid "Only lift Z above" msgstr "Elevar Z apenas acima de" -msgid "If you set this to a positive value, Z lift will only take place above the specified absolute Z." -msgstr "Se você definir isso como um valor positivo, a elevação de Z só ocorrerá acima do Z absoluto especificado." +msgid "" +"If you set this to a positive value, Z lift will only take place above the " +"specified absolute Z." +msgstr "" +"Se você definir isso como um valor positivo, a elevação de Z só ocorrerá " +"acima do Z absoluto especificado." msgid "Only lift Z below" msgstr "Elevar Z apenas abaixo de" -msgid "If you set this to a positive value, Z lift will only take place below the specified absolute Z." -msgstr "Se você definir isso como um valor positivo, a elevação de Z só ocorrerá abaixo do Z absoluto especificado." +msgid "" +"If you set this to a positive value, Z lift will only take place below the " +"specified absolute Z." +msgstr "" +"Se você definir isso como um valor positivo, a elevação de Z só ocorrerá " +"abaixo do Z absoluto especificado." msgid "On surfaces" msgstr "Nas superfícies" -msgid "Enforce Z Hop behavior. This setting is impacted by the above settings (Only lift Z above/below)." -msgstr "Forçar Z Hop. Essa configuração é impactada pelas configurações acima (Somente elevar Z acima/abaixo)" +msgid "" +"Enforce Z Hop behavior. This setting is impacted by the above settings (Only " +"lift Z above/below)." +msgstr "" +"Forçar Z Hop. Essa configuração é impactada pelas configurações acima " +"(Somente elevar Z acima/abaixo)" msgid "All Surfaces" msgstr "Todas as superfícies" @@ -10079,11 +12169,20 @@ msgstr "Parte superior e inferior" msgid "Extra length on restart" msgstr "Comprimento extra na reinicialização" -msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." -msgstr "Quando a retração é compensada após o movimento de deslocamento, o extrusor empurrará essa quantidade adicional de filamento. Esta configuração é raramente necessária." +msgid "" +"When the retraction is compensated after the travel move, the extruder will " +"push this additional amount of filament. This setting is rarely needed." +msgstr "" +"Quando a retração é compensada após o movimento de deslocamento, o extrusor " +"empurrará essa quantidade adicional de filamento. Esta configuração é " +"raramente necessária." -msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." -msgstr "Quando a retração é compensada após a troca de ferramenta, o extrusor empurrará essa quantidade adicional de filamento." +msgid "" +"When the retraction is compensated after changing tool, the extruder will " +"push this additional amount of filament." +msgstr "" +"Quando a retração é compensada após a troca de ferramenta, o extrusor " +"empurrará essa quantidade adicional de filamento." msgid "Retraction Speed" msgstr "Velocidade de retração" @@ -10094,14 +12193,23 @@ msgstr "Velocidade das retratações" msgid "Deretraction Speed" msgstr "Velocidade de desretração" -msgid "Speed for reloading filament into extruder. Zero means same speed with retraction" -msgstr "Velocidade para recarregar o filamento no extrusor. Zero significa mesma velocidade de retração" +msgid "" +"Speed for reloading filament into extruder. Zero means same speed with " +"retraction" +msgstr "" +"Velocidade para recarregar o filamento no extrusor. Zero significa mesma " +"velocidade de retração" msgid "Use firmware retraction" msgstr "Usar retração de firmware" -msgid "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin." -msgstr "Esta configuração experimental usa os comandos G10 e G11 para fazer com que o firmware gerencie a retração. Isso é suportado apenas no Marlin mais recente." +msgid "" +"This experimental setting uses G10 and G11 commands to have the firmware " +"handle the retraction. This is only supported in recent Marlin." +msgstr "" +"Esta configuração experimental usa os comandos G10 e G11 para fazer com que " +"o firmware gerencie a retração. Isso é suportado apenas no Marlin mais " +"recente." msgid "Show auto-calibration marks" msgstr "Mostrar marcas de autocalibração automática" @@ -10109,8 +12217,11 @@ msgstr "Mostrar marcas de autocalibração automática" msgid "Disable set remaining print time" msgstr "Desabilitar definir tempo de impressão restante" -msgid "Disable generating of the M73: Set remaining print time in the final gcode" -msgstr "Desativar a geração do M73: Definir tempo restante de impressão no código final" +msgid "" +"Disable generating of the M73: Set remaining print time in the final gcode" +msgstr "" +"Desativar a geração do M73: Definir tempo restante de impressão no código " +"final" msgid "Seam position" msgstr "Posição da costura" @@ -10133,53 +12244,100 @@ msgstr "Aleatório" msgid "Staggered inner seams" msgstr "Costuras internas escalonadas" -msgid "This option causes the inner seams to be shifted backwards based on their depth, forming a zigzag pattern." -msgstr "Esta opção faz com que as costuras internas sejam deslocadas para trás com base em sua profundidade, formando um padrão de zigue-zague." +msgid "" +"This option causes the inner seams to be shifted backwards based on their " +"depth, forming a zigzag pattern." +msgstr "" +"Esta opção faz com que as costuras internas sejam deslocadas para trás com " +"base em sua profundidade, formando um padrão de zigue-zague." msgid "Seam gap" msgstr "Espaço entre costuras" msgid "" -"In order to reduce the visibility of the seam in a closed loop extrusion, the loop is interrupted and shortened by a specified amount.\n" -"This amount can be specified in millimeters or as a percentage of the current extruder diameter. The default value for this parameter is 10%." +"In order to reduce the visibility of the seam in a closed loop extrusion, " +"the loop is interrupted and shortened by a specified amount.\n" +"This amount can be specified in millimeters or as a percentage of the " +"current extruder diameter. The default value for this parameter is 10%." msgstr "" -"Para reduzir a visibilidade da costura em uma extrusão de loop fechado, o loop é interrompido e encurtado por uma quantidade especificada.\n" -"Esta quantidade pode ser especificada em milímetros ou como uma porcentagem do diâmetro atual do extrusor. O valor padrão para este parâmetro é 10%." +"Para reduzir a visibilidade da costura em uma extrusão de loop fechado, o " +"loop é interrompido e encurtado por uma quantidade especificada.\n" +"Esta quantidade pode ser especificada em milímetros ou como uma porcentagem " +"do diâmetro atual do extrusor. O valor padrão para este parâmetro é 10%." msgid "Scarf joint seam (beta)" msgstr "Junta Scarf (beta)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." -msgstr "Use a junta Scarf para minimizar a visibilidade da costura e aumentar a resistência da costura." +msgstr "" +"Use a junta Scarf para minimizar a visibilidade da costura e aumentar a " +"resistência da costura." msgid "Conditional scarf joint" msgstr "Junta Scarf condicional" -msgid "Apply scarf joints only to smooth perimeters where traditional seams do not conceal the seams at sharp corners effectively." -msgstr "Aplique juntas Scarf apenas em perímetros suaves onde costuras tradicionais não escondem as costuras em cantos agudos de forma eficaz." +msgid "" +"Apply scarf joints only to smooth perimeters where traditional seams do not " +"conceal the seams at sharp corners effectively." +msgstr "" +"Aplique juntas Scarf apenas em perímetros suaves onde costuras tradicionais " +"não escondem as costuras em cantos agudos de forma eficaz." msgid "Conditional angle threshold" msgstr "Ângulo condicional" msgid "" -"This option sets the threshold angle for applying a conditional scarf joint seam.\n" -"If the maximum angle within the perimeter loop exceeds this value (indicating the absence of sharp corners), a scarf joint seam will be used. The default value is 155°." +"This option sets the threshold angle for applying a conditional scarf joint " +"seam.\n" +"If the maximum angle within the perimeter loop exceeds this value " +"(indicating the absence of sharp corners), a scarf joint seam will be used. " +"The default value is 155°." msgstr "" -"Esta opção define o ângulo limite para aplicar uma costura de junta de cachecol condicional.\n" -"Se o ângulo máximo dentro do loop do perímetro exceder esse valor (indicando a ausência de cantos afiados), será usada uma costura de junta Scarf. O valor padrão é 155°." +"Esta opção define o ângulo limite para aplicar uma costura de junta de " +"cachecol condicional.\n" +"Se o ângulo máximo dentro do loop do perímetro exceder esse valor (indicando " +"a ausência de cantos afiados), será usada uma costura de junta Scarf. O " +"valor padrão é 155°." msgid "Conditional overhang threshold" msgstr "Overhang condicional" #, no-c-format, no-boost-format -msgid "This option determines the overhang threshold for the application of scarf joint seams. If the unsupported portion of the perimeter is less than this threshold, scarf joint seams will be applied. The default threshold is set at 40% of the external wall's width. Due to performance considerations, the degree of overhang is estimated." -msgstr "Esta opção determina o limiar de inclinação para a aplicação de juntas Scarf. Se a parte sem suporte do perímetro for inferior a esse limite, as juntas Scarf serão aplicadas. O limite padrão é definido em 40% da largura do perímetro externo. Devido a considerações de desempenho, o grau de inclinação é estimado." +msgid "" +"This option determines the overhang threshold for the application of scarf " +"joint seams. If the unsupported portion of the perimeter is less than this " +"threshold, scarf joint seams will be applied. The default threshold is set " +"at 40% of the external wall's width. Due to performance considerations, the " +"degree of overhang is estimated." +msgstr "" +"Esta opção determina o limiar de inclinação para a aplicação de juntas " +"Scarf. Se a parte sem suporte do perímetro for inferior a esse limite, as " +"juntas Scarf serão aplicadas. O limite padrão é definido em 40% da largura " +"do perímetro externo. Devido a considerações de desempenho, o grau de " +"inclinação é estimado." msgid "Scarf joint speed" msgstr "Velocidade da junta Scarf" -msgid "This option sets the printing speed for scarf joints. It is recommended to print scarf joints at a slow speed (less than 100 mm/s). It's also advisable to enable 'Extrusion rate smoothing' if the set speed varies significantly from the speed of the outer or inner walls. If the speed specified here is higher than the speed of the outer or inner walls, the printer will default to the slower of the two speeds. When specified as a percentage (e.g., 80%), the speed is calculated based on the respective outer or inner wall speed. The default value is set to 100%." -msgstr "Esta opção define a velocidade de impressão para as juntas Scarf. É recomendável imprimir as juntas Scarf em uma velocidade baixa (menor que 100 mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' se a velocidade definida variar significativamente da velocidade das paredes externas ou internas. Se a velocidade especificada aqui for maior que a velocidade das paredes externas ou internas, a impressora utilizará a mais lenta das duas velocidades. Quando especificado como uma porcentagem (por exemplo, 80%), a velocidade é calculada com base na velocidade do perímetro externo ou interna respectiva. O valor padrão é definido como 100%." +msgid "" +"This option sets the printing speed for scarf joints. It is recommended to " +"print scarf joints at a slow speed (less than 100 mm/s). It's also " +"advisable to enable 'Extrusion rate smoothing' if the set speed varies " +"significantly from the speed of the outer or inner walls. If the speed " +"specified here is higher than the speed of the outer or inner walls, the " +"printer will default to the slower of the two speeds. When specified as a " +"percentage (e.g., 80%), the speed is calculated based on the respective " +"outer or inner wall speed. The default value is set to 100%." +msgstr "" +"Esta opção define a velocidade de impressão para as juntas Scarf. É " +"recomendável imprimir as juntas Scarf em uma velocidade baixa (menor que 100 " +"mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' se a " +"velocidade definida variar significativamente da velocidade das paredes " +"externas ou internas. Se a velocidade especificada aqui for maior que a " +"velocidade das paredes externas ou internas, a impressora utilizará a mais " +"lenta das duas velocidades. Quando especificado como uma porcentagem (por " +"exemplo, 80%), a velocidade é calculada com base na velocidade do perímetro " +"externo ou interna respectiva. O valor padrão é definido como 100%." msgid "Scarf joint flow ratio" msgstr "Fluxo da junta Scarf" @@ -10192,10 +12350,12 @@ msgstr "Altura inicial da junta Scarf" msgid "" "Start height of the scarf.\n" -"This amount can be specified in millimeters or as a percentage of the current layer height. The default value for this parameter is 0." +"This amount can be specified in millimeters or as a percentage of the " +"current layer height. The default value for this parameter is 0." msgstr "" "Altura inicial da junta Scarf.\n" -"Esta quantidade pode ser especificada em milímetros ou como uma porcentagem da altura atual da camada. O valor padrão para este parâmetro é 0." +"Esta quantidade pode ser especificada em milímetros ou como uma porcentagem " +"da altura atual da camada. O valor padrão para este parâmetro é 0." msgid "Scarf around entire wall" msgstr "Junta Scarf em todo o perímetro" @@ -10206,8 +12366,12 @@ msgstr "A junta Scarf se estende por todo o comprimento do perímetro." msgid "Scarf length" msgstr "Comprimento da junta Scarf" -msgid "Length of the scarf. Setting this parameter to zero effectively disables the scarf." -msgstr "Comprimento da junta Scarf. Definir este parâmetro como zero efetivamente desabilita a junta Scarf." +msgid "" +"Length of the scarf. Setting this parameter to zero effectively disables the " +"scarf." +msgstr "" +"Comprimento da junta Scarf. Definir este parâmetro como zero efetivamente " +"desabilita a junta Scarf." msgid "Scarf steps" msgstr "Passos da junta Scarf" @@ -10224,32 +12388,64 @@ msgstr "Usar junta Scarf em paredes internas também." msgid "Role base wipe speed" msgstr "Velocidade de limpeza baseada no tipo de extrusão" -msgid "The wipe speed is determined by the speed of the current extrusion role.e.g. if a wipe action is executed immediately following an outer wall extrusion, the speed of the outer wall extrusion will be utilized for the wipe action." -msgstr "A velocidade de limpeza é determinada pela velocidade do tipo de extrusão atual. Por exemplo, se uma ação de limpeza for executada imediatamente após uma extrusão de perímetro externo, a velocidade da extrusão do perímetro externo será utilizada para a ação de limpeza." +msgid "" +"The wipe speed is determined by the speed of the current extrusion role.e.g. " +"if a wipe action is executed immediately following an outer wall extrusion, " +"the speed of the outer wall extrusion will be utilized for the wipe action." +msgstr "" +"A velocidade de limpeza é determinada pela velocidade do tipo de extrusão " +"atual. Por exemplo, se uma ação de limpeza for executada imediatamente após " +"uma extrusão de perímetro externo, a velocidade da extrusão do perímetro " +"externo será utilizada para a ação de limpeza." msgid "Wipe on loops" msgstr "Limpeza em loops" -msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." -msgstr "Para minimizar a visibilidade da costura em uma extrusão de loop fechado, é executado um pequeno movimento para dentro antes que o extrusor saia do loop." +msgid "" +"To minimize the visibility of the seam in a closed loop extrusion, a small " +"inward movement is executed before the extruder leaves the loop." +msgstr "" +"Para minimizar a visibilidade da costura em uma extrusão de loop fechado, é " +"executado um pequeno movimento para dentro antes que o extrusor saia do loop." msgid "Wipe before external loop" msgstr "Limpeza antes do loop externo" msgid "" -"To minimise visibility of potential overextrusion at the start of an external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall print order, the deretraction is performed slightly on the inside from the start of the external perimeter. That way any potential over extrusion is hidden from the outside surface. \n" +"To minimise visibility of potential overextrusion at the start of an " +"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order, the deretraction is performed slightly on the inside from the " +"start of the external perimeter. That way any potential over extrusion is " +"hidden from the outside surface. \n" "\n" -"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall print order as in these modes it is more likely an external perimeter is printed immediately after a deretraction move." +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " +"print order as in these modes it is more likely an external perimeter is " +"printed immediately after a deretraction move." msgstr "" -"Para minimizar a visibilidade de sobreextrusão potencial no início de um perímetro externo ao imprimir com a ordem de impressão de perímetro Externo/Interno ou Interno/Externo/Interno, a desretração é executada ligeiramente no interior a partir do início do perímetro externo. Dessa forma, qualquer sobreextrusão potencial é ocultada da superfície externa. \n" +"Para minimizar a visibilidade de sobreextrusão potencial no início de um " +"perímetro externo ao imprimir com a ordem de impressão de perímetro Externo/" +"Interno ou Interno/Externo/Interno, a desretração é executada ligeiramente " +"no interior a partir do início do perímetro externo. Dessa forma, qualquer " +"sobreextrusão potencial é ocultada da superfície externa. \n" "\n" -"Isso é útil ao imprimir com a ordem de impressão de perímetro Externa/Interna ou Interna/Externa/Interna, pois nesses modos é mais provável que um perímetro externo seja impresso imediatamente após um movimento de desretração." +"Isso é útil ao imprimir com a ordem de impressão de perímetro Externa/" +"Interna ou Interna/Externa/Interna, pois nesses modos é mais provável que um " +"perímetro externo seja impresso imediatamente após um movimento de " +"desretração." msgid "Wipe speed" msgstr "Velocidade de limpeza" -msgid "The wipe speed is determined by the speed setting specified in this configuration.If the value is expressed as a percentage (e.g. 80%), it will be calculated based on the travel speed setting above.The default value for this parameter is 80%" -msgstr "A velocidade de limpeza é determinada pela velocidade especificada nesta configuração. Se o valor for expresso como uma porcentagem (por exemplo, 80%), será calculado com base na configuração de velocidade de deslocamento acima. O valor padrão para este parâmetro é 80%" +msgid "" +"The wipe speed is determined by the speed setting specified in this " +"configuration.If the value is expressed as a percentage (e.g. 80%), it will " +"be calculated based on the travel speed setting above.The default value for " +"this parameter is 80%" +msgstr "" +"A velocidade de limpeza é determinada pela velocidade especificada nesta " +"configuração. Se o valor for expresso como uma porcentagem (por exemplo, " +"80%), será calculado com base na configuração de velocidade de deslocamento " +"acima. O valor padrão para este parâmetro é 80%" msgid "Skirt distance" msgstr "Distância da saia" @@ -10273,40 +12469,87 @@ msgid "Skirt speed" msgstr "Velocidade da saia" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." -msgstr "Velocidade da saia, em mm/s. Zero significa usar a velocidade padrão de extrusão da camada." +msgstr "" +"Velocidade da saia, em mm/s. Zero significa usar a velocidade padrão de " +"extrusão da camada." -msgid "The printing speed in exported gcode will be slowed down, when the estimated layer time is shorter than this value, to get better cooling for these layers" -msgstr "A velocidade de impressão no gcode exportado será reduzida quando o tempo estimado da camada for menor que esse valor, para obter uma melhor resfriamento para essas camadas" +msgid "" +"The printing speed in exported gcode will be slowed down, when the estimated " +"layer time is shorter than this value, to get better cooling for these layers" +msgstr "" +"A velocidade de impressão no gcode exportado será reduzida quando o tempo " +"estimado da camada for menor que esse valor, para obter uma melhor " +"resfriamento para essas camadas" msgid "Minimum sparse infill threshold" msgstr "Limiar mínimo de preenchimento" -msgid "Sparse infill area which is smaller than threshold value is replaced by internal solid infill" -msgstr "A área de preenchimento não sólido que é menor que o valor de limiar é substituída por preenchimento sólido interno" +msgid "" +"Sparse infill area which is smaller than threshold value is replaced by " +"internal solid infill" +msgstr "" +"A área de preenchimento não sólido que é menor que o valor de limiar é " +"substituída por preenchimento sólido interno" -msgid "Line width of internal solid infill. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura da linha de preenchimento sólido interno. Se expresso como uma %, será calculado sobre o diâmetro do bico." +msgid "" +"Line width of internal solid infill. If expressed as a %, it will be " +"computed over the nozzle diameter." +msgstr "" +"Largura da linha de preenchimento sólido interno. Se expresso como uma %, " +"será calculado sobre o diâmetro do bico." msgid "Speed of internal solid infill, not the top and bottom surface" -msgstr "Velocidade de preenchimento sólido interno, não a superfície superior e inferior" +msgstr "" +"Velocidade de preenchimento sólido interno, não a superfície superior e " +"inferior" -msgid "Spiralize smooths out the z moves of the outer contour. And turns a solid model into a single walled print with solid bottom layers. The final generated model has no seam" -msgstr "A espiralização suaviza os movimentos z do contorno externo. E transforma um modelo sólido em uma impressão de perímetro único com camadas inferiores sólidas. O modelo final gerado não tem costura" +msgid "" +"Spiralize smooths out the z moves of the outer contour. And turns a solid " +"model into a single walled print with solid bottom layers. The final " +"generated model has no seam" +msgstr "" +"A espiralização suaviza os movimentos z do contorno externo. E transforma um " +"modelo sólido em uma impressão de perímetro único com camadas inferiores " +"sólidas. O modelo final gerado não tem costura" msgid "Smooth Spiral" msgstr "Espiral Suave" -msgid "Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam at all, even in the XY directions on walls that are not vertical" -msgstr "A Espiral Suave suaviza os movimentos X e Y, resultando em nenhuma costura visível, mesmo nas direções XY em paredes que não são verticais" +msgid "" +"Smooth Spiral smoothes out X and Y moves as wellresulting in no visible seam " +"at all, even in the XY directions on walls that are not vertical" +msgstr "" +"A Espiral Suave suaviza os movimentos X e Y, resultando em nenhuma costura " +"visível, mesmo nas direções XY em paredes que não são verticais" msgid "Max XY Smoothing" msgstr "Suavização Máxima XY" -msgid "Maximum distance to move points in XY to try to achieve a smooth spiralIf expressed as a %, it will be computed over nozzle diameter" -msgstr "Distância máxima para mover pontos em XY para tentar obter uma espiral suave. Se expresso como uma %, será calculado sobre o diâmetro do bico" +msgid "" +"Maximum distance to move points in XY to try to achieve a smooth spiralIf " +"expressed as a %, it will be computed over nozzle diameter" +msgstr "" +"Distância máxima para mover pontos em XY para tentar obter uma espiral " +"suave. Se expresso como uma %, será calculado sobre o diâmetro do bico" -msgid "If smooth or traditional mode is selected, a timelapse video will be generated for each print. After each layer is printed, a snapshot is taken with the chamber camera. All of these snapshots are composed into a timelapse video when printing completes. If smooth mode is selected, the toolhead will move to the excess chute after each layer is printed and then take a snapshot. Since the melt filament may leak from the nozzle during the process of taking a snapshot, prime tower is required for smooth mode to wipe nozzle." -msgstr "Se o modo suave ou tradicional for selecionado, um vídeo em time-lapse será gerado para cada impressão. Após cada camada ser impressa, uma captura de tela é feita com a câmera da câmara. Todas essas capturas de tela são compostas em um vídeo em time-lapse quando a impressão é concluída. Se o modo suave for selecionado, a extrusora se moverá para fora após cada camada ser impressa e então tirará uma captura de tela. Como o filamento derretido pode vazar do bico durante o processo de tirar uma captura de tela, é necessário uma torre de priming para o modo suave para limpar o bico." +msgid "" +"If smooth or traditional mode is selected, a timelapse video will be " +"generated for each print. After each layer is printed, a snapshot is taken " +"with the chamber camera. All of these snapshots are composed into a " +"timelapse video when printing completes. If smooth mode is selected, the " +"toolhead will move to the excess chute after each layer is printed and then " +"take a snapshot. Since the melt filament may leak from the nozzle during the " +"process of taking a snapshot, prime tower is required for smooth mode to " +"wipe nozzle." +msgstr "" +"Se o modo suave ou tradicional for selecionado, um vídeo em time-lapse será " +"gerado para cada impressão. Após cada camada ser impressa, uma captura de " +"tela é feita com a câmera da câmara. Todas essas capturas de tela são " +"compostas em um vídeo em time-lapse quando a impressão é concluída. Se o " +"modo suave for selecionado, a extrusora se moverá para fora após cada camada " +"ser impressa e então tirará uma captura de tela. Como o filamento derretido " +"pode vazar do bico durante o processo de tirar uma captura de tela, é " +"necessário uma torre de priming para o modo suave para limpar o bico." msgid "Traditional" msgstr "Tradicional" @@ -10332,8 +12575,18 @@ msgstr "Use um único bico para imprimir múltiplos filamentos" msgid "Manual Filament Change" msgstr "Troca Manual de Filamento" -msgid "Enable this option to omit the custom Change filament G-code only at the beginning of the print. The tool change command (e.g., T0) will be skipped throughout the entire print. This is useful for manual multi-material printing, where we use M600/PAUSE to trigger the manual filament change action." -msgstr "Ative esta opção para omitir o código G de troca de filamento personalizado apenas no início da impressão. O comando de troca de ferramenta (por exemplo, T0) será ignorado durante toda a impressão. Isso é útil para impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a ação de troca manual de filamento." +msgid "" +"Enable this option to omit the custom Change filament G-code only at the " +"beginning of the print. The tool change command (e.g., T0) will be skipped " +"throughout the entire print. This is useful for manual multi-material " +"printing, where we use M600/PAUSE to trigger the manual filament change " +"action." +msgstr "" +"Ative esta opção para omitir o código G de troca de filamento personalizado " +"apenas no início da impressão. O comando de troca de ferramenta (por " +"exemplo, T0) será ignorado durante toda a impressão. Isso é útil para " +"impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a " +"ação de troca manual de filamento." msgid "Purge in prime tower" msgstr "Purgar na torre de priming" @@ -10347,26 +12600,49 @@ msgstr "Ativar inserção de filamento" msgid "No sparse layers (beta)" msgstr "Sem camadas esparsas (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no toolchanges. On layers with a toolchange, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Se ativado, a torre de limpeza não será impressa em camadas sem trocas de ferramentas. Em camadas com uma troca de ferramentas, o extrusor viajará para baixo para imprimir a torre de limpeza. O usuário é responsável por garantir que não haja colisão com a impressão." +msgid "" +"If enabled, the wipe tower will not be printed on layers with no " +"toolchanges. On layers with a toolchange, extruder will travel downward to " +"print the wipe tower. User is responsible for ensuring there is no collision " +"with the print." +msgstr "" +"Se ativado, a torre de limpeza não será impressa em camadas sem trocas de " +"ferramentas. Em camadas com uma troca de ferramentas, o extrusor viajará " +"para baixo para imprimir a torre de limpeza. O usuário é responsável por " +"garantir que não haja colisão com a impressão." msgid "Prime all printing extruders" msgstr "Primer todos os extrusores de impressão" -msgid "If enabled, all printing extruders will be primed at the front edge of the print bed at the start of the print." -msgstr "Se ativado, todos os extrusores de impressão serão iniciados na borda frontal da mesa de impressão no início da impressão." +msgid "" +"If enabled, all printing extruders will be primed at the front edge of the " +"print bed at the start of the print." +msgstr "" +"Se ativado, todos os extrusores de impressão serão iniciados na borda " +"frontal da mesa de impressão no início da impressão." msgid "Slice gap closing radius" msgstr "Tolerância do fatiamento" -msgid "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low." -msgstr "Espaços menores que 2x a tolerância de fatiamentoo serão preenchidas durante o fatiamento da malha. Aumentar a tolerância de fatiamento pode reduzir a resolução final da impressão, portanto, é aconselhável manter o valor razoavelmente baixo." +msgid "" +"Cracks smaller than 2x gap closing radius are being filled during the " +"triangle mesh slicing. The gap closing operation may reduce the final print " +"resolution, therefore it is advisable to keep the value reasonably low." +msgstr "" +"Espaços menores que 2x a tolerância de fatiamentoo serão preenchidas durante " +"o fatiamento da malha. Aumentar a tolerância de fatiamento pode reduzir a " +"resolução final da impressão, portanto, é aconselhável manter o valor " +"razoavelmente baixo." msgid "Slicing Mode" msgstr "Modo de Fatiamento" -msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." -msgstr "Use \"Par-impar\" para modelos de avião 3DLabPrint. Use \"Fechar buracos\" para fechar todos os buracos no modelo." +msgid "" +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " +"close all holes in the model." +msgstr "" +"Use \"Par-impar\" para modelos de avião 3DLabPrint. Use \"Fechar buracos\" " +"para fechar todos os buracos no modelo." msgid "Regular" msgstr "Padrão" @@ -10380,8 +12656,16 @@ msgstr "Fechar buracos" msgid "Z offset" msgstr "Deslocamento Z" -msgid "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop)." -msgstr "Este valor será adicionado (ou subtraído) de todas as coordenadas Z no G-code de saída. É usado para compensar a má posição do fim de curso Z: por exemplo, se o zero do seu fim de curso na verdade deixa o bico 0,3 mm longe da mesa de impressão, ajuste isso para -0,3 (ou corrija o seu fim de curso)." +msgid "" +"This value will be added (or subtracted) from all the Z coordinates in the " +"output G-code. It is used to compensate for bad Z endstop position: for " +"example, if your endstop zero actually leaves the nozzle 0.3mm far from the " +"print bed, set this to -0.3 (or fix your endstop)." +msgstr "" +"Este valor será adicionado (ou subtraído) de todas as coordenadas Z no G-" +"code de saída. É usado para compensar a má posição do fim de curso Z: por " +"exemplo, se o zero do seu fim de curso na verdade deixa o bico 0,3 mm longe " +"da mesa de impressão, ajuste isso para -0,3 (ou corrija o seu fim de curso)." msgid "Enable support" msgstr "Ativar suporte" @@ -10389,8 +12673,14 @@ msgstr "Ativar suporte" msgid "Enable support generation." msgstr "Ativar a geração de suporte." -msgid "normal(auto) and tree(auto) is used to generate support automatically. If normal(manual) or tree(manual) is selected, only support enforcers are generated" -msgstr "normal(auto) e tree(auto) são usados para gerar suporte automaticamente. Se normal(manual) ou tree(manual) for selecionado, apenas os suportes são gerados" +msgid "" +"normal(auto) and tree(auto) is used to generate support automatically. If " +"normal(manual) or tree(manual) is selected, only support enforcers are " +"generated" +msgstr "" +"normal(auto) e tree(auto) são usados para gerar suporte automaticamente. Se " +"normal(manual) ou tree(manual) for selecionado, apenas os suportes são " +"gerados" msgid "normal(auto)" msgstr "normal(automático)" @@ -10414,7 +12704,8 @@ msgid "Pattern angle" msgstr "Ângulo de padrão" msgid "Use this setting to rotate the support pattern on the horizontal plane." -msgstr "Use esta configuração para girar o padrão de suporte no plano horizontal." +msgstr "" +"Use esta configuração para girar o padrão de suporte no plano horizontal." msgid "On build plate only" msgstr "Somente na mesa" @@ -10425,8 +12716,12 @@ msgstr "Não criar suporte na superfície do modelo, apenas na mesa" msgid "Support critical regions only" msgstr "Suportar apenas regiões críticas" -msgid "Only create support for critical regions including sharp tail, cantilever, etc." -msgstr "Crie suporte apenas para regiões críticas, incluindo cauda afiada, balanço, etc." +msgid "" +"Only create support for critical regions including sharp tail, cantilever, " +"etc." +msgstr "" +"Crie suporte apenas para regiões críticas, incluindo cauda afiada, balanço, " +"etc." msgid "Remove small overhangs" msgstr "Remover pequenos overhangs" @@ -10449,29 +12744,47 @@ msgstr "A diferença z entre a interface inferior de suporte e o objeto" msgid "Support/raft base" msgstr "Suporte/base" -msgid "Filament to print support base and raft. \"Default\" means no specific filament for support and current filament is used" -msgstr "Filamento para imprimir a base e suporte. \"Padrão\" significa nenhum filamento específico para suporte e o filamento atual será usado" +msgid "" +"Filament to print support base and raft. \"Default\" means no specific " +"filament for support and current filament is used" +msgstr "" +"Filamento para imprimir a base e suporte. \"Padrão\" significa nenhum " +"filamento específico para suporte e o filamento atual será usado" msgid "Avoid interface filament for base" msgstr "Evitar o filamento da interface para a base" -msgid "Avoid using support interface filament to print support base if possible." -msgstr "Evite usar o filamento da interface de suporte para imprimir a base, se possível." +msgid "" +"Avoid using support interface filament to print support base if possible." +msgstr "" +"Evite usar o filamento da interface de suporte para imprimir a base, se " +"possível." -msgid "Line width of support. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura da linha de suporte. Se expresso como %, será calculado sobre o diâmetro do bico." +msgid "" +"Line width of support. If expressed as a %, it will be computed over the " +"nozzle diameter." +msgstr "" +"Largura da linha de suporte. Se expresso como %, será calculado sobre o " +"diâmetro do bico." msgid "Interface use loop pattern" msgstr "Interface usa padrão de loop" -msgid "Cover the top contact layer of the supports with loops. Disabled by default." -msgstr "Cubra a camada de contato superior dos suportes com loops. Desativado por padrão." +msgid "" +"Cover the top contact layer of the supports with loops. Disabled by default." +msgstr "" +"Cubra a camada de contato superior dos suportes com loops. Desativado por " +"padrão." msgid "Support/raft interface" msgstr "Interface de suporte/plataforma" -msgid "Filament to print support interface. \"Default\" means no specific filament for support interface and current filament is used" -msgstr "Filamento para imprimir a interface de suporte. \"Padrão\" significa nenhum filamento específico para a interface de suporte e o filamento atual é usado" +msgid "" +"Filament to print support interface. \"Default\" means no specific filament " +"for support interface and current filament is used" +msgstr "" +"Filamento para imprimir a interface de suporte. \"Padrão\" significa nenhum " +"filamento específico para a interface de suporte e o filamento atual é usado" msgid "Top interface layers" msgstr "Camadas de interface superior" @@ -10498,7 +12811,8 @@ msgid "Bottom interface spacing" msgstr "Espaçamento da interface inferior" msgid "Spacing of bottom interface lines. Zero means solid interface" -msgstr "Espaçamento das linhas de interface inferior. Zero significa interface sólida" +msgstr "" +"Espaçamento das linhas de interface inferior. Zero significa interface sólida" msgid "Speed of support interface" msgstr "Velocidade da interface de suporte" @@ -10518,8 +12832,14 @@ msgstr "Oco" msgid "Interface pattern" msgstr "Padrão de interface" -msgid "Line pattern of support interface. Default pattern for non-soluble support interface is Rectilinear, while default pattern for soluble support interface is Concentric" -msgstr "Padrão de linha de interface de suporte. O padrão padrão para interface de suporte não solúvel é reticulado, enquanto o padrão padrão para interface de suporte solúvel é concêntrico" +msgid "" +"Line pattern of support interface. Default pattern for non-soluble support " +"interface is Rectilinear, while default pattern for soluble support " +"interface is Concentric" +msgstr "" +"Padrão de linha de interface de suporte. O padrão padrão para interface de " +"suporte não solúvel é reticulado, enquanto o padrão padrão para interface de " +"suporte solúvel é concêntrico" msgid "Rectilinear Interlaced" msgstr "Reticulado Interligado" @@ -10540,11 +12860,22 @@ msgid "Speed of support" msgstr "Velocidade do suporte" msgid "" -"Style and shape of the support. For normal support, projecting the supports into a regular grid will create more stable supports (default), while snug support towers will save material and reduce object scarring.\n" -"For tree support, slim and organic style will merge branches more aggressively and save a lot of material (default organic), while hybrid style will create similar structure to normal support under large flat overhangs." +"Style and shape of the support. For normal support, projecting the supports " +"into a regular grid will create more stable supports (default), while snug " +"support towers will save material and reduce object scarring.\n" +"For tree support, slim and organic style will merge branches more " +"aggressively and save a lot of material (default organic), while hybrid " +"style will create similar structure to normal support under large flat " +"overhangs." msgstr "" -"Estilo e forma do suporte. Para suporte normal, projetar os suportes em uma grade regular criará suportes mais estáveis (padrão), enquanto torres de suporte ajustadas economizarão material e reduzirão a cicatrização do objeto.\n" -"Para suporte de árvore, estilo fino e orgânico mesclarão os galhos de forma mais agressiva e economizarão muito material (orgânico padrão), enquanto o estilo híbrido criará uma estrutura semelhante ao suporte normal em grandes overhangs planas." +"Estilo e forma do suporte. Para suporte normal, projetar os suportes em uma " +"grade regular criará suportes mais estáveis (padrão), enquanto torres de " +"suporte ajustadas economizarão material e reduzirão a cicatrização do " +"objeto.\n" +"Para suporte de árvore, estilo fino e orgânico mesclarão os galhos de forma " +"mais agressiva e economizarão muito material (orgânico padrão), enquanto o " +"estilo híbrido criará uma estrutura semelhante ao suporte normal em grandes " +"overhangs planas." msgid "Snug" msgstr "Ajustado" @@ -10564,52 +12895,98 @@ msgstr "Orgânico" msgid "Independent support layer height" msgstr "Altura independente da camada de suporte" -msgid "Support layer uses layer height independent with object layer. This is to support customizing z-gap and save print time.This option will be invalid when the prime tower is enabled." -msgstr "A camada de suporte usa uma altura de camada independente da camada do objeto. Isso é para suportar a personalização do z-gap e economizar tempo de impressão. Esta opção será inválida quando a torre de priming estiver ativada." +msgid "" +"Support layer uses layer height independent with object layer. This is to " +"support customizing z-gap and save print time.This option will be invalid " +"when the prime tower is enabled." +msgstr "" +"A camada de suporte usa uma altura de camada independente da camada do " +"objeto. Isso é para suportar a personalização do z-gap e economizar tempo de " +"impressão. Esta opção será inválida quando a torre de priming estiver " +"ativada." msgid "Threshold angle" msgstr "Ângulo de limite" -msgid "Support will be generated for overhangs whose slope angle is below the threshold." -msgstr "O suporte será gerado para overhangs cujo ângulo de inclinação estiver abaixo do limite." +msgid "" +"Support will be generated for overhangs whose slope angle is below the " +"threshold." +msgstr "" +"O suporte será gerado para overhangs cujo ângulo de inclinação estiver " +"abaixo do limite." msgid "Tree support branch angle" msgstr "Ângulo da ramificação" -msgid "This setting determines the maximum overhang angle that t he branches of tree support allowed to make.If the angle is increased, the branches can be printed more horizontally, allowing them to reach farther." -msgstr "Esta configuração determina o ângulo máximo de inclinação que as ramificações de suporte de árvore podem fazer. Se o ângulo for aumentado, as ramificações podem ser impressas de forma mais horizontal, permitindo que alcancem mais longe." +msgid "" +"This setting determines the maximum overhang angle that t he branches of " +"tree support allowed to make.If the angle is increased, the branches can be " +"printed more horizontally, allowing them to reach farther." +msgstr "" +"Esta configuração determina o ângulo máximo de inclinação que as " +"ramificações de suporte de árvore podem fazer. Se o ângulo for aumentado, as " +"ramificações podem ser impressas de forma mais horizontal, permitindo que " +"alcancem mais longe." msgid "Preferred Branch Angle" msgstr "Ângulo preferido da ramificação" #. TRN PrintSettings: "Organic supports" > "Preferred Branch Angle" -msgid "The preferred angle of the branches, when they do not have to avoid the model. Use a lower angle to make them more vertical and more stable. Use a higher angle for branches to merge faster." -msgstr "O ângulo preferido das ramificações, quando eles não precisam evitar o modelo. Use um ângulo mais baixo para torná-los mais verticais e mais estáveis. Use um ângulo mais alto para que as ramificações se fundam mais rápido." +msgid "" +"The preferred angle of the branches, when they do not have to avoid the " +"model. Use a lower angle to make them more vertical and more stable. Use a " +"higher angle for branches to merge faster." +msgstr "" +"O ângulo preferido das ramificações, quando eles não precisam evitar o " +"modelo. Use um ângulo mais baixo para torná-los mais verticais e mais " +"estáveis. Use um ângulo mais alto para que as ramificações se fundam mais " +"rápido." msgid "Tree support branch distance" msgstr "Distância entre ramificações" -msgid "This setting determines the distance between neighboring tree support nodes." -msgstr "Essa configuração determina a distância entre os nós de suporte de árvore vizinhos." +msgid "" +"This setting determines the distance between neighboring tree support nodes." +msgstr "" +"Essa configuração determina a distância entre os nós de suporte de árvore " +"vizinhos." msgid "Branch Density" msgstr "Densidade da ramificação" #. TRN PrintSettings: "Organic supports" > "Branch Density" -msgid "Adjusts the density of the support structure used to generate the tips of the branches. A higher value results in better overhangs but the supports are harder to remove, thus it is recommended to enable top support interfaces instead of a high branch density value if dense interfaces are needed." -msgstr "Ajusta a densidade da estrutura de suporte usada para gerar as pontas das ramificações. Um valor mais alto resulta em overhangs melhores, mas os suportes são mais difíceis de remover, portanto, é recomendável ativar as interfaces superiores de suporte em vez de um valor de densidade de ramo alto se forem necessárias interfaces densas." +msgid "" +"Adjusts the density of the support structure used to generate the tips of " +"the branches. A higher value results in better overhangs but the supports " +"are harder to remove, thus it is recommended to enable top support " +"interfaces instead of a high branch density value if dense interfaces are " +"needed." +msgstr "" +"Ajusta a densidade da estrutura de suporte usada para gerar as pontas das " +"ramificações. Um valor mais alto resulta em overhangs melhores, mas os " +"suportes são mais difíceis de remover, portanto, é recomendável ativar as " +"interfaces superiores de suporte em vez de um valor de densidade de ramo " +"alto se forem necessárias interfaces densas." msgid "Adaptive layer height" msgstr "Altura de camada adaptativa" -msgid "Enabling this option means the height of tree support layer except the first will be automatically calculated " -msgstr "Ao ativar essa opção, a altura da camada de suporte de árvore, exceto a primeira, será calculada automaticamente " +msgid "" +"Enabling this option means the height of tree support layer except the " +"first will be automatically calculated " +msgstr "" +"Ao ativar essa opção, a altura da camada de suporte de árvore, exceto a " +"primeira, será calculada automaticamente " msgid "Auto brim width" msgstr "Largura de borda automática" -msgid "Enabling this option means the width of the brim for tree support will be automatically calculated" -msgstr "Ao ativar essa opção, a largura da borda para suporte de árvore será calculada automaticamente" +msgid "" +"Enabling this option means the width of the brim for tree support will be " +"automatically calculated" +msgstr "" +"Ao ativar essa opção, a largura da borda para suporte de árvore será " +"calculada automaticamente" msgid "Tree support brim width" msgstr "Largura da borda de suporte de árvore" @@ -10635,15 +13012,29 @@ msgid "Branch Diameter Angle" msgstr "Ângulo do diâmetro da ramificação" #. TRN PrintSettings: "Organic supports" > "Branch Diameter Angle" -msgid "The angle of the branches' diameter as they gradually become thicker towards the bottom. An angle of 0 will cause the branches to have uniform thickness over their length. A bit of an angle can increase stability of the organic support." -msgstr "O ângulo das ramificações à medida que elas gradualmente se tornam mais espessos em direção à base. Um ângulo de 0 fará com que as ramificações tenham espessura uniforme ao longo de seu comprimento. Um pequeno ângulo pode aumentar a estabilidade do suporte orgânico." +msgid "" +"The angle of the branches' diameter as they gradually become thicker towards " +"the bottom. An angle of 0 will cause the branches to have uniform thickness " +"over their length. A bit of an angle can increase stability of the organic " +"support." +msgstr "" +"O ângulo das ramificações à medida que elas gradualmente se tornam mais " +"espessos em direção à base. Um ângulo de 0 fará com que as ramificações " +"tenham espessura uniforme ao longo de seu comprimento. Um pequeno ângulo " +"pode aumentar a estabilidade do suporte orgânico." msgid "Branch Diameter with double walls" msgstr "Diâmetro da ramificação com perí. duplo" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" -msgid "Branches with area larger than the area of a circle of this diameter will be printed with double walls for stability. Set this value to zero for no double walls." -msgstr "Ramificações com área maior do que a área de um círculo com este diâmetro serão impressas com paredes duplas para estabilidade. Defina este valor como zero para não ter paredes duplas." +msgid "" +"Branches with area larger than the area of a circle of this diameter will be " +"printed with double walls for stability. Set this value to zero for no " +"double walls." +msgstr "" +"Ramificações com área maior do que a área de um círculo com este diâmetro " +"serão impressas com paredes duplas para estabilidade. Defina este valor como " +"zero para não ter paredes duplas." msgid "Support wall loops" msgstr "Perímetros de suporte" @@ -10654,24 +13045,44 @@ msgstr "Esta configuração especifica a contagem de paredes ao redor do suporte msgid "Tree support with infill" msgstr "Suporte de árvore com preenchimento" -msgid "This setting specifies whether to add infill inside large hollows of tree support" -msgstr "Essa configuração especifica se deve adicionar preenchimento dentro de grandes cavidades do suporte de árvore" +msgid "" +"This setting specifies whether to add infill inside large hollows of tree " +"support" +msgstr "" +"Essa configuração especifica se deve adicionar preenchimento dentro de " +"grandes cavidades do suporte de árvore" msgid "Activate temperature control" msgstr "Ativar controle de temperatura" msgid "" -"Enable this option for chamber temperature control. An M191 command will be added before \"machine_start_gcode\"\n" +"Enable this option for chamber temperature control. An M191 command will be " +"added before \"machine_start_gcode\"\n" "G-code commands: M141/M191 S(0-255)" msgstr "" -"Ative esta opção para controle de temperatura da câmara. Um comando M191 será adicionado antes de \"machine_start_gcode\"\n" +"Ative esta opção para controle de temperatura da câmara. Um comando M191 " +"será adicionado antes de \"machine_start_gcode\"\n" "Comandos G-code: M141/M191 S(0-255)" msgid "Chamber temperature" msgstr "Temperatura da câmara" -msgid "Higher chamber temperature can help suppress or reduce warping and potentially lead to higher interlayer bonding strength for high temperature materials like ABS, ASA, PC, PA and so on.At the same time, the air filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and other low temperature materials,the actual chamber temperature should not be high to avoid cloggings, so 0 which stands for turning off is highly recommended" -msgstr "Uma temperatura mais alta na câmara pode ajudar a suprimir ou reduzir o empenamento e potencialmente levar a uma maior resistência de ligação entre camadas para materiais de alta temperatura como ABS, ASA, PC, PA e assim por diante. Ao mesmo tempo, a filtragem de ar de ABS e ASA ficará pior. Para PLA, PETG, TPU, PVA e outros materiais de baixa temperatura, a temperatura real da câmara não deve ser alta para evitar obstruções, portanto, é altamente recomendável usar 0, que significa desligado" +msgid "" +"Higher chamber temperature can help suppress or reduce warping and " +"potentially lead to higher interlayer bonding strength for high temperature " +"materials like ABS, ASA, PC, PA and so on.At the same time, the air " +"filtration of ABS and ASA will get worse.While for PLA, PETG, TPU, PVA and " +"other low temperature materials,the actual chamber temperature should not be " +"high to avoid cloggings, so 0 which stands for turning off is highly " +"recommended" +msgstr "" +"Uma temperatura mais alta na câmara pode ajudar a suprimir ou reduzir o " +"empenamento e potencialmente levar a uma maior resistência de ligação entre " +"camadas para materiais de alta temperatura como ABS, ASA, PC, PA e assim por " +"diante. Ao mesmo tempo, a filtragem de ar de ABS e ASA ficará pior. Para " +"PLA, PETG, TPU, PVA e outros materiais de baixa temperatura, a temperatura " +"real da câmara não deve ser alta para evitar obstruções, portanto, é " +"altamente recomendável usar 0, que significa desligado" msgid "Nozzle temperature for layers after the initial one" msgstr "Temperatura do bico para camadas após a inicial" @@ -10679,17 +13090,30 @@ msgstr "Temperatura do bico para camadas após a inicial" msgid "Detect thin wall" msgstr "Detectar perímetro fino" -msgid "Detect thin wall which can't contain two line width. And use single line to print. Maybe printed not very well, because it's not closed loop" -msgstr "Detecta paredes finas que não podem conter duas larguras de linha. E usa uma linha única para imprimir. Talvez seja impresso não muito bem, porque não é um loop fechado" +msgid "" +"Detect thin wall which can't contain two line width. And use single line to " +"print. Maybe printed not very well, because it's not closed loop" +msgstr "" +"Detecta paredes finas que não podem conter duas larguras de linha. E usa uma " +"linha única para imprimir. Talvez seja impresso não muito bem, porque não é " +"um loop fechado" -msgid "This gcode is inserted when change filament, including T command to trigger tool change" -msgstr "Este gcode é inserido ao trocar o filamento, incluindo o comando T para acionar a troca de ferramenta" +msgid "" +"This gcode is inserted when change filament, including T command to trigger " +"tool change" +msgstr "" +"Este gcode é inserido ao trocar o filamento, incluindo o comando T para " +"acionar a troca de ferramenta" msgid "This gcode is inserted when the extrusion role is changed" msgstr "Esse gcode é inserido quando o tipo de extrusão muda" -msgid "Line width for top surfaces. If expressed as a %, it will be computed over the nozzle diameter." -msgstr "Largura da linha para superfícies superiores. Se expressa em %, será calculada sobre o diâmetro do bico." +msgid "" +"Line width for top surfaces. If expressed as a %, it will be computed over " +"the nozzle diameter." +msgstr "" +"Largura da linha para superfícies superiores. Se expressa em %, será " +"calculada sobre o diâmetro do bico." msgid "Speed of top surface infill which is solid" msgstr "Velocidade de preenchimento da superfície superior, que é sólida" @@ -10697,8 +13121,15 @@ msgstr "Velocidade de preenchimento da superfície superior, que é sólida" msgid "Top shell layers" msgstr "Camadas de topo" -msgid "This is the number of solid layers of top shell, including the top surface layer. When the thickness calculated by this value is thinner than top shell thickness, the top shell layers will be increased" -msgstr "Este é o número de camadas sólidas do perímetro superior, incluindo a camada da superfície superior. Quando a espessura calculada por este valor for menor do que a espessura do perímetro superior, as camadas do perímetro superior serão aumentadas" +msgid "" +"This is the number of solid layers of top shell, including the top surface " +"layer. When the thickness calculated by this value is thinner than top shell " +"thickness, the top shell layers will be increased" +msgstr "" +"Este é o número de camadas sólidas do perímetro superior, incluindo a camada " +"da superfície superior. Quando a espessura calculada por este valor for " +"menor do que a espessura do perímetro superior, as camadas do perímetro " +"superior serão aumentadas" msgid "Top solid layers" msgstr "Camadas sólidas superiores" @@ -10706,8 +13137,18 @@ msgstr "Camadas sólidas superiores" msgid "Top shell thickness" msgstr "Espessura da parede de topo" -msgid "The number of top solid layers is increased when slicing if the thickness calculated by top shell layers is thinner than this value. This can avoid having too thin shell when layer height is small. 0 means that this setting is disabled and thickness of top shell is absolutely determained by top shell layers" -msgstr "O número de camadas sólidas superiores é aumentado ao fatiar se a espessura calculada pelas camadas da parede superior for menor do que este valor. Isso pode evitar que a parede seja muito fina quando a altura da camada é pequena. 0 significa que esta configuração está desativada e a espessura da parede superior é determinada exclusivamente pelas camadas da parede superior" +msgid "" +"The number of top solid layers is increased when slicing if the thickness " +"calculated by top shell layers is thinner than this value. This can avoid " +"having too thin shell when layer height is small. 0 means that this setting " +"is disabled and thickness of top shell is absolutely determained by top " +"shell layers" +msgstr "" +"O número de camadas sólidas superiores é aumentado ao fatiar se a espessura " +"calculada pelas camadas da parede superior for menor do que este valor. Isso " +"pode evitar que a parede seja muito fina quando a altura da camada é " +"pequena. 0 significa que esta configuração está desativada e a espessura da " +"parede superior é determinada exclusivamente pelas camadas da parede superior" msgid "Speed of travel which is faster and without extrusion" msgstr "Velocidade de deslocamento mais rápida e sem extrusão" @@ -10715,27 +13156,47 @@ msgstr "Velocidade de deslocamento mais rápida e sem extrusão" msgid "Wipe while retracting" msgstr "Limpeza ao retrair" -msgid "Move nozzle along the last extrusion path when retracting to clean leaked material on nozzle. This can minimize blob when print new part after travel" -msgstr "Movimentar o bico ao longo do último caminho de extrusão ao retrair para limpar o material vazado no bico. Isso pode minimizar a formação de blob quando imprimir uma nova peça após o deslocamento" +msgid "" +"Move nozzle along the last extrusion path when retracting to clean leaked " +"material on nozzle. This can minimize blob when print new part after travel" +msgstr "" +"Movimentar o bico ao longo do último caminho de extrusão ao retrair para " +"limpar o material vazado no bico. Isso pode minimizar a formação de blob " +"quando imprimir uma nova peça após o deslocamento" msgid "Wipe Distance" msgstr "Distância de limpeza" msgid "" -"Discribe how long the nozzle will move along the last path when retracting. \n" +"Discribe how long the nozzle will move along the last path when " +"retracting. \n" "\n" -"Depending on how long the wipe operation lasts, how fast and long the extruder/filament retraction settings are, a retraction move may be needed to retract the remaining filament. \n" +"Depending on how long the wipe operation lasts, how fast and long the " +"extruder/filament retraction settings are, a retraction move may be needed " +"to retract the remaining filament. \n" "\n" -"Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." +"Setting a value in the retract amount before wipe setting below will perform " +"any excess retraction before the wipe, else it will be performed after." msgstr "" -"Descreva por quanto tempo o bico se moverá ao longo do último caminho ao retrair. \n" +"Descreva por quanto tempo o bico se moverá ao longo do último caminho ao " +"retrair. \n" "\n" -"Dependendo de quanto tempo dura a operação de limpeza, quão rápidas e longas são as configurações de retração do extrusor/filamento, pode ser necessário um movimento de retração para recolher o filamento restante. \n" +"Dependendo de quanto tempo dura a operação de limpeza, quão rápidas e longas " +"são as configurações de retração do extrusor/filamento, pode ser necessário " +"um movimento de retração para recolher o filamento restante. \n" "\n" -"Definir um valor na configuração de quantidade de retração antes da limpeza abaixo executará qualquer retração em excesso antes da limpeza, caso contrário, será realizada após." +"Definir um valor na configuração de quantidade de retração antes da limpeza " +"abaixo executará qualquer retração em excesso antes da limpeza, caso " +"contrário, será realizada após." -msgid "The wiping tower can be used to clean up the residue on the nozzle and stabilize the chamber pressure inside the nozzle, in order to avoid appearance defects when printing objects." -msgstr "A torre de limpeza pode ser usada para limpar o resíduo no bico e estabilizar a pressão na câmara dentro do bico, a fim de evitar defeitos de aparência ao imprimir objetos." +msgid "" +"The wiping tower can be used to clean up the residue on the nozzle and " +"stabilize the chamber pressure inside the nozzle, in order to avoid " +"appearance defects when printing objects." +msgstr "" +"A torre de limpeza pode ser usada para limpar o resíduo no bico e " +"estabilizar a pressão na câmara dentro do bico, a fim de evitar defeitos de " +"aparência ao imprimir objetos." msgid "Purging volumes" msgstr "Volumes de purga" @@ -10743,8 +13204,12 @@ msgstr "Volumes de purga" msgid "Flush multiplier" msgstr "Multiplicador de descarga" -msgid "The actual flushing volumes is equal to the flush multiplier multiplied by the flushing volumes in the table." -msgstr "Os volumes de descarga reais são iguais ao multiplicador de descarga multiplicado pelos volumes de descarga na tabela." +msgid "" +"The actual flushing volumes is equal to the flush multiplier multiplied by " +"the flushing volumes in the table." +msgstr "" +"Os volumes de descarga reais são iguais ao multiplicador de descarga " +"multiplicado pelos volumes de descarga na tabela." msgid "Prime volume" msgstr "Volume de priming" @@ -10764,8 +13229,12 @@ msgstr "Ângulo de rotação da torre de limpeza em relação ao eixo x." msgid "Stabilization cone apex angle" msgstr "Ângulo do ápice do cone de estabilização" -msgid "Angle at the apex of the cone that is used to stabilize the wipe tower. Larger angle means wider base." -msgstr "Ângulo no ápice do cone que é usado para estabilizar a torre de limpeza. Um ângulo maior significa uma base mais larga." +msgid "" +"Angle at the apex of the cone that is used to stabilize the wipe tower. " +"Larger angle means wider base." +msgstr "" +"Ângulo no ápice do cone que é usado para estabilizar a torre de limpeza. Um " +"ângulo maior significa uma base mais larga." msgid "Wipe tower purge lines spacing" msgstr "Espaçamento das linhas de purga da torre de limpeza" @@ -10776,23 +13245,55 @@ msgstr "Espaçamento das linhas de purga na torre de limpeza." msgid "Wipe tower extruder" msgstr "Extrusor da torre de limpeza" -msgid "The extruder to use when printing perimeter of the wipe tower. Set to 0 to use the one that is available (non-soluble would be preferred)." -msgstr "O extrusor a ser usado ao imprimir o perímetro da torre de limpeza. Defina como 0 para usar o disponível (não solúvel é preferido)." +msgid "" +"The extruder to use when printing perimeter of the wipe tower. Set to 0 to " +"use the one that is available (non-soluble would be preferred)." +msgstr "" +"O extrusor a ser usado ao imprimir o perímetro da torre de limpeza. Defina " +"como 0 para usar o disponível (não solúvel é preferido)." msgid "Purging volumes - load/unload volumes" msgstr "Volumes de purga - volumes de carga/descarga" -msgid "This vector saves required volumes to change from/to each tool used on the wipe tower. These values are used to simplify creation of the full purging volumes below." -msgstr "Este vetor salva os volumes necessários para mudar de/para cada ferramenta usada na torre de limpeza. Esses valores são usados para simplificar a criação dos volumes de purga completos abaixo." +msgid "" +"This vector saves required volumes to change from/to each tool used on the " +"wipe tower. These values are used to simplify creation of the full purging " +"volumes below." +msgstr "" +"Este vetor salva os volumes necessários para mudar de/para cada ferramenta " +"usada na torre de limpeza. Esses valores são usados para simplificar a " +"criação dos volumes de purga completos abaixo." -msgid "Purging after filament change will be done inside objects' infills. This may lower the amount of waste and decrease the print time. If the walls are printed with transparent filament, the mixed color infill will be seen outside. It will not take effect, unless the prime tower is enabled." -msgstr "A purga após a troca de filamento será feita dentro do preenchimento dos objetos. Isso pode reduzir a quantidade de resíduos e diminuir o tempo de impressão. Se as paredes forem impressas com filamento transparente, o preenchimento de cor mista será visto por fora. Isso não terá efeito, a menos que a torre de inicialização esteja ativada." +msgid "" +"Purging after filament change will be done inside objects' infills. This may " +"lower the amount of waste and decrease the print time. If the walls are " +"printed with transparent filament, the mixed color infill will be seen " +"outside. It will not take effect, unless the prime tower is enabled." +msgstr "" +"A purga após a troca de filamento será feita dentro do preenchimento dos " +"objetos. Isso pode reduzir a quantidade de resíduos e diminuir o tempo de " +"impressão. Se as paredes forem impressas com filamento transparente, o " +"preenchimento de cor mista será visto por fora. Isso não terá efeito, a " +"menos que a torre de inicialização esteja ativada." -msgid "Purging after filament change will be done inside objects' support. This may lower the amount of waste and decrease the print time. It will not take effect, unless the prime tower is enabled." -msgstr "A purga após a troca de filamento será feita dentro do suporte dos objetos. Isso pode reduzir a quantidade de resíduos e diminuir o tempo de impressão. Isso não terá efeito, a menos que a torre de inicialização esteja ativada." +msgid "" +"Purging after filament change will be done inside objects' support. This may " +"lower the amount of waste and decrease the print time. It will not take " +"effect, unless the prime tower is enabled." +msgstr "" +"A purga após a troca de filamento será feita dentro do suporte dos objetos. " +"Isso pode reduzir a quantidade de resíduos e diminuir o tempo de impressão. " +"Isso não terá efeito, a menos que a torre de inicialização esteja ativada." -msgid "This object will be used to purge the nozzle after a filament change to save filament and decrease the print time. Colours of the objects will be mixed as a result. It will not take effect, unless the prime tower is enabled." -msgstr "Este objeto será usado para purgar o bico após a troca de filamento para economizar filamento e diminuir o tempo de impressão. As cores dos objetos serão misturadas como resultado. Isso não terá efeito, a menos que a torre de inicialização esteja ativada." +msgid "" +"This object will be used to purge the nozzle after a filament change to save " +"filament and decrease the print time. Colours of the objects will be mixed " +"as a result. It will not take effect, unless the prime tower is enabled." +msgstr "" +"Este objeto será usado para purgar o bico após a troca de filamento para " +"economizar filamento e diminuir o tempo de impressão. As cores dos objetos " +"serão misturadas como resultado. Isso não terá efeito, a menos que a torre " +"de inicialização esteja ativada." msgid "Maximal bridging distance" msgstr "Distância máxima de ponte" @@ -10803,23 +13304,42 @@ msgstr "Distância máxima entre suportes em seções de preenchimento não sól msgid "X-Y hole compensation" msgstr "Compensação XY de furos" -msgid "Holes of object will be grown or shrunk in XY plane by the configured value. Positive value makes holes bigger. Negative value makes holes smaller. This function is used to adjust size slightly when the object has assembling issue" -msgstr "Os furos do objeto serão aumentados ou reduzidos no plano XY pelo valor configurado. Valor positivo aumenta os furos. Valor negativo reduz os furos. Essa função é usada para ajustar ligeiramente o tamanho quando o objeto tem problema de montagem" +msgid "" +"Holes of object will be grown or shrunk in XY plane by the configured value. " +"Positive value makes holes bigger. Negative value makes holes smaller. This " +"function is used to adjust size slightly when the object has assembling issue" +msgstr "" +"Os furos do objeto serão aumentados ou reduzidos no plano XY pelo valor " +"configurado. Valor positivo aumenta os furos. Valor negativo reduz os furos. " +"Essa função é usada para ajustar ligeiramente o tamanho quando o objeto tem " +"problema de montagem" msgid "X-Y contour compensation" msgstr "Compensação XY de contornos" -msgid "Contour of object will be grown or shrunk in XY plane by the configured value. Positive value makes contour bigger. Negative value makes contour smaller. This function is used to adjust size slightly when the object has assembling issue" -msgstr "O contorno do objeto será expandido ou reduzido no plano XY pelo valor configurado. Valor positivo aumenta o contorno. Valor negativo diminui o contorno. Essa função é usada para ajustar ligeiramente o tamanho quando o objeto tem problemas de montagem" +msgid "" +"Contour of object will be grown or shrunk in XY plane by the configured " +"value. Positive value makes contour bigger. Negative value makes contour " +"smaller. This function is used to adjust size slightly when the object has " +"assembling issue" +msgstr "" +"O contorno do objeto será expandido ou reduzido no plano XY pelo valor " +"configurado. Valor positivo aumenta o contorno. Valor negativo diminui o " +"contorno. Essa função é usada para ajustar ligeiramente o tamanho quando o " +"objeto tem problemas de montagem" msgid "Convert holes to polyholes" msgstr "Converter furos em polifuros" msgid "" -"Search for almost-circular holes that span more than one layer and convert the geometry to polyholes. Use the nozzle size and the (biggest) diameter to compute the polyhole.\n" +"Search for almost-circular holes that span more than one layer and convert " +"the geometry to polyholes. Use the nozzle size and the (biggest) diameter to " +"compute the polyhole.\n" "See http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgstr "" -"Procura por furos quase circulares que abrangem mais de uma camada e converta a geometria em polifuros. Usa o tamanho do bico e o diâmetro (maior) para calcular o polifuro.\n" +"Procura por furos quase circulares que abrangem mais de uma camada e " +"converta a geometria em polifuros. Usa o tamanho do bico e o diâmetro " +"(maior) para calcular o polifuro.\n" "Consulte http://hydraraptor.blogspot.com/2011/02/polyholes.html" msgid "Polyhole detection margin" @@ -10828,11 +13348,15 @@ msgstr "Margem de detecção de polifuros" #, no-c-format, no-boost-format msgid "" "Maximum defection of a point to the estimated radius of the circle.\n" -"As cylinders are often exported as triangles of varying size, points may not be on the circle circumference. This setting allows you some leway to broaden the detection.\n" +"As cylinders are often exported as triangles of varying size, points may not " +"be on the circle circumference. This setting allows you some leway to " +"broaden the detection.\n" "In mm or in % of the radius." msgstr "" "Máxima deflexão de um ponto para o raio estimado do círculo.\n" -"Como os cilindros frequentemente são exportados como triângulos de tamanho variável, os pontos podem não estar na circunferência do círculo. Esta configuração permite-lhe alguma margem para alargar a detecção.\n" +"Como os cilindros frequentemente são exportados como triângulos de tamanho " +"variável, os pontos podem não estar na circunferência do círculo. Esta " +"configuração permite-lhe alguma margem para alargar a detecção.\n" "Em milímetros ou em % do raio." msgid "Polyhole twist" @@ -10844,23 +13368,45 @@ msgstr "Girar o polifuro a cada camada." msgid "G-code thumbnails" msgstr "Miniaturas de G-code" -msgid "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the following format: \"XxY, XxY, ...\"" -msgstr "Tamanhos das imagens a serem armazenados em arquivos .gcode e .sl1 / .sl1s, no seguinte formato: \"XxY, XxY, ...\"" +msgid "" +"Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " +"following format: \"XxY, XxY, ...\"" +msgstr "" +"Tamanhos das imagens a serem armazenados em arquivos .gcode e .sl1 / .sl1s, " +"no seguinte formato: \"XxY, XxY, ...\"" msgid "Format of G-code thumbnails" msgstr "Formato das miniaturas de G-code" -msgid "Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI for low memory firmware" -msgstr "Formato das miniaturas de G-code: PNG para melhor qualidade, JPG para menor tamanho, QOI para firmware de baixa memória" +msgid "" +"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " +"QOI for low memory firmware" +msgstr "" +"Formato das miniaturas de G-code: PNG para melhor qualidade, JPG para menor " +"tamanho, QOI para firmware de baixa memória" msgid "Use relative E distances" msgstr "Usar distâncias E relativas" -msgid "Relative extrusion is recommended when using \"label_objects\" option.Some extruders work better with this option unckecked (absolute extrusion mode). Wipe tower is only compatible with relative mode. It is recommended on most printers. Default is checked" -msgstr "A extrusão relativa é recomendada ao usar a opção \"label_objects\". Algumas extrusoras funcionam melhor com esta opção desmarcada (modo de extrusão absoluta). A torre de limpeza é compatível apenas com o modo relativo. É recomendado na maioria das impressoras. O padrão é ativado" +msgid "" +"Relative extrusion is recommended when using \"label_objects\" option.Some " +"extruders work better with this option unckecked (absolute extrusion mode). " +"Wipe tower is only compatible with relative mode. It is recommended on most " +"printers. Default is checked" +msgstr "" +"A extrusão relativa é recomendada ao usar a opção \"label_objects\". Algumas " +"extrusoras funcionam melhor com esta opção desmarcada (modo de extrusão " +"absoluta). A torre de limpeza é compatível apenas com o modo relativo. É " +"recomendado na maioria das impressoras. O padrão é ativado" -msgid "Classic wall generator produces walls with constant extrusion width and for very thin areas is used gap-fill. Arachne engine produces walls with variable extrusion width" -msgstr "O gerador de perímetro clássico produz paredes com largura de extrusão constante e para áreas muito finas é usado preenchimento de vão. O motor Arachne produz perímetros com largura de extrusão variável" +msgid "" +"Classic wall generator produces walls with constant extrusion width and for " +"very thin areas is used gap-fill. Arachne engine produces walls with " +"variable extrusion width" +msgstr "" +"O gerador de perímetro clássico produz paredes com largura de extrusão " +"constante e para áreas muito finas é usado preenchimento de vão. O motor " +"Arachne produz perímetros com largura de extrusão variável" msgid "Classic" msgstr "Clássico" @@ -10871,62 +13417,140 @@ msgstr "Arachne" msgid "Wall transition length" msgstr "Comprimento da transição de perímetro" -msgid "When transitioning between different numbers of walls as the part becomes thinner, a certain amount of space is allotted to split or join the wall segments. It's expressed as a percentage over nozzle diameter" -msgstr "Ao fazer a transição entre diferentes números de paredes à medida que a peça fica mais fina, uma certa quantidade de espaço é designada para dividir ou unir os segmentos do perímetro. É expresso como uma porcentagem sobre o diâmetro do bico" +msgid "" +"When transitioning between different numbers of walls as the part becomes " +"thinner, a certain amount of space is allotted to split or join the wall " +"segments. It's expressed as a percentage over nozzle diameter" +msgstr "" +"Ao fazer a transição entre diferentes números de paredes à medida que a peça " +"fica mais fina, uma certa quantidade de espaço é designada para dividir ou " +"unir os segmentos do perímetro. É expresso como uma porcentagem sobre o " +"diâmetro do bico" msgid "Wall transitioning filter margin" msgstr "Margem de filtro de transição de perímetro" -msgid "Prevent transitioning back and forth between one extra wall and one less. This margin extends the range of extrusion widths which follow to [Minimum wall width - margin, 2 * Minimum wall width + margin]. Increasing this margin reduces the number of transitions, which reduces the number of extrusion starts/stops and travel time. However, large extrusion width variation can lead to under- or overextrusion problems. It's expressed as a percentage over nozzle diameter" -msgstr "Evita a transição de ida e volta entre um perímetro extra e um a menos. Esta margem amplia o intervalo de larguras de extrusão que seguem para [Largura mínima da perímetro - margem, 2 * Largura mínima da perímetro + margem]. Aumentar esta margem reduz o número de transições, o que reduz o número de inícios / paradas de extrusão e o tempo de deslocamento. No entanto, uma grande variação na largura de extrusão pode levar a problemas de subextrusão ou superextrusão. É expresso como uma porcentagem sobre o diâmetro do bico" +msgid "" +"Prevent transitioning back and forth between one extra wall and one less. " +"This margin extends the range of extrusion widths which follow to [Minimum " +"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " +"margin reduces the number of transitions, which reduces the number of " +"extrusion starts/stops and travel time. However, large extrusion width " +"variation can lead to under- or overextrusion problems. It's expressed as a " +"percentage over nozzle diameter" +msgstr "" +"Evita a transição de ida e volta entre um perímetro extra e um a menos. Esta " +"margem amplia o intervalo de larguras de extrusão que seguem para [Largura " +"mínima da perímetro - margem, 2 * Largura mínima da perímetro + margem]. " +"Aumentar esta margem reduz o número de transições, o que reduz o número de " +"inícios / paradas de extrusão e o tempo de deslocamento. No entanto, uma " +"grande variação na largura de extrusão pode levar a problemas de subextrusão " +"ou superextrusão. É expresso como uma porcentagem sobre o diâmetro do bico" msgid "Wall transitioning threshold angle" msgstr "Ângulo de limite de transição de perímetro" -msgid "When to create transitions between even and odd numbers of walls. A wedge shape with an angle greater than this setting will not have transitions and no walls will be printed in the center to fill the remaining space. Reducing this setting reduces the number and length of these center walls, but may leave gaps or overextrude" -msgstr "Quando criar transições entre números pares e ímpares de paredes. Uma forma de cunha com um ângulo maior do que esta configuração não terá transições e nenhumo perímetro será impresso no centro para preencher o espaço restante. Reduzir esta configuração reduz o número e o comprimento dessas paredes centrais, mas pode deixar vazios ou extrusão excessiva" +msgid "" +"When to create transitions between even and odd numbers of walls. A wedge " +"shape with an angle greater than this setting will not have transitions and " +"no walls will be printed in the center to fill the remaining space. Reducing " +"this setting reduces the number and length of these center walls, but may " +"leave gaps or overextrude" +msgstr "" +"Quando criar transições entre números pares e ímpares de paredes. Uma forma " +"de cunha com um ângulo maior do que esta configuração não terá transições e " +"nenhumo perímetro será impresso no centro para preencher o espaço restante. " +"Reduzir esta configuração reduz o número e o comprimento dessas paredes " +"centrais, mas pode deixar vazios ou extrusão excessiva" msgid "Wall distribution count" msgstr "Contagem de distribuição de perímetro" -msgid "The number of walls, counted from the center, over which the variation needs to be spread. Lower values mean that the outer walls don't change in width" -msgstr "O número de paredes, contadas a partir do centro, sobre as quais a variação precisa ser espalhada. Valores menores significam que as paredes externas não mudam de largura" +msgid "" +"The number of walls, counted from the center, over which the variation needs " +"to be spread. Lower values mean that the outer walls don't change in width" +msgstr "" +"O número de paredes, contadas a partir do centro, sobre as quais a variação " +"precisa ser espalhada. Valores menores significam que as paredes externas " +"não mudam de largura" msgid "Minimum feature size" msgstr "Tamanho mínimo do elemento" -msgid "Minimum thickness of thin features. Model features that are thinner than this value will not be printed, while features thicker than the Minimum feature size will be widened to the Minimum wall width. It's expressed as a percentage over nozzle diameter" -msgstr "Espessura mínima de elementos finos. Elementos do modelo que são mais finos do que este valor não serão impressos, enquanto elementos mais espessos que o tamanho mínimo do elemento serão alargados até a largura mínima do perímetro. É expresso como uma porcentagem sobre o diâmetro do bico" +msgid "" +"Minimum thickness of thin features. Model features that are thinner than " +"this value will not be printed, while features thicker than the Minimum " +"feature size will be widened to the Minimum wall width. It's expressed as a " +"percentage over nozzle diameter" +msgstr "" +"Espessura mínima de elementos finos. Elementos do modelo que são mais finos " +"do que este valor não serão impressos, enquanto elementos mais espessos que " +"o tamanho mínimo do elemento serão alargados até a largura mínima do " +"perímetro. É expresso como uma porcentagem sobre o diâmetro do bico" msgid "Minimum wall length" msgstr "Comprimento mínimo do perímetro" msgid "" -"Adjust this value to prevent short, unclosed walls from being printed, which could increase print time. Higher values remove more and longer walls.\n" +"Adjust this value to prevent short, unclosed walls from being printed, which " +"could increase print time. Higher values remove more and longer walls.\n" "\n" -"NOTE: Bottom and top surfaces will not be affected by this value to prevent visual gaps on the ouside of the model. Adjust 'One wall threshold' in the Advanced settings below to adjust the sensitivity of what is considered a top-surface. 'One wall threshold' is only visibile if this setting is set above the default value of 0.5, or if single-wall top surfaces is enabled." +"NOTE: Bottom and top surfaces will not be affected by this value to prevent " +"visual gaps on the ouside of the model. Adjust 'One wall threshold' in the " +"Advanced settings below to adjust the sensitivity of what is considered a " +"top-surface. 'One wall threshold' is only visibile if this setting is set " +"above the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" -"Ajuste este valor para evitar que perímetros curtos e não fechados sejam impressos, o que poderia aumentar o tempo de impressão. Valores mais altos removem perímetros mais longos.\n" +"Ajuste este valor para evitar que perímetros curtos e não fechados sejam " +"impressos, o que poderia aumentar o tempo de impressão. Valores mais altos " +"removem perímetros mais longos.\n" "\n" -"NOTA: As superfícies inferior e superior não serão afetadas por este valor para evitar lacunas visuais no exterior do modelo. Ajuste o 'Limiar de um perímetro' nas configurações avançadas abaixo para ajustar a sensibilidade do que é considerado uma superfície superior. 'Limiar de um perímetro' só é visível se esta configuração estiver acima do valor padrão de 0,5, ou se superfícies superiores de uma única parede estiverem habilitadas." +"NOTA: As superfícies inferior e superior não serão afetadas por este valor " +"para evitar lacunas visuais no exterior do modelo. Ajuste o 'Limiar de um " +"perímetro' nas configurações avançadas abaixo para ajustar a sensibilidade " +"do que é considerado uma superfície superior. 'Limiar de um perímetro' só é " +"visível se esta configuração estiver acima do valor padrão de 0,5, ou se " +"superfícies superiores de uma única parede estiverem habilitadas." msgid "First layer minimum wall width" msgstr "Largura mínima do perímetro da primeira camada" -msgid "The minimum wall width that should be used for the first layer is recommended to be set to the same size as the nozzle. This adjustment is expected to enhance adhesion." -msgstr "A largura mínima do perímetro que deve ser usada para a primeira camada é recomendada para ser definida com o mesmo tamanho do bico. Este ajuste é esperado para melhorar a aderência." +msgid "" +"The minimum wall width that should be used for the first layer is " +"recommended to be set to the same size as the nozzle. This adjustment is " +"expected to enhance adhesion." +msgstr "" +"A largura mínima do perímetro que deve ser usada para a primeira camada é " +"recomendada para ser definida com o mesmo tamanho do bico. Este ajuste é " +"esperado para melhorar a aderência." msgid "Minimum wall width" msgstr "Largura mínima do perímetro" -msgid "Width of the wall that will replace thin features (according to the Minimum feature size) of the model. If the Minimum wall width is thinner than the thickness of the feature, the wall will become as thick as the feature itself. It's expressed as a percentage over nozzle diameter" -msgstr "Largura do perímetro que substituirá elementos finos (de acordo com o tamanho mínimo do elemento) do modelo. Se a Largura mínima do perímetro for mais fina do que a espessura do elemento, o perímetro será tão espesso quanto o próprio elemento. É expresso como uma porcentagem sobre o diâmetro do bico" +msgid "" +"Width of the wall that will replace thin features (according to the Minimum " +"feature size) of the model. If the Minimum wall width is thinner than the " +"thickness of the feature, the wall will become as thick as the feature " +"itself. It's expressed as a percentage over nozzle diameter" +msgstr "" +"Largura do perímetro que substituirá elementos finos (de acordo com o " +"tamanho mínimo do elemento) do modelo. Se a Largura mínima do perímetro for " +"mais fina do que a espessura do elemento, o perímetro será tão espesso " +"quanto o próprio elemento. É expresso como uma porcentagem sobre o diâmetro " +"do bico" msgid "Detect narrow internal solid infill" msgstr "Detectar preenchimento sólido interno estreito" -msgid "This option will auto detect narrow internal solid infill area. If enabled, concentric pattern will be used for the area to speed printing up. Otherwise, rectilinear pattern is used defaultly." -msgstr "Esta opção irá detectar automaticamente áreas de preenchimento sólido interno estreito. Se ativada, o padrão concêntrico será usado para a área para acelerar a impressão. Caso contrário, o padrão reticulado é usado por padrão." +msgid "" +"This option will auto detect narrow internal solid infill area. If enabled, " +"concentric pattern will be used for the area to speed printing up. " +"Otherwise, rectilinear pattern is used defaultly." +msgstr "" +"Esta opção irá detectar automaticamente áreas de preenchimento sólido " +"interno estreito. Se ativada, o padrão concêntrico será usado para a área " +"para acelerar a impressão. Caso contrário, o padrão reticulado é usado por " +"padrão." msgid "invalid value " msgstr "valor inválido " @@ -10950,13 +13574,18 @@ msgid "No check" msgstr "Sem verificação" msgid "Do not run any validity checks, such as gcode path conflicts check." -msgstr "Não execute nenhuma verificação de validade, como a verificação de conflitos de caminho do gcode." +msgstr "" +"Não execute nenhuma verificação de validade, como a verificação de conflitos " +"de caminho do gcode." msgid "Ensure on bed" msgstr "Garantir na mesa" -msgid "Lift the object above the bed when it is partially below. Disabled by default" -msgstr "Eleve o objeto acima da mesa quando estiver parcialmente abaixo. Desativado por padrão" +msgid "" +"Lift the object above the bed when it is partially below. Disabled by default" +msgstr "" +"Eleve o objeto acima da mesa quando estiver parcialmente abaixo. Desativado " +"por padrão" msgid "Orient Options" msgstr "Opções de Orientação" @@ -10976,8 +13605,14 @@ msgstr "Ângulo de rotação ao redor do eixo Y em graus." msgid "Data directory" msgstr "Diretório de dados" -msgid "Load and store settings at the given directory. This is useful for maintaining different profiles or including configurations from a network storage." -msgstr "Carregar e armazenar configurações no diretório fornecido. Isso é útil para manter diferentes perfis ou incluir configurações de um armazenamento em rede." +msgid "" +"Load and store settings at the given directory. This is useful for " +"maintaining different profiles or including configurations from a network " +"storage." +msgstr "" +"Carregar e armazenar configurações no diretório fornecido. Isso é útil para " +"manter diferentes perfis ou incluir configurações de um armazenamento em " +"rede." msgid "Load custom gcode" msgstr "Carregar gcode personalizado" @@ -10991,11 +13626,23 @@ msgstr "Z-hop atual" msgid "Contains z-hop present at the beginning of the custom G-code block." msgstr "Contém o z-hop presente no início do bloco de G-code personalizado." -msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so PrusaSlicer knows where it travels from when it gets control back." -msgstr "Posição do extrusor no início do bloco de G-code personalizado. Se o G-code personalizado se deslocar para outro lugar, ele deve escrever nesta variável para que o PrusaSlicer saiba de onde se desloca quando recupera o controle." +msgid "" +"Position of the extruder at the beginning of the custom G-code block. If the " +"custom G-code travels somewhere else, it should write to this variable so " +"PrusaSlicer knows where it travels from when it gets control back." +msgstr "" +"Posição do extrusor no início do bloco de G-code personalizado. Se o G-code " +"personalizado se deslocar para outro lugar, ele deve escrever nesta variável " +"para que o PrusaSlicer saiba de onde se desloca quando recupera o controle." -msgid "Retraction state at the beginning of the custom G-code block. If the custom G-code moves the extruder axis, it should write to this variable so PrusaSlicer deretracts correctly when it gets control back." -msgstr "Estado de retração no início do bloco de G-code personalizado. Se o G-code personalizado mover o eixo do extrusor, ele deve escrever nesta variável para que o PrusaSlicer desretraia corretamente quando recupera o controle." +msgid "" +"Retraction state at the beginning of the custom G-code block. If the custom " +"G-code moves the extruder axis, it should write to this variable so " +"PrusaSlicer deretracts correctly when it gets control back." +msgstr "" +"Estado de retração no início do bloco de G-code personalizado. Se o G-code " +"personalizado mover o eixo do extrusor, ele deve escrever nesta variável " +"para que o PrusaSlicer desretraia corretamente quando recupera o controle." msgid "Extra deretraction" msgstr "Desretração extra" @@ -11012,8 +13659,12 @@ msgstr "Índice base zero da extrusora atualmente utilizada." msgid "Current object index" msgstr "Índice do objeto atual" -msgid "Specific for sequential printing. Zero-based index of currently printed object." -msgstr "Específico para impressão sequencial. Índice base zero do objeto atualmente impresso." +msgid "" +"Specific for sequential printing. Zero-based index of currently printed " +"object." +msgstr "" +"Específico para impressão sequencial. Índice base zero do objeto atualmente " +"impresso." msgid "Has wipe tower" msgstr "Tem torre de limpeza" @@ -11024,26 +13675,36 @@ msgstr "Se a torre de limpeza está sendo gerada ou não na impressão." msgid "Initial extruder" msgstr "Extrusora inicial" -msgid "Zero-based index of the first extruder used in the print. Same as initial_tool." -msgstr "Índice base zero da primeira extrusora utilizada na impressão. Mesmo que ferramenta_inicial." +msgid "" +"Zero-based index of the first extruder used in the print. Same as " +"initial_tool." +msgstr "" +"Índice base zero da primeira extrusora utilizada na impressão. Mesmo que " +"ferramenta_inicial." msgid "Initial tool" msgstr "Ferramenta inicial" -msgid "Zero-based index of the first extruder used in the print. Same as initial_extruder." -msgstr "Índice base zero da primeira extrusora utilizada na impressão. Mesmo que extrusora_inicial." +msgid "" +"Zero-based index of the first extruder used in the print. Same as " +"initial_extruder." +msgstr "" +"Índice base zero da primeira extrusora utilizada na impressão. Mesmo que " +"extrusora_inicial." msgid "Is extruder used?" msgstr "Extrusora utilizada?" msgid "Vector of bools stating whether a given extruder is used in the print." -msgstr "Vetor de booleanos indicando se uma dada extrusora é utilizada na impressão." +msgstr "" +"Vetor de booleanos indicando se uma dada extrusora é utilizada na impressão." msgid "Volume per extruder" msgstr "Volume por extrusora" msgid "Total filament volume extruded per extruder during the entire print." -msgstr "Volume total de filamento extrudado por extrusora durante toda a impressão." +msgstr "" +"Volume total de filamento extrudado por extrusora durante toda a impressão." msgid "Total toolchanges" msgstr "Total de trocas de ferramenta" @@ -11060,14 +13721,22 @@ msgstr "Volume total de filamento usado durante toda a impressão." msgid "Weight per extruder" msgstr "Peso por extrusora" -msgid "Weight per extruder extruded during the entire print. Calculated from filament_density value in Filament Settings." -msgstr "Peso por extrusora extrudido durante toda a impressão. Calculado a partir do valor de densidade do filamento nas configurações de filamento." +msgid "" +"Weight per extruder extruded during the entire print. Calculated from " +"filament_density value in Filament Settings." +msgstr "" +"Peso por extrusora extrudido durante toda a impressão. Calculado a partir do " +"valor de densidade do filamento nas configurações de filamento." msgid "Total weight" msgstr "Peso total" -msgid "Total weight of the print. Calculated from filament_density value in Filament Settings." -msgstr "Peso total da impressão. Calculado a partir do valor de densidade do filamento nas configurações de filamento." +msgid "" +"Total weight of the print. Calculated from filament_density value in " +"Filament Settings." +msgstr "" +"Peso total da impressão. Calculado a partir do valor de densidade do " +"filamento nas configurações de filamento." msgid "Total layer count" msgstr "Total de camadas" @@ -11085,16 +13754,22 @@ msgid "Number of instances" msgstr "Número de instâncias" msgid "Total number of object instances in the print, summed over all objects." -msgstr "Número total de instâncias de objeto na impressão, somadas sobre todos os objetos." +msgstr "" +"Número total de instâncias de objeto na impressão, somadas sobre todos os " +"objetos." msgid "Scale per object" msgstr "Escala por objeto" msgid "" -"Contains a string with the information about what scaling was applied to the individual objects. Indexing of the objects is zero-based (first object has index 0).\n" +"Contains a string with the information about what scaling was applied to the " +"individual objects. Indexing of the objects is zero-based (first object has " +"index 0).\n" "Example: 'x:100% y:50% z:100'." msgstr "" -"Contém uma frase com informações sobre qual escala foi aplicada aos objetos individuais. A indexação dos objetos é baseada em zero (o primeiro objeto tem índice 0).\n" +"Contém uma frase com informações sobre qual escala foi aplicada aos objetos " +"individuais. A indexação dos objetos é baseada em zero (o primeiro objeto " +"tem índice 0).\n" "Exemplo: 'x:100% y:50% z:100'." msgid "Input filename without extension" @@ -11103,17 +13778,27 @@ msgstr "Nome do arquivo de entrada sem extensão" msgid "Source filename of the first object, without extension." msgstr "Nome do arquivo de origem do primeiro objeto, sem extensão." -msgid "The vector has two elements: x and y coordinate of the point. Values in mm." -msgstr "O vetor possui dois elementos: coordenada x e y do ponto. Valores em mm." +msgid "" +"The vector has two elements: x and y coordinate of the point. Values in mm." +msgstr "" +"O vetor possui dois elementos: coordenada x e y do ponto. Valores em mm." -msgid "The vector has two elements: x and y dimension of the bounding box. Values in mm." -msgstr "O vetor tem dois elementos: dimensão x e y da caixa delimitadora. Valores em mm." +msgid "" +"The vector has two elements: x and y dimension of the bounding box. Values " +"in mm." +msgstr "" +"O vetor tem dois elementos: dimensão x e y da caixa delimitadora. Valores em " +"mm." msgid "First layer convex hull" msgstr "Parede convexa da primeira camada" -msgid "Vector of points of the first layer convex hull. Each element has the following format:'[x, y]' (x and y are floating-point numbers in mm)." -msgstr "Vetor de pontos do perímetro convexo da primeira camada. Cada elemento tem o seguinte formato: '[x, y]' (x e y são números em ponto flutuante em mm)." +msgid "" +"Vector of points of the first layer convex hull. Each element has the " +"following format:'[x, y]' (x and y are floating-point numbers in mm)." +msgstr "" +"Vetor de pontos do perímetro convexo da primeira camada. Cada elemento tem o " +"seguinte formato: '[x, y]' (x e y são números em ponto flutuante em mm)." msgid "Bottom-left corner of first layer bounding box" msgstr "Canto inferior esquerdo da caixa delimitadora da primeira camada" @@ -11157,8 +13842,12 @@ msgstr "Nome do perfil de impressão usado para fatiar." msgid "Filament preset name" msgstr "Nome do perfil de filamento" -msgid "Names of the filament presets used for slicing. The variable is a vector containing one name for each extruder." -msgstr "Nomes dos perfis de filamento usados para fatiar. A variável é um vetor contendo um nome para cada extrusora." +msgid "" +"Names of the filament presets used for slicing. The variable is a vector " +"containing one name for each extruder." +msgstr "" +"Nomes dos perfis de filamento usados para fatiar. A variável é um vetor " +"contendo um nome para cada extrusora." msgid "Printer preset name" msgstr "Nome do perfil de impressora" @@ -11176,13 +13865,19 @@ msgid "Layer number" msgstr "Número da camada" msgid "Index of the current layer. One-based (i.e. first layer is number 1)." -msgstr "Índice da camada atual. Baseado em um (ou seja, a primeira camada é o número 1)." +msgstr "" +"Índice da camada atual. Baseado em um (ou seja, a primeira camada é o número " +"1)." msgid "Layer z" msgstr "Camada z" -msgid "Height of the current layer above the print bed, measured to the top of the layer." -msgstr "Altura da camada atual acima da mesa de impressão, medida até o topo da camada." +msgid "" +"Height of the current layer above the print bed, measured to the top of the " +"layer." +msgstr "" +"Altura da camada atual acima da mesa de impressão, medida até o topo da " +"camada." msgid "Maximal layer z" msgstr "Altura máxima da camada z" @@ -11227,8 +13922,12 @@ msgid "large overhangs" msgstr "overhangs grandes" #, c-format, boost-format -msgid "It seems object %s has %s. Please re-orient the object or enable support generation." -msgstr "Parece que o objeto %s tem %s. Por favor, reoriente o objeto ou habilite a geração de suporte." +msgid "" +"It seems object %s has %s. Please re-orient the object or enable support " +"generation." +msgstr "" +"Parece que o objeto %s tem %s. Por favor, reoriente o objeto ou habilite a " +"geração de suporte." msgid "Optimizing toolpath" msgstr "Otimizando caminho da ferramenta" @@ -11236,14 +13935,20 @@ msgstr "Otimizando caminho da ferramenta" msgid "Slicing mesh" msgstr "Fatiando malha" -msgid "No layers were detected. You might want to repair your STL file(s) or check their size or thickness and retry.\n" -msgstr "Nenhuma camada foi detectada. Você pode querer reparar seu(s) arquivo(s) STL ou verificar seu tamanho ou espessura e tentar novamente.\n" +msgid "" +"No layers were detected. You might want to repair your STL file(s) or check " +"their size or thickness and retry.\n" +msgstr "" +"Nenhuma camada foi detectada. Você pode querer reparar seu(s) arquivo(s) STL " +"ou verificar seu tamanho ou espessura e tentar novamente.\n" msgid "" -"An object's XY size compensation will not be used because it is also color-painted.\n" +"An object's XY size compensation will not be used because it is also color-" +"painted.\n" "XY Size compensation can not be combined with color-painting." msgstr "" -"A compensação de tamanho XY de um objeto não será usada porque ele também está pintado com cor.\n" +"A compensação de tamanho XY de um objeto não será usada porque ele também " +"está pintado com cor.\n" "A compensação de tamanho XY não pode ser combinada com pintura colorida." #, c-format, boost-format @@ -11277,8 +13982,11 @@ msgstr "Suporte: corrigir buracos na camada %d" msgid "Support: propagate branches at layer %d" msgstr "Suporte: propagar ramificações na camada %d" -msgid "Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." -msgstr "Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão .stl, .obj, .amf(.xml)." +msgid "" +"Unknown file format. Input file must have .stl, .obj, .amf(.xml) extension." +msgstr "" +"Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão ." +"stl, .obj, .amf(.xml)." msgid "Loading of a model file failed." msgstr "Falha ao carregar um arquivo de modelo." @@ -11287,7 +13995,9 @@ msgid "The supplied file couldn't be read because it's empty" msgstr "O arquivo fornecido não pôde ser lido porque está vazio" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." -msgstr "Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão .3mf ou .zip.amf." +msgstr "" +"Formato de arquivo desconhecido. O arquivo de entrada deve ter extensão .3mf " +"ou .zip.amf." msgid "Canceled" msgstr "Cancelado" @@ -11295,6 +14005,9 @@ msgstr "Cancelado" msgid "load_obj: failed to parse" msgstr "load_obj: falha ao analisar" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "O arquivo contém polígonos com mais de 4 vértices." @@ -11343,8 +14056,11 @@ msgstr "Terminar" msgid "How to use calibration result?" msgstr "Como usar o resultado da calibração?" -msgid "You could change the Flow Dynamics Calibration Factor in material editing" -msgstr "Você pode alterar o Fator de Calibração de Dinâmica de Fluxo na edição de materiais" +msgid "" +"You could change the Flow Dynamics Calibration Factor in material editing" +msgstr "" +"Você pode alterar o Fator de Calibração de Dinâmica de Fluxo na edição de " +"materiais" msgid "" "The current firmware version of the printer does not support calibration.\n" @@ -11401,8 +14117,11 @@ msgstr "O nome é o mesmo que outro nome de preset existente" msgid "create new preset failed." msgstr "falha ao criar novo preset." -msgid "Are you sure to cancel the current calibration and return to the home page?" -msgstr "Tem certeza de que deseja cancelar a calibração atual e retornar à página inicial?" +msgid "" +"Are you sure to cancel the current calibration and return to the home page?" +msgstr "" +"Tem certeza de que deseja cancelar a calibração atual e retornar à página " +"inicial?" msgid "No Printer Connected!" msgstr "Nenhuma impressora conectada!" @@ -11416,6 +14135,14 @@ msgstr "Por favor, selecione o filamento para calibrar." msgid "The input value size must be 3." msgstr "O tamanho do valor de entrada deve ser 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Conectando à impressora..." @@ -11425,6 +14152,22 @@ msgstr "O resultado do teste falhado foi descartado." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "O resultado da Calibração de Dinâmica de Fluxo foi salvo na impressora" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" +"Já existe um resultado de calibração histórico com o mesmo nome: %s. Apenas " +"um dos resultados com o mesmo nome é salvo. Tem certeza que deseja " +"sobrescrever o resultado histórico?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Erro Interno" @@ -11435,21 +14178,30 @@ msgid "Flow rate calibration result has been saved to preset" msgstr "O resultado da calibração de fluxo foi salvo no preset" msgid "Max volumetric speed calibration result has been saved to preset" -msgstr "O resultado da calibração de fluxo volumétrico máximo foi salvo no preset" +msgstr "" +"O resultado da calibração de fluxo volumétrico máximo foi salvo no preset" msgid "When do you need Flow Dynamics Calibration" msgstr "Quando você precisa da Calibração de Dinâmica de Fluxo" msgid "" -"We now have added the auto-calibration for different filaments, which is fully automated and the result will be saved into the printer for future use. You only need to do the calibration in the following limited cases:\n" -"1. If you introduce a new filament of different brands/models or the filament is damp;\n" +"We now have added the auto-calibration for different filaments, which is " +"fully automated and the result will be saved into the printer for future " +"use. You only need to do the calibration in the following limited cases:\n" +"1. If you introduce a new filament of different brands/models or the " +"filament is damp;\n" "2. if the nozzle is worn out or replaced with a new one;\n" -"3. If the max volumetric speed or print temperature is changed in the filament setting." +"3. If the max volumetric speed or print temperature is changed in the " +"filament setting." msgstr "" -"Adicionamos agora 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" +"Adicionamos agora 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" "2. se o bico estiver desgastado ou 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." +"3. Se o fluxo volumétrico máximo ou a temperatura de impressão forem " +"alteradas na configuração do filamento." msgid "About this calibration" msgstr "Sobre esta calibração" @@ -11457,54 +14209,127 @@ msgstr "Sobre esta calibração" msgid "" "Please find the details of Flow Dynamics Calibration from our wiki.\n" "\n" -"Usually the calibration is unnecessary. When you start a single color/material print, with the \"flow dynamics calibration\" option checked in the print start menu, the printer will follow the old way, calibrate the filament before the print; When you start a multi color/material print, the printer will use the default compensation parameter for the filament during every filament switch which will have a good result in most cases.\n" +"Usually the calibration is unnecessary. When you start a single color/" +"material print, with the \"flow dynamics calibration\" option checked in the " +"print start menu, the printer will follow the old way, calibrate the " +"filament before the print; When you start a multi color/material print, the " +"printer will use the default compensation parameter for the filament during " +"every filament switch which will have a good result in most cases.\n" "\n" -"Please note there are a few cases that will make the calibration result not reliable: using a texture plate to do the calibration; the build plate does not have good adhesion (please wash the build plate or apply gluestick!) ...You can find more from our wiki.\n" +"Please note there are a few cases that will make the calibration result not " +"reliable: using a texture plate to do the calibration; the build plate does " +"not have good adhesion (please wash the build plate or apply gluestick!) ..." +"You can find more from our wiki.\n" "\n" -"The calibration results have about 10 percent jitter in our test, which may cause the result not exactly the same in each calibration. We are still investigating the root cause to do improvements with new updates." +"The calibration results have about 10 percent jitter in our test, which may " +"cause the result not exactly the same in each calibration. We are still " +"investigating the root cause to do improvements with new updates." msgstr "" "Encontre os detalhes da Calibração de Dinâmica de Fluxo na nossa wiki.\n" "\n" -"Normalmente, a calibração não é necessária. Quando você inicia uma impressão de cor/material única, com a opção \"calibração de dinâmica de fluxo\" ativada no menu de início da impressão, a impressora seguirá o método antigo, calibrando o filamento antes da impressão; Quando você inicia uma impressão de cor/material múltipla, a impressora usará o parâmetro de compensação padrão para o filamento durante cada troca de filamento, o que resultará em um bom resultado na maioria dos casos.\n" +"Normalmente, a calibração não é necessária. Quando você inicia uma impressão " +"de cor/material única, com a opção \"calibração de dinâmica de fluxo\" " +"ativada no menu de início da impressão, a impressora seguirá o método " +"antigo, calibrando o filamento antes da impressão; Quando você inicia uma " +"impressão de cor/material múltipla, a impressora usará o parâmetro de " +"compensação padrão para o filamento durante cada troca de filamento, o que " +"resultará em um bom resultado na maioria dos casos.\n" "\n" -"Por favor, note que existem alguns casos que podem tornar o resultado da calibração não confiável: usar uma mesa texturizada para fazer a calibração; a mesa não tem boa adesão (por favor, lave a mesa ou aplique cola!) ... Você pode encontrar mais informações em nossa wiki.\n" +"Por favor, note que existem alguns casos que podem tornar o resultado da " +"calibração não confiável: usar uma mesa texturizada para fazer a calibração; " +"a mesa não tem boa adesão (por favor, lave a mesa ou aplique cola!) ... Você " +"pode encontrar mais informações em nossa wiki.\n" "\n" -"Os resultados da calibração têm cerca de 10 por cento de oscilação em nossos testes, o que pode fazer com que o resultado não seja exatamente o mesmo em cada calibração. Ainda estamos investigando a causa raiz para fazer melhorias com novas atualizações." +"Os resultados da calibração têm cerca de 10 por cento de oscilação em nossos " +"testes, o que pode fazer com que o resultado não seja exatamente o mesmo em " +"cada calibração. Ainda estamos investigando a causa raiz para fazer " +"melhorias com novas atualizações." msgid "When to use Flow Rate Calibration" msgstr "Quando usar a Calibração de Fluxo" msgid "" -"After using Flow Dynamics Calibration, there might still be some extrusion issues, such as:\n" -"1. Over-Extrusion: Excess material on your printed object, forming blobs or zits, or the layers seem thicker than expected and not uniform.\n" -"2. Under-Extrusion: Very thin layers, weak infill strength, or gaps in the top layer of the model, even when printing slowly.\n" +"After using Flow Dynamics Calibration, there might still be some extrusion " +"issues, such as:\n" +"1. Over-Extrusion: Excess material on your printed object, forming blobs or " +"zits, or the layers seem thicker than expected and not uniform.\n" +"2. Under-Extrusion: Very thin layers, weak infill strength, or gaps in the " +"top layer of the model, even when printing slowly.\n" "3. Poor Surface Quality: The surface of your prints seems rough or uneven.\n" -"4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as they should be." +"4. Weak Structural Integrity: Prints break easily or don't seem as sturdy as " +"they should be." msgstr "" -"Depois de usar a Calibração de Dinâmica de Fluxo, ainda pode haver alguns problemas de extrusão, como:\n" -"1. Superextrusão: excesso de material no objeto impresso, formando grumos ou espinhas, ou as camadas parecem mais espessas do que o esperado e não uniformes.\n" -"2. Subextrusão: camadas muito finas, resistência fraca do preenchimento ou vazios na camada superior do modelo, mesmo ao imprimir lentamente.\n" -"3. Baixa Qualidade de Superfície: a superfície de suas impressões parece áspera ou irregular.\n" -"4. Integridade Estrutural Fraca: as impressões quebram facilmente ou não parecem tão robustas quanto deveriam." - -msgid "In addition, Flow Rate Calibration is crucial for foaming materials like LW-PLA used in RC planes. These materials expand greatly when heated, and calibration provides a useful reference flow rate." -msgstr "Além disso, a Calibração de Fluxo é crucial para materiais espumantes como LW-PLA usados em aviões RC. Esses materiais se expandem muito quando aquecidos, e a calibração fornece uma taxa de fluxo de referência útil." - -msgid "Flow Rate Calibration measures the ratio of expected to actual extrusion volumes. The default setting works well in Bambu Lab printers and official filaments as they were pre-calibrated and fine-tuned. For a regular filament, you usually won't need to perform a Flow Rate Calibration unless you still see the listed defects after you have done other calibrations. For more details, please check out the wiki article." -msgstr "A Calibração de Fluxo mede a relação entre os volumes de extrusão esperados e reais. A configuração padrão funciona bem em impressoras Bambu Lab e filamentos oficiais, pois foram pré-calibrados e ajustados. Para um filamento regular, geralmente você não precisará realizar uma Calibração da Taxa de Fluxo a menos que ainda veja os defeitos listados após ter feito outras calibrações. Para mais detalhes, consulte o artigo na wiki." +"Depois de usar a Calibração de Dinâmica de Fluxo, ainda pode haver alguns " +"problemas de extrusão, como:\n" +"1. Superextrusão: excesso de material no objeto impresso, formando grumos ou " +"espinhas, ou as camadas parecem mais espessas do que o esperado e não " +"uniformes.\n" +"2. Subextrusão: camadas muito finas, resistência fraca do preenchimento ou " +"vazios na camada superior do modelo, mesmo ao imprimir lentamente.\n" +"3. Baixa Qualidade de Superfície: a superfície de suas impressões parece " +"áspera ou irregular.\n" +"4. Integridade Estrutural Fraca: as impressões quebram facilmente ou não " +"parecem tão robustas quanto deveriam." msgid "" -"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, directly measuring the calibration patterns. However, please be advised that the efficacy and accuracy of this method may be compromised with specific types of materials. Particularly, filaments that are transparent or semi-transparent, sparkling-particled, or have a high-reflective finish may not be suitable for this calibration and can produce less-than-desirable results.\n" -"\n" -"The calibration results may vary between each calibration or filament. We are still improving the accuracy and compatibility of this calibration through firmware updates over time.\n" -"\n" -"Caution: Flow Rate Calibration is an advanced process, to be attempted only by those who fully understand its purpose and implications. Incorrect usage can lead to sub-par prints or printer damage. Please make sure to carefully read and understand the process before doing it." +"In addition, Flow Rate Calibration is crucial for foaming materials like LW-" +"PLA used in RC planes. These materials expand greatly when heated, and " +"calibration provides a useful reference flow rate." msgstr "" -"A Calibração Automática de Fluxo utiliza a tecnologia Micro-Lidar da Bambu Lab, medindo diretamente os padrões de calibração. No entanto, esteja ciente de que a eficácia e precisão deste método podem ser comprometidas com tipos específicos de materiais. Especialmente, filamentos que são transparentes ou semi-transparentes, com partículas brilhantes ou com acabamento altamente reflexivo podem não ser adequados para esta calibração e podem produzir resultados abaixo do desejado.\n" +"Além disso, a Calibração de Fluxo é crucial para materiais espumantes como " +"LW-PLA usados em aviões RC. Esses materiais se expandem muito quando " +"aquecidos, e a calibração fornece uma taxa de fluxo de referência útil." + +msgid "" +"Flow Rate Calibration measures the ratio of expected to actual extrusion " +"volumes. The default setting works well in Bambu Lab printers and official " +"filaments as they were pre-calibrated and fine-tuned. For a regular " +"filament, you usually won't need to perform a Flow Rate Calibration unless " +"you still see the listed defects after you have done other calibrations. For " +"more details, please check out the wiki article." +msgstr "" +"A Calibração de Fluxo mede a relação entre os volumes de extrusão esperados " +"e reais. A configuração padrão funciona bem em impressoras Bambu Lab e " +"filamentos oficiais, pois foram pré-calibrados e ajustados. Para um " +"filamento regular, geralmente você não precisará realizar uma Calibração da " +"Taxa de Fluxo a menos que ainda veja os defeitos listados após ter feito " +"outras calibrações. Para mais detalhes, consulte o artigo na wiki." + +msgid "" +"Auto Flow Rate Calibration utilizes Bambu Lab's Micro-Lidar technology, " +"directly measuring the calibration patterns. However, please be advised that " +"the efficacy and accuracy of this method may be compromised with specific " +"types of materials. Particularly, filaments that are transparent or semi-" +"transparent, sparkling-particled, or have a high-reflective finish may not " +"be suitable for this calibration and can produce less-than-desirable " +"results.\n" "\n" -"Os resultados da calibração podem variar entre cada calibração ou filamento. Ainda estamos melhorando a precisão e compatibilidade desta calibração por meio de atualizações de firmware ao longo do tempo.\n" +"The calibration results may vary between each calibration or filament. We " +"are still improving the accuracy and compatibility of this calibration " +"through firmware updates over time.\n" "\n" -"Atenção: A Calibração da Taxa de Fluxo é um processo avançado, para ser tentado apenas por aqueles que entendem completamente seu propósito e implicações. O uso incorreto pode resultar em impressões de baixa qualidade ou danos à impressora. Certifique-se de ler e entender cuidadosamente o processo antes de fazê-lo." +"Caution: Flow Rate Calibration is an advanced process, to be attempted only " +"by those who fully understand its purpose and implications. Incorrect usage " +"can lead to sub-par prints or printer damage. Please make sure to carefully " +"read and understand the process before doing it." +msgstr "" +"A Calibração Automática de Fluxo utiliza a tecnologia Micro-Lidar da Bambu " +"Lab, medindo diretamente os padrões de calibração. No entanto, esteja ciente " +"de que a eficácia e precisão deste método podem ser comprometidas com tipos " +"específicos de materiais. Especialmente, filamentos que são transparentes ou " +"semi-transparentes, com partículas brilhantes ou com acabamento altamente " +"reflexivo podem não ser adequados para esta calibração e podem produzir " +"resultados abaixo do desejado.\n" +"\n" +"Os resultados da calibração podem variar entre cada calibração ou filamento. " +"Ainda estamos melhorando a precisão e compatibilidade desta calibração por " +"meio de atualizações de firmware ao longo do tempo.\n" +"\n" +"Atenção: A Calibração da Taxa de Fluxo é um processo avançado, para ser " +"tentado apenas por aqueles que entendem completamente seu propósito e " +"implicações. O uso incorreto pode resultar em impressões de baixa qualidade " +"ou danos à impressora. Certifique-se de ler e entender cuidadosamente o " +"processo antes de fazê-lo." msgid "When you need Max Volumetric Speed Calibration" msgstr "Quando você precisa da Calibração de Velocidade Volumétrica Máxima" @@ -11513,7 +14338,9 @@ msgid "Over-extrusion or under extrusion" msgstr "Sobre-extrusão ou sub-extrusão" msgid "Max Volumetric Speed calibration is recommended when you print with:" -msgstr "A calibração de Velocidade Volumétrica Máxima é recomendada quando você imprime com:" +msgstr "" +"A calibração de Velocidade Volumétrica Máxima é recomendada quando você " +"imprime com:" msgid "material with significant thermal shrinkage/expansion, such as..." msgstr "material com significativa contração/expansão térmica, como..." @@ -11524,11 +14351,19 @@ msgstr "materiais com diâmetro de filamento impreciso" msgid "We found the best Flow Dynamics Calibration Factor" msgstr "Encontramos o melhor Fator de Calibração de Dinâmica de Fluxo" -msgid "Part of the calibration failed! You may clean the plate and retry. The failed test result would be dropped." -msgstr "Parte da calibração falhou! Você pode limpar a mesa e tentar novamente. O resultado do teste falho será descartado." +msgid "" +"Part of the calibration failed! You may clean the plate and retry. The " +"failed test result would be dropped." +msgstr "" +"Parte da calibração falhou! Você pode limpar a mesa e tentar novamente. O " +"resultado do teste falho será descartado." -msgid "*We recommend you to add brand, materia, type, and even humidity level in the Name" -msgstr "*Recomendamos que você adicione marca, material, tipo e até mesmo nível de umidade no nome" +msgid "" +"*We recommend you to add brand, materia, type, and even humidity level in " +"the Name" +msgstr "" +"*Recomendamos que você adicione marca, material, tipo e até mesmo nível de " +"umidade no nome" msgid "Failed" msgstr "Falhou" @@ -11539,12 +14374,22 @@ msgstr "Por favor, insira o nome que você deseja salvar na impressora." msgid "The name cannot exceed 40 characters." msgstr "O nome não pode ter mais de 40 caracteres." -msgid "Only one of the results with the same name will be saved. Are you sure you want to overrides the other results?" -msgstr "Apenas um dos resultados com o mesmo nome será salvo. Você tem certeza de que deseja substituir os outros resultados?" +msgid "" +"Only one of the results with the same name will be saved. Are you sure you " +"want to overrides the other results?" +msgstr "" +"Apenas um dos resultados com o mesmo nome será salvo. Você tem certeza de " +"que deseja substituir os outros resultados?" #, c-format, boost-format -msgid "There is already a historical calibration result with the same name: %s. Only one of the results with the same name is saved. Are you sure you want to overrides the historical result?" -msgstr "Já existe um resultado de calibração histórico com o mesmo nome: %s. Apenas um dos resultados com o mesmo nome é salvo. Você tem certeza de que deseja substituir o resultado histórico?" +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to overrides the historical result?" +msgstr "" +"Já existe um resultado de calibração histórico com o mesmo nome: %s. Apenas " +"um dos resultados com o mesmo nome é salvo. Você tem certeza de que deseja " +"substituir o resultado histórico?" msgid "Please find the best line on your plate" msgstr "Por favor, encontre a melhor linha em sua mesa" @@ -11602,7 +14447,8 @@ msgid "Please choose a block with smoothest top surface." msgstr "Por favor, escolha um bloco com a superfície superior mais lisa." msgid "Please input a valid value (0 <= Max Volumetric Speed <= 60)" -msgstr "Por favor, insira um valor válido (0 <= Velocidade Volumétrica Máxima <= 60)" +msgstr "" +"Por favor, insira um valor válido (0 <= Velocidade Volumétrica Máxima <= 60)" msgid "Calibration Type" msgstr "Tipo de Calibração" @@ -11616,15 +14462,16 @@ msgstr "Calibração Fina baseada no fluxo" msgid "Title" msgstr "Título" -msgid "A test model will be printed. Please clear the build plate and place it back to the hot bed before calibration." -msgstr "Um modelo de teste será impresso. Por favor, limpe a mesa e a coloque de volta na mesa aquecida antes da calibração." +msgid "" +"A test model will be printed. Please clear the build plate and place it back " +"to the hot bed before calibration." +msgstr "" +"Um modelo de teste será impresso. Por favor, limpe a mesa e a coloque de " +"volta na mesa aquecida antes da calibração." msgid "Printing Parameters" msgstr "Parâmetros de Impressão" -msgid "- ℃" -msgstr "- °C" - msgid "Plate Type" msgstr "Tipo de mesa" @@ -11644,7 +14491,8 @@ msgid "" msgstr "" "Dicas para material de calibração:\n" "- Materiais que podem compartilhar a mesma temperatura de mesa aquecida\n" -"- Diferentes marcas e famílias de filamentos (Marca = Bambu, Família = Básico, Fosco)" +"- Diferentes marcas e famílias de filamentos (Marca = Bambu, Família = " +"Básico, Fosco)" msgid "Pattern" msgstr "Padrão" @@ -11671,12 +14519,6 @@ msgstr "Para o Valor k" msgid "Step value" msgstr "Valor do Passo" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "O diâmetro do bico foi sincronizado das configurações da impressora" @@ -11704,11 +14546,15 @@ msgstr "Atualizando os registros históricos de Calibração de Dinâmica de Flu msgid "Action" msgstr "Ação" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Editar Calibração de Dinâmica de Fluxo" -msgid "New Flow Dynamics Calibration" -msgstr "Nova Calibração de Dinâmica de Fluxo" +msgid "New Flow Dynamic Calibration" +msgstr "" msgid "Ok" msgstr "Ok" @@ -11716,10 +14562,6 @@ msgstr "Ok" msgid "The filament must be selected." msgstr "O filamento deve ser selecionado." -#, c-format, boost-format -msgid "There is already a historical calibration result with the same name: %s. Only one of the results with the same name is saved. Are you sure you want to override the historical result?" -msgstr "Já existe um resultado de calibração histórico com o mesmo nome: %s. Apenas um dos resultados com o mesmo nome é salvo. Tem certeza que deseja sobrescrever o resultado histórico?" - msgid "Network lookup" msgstr "Procura de Rede" @@ -11899,7 +14741,8 @@ msgid "Upload to Printer Host with the following filename:" msgstr "Enviar para o Host da Impressora com o seguinte nome de arquivo:" msgid "Use forward slashes ( / ) as a directory separator if needed." -msgstr "Use barras inclinadas ( / ) como separador de diretórios, se necessário." +msgstr "" +"Use barras inclinadas ( / ) como separador de diretórios, se necessário." msgid "Upload to storage" msgstr "Enviar para armazenamento" @@ -12075,36 +14918,53 @@ msgid "Vendor is not selected, please reselect vendor." msgstr "Fornecedor não está selecionado, por favor, reselecione o fornecedor." msgid "Custom vendor is not input, please input custom vendor." -msgstr "O fornecedor personalizado não foi inserido, por favor insira o fornecedor personalizado." +msgstr "" +"O fornecedor personalizado não foi inserido, por favor insira o fornecedor " +"personalizado." -msgid "\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." -msgstr "\"Bambu\" ou \"Genérico\" não podem ser usados como fornecedor para filamentos personalizados." +msgid "" +"\"Bambu\" or \"Generic\" can not be used as a Vendor for custom filaments." +msgstr "" +"\"Bambu\" ou \"Genérico\" não podem ser usados como fornecedor para " +"filamentos personalizados." msgid "Filament type is not selected, please reselect type." -msgstr "O tipo de filamento não está selecionado, por favor, reselecione o tipo." +msgstr "" +"O tipo de filamento não está selecionado, por favor, reselecione o tipo." msgid "Filament serial is not inputed, please input serial." msgstr "O serial do filamento não foi inserido, por favor, insira o serial." -msgid "There may be escape characters in the vendor or serial input of filament. Please delete and re-enter." -msgstr "Pode haver caracteres de escape na entrada de fornecedor ou serial do filamento. Por favor, exclua e insira novamente." +msgid "" +"There may be escape characters in the vendor or serial input of filament. " +"Please delete and re-enter." +msgstr "" +"Pode haver caracteres de escape na entrada de fornecedor ou serial do " +"filamento. Por favor, exclua e insira novamente." msgid "All inputs in the custom vendor or serial are spaces. Please re-enter." -msgstr "Todas as entradas no fornecedor personalizado ou serial são espaços. Por favor, insira novamente." +msgstr "" +"Todas as entradas no fornecedor personalizado ou serial são espaços. Por " +"favor, insira novamente." msgid "The vendor can not be a number. Please re-enter." msgstr "O fornecedor não pode ser um número. Por favor, insira novamente." -msgid "You have not selected a printer or preset yet. Please select at least one." -msgstr "Você ainda não selecionou uma impressora ou preset. Por favor, selecione pelo menos um." +msgid "" +"You have not selected a printer or preset yet. Please select at least one." +msgstr "" +"Você ainda não selecionou uma impressora ou preset. Por favor, selecione " +"pelo menos um." #, c-format, boost-format msgid "" "The Filament name %s you created already exists. \n" -"If you continue creating, the preset created will be displayed with its full name. Do you want to continue?" +"If you continue creating, the preset created will be displayed with its full " +"name. Do you want to continue?" msgstr "" "O nome do Filamento %s que você criou já existe. \n" -"Se você continuar a criar, a predefinição criada será exibida com o seu nome completo. Você quer continuar?" +"Se você continuar a criar, a predefinição criada será exibida com o seu nome " +"completo. Você quer continuar?" msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Alguns presets existentes falharam ao serem criados, como segue:\n" @@ -12117,11 +14977,14 @@ msgstr "" "Você deseja reescrevê-lo?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" -"Renomearíamos os presets como \"Fornecedor Tipo Serial @ impressora que você selecionou\". \n" -"Para adicionar preset para mais impressoras, Por favor, vá para a seleção de impressoras" +"Renomearíamos os presets como \"Fornecedor Tipo Serial @ impressora que você " +"selecionou\". \n" +"Para adicionar preset para mais impressoras, Por favor, vá para a seleção de " +"impressoras" msgid "Create Printer/Nozzle" msgstr "Criar Impressora/Bico" @@ -12194,7 +15057,8 @@ msgid "Exception in obtaining file size, please import again." msgstr "Exceção ao obter o tamanho do arquivo, por favor, importe novamente." msgid "Preset path is not find, please reselect vendor." -msgstr "O caminho do preset não é encontrado, por favor, reselecione o fornecedor." +msgstr "" +"O caminho do preset não é encontrado, por favor, reselecione o fornecedor." msgid "The printer model was not found, please reselect." msgstr "O modelo da impressora não foi encontrado, por favor, reselecione." @@ -12220,24 +15084,38 @@ msgstr "Processar Modelo de Preset" msgid "Back Page 1" msgstr "Voltar à Página 1" -msgid "You have not yet chosen which printer preset to create based on. Please choose the vendor and model of the printer" -msgstr "Você ainda não escolheu em qual preset de impressora basear-se. Por favor, escolha o fornecedor e modelo da impressora" +msgid "" +"You have not yet chosen which printer preset to create based on. Please " +"choose the vendor and model of the printer" +msgstr "" +"Você ainda não escolheu em qual preset de impressora basear-se. Por favor, " +"escolha o fornecedor e modelo da impressora" -msgid "You have entered an illegal input in the printable area section on the first page. Please check before creating it." -msgstr "Você inseriu uma entrada ilegal na seção de área imprimível na primeira página. Por favor, verifique antes de criar." +msgid "" +"You have entered an illegal input in the printable area section on the first " +"page. Please check before creating it." +msgstr "" +"Você inseriu uma entrada ilegal na seção de área imprimível na primeira " +"página. Por favor, verifique antes de criar." msgid "The custom printer or model is not inputed, place input." msgstr "A impressora ou modelo personalizado não foi colocado." msgid "" -"The printer preset you created already has a preset with the same name. Do you want to overwrite it?\n" -"\tYes: Overwrite the printer preset with the same name, and filament and process presets with the same preset name will be recreated \n" -"and filament and process presets without the same preset name will be reserve.\n" +"The printer preset you created already has a preset with the same name. Do " +"you want to overwrite it?\n" +"\tYes: Overwrite the printer preset with the same name, and filament and " +"process presets with the same preset name will be recreated \n" +"and filament and process presets without the same preset name will be " +"reserve.\n" "\tCancel: Do not create a preset, return to the creation interface." msgstr "" -"O modelo de impressora que você criou já possui um modelo com o mesmo nome. Deseja substituí-lo?\n" -" \tSim: Substituir o modelo de impressora com o mesmo nome, e os modelos de filamento e processo com o mesmo nome do modelo serão recriados, \n" -" e os modelos de filamento e processo sem o mesmo nome do modelo serão preservados.\n" +"O modelo de impressora que você criou já possui um modelo com o mesmo nome. " +"Deseja substituí-lo?\n" +" \tSim: Substituir o modelo de impressora com o mesmo nome, e os modelos de " +"filamento e processo com o mesmo nome do modelo serão recriados, \n" +" e os modelos de filamento e processo sem o mesmo nome do modelo serão " +"preservados.\n" " \tCancelar: Não criar um modelo, retornar para a interface de criação." msgid "You need to select at least one filament preset." @@ -12258,20 +15136,34 @@ msgstr "Fornecedor não encontrado, por favor selecione novamente." msgid "Current vendor has no models, please reselect." msgstr "O fornecedor atual não possui modelos, por favor, selecione novamente." -msgid "You have not selected the vendor and model or inputed the custom vendor and model." -msgstr "Você não selecionou um fornecedor e modelo nem colocou fornecer e modelo personalizado." +msgid "" +"You have not selected the vendor and model or inputed the custom vendor and " +"model." +msgstr "" +"Você não selecionou um fornecedor e modelo nem colocou fornecer e modelo " +"personalizado." -msgid "There may be escape characters in the custom printer vendor or model. Please delete and re-enter." -msgstr "Pode haver caracteres de escape no fornecedor ou modelo personalizado da impressora. Por favor, exclua e insira novamente." +msgid "" +"There may be escape characters in the custom printer vendor or model. Please " +"delete and re-enter." +msgstr "" +"Pode haver caracteres de escape no fornecedor ou modelo personalizado da " +"impressora. Por favor, exclua e insira novamente." -msgid "All inputs in the custom printer vendor or model are spaces. Please re-enter." -msgstr "Todas as entradas no fornecedor ou modelo personalizado da impressora são espaços. Por favor, insira novamente." +msgid "" +"All inputs in the custom printer vendor or model are spaces. Please re-enter." +msgstr "" +"Todas as entradas no fornecedor ou modelo personalizado da impressora são " +"espaços. Por favor, insira novamente." msgid "Please check bed printable shape and origin input." msgstr "Por favor, verifique a forma imprimível da mesa e a entrada de origem." -msgid "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "Você ainda não selecionou a impressora para substituir o bico, por favor, escolha." +msgid "" +"You have not yet selected the printer to replace the nozzle, please choose." +msgstr "" +"Você ainda não selecionou a impressora para substituir o bico, por favor, " +"escolha." msgid "Create Printer Successful" msgstr "Impressora criada com sucesso" @@ -12283,28 +15175,39 @@ msgid "Printer Created" msgstr "Impressora criada" msgid "Please go to printer settings to edit your presets" -msgstr "Por favor vá parar configurações de impressora para editar os seus presets" +msgstr "" +"Por favor vá parar configurações de impressora para editar os seus presets" msgid "Filament Created" msgstr "Filamento criado" msgid "" "Please go to filament setting to edit your presets if you need.\n" -"Please note that nozzle temperature, hot bed temperature, and maximum volumetric speed has a significant impact on printing quality. Please set them carefully." +"Please note that nozzle temperature, hot bed temperature, and maximum " +"volumetric speed has a significant impact on printing quality. Please set " +"them carefully." msgstr "" -"Por favor, vá para as configurações do filamento para editar seus presets, se necessário. \n" -"Por favor, note que a temperatura do bico, temperatura da mesa aquecida e velocidade volumétrica máxima têm um impacto significativo na qualidade de impressão. Por favor, ajuste-os com cuidado." +"Por favor, vá para as configurações do filamento para editar seus presets, " +"se necessário. \n" +"Por favor, note que a temperatura do bico, temperatura da mesa aquecida e " +"velocidade volumétrica máxima têm um impacto significativo na qualidade de " +"impressão. Por favor, ajuste-os com cuidado." msgid "" "\n" "\n" -"Studio has detected that your user presets synchronization function is not enabled, which may result in unsuccessful Filament settings on the Device page. \n" +"Studio has detected that your user presets synchronization function is not " +"enabled, which may result in unsuccessful Filament settings on the Device " +"page. \n" "Click \"Sync user presets\" to enable the synchronization function." msgstr "" "\n" "\n" -"Studio detectou que sua função de sincronização predefinida não está ativa, o que pode resultar em configurações de arquivo malsucedidas na página do dispositivo. \n" -"Clique em \"Sincronizar pressets do usuário\" para habilitar a função de sincronização." +"Studio detectou que sua função de sincronização predefinida não está ativa, " +"o que pode resultar em configurações de arquivo malsucedidas na página do " +"dispositivo. \n" +"Clique em \"Sincronizar pressets do usuário\" para habilitar a função de " +"sincronização." msgid "Printer Setting" msgstr "Configuração da Impressora" @@ -12347,17 +15250,21 @@ msgstr "Exportação bem-sucedida" #, c-format, boost-format msgid "" -"The '%s' folder already exists in the current directory. Do you want to clear it and rebuild it.\n" -"If not, a time suffix will be added, and you can modify the name after creation." +"The '%s' folder already exists in the current directory. Do you want to " +"clear it and rebuild it.\n" +"If not, a time suffix will be added, and you can modify the name after " +"creation." msgstr "" "A pasta '%s' já existe no diretório atual. Deseja limpá-la e reconstruí-la?\n" -"Se não, um sufixo de tempo será adicionado, e você poderá modificar o nome após a criação." +"Se não, um sufixo de tempo será adicionado, e você poderá modificar o nome " +"após a criação." msgid "" "Printer and all the filament&&process presets that belongs to the printer. \n" "Can be shared with others." msgstr "" -"Presets da impressora e todos os filamentos e processos que pertencem à impressora. \n" +"Presets da impressora e todos os filamentos e processos que pertencem à " +"impressora. \n" "Pode ser compartilhado com outros." msgid "" @@ -12367,28 +15274,44 @@ msgstr "" "Conjunto de presets de filamento do usuário. \n" "Pode ser compartilhado com outros." -msgid "Only display printer names with changes to printer, filament, and process presets." -msgstr "Só exibir nomes de impressoras com alterações nos presets de impressora, filamento e processo." +msgid "" +"Only display printer names with changes to printer, filament, and process " +"presets." +msgstr "" +"Só exibir nomes de impressoras com alterações nos presets de impressora, " +"filamento e processo." msgid "Only display the filament names with changes to filament presets." -msgstr "Apenas exibir os nomes dos filamentos com alterações nos presets de filamento." +msgstr "" +"Apenas exibir os nomes dos filamentos com alterações nos presets de " +"filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." -msgstr "Apenas os nomes das impressoras com presets de impressora do usuário serão exibidos, e cada preset escolhido será exportado como um arquivo zip." +msgid "" +"Only printer names with user printer presets will be displayed, and each " +"preset you choose will be exported as a zip." +msgstr "" +"Apenas os nomes das impressoras com presets de impressora do usuário serão " +"exibidos, e cada preset escolhido será exportado como um arquivo zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be " +"exported as a zip." msgstr "" -"Apenas os nomes dos filamentos com presets de filamento do usuário serão exibidos, \n" -"e todas as presets de filamento do usuário em cada nome de filamento selecionado serão exportadas como um arquivo zip." +"Apenas os nomes dos filamentos com presets de filamento do usuário serão " +"exibidos, \n" +"e todas as presets de filamento do usuário em cada nome de filamento " +"selecionado serão exportadas como um arquivo zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be " +"exported as a zip." msgstr "" -"Apenas os nomes das impressoras com presets de processo alterados serão exibidos, \n" -"e todos os presets de processo do usuário em cada nome de impressora selecionado serão exportados como um arquivo zip." +"Apenas os nomes das impressoras com presets de processo alterados serão " +"exibidos, \n" +"e todos os presets de processo do usuário em cada nome de impressora " +"selecionado serão exportados como um arquivo zip." msgid "Please select at least one printer or filament." msgstr "Por favor, selecione pelo menos uma impressora ou filamento." @@ -12397,7 +15320,9 @@ msgid "Please select a type you want to export" msgstr "Por favor, selecione um tipo que deseja exportar" msgid "Failed to create temporary folder, please try Export Configs again." -msgstr "Falha ao criar uma pasta temporária, por favor, tente exportar as configurações novamente." +msgstr "" +"Falha ao criar uma pasta temporária, por favor, tente exportar as " +"configurações novamente." msgid "Edit Filament" msgstr "Editar Filamento" @@ -12405,8 +15330,12 @@ msgstr "Editar Filamento" msgid "Filament presets under this filament" msgstr "Presets de filamento sob este filamento" -msgid "Note: If the only preset under this filament is deleted, the filament will be deleted after exiting the dialog." -msgstr "Nota: Se o único preset sob este filamento for excluído, o filamento será excluído após sair da janela." +msgid "" +"Note: If the only preset under this filament is deleted, the filament will " +"be deleted after exiting the dialog." +msgstr "" +"Nota: Se o único preset sob este filamento for excluído, o filamento será " +"excluído após sair da janela." msgid "Presets inherited by other presets can not be deleted" msgstr "Presets herdados por outros presets não podem ser excluídos" @@ -12433,10 +15362,13 @@ msgstr "Excluir Filamento" msgid "" "All the filament presets belong to this filament would be deleted. \n" -"If you are using this filament on your printer, please reset the filament information for that slot." +"If you are using this filament on your printer, please reset the filament " +"information for that slot." msgstr "" -"Todos os presets de filamento pertencentes a este filamento seriam excluídas. \n" -"Se você estiver usando este filamento em sua impressora, redefina as informações do filamento para esse slot." +"Todos os presets de filamento pertencentes a este filamento seriam " +"excluídas. \n" +"Se você estiver usando este filamento em sua impressora, redefina as " +"informações do filamento para esse slot." msgid "Delete filament" msgstr "Excluir filamento" @@ -12451,7 +15383,9 @@ msgid "Copy preset from filament" msgstr "Copiar preset do filamento" msgid "The filament choice not find filament preset, please reselect it" -msgstr "O filamento selecionado não encontra preset de filamento, por favor, selecione novamente" +msgstr "" +"O filamento selecionado não encontra preset de filamento, por favor, " +"selecione novamente" msgid "[Delete Required]" msgstr "[Excluir Necessário]" @@ -12468,8 +15402,12 @@ msgstr "Recolher" msgid "Daily Tips" msgstr "Dicas Diárias" -msgid "Your nozzle diameter in preset is not consistent with memorized nozzle diameter. Did you change your nozzle lately?" -msgstr "O diâmetro do bico no seu perfil não está consistente com o diâmetro do bico memorizado. Você mudou seu bico recentemente?" +msgid "" +"Your nozzle diameter in preset is not consistent with memorized nozzle " +"diameter. Did you change your nozzle lately?" +msgstr "" +"O diâmetro do bico no seu perfil não está consistente com o diâmetro do bico " +"memorizado. Você mudou seu bico recentemente?" #, c-format, boost-format msgid "*Printing %s material with %s may cause nozzle damage" @@ -12481,8 +15419,12 @@ msgstr "É necessário selecionar uma impressora" msgid "The start, end or step is not valid value." msgstr "O início, fim ou passo não é um valor válido." -msgid "Unable to calibrate: maybe because the set calibration value range is too large, or the step is too small" -msgstr "Incapaz de calibrar: talvez porque a faixa de valor de calibração definida seja muito grande ou o passo seja muito pequeno" +msgid "" +"Unable to calibrate: maybe because the set calibration value range is too " +"large, or the step is too small" +msgstr "" +"Incapaz de calibrar: talvez porque a faixa de valor de calibração definida " +"seja muito grande ou o passo seja muito pequeno" msgid "Physical Printer" msgstr "Impressora Física" @@ -12502,27 +15444,41 @@ msgstr "Tem certeza de que deseja sair?" msgid "Refresh Printers" msgstr "Atualizar Impressoras" -msgid "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-signed certificate." -msgstr "O arquivo CA HTTPS é opcional. É necessário apenas se você usar HTTPS com um certificado autoassinado." +msgid "" +"HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" +"signed certificate." +msgstr "" +"O arquivo CA HTTPS é opcional. É necessário apenas se você usar HTTPS com um " +"certificado autoassinado." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" -msgstr "Arquivos de certificado (*.crt, *.pem)|*.crt;*.pem|Todos os arquivos|*.*" +msgstr "" +"Arquivos de certificado (*.crt, *.pem)|*.crt;*.pem|Todos os arquivos|*.*" msgid "Open CA certificate file" msgstr "Abrir arquivo de certificado CA" #, c-format, boost-format -msgid "On this system, %s uses HTTPS certificates from the system Certificate Store or Keychain." -msgstr "Neste sistema, %s usa certificados HTTPS da loja de certificados do sistema ou do Keychain." +msgid "" +"On this system, %s uses HTTPS certificates from the system Certificate Store " +"or Keychain." +msgstr "" +"Neste sistema, %s usa certificados HTTPS da loja de certificados do sistema " +"ou do Keychain." -msgid "To use a custom CA file, please import your CA file into Certificate Store / Keychain." -msgstr "Para usar um arquivo CA personalizado, importe seu arquivo CA para a loja de certificados / Keychain." +msgid "" +"To use a custom CA file, please import your CA file into Certificate Store / " +"Keychain." +msgstr "" +"Para usar um arquivo CA personalizado, importe seu arquivo CA para a loja de " +"certificados / Keychain." msgid "Login/Test" msgstr "Login/Teste" msgid "Connection to printers connected via the print host failed." -msgstr "A conexão às impressoras conectadas através do host de impressão falhou." +msgstr "" +"A conexão às impressoras conectadas através do host de impressão falhou." #, c-format, boost-format msgid "Mismatched type of print host: %s" @@ -12556,13 +15512,18 @@ msgid "Upload not enabled on FlashAir card." msgstr "Upload não ativado no cartão FlashAir." msgid "Connection to FlashAir works correctly and upload is enabled." -msgstr "A conexão com o FlashAir funciona corretamente e o upload está ativado." +msgstr "" +"A conexão com o FlashAir funciona corretamente e o upload está ativado." msgid "Could not connect to FlashAir" msgstr "Não foi possível conectar-se ao FlashAir" -msgid "Note: FlashAir with firmware 2.00.02 or newer and activated upload function is required." -msgstr "Nota: FlashAir com firmware 2.00.02 ou mais recente e função de upload ativada são necessárias." +msgid "" +"Note: FlashAir with firmware 2.00.02 or newer and activated upload function " +"is required." +msgstr "" +"Nota: FlashAir com firmware 2.00.02 ou mais recente e função de upload " +"ativada são necessárias." msgid "Connection to MKS works correctly." msgstr "A conexão com o MKS funciona corretamente." @@ -12652,6 +15613,175 @@ msgstr "" "Corpo da Mensagem: \"%1%\"\n" "Error: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "Conectado ao Obico com sucesso!" @@ -12665,10 +15795,16 @@ msgid "Could not connect to SimplyPrint" msgstr "Não é possível conectar a SimplyPrint" msgid "SimplyPrint account not linked. Go to Connect options to set it up." -msgstr "Conta SimplyPrint não vinculada. Vá para as opções de conexão para configurá-la." +msgstr "" +"Conta SimplyPrint não vinculada. Vá para as opções de conexão para configurá-" +"la." -msgid "File size exceeds the 100MB upload limit. Please upload your file through the panel." -msgstr "O tamanho do arquivo excede o limite de envio de 100MB. Por favor, envie seu arquivo através do painel." +msgid "" +"File size exceeds the 100MB upload limit. Please upload your file through " +"the panel." +msgstr "" +"O tamanho do arquivo excede o limite de envio de 100MB. Por favor, envie seu " +"arquivo através do painel." msgid "Unknown error" msgstr "Erro desconhecido" @@ -12683,10 +15819,12 @@ msgid "The provided state is not correct." msgstr "O estado fornecido não está correto." msgid "Please give the required permissions when authorizing this application." -msgstr "Por favor, forneça as permissões necessárias ao autorizar este aplicativo." +msgstr "" +"Por favor, forneça as permissões necessárias ao autorizar este aplicativo." msgid "Something unexpected happened when trying to log in, please try again." -msgstr "Algo inesperado aconteceu ao tentar conectar, por favor tente novamente." +msgstr "" +"Algo inesperado aconteceu ao tentar conectar, por favor tente novamente." msgid "User cancelled." msgstr "O usuário cancelou." @@ -12694,18 +15832,24 @@ msgstr "O usuário cancelou." #: resources/data/hints.ini: [hint:Precise wall] msgid "" "Precise wall\n" -"Did you know that turning on precise wall can improve precision and layer consistency?" +"Did you know that turning on precise wall can improve precision and layer " +"consistency?" msgstr "" "Parede precisa\n" -"Você sabia que ativar o Perímetro Preciso pode melhorar a precisão e a consistência da camada?" +"Você sabia que ativar o Perímetro Preciso pode melhorar a precisão e a " +"consistência da camada?" #: resources/data/hints.ini: [hint:Sandwich mode] msgid "" "Sandwich mode\n" -"Did you know that you can use sandwich mode (inner-outer-inner) to improve precision and layer consistency if your model doesn't have very steep overhangs?" +"Did you know that you can use sandwich mode (inner-outer-inner) to improve " +"precision and layer consistency if your model doesn't have very steep " +"overhangs?" msgstr "" "Modo sanduíche\n" -"Você sabia que pode usar o modo sanduíche (interno-externo-interno) para melhorar a precisão e a consistência da camada se o seu modelo não tiver overhangs muito íngremes?" +"Você sabia que pode usar o modo sanduíche (interno-externo-interno) para " +"melhorar a precisão e a consistência da camada se o seu modelo não tiver " +"overhangs muito íngremes?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -12718,10 +15862,12 @@ msgstr "" #: resources/data/hints.ini: [hint:Calibration] msgid "" "Calibration\n" -"Did you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer." +"Did you know that calibrating your printer can do wonders? Check out our " +"beloved calibration solution in OrcaSlicer." msgstr "" "Calibração\n" -"Você sabia que calibrar sua impressora pode fazer maravilhas? Confira nossa amada solução de calibração no OrcaSlicer." +"Você sabia que calibrar sua impressora pode fazer maravilhas? Confira nossa " +"amada solução de calibração no OrcaSlicer." #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" @@ -12729,7 +15875,8 @@ msgid "" "Did you know that OrcaSlicer supports Auxiliary part cooling fan?" msgstr "" "Ventilador auxiliar\n" -"Você sabia que o OrcaSlicer suporta ventilador auxiliar de resfriamento de peças?" +"Você sabia que o OrcaSlicer suporta ventilador auxiliar de resfriamento de " +"peças?" #: resources/data/hints.ini: [hint:Air filtration] msgid "" @@ -12750,42 +15897,52 @@ msgstr "" #: resources/data/hints.ini: [hint:Switch workspaces] msgid "" "Switch workspaces\n" -"You can switch between Prepare and Preview workspaces by pressing the Tab key." +"You can switch between Prepare and Preview workspaces by " +"pressing the Tab key." msgstr "" "Alternar espaços de trabalho\n" -"Você pode alternar entre os espaços de trabalho Preparar e Visualizar pressionando a tecla Tab." +"Você pode alternar entre os espaços de trabalho Preparar e " +"Visualizar pressionando a tecla Tab." #: resources/data/hints.ini: [hint:How to use keyboard shortcuts] msgid "" "How to use keyboard shortcuts\n" -"Did you know that Orca Slicer offers a wide range of keyboard shortcuts and 3D scene operations." +"Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " +"3D scene operations." msgstr "" "Como usar atalhos de teclado\n" -"Você sabia que o Orca Slicer oferece uma ampla gama de atalhos de teclado e operações de cena 3D?" +"Você sabia que o Orca Slicer oferece uma ampla gama de atalhos de teclado e " +"operações de cena 3D?" #: resources/data/hints.ini: [hint:Reverse on odd] msgid "" "Reverse on odd\n" -"Did you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?" +"Did you know that Reverse on odd feature can significantly improve " +"the surface quality of your overhangs?" msgstr "" "Inverter em ímpar\n" -"Você sabia que a função Inverter em ímpar pode melhorar significativamente a qualidade da superfície dos overhangs?" +"Você sabia que a função Inverter em ímpar pode melhorar " +"significativamente a qualidade da superfície dos overhangs?" #: resources/data/hints.ini: [hint:Cut Tool] msgid "" "Cut Tool\n" -"Did you know that you can cut a model at any angle and position with the cutting tool?" +"Did you know that you can cut a model at any angle and position with the " +"cutting tool?" msgstr "" "Ferramenta de corte\n" -"Você sabia que pode cortar um modelo em qualquer ângulo e posição com a ferramenta de corte?" +"Você sabia que pode cortar um modelo em qualquer ângulo e posição com a " +"ferramenta de corte?" #: resources/data/hints.ini: [hint:Fix Model] msgid "" "Fix Model\n" -"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing problems on the Windows system?" +"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " +"problems on the Windows system?" msgstr "" "Corrigir Modelo\n" -"Você sabia que pode corrigir um modelo 3D corrompido para evitar muitos problemas de fatiamento no sistema Windows?" +"Você sabia que pode corrigir um modelo 3D corrompido para evitar muitos " +"problemas de fatiamento no sistema Windows?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -12806,148 +15963,204 @@ msgstr "" #: resources/data/hints.ini: [hint:Auto-Orient] msgid "" "Auto-Orient\n" -"Did you know that you can rotate objects to an optimal orientation for printing by a simple click?" +"Did you know that you can rotate objects to an optimal orientation for " +"printing by a simple click?" msgstr "" "Auto-orientar\n" -"Você sabia que pode girar objetos para uma orientação ideal para impressão com um simples clique?" +"Você sabia que pode girar objetos para uma orientação ideal para impressão " +"com um simples clique?" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" "Lay on Face\n" -"Did you know that you can quickly orient a model so that one of its faces sits on the print bed? Select the \"Place on face\" function or press the F key." +"Did you know that you can quickly orient a model so that one of its faces " +"sits on the print bed? Select the \"Place on face\" function or press the " +"F key." msgstr "" "Ajustar face à superfície\n" -"Você sabia que pode rapidamente orientar um modelo para que uma de suas faces fique sobre a base de impressão? Selecione a função \"Colocar na face\" ou pressione a tecla F." +"Você sabia que pode rapidamente orientar um modelo para que uma de suas " +"faces fique sobre a base de impressão? Selecione a função \"Colocar na face" +"\" ou pressione a tecla F." #: resources/data/hints.ini: [hint:Object List] msgid "" "Object List\n" -"Did you know that you can view all objects/parts in a list and change settings for each object/part?" +"Did you know that you can view all objects/parts in a list and change " +"settings for each object/part?" msgstr "" "Lista de Objetos\n" -"Você sabia que pode visualizar todos os objetos/peças em uma lista e alterar as configurações para cada objeto/peça?" +"Você sabia que pode visualizar todos os objetos/peças em uma lista e alterar " +"as configurações para cada objeto/peça?" #: resources/data/hints.ini: [hint:Search Functionality] msgid "" "Search Functionality\n" -"Did you know that you use the Search tool to quickly find a specific Orca Slicer setting?" +"Did you know that you use the Search tool to quickly find a specific Orca " +"Slicer setting?" msgstr "" "Funcionalidade de Busca\n" -"Você sabia que pode usar a ferramenta de busca para encontrar rapidamente uma configuração específica do Orca Slicer?" +"Você sabia que pode usar a ferramenta de busca para encontrar rapidamente " +"uma configuração específica do Orca Slicer?" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" "Simplify Model\n" -"Did you know that you can reduce the number of triangles in a mesh using the Simplify mesh feature? Right-click the model and select Simplify model." +"Did you know that you can reduce the number of triangles in a mesh using the " +"Simplify mesh feature? Right-click the model and select Simplify model." msgstr "" "Simplificar Modelo\n" -"Você sabia que pode reduzir o número de triângulos em uma malha usando a função Simplificar malha? Clique com o botão direito no modelo e selecione Simplificar modelo." +"Você sabia que pode reduzir o número de triângulos em uma malha usando a " +"função Simplificar malha? Clique com o botão direito no modelo e selecione " +"Simplificar modelo." #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" "Slicing Parameter Table\n" -"Did you know that you can view all objects/parts on a table and change settings for each object/part?" +"Did you know that you can view all objects/parts on a table and change " +"settings for each object/part?" msgstr "" "Tabela de Parâmetros de Fatiamento\n" -"Você sabia que pode visualizar todos os objetos/peças em uma tabela e alterar as configurações para cada objeto/peça?" +"Você sabia que pode visualizar todos os objetos/peças em uma tabela e " +"alterar as configurações para cada objeto/peça?" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" "Split to Objects/Parts\n" -"Did you know that you can split a big object into small ones for easy colorizing or printing?" +"Did you know that you can split a big object into small ones for easy " +"colorizing or printing?" msgstr "" "Dividir em Objetos/Peças\n" -"Você sabia que pode dividir um objeto grande em peças menores para facilitar a colorização ou a impressão?" +"Você sabia que pode dividir um objeto grande em peças menores para facilitar " +"a colorização ou a impressão?" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" "Subtract a Part\n" -"Did you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Orca Slicer." +"Did you know that you can subtract one mesh from another using the Negative " +"part modifier? That way you can, for example, create easily resizable holes " +"directly in Orca Slicer." msgstr "" "Subtrair uma Peça\n" -"Você sabia que pode subtrair uma malha da outra usando o modificador de peça negativa? Dessa forma, você pode, por exemplo, criar facilmente furos redimensionáveis diretamente no Orca Slicer." +"Você sabia que pode subtrair uma malha da outra usando o modificador de peça " +"negativa? Dessa forma, você pode, por exemplo, criar facilmente furos " +"redimensionáveis diretamente no Orca Slicer." #: resources/data/hints.ini: [hint:STEP] msgid "" "STEP\n" -"Did you know that you can improve your print quality by slicing a STEP file instead of an STL?\n" -"Orca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" +"Did you know that you can improve your print quality by slicing a STEP file " +"instead of an STL?\n" +"Orca Slicer supports slicing STEP files, providing smoother results than a " +"lower resolution STL. Give it a try!" msgstr "" "STEP\n" -"Você sabia que pode melhorar a qualidade da impressão fatiando um arquivo STEP ao invés de um STL?\n" -"Orca Slicer é compatível com arquivos STEP, gerando resultados mais suaves do que um STL em baixa resolução. Tente!" +"Você sabia que pode melhorar a qualidade da impressão fatiando um arquivo " +"STEP ao invés de um STL?\n" +"Orca Slicer é compatível com arquivos STEP, gerando resultados mais suaves " +"do que um STL em baixa resolução. Tente!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" "Z seam location\n" -"Did you know that you can customize the location of the Z seam, and even paint it on your print, to have it in a less visible location? This improves the overall look of your model. Check it out!" +"Did you know that you can customize the location of the Z seam, and even " +"paint it on your print, to have it in a less visible location? This improves " +"the overall look of your model. Check it out!" msgstr "" "Local da costura\n" -"Você sabia que pode customizar a posição da costura, e até mesmo pintá-la na sua peça, para tê-la em um lugar menos visível? Isso vai aumentar a qualidade geral do seu modelo. Tente!" +"Você sabia que pode customizar a posição da costura, e até mesmo pintá-la na " +"sua peça, para tê-la em um lugar menos visível? Isso vai aumentar a " +"qualidade geral do seu modelo. Tente!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" "Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking prints? Depending on the material, you can improve the overall finish of the printed model by doing some fine-tuning." +"Did you know that flow rate can be fine-tuned for even better-looking " +"prints? Depending on the material, you can improve the overall finish of the " +"printed model by doing some fine-tuning." msgstr "" "Ajuste fino do fluxo\n" -"Você sabia que o fluxo pode ser ajustado para impressões ainda melhores? Dependendo do material, você pode melhorar o acabamento final da sua peça fazendo alguns ajustes." +"Você sabia que o fluxo pode ser ajustado para impressões ainda melhores? " +"Dependendo do material, você pode melhorar o acabamento final da sua peça " +"fazendo alguns ajustes." #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" "Split your prints into plates\n" -"Did you know that you can split a model that has a lot of parts into individual plates ready to print? This will simplify the process of keeping track of all the parts." +"Did you know that you can split a model that has a lot of parts into " +"individual plates ready to print? This will simplify the process of keeping " +"track of all the parts." msgstr "" "Divida suas impressões em mesas\n" -"Você sabia que pode dividir um modelo que tem diversas peças individuais em mesas distintas prontas para imprimir? Isso vai simplificar o processo e o avanço das impressões." +"Você sabia que pode dividir um modelo que tem diversas peças individuais em " +"mesas distintas prontas para imprimir? Isso vai simplificar o processo e o " +"avanço das impressões." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] msgid "" "Speed up your print with Adaptive Layer Height\n" -"Did you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" +"Did you know that you can print a model even faster, by using the Adaptive " +"Layer Height option? Check it out!" msgstr "" "Agilize sua impressão com a Altura de Camada Adaptativa\n" -"Você sabia que pode imprimir um modelo ainda mais rápido, usando a opção de Altura de Camada Adaptativa? Tente!" +"Você sabia que pode imprimir um modelo ainda mais rápido, usando a opção de " +"Altura de Camada Adaptativa? Tente!" #: resources/data/hints.ini: [hint:Support painting] msgid "" "Support painting\n" -"Did you know that you can paint the location of your supports? This feature makes it easy to place the support material only on the sections of the model that actually need it." +"Did you know that you can paint the location of your supports? This feature " +"makes it easy to place the support material only on the sections of the " +"model that actually need it." msgstr "" "Pintura de suporte\n" -"Você sabia que pode pintar a localização dos seus suportes? Essa funcionalidade facilita colocar o material de suporte apenas nas seções do modelo que realmente precisam." +"Você sabia que pode pintar a localização dos seus suportes? Essa " +"funcionalidade facilita colocar o material de suporte apenas nas seções do " +"modelo que realmente precisam." #: resources/data/hints.ini: [hint:Different types of supports] msgid "" "Different types of supports\n" -"Did you know that you can choose from multiple types of supports? Tree supports work great for organic models, while saving filament and improving print speed. Check them out!" +"Did you know that you can choose from multiple types of supports? Tree " +"supports work great for organic models, while saving filament and improving " +"print speed. Check them out!" msgstr "" "Diferentes tipos de suportes\n" -"Você sabia que pode escolher entre vários tipos de suportes? Os suportes de árvore funcionam muito bem para modelos orgânicos, enquanto economizam filamento e melhoram a velocidade de impressão. Confira-os!" +"Você sabia que pode escolher entre vários tipos de suportes? Os suportes de " +"árvore funcionam muito bem para modelos orgânicos, enquanto economizam " +"filamento e melhoram a velocidade de impressão. Confira-os!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" "Printing Silk Filament\n" -"Did you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results." +"Did you know that Silk filament needs special consideration to print it " +"successfully? Higher temperature and lower speed are always recommended for " +"the best results." msgstr "" "Impressão de Filamento de Seda\n" -"Você sabia que o filamento de seda precisa de considerações especiais para ser impresso com sucesso? Uma temperatura mais alta e uma velocidade mais baixa são sempre recomendadas para obter os melhores resultados." +"Você sabia que o filamento de seda precisa de considerações especiais para " +"ser impresso com sucesso? Uma temperatura mais alta e uma velocidade mais " +"baixa são sempre recomendadas para obter os melhores resultados." #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" "Brim for better adhesion\n" -"Did you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?" +"Did you know that when printing models have a small contact interface with " +"the printing surface, it's recommended to use a brim?" msgstr "" "Borda para melhor adesão\n" -"Você sabia que, ao imprimir modelos com uma pequena interface de contato com a superfície de impressão, é recomendável usar uma borda?" +"Você sabia que, ao imprimir modelos com uma pequena interface de contato com " +"a superfície de impressão, é recomendável usar uma borda?" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" "Set parameters for multiple objects\n" -"Did you know that you can set slicing parameters for all selected objects at one time?" +"Did you know that you can set slicing parameters for all selected objects at " +"one time?" msgstr "" "Definir parâmetros para vários objetos\n" -"Você sabia que pode definir parâmetros de fatiamento para todos os objetos selecionados de uma só vez?" +"Você sabia que pode definir parâmetros de fatiamento para todos os objetos " +"selecionados de uma só vez?" #: resources/data/hints.ini: [hint:Stack objects] msgid "" @@ -12960,31 +16173,166 @@ msgstr "" #: resources/data/hints.ini: [hint:Flush into support/objects/infill] msgid "" "Flush into support/objects/infill\n" -"Did you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" +"Did you know that you can save the wasted filament by flushing them into " +"support/objects/infill during filament change?" msgstr "" "Purga no suporte/objetos/preenchimento\n" -"Você sabia que pode economizar o filamento desperdiçado ao purgar nos suportes/objetos/preenchimento durante a troca de filamento?" +"Você sabia que pode economizar o filamento desperdiçado ao purgar nos " +"suportes/objetos/preenchimento durante a troca de filamento?" #: resources/data/hints.ini: [hint:Improve strength] msgid "" "Improve strength\n" -"Did you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" +"Did you know that you can use more wall loops and higher sparse infill " +"density to improve the strength of the model?" msgstr "" "Melhorar a resistência\n" -"Você sabia que pode usar mais loops de perímetro e densidade de preenchimento não sólido mais alta para melhorar a resistência do modelo?" +"Você sabia que pode usar mais loops de perímetro e densidade de " +"preenchimento não sólido mais alta para melhorar a resistência do modelo?" -#: resources/data/hints.ini: [hint:When need to print with the printer door opened] +#: resources/data/hints.ini: [hint:When need to print with the printer door +#: opened] msgid "" "When need to print with the printer door opened\n" -"Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature. More info about this in the Wiki." +"Did you know that opening the printer door can reduce the probability of " +"extruder/hotend clogging when printing lower temperature filament with a " +"higher enclosure temperature. More info about this in the Wiki." msgstr "" "Quando é necessário imprimir com a porta da impressora aberta\n" -"Você sabia que abrir a porta da impressora pode reduzir a probabilidade de entupimento do extrusor/bico aquecido ao imprimir filamento de temperatura mais baixa com uma temperatura de invólucro mais alta. Mais informações sobre isso na Wiki." +"Você sabia que abrir a porta da impressora pode reduzir a probabilidade de " +"entupimento do extrusor/bico aquecido ao imprimir filamento de temperatura " +"mais baixa com uma temperatura de invólucro mais alta. Mais informações " +"sobre isso na Wiki." #: resources/data/hints.ini: [hint:Avoid warping] msgid "" "Avoid warping\n" -"Did you know that when printing materials that are prone to warping such as ABS, appropriately increasing the heatbed temperature can reduce the probability of warping." +"Did you know that when printing materials that are prone to warping such as " +"ABS, appropriately increasing the heatbed temperature can reduce the " +"probability of warping." msgstr "" "Evitar empenamento\n" -"Você sabia que ao imprimir materiais propensos ao empenamento, como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?" +"Você sabia que ao imprimir materiais propensos ao empenamento, como ABS, " +"aumentar adequadamente a temperatura da mesa aquecida pode reduzir a " +"probabilidade de empenamento?" + +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Ações para Alterações Não Salvas" + +#~ msgid "Preset Value" +#~ msgstr "Valor Predefinido" + +#~ msgid "Modified Value" +#~ msgstr "Valor Modificado" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Transferir Valor Modificado" + +#~ msgid "Use Preset Value" +#~ msgstr "Usar Valor Predefinido" + +#~ msgid "Save Modified Value" +#~ msgstr "Salvar Valor Modificado" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Você gostaria de salvar estas configurações alteradas (valor modificado)?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Você gostaria de manter estas configurações alteradas (valores " +#~ "modificados) após mudar o preset?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite " +#~ "them with new ones." +#~ msgstr "" +#~ "Você modificou suas configurações anteriormente e está prestes a " +#~ "substituí-las por novas." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset " +#~ "settings?" +#~ msgstr "" +#~ "\n" +#~ "Você quer manter suas configurações atuais modificadas ou usar as " +#~ "configurações predefinidas?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Você quer salvar suas configurações atuais modificadas?" + +#~ msgid "Unload Filament" +#~ msgstr "Descarregar Filamento" + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Placa principal" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "" +#~ "Over 4 studio/handy are using remote access, you can close some and try " +#~ "again." +#~ msgstr "" +#~ "Mais de 4 estúdio/prático estão usando o acesso remoto, você pode fechar " +#~ "alguns e tentar novamente." + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "The 3mf file version is in Beta and it is newer than the current Bambu " +#~ "Studio version." +#~ msgstr "" +#~ "A versão do arquivo 3mf está em Beta e é mais recente que a versão atual " +#~ "do Bambu Studio." + +#~ msgid "If you would like to try Bambu Studio Beta, you may click to" +#~ msgstr "Se você gostaria de testar o Bambu Studio Beta, clique para" + +#~ msgid "The 3mf file version is newer than the current Bambu Studio version." +#~ msgstr "" +#~ "A versão do arquivo 3mf é mais recente que a versão atual do Bambu Studio." + +#~ msgid "" +#~ "Update your Bambu Studio could enable all functionality in the 3mf file." +#~ msgstr "" +#~ "Atualizar seu Bambu Studio pode habilitar todas as funcionalidades do " +#~ "arquivo 3mf." + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "A importação para o Orca Slicer falhou. Por favor, baixe o arquivo e " +#~ "importe manualmente." + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Nova Calibração de Dinâmica de Fluxo" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 2972ffa94e..ea2a0c0088 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.0.0 Official Release\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2024-04-12 13:49+0700\n" "Last-Translator: \n" "Language-Team: andylg@yandex.ru\n" @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.4.2\n" msgid "Supports Painting" @@ -1957,6 +1957,12 @@ msgstr "Расставить" msgid "arrange current plate" msgstr "Расстановка моделей на текущем столе" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Автоповорот" @@ -2426,11 +2432,11 @@ msgstr "Дозаправка" msgid "AMS not connected" msgstr "АСПП не подключена" -msgid "Load Filament" -msgstr "Загрузить" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Выгрузить" +msgid "Unload" +msgstr "Выгруз." msgid "Ext Spool" msgstr "Внеш. катушка" @@ -2447,7 +2453,7 @@ msgstr "Повтор" msgid "Calibrating AMS..." msgstr "Калибровка АСПП..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Во время калибровки возникла проблема. Нажмите, чтобы просмотреть решение." @@ -2489,10 +2495,8 @@ msgstr "Загрузка нового прутка" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Выберите слот АСПП, затем нажмите кнопку «Загрузить» или «Выгрузить» для " -"автоматической загрузки или выгрузки прутка." msgid "Edit" msgstr "Правка" @@ -3124,6 +3128,14 @@ msgstr "" "АСПП автоматически переключится на другую катушку с тем же типом материала, " "когда текущий закончится." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Файл" @@ -3203,6 +3215,45 @@ msgstr "Запуск скриптов постобработки" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Неизвестная ошибка при экспорте G-кода." @@ -3599,18 +3650,6 @@ msgstr "Пауза при ошибке на первом слое" msgid "Nozzle clog pause" msgstr "Пауза при засорении сопла" -msgid "MC" -msgstr "Плата управления" - -msgid "MainBoard" -msgstr "Материнская плата" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Неизвестно" @@ -4148,7 +4187,7 @@ msgstr "Объём:" msgid "Size:" msgstr "Размер:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4291,6 +4330,9 @@ msgstr "Предпросмотр нарезки" msgid "Device" msgstr "Принтер" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Проект" @@ -4330,6 +4372,9 @@ msgstr "Распечатать все столы" msgid "Send all" msgstr "Отправить G-код всех столов на SD-карту" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Горячие клавиши" @@ -5127,9 +5172,6 @@ msgstr "Выдув" msgid "Bed" msgstr "Стол" -msgid "Unload" -msgstr "Выгруз." - msgid "Debug Info" msgstr "Отладочная информация" @@ -5318,9 +5360,6 @@ msgstr "Статус" msgid "Update" msgstr "Обновление" -msgid "HMS" -msgstr "Здоровье принтера" - msgid "Don't show again" msgstr "Больше не показывать" @@ -5568,6 +5607,12 @@ msgstr "Разрешить звуковые уведомления" msgid "Filament Tangle Detect" msgstr "Обнаружение запутывания прутка" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -6030,19 +6075,23 @@ msgstr "Импортирование модели" msgid "prepare 3mf file..." msgstr "подготовка 3mf файла..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "скачивание проекта..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Проект загружен %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Не удалось импортировать в Orca Slicer. Загрузите файл и импортируйте его " -"вручную." msgid "Import SLA archive" msgstr "Импорт SLA архива" @@ -6317,6 +6366,21 @@ msgstr "" "Единицы \n" "измерения" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "Домашняя страница" @@ -6401,6 +6465,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "Сеть" @@ -7057,6 +7129,9 @@ msgstr "Автокалибровка потока с помощью микрол msgid "Modifying the device name" msgstr "Изменение имени принтера" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Отправить на SD-карту принтера" @@ -7108,6 +7183,26 @@ msgstr "Таймаут получения отчета о входе" msgid "Unknown Failure" msgstr "Неизвестная ошибка" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Войти в принтер" @@ -7131,8 +7226,8 @@ msgid "" "Bambu Lab Privacy Policy, please do not use Bambu Lab equipment and services." msgstr "" "Перед использованием устройства Bambu Lab ознакомьтесь с правилами и " -"условиями. Нажимая на кнопку \"Согласие на использование устройства Bambu " -"Lab\", вы соглашаетесь соблюдать Политику конфиденциальности и Условия " +"условиями. Нажимая на кнопку \"Согласие на использование устройства Bambu Lab" +"\", вы соглашаетесь соблюдать Политику конфиденциальности и Условия " "использования (далее - \"Условия\"). Если вы не соблюдаете или не согласны с " "Политикой конфиденциальности Bambu Lab, пожалуйста, не пользуйтесь " "оборудованием и услугами Bambu Lab." @@ -7327,8 +7422,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "При записи таймлапса без видимости головы рекомендуется добавить «Черновая " "башня таймлапса». \n" @@ -7758,26 +7853,23 @@ msgstr "Не задано" msgid "Unsaved Changes" msgstr "Несохранённые изменения" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Отклонить или сохранить изменения" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Старое значение" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Новое значение" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Перенести" msgid "Don't save" msgstr "Не сохранять" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Не сохранять" msgid "Click the right mouse button to display the full text." msgstr "Нажмите правой кнопкой мыши, чтобы отобразить полный текст." @@ -7839,28 +7931,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7878,9 +7964,6 @@ msgstr "Показать все профили (включая несовмес msgid "Select presets to compare" msgstr "Выберите профили для сравнения" -msgid "Transfer" -msgstr "Перенести" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8375,6 +8458,39 @@ msgstr "Готово" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Загрузить" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "Подтвердить и обновить сопло" @@ -10698,6 +10814,9 @@ msgstr "Динам. куб. поддержка" msgid "Lightning" msgstr "Молния" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Длина привязок разреженного заполнения" @@ -10752,8 +10871,8 @@ msgstr "" "две ближайшие линии заполнения с коротким отрезком периметра. Если не " "найдено такого отрезка периметра короче этого параметра, линия заполнения " "соединяется с отрезком периметра только с одной стороны, а длина отрезка " -"периметра ограничена значением «Длина привязок разреженного заполнения» " -"(infill_anchor), но не больше этого параметра.\n" +"периметра ограничена значением «Длина привязок разреженного " +"заполнения» (infill_anchor), но не больше этого параметра.\n" "Если установить 0, то будет использоваться старый алгоритм для соединения " "заполнения, который даёт такой же результат, как и при значениях 1000 и 0." @@ -10908,17 +11027,17 @@ msgstr "Полная скорость вентилятора на слое" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Скорость вентилятора будет нарастать линейно от нуля на слое " -"\"close_fan_the_first_x_layers\" до максимума на слое " -"\"full_fan_speed_layer\". Значение \"full_fan_speed_layer\" будет " -"игнорироваться, если оно меньше значения \"close_fan_the_first_x_layers\", в " -"этом случае вентилятор будет работать на максимально допустимой скорости на " -"слое \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" до максимума на слое \"full_fan_speed_layer" +"\". Значение \"full_fan_speed_layer\" будет игнорироваться, если оно меньше " +"значения \"close_fan_the_first_x_layers\", в этом случае вентилятор будет " +"работать на максимально допустимой скорости на слое " +"\"close_fan_the_first_x_layers\" + 1." msgid "Support interface fan speed" msgstr "Скорость вентилятора на связующем слое" @@ -13921,6 +14040,9 @@ msgstr "Отменено" msgid "load_obj: failed to parse" msgstr "load_obj: ошибка обработки" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Файл содержит многоугольники с более чем 4 вершинами." @@ -14047,6 +14169,14 @@ msgstr "Пожалуйста, выберите пруток для калибр msgid "The input value size must be 3." msgstr "Размер входного значения должен быть равен 3." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "Подключение к принтеру..." @@ -14056,6 +14186,19 @@ msgstr "Результат неудачного теста был удалён." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Результат калибровки динамики потока был сохранён на принтере" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "Внутренняя ошибка" @@ -14363,9 +14506,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Параметры печати" -msgid "- ℃" -msgstr "- ℃" - msgid "Plate Type" msgstr "Типа печатной пластины" @@ -14413,12 +14553,6 @@ msgstr "Конечный коэф. K" msgid "Step value" msgstr "Шаг" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Диаметр сопла был синхронизирован с настройками принтера" @@ -14446,10 +14580,14 @@ msgstr "Обновление записей истории калибровки msgid "Action" msgstr "Действие" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "Редактировать калибровку динамики потока" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -14458,13 +14596,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "Поиск по сети" @@ -14874,8 +15005,8 @@ msgstr "" "Хотите перезаписать его?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Мы переименуем профиль в \"Производитель Тип Серия @выбранный принтер\".\n" @@ -15485,6 +15616,175 @@ msgstr "" "Текст сообщения: \"%1%\"\n" "Ошибка: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "Соединение с Obico успешно установлено." @@ -15921,6 +16221,47 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" +#~ msgid "Unload Filament" +#~ msgstr "Выгрузить" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Выберите слот АСПП, затем нажмите кнопку «Загрузить» или «Выгрузить» для " +#~ "автоматической загрузки или выгрузки прутка." + +#~ msgid "MC" +#~ msgstr "Плата управления" + +#~ msgid "MainBoard" +#~ msgstr "Материнская плата" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "Здоровье принтера" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Не удалось импортировать в Orca Slicer. Загрузите файл и импортируйте его " +#~ "вручную." + +#~ msgid "- ℃" +#~ msgstr "- ℃" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + #~ msgid "active" #~ msgstr "активный" @@ -16026,18 +16367,6 @@ msgstr "" #~ "Невозможно выполнить булевы операции над сетками модели. Будут " #~ "экспортированы только положительные части." -#~ msgid "Transfer or discard changes" -#~ msgstr "Отклонить или сохранить изменения" - -#~ msgid "Old Value" -#~ msgstr "Старое значение" - -#~ msgid "New Value" -#~ msgstr "Новое значение" - -#~ msgid "Discard" -#~ msgstr "Не сохранять" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index c1589dbf8f..edc30815c7 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1892,6 +1892,12 @@ msgstr "Arrangera" msgid "arrange current plate" msgstr "Arrangera plattan" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Auto Rotera" @@ -2354,10 +2360,10 @@ msgstr "" msgid "AMS not connected" msgstr "AMS ej ansluten" -msgid "Load Filament" -msgstr "Ladda Filament" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "Mata ut" msgid "Ext Spool" @@ -2375,7 +2381,7 @@ msgstr "Försök igen" msgid "Calibrating AMS..." msgstr "Kalibrerar AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "Ett problem uppstod vid kalibrering. Tryck för att se åtgärd." msgid "Calibrate again" @@ -2416,10 +2422,8 @@ msgstr "Ta ett nytt filament" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Välj ett AMS fack tryck sedan \"Ladda eller \"Mata ur\" knappen för att " -"automatiskt mata eller mata ut filament." msgid "Edit" msgstr "Redigera" @@ -3027,6 +3031,14 @@ msgstr "" "AMS fortsätter automatiskt till en annan spole med samma filament egenskaper " "när det aktuella filamentet tar slut." +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Fil" @@ -3104,6 +3116,45 @@ msgstr "Kör efterbearbetnings skript" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Okänt fel vid exportering av G-code." @@ -3474,18 +3525,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Moderkort" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "X Kamera" - msgid "Unknown" msgstr "Okänd" @@ -4008,7 +4047,7 @@ msgstr "Volym:" msgid "Size:" msgstr "Storlek:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4147,6 +4186,9 @@ msgstr "Förhandsvisning" msgid "Device" msgstr "Enhet" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Projekt" @@ -4186,6 +4228,9 @@ msgstr "Skriv ut allt" msgid "Send all" msgstr "Skicka alla" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Kortkommando" @@ -4961,9 +5006,6 @@ msgstr "Kammare" msgid "Bed" msgstr "Byggplattan" -msgid "Unload" -msgstr "Mata ut" - msgid "Debug Info" msgstr "Felsöknings Information" @@ -5133,9 +5175,6 @@ msgstr "Status" msgid "Update" msgstr "Uppdatera" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Visa inte igen" @@ -5380,6 +5419,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5822,15 +5867,21 @@ msgstr "Importerar Modell" msgid "prepare 3mf file..." msgstr "förbereder 3mf-filen..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "laddar ner projekt ..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Projektet har laddats ned %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -6095,6 +6146,21 @@ msgstr "Brittisk standard" msgid "Units" msgstr "Enheter" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6171,6 +6237,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6806,6 +6880,9 @@ msgstr "" msgid "Modifying the device name" msgstr "Ändra enhetens namn" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Skicka till skrivarens MicroSD-kort" @@ -6857,6 +6934,26 @@ msgstr "Timeout för mottagande av inloggnings rapport" msgid "Unknown Failure" msgstr "Okänt fel" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Logga in skrivare" @@ -7064,8 +7161,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "När du spelar in timelapse utan verktygshuvud rekommenderas att du lägger " "till ett \"Timelapse Wipe Tower\".\n" @@ -7475,26 +7572,23 @@ msgstr "Oidentifierad" msgid "Unsaved Changes" msgstr "Ej sparade ändringar" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Överge eller Behåll ändringar" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Gammalt värde" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Nytt värde" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Överför" msgid "Don't save" msgstr "Spara inte" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Överge" msgid "Click the right mouse button to display the full text." msgstr "Högerklicka för att se hela texten." @@ -7556,28 +7650,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7595,9 +7683,6 @@ msgstr "Visa alla inställningar (inklusive inkompatibla)" msgid "Select presets to compare" msgstr "Välj förinställningar att jämföra" -msgid "Transfer" -msgstr "Överför" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8069,6 +8154,39 @@ msgstr "Klar" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Ladda Filament" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -9298,9 +9416,9 @@ msgid "" "quality for needle and small details" msgstr "" "Aktivera detta val för att sänka utskifts hastigheten för att göra den sista " -"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets " -"tröskel\", detta så att lager kan kylas under en längre tid. Detta kan " -"förbättra kylnings kvaliteten för små detaljer" +"lager tiden inte kortare än lager tidströskeln \"Max fläkthastighets tröskel" +"\", detta så att lager kan kylas under en längre tid. Detta kan förbättra " +"kylnings kvaliteten för små detaljer" msgid "Normal printing" msgstr "Normal utskrift" @@ -10050,6 +10168,9 @@ msgstr "Kubik Support" msgid "Lightning" msgstr "Blixt" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "" @@ -10218,10 +10339,10 @@ msgstr "Full fläkthastighet vid lager" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" msgid "Support interface fan speed" @@ -12804,6 +12925,9 @@ msgstr "Avbruten" msgid "load_obj: failed to parse" msgstr "load_obj: misslyckades med att analysera" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "Filen innehåller polygoner med fler än 4 hörn." @@ -12920,6 +13044,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -12929,6 +13061,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -13154,9 +13299,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "Typ av byggplatta" @@ -13200,12 +13342,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -13233,10 +13369,14 @@ msgstr "" msgid "Action" msgstr "" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13245,13 +13385,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -13632,8 +13765,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14176,6 +14309,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14548,6 +14850,31 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "Mata ut" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Välj ett AMS fack tryck sedan \"Ladda eller \"Mata ur\" knappen för att " +#~ "automatiskt mata eller mata ut filament." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Moderkort" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "X Kamera" + +#~ msgid "HMS" +#~ msgstr "HMS" + #~ msgid "active" #~ msgstr "aktiv" @@ -14644,18 +14971,6 @@ msgstr "" #~ "Det går inte att utföra booleska operationer på modell mesh. Endast " #~ "positiva delar kommer att exporteras." -#~ msgid "Transfer or discard changes" -#~ msgstr "Överge eller Behåll ändringar" - -#~ msgid "Old Value" -#~ msgstr "Gammalt värde" - -#~ msgid "New Value" -#~ msgstr "Nytt värde" - -#~ msgid "Discard" -#~ msgstr "Överge" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index cb9db69041..65a60b1c71 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" -"PO-Revision-Date: 2024-04-16 03:39+0300\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" +"PO-Revision-Date: 2024-05-02 19:55+0300\n" "Last-Translator: Olcay ÖREN\n" "Language-Team: \n" "Language: tr\n" @@ -727,8 +727,8 @@ msgid "" "The text cannot be written using the selected font. Please try choosing a " "different font." msgstr "" -"Metin seçilen yazı tipi kullanılarak yazılamıyor. Lütfen farklı bir yazı " -"tipi seçmeyi deneyin." +"Metin seçilen yazı tipi kullanılarak yazılamıyor. Lütfen farklı bir yazı tipi " +"seçmeyi deneyin." msgid "Embossed text cannot contain only white spaces." msgstr "Kabartmalı metin yalnızca beyaz boşluklardan oluşamaz." @@ -1009,15 +1009,15 @@ msgstr "Metni kameraya doğru yönlendirin." #, boost-format msgid "" -"Can't load exactly same font(\"%1%\"). Aplication selected a similar " -"one(\"%2%\"). You have to specify font for enable edit text." +"Can't load exactly same font(\"%1%\"). Aplication selected a similar one(\"%2%" +"\"). You have to specify font for enable edit text." msgstr "" -"Tam olarak aynı yazı tipi yüklenemiyor(\"%1%\"). Uygulama benzer bir " -"uygulama seçti(\"%2%\"). Metni düzenlemeyi etkinleştirmek için yazı tipini " -"belirtmeniz gerekir." +"Tam olarak aynı yazı tipi yüklenemiyor(\"%1%\"). Uygulama benzer bir uygulama " +"seçti(\"%2%\"). Metni düzenlemeyi etkinleştirmek için yazı tipini belirtmeniz " +"gerekir." msgid "No symbol" -msgstr "No symbol" +msgstr "Sembol yok" msgid "Loading" msgstr "Yükleniyor" @@ -1103,13 +1103,13 @@ msgstr "SVG eylemleri" msgid "SVG" msgstr "SVG" -#, fuzzy, boost-format +#, boost-format msgid "Opacity (%1%)" -msgstr "Opaklık (%1)" +msgstr "Opaklık (%1%)" -#, fuzzy, boost-format +#, boost-format msgid "Color gradient (%1%)" -msgstr "Renk gradyanı (%1)" +msgstr "Renk gradyanı (%1%)" msgid "Undefined fill type" msgstr "Tanımsız dolgu türü" @@ -1136,22 +1136,22 @@ msgstr "" "Son şekil, aynı koordinata sahip birden fazla noktanın kendi kendine " "kesişimini içerir." -#, fuzzy, boost-format +#, boost-format msgid "Shape is marked as invisible (%1%)." -msgstr "Şekil görünmez (%1) olarak işaretlendi." +msgstr "Şekil görünmez (%1%) olarak işaretlendi." #. TRN: The first placeholder is shape identifier, the second one is text describing the problem. -#, fuzzy, boost-format +#, boost-format msgid "Fill of shape (%1%) contains unsupported: %2%." -msgstr "Şeklin dolgusu (%1) desteklenmeyenleri içeriyor: %2%." +msgstr "Şeklin dolgusu (%1%) desteklenmeyenleri içeriyor: %2%." -#, fuzzy, boost-format +#, boost-format msgid "Stroke of shape (%1%) is too thin (minimal width is %2% mm)." -msgstr "Şeklin konturu (%1) çok ince (minimum genişlik %2 mm'dir)." +msgstr "Şeklin konturu (%1%) çok ince (minimum genişlik %2% mm'dir)." -#, fuzzy, boost-format +#, boost-format msgid "Stroke of shape (%1%) contains unsupported: %2%." -msgstr "Şeklin konturu (%1) desteklenmeyenleri içeriyor: %2%." +msgstr "Şeklin konturu (%1%) desteklenmeyenleri içeriyor: %2%." msgid "Face the camera" msgstr "Kameraya bak" @@ -1204,9 +1204,9 @@ msgid "Size in emboss direction." msgstr "Kabartma yönünde boyut." #. TRN: The placeholder contains a number. -#, fuzzy, boost-format +#, boost-format msgid "Scale also changes amount of curve samples (%1%)" -msgstr "Ölçek ayrıca eğri örneklerinin miktarını da değiştirir (%1)" +msgstr "Ölçek ayrıca eğri örneklerinin miktarını da değiştirir (%1%)" msgid "Width of SVG." msgstr "SVG'nin genişliği." @@ -1249,21 +1249,21 @@ msgstr "Ayna" msgid "Choose SVG file for emboss:" msgstr "Kabartma için SVG dosyasını seçin:" -#, fuzzy, boost-format +#, boost-format msgid "File does NOT exist (%1%)." -msgstr "Dosya mevcut DEĞİL (%1)." +msgstr "Dosya mevcut DEĞİL (%1%)." #, boost-format msgid "Filename has to end with \".svg\" but you selected %1%" msgstr "Dosya adının \".svg\" ile bitmesi gerekiyor ancak siz %1%'i seçtiniz" -#, fuzzy, boost-format +#, boost-format msgid "Nano SVG parser can't load from file (%1%)." -msgstr "Nano SVG ayrıştırıcı dosyadan (%1) yüklenemiyor." +msgstr "Nano SVG ayrıştırıcı dosyadan (%1%) yüklenemiyor." -#, fuzzy, boost-format +#, boost-format msgid "SVG file does NOT contain a single path to be embossed (%1%)." -msgstr "SVG dosyası kabartma yapılacak tek bir yol İÇERMEZ (%1)." +msgstr "SVG dosyası kabartma yapılacak tek bir yol İÇERMEZ (%1%)." msgid "Vertex" msgstr "Tepe noktası" @@ -1299,7 +1299,7 @@ msgid "Select point" msgstr "Nokta seç" msgid "Delete" -msgstr "Sil" +msgstr "Delete" msgid "Restart selection" msgstr "Seçimi sıfırla" @@ -1469,8 +1469,8 @@ msgstr "Bilgi" msgid "" "The OrcaSlicer configuration file may be corrupted and cannot be parsed.\n" "OrcaSlicer has attempted to recreate the configuration file.\n" -"Please note, application settings will be lost, but printer profiles will " -"not be affected." +"Please note, application settings will be lost, but printer profiles will not " +"be affected." msgstr "" "OrcaSlicer konfigürasyon dosyası bozulmuş olabilir ve ayrıştırılamayabilir.\n" "OrcaSlicer, konfigürasyon dosyasını yeniden oluşturmayı denedi.\n" @@ -1940,13 +1940,19 @@ msgid "Arrange" msgstr "Hizala" msgid "arrange current plate" -msgstr "mevcut plakayı hizala" +msgstr "Mevcut plakayı hizala" + +msgid "Reload All" +msgstr "Tümünü Yeniden Yükle" + +msgid "reload all from disk" +msgstr "Hepsini diskten yeniden yükle" msgid "Auto Rotate" msgstr "Otomatik döndürme" msgid "auto rotate current plate" -msgstr "geçerli plakayı otomatik döndürme" +msgstr "Geçerli plakayı otomatik döndürme" msgid "Delete Plate" msgstr "Plakayı Sil" @@ -2080,8 +2086,8 @@ msgid "" "This action will break a cut correspondence.\n" "After that model consistency can't be guaranteed .\n" "\n" -"To manipulate with solid parts or negative volumes you have to invalidate " -"cut infornation first." +"To manipulate with solid parts or negative volumes you have to invalidate cut " +"infornation first." msgstr "" "Bu eylem kesilmiş bir yazışmayı bozacaktır.\n" "Bundan sonra model tutarlılığı garanti edilemez.\n" @@ -2144,8 +2150,7 @@ msgstr "İlk seçilen öğe bir nesne ise ikincisi de nesne olmalıdır." msgid "" "If first selected item is a part, the second one should be part in the same " "object." -msgstr "" -"İlk seçilen öğe bir parça ise ikincisi aynı nesnenin parçası olmalıdır." +msgstr "İlk seçilen öğe bir parça ise ikincisi aynı nesnenin parçası olmalıdır." msgid "The type of the last solid object part is not to be changed." msgstr "Son katı nesne parçasının tipi değiştirilNozullidir." @@ -2396,11 +2401,11 @@ msgstr "Otomatik Doldurma" msgid "AMS not connected" msgstr "AMS bağlı değil" -msgid "Load Filament" -msgstr "Filament Yükle" +msgid "Load" +msgstr "Yükle" -msgid "Unload Filament" -msgstr "Filamenti Çıkarın" +msgid "Unload" +msgstr "Boşalt" msgid "Ext Spool" msgstr "Harici Makara" @@ -2417,7 +2422,7 @@ msgstr "Yeniden dene" msgid "Calibrating AMS..." msgstr "AMS kalibre ediliyor..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Kalibrasyon sırasında bir sorun oluştu. Çözümü görüntülemek için tıklayın." @@ -2459,10 +2464,10 @@ msgstr "Yeni filament al" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Filamenti otomatik olarak yüklemek veya çıkarmak için bir AMS yuvası seçin " -"ve ardından \"Yükle\" veya \"Boşalt\" düğmesine basın." +"Bir AMS yuvası seçin ve filamentleri otomatik olarak yüklemek veya boşaltmak " +"için “Yükle” veya “Boşalt” düğmesine basın." msgid "Edit" msgstr "Düzenle" @@ -2502,16 +2507,14 @@ msgstr "" msgid "Arranging done." msgstr "Hizalama tamamlandı." -msgid "" -"Arrange failed. Found some exceptions when processing object geometries." +msgid "Arrange failed. Found some exceptions when processing object geometries." msgstr "" "Hizalama başarısız oldu. Nesne geometrilerini işlerken bazı istisnalar " "bulundu." #, c-format, boost-format msgid "" -"Arrangement ignored the following objects which can't fit into a single " -"bed:\n" +"Arrangement ignored the following objects which can't fit into a single bed:\n" "%s" msgstr "" "Hizalama tek tablaya sığmayan aşağıdaki nesneler göz ardı edildi:\n" @@ -2611,8 +2614,7 @@ msgstr "" "deneyin." msgid "Print file not found, Please slice it again and send it for printing." -msgstr "" -"Yazdırma dosyası bulunamadı. Lütfen tekrar dilimleyip baskıya gönderin." +msgstr "Yazdırma dosyası bulunamadı. Lütfen tekrar dilimleyip baskıya gönderin." msgid "" "Failed to upload print file to FTP. Please check the network status and try " @@ -2668,8 +2670,8 @@ msgid "Importing SLA archive" msgstr "SLA arşivi içe aktarılıyor" msgid "" -"The SLA archive doesn't contain any presets. Please activate some SLA " -"printer preset first before importing that SLA archive." +"The SLA archive doesn't contain any presets. Please activate some SLA printer " +"preset first before importing that SLA archive." msgstr "" "SLA arşivi herhangi bir ön ayar içermez. Lütfen SLA arşivini içe aktarmadan " "önce bazı SLA yazıcı ön ayarlarını etkinleştirin." @@ -2681,8 +2683,8 @@ msgid "Importing done." msgstr "İçe aktarma tamamlandı." msgid "" -"The imported SLA archive did not contain any presets. The current SLA " -"presets were used as fallback." +"The imported SLA archive did not contain any presets. The current SLA presets " +"were used as fallback." msgstr "" "İçe aktarılan SLA arşivi herhangi bir ön ayar içermiyordu. Geçerli SLA ön " "ayarları geri dönüş olarak kullanıldı." @@ -2730,13 +2732,13 @@ msgid "GNU Affero General Public License, version 3" msgstr "GNU Affero Genel Kamu Lisansı, sürüm 3" msgid "" -"Orca Slicer is based on BambuStudio by Bambulab, which is from PrusaSlicer " -"by Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and " -"the RepRap community" +"Orca Slicer is based on BambuStudio by Bambulab, which is from PrusaSlicer by " +"Prusa Research. PrusaSlicer is from Slic3r by Alessandro Ranellucci and the " +"RepRap community" msgstr "" -"Orca Slicer, Prusa Research'ün PrusaSlicer'ından Bambulab'ın " -"BambuStudio'sunu temel alıyor. PrusaSlicer, Alessandro Ranellucci ve RepRap " -"topluluğu tarafından hazırlanan Slic3r'dendir" +"Orca Slicer, Prusa Research'ün PrusaSlicer'ından Bambulab'ın BambuStudio'sunu " +"temel alıyor. PrusaSlicer, Alessandro Ranellucci ve RepRap topluluğu " +"tarafından hazırlanan Slic3r'dendir" msgid "Libraries" msgstr "Kütüphaneler" @@ -2745,8 +2747,8 @@ msgid "" "This software uses open source components whose copyright and other " "proprietary rights belong to their respective owners" msgstr "" -"Bu yazılım, telif hakkı ve diğer mülkiyet hakları ilgili sahiplerine ait " -"olan açık kaynaklı bileşenleri kullanır" +"Bu yazılım, telif hakkı ve diğer mülkiyet hakları ilgili sahiplerine ait olan " +"açık kaynaklı bileşenleri kullanır" #, c-format, boost-format msgid "About %s" @@ -2760,8 +2762,7 @@ msgstr "OrcaSlicer, BambuStudio, PrusaSlicer ve SuperSlicer'ı temel alır." msgid "BambuStudio is originally based on PrusaSlicer by PrusaResearch." msgstr "" -"BambuStudio orijinal olarak PrusaResearch'ün PrusaSlicer'ını temel " -"almaktadır." +"BambuStudio orijinal olarak PrusaResearch'ün PrusaSlicer'ını temel almaktadır." msgid "PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci." msgstr "" @@ -2798,10 +2799,10 @@ msgstr "" "Sıcaklık" msgid "max" -msgstr "maks" +msgstr "maksimum" msgid "min" -msgstr "min" +msgstr "minimum" #, boost-format msgid "The input value should be greater than %1% and less than %2%" @@ -2850,9 +2851,9 @@ msgid "Dynamic flow calibration" msgstr "Dinamik akış kalibrasyonu" msgid "" -"The nozzle temp and max volumetric speed will affect the calibration " -"results. Please fill in the same values as the actual printing. They can be " -"auto-filled by selecting a filament preset." +"The nozzle temp and max volumetric speed will affect the calibration results. " +"Please fill in the same values as the actual printing. They can be auto-" +"filled by selecting a filament preset." msgstr "" "Nozul sıcaklığı ve maksimum hacimsel hız kalibrasyon sonuçlarını " "etkileyecektir. Lütfen gerçek yazdırmayla aynı değerleri girin. Bir filament " @@ -2987,8 +2988,7 @@ msgid "" "When the current material run out, the printer will continue to print in the " "following order." msgstr "" -"Mevcut malzeme bittiğinde yazıcı aşağıdaki sırayla yazdırmaya devam " -"edecektir." +"Mevcut malzeme bittiğinde yazıcı aşağıdaki sırayla yazdırmaya devam edecektir." msgid "Group" msgstr "Grup" @@ -3026,8 +3026,8 @@ msgid "Insertion update" msgstr "Ekleme güncellemesi" msgid "" -"The AMS will automatically read the filament information when inserting a " -"new Bambu Lab filament. This takes about 20 seconds." +"The AMS will automatically read the filament information when inserting a new " +"Bambu Lab filament. This takes about 20 seconds." msgstr "" "AMS, yeni bir Bambu Lab filamenti takıldığında filament bilgilerini otomatik " "olarak okuyacaktır. Bu yaklaşık 20 saniye sürer." @@ -3050,17 +3050,16 @@ msgid "Power on update" msgstr "Güncellemeyi aç" msgid "" -"The AMS will automatically read the information of inserted filament on " -"start-up. It will take about 1 minute.The reading process will roll filament " -"spools." +"The AMS will automatically read the information of inserted filament on start-" +"up. It will take about 1 minute.The reading process will roll filament spools." msgstr "" "AMS, başlangıçta takılan filamentin bilgilerini otomatik olarak okuyacaktır. " "Yaklaşık 1 dakika sürecektir. Okuma işlemi filament makaralarını saracaktır." msgid "" -"The AMS will not automatically read information from inserted filament " -"during startup and will continue to use the information recorded before the " -"last shutdown." +"The AMS will not automatically read information from inserted filament during " +"startup and will continue to use the information recorded before the last " +"shutdown." msgstr "" "AMS, başlatma sırasında takılan filamentden bilgileri otomatik olarak okumaz " "ve son kapatmadan önce kaydedilen bilgileri kullanmaya devam eder." @@ -3074,8 +3073,8 @@ msgid "" "automatically." msgstr "" "AMS, filament bilgisi güncellendikten sonra Bambu filamentin kalan " -"kapasitesini tahmin edecek. Yazdırma sırasında kalan kapasite otomatik " -"olarak güncellenecektir." +"kapasitesini tahmin edecek. Yazdırma sırasında kalan kapasite otomatik olarak " +"güncellenecektir." msgid "AMS filament backup" msgstr "AMS filament yedeklemesi" @@ -3087,6 +3086,16 @@ msgstr "" "AMS, mevcut filament bittiğinde otomatik olarak aynı özelliklere sahip başka " "bir makaraya devam edecektir" +msgid "Air Printing Detection" +msgstr "Hava Baskısı Algılama" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" +"Tıkanmayı ve filament taşmasını algılar, zamandan ve filamentten tasarruf " +"etmek için yazdırmayı anında durdurur." + msgid "File" msgstr "Dosya" @@ -3097,8 +3106,8 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and vpn " "software, check and retry." msgstr "" -"Eklenti indirilemedi. Lütfen güvenlik duvarı ayarlarınızı ve vpn " -"yazılımınızı kontrol edin, kontrol edip yeniden deneyin." +"Eklenti indirilemedi. Lütfen güvenlik duvarı ayarlarınızı ve vpn yazılımınızı " +"kontrol edin, kontrol edip yeniden deneyin." msgid "" "Failed to install the plug-in. Please check whether it is blocked or deleted " @@ -3166,6 +3175,57 @@ msgstr "İşlem sonrası komut dosyalarını çalıştırma" msgid "Successfully executed post-processing script" msgstr "İşlem sonrası komut dosyası başarıyla çalıştırıldı" +msgid "Unknown error occured during exporting G-code." +msgstr "G kodu dışa aktarılırken bilinmeyen bir hata oluştu." + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" +"Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu. Belki SD kart " +"yazma kilitlidir.\n" +"Hata mesajı: %1%" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" +"Geçici G kodunun çıkış G koduna kopyalanması başarısız oldu. Hedef cihazda " +"sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz kullanmayı " +"deneyin. Bozuk çıktı G kodu %1%.tmp konumunda." + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" +"Seçilen hedef klasöre kopyalandıktan sonra G kodunun yeniden adlandırılması " +"başarısız oldu. Geçerli yol: %1%.tmp. Lütfen dışa aktarmayı tekrar deneyin." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" +"Geçici G kodunun kopyalanması tamamlandı ancak %1% konumundaki orijinal kod " +"kopyalama kontrolü sırasında açılamadı. Çıkış G kodu %2%.tmp konumundadır." + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" +"Geçici G kodunun kopyalanması tamamlandı ancak kopya kontrolü sırasında dışa " +"aktarılan kod açılamadı. Çıkış G kodu %1%.tmp konumundadır." + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "G kodu dosyası %1%’e aktarıldı" + msgid "Unknown error when export G-code." msgstr "G kodunu dışa aktarırken bilinmeyen hata." @@ -3189,7 +3249,7 @@ msgstr "" "Sırasını Yazdır" msgid "Origin" -msgstr "Menşei" +msgstr "Konum" msgid "Size in X and Y of the rectangular plate." msgstr "Dikdörtgen plakanın X ve Y boyutları." @@ -3257,8 +3317,8 @@ msgid "" "The recommended minimum temperature is less than 190 degree or the " "recommended maximum temperature is greater than 300 degree.\n" msgstr "" -"Önerilen minimum sıcaklık 190 dereceden azdır veya önerilen maksimum " -"sıcaklık 300 dereceden yüksektir.\n" +"Önerilen minimum sıcaklık 190 dereceden azdır veya önerilen maksimum sıcaklık " +"300 dereceden yüksektir.\n" msgid "" "The recommended minimum temperature cannot be higher than the recommended " @@ -3295,13 +3355,13 @@ msgstr "" #, c-format, boost-format msgid "" -"Current chamber temperature is higher than the material's safe temperature," -"it may result in material softening and clogging.The maximum safe " -"temperature for the material is %d" +"Current chamber temperature is higher than the material's safe temperature,it " +"may result in material softening and clogging.The maximum safe temperature " +"for the material is %d" msgstr "" -"Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, " -"malzemenin yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum " -"güvenli sıcaklık %d'dir" +"Mevcut hazne sıcaklığı malzemenin güvenli sıcaklığından yüksektir, malzemenin " +"yumuşamasına ve tıkanmasına neden olabilir Malzeme için maksimum güvenli " +"sıcaklık %d'dir" msgid "" "Too small layer height.\n" @@ -3355,16 +3415,16 @@ msgstr "" "Değer 0'a sıfırlanacaktır." msgid "" -"Alternate extra wall does't work well when ensure vertical shell thickness " -"is set to All. " +"Alternate extra wall does't work well when ensure vertical shell thickness is " +"set to All. " msgstr "" -"Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak " -"ayarlandığından emin olunduğunda iyi çalışmaz. " +"Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak ayarlandığından " +"emin olunduğunda iyi çalışmaz. " msgid "" "Change these settings automatically? \n" -"Yes - Change ensure vertical shell thickness to Moderate and enable " -"alternate extra wall\n" +"Yes - Change ensure vertical shell thickness to Moderate and enable alternate " +"extra wall\n" "No - Dont use alternate extra wall" msgstr "" "Bu ayarlar otomatik olarak değiştirilsin mi? \n" @@ -3441,8 +3501,7 @@ msgid "" "No - Give up using spiral mode this time" msgstr "" "Bu ayarlar otomatik olarak değiştirilsin mi?\n" -"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak " -"etkinleştirin\n" +"Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak etkinleştirin\n" "Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" msgid "Auto bed leveling" @@ -3550,18 +3609,6 @@ msgstr "İlk katman hatası duraklatılıyor" msgid "Nozzle clog pause" msgstr "Nozul tıkanıklığı duraklatılıyor" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Anakart" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Bilinmeyen" @@ -3587,9 +3634,9 @@ msgid "Update failed." msgstr "Güncelleme başarısız." msgid "" -"The current chamber temperature or the target chamber temperature exceeds " -"45℃.In order to avoid extruder clogging,low temperature filament(PLA/PETG/" -"TPU) is not allowed to be loaded." +"The current chamber temperature or the target chamber temperature exceeds 45℃." +"In order to avoid extruder clogging,low temperature filament(PLA/PETG/TPU) is " +"not allowed to be loaded." msgstr "" "Mevcut hazne sıcaklığı veya hedef hazne sıcaklığı 45 ° C'yi aşıyor Ekstruder " "tıkanmasını önlemek için düşük sıcaklıkta filament (PLA / PETG / TPU) " @@ -3616,8 +3663,7 @@ msgstr "" msgid "Failed to start printing job" msgstr "Yazdırma işi başlatılamadı" -msgid "" -"This calibration does not support the currently selected nozzle diameter" +msgid "This calibration does not support the currently selected nozzle diameter" msgstr "Bu kalibrasyon, şu anda seçilen nozzle çapını desteklememektedir" msgid "Current flowrate cali param is invalid" @@ -3642,12 +3688,12 @@ msgid "" "Damp PVA will become flexible and get stuck inside AMS,please take care to " "dry it before use." msgstr "" -"Nemli PVA esnekleşecek ve AMS'nin içine sıkışacaktır, lütfen kullanmadan " -"önce kurutmaya dikkat edin." +"Nemli PVA esnekleşecek ve AMS'nin içine sıkışacaktır, lütfen kullanmadan önce " +"kurutmaya dikkat edin." msgid "" -"CF/GF filaments are hard and brittle, It's easy to break or get stuck in " -"AMS, please use with caution." +"CF/GF filaments are hard and brittle, It's easy to break or get stuck in AMS, " +"please use with caution." msgstr "" "CF/GF filamentleri sert ve kırılgandır. AMS'de kırılması veya sıkışması " "kolaydır, lütfen dikkatli kullanın." @@ -4097,7 +4143,7 @@ msgstr "Hacim:" msgid "Size:" msgstr "Boyut:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4236,7 +4282,10 @@ msgid "Preview" msgstr "Ön İzleme" msgid "Device" -msgstr "Yazıcı" +msgstr "Cihaz" + +msgid "Multi-device" +msgstr "Çoklu cihaz" msgid "Project" msgstr "Proje" @@ -4245,7 +4294,7 @@ msgid "Yes" msgstr "Evet" msgid "No" -msgstr "HAYIR" +msgstr "Hayır" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "" @@ -4278,6 +4327,9 @@ msgstr "Tümünü yazdır" msgid "Send all" msgstr "Hepsini gönder" +msgid "Send to Multi-device" +msgstr "Çoklu cihaza gönder" + msgid "Keyboard Shortcuts" msgstr "Klavye kısayolları" @@ -4659,8 +4711,8 @@ msgstr[1] "" msgid "" "\n" -"Hint: Make sure you have added the corresponding printer before importing " -"the configs." +"Hint: Make sure you have added the corresponding printer before importing the " +"configs." msgstr "" "\n" "İpucu: Yapılandırmaları içe aktarmadan önce ilgili yazıcıyı eklediğinizden " @@ -4709,8 +4761,7 @@ msgid "Please confirm if the printer is connected." msgstr "Lütfen yazıcının bağlı olup olmadığını onaylayın." msgid "" -"The printer is currently busy downloading. Please try again after it " -"finishes." +"The printer is currently busy downloading. Please try again after it finishes." msgstr "" "Yazıcı şu anda indirmeyle meşgul. Lütfen bittikten sonra tekrar deneyin." @@ -4721,8 +4772,7 @@ msgid "Problem occured. Please update the printer firmware and try again." msgstr "" "Sorun oluştu. Lütfen yazıcının ürün yazılımını güncelleyin ve tekrar deneyin." -msgid "" -"LAN Only Liveview is off. Please turn on the liveview on printer screen." +msgid "LAN Only Liveview is off. Please turn on the liveview on printer screen." msgstr "" "Yalnızca LAN Canlı İzleme kapalı. Lütfen yazıcı ekranındaki canlı " "görüntülemeyi açın." @@ -4737,8 +4787,8 @@ msgid "Connection Failed. Please check the network and try again" msgstr "Bağlantı Başarısız. Lütfen ağı kontrol edip tekrar deneyin" msgid "" -"Please check the network and try again, You can restart or update the " -"printer if the issue persists." +"Please check the network and try again, You can restart or update the printer " +"if the issue persists." msgstr "" "Lütfen ağı kontrol edip tekrar deneyin. Sorun devam ederse yazıcıyı yeniden " "başlatabilir veya güncelleyebilirsiniz." @@ -4887,8 +4937,7 @@ msgid_plural "" "You are going to delete %u files from printer. Are you sure to continue?" msgstr[0] "" "%u dosyasını yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" -msgstr[1] "" -"%u dosyayı yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" +msgstr[1] "%u dosyayı yazıcıdan sileceksiniz. Devam edeceğinizden emin misiniz?" msgid "Delete files" msgstr "Dosyaları sil" @@ -4948,13 +4997,15 @@ msgid "" "Reconnecting the printer, the operation cannot be completed immediately, " "please try again later." msgstr "" -"Yazıcıyı yeniden bağladığınızda işlem hemen tamamlanamıyor, lütfen daha " -"sonra tekrar deneyin." +"Yazıcıyı yeniden bağladığınızda işlem hemen tamamlanamıyor, lütfen daha sonra " +"tekrar deneyin." msgid "" "Over 4 systems/handy are using remote access, you can close some and try " "again." msgstr "" +"4’ten fazla sistem/kullanışlı uzaktan erişimi kullanıyor, bazılarını kapatıp " +"tekrar deneyebilirsiniz." msgid "File does not exist." msgstr "Dosya bulunmuyor." @@ -5043,8 +5094,8 @@ msgid "" "(The model has already been rated. Your rating will overwrite the previous " "rating.)" msgstr "" -"(Model zaten derecelendirilmiştir. Derecelendirmeniz önceki " -"derecelendirmenin üzerine yazılacaktır)" +"(Model zaten derecelendirilmiştir. Derecelendirmeniz önceki derecelendirmenin " +"üzerine yazılacaktır)" msgid "Rate" msgstr "Derecelendir" @@ -5080,14 +5131,11 @@ msgid "Aux" msgstr "Yardımcı" msgid "Cham" -msgstr "Cham" +msgstr "Bölme" msgid "Bed" msgstr "Yatak" -msgid "Unload" -msgstr "Boşalt" - msgid "Debug Info" msgstr "Hata Ayıklama Bilgisi" @@ -5274,9 +5322,6 @@ msgstr "Durum" msgid "Update" msgstr "Güncelle" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Bir daha gösterme" @@ -5314,18 +5359,21 @@ msgid "" "The 3mf file version is in Beta and it is newer than the current OrcaSlicer " "version." msgstr "" +"3mf dosya sürümü Beta’dadır ve mevcut OrcaSlicer sürümünden daha yenidir." msgid "If you would like to try Orca Slicer Beta, you may click to" -msgstr "" +msgstr "Orca Slicer Beta’yı denemek isterseniz tıklayabilirsiniz." msgid "Download Beta Version" msgstr "Beta Sürümünü İndirin" msgid "The 3mf file version is newer than the current Orca Slicer version." -msgstr "" +msgstr "3mf dosya sürümü mevcut Orca Slicer sürümünden daha yenidir." msgid "Update your Orca Slicer could enable all functionality in the 3mf file." msgstr "" +"Orca Dilimleyicinizi güncellemek, 3mf dosyasındaki tüm işlevleri " +"etkinleştirebilir." msgid "Current Version: " msgstr "Şimdiki versiyonu:" @@ -5522,6 +5570,14 @@ msgstr "Uyarı Sesine İzin Ver" msgid "Filament Tangle Detect" msgstr "Filament Dolaşma Tespiti" +msgid "Nozzle Clumping Detection" +msgstr "Nozul Topaklanma Algılaması" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" +"Nozulun filament veya diğer yabancı cisimler nedeniyle topaklanıp " +"topaklanmadığını kontrol edin." + msgid "Nozzle Type" msgstr "Nozul Tipi" @@ -5629,8 +5685,8 @@ msgstr "Arama plakası, nesne ve parça." msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." msgstr "" -"AMS filamentleri yok. AMS bilgilerini yüklemek için lütfen 'Cihaz' " -"sayfasında bir yazıcı seçin." +"AMS filamentleri yok. AMS bilgilerini yüklemek için lütfen 'Cihaz' sayfasında " +"bir yazıcı seçin." msgid "Sync filaments with AMS" msgstr "Filamentleri AMS ile senkronize et" @@ -5643,8 +5699,7 @@ msgstr "" "ayarlarını ve renklerini kaldıracaktır. Devam etmek istiyor musun?" msgid "" -"Already did a synchronization, do you want to sync only changes or resync " -"all?" +"Already did a synchronization, do you want to sync only changes or resync all?" msgstr "" "Zaten bir senkronizasyon yaptınız. Yalnızca değişiklikleri senkronize etmek " "mi yoksa tümünü yeniden senkronize etmek mi istiyorsunuz?" @@ -5659,13 +5714,13 @@ msgid "There are no compatible filaments, and sync is not performed." msgstr "Uyumlu filament yok ve senkronizasyon gerçekleştirilmiyor." msgid "" -"There are some unknown filaments mapped to generic preset. Please update " -"Orca Slicer or restart Orca Slicer to check if there is an update to system " +"There are some unknown filaments mapped to generic preset. Please update Orca " +"Slicer or restart Orca Slicer to check if there is an update to system " "presets." msgstr "" -"Genel ön ayara eşlenen bazı bilinmeyen filamentler var. Sistem ön " -"ayarlarında bir güncelleme olup olmadığını kontrol etmek için lütfen Orca " -"Slicer'ı güncelleyin veya Orca Slicer'ı yeniden başlatın." +"Genel ön ayara eşlenen bazı bilinmeyen filamentler var. Sistem ön ayarlarında " +"bir güncelleme olup olmadığını kontrol etmek için lütfen Orca Slicer'ı " +"güncelleyin veya Orca Slicer'ı yeniden başlatın." #, boost-format msgid "Do you want to save changes to \"%1%\"?" @@ -5690,13 +5745,13 @@ msgid "Restore" msgstr "Geri Yükleme" msgid "" -"The current hot bed temperature is relatively high. The nozzle may be " -"clogged when printing this filament in a closed enclosure. Please open the " -"front door and/or remove the upper glass." +"The current hot bed temperature is relatively high. The nozzle may be clogged " +"when printing this filament in a closed enclosure. Please open the front door " +"and/or remove the upper glass." msgstr "" -"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir " -"muhafaza içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/" -"veya üst camı çıkarın." +"Mevcut sıcak yatak sıcaklığı oldukça yüksek. Bu filamenti kapalı bir muhafaza " +"içinde bastırırken nozzle tıkanabilir. Lütfen ön kapağı açın ve/veya üst camı " +"çıkarın." msgid "" "The nozzle hardness required by the filament is higher than the default " @@ -5759,8 +5814,8 @@ msgstr "Lütfen bunları parametre sekmelerinde düzeltin" msgid "The 3mf has following modified G-codes in filament or printer presets:" msgstr "" -"3mf dosyasında filament veya yazıcı ön ayarlarında şu değiştirilmiş G-" -"kodları bulunmaktadır:" +"3mf dosyasında filament veya yazıcı ön ayarlarında şu değiştirilmiş G-kodları " +"bulunmaktadır:" msgid "" "Please confirm that these modified G-codes are safe to prevent any damage to " @@ -5978,19 +6033,25 @@ msgstr "Model İçe aktarılıyor" msgid "prepare 3mf file..." msgstr "3mf dosyasını hazırla..." +msgid "Download failed, unknown file format." +msgstr "İndirme başarısız oldu, dosya türü bilinmiyor." + msgid "downloading project ..." msgstr "proje indiriliyor..." +msgid "Download failed, File size exception." +msgstr "İndirme başarısız oldu, Dosya boyutu sorunlu." + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Proje %d%% indirildi" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" -"Orca Slicer'ya aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " -"olarak İçe aktarın." +"Bambu Studio’ya içe aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " +"olarak içe aktarın." msgid "Import SLA archive" msgstr "SLA arşivini içe aktar" @@ -6065,15 +6126,15 @@ msgstr "Dilimlenmiş dosyayı şu şekilde kaydedin:" #, c-format, boost-format msgid "" -"The file %s has been sent to the printer's storage space and can be viewed " -"on the printer." +"The file %s has been sent to the printer's storage space and can be viewed on " +"the printer." msgstr "" "%s dosyası yazıcının depolama alanına gönderildi ve yazıcıda " "görüntülenebiliyor." msgid "" -"Unable to perform boolean operation on model meshes. Only positive parts " -"will be kept. You may fix the meshes and try agian." +"Unable to perform boolean operation on model meshes. Only positive parts will " +"be kept. You may fix the meshes and try agian." msgstr "" "Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca olumlu kısımlar " "tutulacaktır. Kafesleri düzeltip tekrar deneyebilirsiniz." @@ -6187,8 +6248,8 @@ msgstr "" #, c-format, boost-format msgid "" "Plate% d: %s is not suggested to be used to print filament %s(%s). If you " -"still want to do this printing, please set this filament's bed temperature " -"to non zero." +"still want to do this printing, please set this filament's bed temperature to " +"non zero." msgstr "" "Plaka% d: %s'nin %s(%s) filamentinı yazdırmak için kullanılması önerilmez. " "Eğer yine de bu baskıyı yapmak istiyorsanız, lütfen bu filamentin yatak " @@ -6263,6 +6324,27 @@ msgstr "Imperial" msgid "Units" msgstr "Birimler" +msgid "Allow only one OrcaSlicer instance" +msgstr "Yalnızca bir OrcaSlicer örneğine izin ver" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. In " +"such case this settings will allow only one instance." +msgstr "" +"OSX’te her zaman varsayılan olarak çalışan tek bir uygulama örneği vardır. " +"Ancak aynı uygulamanın birden fazla örneğinin komut satırından " +"çalıştırılmasına izin verilir. Böyle bir durumda bu ayarlar yalnızca bir " +"örneğe izin verecektir." + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the same " +"OrcaSlicer is already running, that instance will be reactivated instead." +msgstr "" +"Bu etkinleştirilirse, OrcaSlicer başlatıldığında ve aynı OrcaSlicer’ın başka " +"bir örneği zaten çalışıyorken, bunun yerine bu örnek yeniden " +"etkinleştirilecektir." + msgid "Home" msgstr "Ana Sayfa" @@ -6348,6 +6430,16 @@ msgstr "" "Etkinleştirilirse, Orca her yazıcı için filament/işlem yapılandırmasını " "hatırlayacak ve otomatik olarak değiştirecektir." +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "Çoklu Cihaz Yönetimi(Studio yeniden başlatıldıktan sonra geçerli olur)." + +msgid "" +"With this option enabled, you can send a task to multiple devices at the same " +"time and manage multiple devices." +msgstr "" +"Bu seçenek etkinleştirildiğinde, aynı anda birden fazla cihaza bir görev " +"gönderebilir ve birden fazla cihazı yönetebilirsiniz." + msgid "Network" msgstr "Ağ" @@ -6411,8 +6503,8 @@ msgstr "Otomatik yedekleme" msgid "" "Backup your project periodically for restoring from the occasional crash." msgstr "" -"Ara sıra meydana gelen çökmelerden sonra geri yüklemek için projenizi " -"düzenli aralıklarla yedekleyin." +"Ara sıra meydana gelen çökmelerden sonra geri yüklemek için projenizi düzenli " +"aralıklarla yedekleyin." msgid "every" msgstr "her" @@ -6574,7 +6666,7 @@ msgid "End" msgstr "Son" msgid "Customize" -msgstr "Özelleştirmek" +msgstr "Özelleştir" msgid "Other layer filament sequence" msgstr "Diğer katman filament dizisi" @@ -6595,7 +6687,7 @@ msgid "Same as Global" msgstr "Küresel ile aynı" msgid "Disable" -msgstr "Devre dışı bırakmak" +msgstr "Devre dışı bırak" msgid "Spiral vase" msgstr "Spiral vazo" @@ -6604,7 +6696,7 @@ msgid "First layer filament sequence" msgstr "İlk katman filament dizisi" msgid "Same as Global Plate Type" -msgstr "Global Plaka Tipi ile aynı" +msgstr "Global plaka tipi ile aynı" msgid "Same as Global Bed Type" msgstr "Global Yatak Tipi ile aynı" @@ -6616,7 +6708,7 @@ msgid "By Object" msgstr "Nesneye göre" msgid "Accept" -msgstr "Kabul etmek" +msgstr "Kabul et" msgid "Log Out" msgstr "Çıkış" @@ -6799,8 +6891,7 @@ msgid "Printer local connection failed, please try again." msgstr "Yazıcının yerel bağlantısı başarısız oldu, lütfen tekrar deneyin." msgid "No login account, only printers in LAN mode are displayed" -msgstr "" -"Oturum açma hesabı yok, yalnızca LAN modundaki yazıcılar görüntüleniyor" +msgstr "Oturum açma hesabı yok, yalnızca LAN modundaki yazıcılar görüntüleniyor" msgid "Connecting to server" msgstr "Sunucuya baglanıyor" @@ -6868,8 +6959,7 @@ msgstr "" "desteklemek için lütfen yazıcının ürün yazılımını güncelleyin." msgid "" -"The printer firmware only supports sequential mapping of filament => AMS " -"slot." +"The printer firmware only supports sequential mapping of filament => AMS slot." msgstr "" "Yazıcı ürün yazılımı yalnızca filament => AMS yuvasının sıralı eşlemesini " "destekler." @@ -6930,8 +7020,8 @@ msgstr "" msgid "" "There are some unknown filaments in the AMS mappings. Please check whether " -"they are the required filaments. If they are okay, press \"Confirm\" to " -"start printing." +"they are the required filaments. If they are okay, press \"Confirm\" to start " +"printing." msgstr "" "AMS eşlemelerinde bazı bilinmeyen filamentler var. Lütfen bunların gerekli " "filamentler olup olmadığını kontrol edin. Sorun yoksa, yazdırmayı başlatmak " @@ -6963,8 +7053,7 @@ msgstr "" "hasarına neden olabilir" msgid "Please fix the error above, otherwise printing cannot continue." -msgstr "" -"Lütfen yukarıdaki hatayı düzeltin, aksi takdirde yazdırma devam edemez." +msgstr "Lütfen yukarıdaki hatayı düzeltin, aksi takdirde yazdırma devam edemez." msgid "" "Please click the confirm button if you still want to proceed with printing." @@ -6998,6 +7087,9 @@ msgstr "Mikro Lidar kullanarak otomatik akış kalibrasyonu" msgid "Modifying the device name" msgstr "Cihaz adını değiştir" +msgid "Bind with Pin Code" +msgstr "Pin Koduyla Bağla" + msgid "Send to Printer SD card" msgstr "Yazıcı SD kartına gönder" @@ -7049,6 +7141,28 @@ msgstr "Giriş raporu alma zaman aşımı" msgid "Unknown Failure" msgstr "Bilinmeyen Arıza" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" +"Lütfen yazıcı ekranındaki Hesap sayfasında Pin Kodunu bulun,\n" +" ve aşağıya Pin Kodunu yazın." + +msgid "Can't find Pin Code?" +msgstr "Pin Kodunu bulamıyor musunuz?" + +msgid "Pin Code" +msgstr "Pin Kodu" + +msgid "Binding..." +msgstr "Bağlanıyor…" + +msgid "Please confirm on the printer screen" +msgstr "Lütfen yazıcı ekranında onaylayın" + +msgid "Log in failed. Please check the Pin Code." +msgstr "Giriş başarısız oldu. Lütfen Pin Kodunu kontrol edin." + msgid "Log in printer" msgstr "Yazıcıda oturum aç" @@ -7099,11 +7213,11 @@ msgid "" "successes and failures of the vast number of prints by our users. We are " "training %s to be smarter by feeding them the real-world data. If you are " "willing, this service will access information from your error logs and usage " -"logs, which may include information described in Privacy Policy. We will " -"not collect any Personal Data by which an individual can be identified " -"directly or indirectly, including without limitation names, addresses, " -"payment information, or phone numbers. By enabling this service, you agree " -"to these terms and the statement about Privacy Policy." +"logs, which may include information described in Privacy Policy. We will not " +"collect any Personal Data by which an individual can be identified directly " +"or indirectly, including without limitation names, addresses, payment " +"information, or phone numbers. By enabling this service, you agree to these " +"terms and the statement about Privacy Policy." msgstr "" "3D Baskı topluluğunda, kendi dilimleme parametrelerimizi ve ayarlarımızı " "düzenlerken birbirimizin başarılarından ve başarısızlıklarından öğreniyoruz. " @@ -7154,16 +7268,16 @@ msgid "Click to reset all settings to the last saved preset." msgstr "Tüm ayarları en son kaydedilen ön ayara sıfırlamak için tıklayın." msgid "" -"Prime tower is required for smooth timeplase. There may be flaws on the " -"model without prime tower. Are you sure you want to disable prime tower?" +"Prime tower is required for smooth timeplase. There may be flaws on the model " +"without prime tower. Are you sure you want to disable prime tower?" msgstr "" "Sorunsuz timeplace için Prime Tower gereklidir. Prime tower olmayan modelde " "kusurlar olabilir. Prime tower'ı devre dışı bırakmak istediğinizden emin " "misiniz?" msgid "" -"Prime tower is required for smooth timelapse. There may be flaws on the " -"model without prime tower. Do you want to enable prime tower?" +"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 "" "Sorunsuz hızlandırılmış çekim için Prime Tower gereklidir. Prime tower " "olmayan modelde kusurlar olabilir. Prime tower'ı etkinleştirmek istiyor " @@ -7192,11 +7306,11 @@ msgstr "" msgid "" "For \"Tree Strong\" and \"Tree Hybrid\" styles, we recommend the following " -"settings: at least 2 interface layers, at least 0.1mm top z distance or " -"using support materials on interface." +"settings: at least 2 interface layers, at least 0.1mm top z distance or using " +"support materials on interface." msgstr "" -"\"Güçlü Ağaç\" ve \"Ağaç Hibrit\" stilleri için şu ayarları öneriyoruz: en " -"az 2 arayüz katmanı, en az 0,1 mm üst z mesafesi veya arayüzde destek " +"\"Güçlü Ağaç\" ve \"Ağaç Hibrit\" stilleri için şu ayarları öneriyoruz: en az " +"2 arayüz katmanı, en az 0,1 mm üst z mesafesi veya arayüzde destek " "malzemeleri kullanılması." msgid "" @@ -7235,8 +7349,8 @@ msgid "" "height limits ,this may cause printing quality issues." msgstr "" "Katman yüksekliği, Yazıcı Ayarları -> Ekstruder -> Katman yüksekliği " -"sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına " -"neden olabilir." +"sınırları bölümündeki sınırı aşıyor bu durum baskı kalitesi sorunlarına neden " +"olabilir." msgid "Adjust to the set range automatically? \n" msgstr "Ayarlanan aralığa otomatik olarak ayarlansın mı? \n" @@ -7250,8 +7364,8 @@ msgstr "Atla" msgid "" "Experimental feature: Retracting and cutting off the filament at a greater " "distance during filament changes to minimize flush.Although it can notably " -"reduce flush, it may also elevate the risk of nozzle clogs or other " -"printing complications." +"reduce flush, it may also elevate the risk of nozzle clogs or other printing " +"complications." msgstr "" "Deneysel özellik: Filament değişiklikleri sırasında, floşu en aza indirmek " "için filamanı daha büyük bir mesafeden geri çekmek ve kesmek. Flush’u önemli " @@ -7273,8 +7387,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive\"-" +">\"Timelapse Wipe Tower\"." msgstr "" "Araç başlığı olmadan timelapse kaydederken, bir \"Timelapse Wipe Tower\" " "eklenmesi önerilir.\n" @@ -7323,8 +7437,8 @@ msgid "" "the overhang degree range and wall speed is used" msgstr "" "Bu, çeşitli sarkma dereceleri için hızdır. Çıkıntı dereceleri çizgi " -"genişliğinin yüzdesi olarak ifade edilir. 0 hız, sarkma derecesi aralığı " -"için yavaşlamanın olmadığı anlamına gelir ve duvar hızı kullanılır" +"genişliğinin yüzdesi olarak ifade edilir. 0 hız, sarkma derecesi aralığı için " +"yavaşlamanın olmadığı anlamına gelir ve duvar hızı kullanılır" msgid "Bridge" msgstr "Köprü" @@ -7421,11 +7535,11 @@ msgid "Cool plate" msgstr "Soğuk plaka" msgid "" -"Bed temperature when cool plate is installed. Value 0 means the filament " -"does not support to print on the Cool Plate" +"Bed temperature when cool plate is installed. Value 0 means the filament does " +"not support to print on the Cool Plate" msgstr "" -"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Cool " -"Plate üzerine yazdırmayı desteklemediği anlamına gelir" +"Soğutma plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin Cool Plate " +"üzerine yazdırmayı desteklemediği anlamına gelir" msgid "Engineering plate" msgstr "Mühendislik plakası" @@ -7688,26 +7802,23 @@ msgstr "Tanımsız" msgid "Unsaved Changes" msgstr "Kaydedilmemiş Değişiklikler" -msgid "Actions For Unsaved Changes" -msgstr "Kaydedilmemiş Değişikliklere İlişkin İşlemler" +msgid "Transfer or discard changes" +msgstr "Değişiklikleri Çıkart veya Sakla" -msgid "Preset Value" -msgstr "Ön ayar değeri" +msgid "Old Value" +msgstr "Eski Değer" -msgid "Modified Value" -msgstr "Değiştirilmiş Değer" +msgid "New Value" +msgstr "Yeni değer" -msgid "Transfer Modified Value" -msgstr "Değiştirilen Değeri Aktar" +msgid "Transfer" +msgstr "Aktar" msgid "Don't save" msgstr "Kaydetme" -msgid "Use Preset Value" -msgstr "Ön Ayar Değerini Kullan" - -msgid "Save Modified Value" -msgstr "Değiştirilen Değeri Kaydet" +msgid "Discard" +msgstr "Çıkart" msgid "Click the right mouse button to display the full text." msgstr "Tam metni görüntülemek için farenin sağ tuşuna tıklayın." @@ -7749,16 +7860,16 @@ msgstr "\"%1%\" ön ayarı aşağıdaki kaydedilmemiş değişiklikleri içeriyo #, boost-format msgid "" -"Preset \"%1%\" is not compatible with the new printer profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" is not compatible with the new printer profile and it contains " +"the following unsaved changes:" msgstr "" "Ön ayar \"%1%\", yeni yazıcı profiliyle uyumlu değil ve aşağıdaki " "kaydedilmemiş değişiklikleri içeriyor:" #, boost-format msgid "" -"Preset \"%1%\" is not compatible with the new process profile and it " -"contains the following unsaved changes:" +"Preset \"%1%\" is not compatible with the new process profile and it contains " +"the following unsaved changes:" msgstr "" "Ön ayar \"%1%\", yeni işlem profiliyle uyumlu değil ve aşağıdaki " "kaydedilmemiş değişiklikleri içeriyor:" @@ -7769,41 +7880,31 @@ msgstr "“%1%” ön ayarının bazı ayarlarını değiştirdiniz." msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" "\n" -"Bu değişiklik ayarlarını (değiştirilen değer) kaydetmek ister misiniz?" +"Değiştirdiğiniz ön ayar değerlerini kaydedebilir veya silebilirsiniz." msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" "\n" -"Ön ayarı değiştirdikten sonra bu değiştirilen ayarları (değiştirilen değer) " -"korumak ister misiniz?" +"Değiştirdiğiniz ön ayar değerlerini kaydedebilir veya atabilirsiniz ya da " +"değiştirdiğiniz değerleri yeni ön ayara aktarmayı seçebilirsiniz." -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." -msgstr "" -"Ayarlarınızı daha önce değiştirdiniz ve bunların üzerine yenilerini yazmak " -"üzeresiniz." +msgid "You have previously modified your settings." +msgstr "Daha önce ayarlarınızı değiştirdiniz." msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" "\n" -"Geçerli değiştirilen ayarlarınızı korumak mı yoksa önceden ayarlanmış " -"ayarları mı kullanmak istiyorsunuz?" - -msgid "" -"\n" -"Do you want to save your current modified settings?" -msgstr "" -"\n" -"Geçerli değiştirilen ayarlarınızı kaydetmek istiyor musunuz?" +"Değiştirdiğiniz ön ayar değerlerini atabilir veya değiştirilen değerleri yeni " +"projeye aktarmayı seçebilirsiniz." msgid "Extruders count" msgstr "Ekstruder sayısı" @@ -7820,9 +7921,6 @@ msgstr "Tüm ön ayarları göster (uyumsuz olanlar dahil)" msgid "Select presets to compare" msgstr "Karşılaştırılacak ön ayarları seçin" -msgid "Transfer" -msgstr "Aktar" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7830,19 +7928,19 @@ msgstr "" msgid "" "Transfer the selected options from left preset to the right.\n" -"Note: New modified presets will be selected in settings tabs after close " -"this dialog." +"Note: New modified presets will be selected in settings tabs after close this " +"dialog." msgstr "" "Seçilen seçenekleri sol ön ayardan sağa aktarın.\n" -"Not: Bu iletişim kutusunu kapattıktan sonra ayarlar sekmelerinde " -"değiştirilen yeni ön ayarlar seçilecektir." +"Not: Bu iletişim kutusunu kapattıktan sonra ayarlar sekmelerinde değiştirilen " +"yeni ön ayarlar seçilecektir." msgid "Transfer values from left to right" msgstr "Değerleri soldan sağa aktarın" msgid "" -"If enabled, this dialog can be used for transfer selected values from left " -"to right preset." +"If enabled, this dialog can be used for transfer selected values from left to " +"right preset." msgstr "" "Etkinleştirilirse, bu iletişim kutusu seçilen değerleri soldan sağa ön ayara " "aktarmak için kullanılabilir." @@ -7929,11 +8027,11 @@ msgstr "Sıkıştırma özelleştirme" msgid "" "Ramming denotes the rapid extrusion just before a tool change in a single-" -"extruder MM printer. Its purpose is to properly shape the end of the " -"unloaded filament so it does not prevent insertion of the new filament and " -"can itself be reinserted later. This phase is important and different " -"materials can require different extrusion speeds to get the good shape. For " -"this reason, the extrusion rates during ramming are adjustable.\n" +"extruder MM printer. Its purpose is to properly shape the end of the unloaded " +"filament so it does not prevent insertion of the new filament and can itself " +"be reinserted later. This phase is important and different materials can " +"require different extrusion speeds to get the good shape. For this reason, " +"the extrusion rates during ramming are adjustable.\n" "\n" "This is an expert-level setting, incorrect adjustment will likely lead to " "jams, extruder wheel grinding into filament etc." @@ -8293,8 +8391,8 @@ msgstr "Ağ eklentisi güncellemesi" msgid "" "Click OK to update the Network plug-in when Orca Slicer launches next time." msgstr "" -"Orca Slicer bir sonraki sefer başlatıldığında Ağ eklentisini güncellemek " -"için Tamam'a tıklayın." +"Orca Slicer bir sonraki sefer başlatıldığında Ağ eklentisini güncellemek için " +"Tamam'a tıklayın." #, c-format, boost-format msgid "A new Network plug-in(%s) available, Do you want to install it?" @@ -8310,7 +8408,40 @@ msgid "Done" msgstr "Tamamlandı" msgid "resume" -msgstr "" +msgstr "Devam et" + +msgid "Resume Printing" +msgstr "Yazdırmaya Devam Et" + +msgid "Resume Printing(defects acceptable)" +msgstr "Yazdırmaya Devam Et (kusurlar kabul edilebilir)" + +msgid "Resume Printing(problem solved)" +msgstr "Yazdırmaya Devam Et (sorun çözüldü)" + +msgid "Stop Printing" +msgstr "Yazdırmayı Durdur" + +msgid "Check Assistant" +msgstr "Kontrol Asistanı" + +msgid "Filament Extruded, Continue" +msgstr "Filament Ekstrüde Edildi, Devam Et" + +msgid "Not Extruded Yet, Retry" +msgstr "Henüz Ekstrüde Edilmedi, Tekrar Deneyin" + +msgid "Finished, Continue" +msgstr "Bitti, Devam Et" + +msgid "Load Filament" +msgstr "Filament Yükle" + +msgid "Filament Loaded, Resume" +msgstr "Filament Yüklendi, Devam Et" + +msgid "View Liveview" +msgstr "Canlı Önizlemeyi Görüntüle" msgid "Confirm and Update Nozzle" msgstr "Nozulu Onaylayın ve Güncelleyin" @@ -8318,8 +8449,7 @@ msgstr "Nozulu Onaylayın ve Güncelleyin" msgid "LAN Connection Failed (Sending print file)" msgstr "LAN Bağlantısı Başarısız (Yazdırma dosyası gönderiliyor)" -msgid "" -"Step 1, please confirm Orca Slicer and your printer are in the same LAN." +msgid "Step 1, please confirm Orca Slicer and your printer are in the same LAN." msgstr "" "Adım 1, lütfen Orca Slicer ile yazıcınızın aynı LAN'da olduğunu doğrulayın." @@ -8394,8 +8524,8 @@ msgid "Updating successful" msgstr "Güncelleme başarılı" msgid "" -"Are you sure you want to update? This will take about 10 minutes. Do not " -"turn off the power while the printer is updating." +"Are you sure you want to update? This will take about 10 minutes. Do not turn " +"off the power while the printer is updating." msgstr "" "Güncellemek istediğinizden emin misiniz? Bu yaklaşık 10 dakika sürecektir. " "Yazıcı güncellenirken gücü kapatmayın." @@ -8414,10 +8544,9 @@ msgid "" "printing. Do you want to update now? You can also update later on printer or " "update next time starting the studio." msgstr "" -"Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme " -"yapılması gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra " -"yazıcıda güncelleyebilir veya stüdyoyu bir sonraki başlatışınızda " -"güncelleyebilirsiniz." +"Ürün yazılımı sürümü anormal. Yazdırmadan önce onarım ve güncelleme yapılması " +"gerekir. Şimdi güncellemek istiyor musunuz? Ayrıca daha sonra yazıcıda " +"güncelleyebilir veya stüdyoyu bir sonraki başlatışınızda güncelleyebilirsiniz." msgid "Extension Board" msgstr "Uzatma Kartı" @@ -8572,8 +8701,8 @@ msgid "Failed to calculate line width of %1%. Can not get value of \"%2%\" " msgstr "%1% çizgi genişliği hesaplanamadı. \"%2%\" değeri alınamıyor " msgid "" -"Invalid spacing supplied to Flow::with_spacing(), check your layer height " -"and extrusion width" +"Invalid spacing supplied to Flow::with_spacing(), check your layer height and " +"extrusion width" msgstr "" "Flow::with_spacing()'e sağlanan geçersiz boşluk, kat yüksekliğinizi ve " "ekstrüzyon genişliğinizi kontrol edin" @@ -8706,8 +8835,8 @@ msgstr " dışlama alanına çok yakın ve çarpışmalara neden olacak.\n" msgid "" "Can not print multiple filaments which have large difference of temperature " -"together. Otherwise, the extruder and nozzle may be blocked or damaged " -"during printing" +"together. Otherwise, the extruder and nozzle may be blocked or damaged during " +"printing" msgstr "" "Birlikte büyük sıcaklık farkına sahip birden fazla filament basılamaz. Aksi " "takdirde baskı sırasında ekstruder ve nozul tıkanabilir veya hasar görebilir" @@ -8740,8 +8869,8 @@ msgstr "%1% nesnesi maksimum yapı hacmi yüksekliğini aşıyor." #, boost-format msgid "" -"While the object %1% itself fits the build volume, its last layer exceeds " -"the maximum build volume height." +"While the object %1% itself fits the build volume, its last layer exceeds the " +"maximum build volume height." msgstr "" "%1% nesnesinin kendisi yapı hacmine uysa da, son katmanı maksimum yapı hacmi " "yüksekliğini aşıyor." @@ -8770,8 +8899,7 @@ msgstr "" "Temizleme Kulesi şu anda yalnızca ilgili ekstruder adreslemesiyle " "desteklenmektedir (use_relative_e_distances=1)." -msgid "" -"Ooze prevention is currently not supported with the prime tower enabled." +msgid "Ooze prevention is currently not supported with the prime tower enabled." msgstr "Sızıntı önleme şu anda ana kule etkinken desteklenmemektedir." msgid "" @@ -8788,8 +8916,8 @@ msgid "" "The prime tower is not supported when adaptive layer height is on. It " "requires that all objects have the same layer height." msgstr "" -"Uyarlanabilir katman yüksekliği açıkken ana kule desteklenmez. Tüm " -"nesnelerin aynı katman yüksekliğine sahip olmasını gerektirir." +"Uyarlanabilir katman yüksekliği açıkken ana kule desteklenmez. Tüm nesnelerin " +"aynı katman yüksekliğine sahip olmasını gerektirir." msgid "The prime tower requires \"support gap\" to be multiple of layer height" msgstr "" @@ -8797,12 +8925,11 @@ msgstr "" msgid "The prime tower requires that all objects have the same layer heights" msgstr "" -"Prime tower, tüm nesnelerin aynı katman yüksekliğine sahip olmasını " -"gerektirir" +"Prime tower, tüm nesnelerin aynı katman yüksekliğine sahip olmasını gerektirir" msgid "" -"The prime tower requires that all objects are printed over the same number " -"of raft layers" +"The prime tower requires that all objects are printed over the same number of " +"raft layers" msgstr "" "Ana kule, tüm nesnelerin aynı sayıda sal katmanı üzerine yazdırılmasını " "gerektirir" @@ -8815,8 +8942,8 @@ msgstr "" "gerektirir." msgid "" -"The prime tower is only supported if all objects have the same variable " -"layer height" +"The prime tower is only supported if all objects have the same variable layer " +"height" msgstr "" "Prime tower yalnızca tüm nesnelerin aynı değişken katman yüksekliğine sahip " "olması durumunda desteklenir" @@ -8830,8 +8957,7 @@ msgstr "Çok büyük çizgi genişliği" msgid "" "The prime tower requires that support has the same layer height with object." msgstr "" -"Prime kulesi için, destek, nesne ile aynı katman yüksekliğine sahip " -"olmalıdır." +"Prime kulesi için, destek, nesne ile aynı katman yüksekliğine sahip olmalıdır." msgid "" "Organic support tree tip diameter must not be smaller than support material " @@ -8844,8 +8970,8 @@ msgid "" "Organic support branch diameter must not be smaller than 2x support material " "extrusion width." msgstr "" -"Organik destek dalı çapı, destek malzemesi ekstrüzyon genişliğinin 2 " -"katından daha küçük olamaz." +"Organik destek dalı çapı, destek malzemesi ekstrüzyon genişliğinin 2 katından " +"daha küçük olamaz." msgid "" "Organic support branch diameter must not be smaller than support tree tip " @@ -8862,20 +8988,20 @@ msgid "Layer height cannot exceed nozzle diameter" msgstr "Katman yüksekliği nozul çapını aşamaz" msgid "" -"Relative extruder addressing requires resetting the extruder position at " -"each layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " +"Relative extruder addressing requires resetting the extruder position at each " +"layer to prevent loss of floating point accuracy. Add \"G92 E0\" to " "layer_gcode." msgstr "" -"Göreceli ekstruder adreslemesi, kayan nokta doğruluğunun kaybını önlemek " -"için her katmandaki ekstruder konumunun sıfırlanmasını gerektirir. " -"Layer_gcode'a \"G92 E0\" ekleyin." +"Göreceli ekstruder adreslemesi, kayan nokta doğruluğunun kaybını önlemek için " +"her katmandaki ekstruder konumunun sıfırlanmasını gerektirir. Layer_gcode'a " +"\"G92 E0\" ekleyin." msgid "" "\"G92 E0\" was found in before_layer_gcode, which is incompatible with " "absolute extruder addressing." msgstr "" -"Before_layer_gcode'da \"G92 E0\" bulundu ve bu, mutlak ekstruder " -"adreslemeyle uyumsuzdu." +"Before_layer_gcode'da \"G92 E0\" bulundu ve bu, mutlak ekstruder adreslemeyle " +"uyumsuzdu." msgid "" "\"G92 E0\" was found in layer_gcode, which is incompatible with absolute " @@ -8914,8 +9040,8 @@ msgid "" "(machine_max_acceleration_extruding).\n" "Orca will automatically cap the acceleration speed to ensure it doesn't " "surpass the printer's capabilities.\n" -"You can adjust the machine_max_acceleration_extruding value in your " -"printer's configuration to get higher speeds." +"You can adjust the machine_max_acceleration_extruding value in your printer's " +"configuration to get higher speeds." msgstr "" "Hızlanma ayarı yazıcının maksimum hızlanmasını aşıyor " "(machine_max_acceleration_extruding).\n" @@ -8976,8 +9102,7 @@ msgid "Elephant foot compensation" msgstr "Fil ayağı telafi oranı" msgid "" -"Shrink the initial layer on build plate to compensate for elephant foot " -"effect" +"Shrink the initial layer on build plate to compensate for elephant foot effect" msgstr "" "Fil ayağı etkisini telafi etmek için baskı plakasındaki ilk katmanı küçültün" @@ -9036,15 +9161,15 @@ msgid "" "Orca Slicer can upload G-code files to a printer host. This field should " "contain the hostname, IP address or URL of the printer host instance. Print " "host behind HAProxy with basic auth enabled can be accessed by putting the " -"user name and password into the URL in the following format: https://" -"username:password@your-octopi-address/" +"user name and password into the URL in the following format: https://username:" +"password@your-octopi-address/" msgstr "" -"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " -"Bu alan, yazıcı ana bilgisayar örneğinin ana bilgisayar adını, IP adresini " -"veya URL'sini içermelidir. Temel kimlik doğrulamanın etkin olduğu " -"HAProxy'nin arkasındaki yazdırma ana bilgisayarına, kullanıcı adı ve " -"parolanın aşağıdaki biçimdeki URL'ye girilmesiyle erişilebilir: https://" -"username:password@your-octopi-address/" +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " +"alan, yazıcı ana bilgisayar örneğinin ana bilgisayar adını, IP adresini veya " +"URL'sini içermelidir. Temel kimlik doğrulamanın etkin olduğu HAProxy'nin " +"arkasındaki yazdırma ana bilgisayarına, kullanıcı adı ve parolanın aşağıdaki " +"biçimdeki URL'ye girilmesiyle erişilebilir: https://username:password@your-" +"octopi-address/" msgid "Device UI" msgstr "Cihaz kullanıcı arayüzü" @@ -9052,8 +9177,7 @@ msgstr "Cihaz kullanıcı arayüzü" msgid "" "Specify the URL of your device user interface if it's not same as print_host" msgstr "" -"Print_Host ile aynı değilse cihazınızın kullanıcı arayüzünün URL'sini " -"belirtin" +"Print_Host ile aynı değilse cihazınızın kullanıcı arayüzünün URL'sini belirtin" msgid "API Key / Password" msgstr "API Anahtarı / Şifre" @@ -9062,9 +9186,8 @@ msgid "" "Orca Slicer can upload G-code files to a printer host. This field should " "contain the API Key or the password required for authentication." msgstr "" -"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " -"Bu alan, kimlik doğrulama için gereken API Anahtarını veya şifreyi " -"içermelidir." +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " +"alan, kimlik doğrulama için gereken API Anahtarını veya şifreyi içermelidir." msgid "Name of the printer" msgstr "Yazıcı adı" @@ -9074,8 +9197,8 @@ msgstr "HTTPS CA Dosyası" msgid "" "Custom CA certificate file can be specified for HTTPS OctoPrint connections, " -"in crt/pem format. If left blank, the default OS CA certificate repository " -"is used." +"in crt/pem format. If left blank, the default OS CA certificate repository is " +"used." msgstr "" "HTTPS OctoPrint bağlantıları için crt/pem formatında özel CA sertifika " "dosyası belirtilebilir. Boş bırakılırsa varsayılan OS CA sertifika deposu " @@ -9126,10 +9249,10 @@ msgid "" "either as an absolute value or as percentage (for example 50%) of a direct " "travel path. Zero to disable" msgstr "" -"Duvarı geçmekten kaçınmak için maksimum sapma mesafesi. Yoldan sapma " -"mesafesi bu değerden büyükse yoldan sapmayın. Yol uzunluğu, mutlak bir değer " -"olarak veya doğrudan seyahat yolunun yüzdesi (örneğin %50) olarak " -"belirtilebilir. Devre dışı bırakmak için sıfır" +"Duvarı geçmekten kaçınmak için maksimum sapma mesafesi. Yoldan sapma mesafesi " +"bu değerden büyükse yoldan sapmayın. Yol uzunluğu, mutlak bir değer olarak " +"veya doğrudan seyahat yolunun yüzdesi (örneğin %50) olarak belirtilebilir. " +"Devre dışı bırakmak için sıfır" msgid "mm or %" msgstr "mm veya %" @@ -9138,8 +9261,8 @@ msgid "Other layers" msgstr "Diğer katmanlar" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Cool Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Cool Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin " "Cool Plate üzerine yazdırmayı desteklemediği anlamına gelir" @@ -9148,22 +9271,22 @@ msgid "°C" msgstr "°C" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Engineering Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Engineering Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. Değer 0, filamentin " "Mühendislik Plakasına yazdırmayı desteklemediği anlamına gelir" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the High Temp Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the High Temp Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 değeri, filamentin " "Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına gelir" msgid "" -"Bed temperature for layers except the initial one. Value 0 means the " -"filament does not support to print on the Textured PEI Plate" +"Bed temperature for layers except the initial one. Value 0 means the filament " +"does not support to print on the Textured PEI Plate" msgstr "" "İlk katman dışındaki katmanlar için yatak sıcaklığı. 0 Değeri, filamentin " "Dokulu PEI Plaka üzerine yazdırmayı desteklemediği anlamına gelir" @@ -9245,11 +9368,11 @@ msgid "" "The number of bottom solid layers is increased when slicing if the thickness " "calculated by bottom shell layers is thinner than this value. This can avoid " "having too thin shell when layer height is small. 0 means that this setting " -"is disabled and thickness of bottom shell is absolutely determained by " -"bottom shell layers" +"is disabled and thickness of bottom shell is absolutely determained by bottom " +"shell layers" msgstr "" -"Alt kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince " -"ise dilimleme sırasında alt katı katmanların sayısı arttırılır. Bu, katman " +"Alt kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise " +"dilimleme sırasında alt katı katmanların sayısı arttırılır. Bu, katman " "yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu " "ayarın devre dışı olduğu ve alt kabuğun kalınlığının mutlaka alt kabuk " "katmanları tarafından belirlendiği anlamına gelir" @@ -9263,8 +9386,7 @@ msgid "" "\n" "Options:\n" "1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces\n" -"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces " -"only\n" +"2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only\n" "3. Nowhere: Disables gap fill\n" msgstr "" "Seçilen yüzeyler için boşluk doldurmayı etkinleştirir. Doldurulacak minimum " @@ -9290,19 +9412,19 @@ msgid "Force cooling for overhang and bridge" msgstr "Çıkıntı ve köprüler için soğutmayı zorla" msgid "" -"Enable this option to optimize part cooling fan speed for overhang and " -"bridge to get better cooling" +"Enable this option to optimize part cooling fan speed for overhang and bridge " +"to get better cooling" msgstr "" -"Daha iyi soğutma elde etmek amacıyla çıkıntı ve köprü için parça soğutma " -"fanı hızını optimize etmek amacıyla bu seçeneği etkinleştirin" +"Daha iyi soğutma elde etmek amacıyla çıkıntı ve köprü için parça soğutma fanı " +"hızını optimize etmek amacıyla bu seçeneği etkinleştirin" msgid "Fan speed for overhang" msgstr "Çıkıntılar için fan hızı" msgid "" -"Force part cooling fan to be this speed when printing bridge or overhang " -"wall which has large overhang degree. Forcing cooling for overhang and " -"bridge can get better quality for these part" +"Force part cooling fan to be this speed when printing bridge or overhang wall " +"which has large overhang degree. Forcing cooling for overhang and bridge can " +"get better quality for these part" msgstr "" "Çıkıntı derecesi büyük olan köprü veya çıkıntılı duvara baskı yaparken parça " "soğutma fanını bu hızda olmaya zorlayın. Çıkıntı ve köprü için soğutmayı " @@ -9314,9 +9436,9 @@ msgstr "Çıkıntı soğutması" #, c-format msgid "" "Force cooling fan to be specific speed when overhang degree of printed part " -"exceeds this value. Expressed as percentage which indicides how much width " -"of the line without support from lower layer. 0% means forcing cooling for " -"all outer wall no matter how much overhang degree" +"exceeds this value. Expressed as percentage which indicides how much width of " +"the line without support from lower layer. 0% means forcing cooling for all " +"outer wall no matter how much overhang degree" msgstr "" "Yazdırılan parçanın çıkıntı derecesi bu değeri aştığında soğutma fanını " "belirli bir hıza zorlar. Alt katmandan destek almadan çizginin ne kadar " @@ -9350,8 +9472,8 @@ msgid "" "Decrease this value slightly(for example 0.9) to reduce the amount of " "material for bridge, to improve sag" msgstr "" -"Köprü için malzeme miktarını azaltmak ve sarkmayı iyileştirmek için bu " -"değeri biraz azaltın (örneğin 0,9)" +"Köprü için malzeme miktarını azaltmak ve sarkmayı iyileştirmek için bu değeri " +"biraz azaltın (örneğin 0,9)" msgid "Internal bridge flow ratio" msgstr "İç köprü akış oranı" @@ -9419,11 +9541,11 @@ msgid "" "on the next layer, like letters. Set this setting to 0 to remove these " "artifacts." msgstr "" -"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından " -"kaplıysa layer genişliği bu değerin altında olan bir üst katman olarak " +"Eğer bir üst yüzey basılacaksa ve kısmen başka bir katman tarafından kaplıysa " +"layer genişliği bu değerin altında olan bir üst katman olarak " "değerlendirilmeyecek. Yalnızca çevrelerle kaplanması gereken yüzeyde 'bir " -"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya " -"a % çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n" +"çevre üstte' tetiklemesine izin vermemek yararlı olabilir. Bu değer mm veya a " +"% çevre ekstrüzyon genişliğinin bir yüzdesi olabilir.\n" "Uyarı: Etkinleştirilirse bir sonraki katmanda harfler gibi bazı ince " "özelliklerin olması durumunda yapay yapılar oluşturulabilir. Bu yapıları " "kaldırmak için bu ayarı 0 olarak ayarlayın." @@ -9455,9 +9577,9 @@ msgid "Overhang reversal" msgstr "Çıkıntıyı tersine çevir" msgid "" -"Extrude perimeters that have a part over an overhang in the reverse " -"direction on odd layers. This alternating pattern can drastically improve " -"steep overhangs.\n" +"Extrude perimeters that have a part over an overhang in the reverse direction " +"on odd layers. This alternating pattern can drastically improve steep " +"overhangs.\n" "\n" "This setting can also help reduce part warping due to the reduction of " "stresses in the part walls." @@ -9479,8 +9601,7 @@ msgid "" "alternating directions. This should reduce part warping while also " "maintaining external wall quality. This feature can be very useful for warp " "prone material, like ABS/ASA, and also for elastic filaments, like TPU and " -"Silk PLA. It can also help reduce warping on floating regions over " -"supports.\n" +"Silk PLA. It can also help reduce warping on floating regions over supports.\n" "\n" "For this setting to be the most effective, it is recomended to set the " "Reverse Threshold to 0 so that all internal walls print in alternating " @@ -9512,8 +9633,7 @@ msgstr "" "Bu seçenek, havşa delikleri için köprüler oluşturarak bunların desteksiz " "yazdırılmasına olanak tanır. Mevcut modlar şunları içerir:\n" "1. Yok: Köprü oluşturulmaz.\n" -"2. Kısmen Köprülendi: Desteklenmeyen alanın yalnızca bir kısmı " -"köprülenecek.\n" +"2. Kısmen Köprülendi: Desteklenmeyen alanın yalnızca bir kısmı köprülenecek.\n" "3. Feda Katman: Tam bir feda köprü katmanı oluşturulur." msgid "Partially bridged" @@ -9633,8 +9753,8 @@ msgid "Brim ear detection radius" msgstr "Kenar kulak algılama yarıçapı" msgid "" -"The geometry will be decimated before dectecting sharp angles. This " -"parameter indicates the minimum length of the deviation for the decimation.\n" +"The geometry will be decimated before dectecting sharp angles. This parameter " +"indicates the minimum length of the deviation for the decimation.\n" "0 to deactivate" msgstr "" "Keskin açılar tespit edilmeden önce geometrinin büyük bir kısmı yok " @@ -9683,10 +9803,10 @@ msgid "" "that layer can be cooled for longer time. This can improve the cooling " "quality for needle and small details" msgstr "" -"Son katman süresinin \"Maksimum fan hızı eşiği\"ndeki katman süresi " -"eşiğinden kısa olmamasını sağlamak amacıyla yazdırma hızını yavaşlatmak için " -"bu seçeneği etkinleştirin, böylece katman daha uzun süre soğutulabilir. Bu, " -"iğne ve küçük detaylar için soğutma kalitesini artırabilir" +"Son katman süresinin \"Maksimum fan hızı eşiği\"ndeki katman süresi eşiğinden " +"kısa olmamasını sağlamak amacıyla yazdırma hızını yavaşlatmak için bu " +"seçeneği etkinleştirin, böylece katman daha uzun süre soğutulabilir. Bu, iğne " +"ve küçük detaylar için soğutma kalitesini artırabilir" msgid "Normal printing" msgstr "Normal baskı" @@ -9695,8 +9815,7 @@ msgid "" "The default acceleration of both normal printing and travel except initial " "layer" msgstr "" -"İlk katman dışında hem normal yazdırmanın hem de ilerlemenin varsayılan " -"ivmesi" +"İlk katman dışında hem normal yazdırmanın hem de ilerlemenin varsayılan ivmesi" msgid "mm/s²" msgstr "mm/s²" @@ -9740,8 +9859,8 @@ msgid "" "Close all cooling fan for the first certain layers. Cooling fan of the first " "layer used to be closed to get better build plate adhesion" msgstr "" -"İlk belirli katmanlar için tüm soğutma fanını kapatın. Daha iyi baskı " -"plakası yapışması sağlamak için ilk katmanın soğutma fanı kapatılırdı" +"İlk belirli katmanlar için tüm soğutma fanını kapatın. Daha iyi baskı plakası " +"yapışması sağlamak için ilk katmanın soğutma fanı kapatılırdı" msgid "Don't support bridges" msgstr "Köprülerde destek olmasın" @@ -9782,8 +9901,8 @@ msgid "Don't filter out small internal bridges (beta)" msgstr "Küçük iç köprüleri filtrelemeyin (deneysel)" msgid "" -"This option can help reducing pillowing on top surfaces in heavily slanted " -"or curved models.\n" +"This option can help reducing pillowing on top surfaces in heavily slanted or " +"curved models.\n" "\n" "By default, small internal bridges are filtered out and the internal solid " "infill is printed directly over the sparse infill. This works well in most " @@ -9798,16 +9917,16 @@ msgid "" "unsupported internal solid infill. The options below control the amount of " "filtering, i.e. the amount of internal bridges created.\n" "\n" -"Disabled - Disables this option. This is the default behaviour and works " -"well in most cases.\n" +"Disabled - Disables this option. This is the default behaviour and works well " +"in most cases.\n" "\n" "Limited filtering - Creates internal bridges on heavily slanted surfaces, " -"while avoiding creating uncessesary interal bridges. This works well for " -"most difficult models.\n" +"while avoiding creating uncessesary interal bridges. This works well for most " +"difficult models.\n" "\n" -"No filtering - Creates internal bridges on every potential internal " -"overhang. This option is useful for heavily slanted top surface models. " -"However, in most cases it creates too many unecessary bridges." +"No filtering - Creates internal bridges on every potential internal overhang. " +"This option is useful for heavily slanted top surface models. However, in " +"most cases it creates too many unecessary bridges." msgstr "" "Bu seçenek, aşırı eğimli veya kavisli modellerde üst yüzeylerdeki " "yastıklamanın azaltılmasına yardımcı olabilir.\n" @@ -9959,8 +10078,8 @@ msgid "" "Speed of outer wall which is outermost and visible. It's used to be slower " "than inner wall speed to get better quality." msgstr "" -"En dışta görünen ve görünen dış duvarın hızı. Daha iyi kalite elde etmek " -"için iç duvar hızından daha yavaş olması kullanılır." +"En dışta görünen ve görünen dış duvarın hızı. Daha iyi kalite elde etmek için " +"iç duvar hızından daha yavaş olması kullanılır." msgid "Small perimeters" msgstr "Küçük çevre (perimeter)" @@ -9989,8 +10108,8 @@ msgstr "Duvar baskı sırası" msgid "" "Print sequence of the internal (inner) and external (outer) walls. \n" "\n" -"Use Inner/Outer for best overhangs. This is because the overhanging walls " -"can adhere to a neighouring perimeter while printing. However, this option " +"Use Inner/Outer for best overhangs. This is because the overhanging walls can " +"adhere to a neighouring perimeter while printing. However, this option " "results in slightly reduced surface quality as the external perimeter is " "deformed by being squashed to the internal perimeter.\n" "\n" @@ -10021,14 +10140,14 @@ msgstr "" "kalitesi ve boyutsal doğruluk için İç/Dış/İç seçeneğini kullanın. Ancak, dış " "duvarın üzerine baskı yapılacak bir iç çevre olmadığından sarkma performansı " "düşecektir. Bu seçenek, önce 3. çevreden itibaren iç duvarları, ardından dış " -"çevreyi ve son olarak da birinci iç çevreyi yazdırdığından etkili olması " -"için en az 3 duvar gerektirir. Bu seçenek çoğu durumda Dış/İç seçeneğine " -"karşı önerilir. \n" +"çevreyi ve son olarak da birinci iç çevreyi yazdırdığından etkili olması için " +"en az 3 duvar gerektirir. Bu seçenek çoğu durumda Dış/İç seçeneğine karşı " +"önerilir. \n" "\n" "İç/Dış/İç seçeneğinin aynı dış duvar kalitesi ve boyutsal doğruluk " "avantajları için Dış/İç seçeneğini kullanın. Bununla birlikte, yeni bir " -"katmanın ilk ekstrüzyonu görünür bir yüzey üzerinde başladığından z " -"dikişleri daha az tutarlı görünecektir.\n" +"katmanın ilk ekstrüzyonu görünür bir yüzey üzerinde başladığından z dikişleri " +"daha az tutarlı görünecektir.\n" "\n" " " @@ -10050,9 +10169,9 @@ msgid "" "\n" "Printing walls first may help with extreme overhangs as the walls have the " "neighbouring infill to adhere to. However, the infill will slighly push out " -"the printed walls where it is attached to them, resulting in a worse " -"external surface finish. It can also cause the infill to shine through the " -"external surfaces of the part." +"the printed walls where it is attached to them, resulting in a worse external " +"surface finish. It can also cause the infill to shine through the external " +"surfaces of the part." msgstr "" "Duvar/dolgu sırası. Onay kutusunun işareti kaldırıldığında ilk olarak " "duvarlar yazdırılır ve bu çoğu durumda en iyi sonucu verir.\n" @@ -10070,8 +10189,8 @@ msgid "" "The direction which the wall loops are extruded when looking down from the " "top.\n" "\n" -"By default all walls are extruded in counter-clockwise, unless Reverse on " -"odd is enabled. Set this to any option other than Auto will force the wall " +"By default all walls are extruded in counter-clockwise, unless Reverse on odd " +"is enabled. Set this to any option other than Auto will force the wall " "direction regardless of the Reverse on odd.\n" "\n" "This option will be disabled if sprial vase mode is enabled." @@ -10079,8 +10198,8 @@ msgstr "" "Yukarıdan aşağıya bakıldığında duvar döngülerinin ekstrüzyona uğradığı yön.\n" "\n" "Tek sayıyı ters çevir seçeneği etkinleştirilmedikçe, varsayılan olarak tüm " -"duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında " -"herhangi bir seçeneğe ayarlayın, Ters açıklığa bakılmaksızın duvar yönünü " +"duvarlar saat yönünün tersine ekstrüde edilir. Bunu Otomatik dışında herhangi " +"bir seçeneğe ayarlayın, Ters açıklığa bakılmaksızın duvar yönünü " "zorlayacaktır.\n" "\n" "Spiral vazo modu etkinse bu seçenek devre dışı bırakılacaktır." @@ -10108,8 +10227,8 @@ msgid "" "Distance of the nozzle tip to the lid. Used for collision avoidance in by-" "object printing." msgstr "" -"Nozul ucunun kapağa olan mesafesi. Nesneye göre yazdırmada çarpışmayı " -"önlemek için kullanılır." +"Nozul ucunun kapağa olan mesafesi. Nesneye göre yazdırmada çarpışmayı önlemek " +"için kullanılır." msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " @@ -10132,20 +10251,19 @@ msgid "" "probe's XY offset, most printers are unable to probe the entire bed. To " "ensure the probe point does not go outside the bed area, the minimum and " "maximum points of the bed mesh should be set appropriately. OrcaSlicer " -"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " -"exceed these min/max points. This information can usually be obtained from " -"your printer manufacturer. The default setting is (-99999, -99999), which " -"means there are no limits, thus allowing probing across the entire bed." +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed " +"these min/max points. This information can usually be obtained from your " +"printer manufacturer. The default setting is (-99999, -99999), which means " +"there are no limits, thus allowing probing across the entire bed." msgstr "" -"Bu seçenek, izin verilen yatak ağ alanı için minimum noktayı ayarlar. Prob " -"XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " -"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve " -"maksimum noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, " -"adaptive_bed_mesh_min/adaptive_bed_mesh_max değerlerinin bu min/maks " -"noktalarını aşmamasını sağlar. Bu bilgi genellikle yazıcınızın üreticisinden " -"edinilebilir. Varsayılan ayar (-99999, -99999) şeklindedir; bu, herhangi bir " -"sınırın olmadığı anlamına gelir, dolayısıyla yatağın tamamında problamaya " -"izin verilir." +"Bu seçenek, izin verilen yatak ağ alanı için minimum noktayı ayarlar. Prob XY " +"ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " +"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve maksimum " +"noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max değerlerinin bu min/maks noktalarını aşmamasını sağlar. " +"Bu bilgi genellikle yazıcınızın üreticisinden edinilebilir. Varsayılan ayar " +"(-99999, -99999) şeklindedir; bu, herhangi bir sınırın olmadığı anlamına " +"gelir, dolayısıyla yatağın tamamında problamaya izin verilir." msgid "Bed mesh max" msgstr "Maksimum yatak ağı" @@ -10155,20 +10273,19 @@ msgid "" "probe's XY offset, most printers are unable to probe the entire bed. To " "ensure the probe point does not go outside the bed area, the minimum and " "maximum points of the bed mesh should be set appropriately. OrcaSlicer " -"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not " -"exceed these min/max points. This information can usually be obtained from " -"your printer manufacturer. The default setting is (99999, 99999), which " -"means there are no limits, thus allowing probing across the entire bed." +"ensures that adaptive_bed_mesh_min/adaptive_bed_mesh_max values do not exceed " +"these min/max points. This information can usually be obtained from your " +"printer manufacturer. The default setting is (99999, 99999), which means " +"there are no limits, thus allowing probing across the entire bed." msgstr "" -"Bu seçenek, izin verilen yatak ağ alanı için maksimum noktayı ayarlar. " -"Probun XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob " -"noktasının yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum " -"ve maksimum noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, " -"adaptive_bed_mesh_min/adaptive_bed_mesh_max değerlerinin bu min/maks " -"noktalarını aşmamasını sağlar. Bu bilgi genellikle yazıcınızın üreticisinden " -"edinilebilir. Varsayılan ayar (99999, 99999) şeklindedir; bu, herhangi bir " -"sınırın olmadığı anlamına gelir, dolayısıyla yatağın tamamında problamaya " -"izin verilir." +"Bu seçenek, izin verilen yatak ağ alanı için maksimum noktayı ayarlar. Probun " +"XY ofseti nedeniyle çoğu yazıcı yatağın tamamını tarayamaz. Prob noktasının " +"yatak alanı dışına çıkmamasını sağlamak için yatak ağının minimum ve maksimum " +"noktaları uygun şekilde ayarlanmalıdır. OrcaSlicer, adaptive_bed_mesh_min/" +"adaptive_bed_mesh_max değerlerinin bu min/maks noktalarını aşmamasını sağlar. " +"Bu bilgi genellikle yazıcınızın üreticisinden edinilebilir. Varsayılan ayar " +"(99999, 99999) şeklindedir; bu, herhangi bir sınırın olmadığı anlamına gelir, " +"dolayısıyla yatağın tamamında problamaya izin verilir." msgid "Probe point distance" msgstr "Prob noktası mesafesi" @@ -10185,8 +10302,8 @@ msgid "Mesh margin" msgstr "Yatak ağı boşluğu" msgid "" -"This option determines the additional distance by which the adaptive bed " -"mesh area should be expanded in the XY directions." +"This option determines the additional distance by which the adaptive bed mesh " +"area should be expanded in the XY directions." msgstr "" "Bu seçenek, uyarlanabilir yatak ağ alanının XY yönlerinde genişletilmesi " "gereken ek mesafeyi belirler." @@ -10206,9 +10323,9 @@ msgstr "Akış oranı" msgid "" "The material may have volumetric change after switching between molten state " "and crystalline state. This setting changes all extrusion flow of this " -"filament in gcode proportionally. Recommended value range is between 0.95 " -"and 1.05. Maybe you can tune this value to get nice flat surface when there " -"has slight overflow or underflow" +"filament in gcode proportionally. Recommended value range is between 0.95 and " +"1.05. Maybe you can tune this value to get nice flat surface when there has " +"slight overflow or underflow" msgstr "" "Malzeme, erimiş hal ile kristal hal arasında geçiş yaptıktan sonra hacimsel " "değişime sahip olabilir. Bu ayar, bu filamentin gcode'daki tüm ekstrüzyon " @@ -10230,8 +10347,8 @@ msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "Basınç avansı (Klipper) Doğrusal ilerleme faktörü (Marlin)" msgid "" -"Default line width if other line widths are set to 0. If expressed as a %, " -"it will be computed over the nozzle diameter." +"Default line width if other line widths are set to 0. If expressed as a %, it " +"will be computed over the nozzle diameter." msgstr "" "Diğer çizgi genişlikleri 0'a ayarlanmışsa varsayılan çizgi genişliği. % " "olarak ifade edilirse nozul çapı üzerinden hesaplanacaktır." @@ -10240,8 +10357,8 @@ msgid "Keep fan always on" msgstr "Fanı her zaman açık tut" msgid "" -"If enable this setting, part cooling fan will never be stoped and will run " -"at least at minimum speed to reduce the frequency of starting and stoping" +"If enable this setting, part cooling fan will never be stoped and will run at " +"least at minimum speed to reduce the frequency of starting and stoping" msgstr "" "Bu ayarı etkinleştirirseniz, parça soğutma fanı hiçbir zaman durdurulmayacak " "ve başlatma ve durdurma sıklığını azaltmak için en azından minimum hızda " @@ -10327,11 +10444,11 @@ msgid "" "Be sure to allow enough space between objects, as this compensation is done " "after the checks." msgstr "" -"Filamentin soğuduktan sonra alacağı büzülme yüzdesini girin (100 mm yerine " -"94 mm ölçerseniz 94%). Parça, telafi etmek için xy'de ölçeklendirilecektir. " +"Filamentin soğuduktan sonra alacağı büzülme yüzdesini girin (100 mm yerine 94 " +"mm ölçerseniz 94%). Parça, telafi etmek için xy'de ölçeklendirilecektir. " "Yalnızca çevre için kullanılan filament dikkate alınır.\n" -"Bu telafi kontrollerden sonra yapıldığından, nesneler arasında yeterli " -"boşluk bıraktığınızdan emin olun." +"Bu telafi kontrollerden sonra yapıldığından, nesneler arasında yeterli boşluk " +"bıraktığınızdan emin olun." msgid "Loading speed" msgstr "Yükleme hızı" @@ -10382,8 +10499,8 @@ msgid "" "Filament is cooled by being moved back and forth in the cooling tubes. " "Specify desired number of these moves." msgstr "" -"Filament, soğutma tüpleri içinde ileri geri hareket ettirilerek soğutulur. " -"Bu sayısını belirtin." +"Filament, soğutma tüpleri içinde ileri geri hareket ettirilerek soğutulur. Bu " +"sayısını belirtin." msgid "Speed of the first cooling move" msgstr "İlk soğutma hareketi hızı" @@ -10397,9 +10514,9 @@ msgstr "Silme kulesi üzerinde minimum boşaltım" msgid "" "After a tool change, the exact position of the newly loaded filament inside " "the nozzle may not be known, and the filament pressure is likely not yet " -"stable. Before purging the print head into an infill or a sacrificial " -"object, Orca Slicer will always prime this amount of material into the wipe " -"tower to produce successive infill or sacrificial object extrusions reliably." +"stable. Before purging the print head into an infill or a sacrificial object, " +"Orca Slicer will always prime this amount of material into the wipe tower to " +"produce successive infill or sacrificial object extrusions reliably." msgstr "" "Bir takım değişiminden sonra, yeni yüklenen filamentin nozul içindeki kesin " "konumu bilinmeyebilir ve filament basıncı muhtemelen henüz stabil değildir. " @@ -10416,13 +10533,12 @@ msgstr "Soğutma hareketleri bu hıza doğru giderek hızlanır." msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to load a new " -"filament during a tool change (when executing the T code). This time is " -"added to the total print time by the G-code time estimator." +"filament during a tool change (when executing the T code). This time is added " +"to the total print time by the G-code time estimator." msgstr "" "Yazıcı donanım yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım " -"değişikliği sırasında (T kodu yürütülürken) yeni bir filament yükleme " -"süresi. Bu süre, G kodu zaman tahmincisi tarafından toplam baskı süresine " -"eklenir." +"değişikliği sırasında (T kodu yürütülürken) yeni bir filament yükleme süresi. " +"Bu süre, G kodu zaman tahmincisi tarafından toplam baskı süresine eklenir." msgid "Ramming parameters" msgstr "Sıkıştırma parametreleri" @@ -10436,8 +10552,8 @@ msgstr "" msgid "" "Time for the printer firmware (or the Multi Material Unit 2.0) to unload a " -"filament during a tool change (when executing the T code). This time is " -"added to the total print time by the G-code time estimator." +"filament during a tool change (when executing the T code). This time is added " +"to the total print time by the G-code time estimator." msgstr "" "Yazıcı ürün yazılımının (veya Çoklu Malzeme Ünitesi 2.0'ın) takım değişimi " "sırasında (T kodu yürütülürken) filamenti boşaltma süresi. Bu süre, G kodu " @@ -10485,8 +10601,7 @@ msgstr "Filament malzeme türü" msgid "Soluble material" msgstr "Çözünür malzeme" -msgid "" -"Soluble material is commonly used to print support and support interface" +msgid "Soluble material is commonly used to print support and support interface" msgstr "" "Çözünür malzeme genellikle destek ve destek arayüzünü yazdırmak için " "kullanılır" @@ -10494,8 +10609,7 @@ msgstr "" msgid "Support material" msgstr "Destek malzemesi" -msgid "" -"Support material is commonly used to print support and support interface" +msgid "Support material is commonly used to print support and support interface" msgstr "" "Destek malzemesi yaygın olarak destek ve destek arayüzünü yazdırmak için " "kullanılır" @@ -10547,8 +10661,8 @@ msgid "" "Density of internal sparse infill, 100% turns all sparse infill into solid " "infill and internal solid infill pattern will be used" msgstr "" -"İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya " -"dönüştürür ve iç katı dolgu modeli kullanılacaktır" +"İç seyrek dolgunun yoğunluğu, %100 tüm seyrek dolguyu katı dolguya dönüştürür " +"ve iç katı dolgu modeli kullanılacaktır" msgid "Sparse infill pattern" msgstr "Dolgu deseni" @@ -10586,6 +10700,9 @@ msgstr "Destek kübik" msgid "Lightning" msgstr "Yıldırım" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Dolgu uzunluğu" @@ -10593,23 +10710,22 @@ msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " "calculated over infill extrusion width. Orca Slicer tries to connect two " -"close infill lines to a short perimeter segment. If no such perimeter " -"segment shorter than infill_anchor_max is found, the infill line is " -"connected to a perimeter segment at just one side and the length of the " -"perimeter segment taken is limited to this parameter, but no longer than " -"anchor_length_max. \n" +"close infill lines to a short perimeter segment. If no such perimeter segment " +"shorter than infill_anchor_max is found, the infill line is connected to a " +"perimeter segment at just one side and the length of the perimeter segment " +"taken is limited to this parameter, but no longer than anchor_length_max. \n" "Set this parameter to zero to disable anchoring perimeters connected to a " "single infill line." msgstr "" "Bir dolgu hattını, ek bir çevrenin kısa bir bölümü ile bir iç çevreye " -"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon " -"genişliği üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir " -"çevre segmentine bağlamaya çalışıyor. infill_anchor_max'tan daha kısa böyle " -"bir çevre segmenti bulunamazsa, dolgu hattı yalnızca bir taraftaki bir çevre " +"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon genişliği " +"üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir çevre " +"segmentine bağlamaya çalışıyor. infill_anchor_max'tan daha kısa böyle bir " +"çevre segmenti bulunamazsa, dolgu hattı yalnızca bir taraftaki bir çevre " "segmentine bağlanır ve alınan çevre segmentinin uzunluğu bu parametreyle " "sınırlıdır, ancak çapa_uzunluk_max'tan uzun olamaz.\n" -"Tek bir dolgu hattına bağlı sabitleme çevrelerini devre dışı bırakmak için " -"bu parametreyi sıfıra ayarlayın." +"Tek bir dolgu hattına bağlı sabitleme çevrelerini devre dışı bırakmak için bu " +"parametreyi sıfıra ayarlayın." msgid "0 (no open anchors)" msgstr "0 (açık bağlantı yok)" @@ -10624,23 +10740,22 @@ msgid "" "Connect an infill line to an internal perimeter with a short segment of an " "additional perimeter. If expressed as percentage (example: 15%) it is " "calculated over infill extrusion width. Orca Slicer tries to connect two " -"close infill lines to a short perimeter segment. If no such perimeter " -"segment shorter than this parameter is found, the infill line is connected " -"to a perimeter segment at just one side and the length of the perimeter " -"segment taken is limited to infill_anchor, but no longer than this " -"parameter. \n" +"close infill lines to a short perimeter segment. If no such perimeter segment " +"shorter than this parameter is found, the infill line is connected to a " +"perimeter segment at just one side and the length of the perimeter segment " +"taken is limited to infill_anchor, but no longer than this parameter. \n" "If set to 0, the old algorithm for infill connection will be used, it should " "create the same result as with 1000 & 0." msgstr "" "Bir dolgu hattını, ek bir çevrenin kısa bir bölümü ile bir iç çevreye " -"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon " -"genişliği üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir " -"çevre segmentine bağlamaya çalışıyor. Bu parametreden daha kısa bir çevre " -"segmenti bulunamazsa, dolgu hattı sadece bir kenardaki bir çevre segmentine " -"bağlanır ve alınan çevre segmentinin uzunluğu infill_anchor ile sınırlıdır " -"ancak bu parametreden daha uzun olamaz.\n" -"0'a ayarlanırsa dolgu bağlantısı için eski algoritma kullanılacaktır; 1000 " -"ve 0 ile aynı sonucu oluşturmalıdır." +"bağlayın. Yüzde olarak ifade edilirse (örnek: %15) dolgu ekstrüzyon genişliği " +"üzerinden hesaplanır. Orca Slicer iki yakın dolgu hattını kısa bir çevre " +"segmentine bağlamaya çalışıyor. Bu parametreden daha kısa bir çevre segmenti " +"bulunamazsa, dolgu hattı sadece bir kenardaki bir çevre segmentine bağlanır " +"ve alınan çevre segmentinin uzunluğu infill_anchor ile sınırlıdır ancak bu " +"parametreden daha uzun olamaz.\n" +"0'a ayarlanırsa dolgu bağlantısı için eski algoritma kullanılacaktır; 1000 ve " +"0 ile aynı sonucu oluşturmalıdır." msgid "0 (Simple connect)" msgstr "0 (Basit bağlantı)" @@ -10658,8 +10773,8 @@ msgid "" "Acceleration of top surface infill. Using a lower value may improve top " "surface quality" msgstr "" -"Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması " -"üst yüzey kalitesini iyileştirebilir" +"Üst yüzey dolgusunun hızlandırılması. Daha düşük bir değerin kullanılması üst " +"yüzey kalitesini iyileştirebilir" msgid "Acceleration of outer wall. Using a lower value can improve quality" msgstr "" @@ -10669,8 +10784,8 @@ msgid "" "Acceleration of bridges. If the value is expressed as a percentage (e.g. " "50%), it will be calculated based on the outer wall acceleration." msgstr "" -"Köprülerin hızlandırılması. Değer yüzde olarak ifade edilirse (örn. %50), " -"dış duvar ivmesine göre hesaplanacaktır." +"Köprülerin hızlandırılması. Değer yüzde olarak ifade edilirse (örn. %50), dış " +"duvar ivmesine göre hesaplanacaktır." msgid "mm/s² or %" msgstr "mm/s² veya %" @@ -10707,8 +10822,7 @@ msgid "accel_to_decel" msgstr "Accel_to_decel" #, c-format, boost-format -msgid "" -"Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" +msgid "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration" msgstr "" "Klipper'ın max_accel_to_decel değeri ivmenin bu %%'sine göre ayarlanacak" @@ -10741,8 +10855,8 @@ msgid "Initial layer height" msgstr "Başlangıç katman yüksekliği" msgid "" -"Height of initial layer. Making initial layer height to be thick slightly " -"can improve build plate adhension" +"Height of initial layer. Making initial layer height to be thick slightly can " +"improve build plate adhension" msgstr "" "İlk katmanın yüksekliği. İlk katman yüksekliğini biraz kalın yapmak, baskı " "plakasının yapışmasını iyileştirebilir" @@ -10790,10 +10904,9 @@ msgid "" msgstr "" "Fan hızı, \"close_fan_the_first_x_layers\" katmanında sıfırdan " "\"ful_fan_speed_layer\" katmanında maksimuma doğrusal olarak artırılacaktır. " -"\"full_fan_speed_layer\", \"close_fan_the_first_x_layers\" değerinden " -"düşükse göz ardı edilecektir; bu durumda fan, " -"\"close_fan_the_first_x_layers\" + 1 katmanında izin verilen maksimum hızda " -"çalışacaktır." +"\"full_fan_speed_layer\", \"close_fan_the_first_x_layers\" değerinden düşükse " +"göz ardı edilecektir; bu durumda fan, \"close_fan_the_first_x_layers\" + 1 " +"katmanında izin verilen maksimum hızda çalışacaktır." msgid "Support interface fan speed" msgstr "Destekler için fan hızı" @@ -10914,8 +11027,8 @@ msgid "" "The metallic material of nozzle. This determines the abrasive resistance of " "nozzle, and what kind of filament can be printed" msgstr "" -"Nozulnin metalik malzemesi. Bu, nozulun aşınma direncini ve ne tür " -"filamentin basılabileceğini belirler" +"Nozulnin metalik malzemesi. Bu, nozulun aşınma direncini ve ne tür filamentin " +"basılabileceğini belirler" msgid "Undefine" msgstr "Tanımsız" @@ -10967,8 +11080,8 @@ msgid "Best auto arranging position in range [0,1] w.r.t. bed shape." msgstr "Yatak şekline göre [0,1] aralığında en iyi otomatik düzenleme konumu." msgid "" -"Enable this option if machine has auxiliary part cooling fan. G-code " -"command: M106 P2 S(0-255)." +"Enable this option if machine has auxiliary part cooling fan. G-code command: " +"M106 P2 S(0-255)." msgstr "" "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin. G-code " "komut: M106 P2 S(0-255)." @@ -11011,8 +11124,8 @@ msgid "" msgstr "" "Soğutma fanını başlatmak için hedef hıza düşmeden önce bu süre boyunca " "maksimum fan hızı komutunu verin.\n" -"Bu, düşük PWM/gücün fanın durma noktasından dönmeye başlaması veya fanın " -"daha hızlı hızlanması için yetersiz olabileceği fanlar için kullanışlıdır.\n" +"Bu, düşük PWM/gücün fanın durma noktasından dönmeye başlaması veya fanın daha " +"hızlı hızlanması için yetersiz olabileceği fanlar için kullanışlıdır.\n" "Devre dışı bırakmak için 0'a ayarlayın." msgid "Time cost" @@ -11066,21 +11179,20 @@ msgstr "Nesneleri etiketle" msgid "" "Enable this to add comments into the G-Code labeling print moves with what " -"object they belong to, which is useful for the Octoprint CancelObject " -"plugin. This settings is NOT compatible with Single Extruder Multi Material " -"setup and Wipe into Object / Wipe into Infill." +"object they belong to, which is useful for the Octoprint CancelObject plugin. " +"This settings is NOT compatible with Single Extruder Multi Material setup and " +"Wipe into Object / Wipe into Infill." msgstr "" "G-Code etiketleme yazdırma hareketlerine ait oldukları nesneyle ilgili " "yorumlar eklemek için bunu etkinleştirin; bu, Octoprint CancelObject " -"eklentisi için kullanışlıdır. Bu ayarlar Tek Ekstruder Çoklu Malzeme " -"kurulumu ve Nesneye Temizleme / Dolguya Temizleme ile uyumlu DEĞİLDİR." +"eklentisi için kullanışlıdır. Bu ayarlar Tek Ekstruder Çoklu Malzeme kurulumu " +"ve Nesneye Temizleme / Dolguya Temizleme ile uyumlu DEĞİLDİR." msgid "Exclude objects" msgstr "Nesneleri hariç tut" msgid "Enable this option to add EXCLUDE OBJECT command in g-code" -msgstr "" -"G koduna EXCLUDE OBJECT komutunu eklemek için bu seçeneği etkinleştirin" +msgstr "G koduna EXCLUDE OBJECT komutunu eklemek için bu seçeneği etkinleştirin" msgid "Verbose G-code" msgstr "Ayrıntılı G kodu" @@ -11119,8 +11231,8 @@ msgid "Infill/Wall overlap" msgstr "Dolgu/Duvar örtüşmesi" msgid "" -"Infill area is enlarged slightly to overlap with wall for better bonding. " -"The percentage value is relative to line width of sparse infill" +"Infill area is enlarged slightly to overlap with wall for better bonding. The " +"percentage value is relative to line width of sparse infill" msgstr "" "Daha iyi yapışma için dolgu alanı duvarla örtüşecek şekilde hafifçe " "genişletilir. Yüzde değeri seyrek dolgunun çizgi genişliğine göredir" @@ -11133,12 +11245,12 @@ msgstr "Arayüz kabukları" msgid "" "Force the generation of solid shells between adjacent materials/volumes. " -"Useful for multi-extruder prints with translucent materials or manual " -"soluble support material" +"Useful for multi-extruder prints with translucent materials or manual soluble " +"support material" msgstr "" "Bitişik malzemeler/hacimler arasında katı kabuk oluşumunu zorlayın. Yarı " -"saydam malzemelerle veya elle çözülebilen destek malzemesiyle çoklu " -"ekstruder baskıları için kullanışlıdır" +"saydam malzemelerle veya elle çözülebilen destek malzemesiyle çoklu ekstruder " +"baskıları için kullanışlıdır" msgid "Maximum width of a segmented region" msgstr "Bölümlere ayrılmış bir bölgenin maksimum genişliği" @@ -11153,8 +11265,8 @@ msgstr "Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği" msgid "Interlocking depth of a segmented region. Zero disables this feature." msgstr "" -"Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği. 0 bu " -"özelliği devre dışı bırakır." +"Bölümlere ayrılmış bir bölgenin birbirine kenetlenen derinliği. 0 bu özelliği " +"devre dışı bırakır." msgid "Ironing Type" msgstr "Ütüleme tipi" @@ -11245,8 +11357,8 @@ msgstr "" "G kodu tadı Klipper olarak ayarlandığında bu seçenek göz ardı edilecektir." msgid "" -"This G-code will be used as a code for the pause print. User can insert " -"pause G-code in gcode viewer" +"This G-code will be used as a code for the pause print. User can insert pause " +"G-code in gcode viewer" msgstr "" "Bu G kodu duraklatma yazdırması için bir kod olarak kullanılacaktır. " "Kullanıcı gcode görüntüleyiciye duraklatma G kodunu ekleyebilir" @@ -11377,8 +11489,8 @@ msgid "Maximum acceleration for travel (M204 T), it only applies to Marlin 2" msgstr "Seyahat için maksimum ivme (M204 T), yalnızca Marlin 2 için geçerlidir" msgid "" -"Part cooling fan speed may be increased when auto cooling is enabled. This " -"is the maximum speed limitation of part cooling fan" +"Part cooling fan speed may be increased when auto cooling is enabled. This is " +"the maximum speed limitation of part cooling fan" msgstr "" "Otomatik soğutma etkinleştirildiğinde parça soğutma fanı hızı artırılabilir. " "Bu, parça soğutma fanının maksimum hız sınırlamasıdır" @@ -11398,8 +11510,8 @@ msgid "Extrusion rate smoothing" msgstr "Ekstrüzyon hızını yumuşatma" msgid "" -"This parameter smooths out sudden extrusion rate changes that happen when " -"the printer transitions from printing a high flow (high speed/larger width) " +"This parameter smooths out sudden extrusion rate changes that happen when the " +"printer transitions from printing a high flow (high speed/larger width) " "extrusion to a lower flow (lower speed/smaller width) extrusion and vice " "versa.\n" "\n" @@ -11410,12 +11522,11 @@ msgid "" "A value of 0 disables the feature. \n" "\n" "For a high speed, high flow direct drive printer (like the Bambu lab or " -"Voron) this value is usually not needed. However it can provide some " -"marginal benefit in certain cases where feature speeds vary greatly. For " -"example, when there are aggressive slowdowns due to overhangs. In these " -"cases a high value of around 300-350mm3/s2 is recommended as this allows for " -"just enough smoothing to assist pressure advance achieve a smoother flow " -"transition.\n" +"Voron) this value is usually not needed. However it can provide some marginal " +"benefit in certain cases where feature speeds vary greatly. For example, when " +"there are aggressive slowdowns due to overhangs. In these cases a high value " +"of around 300-350mm3/s2 is recommended as this allows for just enough " +"smoothing to assist pressure advance achieve a smoother flow transition.\n" "\n" "For slower printers without pressure advance, the value should be set much " "lower. A value of 10-15mm3/s2 is a good starting point for direct drive " @@ -11437,13 +11548,13 @@ msgstr "" "\n" "0 değeri özelliği devre dışı bırakır. \n" "\n" -"Yüksek hızlı, yüksek akışlı doğrudan tahrikli bir yazıcı için (Bambu lab " -"veya Voron gibi) bu değer genellikle gerekli değildir. Ancak özellik " -"hızlarının büyük ölçüde değiştiği bazı durumlarda marjinal bir fayda " -"sağlayabilir. Örneğin, çıkıntılar nedeniyle agresif yavaşlamalar olduğunda. " -"Bu durumlarda 300-350mm3/s2 civarında yüksek bir değer önerilir çünkü bu, " -"basınç ilerlemesinin daha yumuşak bir akış geçişi elde etmesine yardımcı " -"olmak için yeterli yumuşatmaya izin verir.\n" +"Yüksek hızlı, yüksek akışlı doğrudan tahrikli bir yazıcı için (Bambu lab veya " +"Voron gibi) bu değer genellikle gerekli değildir. Ancak özellik hızlarının " +"büyük ölçüde değiştiği bazı durumlarda marjinal bir fayda sağlayabilir. " +"Örneğin, çıkıntılar nedeniyle agresif yavaşlamalar olduğunda. Bu durumlarda " +"300-350mm3/s2 civarında yüksek bir değer önerilir çünkü bu, basınç " +"ilerlemesinin daha yumuşak bir akış geçişi elde etmesine yardımcı olmak için " +"yeterli yumuşatmaya izin verir.\n" "\n" "Basınç avansı olmayan daha yavaş yazıcılar için değer çok daha düşük " "ayarlanmalıdır. Doğrudan tahrikli ekstruderler için 10-15mm3/s2 ve Bowden " @@ -11495,7 +11606,7 @@ msgstr "" "etkinleştirin. G-code komut: M106 P2 S(0-255)" msgid "Min" -msgstr "Min" +msgstr "Minimum" msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " @@ -11540,8 +11651,8 @@ msgid "" "Orca Slicer can upload G-code files to a printer host. This field must " "contain the kind of the host." msgstr "" -"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. " -"Bu alan ana bilgisayarın türünü içermelidir." +"Orca Slicer, G kodu dosyalarını bir yazıcı ana bilgisayarına yükleyebilir. Bu " +"alan ana bilgisayarın türünü içermelidir." msgid "Nozzle volume" msgstr "Nozul hacmi" @@ -11582,8 +11693,8 @@ msgid "" "Distance of the extruder tip from the position where the filament is parked " "when unloaded. This should match the value in printer firmware." msgstr "" -"Ekstruder ucunun, boşaltıldığında filamentin park edildiği konumdan " -"uzaklığı. Bu ayar yazıcı ürün yazılımındaki değerle eşleşmelidir." +"Ekstruder ucunun, boşaltıldığında filamentin park edildiği konumdan uzaklığı. " +"Bu ayar yazıcı ürün yazılımındaki değerle eşleşmelidir." msgid "Extra loading distance" msgstr "Ekstra yükleme mesafesi" @@ -11610,8 +11721,8 @@ msgstr "Dolguda geri çekmeyi azalt" msgid "" "Don't retract when the travel is in infill area absolutely. That means the " -"oozing can't been seen. This can reduce times of retraction for complex " -"model and save printing time, but make slicing and G-code generating slower" +"oozing can't been seen. This can reduce times of retraction for complex model " +"and save printing time, but make slicing and G-code generating slower" msgstr "" "Hareket kesinlikle dolgu alanına girdiğinde geri çekilmeyin. Bu, sızıntının " "görülemeyeceği anlamına gelir. Bu, karmaşık model için geri çekme sürelerini " @@ -11648,11 +11759,11 @@ msgid "Make overhangs printable - Hole area" msgstr "Yazdırılabilir çıkıntı delik alanı oluşturun" msgid "" -"Maximum area of a hole in the base of the model before it's filled by " -"conical material.A value of 0 will fill all the holes in the model base." +"Maximum area of a hole in the base of the model before it's filled by conical " +"material.A value of 0 will fill all the holes in the model base." msgstr "" -"Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce " -"maksimum alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." +"Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce maksimum " +"alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." msgid "mm²" msgstr "mm²" @@ -11662,11 +11773,11 @@ msgstr "Çıkıntılı duvarı algıla" #, c-format, boost-format msgid "" -"Detect the overhang percentage relative to line width and use different " -"speed to print. For 100%% overhang, bridge speed is used." +"Detect the overhang percentage relative to line width and use different speed " +"to print. For 100%% overhang, bridge speed is used." msgstr "" -"Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için " -"farklı hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." +"Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için farklı " +"hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " @@ -11688,8 +11799,8 @@ msgid "" "This setting adds an extra wall to every other layer. This way the infill " "gets wedged vertically between the walls, resulting in stronger prints. \n" "\n" -"When this option is enabled, the ensure vertical shell thickness option " -"needs to be disabled. \n" +"When this option is enabled, the ensure vertical shell thickness option needs " +"to be disabled. \n" "\n" "Using lightning infill together with this option is not recommended as there " "is limited infill to anchor the extra perimeters to." @@ -11710,11 +11821,10 @@ msgid "" "argument, and they can access the Orca Slicer config settings by reading " "environment variables." msgstr "" -"Çıktı G-kodunu özel komut dosyaları aracılığıyla işlemek istiyorsanız, " -"mutlak yollarını burada listeleyin. Birden fazla betiği noktalı virgülle " -"ayırın. Betiklere ilk argüman olarak G-code dosyasının mutlak yolu aktarılır " -"ve ortam değişkenlerini okuyarak Orca Slicer yapılandırma ayarlarına " -"erişebilirler." +"Çıktı G-kodunu özel komut dosyaları aracılığıyla işlemek istiyorsanız, mutlak " +"yollarını burada listeleyin. Birden fazla betiği noktalı virgülle ayırın. " +"Betiklere ilk argüman olarak G-code dosyasının mutlak yolu aktarılır ve ortam " +"değişkenlerini okuyarak Orca Slicer yapılandırma ayarlarına erişebilirler." msgid "Printer notes" msgstr "Yazıcı notları" @@ -11726,8 +11836,7 @@ msgid "Raft contact Z distance" msgstr "Raft kontak Z mesafesi" msgid "Z gap between object and raft. Ignored for soluble interface" -msgstr "" -"Nesne ve raft arasındaki Z boşluğu. Çözünür arayüz için göz ardı edildi" +msgstr "Nesne ve raft arasındaki Z boşluğu. Çözünür arayüz için göz ardı edildi" msgid "Raft expansion" msgstr "Raft genişletme" @@ -11756,8 +11865,8 @@ msgid "" "Object will be raised by this number of support layers. Use this function to " "avoid wrapping when print ABS" msgstr "" -"Nesne bu sayıdaki destek katmanı tarafından yükseltilecektir. ABS " -"yazdırırken sarmayı önlemek için bu işlevi kullanın" +"Nesne bu sayıdaki destek katmanı tarafından yükseltilecektir. ABS yazdırırken " +"sarmayı önlemek için bu işlevi kullanın" msgid "" "G-code path is genereated after simplifing the contour of model to avoid too " @@ -11772,8 +11881,7 @@ msgid "Travel distance threshold" msgstr "Seyahat mesafesi" msgid "" -"Only trigger retraction when the travel distance is longer than this " -"threshold" +"Only trigger retraction when the travel distance is longer than this threshold" msgstr "" "Geri çekmeyi yalnızca hareket mesafesi bu eşikten daha uzun olduğunda " "tetikleyin" @@ -11781,8 +11889,7 @@ msgstr "" msgid "Retract amount before wipe" msgstr "Temizleme işlemi öncesi geri çekme miktarı" -msgid "" -"The length of fast retraction before wipe, relative to retraction length" +msgid "The length of fast retraction before wipe, relative to retraction length" msgstr "" "Geri çekme uzunluğuna göre, temizlemeden önce hızlı geri çekilmenin uzunluğu" @@ -11803,7 +11910,7 @@ msgstr "" "kısmı geri çekilir. Geri çekmeyi devre dışı bırakmak için sıfır ayarlayın" msgid "Long retraction when cut(experimental)" -msgstr "" +msgstr "Kesildiğinde uzun geri çekilme (deneysel)" msgid "" "Experimental feature.Retracting and cutting off the filament at a longer " @@ -11811,14 +11918,20 @@ msgid "" "significantly, it may also raise the risk of nozzle clogs or other printing " "problems." msgstr "" +"Deneysel özellik. Tasfiyeyi en aza indirmek için değişiklikler sırasında " +"filamentin daha uzun bir mesafeden geri çekilmesi ve kesilmesi. Bu, yıkamayı " +"önemli ölçüde azaltırken, aynı zamanda nozul tıkanması veya diğer yazdırma " +"sorunları riskini de artırabilir." msgid "Retraction distance when cut" -msgstr "" +msgstr "Kesildiğinde geri çekilme mesafesi" msgid "" "Experimental feature.Retraction length before cutting off during filament " "change" msgstr "" +"Deneysel özellik.Filament değişimi sırasında kesilmeden önce geri çekilme " +"uzunluğu" msgid "Z hop when retract" msgstr "Geri çekme esnasında Z sıçraması" @@ -11993,13 +12106,13 @@ msgid "Seam gap" msgstr "Dikiş boşluğu" msgid "" -"In order to reduce the visibility of the seam in a closed loop extrusion, " -"the loop is interrupted and shortened by a specified amount.\n" -"This amount can be specified in millimeters or as a percentage of the " -"current extruder diameter. The default value for this parameter is 10%." +"In order to reduce the visibility of the seam in a closed loop extrusion, the " +"loop is interrupted and shortened by a specified amount.\n" +"This amount can be specified in millimeters or as a percentage of the current " +"extruder diameter. The default value for this parameter is 10%." msgstr "" -"Kapalı döngü ekstrüzyonda dikişin görünürlüğünü azaltmak için döngü " -"kesintiye uğrar ve belirli bir miktarda kısaltılır.\n" +"Kapalı döngü ekstrüzyonda dikişin görünürlüğünü azaltmak için döngü kesintiye " +"uğrar ve belirli bir miktarda kısaltılır.\n" "Bu miktar milimetre cinsinden veya mevcut ekstruder çapının yüzdesi olarak " "belirtilebilir. Bu parametrenin varsayılan değeri %10'dur." @@ -12008,8 +12121,8 @@ msgstr "Atkı birleşim dikişi (beta)" msgid "Use scarf joint to minimize seam visibility and increase seam strength." msgstr "" -"Dikiş görünürlüğünü en aza indirmek ve dikiş mukavemetini arttırmak için " -"atkı birleşimini kullanın." +"Dikiş görünürlüğünü en aza indirmek ve dikiş mukavemetini arttırmak için atkı " +"birleşimini kullanın." msgid "Conditional scarf joint" msgstr "Koşullu atkı birleşimi" @@ -12027,9 +12140,9 @@ msgstr "Koşullu açı eşiği" msgid "" "This option sets the threshold angle for applying a conditional scarf joint " "seam.\n" -"If the maximum angle within the perimeter loop exceeds this value " -"(indicating the absence of sharp corners), a scarf joint seam will be used. " -"The default value is 155°." +"If the maximum angle within the perimeter loop exceeds this value (indicating " +"the absence of sharp corners), a scarf joint seam will be used. The default " +"value is 155°." msgstr "" "Bu seçenek, koşullu bir atkı eklem dikişi uygulamak için eşik açısını " "ayarlar.\n" @@ -12044,8 +12157,8 @@ msgstr "Koşullu çıkıntı eşiği" msgid "" "This option determines the overhang threshold for the application of scarf " "joint seams. If the unsupported portion of the perimeter is less than this " -"threshold, scarf joint seams will be applied. The default threshold is set " -"at 40% of the external wall's width. Due to performance considerations, the " +"threshold, scarf joint seams will be applied. The default threshold is set at " +"40% of the external wall's width. Due to performance considerations, the " "degree of overhang is estimated." msgstr "" "Bu seçenek, atkı bağlantı dikişlerinin uygulanması için sarkma eşiğini " @@ -12059,22 +12172,22 @@ msgstr "Atkı birleşim hızı" msgid "" "This option sets the printing speed for scarf joints. It is recommended to " -"print scarf joints at a slow speed (less than 100 mm/s). It's also " -"advisable to enable 'Extrusion rate smoothing' if the set speed varies " -"significantly from the speed of the outer or inner walls. If the speed " -"specified here is higher than the speed of the outer or inner walls, the " -"printer will default to the slower of the two speeds. When specified as a " -"percentage (e.g., 80%), the speed is calculated based on the respective " -"outer or inner wall speed. The default value is set to 100%." +"print scarf joints at a slow speed (less than 100 mm/s). It's also advisable " +"to enable 'Extrusion rate smoothing' if the set speed varies significantly " +"from the speed of the outer or inner walls. If the speed specified here is " +"higher than the speed of the outer or inner walls, the printer will default " +"to the slower of the two speeds. When specified as a percentage (e.g., 80%), " +"the speed is calculated based on the respective outer or inner wall speed. " +"The default value is set to 100%." msgstr "" "Bu seçenek, atkı bağlantılarının yazdırma hızını ayarlar. Atkı " "bağlantılarının yavaş bir hızda (100 mm/s'den az) yazdırılması tavsiye " "edilir. Ayarlanan hızın dış veya iç duvarların hızından önemli ölçüde farklı " -"olması durumunda 'Ekstrüzyon hızı yumuşatma' seçeneğinin etkinleştirilmesi " -"de tavsiye edilir. Burada belirtilen hız, dış veya iç duvarların hızından " -"daha yüksekse, yazıcı varsayılan olarak iki hızdan daha yavaş olanı " -"seçecektir. Yüzde olarak belirtildiğinde (örn. %80), hız, ilgili dış veya iç " -"duvar hızına göre hesaplanır. Varsayılan değer %100 olarak ayarlanmıştır." +"olması durumunda 'Ekstrüzyon hızı yumuşatma' seçeneğinin etkinleştirilmesi de " +"tavsiye edilir. Burada belirtilen hız, dış veya iç duvarların hızından daha " +"yüksekse, yazıcı varsayılan olarak iki hızdan daha yavaş olanı seçecektir. " +"Yüzde olarak belirtildiğinde (örn. %80), hız, ilgili dış veya iç duvar hızına " +"göre hesaplanır. Varsayılan değer %100 olarak ayarlanmıştır." msgid "Scarf joint flow ratio" msgstr "Atkı birleşimi akış oranı" @@ -12088,8 +12201,8 @@ msgstr "Atkı başlangıç ​​yüksekliği" msgid "" "Start height of the scarf.\n" -"This amount can be specified in millimeters or as a percentage of the " -"current layer height. The default value for this parameter is 0." +"This amount can be specified in millimeters or as a percentage of the current " +"layer height. The default value for this parameter is 0." msgstr "" "Atkı başlangıç yüksekliği.\n" "Bu miktar milimetre cinsinden veya geçerli katman yüksekliğinin yüzdesi " @@ -12108,8 +12221,8 @@ msgid "" "Length of the scarf. Setting this parameter to zero effectively disables the " "scarf." msgstr "" -"Atkının uzunluğu. Bu parametrenin 0 a ayarlanması atkıyı dolaylı yoldan " -"devre dışı bırakır." +"Atkının uzunluğu. Bu parametrenin 0 a ayarlanması atkıyı dolaylı yoldan devre " +"dışı bırakır." msgid "Scarf steps" msgstr "Atkı kademesi" @@ -12150,15 +12263,15 @@ msgid "Wipe before external loop" msgstr "Harici döngüden önce silin" msgid "" -"To minimise visibility of potential overextrusion at the start of an " -"external perimeter when printing with Outer/Inner or Inner/Outer/Inner wall " -"print order, the deretraction is performed slightly on the inside from the " -"start of the external perimeter. That way any potential over extrusion is " -"hidden from the outside surface. \n" +"To minimise visibility of potential overextrusion at the start of an external " +"perimeter when printing with Outer/Inner or Inner/Outer/Inner wall print " +"order, the deretraction is performed slightly on the inside from the start of " +"the external perimeter. That way any potential over extrusion is hidden from " +"the outside surface. \n" "\n" -"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall " -"print order as in these modes it is more likely an external perimeter is " -"printed immediately after a deretraction move." +"This is useful when printing with Outer/Inner or Inner/Outer/Inner wall print " +"order as in these modes it is more likely an external perimeter is printed " +"immediately after a deretraction move." msgstr "" "Dış/İç veya İç/Dış/İç duvar baskı sırası ile yazdırırken, dış çevrenin " "başlangıcında olası aşırı çıkıntının görünürlüğünü en aza indirmek için, " @@ -12167,8 +12280,8 @@ msgstr "" "yüzeyden gizlenir. \n" "\n" "Bu, Dış/İç veya İç/Dış/İç duvar yazdırma sırası ile yazdırırken " -"kullanışlıdır, çünkü bu modlarda, bir geri çekilme hareketinin hemen " -"ardından bir dış çevrenin yazdırılması daha olasıdır." +"kullanışlıdır, çünkü bu modlarda, bir geri çekilme hareketinin hemen ardından " +"bir dış çevrenin yazdırılması daha olasıdır." msgid "Wipe speed" msgstr "Temizleme hızı" @@ -12199,8 +12312,7 @@ msgid "Skirt loops" msgstr "Etek sayısı" msgid "Number of loops for the skirt. Zero means disabling skirt" -msgstr "" -"Etek için ilmek sayısı. Sıfır, eteği devre dışı bırakmak anlamına gelir" +msgstr "Etek için ilmek sayısı. Sıfır, eteği devre dışı bırakmak anlamına gelir" msgid "Skirt speed" msgstr "Etek hızı" @@ -12229,8 +12341,8 @@ msgstr "" "bırakmıştır" msgid "" -"Line width of internal solid infill. If expressed as a %, it will be " -"computed over the nozzle diameter." +"Line width of internal solid infill. If expressed as a %, it will be computed " +"over the nozzle diameter." msgstr "" "İç katı dolgunun çizgi genişliği. % olarak ifade edilirse Nozul çapı " "üzerinden hesaplanacaktır." @@ -12244,8 +12356,8 @@ msgid "" "generated model has no seam" msgstr "" "Spiralleştirme, dış konturun z hareketlerini yumuşatır. Ve katı bir modeli, " -"katı alt katmanlara sahip tek duvarlı bir baskıya dönüştürür. Oluşturulan " -"son modelde dikiş yok." +"katı alt katmanlara sahip tek duvarlı bir baskıya dönüştürür. Oluşturulan son " +"modelde dikiş yok." msgid "Smooth Spiral" msgstr "Pürüzsüz spiral" @@ -12270,12 +12382,11 @@ msgstr "" msgid "" "If smooth or traditional mode is selected, a timelapse video will be " "generated for each print. After each layer is printed, a snapshot is taken " -"with the chamber camera. All of these snapshots are composed into a " -"timelapse video when printing completes. If smooth mode is selected, the " -"toolhead will move to the excess chute after each layer is printed and then " -"take a snapshot. Since the melt filament may leak from the nozzle during the " -"process of taking a snapshot, prime tower is required for smooth mode to " -"wipe nozzle." +"with the chamber camera. All of these snapshots are composed into a timelapse " +"video when printing completes. If smooth mode is selected, the toolhead will " +"move to the excess chute after each layer is printed and then take a " +"snapshot. Since the melt filament may leak from the nozzle during the process " +"of taking a snapshot, prime tower is required for smooth mode to wipe nozzle." msgstr "" "Düzgün veya geleneksel mod seçilirse her baskı için bir hızlandırılmış video " "oluşturulacaktır. Her katman basıldıktan sonra oda kamerasıyla anlık görüntü " @@ -12336,10 +12447,9 @@ msgid "No sparse layers (beta)" msgstr "Seyrek katman yok (beta)" msgid "" -"If enabled, the wipe tower will not be printed on layers with no " -"toolchanges. On layers with a toolchange, extruder will travel downward to " -"print the wipe tower. User is responsible for ensuring there is no collision " -"with the print." +"If enabled, the wipe tower will not be printed on layers with no toolchanges. " +"On layers with a toolchange, extruder will travel downward to print the wipe " +"tower. User is responsible for ensuring there is no collision with the print." msgstr "" "Etkinleştirilirse, silme kulesi araç değişimi olmayan katmanlarda " "yazdırılmayacaktır. Araç değişimi olan katmanlarda, ekstruder silme kulesini " @@ -12364,16 +12474,16 @@ msgid "" "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." msgstr "" -"Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından küçük " -"çatlaklar doldurulmaktadır. Boşluk kapatma işlemi son yazdırma çözünürlüğünü " +"Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından küçük çatlaklar " +"doldurulmaktadır. Boşluk kapatma işlemi son yazdırma çözünürlüğünü " "düşürebilir, bu nedenle değerin oldukça düşük tutulması tavsiye edilir." msgid "Slicing Mode" msgstr "Dilimleme modu" msgid "" -"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " -"close all holes in the model." +"Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close " +"all holes in the model." msgstr "" "3DLabPrint uçak modelleri için \"Çift-tek\" seçeneğini kullanın. Modeldeki " "tüm delikleri kapatmak için \"Delikleri kapat\"ı kullanın." @@ -12397,10 +12507,9 @@ msgid "" "print bed, set this to -0.3 (or fix your endstop)." msgstr "" "Bu değer, çıkış G-kodu içindeki tüm Z koordinatlarına eklenir (veya " -"çıkarılır).Bu, kötü Z endstop konumunu telafi etmek için kullanılır: " -"örneğin, endstop sıfır noktanız aslında nozulu baskı tablasından 0.3mm " -"uzakta bırakıyorsa, bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu " -"düzeltin)." +"çıkarılır).Bu, kötü Z endstop konumunu telafi etmek için kullanılır: örneğin, " +"endstop sıfır noktanız aslında nozulu baskı tablasından 0.3mm uzakta " +"bırakıyorsa, bu değeri -0.3 olarak ayarlayın (veya endstop'unuzu düzeltin)." msgid "Enable support" msgstr "Desteği etkinleştir" @@ -12454,8 +12563,7 @@ msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Yalnızca keskin kuyruk, konsol vb. gibi kritik bölgeler için destek " -"oluşturun." +"Yalnızca keskin kuyruk, konsol vb. gibi kritik bölgeler için destek oluşturun." msgid "Remove small overhangs" msgstr "Küçük çıkıntıları kaldır" @@ -12492,8 +12600,7 @@ msgstr "Taban için arayüz filamentini azaltın" msgid "" "Avoid using support interface filament to print support base if possible." msgstr "" -"Destek tabanını yazdırmak için destek arayüzü filamentini kullanmaktan " -"kaçının" +"Destek tabanını yazdırmak için destek arayüzü filamentini kullanmaktan kaçının" msgid "" "Line width of support. If expressed as a %, it will be computed over the " @@ -12568,8 +12675,8 @@ msgstr "Arayüz deseni" msgid "" "Line pattern of support interface. Default pattern for non-soluble support " -"interface is Rectilinear, while default pattern for soluble support " -"interface is Concentric" +"interface is Rectilinear, while default pattern for soluble support interface " +"is Concentric" msgstr "" "Destek arayüzünün çizgi deseni. Çözünmeyen destek arayüzü için varsayılan " "model Doğrusaldır, çözünebilir destek arayüzü için varsayılan model ise " @@ -12598,12 +12705,11 @@ msgid "" "into a regular grid will create more stable supports (default), while snug " "support towers will save material and reduce object scarring.\n" "For tree support, slim and organic style will merge branches more " -"aggressively and save a lot of material (default organic), while hybrid " -"style will create similar structure to normal support under large flat " -"overhangs." +"aggressively and save a lot of material (default organic), while hybrid style " +"will create similar structure to normal support under large flat overhangs." msgstr "" -"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara " -"içine projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı " +"Destek stil ve şekli. Normal destek için, destekleri düzenli bir ızgara içine " +"projelendirmek daha stabil destekler oluşturacaktır (varsayılan), aynı " "zamanda sıkı destek kuleleri malzeme tasarrufu sağlar ve nesne üzerindeki " "izleri azaltır.\n" "Ağaç destek için, ince ve organik tarz, dalları daha etkili bir şekilde " @@ -12652,8 +12758,8 @@ msgid "Tree support branch angle" msgstr "Ağaç desteği dal açısı" msgid "" -"This setting determines the maximum overhang angle that t he branches of " -"tree support allowed to make.If the angle is increased, the branches can be " +"This setting determines the maximum overhang angle that t he branches of tree " +"support allowed to make.If the angle is increased, the branches can be " "printed more horizontally, allowing them to reach farther." msgstr "" "Bu ayar, ağaç desteğinin dallarının oluşmasına izin verilen maksimum çıkıntı " @@ -12685,11 +12791,10 @@ msgstr "Dal Yoğunluğu" #. TRN PrintSettings: "Organic supports" > "Branch Density" msgid "" -"Adjusts the density of the support structure used to generate the tips of " -"the branches. A higher value results in better overhangs but the supports " -"are harder to remove, thus it is recommended to enable top support " -"interfaces instead of a high branch density value if dense interfaces are " -"needed." +"Adjusts the density of the support structure used to generate the tips of the " +"branches. A higher value results in better overhangs but the supports are " +"harder to remove, thus it is recommended to enable top support interfaces " +"instead of a high branch density value if dense interfaces are needed." msgstr "" "Dalların uçlarını oluşturmak için kullanılan destek yapısının yoğunluğunu " "ayarlar. Daha yüksek bir değer daha iyi çıkıntılarla sonuçlanır, ancak " @@ -12701,8 +12806,8 @@ msgid "Adaptive layer height" msgstr "Uyarlanabilir katman yüksekliği" msgid "" -"Enabling this option means the height of tree support layer except the " -"first will be automatically calculated " +"Enabling this option means the height of tree support layer except the first " +"will be automatically calculated " msgstr "" "Bu seçeneğin etkinleştirilmesi, ilki hariç ağaç destek katmanının " "yüksekliğinin otomatik olarak hesaplanacağı anlamına gelir " @@ -12757,8 +12862,8 @@ msgstr "Çift duvarlı dal çapı" #. TRN PrintSettings: "Organic supports" > "Branch Diameter" msgid "" "Branches with area larger than the area of a circle of this diameter will be " -"printed with double walls for stability. Set this value to zero for no " -"double walls." +"printed with double walls for stability. Set this value to zero for no double " +"walls." msgstr "" "Bu çaptaki bir dairenin alanından daha büyük alana sahip dallar, stabilite " "için çift duvarlı olarak basılacaktır. Çift duvar olmaması için bu değeri " @@ -12788,8 +12893,8 @@ msgid "" "added before \"machine_start_gcode\"\n" "G-code commands: M141/M191 S(0-255)" msgstr "" -"Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 " -"komutu eklenecek \"machine_start_gcode\"\n" +"Hazne sıcaklığı kontrolü için bu seçeneği etkinleştirin. Önce bir M191 komutu " +"eklenecek \"machine_start_gcode\"\n" "G-code komut: M141/M191 S(0-255)" msgid "Chamber temperature" @@ -12867,11 +12972,11 @@ msgid "" "The number of top solid layers is increased when slicing if the thickness " "calculated by top shell layers is thinner than this value. This can avoid " "having too thin shell when layer height is small. 0 means that this setting " -"is disabled and thickness of top shell is absolutely determained by top " -"shell layers" +"is disabled and thickness of top shell is absolutely determained by top shell " +"layers" msgstr "" -"Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince " -"ise dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman " +"Üst kabuk katmanları tarafından hesaplanan kalınlık bu değerden daha ince ise " +"dilimleme sırasında üst katı katmanların sayısı artırılır. Bu, katman " "yüksekliği küçük olduğunda kabuğun çok ince olmasını önleyebilir. 0, bu " "ayarın devre dışı olduğu ve üst kabuğun kalınlığının kesinlikle üst kabuk " "katmanları tarafından belirlendiği anlamına gelir" @@ -12894,12 +12999,11 @@ msgid "Wipe Distance" msgstr "Temizleme mesafesi" msgid "" -"Discribe how long the nozzle will move along the last path when " -"retracting. \n" +"Discribe how long the nozzle will move along the last path when retracting. \n" "\n" "Depending on how long the wipe operation lasts, how fast and long the " -"extruder/filament retraction settings are, a retraction move may be needed " -"to retract the remaining filament. \n" +"extruder/filament retraction settings are, a retraction move may be needed to " +"retract the remaining filament. \n" "\n" "Setting a value in the retract amount before wipe setting below will perform " "any excess retraction before the wipe, else it will be performed after." @@ -12907,9 +13011,9 @@ msgstr "" "Geri çekilirken nozulun son yol boyunca ne kadar süre hareket edeceğini " "açıklayın. \n" "\n" -"Silme işleminin ne kadar sürdüğüne, ekstruder/filament geri çekme " -"ayarlarının ne kadar hızlı ve uzun olduğuna bağlı olarak, kalan filamanı " -"geri çekmek için bir geri çekme hareketine ihtiyaç duyulabilir. \n" +"Silme işleminin ne kadar sürdüğüne, ekstruder/filament geri çekme ayarlarının " +"ne kadar hızlı ve uzun olduğuna bağlı olarak, kalan filamanı geri çekmek için " +"bir geri çekme hareketine ihtiyaç duyulabilir. \n" "\n" "Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, " "silme işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi " @@ -12959,8 +13063,8 @@ msgid "" "Angle at the apex of the cone that is used to stabilize the wipe tower. " "Larger angle means wider base." msgstr "" -"Silme kulesini stabilize etmek için kullanılan koninin tepe noktasındaki " -"açı. Daha büyük açı daha geniş taban anlamına gelir." +"Silme kulesini stabilize etmek için kullanılan koninin tepe noktasındaki açı. " +"Daha büyük açı daha geniş taban anlamına gelir." msgid "Wipe tower purge lines spacing" msgstr "Silme kulesi temizleme hatları aralığı" @@ -12987,8 +13091,8 @@ msgid "" "volumes below." msgstr "" "Bu vektör, silme kulesinde kullanılan her bir araçtan/araca geçiş için " -"gerekli hacimleri kaydeder. Bu değerler, aşağıdaki tam temizleme " -"hacimlerinin oluşturulmasını basitleştirmek için kullanılır." +"gerekli hacimleri kaydeder. Bu değerler, aşağıdaki tam temizleme hacimlerinin " +"oluşturulmasını basitleştirmek için kullanılır." msgid "" "Purging after filament change will be done inside objects' infills. This may " @@ -13012,13 +13116,13 @@ msgstr "" msgid "" "This object will be used to purge the nozzle after a filament change to save " -"filament and decrease the print time. Colours of the objects will be mixed " -"as a result. It will not take effect, unless the prime tower is enabled." +"filament and decrease the print time. Colours of the objects will be mixed as " +"a result. It will not take effect, unless the prime tower is enabled." msgstr "" -"Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için " -"filament değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç " -"olarak nesnelerin renkleri karıştırılacaktır. Prime tower " -"etkinleştirilmediği sürece etkili olmayacaktır." +"Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için filament " +"değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç olarak " +"nesnelerin renkleri karıştırılacaktır. Prime tower etkinleştirilmediği sürece " +"etkili olmayacaktır." msgid "Maximal bridging distance" msgstr "Maksimum köprüleme mesafesi" @@ -13027,8 +13131,8 @@ msgid "Maximal distance between supports on sparse infill sections." msgstr "" "Bu nesne, filamentten tasarruf etmek ve baskı süresini azaltmak için bir " "filament değişiminden sonra nozulu temizlemek için kullanılacaktır. Sonuç " -"olarak nesnelerin renkleri karıştırılacaktır. Prime tower " -"etkinleştirilmediği sürece etkili olmayacaktır." +"olarak nesnelerin renkleri karıştırılacaktır. Prime tower etkinleştirilmediği " +"sürece etkili olmayacaktır." msgid "X-Y hole compensation" msgstr "X-Y delik dengeleme" @@ -13053,8 +13157,8 @@ msgid "" "assembling issue" msgstr "" "Nesnenin konturu XY düzleminde yapılandırılan değer kadar büyütülür veya " -"küçültülür. Pozitif değer konturu büyütür. Negatif değer konturu küçültür. " -"Bu fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " +"küçültülür. Pozitif değer konturu büyütür. Negatif değer konturu küçültür. Bu " +"fonksiyon, nesnenin montaj sorunu olduğunda boyutu hafifçe ayarlamak için " "kullanılır" msgid "Convert holes to polyholes" @@ -13078,14 +13182,14 @@ msgstr "Çokgen delik tespiti marjı" msgid "" "Maximum defection of a point to the estimated radius of the circle.\n" "As cylinders are often exported as triangles of varying size, points may not " -"be on the circle circumference. This setting allows you some leway to " -"broaden the detection.\n" +"be on the circle circumference. This setting allows you some leway to broaden " +"the detection.\n" "In mm or in % of the radius." msgstr "" "Bir noktanın dairenin tahmini yarıçapına göre maksimum sapması.\n" "Silindirler genellikle farklı boyutlarda üçgenler olarak ihraç edildiğinden, " -"noktalar daire çevresinde olmayabilir. Bu ayar, algılamayı genişletmeniz " -"için size biraz alan sağlar.\n" +"noktalar daire çevresinde olmayabilir. Bu ayar, algılamayı genişletmeniz için " +"size biraz alan sağlar.\n" "inc mm cinsinden veya yarıçapın %'si cinsinden." msgid "Polyhole twist" @@ -13108,8 +13212,8 @@ msgid "Format of G-code thumbnails" msgstr "G kodu küçük resimlerinin formatı" msgid "" -"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, " -"QOI for low memory firmware" +"Format of G-code thumbnails: PNG for best quality, JPG for smallest size, QOI " +"for low memory firmware" msgstr "" "G kodu küçük resimlerinin formatı: En iyi kalite için PNG, en küçük boyut " "için JPG, düşük bellekli donanım yazılımı için QOI" @@ -13130,11 +13234,11 @@ msgstr "" msgid "" "Classic wall generator produces walls with constant extrusion width and for " -"very thin areas is used gap-fill. Arachne engine produces walls with " -"variable extrusion width" +"very thin areas is used gap-fill. Arachne engine produces walls with variable " +"extrusion width" msgstr "" -"Klasik duvar oluşturucu sabit ekstrüzyon genişliğine sahip duvarlar üretir " -"ve çok ince alanlar için boşluk doldurma kullanılır. Arachne motoru değişken " +"Klasik duvar oluşturucu sabit ekstrüzyon genişliğine sahip duvarlar üretir ve " +"çok ince alanlar için boşluk doldurma kullanılır. Arachne motoru değişken " "ekstrüzyon genişliğine sahip duvarlar üretir" msgid "Classic" @@ -13161,20 +13265,19 @@ msgstr "Duvar geçiş filtresi oranı" msgid "" "Prevent transitioning back and forth between one extra wall and one less. " "This margin extends the range of extrusion widths which follow to [Minimum " -"wall width - margin, 2 * Minimum wall width + margin]. Increasing this " -"margin reduces the number of transitions, which reduces the number of " -"extrusion starts/stops and travel time. However, large extrusion width " -"variation can lead to under- or overextrusion problems. It's expressed as a " -"percentage over nozzle diameter" +"wall width - margin, 2 * Minimum wall width + margin]. Increasing this margin " +"reduces the number of transitions, which reduces the number of extrusion " +"starts/stops and travel time. However, large extrusion width variation can " +"lead to under- or overextrusion problems. It's expressed as a percentage over " +"nozzle diameter" msgstr "" -"Fazladan bir duvar ile bir eksik arasında ileri geri geçişi önleyin. Bu " -"kenar boşluğu, [Minimum duvar genişliği - kenar boşluğu, 2 * Minimum duvar " +"Fazladan bir duvar ile bir eksik arasında ileri geri geçişi önleyin. Bu kenar " +"boşluğu, [Minimum duvar genişliği - kenar boşluğu, 2 * Minimum duvar " "genişliği + kenar boşluğu] şeklinde takip eden ekstrüzyon genişlikleri " "aralığını genişletir. Bu marjın arttırılması geçiş sayısını azaltır, bu da " "ekstrüzyonun başlama/durma sayısını ve seyahat süresini azaltır. Bununla " -"birlikte, büyük ekstrüzyon genişliği değişimi, yetersiz veya aşırı " -"ekstrüzyon sorunlarına yol açabilir. Nozul çapına göre yüzde olarak ifade " -"edilir" +"birlikte, büyük ekstrüzyon genişliği değişimi, yetersiz veya aşırı ekstrüzyon " +"sorunlarına yol açabilir. Nozul çapına göre yüzde olarak ifade edilir" msgid "Wall transitioning threshold angle" msgstr "Duvar geçiş açısı" @@ -13186,11 +13289,11 @@ msgid "" "this setting reduces the number and length of these center walls, but may " "leave gaps or overextrude" msgstr "" -"Çift ve tek sayıdaki duvarlar arasında geçişler ne zaman oluşturulmalıdır? " -"Bu ayardan daha büyük bir açıya sahip bir kama şeklinin geçişleri olmayacak " -"ve kalan alanı dolduracak şekilde ortada hiçbir duvar basılmayacaktır. Bu " -"ayarın düşürülmesi, bu merkez duvarların sayısını ve uzunluğunu azaltır " -"ancak boşluklara veya aşırı çıkıntıya neden olabilir" +"Çift ve tek sayıdaki duvarlar arasında geçişler ne zaman oluşturulmalıdır? Bu " +"ayardan daha büyük bir açıya sahip bir kama şeklinin geçişleri olmayacak ve " +"kalan alanı dolduracak şekilde ortada hiçbir duvar basılmayacaktır. Bu ayarın " +"düşürülmesi, bu merkez duvarların sayısını ve uzunluğunu azaltır ancak " +"boşluklara veya aşırı çıkıntıya neden olabilir" msgid "Wall distribution count" msgstr "Duvar dağılım sayısı" @@ -13206,9 +13309,9 @@ msgid "Minimum feature size" msgstr "Minimum özellik boyutu" msgid "" -"Minimum thickness of thin features. Model features that are thinner than " -"this value will not be printed, while features thicker than the Minimum " -"feature size will be widened to the Minimum wall width. It's expressed as a " +"Minimum thickness of thin features. Model features that are thinner than this " +"value will not be printed, while features thicker than the Minimum feature " +"size will be widened to the Minimum wall width. It's expressed as a " "percentage over nozzle diameter" msgstr "" "İnce özellikler için minimum kalınlık. Bu değerden daha ince olan model " @@ -13225,28 +13328,27 @@ msgid "" "\n" "NOTE: Bottom and top surfaces will not be affected by this value to prevent " "visual gaps on the ouside of the model. Adjust 'One wall threshold' in the " -"Advanced settings below to adjust the sensitivity of what is considered a " -"top-surface. 'One wall threshold' is only visibile if this setting is set " -"above the default value of 0.5, or if single-wall top surfaces is enabled." +"Advanced settings below to adjust the sensitivity of what is considered a top-" +"surface. 'One wall threshold' is only visibile if this setting is set above " +"the default value of 0.5, or if single-wall top surfaces is enabled." msgstr "" "Yazdırma süresini artırabilecek kısa, kapatılmamış duvarların yazdırılmasını " "önlemek için bu değeri ayarlayın. Daha yüksek değerler daha fazla ve daha " "uzun duvarları kaldırır.\n" "\n" -"NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler " -"bu değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin " -"hassasiyetini ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar " -"eşiği'ni ayarlayın. 'Tek duvar eşiği' yalnızca bu ayar varsayılan değer olan " -"0,5'in üzerine ayarlandığında veya tek duvarlı üst yüzeyler " -"etkinleştirildiğinde görünür." +"NOT: Modelin dış kısmında görsel boşluk kalmaması için alt ve üst yüzeyler bu " +"değerden etkilenmeyecektir. Üst yüzey olarak kabul edilen şeyin hassasiyetini " +"ayarlamak için aşağıdaki Gelişmiş ayarlarda 'Tek duvar eşiği'ni ayarlayın. " +"'Tek duvar eşiği' yalnızca bu ayar varsayılan değer olan 0,5'in üzerine " +"ayarlandığında veya tek duvarlı üst yüzeyler etkinleştirildiğinde görünür." msgid "First layer minimum wall width" msgstr "İlk katman minimum duvar genişliği" msgid "" -"The minimum wall width that should be used for the first layer is " -"recommended to be set to the same size as the nozzle. This adjustment is " -"expected to enhance adhesion." +"The minimum wall width that should be used for the first layer is recommended " +"to be set to the same size as the nozzle. This adjustment is expected to " +"enhance adhesion." msgstr "" "İlk katman için kullanılması gereken minimum duvar genişliğinin nozul ile " "aynı boyuta ayarlanması tavsiye edilir. Bu ayarlamanın yapışmayı artırması " @@ -13271,8 +13373,8 @@ msgstr "Dar iç katı dolguyu tespit et" msgid "" "This option will auto detect narrow internal solid infill area. If enabled, " -"concentric pattern will be used for the area to speed printing up. " -"Otherwise, rectilinear pattern is used defaultly." +"concentric pattern will be used for the area to speed printing up. Otherwise, " +"rectilinear pattern is used defaultly." msgstr "" "Bu seçenek dar dahili katı dolgu alanını otomatik olarak algılayacaktır. " "Etkinleştirilirse, yazdırmayı hızlandırmak amacıyla alanda eşmerkezli desen " @@ -13318,8 +13420,7 @@ msgstr "Yönlendirme Seçenekleri" msgid "Orient options: 0-disable, 1-enable, others-auto" msgstr "" -"Yönlendirme seçenekleri: 0-devre dışı bırak, 1-etkinleştir, diğerleri-" -"otomatik" +"Yönlendirme seçenekleri: 0-devre dışı bırak, 1-etkinleştir, diğerleri-otomatik" msgid "Rotation angle around the Z axis in degrees." msgstr "Z ekseni etrafında derece cinsinden dönüş açısı." @@ -13364,13 +13465,13 @@ msgstr "" "ettiğini bilmesi için bu değişkene yazması gerekir." msgid "" -"Retraction state at the beginning of the custom G-code block. If the custom " -"G-code moves the extruder axis, it should write to this variable so " -"PrusaSlicer deretracts correctly when it gets control back." +"Retraction state at the beginning of the custom G-code block. If the custom G-" +"code moves the extruder axis, it should write to this variable so PrusaSlicer " +"deretracts correctly when it gets control back." msgstr "" "Özel G kodu bloğunun başlangıcındaki geri çekilme durumu. Özel G kodu " -"ekstruder eksenini hareket ettirirse, Slicer'ın kontrolü geri aldığında " -"doğru şekilde geri çekme yapması için bu değişkene yazması gerekir." +"ekstruder eksenini hareket ettirirse, Slicer'ın kontrolü geri aldığında doğru " +"şekilde geri çekme yapması için bu değişkene yazması gerekir." msgid "Extra deretraction" msgstr "Ekstra deretraksiyon" @@ -13395,7 +13496,7 @@ msgstr "" "Sıralı yazdırmaya özel. Şu anda yazdırılan nesnenin sıfır tabanlı dizini." msgid "Has wipe tower" -msgstr "Has wipe tower" +msgstr "Silme kulesi var" msgid "Whether or not wipe tower is being generated in the print." msgstr "Yazdırmada silme kulesinin oluşturulup oluşturulmayacağı." @@ -13440,7 +13541,7 @@ msgid "Total toolchanges" msgstr "Toplam takım değişiklikleri" msgid "Number of toolchanges during the print." -msgstr "Number of toolchanges during the print." +msgstr "Yazdırma sırasındaki takım değişikliği sayısı." msgid "Total volume" msgstr "Toplam hacim" @@ -13455,18 +13556,18 @@ msgid "" "Weight per extruder extruded during the entire print. Calculated from " "filament_density value in Filament Settings." msgstr "" -"Baskının tamamı boyunca ekstrüzyon yapılan ekstruder başına ağırlık. " -"Filament Ayarlarındaki filaman yoğunluğu değerinden hesaplanır." +"Baskının tamamı boyunca ekstrüzyon yapılan ekstruder başına ağırlık. Filament " +"Ayarlarındaki filaman yoğunluğu değerinden hesaplanır." msgid "Total weight" msgstr "Toplam ağırlık" msgid "" -"Total weight of the print. Calculated from filament_density value in " -"Filament Settings." +"Total weight of the print. Calculated from filament_density value in Filament " +"Settings." msgstr "" -"Baskının toplam ağırlığı. Filament Ayarlarındaki filaman yoğunluğu " -"değerinden hesaplanır." +"Baskının toplam ağırlığı. Filament Ayarlarındaki filaman yoğunluğu değerinden " +"hesaplanır." msgid "Total layer count" msgstr "Toplam katman sayısı" @@ -13515,8 +13616,8 @@ msgstr "" "cinsindendir." msgid "" -"The vector has two elements: x and y dimension of the bounding box. Values " -"in mm." +"The vector has two elements: x and y dimension of the bounding box. Values in " +"mm." msgstr "" "Vektörün iki öğesi vardır: sınırlayıcı kutunun x ve y boyutu. Değerler mm " "cinsindendir." @@ -13528,8 +13629,8 @@ msgid "" "Vector of points of the first layer convex hull. Each element has the " "following format:'[x, y]' (x and y are floating-point numbers in mm)." msgstr "" -"Birinci katmanın dışbükey gövdesinin noktalarının vektörü. Her öğe şu " -"formata sahiptir:'[x, y]' (x ve y, mm cinsinden kayan noktalı sayılardır)." +"Birinci katmanın dışbükey gövdesinin noktalarının vektörü. Her öğe şu formata " +"sahiptir:'[x, y]' (x ve y, mm cinsinden kayan noktalı sayılardır)." msgid "Bottom-left corner of first layer bounding box" msgstr "İlk katman sınırlayıcı kutusunun sol alt köşesi" @@ -13725,8 +13826,7 @@ msgstr "Sağlanan dosya boş olduğundan okunamadı" msgid "Unknown file format. Input file must have .3mf or .zip.amf extension." msgstr "" -"Bilinmeyen dosya formatı. Giriş dosyası .3mf veya .zip.amf uzantılı " -"olmalıdır." +"Bilinmeyen dosya formatı. Giriş dosyası .3mf veya .zip.amf uzantılı olmalıdır." msgid "Canceled" msgstr "İptal edildi" @@ -13734,6 +13834,9 @@ msgstr "İptal edildi" msgid "load_obj: failed to parse" msgstr "load_obj: ayrıştırılamadı" +msgid "load mtl in obj: failed to parse" +msgstr "obj’ye mtl yükle: ayrıştırılamadı" + msgid "The file contains polygons with more than 4 vertices." msgstr "Dosya 4'ten fazla köşesi olan çokgenler içeriyor." @@ -13845,8 +13948,7 @@ msgstr "yeni ön ayar oluşturma başarısız oldu." msgid "" "Are you sure to cancel the current calibration and return to the home page?" msgstr "" -"Mevcut kalibrasyonu iptal edip ana sayfaya dönmek istediğinizden emin " -"misiniz?" +"Mevcut kalibrasyonu iptal edip ana sayfaya dönmek istediğinizden emin misiniz?" msgid "No Printer Connected!" msgstr "Yazıcı Bağlı Değil!" @@ -13860,6 +13962,19 @@ msgstr "Lütfen kalibre edilecek filamenti seçin." msgid "The input value size must be 3." msgstr "Giriş değeri boyutu 3 olmalıdır." +msgid "" +"This machine type can only hold 16 history results per nozzle. You can delete " +"the existing historical results and then start calibration. Or you can " +"continue the calibration, but you cannot create new calibration historical " +"results. \n" +"Do you still want to continue the calibration?" +msgstr "" +"Bu makine tipi, püskürtme ucu başına yalnızca 16 geçmiş sonucu tutabilir. " +"Mevcut geçmiş sonuçları silebilir ve ardından kalibrasyona başlayabilirsiniz. " +"Veya kalibrasyona devam edebilirsiniz ancak yeni kalibrasyon geçmişi " +"sonuçları oluşturamazsınız.\n" +"Hala kalibrasyona devam etmek istiyor musunuz?" + msgid "Connecting to printer..." msgstr "Yazıcıya bağlanılıyor..." @@ -13869,6 +13984,24 @@ msgstr "Başarısız olan test sonucu düşürüldü." msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "Akış Dinamiği Kalibrasyonu sonucu yazıcıya kaydedildi" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. Only " +"one of the results with the same name is saved. Are you sure you want to " +"override the historical result?" +msgstr "" +"Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " +"sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " +"istediğinizden emin misiniz?" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" +"Bu makine türü püskürtme ucu başına yalnızca %d geçmiş sonucunu tutabilir. Bu " +"sonuç kaydedilmeyecek." + msgid "Internal Error" msgstr "İç hata" @@ -13886,10 +14019,10 @@ msgstr "Akış Dinamiği Kalibrasyonuna ne zaman ihtiyacınız olur" msgid "" "We now have added the auto-calibration for different filaments, which is " -"fully automated and the result will be saved into the printer for future " -"use. You only need to do the calibration in the following limited cases:\n" -"1. If you introduce a new filament of different brands/models or the " -"filament is damp;\n" +"fully automated and the result will be saved into the printer for future use. " +"You only need to do the calibration in the following limited cases:\n" +"1. If you introduce a new filament of different brands/models or the filament " +"is damp;\n" "2. if the nozzle is worn out or replaced with a new one;\n" "3. If the max volumetric speed or print temperature is changed in the " "filament setting." @@ -13911,10 +14044,10 @@ msgid "" "\n" "Usually the calibration is unnecessary. When you start a single color/" "material print, with the \"flow dynamics calibration\" option checked in the " -"print start menu, the printer will follow the old way, calibrate the " -"filament before the print; When you start a multi color/material print, the " -"printer will use the default compensation parameter for the filament during " -"every filament switch which will have a good result in most cases.\n" +"print start menu, the printer will follow the old way, calibrate the filament " +"before the print; When you start a multi color/material print, the printer " +"will use the default compensation parameter for the filament during every " +"filament switch which will have a good result in most cases.\n" "\n" "Please note there are a few cases that will make the calibration result not " "reliable: using a texture plate to do the calibration; the build plate does " @@ -13940,9 +14073,9 @@ msgstr "" "plakasının yapışması iyi değil (lütfen baskı plakasını yıkayın veya " "yapıştırıcı uygulayın!) ...Daha fazlasını wiki'mizden bulabilirsiniz.\n" "\n" -"Testimizde kalibrasyon sonuçlarında yaklaşık yüzde 10'luk bir titreşim var " -"ve bu da sonucun her kalibrasyonda tam olarak aynı olmamasına neden " -"olabilir. Yeni güncellemelerle iyileştirmeler yapmak için hâlâ temel nedeni " +"Testimizde kalibrasyon sonuçlarında yaklaşık yüzde 10'luk bir titreşim var ve " +"bu da sonucun her kalibrasyonda tam olarak aynı olmamasına neden olabilir. " +"Yeni güncellemelerle iyileştirmeler yapmak için hâlâ temel nedeni " "araştırıyoruz." msgid "When to use Flow Rate Calibration" @@ -13983,10 +14116,10 @@ msgstr "" msgid "" "Flow Rate Calibration measures the ratio of expected to actual extrusion " "volumes. The default setting works well in Bambu Lab printers and official " -"filaments as they were pre-calibrated and fine-tuned. For a regular " -"filament, you usually won't need to perform a Flow Rate Calibration unless " -"you still see the listed defects after you have done other calibrations. For " -"more details, please check out the wiki article." +"filaments as they were pre-calibrated and fine-tuned. For a regular filament, " +"you usually won't need to perform a Flow Rate Calibration unless you still " +"see the listed defects after you have done other calibrations. For more " +"details, please check out the wiki article." msgstr "" "Akış Hızı Kalibrasyonu, beklenen ekstrüzyon hacimlerinin gerçek ekstrüzyon " "hacimlerine oranını ölçer. Varsayılan ayar, önceden kalibre edilmiş ve ince " @@ -14001,13 +14134,12 @@ msgid "" "directly measuring the calibration patterns. However, please be advised that " "the efficacy and accuracy of this method may be compromised with specific " "types of materials. Particularly, filaments that are transparent or semi-" -"transparent, sparkling-particled, or have a high-reflective finish may not " -"be suitable for this calibration and can produce less-than-desirable " -"results.\n" +"transparent, sparkling-particled, or have a high-reflective finish may not be " +"suitable for this calibration and can produce less-than-desirable results.\n" "\n" -"The calibration results may vary between each calibration or filament. We " -"are still improving the accuracy and compatibility of this calibration " -"through firmware updates over time.\n" +"The calibration results may vary between each calibration or filament. We are " +"still improving the accuracy and compatibility of this calibration through " +"firmware updates over time.\n" "\n" "Caution: Flow Rate Calibration is an advanced process, to be attempted only " "by those who fully understand its purpose and implications. Incorrect usage " @@ -14018,8 +14150,8 @@ msgstr "" "kullanarak kalibrasyon modellerini doğrudan ölçer. Ancak, bu yöntemin " "etkinliğinin ve doğruluğunun belirli malzeme türleriyle tehlikeye " "girebileceğini lütfen unutmayın. Özellikle şeffaf veya yarı şeffaf, parlak " -"parçacıklı veya yüksek yansıtıcı yüzeye sahip filamentler bu kalibrasyon " -"için uygun olmayabilir ve arzu edilenden daha az sonuçlar üretebilir.\n" +"parçacıklı veya yüksek yansıtıcı yüzeye sahip filamentler bu kalibrasyon için " +"uygun olmayabilir ve arzu edilenden daha az sonuçlar üretebilir.\n" "\n" "Kalibrasyon sonuçları her kalibrasyon veya filament arasında farklılık " "gösterebilir. Zaman içinde ürün yazılımı güncellemeleriyle bu kalibrasyonun " @@ -14028,8 +14160,8 @@ msgstr "" "Dikkat: Akış Hızı Kalibrasyonu, yalnızca amacını ve sonuçlarını tam olarak " "anlayan kişiler tarafından denenmesi gereken gelişmiş bir işlemdir. Yanlış " "kullanım, ortalamanın altında baskılara veya yazıcının zarar görmesine neden " -"olabilir. Lütfen işlemi yapmadan önce işlemi dikkatlice okuyup " -"anladığınızdan emin olun." +"olabilir. Lütfen işlemi yapmadan önce işlemi dikkatlice okuyup anladığınızdan " +"emin olun." msgid "When you need Max Volumetric Speed Calibration" msgstr "Maksimum Hacimsel Hız Kalibrasyonuna ihtiyaç duyduğunuzda" @@ -14051,15 +14183,15 @@ msgid "We found the best Flow Dynamics Calibration Factor" msgstr "En iyi Akış Dinamiği Kalibrasyon Faktörünü bulduk" msgid "" -"Part of the calibration failed! You may clean the plate and retry. The " -"failed test result would be dropped." +"Part of the calibration failed! You may clean the plate and retry. The failed " +"test result would be dropped." msgstr "" "Kalibrasyonun bir kısmı başarısız oldu! Plakayı temizleyip tekrar " "deneyebilirsiniz. Başarısız olan test sonucu görmezden gelinir." msgid "" -"*We recommend you to add brand, materia, type, and even humidity level in " -"the Name" +"*We recommend you to add brand, materia, type, and even humidity level in the " +"Name" msgstr "*İsme marka, malzeme, tür ve hatta nem seviyesini eklemenizi öneririz" msgid "Failed" @@ -14080,9 +14212,9 @@ msgstr "" #, c-format, boost-format msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to overrides the historical result?" +"There is already a historical calibration result with the same name: %s. Only " +"one of the results with the same name is saved. Are you sure you want to " +"overrides the historical result?" msgstr "" "Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " "sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " @@ -14168,9 +14300,6 @@ msgstr "" msgid "Printing Parameters" msgstr "Yazdırma Parametreleri" -msgid "- ℃" -msgstr "- °C" - msgid "Plate Type" msgstr "Plaka Tipi" @@ -14217,12 +14346,6 @@ msgstr "K değerine" msgid "Step value" msgstr "Adım değeri" -msgid "0.5" -msgstr "0.5" - -msgid "0.005" -msgstr "0.005" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "Nozul çapı yazıcı ayarlarından senkronize edildi" @@ -14250,11 +14373,16 @@ msgstr "Geçmiş Akış Dinamiği Kalibrasyon kayıtlarını yenileme" msgid "Action" msgstr "İşlem" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" +"Bu makine türü püskürtme ucu başına yalnızca %d geçmiş sonucunu tutabilir." + msgid "Edit Flow Dynamics Calibration" msgstr "Akış Dinamiği Kalibrasyonunu Düzenle" -msgid "New Flow Dynamics Calibration" -msgstr "Yeni Akış Dinamiği Kalibrasyonu" +msgid "New Flow Dynamic Calibration" +msgstr "Yeni Akış Dinamik Kalibrasyonu" msgid "Ok" msgstr "Tamam" @@ -14262,16 +14390,6 @@ msgstr "Tamam" msgid "The filament must be selected." msgstr "Filament seçilmelidir." -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" -"Aynı ada sahip geçmiş bir kalibrasyon sonucu zaten var: %s. Aynı ada sahip " -"sonuçlardan yalnızca biri kaydedilir. Geçmiş sonucu geçersiz kılmak " -"istediğinizden emin misiniz?" - msgid "Network lookup" msgstr "Ağ araması" @@ -14666,8 +14784,8 @@ msgid "" "name. Do you want to continue?" msgstr "" "Oluşturduğunuz %s Filament adı zaten mevcut.\n" -"Oluşturmaya devam ederseniz oluşturulan ön ayar tam adıyla " -"görüntülenecektir. Devam etmek istiyor musun?" +"Oluşturmaya devam ederseniz oluşturulan ön ayar tam adıyla görüntülenecektir. " +"Devam etmek istiyor musun?" msgid "Some existing presets have failed to be created, as follows:\n" msgstr "Aşağıdaki gibi bazı mevcut ön ayarlar oluşturulamadı:\n" @@ -14789,15 +14907,15 @@ msgid "" "You have not yet chosen which printer preset to create based on. Please " "choose the vendor and model of the printer" msgstr "" -"Hangi yazıcı ön ayarının temel alınacağını henüz seçmediniz. Lütfen " -"yazıcının satıcısını ve modelini seçin" +"Hangi yazıcı ön ayarının temel alınacağını henüz seçmediniz. Lütfen yazıcının " +"satıcısını ve modelini seçin" msgid "" "You have entered an illegal input in the printable area section on the first " "page. Please check before creating it." msgstr "" -"İlk sayfadaki yazdırılabilir alan kısmına geçersiz bir giriş yaptınız. " -"Lütfen oluşturmadan önce kontrol edin." +"İlk sayfadaki yazdırılabilir alan kısmına geçersiz bir giriş yaptınız. Lütfen " +"oluşturmadan önce kontrol edin." msgid "The custom printer or model is not inputed, place input." msgstr "Özel yazıcı veya model girilmedi lütfen giriş yapın." @@ -14814,8 +14932,7 @@ msgstr "" "Oluşturduğunuz yazıcı ön ayarının zaten aynı ada sahip bir ön ayarı var. " "Üzerine yazmak istiyor musunuz?\n" "\tEvet: Aynı adı taşıyan yazıcı ön ayarının üzerine yazın; aynı ön ayar adı " -"taşıyan filaman ve proses ön ayarları yeniden oluşturulacak ve aynı ön " -"ayar \n" +"taşıyan filaman ve proses ön ayarları yeniden oluşturulacak ve aynı ön ayar \n" "adı olmayan filament ve işlem ön ayarları rezerve edilecektir.\n" "\tİptal: Ön ayar oluşturmayın, oluşturma arayüzüne dönün." @@ -14861,8 +14978,7 @@ msgstr "" msgid "" "You have not yet selected the printer to replace the nozzle, please choose." -msgstr "" -"Hala nozulu değiştirmek için yazıcı seçmediniz, lütfen bir seçim yapın." +msgstr "Hala nozulu değiştirmek için yazıcı seçmediniz, lütfen bir seçim yapın." msgid "Create Printer Successful" msgstr "Yazıcı Oluşturma Başarılı" @@ -14948,8 +15064,8 @@ msgstr "Dışa aktarma başarılı" #, c-format, boost-format msgid "" -"The '%s' folder already exists in the current directory. Do you want to " -"clear it and rebuild it.\n" +"The '%s' folder already exists in the current directory. Do you want to clear " +"it and rebuild it.\n" "If not, a time suffix will be added, and you can modify the name after " "creation." msgstr "" @@ -14988,8 +15104,8 @@ msgid "" "Only printer names with user printer presets will be displayed, and each " "preset you choose will be exported as a zip." msgstr "" -"Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek " -"ve seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." +"Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek ve " +"seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." msgid "" "Only the filament names with user filament presets will be displayed, \n" @@ -14997,13 +15113,13 @@ msgid "" "exported as a zip." msgstr "" "Yalnızca kullanıcı filamenti ön ayarlarına sahip filament adları \n" -"görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti " -"ön ayarları zip olarak dışa aktarılacaktır." +"görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti ön " +"ayarları zip olarak dışa aktarılacaktır." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be " -"exported as a zip." +"and all user process presets in each printer name you select will be exported " +"as a zip." msgstr "" "Yalnızca işlem ön ayarları değiştirilen yazıcı adları görüntülenecek \n" "ve seçtiğiniz her yazıcı adındaki tüm kullanıcı işlem ön ayarları zip olarak " @@ -15027,8 +15143,8 @@ msgid "Filament presets under this filament" msgstr "Bu filamentin altındaki filament ön ayarları" msgid "" -"Note: If the only preset under this filament is deleted, the filament will " -"be deleted after exiting the dialog." +"Note: If the only preset under this filament is deleted, the filament will be " +"deleted after exiting the dialog." msgstr "" "Not: Bu filamentin altındaki tek ön ayar silinirse, diyalogdan çıkıldıktan " "sonra filament silinecektir." @@ -15155,8 +15271,8 @@ msgid "" "On this system, %s uses HTTPS certificates from the system Certificate Store " "or Keychain." msgstr "" -"Bu sistemde %s, sistem Sertifika Deposu veya Anahtar Zincirinden alınan " -"HTTPS sertifikalarını kullanıyor." +"Bu sistemde %s, sistem Sertifika Deposu veya Anahtar Zincirinden alınan HTTPS " +"sertifikalarını kullanıyor." msgid "" "To use a custom CA file, please import your CA file into Certificate Store / " @@ -15305,6 +15421,273 @@ msgstr "" "Mesaj gövdesi: \"%1%\"\n" "Hata: \"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines and " +"high printing quality. It is suitable for most general printing cases." +msgstr "" +"Küçük bir katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir katman " +"çizgileri ve yüksek baskı kalitesi sağlar. Çoğu genel yazdırma durumu için " +"uygundur." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and " +"acceleration, and the sparse infill pattern is Gyroid. So, it results in much " +"higher printing quality, but a much longer printing time." +msgstr "" +"0,2 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha düşük hız " +"ve ivmeye sahiptir ve seyrek dolgu deseni Gyroid’dir. Böylece çok daha yüksek " +"baskı kalitesi elde edilir, ancak çok daha uzun baskı süresi elde edilir." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, biraz " +"daha büyük katman yüksekliğine sahiptir ve neredeyse ihmal edilebilir düzeyde " +"katman çizgileri ve biraz daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve katman çizgilerinin hafifçe " +"görülebilmesine karşın yazdırma süresinin daha kısa olmasına neden olur." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" +"0,2 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"katman yüksekliği daha küçüktür ve neredeyse görünmez katman çizgileri ve " +"daha yüksek baskı kalitesi, ancak daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0,2 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha küçük " +"katman çizgilerine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece neredeyse görünmez katman çizgileri ve çok daha " +"yüksek baskı kalitesi elde edilir, ancak çok daha uzun baskı süresi elde " +"edilir." + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" +"Varsayılan 0,2 mm püskürtme ucu profiliyle karşılaştırıldığında, daha küçük " +"katman yüksekliğine sahiptir ve minimum katman çizgileri ve daha yüksek baskı " +"kalitesi sağlar, ancak daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0,2 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha küçük " +"katman çizgilerine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece minimum katman çizgileri ve çok daha yüksek baskı " +"kalitesi elde edilir, ancak çok daha uzun baskı süresi elde edilir." + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" +"Genel bir katman yüksekliğine sahiptir ve genel katman çizgileri ve baskı " +"kalitesiyle sonuçlanır. Çoğu genel yazdırma durumu için uygundur." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0,4 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha fazla " +"duvar döngüsüne ve daha yüksek seyrek dolgu yoğunluğuna sahiptir. Bu, " +"baskıların daha güçlü olmasına, ancak daha fazla filaman tüketimine ve daha " +"uzun baskı süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " +"daha düşük baskı kalitesi sağlar, ancak biraz daha kısa yazdırma süresi " +"sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " +"daha düşük baskı kalitesi sağlar, ancak daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing quality, " +"but longer printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri ve " +"daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" +"0,4 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha küçük " +"katman yüksekliğine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece daha az belirgin katman çizgileri ve çok daha " +"yüksek baskı kalitesi elde edilir, ancak çok daha uzun yazdırma süresi elde " +"edilir." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"katman yüksekliği daha küçüktür ve neredeyse göz ardı edilebilir katman " +"çizgileri ve daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma " +"süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" +"0,4 mm’lik nozülün varsayılan profiliyle karşılaştırıldığında daha küçük " +"katman yüksekliğine, daha düşük hızlara ve ivmeye sahiptir ve seyrek dolgu " +"deseni Gyroid’dir. Böylece, neredeyse göz ardı edilebilecek düzeyde katman " +"çizgileri ve çok daha yüksek baskı kalitesi elde edilirken, çok daha uzun " +"baskı süresi elde edilir." + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing time." +msgstr "" +"0,4 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, " +"katman yüksekliği daha küçüktür ve neredeyse göz ardı edilebilecek düzeyde " +"katman çizgileri ve daha uzun yazdırma süresi sağlar." + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" +"Büyük bir katman yüksekliğine sahiptir ve belirgin katman çizgileri ile " +"sıradan baskı kalitesi ve baskı süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" +"0,6 mm’lik nozulun varsayılan profiliyle karşılaştırıldığında, daha fazla " +"duvar döngüsüne ve daha yüksek seyrek dolgu yoğunluğuna sahiptir. Bu, " +"baskıların daha güçlü olmasına, ancak daha fazla filaman tüketimine ve daha " +"uzun baskı süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve daha belirgin katman çizgileri ve " +"daha düşük baskı kalitesi sağlar, ancak bazı yazdırma durumlarında daha kısa " +"yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve çok daha belirgin katman çizgileri " +"ve çok daha düşük baskı kalitesi sağlar, ancak bazı yazdırma durumlarında " +"daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve katman çizgilerinin daha az " +"belirgin olmasına ve biraz daha yüksek baskı kalitesine, ancak daha uzun " +"yazdırma süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing quality, " +"but longer printing time." +msgstr "" +"0,6 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve daha az görünür katman çizgileri ve " +"daha yüksek baskı kalitesi sağlar, ancak daha uzun yazdırma süresi sağlar." + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, low " +"printing quality and general printing time." +msgstr "" +"Çok büyük bir katman yüksekliğine sahiptir ve çok belirgin katman " +"çizgilerine, düşük baskı kalitesine ve genel yazdırma süresine neden olur." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"büyük bir katman yüksekliğine sahiptir ve çok belirgin katman çizgileri ve " +"çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı yazdırma durumlarında " +"daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, çok " +"daha büyük bir katman yüksekliğine sahiptir ve son derece belirgin katman " +"çizgileri ve çok daha düşük baskı kalitesiyle sonuçlanır, ancak bazı yazdırma " +"durumlarında çok daha kısa yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, biraz " +"daha küçük bir katman yüksekliğine sahiptir ve biraz daha az ama yine de " +"görünür katman çizgileri ve biraz daha yüksek baskı kalitesi sağlar, ancak " +"bazı yazdırma durumlarında daha uzun yazdırma süresi sağlar." + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" +"0,8 mm’lik püskürtme ucunun varsayılan profiliyle karşılaştırıldığında, daha " +"küçük bir katman yüksekliğine sahiptir ve daha az ama yine de görünür katman " +"çizgileri ve biraz daha yüksek baskı kalitesi sağlar, ancak bazı yazdırma " +"durumlarında daha uzun yazdırma süresi sağlar." + msgid "Connected to Obico successfully!" msgstr "Obico'ya başarıyla bağlanıldı!" @@ -15322,11 +15705,11 @@ msgstr "" "SimplyPrint hesabı bağlı değil. Ayarlamak için Bağlantı seçeneklerine gidin." msgid "" -"File size exceeds the 100MB upload limit. Please upload your file through " -"the panel." +"File size exceeds the 100MB upload limit. Please upload your file through the " +"panel." msgstr "" -"Dosya boyutu 100 MB yükleme sınırını aşıyor. Lütfen dosyanızı panel " -"üzerinden yükleyiniz." +"Dosya boyutu 100 MB yükleme sınırını aşıyor. Lütfen dosyanızı panel üzerinden " +"yükleyiniz." msgid "Unknown error" msgstr "Bilinmeyen hata" @@ -15369,8 +15752,7 @@ msgid "" msgstr "" "Sandviç modu\n" "Modelinizde çok dik çıkıntılar yoksa hassasiyeti ve katman tutarlılığını " -"artırmak için sandviç modunu (iç-dış-iç) kullanabileceğinizi biliyor " -"muydunuz?" +"artırmak için sandviç modunu (iç-dış-iç) kullanabileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -15432,14 +15814,14 @@ msgid "" "3D scene operations." msgstr "" "Klavye kısayolları nasıl kullanılır?\n" -"Orca Slicer'ın çok çeşitli klavye kısayolları ve 3B sahne işlemleri " -"sunduğunu biliyor muydunuz?" +"Orca Slicer'ın çok çeşitli klavye kısayolları ve 3B sahne işlemleri sunduğunu " +"biliyor muydunuz?" #: resources/data/hints.ini: [hint:Reverse on odd] msgid "" "Reverse on odd\n" -"Did you know that Reverse on odd feature can significantly improve " -"the surface quality of your overhangs?" +"Did you know that Reverse on odd feature can significantly improve the " +"surface quality of your overhangs?" msgstr "" "Tek sayıyı tersine çevir\n" "Tek sayıyı ters çevir özelliğinin çıkıntılarınızın yüzey kalitesini " @@ -15462,8 +15844,8 @@ msgid "" "problems on the Windows system?" msgstr "" "Modeli Düzelt\n" -"Windows sisteminde birçok dilimleme sorununu önlemek için bozuk bir 3D " -"modeli düzeltebileceğinizi biliyor muydunuz?" +"Windows sisteminde birçok dilimleme sorununu önlemek için bozuk bir 3D modeli " +"düzeltebileceğinizi biliyor muydunuz?" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -15596,9 +15978,9 @@ msgstr "" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" "Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking " -"prints? Depending on the material, you can improve the overall finish of the " -"printed model by doing some fine-tuning." +"Did you know that flow rate can be fine-tuned for even better-looking prints? " +"Depending on the material, you can improve the overall finish of the printed " +"model by doing some fine-tuning." msgstr "" "Akış hızı için ince ayar\n" "Baskıların daha da iyi görünmesi için akış hızına ince ayar yapılabileceğini " @@ -15632,8 +16014,8 @@ msgstr "" msgid "" "Support painting\n" "Did you know that you can paint the location of your supports? This feature " -"makes it easy to place the support material only on the sections of the " -"model that actually need it." +"makes it easy to place the support material only on the sections of the model " +"that actually need it." msgstr "" "Destek boyama\n" "Desteklerinizin yerini boyayabileceğinizi biliyor muydunuz? Bu özellik, " @@ -15738,6 +16120,106 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#~ msgid "Actions For Unsaved Changes" +#~ msgstr "Kaydedilmemiş Değişikliklere İlişkin İşlemler" + +#~ msgid "Preset Value" +#~ msgstr "Ön ayar değeri" + +#~ msgid "Modified Value" +#~ msgstr "Değiştirilmiş Değer" + +#~ msgid "Transfer Modified Value" +#~ msgstr "Değiştirilen Değeri Aktar" + +#~ msgid "Use Preset Value" +#~ msgstr "Ön Ayar Değerini Kullan" + +#~ msgid "Save Modified Value" +#~ msgstr "Değiştirilen Değeri Kaydet" + +#~ msgid "" +#~ "\n" +#~ "Would you like to save these changed settings(modified value)?" +#~ msgstr "" +#~ "\n" +#~ "Bu değişiklik ayarlarını (değiştirilen değer) kaydetmek ister misiniz?" + +#~ msgid "" +#~ "\n" +#~ "Would you like to keep these changed settings(modified value) after " +#~ "switching preset?" +#~ msgstr "" +#~ "\n" +#~ "Ön ayarı değiştirdikten sonra bu değiştirilen ayarları (değiştirilen " +#~ "değer) korumak ister misiniz?" + +#~ msgid "" +#~ "You have previously modified your settings and are about to overwrite them " +#~ "with new ones." +#~ msgstr "" +#~ "Ayarlarınızı daha önce değiştirdiniz ve bunların üzerine yenilerini yazmak " +#~ "üzeresiniz." + +#~ msgid "" +#~ "\n" +#~ "Do you want to keep your current modified settings, or use preset settings?" +#~ msgstr "" +#~ "\n" +#~ "Geçerli değiştirilen ayarlarınızı korumak mı yoksa önceden ayarlanmış " +#~ "ayarları mı kullanmak istiyorsunuz?" + +#~ msgid "" +#~ "\n" +#~ "Do you want to save your current modified settings?" +#~ msgstr "" +#~ "\n" +#~ "Geçerli değiştirilen ayarlarınızı kaydetmek istiyor musunuz?" + +#~ msgid "Unload Filament" +#~ msgstr "Filamenti Çıkarın" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Filamenti otomatik olarak yüklemek veya çıkarmak için bir AMS yuvası seçin " +#~ "ve ardından \"Yükle\" veya \"Boşalt\" düğmesine basın." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Anakart" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "" +#~ "Orca Slicer'ya aktarma başarısız oldu. Lütfen dosyayı indirin ve manuel " +#~ "olarak İçe aktarın." + +#~ msgid "- ℃" +#~ msgstr "- °C" + +#~ msgid "0.5" +#~ msgstr "0.5" + +#~ msgid "0.005" +#~ msgstr "0.005" + +#~ msgid "New Flow Dynamics Calibration" +#~ msgstr "Yeni Akış Dinamiği Kalibrasyonu" + #~ msgid "" #~ "Over 4 studio/handy are using remote access, you can close some and try " #~ "again." @@ -15749,8 +16231,8 @@ msgstr "" #~ "The 3mf file version is in Beta and it is newer than the current Bambu " #~ "Studio version." #~ msgstr "" -#~ "3mf dosya sürümü Beta aşamasındadır ve mevcut Bambu Studio sürümünden " -#~ "daha yenidir." +#~ "3mf dosya sürümü Beta aşamasındadır ve mevcut Bambu Studio sürümünden daha " +#~ "yenidir." #~ msgid "If you would like to try Bambu Studio Beta, you may click to" #~ msgstr "Bambu Studio Beta’yı denemek isterseniz tıklayabilirsiniz." @@ -15777,9 +16259,9 @@ msgstr "" #~ "Green means that AMS humidity is normal, orange represent humidity is " #~ "high, red represent humidity is too high.(Hygrometer: lower the better.)" #~ msgstr "" -#~ "Yeşil, AMS neminin normal olduğunu, turuncu nemin yüksek olduğunu, " -#~ "kırmızı ise nemin çok yüksek olduğunu gösterir.(Higrometre: ne kadar " -#~ "düşükse o kadar iyidir.)" +#~ "Yeşil, AMS neminin normal olduğunu, turuncu nemin yüksek olduğunu, kırmızı " +#~ "ise nemin çok yüksek olduğunu gösterir.(Higrometre: ne kadar düşükse o " +#~ "kadar iyidir.)" #~ msgid "Desiccant status" #~ msgstr "Kurutucu durumu" @@ -15789,14 +16271,14 @@ msgstr "" #~ "inactive. Please change the desiccant.(The bars: higher the better.)" #~ msgstr "" #~ "İki çubuktan daha düşük bir kurutucu durumu, kurutucunun etkin olmadığını " -#~ "gösterir. Lütfen kurutucuyu değiştirin.(Çubuklar: ne kadar yüksek olursa " -#~ "o kadar iyidir.)" +#~ "gösterir. Lütfen kurutucuyu değiştirin.(Çubuklar: ne kadar yüksek olursa o " +#~ "kadar iyidir.)" #~ msgid "" #~ "Note: When the lid is open or the desiccant pack is changed, it can take " #~ "hours or a night to absorb the moisture. Low temperatures also slow down " -#~ "the process. During this time, the indicator may not represent the " -#~ "chamber accurately." +#~ "the process. During this time, the indicator may not represent the chamber " +#~ "accurately." #~ msgstr "" #~ "Not: Kapak açıkken veya kurutucu paketi değiştirildiğinde, nemin emilmesi " #~ "saatler veya bir gece sürebilir. Düşük sıcaklıklar da süreci yavaşlatır. " @@ -15869,18 +16351,6 @@ msgstr "" #~ "Model ağlarında boole işlemi gerçekleştirilemiyor. Yalnızca pozitif " #~ "parçalar ihraç edilecektir." -#~ msgid "Transfer or discard changes" -#~ msgstr "Değişiklikleri Çıkart veya Sakla" - -#~ msgid "Old Value" -#~ msgstr "Eski Değer" - -#~ msgid "New Value" -#~ msgstr "Yeni değer" - -#~ msgid "Discard" -#~ msgstr "Çıkart" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -15906,14 +16376,14 @@ msgstr "" #~ msgid "" #~ "Please go to filament setting to edit your presets if you need.\n" #~ "Please note that nozzle temperature, hot bed temperature, and maximum " -#~ "volumetric speed have a significant impact on printing quality. Please " -#~ "set them carefully." +#~ "volumetric speed have a significant impact on printing quality. Please set " +#~ "them carefully." #~ msgstr "" -#~ "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament " -#~ "ayarına gidin.\n" +#~ "İhtiyacınız olursa ön ayarlarınızı düzenlemek için lütfen filament ayarına " +#~ "gidin.\n" #~ "Lütfen püskürtme ucu sıcaklığının, sıcak yatak sıcaklığının ve maksimum " -#~ "hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip " -#~ "olduğunu unutmayın. Lütfen bunları dikkatlice ayarlayın." +#~ "hacimsel hızın yazdırma kalitesi üzerinde önemli bir etkiye sahip olduğunu " +#~ "unutmayın. Lütfen bunları dikkatlice ayarlayın." #~ msgid "Studio Version:" #~ msgstr "Stüdyo Sürümü:" @@ -15958,8 +16428,8 @@ msgstr "" #~ msgstr "Depolama Yüklemesini Test Etme" #~ msgid "" -#~ "The speed setting exceeds the printer's maximum speed " -#~ "(machine_max_speed_x/machine_max_speed_y).\n" +#~ "The speed setting exceeds the printer's maximum speed (machine_max_speed_x/" +#~ "machine_max_speed_y).\n" #~ "Orca will automatically cap the print speed to ensure it doesn't surpass " #~ "the printer's capabilities.\n" #~ "You can adjust the maximum speed setting in your printer's configuration " @@ -15967,8 +16437,8 @@ msgstr "" #~ msgstr "" #~ "Hız ayarı yazıcının maksimum hızını aşıyor (machine_max_speed_x/" #~ "machine_max_speed_y).\n" -#~ "Orca, yazıcının yeteneklerini aşmadığından emin olmak için yazdırma " -#~ "hızını otomatik olarak sınırlayacaktır.\n" +#~ "Orca, yazıcının yeteneklerini aşmadığından emin olmak için yazdırma hızını " +#~ "otomatik olarak sınırlayacaktır.\n" #~ "Daha yüksek hızlar elde etmek için yazıcınızın yapılandırmasındaki " #~ "maksimum hız ayarını yapabilirsiniz." @@ -15994,8 +16464,8 @@ msgstr "" #~ "Add solid infill near sloping surfaces to guarantee the vertical shell " #~ "thickness (top+bottom solid layers)" #~ msgstr "" -#~ "Dikey kabuk kalınlığını garanti etmek için eğimli yüzeylerin yakınına " -#~ "katı dolgu ekleyin (üst + alt katı katmanlar)" +#~ "Dikey kabuk kalınlığını garanti etmek için eğimli yüzeylerin yakınına katı " +#~ "dolgu ekleyin (üst + alt katı katmanlar)" #~ msgid "Further reduce solid infill on walls (beta)" #~ msgstr "Duvarlardaki katı dolguyu daha da azaltın (deneysel)" @@ -16049,8 +16519,8 @@ msgstr "" #~ "are not specified explicitly." #~ msgstr "" #~ "Daha iyi katman soğutması için yavaşlama etkinleştirildiğinde, yazdırma " -#~ "çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde " -#~ "filament için minimum yazdırma hızı." +#~ "çıkıntıları olduğunda ve özellik hızları açıkça belirtilmediğinde filament " +#~ "için minimum yazdırma hızı." #~ msgid "No sparse layers (EXPERIMENTAL)" #~ msgstr "Seyrek katman yok (DENEYSEL)" @@ -16076,8 +16546,8 @@ msgstr "" #~ msgstr "wiki" #~ msgid "" -#~ "Relative extrusion is recommended when using \"label_objects\" option." -#~ "Some extruders work better with this option unckecked (absolute extrusion " +#~ "Relative extrusion is recommended when using \"label_objects\" option.Some " +#~ "extruders work better with this option unckecked (absolute extrusion " #~ "mode). Wipe tower is only compatible with relative mode. It is always " #~ "enabled on BambuLab printers. Default is checked" #~ msgstr "" @@ -16207,8 +16677,8 @@ msgstr "" #~ "Bir Parçayı Çıkar\n" #~ "Negatif parça değiştiriciyi kullanarak bir ağı diğerinden " #~ "çıkarabileceğinizi biliyor muydunuz? Bu şekilde örneğin doğrudan Orca " -#~ "Slicer'da kolayca yeniden boyutlandırılabilen delikler " -#~ "oluşturabilirsiniz. Daha fazlasını belgelerde okuyun." +#~ "Slicer'da kolayca yeniden boyutlandırılabilen delikler oluşturabilirsiniz. " +#~ "Daha fazlasını belgelerde okuyun." #~ msgid "Filling bed " #~ msgstr "Yatak doldurma " @@ -16224,8 +16694,7 @@ msgstr "" #~ msgstr "" #~ "Doğrusal desene geçilsin mi?\n" #~ "Evet - otomatik olarak doğrusal desene geçin\n" -#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere " -#~ "sıfırlayın" +#~ "Hayır - yoğunluğu otomatik olarak %100 olmayan varsayılan değere sıfırlayın" #~ msgid "Please heat the nozzle to above 170 degree before loading filament." #~ msgstr "" @@ -16466,8 +16935,8 @@ msgstr "" #~ "load uptodate process/machine settings from the specified file when using " #~ "uptodate" #~ msgstr "" -#~ "güncellemeyi kullanırken belirtilen dosyadan güncel işlem/" -#~ "yazıcıayarlarını yükle" +#~ "güncellemeyi kullanırken belirtilen dosyadan güncel işlem/yazıcıayarlarını " +#~ "yükle" #~ msgid "Output directory" #~ msgstr "Çıkış dizini" @@ -16514,8 +16983,8 @@ msgstr "" #~ "OrcaSlicer configuration file may be corrupted and is not abled to be " #~ "parsed.Please delete the file and try again." #~ msgstr "" -#~ "OrcaSlicer yapılandırma dosyası bozulmuş olabilir ve ayrıştırılması " -#~ "mümkün olmayabilir. Lütfen dosyayı silin ve tekrar deneyin." +#~ "OrcaSlicer yapılandırma dosyası bozulmuş olabilir ve ayrıştırılması mümkün " +#~ "olmayabilir. Lütfen dosyayı silin ve tekrar deneyin." #~ msgid "Online Models" #~ msgstr "Çevrimiçi Modeller" @@ -16529,8 +16998,8 @@ msgstr "" #~ msgid "" #~ "There are currently no identical spare consumables available, and " #~ "automatic replenishment is currently not possible. \n" -#~ "(Currently supporting automatic supply of consumables with the same " -#~ "brand, material type, and color)" +#~ "(Currently supporting automatic supply of consumables with the same brand, " +#~ "material type, and color)" #~ msgstr "" #~ "Şu anda aynı yedek sarf malzemesi mevcut değildir ve otomatik yenileme şu " #~ "anda mümkün değildir.\n" @@ -16562,8 +17031,7 @@ msgstr "" #~ "daha sıcak olamaz" #~ msgid "Enable this option if machine has auxiliary part cooling fan" -#~ msgstr "" -#~ "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin" +#~ msgstr "Makinede yardımcı parça soğutma fanı varsa bu seçeneği etkinleştirin" #~ msgid "" #~ "This option is enabled if machine support controlling chamber temperature" @@ -16591,8 +17059,7 @@ msgstr "" #~ "katmanları etkilemez" #~ msgid "Empty layers around bottom are replaced by nearest normal layers." -#~ msgstr "" -#~ "Alt kısımdaki boş katmanların yerini en yakın normal katmanlar alır." +#~ msgstr "Alt kısımdaki boş katmanların yerini en yakın normal katmanlar alır." #~ msgid "The model has too many empty layers." #~ msgstr "Modelde çok fazla boş katman var." @@ -16610,9 +17077,8 @@ msgstr "" #~ "Bed temperature when high temperature plate is installed. Value 0 means " #~ "the filament does not support to print on the High Temp Plate" #~ msgstr "" -#~ "Yüksek sıcaklık plakası takıldığında yatak sıcaklığı. 0 değeri, " -#~ "filamentin Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına " -#~ "gelir" +#~ "Yüksek sıcaklık plakası takıldığında yatak sıcaklığı. 0 değeri, filamentin " +#~ "Yüksek Sıcaklık Plakasına yazdırmayı desteklemediği anlamına gelir" #~ msgid "" #~ "Klipper's max_accel_to_decel will be adjusted to this % of acceleration" @@ -16632,8 +17098,7 @@ msgstr "" #~ msgstr "" #~ "Desteğin stili ve şekli. Normal destek için, desteklerin düzenli bir " #~ "ızgaraya yansıtılması daha sağlam destekler oluşturur (varsayılan), rahat " -#~ "destek kuleleri ise malzemeden tasarruf sağlar ve nesne izlerini " -#~ "azaltır.\n" +#~ "destek kuleleri ise malzemeden tasarruf sağlar ve nesne izlerini azaltır.\n" #~ "Ağaç desteği için, ince stil, dalları daha agresif bir şekilde " #~ "birleştirecek ve çok fazla malzeme tasarrufu sağlayacak (varsayılan), " #~ "hibrit stil ise büyük düz çıkıntılar altında normal desteğe benzer yapı " diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 8cab46bcee..4e60a4526c 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2023-08-10 20:25-0400\n" "Last-Translator: \n" "Language-Team: \n" @@ -15,8 +15,8 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " -"n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.3.2\n" msgid "Supports Painting" @@ -1904,6 +1904,12 @@ msgstr "Організувати" msgid "arrange current plate" msgstr "упорядкувати поточну табличку" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "Авто-поворот" @@ -2371,11 +2377,11 @@ msgstr "" msgid "AMS not connected" msgstr "АМС не підключено" -msgid "Load Filament" -msgstr "Завантажте філамент" +msgid "Load" +msgstr "" -msgid "Unload Filament" -msgstr "Вивантажте філамент" +msgid "Unload" +msgstr "Вивантаження" msgid "Ext Spool" msgstr "Зовнішня котушка" @@ -2392,7 +2398,7 @@ msgstr "Повторити спробу" msgid "Calibrating AMS..." msgstr "Калібрування АМС..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "" "Під час калібрування виникла проблема. Натисніть, щоб переглянути рішення." @@ -2434,11 +2440,8 @@ msgstr "" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." +"load or unload filaments." msgstr "" -"Виберіть слот AMS, потім натисніть кнопку \\Load\\ або \\Unload\\, щоб " -"автоматично\n" -"завантажити або вивантажити філамент." msgid "Edit" msgstr "Редагувати" @@ -3047,6 +3050,14 @@ msgstr "" "AMS перейде на іншу котушку з тими самими властивостями автоматично, коли " "поточний філамент закінчується" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "Файл" @@ -3130,6 +3141,45 @@ msgstr "Запуск скриптів постобробки" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "Невідома помилка під час експорту G-коду." @@ -3501,18 +3551,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "MC" - -msgid "MainBoard" -msgstr "Основна плата" - -msgid "TH" -msgstr "TH" - -msgid "XCam" -msgstr "XCam" - msgid "Unknown" msgstr "Невідомий" @@ -4035,7 +4073,7 @@ msgstr "Об'єм:" msgid "Size:" msgstr "Розмір:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4176,6 +4214,9 @@ msgstr "Попередній перегляд" msgid "Device" msgstr "Пристрій" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "Проєкт" @@ -4215,6 +4256,9 @@ msgstr "Роздрукувати все" msgid "Send all" msgstr "Надіслати все" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "Гарячі клавіші" @@ -5005,9 +5049,6 @@ msgstr "Камера" msgid "Bed" msgstr "Стіл" -msgid "Unload" -msgstr "Вивантаження" - msgid "Debug Info" msgstr "Налагоджувальна інформація" @@ -5177,9 +5218,6 @@ msgstr "Статус" msgid "Update" msgstr "Оновлення" -msgid "HMS" -msgstr "HMS" - msgid "Don't show again" msgstr "Більше не показувати" @@ -5427,6 +5465,12 @@ msgstr "" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5871,15 +5915,21 @@ msgstr "Імпорт моделі" msgid "prepare 3mf file..." msgstr "підготувати файл 3mf..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "завантажую проект..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "Проект завантажено %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -6149,6 +6199,21 @@ msgstr "Імперський" msgid "Units" msgstr "Одиниці" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6224,6 +6289,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6861,6 +6934,9 @@ msgstr "" msgid "Modifying the device name" msgstr "Зміна імені пристрою" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "Надіслати на SD-карту принтера" @@ -6912,6 +6988,26 @@ msgstr "" msgid "Unknown Failure" msgstr "Невідомий збій" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "Вхід до принтера" @@ -7101,8 +7197,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "При записі таймлапсу без інструментальної головки рекомендується додати " "“Timelapse Wipe Tower” \n" @@ -7516,26 +7612,23 @@ msgstr "Undef" msgid "Unsaved Changes" msgstr "Незбережені зміни" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "Відкинути або зберегти зміни" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "Старе значення" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "Нове значення" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "Передача" msgid "Don't save" msgstr "Не зберігати" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "Не зберігати" msgid "Click the right mouse button to display the full text." msgstr "Натисніть праву кнопку миші, щоб відобразити повний текст." @@ -7597,28 +7690,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7636,9 +7723,6 @@ msgstr "Показати всі налаштування (включаючи н msgid "Select presets to compare" msgstr "Виберіть налаштування для порівняння" -msgid "Transfer" -msgstr "Передача" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8107,6 +8191,39 @@ msgstr "Виконано" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "Завантажте філамент" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -10130,6 +10247,9 @@ msgstr "Підтримуючий кубічний" msgid "Lightning" msgstr "Блискавка" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "Довжина прив'язки заповнення" @@ -10331,10 +10451,10 @@ msgstr "Повна швидкість вентилятора на шарі" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "Швидкість вентилятора лінійно збільшується від нуля на " "рівні«close_fan_the_first_x_layers» до максимуму на рівні " @@ -12966,6 +13086,9 @@ msgstr "" msgid "load_obj: failed to parse" msgstr "" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "" @@ -13082,6 +13205,14 @@ msgstr "" msgid "The input value size must be 3." msgstr "" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "" @@ -13091,6 +13222,19 @@ msgstr "" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "" @@ -13316,9 +13460,6 @@ msgstr "" msgid "Printing Parameters" msgstr "" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "" @@ -13362,12 +13503,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "" @@ -13395,10 +13530,14 @@ msgstr "" msgid "Action" msgstr "" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13407,13 +13546,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "" @@ -13798,8 +13930,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14349,6 +14481,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14721,6 +15022,32 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "Вивантажте філамент" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "" +#~ "Виберіть слот AMS, потім натисніть кнопку \\Load\\ або \\Unload\\, щоб " +#~ "автоматично\n" +#~ "завантажити або вивантажити філамент." + +#~ msgid "MC" +#~ msgstr "MC" + +#~ msgid "MainBoard" +#~ msgstr "Основна плата" + +#~ msgid "TH" +#~ msgstr "TH" + +#~ msgid "XCam" +#~ msgstr "XCam" + +#~ msgid "HMS" +#~ msgstr "HMS" + #~ msgid "active" #~ msgstr "активно" @@ -14800,18 +15127,6 @@ msgstr "" #~ msgid "Load failed [%d]!" #~ msgstr "Завантаження не вдалося [%d]!" -#~ msgid "Transfer or discard changes" -#~ msgstr "Відкинути або зберегти зміни" - -#~ msgid "Old Value" -#~ msgstr "Старе значення" - -#~ msgid "New Value" -#~ msgstr "Нове значення" - -#~ msgid "Discard" -#~ msgstr "Не зберігати" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 5d329f9e7f..64e4251179 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: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2023-04-01 13:21+0800\n" "Last-Translator: SoftFever \n" "Language-Team: \n" @@ -1887,6 +1887,12 @@ msgstr "自动摆放" msgid "arrange current plate" msgstr "在当前盘执行自动摆放" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自动朝向" @@ -2327,10 +2333,10 @@ msgstr "自动补给" msgid "AMS not connected" msgstr "AMS 未连接" -msgid "Load Filament" -msgstr "进料" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "退料" msgid "Ext Spool" @@ -2348,7 +2354,7 @@ msgstr "重试" msgid "Calibrating AMS..." msgstr "正在校准AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "校准过程遇到问题。点击查看解决方案。" msgid "Calibrate again" @@ -2389,8 +2395,8 @@ msgstr "咬入耗材丝" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." -msgstr "选择1个AMS槽位,然后点击进料/退料按钮以自动进料/退料。" +"load or unload filaments." +msgstr "" msgid "Edit" msgstr "编辑" @@ -2960,6 +2966,14 @@ msgid "" "automatically when current filament runs out" msgstr "AMS料材丝耗尽后将自动切换到属性完全相同的耗材丝" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "文件" @@ -3031,6 +3045,45 @@ msgstr "运行后处理脚本" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "导出G-code文件发生未知错误。" @@ -3390,18 +3443,6 @@ msgstr "首层扫描异常暂停" msgid "Nozzle clog pause" msgstr "堵头暂停" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "主板" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "未定义" @@ -3930,7 +3971,7 @@ msgstr "体积:" msgid "Size:" msgstr "尺寸:" -#, boost-format +#, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4069,6 +4110,9 @@ msgstr "预览" msgid "Device" msgstr "设备" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "项目" @@ -4108,6 +4152,9 @@ msgstr "打印所有盘" msgid "Send all" msgstr "发送所有盘" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "快捷键" @@ -4881,9 +4928,6 @@ msgstr "机箱" msgid "Bed" msgstr "热床" -msgid "Unload" -msgstr "退料" - msgid "Debug Info" msgstr "调试信息" @@ -5059,9 +5103,6 @@ msgstr "设备状态" msgid "Update" msgstr "固件更新" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "不再显示" @@ -5298,6 +5339,12 @@ msgstr "允许提示音" msgid "Filament Tangle Detect" msgstr "缠料检测" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5721,15 +5768,21 @@ msgstr "正在导入模型" msgid "prepare 3mf file..." msgstr "正在准备3mf文件..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "项目下载中..." +msgid "Download failed, File size exception." +msgstr "" + #, c-format, boost-format msgid "Project downloaded %d%%" msgstr "项目已下载%d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." msgstr "" @@ -5992,6 +6045,21 @@ msgstr "英制" msgid "Units" msgstr "单位" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "" @@ -6066,6 +6134,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "网络" @@ -6679,6 +6755,9 @@ msgstr "使用微型激光雷达进行自动流量校准" msgid "Modifying the device name" msgstr "修改打印机名称" +msgid "Bind with Pin Code" +msgstr "" + msgid "Send to Printer SD card" msgstr "发送到打印机的SD卡" @@ -6730,6 +6809,26 @@ msgstr "接收登录报告超时" msgid "Unknown Failure" msgstr "发生错误" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + msgid "Log in printer" msgstr "登录打印机" @@ -6920,8 +7019,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "在录制无工具头延时摄影视频时,建议添加“延时摄影擦料塔”\n" "右键单击打印板的空白位置,选择“添加标准模型”->“延时摄影擦料塔”。" @@ -7310,26 +7409,23 @@ msgstr "未定义" msgid "Unsaved Changes" msgstr "未保存的更改" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "放弃或保留更改" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "旧值" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "新值" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "迁移" msgid "Don't save" msgstr "不保存" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "放弃" msgid "Click the right mouse button to display the full text." msgstr "单击鼠标右键显示全文。" @@ -7387,28 +7483,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7426,9 +7516,6 @@ msgstr "显示所有预设(包括不兼容的)" msgid "Select presets to compare" msgstr "选择要比较的预设" -msgid "Transfer" -msgstr "迁移" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -7904,6 +7991,39 @@ msgstr "完成" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "进料" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "确认并更新喷嘴" @@ -9916,6 +10036,9 @@ msgstr "支撑立方体" msgid "Lightning" msgstr "闪电" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "稀疏填充锚线长度" @@ -10091,10 +10214,10 @@ msgstr "满速风扇在" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "风扇速度将从“禁用第一层”的零线性上升到“全风扇速度层”的最大。如果低于“禁用风扇" "第一层”,则“全风扇速度第一层”将被忽略,在这种情况下,风扇将在“禁用风扇第一" @@ -12673,6 +12796,9 @@ msgstr "已取消" msgid "load_obj: failed to parse" msgstr "加载对象:无法分析" +msgid "load mtl in obj: failed to parse" +msgstr "" + msgid "The file contains polygons with more than 4 vertices." msgstr "该文件包含顶点超过4个的多边形。" @@ -12796,6 +12922,14 @@ msgstr "请选择要校准的耗材丝。" msgid "The input value size must be 3." msgstr "输入值大小必须为3。" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + msgid "Connecting to printer..." msgstr "正在连接打印机..." @@ -12805,6 +12939,19 @@ msgstr "测试失败的结果已被删除。" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "动态流量校准的结果已保存至打印机。" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "内部错误" @@ -13072,9 +13219,6 @@ msgstr "将打印一份测试模型。在校准之前,请清理打印平台并 msgid "Printing Parameters" msgstr "打印参数" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "热床类型" @@ -13121,12 +13265,6 @@ msgstr "结束k值" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "喷嘴直径已从打印机设置同步" @@ -13154,10 +13292,14 @@ msgstr "刷新历史流量动态校准记录" msgid "Action" msgstr "操作" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "编辑动态流量校准" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13166,13 +13308,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "搜索网络" @@ -13571,8 +13706,8 @@ msgstr "" "你想重写预设吗" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14137,6 +14272,175 @@ msgid "" "Error: \"%2%\"" msgstr "主机打印机的枚举失败。消息体:\"%1%\"错误:\"%2%\"" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14531,6 +14835,17 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ msgid "Unload Filament" +#~ msgstr "退料" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "选择1个AMS槽位,然后点击进料/退料按钮以自动进料/退料。" + +#~ msgid "MainBoard" +#~ msgstr "主板" + #~ msgid "active" #~ msgstr "活动的" @@ -14628,18 +14943,6 @@ msgstr "" #~ "will be exported." #~ msgstr "无法对模型网格执行布尔运算。只有正面部分将被导出。" -#~ msgid "Transfer or discard changes" -#~ msgstr "放弃或保留更改" - -#~ msgid "Old Value" -#~ msgstr "旧值" - -#~ msgid "New Value" -#~ msgstr "新值" - -#~ msgid "Discard" -#~ msgstr "放弃" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" @@ -14755,8 +15058,8 @@ msgstr "" #~ msgstr "无稀疏层(实验)" #~ msgid "" -#~ "We would rename the presets as \"Vendor Type Serial @printer you " -#~ "selected\". \n" +#~ "We would rename the presets as \"Vendor Type Serial @printer you selected" +#~ "\". \n" #~ "To add preset for more prinetrs, Please go to printer selection" #~ msgstr "" #~ "我们会将预设重命名为“供应商 类型 系列 @您选择的打印机”。\n" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 03f29b69af..2ddad8f7fa 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-16 16:45+0200\n" +"POT-Creation-Date: 2024-05-01 00:42+0800\n" "PO-Revision-Date: 2023-11-06 14:37+0800\n" "Last-Translator: ablegods \n" "Language-Team: \n" @@ -1947,6 +1947,12 @@ msgstr "自動擺放" msgid "arrange current plate" msgstr "在列印板執行自動擺放" +msgid "Reload All" +msgstr "" + +msgid "reload all from disk" +msgstr "" + msgid "Auto Rotate" msgstr "自動旋轉方向" @@ -2414,10 +2420,10 @@ msgstr "自動補充" msgid "AMS not connected" msgstr "AMS 尚未連接" -msgid "Load Filament" -msgstr "進料" +msgid "Load" +msgstr "" -msgid "Unload Filament" +msgid "Unload" msgstr "退料" msgid "Ext Spool" @@ -2435,7 +2441,7 @@ msgstr "重試" msgid "Calibrating AMS..." msgstr "正在校準 AMS..." -msgid "A problem occured during calibration. Click to view the solution." +msgid "A problem occurred during calibration. Click to view the solution." msgstr "校準過程遇到問題。點擊查看解決方案。" msgid "Calibrate again" @@ -2476,8 +2482,8 @@ msgstr "咬入線材" msgid "" "Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically " -"load or unload filiament." -msgstr "選擇 1 個 AMS 槽位,然後點擊進料/退料按鈕以自動進料/退料。" +"load or unload filaments." +msgstr "" msgid "Edit" msgstr "編輯" @@ -3079,6 +3085,14 @@ msgid "" "automatically when current filament runs out" msgstr "AMS 線材耗盡後將自動切換到屬性完全相同的線材" +msgid "Air Printing Detection" +msgstr "" + +msgid "" +"Detects clogging and filament grinding, halting printing immediately to " +"conserve time and filament." +msgstr "" + msgid "File" msgstr "檔案" @@ -3153,6 +3167,45 @@ msgstr "執行後處理腳本" msgid "Successfully executed post-processing script" msgstr "" +msgid "Unknown error occured during exporting G-code." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. Maybe the SD " +"card is write locked?\n" +"Error message: %1%" +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed. There might be " +"problem with target device, please try exporting again or using different " +"device. The corrupted output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Renaming of the G-code after copying to the selected destination folder has " +"failed. Current path is %1%.tmp. Please try exporting again." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the original code at %1% " +"couldn't be opened during copy check. The output G-code is at %2%.tmp." +msgstr "" + +#, boost-format +msgid "" +"Copying of the temporary G-code has finished but the exported code couldn't " +"be opened during copy check. The output G-code is at %1%.tmp." +msgstr "" + +#, boost-format +msgid "G-code file exported to %1%" +msgstr "" + msgid "Unknown error when export G-code." msgstr "匯出 G-code 檔案發生未知錯誤。" @@ -3527,18 +3580,6 @@ msgstr "" msgid "Nozzle clog pause" msgstr "" -msgid "MC" -msgstr "" - -msgid "MainBoard" -msgstr "主板" - -msgid "TH" -msgstr "" - -msgid "XCam" -msgstr "" - msgid "Unknown" msgstr "未定義" @@ -4093,7 +4134,7 @@ msgstr "體積:" msgid "Size:" msgstr "尺寸:" -#, fuzzy, boost-format +#, fuzzy, c-format, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -4236,6 +4277,9 @@ msgstr "預覽" msgid "Device" msgstr "設備" +msgid "Multi-device" +msgstr "" + msgid "Project" msgstr "專案項目" @@ -4282,6 +4326,9 @@ msgstr "列印所有列印板" msgid "Send all" msgstr "傳送所有列印板" +msgid "Send to Multi-device" +msgstr "" + msgid "Keyboard Shortcuts" msgstr "快捷鍵" @@ -5077,9 +5124,6 @@ msgstr "機箱" msgid "Bed" msgstr "熱床" -msgid "Unload" -msgstr "退料" - msgid "Debug Info" msgstr "除錯資訊" @@ -5263,9 +5307,6 @@ msgstr "設備狀態" msgid "Update" msgstr "韌體更新" -msgid "HMS" -msgstr "" - msgid "Don't show again" msgstr "不再顯示" @@ -5508,6 +5549,12 @@ msgstr "允許提示音效" msgid "Filament Tangle Detect" msgstr "" +msgid "Nozzle Clumping Detection" +msgstr "" + +msgid "Check if the nozzle is clumping by filament or other foreign objects." +msgstr "" + msgid "Nozzle Type" msgstr "" @@ -5956,17 +6003,23 @@ msgstr "正在匯入模型" msgid "prepare 3mf file..." msgstr "正在準備 3mf 檔案..." +msgid "Download failed, unknown file format." +msgstr "" + msgid "downloading project ..." msgstr "專案項目下載中..." +msgid "Download failed, File size exception." +msgstr "" + #, fuzzy, c-format, boost-format msgid "Project downloaded %d%%" msgstr "專案項目已下載 %d%%" msgid "" -"Importing to Orca Slicer failed. Please download the file and manually " +"Importing to Bambu Studio failed. Please download the file and manually " "import it." -msgstr "匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" +msgstr "" msgid "Import SLA archive" msgstr "" @@ -6238,6 +6291,21 @@ msgstr "英製" msgid "Units" msgstr "單位" +msgid "Allow only one OrcaSlicer instance" +msgstr "" + +msgid "" +"On OSX there is always only one instance of app running by default. However " +"it is allowed to run multiple instances of same app from the command line. " +"In such case this settings will allow only one instance." +msgstr "" + +msgid "" +"If this is enabled, when starting OrcaSlicer and another instance of the " +"same OrcaSlicer is already running, that instance will be reactivated " +"instead." +msgstr "" + msgid "Home" msgstr "首頁" @@ -6313,6 +6381,14 @@ msgid "" "each printer automatically." msgstr "" +msgid "Multi-device Management(Take effect after restarting Studio)." +msgstr "" + +msgid "" +"With this option enabled, you can send a task to multiple devices at the " +"same time and manage multiple devices." +msgstr "" + msgid "Network" msgstr "" @@ -6974,6 +7050,9 @@ msgstr "使用微型雷射雷達進行自動流量校準" msgid "Modifying the device name" msgstr "修改列印設備名稱" +msgid "Bind with Pin Code" +msgstr "" + #, fuzzy msgid "Send to Printer SD card" msgstr "傳送到列印設備的 SD 記憶卡" @@ -7031,6 +7110,26 @@ msgstr "接收登入回覆逾時" msgid "Unknown Failure" msgstr "未知錯誤" +msgid "" +"Please Find the Pin Code in Account page on printer screen,\n" +" and type in the Pin Code below." +msgstr "" + +msgid "Can't find Pin Code?" +msgstr "" + +msgid "Pin Code" +msgstr "" + +msgid "Binding..." +msgstr "" + +msgid "Please confirm on the printer screen" +msgstr "" + +msgid "Log in failed. Please check the Pin Code." +msgstr "" + #, fuzzy msgid "Log in printer" msgstr "登入列印設備" @@ -7236,8 +7335,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add " -"Primitive\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add Primitive" +"\"->\"Timelapse Wipe Tower\"." msgstr "" "在錄製無工具頭縮時錄影影片時,建議增加“縮時錄影擦拭塔”\n" "右鍵單擊列印板的空白位置,選擇“新增標準模型”->“縮時錄影擦拭塔”。" @@ -7656,26 +7755,23 @@ msgstr "未定義" msgid "Unsaved Changes" msgstr "未儲存的更改" -msgid "Actions For Unsaved Changes" -msgstr "" +msgid "Transfer or discard changes" +msgstr "放棄或保留更改" -msgid "Preset Value" -msgstr "" +msgid "Old Value" +msgstr "舊值" -msgid "Modified Value" -msgstr "" +msgid "New Value" +msgstr "新值" -msgid "Transfer Modified Value" -msgstr "" +msgid "Transfer" +msgstr "遷移" msgid "Don't save" msgstr "不儲存" -msgid "Use Preset Value" -msgstr "" - -msgid "Save Modified Value" -msgstr "" +msgid "Discard" +msgstr "放棄" msgid "Click the right mouse button to display the full text." msgstr "單擊滑鼠右鍵顯示全文。" @@ -7733,28 +7829,22 @@ msgstr "" msgid "" "\n" -"Would you like to save these changed settings(modified value)?" +"You can save or discard the preset values you have modified." msgstr "" msgid "" "\n" -"Would you like to keep these changed settings(modified value) after " -"switching preset?" +"You can save or discard the preset values you have modified, or choose to " +"transfer the values you have modified to the new preset." msgstr "" -msgid "" -"You have previously modified your settings and are about to overwrite them " -"with new ones." +msgid "You have previously modified your settings." msgstr "" msgid "" "\n" -"Do you want to keep your current modified settings, or use preset settings?" -msgstr "" - -msgid "" -"\n" -"Do you want to save your current modified settings?" +"You can discard the preset values you have modified, or choose to transfer " +"the modified values to the new project" msgstr "" msgid "Extruders count" @@ -7774,9 +7864,6 @@ msgstr "顯示所有預設(包括不相容的)" msgid "Select presets to compare" msgstr "選擇要比較的預設" -msgid "Transfer" -msgstr "遷移" - msgid "" "You can only transfer to current active profile because it has been modified." msgstr "" @@ -8287,6 +8374,39 @@ msgstr "完成" msgid "resume" msgstr "" +msgid "Resume Printing" +msgstr "" + +msgid "Resume Printing(defects acceptable)" +msgstr "" + +msgid "Resume Printing(problem solved)" +msgstr "" + +msgid "Stop Printing" +msgstr "" + +msgid "Check Assistant" +msgstr "" + +msgid "Filament Extruded, Continue" +msgstr "" + +msgid "Not Extruded Yet, Retry" +msgstr "" + +msgid "Finished, Continue" +msgstr "" + +msgid "Load Filament" +msgstr "進料" + +msgid "Filament Loaded, Resume" +msgstr "" + +msgid "View Liveview" +msgstr "" + msgid "Confirm and Update Nozzle" msgstr "" @@ -10314,6 +10434,9 @@ msgstr "支撐立方體" msgid "Lightning" msgstr "閃電" +msgid "Cross Hatch" +msgstr "" + msgid "Sparse infill anchor length" msgstr "稀疏填充錨線長度" @@ -10496,10 +10619,10 @@ msgstr "滿速風扇在" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer " -"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " -"than \"close_fan_the_first_x_layers\", in which case the fan will be running " -"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" +"\". \"full_fan_speed_layer\" will be ignored if lower than " +"\"close_fan_the_first_x_layers\", in which case the fan will be running at " +"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "風扇速度將從“禁用第一層”的零線性上升到“全風扇速度層”的最大。如果低於“禁用風扇" "第一層”,則“全風扇速度第一層”將被忽略,在這種情況下,風扇將在“禁用風扇第一" @@ -13127,6 +13250,9 @@ msgstr "已取消" msgid "load_obj: failed to parse" msgstr "載入物件:無法分析" +msgid "load mtl in obj: failed to parse" +msgstr "" + #, fuzzy msgid "The file contains polygons with more than 4 vertices." msgstr "該檔案包含頂點超過 4 個的多邊形。" @@ -13262,6 +13388,14 @@ msgstr "請選擇要校準的線材。" msgid "The input value size must be 3." msgstr "輸入值大小必須為 3。" +msgid "" +"This machine type can only hold 16 history results per nozzle. You can " +"delete the existing historical results and then start calibration. Or you " +"can continue the calibration, but you cannot create new calibration " +"historical results. \n" +"Do you still want to continue the calibration?" +msgstr "" + #, fuzzy msgid "Connecting to printer..." msgstr "正在連接列印設備..." @@ -13273,6 +13407,19 @@ msgstr "測試失敗的結果已被刪除。" msgid "Flow Dynamics Calibration result has been saved to the printer" msgstr "動態流量校準的結果已儲存至列印設備。" +#, c-format, boost-format +msgid "" +"There is already a historical calibration result with the same name: %s. " +"Only one of the results with the same name is saved. Are you sure you want " +"to override the historical result?" +msgstr "" + +#, c-format, boost-format +msgid "" +"This machine type can only hold %d history results per nozzle. This result " +"will not be saved." +msgstr "" + msgid "Internal Error" msgstr "內部錯誤" @@ -13554,9 +13701,6 @@ msgstr "將列印一份測試模型。在校準之前,請清理列印板並將 msgid "Printing Parameters" msgstr "列印參數" -msgid "- ℃" -msgstr "" - msgid "Plate Type" msgstr "熱床類型" @@ -13604,12 +13748,6 @@ msgstr "" msgid "Step value" msgstr "" -msgid "0.5" -msgstr "" - -msgid "0.005" -msgstr "" - #, fuzzy msgid "The nozzle diameter has been synchronized from the printer Settings" msgstr "噴嘴直徑已從列印設備設定中同步" @@ -13638,10 +13776,14 @@ msgstr "重整歷史流量動態校準記錄" msgid "Action" msgstr "操作" +#, c-format, boost-format +msgid "This machine type can only hold %d history results per nozzle." +msgstr "" + msgid "Edit Flow Dynamics Calibration" msgstr "編輯動態流量校準" -msgid "New Flow Dynamics Calibration" +msgid "New Flow Dynamic Calibration" msgstr "" msgid "Ok" @@ -13650,13 +13792,6 @@ msgstr "" msgid "The filament must be selected." msgstr "" -#, c-format, boost-format -msgid "" -"There is already a historical calibration result with the same name: %s. " -"Only one of the results with the same name is saved. Are you sure you want " -"to override the historical result?" -msgstr "" - msgid "Network lookup" msgstr "搜尋網路" @@ -14060,8 +14195,8 @@ msgid "" msgstr "" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you " -"selected\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you selected" +"\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" @@ -14609,6 +14744,175 @@ msgid "" "Error: \"%2%\"" msgstr "" +msgid "" +"It has a small layer height, and results in almost negligible layer lines " +"and high printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has lower speeds " +"and acceleration, and the sparse infill pattern is Gyroid. So, it results in " +"much higher printing quality, but a much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a slightly " +"bigger layer height, and results in almost negligible layer lines, and " +"slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer " +"height, and results in slightly visible layer lines, but shorter printing " +"time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"height, and results in almost invisible layer lines and higher printing " +"quality, but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost invisible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of 0.2 mm nozzle, it has a smaller layer " +"height, and results in minimal layer lines and higher printing quality, but " +"shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer " +"lines, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in minimal layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"It has a general layer height, and results in general layer lines and " +"printing quality. It is suitable for most general printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but slightly shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in less apparent layer lines and much higher printing " +"quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, lower speeds and acceleration, and the sparse infill pattern is " +"Gyroid. So, it results in almost negligible layer lines and much higher " +"printing quality, but much longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer " +"height, and results in almost negligible layer lines and longer printing " +"time." +msgstr "" + +msgid "" +"It has a big layer height, and results in apparent layer lines and ordinary " +"printing quality and printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has more wall loops " +"and a higher sparse infill density. So, it results in higher strength of the " +"prints, but more filament consumption and longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in more apparent layer lines and lower printing quality, " +"but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer " +"height, and results in much more apparent layer lines and much lower " +"printing quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and slight higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer " +"height, and results in less apparent layer lines and higher printing " +"quality, but longer printing time." +msgstr "" + +msgid "" +"It has a very big layer height, and results in very apparent layer lines, " +"low printing quality and general printing time." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer " +"height, and results in very apparent layer lines and much lower printing " +"quality, but shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a much bigger " +"layer height, and results in extremely apparent layer lines and much lower " +"printing quality, but much shorter printing time in some printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a slightly " +"smaller layer height, and results in slightly less but still apparent layer " +"lines and slightly higher printing quality, but longer printing time in some " +"printing cases." +msgstr "" + +msgid "" +"Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer " +"height, and results in less but still apparent layer lines and slightly " +"higher printing quality, but longer printing time in some printing cases." +msgstr "" + msgid "Connected to Obico successfully!" msgstr "" @@ -14980,6 +15284,22 @@ msgid "" "probability of warping." msgstr "" +#~ msgid "Unload Filament" +#~ msgstr "退料" + +#~ msgid "" +#~ "Choose an AMS slot then press \"Load\" or \"Unload\" button to " +#~ "automatically load or unload filiament." +#~ msgstr "選擇 1 個 AMS 槽位,然後點擊進料/退料按鈕以自動進料/退料。" + +#~ msgid "MainBoard" +#~ msgstr "主板" + +#~ msgid "" +#~ "Importing to Orca Slicer failed. Please download the file and manually " +#~ "import it." +#~ msgstr "匯入 Orca Slicer 失敗。 請下載該檔案並手動匯入。" + #~ msgid "active" #~ msgstr "活動的" @@ -15079,18 +15399,6 @@ msgstr "" #~ "will be exported." #~ msgstr "無法對模型網格執行布林運算。只有正面部分將被導出。" -#~ msgid "Transfer or discard changes" -#~ msgstr "放棄或保留更改" - -#~ msgid "Old Value" -#~ msgstr "舊值" - -#~ msgid "New Value" -#~ msgstr "新值" - -#~ msgid "Discard" -#~ msgstr "放棄" - #, boost-format #~ msgid "" #~ "You have changed some settings of preset \"%1%\". \n" diff --git a/resources/images/OrcaSlicer.svg b/resources/images/OrcaSlicer.svg index 66324266e9..f8d677c555 100644 --- a/resources/images/OrcaSlicer.svg +++ b/resources/images/OrcaSlicer.svg @@ -1,137 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/OrcaSlicer_192px_grayscale.png b/resources/images/OrcaSlicer_192px_grayscale.png index b8d04439ad..9570a16be6 100644 Binary files a/resources/images/OrcaSlicer_192px_grayscale.png and b/resources/images/OrcaSlicer_192px_grayscale.png differ diff --git a/resources/images/add.svg b/resources/images/add.svg index 37050d7481..351f830b6c 100644 --- a/resources/images/add.svg +++ b/resources/images/add.svg @@ -1,22 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/add_copies.svg b/resources/images/add_copies.svg index 7eb75471ef..a491ba51e5 100644 --- a/resources/images/add_copies.svg +++ b/resources/images/add_copies.svg @@ -1,19 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/add_filament.svg b/resources/images/add_filament.svg index 01e567c89a..47fd58c02b 100644 --- a/resources/images/add_filament.svg +++ b/resources/images/add_filament.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/add_text_modifier.svg b/resources/images/add_text_modifier.svg index d79499eff8..efb21d9257 100644 --- a/resources/images/add_text_modifier.svg +++ b/resources/images/add_text_modifier.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/add_text_negative.svg b/resources/images/add_text_negative.svg index 2cf4456925..a59209746b 100644 --- a/resources/images/add_text_negative.svg +++ b/resources/images/add_text_negative.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/add_text_part.svg b/resources/images/add_text_part.svg index c4972e6cbe..d36ff970cd 100644 --- a/resources/images/add_text_part.svg +++ b/resources/images/add_text_part.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/advanced.svg b/resources/images/advanced.svg index 591e82ff2d..561a15b303 100644 --- a/resources/images/advanced.svg +++ b/resources/images/advanced.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/align_horizontal_center.svg b/resources/images/align_horizontal_center.svg index a91ab70ac6..3f67d2682f 100644 --- a/resources/images/align_horizontal_center.svg +++ b/resources/images/align_horizontal_center.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_horizontal_left.svg b/resources/images/align_horizontal_left.svg index fc72e75cf0..aeee375a42 100644 --- a/resources/images/align_horizontal_left.svg +++ b/resources/images/align_horizontal_left.svg @@ -1,7 +1 @@ - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/align_horizontal_right.svg b/resources/images/align_horizontal_right.svg index 2e83ee635a..e558465943 100644 --- a/resources/images/align_horizontal_right.svg +++ b/resources/images/align_horizontal_right.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_vertical_bottom.svg b/resources/images/align_vertical_bottom.svg index 9f65196ed7..7f3d90e686 100644 --- a/resources/images/align_vertical_bottom.svg +++ b/resources/images/align_vertical_bottom.svg @@ -1,60 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_vertical_center.svg b/resources/images/align_vertical_center.svg index 348c08a981..0b173d5eb8 100644 --- a/resources/images/align_vertical_center.svg +++ b/resources/images/align_vertical_center.svg @@ -1,60 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/align_vertical_top.svg b/resources/images/align_vertical_top.svg index 0bcb4b9e0b..c6812edd93 100644 --- a/resources/images/align_vertical_top.svg +++ b/resources/images/align_vertical_top.svg @@ -1,60 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_arrow.svg b/resources/images/ams_arrow.svg index 6c317fbdc7..f5c39a6388 100644 --- a/resources/images/ams_arrow.svg +++ b/resources/images/ams_arrow.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/ams_editable.svg b/resources/images/ams_editable.svg index a75941f4ab..ef79670fd6 100644 --- a/resources/images/ams_editable.svg +++ b/resources/images/ams_editable.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/ams_editable_light.svg b/resources/images/ams_editable_light.svg index ca0d37646e..ef79670fd6 100644 --- a/resources/images/ams_editable_light.svg +++ b/resources/images/ams_editable_light.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/ams_fila_sync.svg b/resources/images/ams_fila_sync.svg index 407aa53197..eb6452e894 100644 --- a/resources/images/ams_fila_sync.svg +++ b/resources/images/ams_fila_sync.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_0.svg b/resources/images/ams_humidity_0.svg index d438d503a9..8e6ebdcb92 100644 --- a/resources/images/ams_humidity_0.svg +++ b/resources/images/ams_humidity_0.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_1.svg b/resources/images/ams_humidity_1.svg index caabcbdbe1..e94d718e52 100644 --- a/resources/images/ams_humidity_1.svg +++ b/resources/images/ams_humidity_1.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_2.svg b/resources/images/ams_humidity_2.svg index 817c9ba5a3..d3f6e01349 100644 --- a/resources/images/ams_humidity_2.svg +++ b/resources/images/ams_humidity_2.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_3.svg b/resources/images/ams_humidity_3.svg index 4b11064e0c..fa193ebd33 100644 --- a/resources/images/ams_humidity_3.svg +++ b/resources/images/ams_humidity_3.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_4.svg b/resources/images/ams_humidity_4.svg index c317b1658c..ae76dc32e8 100644 --- a/resources/images/ams_humidity_4.svg +++ b/resources/images/ams_humidity_4.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_humidity_tips.svg b/resources/images/ams_humidity_tips.svg index cbafcbab22..336c4475c6 100644 --- a/resources/images/ams_humidity_tips.svg +++ b/resources/images/ams_humidity_tips.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_setting_hover.svg b/resources/images/ams_setting_hover.svg index 36625b7e4d..956316a9de 100644 --- a/resources/images/ams_setting_hover.svg +++ b/resources/images/ams_setting_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/ams_setting_normal.svg b/resources/images/ams_setting_normal.svg index 41836434ca..cc1b89e219 100644 --- a/resources/images/ams_setting_normal.svg +++ b/resources/images/ams_setting_normal.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/ams_setting_press.svg b/resources/images/ams_setting_press.svg index 123325ec39..b7ec40359e 100644 --- a/resources/images/ams_setting_press.svg +++ b/resources/images/ams_setting_press.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/assemble_return.svg b/resources/images/assemble_return.svg index ae6dda44df..314757070e 100644 --- a/resources/images/assemble_return.svg +++ b/resources/images/assemble_return.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/automatic_material_renewal.svg b/resources/images/automatic_material_renewal.svg index 7cc2ef0afc..eec2034555 100644 --- a/resources/images/automatic_material_renewal.svg +++ b/resources/images/automatic_material_renewal.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/auxiliary_cover.svg b/resources/images/auxiliary_cover.svg index 66522b2ffd..b37fff7842 100644 --- a/resources/images/auxiliary_cover.svg +++ b/resources/images/auxiliary_cover.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/auxiliary_delete.svg b/resources/images/auxiliary_delete.svg index 73af09389a..3246500218 100644 --- a/resources/images/auxiliary_delete.svg +++ b/resources/images/auxiliary_delete.svg @@ -1,9 +1 @@ - - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/bar_publish.svg b/resources/images/bar_publish.svg index 51e5cb2d24..91cb386dd2 100644 --- a/resources/images/bar_publish.svg +++ b/resources/images/bar_publish.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/bind_device_ping_code.svg b/resources/images/bind_device_ping_code.svg new file mode 100644 index 0000000000..5c1ff4742d --- /dev/null +++ b/resources/images/bind_device_ping_code.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/images/bind_machine.svg b/resources/images/bind_machine.svg index 047741ea9a..a67e4fc0db 100644 --- a/resources/images/bind_machine.svg +++ b/resources/images/bind_machine.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/block_notification_close.svg b/resources/images/block_notification_close.svg index a55fe49f7c..c3c11a829a 100644 --- a/resources/images/block_notification_close.svg +++ b/resources/images/block_notification_close.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/block_notification_close_hover.svg b/resources/images/block_notification_close_hover.svg index afb1dc2a7d..c3c11a829a 100644 --- a/resources/images/block_notification_close_hover.svg +++ b/resources/images/block_notification_close_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/block_notification_error.svg b/resources/images/block_notification_error.svg index 902027fae7..172b9e4cee 100644 --- a/resources/images/block_notification_error.svg +++ b/resources/images/block_notification_error.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/browse.svg b/resources/images/browse.svg index c4297c41da..4d0d582572 100644 --- a/resources/images/browse.svg +++ b/resources/images/browse.svg @@ -1,11 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/burn.svg b/resources/images/burn.svg index 685999cd14..4d89b3657d 100644 --- a/resources/images/burn.svg +++ b/resources/images/burn.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cali_page_caption_help.svg b/resources/images/cali_page_caption_help.svg index 70babeb017..d05b27b1c8 100644 --- a/resources/images/cali_page_caption_help.svg +++ b/resources/images/cali_page_caption_help.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cali_page_caption_help_hover.svg b/resources/images/cali_page_caption_help_hover.svg index 70babeb017..d05b27b1c8 100644 --- a/resources/images/cali_page_caption_help_hover.svg +++ b/resources/images/cali_page_caption_help_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/calib_sf.svg b/resources/images/calib_sf.svg index 54f08c2f2c..42efab7ce6 100644 --- a/resources/images/calib_sf.svg +++ b/resources/images/calib_sf.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/calib_sf_inactive.svg b/resources/images/calib_sf_inactive.svg index 31a8351a7c..7e5d9ac581 100644 --- a/resources/images/calib_sf_inactive.svg +++ b/resources/images/calib_sf_inactive.svg @@ -1,17 +1 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/camera_setting.svg b/resources/images/camera_setting.svg index 3b276aa227..0549b1b47a 100644 --- a/resources/images/camera_setting.svg +++ b/resources/images/camera_setting.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/camera_setting_hover.svg b/resources/images/camera_setting_hover.svg index 9ab6dcfacc..e7c06f8d2d 100644 --- a/resources/images/camera_setting_hover.svg +++ b/resources/images/camera_setting_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/camera_switch.svg b/resources/images/camera_switch.svg index be8cf27a09..271e38f8ed 100644 --- a/resources/images/camera_switch.svg +++ b/resources/images/camera_switch.svg @@ -1,76 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/camera_switch_dark.svg b/resources/images/camera_switch_dark.svg index 5c40b35d14..fbc1159ab5 100644 --- a/resources/images/camera_switch_dark.svg +++ b/resources/images/camera_switch_dark.svg @@ -1,76 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/check_half.svg b/resources/images/check_half.svg index bc99d2d0d1..78560b1072 100644 --- a/resources/images/check_half.svg +++ b/resources/images/check_half.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_half_disabled.svg b/resources/images/check_half_disabled.svg index 1e6fb24d7b..a0b23696bb 100644 --- a/resources/images/check_half_disabled.svg +++ b/resources/images/check_half_disabled.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_half_focused.svg b/resources/images/check_half_focused.svg index 517bb7acbc..1faea57461 100644 --- a/resources/images/check_half_focused.svg +++ b/resources/images/check_half_focused.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_off.svg b/resources/images/check_off.svg index cf58fbc94c..b56c4abc24 100644 --- a/resources/images/check_off.svg +++ b/resources/images/check_off.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/check_off_disabled.svg b/resources/images/check_off_disabled.svg index 8653c1f7bb..d4c14ca6d0 100644 --- a/resources/images/check_off_disabled.svg +++ b/resources/images/check_off_disabled.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/check_off_focused.svg b/resources/images/check_off_focused.svg index 474375d84e..39fdb07e63 100644 --- a/resources/images/check_off_focused.svg +++ b/resources/images/check_off_focused.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/check_on.svg b/resources/images/check_on.svg index 029abf8510..43ef314cd3 100644 --- a/resources/images/check_on.svg +++ b/resources/images/check_on.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_on_disabled.svg b/resources/images/check_on_disabled.svg index dfd917fb30..5ed3987438 100644 --- a/resources/images/check_on_disabled.svg +++ b/resources/images/check_on_disabled.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/check_on_focused.svg b/resources/images/check_on_focused.svg index 3c1c56c7c4..1b93469bf4 100644 --- a/resources/images/check_on_focused.svg +++ b/resources/images/check_on_focused.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/checked.svg b/resources/images/checked.svg index 88747cb95d..6fed74863a 100644 --- a/resources/images/checked.svg +++ b/resources/images/checked.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/circle_paint.svg b/resources/images/circle_paint.svg index 9472a10cb8..a5a49689fb 100644 --- a/resources/images/circle_paint.svg +++ b/resources/images/circle_paint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/circle_paint_dark.svg b/resources/images/circle_paint_dark.svg index d96f4ed4be..923ba593bd 100644 --- a/resources/images/circle_paint_dark.svg +++ b/resources/images/circle_paint_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/cog.svg b/resources/images/cog.svg index e7866313b5..aa70d6c043 100644 --- a/resources/images/cog.svg +++ b/resources/images/cog.svg @@ -1,12 +1 @@ - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/collapse.svg b/resources/images/collapse.svg index eb4c8e47cf..d27721b74b 100644 --- a/resources/images/collapse.svg +++ b/resources/images/collapse.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/compare.svg b/resources/images/compare.svg index 6dbef6ecbf..17f1c9ff41 100644 --- a/resources/images/compare.svg +++ b/resources/images/compare.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/completed.svg b/resources/images/completed.svg index 902100da24..9b2a0f862c 100644 --- a/resources/images/completed.svg +++ b/resources/images/completed.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/confirm.svg b/resources/images/confirm.svg index 1351d3b6f5..0f38b061bb 100644 --- a/resources/images/confirm.svg +++ b/resources/images/confirm.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/confirm_dark.svg b/resources/images/confirm_dark.svg index 1351d3b6f5..0f38b061bb 100644 --- a/resources/images/confirm_dark.svg +++ b/resources/images/confirm_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/copy_menu.svg b/resources/images/copy_menu.svg index 23e0bfeb2a..231d471e9d 100644 --- a/resources/images/copy_menu.svg +++ b/resources/images/copy_menu.svg @@ -1,37 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/copy_menu_dark.svg b/resources/images/copy_menu_dark.svg index eaee113a1b..f2c3965b40 100644 --- a/resources/images/copy_menu_dark.svg +++ b/resources/images/copy_menu_dark.svg @@ -1,37 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/create_success.svg b/resources/images/create_success.svg index d49d396125..9b2a0f862c 100644 --- a/resources/images/create_success.svg +++ b/resources/images/create_success.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/cross.svg b/resources/images/cross.svg index 4d832a5887..2e36702da2 100644 --- a/resources/images/cross.svg +++ b/resources/images/cross.svg @@ -1,8 +1 @@ - - - - - Slice 41 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/cross_focus.svg b/resources/images/cross_focus.svg index 2efebf2110..efd434b13f 100644 --- a/resources/images/cross_focus.svg +++ b/resources/images/cross_focus.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cross_focus_large.svg b/resources/images/cross_focus_large.svg index 49316ef6ea..efd434b13f 100644 --- a/resources/images/cross_focus_large.svg +++ b/resources/images/cross_focus_large.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/custom-gcode_advanced.svg b/resources/images/custom-gcode_advanced.svg new file mode 100644 index 0000000000..561a15b303 --- /dev/null +++ b/resources/images/custom-gcode_advanced.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_cooling_fan.svg b/resources/images/custom-gcode_cooling_fan.svg new file mode 100644 index 0000000000..98ef8fedb2 --- /dev/null +++ b/resources/images/custom-gcode_cooling_fan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_extruder.svg b/resources/images/custom-gcode_extruder.svg new file mode 100644 index 0000000000..d55852897f --- /dev/null +++ b/resources/images/custom-gcode_extruder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_filament.svg b/resources/images/custom-gcode_filament.svg new file mode 100644 index 0000000000..9facb665a5 --- /dev/null +++ b/resources/images/custom-gcode_filament.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_gcode.svg b/resources/images/custom-gcode_gcode.svg index 38bcd21729..af90e3cd20 100644 --- a/resources/images/custom-gcode_gcode.svg +++ b/resources/images/custom-gcode_gcode.svg @@ -1,2 +1 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_measure.svg b/resources/images/custom-gcode_measure.svg index 3c13dd7cc7..0436e83b3e 100644 --- a/resources/images/custom-gcode_measure.svg +++ b/resources/images/custom-gcode_measure.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_motion.svg b/resources/images/custom-gcode_motion.svg new file mode 100644 index 0000000000..260f65ab26 --- /dev/null +++ b/resources/images/custom-gcode_motion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_multi_material.svg b/resources/images/custom-gcode_multi_material.svg new file mode 100644 index 0000000000..bc6cf03f0e --- /dev/null +++ b/resources/images/custom-gcode_multi_material.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_note.svg b/resources/images/custom-gcode_note.svg new file mode 100644 index 0000000000..fd8ef09117 --- /dev/null +++ b/resources/images/custom-gcode_note.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_object-info.svg b/resources/images/custom-gcode_object-info.svg index 2c24bdc8a2..2605321f45 100644 --- a/resources/images/custom-gcode_object-info.svg +++ b/resources/images/custom-gcode_object-info.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_other.svg b/resources/images/custom-gcode_other.svg new file mode 100644 index 0000000000..f2510eacda --- /dev/null +++ b/resources/images/custom-gcode_other.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_quality.svg b/resources/images/custom-gcode_quality.svg new file mode 100644 index 0000000000..e4ff3f1da9 --- /dev/null +++ b/resources/images/custom-gcode_quality.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_setting_override.svg b/resources/images/custom-gcode_setting_override.svg new file mode 100644 index 0000000000..ce66aa93d3 --- /dev/null +++ b/resources/images/custom-gcode_setting_override.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_single.svg b/resources/images/custom-gcode_single.svg index d177860bc9..26a5123d82 100644 --- a/resources/images/custom-gcode_single.svg +++ b/resources/images/custom-gcode_single.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_slicing-state.svg b/resources/images/custom-gcode_slicing-state.svg index 4b4bef6ecf..8e0548235f 100644 --- a/resources/images/custom-gcode_slicing-state.svg +++ b/resources/images/custom-gcode_slicing-state.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_slicing-state_global.svg b/resources/images/custom-gcode_slicing-state_global.svg index 7f4e685a1b..d1189a99b2 100644 --- a/resources/images/custom-gcode_slicing-state_global.svg +++ b/resources/images/custom-gcode_slicing-state_global.svg @@ -1,3 +1 @@ - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_speed.svg b/resources/images/custom-gcode_speed.svg new file mode 100644 index 0000000000..8f2a00f896 --- /dev/null +++ b/resources/images/custom-gcode_speed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_stats.svg b/resources/images/custom-gcode_stats.svg index 96dfe8decf..538bdf19c9 100644 --- a/resources/images/custom-gcode_stats.svg +++ b/resources/images/custom-gcode_stats.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_strength.svg b/resources/images/custom-gcode_strength.svg new file mode 100644 index 0000000000..0f1e7996d1 --- /dev/null +++ b/resources/images/custom-gcode_strength.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_support.svg b/resources/images/custom-gcode_support.svg new file mode 100644 index 0000000000..f53dd207fb --- /dev/null +++ b/resources/images/custom-gcode_support.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_temperature.svg b/resources/images/custom-gcode_temperature.svg index d14cd1a31c..19fa2fa52b 100644 --- a/resources/images/custom-gcode_temperature.svg +++ b/resources/images/custom-gcode_temperature.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/custom-gcode_time.svg b/resources/images/custom-gcode_time.svg new file mode 100644 index 0000000000..be3d415343 --- /dev/null +++ b/resources/images/custom-gcode_time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/custom-gcode_vector-index.svg b/resources/images/custom-gcode_vector-index.svg index 68aef590bb..105ebfd2e3 100644 --- a/resources/images/custom-gcode_vector-index.svg +++ b/resources/images/custom-gcode_vector-index.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/custom-gcode_vector.svg b/resources/images/custom-gcode_vector.svg index 396f0e7b82..e1a23694ca 100644 --- a/resources/images/custom-gcode_vector.svg +++ b/resources/images/custom-gcode_vector.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/cut_.svg b/resources/images/cut_.svg index 23de6f381b..7486f83d36 100644 --- a/resources/images/cut_.svg +++ b/resources/images/cut_.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cut_circle.svg b/resources/images/cut_circle.svg new file mode 100644 index 0000000000..a222aaa834 --- /dev/null +++ b/resources/images/cut_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_circle_dark.svg b/resources/images/cut_circle_dark.svg new file mode 100644 index 0000000000..0acbcf4c3c --- /dev/null +++ b/resources/images/cut_circle_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_connectors.svg b/resources/images/cut_connectors.svg index 053b163bf7..324aa987c5 100644 --- a/resources/images/cut_connectors.svg +++ b/resources/images/cut_connectors.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/cut_hexagon.svg b/resources/images/cut_hexagon.svg new file mode 100644 index 0000000000..282ce14ea3 --- /dev/null +++ b/resources/images/cut_hexagon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_hexagon_dark.svg b/resources/images/cut_hexagon_dark.svg new file mode 100644 index 0000000000..1ee6d0bc6e --- /dev/null +++ b/resources/images/cut_hexagon_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_square.svg b/resources/images/cut_square.svg new file mode 100644 index 0000000000..7eb72c74ac --- /dev/null +++ b/resources/images/cut_square.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_square_dark.svg b/resources/images/cut_square_dark.svg new file mode 100644 index 0000000000..fbf7cc9aa4 --- /dev/null +++ b/resources/images/cut_square_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_triangle.svg b/resources/images/cut_triangle.svg new file mode 100644 index 0000000000..ac03ed05ce --- /dev/null +++ b/resources/images/cut_triangle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/cut_triangle_dark.svg b/resources/images/cut_triangle_dark.svg new file mode 100644 index 0000000000..a29569c6a2 --- /dev/null +++ b/resources/images/cut_triangle_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/debugtool.svg b/resources/images/debugtool.svg index b234f59879..e9fd011d73 100644 --- a/resources/images/debugtool.svg +++ b/resources/images/debugtool.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/degree.svg b/resources/images/degree.svg index 188d57a53e..269d737c3f 100644 --- a/resources/images/degree.svg +++ b/resources/images/degree.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/delete.svg b/resources/images/delete.svg index 91d56e91d1..2e36702da2 100644 --- a/resources/images/delete.svg +++ b/resources/images/delete.svg @@ -1,22 +1 @@ - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/delete_filament.svg b/resources/images/delete_filament.svg index 07c60793d7..9cfbe4813e 100644 --- a/resources/images/delete_filament.svg +++ b/resources/images/delete_filament.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/drop_down.svg b/resources/images/drop_down.svg index 7b6cc0eb7e..bdb34d71d9 100644 --- a/resources/images/drop_down.svg +++ b/resources/images/drop_down.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/edit.svg b/resources/images/edit.svg index 9766302c70..6c2de1d980 100644 --- a/resources/images/edit.svg +++ b/resources/images/edit.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/edit_button.svg b/resources/images/edit_button.svg index 2d298f5661..6c2de1d980 100644 --- a/resources/images/edit_button.svg +++ b/resources/images/edit_button.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/enable_ams.svg b/resources/images/enable_ams.svg index d28b7004bd..6a238c6e31 100644 --- a/resources/images/enable_ams.svg +++ b/resources/images/enable_ams.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/equal.svg b/resources/images/equal.svg index bce4a24f7c..de2000d61b 100644 --- a/resources/images/equal.svg +++ b/resources/images/equal.svg @@ -1,15 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/exclamation.svg b/resources/images/exclamation.svg index 5a5b631a46..4721d1f39d 100644 --- a/resources/images/exclamation.svg +++ b/resources/images/exclamation.svg @@ -1,17 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/fan_control_add.svg b/resources/images/fan_control_add.svg index 19d9e41cce..5d33dd8e83 100644 --- a/resources/images/fan_control_add.svg +++ b/resources/images/fan_control_add.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/fan_control_decrease.svg b/resources/images/fan_control_decrease.svg index 7a68c36d11..d5935c53a3 100644 --- a/resources/images/fan_control_decrease.svg +++ b/resources/images/fan_control_decrease.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/fan_icon.svg b/resources/images/fan_icon.svg index 67a6071952..f149580bed 100644 --- a/resources/images/fan_icon.svg +++ b/resources/images/fan_icon.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/filament.svg b/resources/images/filament.svg index 8a2fb06bd2..a5fe1d0155 100644 --- a/resources/images/filament.svg +++ b/resources/images/filament.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/fill_paint.svg b/resources/images/fill_paint.svg index 584cdc4ec9..4c3c2cc874 100644 --- a/resources/images/fill_paint.svg +++ b/resources/images/fill_paint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/fill_paint_dark.svg b/resources/images/fill_paint_dark.svg index 6e8e76f6c4..df9333b62c 100644 --- a/resources/images/fill_paint_dark.svg +++ b/resources/images/fill_paint_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/flush_volumes.svg b/resources/images/flush_volumes.svg index 4db16f937b..8b5ef4ba0b 100644 --- a/resources/images/flush_volumes.svg +++ b/resources/images/flush_volumes.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/gap_fill.svg b/resources/images/gap_fill.svg index ed78455cab..87436c9e2b 100644 --- a/resources/images/gap_fill.svg +++ b/resources/images/gap_fill.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/gap_fill_dark.svg b/resources/images/gap_fill_dark.svg index 09e898ce8b..d17c639d41 100644 --- a/resources/images/gap_fill_dark.svg +++ b/resources/images/gap_fill_dark.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/height_range.svg b/resources/images/height_range.svg index 0f5d5539d3..01e7659a89 100644 --- a/resources/images/height_range.svg +++ b/resources/images/height_range.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/height_range_dark.svg b/resources/images/height_range_dark.svg index 5b352af377..397def9eba 100644 --- a/resources/images/height_range_dark.svg +++ b/resources/images/height_range_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/height_range_layer.svg b/resources/images/height_range_layer.svg new file mode 100644 index 0000000000..ee44d86a23 --- /dev/null +++ b/resources/images/height_range_layer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/height_range_modifier.svg b/resources/images/height_range_modifier.svg new file mode 100644 index 0000000000..698f6f2bd8 --- /dev/null +++ b/resources/images/height_range_modifier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/hms_notify_lv1.svg b/resources/images/hms_notify_lv1.svg index 3c030c381f..f4e086b38b 100644 --- a/resources/images/hms_notify_lv1.svg +++ b/resources/images/hms_notify_lv1.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/hms_notify_lv2.svg b/resources/images/hms_notify_lv2.svg index bc02fb1a8a..fa356713bd 100644 --- a/resources/images/hms_notify_lv2.svg +++ b/resources/images/hms_notify_lv2.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/hms_notify_lv3.svg b/resources/images/hms_notify_lv3.svg index dced1688be..7001b8aef3 100644 --- a/resources/images/hms_notify_lv3.svg +++ b/resources/images/hms_notify_lv3.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/im_all_plates_stats.svg b/resources/images/im_all_plates_stats.svg index 26d7f97c21..711b59ee02 100644 --- a/resources/images/im_all_plates_stats.svg +++ b/resources/images/im_all_plates_stats.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/im_all_plates_stats_transparent.svg b/resources/images/im_all_plates_stats_transparent.svg index c52a4cb079..8254696754 100644 --- a/resources/images/im_all_plates_stats_transparent.svg +++ b/resources/images/im_all_plates_stats_transparent.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/im_fold.svg b/resources/images/im_fold.svg index 7eb9100a83..f4f3286dd4 100644 --- a/resources/images/im_fold.svg +++ b/resources/images/im_fold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/im_gcode_custom.svg b/resources/images/im_gcode_custom.svg index a844eb2542..e5e975fa3e 100644 --- a/resources/images/im_gcode_custom.svg +++ b/resources/images/im_gcode_custom.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/im_gcode_pause.svg b/resources/images/im_gcode_pause.svg index dd87f0c11c..51d3c06135 100644 --- a/resources/images/im_gcode_pause.svg +++ b/resources/images/im_gcode_pause.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/im_slider_delete.svg b/resources/images/im_slider_delete.svg index 2b4e2430b7..ecc41f6b98 100644 --- a/resources/images/im_slider_delete.svg +++ b/resources/images/im_slider_delete.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/im_text_search.svg b/resources/images/im_text_search.svg index 64abb3d222..4d0d582572 100644 --- a/resources/images/im_text_search.svg +++ b/resources/images/im_text_search.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/im_text_search_close.svg b/resources/images/im_text_search_close.svg index 86133d1566..e0936e64ee 100644 --- a/resources/images/im_text_search_close.svg +++ b/resources/images/im_text_search_close.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/im_unfold.svg b/resources/images/im_unfold.svg index fd45960665..45bcec6fbb 100644 --- a/resources/images/im_unfold.svg +++ b/resources/images/im_unfold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/info.svg b/resources/images/info.svg index 276b260610..cc052410d2 100644 --- a/resources/images/info.svg +++ b/resources/images/info.svg @@ -1,71 +1 @@ - -image/svg+xml - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/link_wiki_img.svg b/resources/images/link_wiki_img.svg index ef913c5db9..a8f049f67e 100644 --- a/resources/images/link_wiki_img.svg +++ b/resources/images/link_wiki_img.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/lock_closed.svg b/resources/images/lock_closed.svg index 549cdba239..ba2bf7b4a2 100644 --- a/resources/images/lock_closed.svg +++ b/resources/images/lock_closed.svg @@ -1,10 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/lock_closed_f.svg b/resources/images/lock_closed_f.svg index 2920ea0aae..ba2bf7b4a2 100644 --- a/resources/images/lock_closed_f.svg +++ b/resources/images/lock_closed_f.svg @@ -1,10 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/lock_hover.svg b/resources/images/lock_hover.svg index 4b3cb164a0..b25ba1cfdc 100644 --- a/resources/images/lock_hover.svg +++ b/resources/images/lock_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/lock_normal.svg b/resources/images/lock_normal.svg index 6fc1038221..e585aba3f6 100644 --- a/resources/images/lock_normal.svg +++ b/resources/images/lock_normal.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/lock_open.svg b/resources/images/lock_open.svg index 3f0da9ae09..12f4202746 100644 --- a/resources/images/lock_open.svg +++ b/resources/images/lock_open.svg @@ -1,11 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/lock_open_f.svg b/resources/images/lock_open_f.svg index 3d12d78746..12f4202746 100644 --- a/resources/images/lock_open_f.svg +++ b/resources/images/lock_open_f.svg @@ -1,11 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/machine_obejct_type.svg b/resources/images/machine_obejct_type.svg index 4cb57152e1..6eb6cd8186 100644 --- a/resources/images/machine_obejct_type.svg +++ b/resources/images/machine_obejct_type.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/machine_object_owner.svg b/resources/images/machine_object_owner.svg index e803f131a1..976ca31874 100644 --- a/resources/images/machine_object_owner.svg +++ b/resources/images/machine_object_owner.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/machine_object_printing.svg b/resources/images/machine_object_printing.svg index 32aa1d569c..3ba1ff2dde 100644 --- a/resources/images/machine_object_printing.svg +++ b/resources/images/machine_object_printing.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/make_bold.svg b/resources/images/make_bold.svg index 1c39a3d23f..a0d961cdca 100644 --- a/resources/images/make_bold.svg +++ b/resources/images/make_bold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/make_italic.svg b/resources/images/make_italic.svg index 5c128e6302..61b1a0881f 100644 --- a/resources/images/make_italic.svg +++ b/resources/images/make_italic.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/make_unbold.svg b/resources/images/make_unbold.svg index 7a99cc227f..57b60f20fa 100644 --- a/resources/images/make_unbold.svg +++ b/resources/images/make_unbold.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/make_unitalic.svg b/resources/images/make_unitalic.svg index f3c4d90685..ba77e68172 100644 --- a/resources/images/make_unitalic.svg +++ b/resources/images/make_unitalic.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/measure_edit.svg b/resources/images/measure_edit.svg new file mode 100644 index 0000000000..7f622b2cc4 --- /dev/null +++ b/resources/images/measure_edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/media_empty.svg b/resources/images/media_empty.svg index aa040502a3..be2e2ab5a4 100644 --- a/resources/images/media_empty.svg +++ b/resources/images/media_empty.svg @@ -1,18 +1 @@ - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/media_failed.svg b/resources/images/media_failed.svg index 83dd7a7923..f9dc13a7df 100644 --- a/resources/images/media_failed.svg +++ b/resources/images/media_failed.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/media_play.svg b/resources/images/media_play.svg index 20c2ae551e..17bc0ae699 100644 --- a/resources/images/media_play.svg +++ b/resources/images/media_play.svg @@ -1,5 +1 @@ - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/media_stop.svg b/resources/images/media_stop.svg index eef22c1d4a..0f130d0918 100644 --- a/resources/images/media_stop.svg +++ b/resources/images/media_stop.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_add_modifier.svg b/resources/images/menu_add_modifier.svg index f95bbb3ee7..7b7aa198a3 100644 --- a/resources/images/menu_add_modifier.svg +++ b/resources/images/menu_add_modifier.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/menu_add_negative.svg b/resources/images/menu_add_negative.svg index 8e2ef36eec..c12e0b3650 100644 --- a/resources/images/menu_add_negative.svg +++ b/resources/images/menu_add_negative.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/menu_add_part.svg b/resources/images/menu_add_part.svg index edff8942f3..37726f79fa 100644 --- a/resources/images/menu_add_part.svg +++ b/resources/images/menu_add_part.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/menu_copy.svg b/resources/images/menu_copy.svg index 1f09490f1a..39c95f933a 100644 --- a/resources/images/menu_copy.svg +++ b/resources/images/menu_copy.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_cut.svg b/resources/images/menu_cut.svg index 1f09490f1a..31e96ba9db 100644 --- a/resources/images/menu_cut.svg +++ b/resources/images/menu_cut.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_delete.svg b/resources/images/menu_delete.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_delete.svg +++ b/resources/images/menu_delete.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_edit_preset.svg b/resources/images/menu_edit_preset.svg index 1f09490f1a..1f6f7d95d9 100644 --- a/resources/images/menu_edit_preset.svg +++ b/resources/images/menu_edit_preset.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_exit.svg b/resources/images/menu_exit.svg index 1f09490f1a..eba35dc391 100644 --- a/resources/images/menu_exit.svg +++ b/resources/images/menu_exit.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_config.svg b/resources/images/menu_export_config.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_config.svg +++ b/resources/images/menu_export_config.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_gcode.svg b/resources/images/menu_export_gcode.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_gcode.svg +++ b/resources/images/menu_export_gcode.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_sliced_file.svg b/resources/images/menu_export_sliced_file.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_sliced_file.svg +++ b/resources/images/menu_export_sliced_file.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_export_stl.svg b/resources/images/menu_export_stl.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_export_stl.svg +++ b/resources/images/menu_export_stl.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_fuzzy_skin.svg b/resources/images/menu_fuzzy_skin.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_fuzzy_skin.svg +++ b/resources/images/menu_fuzzy_skin.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_import.svg b/resources/images/menu_import.svg index 1f09490f1a..41eb1cfafc 100644 --- a/resources/images/menu_import.svg +++ b/resources/images/menu_import.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_load.svg b/resources/images/menu_load.svg new file mode 100644 index 0000000000..219caf1f89 --- /dev/null +++ b/resources/images/menu_load.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_mirror_x.svg b/resources/images/menu_mirror_x.svg new file mode 100644 index 0000000000..4a94013895 --- /dev/null +++ b/resources/images/menu_mirror_x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_mirror_y.svg b/resources/images/menu_mirror_y.svg new file mode 100644 index 0000000000..55d357df6f --- /dev/null +++ b/resources/images/menu_mirror_y.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_mirror_z.svg b/resources/images/menu_mirror_z.svg new file mode 100644 index 0000000000..f4ff82ae28 --- /dev/null +++ b/resources/images/menu_mirror_z.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_cone.svg b/resources/images/menu_obj_cone.svg new file mode 100644 index 0000000000..c7cb1d40f5 --- /dev/null +++ b/resources/images/menu_obj_cone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_cube.svg b/resources/images/menu_obj_cube.svg new file mode 100644 index 0000000000..f5ca71f76c --- /dev/null +++ b/resources/images/menu_obj_cube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_cylinder.svg b/resources/images/menu_obj_cylinder.svg new file mode 100644 index 0000000000..3f6e90713f --- /dev/null +++ b/resources/images/menu_obj_cylinder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_disc.svg b/resources/images/menu_obj_disc.svg new file mode 100644 index 0000000000..57ecc7faca --- /dev/null +++ b/resources/images/menu_obj_disc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_sphere.svg b/resources/images/menu_obj_sphere.svg new file mode 100644 index 0000000000..6c517af9ad --- /dev/null +++ b/resources/images/menu_obj_sphere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_svg.svg b/resources/images/menu_obj_svg.svg new file mode 100644 index 0000000000..039ac65d94 --- /dev/null +++ b/resources/images/menu_obj_svg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_text.svg b/resources/images/menu_obj_text.svg new file mode 100644 index 0000000000..48661b30ff --- /dev/null +++ b/resources/images/menu_obj_text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_obj_torus.svg b/resources/images/menu_obj_torus.svg new file mode 100644 index 0000000000..ddf636711a --- /dev/null +++ b/resources/images/menu_obj_torus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_open.svg b/resources/images/menu_open.svg index 1f09490f1a..7168576ca8 100644 --- a/resources/images/menu_open.svg +++ b/resources/images/menu_open.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_paste.svg b/resources/images/menu_paste.svg index 1f09490f1a..8546fb08a6 100644 --- a/resources/images/menu_paste.svg +++ b/resources/images/menu_paste.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_redo.svg b/resources/images/menu_redo.svg index 1f09490f1a..eaa46dc7b7 100644 --- a/resources/images/menu_redo.svg +++ b/resources/images/menu_redo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_remove.svg b/resources/images/menu_remove.svg index 1f09490f1a..f4d2651a11 100644 --- a/resources/images/menu_remove.svg +++ b/resources/images/menu_remove.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_save.svg b/resources/images/menu_save.svg index 1f09490f1a..3aea4e1e9d 100644 --- a/resources/images/menu_save.svg +++ b/resources/images/menu_save.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/menu_split_objects.svg b/resources/images/menu_split_objects.svg new file mode 100644 index 0000000000..8c5cdbc207 --- /dev/null +++ b/resources/images/menu_split_objects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_split_parts.svg b/resources/images/menu_split_parts.svg new file mode 100644 index 0000000000..cdc11e865a --- /dev/null +++ b/resources/images/menu_split_parts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/menu_support_blocker.svg b/resources/images/menu_support_blocker.svg index fd7c16ea27..1f20929a57 100644 --- a/resources/images/menu_support_blocker.svg +++ b/resources/images/menu_support_blocker.svg @@ -1,22 +1 @@ - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/menu_support_enforcer.svg b/resources/images/menu_support_enforcer.svg index 4ef28d62a3..df0baee799 100644 --- a/resources/images/menu_support_enforcer.svg +++ b/resources/images/menu_support_enforcer.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/menu_undo.svg b/resources/images/menu_undo.svg index 1f09490f1a..27226a299e 100644 --- a/resources/images/menu_undo.svg +++ b/resources/images/menu_undo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/mesh_boolean_a.svg b/resources/images/mesh_boolean_a.svg new file mode 100644 index 0000000000..d4f1977d27 --- /dev/null +++ b/resources/images/mesh_boolean_a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_b.svg b/resources/images/mesh_boolean_b.svg new file mode 100644 index 0000000000..d59ea608f6 --- /dev/null +++ b/resources/images/mesh_boolean_b.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_difference.svg b/resources/images/mesh_boolean_difference.svg new file mode 100644 index 0000000000..986af31cef --- /dev/null +++ b/resources/images/mesh_boolean_difference.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_difference_dark.svg b/resources/images/mesh_boolean_difference_dark.svg new file mode 100644 index 0000000000..cee940c3b5 --- /dev/null +++ b/resources/images/mesh_boolean_difference_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_intersection.svg b/resources/images/mesh_boolean_intersection.svg new file mode 100644 index 0000000000..52ac3014ef --- /dev/null +++ b/resources/images/mesh_boolean_intersection.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_intersection_dark.svg b/resources/images/mesh_boolean_intersection_dark.svg new file mode 100644 index 0000000000..9d232122fa --- /dev/null +++ b/resources/images/mesh_boolean_intersection_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_keep.svg b/resources/images/mesh_boolean_keep.svg new file mode 100644 index 0000000000..1315f87895 --- /dev/null +++ b/resources/images/mesh_boolean_keep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_subtract.svg b/resources/images/mesh_boolean_subtract.svg new file mode 100644 index 0000000000..6d068c807b --- /dev/null +++ b/resources/images/mesh_boolean_subtract.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_union.svg b/resources/images/mesh_boolean_union.svg new file mode 100644 index 0000000000..c300d0cf92 --- /dev/null +++ b/resources/images/mesh_boolean_union.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mesh_boolean_union_dark.svg b/resources/images/mesh_boolean_union_dark.svg new file mode 100644 index 0000000000..b05e71adb4 --- /dev/null +++ b/resources/images/mesh_boolean_union_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/mmu_segmentation.svg b/resources/images/mmu_segmentation.svg index 68796acd21..f9aed32360 100644 --- a/resources/images/mmu_segmentation.svg +++ b/resources/images/mmu_segmentation.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/mmu_segmentation_dark.svg b/resources/images/mmu_segmentation_dark.svg index 58798d62ec..9d36df8e68 100644 --- a/resources/images/mmu_segmentation_dark.svg +++ b/resources/images/mmu_segmentation_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/model_time.svg b/resources/images/model_time.svg index 0808f4545d..18b52e8532 100644 --- a/resources/images/model_time.svg +++ b/resources/images/model_time.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/model_weight.svg b/resources/images/model_weight.svg index 31417e6569..54f93efbd7 100644 --- a/resources/images/model_weight.svg +++ b/resources/images/model_weight.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_axis_home.svg b/resources/images/monitor_axis_home.svg index fcc1854fdc..bcfb80d812 100644 --- a/resources/images/monitor_axis_home.svg +++ b/resources/images/monitor_axis_home.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_axis_home_icon.svg b/resources/images/monitor_axis_home_icon.svg index a8baa9f09e..bcfb80d812 100644 --- a/resources/images/monitor_axis_home_icon.svg +++ b/resources/images/monitor_axis_home_icon.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_down.svg b/resources/images/monitor_bed_down.svg index 25869ee644..73a04a74a5 100644 --- a/resources/images/monitor_bed_down.svg +++ b/resources/images/monitor_bed_down.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_down_disable.svg b/resources/images/monitor_bed_down_disable.svg index 2551512d0a..01d1d1345f 100644 --- a/resources/images/monitor_bed_down_disable.svg +++ b/resources/images/monitor_bed_down_disable.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_temp.svg b/resources/images/monitor_bed_temp.svg index 919b543d23..67017deedc 100644 --- a/resources/images/monitor_bed_temp.svg +++ b/resources/images/monitor_bed_temp.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_temp_active.svg b/resources/images/monitor_bed_temp_active.svg index caee244e9e..6970ad84c3 100644 --- a/resources/images/monitor_bed_temp_active.svg +++ b/resources/images/monitor_bed_temp_active.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_up.svg b/resources/images/monitor_bed_up.svg index 2ef6e06bf0..dec6384a60 100644 --- a/resources/images/monitor_bed_up.svg +++ b/resources/images/monitor_bed_up.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_bed_up_disable.svg b/resources/images/monitor_bed_up_disable.svg index 4e69a78c3c..b20668b4c2 100644 --- a/resources/images/monitor_bed_up_disable.svg +++ b/resources/images/monitor_bed_up_disable.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_camera.svg b/resources/images/monitor_camera.svg index 97136e8f37..158565e32e 100644 --- a/resources/images/monitor_camera.svg +++ b/resources/images/monitor_camera.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_extrduer_down.svg b/resources/images/monitor_extrduer_down.svg index e7bf0df7a6..a43c65a3ae 100644 --- a/resources/images/monitor_extrduer_down.svg +++ b/resources/images/monitor_extrduer_down.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_extrduer_down_disable.svg b/resources/images/monitor_extrduer_down_disable.svg index 80beaf8126..e1f38bf2bf 100644 --- a/resources/images/monitor_extrduer_down_disable.svg +++ b/resources/images/monitor_extrduer_down_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_extruder_up.svg b/resources/images/monitor_extruder_up.svg index a36d1db160..79b45d4ed6 100644 --- a/resources/images/monitor_extruder_up.svg +++ b/resources/images/monitor_extruder_up.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_extruder_up_disable.svg b/resources/images/monitor_extruder_up_disable.svg index ba1be74c07..dd898555dc 100644 --- a/resources/images/monitor_extruder_up_disable.svg +++ b/resources/images/monitor_extruder_up_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_fan.svg b/resources/images/monitor_fan.svg index 0fc12daf18..f149580bed 100644 --- a/resources/images/monitor_fan.svg +++ b/resources/images/monitor_fan.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_fan_off.svg b/resources/images/monitor_fan_off.svg index 4c492f0abe..56da537f6e 100644 --- a/resources/images/monitor_fan_off.svg +++ b/resources/images/monitor_fan_off.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_fan_on.svg b/resources/images/monitor_fan_on.svg index a44f5ff420..dfc955f5d7 100644 --- a/resources/images/monitor_fan_on.svg +++ b/resources/images/monitor_fan_on.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_frame_temp.svg b/resources/images/monitor_frame_temp.svg index 87740af172..dd9ece5406 100644 --- a/resources/images/monitor_frame_temp.svg +++ b/resources/images/monitor_frame_temp.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_frame_temp_active.svg b/resources/images/monitor_frame_temp_active.svg index 920345fc83..5c3031b6ce 100644 --- a/resources/images/monitor_frame_temp_active.svg +++ b/resources/images/monitor_frame_temp_active.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_item_cost.svg b/resources/images/monitor_item_cost.svg index ed69e068a7..0d5ba62d98 100644 --- a/resources/images/monitor_item_cost.svg +++ b/resources/images/monitor_item_cost.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_item_prediction.svg b/resources/images/monitor_item_prediction.svg index 34056c482a..2d3693b314 100644 --- a/resources/images/monitor_item_prediction.svg +++ b/resources/images/monitor_item_prediction.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_item_print.svg b/resources/images/monitor_item_print.svg index efad4aaf6d..11ef669010 100644 --- a/resources/images/monitor_item_print.svg +++ b/resources/images/monitor_item_print.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_lamp_off.svg b/resources/images/monitor_lamp_off.svg index 2a8e4af627..9611b8d078 100644 --- a/resources/images/monitor_lamp_off.svg +++ b/resources/images/monitor_lamp_off.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_lamp_on.svg b/resources/images/monitor_lamp_on.svg index cc6f32dcf5..99c3964d67 100644 --- a/resources/images/monitor_lamp_on.svg +++ b/resources/images/monitor_lamp_on.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_none_add.svg b/resources/images/monitor_none_add.svg index bd3e1ebec1..c2aa3f14e2 100644 --- a/resources/images/monitor_none_add.svg +++ b/resources/images/monitor_none_add.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_none_arrow.svg b/resources/images/monitor_none_arrow.svg index 370d007364..8f3bade771 100644 --- a/resources/images/monitor_none_arrow.svg +++ b/resources/images/monitor_none_arrow.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_none_printer.svg b/resources/images/monitor_none_printer.svg index 3cae57af74..7acdd954db 100644 --- a/resources/images/monitor_none_printer.svg +++ b/resources/images/monitor_none_printer.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_nozzle_temp.svg b/resources/images/monitor_nozzle_temp.svg index 4fee482f97..47bcb6541a 100644 --- a/resources/images/monitor_nozzle_temp.svg +++ b/resources/images/monitor_nozzle_temp.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_nozzle_temp_active.svg b/resources/images/monitor_nozzle_temp_active.svg index 78679c2a84..99acbc231e 100644 --- a/resources/images/monitor_nozzle_temp_active.svg +++ b/resources/images/monitor_nozzle_temp_active.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_play.svg b/resources/images/monitor_play.svg index c94e39d67e..144efc21b3 100644 --- a/resources/images/monitor_play.svg +++ b/resources/images/monitor_play.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_printer.svg b/resources/images/monitor_printer.svg index d896d09d24..750693bd7a 100644 --- a/resources/images/monitor_printer.svg +++ b/resources/images/monitor_printer.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_off.svg b/resources/images/monitor_recording_off.svg index c45f93e9a6..ee2ccdccce 100644 --- a/resources/images/monitor_recording_off.svg +++ b/resources/images/monitor_recording_off.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_off_dark.svg b/resources/images/monitor_recording_off_dark.svg index 520dd1bdb1..ee2ccdccce 100644 --- a/resources/images/monitor_recording_off_dark.svg +++ b/resources/images/monitor_recording_off_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_on.svg b/resources/images/monitor_recording_on.svg index 4bccded8bd..e07c4f31a4 100644 --- a/resources/images/monitor_recording_on.svg +++ b/resources/images/monitor_recording_on.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_recording_on_dark.svg b/resources/images/monitor_recording_on_dark.svg index cc0b3ec16f..e07c4f31a4 100644 --- a/resources/images/monitor_recording_on_dark.svg +++ b/resources/images/monitor_recording_on_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_middle.svg b/resources/images/monitor_signal_middle.svg index 31ee0a15a2..8b864c53e0 100644 --- a/resources/images/monitor_signal_middle.svg +++ b/resources/images/monitor_signal_middle.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_no.svg b/resources/images/monitor_signal_no.svg index f4ed816748..9daf9350b5 100644 --- a/resources/images/monitor_signal_no.svg +++ b/resources/images/monitor_signal_no.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_strong.svg b/resources/images/monitor_signal_strong.svg index 52f5532b2f..74214e6c0e 100644 --- a/resources/images/monitor_signal_strong.svg +++ b/resources/images/monitor_signal_strong.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_signal_weak.svg b/resources/images/monitor_signal_weak.svg index a41171b01d..1923f2381b 100644 --- a/resources/images/monitor_signal_weak.svg +++ b/resources/images/monitor_signal_weak.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_speed.svg b/resources/images/monitor_speed.svg index 48164768ee..95ec1195d1 100644 --- a/resources/images/monitor_speed.svg +++ b/resources/images/monitor_speed.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_speed_active.svg b/resources/images/monitor_speed_active.svg index f8e7e68639..bb332f16b6 100644 --- a/resources/images/monitor_speed_active.svg +++ b/resources/images/monitor_speed_active.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_state_on.svg b/resources/images/monitor_state_on.svg index 04ff497ba4..7d3e222c81 100644 --- a/resources/images/monitor_state_on.svg +++ b/resources/images/monitor_state_on.svg @@ -1,10 +1 @@ - - - - Layer 1 - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/monitor_tasklist_print.svg b/resources/images/monitor_tasklist_print.svg index f2b6b4cd3e..235fccf830 100644 --- a/resources/images/monitor_tasklist_print.svg +++ b/resources/images/monitor_tasklist_print.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_tasklist_time.svg b/resources/images/monitor_tasklist_time.svg index 437532d18f..be3d415343 100644 --- a/resources/images/monitor_tasklist_time.svg +++ b/resources/images/monitor_tasklist_time.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/monitor_tasklist_weight.svg b/resources/images/monitor_tasklist_weight.svg index 7ffd2a051b..1eb07b7f5f 100644 --- a/resources/images/monitor_tasklist_weight.svg +++ b/resources/images/monitor_tasklist_weight.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_off.svg b/resources/images/monitor_timelapse_off.svg index 103a97f3fc..88cde143fc 100644 --- a/resources/images/monitor_timelapse_off.svg +++ b/resources/images/monitor_timelapse_off.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_off_dark.svg b/resources/images/monitor_timelapse_off_dark.svg index 19785321b1..9a971114bd 100644 --- a/resources/images/monitor_timelapse_off_dark.svg +++ b/resources/images/monitor_timelapse_off_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_on.svg b/resources/images/monitor_timelapse_on.svg index ca46179f76..2f67ca720c 100644 --- a/resources/images/monitor_timelapse_on.svg +++ b/resources/images/monitor_timelapse_on.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_timelapse_on_dark.svg b/resources/images/monitor_timelapse_on_dark.svg index 63ab2297c2..2f67ca720c 100644 --- a/resources/images/monitor_timelapse_on_dark.svg +++ b/resources/images/monitor_timelapse_on_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_upgrade_busy.svg b/resources/images/monitor_upgrade_busy.svg index 70c185dcf1..b3395c2280 100644 --- a/resources/images/monitor_upgrade_busy.svg +++ b/resources/images/monitor_upgrade_busy.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_upgrade_offline.svg b/resources/images/monitor_upgrade_offline.svg index d40878488f..c1dd2a9f8e 100644 --- a/resources/images/monitor_upgrade_offline.svg +++ b/resources/images/monitor_upgrade_offline.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_upgrade_online.svg b/resources/images/monitor_upgrade_online.svg index a37e784ee3..3a903a5ebb 100644 --- a/resources/images/monitor_upgrade_online.svg +++ b/resources/images/monitor_upgrade_online.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_off.svg b/resources/images/monitor_vcamera_off.svg index edbcc92370..17227bf7b3 100644 --- a/resources/images/monitor_vcamera_off.svg +++ b/resources/images/monitor_vcamera_off.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_off_dark.svg b/resources/images/monitor_vcamera_off_dark.svg index 8ed58c9da9..c8f073676a 100644 --- a/resources/images/monitor_vcamera_off_dark.svg +++ b/resources/images/monitor_vcamera_off_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_on.svg b/resources/images/monitor_vcamera_on.svg index b26c3f10cf..0c4b97c109 100644 --- a/resources/images/monitor_vcamera_on.svg +++ b/resources/images/monitor_vcamera_on.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/monitor_vcamera_on_dark.svg b/resources/images/monitor_vcamera_on_dark.svg index 1c829d6554..0c4b97c109 100644 --- a/resources/images/monitor_vcamera_on_dark.svg +++ b/resources/images/monitor_vcamera_on_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/node_dot.svg b/resources/images/node_dot.svg index 474142a57f..3443df3d36 100644 --- a/resources/images/node_dot.svg +++ b/resources/images/node_dot.svg @@ -1,8 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/not_equal.svg b/resources/images/not_equal.svg index bc88144353..4cc2cfd099 100644 --- a/resources/images/not_equal.svg +++ b/resources/images/not_equal.svg @@ -1,16 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/note.svg b/resources/images/note.svg index b02fc4b9bf..0ee879f842 100644 --- a/resources/images/note.svg +++ b/resources/images/note.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_arrow_left.svg b/resources/images/notification_arrow_left.svg index f4b4616c18..e1291d1249 100644 --- a/resources/images/notification_arrow_left.svg +++ b/resources/images/notification_arrow_left.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_arrow_open.svg b/resources/images/notification_arrow_open.svg index 7ae92e27ba..4f8798980e 100644 --- a/resources/images/notification_arrow_open.svg +++ b/resources/images/notification_arrow_open.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_arrow_right.svg b/resources/images/notification_arrow_right.svg index c6784277e3..332a16a93b 100644 --- a/resources/images/notification_arrow_right.svg +++ b/resources/images/notification_arrow_right.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_cancel.svg b/resources/images/notification_cancel.svg index 1430bc492e..2156625def 100644 --- a/resources/images/notification_cancel.svg +++ b/resources/images/notification_cancel.svg @@ -1,19 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_cancel_hover.svg b/resources/images/notification_cancel_hover.svg index a7ac9d15f5..2a19e06f7a 100644 --- a/resources/images/notification_cancel_hover.svg +++ b/resources/images/notification_cancel_hover.svg @@ -1,16 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close.svg b/resources/images/notification_close.svg index ef94f19b96..12142fa9f9 100644 --- a/resources/images/notification_close.svg +++ b/resources/images/notification_close.svg @@ -1,14 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close_dark.svg b/resources/images/notification_close_dark.svg index ab0dd789e5..81926cb405 100644 --- a/resources/images/notification_close_dark.svg +++ b/resources/images/notification_close_dark.svg @@ -1,14 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close_hover.svg b/resources/images/notification_close_hover.svg index ea5b7d8b58..7717605678 100644 --- a/resources/images/notification_close_hover.svg +++ b/resources/images/notification_close_hover.svg @@ -1,13 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_close_hover_dark.svg b/resources/images/notification_close_hover_dark.svg index 68c49e8a3a..b4fa2f66bc 100644 --- a/resources/images/notification_close_hover_dark.svg +++ b/resources/images/notification_close_hover_dark.svg @@ -1,13 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_collapse.svg b/resources/images/notification_collapse.svg index 9f569d093f..02b182476d 100644 --- a/resources/images/notification_collapse.svg +++ b/resources/images/notification_collapse.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation.svg b/resources/images/notification_documentation.svg index abfcf0c838..b0c5658124 100644 --- a/resources/images/notification_documentation.svg +++ b/resources/images/notification_documentation.svg @@ -1,42 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation_dark.svg b/resources/images/notification_documentation_dark.svg index 7528a061f2..691f09f326 100644 --- a/resources/images/notification_documentation_dark.svg +++ b/resources/images/notification_documentation_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation_hover.svg b/resources/images/notification_documentation_hover.svg index 146747db0a..7a2c3447eb 100644 --- a/resources/images/notification_documentation_hover.svg +++ b/resources/images/notification_documentation_hover.svg @@ -1,40 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_documentation_hover_dark.svg b/resources/images/notification_documentation_hover_dark.svg index 6913787cb7..03fb6d745d 100644 --- a/resources/images/notification_documentation_hover_dark.svg +++ b/resources/images/notification_documentation_hover_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_eject_sd.svg b/resources/images/notification_eject_sd.svg index 692c50d03b..a7635e63c2 100644 --- a/resources/images/notification_eject_sd.svg +++ b/resources/images/notification_eject_sd.svg @@ -1 +1 @@ -notification_eject_sd \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_eject_sd_hover.svg b/resources/images/notification_eject_sd_hover.svg index d41e03f097..07d60f7dd3 100644 --- a/resources/images/notification_eject_sd_hover.svg +++ b/resources/images/notification_eject_sd_hover.svg @@ -1 +1 @@ -notification_eject_sd_hover \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_expand.svg b/resources/images/notification_expand.svg index 91ac2a55bd..303cecab38 100644 --- a/resources/images/notification_expand.svg +++ b/resources/images/notification_expand.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize.svg b/resources/images/notification_minimalize.svg index 955006e497..0b1d7dd284 100644 --- a/resources/images/notification_minimalize.svg +++ b/resources/images/notification_minimalize.svg @@ -1,9 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize_dark.svg b/resources/images/notification_minimalize_dark.svg index 1eb4bc2ea3..3345ac845f 100644 --- a/resources/images/notification_minimalize_dark.svg +++ b/resources/images/notification_minimalize_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize_hover.svg b/resources/images/notification_minimalize_hover.svg index 2f11e46f86..4eefb7f721 100644 --- a/resources/images/notification_minimalize_hover.svg +++ b/resources/images/notification_minimalize_hover.svg @@ -1,10 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_minimalize_hover_dark.svg b/resources/images/notification_minimalize_hover_dark.svg index 85899b8ffc..c81e9674a4 100644 --- a/resources/images/notification_minimalize_hover_dark.svg +++ b/resources/images/notification_minimalize_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences.svg b/resources/images/notification_preferences.svg index 454150dd29..fdc9e4a026 100644 --- a/resources/images/notification_preferences.svg +++ b/resources/images/notification_preferences.svg @@ -1,15 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences_dark.svg b/resources/images/notification_preferences_dark.svg index fcc65bad35..946f564f84 100644 --- a/resources/images/notification_preferences_dark.svg +++ b/resources/images/notification_preferences_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences_hover.svg b/resources/images/notification_preferences_hover.svg index fbfa5299f1..38aadaa1b4 100644 --- a/resources/images/notification_preferences_hover.svg +++ b/resources/images/notification_preferences_hover.svg @@ -1,15 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/notification_preferences_hover_dark.svg b/resources/images/notification_preferences_hover_dark.svg index 4a98b5bc07..a080eec4d4 100644 --- a/resources/images/notification_preferences_hover_dark.svg +++ b/resources/images/notification_preferences_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_right.svg b/resources/images/notification_right.svg index bc8ae57529..c18967b013 100644 --- a/resources/images/notification_right.svg +++ b/resources/images/notification_right.svg @@ -1 +1 @@ -1234214 \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_right_dark.svg b/resources/images/notification_right_dark.svg index eedaf36a64..2f62855ed9 100644 --- a/resources/images/notification_right_dark.svg +++ b/resources/images/notification_right_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_right_hover.svg b/resources/images/notification_right_hover.svg index 4bfe4bd607..0a238990e2 100644 --- a/resources/images/notification_right_hover.svg +++ b/resources/images/notification_right_hover.svg @@ -1 +1 @@ -123124 \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/notification_right_hover_dark.svg b/resources/images/notification_right_hover_dark.svg index da98eebc7c..da60e06158 100644 --- a/resources/images/notification_right_hover_dark.svg +++ b/resources/images/notification_right_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/notification_slicing_complete.svg b/resources/images/notification_slicing_complete.svg index da677939a5..4f98e485f8 100644 --- a/resources/images/notification_slicing_complete.svg +++ b/resources/images/notification_slicing_complete.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/obj_warning.svg b/resources/images/obj_warning.svg index b1ba3828f6..239e6b7256 100644 --- a/resources/images/obj_warning.svg +++ b/resources/images/obj_warning.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/objlist_color_painting.svg b/resources/images/objlist_color_painting.svg new file mode 100644 index 0000000000..fc454ed063 --- /dev/null +++ b/resources/images/objlist_color_painting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/objlist_seam_painting.svg b/resources/images/objlist_seam_painting.svg new file mode 100644 index 0000000000..1e360cddac --- /dev/null +++ b/resources/images/objlist_seam_painting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/objlist_sinking.svg b/resources/images/objlist_sinking.svg index fbdd2822aa..d8f0e78284 100644 --- a/resources/images/objlist_sinking.svg +++ b/resources/images/objlist_sinking.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/objlist_support_painting.svg b/resources/images/objlist_support_painting.svg new file mode 100644 index 0000000000..e952fc3f52 --- /dev/null +++ b/resources/images/objlist_support_painting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/one_layer_off.svg b/resources/images/one_layer_off.svg index 0f6feb84f1..9667fc203d 100644 --- a/resources/images/one_layer_off.svg +++ b/resources/images/one_layer_off.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_off_dark.svg b/resources/images/one_layer_off_dark.svg index c0be9191fe..ad6ac73fbc 100644 --- a/resources/images/one_layer_off_dark.svg +++ b/resources/images/one_layer_off_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_off_hover.svg b/resources/images/one_layer_off_hover.svg index bd8fed7121..ff85085667 100644 --- a/resources/images/one_layer_off_hover.svg +++ b/resources/images/one_layer_off_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_off_hover_dark.svg b/resources/images/one_layer_off_hover_dark.svg index 1f50980c16..ca124cbe53 100644 --- a/resources/images/one_layer_off_hover_dark.svg +++ b/resources/images/one_layer_off_hover_dark.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on.svg b/resources/images/one_layer_on.svg index 2c0677d2db..16a9c502d2 100644 --- a/resources/images/one_layer_on.svg +++ b/resources/images/one_layer_on.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on_dark.svg b/resources/images/one_layer_on_dark.svg index dd2dfb216b..023525640b 100644 --- a/resources/images/one_layer_on_dark.svg +++ b/resources/images/one_layer_on_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on_hover.svg b/resources/images/one_layer_on_hover.svg index bbbeeaebda..86402d70c2 100644 --- a/resources/images/one_layer_on_hover.svg +++ b/resources/images/one_layer_on_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/one_layer_on_hover_dark.svg b/resources/images/one_layer_on_hover_dark.svg index c5c9776371..d2c310bc96 100644 --- a/resources/images/one_layer_on_hover_dark.svg +++ b/resources/images/one_layer_on_hover_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/open.svg b/resources/images/open.svg index 5c7fa81be3..466eace4d3 100644 --- a/resources/images/open.svg +++ b/resources/images/open.svg @@ -1,11 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_3dhoneycomb.svg b/resources/images/param_3dhoneycomb.svg index 9d2b94182b..779ab3c047 100644 --- a/resources/images/param_3dhoneycomb.svg +++ b/resources/images/param_3dhoneycomb.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_acceleration.svg b/resources/images/param_acceleration.svg index ef9858a206..8e42c6be40 100644 --- a/resources/images/param_acceleration.svg +++ b/resources/images/param_acceleration.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_accessory.svg b/resources/images/param_accessory.svg new file mode 100644 index 0000000000..4ff05ce15e --- /dev/null +++ b/resources/images/param_accessory.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_adaptive_mesh.svg b/resources/images/param_adaptive_mesh.svg new file mode 100644 index 0000000000..6b9884e76b --- /dev/null +++ b/resources/images/param_adaptive_mesh.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_adaptivecubic.svg b/resources/images/param_adaptivecubic.svg index 7490ca81bd..2f0b51b05f 100644 --- a/resources/images/param_adaptivecubic.svg +++ b/resources/images/param_adaptivecubic.svg @@ -1,30 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_adhension.svg b/resources/images/param_adhension.svg index d9578b441f..c8baa303d5 100644 --- a/resources/images/param_adhension.svg +++ b/resources/images/param_adhension.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/param_advanced.svg b/resources/images/param_advanced.svg index 238c2424c3..86d13f71a7 100644 --- a/resources/images/param_advanced.svg +++ b/resources/images/param_advanced.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_alignedrectilinear.svg b/resources/images/param_alignedrectilinear.svg index 3e29d271a4..f988bb75a5 100644 --- a/resources/images/param_alignedrectilinear.svg +++ b/resources/images/param_alignedrectilinear.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_archimedeanchords.svg b/resources/images/param_archimedeanchords.svg index 80d6539166..44a8ec3944 100644 --- a/resources/images/param_archimedeanchords.svg +++ b/resources/images/param_archimedeanchords.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_bed_temp.svg b/resources/images/param_bed_temp.svg new file mode 100644 index 0000000000..74af1d256f --- /dev/null +++ b/resources/images/param_bed_temp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_bridge.svg b/resources/images/param_bridge.svg new file mode 100644 index 0000000000..54b4d47077 --- /dev/null +++ b/resources/images/param_bridge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_chamber_temp.svg b/resources/images/param_chamber_temp.svg index 919b543d23..729b469138 100644 --- a/resources/images/param_chamber_temp.svg +++ b/resources/images/param_chamber_temp.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/param_concentric.svg b/resources/images/param_concentric.svg index 47062df636..c449e08a81 100644 --- a/resources/images/param_concentric.svg +++ b/resources/images/param_concentric.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_cooling.svg b/resources/images/param_cooling.svg index 5903299939..6e8afe772b 100644 --- a/resources/images/param_cooling.svg +++ b/resources/images/param_cooling.svg @@ -1,17 +1 @@ - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_cooling_aux_fan.svg b/resources/images/param_cooling_aux_fan.svg new file mode 100644 index 0000000000..a566224cc4 --- /dev/null +++ b/resources/images/param_cooling_aux_fan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cooling_exhaust.svg b/resources/images/param_cooling_exhaust.svg new file mode 100644 index 0000000000..e0794e1a56 --- /dev/null +++ b/resources/images/param_cooling_exhaust.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cooling_fan.svg b/resources/images/param_cooling_fan.svg index 93f12898fd..10dfc1cc3e 100644 --- a/resources/images/param_cooling_fan.svg +++ b/resources/images/param_cooling_fan.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_cooling_part_fan.svg b/resources/images/param_cooling_part_fan.svg new file mode 100644 index 0000000000..693f26ed41 --- /dev/null +++ b/resources/images/param_cooling_part_fan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_cooling_specific_layer.svg b/resources/images/param_cooling_specific_layer.svg new file mode 100644 index 0000000000..945ba0d9a1 --- /dev/null +++ b/resources/images/param_cooling_specific_layer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_crosshatch.svg b/resources/images/param_crosshatch.svg new file mode 100644 index 0000000000..03a1f04a71 --- /dev/null +++ b/resources/images/param_crosshatch.svg @@ -0,0 +1,570 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/images/param_cubic.svg b/resources/images/param_cubic.svg index 344aeb1c89..1a237a73e0 100644 --- a/resources/images/param_cubic.svg +++ b/resources/images/param_cubic.svg @@ -1,30 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_default-pattern.svg b/resources/images/param_default-pattern.svg new file mode 100644 index 0000000000..0bbbc3e7e1 --- /dev/null +++ b/resources/images/param_default-pattern.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_clearence.svg b/resources/images/param_extruder_clearence.svg new file mode 100644 index 0000000000..d498632597 --- /dev/null +++ b/resources/images/param_extruder_clearence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_lift_enforcement.svg b/resources/images/param_extruder_lift_enforcement.svg new file mode 100644 index 0000000000..91cc530900 --- /dev/null +++ b/resources/images/param_extruder_lift_enforcement.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_size.svg b/resources/images/param_extruder_size.svg new file mode 100644 index 0000000000..3c76a7a16b --- /dev/null +++ b/resources/images/param_extruder_size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_extruder_temp.svg b/resources/images/param_extruder_temp.svg new file mode 100644 index 0000000000..841ae1569d --- /dev/null +++ b/resources/images/param_extruder_temp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_flush.svg b/resources/images/param_flush.svg index da24dceaad..09aeb37c5c 100644 --- a/resources/images/param_flush.svg +++ b/resources/images/param_flush.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_gcode.svg b/resources/images/param_gcode.svg index 98d51dd606..8c0de86e68 100644 --- a/resources/images/param_gcode.svg +++ b/resources/images/param_gcode.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_grid.svg b/resources/images/param_grid.svg index 5ef8475734..3663347402 100644 --- a/resources/images/param_grid.svg +++ b/resources/images/param_grid.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_gyroid.svg b/resources/images/param_gyroid.svg index fa42716efc..8c21b812be 100644 --- a/resources/images/param_gyroid.svg +++ b/resources/images/param_gyroid.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_hilbertcurve.svg b/resources/images/param_hilbertcurve.svg index f76ff649ea..df8aafe115 100644 --- a/resources/images/param_hilbertcurve.svg +++ b/resources/images/param_hilbertcurve.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_hollow.svg b/resources/images/param_hollow.svg index 01ddd94f28..f6300e3471 100644 --- a/resources/images/param_hollow.svg +++ b/resources/images/param_hollow.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_honeycomb.svg b/resources/images/param_honeycomb.svg index 9d2b94182b..7040cef46d 100644 --- a/resources/images/param_honeycomb.svg +++ b/resources/images/param_honeycomb.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_infill.svg b/resources/images/param_infill.svg index 37e050a41b..a257a8e218 100644 --- a/resources/images/param_infill.svg +++ b/resources/images/param_infill.svg @@ -1,29 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_information.svg b/resources/images/param_information.svg index 414402349a..2091517204 100644 --- a/resources/images/param_information.svg +++ b/resources/images/param_information.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_ironing.svg b/resources/images/param_ironing.svg index f486c79fd6..96925df0cc 100644 --- a/resources/images/param_ironing.svg +++ b/resources/images/param_ironing.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_jerk.svg b/resources/images/param_jerk.svg new file mode 100644 index 0000000000..da572c06a5 --- /dev/null +++ b/resources/images/param_jerk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_layer_height.svg b/resources/images/param_layer_height.svg index 5d1c630c95..73eb073e3c 100644 --- a/resources/images/param_layer_height.svg +++ b/resources/images/param_layer_height.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_lightning.svg b/resources/images/param_lightning.svg index 0385be4126..8471db84db 100644 --- a/resources/images/param_lightning.svg +++ b/resources/images/param_lightning.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_line.svg b/resources/images/param_line.svg index aed3393a87..d57f3b139d 100644 --- a/resources/images/param_line.svg +++ b/resources/images/param_line.svg @@ -1,22 +1 @@ - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_line_width.svg b/resources/images/param_line_width.svg index b747e8222c..c5d8c2409f 100644 --- a/resources/images/param_line_width.svg +++ b/resources/images/param_line_width.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_monotonic.svg b/resources/images/param_monotonic.svg index b959242708..9eb2cc96a0 100644 --- a/resources/images/param_monotonic.svg +++ b/resources/images/param_monotonic.svg @@ -1,21 +1 @@ - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_monotonicline.svg b/resources/images/param_monotonicline.svg index 0c9245e28a..2692e73c30 100644 --- a/resources/images/param_monotonicline.svg +++ b/resources/images/param_monotonicline.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_multi_material.svg b/resources/images/param_multi_material.svg new file mode 100644 index 0000000000..0505f6449d --- /dev/null +++ b/resources/images/param_multi_material.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_octagramspiral.svg b/resources/images/param_octagramspiral.svg index d4848698ba..6f3767cf03 100644 --- a/resources/images/param_octagramspiral.svg +++ b/resources/images/param_octagramspiral.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_overhang.svg b/resources/images/param_overhang.svg new file mode 100644 index 0000000000..9476b370d6 --- /dev/null +++ b/resources/images/param_overhang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_overhang_speed.svg b/resources/images/param_overhang_speed.svg new file mode 100644 index 0000000000..9c4cf47ad7 --- /dev/null +++ b/resources/images/param_overhang_speed.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_position.svg b/resources/images/param_position.svg new file mode 100644 index 0000000000..db243fe0b7 --- /dev/null +++ b/resources/images/param_position.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_precision.svg b/resources/images/param_precision.svg index 47f6ee8df6..ff4cdd3ccf 100644 --- a/resources/images/param_precision.svg +++ b/resources/images/param_precision.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_printable_space.svg b/resources/images/param_printable_space.svg new file mode 100644 index 0000000000..3d3f7a2a9d --- /dev/null +++ b/resources/images/param_printable_space.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_raft.svg b/resources/images/param_raft.svg index d58506d2ca..832fac58d7 100644 --- a/resources/images/param_raft.svg +++ b/resources/images/param_raft.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/param_rectilinear-grid.svg b/resources/images/param_rectilinear-grid.svg index c47cb2c822..0947c22248 100644 --- a/resources/images/param_rectilinear-grid.svg +++ b/resources/images/param_rectilinear-grid.svg @@ -1,20 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_rectilinear.svg b/resources/images/param_rectilinear.svg index 3e29d271a4..0c062058bc 100644 --- a/resources/images/param_rectilinear.svg +++ b/resources/images/param_rectilinear.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_rectilinear_interlaced.svg b/resources/images/param_rectilinear_interlaced.svg index 729cc3b84b..a5b95bdf28 100644 --- a/resources/images/param_rectilinear_interlaced.svg +++ b/resources/images/param_rectilinear_interlaced.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_retraction.svg b/resources/images/param_retraction.svg index e476286b02..4a56b35514 100644 --- a/resources/images/param_retraction.svg +++ b/resources/images/param_retraction.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/param_retraction_material_change.svg b/resources/images/param_retraction_material_change.svg new file mode 100644 index 0000000000..d557243282 --- /dev/null +++ b/resources/images/param_retraction_material_change.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_seam.svg b/resources/images/param_seam.svg index 6866f5b862..ec011d8df4 100644 --- a/resources/images/param_seam.svg +++ b/resources/images/param_seam.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/param_search.svg b/resources/images/param_search.svg new file mode 100644 index 0000000000..7bdca770f6 --- /dev/null +++ b/resources/images/param_search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_settings.svg b/resources/images/param_settings.svg new file mode 100644 index 0000000000..fbdc62080e --- /dev/null +++ b/resources/images/param_settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_shell.svg b/resources/images/param_shell.svg index 964c336385..96a1ed1223 100644 --- a/resources/images/param_shell.svg +++ b/resources/images/param_shell.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_special.svg b/resources/images/param_special.svg index 03c542f8c5..9e00002b98 100644 --- a/resources/images/param_special.svg +++ b/resources/images/param_special.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_speed.svg b/resources/images/param_speed.svg index ff44a7e78b..79008e6d40 100644 --- a/resources/images/param_speed.svg +++ b/resources/images/param_speed.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_speed_first.svg b/resources/images/param_speed_first.svg index 90a1bad39f..6c50440c7e 100644 --- a/resources/images/param_speed_first.svg +++ b/resources/images/param_speed_first.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_support.svg b/resources/images/param_support.svg index 68ec97e535..d487ac417c 100644 --- a/resources/images/param_support.svg +++ b/resources/images/param_support.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_support_filament.svg b/resources/images/param_support_filament.svg index 6abc4ff22e..eca486c104 100644 --- a/resources/images/param_support_filament.svg +++ b/resources/images/param_support_filament.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/param_support_tree.svg b/resources/images/param_support_tree.svg new file mode 100644 index 0000000000..f85275def8 --- /dev/null +++ b/resources/images/param_support_tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_supportcubic.svg b/resources/images/param_supportcubic.svg index 344aeb1c89..d5c95d6b42 100644 --- a/resources/images/param_supportcubic.svg +++ b/resources/images/param_supportcubic.svg @@ -1,30 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_temperature.svg b/resources/images/param_temperature.svg index 5276f46345..99a91411bf 100644 --- a/resources/images/param_temperature.svg +++ b/resources/images/param_temperature.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_toolchange.svg b/resources/images/param_toolchange.svg new file mode 100644 index 0000000000..73a9590da1 --- /dev/null +++ b/resources/images/param_toolchange.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_tower.svg b/resources/images/param_tower.svg index 69753a3474..1147401869 100644 --- a/resources/images/param_tower.svg +++ b/resources/images/param_tower.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_travel_speed.svg b/resources/images/param_travel_speed.svg index 2ac2f79fbf..43947fbac2 100644 --- a/resources/images/param_travel_speed.svg +++ b/resources/images/param_travel_speed.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_tri-hexagon.svg b/resources/images/param_tri-hexagon.svg index 636925673d..e0a133c4ca 100644 --- a/resources/images/param_tri-hexagon.svg +++ b/resources/images/param_tri-hexagon.svg @@ -1,19 +1 @@ - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_triangles.svg b/resources/images/param_triangles.svg index 8b7fd23a02..9d11ea8010 100644 --- a/resources/images/param_triangles.svg +++ b/resources/images/param_triangles.svg @@ -1,19 +1 @@ - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_volumetric_speed.svg b/resources/images/param_volumetric_speed.svg index a190d737ec..d148e6f1c1 100644 --- a/resources/images/param_volumetric_speed.svg +++ b/resources/images/param_volumetric_speed.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_wall.svg b/resources/images/param_wall.svg index 762b67eae1..404935b39c 100644 --- a/resources/images/param_wall.svg +++ b/resources/images/param_wall.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/param_wall_generator.svg b/resources/images/param_wall_generator.svg new file mode 100644 index 0000000000..8ac7fb61b7 --- /dev/null +++ b/resources/images/param_wall_generator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_wall_surface.svg b/resources/images/param_wall_surface.svg new file mode 100644 index 0000000000..78ba42df15 --- /dev/null +++ b/resources/images/param_wall_surface.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/param_zig-zag.svg b/resources/images/param_zig-zag.svg index 58ddf0ea96..0c062058bc 100644 --- a/resources/images/param_zig-zag.svg +++ b/resources/images/param_zig-zag.svg @@ -1,20 +1 @@ - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/placeholder_excel.svg b/resources/images/placeholder_excel.svg index 15b84b4b90..16eeb39650 100644 --- a/resources/images/placeholder_excel.svg +++ b/resources/images/placeholder_excel.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/placeholder_pdf.svg b/resources/images/placeholder_pdf.svg index 158444c430..a07e336d7e 100644 --- a/resources/images/placeholder_pdf.svg +++ b/resources/images/placeholder_pdf.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/placeholder_txt.svg b/resources/images/placeholder_txt.svg index dcad481d9d..113a746d33 100644 --- a/resources/images/placeholder_txt.svg +++ b/resources/images/placeholder_txt.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange.svg b/resources/images/plate_arrange.svg index c9c3b2501b..16d2189b4c 100644 --- a/resources/images/plate_arrange.svg +++ b/resources/images/plate_arrange.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange_dark.svg b/resources/images/plate_arrange_dark.svg index 04b66eaee4..5ac7c488ba 100644 --- a/resources/images/plate_arrange_dark.svg +++ b/resources/images/plate_arrange_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange_hover.svg b/resources/images/plate_arrange_hover.svg index 6dce382802..f3378fce55 100644 --- a/resources/images/plate_arrange_hover.svg +++ b/resources/images/plate_arrange_hover.svg @@ -1,8 +1 @@ - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_arrange_hover_dark.svg b/resources/images/plate_arrange_hover_dark.svg index 9b060b705e..65f956b28e 100644 --- a/resources/images/plate_arrange_hover_dark.svg +++ b/resources/images/plate_arrange_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_close.svg b/resources/images/plate_close.svg index 235e135d72..de0c4f66a6 100644 --- a/resources/images/plate_close.svg +++ b/resources/images/plate_close.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_close_dark.svg b/resources/images/plate_close_dark.svg index 8fb4bdd6a9..a045ccd4b2 100644 --- a/resources/images/plate_close_dark.svg +++ b/resources/images/plate_close_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_close_hover.svg b/resources/images/plate_close_hover.svg index 2208d45026..495322afe4 100644 --- a/resources/images/plate_close_hover.svg +++ b/resources/images/plate_close_hover.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_close_hover_dark.svg b/resources/images/plate_close_hover_dark.svg index 47525ae39e..13199c94b8 100644 --- a/resources/images/plate_close_hover_dark.svg +++ b/resources/images/plate_close_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked.svg b/resources/images/plate_locked.svg index 30f54f083c..8738cd5222 100644 --- a/resources/images/plate_locked.svg +++ b/resources/images/plate_locked.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked_dark.svg b/resources/images/plate_locked_dark.svg index 50d879d7f2..94698a340f 100644 --- a/resources/images/plate_locked_dark.svg +++ b/resources/images/plate_locked_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked_hover.svg b/resources/images/plate_locked_hover.svg index 0b35c40930..f56beb6c07 100644 --- a/resources/images/plate_locked_hover.svg +++ b/resources/images/plate_locked_hover.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_locked_hover_dark.svg b/resources/images/plate_locked_hover_dark.svg index e5db250044..8955de70dd 100644 --- a/resources/images/plate_locked_hover_dark.svg +++ b/resources/images/plate_locked_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit.svg b/resources/images/plate_name_edit.svg index 061c9dda77..fad12d446e 100644 --- a/resources/images/plate_name_edit.svg +++ b/resources/images/plate_name_edit.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit_dark.svg b/resources/images/plate_name_edit_dark.svg index 061c9dda77..6ed07bbdf4 100644 --- a/resources/images/plate_name_edit_dark.svg +++ b/resources/images/plate_name_edit_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit_hover.svg b/resources/images/plate_name_edit_hover.svg index 1b5630c47b..d6968c9bb8 100644 --- a/resources/images/plate_name_edit_hover.svg +++ b/resources/images/plate_name_edit_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_name_edit_hover_dark.svg b/resources/images/plate_name_edit_hover_dark.svg index 9d2c2b1555..5655a554ea 100644 --- a/resources/images/plate_name_edit_hover_dark.svg +++ b/resources/images/plate_name_edit_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient.svg b/resources/images/plate_orient.svg index 9fee1617c9..63dd5f2f0b 100644 --- a/resources/images/plate_orient.svg +++ b/resources/images/plate_orient.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient_dark.svg b/resources/images/plate_orient_dark.svg index a2e1cf7562..b0b16c87a9 100644 --- a/resources/images/plate_orient_dark.svg +++ b/resources/images/plate_orient_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient_hover.svg b/resources/images/plate_orient_hover.svg index e97bc42a4e..e88fb5d830 100644 --- a/resources/images/plate_orient_hover.svg +++ b/resources/images/plate_orient_hover.svg @@ -1,15 +1 @@ - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_orient_hover_dark.svg b/resources/images/plate_orient_hover_dark.svg index 2f141d3323..e8adebcf49 100644 --- a/resources/images/plate_orient_hover_dark.svg +++ b/resources/images/plate_orient_hover_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings.svg b/resources/images/plate_settings.svg index c87756cf1a..e6ee8b0b6a 100644 --- a/resources/images/plate_settings.svg +++ b/resources/images/plate_settings.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_arrow.svg b/resources/images/plate_settings_arrow.svg index e772a9671b..8da6e0b4dd 100644 --- a/resources/images/plate_settings_arrow.svg +++ b/resources/images/plate_settings_arrow.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed.svg b/resources/images/plate_settings_changed.svg index fe2f4797d7..8a4ca4d60f 100644 --- a/resources/images/plate_settings_changed.svg +++ b/resources/images/plate_settings_changed.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed_dark.svg b/resources/images/plate_settings_changed_dark.svg index 46c17a8058..ce5672a9d7 100644 --- a/resources/images/plate_settings_changed_dark.svg +++ b/resources/images/plate_settings_changed_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed_hover.svg b/resources/images/plate_settings_changed_hover.svg index 41f8d3df1e..1bb9023a28 100644 --- a/resources/images/plate_settings_changed_hover.svg +++ b/resources/images/plate_settings_changed_hover.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_changed_hover_dark.svg b/resources/images/plate_settings_changed_hover_dark.svg index adebb4e21f..2fabb11b78 100644 --- a/resources/images/plate_settings_changed_hover_dark.svg +++ b/resources/images/plate_settings_changed_hover_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_dark.svg b/resources/images/plate_settings_dark.svg index 94b11e77a5..69b3474669 100644 --- a/resources/images/plate_settings_dark.svg +++ b/resources/images/plate_settings_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_hover.svg b/resources/images/plate_settings_hover.svg index c56fe47706..a555b28f9b 100644 --- a/resources/images/plate_settings_hover.svg +++ b/resources/images/plate_settings_hover.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_settings_hover_dark.svg b/resources/images/plate_settings_hover_dark.svg index 276b609a79..f36f6e8f03 100644 --- a/resources/images/plate_settings_hover_dark.svg +++ b/resources/images/plate_settings_hover_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked.svg b/resources/images/plate_unlocked.svg index 8b780a4f5b..c04f826e24 100644 --- a/resources/images/plate_unlocked.svg +++ b/resources/images/plate_unlocked.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked_dark.svg b/resources/images/plate_unlocked_dark.svg index 13c562d552..191094d9d6 100644 --- a/resources/images/plate_unlocked_dark.svg +++ b/resources/images/plate_unlocked_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked_hover.svg b/resources/images/plate_unlocked_hover.svg index de3b0794be..f0f0d1ff03 100644 --- a/resources/images/plate_unlocked_hover.svg +++ b/resources/images/plate_unlocked_hover.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/plate_unlocked_hover_dark.svg b/resources/images/plate_unlocked_hover_dark.svg index 140fa1d7d6..8d9f568ed6 100644 --- a/resources/images/plate_unlocked_hover_dark.svg +++ b/resources/images/plate_unlocked_hover_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print-time.svg b/resources/images/print-time.svg index 6734937f93..8f56842e37 100644 --- a/resources/images/print-time.svg +++ b/resources/images/print-time.svg @@ -1,12 +1 @@ - - - - background - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/print-weight.svg b/resources/images/print-weight.svg index 93bdcd8123..981689a52f 100644 --- a/resources/images/print-weight.svg +++ b/resources/images/print-weight.svg @@ -1,17 +1 @@ - - - - background - - - - Layer 1 - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/print_control_pause.svg b/resources/images/print_control_pause.svg index 6f2759b089..0cb5abaf1b 100644 --- a/resources/images/print_control_pause.svg +++ b/resources/images/print_control_pause.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_control_pause_disable.svg b/resources/images/print_control_pause_disable.svg index 2e1d511765..57b454fdeb 100644 --- a/resources/images/print_control_pause_disable.svg +++ b/resources/images/print_control_pause_disable.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_control_pause_hover.svg b/resources/images/print_control_pause_hover.svg index 0753b08c7f..12e35f3216 100644 --- a/resources/images/print_control_pause_hover.svg +++ b/resources/images/print_control_pause_hover.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_control_resume.svg b/resources/images/print_control_resume.svg index 5151f06a1a..09694a7b5c 100644 --- a/resources/images/print_control_resume.svg +++ b/resources/images/print_control_resume.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_resume_disable.svg b/resources/images/print_control_resume_disable.svg index fb1ad8adb2..478dc3e2e4 100644 --- a/resources/images/print_control_resume_disable.svg +++ b/resources/images/print_control_resume_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_resume_hover.svg b/resources/images/print_control_resume_hover.svg index b408fb9402..bffdd4fe2d 100644 --- a/resources/images/print_control_resume_hover.svg +++ b/resources/images/print_control_resume_hover.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_stop.svg b/resources/images/print_control_stop.svg index 1201928163..b8c8d36910 100644 --- a/resources/images/print_control_stop.svg +++ b/resources/images/print_control_stop.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_stop_disable.svg b/resources/images/print_control_stop_disable.svg index 3d2a99afaf..0f05d885d0 100644 --- a/resources/images/print_control_stop_disable.svg +++ b/resources/images/print_control_stop_disable.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_control_stop_hover.svg b/resources/images/print_control_stop_hover.svg index 267d913ebc..4136c759bf 100644 --- a/resources/images/print_control_stop_hover.svg +++ b/resources/images/print_control_stop_hover.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/print_info_time.svg b/resources/images/print_info_time.svg index 63af49a7fc..d0eb028a45 100644 --- a/resources/images/print_info_time.svg +++ b/resources/images/print_info_time.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/print_info_weight.svg b/resources/images/print_info_weight.svg index e4deb77c39..58048495dc 100644 --- a/resources/images/print_info_weight.svg +++ b/resources/images/print_info_weight.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/printer.svg b/resources/images/printer.svg index 2a0598823c..e67f870692 100644 --- a/resources/images/printer.svg +++ b/resources/images/printer.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/printer_host_browser.svg b/resources/images/printer_host_browser.svg index 47eccd52e7..2c087e8a85 100644 --- a/resources/images/printer_host_browser.svg +++ b/resources/images/printer_host_browser.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/printer_host_test.svg b/resources/images/printer_host_test.svg index 517c46a330..c8dc384f68 100644 --- a/resources/images/printer_host_test.svg +++ b/resources/images/printer_host_test.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/printer_in_lan.svg b/resources/images/printer_in_lan.svg index d7392ab6e8..449280bf5a 100644 --- a/resources/images/printer_in_lan.svg +++ b/resources/images/printer_in_lan.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/printer_status_busy.svg b/resources/images/printer_status_busy.svg index 590c6bdbae..a166f0b693 100644 --- a/resources/images/printer_status_busy.svg +++ b/resources/images/printer_status_busy.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/printer_status_idle.svg b/resources/images/printer_status_idle.svg index ff81158dc5..cc6326daf4 100644 --- a/resources/images/printer_status_idle.svg +++ b/resources/images/printer_status_idle.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/printer_status_lock.svg b/resources/images/printer_status_lock.svg index af840d2f7c..66e0a805ac 100644 --- a/resources/images/printer_status_lock.svg +++ b/resources/images/printer_status_lock.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/printer_status_offline.svg b/resources/images/printer_status_offline.svg index eeb09a4d11..2539c23e07 100644 --- a/resources/images/printer_status_offline.svg +++ b/resources/images/printer_status_offline.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/process.svg b/resources/images/process.svg index 5d449680f3..560e3fa2a5 100644 --- a/resources/images/process.svg +++ b/resources/images/process.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/question.svg b/resources/images/question.svg index 6fb955b628..5b4ecc50e1 100644 --- a/resources/images/question.svg +++ b/resources/images/question.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/radio_off.svg b/resources/images/radio_off.svg index ee5fa30cf9..96c0e76749 100644 --- a/resources/images/radio_off.svg +++ b/resources/images/radio_off.svg @@ -1,7 +1 @@ - - - - Layer 1 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/radio_on.svg b/resources/images/radio_on.svg index d9d1f88307..eb98320785 100644 --- a/resources/images/radio_on.svg +++ b/resources/images/radio_on.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/reflection_x.svg b/resources/images/reflection_x.svg index fa391e6cdf..4a94013895 100644 --- a/resources/images/reflection_x.svg +++ b/resources/images/reflection_x.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/reflection_y.svg b/resources/images/reflection_y.svg index 0de6a5971f..55d357df6f 100644 --- a/resources/images/reflection_y.svg +++ b/resources/images/reflection_y.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/refresh.svg b/resources/images/refresh.svg index af9b336858..b25d533125 100644 --- a/resources/images/refresh.svg +++ b/resources/images/refresh.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/revert_btn.svg b/resources/images/revert_btn.svg index fbc580d884..763a86ff76 100644 --- a/resources/images/revert_btn.svg +++ b/resources/images/revert_btn.svg @@ -1,12 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/save.svg b/resources/images/save.svg index 63029daf58..65db979dfa 100644 --- a/resources/images/save.svg +++ b/resources/images/save.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_abnormal.svg b/resources/images/sdcard_state_abnormal.svg index a88e8df175..45705a0703 100644 --- a/resources/images/sdcard_state_abnormal.svg +++ b/resources/images/sdcard_state_abnormal.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_abnormal_dark.svg b/resources/images/sdcard_state_abnormal_dark.svg index b2ac57f52a..45705a0703 100644 --- a/resources/images/sdcard_state_abnormal_dark.svg +++ b/resources/images/sdcard_state_abnormal_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_no.svg b/resources/images/sdcard_state_no.svg index ae45a0c3b5..5e0449ee17 100644 --- a/resources/images/sdcard_state_no.svg +++ b/resources/images/sdcard_state_no.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_no_dark.svg b/resources/images/sdcard_state_no_dark.svg index 6b17701408..5e0449ee17 100644 --- a/resources/images/sdcard_state_no_dark.svg +++ b/resources/images/sdcard_state_no_dark.svg @@ -1,10 +1 @@ - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_normal.svg b/resources/images/sdcard_state_normal.svg index fc70fe4a65..5caac95676 100644 --- a/resources/images/sdcard_state_normal.svg +++ b/resources/images/sdcard_state_normal.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/sdcard_state_normal_dark.svg b/resources/images/sdcard_state_normal_dark.svg index 1abfa2c38b..5caac95676 100644 --- a/resources/images/sdcard_state_normal_dark.svg +++ b/resources/images/sdcard_state_normal_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/search.svg b/resources/images/search.svg index 304562750b..71fb964182 100644 --- a/resources/images/search.svg +++ b/resources/images/search.svg @@ -1,11 +1 @@ - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/seperator.svg b/resources/images/seperator.svg index c053a0aa4a..c69e4289ca 100644 --- a/resources/images/seperator.svg +++ b/resources/images/seperator.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/settings.svg b/resources/images/settings.svg index d2a2a2e8af..47241ab53f 100644 --- a/resources/images/settings.svg +++ b/resources/images/settings.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/sidebutton_dropdown.svg b/resources/images/sidebutton_dropdown.svg index 2ea84d7d17..961970f674 100644 --- a/resources/images/sidebutton_dropdown.svg +++ b/resources/images/sidebutton_dropdown.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/spin_dec.svg b/resources/images/spin_dec.svg index 4988471024..fe453e216f 100644 --- a/resources/images/spin_dec.svg +++ b/resources/images/spin_dec.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/spin_inc.svg b/resources/images/spin_inc.svg index 0a04338761..79d5c598e9 100644 --- a/resources/images/spin_inc.svg +++ b/resources/images/spin_inc.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/split_objects.svg b/resources/images/split_objects.svg index 091c4ad3d9..492a138985 100644 --- a/resources/images/split_objects.svg +++ b/resources/images/split_objects.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/split_objects_dark.svg b/resources/images/split_objects_dark.svg index 5965f459a0..149d724262 100644 --- a/resources/images/split_objects_dark.svg +++ b/resources/images/split_objects_dark.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/split_parts.svg b/resources/images/split_parts.svg index b1246a6a5e..eee3a868c3 100644 --- a/resources/images/split_parts.svg +++ b/resources/images/split_parts.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/split_parts_dark.svg b/resources/images/split_parts_dark.svg index 82e77af131..e9a0994548 100644 --- a/resources/images/split_parts_dark.svg +++ b/resources/images/split_parts_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/spool.svg b/resources/images/spool.svg index d0d7cb3773..1e639c7dcc 100644 --- a/resources/images/spool.svg +++ b/resources/images/spool.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/step_1.svg b/resources/images/step_1.svg index bb72d6e2ac..a34f812a6a 100644 --- a/resources/images/step_1.svg +++ b/resources/images/step_1.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/step_2.svg b/resources/images/step_2.svg index 730ef67ce1..81c76f5fa4 100644 --- a/resources/images/step_2.svg +++ b/resources/images/step_2.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/step_2_ready.svg b/resources/images/step_2_ready.svg index 8e53610c3a..b9f768b64c 100644 --- a/resources/images/step_2_ready.svg +++ b/resources/images/step_2_ready.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/step_is_ok.svg b/resources/images/step_is_ok.svg index 04ee5c02ae..3dea459a5f 100644 --- a/resources/images/step_is_ok.svg +++ b/resources/images/step_is_ok.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/support.svg b/resources/images/support.svg index f25ab8f3c4..f883607cdd 100644 --- a/resources/images/support.svg +++ b/resources/images/support.svg @@ -1,16 +1 @@ - - - - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/svg_modifier.svg b/resources/images/svg_modifier.svg index 8b1ff317b4..74548e9646 100644 --- a/resources/images/svg_modifier.svg +++ b/resources/images/svg_modifier.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/svg_negative.svg b/resources/images/svg_negative.svg index c47a8fe58d..7845267e2a 100644 --- a/resources/images/svg_negative.svg +++ b/resources/images/svg_negative.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/svg_part.svg b/resources/images/svg_part.svg index 40f907bd9f..b75b85bd87 100644 --- a/resources/images/svg_part.svg +++ b/resources/images/svg_part.svg @@ -1,4 +1 @@ - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/tab_3d_active.svg b/resources/images/tab_3d_active.svg index 1b4cc48a71..36ffc87ee5 100644 --- a/resources/images/tab_3d_active.svg +++ b/resources/images/tab_3d_active.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/tab_auxiliary_active.svg b/resources/images/tab_auxiliary_active.svg index 95fb702f7e..ae2a6783f7 100644 --- a/resources/images/tab_auxiliary_active.svg +++ b/resources/images/tab_auxiliary_active.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/tab_calibration.svg b/resources/images/tab_calibration.svg new file mode 100644 index 0000000000..54ea4fe5b5 --- /dev/null +++ b/resources/images/tab_calibration.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/tab_calibration_active.svg b/resources/images/tab_calibration_active.svg new file mode 100644 index 0000000000..71bfdfc451 --- /dev/null +++ b/resources/images/tab_calibration_active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/tab_home_active.svg b/resources/images/tab_home_active.svg index 00be6f6f04..7d8d586e91 100644 --- a/resources/images/tab_home_active.svg +++ b/resources/images/tab_home_active.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/tab_monitor_active.svg b/resources/images/tab_monitor_active.svg index 80971866e2..6270ca49e7 100644 --- a/resources/images/tab_monitor_active.svg +++ b/resources/images/tab_monitor_active.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/tab_multi_active.svg b/resources/images/tab_multi_active.svg new file mode 100644 index 0000000000..dc776469e5 --- /dev/null +++ b/resources/images/tab_multi_active.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/tab_presets_active.svg b/resources/images/tab_presets_active.svg index 617b9eb6a7..4eb67fc6df 100644 --- a/resources/images/tab_presets_active.svg +++ b/resources/images/tab_presets_active.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/tab_presets_inactive.svg b/resources/images/tab_presets_inactive.svg index 6438cd9ac2..cd064caa1e 100644 --- a/resources/images/tab_presets_inactive.svg +++ b/resources/images/tab_presets_inactive.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/tab_preview_active.svg b/resources/images/tab_preview_active.svg index 5bb703d338..a65cab4820 100644 --- a/resources/images/tab_preview_active.svg +++ b/resources/images/tab_preview_active.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/table.svg b/resources/images/table.svg index d1b059b053..5f04f4e05c 100644 --- a/resources/images/table.svg +++ b/resources/images/table.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/tips_arrow.svg b/resources/images/tips_arrow.svg index cba8d02d98..eb7da06766 100644 --- a/resources/images/tips_arrow.svg +++ b/resources/images/tips_arrow.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/toggle_off.svg b/resources/images/toggle_off.svg index c479d1cf6d..f83e594cc6 100644 --- a/resources/images/toggle_off.svg +++ b/resources/images/toggle_off.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toggle_on.svg b/resources/images/toggle_on.svg index 3a4c3f0878..f83cafd3bd 100644 --- a/resources/images/toggle_on.svg +++ b/resources/images/toggle_on.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_add_plate.svg b/resources/images/toolbar_add_plate.svg index 4a13b0a029..ea2577d961 100644 --- a/resources/images/toolbar_add_plate.svg +++ b/resources/images/toolbar_add_plate.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_add_plate_dark.svg b/resources/images/toolbar_add_plate_dark.svg index 0a5dcc67b9..a361368a18 100644 --- a/resources/images/toolbar_add_plate_dark.svg +++ b/resources/images/toolbar_add_plate_dark.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_arrange.svg b/resources/images/toolbar_arrange.svg index 184030090e..6b15ec846d 100644 --- a/resources/images/toolbar_arrange.svg +++ b/resources/images/toolbar_arrange.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_arrange_dark.svg b/resources/images/toolbar_arrange_dark.svg index 69f37e8eff..7e32711f61 100644 --- a/resources/images/toolbar_arrange_dark.svg +++ b/resources/images/toolbar_arrange_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_assemble.svg b/resources/images/toolbar_assemble.svg index 8513db24f6..02c3bce781 100644 --- a/resources/images/toolbar_assemble.svg +++ b/resources/images/toolbar_assemble.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_assemble_dark.svg b/resources/images/toolbar_assemble_dark.svg index a6299e48d0..48debebc4c 100644 --- a/resources/images/toolbar_assemble_dark.svg +++ b/resources/images/toolbar_assemble_dark.svg @@ -1,6 +1 @@ - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_cut.svg b/resources/images/toolbar_cut.svg index 9f507dc9ea..a062d0c40c 100644 --- a/resources/images/toolbar_cut.svg +++ b/resources/images/toolbar_cut.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_cut_dark.svg b/resources/images/toolbar_cut_dark.svg index 3e78be7887..ab3c592c9e 100644 --- a/resources/images/toolbar_cut_dark.svg +++ b/resources/images/toolbar_cut_dark.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_double_directional_arrow.svg b/resources/images/toolbar_double_directional_arrow.svg new file mode 100644 index 0000000000..4cc9b2ecb3 --- /dev/null +++ b/resources/images/toolbar_double_directional_arrow.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/toolbar_measure.svg b/resources/images/toolbar_measure.svg index 1606b5ee6f..ece2f09b92 100644 --- a/resources/images/toolbar_measure.svg +++ b/resources/images/toolbar_measure.svg @@ -1,93 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_measure_dark.svg b/resources/images/toolbar_measure_dark.svg index a273e75347..56a98b749e 100644 --- a/resources/images/toolbar_measure_dark.svg +++ b/resources/images/toolbar_measure_dark.svg @@ -1,93 +1 @@ - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_meshboolean.svg b/resources/images/toolbar_meshboolean.svg index 6a6a68b991..0253340b53 100644 --- a/resources/images/toolbar_meshboolean.svg +++ b/resources/images/toolbar_meshboolean.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_meshboolean_dark.svg b/resources/images/toolbar_meshboolean_dark.svg index 6ebe5cbf85..8837111056 100644 --- a/resources/images/toolbar_meshboolean_dark.svg +++ b/resources/images/toolbar_meshboolean_dark.svg @@ -1,13 +1 @@ - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_modifier_sphere.svg b/resources/images/toolbar_modifier_sphere.svg index dc08d011db..a794a7f99e 100644 --- a/resources/images/toolbar_modifier_sphere.svg +++ b/resources/images/toolbar_modifier_sphere.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_modifier_sphere_dark.svg b/resources/images/toolbar_modifier_sphere_dark.svg index 10f64738ae..27b56e20a9 100644 --- a/resources/images/toolbar_modifier_sphere_dark.svg +++ b/resources/images/toolbar_modifier_sphere_dark.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_move.svg b/resources/images/toolbar_move.svg index 1f94c1cba3..1c9764a52b 100644 --- a/resources/images/toolbar_move.svg +++ b/resources/images/toolbar_move.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_move_dark.svg b/resources/images/toolbar_move_dark.svg index 1e560788aa..000e9b0c2c 100644 --- a/resources/images/toolbar_move_dark.svg +++ b/resources/images/toolbar_move_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_open.svg b/resources/images/toolbar_open.svg index 78730b4282..282b67bb67 100644 --- a/resources/images/toolbar_open.svg +++ b/resources/images/toolbar_open.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_open_dark.svg b/resources/images/toolbar_open_dark.svg index e5b5fc1f9b..01700b1f30 100644 --- a/resources/images/toolbar_open_dark.svg +++ b/resources/images/toolbar_open_dark.svg @@ -1,9 +1 @@ - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_reset.svg b/resources/images/toolbar_reset.svg index 134b230b3f..ad78b43e15 100644 --- a/resources/images/toolbar_reset.svg +++ b/resources/images/toolbar_reset.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_reset_hover.svg b/resources/images/toolbar_reset_hover.svg index 279b20bce2..ad78b43e15 100644 --- a/resources/images/toolbar_reset_hover.svg +++ b/resources/images/toolbar_reset_hover.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/toolbar_rotate.svg b/resources/images/toolbar_rotate.svg index 9642a6ae44..d14b35c676 100644 --- a/resources/images/toolbar_rotate.svg +++ b/resources/images/toolbar_rotate.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_rotate_dark.svg b/resources/images/toolbar_rotate_dark.svg index b8b21a1578..e611be4c5b 100644 --- a/resources/images/toolbar_rotate_dark.svg +++ b/resources/images/toolbar_rotate_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_scale.svg b/resources/images/toolbar_scale.svg index 0f8c628623..a806a00926 100644 --- a/resources/images/toolbar_scale.svg +++ b/resources/images/toolbar_scale.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_scale_dark.svg b/resources/images/toolbar_scale_dark.svg index b044591ee2..78e86cee75 100644 --- a/resources/images/toolbar_scale_dark.svg +++ b/resources/images/toolbar_scale_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_seam.svg b/resources/images/toolbar_seam.svg index 8a12cf00b1..660f1fed3e 100644 --- a/resources/images/toolbar_seam.svg +++ b/resources/images/toolbar_seam.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_seam_dark.svg b/resources/images/toolbar_seam_dark.svg index 7d686f1415..65573c87b1 100644 --- a/resources/images/toolbar_seam_dark.svg +++ b/resources/images/toolbar_seam_dark.svg @@ -1,7 +1 @@ - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_support.svg b/resources/images/toolbar_support.svg index 9208594a0a..9ace7d67c7 100644 --- a/resources/images/toolbar_support.svg +++ b/resources/images/toolbar_support.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_support_dark.svg b/resources/images/toolbar_support_dark.svg index 2481a95b47..fac4afb675 100644 --- a/resources/images/toolbar_support_dark.svg +++ b/resources/images/toolbar_support_dark.svg @@ -1,12 +1 @@ - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_text.svg b/resources/images/toolbar_text.svg index 08f593c119..fbd932c6d5 100644 --- a/resources/images/toolbar_text.svg +++ b/resources/images/toolbar_text.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_text_dark.svg b/resources/images/toolbar_text_dark.svg index b25888f2fa..a680b7f530 100644 --- a/resources/images/toolbar_text_dark.svg +++ b/resources/images/toolbar_text_dark.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_tooltip.svg b/resources/images/toolbar_tooltip.svg index 6c48a72bb0..96c5684cb0 100644 --- a/resources/images/toolbar_tooltip.svg +++ b/resources/images/toolbar_tooltip.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/toolbar_tooltip_hover.svg b/resources/images/toolbar_tooltip_hover.svg index f1b4fc79d6..c8d606829e 100644 --- a/resources/images/toolbar_tooltip_hover.svg +++ b/resources/images/toolbar_tooltip_hover.svg @@ -1,14 +1 @@ - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_blank.svg b/resources/images/topbar_blank.svg new file mode 100644 index 0000000000..b920a2ccdc --- /dev/null +++ b/resources/images/topbar_blank.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/topbar_close.svg b/resources/images/topbar_close.svg index 43958476a5..c911eaa53d 100644 --- a/resources/images/topbar_close.svg +++ b/resources/images/topbar_close.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/topbar_dropdown.svg b/resources/images/topbar_dropdown.svg index 0a349f0eda..fce7742c29 100644 --- a/resources/images/topbar_dropdown.svg +++ b/resources/images/topbar_dropdown.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_file.svg b/resources/images/topbar_file.svg index 1a19896bb8..eb28e21045 100644 --- a/resources/images/topbar_file.svg +++ b/resources/images/topbar_file.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_max.svg b/resources/images/topbar_max.svg index 6bf4ef6839..5766784b50 100644 --- a/resources/images/topbar_max.svg +++ b/resources/images/topbar_max.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/topbar_min.svg b/resources/images/topbar_min.svg index b12dd684c2..53c2b08888 100644 --- a/resources/images/topbar_min.svg +++ b/resources/images/topbar_min.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_redo.svg b/resources/images/topbar_redo.svg index 2a45094a88..b5c5589dee 100644 --- a/resources/images/topbar_redo.svg +++ b/resources/images/topbar_redo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_redo_inactive.svg b/resources/images/topbar_redo_inactive.svg index 4fdc1bad0e..5899ce2fef 100644 --- a/resources/images/topbar_redo_inactive.svg +++ b/resources/images/topbar_redo_inactive.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_save.svg b/resources/images/topbar_save.svg index 8fb28c645d..532ad4f0fa 100644 --- a/resources/images/topbar_save.svg +++ b/resources/images/topbar_save.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_undo.svg b/resources/images/topbar_undo.svg index 267ff68999..0ad07b2624 100644 --- a/resources/images/topbar_undo.svg +++ b/resources/images/topbar_undo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/topbar_undo_inactive.svg b/resources/images/topbar_undo_inactive.svg index 94d15c147b..2a07fbc01b 100644 --- a/resources/images/topbar_undo_inactive.svg +++ b/resources/images/topbar_undo_inactive.svg @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/resources/images/topbar_win.svg b/resources/images/topbar_win.svg index e7dc4a61ed..84124aa271 100644 --- a/resources/images/topbar_win.svg +++ b/resources/images/topbar_win.svg @@ -1,4 +1 @@ - - - - + \ No newline at end of file diff --git a/resources/images/triangle_paint.svg b/resources/images/triangle_paint.svg index c28991f2a0..c3b3c935c7 100644 --- a/resources/images/triangle_paint.svg +++ b/resources/images/triangle_paint.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/triangle_paint_dark.svg b/resources/images/triangle_paint_dark.svg index 0efbc898b6..cfaedd1acd 100644 --- a/resources/images/triangle_paint_dark.svg +++ b/resources/images/triangle_paint_dark.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/resources/images/unbind.svg b/resources/images/unbind.svg index 5af4b8603f..f60e09c08f 100644 --- a/resources/images/unbind.svg +++ b/resources/images/unbind.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/unbind_machine.svg b/resources/images/unbind_machine.svg index d6d8142c4c..1754224189 100644 --- a/resources/images/unbind_machine.svg +++ b/resources/images/unbind_machine.svg @@ -1,8 +1 @@ - - - - Layer 1 - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/unbind_selected.svg b/resources/images/unbind_selected.svg index 29b7382df2..3228394b0b 100644 --- a/resources/images/unbind_selected.svg +++ b/resources/images/unbind_selected.svg @@ -1,8 +1 @@ - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/undefined.svg b/resources/images/undefined.svg new file mode 100644 index 0000000000..7c3eedfbca --- /dev/null +++ b/resources/images/undefined.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/undo.svg b/resources/images/undo.svg index fb8e0803a0..763a86ff76 100644 --- a/resources/images/undo.svg +++ b/resources/images/undo.svg @@ -1,6 +1 @@ - - - Slice 41 - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/video_state_off.svg b/resources/images/video_state_off.svg index 8d1509867c..7bed3b8cec 100644 --- a/resources/images/video_state_off.svg +++ b/resources/images/video_state_off.svg @@ -1,9 +1 @@ - - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/video_state_on.svg b/resources/images/video_state_on.svg index 9201d5593d..301d972fdb 100644 --- a/resources/images/video_state_on.svg +++ b/resources/images/video_state_on.svg @@ -1,9 +1 @@ - - - - Layer 1 - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/resources/info/filament_info.json b/resources/info/filament_info.json index 673e1a89a7..8472e66462 100644 --- a/resources/info/filament_info.json +++ b/resources/info/filament_info.json @@ -1,27 +1,38 @@ { - "version": "1.0.0.1", + "version": "1.0.0.2", "high_temp_filament": [ "ABS", "ASA", "PC", "PA", "PA-CF", + "PA-GF", "PA6-CF", "PET-CF", "PPS", "PPS-CF", "PPA-CF", - "PPA-GF" + "PPA-GF", + "ABS-GF", + "ASA-Aero" ], "low_temp_filament": [ "PLA", "TPU", "PLA-CF", "PLA-AERO", - "PVA" + "PVA", + "BVOH" ], "high_low_compatible_filament":[ "HIPS", - "PETG" + "PETG", + "PE", + "PP", + "EVA", + "PE-CF", + "PP-CF", + "PP-GF", + "PHA" ] } \ No newline at end of file diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index 67939352a5..0f09f22753 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json @@ -17,7 +17,7 @@ "0x220" ], "printable_height": "250", - "nozzle_type": "undefined", + "nozzle_type": "undefine", "auxiliary_fan": "0", "machine_max_acceleration_extruding": [ "2500", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 2afe0897df..034f24f992 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.09.00.04", + "version": "01.09.00.07", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json index 815cca5839..bca893a5dc 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P 0.2 nozzle.json @@ -11,6 +11,12 @@ "fan_min_speed": [ "50" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "filament_max_volumetric_speed": [ "2" ], diff --git a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json index d64ab7e7d1..a54e7bea5d 100644 --- a/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json +++ b/resources/profiles/BBL/filament/P1P/Bambu PLA Basic @BBL P1P.json @@ -8,6 +8,12 @@ "fan_cooling_layer_time": [ "80" ], + "filament_long_retractions_when_cut": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "18" + ], "fan_min_speed": [ "50" ], diff --git a/resources/profiles/BBL/filament/fdm_filament_abs.json b/resources/profiles/BBL/filament/fdm_filament_abs.json index 461dd5e610..74eb871518 100644 --- a/resources/profiles/BBL/filament/fdm_filament_abs.json +++ b/resources/profiles/BBL/filament/fdm_filament_abs.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "activate_air_filtration": [ - "1" + "0" ], "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/fdm_filament_asa.json b/resources/profiles/BBL/filament/fdm_filament_asa.json index ac7a9294c1..a0da767a75 100644 --- a/resources/profiles/BBL/filament/fdm_filament_asa.json +++ b/resources/profiles/BBL/filament/fdm_filament_asa.json @@ -5,7 +5,7 @@ "from": "system", "instantiation": "false", "activate_air_filtration": [ - "1" + "0" ], "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json index 078e12ae45..27e716bc73 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json @@ -61,9 +61,9 @@ "255" ], "scan_first_layer": "0", - "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240311 =====================\nG392 S0\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18 \n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S25 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y-0.5 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== nozzle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n\n M900 C\n G90\n M83\n G1 X78.000 Y-0.500 F30000\n G1 Z0.300 F1200\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G1 E3 F300\n\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\n M900 R\n G90\n M83\n G1 X78.000 Y1.000 F30000\n G1 Z0.300 F1200\n G1 E0.5 F300\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n", + "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240104 =====================\nG392 S0\nM9833.2\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18 \n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S3 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S10 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\nG1 Z4 F1200\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nG1 X108.000 Y-0.500 F30000\nG1 Z0.300 F1200\nM400\nG2814 Z0.32\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y-0.5 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== nozzle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n\n M900 C\n G90\n M83\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G0 X128 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\n\n M900 R\n G90\n G1 X108.000 Y4.500 F30000\n G91\n G1 Z-0.700 F1200\n G90\n M83\n G0 X128 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G91\n G1 X1 Z-0.300\n G1 X4\n G1 Z1 F1200\n G90\n M400\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n", "machine_end_gcode": ";===== date: 20231229 =====================\nG392 S0 ;turn off nozzle clog detect\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X267 F15000\nT255\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 256}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z256 F600\n G1 Z256\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-48 Y180 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A44 B20 L100 C49 D20 M80 E41 F20 N80\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N80\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n;=====printer finish sound=========\n\n;M17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM400\nM18 X Y Z\n\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", "time_lapse_gcode": ";===================== date: 20231215 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-48.2 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_detection_flag\nM622 J1 \n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X261 Y250 F20000\n M400 P200\n G39 S1\n G0 Z2 F4000\n {endif}\n\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\nM623\n{endif}\n", - "change_filament_gcode": ";===== machine: A1 =========================\n;===== date: 20231225 =======================\nM1007 S0 ; turn off mass estimation\nG392 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X267 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y128 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E6 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\n\nM1007 S1\n" + "change_filament_gcode": ";===== machine: A1 =========================\n;===== date: 20231225 =======================\nM1007 S0 ; turn off mass estimation\nG392 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X267 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y128 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E6 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\n\nM9833 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\nM1002 judge_flag filament_need_cali_flag\nM622 J1\n M106 P1 S178\n M400 S4\n G1 X-38.2 F18000\n G1 X-48.2 F3000\n G1 X-38.2 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-38.2 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0 \nM623\n\nM621 S[next_extruder]A\nG392 S0\n\nM1007 S1\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json index 8478b5c818..8c69b32836 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json @@ -67,9 +67,9 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: A1 mini =========================\n;===== date: 20240204 =====================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S170\nM140 S[bed_temperature_initial_layer_single]\nG392 S0 ;turn off clog detect\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B0 L100 C37 D10 M100 E37 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E43 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C49 D10 M100 E49 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C39 D10 M100 E48 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S3 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-13.5 F3000\n M400\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n M104 S{nozzle_temperature_range_high[initial_no_support_extruder]}\n G92 E0\n G1 E50 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G392 S0 ;turn off clog detect\nM621 S[initial_no_support_extruder]A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\nM1002 gcode_claim_action : 3\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n M400\nM623\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S[bed_temperature_initial_layer_single];set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{nozzle_temperature[initial_extruder]}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n \n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.2 F18000 ;Move to start position\n M400\n G0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 Y0 Z0 F20000\n M400\n \n G1 X-13.5 Y0 Z10 F10000\n M400\n \n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-13.5 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;===== extrude cali test ===============================\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.2 F18000 ;Move to start position\nG0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n\n\n\n", + "machine_start_gcode": ";===== machine: A1 mini =========================\n;===== date: 20240204 =====================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S170\nM140 S[bed_temperature_initial_layer_single]\nG392 S0 ;turn off clog detect\nM9833.2\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B0 L100 C37 D10 M100 E37 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E43 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C49 D10 M100 E49 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C39 D10 M100 E48 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S3 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-13.5 F3000\n M400\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n M104 S{nozzle_temperature_range_high[initial_no_support_extruder]}\n G92 E0\n G1 E50 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G392 S0 ;turn off clog detect\nM621 S[initial_no_support_extruder]A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\nM1002 gcode_claim_action : 3\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n M400\nM623\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S[bed_temperature_initial_layer_single];set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A1 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{nozzle_temperature[initial_extruder]}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n \n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.3 F18000 ;Move to start position\n M400\n G0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 Y0 Z0 F20000\n M400\n \n G1 X-13.5 Y0 Z10 F10000\n M400\n \n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-13.5 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;===== extrude cali test ===============================\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.3 F18000 ;Move to start position\nG0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n\n\n\n", "machine_end_gcode": ";===== date: 20231229 =====================\n;turn off nozzle clog detect\nG392 S0\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X181 F12000\nT255\nG1 X0 F18000\nG1 X-13.0 F3000\nG1 X0 F18000 ; wipe\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 180}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z180 F600\n G1 Z180\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-13 Y180 F3600\n\nG91\nG1 Z-1 F600\nG90\nM83\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M100 E42 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C46 D10 M100 E46 F10 N100\nM1006 A44 B20 L100 C39 D20 M100 E48 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E48 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B20 L100 C41 D20 M100 E49 F20 N100\nM1006 A0 B20 L100 C0 D20 M100 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M100 E37 F20 N100\nM1006 W\n;=====printer finish sound=========\nM400 S1\nM18 X Y Z\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change\n", "time_lapse_gcode": ";===================== date: 202312028 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_detection_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X-6 Y170 F20000\n G39 S1 X-6 Y170\n G0 Z2 F4000\n G0 X90 Y90 F30000\n {endif}\n\n\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\nM623\n{endif}\n", - "change_filament_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231225 =======================\nG392 S0\nM1007 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X180 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y90 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E5 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\nM1007 S1\n" + "change_filament_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231225 =======================\nG392 S0\nM1007 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X180 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y90 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E5 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n\nM9833 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\nM1002 judge_flag filament_need_cali_flag\nM622 J1\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0 \nM623\n\nG392 S0\nM1007 S1\n\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index b39a7e0250..c9046ad060 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -21,7 +21,7 @@ "Bambu PLA Basic @BBL X1" ], "default_print_profile": "0.20mm Standard @BBL P1P", - "enable_long_retraction_when_cut" : "1", + "enable_long_retraction_when_cut": "2", "extruder_offset": [ "0x2" ], @@ -40,5 +40,5 @@ "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 20230707 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression", "machine_end_gcode": ";===== date: 20230428 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E-[retraction_distance_when_cut] F200\nM400\n{endif}\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E{retraction_distance_when_cut - 2} F200\nG1 E2 F20\nM400\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json index a5a55c74ed..3dc5e2b6d9 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S 0.4 nozzle.json @@ -20,7 +20,7 @@ "Bambu PLA Basic @BBL X1C" ], "default_print_profile": "0.20mm Standard @BBL X1C", - "enable_long_retraction_when_cut" : "1", + "enable_long_retraction_when_cut": "2", "extruder_offset": [ "0x2" ], @@ -39,5 +39,5 @@ "machine_start_gcode": ";===== machine: P1S ========================\n;===== date: 20231107 =====================\n;===== turn on the HB fan & MC board fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\nM710 A1 S255 ;turn on MC fan by default(P1S)\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_extruder]==\"PLA\"}\n {if (bed_temperature[initial_extruder] >45)||(bed_temperature_initial_layer[initial_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_extruder] >50)||(bed_temperature_initial_layer[initial_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== fmech mode fast check============================\n\n\n;===== nozzle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\n", "machine_end_gcode": ";===== date: 20230428 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n", "layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n{if timelapse_type == 0} ; timelapse without wipe tower\nM971 S11 C10 O0\n{elsif timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 X65 Y245 F20000 ; move to safe pos\nG17\nG2 Z{layer_z} I0.86 J0.86 P1 F20000\nG1 Y265 F3000\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 E[retraction_length] F300\nG1 X100 F5000\nG1 Y255 F20000\n{endif}\nM623\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change", - "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E-[retraction_distance_when_cut] F200\nM400\n{endif}\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E{retraction_distance_when_cut - 2} F200\nG1 E2 F20\nM400\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" + "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json index 115fab918a..795cbb741f 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json @@ -31,5 +31,5 @@ "Bambu Lab X1E 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index d64d979208..b56c45b13e 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -35,7 +35,7 @@ "Bambu Lab X1E 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "machine_end_gcode": ";===== date: 20240402 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n\n", "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nM620.11 S0\n{endif}\nM400\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\n{if long_retractions_when_cut[previous_extruder]}\nM620.11 S1 I[previous_extruder] E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM628 S1\nG92 E0\nG1 E{retraction_distances_when_cut[previous_extruder]} F[old_filament_e_feedrate]\nM400\nM629 S1\n{else}\nM620.11 S0\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json index 0ed084037f..b93fbd1013 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1E 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json index 46ab176b0d..468a7fcbb2 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1E 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1 =========================\n;===== date: 20230824 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json index 1799d2773a..fcb0cb21cf 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.2 nozzle.json @@ -31,5 +31,5 @@ "Bambu Lab X1 Carbon 0.2 nozzle", "Bambu Lab A1 0.2 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n\t{if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.160\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.080\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json index 99f878f4fc..83fd375a6e 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.4 nozzle.json @@ -37,7 +37,7 @@ "Bambu Lab X1 Carbon 0.4 nozzle", "Bambu Lab A1 0.4 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n\n", + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X231 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000\n\n G0 F1200.0 X231 Y15 Z0.2 E0.741\n G0 F1200.0 X226 Y15 Z0.2 E0.275\n G0 F1200.0 X226 Y8 Z0.2 E0.384\n G0 F1200.0 X216 Y8 Z0.2 E0.549\n G0 F1200.0 X216 Y1.5 Z0.2 E0.357\n\n G0 X48.0 E12.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E0.92 F1200.0\n G0 X35.0 Y6.0 E1.03 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.040\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.020\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E14.3 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623\n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4\n\n", "machine_end_gcode": ";===== date: 20240402 =====================\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\nM141 S0 ; turn off chamber \nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\nM104 S0 ; turn off hotend\n\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\n M400 ; wait all motion done\n M991 S0 P-1 ;end smooth timelapse at safe pos\n M400 S3 ;wait for last picture to be taken\nM623; end of \"timelapse_record_flag\"\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM960 S5 P0 ; turn off logo lamp\n\n", "change_filament_gcode": "M620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1 && (z_hop_types[current_extruder] == 0 || z_hop_types[current_extruder] == 3)}\nG17\nG2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nG1 X70 F21000\nG1 Y245\nG1 Y265 F3000\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\nG1 X90 F3000\nG1 Y255 F4000\nG1 X100 F5000\nG1 X120 F15000\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E-[retraction_distance_when_cut] F200\nM400\n{endif}\nG1 X20 Y50 F21000\nG1 Y-3\n{if toolchange_count == 2}\n; get travel path for change filament\nM620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\nM620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\nM620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\n{if next_extruder < 255}\nM400\n{if long_retraction_when_cut && retraction_distance_when_cut > 2}\nG1 E{retraction_distance_when_cut - 2} F200\nG1 E2 F20\nM400\n{endif}\nG92 E0\n{if flush_length_1 > 1}\nM83\n; FLUSH_START\n; always use highest temperature to flush\nM400\n{if filament_type[next_extruder] == \"PETG\"}\nM109 S260\n{elsif filament_type[next_extruder] == \"PVA\"}\nM109 S210\n{else}\nM109 S[nozzle_temperature_range_high]\n{endif}\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_4 > 1}\n\nG91\nG1 X3 F12000; move aside to extrude\nG90\nM83\n\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n; FLUSH_START\nM400\nM109 S[new_filament_temp]\nG1 E2 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\n; FLUSH_END\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM106 P1 S255\nM400 S3\n\nG1 X70 F5000\nG1 X90 F3000\nG1 Y255 F4000\nG1 X105 F5000\nG1 Y265 F5000\nG1 X70 F10000\nG1 X100 F5000\nG1 X70 F10000\nG1 X100 F5000\n\nG1 X70 F10000\nG1 X80 F15000\nG1 X60\nG1 X80\nG1 X60\nG1 X80 ; shake to put down garbage\nG1 X100 F5000\nG1 X165 F15000; wipe and shake\nG1 Y256 ; move Y to aside, prevent collision\nM400\nG1 Z{max_layer_z + 3.0} F3000\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\n" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json index 6e116866e5..920dad2ed4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.6 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1 Carbon 0.6 nozzle", "Bambu Lab A1 0.6 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E1.166\nG0 X231 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.333\n G0 F1200.0 X226 Y15 Z0.2 E0.495\n G0 F1200.0 X226 Y8 Z0.2 E0.691\n G0 F1200.0 X216 Y8 Z0.2 E0.988\n G0 F1200.0 X216 Y1.5 Z0.2 E0.642\n\n G0 X48.0 E20.56 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.56 F1200.0\n G0 X35.0 Y6.0 E1.75 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.030\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.015\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X18 E23.9 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623\n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json index eea8eab1a0..a3e4c8089d 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E 0.8 nozzle.json @@ -33,5 +33,5 @@ "Bambu Lab X1 Carbon 0.8 nozzle", "Bambu Lab A1 0.8 nozzle" ], - "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM142 P1 R35 S40\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": ";===== machine: X1E =========================\n;===== date: 20230815 =====================\n;===== turn on the HB fan =================\nM104 S75 ;set extruder temp to turn on the HB fan and prevent filament oozing from nozzle\n;===== reset machine status =================\nM290 X40 Y40 Z2.6666666\nG91\nM17 Z0.4 ; lower the z-motor current\nG380 S2 Z30 F300 ; G380 is same as G38; lower the hotbed , to prevent the nozzle is below the hotbed\nG380 S2 Z-25 F300 ;\nG1 Z5 F300;\nG90\nM17 X1.2 Y1.2 Z0.75 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\nM204 S10000 ; init ACC set to 10m/s^2\n\n;==== if Chamber Cooling is necessary ==== \n\n{if (filament_type[initial_no_support_extruder]==\"PLA\") || (filament_type[initial_no_support_extruder]==\"PETG\") || (filament_type[initial_no_support_extruder]==\"TPU\") || (filament_type[initial_no_support_extruder]==\"PVA\") || (filament_type[initial_no_support_extruder]==\"PLA-CF\") || (filament_type[initial_no_support_extruder]==\"PETG-CF\")}\nM1002 gcode_claim_action : 29\nG28\nG90\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nG1 Z75\nM140 S0 ; stop heatbed from heating\nM106 P2 S255 ; open auxiliary fan for cooling\nM106 P3 S255 ; open chamber fan for cooling\nM191 S0 ; wait for chamber temp\nM106 P3 S0 ; reset chamber fan cmd\nM106 P2 S0; reset auxiliary fan cmd\n{endif}\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on\nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_no_support_extruder]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_no_support_extruder]A\nM620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S290 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n\n;===== set chamber temperature ==========\n{if (overall_chamber_temperature >= 40)}\nM106 P2 S255 ; open big fan to help heating\nM141 S[overall_chamber_temperature] ; Let Chamber begin to heat\n{endif}\n\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X128 Y128\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n;===== check scanner clarity ===========================\nG1 X128 Y128 F24000\nG28 Z P0\nM972 S5 P0\nG1 X230 Y15 F24000\n;===== check scanner clarity end =======================\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\n\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_no_support_extruder]==\"PLA\"}\n {if (bed_temperature[initial_no_support_extruder] >45)||(bed_temperature_initial_layer[initial_no_support_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[initial_no_support_extruder] >50)||(bed_temperature_initial_layer[initial_no_support_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n M142 P1 R35 S40\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY\n;===== mech mode fast check============================\n\n{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1\nG90\nG1 X128 Y128 F20000\nM976 S3 P2 ;register void printing detection\n{endif}\n\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\nG1 X18.0 Y0.5 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature[initial_no_support_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\nG0 X240 E15\nG0 Y11 E1.364 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E0.3\nG0 Y1.5 E1.300\nG0 X231 E1.160 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.04} ; for Textured PEI Plate\n{endif}\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n G0 F1200.0 X231 Y15 Z0.2 E1.482\n G0 F1200.0 X226 Y15 Z0.2 E0.550\n G0 F1200.0 X226 Y8 Z0.2 E0.768\n G0 F1200.0 X216 Y8 Z0.2 E1.098\n G0 F1200.0 X216 Y1.5 Z0.2 E0.714\n\n G0 X48.0 E25.0 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X48.0 Y14 E1.70 F1200.0\n G0 X35.0 Y6.0 E1.90 F1200.0\n\n ;=========== extruder cali extrusion ==================\n T1000\n M83\n {if default_acceleration > 0}\n {if outer_wall_acceleration > 0}\n M204 S[outer_wall_acceleration]\n {else}\n M204 S[default_acceleration]\n {endif}\n {endif}\n G0 X35.000 Y6.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800\n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800\n G0 X185.000 E9.35441 F4800\n G0 X187 Z0\n G1 F1500.000 E-0.800\n G0 Z1\n G0 X180 Z0.3 F18000\n\n M900 L1000.0 M1.0\n M900 K0.020\n G0 X45.000 F30000\n G0 Y8.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.010\n G0 X45.000 F30000\n G0 Y10.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n M400\n\n G0 X45.000 F30000\n M900 K0.000\n G0 X45.000 F30000\n G0 Y12.000 F30000\n G1 F1500.000 E0.800\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y6.000 F30000 ; move y to clear pos\n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM1002 judge_flag extrude_cali_flag\nM622 J0\n G0 X231 Y1.5 F30000\n G0 X129 E14 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nM623\n\nM104 S140\n\n\n;=========== laser and rgb calibration ===========\nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X235.0 Y1.0 Z0.3 F18000.0;Move to first extrude line pos\nM400 P100\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y6.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G0 F6000 X228.500 Y4.500 Z0.000\n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P0\n M400 P500\n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P200\n M971 S5 P1\n M973 S2 P1\n M400 P500\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P3\n G0 Z0.500 F12000\n M960 S0 P0\n M960 S2 P1\n G0 X228.5 Y11.0\n M400 P200\n M971 S5 P4\n M973 S2 P0\n M400 P500\n M960 S0 P0\n M960 S1 P1\n G0 X221.00 Y4.50\n M400 P500\n M971 S5 P2\n M963 S1\n M400 P1500\n M964\n T1100\n G1 Z3 F3000\n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100\n M400 P400\n M960 S0 P0\n G0 F30000.000 Y10.000 X65.000 Z0.000\n M400 P400\n M960 S1 P1\n M400 P50\n\n M969 S1 N3 A2000\n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100\n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y4.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000\n T1000\n G0 X45.000 Y4.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600\n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623\n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n M973 S4\n\nM623\n\n;===== wait chamber temperature reaching the reference value =======\n{if (overall_chamber_temperature >= 40)}\nM191 S[overall_chamber_temperature] ; wait for chamber temp\nM106 P2 S0 ; reset chamber fan cmd\n{endif}\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\nG1 E{-retraction_length[initial_no_support_extruder]} F1800\nG1 X128.0 Y253.0 Z0.2 F24000.0;Move to start position\nG1 E{retraction_length[initial_no_support_extruder]} F1800\nM109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60}\nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/fdm_machine_common.json b/resources/profiles/BBL/machine/fdm_machine_common.json index e736dc6662..59c372c15f 100644 --- a/resources/profiles/BBL/machine/fdm_machine_common.json +++ b/resources/profiles/BBL/machine/fdm_machine_common.json @@ -12,6 +12,7 @@ "deretraction_speed": [ "40" ], + "enable_long_retraction_when_cut" : "0", "extruder_colour": [ "#FCE94F" ], @@ -20,6 +21,9 @@ ], "gcode_flavor": "marlin", "silent_mode": "0", + "long_retractions_when_cut": [ + "0" + ], "machine_max_acceleration_e": [ "5000" ], @@ -88,6 +92,9 @@ "retract_when_changing_layer": [ "1" ], + "retraction_distances_when_cut": [ + "18" + ], "retraction_length": [ "5" ], diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json index c8d9a9df8a..eece4b8430 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1 0.4 nozzle.json @@ -14,8 +14,8 @@ "printer_variant": "0.4", "printable_area": [ "0x0", - "230x0", - "230x260", + "225x0", + "225x260", "0x260" ], "printable_height": "180", @@ -62,7 +62,7 @@ "40" ], "machine_end_gcode": ";Retract the filament\nG92 E1\nG1 E-5 F900\n;Move nozzle fast\nG1 X5 Y258 F15000\n;Move Bed Down\nG1 Z180 F6000\n\n;Set machine to idle\nM104 S0\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors", - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nM557 P5 X{adaptive_bed_mesh_min[0]}:{adaptive_bed_mesh_max[0]} Y{adaptive_bed_mesh_min[1]}:{adaptive_bed_mesh_max[1]} ; dynamic meshing\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", "max_layer_height": [ "0.38" ], @@ -73,11 +73,15 @@ "0.7" ], "retraction_speed": [ - "65" + "50" ], "z_hop": [ "0.2" ], + "bed_mesh_max": "200,235", + "bed_mesh_min": "10,20", + "fan_kickstart": "0.5", + "fan_speedup_time": "1", "z_hop_types": [ "Auto Lift" ] diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json index df463d1523..a61993fdd9 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL 0.6 nozzle.json @@ -62,7 +62,7 @@ "40" ], "machine_end_gcode": ";Retract the filament\nG92 E1\nG1 E-5 F900\n;Move nozzle fast\nG1 X5 Y369 F15000\n;Move Bed Down\nG1 Z400 F6000\n\n;Set machine to idle\nT-1\nM104 S0\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM84 ; disable motors\n", - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] T0 ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM106 S0 ; Turn Fan off\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM190 S[first_layer_bed_temperature] ; set bed temp\nM109 S160 ; set extruder temp\nM557 P5 X{adaptive_bed_mesh_min[0]}:{adaptive_bed_mesh_max[0]} Y{adaptive_bed_mesh_min[1]}:{adaptive_bed_mesh_max[1]} ; dynamic meshing\nG28 ; home all\nG1 Z15 F6000 ; move the printer down 15mm\nG1 Y1.0 Z0.3 F4000 ; move print head up\nM109 S[first_layer_temperature] ; set extruder temp\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM109 S[first_layer_temperature] T0 ; wait for extruder temp\n;prime the extruder\nG1 X5 Y2 Z0.3 F6000; go to edge of build volume\nG1 X60 E10 F1000 ;gentle purge start\nG1 X110 E25 F1000; heavy purge\nG1 X60;", "max_layer_height": [ "0.6" ], @@ -70,11 +70,15 @@ "0.7" ], "retraction_speed": [ - "65" + "50" ], "z_hop": [ "0.2" ], + "bed_mesh_max": "320,330", + "bed_mesh_min": "10,20", + "fan_kickstart": "0.5", + "fan_speedup_time": "1", "z_hop_types": [ "Auto Lift" ] diff --git a/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json b/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json index d43eb96b32..19f49c5a0e 100644 --- a/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json +++ b/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json @@ -5,7 +5,7 @@ "instantiation": "false", "printer_technology": "FFF", "deretraction_speed": [ - "70" + "50" ], "extruder_colour": [ "#003f87" @@ -63,7 +63,7 @@ "20" ], "machine_max_jerk_z": [ - "0.5" + "0.2" ], "machine_min_extruding_rate": [ "0" @@ -86,7 +86,7 @@ ], "printer_settings_id": "", "retraction_minimum_travel": [ - "2" + "2.6" ], "retract_before_wipe": [ "70%" @@ -110,7 +110,7 @@ "0" ], "retraction_speed": [ - "70" + "50" ], "single_extruder_multi_material": "1", "change_filament_gcode": "", @@ -119,7 +119,7 @@ ], "thumbnails_format": "QOI", "thumbnails": [ - "300x300" + "160x160" ], "z_lift_type": "Auto Lift", "default_print_profile": "", diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index e8cdb74351..277f57e641 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,1310 +1,1354 @@ { - "name": "Creality", - "version": "02.00.02.00", - "force_update": "0", - "description": "Creality configurations", - "machine_model_list": [ - { - "name": "Creality CR-10 V2", - "sub_path": "machine/Creality CR-10 V2.json" - }, - { - "name": "Creality CR-10 Max", - "sub_path": "machine/Creality CR-10 Max.json" - }, - { - "name": "Creality CR-10 SE", - "sub_path": "machine/Creality CR-10 SE.json" - }, - { - "name": "Creality CR-6 SE", - "sub_path": "machine/Creality CR-6 SE.json" - }, - { - "name": "Creality CR-6 Max", - "sub_path": "machine/Creality CR-6 Max.json" - }, - { - "name": "Creality Ender-3 V2", - "sub_path": "machine/Creality Ender-3 V2.json" - }, - { - "name": "Creality Ender-3 V2 Neo", - "sub_path": "machine/Creality Ender-3 V2 Neo.json" - }, - { - "name": "Creality Ender-3 S1", - "sub_path": "machine/Creality Ender-3 S1.json" - }, - { - "name": "Creality Ender-3", - "sub_path": "machine/Creality Ender-3.json" - }, - { - "name":"Creality Ender-3 Pro", - "sub_path": "machine/Creality Ender-3 Pro.json" - }, - { - "name": "Creality Ender-3 S1 Pro", - "sub_path": "machine/Creality Ender-3 S1 Pro.json" - }, - { - "name": "Creality Ender-3 S1 Plus", - "sub_path": "machine/Creality Ender-3 S1 Plus.json" - }, - { - "name": "Creality Ender-3 V3 SE", - "sub_path": "machine/Creality Ender-3 V3 SE.json" - }, - { - "name": "Creality Ender-3 V3 KE", - "sub_path": "machine/Creality Ender-3 V3 KE.json" - }, - { - "name": "Creality Ender-5", - "sub_path": "machine/Creality Ender-5.json" - }, - { - "name": "Creality Ender-5 Plus", - "sub_path": "machine/Creality Ender-5 Plus.json" - }, - { - "name": "Creality Ender-5 Pro (2019)", - "sub_path": "machine/Creality Ender-5 Pro (2019).json" - }, - { - "name": "Creality Ender-5S", - "sub_path": "machine/Creality Ender-5S.json" - }, - { - "name": "Creality Ender-5 S1", - "sub_path": "machine/Creality Ender-5 S1.json" - }, - { - "name": "Creality Ender-6", - "sub_path": "machine/Creality Ender-6.json" - }, - { - "name": "Creality Sermoon V1", - "sub_path": "machine/Creality Sermoon V1.json" - }, - { - "name": "Creality K1", - "sub_path": "machine/Creality K1.json" - }, - { - "name": "Creality K1C", - "sub_path": "machine/Creality K1C.json" - }, - { - "name": "Creality K1 Max", - "sub_path": "machine/Creality K1 Max.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_creality_common", - "sub_path": "process/fdm_process_creality_common.json" - }, - { - "name": "fdm_process_common_klipper", - "sub_path": "process/fdm_process_common_klipper.json" - }, - { - "name": "fdm_process_creality_common_0_2", - "sub_path": "process/fdm_process_creality_common_0_2.json" - }, - { - "name": "fdm_process_creality_common_0_25", - "sub_path": "process/fdm_process_creality_common_0_25.json" - }, - { - "name": "fdm_process_creality_common_0_3", - "sub_path": "process/fdm_process_creality_common_0_3.json" - }, - { - "name": "fdm_process_creality_common_0_5", - "sub_path": "process/fdm_process_creality_common_0_5.json" - }, - { - "name": "fdm_process_creality_common_0_6", - "sub_path": "process/fdm_process_creality_common_0_6.json" - }, - { - "name": "fdm_process_creality_common_0_8", - "sub_path": "process/fdm_process_creality_common_0_8.json" - }, - { - "name": "fdm_process_creality_common_1_0", - "sub_path": "process/fdm_process_creality_common_1_0.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.2", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.6", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.8", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.12mm Fine @Creality Ender3 Pro 0.4", - "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 Pro 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 Pro 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 Pro 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.2", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.4", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json" - }, - { - "name": "0.28mm Draft @Creality Ender3 Pro 0.8", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json" - }, - { - "name": "0.08mm SuperDetail @Creality CR-6 0.2", - "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" - }, - { - "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.10mm HighDetail @Creality CR-6 0.4.json", - "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" - }, - { - "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.2", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.2.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.4", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.4.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.6", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.6.json" - }, - { - "name": "0.12mm Detail @Creality Ender3 0.8", - "sub_path": "process/0.12mm Fine @Creality Ender3 0.8.json" - }, - { - "name": "0.12mm Fine @Creality CR10Max", - "sub_path": "process/0.12mm Fine @Creality CR10Max.json" - }, - { - "name": "0.12mm Detail @Creality CR-6 0.2", - "sub_path": "process/0.12mm Detail @Creality CR-6 0.2.json" - }, - { - "name": "0.12mm Detail @Creality CR-6 0.4", - "sub_path": "process/0.12mm Detail @Creality CR-6 0.4.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V2", - "sub_path": "process/0.12mm Fine @Creality Ender3V2.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V2Neo", - "sub_path": "process/0.12mm Fine @Creality Ender3V2Neo.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3KE", - "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.2", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.4", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.4.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.6", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.12mm Fine @Creality Ender3V3SE 0.8", - "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.8.json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.12mm Fine @Creality Ender5Pro (2019)", - "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" - }, - { - "name": "0.12mm Fine @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.12mm Fine @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.12mm Fine @Creality K1C", - "sub_path": "process/0.12mm Fine @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.12mm Fine @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.16mm Optimal @Creality CR10V2", - "sub_path": "process/0.16mm Optimal @Creality CR10V2.json" - }, - { - "name": "0.15mm Optimal @Creality CR10Max", - "sub_path": "process/0.15mm Optimal @Creality CR10Max.json" - }, - { - "name": "0.15mm Optimal @Creality Ender3V2", - "sub_path": "process/0.15mm Optimal @Creality Ender3V2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V2Neo", - "sub_path": "process/0.16mm Optimal @Creality Ender3V2Neo.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3 0.8.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Pro", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Pro.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3S1Plus 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3KE", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.4", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.4.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender3V3SE 0.8", - "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.8.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5", - "sub_path": "process/0.16mm Optimal @Creality Ender5.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Plus", - "sub_path": "process/0.16mm Optimal @Creality Ender5Plus.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.2", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.2.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.15mm Optimal @Creality Ender5Pro (2019)", - "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5S", - "sub_path": "process/0.16mm Optimal @Creality Ender5S.json" - }, - { - "name": "0.16mm Optimal @Creality Ender5S1", - "sub_path": "process/0.16mm Optimal @Creality Ender5S1.json" - }, - { - "name": "0.16mm Optimal @Creality Ender6", - "sub_path": "process/0.16mm Optimal @Creality Ender6.json" - }, - { - "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.16mm Optimal @Creality K1C", - "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality CR10V2", - "sub_path": "process/0.20mm Standard @Creality CR10V2.json" - }, - { - "name": "0.20mm Standard @Creality CR10Max", - "sub_path": "process/0.20mm Standard @Creality CR10Max.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.2", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.2.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.4", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.4.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.6", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.6.json" - }, - { - "name": "0.20mm Standard @Creality CR10SE 0.8", - "sub_path": "process/0.20mm Standard @Creality CR10SE 0.8.json" - }, - { - "name": "0.20mm Standard @Creality CR-6 0.4", - "sub_path": "process/0.20mm Standard @Creality CR-6 0.4.json" - }, - { - "name": "0.20mm Standard @Creality CR-6 0.6", - "sub_path": "process/0.20mm Standard @Creality CR-6 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3", - "sub_path": "process/0.20mm Standard @Creality Ender3.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V2", - "sub_path": "process/0.20mm Standard @Creality Ender3V2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V2Neo", - "sub_path": "process/0.20mm Standard @Creality Ender3V2Neo.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1", - "sub_path": "process/0.20mm Standard @Creality Ender3S1.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Pro", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Pro.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3S1Plus 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3KE", - "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.2", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.4", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.4.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender3V3SE 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender5", - "sub_path": "process/0.20mm Standard @Creality Ender5.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Plus", - "sub_path": "process/0.20mm Standard @Creality Ender5Plus.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.25", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.25.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019)", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019).json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.20mm Standard @Creality Ender5S", - "sub_path": "process/0.20mm Standard @Creality Ender5S.json" - }, - { - "name": "0.20mm Standard @Creality Ender5S1", - "sub_path": "process/0.20mm Standard @Creality Ender5S1.json" - }, - { - "name": "0.20mm Standard @Creality Ender6", - "sub_path": "process/0.20mm Standard @Creality Ender6.json" - }, - { - "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality K1C", - "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3 0.8.json" - }, - { - "name": "0.24mm Draft @Creality CR10Max", - "sub_path": "process/0.24mm Draft @Creality CR10Max.json" - }, - { - "name": "0.24mm Draft @Creality CR-6 0.4", - "sub_path": "process/0.24mm Draft @Creality CR-6 0.4.json" - }, - { - "name": "0.24mm Draft @Creality CR-6 0.6", - "sub_path": "process/0.24mm Draft @Creality CR-6 0.6.json" - }, - { - "name": "0.24mm Optimal @Creality CR-6 0.8", - "sub_path": "process/0.24mm Optimal @Creality CR-6 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V2", - "sub_path": "process/0.24mm Draft @Creality Ender3V2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V2Neo", - "sub_path": "process/0.24mm Draft @Creality Ender3V2Neo.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3KE", - "sub_path": "process/0.24mm Draft @Creality Ender3V3KE.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3V3SE 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.2", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.2.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.4", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.4.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender3S1Plus 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.8.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.3", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.3.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019)", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.2", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.2.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.4", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.4.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.6.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender3 0.8", - "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.8.json" - }, - { - "name": "0.28mm SuperDraft @Creality CR-6 0.4", - "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.4.json" - }, - { - "name": "0.28mm SuperDraft @Creality CR-6 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.6.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0", - "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0.json" - }, - { - "name": "0.32mm Chunky @Creality CR-6 0.6", - "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" - }, - { - "name": "0.32mm Standard @Creality CR-6 0.8", - "sub_path": "process/0.32mm Standard @Creality CR-6 0.8.json" - }, - { - "name": "0.36mm SuperChunky @Creality CR-6 0.6", - "sub_path": "process/0.36mm SuperChunky @Creality CR-6 0.6.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.5", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.5.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.6", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.6.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.8", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.8.json" - }, - { - "name": "0.36mm Chunky @Creality Ender5Pro (2019) 1.0", - "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 1.0.json" - }, - { - "name": "0.40mm Draft @Creality CR-6 0.8", - "sub_path": "process/0.40mm Draft @Creality CR-6 0.8.json" - }, - { - "name": "0.44mm SuperExtraChunky @Creality CR-6 0.6", - "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6 0.6.json" - }, - { - "name": "0.48mm Chunky @Creality CR-6 0.8", - "sub_path": "process/0.48mm Chunky @Creality CR-6 0.8.json" - }, - { - "name": "0.48mm Draft @Creality CR-6 0.8", - "sub_path": "process/0.48mm Draft @Creality CR-6 0.8.json" - }, - { - "name": "0.56mm SuperChunky @Creality CR-6 0.8", - "sub_path": "process/0.56mm SuperChunky @Creality CR-6 0.8.json" - }, - { - "name": "0.16mm Optimal @Creality Sermoon V1", - "sub_path": "process/0.16mm Optimal @Creality Sermoon V1.json" - }, - { - "name": "0.20mm Standard @Creality Sermoon V1", - "sub_path": "process/0.20mm Standard @Creality Sermoon V1.json" - }, - { - "name": "0.28mm Standard @Creality Sermoon V1", - "sub_path": "process/0.28mm Standard @Creality Sermoon V1.json" - }, - { - "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.24mm Optimal @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.24mm Optimal @Creality K1C", - "sub_path": "process/0.24mm Optimal @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K1C", - "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K1C", - "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.32mm Optimal @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.32mm Optimal @Creality K1C", - "sub_path": "process/0.32mm Optimal @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json" - }, - { - "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.36mm Draft @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.36mm Draft @Creality K1C", - "sub_path": "process/0.36mm Draft @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.36mm Draft @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K1C", - "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" - }, - { - "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.48mm Draft @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.48mm Draft @Creality K1C", - "sub_path": "process/0.48mm Draft @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.48mm Draft @Creality K1Max (0.8 nozzle).json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "Creality Generic ABS", - "sub_path": "filament/Creality Generic ABS.json" - }, - { - "name": "Creality Generic ASA", - "sub_path": "filament/Creality Generic ASA.json" - }, - { - "name": "Creality Generic PA-CF", - "sub_path": "filament/Creality Generic PA-CF.json" - }, - { - "name": "Creality Generic PC", - "sub_path": "filament/Creality Generic PC.json" - }, - { - "name": "Creality Generic PETG", - "sub_path": "filament/Creality Generic PETG.json" - }, - { - "name": "Creality Generic PLA", - "sub_path": "filament/Creality Generic PLA.json" - }, - { - "name": "Creality HF Generic PLA", - "sub_path": "filament/Creality HF Generic PLA.json" - }, - { - "name": "Creality HF Generic Speed PLA", - "sub_path": "filament/Creality HF Generic Speed PLA.json" - }, - { - "name": "Creality Generic PLA-CF", - "sub_path": "filament/Creality Generic PLA-CF.json" - }, - { - "name": "Creality Generic TPU", - "sub_path": "filament/Creality Generic TPU.json" - }, - { - "name": "Creality Generic ABS @Ender-3V3-all", - "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" - }, - { - "name": "Creality Generic ASA @Ender-3V3-all", - "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PETG @Ender-3V3-all", - "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA High Speed @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA Matte @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA Silk @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" - }, - { - "name": "Creality Generic TPU @Ender-3V3-all", - "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" - }, - { - "name": "Creality Generic ABS @K1-all", - "sub_path": "filament/Creality Generic ABS @K1-all.json" - }, - { - "name": "Creality Generic ASA @K1-all", - "sub_path": "filament/Creality Generic ASA @K1-all.json" - }, - { - "name": "Creality Generic PA-CF @K1-all", - "sub_path": "filament/Creality Generic PA-CF @K1-all.json" - }, - { - "name": "Creality Generic PC @K1-all", - "sub_path": "filament/Creality Generic PC @K1-all.json" - }, - { - "name": "Creality Generic PETG @K1-all", - "sub_path": "filament/Creality Generic PETG @K1-all.json" - }, - { - "name": "Creality Generic PLA @K1-all", - "sub_path": "filament/Creality Generic PLA @K1-all.json" - }, - { - "name": "Creality Generic PLA High Speed @K1-all", - "sub_path": "filament/Creality Generic PLA High Speed @K1-all.json" - }, - { - "name": "Creality Generic PLA Matte @K1-all", - "sub_path": "filament/Creality Generic PLA Matte @K1-all.json" - }, - { - "name": "Creality Generic PLA Silk @K1-all", - "sub_path": "filament/Creality Generic PLA Silk @K1-all.json" - }, - { - "name": "Creality Generic PLA-CF @K1-all", - "sub_path": "filament/Creality Generic PLA-CF @K1-all.json" - }, - { - "name": "Creality Generic TPU @K1-all", - "sub_path": "filament/Creality Generic TPU @K1-all.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_creality_common", - "sub_path": "machine/fdm_creality_common.json" - }, - { - "name": "Creality CR-10 V2 0.4 nozzle", - "sub_path": "machine/Creality CR-10 V2 0.4 nozzle.json" - }, - { - "name": "Creality CR-10 Max 0.4 nozzle", - "sub_path": "machine/Creality CR-10 Max 0.4 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.2 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.2 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.4 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.4 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.6 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.6 nozzle.json" - }, - { - "name": "Creality CR-10 SE 0.8 nozzle", - "sub_path": "machine/Creality CR-10 SE 0.8 nozzle.json" - }, - { - "name": "Creality Ender-6 0.4 nozzle", - "sub_path": "machine/Creality Ender-6 0.4 nozzle.json" - }, - { - "name": "Creality CR-6 SE 0.2 nozzle", - "sub_path": "machine/Creality CR-6 SE 0.2 nozzle.json" - }, - { - "name": "Creality CR-6 SE 0.4 nozzle", - "sub_path": "machine/Creality CR-6 SE 0.4 nozzle.json" - }, - { - "name": "Creality CR-6 SE 0.6 nozzle", - "sub_path": "machine/Creality CR-6 SE 0.6 nozzle.json" - }, - { - "name": "Creality CR-6 SE 0.8 nozzle", - "sub_path": "machine/Creality CR-6 SE 0.8 nozzle.json" - }, - { - "name": "Creality CR-6 Max 0.2 nozzle", - "sub_path": "machine/Creality CR-6 Max 0.2 nozzle.json" - }, - { - "name": "Creality CR-6 Max 0.4 nozzle", - "sub_path": "machine/Creality CR-6 Max 0.4 nozzle.json" - }, - { - "name": "Creality CR-6 Max 0.6 nozzle", - "sub_path": "machine/Creality CR-6 Max 0.6 nozzle.json" - }, - { - "name": "Creality CR-6 Max 0.8 nozzle", - "sub_path": "machine/Creality CR-6 Max 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 V2 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V2 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 V2 Neo 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V2 Neo 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 Pro 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 Pro 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 S1 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Pro 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Pro 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 S1 Plus 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 S1 Plus 0.8 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.2 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.2 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.4 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.4 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.6 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.6 nozzle.json" - }, - { - "name": "Creality Ender-3 V3 SE 0.8 nozzle", - "sub_path": "machine/Creality Ender-3 V3 SE 0.8 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-5 0.4 nozzle", - "sub_path": "machine/Creality Ender-5 0.4 nozzle.json" - }, - { - "name": "Creality Ender-5 Plus 0.4 nozzle", - "sub_path": "machine/Creality Ender-5 Plus 0.4 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.2 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.25 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.3 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.4 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.5 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.6 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 0.8 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json" - }, - { - "name": "Creality Ender-5 Pro (2019) 1.0 nozzle", - "sub_path": "machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json" - }, - { - "name": "Creality Ender-5S 0.4 nozzle", - "sub_path": "machine/Creality Ender-5S 0.4 nozzle.json" - }, - { - "name": "Creality Ender-5 S1 0.4 nozzle", - "sub_path": "machine/Creality Ender-5 S1 0.4 nozzle.json" - }, - { - "name": "Creality Sermoon V1 0.4 nozzle", - "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" - }, - { - "name": "Creality K1 (0.4 nozzle)", - "sub_path": "machine/Creality K1 (0.4 nozzle).json" - }, - { - "name": "Creality K1 (0.6 nozzle)", - "sub_path": "machine/Creality K1 (0.6 nozzle).json" - }, - { - "name": "Creality K1 (0.8 nozzle)", - "sub_path": "machine/Creality K1 (0.8 nozzle).json" - }, - { - "name": "Creality K1C 0.4 nozzle", - "sub_path": "machine/Creality K1C 0.4 nozzle.json" - }, - { - "name": "Creality K1C 0.6 nozzle", - "sub_path": "machine/Creality K1C 0.6 nozzle.json" - }, - { - "name": "Creality K1C 0.8 nozzle", - "sub_path": "machine/Creality K1C 0.8 nozzle.json" - }, - { - "name": "Creality K1 Max (0.4 nozzle)", - "sub_path": "machine/Creality K1 Max (0.4 nozzle).json" - }, - { - "name": "Creality K1 Max (0.6 nozzle)", - "sub_path": "machine/Creality K1 Max (0.6 nozzle).json" - }, - { - "name": "Creality K1 Max (0.8 nozzle)", - "sub_path": "machine/Creality K1 Max (0.8 nozzle).json" - } - ] + "name": "Creality", + "version": "02.00.02.00", + "force_update": "0", + "description": "Creality configurations", + "machine_model_list": [ + { + "name": "Creality CR-10 V2", + "sub_path": "machine/Creality CR-10 V2.json" + }, + { + "name": "Creality CR-10 Max", + "sub_path": "machine/Creality CR-10 Max.json" + }, + { + "name": "Creality CR-10 SE", + "sub_path": "machine/Creality CR-10 SE.json" + }, + { + "name": "Creality CR-6 SE", + "sub_path": "machine/Creality CR-6 SE.json" + }, + { + "name": "Creality CR-6 Max", + "sub_path": "machine/Creality CR-6 Max.json" + }, + { + "name": "Creality Ender-3 V2", + "sub_path": "machine/Creality Ender-3 V2.json" + }, + { + "name": "Creality Ender-3 V2 Neo", + "sub_path": "machine/Creality Ender-3 V2 Neo.json" + }, + { + "name": "Creality Ender-3 S1", + "sub_path": "machine/Creality Ender-3 S1.json" + }, + { + "name": "Creality Ender-3", + "sub_path": "machine/Creality Ender-3.json" + }, + { + "name": "Creality Ender-3 Pro", + "sub_path": "machine/Creality Ender-3 Pro.json" + }, + { + "name": "Creality Ender-3 S1 Pro", + "sub_path": "machine/Creality Ender-3 S1 Pro.json" + }, + { + "name": "Creality Ender-3 S1 Plus", + "sub_path": "machine/Creality Ender-3 S1 Plus.json" + }, + { + "name": "Creality Ender-3 V3 SE", + "sub_path": "machine/Creality Ender-3 V3 SE.json" + }, + { + "name": "Creality Ender-3 V3 KE", + "sub_path": "machine/Creality Ender-3 V3 KE.json" + }, + { + "name": "Creality Ender-3 V3", + "sub_path": "machine/Creality Ender-3 V3.json" + }, + { + "name": "Creality Ender-5", + "sub_path": "machine/Creality Ender-5.json" + }, + { + "name": "Creality Ender-5 Plus", + "sub_path": "machine/Creality Ender-5 Plus.json" + }, + { + "name": "Creality Ender-5 Pro (2019)", + "sub_path": "machine/Creality Ender-5 Pro (2019).json" + }, + { + "name": "Creality Ender-5S", + "sub_path": "machine/Creality Ender-5S.json" + }, + { + "name": "Creality Ender-5 S1", + "sub_path": "machine/Creality Ender-5 S1.json" + }, + { + "name": "Creality Ender-6", + "sub_path": "machine/Creality Ender-6.json" + }, + { + "name": "Creality Sermoon V1", + "sub_path": "machine/Creality Sermoon V1.json" + }, + { + "name": "Creality K1", + "sub_path": "machine/Creality K1.json" + }, + { + "name": "Creality K1C", + "sub_path": "machine/Creality K1C.json" + }, + { + "name": "Creality K1 Max", + "sub_path": "machine/Creality K1 Max.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_creality_common", + "sub_path": "process/fdm_process_creality_common.json" + }, + { + "name": "fdm_process_common_klipper", + "sub_path": "process/fdm_process_common_klipper.json" + }, + { + "name": "fdm_process_creality_common_0_2", + "sub_path": "process/fdm_process_creality_common_0_2.json" + }, + { + "name": "fdm_process_creality_common_0_25", + "sub_path": "process/fdm_process_creality_common_0_25.json" + }, + { + "name": "fdm_process_creality_common_0_3", + "sub_path": "process/fdm_process_creality_common_0_3.json" + }, + { + "name": "fdm_process_creality_common_0_5", + "sub_path": "process/fdm_process_creality_common_0_5.json" + }, + { + "name": "fdm_process_creality_common_0_6", + "sub_path": "process/fdm_process_creality_common_0_6.json" + }, + { + "name": "fdm_process_creality_common_0_8", + "sub_path": "process/fdm_process_creality_common_0_8.json" + }, + { + "name": "fdm_process_creality_common_1_0", + "sub_path": "process/fdm_process_creality_common_1_0.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.2", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.6", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.8", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.12mm Fine @Creality Ender3 Pro 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 Pro 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 Pro 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 Pro 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.2", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.4", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json" + }, + { + "name": "0.28mm Draft @Creality Ender3 Pro 0.8", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json" + }, + { + "name": "0.08mm SuperDetail @Creality CR-6 0.2", + "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" + }, + { + "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.08mm SuperDetail @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.10mm HighDetail @Creality CR-6 0.4.json", + "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" + }, + { + "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.10mm HighDetail @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.10mm HighDetail @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.2", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.2.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.4.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.6", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.6.json" + }, + { + "name": "0.12mm Detail @Creality Ender3 0.8", + "sub_path": "process/0.12mm Fine @Creality Ender3 0.8.json" + }, + { + "name": "0.12mm Fine @Creality CR10Max", + "sub_path": "process/0.12mm Fine @Creality CR10Max.json" + }, + { + "name": "0.12mm Detail @Creality CR-6 0.2", + "sub_path": "process/0.12mm Detail @Creality CR-6 0.2.json" + }, + { + "name": "0.12mm Detail @Creality CR-6 0.4", + "sub_path": "process/0.12mm Detail @Creality CR-6 0.4.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V2", + "sub_path": "process/0.12mm Fine @Creality Ender3V2.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V2Neo", + "sub_path": "process/0.12mm Fine @Creality Ender3V2Neo.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3KE", + "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.2", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.4", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.6", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3SE 0.8", + "sub_path": "process/0.12mm Fine @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.12mm Fine @Creality Ender3V3", + "sub_path": "process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.12mm Fine @Creality Ender5Pro (2019)", + "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" + }, + { + "name": "0.12mm Fine @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.12mm Fine @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.12mm Fine @Creality K1C", + "sub_path": "process/0.12mm Fine @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.12mm Fine @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.12mm Detail @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.12mm Detail @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.16mm Optimal @Creality CR10V2", + "sub_path": "process/0.16mm Optimal @Creality CR10V2.json" + }, + { + "name": "0.15mm Optimal @Creality CR10Max", + "sub_path": "process/0.15mm Optimal @Creality CR10Max.json" + }, + { + "name": "0.15mm Optimal @Creality Ender3V2", + "sub_path": "process/0.15mm Optimal @Creality Ender3V2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V2Neo", + "sub_path": "process/0.16mm Optimal @Creality Ender3V2Neo.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Pro", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Pro.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3S1Plus 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3KE", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.4", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3SE 0.8", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Ender3V3", + "sub_path": "process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5", + "sub_path": "process/0.16mm Optimal @Creality Ender5.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Plus", + "sub_path": "process/0.16mm Optimal @Creality Ender5Plus.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.2", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.2.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.15mm Optimal @Creality Ender5Pro (2019)", + "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.16mm Optimal @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5S", + "sub_path": "process/0.16mm Optimal @Creality Ender5S.json" + }, + { + "name": "0.16mm Optimal @Creality Ender5S1", + "sub_path": "process/0.16mm Optimal @Creality Ender5S1.json" + }, + { + "name": "0.16mm Optimal @Creality Ender6", + "sub_path": "process/0.16mm Optimal @Creality Ender6.json" + }, + { + "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.16mm Optimal @Creality K1C", + "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality CR10V2", + "sub_path": "process/0.20mm Standard @Creality CR10V2.json" + }, + { + "name": "0.20mm Standard @Creality CR10Max", + "sub_path": "process/0.20mm Standard @Creality CR10Max.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.2", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.2.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.4", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.4.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.6", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.6.json" + }, + { + "name": "0.20mm Standard @Creality CR10SE 0.8", + "sub_path": "process/0.20mm Standard @Creality CR10SE 0.8.json" + }, + { + "name": "0.20mm Standard @Creality CR-6 0.4", + "sub_path": "process/0.20mm Standard @Creality CR-6 0.4.json" + }, + { + "name": "0.20mm Standard @Creality CR-6 0.6", + "sub_path": "process/0.20mm Standard @Creality CR-6 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3", + "sub_path": "process/0.20mm Standard @Creality Ender3.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V2", + "sub_path": "process/0.20mm Standard @Creality Ender3V2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V2Neo", + "sub_path": "process/0.20mm Standard @Creality Ender3V2Neo.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1", + "sub_path": "process/0.20mm Standard @Creality Ender3S1.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Pro", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Pro.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3S1Plus 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3S1Plus 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3KE", + "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.2", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.4", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3SE 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender3V3", + "sub_path": "process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality Ender5", + "sub_path": "process/0.20mm Standard @Creality Ender5.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Plus", + "sub_path": "process/0.20mm Standard @Creality Ender5Plus.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.25", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.25.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019)", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019).json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.20mm Standard @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.20mm Standard @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.20mm Standard @Creality Ender5S", + "sub_path": "process/0.20mm Standard @Creality Ender5S.json" + }, + { + "name": "0.20mm Standard @Creality Ender5S1", + "sub_path": "process/0.20mm Standard @Creality Ender5S1.json" + }, + { + "name": "0.20mm Standard @Creality Ender6", + "sub_path": "process/0.20mm Standard @Creality Ender6.json" + }, + { + "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality K1C", + "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3 0.8.json" + }, + { + "name": "0.24mm Draft @Creality CR10Max", + "sub_path": "process/0.24mm Draft @Creality CR10Max.json" + }, + { + "name": "0.24mm Draft @Creality CR-6 0.4", + "sub_path": "process/0.24mm Draft @Creality CR-6 0.4.json" + }, + { + "name": "0.24mm Draft @Creality CR-6 0.6", + "sub_path": "process/0.24mm Draft @Creality CR-6 0.6.json" + }, + { + "name": "0.24mm Optimal @Creality CR-6 0.8", + "sub_path": "process/0.24mm Optimal @Creality CR-6 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V2", + "sub_path": "process/0.24mm Draft @Creality Ender3V2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V2Neo", + "sub_path": "process/0.24mm Draft @Creality Ender3V2Neo.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3KE", + "sub_path": "process/0.24mm Draft @Creality Ender3V3KE.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3SE 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3V3SE 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3", + "sub_path": "process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality Ender3V3", + "sub_path": "process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.2", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.2.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.4", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.4.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender3S1Plus 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender3S1Plus 0.8.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.3", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.3.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019)", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.24mm Draft @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.2", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.2.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.4", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.4.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.6.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender3 0.8", + "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.8.json" + }, + { + "name": "0.30mm Standard @Creality Ender3V3", + "sub_path": "process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Creality Ender3V3", + "sub_path": "process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality CR-6 0.4", + "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.4.json" + }, + { + "name": "0.28mm SuperDraft @Creality CR-6 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.6.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0", + "sub_path": "process/0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0.json" + }, + { + "name": "0.32mm Chunky @Creality CR-6 0.6", + "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" + }, + { + "name": "0.32mm Standard @Creality CR-6 0.8", + "sub_path": "process/0.32mm Standard @Creality CR-6 0.8.json" + }, + { + "name": "0.36mm SuperChunky @Creality CR-6 0.6", + "sub_path": "process/0.36mm SuperChunky @Creality CR-6 0.6.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.5", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.5.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.6", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.6.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 0.8", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 0.8.json" + }, + { + "name": "0.36mm Chunky @Creality Ender5Pro (2019) 1.0", + "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 1.0.json" + }, + { + "name": "0.40mm Draft @Creality CR-6 0.8", + "sub_path": "process/0.40mm Draft @Creality CR-6 0.8.json" + }, + { + "name": "0.44mm SuperExtraChunky @Creality CR-6 0.6", + "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6 0.6.json" + }, + { + "name": "0.48mm Chunky @Creality CR-6 0.8", + "sub_path": "process/0.48mm Chunky @Creality CR-6 0.8.json" + }, + { + "name": "0.48mm Draft @Creality CR-6 0.8", + "sub_path": "process/0.48mm Draft @Creality CR-6 0.8.json" + }, + { + "name": "0.56mm SuperChunky @Creality CR-6 0.8", + "sub_path": "process/0.56mm SuperChunky @Creality CR-6 0.8.json" + }, + { + "name": "0.16mm Optimal @Creality Sermoon V1", + "sub_path": "process/0.16mm Optimal @Creality Sermoon V1.json" + }, + { + "name": "0.20mm Standard @Creality Sermoon V1", + "sub_path": "process/0.20mm Standard @Creality Sermoon V1.json" + }, + { + "name": "0.28mm Standard @Creality Sermoon V1", + "sub_path": "process/0.28mm Standard @Creality Sermoon V1.json" + }, + { + "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.24mm Optimal @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.24mm Optimal @Creality K1C", + "sub_path": "process/0.24mm Optimal @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1C", + "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.30mm Standard @Creality K1C", + "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" + }, + { + "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.32mm Optimal @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.32mm Optimal @Creality K1C", + "sub_path": "process/0.32mm Optimal @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json" + }, + { + "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.36mm Draft @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.36mm Draft @Creality K1C", + "sub_path": "process/0.36mm Draft @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.36mm Draft @Creality K1Max (0.6 nozzle).json" + }, + { + "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.40mm Standard @Creality K1C", + "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" + }, + { + "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.48mm Draft @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.48mm Draft @Creality K1C", + "sub_path": "process/0.48mm Draft @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.48mm Draft @Creality K1Max (0.8 nozzle).json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Creality Generic ABS", + "sub_path": "filament/Creality Generic ABS.json" + }, + { + "name": "Creality Generic ASA", + "sub_path": "filament/Creality Generic ASA.json" + }, + { + "name": "Creality Generic PA-CF", + "sub_path": "filament/Creality Generic PA-CF.json" + }, + { + "name": "Creality Generic PC", + "sub_path": "filament/Creality Generic PC.json" + }, + { + "name": "Creality Generic PETG", + "sub_path": "filament/Creality Generic PETG.json" + }, + { + "name": "Creality Generic PLA", + "sub_path": "filament/Creality Generic PLA.json" + }, + { + "name": "Creality HF Generic PLA", + "sub_path": "filament/Creality HF Generic PLA.json" + }, + { + "name": "Creality HF Generic Speed PLA", + "sub_path": "filament/Creality HF Generic Speed PLA.json" + }, + { + "name": "Creality Generic PLA-CF", + "sub_path": "filament/Creality Generic PLA-CF.json" + }, + { + "name": "Creality Generic TPU", + "sub_path": "filament/Creality Generic TPU.json" + }, + { + "name": "Creality Generic ABS @Ender-3V3-all", + "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" + }, + { + "name": "Creality Generic ASA @Ender-3V3-all", + "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PA-CF @Ender-3V3-all", + "sub_path": "filament/Creality Generic PA-CF @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PETG @Ender-3V3-all", + "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA High Speed @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA Matte @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" + }, + { + "name": "Creality Generic PLA Silk @Ender-3V3-all", + "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" + }, + { + "name": "Creality Generic TPU @Ender-3V3-all", + "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" + }, + { + "name": "Creality Generic ABS @K1-all", + "sub_path": "filament/Creality Generic ABS @K1-all.json" + }, + { + "name": "Creality Generic ASA @K1-all", + "sub_path": "filament/Creality Generic ASA @K1-all.json" + }, + { + "name": "Creality Generic PA-CF @K1-all", + "sub_path": "filament/Creality Generic PA-CF @K1-all.json" + }, + { + "name": "Creality Generic PC @K1-all", + "sub_path": "filament/Creality Generic PC @K1-all.json" + }, + { + "name": "Creality Generic PETG @K1-all", + "sub_path": "filament/Creality Generic PETG @K1-all.json" + }, + { + "name": "Creality Generic PLA @K1-all", + "sub_path": "filament/Creality Generic PLA @K1-all.json" + }, + { + "name": "Creality Generic PLA High Speed @K1-all", + "sub_path": "filament/Creality Generic PLA High Speed @K1-all.json" + }, + { + "name": "Creality Generic PLA Matte @K1-all", + "sub_path": "filament/Creality Generic PLA Matte @K1-all.json" + }, + { + "name": "Creality Generic PLA Silk @K1-all", + "sub_path": "filament/Creality Generic PLA Silk @K1-all.json" + }, + { + "name": "Creality Generic PLA-CF @K1-all", + "sub_path": "filament/Creality Generic PLA-CF @K1-all.json" + }, + { + "name": "Creality Generic TPU @K1-all", + "sub_path": "filament/Creality Generic TPU @K1-all.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_creality_common", + "sub_path": "machine/fdm_creality_common.json" + }, + { + "name": "Creality CR-10 V2 0.4 nozzle", + "sub_path": "machine/Creality CR-10 V2 0.4 nozzle.json" + }, + { + "name": "Creality CR-10 Max 0.4 nozzle", + "sub_path": "machine/Creality CR-10 Max 0.4 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.2 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.2 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.4 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.4 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.6 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.6 nozzle.json" + }, + { + "name": "Creality CR-10 SE 0.8 nozzle", + "sub_path": "machine/Creality CR-10 SE 0.8 nozzle.json" + }, + { + "name": "Creality Ender-6 0.4 nozzle", + "sub_path": "machine/Creality Ender-6 0.4 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.2 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.2 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.4 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.4 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.6 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.6 nozzle.json" + }, + { + "name": "Creality CR-6 SE 0.8 nozzle", + "sub_path": "machine/Creality CR-6 SE 0.8 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.2 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.2 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.4 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.4 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.6 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.6 nozzle.json" + }, + { + "name": "Creality CR-6 Max 0.8 nozzle", + "sub_path": "machine/Creality CR-6 Max 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 V2 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V2 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 V2 Neo 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V2 Neo 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 Pro 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 Pro 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 S1 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Pro 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Pro 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 S1 Plus 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 S1 Plus 0.8 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.2 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.2 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.6 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 SE 0.8 nozzle", + "sub_path": "machine/Creality Ender-3 V3 SE 0.8 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 0.4 nozzle", + "sub_path": "machine/Creality Ender-3 V3 0.4 nozzle.json" + }, + { + "name": "Creality Ender-3 V3 0.6 nozzle", + "sub_path": "machine/Creality Ender-3 V3 0.6 nozzle.json" + }, + { + "name": "Creality Ender-5 0.4 nozzle", + "sub_path": "machine/Creality Ender-5 0.4 nozzle.json" + }, + { + "name": "Creality Ender-5 Plus 0.4 nozzle", + "sub_path": "machine/Creality Ender-5 Plus 0.4 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.2 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.25 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.3 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.4 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.5 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.6 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 0.8 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json" + }, + { + "name": "Creality Ender-5 Pro (2019) 1.0 nozzle", + "sub_path": "machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json" + }, + { + "name": "Creality Ender-5S 0.4 nozzle", + "sub_path": "machine/Creality Ender-5S 0.4 nozzle.json" + }, + { + "name": "Creality Ender-5 S1 0.4 nozzle", + "sub_path": "machine/Creality Ender-5 S1 0.4 nozzle.json" + }, + { + "name": "Creality Sermoon V1 0.4 nozzle", + "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" + }, + { + "name": "Creality K1 (0.4 nozzle)", + "sub_path": "machine/Creality K1 (0.4 nozzle).json" + }, + { + "name": "Creality K1 (0.6 nozzle)", + "sub_path": "machine/Creality K1 (0.6 nozzle).json" + }, + { + "name": "Creality K1 (0.8 nozzle)", + "sub_path": "machine/Creality K1 (0.8 nozzle).json" + }, + { + "name": "Creality K1C 0.4 nozzle", + "sub_path": "machine/Creality K1C 0.4 nozzle.json" + }, + { + "name": "Creality K1C 0.6 nozzle", + "sub_path": "machine/Creality K1C 0.6 nozzle.json" + }, + { + "name": "Creality K1C 0.8 nozzle", + "sub_path": "machine/Creality K1C 0.8 nozzle.json" + }, + { + "name": "Creality K1 Max (0.4 nozzle)", + "sub_path": "machine/Creality K1 Max (0.4 nozzle).json" + }, + { + "name": "Creality K1 Max (0.6 nozzle)", + "sub_path": "machine/Creality K1 Max (0.6 nozzle).json" + }, + { + "name": "Creality K1 Max (0.8 nozzle)", + "sub_path": "machine/Creality K1 Max (0.8 nozzle).json" + } + ] } \ No newline at end of file diff --git a/resources/profiles/Creality/Creality Ender-3 V3_cover.png b/resources/profiles/Creality/Creality Ender-3 V3_cover.png new file mode 100644 index 0000000000..510f02d214 Binary files /dev/null and b/resources/profiles/Creality/Creality Ender-3 V3_cover.png differ diff --git a/resources/profiles/Creality/creality_ender3v3_buildplate_model.stl b/resources/profiles/Creality/creality_ender3v3_buildplate_model.stl new file mode 100644 index 0000000000..ef159f264b Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3_buildplate_model.stl differ diff --git a/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png b/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png new file mode 100644 index 0000000000..2e8d441e67 Binary files /dev/null and b/resources/profiles/Creality/creality_ender3v3_buildplate_texture.png differ diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json index eaad0a146f..4e2ec8c491 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json @@ -12,6 +12,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json index 9a8f1a7731..dfc94c3573 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json @@ -12,6 +12,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json new file mode 100644 index 0000000000..c857a1f8c3 --- /dev/null +++ b/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json @@ -0,0 +1,12 @@ +{ + "type": "filament", + "name": "Creality Generic PA-CF @Ender-3V3-all", + "inherits": "Creality Generic PA-CF", + "from": "system", + "setting_id": "GFSN99_01", + "instantiation": "true", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json index 1a5bc133de..45c1b47c05 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json @@ -22,6 +22,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json index 5b4f750c9a..9528472e4c 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json @@ -44,6 +44,9 @@ "nozzle_temperature": [ "250" ], + "reduce_fan_stop_start_freq": [ + "0" + ], "compatible_printers": [ "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json index 8230c3b931..fb286b690e 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json @@ -20,6 +20,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json index 2d6ae3d262..50ed25372e 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json @@ -35,6 +35,9 @@ "textured_plate_temp_initial_layer": [ "55" ], + "reduce_fan_stop_start_freq": [ + "0" + ], "compatible_printers": [ "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json index 1c09f3d775..e5ca2eb13c 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json @@ -13,6 +13,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json index 3b5d9fabb8..5111e5091d 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json @@ -11,6 +11,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json index b735ccfad6..85890efec7 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json @@ -11,6 +11,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json index 75c2d8d834..7573352da8 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json @@ -18,6 +18,8 @@ "Creality Ender-3 V3 SE 0.4 nozzle", "Creality Ender-3 V3 SE 0.6 nozzle", "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle" + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json index b3d572cc84..a19eec76ef 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json @@ -29,6 +29,9 @@ "slow_down_layer_time": [ "5" ], + "reduce_fan_stop_start_freq": [ + "0" + ], "compatible_printers": [ "Creality K1C 0.4 nozzle", "Creality K1C 0.6 nozzle", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json new file mode 100644 index 0000000000..4006df1fbc --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json @@ -0,0 +1,134 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Ender-3 V3 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.20mm Standard @Creality Ender3V3", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "0", + "support_multi_bed_types": "1", + "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", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.12" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json new file mode 100644 index 0000000000..bb5f46780e --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json @@ -0,0 +1,134 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Creality Ender-3 V3 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality Ender-3 V3", + "gcode_flavor": "klipper", + "printer_structure": "i3", + "default_print_profile": "0.30mm Standard @Creality Ender3V3", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "0", + "support_multi_bed_types": "1", + "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", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "30", + "30" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.12" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality Generic PLA @Ender-3V3-all" + ], + "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3.json b/resources/profiles/Creality/machine/Creality Ender-3 V3.json new file mode 100644 index 0000000000..fc5eb11265 --- /dev/null +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Creality Ender-3 V3", + "model_id": "Creality-Ender3-V3", + "nozzle_diameter": "0.4;0.6", + "machine_tech": "FFF", + "family": "Creality", + "bed_model": "creality_ender3v3_buildplate_model.stl", + "bed_texture": "creality_ender3v3_buildplate_texture.png", + "hotend_model": "", + "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json index 5683fdb624..707fb25040 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json @@ -1,58 +1,133 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 (0.4 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Creality K1 (0.4 nozzle)", - "nozzle_diameter": ["0.4"], - "printer_variant": "0.4", - "printable_area": ["0x0", "220x0", "220x220", "0x220"], - "printable_height": "250", - "nozzle_type": "brass", - "auxiliary_fan": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["2", "2"], - "max_layer_height": ["0.3"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.6"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 (0.4 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Creality K1 (0.4 nozzle)", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json index c3080ab4dd..f5b4464a86 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json @@ -1,58 +1,133 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 (0.6 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1", - "gcode_flavor": "klipper", - "default_print_profile": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "nozzle_diameter": ["0.6"], - "printer_variant": "0.6", - "printable_area": ["0x0", "220x0", "220x220", "0x220"], - "printable_height": "250", - "nozzle_type": "brass", - "auxiliary_fan": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["2", "2"], - "max_layer_height": ["0.4"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 (0.6 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1", + "gcode_flavor": "klipper", + "default_print_profile": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json index 61649c930b..2c980a66aa 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json @@ -1,58 +1,133 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 (0.8 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1", - "gcode_flavor": "klipper", - "default_print_profile": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "nozzle_diameter": ["0.8"], - "printer_variant": "0.8", - "printable_area": ["0x0", "220x0", "220x220", "0x220"], - "printable_height": "250", - "nozzle_type": "brass", - "auxiliary_fan": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["2", "2"], - "max_layer_height": ["0.5"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 (0.8 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1", + "gcode_flavor": "klipper", + "default_print_profile": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "nozzle_diameter": [ + "0.8" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "220x0", + "220x220", + "0x220" + ], + "printable_height": "250", + "nozzle_type": "brass", + "auxiliary_fan": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.5" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json index 524131fb0b..bb772a0bd3 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json @@ -1,59 +1,134 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 Max (0.4 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1 Max", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "nozzle_diameter": ["0.4"], - "printer_variant": "0.4", - "printable_area": ["0x0", "300x0", "300x300", "0x300"], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["2", "2"], - "max_layer_height": ["0.3"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.6"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 Max (0.4 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1 Max", + "gcode_flavor": "klipper", + "default_print_profile": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.3" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.6" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json index 21abf7ec8f..d19a20ace3 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json @@ -1,59 +1,134 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 Max (0.6 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1 Max", - "gcode_flavor": "klipper", - "default_print_profile": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "nozzle_diameter": ["0.6"], - "printer_variant": "0.6", - "printable_area": ["0x0", "300x0", "300x300", "0x300"], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", - "machine_max_acceleration_e": ["5000", "5000"], - "machine_max_acceleration_extruding": ["20000", "20000"], - "machine_max_acceleration_retracting": ["5000", "5000"], - "machine_max_acceleration_travel": ["9000", "9000"], - "machine_max_acceleration_x": ["20000", "20000"], - "machine_max_acceleration_y": ["20000", "20000"], - "machine_max_acceleration_z": ["500", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["2", "2"], - "max_layer_height": ["0.4"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 Max (0.6 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1 Max", + "gcode_flavor": "klipper", + "default_print_profile": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "9000", + "9000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json index 8a65bf9154..e31c188086 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json @@ -1,59 +1,134 @@ { - "type": "machine", - "setting_id": "GM001", - "name": "Creality K1 Max (0.8 nozzle)", - "from": "system", - "instantiation": "true", - "inherits": "fdm_creality_common", - "printer_model": "Creality K1 Max", - "gcode_flavor": "klipper", - "default_print_profile": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "nozzle_diameter": ["0.8"], - "printer_variant": "0.8", - "printable_area": ["0x0", "300x0", "300x300", "0x300"], - "printable_height": "300", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", - "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", "500"], - "machine_max_speed_e": ["100", "100"], - "machine_max_speed_x": ["800", "800"], - "machine_max_speed_y": ["800", "800"], - "machine_max_speed_z": ["20", "20"], - "machine_max_jerk_e": ["2.5", "2.5"], - "machine_max_jerk_x": ["12", "12"], - "machine_max_jerk_y": ["12", "12"], - "machine_max_jerk_z": ["2", "2"], - "max_layer_height": ["0.5"], - "min_layer_height": ["0.08"], - "printer_settings_id": "Creality", - "retraction_minimum_travel": ["2"], - "retract_before_wipe": ["70%"], - "retraction_length": ["0.5"], - "retract_length_toolchange": ["1"], - "retraction_speed": ["40"], - "deretraction_speed": ["40"], - "extruder_clearance_height_to_lid": "101", - "extruder_clearance_height_to_rod": "45", - "extruder_clearance_radius": "45", - "z_hop": ["0.2"], - "single_extruder_multi_material": "1", - "manual_filament_change": "1", - "change_filament_gcode": "PAUSE", - "machine_pause_gcode": "PAUSE", - "default_filament_profile": ["Creality HF Generic PLA"], - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", - "machine_end_gcode": "END_PRINT", - "scan_first_layer": "0", - "thumbnails": [ - "100x100", - "320x320" - ] -} + "type": "machine", + "setting_id": "GM001", + "name": "Creality K1 Max (0.8 nozzle)", + "from": "system", + "instantiation": "true", + "inherits": "fdm_creality_common", + "printer_model": "Creality K1 Max", + "gcode_flavor": "klipper", + "default_print_profile": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "nozzle_diameter": [ + "0.8" + ], + "printer_variant": "0.8", + "printable_area": [ + "0x0", + "300x0", + "300x300", + "0x300" + ], + "printable_height": "300", + "nozzle_type": "hardened_steel", + "auxiliary_fan": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", + "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", + "500" + ], + "machine_max_speed_e": [ + "100", + "100" + ], + "machine_max_speed_x": [ + "800", + "800" + ], + "machine_max_speed_y": [ + "800", + "800" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "12", + "12" + ], + "machine_max_jerk_y": [ + "12", + "12" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "max_layer_height": [ + "0.5" + ], + "min_layer_height": [ + "0.08" + ], + "printer_settings_id": "Creality", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "0%" + ], + "retraction_length": [ + "0.5" + ], + "retract_length_toolchange": [ + "1" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "40" + ], + "extruder_clearance_height_to_lid": "101", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_radius": "45", + "z_hop": [ + "0.2" + ], + "wipe_distance": [ + "2" + ], + "single_extruder_multi_material": "1", + "manual_filament_change": "1", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "default_filament_profile": [ + "Creality HF Generic PLA" + ], + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", + "machine_end_gcode": "END_PRINT", + "scan_first_layer": "0", + "thumbnails": [ + "100x100", + "320x320" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1 Max.json b/resources/profiles/Creality/machine/Creality K1 Max.json index b74f86b5f4..10df2e7b5c 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max.json +++ b/resources/profiles/Creality/machine/Creality K1 Max.json @@ -9,4 +9,4 @@ "bed_texture": "creality_k1max_buildplate_texture.png", "hotend_model": "", "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1.json b/resources/profiles/Creality/machine/Creality K1.json index dedfc16031..73e10d77a6 100644 --- a/resources/profiles/Creality/machine/Creality K1.json +++ b/resources/profiles/Creality/machine/Creality K1.json @@ -9,4 +9,4 @@ "bed_texture": "creality_k1_buildplate_texture.png", "hotend_model": "", "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PC @K1-all;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PETG;Creality Generic TPU" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json index ff0a887772..d4deca8aab 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json @@ -21,8 +21,8 @@ "printable_height": "250", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -94,7 +94,7 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.6" @@ -114,6 +114,9 @@ "z_hop": [ "0.2" ], + "wipe_distance": [ + "2" + ], "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "PAUSE", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json index 1cb4effc69..46b2ae9464 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json @@ -21,8 +21,8 @@ "printable_height": "250", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -94,7 +94,7 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.5" @@ -114,6 +114,9 @@ "z_hop": [ "0.2" ], + "wipe_distance": [ + "2" + ], "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "PAUSE", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json index 3b41fbd72c..6788e0c5ec 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json @@ -21,8 +21,8 @@ "printable_height": "250", "nozzle_type": "hardened_steel", "auxiliary_fan": "1", - "support_air_filtration": "1", - "support_multi_bed_types": "1", + "support_air_filtration": "1", + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" @@ -94,7 +94,7 @@ "2" ], "retract_before_wipe": [ - "70%" + "0%" ], "retraction_length": [ "0.5" @@ -114,6 +114,9 @@ "z_hop": [ "0.2" ], + "wipe_distance": [ + "2" + ], "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "PAUSE", diff --git a/resources/profiles/Creality/machine/Creality K1C.json b/resources/profiles/Creality/machine/Creality K1C.json index 673856d383..610866a1ce 100644 --- a/resources/profiles/Creality/machine/Creality K1C.json +++ b/resources/profiles/Creality/machine/Creality K1C.json @@ -9,4 +9,4 @@ "bed_texture": "creality_k1c_buildplate_texture.png", "hotend_model": "", "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..faf79595ba --- /dev/null +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.12", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.12", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "5", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json index a37823ac30..f292c68bb2 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -54,9 +54,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json index f6c4961739..f36ef1fb77 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -54,9 +54,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json index 1d6328ddac..976197fc3c 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "5", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -51,9 +51,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -62,6 +62,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..6e943bce52 --- /dev/null +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.16", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.16", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json index 63ea8d7a56..95bcfd2eee 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -54,9 +54,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -113,4 +116,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json index e9c190d94c..404f772122 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -54,9 +54,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json index d3a62ef798..43be3e0f16 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json @@ -1,19 +1,19 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -51,9 +51,9 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", "detect_overhang_wall": "1", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", "overhang_4_4_speed": "10", "only_one_wall_top": "1", "inner_wall_line_width": "0.45", @@ -62,6 +62,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -85,7 +88,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -110,7 +113,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.4 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.4 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..8601eea963 --- /dev/null +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.2", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json index eeb0412b1e..89e199b06b 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -88,7 +91,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -113,4 +116,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json index 1f6accc5cf..9497a842ed 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json index 1a78a16472..6b4ebe4779 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json @@ -1,19 +1,19 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -62,6 +62,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -85,7 +88,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -110,7 +113,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.4 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.4 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json new file mode 100644 index 0000000000..d39a5b2573 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json @@ -0,0 +1,119 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "50", + "internal_bridge_speed": "150%", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle" + ], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "60", + "gap_infill_speed": "300", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "500", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "100", + "ironing_type": "no ironing", + "layer_height": "0.24", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "300", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.42", + "top_surface_acceleration": "5000", + "top_surface_speed": "200", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0" +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json index b72764cbab..b848357860 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -88,7 +91,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -113,4 +116,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json index cd29aeac4c..4c862e2725 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json @@ -12,8 +12,8 @@ "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed": "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers": [ @@ -65,6 +65,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json index c285e9abdd..7375e35ee6 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json @@ -1,19 +1,19 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bridge_flow": "1", - "bridge_speed": "25", - "internal_bridge_speed" : "70", + "bridge_speed": "50", + "internal_bridge_speed": "150%", "brim_width": "5", "brim_object_gap": "0.1", "compatible_printers_condition": "", @@ -62,6 +62,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -85,7 +88,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -110,7 +113,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.4 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.4 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json new file mode 100644 index 0000000000..9387a34a15 --- /dev/null +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.24", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.24", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json index 021ffef875..38ec7ecd84 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality K1 (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json index b9a5cfbb6a..b0d52c4fa0 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json index 659e4b9783..71523cc4d7 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Optimal @Creality K1Max (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json new file mode 100644 index 0000000000..7735633a3c --- /dev/null +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.3", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json index 904ff17ebd..c9a69fb996 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json index 4bd1b24007..d56645b25c 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json index 8cd8ff9a2e..3280057fde 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json index c9bc775be1..9ee4f69e99 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json index b5ecf953ce..b5645bf4e7 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json index 548aac9fab..0e7533f7d1 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.32mm Optimal @Creality K1Max (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json new file mode 100644 index 0000000000..b286de423b --- /dev/null +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json @@ -0,0 +1,118 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality Ender-3 V3", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "bridge_speed": "30", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "12000", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "outer_wall_acceleration": "5000", + "inner_wall_acceleration": "5000", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.62", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "grid", + "internal_bridge_support_thickness": "0.8", + "initial_layer_acceleration": "500", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.36", + "initial_layer_speed": "50", + "gap_infill_speed": "50", + "infill_combination": "0", + "sparse_infill_line_width": "0.65", + "infill_wall_overlap": "15%", + "sparse_infill_speed": "150", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "layer_height": "0.36", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "only_one_wall_top": "1", + "inner_wall_line_width": "0.65", + "inner_wall_speed": "150", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_speed": "150", + "spiral_mode": "0", + "initial_layer_infill_speed": "105", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "default", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_line_width": "0.62", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_expansion": "0", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_diameter": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "1", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_surface_line_width": "0.62", + "top_surface_acceleration": "5000", + "top_surface_speed": "150", + "top_shell_layers": "3", + "top_shell_thickness": "0.6", + "travel_acceleration": "12000", + "travel_speed": "500", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "gcode_label_objects": "0", + "compatible_printers": [ + "Creality Ender-3 V3 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json index 826e8349c4..fadb5b0f59 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality K1 (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json index c312c12ca7..3111169c9e 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json index 261b31086e..0d9a8d151a 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.36mm Draft @Creality K1Max (0.6 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.6 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.6 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json index f246ca94b7..96e481e7be 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json index e956dadee1..d84aea05e1 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json index 3d526219a3..6eaf18e02a 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json index cf3145d3a5..28f226f4c3 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.48mm Draft @Creality K1 (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json index 4e275a2129..95839ac90e 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json index ba460aef68..58fc8ffcce 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json @@ -1,11 +1,11 @@ { - "type": "process", - "setting_id": "GP004", - "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", - "from": "system", - "inherits": "fdm_process_common_klipper", - "instantiation": "true", - "adaptive_layer_height": "0", + "type": "process", + "setting_id": "GP004", + "name": "0.48mm Draft @Creality K1Max (0.8 nozzle)", + "from": "system", + "inherits": "fdm_process_common_klipper", + "instantiation": "true", + "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -61,6 +61,9 @@ "print_settings_id": "", "raft_layers": "0", "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "seam_slope_entire_loop": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -84,7 +87,7 @@ "support_interface_top_layers": "2", "support_interface_bottom_layers": "2", "support_interface_spacing": "0.5", - "support_expansion": "0", + "support_expansion": "0", "support_interface_speed": "80", "support_base_pattern": "default", "support_base_pattern_spacing": "2.5", @@ -109,7 +112,7 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", - "compatible_printers": [ - "Creality K1 Max (0.8 nozzle)" - ] -} + "compatible_printers": [ + "Creality K1 Max (0.8 nozzle)" + ] +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..44387098ed --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic ABS", + "from": "system", + "setting_id": "GFSA04_02", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFB99", + "filament_settings_id": [ + "Flashforge ABS @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.1" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..1faf1a055a --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic ASA", + "from": "system", + "setting_id": "GFSA04_05", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFL99", + "filament_settings_id": [ + "Flashforge ASA @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: ASA\n" + ], + "pressure_advance": [ + "0.1" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json index 1055037bb8..acb764bee0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json @@ -20,8 +20,6 @@ "2" ], "compatible_printers": [ - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json index 8dd83f0a4e..aa5c61337d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json @@ -20,8 +20,12 @@ "2" ], "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json index 07658bcd9a..e9c3659a6b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json @@ -17,9 +17,11 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json index 808fe59833..38bacfca77 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json index 74f50d8bd9..29774632d5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json index 257c6edadd..0ae33101be 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json @@ -18,9 +18,11 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json index 40ab738acd..a205152864 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json index 074f4671e0..bb851c86f0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json @@ -20,10 +20,6 @@ "1" ], "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json index d48b9bbe9e..9889e78ce3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json @@ -20,9 +20,11 @@ ], "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json index 340a685a19..2536d54daf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json @@ -60,7 +60,9 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json index 1f91f12947..1eb9c62f5f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json @@ -60,7 +60,9 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json index bc2961109d..6e74e7bc9f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json index 268e9c66bf..0639e20d0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json @@ -19,8 +19,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle" + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..553b5f4bea --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge HS PLA @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic HS PLA", + "from": "system", + "setting_id": "GFSA04_09", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFL99", + "filament_settings_id": [ + "Flashforge HS PLA @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: HS PLA\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..0ebd69f100 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Flashforge PETG @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic PETG", + "from": "system", + "setting_id": "GFSA04_12", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFG99", + "filament_settings_id": [ + "Flashforge PETG @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "1.5" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..e3e8d5e3ab --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Flashforge PLA @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic PLA", + "from": "system", + "setting_id": "GFSA04_19", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_settings_id": [ + "Flashforge PLA @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..41122b34af --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", + "inherits": "Flashforge Generic PLA-Silk", + "from": "system", + "setting_id": "GFSA04_25", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_id": "GFL99", + "filament_settings_id": [ + "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA-Silk\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "217" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json index 88259d7a3d..44df1f319c 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic NexPA-CF25.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json index afedac0990..d63badb6f1 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic S-Multi.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json index b897d2ed44..74b7f88dd9 100644 --- a/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json +++ b/resources/profiles/Flashforge/filament/FusRock Generic S-PAHT.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json index 4c9993997c..fff9c3e72d 100644 --- a/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json +++ b/resources/profiles/Flashforge/filament/Polymaker Generic CoPA.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/filament/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker Generic S1.json index d41b46f781..e6ae0afcf8 100644 --- a/resources/profiles/Flashforge/filament/Polymaker Generic S1.json +++ b/resources/profiles/Flashforge/filament/Polymaker Generic S1.json @@ -22,8 +22,10 @@ "compatible_printers": [ "Flashforge Adventurer 5M 0.4 Nozzle", "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", "Flashforge Guider 3 Ultra 0.4 Nozzle" ], "compatible_printers_condition": "", diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.25 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.25 Nozzle.json new file mode 100644 index 0000000000..02d4534ca7 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.25 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM006", + "name": "Flashforge Adventurer 5M 0.25 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M", + "default_print_profile": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "nozzle_diameter": [ "0.25" ], + "printer_variant": "0.25", + "max_layer_height": [ "0.14" ], + "min_layer_height": [ "0.08" ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG90 E0\nM83\nG1 E-1 F600\nG1 E8 F300\nG1 X85 Y110 Z0.2 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0", + "retraction_length": [ "1" ], + "z_hop": [ "0.3" ], + "nozzle_type": "stainless_steel" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json index d8504dde9e..5d8d6652d6 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.4 Nozzle.json @@ -4,62 +4,13 @@ "name": "Flashforge Adventurer 5M 0.4 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", + "default_print_profile": "0.20mm Standard @Flashforge AD5M 0.4 Nozzle", "nozzle_diameter": [ "0.4" ], "printer_variant": "0.4", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "auxiliary_fan": "1", - "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", "500" ], - "machine_max_speed_e": [ "30", "30" ], - "machine_max_speed_x": [ "600", "600" ], - "machine_max_speed_y": [ "600", "600" ], - "machine_max_speed_z": [ "20", "20" ], - "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", "3" ], "max_layer_height": [ "0.28" ], "min_layer_height": [ "0.08" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "0.8" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], "nozzle_type": "stainless_steel" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json index ebd4b9d7f4..34694b32b6 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.6 Nozzle.json @@ -4,63 +4,14 @@ "name": "Flashforge Adventurer 5M 0.6 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Flashforge AD5M 0.6 Nozzle", + "default_print_profile": "0.30mm Standard @Flashforge AD5M 0.6 Nozzle", "nozzle_diameter": [ "0.6" ], "printer_variant": "0.6", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "auxiliary_fan": "1", - "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", "500" ], - "machine_max_speed_e": [ "30", "30" ], - "machine_max_speed_x": [ "600", "600" ], - "machine_max_speed_y": [ "600", "600" ], - "machine_max_speed_z": [ "20", "20" ], - "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", "3" ], "max_layer_height": [ "0.4" ], "min_layer_height": [ "0.15" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "1.2" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], "nozzle_type": "hardened_steel" diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.8 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.8 Nozzle.json new file mode 100644 index 0000000000..2eef780d8b --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M 0.8 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM005", + "name": "Flashforge Adventurer 5M 0.8 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M", + "default_print_profile": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "nozzle_diameter": [ "0.8" ], + "printer_variant": "0.8", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.3 F1200\nG1 X-110 E30 F2400\nG1 Y0 E8 F2400\nG1 X-109.6 F2400\nG1 Y110 E10 F2400\nG92 E0", + "max_layer_height": [ "0.56" ], + "min_layer_height": [ "0.15" ], + "retraction_length": [ "1.5" ], + "nozzle_type": "hardened_steel", + "z_hop": ["0"] +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json new file mode 100644 index 0000000000..021520222c --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.25 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM010", + "name": "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M Pro", + "default_print_profile": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "nozzle_diameter": [ "0.25" ], + "printer_variant": "0.25", + "max_layer_height": [ "0.14" ], + "min_layer_height": [ "0.08" ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG90 E0\nM83\nG1 E-1 F600\nG1 E8 F300\nG1 X85 Y110 Z0.2 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0", + "retraction_length": [ "1" ], + "z_hop": [ "0.3" ], + "nozzle_type": "stainless_steel" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json index 4d8d58dcdf..eaad7c2df1 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.4 Nozzle.json @@ -4,63 +4,13 @@ "name": "Flashforge Adventurer 5M Pro 0.4 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M Pro", - "gcode_flavor": "klipper", "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "nozzle_diameter": [ "0.4" ], "printer_variant": "0.4", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "auxiliary_fan": "1", - "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", "500" ], - "machine_max_speed_e": [ "30", "30" ], - "machine_max_speed_x": [ "600", "600" ], - "machine_max_speed_y": [ "600", "600" ], - "machine_max_speed_z": [ "20", "20" ], - "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", "3" ], "max_layer_height": [ "0.28" ], "min_layer_height": [ "0.08" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "0.8" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], "nozzle_type": "stainless_steel" - } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json index c0a024542f..7ee9c093ab 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.6 Nozzle.json @@ -4,63 +4,15 @@ "name": "Flashforge Adventurer 5M Pro 0.6 Nozzle", "from": "system", "instantiation": "true", - "inherits": "fdm_flashforge_common", + "inherits": "fdm_adventurer5m_common", "printer_model": "Flashforge Adventurer 5M Pro", - "gcode_flavor": "klipper", - "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.6 Nozzle", + "default_print_profile": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", "nozzle_diameter": [ "0.6" ], "printer_variant": "0.6", - "printable_area": [ - "-110x-110", - "110x-110", - "110x110", - "-110x110" - ], - "printable_height": "220", - "auxiliary_fan": "1", - "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", "500" ], - "machine_max_speed_e": [ "30", "30" ], - "machine_max_speed_x": [ "600", "600" ], - "machine_max_speed_y": [ "600", "600" ], - "machine_max_speed_z": [ "20", "20" ], - "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", "3" ], "max_layer_height": [ "0.4" ], "min_layer_height": [ "0.15" ], - "printer_settings_id": "Flashforge", - "retraction_minimum_travel": [ "1" ], - "retract_before_wipe": [ "100%" ], "retraction_length": [ "1.2" ], - "retract_length_toolchange": [ "2" ], - "deretraction_speed": [ "35" ], - "z_hop": [ "0.4" ], - "single_extruder_multi_material": "0", - "change_filament_gcode": "", - "machine_pause_gcode": "M25", - "default_filament_profile": [ "Flashforge Generic PLA" ], - "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", - "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "scan_first_layer": "0", - "thumbnails": [ - "140x110" - ], - "use_relative_e_distances": "1", - "z_hop_types": "Auto Lift", - "retraction_speed": [ "35" ], - "wipe_distance": "2", - "extruder_clearance_radius": [ "76" ], - "extruder_clearance_height_to_rod": [ "27" ], - "extruder_clearance_height_to_lid": [ "150" ], "nozzle_type": "hardened_steel" + } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json new file mode 100644 index 0000000000..b638a18246 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro 0.8 Nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "machine", + "setting_id": "GM009", + "name": "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_adventurer5m_common", + "printer_model": "Flashforge Adventurer 5M Pro", + "default_print_profile": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "nozzle_diameter": [ "0.8" ], + "printer_variant": "0.8", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.3 F1200\nG1 X-110 E30 F2400\nG1 Y0 E8 F2400\nG1 X-109.6 F2400\nG1 Y110 E10 F2400\nG92 E0", + "max_layer_height": [ "0.56" ], + "min_layer_height": [ "0.15" ], + "retraction_length": [ "1.5" ], + "nozzle_type": "hardened_steel", + "z_hop": ["0"] +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json index 6e4d1e81e2..a9e9fc036a 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Flashforge Adventurer 5M Pro", "model_id": "Flashforge Adventurer 5M Pro", - "nozzle_diameter": "0.4;0.6", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json index bd95c9a1f0..2211a634bb 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Flashforge Adventurer 5M", "model_id": "Flashforge-Adventurer-5M", - "nozzle_diameter": "0.4;0.6", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", diff --git a/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json new file mode 100644 index 0000000000..bf5b7ebd20 --- /dev/null +++ b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json @@ -0,0 +1,57 @@ +{ + "type": "machine", + "name": "fdm_adventurer5m_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_flashforge_common", + "gcode_flavor": "klipper", + "printable_area": [ + "-110x-110", + "110x-110", + "110x110", + "-110x110" + ], + "printable_height": "220", + "auxiliary_fan": "1", + "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", "500" ], + "machine_max_speed_e": [ "30", "30" ], + "machine_max_speed_x": [ "600", "600" ], + "machine_max_speed_y": [ "600", "600" ], + "machine_max_speed_z": [ "20", "20" ], + "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", "3" ], + "printer_settings_id": "Flashforge", + "retraction_minimum_travel": [ "1" ], + "retract_before_wipe": [ "100%" ], + "retract_length_toolchange": [ "2" ], + "deretraction_speed": [ "35" ], + "z_hop": [ "0.4" ], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "machine_pause_gcode": "M25", + "default_filament_profile": [ "Flashforge Generic PLA" ], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-1.5 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "scan_first_layer": "0", + "thumbnails": [ + "140x110" + ], + "use_relative_e_distances": "1", + "z_hop_types": "Auto Lift", + "retraction_speed": [ "35" ], + "wipe_distance": "2", + "extruder_clearance_radius": [ "76" ], + "extruder_clearance_height_to_rod": [ "27" ], + "extruder_clearance_height_to_lid": [ "150" ], + "version": "1.8.0.0" +} diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..efc3b98d34 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M 0.25 Nozzle.json @@ -0,0 +1,45 @@ +{ + "type": "process", + "name": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "inherits": "0.20mm Standard @Flashforge AD5M 0.4 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle" + ], + "setting_id": "GP012", + "print_settings_id": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", + "bottom_shell_layers": "4", + "brim_width": "3", + "elefant_foot_compensation": "0", + "gap_infill_speed": "150", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "70", + "initial_layer_line_width": "0.3", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "150", + "internal_solid_infill_line_width": "0.3", + "internal_solid_infill_speed": "150", + "layer_height": "0.12", + "line_width": "0.25", + "outer_wall_line_width": "0.25", + "outer_wall_speed": "60", + "skirt_loops": "0", + "sparse_infill_line_width": "0.3", + "sparse_infill_speed": "100", + "support_bottom_z_distance": "0.12", + "support_interface_spacing": "0.25", + "support_line_width": "0.25", + "support_object_xy_distance": "0.2", + "support_speed": "80", + "support_top_z_distance": "0.12", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.3", + "top_surface_speed": "150", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "80%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json new file mode 100644 index 0000000000..2ea5c5c4e4 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json @@ -0,0 +1,45 @@ +{ + "type": "process", + "name": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "inherits": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "setting_id": "GP011", + "print_settings_id": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "bottom_shell_layers": "4", + "brim_width": "3", + "elefant_foot_compensation": "0", + "gap_infill_speed": "150", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "70", + "initial_layer_line_width": "0.3", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "150", + "internal_solid_infill_line_width": "0.3", + "internal_solid_infill_speed": "150", + "layer_height": "0.12", + "line_width": "0.25", + "outer_wall_line_width": "0.25", + "outer_wall_speed": "60", + "skirt_loops": "0", + "sparse_infill_line_width": "0.3", + "sparse_infill_speed": "100", + "support_bottom_z_distance": "0.12", + "support_interface_spacing": "0.25", + "support_line_width": "0.25", + "support_object_xy_distance": "0.2", + "support_speed": "80", + "support_top_z_distance": "0.12", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.3", + "top_surface_speed": "150", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "80%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json new file mode 100644 index 0000000000..4c50751066 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M 0.8 Nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "process", + "name": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "inherits": "0.30mm Standard @Flashforge AD5M 0.6 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.8 Nozzle" + ], + "setting_id": "GP002", + "print_settings_id": "0.40mm Standard @Flashforge AD5M 0.8 Nozzle", + "elefant_foot_compensation": "0", + "initial_layer_infill_speed": "55", + "initial_layer_line_width": "0.85", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.85", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "layer_height": "0.4", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "skirt_loops": "0", + "sparse_infill_line_width": "0.85", + "support_bottom_interface_spacing": "0.4", + "support_bottom_z_distance": "0.22", + "support_interface_spacing": "0.4", + "support_line_width": "0.82", + "support_object_xy_distance": "0.4", + "support_top_z_distance": "0.22", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.82", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "60%" +} \ No newline at end of file diff --git a/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json new file mode 100644 index 0000000000..28323aba75 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "process", + "name": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "inherits": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", + "from": "system", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M Pro 0.8 Nozzle" + ], + "setting_id": "GP001", + "print_settings_id": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "elefant_foot_compensation": "0", + "initial_layer_infill_speed": "55", + "initial_layer_line_width": "0.85", + "initial_layer_speed": "35", + "inner_wall_line_width": "0.85", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "layer_height": "0.4", + "line_width": "0.82", + "outer_wall_line_width": "0.82", + "skirt_loops": "0", + "sparse_infill_line_width": "0.85", + "support_bottom_interface_spacing": "0.4", + "support_bottom_z_distance": "0.22", + "support_interface_spacing": "0.4", + "support_line_width": "0.82", + "support_object_xy_distance": "0.4", + "support_top_z_distance": "0.22", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "top_surface_line_width": "0.82", + "tree_support_tip_diameter": "1.2", + "version": "1.8.0.0", + "wipe_speed": "60%" +} \ No newline at end of file diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 983e35e558..00a3485df1 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -8,6 +8,10 @@ "name": "MK4IS", "sub_path": "machine/Prusa MK4.json" }, + { + "name": "MINIIS", + "sub_path": "machine/Prusa MINIIS.json" + }, { "name": "MK3S", "sub_path": "machine/Prusa MK3S.json" @@ -26,6 +30,18 @@ "name": "process_common_mk4", "sub_path": "process/process_common_mk4.json" }, + { + "name": "process_common_miniis", + "sub_path": "process/process_common_miniis.json" + }, + { + "name": "process_speed_miniis", + "sub_path": "process/process_speed_miniis.json" + }, + { + "name": "process_detail_miniis", + "sub_path": "process/process_detail_miniis.json" + }, { "name": "process_common_mk3", "sub_path": "process/process_common_mk3.json" @@ -144,6 +160,76 @@ "name": "0.20mm Standard @MK4", "sub_path": "process/0.20mm Standard @MK4.json" }, + { + + "name": "0.05mm Detail @MINIIS", + "sub_path": "process/0.05mm Detail @MINIIS.json" + }, + { + + "name": "0.07mm Detail @MINIIS", + "sub_path": "process/0.07mm Detail @MINIIS.json" + }, + { + + "name": "0.10mm Speed @MINIIS", + "sub_path": "process/0.10mm Speed @MINIIS.json" + }, + { + + "name": "0.12mm Speed @MINIIS", + "sub_path": "process/0.12mm Speed @MINIIS.json" + }, + { + + "name": "0.12mm Standard @MINIIS", + "sub_path": "process/0.12mm Standard @MINIIS.json" + }, + { + + "name": "0.15mm Standard @MINIIS", + "sub_path": "process/0.15mm Standard @MINIIS.json" + }, + { + + "name": "0.15mm Speed @MINIIS", + "sub_path": "process/0.15mm Speed @MINIIS.json" + }, + { + + "name": "0.20mm Standard @MINIIS", + "sub_path": "process/0.20mm Standard @MINIIS.json" + }, + { + + "name": "0.20mm Speed @MINIIS", + "sub_path": "process/0.20mm Speed @MINIIS.json" + }, + { + + "name": "0.25mm Standard @MINIIS", + "sub_path": "process/0.25mm Standard @MINIIS.json" + }, + { + + "name": "0.25mm Speed @MINIIS", + "sub_path": "process/0.25mm Speed @MINIIS.json" + }, + { + + "name": "0.30mm Detail @MINIIS", + "sub_path": "process/0.30mm Detail @MINIIS.json" + }, + { + + "name": "0.35mm Standard @MINIIS", + "sub_path": "process/0.35mm Standard @MINIIS.json" + }, + { + + "name": "0.40mm Standard @MINIIS", + "sub_path": "process/0.40mm Standard @MINIIS.json" + }, { "name": "0.24mm Standard @MK4", @@ -215,6 +301,10 @@ "name": "Prusa Generic PLA @MK4", "sub_path": "filament/Prusa Generic PLA @MK4.json" }, + { + "name": "Prusa Generic PLA @MINIIS", + "sub_path": "filament/Prusa Generic PLA @MINIIS.json" + }, { "name": "Prusa Generic PLA-CF", "sub_path": "filament/Prusa Generic PLA-CF.json" @@ -227,6 +317,10 @@ "name": "Prusa Generic PETG @MK4", "sub_path": "filament/Prusa Generic PETG @MK4.json" }, + { + "name": "Prusa Generic PETG @MINIIS", + "sub_path": "filament/Prusa Generic PETG @MINIIS.json" + }, { "name": "Prusa Generic ABS", "sub_path": "filament/Prusa Generic ABS.json" @@ -235,6 +329,10 @@ "name": "Prusa Generic ABS @MK4", "sub_path": "filament/Prusa Generic ABS @MK4.json" }, + { + "name": "Prusa Generic ABS @MINIIS", + "sub_path": "filament/Prusa Generic ABS @MINIIS.json" + }, { "name": "Prusa Generic TPU", "sub_path": "filament/Prusa Generic TPU.json" @@ -243,6 +341,10 @@ "name": "Prusa Generic TPU @MK4", "sub_path": "filament/Prusa Generic TPU @MK4.json" }, + { + "name": "Prusa Generic TPU @MINIIS", + "sub_path": "filament/Prusa Generic TPU @MINIIS.json" + }, { "name": "Prusa Generic ASA", "sub_path": "filament/Prusa Generic ASA.json" @@ -251,6 +353,10 @@ "name": "Prusa Generic ASA @MK4", "sub_path": "filament/Prusa Generic ASA @MK4.json" }, + { + "name": "Prusa Generic ASA @MINIIS", + "sub_path": "filament/Prusa Generic ASA @MINIIS.json" + }, { "name": "Prusa Generic PC", "sub_path": "filament/Prusa Generic PC.json" @@ -297,6 +403,22 @@ "name": "Prusa MK4 0.4 nozzle", "sub_path": "machine/Prusa MK4 0.4 nozzle.json" }, + { + "name": "Prusa MINIIS 0.4 nozzle", + "sub_path": "machine/Prusa MINIIS 0.4 nozzle.json" + }, + { + "name": "Prusa MINIIS 0.25 nozzle", + "sub_path": "machine/Prusa MINIIS 0.25 nozzle.json" + }, + { + "name": "Prusa MINIIS 0.6 nozzle", + "sub_path": "machine/Prusa MINIIS 0.6 nozzle.json" + }, + { + "name": "Prusa MINIIS 0.8 nozzle", + "sub_path": "machine/Prusa MINIIS 0.8 nozzle.json" + }, { "name": "Prusa MK4 0.6 nozzle", "sub_path": "machine/Prusa MK4 0.6 nozzle.json" diff --git a/resources/profiles/Prusa/MINIIS_cover.png b/resources/profiles/Prusa/MINIIS_cover.png new file mode 100644 index 0000000000..c321e4c545 Binary files /dev/null and b/resources/profiles/Prusa/MINIIS_cover.png differ diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json new file mode 100644 index 0000000000..1eae409695 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFB99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic ABS @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.1{elsif nozzle_diameter[0]==0.8}0.07{elsif nozzle_diameter[0]==0.4}0.19{elsif nozzle_diameter[0]==0.25}0.55{else}0{endif}" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json index 1e40459111..0de674b7fe 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json @@ -16,9 +16,9 @@ "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" ], "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json new file mode 100644 index 0000000000..a708546480 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFB98_2", + "setting_id": "GFSA04", + "name": "Prusa Generic ASA @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.1{elsif nozzle_diameter[0]==0.8}0.07{elsif nozzle_diameter[0]==0.4}0.19{elsif nozzle_diameter[0]==0.25}0.55{else}0{endif}" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json index e92dc0795d..de823b2306 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json @@ -16,9 +16,9 @@ "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" ], "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json index 47926d81df..8b389957c7 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json @@ -30,6 +30,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA.json b/resources/profiles/Prusa/filament/Prusa Generic PA.json index f1507270b5..c92b0a981e 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PA.json @@ -27,6 +27,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC.json b/resources/profiles/Prusa/filament/Prusa Generic PC.json index e33173caed..0c232ec272 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PC.json @@ -24,6 +24,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json new file mode 100644 index 0000000000..4f56ee10a4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "filament_id": "GFG99_1", + "setting_id": "GFSA04", + "name": "Prusa Generic PETG @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.22{elsif nozzle_diameter[0]==0.8}0.15{elsif nozzle_diameter[0]==0.4}0.36{elsif nozzle_diameter[0]==0.25}1.02{else}0{endif}" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json index 383c86b63f..9caa793e9f 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json @@ -43,9 +43,9 @@ "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.035{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.055{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" ], "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json new file mode 100644 index 0000000000..45ab0c1812 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "filament_id": "GFL99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic PLA @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.6}0.17{elsif nozzle_diameter[0]==0.8}0.12{elsif nozzle_diameter[0]==0.4}0.27{elsif nozzle_diameter[0]==0.25}0.85{else}0{endif}" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json index a167d5683f..4461005ad3 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json @@ -30,6 +30,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } \ No newline at end of file diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA.json b/resources/profiles/Prusa/filament/Prusa Generic PVA.json index 2c0e2017e3..ee80f6c637 100644 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA.json +++ b/resources/profiles/Prusa/filament/Prusa Generic PVA.json @@ -30,6 +30,10 @@ "Prusa MK4 0.25 nozzle", "Prusa MK4 0.4 nozzle", "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" + "Prusa MK4 0.8 nozzle", + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" ] } diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json new file mode 100644 index 0000000000..b79f4ae870 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "filament_id": "GFU99_2", + "setting_id": "GFSA04", + "name": "Prusa Generic TPU @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "1.35" + ], + "filament_flow_ratio": [ + "1.15" + ], + "filament_start_gcode": [ + "M900 K0 ; Filament gcode" + ], + "hot_plate_temp" : [ + "50" + ], + "hot_plate_temp_initial_layer" : [ + "50" + ], + "filament_type": [ + "FLEX" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "210" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "6" + ], + "filament_wipe": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "50" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json index d047f158bc..28e2a63c7a 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json @@ -15,6 +15,12 @@ "nozzle_diameter": [ "0.25" ], + "max_layer_height": [ + "0.15" + ], + "min_layer_height": [ + "0.05" + ], "bed_exclude_area": [ "0x0" ], diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json new file mode 100644 index 0000000000..97e63d54c0 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "setting_id": "GM004", + "name": "Prusa MINIIS 0.25 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Prusa MINIIS 0.4 nozzle", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.25", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS" + ], + "default_print_profile": "0.12mm Standard @MINIIS", + "nozzle_diameter": [ + "0.25" + ], + "max_layer_height": [ + "0.15" + ], + "min_layer_height": [ + "0.05" + ], + "retraction_length": [ + "2.5" + ], + "retraction_minimum_travel": [ + "1.0" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json new file mode 100644 index 0000000000..2457711175 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json @@ -0,0 +1,117 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "Prusa MINIIS 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.4", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS" + ], + "default_print_profile": "0.20mm Standard @MINIIS", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "printable_area": [ + "0x0", + "180x0", + "180x180", + "0x180" + ], + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "4000", + "4000" + ], + "machine_max_acceleration_retracting": [ + "1250", + "1250" + ], + "machine_max_acceleration_x": [ + "4000", + "4000" + ], + "machine_max_acceleration_y": [ + "4000", + "4000" + ], + "machine_max_acceleration_z": [ + "400", + "400" + ], + "machine_max_acceleration_travel": [ + "4000", + "4000" + ], + "machine_max_jerk_e": [ + "10", + "2.5" + ], + "machine_max_jerk_x": [ + "8", + "8" + ], + "machine_max_jerk_y": [ + "8", + "8" + ], + "machine_max_jerk_z": [ + "2", + "2" + ], + "machine_max_speed_e": [ + "80", + "25" + ], + "machine_max_speed_x": [ + "400", + "400" + ], + "machine_max_speed_y": [ + "400", + "400" + ], + "retraction_length": [ + "2.5" + ], + "retraction_minimum_travel": [ + "1.5" + ], + "retraction_speed": [ + "70" + ], + "deretraction_speed": [ + "40" + ], + "z_hop": [ + "0.2" + ], + "host_type": "prusalink", + "printable_height": "180", + "machine_end_gcode": "{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X170 Y170 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+50, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM572 S0 ; reset PA\nM569 S1 X Y ; reset to stealthchop for X Y\nM84 ; disable motors\n; max_layer_z = [max_layer_z]", + "machine_pause_gcode": "M601", + "machine_start_gcode": "M862.3 P \"MINI\" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U5.1.2+13478\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))} Y{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))}\n{if ! spiral_mode}M74 W[extruded_weight_total]{endif}\n", + "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "printer_notes": "Don't remove the following keywords! These keywords are used in the \"compatible printer\" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINIIS\nNO_TEMPLATES", + "scan_first_layer": "0", + "machine_load_filament_time": "17", + "machine_unload_filament_time": "16", + "nozzle_type": "brass", + "auxiliary_fan": "0", + "thumbnails": [ + "16x16", + "313x173", + "440x240" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json new file mode 100644 index 0000000000..b3df3dff2b --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "Prusa MINIIS 0.6 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Prusa MINIIS 0.4 nozzle", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.6", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS" + ], + "default_print_profile": "0.25mm Standard @MINIIS", + "nozzle_diameter": [ + "0.6" + ], + "max_layer_height": [ + "0.4" + ], + "min_layer_height": [ + "0.15" + ], + "retraction_length": [ + "2.8" + ], + "retraction_speed": [ + "70" + ] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json new file mode 100644 index 0000000000..c6c0fad3b9 --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "Prusa MINIIS 0.8 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "Prusa MINIIS 0.4 nozzle", + "gcode_flavor": "marlin2", + "printer_model": "MINIIS", + "printer_variant": "0.8", + "default_filament_profile": [ + "Prusa Generic PLA @MINIIS" + ], + "default_print_profile": "0.40mm Standard @MINIIS", + "nozzle_diameter": [ + "0.8" + ], + "max_layer_height": [ + "0.55" + ], + "min_layer_height": [ + "0.2" + ] , + "retraction_length": [ + "2.8" + ], + "retraction_speed": [ + "45" + ], + "deretraction_speed": [ + "20" +] +} diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS.json b/resources/profiles/Prusa/machine/Prusa MINIIS.json new file mode 100644 index 0000000000..0786441dcd --- /dev/null +++ b/resources/profiles/Prusa/machine/Prusa MINIIS.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Prusa MINI", + "model_id": "MINI", + "nozzle_diameter": "0.25;0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Prusa", + "bed_model": "miniis_bed.stl", + "bed_texture": "miniis.svg", + "hotend_model": "", + "default_materials": "Prusa Generic PLA-CF;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF;Prusa Generic ABS @MINIIS;Prusa Generic PLA @MINIIS;Prusa Generic PETG @MINIIS;Prusa Generic TPU @MINIIS;Prusa Generic ASA @MINIIS;" +} diff --git a/resources/profiles/Prusa/miniis.svg b/resources/profiles/Prusa/miniis.svg new file mode 100644 index 0000000000..96c8fdec08 --- /dev/null +++ b/resources/profiles/Prusa/miniis.svg @@ -0,0 +1,32 @@ + + MINI_bed_texture + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Prusa/miniis_bed.stl b/resources/profiles/Prusa/miniis_bed.stl new file mode 100644 index 0000000000..2f4c45b7b1 Binary files /dev/null and b/resources/profiles/Prusa/miniis_bed.stl differ diff --git a/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json new file mode 100644 index 0000000000..ce05b68662 --- /dev/null +++ b/resources/profiles/Prusa/process/0.05mm Detail @MINIIS.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.05mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.05", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "13", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "10", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json new file mode 100644 index 0000000000..c22b0d24c2 --- /dev/null +++ b/resources/profiles/Prusa/process/0.07mm Detail @MINIIS.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.07mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.07", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "10", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "8", + "bridge_speed": "30", + "internal_solid_infill_speed": "140", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json new file mode 100644 index 0000000000..40076038c9 --- /dev/null +++ b/resources/profiles/Prusa/process/0.10mm Speed @MINIIS.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.10mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "bridge_speed": "35", + "layer_height": "0.10", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "7", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "5", + "sparse_infill_acceleration": "3000", + "internal_solid_infill_acceleration": "3000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json new file mode 100644 index 0000000000..2e77168ac0 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Speed @MINIIS.json @@ -0,0 +1,29 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "9", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "6", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "gap_infill_speed": "50", + "bridge_speed": "25", + "support_speed": "70", + "overhang_1_4_speed": "60", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "2500", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json new file mode 100644 index 0000000000..1a2cc01686 --- /dev/null +++ b/resources/profiles/Prusa/process/0.12mm Standard @MINIIS.json @@ -0,0 +1,34 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "9", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "6", + "outer_wall_speed": "70", + "inner_wall_speed": "40", + "small_perimeter_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "140", + "top_surface_speed": "60", + "gap_infill_speed": "50", + "support_speed": "70", + "bridge_speed": "25", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1000", + "bridge_acceleration": "1500", + "internal_solid_infill_acceleration": "2500", + "sparse_infill_acceleration": "2500", + "travel_acceleration": "3000", + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json new file mode 100644 index 0000000000..fba5d501b4 --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Speed @MINIIS.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "top_surface_speed": "120", + "sparse_infill_speed": "100", + "bridge_speed": "25", + "internal_solid_infill_speed": "140", + "sparse_infill_acceleration": "2500", + "internal_solid_infill_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json new file mode 100644 index 0000000000..d4485f483c --- /dev/null +++ b/resources/profiles/Prusa/process/0.15mm Standard @MINIIS.json @@ -0,0 +1,29 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.15mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.12", + "initial_layer_print_height": "0.15", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "outer_wall_speed": "40", + "inner_wall_speed": "70", + "top_surface_speed": "40", + "sparse_infill_speed": "100", + "bridge_speed": "25", + "internal_solid_infill_speed": "140", + "sparse_infill_acceleration": "2500", + "internal_solid_infill_acceleration": "2500", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.25 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json new file mode 100644 index 0000000000..cf5c7333bb --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Speed @MINIIS.json @@ -0,0 +1,11 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json new file mode 100644 index 0000000000..8984d059d1 --- /dev/null +++ b/resources/profiles/Prusa/process/0.20mm Standard @MINIIS.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.20mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json new file mode 100644 index 0000000000..1b8cb9efd0 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Speed @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Speed @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_speed_miniis", + "layer_height": "0.25", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.9", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.6", + "outer_wall_speed": "70", + "inner_wall_speed": "80", + "small_perimeter_speed": "70", + "sparse_infill_speed": "90", + "internal_solid_infill_speed": "80", + "top_surface_speed": "60", + "gap_infill_speed": "60", + "support_speed": "80", + "overhang_1_4_speed": "45", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json new file mode 100644 index 0000000000..66964b9cf7 --- /dev/null +++ b/resources/profiles/Prusa/process/0.25mm Standard @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "layer_height": "0.25", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.9", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.6", + "bottom_shell_layers": "3", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "small_perimeter_speed": "45", + "sparse_infill_speed": "90", + "internal_solid_infill_speed": "80", + "top_surface_speed": "60", + "gap_infill_speed": "60", + "support_speed": "80", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json new file mode 100644 index 0000000000..54fb85f6cd --- /dev/null +++ b/resources/profiles/Prusa/process/0.30mm Detail @MINIIS.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Detail @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.3", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.7", + "top_shell_layers": "3", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "2", + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json new file mode 100644 index 0000000000..ebc6ffcb3e --- /dev/null +++ b/resources/profiles/Prusa/process/0.35mm Standard @MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.35mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_common_miniis", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "0.9", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.6", + "bottom_shell_layers": "3", + "outer_wall_speed": "45", + "inner_wall_speed": "60", + "bridge_speed": "30", + "support_speed": "60", + "small_perimeter_speed": "45", + "sparse_infill_speed": "70", + "internal_solid_infill_speed": "60", + "top_surface_speed": "55", + "gap_infill_speed": "45", + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json new file mode 100644 index 0000000000..26edf2b36d --- /dev/null +++ b/resources/profiles/Prusa/process/0.40mm Standard @MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.40mm Standard @MINIIS", + "from": "system", + "instantiation": "true", + "inherits": "process_detail_miniis", + "layer_height": "0.4", + "initial_layer_print_height": "0.2", + "top_shell_thickness": "1.2", + "top_shell_layers": "4", + "bottom_shell_thickness": "0.8", + "bottom_shell_layers": "3", + "initial_layer_speed": "30", + "outer_wall_speed": "40", + "inner_wall_speed": "40", + "bridge_speed": "22", + "support_speed": "40", + "small_perimeter_speed": "40", + "sparse_infill_speed": "50", + "internal_solid_infill_speed": "40", + "top_surface_speed": "35", + "gap_infill_speed": "35", + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/fdm_process_common.json b/resources/profiles/Prusa/process/fdm_process_common.json index 8aa6ebf563..8995061a1d 100644 --- a/resources/profiles/Prusa/process/fdm_process_common.json +++ b/resources/profiles/Prusa/process/fdm_process_common.json @@ -39,6 +39,7 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", @@ -102,6 +103,5 @@ "internal_solid_infill_speed": "150", "top_surface_speed": "50", "gap_infill_speed": "30", - "travel_speed": "200", - "prime_tower_width": "60" -} + "travel_speed": "200" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_common_miniis.json b/resources/profiles/Prusa/process/process_common_miniis.json new file mode 100644 index 0000000000..5416f7915a --- /dev/null +++ b/resources/profiles/Prusa/process/process_common_miniis.json @@ -0,0 +1,54 @@ +{ + "type": "process", + "name": "process_common_miniis", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "initial_layer_speed": "30", + "initial_layer_infill_speed": "80", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "115", + "internal_solid_infill_speed": "140", + "top_surface_speed": "80", + "gap_infill_speed": "60", + "travel_speed": "400", + "bridge_speed": "35", + "internal_bridge_speed": "50", + "small_perimeter_speed": "45", + "travel_jerk": "8", + "outer_wall_jerk": "7", + "inner_wall_jerk": "8", + "default_jerk": "8", + "infill_jerk": "8", + "top_surface_jerk": "7", + "initial_layer_jerk": "7", + "default_acceleration": "2000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "4000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "3000", + "inner_wall_acceleration": "2000", + "outer_wall_acceleration": "1500", + "bridge_acceleration": "1500", + "exclude_object": "1", + "overhang_1_4_speed": "80%", + "overhang_2_4_speed": "25", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "15", + "sparse_infill_pattern": "cubic", + "top_shell_thickness": "0.7", + "top_shell_layers": "5", + "bottom_shell_thickness": "0.5", + "bottom_shell_layers": "4", + "elefant_foot_compensation": "0.2", + "slowdown_for_curled_perimeters": "1", + "infill_anchor_max": "12", + "sparse_infill_anchor": "2,5", + "infill_wall_overlap": "10%", + "enable_arc_fitting": "1", + "support_speed": "100", + "precise_outer_wall": "1", + "overhang_reverse": "1" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_detail_miniis.json b/resources/profiles/Prusa/process/process_detail_miniis.json new file mode 100644 index 0000000000..a505444987 --- /dev/null +++ b/resources/profiles/Prusa/process/process_detail_miniis.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "process_detail_miniis", + "from": "system", + "instantiation": "false", + "inherits": "process_common_miniis", + "travel_speed": "300", + "initial_layer_speed": "20", + "outer_wall_speed": "40", + "inner_wall_speed": "60", + "bridge_speed": "25", + "support_speed": "60", + "small_perimeter_speed": "40", + "sparse_infill_speed": "100", + "internal_solid_infill_speed": "100", + "top_surface_speed": "60", + "gap_infill_speed": "40", + "default_acceleration": "1500", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "inner_wall_acceleration": "1200", + "outer_wall_acceleration": "1000", + "bridge_acceleration": "1000", + "internal_solid_infill_acceleration": "2000", + "sparse_infill_acceleration": "2000", + "travel_acceleration": "3000" +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/process_speed_miniis.json b/resources/profiles/Prusa/process/process_speed_miniis.json new file mode 100644 index 0000000000..9822e2ac1f --- /dev/null +++ b/resources/profiles/Prusa/process/process_speed_miniis.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "name": "process_speed_miniis", + "from": "system", + "instantiation": "false", + "inherits": "process_common_miniis", + "outer_wall_speed": "140", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "sparse_infill_speed": "140", + "internal_solid_infill_speed": "140", + "top_surface_speed": "80", + "gap_infill_speed": "80", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "inner_wall_acceleration": "2500", + "outer_wall_acceleration": "2000", + "bridge_acceleration": "1500", + "internal_solid_infill_acceleration": "4000", + "overhang_1_4_speed": "60" +} \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json index 22fc68b7ff..8d849c8dcf 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json @@ -62,9 +62,9 @@ ], "layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nLOG_Z\nG92 E0\n", "machine_end_gcode": "M141 S0\nM104 S0\nM140 S0\nG1 E-3 F1800\nG91\nG0 Z5 F600\nG90\nG0 X0 Y0 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}", - "machine_start_gcode": "PRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[chamber_temperature]\nM83\nG4 P3000\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0)} Z5 F6000\nG0 Z[first_layer_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 2} E{2 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} E{85 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 85} E{83 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 2} E{2 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 3} E{82 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 6}\nG1 Z1 F600", + "machine_start_gcode": "PRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[chamber_temperature]\nM83\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\nG4 P3000\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0)} Z5 F6000\nG0 Z[first_layer_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 2} E{2 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} E{85 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 85} E{83 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 2} E{2 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 3} E{82 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 6}\nG1 Z1 F600", "thumbnails_format": "PNG", "default_filament_profile": [ "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json index 0a04225405..92284f4157 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json @@ -100,7 +100,7 @@ "default_filament_profile": [ "Qidi Generic PLA" ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_start_gcode": "G28\nG92 E0\nG0 X300 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-19\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", "scan_first_layer": "0" } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json index ce361e8f2c..5ef98e7853 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json @@ -100,7 +100,7 @@ "default_filament_profile": [ "Qidi Generic PLA" ], - "machine_start_gcode": "G28\nG92 E0\nG0 X5 Y5 Z0.3 F3600\n", + "machine_start_gcode": "G28\nG92 E0\nG0 X270 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-16\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", "scan_first_layer": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Qidi/machine/fdm_machine_common.json b/resources/profiles/Qidi/machine/fdm_machine_common.json index 94bcd6b7e5..995c22940d 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_common.json @@ -114,6 +114,7 @@ "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "G28\nG0 Z50 F600\nM190 S[first_layer_bed_temperature]\nG28 Z\nG29 ; mesh bed leveling ,comment this code to close it\nG0 X0 Y0 Z50 F6000\nM109 S[first_layer_temperature]\nM83\nG0 Z5 F1200\nG0 X{first_layer_print_min[0]} Y{max(0, first_layer_print_min[1] - 2)} F12000\nG0 Z0.2 F600\nG1 E3 F1800\nG0 Z0.3 F600\nG1 X{min(first_layer_print_min[0] + 30,print_bed_max[0])} E6 F600", - "machine_end_gcode": "M104 S0\nM140 S0\nG92 E0\nG1 E-3 F1800\nG90\n{if max_layer_z < max_print_height / 2}\nG1 Z{max_print_height / 2 + 10} F600\n{else}\nG1 Z{min(max_print_height, max_layer_z + 10)}\n{endif}\nG0 X5 Y{print_bed_max[1]-11} F12000\nM141 S0" + "machine_end_gcode": "M104 S0\nM140 S0\nG92 E0\nG1 E-3 F1800\nG90\n{if max_layer_z < max_print_height / 2}\nG1 Z{max_print_height / 2 + 10} F600\n{else}\nG1 Z{min(max_print_height, max_layer_z + 10)}\n{endif}\nG0 X5 Y{print_bed_max[1]-11} F12000\nM141 S0", + "time_lapse_gcode":";TIMELAPSE_TAKE_FRAME\n" } diff --git a/resources/web/guide/23/23.css b/resources/web/guide/23/23.css index de2ca9f3e8..35ceff9960 100644 --- a/resources/web/guide/23/23.css +++ b/resources/web/guide/23/23.css @@ -148,7 +148,7 @@ input height: calc(100% - 6px); display: flex; align-items: center; - border-bottom: 6px solid #00AE42; + border-bottom: 6px solid #009688; } #Title div.TitleUnselected @@ -205,4 +205,4 @@ input .CFilament_EditBtn:hover { -} \ No newline at end of file +} diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index b5530bc628..e9a5d6e641 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -791,7 +791,8 @@ static int construct_assemble_list(std::vector &assemble_ else if (boost::algorithm::iends_with(assemble_object.path, ".obj")) { std::string message; - bool result = load_obj(path_str, &mesh, message); + ObjInfo obj_info; + bool result = load_obj(path_str, &mesh, obj_info, message); if (!result) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(": failed to read a valid mesh from obj file %1%, plate index %2%, object index %3%, error %4%") % assemble_object.path % (index + 1) % (obj_index + 1) % message; return CLI_DATA_FILE_ERROR; @@ -891,8 +892,6 @@ int CLI::run(int argc, char **argv) // instruct the window manager to fall back to X server mode. ::setenv("GDK_BACKEND", "x11", /* replace */ true); - ::setenv("WEBKIT_DISABLE_COMPOSITING_MODE", "1", /* replace */ false); - // Also on Linux, we need to tell Xlib that we will be using threads, // lest we crash when we fire up GStreamer. XInitThreads(); @@ -1456,6 +1455,12 @@ int CLI::run(int argc, char **argv) m_models.push_back(std::move(model)); } + if (!is_bbl_3mf && plate_to_slice > 0) + { + BOOST_LOG_TRIVIAL(warning) << boost::format("%1%: not support to slice plate %2%, reset to 0")%__LINE__ %plate_to_slice; + plate_to_slice = 0; + } + //load custom gcode file std::map custom_gcodes_map; if (!custom_gcode_file.empty()) { @@ -2624,7 +2629,7 @@ int CLI::run(int argc, char **argv) //set multiplier to 1? m_print_config.option("flush_multiplier", true)->set(new ConfigOptionFloat(1.f)); - const std::vector& min_flush_volumes = Slic3r::GUI::get_min_flush_volumes(); + const std::vector& min_flush_volumes = Slic3r::GUI::get_min_flush_volumes(m_print_config); if (filament_is_support->size() != project_filament_count) { @@ -3525,7 +3530,8 @@ int CLI::run(int argc, char **argv) ap.apply(); } - partplate_list.rebuild_plates_after_arrangement(false, true, i); + //lock here + cur_plate->lock(true); } else { size_t plate_obj_count = assemble_plate.loaded_obj_list.size(); @@ -3548,6 +3554,8 @@ int CLI::run(int argc, char **argv) Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate*)partplate_list.get_plate(i); cur_plate->lock(false); } + + partplate_list.reload_all_objects(false, -1); } else if (need_arrange) { @@ -4175,7 +4183,8 @@ int CLI::run(int argc, char **argv) bool no_check = false; std::string export_3mf_file, load_slice_data_dir, export_slice_data_dir; std::vector calibration_thumbnails; - int max_slicing_time_per_plate = 0, max_triangle_count_per_plate = 0; + std::vector plate_object_count(partplate_list.get_plate_count(), 0); + int max_slicing_time_per_plate = 0, max_triangle_count_per_plate = 0, sliced_plate = -1; std::vector plate_has_skips(partplate_list.get_plate_count(), false); std::vector> plate_skipped_objects(partplate_list.get_plate_count()); @@ -4269,6 +4278,7 @@ int CLI::run(int argc, char **argv) } else if (opt_key == "slice") { //BBS: slice 0 means all plates, i means plate i; plate_to_slice = m_config.option("slice")->value; + sliced_plate = plate_to_slice; bool pre_check = (plate_to_slice == 0)?true:false; bool finished = false; @@ -4427,6 +4437,7 @@ int CLI::run(int argc, char **argv) } plate_triangle_counts[index] = triangle_count; + plate_object_count[index] = printable_instances; BOOST_LOG_TRIVIAL(info) << "plate "<< index+1<< ": load cached data success, go on."; } // BBS: TODO @@ -4734,6 +4745,28 @@ int CLI::run(int argc, char **argv) PlateDataPtrs plate_data_list; partplate_list.store_to_3mf_structure(plate_data_list); + if (sliced_plate == -1) { + for (int i = 0; i < plate_data_list.size(); i++) { + Slic3r::GUI::PartPlate *part_plate = partplate_list.get_plate(i); + plate_object_count[i] = part_plate->printable_instance_size(); + } + } + else if (sliced_plate == 0){ + //slicing all + for (int i = 0; i < plate_data_list.size(); i++) { + if (skip_useless_pick && (plate_object_count[i] == 1)) { + BOOST_LOG_TRIVIAL(info) << boost::format("only has 1 object, set plate %1%'s is_label_object_enabled from %2% to false")%(i+1) % (plate_data_list[i]->is_label_object_enabled); + plate_data_list[i]->is_label_object_enabled = false; + } + } + } + else { + if (skip_useless_pick && (plate_object_count[sliced_plate - 1] == 1)) { + BOOST_LOG_TRIVIAL(info) << boost::format("only has 1 object, set plate %1%'s is_label_object_enabled from %2% to false")%sliced_plate % (plate_data_list[sliced_plate - 1]->is_label_object_enabled); + plate_data_list[sliced_plate - 1]->is_label_object_enabled = false; + } + } + if (!outfile_dir.empty()) { export_3mf_file = outfile_dir + "/"+export_3mf_file; } @@ -4752,7 +4785,7 @@ int CLI::run(int argc, char **argv) // get type and color for platedata auto* filament_types = dynamic_cast(m_print_config.option("filament_type")); const ConfigOptionStrings* filament_color = dynamic_cast(m_print_config.option("filament_colour")); - //auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); + auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); const ConfigOptionFloats* nozzle_diameter_option = dynamic_cast(m_print_config.option("nozzle_diameter")); std::string nozzle_diameter_str; if (nozzle_diameter_option) @@ -4769,10 +4802,10 @@ int CLI::run(int argc, char **argv) plate_data->nozzle_diameters = nozzle_diameter_str; for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { - //it->filament_id = filament_id?filament_id->get_at(it->id):"unknown"; std::string display_filament_type; it->type = m_print_config.get_filament_type(display_filament_type, it->id); it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; + it->filament_id = filament_id?filament_id->get_at(it->id):""; } if (!plate_data->plate_thumbnail.is_valid()) { @@ -4940,6 +4973,7 @@ int CLI::run(int argc, char **argv) } } + ThumbnailsParams thumbnail_params; GLShaderProgram* shader = opengl_mgr.get_shader("thumbnail"); if (!shader) { BOOST_LOG_TRIVIAL(error) << boost::format("can not get shader for rendering thumbnail"); @@ -5057,39 +5091,49 @@ int CLI::run(int argc, char **argv) unsigned int thumbnail_width = 512, thumbnail_height = 512; const ThumbnailsParams thumbnail_params = { {}, false, true, false, true, i }; - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate")%(i+1); - - switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top/pick thumbnail missed, need to regenerate, objects count %2%, skip_useless_pick %3%")%(i+1) %plate_object_count[i] %skip_useless_pick; + if (skip_useless_pick && ((plate_object_count[i] <= 1) || (plate_object_count[i] > 64))) { - case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); - break; - } - case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: - { - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); - Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, - thumbnail_width, thumbnail_height, thumbnail_params, - partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); - break; - } - default: - BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); - break; + //don't render pick and top + part_plate->top_thumbnail_data.reset(); + part_plate->pick_thumbnail_data.reset(); + plate_data->top_file.clear(); + plate_data->pick_file.clear(); + BOOST_LOG_TRIVIAL(info) << boost::format("skip rendering for top&&pick"); + } + else { + switch (Slic3r::GUI::OpenGLManager::get_framebuffers_type()) + { + case Slic3r::GUI::OpenGLManager::EFramebufferType::Arb: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: ARB"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + case Slic3r::GUI::OpenGLManager::EFramebufferType::Ext: + { + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: EXT"); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*top_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, false); + Slic3r::GUI::GLCanvas3D::render_thumbnail_framebuffer_ext(*picking_thumbnail, + thumbnail_width, thumbnail_height, thumbnail_params, + partplate_list, model.objects, glvolume_collection, colors_out, shader, Slic3r::GUI::Camera::EType::Ortho, true, true); + break; + } + default: + BOOST_LOG_TRIVIAL(info) << boost::format("framebuffer_type: unknown"); + break; + } + plate_data->top_file = "valid_top"; + plate_data->pick_file = "valid_pick"; + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); } - plate_data->top_file = "valid_top"; - plate_data->pick_file = "valid_pick"; - BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%'s top_thumbnail,finished rendering")%(i+1); } } diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index aa8a061bf8..e51e1f9e14 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -201,14 +201,14 @@ namespace ImGui const wchar_t BlockNotifErrorIcon = 0x0835; const wchar_t ClipboardBtnDarkIcon = 0x0836; - const wchar_t PrevArrowBtnIcon = 0x0836; - const wchar_t PrevArrowHoverBtnIcon = 0x0837; - const wchar_t NextArrowBtnIcon = 0x0838; - const wchar_t NextArrowHoverBtnIcon = 0x0839; - const wchar_t OpenArrowIcon = 0x0840; - const wchar_t CollapseArrowIcon = 0x0841; - const wchar_t ExpandArrowIcon = 0x0842; - const wchar_t CompleteIcon = 0x0843; + const wchar_t PrevArrowBtnIcon = 0x0837; + const wchar_t PrevArrowHoverBtnIcon = 0x0838; + const wchar_t NextArrowBtnIcon = 0x0839; + const wchar_t NextArrowHoverBtnIcon = 0x0840; + const wchar_t OpenArrowIcon = 0x0841; + const wchar_t CollapseArrowIcon = 0x0842; + const wchar_t ExpandArrowIcon = 0x0843; + const wchar_t CompleteIcon = 0x0844; // void MyFunction(const char* name, const MyMatrix44& v); } diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 9e9b56e9d8..49a7228f1f 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -186,6 +186,8 @@ void AppConfig::set_defaults() if (get("show_hints").empty()) set_bool("show_hints", true); //#endif + if (get("enable_multi_machine").empty()) + set_bool("enable_multi_machine", false); if (get("show_gcode_window").empty()) set_bool("show_gcode_window", true); @@ -359,6 +361,14 @@ void AppConfig::set_defaults() set("curr_bed_type", "1"); } + if (get("sending_interval").empty()) { + set("sending_interval", "5"); + } + + if (get("max_send").empty()) { + set("max_send", "3"); + } + // #if BBL_RELEASE_TO_PUBLIC if (get("iot_environment").empty()) { set("iot_environment", "3"); @@ -1246,6 +1256,38 @@ bool AppConfig::is_engineering_region(){ return false; } +void AppConfig::save_custom_color_to_config(const std::vector &colors) +{ + auto set_colors = [](std::map &data, const std::vector &colors) { + for (size_t i = 0; i < colors.size(); i++) { + data[std::to_string(10 + i)] = colors[i]; // for map sort:10 begin + } + }; + if (colors.size() > 0) { + if (!has_section("custom_color_list")) { + std::map data; + set_colors(data, colors); + set_section("custom_color_list", data); + } else { + auto data = get_section("custom_color_list"); + auto data_modify = const_cast *>(&data); + set_colors(*data_modify, colors); + set_section("custom_color_list", *data_modify); + } + } +} + +std::vector AppConfig::get_custom_color_from_config() +{ + std::vector colors; + if (has_section("custom_color_list")) { + auto data = get_section("custom_color_list"); + for (auto iter : data) { + colors.push_back(iter.second); + } + } + return colors; +} void AppConfig::reset_selections() { diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 49f33bcddd..2d2134f10b 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -233,7 +233,9 @@ public: std::string get_country_code(); bool is_engineering_region(); - // reset the current print / filament / printer selections, so that + void save_custom_color_to_config(const std::vector &colors); + std::vector get_custom_color_from_config(); + // reset the current print / filament / printer selections, so that // the PresetBundle::load_selections(const AppConfig &config) call will select // the first non-default preset when called. void reset_selections(); diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index 7952b3aa87..6875ed216b 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -987,7 +987,7 @@ void _arrange( // polygon nesting, a convex hull needs to be calculated. if (params.allow_rotations) { for (auto &itm : shapes) { - itm.rotation(min_area_boundingbox_rotation(itm.rawShape())); + itm.rotation(min_area_boundingbox_rotation(itm.transformedShape())); // If the item is too big, try to find a rotation that makes it fit if constexpr (std::is_same_v) { diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index dfd82cbde7..926619dbf3 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -100,6 +100,8 @@ set(lisbslic3r_sources Fill/FillConcentric.hpp Fill/FillConcentricInternal.cpp Fill/FillConcentricInternal.hpp + Fill/FillCrossHatch.cpp + Fill/FillCrossHatch.hpp Fill/FillHoneycomb.cpp Fill/FillHoneycomb.hpp Fill/FillGyroid.cpp @@ -232,6 +234,7 @@ set(lisbslic3r_sources Arrange.cpp NormalUtils.cpp NormalUtils.hpp + ObjColorUtils.hpp Orient.hpp Orient.cpp MultiPoint.cpp @@ -473,6 +476,7 @@ set(CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE ON CACHE BOOL "" FORCE) cmake_policy(PUSH) cmake_policy(SET CMP0011 NEW) find_package(CGAL REQUIRED) +find_package(OpenCV REQUIRED core) cmake_policy(POP) add_library(libslic3r_cgal STATIC @@ -573,6 +577,7 @@ target_link_libraries(libslic3r mcut JPEG::JPEG qoi + opencv_world ) if(NOT WIN32) diff --git a/src/libslic3r/Color.cpp b/src/libslic3r/Color.cpp index c282e307ed..2f593538ac 100644 --- a/src/libslic3r/Color.cpp +++ b/src/libslic3r/Color.cpp @@ -6,7 +6,15 @@ static const float INV_255 = 1.0f / 255.0f; namespace Slic3r { - +bool color_is_equal(const RGBA a, const RGBA& b) +{ + for (size_t i = 0; i < 4; i++) { + if (abs(a[i] - b[i]) > 0.01) { + return false; + } + } + return true; +} // Conversion from RGB to HSV color space // The input RGB values are in the range [0, 1] // The output HSV values are in the ranges h = [0, 360], and s, v = [0, 1] diff --git a/src/libslic3r/Color.hpp b/src/libslic3r/Color.hpp index c13f0bd2c4..4c96458b40 100644 --- a/src/libslic3r/Color.hpp +++ b/src/libslic3r/Color.hpp @@ -7,7 +7,10 @@ #include namespace Slic3r { - +using RGB = std::array; +using RGBA = std::array; +const RGBA UNDEFINE_COLOR = {0,0,0,0}; +bool color_is_equal(const RGBA a, const RGBA &b); class ColorRGB { std::array m_data{1.0f, 1.0f, 1.0f}; @@ -82,7 +85,9 @@ public: ColorRGBA& operator = (const ColorRGBA& other) { m_data = other.m_data; return *this; } - bool operator == (const ColorRGBA& other) const { return m_data == other.m_data; } + bool operator==(const ColorRGBA &other) const{ + return color_is_equal(m_data, other.m_data); + } bool operator != (const ColorRGBA& other) const { return !operator==(other); } bool operator < (const ColorRGBA& other) const; bool operator > (const ColorRGBA& other) const; diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index e37faf8854..7b95f4cf08 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -831,6 +831,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex else if (boost::iequals(it.key(), BBL_JSON_KEY_FROM)) { key_values.emplace(BBL_JSON_KEY_FROM, it.value()); } + else if (boost::iequals(it.key(), BBL_JSON_KEY_DESCRIPTION)) { + key_values.emplace(BBL_JSON_KEY_DESCRIPTION, it.value()); + } else if (boost::iequals(it.key(), BBL_JSON_KEY_INSTANTIATION)) { key_values.emplace(BBL_JSON_KEY_INSTANTIATION, it.value()); } diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index d87588c6d9..e216853adb 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -18,6 +18,7 @@ #include "../PrintConfig.hpp" #include "../Surface.hpp" +#include "ExtrusionEntity.hpp" #include "FillBase.hpp" #include "FillRectilinear.hpp" #include "FillLightning.hpp" @@ -40,6 +41,7 @@ struct SurfaceFillParams coordf_t overlap = 0.; // Angle as provided by the region config, in radians. float angle = 0.f; + bool rotate_angle = true; // Is bridging used for this fill? Bridging parameters may be used even if this->flow.bridge() is not set. bool bridge; // Non-negative for a bridge. @@ -83,6 +85,7 @@ struct SurfaceFillParams RETURN_COMPARE_NON_EQUAL(spacing); RETURN_COMPARE_NON_EQUAL(overlap); RETURN_COMPARE_NON_EQUAL(angle); + RETURN_COMPARE_NON_EQUAL(rotate_angle); RETURN_COMPARE_NON_EQUAL(density); // RETURN_COMPARE_NON_EQUAL_TYPED(unsigned, dont_adjust); RETURN_COMPARE_NON_EQUAL(anchor_length); @@ -105,6 +108,7 @@ struct SurfaceFillParams this->spacing == rhs.spacing && this->overlap == rhs.overlap && this->angle == rhs.angle && + this->rotate_angle == rhs.rotate_angle && this->bridge == rhs.bridge && this->bridge_angle == rhs.bridge_angle && this->density == rhs.density && @@ -491,9 +495,12 @@ std::vector group_fills(const Layer &layer) } } params.bridge_angle = float(surface.bridge_angle); - params.angle = float(Geometry::deg2rad(region_config.infill_direction.value)); - - // Calculate the actual flow we'll be using for this infill. + params.angle = float(Geometry::deg2rad(params.extrusion_role == erInternalInfill ? + region_config.infill_direction : + region_config.solid_infill_direction.value)); + params.rotate_angle = (params.extrusion_role != erInternalInfill) && region_config.rotate_solid_infill_direction; + + // Calculate the actual flow we'll be using for this infill. params.bridge = is_bridge || Fill::use_bridge_flow(params.pattern); const bool is_thick_bridge = surface.is_bridge() && (surface.is_internal_bridge() ? object_config.thick_internal_bridges : object_config.thick_bridges); params.flow = params.bridge ? @@ -647,8 +654,9 @@ std::vector group_fills(const Layer &layer) else params.pattern = ipRectilinear; params.density = 100.f; - params.extrusion_role = erInternalInfill; - params.angle = float(Geometry::deg2rad(layerm.region().config().infill_direction.value)); + params.extrusion_role = erSolidInfill; + params.angle = float(Geometry::deg2rad(layerm.region().config().solid_infill_direction.value)); + params.rotate_angle = layerm.region().config().rotate_solid_infill_direction; // calculate the actual flow we'll be using for this infill params.flow = layerm.flow(frSolidInfill); params.spacing = params.flow.spacing(); @@ -752,6 +760,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: f->layer_id = this->id(); f->z = this->print_z; f->angle = surface_fill.params.angle; + f->rotate_angle = surface_fill.params.rotate_angle; f->adapt_fill_octree = (surface_fill.params.pattern == ipSupportCubic) ? support_fill_octree : adaptive_fill_octree; f->print_config = &this->object()->print()->config(); f->print_object_config = &this->object()->config(); diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 772395f9bc..3d368e01c7 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -32,6 +32,7 @@ #include "FillLightning.hpp" // BBS: new infill pattern header #include "FillConcentricInternal.hpp" +#include "FillCrossHatch.hpp" // #define INFILL_DEBUG_OUTPUT @@ -51,6 +52,7 @@ Fill* Fill::new_from_type(const InfillPattern type) case ipGyroid: return new FillGyroid(); case ipRectilinear: return new FillRectilinear(); case ipAlignedRectilinear: return new FillAlignedRectilinear(); + case ipCrossHatch: return new FillCrossHatch(); case ipMonotonic: return new FillMonotonic(); case ipLine: return new FillLine(); case ipGrid: return new FillGrid(); diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index 38f8c722b5..4812fcd5eb 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -94,6 +94,8 @@ public: coordf_t overlap; // in radians, ccw, 0 = East float angle; + // Orca: enable angle shifting for layer change + bool rotate_angle{ true }; // In scaled coordinates. Maximum lenght of a perimeter segment connecting two infill lines. // Used by the FillRectilinear2, FillGrid2, FillTriangles, FillStars and FillCubic. // If left to zero, the links will not be limited. @@ -150,6 +152,7 @@ protected: overlap(0.), // Initial angle is undefined. angle(FLT_MAX), + rotate_angle(true), link_max_length(0), loop_clipping(0), // The initial bounding box is empty, therefore undefined. @@ -171,7 +174,7 @@ protected: ExPolygon expolygon, ThickPolylines& thick_polylines_out) {} - virtual float _layer_angle(size_t idx) const { return (idx & 1) ? float(M_PI/2.) : 0; } + virtual float _layer_angle(size_t idx) const { return (rotate_angle && (idx & 1)) ? float(M_PI/2.) : 0; } virtual std::pair _infill_direction(const Surface *surface) const; diff --git a/src/libslic3r/Fill/FillCrossHatch.cpp b/src/libslic3r/Fill/FillCrossHatch.cpp new file mode 100644 index 0000000000..ebac74bf41 --- /dev/null +++ b/src/libslic3r/Fill/FillCrossHatch.cpp @@ -0,0 +1,227 @@ +#include "../ClipperUtils.hpp" +#include "../ShortestPath.hpp" +#include "../Surface.hpp" + +#include "FillCrossHatch.hpp" + +namespace Slic3r { + +// CrossHatch Infill: Enhances 3D Printing Speed & Reduces Noise +// CrossHatch, as its name hints, alternates line direction by 90 degrees every few layers to improve adhesion. +// It introduces transform layers between direction shifts for better line cohesion, which fixes the weakness of line infill. +// The transform technique is inspired by David Eccles, improved 3D honeycomb but we made a more flexible implementation. +// This method notably increases printing speed, meeting the demands of modern high-speed 3D printers, and reduces noise for most layers. +// By Bambu Lab + +// graph credits: David Eccles (gringer). +// But we made a different definition for points. +/* o---o + * / \ + * / \ + * \ / + * \ / + * o---o + * p1 p2 p3 p4 + */ + +static Pointfs generate_one_cycle(double progress, coordf_t period) +{ + Pointfs out; + double offset = progress * 1. / 8. * period; + out.reserve(4); + out.push_back(Vec2d(0.25 * period - offset, offset)); + out.push_back(Vec2d(0.25 * period + offset, offset)); + out.push_back(Vec2d(0.75 * period - offset, -offset)); + out.push_back(Vec2d(0.75 * period + offset, -offset)); + return out; +} + +static Polylines generate_transform_pattern(double inprogress, int direction, coordf_t ingrid_size, coordf_t inwidth, coordf_t inheight) +{ + coordf_t width = inwidth; + coordf_t height = inheight; + coordf_t grid_size = ingrid_size * 2; // we due with odd and even saparately. + double progress = inprogress; + Polylines out_polylines; + + // generate template patterns; + Pointfs one_cycle_points = generate_one_cycle(progress, grid_size); + + Polyline one_cycle; + one_cycle.points.reserve(one_cycle_points.size()); + for (size_t i = 0; i < one_cycle_points.size(); i++) one_cycle.points.push_back(Point(one_cycle_points[i])); + + // swap if vertical + if (direction < 0) { + width = height; + height = inwidth; + } + + // replicate polylines; + Polylines odd_polylines; + Polyline odd_poly; + int num_of_cycle = width / grid_size + 2; + odd_poly.points.reserve(num_of_cycle * one_cycle.size()); + + // replicate to odd line + Point translate = Point(0, 0); + for (size_t i = 0; i < num_of_cycle; i++) { + Polyline odd_points; + odd_points = Polyline(one_cycle); + odd_points.translate(Point(i * grid_size, 0.0)); + odd_poly.points.insert(odd_poly.points.end(), odd_points.begin(), odd_points.end()); + } + + // fill the height + int num_of_lines = height / grid_size + 2; + odd_polylines.reserve(num_of_lines * odd_poly.size()); + for (size_t i = 0; i < num_of_lines; i++) { + Polyline poly = odd_poly; + poly.translate(Point(0.0, grid_size * i)); + odd_polylines.push_back(poly); + } + // save to output + out_polylines.insert(out_polylines.end(), odd_polylines.begin(), odd_polylines.end()); + + // replicate to even lines + Polylines even_polylines; + even_polylines.reserve(odd_polylines.size()); + for (size_t i = 0; i < odd_polylines.size(); i++) { + Polyline even = odd_poly; + even.translate(Point(-0.5 * grid_size, (i + 0.5) * grid_size)); + even_polylines.push_back(even); + } + + // save for output + out_polylines.insert(out_polylines.end(), even_polylines.begin(), even_polylines.end()); + + // change to vertical if need + if (direction < 0) { + // swap xy, see if we need better performance method + for (Polyline &poly : out_polylines) { + for (Point &p : poly) { std::swap(p.x(), p.y()); } + } + } + + return out_polylines; +} + +static Polylines generate_repeat_pattern(int direction, coordf_t grid_size, coordf_t inwidth, coordf_t inheight) +{ + coordf_t width = inwidth; + coordf_t height = inheight; + Polylines out_polylines; + + // swap if vertical + if (direction < 0) { + width = height; + height = inwidth; + } + + int num_of_lines = height / grid_size + 1; + out_polylines.reserve(num_of_lines); + + for (int i = 0; i < num_of_lines; i++) { + Polyline poly; + poly.points.reserve(2); + poly.append(Point(coordf_t(0), coordf_t(grid_size * i))); + poly.append(Point(width, coordf_t(grid_size * i))); + out_polylines.push_back(poly); + } + + // change to vertical if needed + if (direction < 0) { + // swap xy + for (Polyline &poly : out_polylines) { + for (Point &p : poly) { std::swap(p.x(), p.y()); } + } + } + + return out_polylines; +} + +// it makes the real patterns that overlap the bounding box +// repeat_ratio define the ratio between the height of repeat pattern and grid +static Polylines generate_infill_layers(coordf_t z_height, double repeat_ratio, coordf_t grid_size, coordf_t width, coordf_t height) +{ + Polylines result; + coordf_t trans_layer_size = grid_size * 0.4; // upper. + coordf_t repeat_layer_size = grid_size * repeat_ratio; // lower. + z_height += repeat_layer_size / 2; // offset to improve first few layer strength + coordf_t period = trans_layer_size + repeat_layer_size; + coordf_t remains = z_height - std::floor(z_height / period) * period; + coordf_t trans_z = remains - repeat_layer_size; // put repeat layer first. + coordf_t repeat_z = remains; + + int phase = fmod(z_height, period * 2) - (period - 1); // add epsilon + int direction = phase <= 0 ? -1 : 1; + + // this is a repeat layer + if (trans_z < 0) { + result = generate_repeat_pattern(direction, grid_size, width, height); + } + // this is a transform layer + else { + double progress = fmod(trans_z, trans_layer_size) / trans_layer_size; + + // split the progress to forward and backward, with a opposite direction. + if (progress < 0.5) + result = generate_transform_pattern((progress + 0.1) * 2, direction, grid_size, width, height); // increase overlapping. + else + result = generate_transform_pattern((1.1 - progress) * 2, -1 * direction, grid_size, width, height); + } + + return result; +} + +void FillCrossHatch ::_fill_surface_single( + const FillParams ¶ms, unsigned int thickness_layers, const std::pair &direction, ExPolygon expolygon, Polylines &polylines_out) +{ + // rotate angle + auto infill_angle = float(this->angle); + if (std::abs(infill_angle) >= EPSILON) expolygon.rotate(-infill_angle); + + // get the rotated bounding box + BoundingBox bb = expolygon.contour.bounding_box(); + + // linespace modifier + coord_t line_spacing = coord_t(scale_(this->spacing) / params.density); + + // reduce density + if (params.density < 0.999) line_spacing *= 1.08; + + bb.merge(align_to_grid(bb.min, Point(line_spacing * 4, line_spacing * 4))); + + // generate pattern + Polylines polylines = generate_infill_layers(scale_(this->z), 1, line_spacing, bb.size()(0), bb.size()(1)); + + // shift the pattern to the actual space + for (Polyline &pl : polylines) { pl.translate(bb.min); } + + polylines = intersection_pl(polylines, to_polygons(expolygon)); + + // --- remove small remains from gyroid infill + if (!polylines.empty()) { + // Remove very small bits, but be careful to not remove infill lines connecting thin walls! + // The infill perimeter lines should be separated by around a single infill line width. + const double minlength = scale_(0.8 * this->spacing); + polylines.erase(std::remove_if(polylines.begin(), polylines.end(), [minlength](const Polyline &pl) + { return pl.length() < minlength; }), polylines.end()); + } + + if (!polylines.empty()) { + int infill_start_idx = polylines_out.size(); // only rotate what belongs to us. + // connect lines + if (params.dont_connect() || polylines.size() <= 1) + append(polylines_out, chain_polylines(std::move(polylines))); + else + this->connect_infill(std::move(polylines), expolygon, polylines_out, this->spacing, params); + + // rotate back + if (std::abs(infill_angle) >= EPSILON) { + for (auto it = polylines_out.begin() + infill_start_idx; it != polylines_out.end(); ++it) it->rotate(infill_angle); + } + } +} + +} // namespace Slic3r \ No newline at end of file diff --git a/src/libslic3r/Fill/FillCrossHatch.hpp b/src/libslic3r/Fill/FillCrossHatch.hpp new file mode 100644 index 0000000000..859d5bd8b5 --- /dev/null +++ b/src/libslic3r/Fill/FillCrossHatch.hpp @@ -0,0 +1,29 @@ +#ifndef slic3r_FillCrossHatch_hpp_ +#define slic3r_FillCrossHatch_hpp_ + +#include + +#include "../libslic3r.h" + +#include "FillBase.hpp" + +namespace Slic3r { + +class FillCrossHatch : public Fill +{ +public: + Fill *clone() const override { return new FillCrossHatch(*this); }; + ~FillCrossHatch() override {} + +protected: + void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon expolygon, + Polylines &polylines_out) override; +}; + +} // namespace Slic3r + +#endif // slic3r_FillCrossHatch_hpp_ diff --git a/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index 4e621e5f78..0433e917c6 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -21,19 +21,39 @@ namespace Slic3r { -bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) +bool load_obj(const char *path, TriangleMesh *meshptr, ObjInfo& obj_info, std::string &message) { if (meshptr == nullptr) return false; - // Parse the OBJ file. ObjParser::ObjData data; + ObjParser::MtlData mtl_data; if (! ObjParser::objparse(path, data)) { BOOST_LOG_TRIVIAL(error) << "load_obj: failed to parse " << path; message = _L("load_obj: failed to parse"); return false; } - + bool exist_mtl = false; + if (data.mtllibs.size() > 0) { // read mtl + for (auto mtl_name : data.mtllibs) { + boost::filesystem::path full_path(path); + std::string dir = full_path.parent_path().string(); + auto mtl_file = dir + "/" + mtl_name; + boost::filesystem::path mtl_path(mtl_file); + auto _mtl_path = mtl_path.string().c_str(); + if (boost::filesystem::exists(mtl_path)) { + if (!ObjParser::mtlparse(_mtl_path, mtl_data)) { + BOOST_LOG_TRIVIAL(error) << "load_obj:load_mtl: failed to parse " << _mtl_path; + message = _L("load mtl in obj: failed to parse"); + return false; + } + } + else { + BOOST_LOG_TRIVIAL(error) << "load_obj: failed to load mtl_path:" << _mtl_path; + } + } + exist_mtl = true; + } // Count the faces and verify, that all faces are triangular. size_t num_faces = 0; size_t num_quads = 0; @@ -59,17 +79,27 @@ bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) i = j; } } - // Convert ObjData into indexed triangle set. indexed_triangle_set its; - size_t num_vertices = data.coordinates.size() / 4; + size_t num_vertices = data.coordinates.size() / OBJ_VERTEX_LENGTH; its.vertices.reserve(num_vertices); its.indices.reserve(num_faces + num_quads); - for (size_t i = 0; i < num_vertices; ++ i) { - size_t j = i << 2; - its.vertices.emplace_back(data.coordinates[j], data.coordinates[j + 1], data.coordinates[j + 2]); + if (exist_mtl) { + obj_info.is_single_mtl = data.usemtls.size() == 1 && mtl_data.new_mtl_unmap.size() == 1; + obj_info.face_colors.reserve(num_faces + num_quads); } - int indices[4]; + bool has_color = data.has_vertex_color; + for (size_t i = 0; i < num_vertices; ++ i) { + size_t j = i * OBJ_VERTEX_LENGTH; + its.vertices.emplace_back(data.coordinates[j], data.coordinates[j + 1], data.coordinates[j + 2]); + if (data.has_vertex_color) { + RGBA color{std::clamp(data.coordinates[j + 3], 0.f, 1.f), std::clamp(data.coordinates[j + 4], 0.f, 1.f), std::clamp(data.coordinates[j + 5], 0.f, 1.f), + std::clamp(data.coordinates[j + 6], 0.f, 1.f)}; + obj_info.vertex_colors.emplace_back(color); + } + } + int indices[ONE_FACE_SIZE]; + int uvs[ONE_FACE_SIZE]; for (size_t i = 0; i < data.vertices.size();) if (data.vertices[i].coordIdx == -1) ++ i; @@ -79,20 +109,79 @@ bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) if (const ObjParser::ObjVertex &vertex = data.vertices[i ++]; vertex.coordIdx == -1) { break; } else { - assert(cnt < 4); + assert(cnt < OBJ_VERTEX_LENGTH); if (vertex.coordIdx < 0 || vertex.coordIdx >= int(its.vertices.size())) { BOOST_LOG_TRIVIAL(error) << "load_obj: failed to parse " << path << ". The file contains invalid vertex index."; message = _L("The file contains invalid vertex index."); return false; } - indices[cnt ++] = vertex.coordIdx; + indices[cnt] = vertex.coordIdx; + uvs[cnt] = vertex.textureCoordIdx; + cnt++; } if (cnt) { assert(cnt == 3 || cnt == 4); // Insert one or two faces (triangulate a quad). its.indices.emplace_back(indices[0], indices[1], indices[2]); - if (cnt == 4) + int face_index =its.indices.size() - 1; + RGBA face_color; + auto set_face_color = [&uvs, &data, &mtl_data, &obj_info, &face_color](int face_index, const std::string mtl_name) { + if (mtl_data.new_mtl_unmap.find(mtl_name) != mtl_data.new_mtl_unmap.end()) { + bool is_merge_ka_kd = true; + for (size_t n = 0; n < 3; n++) { + if (float(mtl_data.new_mtl_unmap[mtl_name]->Ka[n] + mtl_data.new_mtl_unmap[mtl_name]->Kd[n]) > 1.0) { + is_merge_ka_kd=false; + break; + } + } + for (size_t n = 0; n < 3; n++) { + if (is_merge_ka_kd) { + face_color[n] = std::clamp(float(mtl_data.new_mtl_unmap[mtl_name]->Ka[n] + mtl_data.new_mtl_unmap[mtl_name]->Kd[n]), 0.f, 1.f); + } + else { + face_color[n] = std::clamp(float(mtl_data.new_mtl_unmap[mtl_name]->Kd[n]), 0.f, 1.f); + } + } + face_color[3] = mtl_data.new_mtl_unmap[mtl_name]->Tr; // alpha + if (mtl_data.new_mtl_unmap[mtl_name]->map_Kd.size() > 0) { + auto png_name = mtl_data.new_mtl_unmap[mtl_name]->map_Kd; + obj_info.has_uv_png = true; + if (obj_info.pngs.find(png_name) == obj_info.pngs.end()) { obj_info.pngs[png_name] = false; } + obj_info.uv_map_pngs[face_index] = png_name; + } + if (data.textureCoordinates.size() > 0) { + Vec2f uv0(data.textureCoordinates[uvs[0] * 2], data.textureCoordinates[uvs[0] * 2 + 1]); + Vec2f uv1(data.textureCoordinates[uvs[1] * 2], data.textureCoordinates[uvs[1] * 2 + 1]); + Vec2f uv2(data.textureCoordinates[uvs[2] * 2], data.textureCoordinates[uvs[2] * 2 + 1]); + std::array uv_array{uv0, uv1, uv2}; + obj_info.uvs.emplace_back(uv_array); + } + obj_info.face_colors.emplace_back(face_color); + } + }; + auto set_face_color_by_mtl = [&data, &set_face_color](int face_index) { + if (data.usemtls.size() == 1) { + set_face_color(face_index, data.usemtls[0].name); + } else { + for (size_t k = 0; k < data.usemtls.size(); k++) { + auto mtl = data.usemtls[k]; + if (face_index >= mtl.face_start && face_index <= mtl.face_end) { + set_face_color(face_index, data.usemtls[k].name); + break; + } + } + } + }; + if (exist_mtl) { + set_face_color_by_mtl(face_index); + } + if (cnt == 4) { its.indices.emplace_back(indices[0], indices[2], indices[3]); + int face_index = its.indices.size() - 1; + if (exist_mtl) { + set_face_color_by_mtl(face_index); + } + } } } @@ -107,12 +196,12 @@ bool load_obj(const char *path, TriangleMesh *meshptr, std::string &message) return true; } -bool load_obj(const char *path, Model *model, std::string &message, const char *object_name_in) +bool load_obj(const char *path, Model *model, ObjInfo& obj_info, std::string &message, const char *object_name_in) { TriangleMesh mesh; - - bool ret = load_obj(path, &mesh, message); - + + bool ret = load_obj(path, &mesh, obj_info, message); + if (ret) { std::string object_name; if (object_name_in == nullptr) { @@ -120,10 +209,9 @@ bool load_obj(const char *path, Model *model, std::string &message, const char * object_name.assign((last_slash == nullptr) ? path : last_slash + 1); } else object_name.assign(object_name_in); - model->add_object(object_name.c_str(), path, std::move(mesh)); } - + return ret; } diff --git a/src/libslic3r/Format/OBJ.hpp b/src/libslic3r/Format/OBJ.hpp index e9a3817e43..9b618bd27f 100644 --- a/src/libslic3r/Format/OBJ.hpp +++ b/src/libslic3r/Format/OBJ.hpp @@ -1,15 +1,27 @@ #ifndef slic3r_Format_OBJ_hpp_ #define slic3r_Format_OBJ_hpp_ - +#include "libslic3r/Color.hpp" +#include namespace Slic3r { class TriangleMesh; class Model; class ModelObject; - +typedef std::function &input_colors, bool is_single_color, std::vector &filament_ids, unsigned char &first_extruder_id)> ObjImportColorFn; // Load an OBJ file into a provided model. -extern bool load_obj(const char *path, TriangleMesh *mesh, std::string &message); -extern bool load_obj(const char *path, Model *model, std::string &message, const char *object_name = nullptr); +struct ObjInfo { + std::vector vertex_colors; + std::vector face_colors; + bool is_single_mtl{false}; + std::vector> uvs; + std::string obj_dircetory; + std::map pngs; + std::unordered_map uv_map_pngs; + bool has_uv_png{false}; + +}; +extern bool load_obj(const char *path, TriangleMesh *mesh, ObjInfo &vertex_colors, std::string &message); +extern bool load_obj(const char *path, Model *model, ObjInfo &vertex_colors, std::string &message, const char *object_name = nullptr); extern bool store_obj(const char *path, TriangleMesh *mesh); extern bool store_obj(const char *path, ModelObject *model); diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 8275cf7c5f..e723c9e8af 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -213,6 +213,7 @@ static constexpr const char* FILAMENT_TYPE_TAG = "type"; static constexpr const char *FILAMENT_COLOR_TAG = "color"; static constexpr const char *FILAMENT_USED_M_TAG = "used_m"; static constexpr const char *FILAMENT_USED_G_TAG = "used_g"; +static constexpr const char *FILAMENT_TRAY_INFO_ID_TAG = "tray_info_idx"; static constexpr const char* CONFIG_TAG = "config"; @@ -586,21 +587,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return ret; }; - for (auto it = ps.volumes_per_extruder.begin(); it != ps.volumes_per_extruder.end(); it++) { + for (auto it = ps.total_volumes_per_extruder.begin(); it != ps.total_volumes_per_extruder.end(); it++) { double volume = it->second; auto [used_filament_m, used_filament_g] = get_used_filament_from_volume(volume, it->first); FilamentInfo info; info.id = it->first; - if (ps.flush_per_filament.find(it->first) != ps.flush_per_filament.end()) { - volume = ps.flush_per_filament.at(it->first); - auto [flushed_filament_m, flushed_filament_g] = get_used_filament_from_volume(volume, it->first); - info.used_m = used_filament_m + flushed_filament_m; - info.used_g = used_filament_g + flushed_filament_g; - } else { - info.used_m = used_filament_m; - info.used_g = used_filament_g; - } + info.used_g = used_filament_g; + info.used_m = used_filament_m; slice_filaments_info.push_back(info); } @@ -4231,13 +4225,14 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) std::string color = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_COLOR_TAG); std::string used_m = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_USED_M_TAG); std::string used_g = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_USED_G_TAG); - + std::string filament_id = bbs_get_attribute_value_string(attributes, num_attributes, FILAMENT_TRAY_INFO_ID_TAG); FilamentInfo filament_info; filament_info.id = atoi(id.c_str()) - 1; filament_info.type = type; filament_info.color = color; filament_info.used_m = atof(used_m.c_str()); filament_info.used_g = atof(used_g.c_str()); + filament_info.filament_id = filament_id; m_curr_plater->slice_filaments_info.push_back(filament_info); } return true; @@ -7659,6 +7654,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { stream << " <" << FILAMENT_TAG << " " << FILAMENT_ID_TAG << "=\"" << std::to_string(it->id + 1) << "\" " + << FILAMENT_TRAY_INFO_ID_TAG <<"=\""<< it->filament_id <<"\" " << FILAMENT_TYPE_TAG << "=\"" << it->type << "\" " << FILAMENT_COLOR_TAG << "=\"" << it->color << "\" " << FILAMENT_USED_M_TAG << "=\"" << it->used_m << "\" " diff --git a/src/libslic3r/Format/objparser.cpp b/src/libslic3r/Format/objparser.cpp index 16a3f84ddb..c56d6930ce 100644 --- a/src/libslic3r/Format/objparser.cpp +++ b/src/libslic3r/Format/objparser.cpp @@ -9,16 +9,12 @@ #include "libslic3r/LocalesUtils.hpp" namespace ObjParser { - +#define EATWS() while (*line == ' ' || *line == '\t') ++line static bool obj_parseline(const char *line, ObjData &data) { -#define EATWS() while (*line == ' ' || *line == '\t') ++ line - if (*line == 0) return true; - assert(Slic3r::is_decimal_separator_point()); - // Ignore whitespaces at the beginning of the line. //FIXME is this a good idea? EATWS(); @@ -55,19 +51,19 @@ static bool obj_parseline(const char *line, ObjData &data) line = endptr; EATWS(); } - double w = 0; + /*double w = 0; if (*line != 0) { w = strtod(line, &endptr); if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; line = endptr; EATWS(); - } + }*/ if (*line != 0) return false; data.textureCoordinates.push_back((float)u); data.textureCoordinates.push_back((float)v); - data.textureCoordinates.push_back((float)w); + //data.textureCoordinates.push_back((float)w); break; } case 'n': @@ -156,23 +152,46 @@ static bool obj_parseline(const char *line, ObjData &data) return false; line = endptr; EATWS(); - double w = 1.0; - if (*line != 0) { - w = strtod(line, &endptr); - if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) - return false; - line = endptr; - EATWS(); + double color_x = 0.0, color_y = 0.0, color_z = 0.0, color_w = 0.0;//undefine color + if (*line != 0) { + if (!data.has_vertex_color) { + data.has_vertex_color = true; + } + color_x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) + return false; + line = endptr; + EATWS(); + color_y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) + return false; + line = endptr; + EATWS(); + color_z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) + return false; + line = endptr; + EATWS(); + color_w = 1.0;//default define alpha = 1.0 + if (*line != 0) { + color_w = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + } } // the following check is commented out because there may be obj files containing extra data, as those generated by Meshlab, // see https://dev.prusa3d.com/browse/SPE-1019 for an example, - // and this would lead to a crash because no vertex would be stored + // and this would lead to a crash because no vertex would be stored // if (*line != 0) // return false; data.coordinates.push_back((float)x); data.coordinates.push_back((float)y); data.coordinates.push_back((float)z); - data.coordinates.push_back((float)w); + data.coordinates.push_back((float) color_x); + data.coordinates.push_back((float) color_y); + data.coordinates.push_back((float) color_z); + data.coordinates.push_back((float) color_w); break; } } @@ -232,6 +251,24 @@ static bool obj_parseline(const char *line, ObjData &data) data.vertices.push_back(vertex); EATWS(); } + if (data.usemtls.size() > 0) { + data.usemtls.back().vertexIdxEnd = (int) data.vertices.size(); + } + if (data.usemtls.size() > 0) { + int face_index_count = 0; + for (int i = data.vertices.size() - 1; i >= 0; i--) { + if (data.vertices[i].coordIdx == -1) { + break; + } + face_index_count++; + } + if (face_index_count == 3) {//tri + data.usemtls.back().face_end++; + } else if (face_index_count == 4) {//quad + data.usemtls.back().face_end++; + data.usemtls.back().face_end++; + } + } vertex.coordIdx = -1; vertex.normalIdx = -1; vertex.textureCoordIdx = -1; @@ -263,10 +300,23 @@ static bool obj_parseline(const char *line, ObjData &data) // usemtl [material name] // printf("usemtl %s\r\n", line); EATWS(); + if (data.usemtls.size()>0) { + data.usemtls.back().vertexIdxEnd = (int) data.vertices.size(); + } ObjUseMtl usemtl; usemtl.vertexIdxFirst = (int)data.vertices.size(); usemtl.name = line; data.usemtls.push_back(usemtl); + if (data.usemtls.size() == 1) { + data.usemtls.back().face_start = 0; + } + else {//>=2 + auto count = data.usemtls.size(); + auto& last_usemtl = data.usemtls[count-1]; + auto& last_last_usemtl = data.usemtls[count - 2]; + last_usemtl.face_start = last_last_usemtl.face_end + 1; + } + data.usemtls.back().face_end = data.usemtls.back().face_start - 1; break; } case 'o': @@ -323,6 +373,197 @@ static bool obj_parseline(const char *line, ObjData &data) return true; } +static std::string cur_mtl_name = ""; +static bool mtl_parseline(const char *line, MtlData &data) +{ + if (*line == 0) return true; + assert(Slic3r::is_decimal_separator_point()); + // Ignore whitespaces at the beginning of the line. + // FIXME is this a good idea? + EATWS(); + + char c1 = *line++; + switch (c1) { + case '#': {// Comment, ignore the rest of the line. + break; + } + case 'n': { + if (*(line++) != 'e' || *(line++) != 'w' || *(line++) != 'm' || *(line++) != 't' || *(line++) != 'l') + return false; + EATWS(); + ObjNewMtl new_mtl; + cur_mtl_name = line; + data.new_mtl_unmap[cur_mtl_name] = std::make_shared(); + break; + } + case 'm': { + if (*(line++) != 'a' || *(line++) != 'p' || *(line++) != '_' || *(line++) != 'K' || *(line++) != 'd') return false; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->map_Kd = line; + } + break; + } + case 'N': { + char cur_char = *(line++); + if (cur_char == 's') { + EATWS(); + char * endptr = 0; + double ns = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ns = (float) ns; + } + } else if (cur_char == 'i') { + EATWS(); + char * endptr = 0; + double ni = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ni = (float) ni; + } + } + break; + } + case 'K': { + char cur_char = *(line++); + if (cur_char == 'a') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ka[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Ka[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Ka[2] = z; + } + } else if (cur_char == 'd') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Kd[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Kd[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Kd[2] = z; + } + } else if (cur_char == 's') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ks[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Ks[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Ks[2] = z; + } + } else if (cur_char == 'e') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Ke[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Ke[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Ke[2] = z; + } + } + break; + } + case 'i': { + if (*(line++) != 'l' || *(line++) != 'l' || *(line++) != 'u' || *(line++) != 'm') + return false; + EATWS(); + char * endptr = 0; + double illum = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->illum = (float) illum; + } + break; + } + case 'd': { + EATWS(); + char * endptr = 0; + double d = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->d = (float) d; + } + break; + } + case 'T': { + char cur_char = *(line++); + if (cur_char == 'r') { + EATWS(); + char * endptr = 0; + double tr = strtod(line, &endptr); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Tr = (float) tr; + } + break; + } else if (cur_char == 'f') { + EATWS(); + char * endptr = 0; + double x = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double y = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t')) return false; + line = endptr; + EATWS(); + double z = strtod(line, &endptr); + if (endptr == 0 || (*endptr != ' ' && *endptr != '\t' && *endptr != 0)) return false; + line = endptr; + EATWS(); + if (data.new_mtl_unmap.find(cur_mtl_name) != data.new_mtl_unmap.end()) { + data.new_mtl_unmap[cur_mtl_name]->Tf[0] = x; + data.new_mtl_unmap[cur_mtl_name]->Tf[1] = y; + data.new_mtl_unmap[cur_mtl_name]->Tf[2] = z; + } + break; + } + } + } + return true; +} bool objparse(const char *path, ObjData &data) { @@ -369,10 +610,52 @@ bool objparse(const char *path, ObjData &data) return true; } +bool mtlparse(const char *path, MtlData &data) +{ + Slic3r::CNumericLocalesSetter locales_setter; + + FILE *pFile = boost::nowide::fopen(path, "rt"); + if (pFile == 0) return false; + cur_mtl_name = ""; + try { + char buf[65536 * 2]; + size_t len = 0; + size_t lenPrev = 0; + while ((len = ::fread(buf + lenPrev, 1, 65536, pFile)) != 0) { + len += lenPrev; + size_t lastLine = 0; + for (size_t i = 0; i < len; ++i) + if (buf[i] == '\r' || buf[i] == '\n') { + buf[i] = 0; + char *c = buf + lastLine; + while (*c == ' ' || *c == '\t') ++c; + // FIXME check the return value and exit on error? + // Will it break parsing of some obj files? + mtl_parseline(c, data); + lastLine = i + 1; + } + lenPrev = len - lastLine; + if (lenPrev > 65536) { + BOOST_LOG_TRIVIAL(error) << "MtlParser: Excessive line length"; + ::fclose(pFile); + return false; + } + memmove(buf, buf + lastLine, lenPrev); + } + } catch (std::bad_alloc &) { + BOOST_LOG_TRIVIAL(error) << "MtlParser: Out of memory"; + } + ::fclose(pFile); + + // printf("vertices: %d\r\n", data.vertices.size() / 4); + // printf("coords: %d\r\n", data.coordinates.size()); + return true; +} + bool objparse(std::istream &stream, ObjData &data) { Slic3r::CNumericLocalesSetter locales_setter; - + try { char buf[65536 * 2]; size_t len = 0; diff --git a/src/libslic3r/Format/objparser.hpp b/src/libslic3r/Format/objparser.hpp index 5f3f010e4a..48493de3de 100644 --- a/src/libslic3r/Format/objparser.hpp +++ b/src/libslic3r/Format/objparser.hpp @@ -3,6 +3,8 @@ #include #include +#include +#include #include namespace ObjParser { @@ -16,22 +18,39 @@ struct ObjVertex inline bool operator==(const ObjVertex &v1, const ObjVertex &v2) { - return - v1.coordIdx == v2.coordIdx && - v1.textureCoordIdx == v2.textureCoordIdx && + return v1.coordIdx == v2.coordIdx && + v1.textureCoordIdx == v2.textureCoordIdx && v1.normalIdx == v2.normalIdx; } struct ObjUseMtl { int vertexIdxFirst; + int vertexIdxEnd{-1}; + int face_start; + int face_end{-1}; std::string name; }; +struct ObjNewMtl +{ + std::string name; + float Ns; + float Ni; + float d; + float illum; + float Tr{1.0f}; // Transmission + std::array Tf; + std::array Ka; + std::array Kd; + std::array Ks; + std::array Ke; + std::string map_Kd;//defalut png +}; + inline bool operator==(const ObjUseMtl &v1, const ObjUseMtl &v2) { - return - v1.vertexIdxFirst == v2.vertexIdxFirst && + return v1.vertexIdxFirst == v2.vertexIdxFirst && v1.name.compare(v2.name) == 0; } @@ -56,8 +75,7 @@ struct ObjGroup inline bool operator==(const ObjGroup &v1, const ObjGroup &v2) { - return - v1.vertexIdxFirst == v2.vertexIdxFirst && + return v1.vertexIdxFirst == v2.vertexIdxFirst && v1.name.compare(v2.name) == 0; } @@ -69,17 +87,19 @@ struct ObjSmoothingGroup inline bool operator==(const ObjSmoothingGroup &v1, const ObjSmoothingGroup &v2) { - return - v1.vertexIdxFirst == v2.vertexIdxFirst && + return v1.vertexIdxFirst == v2.vertexIdxFirst && v1.smoothingGroupID == v2.smoothingGroupID; } - +#define OBJ_VERTEX_COLOR_ALPHA 6 +#define OBJ_VERTEX_LENGTH 7 // x, y, z, color_x,color_y,color_z,color_w +#define ONE_FACE_SIZE 4//ONE_FACE format: f 8/4/6 7/3/6 6/2/6 -1/-1/-1 struct ObjData { // Version of the data structure for load / store in the private binary format. int version; - // x, y, z, w + // x, y, z, color_x,color_y,color_z,color_w std::vector coordinates; + bool has_vertex_color{false}; // u, v, w std::vector textureCoordinates; // x, y, z @@ -97,7 +117,14 @@ struct ObjData { std::vector vertices; }; +struct MtlData +{ + // Version of the data structure for load / store in the private binary format. + int version; + std::unordered_map> new_mtl_unmap; +}; extern bool objparse(const char *path, ObjData &data); +extern bool mtlparse(const char *path, MtlData &data); extern bool objparse(std::istream &stream, ObjData &data); extern bool objbinsave(const char *path, const ObjData &data); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 467ec4bbeb..fc368eeca5 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1382,52 +1382,8 @@ namespace DoExport { double total_used_filament = 0.0; double total_weight = 0.0; double total_cost = 0.0; - for (auto volume : result.print_statistics.volumes_per_extruder) { - total_extruded_volume += volume.second; - size_t extruder_id = volume.first; - auto extruder = std::find_if(extruders.begin(), extruders.end(), [extruder_id](const Extruder& extr) { return extr.id() == extruder_id; }); - if (extruder == extruders.end()) - continue; - - double s = PI * sqr(0.5* extruder->filament_diameter()); - double weight = volume.second * extruder->filament_density() * 0.001; - total_used_filament += volume.second/s; - total_weight += weight; - total_cost += weight * extruder->filament_cost() * 0.001; - } - //BBS: add flush volume - for (auto volume : result.print_statistics.flush_per_filament) { - total_extruded_volume += volume.second; - - size_t extruder_id = volume.first; - auto extruder = std::find_if(extruders.begin(), extruders.end(), [extruder_id](const Extruder& extr) { return extr.id() == extruder_id; }); - if (extruder == extruders.end()) - continue; - - double s = PI * sqr(0.5* extruder->filament_diameter()); - double weight = volume.second * extruder->filament_density() * 0.001; - total_used_filament += volume.second/s; - total_weight += weight; - total_cost += weight * extruder->filament_cost() * 0.001; - } - - for (auto volume : result.print_statistics.wipe_tower_volumes_per_extruder) { - total_extruded_volume += volume.second; - - size_t extruder_id = volume.first; - auto extruder = std::find_if(extruders.begin(), extruders.end(), [extruder_id](const Extruder& extr) {return extr.id() == extruder_id; }); - if (extruder == extruders.end()) - continue; - - double s = PI * sqr(0.5* extruder->filament_diameter()); - double weight = volume.second * extruder->filament_density() * 0.001; - total_used_filament += volume.second/s; - total_weight += weight; - total_cost += weight * extruder->filament_cost() * 0.001; - } - - for (auto volume : result.print_statistics.support_volumes_per_extruder) { + for (auto volume : result.print_statistics.total_volumes_per_extruder) { total_extruded_volume += volume.second; size_t extruder_id = volume.first; @@ -1447,7 +1403,7 @@ namespace DoExport { print_statistics.total_weight = total_weight; print_statistics.total_cost = total_cost; - print_statistics.filament_stats = result.print_statistics.volumes_per_extruder; + print_statistics.filament_stats = result.print_statistics.model_volumes_per_extruder; } // if any reserved keyword is found, returns a std::vector containing the first MAX_COUNT keywords found diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 9258c6bf5d..ebe3947008 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -753,7 +753,7 @@ void GCodeProcessor::UsedFilaments::reset() volumes_per_color_change = std::vector(); model_extrude_cache = 0.0f; - volumes_per_extruder.clear(); + model_volumes_per_extruder.clear(); flush_per_filament.clear(); @@ -761,16 +761,20 @@ void GCodeProcessor::UsedFilaments::reset() filaments_per_role.clear(); wipe_tower_cache = 0.0f; - wipe_tower_volume_per_extruder.clear(); + wipe_tower_volumes_per_extruder.clear(); support_volume_cache = 0.0f; - support_volume_per_extruder.clear(); + support_volumes_per_extruder.clear(); + + total_volume_cache = 0.0f; + total_volumes_per_extruder.clear(); } void GCodeProcessor::UsedFilaments::increase_support_caches(double extruded_volume) { support_volume_cache += extruded_volume; role_cache += extruded_volume; + total_volume_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume) @@ -778,12 +782,14 @@ void GCodeProcessor::UsedFilaments::increase_model_caches(double extruded_volume color_change_cache += extruded_volume; model_extrude_cache += extruded_volume; role_cache += extruded_volume; + total_volume_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::increase_wipe_tower_caches(double extruded_volume) { wipe_tower_cache += extruded_volume; role_cache += extruded_volume; + total_volume_cache += extruded_volume; } void GCodeProcessor::UsedFilaments::process_color_change_cache() @@ -794,14 +800,27 @@ void GCodeProcessor::UsedFilaments::process_color_change_cache() } } + +void GCodeProcessor::UsedFilaments::process_total_volume_cache(GCodeProcessor* processor) +{ + size_t active_extruder_id = processor->m_extruder_id; + if (total_volume_cache!= 0.0f) { + if (total_volumes_per_extruder.find(active_extruder_id) != total_volumes_per_extruder.end()) + total_volumes_per_extruder[active_extruder_id] += total_volume_cache; + else + total_volumes_per_extruder[active_extruder_id] = total_volume_cache; + total_volume_cache = 0.0f; + } +} + void GCodeProcessor::UsedFilaments::process_model_cache(GCodeProcessor* processor) { size_t active_extruder_id = processor->m_extruder_id; if (model_extrude_cache != 0.0f) { - if (volumes_per_extruder.find(active_extruder_id) != volumes_per_extruder.end()) - volumes_per_extruder[active_extruder_id] += model_extrude_cache; + if (model_volumes_per_extruder.find(active_extruder_id) != model_volumes_per_extruder.end()) + model_volumes_per_extruder[active_extruder_id] += model_extrude_cache; else - volumes_per_extruder[active_extruder_id] = model_extrude_cache; + model_volumes_per_extruder[active_extruder_id] = model_extrude_cache; model_extrude_cache = 0.0f; } } @@ -810,10 +829,10 @@ void GCodeProcessor::UsedFilaments::process_wipe_tower_cache(GCodeProcessor* pro { size_t active_extruder_id = processor->m_extruder_id; if (wipe_tower_cache != 0.0f) { - if (wipe_tower_volume_per_extruder.find(active_extruder_id) != wipe_tower_volume_per_extruder.end()) - wipe_tower_volume_per_extruder[active_extruder_id] += wipe_tower_cache; + if (wipe_tower_volumes_per_extruder.find(active_extruder_id) != wipe_tower_volumes_per_extruder.end()) + wipe_tower_volumes_per_extruder[active_extruder_id] += wipe_tower_cache; else - wipe_tower_volume_per_extruder[active_extruder_id] = wipe_tower_cache; + wipe_tower_volumes_per_extruder[active_extruder_id] = wipe_tower_cache; wipe_tower_cache = 0.0f; } } @@ -822,20 +841,27 @@ void GCodeProcessor::UsedFilaments::process_support_cache(GCodeProcessor* proces { size_t active_extruder_id = processor->m_extruder_id; if (support_volume_cache != 0.0f){ - if (support_volume_per_extruder.find(active_extruder_id) != support_volume_per_extruder.end()) - support_volume_per_extruder[active_extruder_id] += support_volume_cache; + if (support_volumes_per_extruder.find(active_extruder_id) != support_volumes_per_extruder.end()) + support_volumes_per_extruder[active_extruder_id] += support_volume_cache; else - support_volume_per_extruder[active_extruder_id] = support_volume_cache; + support_volumes_per_extruder[active_extruder_id] = support_volume_cache; support_volume_cache = 0.0f; } } void GCodeProcessor::UsedFilaments::update_flush_per_filament(size_t extrude_id, float flush_volume) { - if (flush_per_filament.find(extrude_id) != flush_per_filament.end()) - flush_per_filament[extrude_id] += flush_volume; - else - flush_per_filament[extrude_id] = flush_volume; + if (flush_volume != 0.f) { + if (flush_per_filament.find(extrude_id) != flush_per_filament.end()) + flush_per_filament[extrude_id] += flush_volume; + else + flush_per_filament[extrude_id] = flush_volume; + + if (total_volumes_per_extruder.find(extrude_id) != total_volumes_per_extruder.end()) + total_volumes_per_extruder[extrude_id] += flush_volume; + else + total_volumes_per_extruder[extrude_id] = flush_volume; + } } void GCodeProcessor::UsedFilaments::process_role_cache(GCodeProcessor* processor) @@ -865,6 +891,7 @@ void GCodeProcessor::UsedFilaments::process_caches(GCodeProcessor* processor) process_role_cache(processor); process_wipe_tower_cache(processor); process_support_cache(processor); + process_total_volume_cache(processor); } #if ENABLE_GCODE_VIEWER_STATISTICS @@ -4542,6 +4569,7 @@ void GCodeProcessor::process_filaments(CustomGCode::Type code) if (code == CustomGCode::ToolChange) { m_used_filaments.process_model_cache(this); m_used_filaments.process_support_cache(this); + m_used_filaments.process_total_volume_cache(this); //BBS: reset remaining filament m_remaining_volume = m_nozzle_volume; } @@ -4573,11 +4601,12 @@ void GCodeProcessor::update_estimated_times_stats() m_result.print_statistics.modes[static_cast(PrintEstimatedStatistics::ETimeMode::Stealth)].reset(); m_result.print_statistics.volumes_per_color_change = m_used_filaments.volumes_per_color_change; - m_result.print_statistics.volumes_per_extruder = m_used_filaments.volumes_per_extruder; - m_result.print_statistics.wipe_tower_volumes_per_extruder = m_used_filaments.wipe_tower_volume_per_extruder; - m_result.print_statistics.support_volumes_per_extruder = m_used_filaments.support_volume_per_extruder; + m_result.print_statistics.model_volumes_per_extruder = m_used_filaments.model_volumes_per_extruder; + m_result.print_statistics.wipe_tower_volumes_per_extruder = m_used_filaments.wipe_tower_volumes_per_extruder; + m_result.print_statistics.support_volumes_per_extruder = m_used_filaments.support_volumes_per_extruder; m_result.print_statistics.flush_per_filament = m_used_filaments.flush_per_filament; m_result.print_statistics.used_filaments_per_role = m_used_filaments.filaments_per_role; + m_result.print_statistics.total_volumes_per_extruder = m_used_filaments.total_volumes_per_extruder; } //BBS: ugly code... @@ -4587,8 +4616,8 @@ void GCodeProcessor::update_slice_warnings() auto get_used_extruders = [this]() { std::vector used_extruders; - used_extruders.reserve(m_used_filaments.volumes_per_extruder.size()); - for (auto item : m_used_filaments.volumes_per_extruder) { + used_extruders.reserve(m_used_filaments.total_volumes_per_extruder.size()); + for (auto item : m_used_filaments.total_volumes_per_extruder) { used_extruders.push_back(item.first); } return used_extruders; diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index ed38b2af37..0a56ce2b0e 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -73,9 +73,10 @@ namespace Slic3r { }; std::vector volumes_per_color_change; - std::map volumes_per_extruder; + std::map model_volumes_per_extruder; std::map wipe_tower_volumes_per_extruder; std::map support_volumes_per_extruder; + std::map total_volumes_per_extruder; //BBS: the flush amount of every filament std::map flush_per_filament; std::map> used_filaments_per_role; @@ -92,7 +93,9 @@ namespace Slic3r { volumes_per_color_change.clear(); volumes_per_color_change.shrink_to_fit(); wipe_tower_volumes_per_extruder.clear(); - volumes_per_extruder.clear(); + model_volumes_per_extruder.clear(); + support_volumes_per_extruder.clear(); + total_volumes_per_extruder.clear(); flush_per_filament.clear(); used_filaments_per_role.clear(); total_filamentchanges = 0; @@ -500,17 +503,20 @@ namespace Slic3r { std::vector volumes_per_color_change; double model_extrude_cache; - std::map volumes_per_extruder; + std::map model_volumes_per_extruder; double wipe_tower_cache; - std::mapwipe_tower_volume_per_extruder; + std::mapwipe_tower_volumes_per_extruder; double support_volume_cache; - std::mapsupport_volume_per_extruder; + std::mapsupport_volumes_per_extruder; //BBS: the flush amount of every filament std::map flush_per_filament; + double total_volume_cache; + std::maptotal_volumes_per_extruder; + double role_cache; std::map> filaments_per_role; @@ -524,6 +530,7 @@ namespace Slic3r { void process_model_cache(GCodeProcessor* processor); void process_wipe_tower_cache(GCodeProcessor* processor); void process_support_cache(GCodeProcessor* processor); + void process_total_volume_cache(GCodeProcessor* processor); void update_flush_per_filament(size_t extrude_id, float flush_length); void process_role_cache(GCodeProcessor* processor); diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 642b07c9dd..39c603a470 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -76,6 +76,9 @@ public: m_gcode_flavor(flavor), m_filpar(filament_parameters) { + // ORCA: This class is only used by BBL printers, so set the parameter appropriately. + // This fixes an issue where the wipe tower was using BBL tags resulting in statistics for purging in the purge tower not being displayed. + GCodeProcessor::s_IsBBLPrinter = true; // adds tag for analyzer: std::ostringstream str; str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) << std::to_string(m_layer_height) << "\n"; // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 3c717a063d..5dd5fa0f63 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -50,6 +50,9 @@ public: m_gcode_flavor(flavor), m_filpar(filament_parameters) { + // ORCA: This class is only used by non BBL printers, so set the parameter appropriately. + // This fixes an issue where the wipe tower was using BBL tags resulting in statistics for purging in the purge tower not being displayed. + GCodeProcessor::s_IsBBLPrinter = false; // adds tag for analyzer: std::ostringstream str; str << ";" << GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Height) << m_layer_height << "\n"; // don't rely on GCodeAnalyzer knowing the layer height - it knows nothing at priming @@ -803,9 +806,11 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) "; CP TOOLCHANGE START\n") .comment_with_value(" toolchange #", m_num_tool_changes + 1); // the number is zero-based - if (tool != (unsigned)(-1)) + if (tool != (unsigned)(-1)){ writer.append(std::string("; material : " + (m_current_tool < m_filpar.size() ? m_filpar[m_current_tool].material : "(NONE)") + " -> " + m_filpar[tool].material + "\n").c_str()) - .append(";--------------------\n"); + .append(";--------------------\n"); + writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_Start) + "\n"); + } writer.speed_override_backup(); writer.speed_override(100); @@ -825,6 +830,7 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) toolchange_Load(writer, cleaning_box); writer.travel(writer.x(), writer.y()-m_perimeter_width); // cooling and loading were done a bit down the road toolchange_Wipe(writer, cleaning_box, wipe_volume); // Wipe the newly loaded filament until the end of the assigned wipe area. + writer.append(";" + GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Tower_End) + "\n"); ++ m_num_tool_changes; } else toolchange_Unload(writer, cleaning_box, m_filpar[m_current_tool].material, m_filpar[m_current_tool].temperature); diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp index e1df7322a4..0842ddc37b 100644 --- a/src/libslic3r/Geometry/Voronoi.cpp +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -160,10 +160,12 @@ VoronoiDiagram::detect_known_issues(const VoronoiDiagram &voronoi_diagram, Segme return IssueType::FINITE_EDGE_WITH_NON_FINITE_VERTEX; } else if (const IssueType cell_issue_type = detect_known_voronoi_cell_issues(voronoi_diagram, segment_begin, segment_end); cell_issue_type != IssueType::NO_ISSUE_DETECTED) { return cell_issue_type; - } else if (!VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segment_begin, segment_end)) { - // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. - return IssueType::NON_PLANAR_VORONOI_DIAGRAM; } + // BBS: test no problem in BBS + //} else if (!VoronoiUtilsCgal::is_voronoi_diagram_planar_angle(voronoi_diagram, segment_begin, segment_end)) { + // // Detection of non-planar Voronoi diagram detects at least GH issues #8474, #8514 and #8446. + // return IssueType::NON_PLANAR_VORONOI_DIAGRAM; + //} return IssueType::NO_ISSUE_DETECTED; } diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 66aef84a3d..96677495c6 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -24,9 +24,6 @@ #include "TriangleSelector.hpp" #include "Format/AMF.hpp" -#include "Format/OBJ.hpp" -#include "Format/STL.hpp" -#include "Format/STEP.hpp" #include "Format/svg.hpp" // BBS #include "FaceDetector.hpp" @@ -60,6 +57,9 @@ #define _L(s) Slic3r::I18N::translate(s) namespace Slic3r { +const std::vector CONST_FILAMENTS = { + "", "4", "8", "0C", "1C", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "AC", "BC", "CC", "DC", +}; // 5 10 15 16 // BBS initialization of static variables std::map Model::extruderParamsMap = { {0,{"",0,0}}}; GlobalSpeedMap Model::printSpeedMap{}; @@ -190,7 +190,12 @@ Model::~Model() // Loading model from a file, it may be a simple geometry file as STL or OBJ, however it may be a project file as well. Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* config, ConfigSubstitutionContext* config_substitutions, LoadStrategy options, PlateDataPtrs* plate_data, std::vector* project_presets, bool *is_xxx, Semver* file_version, Import3mfProgressFn proFn, - ImportstlProgressFn stlFn, ImportStepProgressFn stepFn, StepIsUtf8Fn stepIsUtf8Fn, BBLProject* project, int plate_id) + ImportstlProgressFn stlFn, + ImportStepProgressFn stepFn, + StepIsUtf8Fn stepIsUtf8Fn, + BBLProject * project, + int plate_id, + ObjImportColorFn objFn) { Model model; @@ -221,8 +226,46 @@ Model Model::read_from_file(const std::string& input_file, DynamicPrintConfig* c result = load_stl(input_file.c_str(), &model, nullptr, stlFn); else if (boost::algorithm::iends_with(input_file, ".oltp")) result = load_stl(input_file.c_str(), &model, nullptr, stlFn,256); - else if (boost::algorithm::iends_with(input_file, ".obj")) - result = load_obj(input_file.c_str(), &model, message); + else if (boost::algorithm::iends_with(input_file, ".obj")) { + ObjInfo obj_info; + result = load_obj(input_file.c_str(), &model, obj_info, message); + if (result){ + unsigned char first_extruder_id; + if (obj_info.vertex_colors.size() > 0) { + std::vector vertex_filament_ids; + if (objFn) { // 1.result is ok and pop up a dialog + objFn(obj_info.vertex_colors, false, vertex_filament_ids, first_extruder_id); + if (vertex_filament_ids.size() > 0) { + result = obj_import_vertex_color_deal(vertex_filament_ids, first_extruder_id, & model); + } + } else { // test //todo delete + vertex_filament_ids.push_back(2); + vertex_filament_ids.push_back(3); + vertex_filament_ids.push_back(4); + vertex_filament_ids.push_back(1); // 4 + vertex_filament_ids.push_back(1); + vertex_filament_ids.push_back(1); + vertex_filament_ids.push_back(1); + vertex_filament_ids.push_back(1); // 8 + result = obj_import_vertex_color_deal(vertex_filament_ids, first_extruder_id, &model); + } + } else if (obj_info.face_colors.size() > 0 && obj_info.has_uv_png == false) { // mtl file + std::vector face_filament_ids; + if (objFn) { // 1.result is ok and pop up a dialog + objFn(obj_info.face_colors, obj_info.is_single_mtl, face_filament_ids, first_extruder_id); + if (face_filament_ids.size() > 0) { + result = obj_import_face_color_deal(face_filament_ids, first_extruder_id, &model); + } + } + } /*else if (obj_info.has_uv_png && obj_info.uvs.size() > 0) { + boost::filesystem::path full_path(input_file); + std::string obj_directory = full_path.parent_path().string(); + obj_info.obj_dircetory = obj_directory; + result = false; + message = _L("Importing obj with png function is developing."); + }*/ + } + } else if (boost::algorithm::iends_with(input_file, ".svg")) result = load_svg(input_file.c_str(), &model, message); //BBS: remove the old .amf.xml files @@ -2866,6 +2909,163 @@ void Model::setExtruderParams(const DynamicPrintConfig& config, int extruders_co } } +static void get_real_filament_id(const unsigned char &id, std::string &result) { + if (id < CONST_FILAMENTS.size()) { + result = CONST_FILAMENTS[id]; + } else { + result = "";//error + } +}; + +bool Model::obj_import_vertex_color_deal(const std::vector &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model) +{ + if (vertex_filament_ids.size() == 0) { + return false; + } + // 2.generate mmu_segmentation_facets + if (model->objects.size() == 1 ) { + auto obj = model->objects[0]; + obj->config.set("extruder", first_extruder_id); + if (obj->volumes.size() == 1) { + enum VertexColorCase { + _3_SAME_COLOR, + _3_DIFF_COLOR, + _2_SAME_1_DIFF_COLOR, + }; + auto calc_vertex_color_case = [](const unsigned char &c0, const unsigned char &c1, const unsigned char &c2, VertexColorCase &vertex_color_case, + unsigned char &iso_index) { + if (c0 == c1 && c1 == c2) { + vertex_color_case = VertexColorCase::_3_SAME_COLOR; + } else if (c0 != c1 && c1 != c2 && c0 != c2) { + vertex_color_case = VertexColorCase::_3_DIFF_COLOR; + } else if (c0 == c1) { + vertex_color_case = _2_SAME_1_DIFF_COLOR; + iso_index = 2; + } else if (c1 == c2) { + vertex_color_case = _2_SAME_1_DIFF_COLOR; + iso_index = 0; + } else if (c0 == c2) { + vertex_color_case = _2_SAME_1_DIFF_COLOR; + iso_index = 1; + } else { + std::cout << "error"; + } + }; + auto calc_tri_area = [](const Vec3f &v0, const Vec3f &v1, const Vec3f &v2) { + return std::abs((v0 - v1).cross(v0 - v2).norm()) / 2; + }; + auto volume = obj->volumes[0]; + volume->config.set("extruder", first_extruder_id); + auto face_count = volume->mesh().its.indices.size(); + volume->mmu_segmentation_facets.reserve(face_count); + if (volume->mesh().its.vertices.size() != vertex_filament_ids.size()) { + return false; + } + for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) { + auto face = volume->mesh().its.indices[i]; + auto filament_id0 = vertex_filament_ids[face[0]]; + auto filament_id1 = vertex_filament_ids[face[1]]; + auto filament_id2 = vertex_filament_ids[face[2]]; + if (filament_id0 <= 1 && filament_id1 <= 1 && filament_id2 <= 2) { + continue; + } + if (i == 0) { + std::cout << ""; + } + VertexColorCase vertex_color_case; + unsigned char iso_index; + calc_vertex_color_case(filament_id0, filament_id1, filament_id2, vertex_color_case, iso_index); + switch (vertex_color_case) { + case _3_SAME_COLOR: { + std::string result; + get_real_filament_id(filament_id0, result); + volume->mmu_segmentation_facets.set_triangle_from_string(i, result); + break; + } + case _3_DIFF_COLOR: { + std::string result0, result1, result2; + get_real_filament_id(filament_id0, result0); + get_real_filament_id(filament_id1, result1); + get_real_filament_id(filament_id2, result2); + + auto v0 = volume->mesh().its.vertices[face[0]]; + auto v1 = volume->mesh().its.vertices[face[1]]; + auto v2 = volume->mesh().its.vertices[face[2]]; + auto dir_0_1 = (v1 - v0).normalized(); + auto dir_0_2 = (v2 - v0).normalized(); + float sita0 = acos(dir_0_1.dot(dir_0_2)); + auto dir_1_0 = -dir_0_1; + auto dir_1_2 = (v2 - v1).normalized(); + float sita1 = acos(dir_1_0.dot(dir_1_2)); + float sita2 = PI - sita0 - sita1; + std::array sitas = {sita0, sita1, sita2}; + float max_sita = sitas[0]; + int max_sita_vertex_index = 0; + for (size_t j = 1; j < sitas.size(); j++) { + if (sitas[j] > max_sita) { + max_sita_vertex_index = j; + max_sita = sitas[j]; + } + } + if (max_sita_vertex_index == 0) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result2 + (result1 + result2 + "5" )+ "3"); //"1C0C2C0C1C13" + } else if (max_sita_vertex_index == 1) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result2 + (result0 + result2 + "9") + "3"); + } else{// if (max_sita_vertex_index == 2) + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result2 + (result1 + result0 + "1") + "3"); + } + break; + } + case _2_SAME_1_DIFF_COLOR: { + std::string result0, result1, result2; + get_real_filament_id(filament_id0, result0); + get_real_filament_id(filament_id1, result1); + get_real_filament_id(filament_id2, result2); + if (iso_index == 0) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result0 + result1 + result1 + "2"); + } else if (iso_index == 1) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result1 + result0 + result0 + "6"); + } else if (iso_index == 2) { + volume->mmu_segmentation_facets.set_triangle_from_string(i, result2 + result0 + result0 + "A"); + } + break; + } + default: break; + } + } + return true; + } + } + return false; +} + +bool Model::obj_import_face_color_deal(const std::vector &face_filament_ids, const unsigned char &first_extruder_id, Model *model) +{ + if (face_filament_ids.size() == 0) { return false; } + // 2.generate mmu_segmentation_facets + if (model->objects.size() == 1) { + auto obj = model->objects[0]; + obj->config.set("extruder", first_extruder_id); + if (obj->volumes.size() == 1) { + auto volume = obj->volumes[0]; + volume->config.set("extruder", first_extruder_id); + auto face_count = volume->mesh().its.indices.size(); + volume->mmu_segmentation_facets.reserve(face_count); + if (volume->mesh().its.indices.size() != face_filament_ids.size()) { return false; } + for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) { + auto face = volume->mesh().its.indices[i]; + auto filament_id = face_filament_ids[i]; + if (filament_id <= 1) { continue; } + std::string result; + get_real_filament_id(filament_id, result); + volume->mmu_segmentation_facets.set_triangle_from_string(i, result); + } + return true; + } + } + return false; +} + // update the maxSpeed of an object if it is different from the global configuration double Model::findMaxSpeed(const ModelObject* object) { auto objectKeys = object->config.keys(); diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 03b25b810e..41ddd83aa9 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -35,6 +35,7 @@ #include "Format/STEP.hpp" //BBS: add stl #include "Format/STL.hpp" +#include "Format/OBJ.hpp" #include #include @@ -1564,8 +1565,16 @@ public: DynamicPrintConfig* config = nullptr, ConfigSubstitutionContext* config_substitutions = nullptr, LoadStrategy options = LoadStrategy::AddDefaultInstances, PlateDataPtrs* plate_data = nullptr, std::vector* project_presets = nullptr, bool* is_xxx = nullptr, Semver* file_version = nullptr, Import3mfProgressFn proFn = nullptr, - ImportstlProgressFn stlFn = nullptr, ImportStepProgressFn stepFn = nullptr, StepIsUtf8Fn stepIsUtf8Fn = nullptr, BBLProject* project = nullptr, int plate_id = 0); + ImportstlProgressFn stlFn = nullptr, + ImportStepProgressFn stepFn = nullptr, + StepIsUtf8Fn stepIsUtf8Fn = nullptr, + BBLProject * project = nullptr, + int plate_id = 0, + ObjImportColorFn objFn = nullptr + ); // BBS + static bool obj_import_vertex_color_deal(const std::vector &vertex_filament_ids, const unsigned char &first_extruder_id, Model *model); + static bool obj_import_face_color_deal(const std::vector &face_filament_ids, const unsigned char &first_extruder_id, Model *model); static double findMaxSpeed(const ModelObject* object); static double getThermalLength(const ModelVolume* modelVolumePtr); static double getThermalLength(const std::vector modelVolumePtrs); diff --git a/src/libslic3r/ObjColorUtils.hpp b/src/libslic3r/ObjColorUtils.hpp new file mode 100644 index 0000000000..4fe924fab2 --- /dev/null +++ b/src/libslic3r/ObjColorUtils.hpp @@ -0,0 +1,191 @@ +#pragma once +#include +#include + +#include "opencv2/opencv.hpp" + +class QuantKMeans +{ +public: + int m_alpha_thres; + cv::Mat m_flatten_labels; + cv::Mat m_centers8UC3; + QuantKMeans(int alpha_thres = 10) : m_alpha_thres(alpha_thres) {} + void apply(cv::Mat &ori_image, cv::Mat &new_image, int num_cluster, int color_space) + { + cv::Mat image; + convert_color_space(ori_image, image, color_space); + cv::Mat flatten_image = flatten(image); + + apply(flatten_image, num_cluster, color_space); + replace_centers(ori_image, new_image); + } + void apply_aplha(cv::Mat &ori_image, cv::Mat &new_image, int num_cluster, int color_space) + { + // cout << " *** DoAlpha *** " << endl; + cv::Mat flatten_image8UC3 = flatten_alpha(ori_image); + cv::Mat image8UC3; + convert_color_space(flatten_image8UC3, image8UC3, color_space); + cv::Mat image32FC3(image8UC3.rows, 1, CV_32FC3); + for (int i = 0; i < image8UC3.rows; i++) image32FC3.at(i, 0) = image8UC3.at(i, 0); + + apply(image32FC3, num_cluster, color_space); + repalce_centers_aplha(ori_image, new_image); + } + void apply(cv::Mat &flatten_image, int num_cluster, int color_space) + { + cv::Mat centers32FC3; + num_cluster = fmin(flatten_image.rows, num_cluster); + kmeans(flatten_image, num_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, cv::KMEANS_PP_CENTERS, + centers32FC3); + this->m_centers8UC3 = cv::Mat(num_cluster, 1, CV_8UC3); + for (int i = 0; i < num_cluster; i++) this->m_centers8UC3.at(i) = centers32FC3.at(i); + + convert_color_space(this->m_centers8UC3, this->m_centers8UC3, color_space, true); + } + + void apply(const std::vector> &ori_colors, + std::vector> & cluster_results, + std::vector & labels, + int num_cluster = -1, + int color_space = 2) + { + // 0~255 + cv::Mat flatten_image8UC3 = flatten_vector(ori_colors); + + cv::Mat image8UC3; + convert_color_space(flatten_image8UC3, image8UC3, color_space); + + cv::Mat image32FC3(image8UC3.rows, 1, CV_32FC3); + for (int i = 0; i < image8UC3.rows; i++) + image32FC3.at(i, 0) = image8UC3.at(i, 0); + + int best_cluster = 1; + double cur_score, best_score = 100; + int max_cluster = ori_colors.size(); + num_cluster = fmin(num_cluster, max_cluster); + if (num_cluster < 1) { + cur_score = kmeans(image32FC3, 1, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, cv::KMEANS_PP_CENTERS); + best_score = cur_score; + for (int cur_cluster = 2; cur_cluster < 16; cur_cluster++) { + if (cur_cluster > max_cluster) + break; + cur_score = kmeans(image32FC3, cur_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, + cv::KMEANS_PP_CENTERS); + best_cluster = cur_score < best_score ? cur_cluster : best_cluster; + best_score = cur_score < best_score ? cur_score : best_score; + } + } else + best_cluster = num_cluster; + + cv::Mat centers32FC3; + kmeans(image32FC3, best_cluster, this->m_flatten_labels, cv::TermCriteria(cv::TermCriteria::EPS + cv::TermCriteria::COUNT, 300, 0.5), 3, cv::KMEANS_PP_CENTERS, + centers32FC3); + this->m_centers8UC3 = cv::Mat(best_cluster, 1, CV_8UC3); + for (int i = 0; i < best_cluster; i++) + this->m_centers8UC3.at(i) = centers32FC3.at(i); + + convert_color_space(this->m_centers8UC3, this->m_centers8UC3, color_space, true); + + cluster_results.clear(); + labels.clear(); + for (int i = 0; i < ori_colors.size(); i++) + labels.emplace_back(this->m_flatten_labels.at(i, 0)); + for (int i = 0; i < best_cluster; i++) { + cv::Vec3f center = this->m_centers8UC3.at(i, 0); + cluster_results.emplace_back(std::array{center[0] / 255.f, center[1] / 255.f, center[2] / 255.f, 1.f}); + } + } + + void replace_centers(cv::Mat &ori_image, cv::Mat &new_image) + { + for (int i = 0; i < ori_image.rows; i++) { + for (int j = 0; j < ori_image.cols; j++) { + int idx = this->m_flatten_labels.at(i * ori_image.cols + j, 0); + cv::Vec3b pixel = this->m_centers8UC3.at(idx); + new_image.at(i, j) = pixel; + } + } + } + void repalce_centers_aplha(cv::Mat &ori_image, cv::Mat &new_image) + { + int cnt = 0; + int idx; + cv::Vec3b center; + for (int i = 0; i < ori_image.rows; i++) { + for (int j = 0; j < ori_image.cols; j++) { + cv::Vec4b pixel = ori_image.at(i, j); + if ((int) pixel[3] < this->m_alpha_thres) + new_image.at(i, j) = pixel; + else { + idx = this->m_flatten_labels.at(cnt++, 0); + center = this->m_centers8UC3.at(idx); + new_image.at(i, j) = cv::Vec4b(center[0], center[1], center[2], pixel[3]); + } + } + } + } + + void convert_color_space(cv::Mat &ori_image, cv::Mat &image, int color_space, bool reverse = false) + { + switch (color_space) { + case 0: image = ori_image; break; + case 1: + if (reverse) + cvtColor(ori_image, image, cv::COLOR_HSV2BGR); + else + cvtColor(ori_image, image, cv::COLOR_BGR2HSV); + break; + case 2: + if (reverse) + cvtColor(ori_image, image, cv::COLOR_Lab2BGR); + else + cvtColor(ori_image, image, cv::COLOR_BGR2Lab); + break; + default: break; + } + } + + cv::Mat flatten(cv::Mat &image) + { + int num_pixels = image.rows * image.cols; + cv::Mat img(num_pixels, 1, CV_32FC3); + for (int i = 0; i < image.rows; i++) { + for (int j = 0; j < image.cols; j++) { + cv::Vec3f pixel = image.at(i, j); + img.at(i * image.cols + j, 0) = pixel; + } + } + return img; + } + cv::Mat flatten_alpha(cv::Mat &image) + { + int num_pixels = image.rows * image.cols; + for (int i = 0; i < image.rows; i++) + for (int j = 0; j < image.cols; j++) { + cv::Vec4b pixel = image.at(i, j); + if ((int) pixel[3] < this->m_alpha_thres) num_pixels--; + } + + cv::Mat img(num_pixels, 1, CV_8UC3); + int cnt = 0; + for (int i = 0; i < image.rows; i++) { + for (int j = 0; j < image.cols; j++) { + cv::Vec4b pixel = image.at(i, j); + if ((int) pixel[3] >= this->m_alpha_thres) img.at(cnt++, 0) = cv::Vec3b(pixel[0], pixel[1], pixel[2]); + } + } + return img; + } + cv::Mat flatten_vector(const std::vector> &ori_colors) + { + int num_pixels = ori_colors.size(); + + cv::Mat image8UC3(num_pixels, 1, CV_8UC3); + for (int i = 0; i < num_pixels; i++) { + std::array pixel = ori_colors[i]; + image8UC3.at(i, 0) = cv::Vec3b((int) (pixel[0] * 255.f), (int) (pixel[1] * 255.f), (int) (pixel[2] * 255.f)); + } + return image8UC3; + } +}; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 20cf79206d..a5f4a2f4f5 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -772,7 +772,7 @@ static std::vector s_Preset_print_options { "top_shell_layers", "top_shell_thickness", "bottom_shell_layers", "bottom_shell_thickness", "extra_perimeters_on_overhangs", "ensure_vertical_shell_thickness", "reduce_crossing_wall", "detect_thin_wall", "detect_overhang_wall", "overhang_reverse", "overhang_reverse_threshold","overhang_reverse_internal_only", "wall_direction", "seam_position", "staggered_inner_seams", "wall_sequence", "is_infill_first", "sparse_infill_density", "sparse_infill_pattern", "top_surface_pattern", "bottom_surface_pattern", - "infill_direction", "counterbore_hole_bridging", + "infill_direction", "solid_infill_direction", "rotate_solid_infill_direction", "counterbore_hole_bridging", "minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target", "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "max_travel_detour_distance", @@ -1138,6 +1138,8 @@ void PresetCollection::load_presets( preset.filament_id = key_values[BBL_JSON_KEY_FILAMENT_ID]; if (key_values.find(BBL_JSON_KEY_IS_CUSTOM) != key_values.end()) preset.custom_defined = key_values[BBL_JSON_KEY_IS_CUSTOM]; + if (key_values.find(BBL_JSON_KEY_DESCRIPTION) != key_values.end()) + preset.description = key_values[BBL_JSON_KEY_DESCRIPTION]; if (key_values.find("instantiation") != key_values.end()) preset.is_visible = key_values["instantiation"] != "false"; diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 4922f12eb1..659fc0bf9e 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -241,6 +241,7 @@ public: std::string base_id; // base id of preset std::string sync_info; // enum: "delete", "create", "update", "" std::string custom_defined; // enum: "1", "0", "" + std::string description; // long long updated_time{0}; //last updated time std::map key_values; diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index e1503604bb..fa887acb47 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1964,7 +1964,8 @@ std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) printer_names.insert(printer_it->name); } - assert(printer_names.size() == 1); + + //assert(printer_names.size() == 1); for (auto& printer_name : printer_names) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " printer name: " << printer_name; @@ -3463,7 +3464,7 @@ std::pair PresetBundle::load_vendor_configs_ // Load the print, filament or printer preset. std::string preset_name; DynamicPrintConfig config; - std::string alias_name, inherits, instantiation, setting_id, filament_id; + std::string alias_name, inherits, description, instantiation, setting_id, filament_id; std::vector renamed_from; const DynamicPrintConfig* default_config = nullptr; std::string reason; @@ -3480,7 +3481,8 @@ std::pair PresetBundle::load_vendor_configs_ return reason; } preset_name = key_values[BBL_JSON_KEY_NAME]; - instantiation = key_values[BBL_JSON_KEY_INSTANTIATION]; + description = key_values[BBL_JSON_KEY_DESCRIPTION]; + instantiation = key_values[BBL_JSON_KEY_INSTANTIATION]; auto setting_it = key_values.find(BBL_JSON_KEY_SETTING_ID); if (setting_it != key_values.end()) setting_id = setting_it->second; @@ -3603,6 +3605,7 @@ std::pair PresetBundle::load_vendor_configs_ loaded.is_system = true; loaded.vendor = current_vendor_profile; loaded.version = current_vendor_profile->config_version; + loaded.description = description; loaded.setting_id = setting_id; loaded.filament_id = filament_id; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << loaded.name << " load filament_id: " << filament_id; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 1d2a203c2e..8f5e000ed0 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -160,7 +160,8 @@ static t_config_enum_values s_keys_map_InfillPattern { { "archimedeanchords", ipArchimedeanChords }, { "octagramspiral", ipOctagramSpiral }, { "supportcubic", ipSupportCubic }, - { "lightning", ipLightning } + { "lightning", ipLightning }, + { "crosshatch", ipCrossHatch} }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(InfillPattern) @@ -2008,7 +2009,7 @@ def = this->add("filament_loading_speed", coFloats); def->cli = ConfigOptionDef::nocli; def = this->add("infill_direction", coFloat); - def->label = L("Infill direction"); + def->label = L("Sparse infill direction"); def->category = L("Strength"); def->tooltip = L("Angle for sparse infill pattern, which controls the start or main direction of line"); def->sidetext = L("°"); @@ -2017,6 +2018,23 @@ def = this->add("filament_loading_speed", coFloats); def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(45)); + def = this->add("solid_infill_direction", coFloat); + def->label = L("Solid infill direction"); + def->category = L("Strength"); + def->tooltip = L("Angle for solid infill pattern, which controls the start or main direction of line"); + def->sidetext = L("°"); + def->min = 0; + def->max = 360; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(45)); + + def = this->add("rotate_solid_infill_direction", coBool); + def->label = L("Rotate solid infill direction"); + def->category = L("Strength"); + def->tooltip = L("Rotate the solid infill direction by 90° for each layer."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("sparse_infill_density", coPercent); def->label = L("Sparse infill density"); def->category = L("Strength"); @@ -2049,6 +2067,7 @@ def = this->add("filament_loading_speed", coFloats); def->enum_values.push_back("octagramspiral"); def->enum_values.push_back("supportcubic"); def->enum_values.push_back("lightning"); + def->enum_values.push_back("crosshatch"); def->enum_labels.push_back(L("Concentric")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Grid")); @@ -2066,6 +2085,7 @@ def = this->add("filament_loading_speed", coFloats); def->enum_labels.push_back(L("Octagram Spiral")); def->enum_labels.push_back(L("Support Cubic")); def->enum_labels.push_back(L("Lightning")); + def->enum_labels.push_back(L("Cross Hatch")); def->set_default_value(new ConfigOptionEnum(ipCubic)); auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index be3edef9a3..7630cbe598 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -69,7 +69,7 @@ enum AuthorizationType { enum InfillPattern : int { ipConcentric, ipRectilinear, ipGrid, ipLine, ipCubic, ipTriangles, ipStars, ipGyroid, ipHoneycomb, ipAdaptiveCubic, ipMonotonic, ipMonotonicLine, ipAlignedRectilinear, ip3DHoneycomb, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricInternal, - ipLightning, + ipLightning, ipCrossHatch, ipCount, }; @@ -882,6 +882,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatOrPercent, outer_wall_line_width)) ((ConfigOptionFloat, outer_wall_speed)) ((ConfigOptionFloat, infill_direction)) + ((ConfigOptionFloat, solid_infill_direction)) + ((ConfigOptionBool, rotate_solid_infill_direction)) ((ConfigOptionPercent, sparse_infill_density)) ((ConfigOptionEnum, sparse_infill_pattern)) ((ConfigOptionEnum, fuzzy_skin)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index c78e7de4b5..1cce64d9f8 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1072,6 +1072,8 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "solid_infill_filament" || opt_key == "sparse_infill_line_width" || opt_key == "infill_direction" + || opt_key == "solid_infill_direction" + || opt_key == "rotate_solid_infill_direction" || opt_key == "ensure_vertical_shell_thickness" || opt_key == "bridge_angle" //BBS @@ -2333,9 +2335,17 @@ void PrintObject::bridge_over_infill() }; // LAMBDA do determine optimal bridging angle - auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern) { + auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern, double infill_direction) { AABBTreeLines::LinesDistancer lines_tree(anchors); + // Check it the infill that require a fixed infill angle. + switch (dominant_pattern) { + case ip3DHoneycomb: + case ipCrossHatch: + return (infill_direction + 45.0) * 2.0 * M_PI / 360.; + default: break; + } + std::map counted_directions; for (const Polygon &p : bridged_area) { double acc_distance = 0; @@ -2715,11 +2725,12 @@ void PrintObject::bridge_over_infill() double bridging_angle = 0; if (!anchors.empty()) { bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors), - candidate.region->region().config().sparse_infill_pattern.value); + candidate.region->region().config().sparse_infill_pattern.value, + candidate.region->region().config().infill_direction.value); } else { // use expansion boundaries as anchors. // Also, use Infill pattern that is neutral for angle determination, since there are no infill lines. - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine); + bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine, 0); } boundary_plines.insert(boundary_plines.end(), anchors.begin(), anchors.end()); diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 94a3b53e98..6ff0adf18b 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -208,6 +208,8 @@ set(SLIC3R_GUI_SOURCES GUI/Plater.hpp GUI/PartPlate.cpp GUI/PartPlate.hpp + GUI/UserNotification.cpp + GUI/UserNotification.hpp GUI/PresetComboBoxes.hpp GUI/PresetComboBoxes.cpp GUI/BitmapComboBox.hpp @@ -304,6 +306,8 @@ set(SLIC3R_GUI_SOURCES GUI/CameraUtils.hpp GUI/wxExtensions.cpp GUI/wxExtensions.hpp + GUI/ObjColorDialog.cpp + GUI/ObjColorDialog.hpp GUI/WipeTowerDialog.cpp GUI/RammingChart.cpp GUI/RammingChart.hpp @@ -321,6 +325,8 @@ set(SLIC3R_GUI_SOURCES GUI/ImGuiWrapper.cpp GUI/DeviceManager.hpp GUI/DeviceManager.cpp + GUI/UserManager.hpp + GUI/UserManager.cpp GUI/HttpServer.hpp GUI/HttpServer.cpp Config/Snapshot.cpp @@ -399,8 +405,8 @@ set(SLIC3R_GUI_SOURCES GUI/ObjectDataViewModel.hpp GUI/AuxiliaryDataViewModel.cpp GUI/AuxiliaryDataViewModel.hpp - #GUI/InstanceCheck.cpp - #GUI/InstanceCheck.hpp + GUI/InstanceCheck.cpp + GUI/InstanceCheck.hpp GUI/Search.cpp GUI/Search.hpp GUI/NotificationManager.cpp @@ -467,6 +473,24 @@ set(SLIC3R_GUI_SOURCES Utils/json_diff.cpp GUI/KBShortcutsDialog.hpp GUI/KBShortcutsDialog.cpp + GUI/MultiMachine.hpp + GUI/MultiMachine.cpp + GUI/MultiMachinePage.hpp + GUI/MultiMachinePage.cpp + GUI/MultiMachineManagerPage.cpp + GUI/MultiMachineManagerPage.hpp + GUI/MultiPrintJob.cpp + GUI/MultiPrintJob.hpp + GUI/MultiSendMachineModel.hpp + GUI/MultiSendMachineModel.cpp + GUI/MultiTaskManagerPage.hpp + GUI/MultiTaskManagerPage.cpp + GUI/MultiTaskModel.hpp + GUI/MultiTaskModel.cpp + GUI/SendMultiMachinePage.hpp + GUI/SendMultiMachinePage.cpp + GUI/TaskManager.cpp + GUI/TaskManager.hpp Utils/Http.cpp Utils/Http.hpp Utils/FixModelByWin10.cpp @@ -526,6 +550,7 @@ set(SLIC3R_GUI_SOURCES GUI/calib_dlg.cpp Utils/CalibUtils.cpp Utils/CalibUtils.hpp + Utils/ProfileDescription.hpp GUI/PrinterCloudAuthDialog.cpp GUI/PrinterCloudAuthDialog.hpp Utils/Obico.cpp @@ -558,8 +583,8 @@ if (APPLE) GUI/RemovableDriveManagerMM.mm GUI/RemovableDriveManagerMM.h GUI/Mouse3DHandlerMac.mm - #GUI/InstanceCheckMac.mm - #GUI/InstanceCheckMac.h + GUI/InstanceCheckMac.mm + GUI/InstanceCheckMac.h GUI/wxMediaCtrl2.mm GUI/wxMediaCtrl2.h ) diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index e91b01730d..b09ec7d6cc 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -8,12 +8,19 @@ #include #include #include "CalibUtils.hpp" - +#include "../Utils/ColorSpaceConvert.hpp" namespace Slic3r { namespace GUI { wxDEFINE_EVENT(EVT_SELECTED_COLOR, wxCommandEvent); -AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) +static std::string float_to_string_with_precision(float value, int precision = 3) +{ + std::stringstream stream; + stream << std::fixed << std::setprecision(precision) << value; + return stream.str(); +} + +AMSMaterialsSetting::AMSMaterialsSetting(wxWindow *parent, wxWindowID id) : DPIDialog(parent, id, _L("AMS Materials Setting"), wxDefaultPosition, wxDefaultSize, wxBORDER_NONE) , m_color_picker_popup(ColorPickerPopup(this)) { @@ -281,6 +288,14 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) m_ratio_text->SetForegroundColour(wxColour(50, 58, 61)); m_ratio_text->SetFont(Label::Head_14); + m_ratio_text->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_ratio_text->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + m_ratio_text->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + wxLaunchDefaultBrowser(wxT("https://wiki.bambulab.com/en/software/bambu-studio/calibration_pa")); + }); + + wxBoxSizer *m_sizer_cali_resutl = new wxBoxSizer(wxHORIZONTAL); // pa profile m_title_pa_profile = new wxStaticText(parent, wxID_ANY, _L("PA Profile"), wxDefaultPosition, wxSize(AMS_MATERIALS_SETTING_LABEL_WIDTH, -1), 0); @@ -750,6 +765,16 @@ bool AMSMaterialsSetting::Show(bool show) m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20))); //m_clr_picker->set_color(m_clr_picker->GetParent()->GetBackgroundColour()); + /*if (obj && (obj->is_function_supported(PrinterFunction::FUNC_EXTRUSION_CALI) || obj->is_high_printer_type())) { + m_ratio_text->Show(); + m_k_param->Show(); + m_input_k_val->Show(); + } + else { + m_ratio_text->Hide(); + m_k_param->Hide(); + m_input_k_val->Hide(); + }*/ m_ratio_text->Show(); m_k_param->Show(); m_input_k_val->Show(); @@ -922,8 +947,8 @@ void AMSMaterialsSetting::on_select_cali_result(wxCommandEvent &evt) { m_pa_cali_select_id = evt.GetSelection(); if (m_pa_cali_select_id >= 0) { - m_input_k_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[m_pa_cali_select_id].k_value)); - m_input_n_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[m_pa_cali_select_id].n_coef)); + m_input_k_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[m_pa_cali_select_id].k_value)); + m_input_n_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[m_pa_cali_select_id].n_coef)); } else{ m_input_k_val->GetTextCtrl()->SetValue(std::to_string(0.00)); @@ -1012,6 +1037,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) m_button_confirm->SetBorderColor(wxColour(0x90, 0x90, 0x90)); m_comboBox_cali_result->Clear(); m_comboBox_cali_result->SetValue(wxEmptyString); + m_input_k_val->GetTextCtrl()->SetValue(wxEmptyString); + m_input_n_val->GetTextCtrl()->SetValue(wxEmptyString); return; } else { @@ -1076,8 +1103,8 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) } if (cali_select_idx >= 0) { - m_input_k_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[cali_select_idx].k_value)); - m_input_n_val->GetTextCtrl()->SetValue(std::to_string(m_pa_profile_items[cali_select_idx].n_coef)); + m_input_k_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[cali_select_idx].k_value)); + m_input_n_val->GetTextCtrl()->SetValue(float_to_string_with_precision(m_pa_profile_items[cali_select_idx].n_coef)); } } else { @@ -1121,7 +1148,6 @@ ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*= m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25); m_bitmap_border_dark = create_scaled_bitmap("color_picker_border_dark", nullptr, 25); - m_bitmap_transparent_def = create_scaled_bitmap("transparent_color_picker", nullptr, 25); m_bitmap_transparent = create_scaled_bitmap("transparent_color_picker", nullptr, 25); } @@ -1185,12 +1211,12 @@ void ColorPicker::doRender(wxDC& dc) if (m_selected) radius -= FromDIP(1); if (alpha == 0) { - dc.DrawBitmap(m_bitmap_transparent_def, 0, 0); + dc.DrawBitmap(m_bitmap_transparent, 0, 0); } else if (alpha != 254 && alpha != 255) { if (transparent_changed) { std::string rgb = (m_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString(); - if (rgb.size() == 9) { + if (rgb.size() == 8) { //delete alpha value rgb = rgb.substr(0, rgb.size() - 2); } @@ -1201,8 +1227,8 @@ void ColorPicker::doRender(wxDC& dc) replace.push_back(fill_replace); m_bitmap_transparent = ScalableBitmap(this, "transparent_color_picker", 25, false, false, true, replace).bmp(); transparent_changed = false; + dc.DrawBitmap(m_bitmap_transparent, 0, 0); } - dc.DrawBitmap(m_bitmap_transparent, 0, 0); } else { dc.SetPen(wxPen(m_colour)); @@ -1439,11 +1465,22 @@ ColorPickerPopup::ColorPickerPopup(wxWindow* parent) void ColorPickerPopup::on_custom_clr_picker(wxMouseEvent& event) { + std::vector colors = wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < colors.size(); i++) { + m_clrData->SetCustomColour(i, string_to_wxColor(colors[i])); + } auto clr_dialog = new wxColourDialog(nullptr, m_clrData); wxColour picker_color; if (clr_dialog->ShowModal() == wxID_OK) { m_clrData = &(clr_dialog->GetColourData()); + if (colors.size() != CUSTOM_COLOR_COUNT) { + colors.resize(CUSTOM_COLOR_COUNT); + } + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { + colors[i] = color_to_string(m_clrData->GetCustomColour(i)); + } + wxGetApp().app_config->save_custom_color_to_config(colors); picker_color = wxColour( m_clrData->GetColour().Red(), diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 6a10255d28..c058ac769f 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -5,8 +5,8 @@ #include "wxExtensions.hpp" #include "GUI_Utils.hpp" #include "DeviceManager.hpp" -#include "wx/colourdata.h" #include "wx/clrpicker.h" +#include "wx/colourdata.h" #include "Widgets/RadioBox.hpp" #include "Widgets/Button.hpp" #include "Widgets/RoundedRectangle.hpp" @@ -36,7 +36,6 @@ public: wxBitmap m_bitmap_border; wxBitmap m_bitmap_border_dark; wxBitmap m_bitmap_transparent; - wxBitmap m_bitmap_transparent_def; //default transparent material wxColour m_colour; std::vector m_cols; diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index b2ef34e620..2b273ae00a 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -193,6 +193,40 @@ void AMSSetting::create() m_sizer_switch_filament_tip->Add(m_sizer_switch_filament_inline, 1, wxALIGN_CENTER, 0); + + // checkbox area 5 + wxBoxSizer* m_sizer_air_print = new wxBoxSizer(wxHORIZONTAL); + m_checkbox_air_print = new ::CheckBox(m_panel_body); + m_checkbox_air_print->Bind(wxEVT_TOGGLEBUTTON, &AMSSetting::on_air_print_detect, this); + m_sizer_air_print->Add(m_checkbox_air_print, 0, wxTOP, 1); + m_sizer_air_print->Add(0, 0, 0, wxLEFT, 12); + m_title_air_print = new wxStaticText(m_panel_body, wxID_ANY, _L("Air Printing Detection"), wxDefaultPosition, wxDefaultSize, 0); + m_title_air_print->SetFont(::Label::Head_13); + m_title_air_print->SetForegroundColour(AMS_SETTING_GREY800); + m_title_air_print->Wrap(AMS_SETTING_BODY_WIDTH); + m_sizer_air_print->Add(m_title_air_print, 1, wxEXPAND, 0); + + wxBoxSizer* m_sizer_air_print_tip = new wxBoxSizer(wxHORIZONTAL); + m_sizer_air_print_tip->Add(0, 0, 0, wxLEFT, 10); + + // tip line + auto m_sizer_air_print_inline = new wxBoxSizer(wxVERTICAL); + + m_tip_air_print_line = new Label(m_panel_body, + _L("Detects clogging and filament grinding, halting printing immediately to conserve time and filament.") + ); + m_tip_air_print_line->SetFont(::Label::Body_13); + m_tip_air_print_line->SetForegroundColour(AMS_SETTING_GREY700); + m_tip_air_print_line->SetSize(wxSize(AMS_SETTING_BODY_WIDTH, -1)); + m_tip_air_print_line->Wrap(AMS_SETTING_BODY_WIDTH); + m_sizer_air_print_inline->Add(m_tip_air_print_line, 0, wxEXPAND, 0); + m_sizer_air_print_tip->Add(m_sizer_air_print_inline, 1, wxALIGN_CENTER, 0); + + m_checkbox_air_print->Hide(); + m_title_air_print->Hide(); + m_tip_air_print_line->Hide(); + + // panel img wxPanel* m_panel_img = new wxPanel(m_panel_body, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_panel_img->SetBackgroundColour(AMS_SETTING_GREY200); @@ -221,6 +255,11 @@ void AMSSetting::create() m_sizerl_body->Add(m_sizer_switch_filament_tip, 0, wxLEFT, 18); m_sizerl_body->Add(0, 0, 0, wxTOP, 6); m_sizerl_body->Add(0, 0, 0, wxTOP, FromDIP(5)); + m_sizerl_body->Add(m_sizer_air_print, 0, wxEXPAND | wxTOP, FromDIP(8)); + m_sizerl_body->Add(0, 0, 0, wxTOP, 8); + m_sizerl_body->Add(m_sizer_air_print_tip, 0, wxLEFT, 18); + m_sizerl_body->Add(0, 0, 0, wxTOP, 6); + m_sizerl_body->Add(0, 0, 0, wxTOP, FromDIP(5)); m_sizerl_body->Add(m_panel_img, 1, wxEXPAND | wxALL, FromDIP(5)); m_panel_body->SetSizer(m_sizerl_body); @@ -285,6 +324,9 @@ void AMSSetting::update_insert_material_read_mode(bool selected, std::string ver void AMSSetting::update_ams_img(std::string ams_icon_str) { + if (wxGetApp().dark_mode()&& ams_icon_str=="extra_icon") { + ams_icon_str += "_dark"; + } m_am_img->SetBitmap(create_scaled_bitmap(ams_icon_str, nullptr, 126)); } @@ -336,6 +378,22 @@ void AMSSetting::update_switch_filament(bool selected) m_checkbox_switch_filament->SetValue(selected); } +void AMSSetting::update_air_printing_detection(bool selected) +{ + if (false/*obj->is_support_air_print_detection*/) { + m_checkbox_air_print->Show(); + m_title_air_print->Show(); + m_tip_air_print_line->Show(); + } + else { + m_checkbox_air_print->Hide(); + m_title_air_print->Hide(); + m_tip_air_print_line->Hide(); + } + Layout(); + m_checkbox_air_print->SetValue(selected); +} + void AMSSetting::on_select_ok(wxMouseEvent &event) { @@ -415,6 +473,13 @@ void AMSSetting::on_switch_filament(wxCommandEvent& event) event.Skip(); } +void AMSSetting::on_air_print_detect(wxCommandEvent& event) +{ + bool air_print_detect = m_checkbox_air_print->GetValue(); + obj->command_ams_air_print_detect(air_print_detect); + event.Skip(); +} + wxString AMSSetting::append_title(wxString text) { wxString lab; diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index f87479f034..464afffe7b 100644 --- a/src/slic3r/GUI/AMSSetting.hpp +++ b/src/slic3r/GUI/AMSSetting.hpp @@ -33,11 +33,13 @@ public: void update_starting_read_mode(bool selected); void update_remain_mode(bool selected); void update_switch_filament(bool selected); + void update_air_printing_detection(bool selected); void on_select_ok(wxMouseEvent& event); void on_insert_material_read(wxCommandEvent &event); void on_starting_read(wxCommandEvent &event); void on_remain(wxCommandEvent& event); void on_switch_filament(wxCommandEvent& event); + void on_air_print_detect(wxCommandEvent& event); wxString append_title(wxString text); wxStaticText *append_text(wxString text); MachineObject *obj{nullptr}; @@ -70,6 +72,10 @@ protected: wxStaticText* m_title_switch_filament; Label* m_tip_switch_filament_line1; + CheckBox* m_checkbox_air_print; + wxStaticText* m_title_air_print; + Label* m_tip_air_print_line; + wxStaticText *m_tip_ams_img; Button * m_button_auto_demarcate; diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index f1308efec5..492926b952 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -412,6 +412,48 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) } } +void AmsMapingPopup::update_ams_data_multi_machines() +{ + m_has_unmatch_filament = false; + for (auto& ams_container : m_amsmapping_container_list) { + ams_container->Hide(); + } + + for (wxWindow* mitem : m_mapping_item_list) { + mitem->Destroy(); + mitem = nullptr; + } + m_mapping_item_list.clear(); + + if (m_amsmapping_container_sizer_list.size() > 0) { + for (wxBoxSizer* siz : m_amsmapping_container_sizer_list) { + siz->Clear(true); + } + } + + int m_amsmapping_container_list_index = 0; + std::vector tray_datas; + + for (int i = 0; i < 4; ++i) { + TrayData td; + td.id = i; + td.type = EMPTY; + td.colour = wxColour(166, 169, 170); + td.name = ""; + td.filament_type = ""; + td.ctype = 0; + tray_datas.push_back(td); + } + + m_amsmapping_container_list[m_amsmapping_container_list_index]->Show(); + add_ams_mapping(tray_datas, m_amsmapping_container_list[m_amsmapping_container_list_index], m_amsmapping_container_sizer_list[m_amsmapping_container_list_index]); + + m_warning_text->Show(m_has_unmatch_filament); + + Layout(); + Fit(); +} + void AmsMapingPopup::update_ams_data(std::map amsList) { m_has_unmatch_filament = false; diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index e8e78b2578..75f274ba0b 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -157,6 +157,7 @@ public: void update_materials_list(std::vector list); void set_tag_texture(std::string texture); void update_ams_data(std::map amsList); + void update_ams_data_multi_machines(); void add_ams_mapping(std::vector tray_data, wxWindow* container, wxBoxSizer* sizer); void set_current_filament_id(int id){m_current_filament_id = id;}; int get_current_filament_id(){return m_current_filament_id;}; diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index ee7c380a69..0bf251d729 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -134,19 +134,19 @@ void BBLTopbarArt::DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& i { if (item.GetState() & wxAUI_BUTTON_STATE_PRESSED) { - dc.SetPen(wxPen(m_highlightColour)); - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(20))); + dc.SetPen(wxPen(StateColor::darkModeColorFor("#009688"))); // ORCA + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA dc.DrawRectangle(rect); } else if ((item.GetState() & wxAUI_BUTTON_STATE_HOVER) || item.IsSticky()) { - dc.SetPen(wxPen(m_highlightColour)); - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(40))); + dc.SetPen(wxPen(StateColor::darkModeColorFor("#009688"))); // ORCA + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA // draw an even lighter background for checked item hovers (since // the hover background is the same color as the check background) if (item.GetState() & wxAUI_BUTTON_STATE_CHECKED) - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(50))); + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA dc.DrawRectangle(rect); } @@ -154,8 +154,8 @@ void BBLTopbarArt::DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& i { // it's important to put this code in an else statement after the // hover, otherwise hovers won't draw properly for checked items - dc.SetPen(wxPen(m_highlightColour)); - dc.SetBrush(wxBrush(m_highlightColour.ChangeLightness(40))); + dc.SetPen(wxPen(StateColor::darkModeColorFor("#009688"))); // ORCA + dc.SetBrush(wxBrush(StateColor::darkModeColorFor("#009688"))); // ORCA dc.DrawRectangle(rect); } } diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index b9347b9c1a..0e98e85ea6 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -238,13 +238,18 @@ void BackgroundSlicingProcess::process_fff() //BBS: add plate index into render params m_temp_output_path = this->get_current_plate()->get_tmp_gcode_path(); m_fff_print->export_gcode(m_temp_output_path, m_gcode_result, [this](const ThumbnailsParams& params) { return this->render_thumbnails(params); }); - finalize_gcode(); + if(m_fff_print->is_BBL_printer()) + run_post_process_scripts(m_temp_output_path, false, "File", m_temp_output_path, m_fff_print->full_print_config()); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": export gcode finished"); } if (this->set_step_started(bspsGCodeFinalize)) { if (! m_export_path.empty()) { wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); - export_gcode(); + if(!m_fff_print->is_BBL_printer()) + finalize_gcode(); + else + export_gcode(); } else if (! m_upload_job.empty()) { wxQueueEvent(GUI::wxGetApp().mainframe->m_plater, new wxCommandEvent(m_event_export_began_id)); prepare_upload(); @@ -768,14 +773,69 @@ bool BackgroundSlicingProcess::invalidate_all_steps() return m_step_state.invalidate_all([this](){ this->stop_internal(); }); } -//Call post-processing script for the last step during slicing +// G-code is generated in m_temp_output_path. +// Optionally run a post-processing script on a copy of m_temp_output_path. +// Copy the final G-code to target location (possibly a SD card, if it is a removable media, then verify that the file was written without an error). void BackgroundSlicingProcess::finalize_gcode() { - m_print->set_status(95, _utf8(L("Running post-processing scripts"))); + m_print->set_status(95, _u8L("Running post-processing scripts")); - run_post_process_scripts(m_temp_output_path, false, "File", m_temp_output_path, m_fff_print->full_print_config()); + // Perform the final post-processing of the export path by applying the print statistics over the file name. + std::string export_path = m_fff_print->print_statistics().finalize_output_path(m_export_path); + std::string output_path = m_temp_output_path; + // Both output_path and export_path ar in-out parameters. + // If post processed, output_path will differ from m_temp_output_path as run_post_process_scripts() will make a copy of the G-code to not + // collide with the G-code viewer memory mapping of the unprocessed G-code. G-code viewer maps unprocessed G-code, because m_gcode_result + // is calculated for the unprocessed G-code and it references lines in the memory mapped G-code file by line numbers. + // export_path may be changed by the post-processing script as well if the post processing script decides so, see GH #6042. + bool post_processed = run_post_process_scripts(output_path, true, "File", export_path, m_fff_print->full_print_config()); + auto remove_post_processed_temp_file = [post_processed, &output_path]() { + if (post_processed) + try { + boost::filesystem::remove(output_path); + } catch (const std::exception &ex) { + BOOST_LOG_TRIVIAL(error) << "Failed to remove temp file " << output_path << ": " << ex.what(); + } + }; + m_print->set_status(99, _utf8(L("Successfully executed post-processing script"))); - m_print->set_status(100, _utf8(L("Successfully executed post-processing script"))); + //FIXME localize the messages + std::string error_message; + int copy_ret_val = CopyFileResult::SUCCESS; + try + { + copy_ret_val = copy_file(output_path, export_path, error_message, m_export_path_on_removable_media); + remove_post_processed_temp_file(); + } + catch (...) + { + remove_post_processed_temp_file(); + throw Slic3r::ExportError(_u8L("Unknown error occured during exporting G-code.")); + } + switch (copy_ret_val) { + case CopyFileResult::SUCCESS: break; // no error + case CopyFileResult::FAIL_COPY_FILE: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%"), error_message)); + break; + case CopyFileResult::FAIL_FILES_DIFFERENT: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp."), export_path)); + break; + case CopyFileResult::FAIL_RENAMING: + throw Slic3r::ExportError(GUI::format(_L("Renaming of the G-code after copying to the selected destination folder has failed. Current path is %1%.tmp. Please try exporting again."), export_path)); + break; + case CopyFileResult::FAIL_CHECK_ORIGIN_NOT_OPENED: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code has finished but the original code at %1% couldn't be opened during copy check. The output G-code is at %2%.tmp."), output_path, export_path)); + break; + case CopyFileResult::FAIL_CHECK_TARGET_NOT_OPENED: + throw Slic3r::ExportError(GUI::format(_L("Copying of the temporary G-code has finished but the exported code couldn't be opened during copy check. The output G-code is at %1%.tmp."), export_path)); + break; + default: + throw Slic3r::ExportError(_u8L("Unknown error occured during exporting G-code.")); + BOOST_LOG_TRIVIAL(error) << "Unexpected fail code(" << (int)copy_ret_val << ") durring copy_file() to " << export_path << "."; + break; + } + + m_print->set_status(100, GUI::format(_L("G-code file exported to %1%"), export_path)); } // G-code is generated in m_temp_output_path. @@ -846,12 +906,18 @@ void BackgroundSlicingProcess::prepare_upload() if (copy_file(m_temp_output_path, source_path.string(), error_message) != SUCCESS) throw Slic3r::RuntimeError(_utf8(L("Copying of the temporary G-code to the output G-code failed"))); m_upload_job.upload_data.upload_path = m_fff_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); + // Orca: skip post-processing scripts for BBL printers as we have run them already in finalize_gcode() + // todo: do we need to copy the file? + // Make a copy of the source path, as run_post_process_scripts() is allowed to change it when making a copy of the source file - // (not here, but when the final target is a file). - std::string source_path_str = source_path.string(); - std::string output_name_str = m_upload_job.upload_data.upload_path.string(); - if (run_post_process_scripts(source_path_str, false, m_upload_job.printhost->get_name(), output_name_str, m_fff_print->full_print_config())) - m_upload_job.upload_data.upload_path = output_name_str; + // (not here, but when the final target is a file). + if (!m_fff_print->is_BBL_printer()) { + std::string source_path_str = source_path.string(); + std::string output_name_str = m_upload_job.upload_data.upload_path.string(); + if (run_post_process_scripts(source_path_str, false, m_upload_job.printhost->get_name(), output_name_str, + m_fff_print->full_print_config())) + m_upload_job.upload_data.upload_path = output_name_str; + } } else { m_upload_job.upload_data.upload_path = m_sla_print->print_statistics().finalize_output_path(m_upload_job.upload_data.upload_path.string()); diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index df52d84b14..134d91e7c5 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -54,6 +54,300 @@ wxString get_fail_reason(int code) return _L("Unknown Failure"); } +PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Bind with Pin Code"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + wxBoxSizer* sizer_main = new wxBoxSizer(wxVERTICAL); + + + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + + m_simplebook = new wxSimplebook(this); + m_simplebook->SetSize(wxSize(FromDIP(460), FromDIP(240))); + m_simplebook->SetMinSize(wxSize(FromDIP(460), FromDIP(240))); + m_simplebook->SetMaxSize(wxSize(FromDIP(460), FromDIP(240))); + + + request_bind_panel = new wxPanel(m_simplebook); + binding_panel = new wxPanel(m_simplebook); + + request_bind_panel->SetSize(wxSize(FromDIP(460), FromDIP(240))); + request_bind_panel->SetMinSize(wxSize(FromDIP(460), FromDIP(240))); + request_bind_panel->SetMaxSize(wxSize(FromDIP(460), FromDIP(240))); + + binding_panel->SetSize(wxSize(FromDIP(460), FromDIP(240))); + binding_panel->SetMinSize(wxSize(FromDIP(460), FromDIP(240))); + binding_panel->SetMaxSize(wxSize(FromDIP(460), FromDIP(240))); + + + request_bind_panel->SetBackgroundColour(*wxWHITE); + binding_panel->SetBackgroundColour(*wxWHITE); + + m_status_text = new Label(request_bind_panel, _L("Please Find the Pin Code in Account page on printer screen,\n and type in the Pin Code below.")); + m_status_text->SetBackgroundColour(*wxWHITE); + m_status_text->SetFont(Label::Body_14); + m_status_text->SetMaxSize(wxSize(FromDIP(440), -1)); + m_status_text->Wrap(FromDIP(440)); + m_status_text->SetForegroundColour(wxColour(38, 46, 48)); + + m_link_show_ping_code_wiki = new wxStaticText(request_bind_panel, wxID_ANY, _L("Can't find Pin Code?")); + m_link_show_ping_code_wiki->SetFont(Label::Body_14); + m_link_show_ping_code_wiki->SetBackgroundColour(*wxWHITE); + m_link_show_ping_code_wiki->SetForegroundColour(wxColour(31, 142, 234)); + + m_link_show_ping_code_wiki->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_HAND); }); + m_link_show_ping_code_wiki->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) {SetCursor(wxCURSOR_ARROW); }); + + m_link_show_ping_code_wiki->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_ping_code_wiki = "https://wiki.bambulab.com/en/bambu-studio/manual/pin-code"; + wxLaunchDefaultBrowser(m_ping_code_wiki); + }); + + m_text_input_title = new wxStaticText(request_bind_panel, wxID_ANY, _L("Pin Code")); + m_text_input_title->SetFont(Label::Body_14); + m_text_input_title->SetBackgroundColour(*wxWHITE); + + wxBoxSizer* ping_code_input = new wxBoxSizer(wxHORIZONTAL); + + + for (int i = 0; i < PING_CODE_LENGTH; i++) { + m_text_input_single_code[i] = new TextInput(request_bind_panel, wxEmptyString, "", "", wxDefaultPosition, wxSize(FromDIP(38), FromDIP(38)), wxTE_PROCESS_ENTER | wxTE_CENTER); + wxTextAttr textAttr; + textAttr.SetAlignment(wxTEXT_ALIGNMENT_CENTER); + textAttr.SetTextColour(wxColour(34, 139, 34)); + m_text_input_single_code[i]->GetTextCtrl()->SetDefaultStyle(textAttr); + m_text_input_single_code[i]->SetFont(Label::Body_16); + m_text_input_single_code[i]->GetTextCtrl()->SetMaxLength(1); + m_text_input_single_code[i]->GetTextCtrl()->Bind(wxEVT_TEXT, &PingCodeBindDialog::on_text_changed, this); + m_text_input_single_code[i]->GetTextCtrl()->Bind(wxEVT_KEY_DOWN, &PingCodeBindDialog::on_key_backspace, this); + m_text_input_single_code[i]->GetTextCtrl()->Bind(wxEVT_CHAR, &PingCodeBindDialog::on_key_input, this); + ping_code_input->Add(m_text_input_single_code[i], 0, wxALL, FromDIP(5)); + } + + wxBoxSizer* m_sizer_button = new wxBoxSizer(wxHORIZONTAL); + m_sizer_button->Add(0, 0, 1, wxEXPAND, 5); + m_button_bind = new Button(request_bind_panel, _L("Confirm")); + + StateColor btn_bg_green(std::pair(wxColour(206, 206, 206), StateColor::Disabled), + std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + m_button_bind->SetBackgroundColor(btn_bg_green); + m_button_bind->SetBorderColor(*wxWHITE); + m_button_bind->SetTextColor(wxColour("#FFFFFE")); + m_button_bind->SetSize(BIND_DIALOG_BUTTON_SIZE); + m_button_bind->SetMinSize(BIND_DIALOG_BUTTON_SIZE); + m_button_bind->SetCornerRadius(FromDIP(12)); + m_button_bind->Enable(false); + + StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + m_button_cancel = new Button(request_bind_panel, _L("Cancel")); + m_button_cancel->SetBackgroundColor(btn_bg_white); + m_button_cancel->SetBorderColor(BIND_DIALOG_GREY900); + m_button_cancel->SetSize(BIND_DIALOG_BUTTON_SIZE); + m_button_cancel->SetMinSize(BIND_DIALOG_BUTTON_SIZE); + m_button_cancel->SetTextColor(BIND_DIALOG_GREY900); + m_button_cancel->SetCornerRadius(FromDIP(12)); + + m_sizer_button->Add(m_button_bind, 0, wxALIGN_CENTER, 0); + m_sizer_button->Add(0, 0, 0, wxLEFT, FromDIP(13)); + m_sizer_button->Add(m_button_cancel, 0, wxALIGN_CENTER, 0); + + + + m_simplebook->AddPage(request_bind_panel, wxEmptyString, true); + m_simplebook->AddPage(binding_panel, wxEmptyString, false); + + + auto sizer_request = new wxBoxSizer(wxVERTICAL); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_request->Add(m_status_text, 0, wxLEFT, FromDIP(13)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_request->Add(m_link_show_ping_code_wiki, 0, wxLEFT, FromDIP(13)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(15)); + sizer_request->Add(m_text_input_title, 0, wxLEFT, FromDIP(13)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(5)); + sizer_request->Add(ping_code_input, 0, wxLEFT, FromDIP(10)); + sizer_request->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_request->Add(m_sizer_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, FromDIP(15)); + request_bind_panel->SetSizer(sizer_request); + request_bind_panel->Layout(); + request_bind_panel->Fit(); + + + + auto m_loading_txt = new Label(binding_panel, _L("Binding...")); + m_loading_txt->SetBackgroundColour(*wxWHITE); + m_loading_txt->SetFont(Label::Head_16); + auto m_loading_tip_txt = new Label(binding_panel, _L("Please confirm on the printer screen")); + m_loading_tip_txt->SetBackgroundColour(*wxWHITE); + m_loading_tip_txt->SetFont(Label::Body_15); + + wxBoxSizer* m_sizer_binding_button = new wxBoxSizer(wxHORIZONTAL); + m_sizer_binding_button->Add(0, 0, 1, wxEXPAND, 5); + + m_button_close = new Button(binding_panel, _L("Close")); + m_button_close->SetBackgroundColor(btn_bg_white); + m_button_close->SetBorderColor(BIND_DIALOG_GREY900); + m_button_close->SetSize(BIND_DIALOG_BUTTON_SIZE); + m_button_close->SetMinSize(BIND_DIALOG_BUTTON_SIZE); + m_button_close->SetTextColor(BIND_DIALOG_GREY900); + m_button_close->SetCornerRadius(FromDIP(12)); + m_sizer_binding_button->Add(m_button_close, 0, wxALIGN_CENTER, 0); + + auto sizer_binding = new wxBoxSizer(wxVERTICAL); + sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(80)); + sizer_binding->Add(m_loading_txt, 0, wxALIGN_CENTER, 0); + sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(10)); + sizer_binding->Add(m_loading_tip_txt, 0, wxALIGN_CENTER, 0); + sizer_binding->Add(0, 0, 0, wxTOP, FromDIP(30)); + sizer_binding->Add(m_sizer_binding_button, 0, wxALIGN_RIGHT | wxRIGHT, FromDIP(20)); + binding_panel->SetSizer(sizer_binding); + binding_panel->Layout(); + binding_panel->Fit(); + + + + sizer_main->Add(m_line_top, 0, wxEXPAND, 0); + sizer_main->Add(m_simplebook, 0, wxEXPAND, 0); + + + + SetSizer(sizer_main); + Layout(); + Fit(); + + m_button_bind->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_bind_printer), NULL, this); + m_button_cancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); + m_button_close->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); + + m_simplebook->SetSelection(0); +} + +void PingCodeBindDialog::on_key_input(wxKeyEvent& evt) +{ + int keyCode = evt.GetKeyCode(); + + if (keyCode == WXK_BACK || (keyCode >= '0' && keyCode <= '9') || (keyCode >= 'a' && keyCode <= 'z') || (keyCode >= 'A' && keyCode <= 'Z')) + { + evt.Skip(); + } + else + { + wxBell(); + return; + } +} + +void PingCodeBindDialog::on_text_changed(wxCommandEvent& event) { + //switch focus to the text text input + wxTextCtrl* text_input = static_cast(event.GetEventObject()); + int idx = -1; + for (int i = 0; i < PING_CODE_LENGTH; i++) { + if (text_input == m_text_input_single_code[i]->GetTextCtrl()) { + idx = i; + break; + } + } + + if (idx != -1 && text_input->GetValue().Length() == 1) { + if (idx < PING_CODE_LENGTH-1) { + m_text_input_single_code[idx + 1]->SetFocus(); + } + + auto has_empty = false; + for (int i = 0; i < PING_CODE_LENGTH; i++) { + if (m_text_input_single_code[i]->GetTextCtrl()->GetValue().ToStdString().empty()) { + has_empty = true; + } + } + + if (has_empty) { + m_button_bind->Enable(false); + } + else { + m_button_bind->Enable(true); + } + + /*if (idx == PING_CODE_LENGTH - 1) { + m_button_bind->Enable(true); + }*/ + } + +} + +void PingCodeBindDialog::on_key_backspace(wxKeyEvent& event) +{ + wxTextCtrl* text_input = static_cast(event.GetEventObject()); + int idx = -1; + for (int i = 0; i < 6; i++) { + if (text_input == m_text_input_single_code[i]->GetTextCtrl()) { + idx = i; + break; + } + } + + if (event.GetKeyCode() == WXK_BACK && idx >= 0) { + CallAfter([this, idx]() { + m_text_input_single_code[idx - 1]->SetFocus(); + m_button_bind->Enable(false); + }); + } + event.Skip(); +} + +void PingCodeBindDialog::on_bind_printer(wxCommandEvent& event) +{ + wxString ping_code; + + for (int i = 0; i < PING_CODE_LENGTH; i++) { + ping_code += m_text_input_single_code[i]->GetTextCtrl()->GetValue().ToStdString(); + } + + NetworkAgent* agent = wxGetApp().getAgent(); + if (agent && agent->is_user_login() && ping_code.length() == PING_CODE_LENGTH) { + auto result = agent->ping_bind(ping_code.ToStdString()); + + if(result < 0){ + MessageDialog msg_wingow(nullptr, _L("Log in failed. Please check the Pin Code."), "", wxAPPLY | wxOK); + msg_wingow.ShowModal(); + return; + } + m_simplebook->SetSelection(1); + } +} + +void PingCodeBindDialog::on_cancel(wxCommandEvent& event) +{ + EndModal(wxCLOSE); +} + +void PingCodeBindDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + + Fit(); + Refresh(); +} + + +PingCodeBindDialog::~PingCodeBindDialog() { + m_button_bind->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_bind_printer), NULL, this); + m_button_cancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); + m_button_close->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(PingCodeBindDialog::on_cancel), NULL, this); +} + BindMachineDialog::BindMachineDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Log in printer"), wxDefaultPosition, wxDefaultSize, wxCAPTION) { diff --git a/src/slic3r/GUI/BindDialog.hpp b/src/slic3r/GUI/BindDialog.hpp index 636d088112..a4ffd8fbff 100644 --- a/src/slic3r/GUI/BindDialog.hpp +++ b/src/slic3r/GUI/BindDialog.hpp @@ -19,7 +19,6 @@ #include #include #include "wxExtensions.hpp" -#include "Plater.hpp" #include "Widgets/StepCtrl.hpp" #include "Widgets/ProgressDialog.hpp" #include "Widgets/Button.hpp" @@ -29,15 +28,21 @@ #include "BBLStatusBar.hpp" #include "BBLStatusBarBind.hpp" #include "Jobs/Worker.hpp" +#include "GUI_Utils.hpp" +#include "Widgets/TextInput.hpp" +#include "Jobs/PrintJob.hpp" +#include "Jobs/SendJob.hpp" +#include "DeviceManager.hpp" #define BIND_DIALOG_GREY200 wxColour(248, 248, 248) #define BIND_DIALOG_GREY800 wxColour(50, 58, 61) #define BIND_DIALOG_GREY900 wxColour(38, 46, 48) #define BIND_DIALOG_BUTTON_SIZE wxSize(FromDIP(68), FromDIP(24)) #define BIND_DIALOG_BUTTON_PANEL_SIZE wxSize(FromDIP(450), FromDIP(30)) +#define PING_CODE_LENGTH 6 namespace Slic3r { namespace GUI { - +class Plater; struct MemoryStruct { char * memory; @@ -45,6 +50,47 @@ struct MemoryStruct size_t size; }; +class PingCodeBindDialog : public DPIDialog +{ +private: + + Label* m_status_text; + wxStaticText* m_text_input_title; + wxStaticText* m_link_show_ping_code_wiki; + TextInput* m_text_input_single_code[PING_CODE_LENGTH]; + Button* m_button_bind; + Button* m_button_cancel; + Button* m_button_close; + wxSimplebook* m_simplebook; + wxPanel* request_bind_panel; + wxPanel* binding_panel; + + wxScrolledWindow* m_sw_bind_failed_info; + Label* m_bind_failed_info; + Label* m_st_txt_error_code{ nullptr }; + Label* m_st_txt_error_desc{ nullptr }; + Label* m_st_txt_extra_info{ nullptr }; + wxHyperlinkCtrl* m_link_network_state{ nullptr }; + wxString m_result_info; + wxString m_result_extra; + wxString m_ping_code_wiki; + bool m_show_error_info_state = true; + + int m_result_code; + std::shared_ptr m_status_bar; + +public: + PingCodeBindDialog(Plater* plater = nullptr); + ~PingCodeBindDialog(); + + void on_key_input(wxKeyEvent& evt); + void on_text_changed(wxCommandEvent& event); + void on_key_backspace(wxKeyEvent& event); + void on_cancel(wxCommandEvent& event); + void on_bind_printer(wxCommandEvent& event); + void on_dpi_changed(const wxRect& suggested_rect) override; +}; + class BindMachineDialog : public DPIDialog { private: diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp index d5facd3f3f..d382f657e3 100644 --- a/src/slic3r/GUI/BitmapCache.cpp +++ b/src/slic3r/GUI/BitmapCache.cpp @@ -323,7 +323,7 @@ wxBitmap* BitmapCache::load_svg(const std::string &bitmap_name, unsigned target_ // map of color replaces std::map replaces; -replaces["\"#0x00AE42\""] = "\"#009688\""; + replaces["\"#0x00AE42\""] = "\"#009688\""; replaces["\"#00FF00\""] = "\"#52c7b8\""; if (dark_mode) { replaces["\"#262E30\""] = "\"#EFEFF0\""; @@ -334,7 +334,7 @@ replaces["\"#0x00AE42\""] = "\"#009688\""; replaces["\"#6B6B6B\""] = "\"#818182\""; replaces["\"#909090\""] = "\"#FFFFFF\""; replaces["\"#00FF00\""] = "\"#FF0000\""; -replaces["\"#009688\""] = "\"#00675b\""; + replaces["\"#009688\""] = "\"#00675b\""; } //if (!new_color.empty()) // replaces["\"#ED6B21\""] = "\"" + new_color + "\""; diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index ec3d76ecb9..e47c5bd2da 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -55,9 +55,10 @@ static wxString get_preset_name_by_filament_id(std::string filament_id) return preset_name; } -HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& calib_results_history) +HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& calib_results_history, bool& show) : DPIDialog(parent, wxID_ANY, _L("Flow Dynamics Calibration Result"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) , m_calib_results_history(calib_results_history) + , m_show_history_dialog(show) { this->SetBackgroundColour(*wxWHITE); auto main_sizer = new wxBoxSizer(wxVERTICAL); @@ -73,11 +74,11 @@ HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& scroll_window->SetSizer(scroll_sizer); Button * mew_btn = new Button(scroll_window, _L("New")); - StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 174, 66), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); mew_btn->SetBackgroundColour(*wxWHITE); mew_btn->SetBackgroundColor(btn_bg_green); - mew_btn->SetBorderColor(wxColour(0, 174, 66)); + mew_btn->SetBorderColor(wxColour(0, 150, 136)); mew_btn->SetTextColor(wxColour("#FFFFFE")); mew_btn->SetMinSize(wxSize(FromDIP(100), FromDIP(24))); mew_btn->SetMaxSize(wxSize(FromDIP(100), FromDIP(24))); @@ -138,11 +139,14 @@ HistoryWindow::HistoryWindow(wxWindow* parent, const std::vector& m_refresh_timer->SetOwner(this); m_refresh_timer->Start(200); Bind(wxEVT_TIMER, &HistoryWindow::on_timer, this); + + m_show_history_dialog = true; } HistoryWindow::~HistoryWindow() { m_refresh_timer->Stop(); + m_show_history_dialog = false; } void HistoryWindow::sync_history_result(MachineObject* obj) @@ -364,6 +368,12 @@ float HistoryWindow::get_nozzle_value() void HistoryWindow::on_click_new_button(wxCommandEvent& event) { + if (curr_obj && curr_obj->get_printer_series() == PrinterSeries::SERIES_P1P && m_calib_results_history.size() >= 16) { + MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold %d history results per nozzle."), 16), wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + NewCalibrationHistoryDialog dlg(this, m_calib_results_history); dlg.ShowModal(); } @@ -560,7 +570,7 @@ wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject } NewCalibrationHistoryDialog::NewCalibrationHistoryDialog(wxWindow *parent, const std::vector history_results) - : DPIDialog(parent, wxID_ANY, _L("New Flow Dynamics Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) + : DPIDialog(parent, wxID_ANY, _L("New Flow Dynamic Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) , m_history_results(history_results) { Slic3r::DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); @@ -570,6 +580,8 @@ NewCalibrationHistoryDialog::NewCalibrationHistoryDialog(wxWindow *parent, const if (!obj) return; + curr_obj = obj; + this->SetBackgroundColour(*wxWHITE); auto main_sizer = new wxBoxSizer(wxVERTICAL); @@ -628,11 +640,11 @@ NewCalibrationHistoryDialog::NewCalibrationHistoryDialog(wxWindow *parent, const auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); Button * ok_btn = new Button(top_panel, _L("Ok")); - StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 174, 66), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); ok_btn->SetBackgroundColour(*wxWHITE); ok_btn->SetBackgroundColor(btn_bg_green); - ok_btn->SetBorderColor(wxColour(0, 174, 66)); + ok_btn->SetBorderColor(wxColour(0, 150, 136)); ok_btn->SetTextColor(wxColour("#FFFFFE")); ok_btn->SetMinSize(wxSize(-1, FromDIP(24))); ok_btn->SetCornerRadius(FromDIP(12)); @@ -699,26 +711,18 @@ void NewCalibrationHistoryDialog::on_ok(wxCommandEvent &event) // Check for duplicate names from history { - struct PACalibResult - { - size_t operator()(const std::pair &item) const - { - return std::hash()(item.first) * std::hash()(item.second); - } - }; - std::unordered_set, PACalibResult> set; - set.insert({m_new_result.name, m_new_result.filament_id}); + auto iter = std::find_if(m_history_results.begin(), m_history_results.end(), [this](const PACalibResult &item) { + return item.name == m_new_result.name && item.filament_id == m_new_result.filament_id; + }); - for (auto &result : m_history_results) { - if (!set.insert({result.name, result.filament_id}).second) { - MessageDialog msg_dlg(nullptr, - wxString::Format(_L("There is already a historical calibration result with the same name: %s. Only one of the results with the same name " - "is saved. Are you sure you want to override the historical result?"), - result.name), - wxEmptyString, wxICON_WARNING | wxYES_NO); - if (msg_dlg.ShowModal() != wxID_YES) - return; - } + if (iter != m_history_results.end()) { + MessageDialog msg_dlg(nullptr, + wxString::Format(_L("There is already a historical calibration result with the same name: %s. Only one of the results with the same name " + "is saved. Are you sure you want to override the historical result?"), + m_new_result.name), + wxEmptyString, wxICON_WARNING | wxYES_NO); + if (msg_dlg.ShowModal() != wxID_YES) + return; } } diff --git a/src/slic3r/GUI/CaliHistoryDialog.hpp b/src/slic3r/GUI/CaliHistoryDialog.hpp index 94b3a874aa..8f7b49a25a 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.hpp +++ b/src/slic3r/GUI/CaliHistoryDialog.hpp @@ -11,7 +11,7 @@ namespace GUI { class HistoryWindow : public DPIDialog { public: - HistoryWindow(wxWindow* parent, const std::vector& calib_results_history); + HistoryWindow(wxWindow* parent, const std::vector& calib_results_history, bool& show); ~HistoryWindow(); void on_dpi_changed(const wxRect& suggested_rect) {} void on_select_nozzle(wxCommandEvent& evt); @@ -33,6 +33,7 @@ protected: wxTimer* m_refresh_timer { nullptr }; + bool& m_show_history_dialog; std::vector m_calib_results_history; MachineObject* curr_obj { nullptr }; int history_version = -1; @@ -74,6 +75,7 @@ protected: protected: PACalibResult m_new_result; std::vector m_history_results; + MachineObject * curr_obj; TextInput *m_name_value{nullptr}; TextInput *m_k_value{nullptr}; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index cbeabeb3cd..713b3833f3 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -18,6 +18,7 @@ static const wxString NA_STR = _L("N/A"); static const float MIN_PA_K_VALUE = 0.0; static const float MAX_PA_K_VALUE = 0.3; static const float MIN_PA_K_VALUE_STEP = 0.001; +static const int MAX_PA_HISTORY_RESULTS_NUMS = 16; std::map get_cached_selected_filament(MachineObject* obj) { std::map selected_filament_map; @@ -429,7 +430,7 @@ void PressureAdvanceWizard::on_cali_action(wxCommandEvent& evt) { CaliPageActionType action = static_cast(evt.GetInt()); if (action == CaliPageActionType::CALI_ACTION_MANAGE_RESULT) { - HistoryWindow history_dialog(this, m_calib_results_history); + HistoryWindow history_dialog(this, m_calib_results_history, m_show_result_dialog); history_dialog.on_device_connected(curr_obj); history_dialog.ShowModal(); } @@ -467,7 +468,17 @@ void PressureAdvanceWizard::on_cali_action(wxCommandEvent& evt) void PressureAdvanceWizard::update(MachineObject* obj) { + if (!obj) + return; + CalibrationWizard::update(obj); + + if (!m_show_result_dialog) { + if (obj->cali_version != -1 && obj->cali_version != cali_version) { + cali_version = obj->cali_version; + CalibUtils::emit_get_PA_calib_info(obj->nozzle_diameter, ""); + } + } } void PressureAdvanceWizard::on_device_connected(MachineObject* obj) @@ -648,11 +659,21 @@ void PressureAdvanceWizard::on_cali_start() cali_page->set_pa_cali_image(int(pa_cali_method)); curr_obj->manual_pa_cali_method = pa_cali_method; - CalibUtils::calib_generic_PA(calib_info, wx_err_string); + if (curr_obj->pa_calib_tab.size() >= MAX_PA_HISTORY_RESULTS_NUMS) { + MessageDialog msg_dlg(nullptr, wxString::Format(_L("This machine type can only hold 16 history results per nozzle. " + "You can delete the existing historical results and then start calibration. " + "Or you can continue the calibration, but you cannot create new calibration historical results. \n" + "Do you still want to continue the calibration?"), MAX_PA_HISTORY_RESULTS_NUMS), wxEmptyString, wxICON_WARNING | wxYES | wxCANCEL); + if (msg_dlg.ShowModal() != wxID_YES) { + return; + } + } - if (!wx_err_string.empty()) { - MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); + if (!CalibUtils::calib_generic_PA(calib_info, wx_err_string)) { + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } return; } @@ -713,6 +734,30 @@ void PressureAdvanceWizard::on_cali_save() if (!save_page->get_manual_result(new_pa_cali_result)) { return; } + + + auto iter = std::find_if(curr_obj->pa_calib_tab.begin(), curr_obj->pa_calib_tab.end(), [&new_pa_cali_result](const PACalibResult &item) { + return item.name == new_pa_cali_result.name && item.filament_id == item.filament_id; + }); + + if (iter != curr_obj->pa_calib_tab.end()) { + MessageDialog + msg_dlg(nullptr, + wxString::Format(_L("There is already a historical calibration result with the same name: %s. Only one of the results with the same name " + "is saved. Are you sure you want to override the historical result?"), + new_pa_cali_result.name), + wxEmptyString, wxICON_WARNING | wxYES_NO); + if (msg_dlg.ShowModal() != wxID_YES) + return; + } + else if (curr_obj->pa_calib_tab.size() >= MAX_PA_HISTORY_RESULTS_NUMS) { + MessageDialog msg_dlg(nullptr, + wxString::Format(_L("This machine type can only hold %d history results per nozzle. This result will not be saved."), MAX_PA_HISTORY_RESULTS_NUMS), + wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + return; + } + CalibUtils::set_PA_calib_result({new_pa_cali_result}, false); } else { auto save_page = static_cast(save_step->page); @@ -1020,7 +1065,13 @@ void FlowRateWizard::on_cali_start(CaliPresetStage stage, float cali_value, Flow calib_info.filament_prest = temp_filament_preset; if (cali_stage > 0) { - CalibUtils::calib_flowrate(cali_stage, calib_info, wx_err_string); + if (!CalibUtils::calib_flowrate(cali_stage, calib_info, wx_err_string)) { + if (!wx_err_string.empty()) { + MessageDialog msg_dlg(nullptr, wx_err_string, wxEmptyString, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + } + return; + } } else { wx_err_string = _L("Internal Error") + wxString(": Invalid calibration stage"); diff --git a/src/slic3r/GUI/CalibrationWizard.hpp b/src/slic3r/GUI/CalibrationWizard.hpp index 14cfd50a95..34550b4b7f 100644 --- a/src/slic3r/GUI/CalibrationWizard.hpp +++ b/src/slic3r/GUI/CalibrationWizard.hpp @@ -121,7 +121,9 @@ protected: void on_device_connected(MachineObject* obj) override; + bool m_show_result_dialog = false; std::vector m_calib_results_history; + int cali_version = -1; }; class FlowRateWizard : public CalibrationWizard { diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp index d412146741..cd63eaf38a 100644 --- a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp @@ -382,7 +382,7 @@ void CalibrationCaliPage::update_subtask(MachineObject* obj) m_printing_panel->update_subtask_name(wxString::Format("%s", GUI::from_u8(obj->subtask_name))); if (obj->get_modeltask() && obj->get_modeltask()->design_id > 0) { - m_printing_panel->show_profile_info(true, wxString::FromUTF8(obj->get_modeltask()->profile_name)); + m_printing_panel->show_profile_info(wxString::FromUTF8(obj->get_modeltask()->profile_name)); } else { m_printing_panel->show_profile_info(false); @@ -502,4 +502,4 @@ float CalibrationCaliPage::get_selected_calibration_nozzle_dia(MachineObject* ob return 0.4; } -}} +}} \ No newline at end of file diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index e6941066c2..482ce61a12 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -1,3 +1,4 @@ +#include #include "CalibrationWizardPresetPage.hpp" #include "I18N.hpp" #include "Widgets/Label.hpp" @@ -312,7 +313,7 @@ void CaliPresetCustomRangePanel::create_panel(wxWindow* parent) m_title_texts[i]->Wrap(-1); m_title_texts[i]->SetFont(::Label::Body_14); item_sizer->Add(m_title_texts[i], 0, wxALL, 0); - m_value_inputs[i] = new TextInput(parent, wxEmptyString, _L("\u2103"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, 0); + m_value_inputs[i] = new TextInput(parent, wxEmptyString, wxString::FromUTF8("°C"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, 0); m_value_inputs[i]->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); m_value_inputs[i]->GetTextCtrl()->Bind(wxEVT_TEXT, [this, i](wxCommandEvent& event) { std::string number = m_value_inputs[i]->GetTextCtrl()->GetValue().ToStdString(); @@ -391,7 +392,7 @@ void CaliPresetTipsPanel::create_panel(wxWindow* parent) auto nozzle_temp_sizer = new wxBoxSizer(wxVERTICAL); auto nozzle_temp_text = new Label(parent, _L("Nozzle temperature")); nozzle_temp_text->SetFont(Label::Body_12); - m_nozzle_temp = new TextInput(parent, wxEmptyString, _L("\u2103"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); + m_nozzle_temp = new TextInput(parent, wxEmptyString, wxString::FromUTF8("°C"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); m_nozzle_temp->SetBorderWidth(0); nozzle_temp_sizer->Add(nozzle_temp_text, 0, wxALIGN_LEFT); nozzle_temp_sizer->Add(m_nozzle_temp, 0, wxEXPAND); @@ -406,7 +407,7 @@ void CaliPresetTipsPanel::create_panel(wxWindow* parent) auto bed_temp_text = new Label(parent, _L("Bed temperature")); bed_temp_text->SetFont(Label::Body_12); - m_bed_temp = new Label(parent, _L("- \u2103")); + m_bed_temp = new Label(parent, wxString::FromUTF8("- °C")); m_bed_temp->SetFont(Label::Body_12); bed_temp_sizer->Add(bed_temp_text, 0, wxALIGN_CENTER | wxRIGHT, FromDIP(10)); bed_temp_sizer->Add(m_bed_temp, 0, wxALIGN_CENTER); @@ -414,7 +415,7 @@ void CaliPresetTipsPanel::create_panel(wxWindow* parent) auto max_flow_sizer = new wxBoxSizer(wxVERTICAL); auto max_flow_text = new Label(parent, _L("Max volumetric speed")); max_flow_text->SetFont(Label::Body_12); - m_max_volumetric_speed = new TextInput(parent, wxEmptyString, _L("mm\u00B3"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); + m_max_volumetric_speed = new TextInput(parent, wxEmptyString, wxString::FromUTF8("mm³"), "", wxDefaultPosition, CALIBRATION_FROM_TO_INPUT_SIZE, wxTE_READONLY); m_max_volumetric_speed->SetBorderWidth(0); max_flow_sizer->Add(max_flow_text, 0, wxALIGN_LEFT); max_flow_sizer->Add(m_max_volumetric_speed, 0, wxEXPAND); @@ -1204,7 +1205,7 @@ void CalibrationPresetPage::update_show_status() show_status(CaliPresetPageStatus::CaliPresetStatusInPrinting); return; } - else if (need_check_sdcard(obj_) && obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) { + else if (!obj_->is_support_print_without_sd && (obj_->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD)) { show_status(CaliPresetPageStatus::CaliPresetStatusNoSdcard); return; } @@ -1424,10 +1425,10 @@ void CalibrationPresetPage::set_cali_method(CalibrationMethod method) m_custom_range_panel->set_titles(titles); wxArrayString values; - values.push_back(_L("0")); - values.push_back(_L("0.5")); - values.push_back(_L("0.005")); - m_custom_range_panel->set_values(values); + values.push_back(wxString::Format(wxT("%.0f"), 0)); + values.push_back(wxString::Format(wxT("%.2f"), 0.05)); + values.push_back(wxString::Format(wxT("%.3f"), 0.005)); + m_custom_range_panel->set_values(values); m_custom_range_panel->set_unit(""); m_custom_range_panel->Show(); @@ -1479,7 +1480,7 @@ void CalibrationPresetPage::on_cali_cancel_job() { BOOST_LOG_TRIVIAL(info) << "CalibrationWizard::print_job: enter canceled"; if (CalibUtils::print_worker) { - BOOST_LOG_TRIVIAL(info) << "calibration_print_job: canceled"; + BOOST_LOG_TRIVIAL(info) << "calibration_print_job: canceled"; CalibUtils::print_worker->cancel_all(); CalibUtils::print_worker->wait_for_idle(); } @@ -1913,7 +1914,7 @@ MaxVolumetricSpeedPresetPage::MaxVolumetricSpeedPresetPage( titles.push_back(_L("Step")); m_custom_range_panel->set_titles(titles); - m_custom_range_panel->set_unit(_L("mm\u00B3/s")); + m_custom_range_panel->set_unit("mm³/s"); } } }} diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index 49a964b69e..328e8aa1a6 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -150,7 +150,7 @@ public: // returns true if the camera z axis (forward) is pointing in the negative direction of the world z axis bool is_looking_downward() const { return get_dir_forward().dot(Vec3d::UnitZ()) < 0.0; } - + bool is_looking_front() const { return abs(get_dir_up().dot(Vec3d::UnitZ())-1) < 0.001; } // forces camera right vector to be parallel to XY plane void recover_from_free_camera() { if (std::abs(get_dir_right()(2)) > EPSILON) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index ddc9877cdf..d871e7cbcf 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -550,7 +550,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_field(el, has_solid_infill); for (auto el : { "infill_direction", "sparse_infill_line_width", - "sparse_infill_speed", "bridge_speed", "internal_bridge_speed", "bridge_angle" }) + "sparse_infill_speed", "bridge_speed", "internal_bridge_speed", "bridge_angle","solid_infill_direction", "rotate_solid_infill_direction" }) toggle_field(el, have_infill || has_solid_infill); toggle_field("top_shell_thickness", ! has_spiral_vase && has_top_solid_infill); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index b9a6b758b6..9e3cb574b1 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -20,6 +20,8 @@ #include "fast_float/fast_float.h" #define CALI_DEBUG +#define MINUTE_30 1800000 //ms +#define TIME_OUT 5000 //ms namespace pt = boost::property_tree; @@ -335,15 +337,15 @@ wxString HMSItem::get_module_name(ModuleID module_id) switch (module_id) { case MODULE_MC: - return _L("MC"); + return "MC"; case MODULE_MAINBOARD: - return _L("MainBoard"); + return "MainBoard"; case MODULE_AMS: - return _L("AMS"); + return "AMS"; case MODULE_TH: - return _L("TH"); + return "TH"; case MODULE_XCAM: - return _L("XCam"); + return "XCam"; default: wxString text = _L("Unknown") + wxString::Format("0x%x", (unsigned)module_id); return text; @@ -452,7 +454,7 @@ void MachineObject::erase_user_access_code() AppConfig* config = GUI::wxGetApp().app_config; if (config) { GUI::wxGetApp().app_config->erase("user_access_code", dev_id); - GUI::wxGetApp().app_config->save(); + //GUI::wxGetApp().app_config->save(); } } @@ -1390,6 +1392,12 @@ void MachineObject::parse_status(int flag) if(!is_support_motor_noise_cali){ is_support_motor_noise_cali = ((flag >> 21) & 0x1) != 0; } + + is_support_nozzle_blob_detection = ((flag >> 25) & 0x1) != 0; + nozzle_blob_detection_enabled = ((flag >> 24) & 0x1) != 0; + + is_support_air_print_detection = ((flag >> 29) & 0x1) != 0; + ams_air_print_status = ((flag >> 28) & 0x1) != 0; if (!is_support_p1s_plus) { auto supported_plus = ((flag >> 27) & 0x1) != 0; @@ -1984,6 +1992,16 @@ int MachineObject::command_set_printing_option(bool auto_recovery) return this->publish_json(j.dump()); } +int MachineObject::command_nozzle_blob_detect(bool nozzle_blob_detect) +{ + json j; + j["print"]["command"] = "print_option"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["nozzle_blob_detect"] = nozzle_blob_detect; + nozzle_blob_detection_enabled = nozzle_blob_detect; + return this->publish_json(j.dump()); +} + int MachineObject::command_set_prompt_sound(bool prompt_sound){ json j; j["print"]["command"] = "print_option"; @@ -2016,6 +2034,19 @@ int MachineObject::command_ams_switch_filament(bool switch_filament) return this->publish_json(j.dump()); } +int MachineObject::command_ams_air_print_detect(bool air_print_detect) +{ + json j; + j["print"]["command"] = "print_option"; + j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["print"]["air_print_detect"] = air_print_detect; + + ams_air_print_status = air_print_detect; + BOOST_LOG_TRIVIAL(trace) << "command_ams_air_print_detect:" << air_print_detect; + + return this->publish_json(j.dump()); +} + int MachineObject::command_axis_control(std::string axis, double unit, double input_val, int speed) { @@ -2214,6 +2245,7 @@ int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& cal j["print"]["tray_id"] = calib_data.calib_datas[0].tray_id; j["print"]["nozzle_diameter"] = to_string_nozzle_diameter(calib_data.calib_datas[0].nozzle_diameter); + std::string filament_ids; for (int i = 0; i < calib_data.calib_datas.size(); ++i) { j["print"]["filaments"][i]["tray_id"] = calib_data.calib_datas[i].tray_id; j["print"]["filaments"][i]["bed_temp"] = calib_data.calib_datas[i].bed_temp; @@ -2222,6 +2254,10 @@ int MachineObject::command_start_flow_ratio_calibration(const X1CCalibInfos& cal j["print"]["filaments"][i]["nozzle_temp"] = calib_data.calib_datas[i].nozzle_temp; j["print"]["filaments"][i]["def_flow_ratio"] = std::to_string(calib_data.calib_datas[i].flow_rate); j["print"]["filaments"][i]["max_volumetric_speed"] = std::to_string(calib_data.calib_datas[i].max_volumetric_speed); + + if (i > 0) + filament_ids += ","; + filament_ids += calib_data.calib_datas[i].filament_id; } BOOST_LOG_TRIVIAL(trace) << "flowrate_cali: " << j.dump(); @@ -2623,7 +2659,7 @@ static ENUM enum_index_of(char const *key, char const **enum_names, int enum_cou return defl; } -int MachineObject::parse_json(std::string payload) +int MachineObject::parse_json(std::string payload, bool key_field_only) { CNumericLocalesSetter locales_setter; @@ -2701,8 +2737,79 @@ int MachineObject::parse_json(std::string payload) } uint64_t t_utc = j.value("t_utc", 0ULL); - if (t_utc > 0) + if (t_utc > 0) { last_utc_time = std::chrono::system_clock::time_point(t_utc * 1ms); + std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); + auto millisec_since_epoch = std::chrono::duration_cast(now.time_since_epoch()).count(); + auto delay = millisec_since_epoch - t_utc; //ms + + std::string message_type = is_lan_mode_printer() ? "Local Mqtt" : is_tunnel_mqtt ? "Tunnel Mqtt" : "Cloud Mqtt"; + if (!message_delay.empty()) { + const auto& [first_type, first_time_stamp, first_delay] = message_delay.front(); + const auto& [last_type, last_time_stap, last_delay] = message_delay.back(); + + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ", message delay, last time stamp: " << last_time_stap; + if (last_time_stap - first_time_stamp >= MINUTE_30) { + // record, excluding current data + int total = message_delay.size(); + int local_mqtt = 0; + int tunnel_mqtt = 0; + int cloud_mqtt = 0; + + int local_mqtt_timeout = 0; + int tunnel_mqtt_timeout = 0; + int cloud_mqtt_timeout = 0; + + for (const auto& [type, time_stamp, delay] : message_delay) { + if (type == "Local Mqtt") { + local_mqtt++; + if (delay >= TIME_OUT) { + local_mqtt_timeout++; + } + } + else if (type == "Tunnel Mqtt") { + tunnel_mqtt++; + if (delay >= TIME_OUT) { + tunnel_mqtt_timeout++; + } + } + else if (type == "Cloud Mqtt"){ + cloud_mqtt++; + if (delay >= TIME_OUT) { + cloud_mqtt_timeout++; + } + } + } + + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ", message delay, message total: " << total; + try { + if (m_agent) { + json j_message; + + // Convert timestamp to time + std::time_t t = time_t(last_time_stap / 1000); //s + std::tm* now_tm = std::localtime(&t); + char buffer[80]; + std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", now_tm); + + std::string time_str = std::string(buffer); + j_message["time"] = time_str; + j_message["total"] = total; + j_message["local_mqtt"] = std::to_string(local_mqtt_timeout) + "/" + std::to_string(local_mqtt); + j_message["tunnel_mqtt"] = std::to_string(tunnel_mqtt_timeout) + "/" + std::to_string(tunnel_mqtt); + j_message["cloud_mqtt"] = std::to_string(cloud_mqtt_timeout) + "/" + std::to_string(cloud_mqtt); + + m_agent->track_event("message_delay", j_message.dump()); + } + } + catch (...) {} + + message_delay.clear(); + message_delay.shrink_to_fit(); + } + } + message_delay.push_back(std::make_tuple(message_type, t_utc, delay)); + } else last_utc_time = last_update_time; @@ -2778,179 +2885,181 @@ int MachineObject::parse_json(std::string payload) } } + if (key_field_only) { + if (!DeviceManager::EnableMultiMachine) { + if (jj.contains("support_tunnel_mqtt")) { + if (jj["support_tunnel_mqtt"].is_boolean()) { + is_support_tunnel_mqtt = jj["support_tunnel_mqtt"].get(); + } + } + } + } else { + //supported function + if (jj.contains("support_chamber_temp_edit")) { + if (jj["support_chamber_temp_edit"].is_boolean()) { + is_support_chamber_edit = jj["support_chamber_temp_edit"].get(); + } + } - //supported function - if (jj.contains("support_chamber_temp_edit")) { - if (jj["support_chamber_temp_edit"].is_boolean()) { - is_support_chamber_edit = jj["support_chamber_temp_edit"].get(); + if (jj.contains("support_extrusion_cali")) { + if (jj["support_extrusion_cali"].is_boolean()) { + is_support_extrusion_cali = jj["support_extrusion_cali"].get(); + } } - } - if (jj.contains("support_extrusion_cali")) { - if (jj["support_extrusion_cali"].is_boolean()) { - is_support_extrusion_cali = jj["support_extrusion_cali"].get(); + if (jj.contains("support_first_layer_inspect")) { + if (jj["support_first_layer_inspect"].is_boolean()) { + is_support_first_layer_inspect = jj["support_first_layer_inspect"].get(); + } } - } - if (jj.contains("support_first_layer_inspect")) { - if (jj["support_first_layer_inspect"].is_boolean()) { - is_support_first_layer_inspect = jj["support_first_layer_inspect"].get(); + if (jj.contains("support_ai_monitoring")) { + if (jj["support_ai_monitoring"].is_boolean()) { + is_support_ai_monitoring = jj["support_ai_monitoring"].get(); + } } - } - - if (jj.contains("support_ai_monitoring")) { - if (jj["support_ai_monitoring"].is_boolean()) { - is_support_ai_monitoring = jj["support_ai_monitoring"].get(); - } - } - if (jj.contains("support_lidar_calibration")) { - if (jj["support_lidar_calibration"].is_boolean()) { - is_support_lidar_calibration = jj["support_lidar_calibration"].get(); + if (jj.contains("support_lidar_calibration")) { + if (jj["support_lidar_calibration"].is_boolean()) { + is_support_lidar_calibration = jj["support_lidar_calibration"].get(); + } } - } - - if (jj.contains("support_build_plate_marker_detect")) { - if (jj["support_build_plate_marker_detect"].is_boolean()) { - is_support_build_plate_marker_detect = jj["support_build_plate_marker_detect"].get(); - } - } - if (jj.contains("support_flow_calibration")) { - if (jj["support_flow_calibration"].is_boolean()) { - is_support_flow_calibration = jj["support_flow_calibration"].get(); + if (jj.contains("support_build_plate_marker_detect")) { + if (jj["support_build_plate_marker_detect"].is_boolean()) { + is_support_build_plate_marker_detect = jj["support_build_plate_marker_detect"].get(); + } } - } - if (jj.contains("support_print_without_sd")) { - if (jj["support_print_without_sd"].is_boolean()) { - is_support_print_without_sd = jj["support_print_without_sd"].get(); + if (jj.contains("support_flow_calibration")) { + if (jj["support_flow_calibration"].is_boolean()) { + is_support_flow_calibration = jj["support_flow_calibration"].get(); + } } - } - if (jj.contains("support_print_all")) { - if (jj["support_print_all"].is_boolean()) { - is_support_print_all = jj["support_print_all"].get(); + if (jj.contains("support_print_without_sd")) { + if (jj["support_print_without_sd"].is_boolean()) { + is_support_print_without_sd = jj["support_print_without_sd"].get(); + } } - } - if (jj.contains("support_send_to_sd")) { - if (jj["support_send_to_sd"].is_boolean()) { - is_support_send_to_sdcard = jj["support_send_to_sd"].get(); + if (jj.contains("support_print_all")) { + if (jj["support_print_all"].is_boolean()) { + is_support_print_all = jj["support_print_all"].get(); + } } - } - - if (jj.contains("support_aux_fan")) { - if (jj["support_aux_fan"].is_boolean()) { - is_support_aux_fan = jj["support_aux_fan"].get(); + if (jj.contains("support_send_to_sd")) { + if (jj["support_send_to_sd"].is_boolean()) { + is_support_send_to_sdcard = jj["support_send_to_sd"].get(); + } } - } - - if (jj.contains("support_chamber_fan")) { - if (jj["support_chamber_fan"].is_boolean()) { - is_support_chamber_fan = jj["support_chamber_fan"].get(); - } - } - - if (jj.contains("support_filament_backup")) { - if (jj["support_filament_backup"].is_boolean()) { - is_support_filament_backup = jj["support_filament_backup"].get(); - } - } - if (jj.contains("support_update_remain")) { - if (jj["support_update_remain"].is_boolean()) { - is_support_update_remain = jj["support_update_remain"].get(); + if (jj.contains("support_aux_fan")) { + if (jj["support_aux_fan"].is_boolean()) { + is_support_aux_fan = jj["support_aux_fan"].get(); + } } - } - if (jj.contains("support_auto_leveling")) { - if (jj["support_auto_leveling"].is_boolean()) { - is_support_auto_leveling = jj["support_auto_leveling"].get(); + if (jj.contains("support_chamber_fan")) { + if (jj["support_chamber_fan"].is_boolean()) { + is_support_chamber_fan = jj["support_chamber_fan"].get(); + } } - } - if (jj.contains("support_auto_recovery_step_loss")) { - if (jj["support_auto_recovery_step_loss"].is_boolean()) { - is_support_auto_recovery_step_loss = jj["support_auto_recovery_step_loss"].get(); + if (jj.contains("support_filament_backup")) { + if (jj["support_filament_backup"].is_boolean()) { + is_support_filament_backup = jj["support_filament_backup"].get(); + } } - } - - if (jj.contains("support_ams_humidity")) { - if (jj["support_ams_humidity"].is_boolean()) { - is_support_ams_humidity = jj["support_ams_humidity"].get(); - } - } - - if (jj.contains("support_prompt_sound")) { - if (jj["support_prompt_sound"].is_boolean()) { - is_support_prompt_sound = jj["support_prompt_sound"].get(); - } - } - - //if (jj.contains("support_filament_tangle_detect")) { - // if (jj["support_filament_tangle_detect"].is_boolean()) { - // is_support_filament_tangle_detect = jj["support_filament_tangle_detect"].get(); - // } - //} - if (jj.contains("support_1080dpi")) { - if (jj["support_1080dpi"].is_boolean()) { - is_support_1080dpi = jj["support_1080dpi"].get(); + if (jj.contains("support_update_remain")) { + if (jj["support_update_remain"].is_boolean()) { + is_support_update_remain = jj["support_update_remain"].get(); + } } - } - - if (jj.contains("support_cloud_print_only")) { - if (jj["support_cloud_print_only"].is_boolean()) { - is_support_cloud_print_only = jj["support_cloud_print_only"].get(); - } - } - - if (jj.contains("support_command_ams_switch")) { - if (jj["support_command_ams_switch"].is_boolean()) { - is_support_command_ams_switch = jj["support_command_ams_switch"].get(); - } - } - - if (jj.contains("support_mqtt_alive")) { - if (jj["support_mqtt_alive"].is_boolean()) { - is_support_mqtt_alive = jj["support_mqtt_alive"].get(); - } - } - - if (jj.contains("support_tunnel_mqtt")) { - if (jj["support_tunnel_mqtt"].is_boolean()) { - is_support_tunnel_mqtt = jj["support_tunnel_mqtt"].get(); - } - } - if (jj.contains("support_motor_noise_cali")) { - if (jj["support_motor_noise_cali"].is_boolean()) { - is_support_motor_noise_cali = jj["support_motor_noise_cali"].get(); + if (jj.contains("support_auto_leveling")) { + if (jj["support_auto_leveling"].is_boolean()) { + is_support_auto_leveling = jj["support_auto_leveling"].get(); + } } - } - if (jj.contains("support_timelapse")) { - if (jj["support_timelapse"].is_boolean()) { - is_support_timelapse = jj["support_timelapse"].get(); + if (jj.contains("support_auto_recovery_step_loss")) { + if (jj["support_auto_recovery_step_loss"].is_boolean()) { + is_support_auto_recovery_step_loss = jj["support_auto_recovery_step_loss"].get(); + } } - } - if (jj.contains("support_user_preset")) { - if (jj["support_user_preset"].is_boolean()) { - is_support_user_preset = jj["support_user_preset"].get(); + if (jj.contains("support_ams_humidity")) { + if (jj["support_ams_humidity"].is_boolean()) { + is_support_ams_humidity = jj["support_ams_humidity"].get(); + } } - } - if (jj.contains("nozzle_max_temperature")) { - if (jj["nozzle_max_temperature"].is_number_integer()) { - nozzle_max_temperature = jj["nozzle_max_temperature"].get(); + if (jj.contains("support_prompt_sound")) { + if (jj["support_prompt_sound"].is_boolean()) { + is_support_prompt_sound = jj["support_prompt_sound"].get(); + } } - } - if (jj.contains("bed_temperature_limit")) { - if (jj["bed_temperature_limit"].is_number_integer()) { - bed_temperature_limit = jj["bed_temperature_limit"].get(); + //if (jj.contains("support_filament_tangle_detect")) { + // if (jj["support_filament_tangle_detect"].is_boolean()) { + // is_support_filament_tangle_detect = jj["support_filament_tangle_detect"].get(); + // } + //} + + if (jj.contains("support_1080dpi")) { + if (jj["support_1080dpi"].is_boolean()) { + is_support_1080dpi = jj["support_1080dpi"].get(); + } + } + + if (jj.contains("support_cloud_print_only")) { + if (jj["support_cloud_print_only"].is_boolean()) { + is_support_cloud_print_only = jj["support_cloud_print_only"].get(); + } + } + + if (jj.contains("support_command_ams_switch")) { + if (jj["support_command_ams_switch"].is_boolean()) { + is_support_command_ams_switch = jj["support_command_ams_switch"].get(); + } + } + + if (jj.contains("support_mqtt_alive")) { + if (jj["support_mqtt_alive"].is_boolean()) { + is_support_mqtt_alive = jj["support_mqtt_alive"].get(); + } + } + + if (jj.contains("support_motor_noise_cali")) { + if (jj["support_motor_noise_cali"].is_boolean()) { + is_support_motor_noise_cali = jj["support_motor_noise_cali"].get(); + } + } + + if (jj.contains("support_timelapse")) { + if (jj["support_timelapse"].is_boolean()) { + is_support_timelapse = jj["support_timelapse"].get(); + } + } + + if (jj.contains("support_user_preset")) { + if (jj["support_user_preset"].is_boolean()) { + is_support_user_preset = jj["support_user_preset"].get(); + } + } + + if (jj.contains("nozzle_max_temperature")) { + if (jj["nozzle_max_temperature"].is_number_integer()) { + nozzle_max_temperature = jj["nozzle_max_temperature"].get(); + } + } + + if (jj.contains("bed_temperature_limit")) { + if (jj["bed_temperature_limit"].is_number_integer()) { + bed_temperature_limit = jj["bed_temperature_limit"].get(); + } } } @@ -2962,7 +3071,7 @@ int MachineObject::parse_json(std::string payload) if (jj["errno"].is_number()) { if (jj["errno"].get() == -2) { wxString text = _L("The current chamber temperature or the target chamber temperature exceeds 45\u2103.In order to avoid extruder clogging,low temperature filament(PLA/PETG/TPU) is not allowed to be loaded."); - GUI::wxGetApp().show_dialog(text); + GUI::wxGetApp().push_notification(text); } } } @@ -2982,7 +3091,7 @@ int MachineObject::parse_json(std::string payload) #if __WXOSX__ set_ctt_dlg(text); #else - GUI::wxGetApp().show_dialog(text); + GUI::wxGetApp().push_notification(text); #endif } } @@ -2998,21 +3107,6 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("print_type")) { print_type = jj["print_type"].get(); } - - if (jj.contains("home_flag")) { - home_flag = jj["home_flag"].get(); - parse_status(home_flag); - } - if (jj.contains("hw_switch_state")) { - hw_switch_state = jj["hw_switch_state"].get(); - } - - if (jj.contains("mc_remaining_time")) { - if (jj["mc_remaining_time"].is_string()) - mc_left_time = stoi(j["print"]["mc_remaining_time"].get()) * 60; - else if (jj["mc_remaining_time"].is_number_integer()) - mc_left_time = j["print"]["mc_remaining_time"].get() * 60; - } if (jj.contains("mc_percent")) { if (jj["mc_percent"].is_string()) mc_print_percent = stoi(j["print"]["mc_percent"].get()); @@ -3033,74 +3127,69 @@ int MachineObject::parse_json(std::string payload) if (jj.contains("mc_print_error_code")) { if (jj["mc_print_error_code"].is_number()) mc_print_error_code = jj["mc_print_error_code"].get(); - } - if (jj.contains("mc_print_line_number")) { - if (jj["mc_print_line_number"].is_string() && !jj["mc_print_line_number"].is_null()) - mc_print_line_number = atoi(jj["mc_print_line_number"].get().c_str()); + if (jj.contains("mc_remaining_time")) { + if (jj["mc_remaining_time"].is_string()) + mc_left_time = stoi(j["print"]["mc_remaining_time"].get()) * 60; + else if (jj["mc_remaining_time"].is_number_integer()) + mc_left_time = j["print"]["mc_remaining_time"].get() * 60; } if (jj.contains("print_error")) { if (jj["print_error"].is_number()) print_error = jj["print_error"].get(); } - + if (!key_field_only) { + if (jj.contains("home_flag")) { + home_flag = jj["home_flag"].get(); + parse_status(home_flag); + } + if (jj.contains("hw_switch_state")) { + hw_switch_state = jj["hw_switch_state"].get(); + } + if (jj.contains("mc_print_line_number")) { + if (jj["mc_print_line_number"].is_string() && !jj["mc_print_line_number"].is_null()) + mc_print_line_number = atoi(jj["mc_print_line_number"].get().c_str()); + } + } #pragma endregion #pragma region online - // parse online info - try { - if (jj.contains("online")) { - if (jj["online"].contains("ahb")) { - if (jj["online"]["ahb"].get()) { - online_ahb = true; - } else { - online_ahb = false; + if (!key_field_only) { + // parse online info + try { + if (jj.contains("online")) { + if (jj["online"].contains("ahb")) { + if (jj["online"]["ahb"].get()) { + online_ahb = true; + } else { + online_ahb = false; + } + } + if (jj["online"].contains("rfid")) { + if (jj["online"]["rfid"].get()) { + online_rfid = true; + } else { + online_rfid = false; + } + } + std::string str = jj.dump(); + if (jj["online"].contains("version")) { + online_version = jj["online"]["version"].get(); + } + if (last_online_version != online_version) { + last_online_version = online_version; + GUI::wxGetApp().CallAfter([this] { + this->command_get_version(); + }); } } - if (jj["online"].contains("rfid")) { - if (jj["online"]["rfid"].get()) { - online_rfid = true; - } else { - online_rfid = false; - } - } - std::string str = jj.dump(); - if (jj["online"].contains("version")) { - online_version = jj["online"]["version"].get(); - } - if (last_online_version != online_version) { - last_online_version = online_version; - GUI::wxGetApp().CallAfter([this] { - this->command_get_version(); - }); - } + } catch (...) { + ; } - } catch (...) { - ; } #pragma endregion #pragma region print_task - if (jj.contains("printer_type")) { - printer_type = parse_printer_type(jj["printer_type"].get()); - } - - if (jj.contains("subtask_name")) { - subtask_name = jj["subtask_name"].get(); - } - if (jj.contains("layer_num")) { - curr_layer = jj["layer_num"].get(); - } - if (jj.contains("total_layer_num")) { - total_layers = jj["total_layer_num"].get(); - if (total_layers == 0) - is_support_layer_num = false; - else - is_support_layer_num = true; - } else { - is_support_layer_num = false; - } - if (jj.contains("gcode_state")) { this->set_print_state(jj["gcode_state"].get()); } @@ -3112,26 +3201,52 @@ int MachineObject::parse_json(std::string payload) is_support_wait_sending_finish = false; } - if (jj.contains("queue_number")) { - this->queue_number = jj["queue_number"].get(); - } else { - this->queue_number = 0; + if (jj.contains("subtask_name")) { + subtask_name = jj["subtask_name"].get(); } - if (jj.contains("task_id")) { - this->task_id_ = jj["task_id"].get(); - } + if (!key_field_only) { + if (jj.contains("printer_type")) { + printer_type = parse_printer_type(jj["printer_type"].get()); + } - if (jj.contains("gcode_file")) - this->m_gcode_file = jj["gcode_file"].get(); - if (jj.contains("gcode_file_prepare_percent")) { - std::string percent_str = jj["gcode_file_prepare_percent"].get(); - if (!percent_str.empty()) { - try{ - this->gcode_file_prepare_percent = atoi(percent_str.c_str()); - } catch(...) {} + if (jj.contains("layer_num")) { + curr_layer = jj["layer_num"].get(); + } + if (jj.contains("total_layer_num")) { + total_layers = jj["total_layer_num"].get(); + if (total_layers == 0) + is_support_layer_num = false; + else + is_support_layer_num = true; + } + else { + is_support_layer_num = false; + } + if (jj.contains("queue_number")) { + this->queue_number = jj["queue_number"].get(); + } + else { + this->queue_number = 0; + } + + if (jj.contains("task_id")) { + this->task_id_ = jj["task_id"].get(); + } + + if (jj.contains("gcode_file")) + this->m_gcode_file = jj["gcode_file"].get(); + if (jj.contains("gcode_file_prepare_percent")) { + std::string percent_str = jj["gcode_file_prepare_percent"].get(); + if (!percent_str.empty()) { + try { + this->gcode_file_prepare_percent = atoi(percent_str.c_str()); + } + catch (...) {} + } } } + if (jj.contains("project_id") && jj.contains("profile_id") && jj.contains("subtask_id") @@ -3170,99 +3285,104 @@ int MachineObject::parse_json(std::string payload) #pragma endregion #pragma region status - /* temperature */ - if (jj.contains("bed_temper")) { - if (jj["bed_temper"].is_number()) { - bed_temp = jj["bed_temper"].get(); + if (!key_field_only) { + /* temperature */ + if (jj.contains("bed_temper")) { + if (jj["bed_temper"].is_number()) { + bed_temp = jj["bed_temper"].get(); + } } - } - if (jj.contains("bed_target_temper")) { - if (jj["bed_target_temper"].is_number()) { - bed_temp_target = jj["bed_target_temper"].get(); + if (jj.contains("bed_target_temper")) { + if (jj["bed_target_temper"].is_number()) { + bed_temp_target = jj["bed_target_temper"].get(); + } } - } - if (jj.contains("frame_temper")) { - if (jj["frame_temper"].is_number()) { - frame_temp = jj["frame_temper"].get(); + if (jj.contains("frame_temper")) { + if (jj["frame_temper"].is_number()) { + frame_temp = jj["frame_temper"].get(); + } } - } - if (jj.contains("nozzle_temper")) { - if (jj["nozzle_temper"].is_number()) { - nozzle_temp = jj["nozzle_temper"].get(); + if (jj.contains("nozzle_temper")) { + if (jj["nozzle_temper"].is_number()) { + nozzle_temp = jj["nozzle_temper"].get(); + } } - } - if (jj.contains("nozzle_target_temper")) { - if (jj["nozzle_target_temper"].is_number()) { - nozzle_temp_target = jj["nozzle_target_temper"].get(); + if (jj.contains("nozzle_target_temper")) { + if (jj["nozzle_target_temper"].is_number()) { + nozzle_temp_target = jj["nozzle_target_temper"].get(); + } } - } - if (jj.contains("chamber_temper")) { - if (jj["chamber_temper"].is_number()) { - chamber_temp = jj["chamber_temper"].get(); + if (jj.contains("chamber_temper")) { + if (jj["chamber_temper"].is_number()) { + chamber_temp = jj["chamber_temper"].get(); + } } - } - if (jj.contains("ctt")) { - if (jj["ctt"].is_number()) { - chamber_temp_target = jj["ctt"].get(); + if (jj.contains("ctt")) { + if (jj["ctt"].is_number()) { + chamber_temp_target = jj["ctt"].get(); + } } - } - /* signals */ - if (jj.contains("link_th_state")) - link_th = jj["link_th_state"].get(); - if (jj.contains("link_ams_state")) - link_ams = jj["link_ams_state"].get(); - if (jj.contains("wifi_signal")) - wifi_signal = jj["wifi_signal"].get(); + /* signals */ + if (jj.contains("link_th_state")) + link_th = jj["link_th_state"].get(); + if (jj.contains("link_ams_state")) + link_ams = jj["link_ams_state"].get(); + if (jj.contains("wifi_signal")) + wifi_signal = jj["wifi_signal"].get(); - /* cooling */ - if (jj.contains("fan_gear")) { - fan_gear = jj["fan_gear"].get(); - big_fan2_speed = (int)((fan_gear & 0x00FF0000) >> 16); - big_fan1_speed = (int)((fan_gear & 0x0000FF00) >> 8); - cooling_fan_speed= (int)((fan_gear & 0x000000FF) >> 0); - } - else { - if (jj.contains("cooling_fan_speed")) { - cooling_fan_speed = stoi(jj["cooling_fan_speed"].get()); - cooling_fan_speed = round( floor(cooling_fan_speed / float(1.5)) * float(25.5) ); + /* cooling */ + if (jj.contains("fan_gear")) { + fan_gear = jj["fan_gear"].get(); + big_fan2_speed = (int)((fan_gear & 0x00FF0000) >> 16); + big_fan1_speed = (int)((fan_gear & 0x0000FF00) >> 8); + cooling_fan_speed = (int)((fan_gear & 0x000000FF) >> 0); } else { - cooling_fan_speed = 0; + if (jj.contains("cooling_fan_speed")) { + cooling_fan_speed = stoi(jj["cooling_fan_speed"].get()); + cooling_fan_speed = round(floor(cooling_fan_speed / float(1.5)) * float(25.5)); + } + else { + cooling_fan_speed = 0; + } + + if (jj.contains("big_fan1_speed")) { + big_fan1_speed = stoi(jj["big_fan1_speed"].get()); + big_fan1_speed = round( floor(big_fan1_speed / float(1.5)) * float(25.5) ); + } + else { + big_fan1_speed = 0; + } + + if (jj.contains("big_fan2_speed")) { + big_fan2_speed = stoi(jj["big_fan2_speed"].get()); + big_fan2_speed = round( floor(big_fan2_speed / float(1.5)) * float(25.5) ); + } + else { + big_fan2_speed = 0; + } } - if (jj.contains("big_fan1_speed")) { - big_fan1_speed = stoi(jj["big_fan1_speed"].get()); - big_fan1_speed = round( floor(big_fan1_speed / float(1.5)) * float(25.5) ); + if (jj.contains("heatbreak_fan_speed")) { + heatbreak_fan_speed = stoi(jj["heatbreak_fan_speed"].get()); } - else { - big_fan1_speed = 0; - } - - if (jj.contains("big_fan2_speed")) { - big_fan2_speed = stoi(jj["big_fan2_speed"].get()); - big_fan2_speed = round( floor(big_fan2_speed / float(1.5)) * float(25.5) ); - } - else { - big_fan2_speed = 0; - } - } - - if (jj.contains("heatbreak_fan_speed")) { - heatbreak_fan_speed = stoi(jj["heatbreak_fan_speed"].get()); - } - /* parse speed */ - try { - if (jj.contains("spd_lvl")) { - printing_speed_lvl = (PrintingSpeedLevel)jj["spd_lvl"].get(); + /* parse speed */ + try { + if (jj.contains("spd_lvl")) { + printing_speed_lvl = (PrintingSpeedLevel)jj["spd_lvl"].get(); + } + if (jj.contains("spd_mag")) { + printing_speed_mag = jj["spd_mag"].get(); + } + if (jj.contains("heatbreak_fan_speed")) { + heatbreak_fan_speed = stoi(jj["heatbreak_fan_speed"].get()); + } } - if (jj.contains("spd_mag")) { - printing_speed_mag = jj["spd_mag"].get(); + catch (...) { + ; } } - catch (...) { - ; - } try { if (jj.contains("stg")) { @@ -3283,115 +3403,119 @@ int MachineObject::parse_json(std::string payload) ; } - /*get filam_bak*/ - try { - if (jj.contains("filam_bak")) { - is_support_show_filament_backup = true; - filam_bak.clear(); - if (jj["filam_bak"].is_array()) { - for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) { - filam_bak.push_back(it.value().get()); + if (!key_field_only) { + /*get filam_bak*/ + try { + if (jj.contains("filam_bak")) { + is_support_show_filament_backup = true; + filam_bak.clear(); + if (jj["filam_bak"].is_array()) { + for (auto it = jj["filam_bak"].begin(); it != jj["filam_bak"].end(); it++) { + filam_bak.push_back(it.value().get()); + } } } - } - else { - is_support_show_filament_backup = false; - } - } - catch (...) { - ; - } - - /* get fimware type */ - try { - if (jj.contains("mess_production_state")) { - if (jj["mess_production_state"].get() == "engineer") - firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; - else if (jj["mess_production_state"].get() == "product") - firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; - } - } - catch (...) { - ; - } - - try { - if (jj.contains("lifecycle")) { - if (jj["lifecycle"].get() == "engineer") - lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; - else if (jj["lifecycle"].get() == "product") - lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; - } - } - catch (...) { - ; - } - - try { - if (jj.contains("lights_report") && jj["lights_report"].is_array()) { - for (auto it = jj["lights_report"].begin(); it != jj["lights_report"].end(); it++) { - if ((*it)["node"].get().compare("chamber_light") == 0) - chamber_light = light_effect_parse((*it)["mode"].get()); - if ((*it)["node"].get().compare("work_light") == 0) - work_light = light_effect_parse((*it)["mode"].get()); - } - } - } - catch (...) { - ; - } - // media - try { - if (jj.contains("sdcard")) { - if (jj["sdcard"].get()) - sdcard_state = MachineObject::SdcardState::HAS_SDCARD_NORMAL; - else - sdcard_state = MachineObject::SdcardState::NO_SDCARD; - } else { - //do not check sdcard if no sdcard field - sdcard_state = MachineObject::SdcardState::NO_SDCARD; - } - } - catch (...) { - ; - } -#pragma endregion - try { - if (jj.contains("nozzle_diameter")) { - - if (nozzle_setting_hold_count > 0) { - nozzle_setting_hold_count--; - } else { - if (jj["nozzle_diameter"].is_number_float()) { - nozzle_diameter = jj["nozzle_diameter"].get(); - } - else if (jj["nozzle_diameter"].is_string()) { - nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); - } - } - - - } - } - catch(...) { - ; - } - - try { - if (jj.contains("nozzle_type")) { - - if (nozzle_setting_hold_count > 0) { - nozzle_setting_hold_count--; - } else { - if (jj["nozzle_type"].is_string()) { - nozzle_type = jj["nozzle_type"].get(); + is_support_show_filament_backup = false; + } + } + catch (...) { + ; + } + + /* get fimware type */ + try { + if (jj.contains("mess_production_state")) { + if (jj["mess_production_state"].get() == "engineer") + firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; + else if (jj["mess_production_state"].get() == "product") + firmware_type = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; + } + } + catch (...) { + ; + } + } + if (!key_field_only) { + try { + if (jj.contains("lifecycle")) { + if (jj["lifecycle"].get() == "engineer") + lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_ENGINEER; + else if (jj["lifecycle"].get() == "product") + lifecycle = PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION; + } + } + catch (...) { + ; + } + + try { + if (jj.contains("lights_report") && jj["lights_report"].is_array()) { + for (auto it = jj["lights_report"].begin(); it != jj["lights_report"].end(); it++) { + if ((*it)["node"].get().compare("chamber_light") == 0) + chamber_light = light_effect_parse((*it)["mode"].get()); + if ((*it)["node"].get().compare("work_light") == 0) + work_light = light_effect_parse((*it)["mode"].get()); } } } + catch (...) { + ; + } + // media + try { + if (jj.contains("sdcard")) { + if (jj["sdcard"].get()) + sdcard_state = MachineObject::SdcardState::HAS_SDCARD_NORMAL; + else + sdcard_state = MachineObject::SdcardState::NO_SDCARD; + } else { + //do not check sdcard if no sdcard field + sdcard_state = MachineObject::SdcardState::NO_SDCARD; + } + } + catch (...) { + ; + } } - catch (...) { - ; +#pragma endregion + if (!key_field_only) { + try { + if (jj.contains("nozzle_diameter")) { + if (nozzle_setting_hold_count > 0) { + nozzle_setting_hold_count--; + } else { + if (jj["nozzle_diameter"].is_number_float()) { + nozzle_diameter = jj["nozzle_diameter"].get(); + } + else if (jj["nozzle_diameter"].is_string()) { + nozzle_diameter = string_to_float(jj["nozzle_diameter"].get()); + } + } + + + } + } + catch(...) { + ; + } + + try { + if (jj.contains("nozzle_type")) { + + if (nozzle_setting_hold_count > 0) { + nozzle_setting_hold_count--; + } + else { + if (jj["nozzle_type"].is_string()) { + nozzle_type = jj["nozzle_type"].get(); + } + } + } + } + catch (...) { + ; + } } #pragma region upgrade @@ -3492,147 +3616,151 @@ int MachineObject::parse_json(std::string payload) #pragma endregion #pragma region camera - // parse camera info - try { - if (jj.contains("ipcam")) { - json const & ipcam = jj["ipcam"]; - if (ipcam.contains("ipcam_record")) { - if (camera_recording_hold_count > 0) - camera_recording_hold_count--; - else { - if (ipcam["ipcam_record"].get() == "enable") { - camera_recording_when_printing = true; - } + if (!key_field_only) { + // parse camera info + try { + if (jj.contains("ipcam")) { + json const & ipcam = jj["ipcam"]; + if (ipcam.contains("ipcam_record")) { + if (camera_recording_hold_count > 0) + camera_recording_hold_count--; else { - camera_recording_when_printing = false; - } - } - } - if (ipcam.contains("timelapse")) { - if (camera_timelapse_hold_count > 0) - camera_timelapse_hold_count--; - else { - if (ipcam["timelapse"].get() == "enable") { - camera_timelapse = true; - } - else { - camera_timelapse = false; - } - } - } - if (ipcam.contains("ipcam_dev")) { - if (ipcam["ipcam_dev"].get() == "1") { - has_ipcam = true; - } else { - has_ipcam = false; - } - } - if (ipcam.contains("resolution")) { - if (camera_resolution_hold_count > 0) - camera_resolution_hold_count--; - else { - camera_resolution = ipcam["resolution"].get(); - } - } - if (ipcam.contains("resolution_supported")) { - std::vector resolution_supported; - for (auto res : ipcam["resolution_supported"]) - resolution_supported.emplace_back(res.get()); - camera_resolution_supported.swap(resolution_supported); - } - if (ipcam.contains("liveview")) { - char const *local_protos[] = {"none", "disabled", "local", "rtsps", "rtsp"}; - liveview_local = enum_index_of(ipcam["liveview"].value("local", "none").c_str(), local_protos, 5, LiveviewLocal::LVL_None); - liveview_remote = ipcam["liveview"].value("remote", "disabled") == "enabled"; - } - if (ipcam.contains("file")) { - file_local = ipcam["file"].value("local", "disabled") == "enabled"; - file_remote = ipcam["file"].value("remote", "disabled") == "enabled"; - file_model_download = ipcam["file"].value("model_download", "disabled") == "enabled"; - } - virtual_camera = ipcam.value("virtual_camera", "disabled") == "enabled"; - if (ipcam.contains("rtsp_url")) { - local_rtsp_url = ipcam["rtsp_url"].get(); - liveview_local = local_rtsp_url.empty() ? LVL_None : local_rtsp_url == "disable" - ? LVL_Disable : boost::algorithm::starts_with(local_rtsp_url, "rtsps") ? LVL_Rtsps : LVL_Rtsp; - } - if (ipcam.contains("tutk_server")) { - tutk_state = ipcam["tutk_server"].get(); - } - } - } - catch (...) { - ; - } - - try { - if (jj.contains("xcam")) { - if (xcam_ai_monitoring_hold_count > 0) - xcam_ai_monitoring_hold_count--; - else { - if (jj["xcam"].contains("printing_monitor")) { - // new protocol - xcam_ai_monitoring = jj["xcam"]["printing_monitor"].get(); - } else { - // old version protocol - if (jj["xcam"].contains("spaghetti_detector")) { - xcam_ai_monitoring = jj["xcam"]["spaghetti_detector"].get(); - if (jj["xcam"].contains("print_halt")) { - bool print_halt = jj["xcam"]["print_halt"].get(); - if (print_halt) { xcam_ai_monitoring_sensitivity = "medium"; } + if (ipcam["ipcam_record"].get() == "enable") { + camera_recording_when_printing = true; + } + else { + camera_recording_when_printing = false; } } } - if (jj["xcam"].contains("halt_print_sensitivity")) { - xcam_ai_monitoring_sensitivity = jj["xcam"]["halt_print_sensitivity"].get(); + if (ipcam.contains("timelapse")) { + if (camera_timelapse_hold_count > 0) + camera_timelapse_hold_count--; + else { + if (ipcam["timelapse"].get() == "enable") { + camera_timelapse = true; + } + else { + camera_timelapse = false; + } + } } - } - - if (xcam_first_layer_hold_count > 0) - xcam_first_layer_hold_count--; - else { - if (jj["xcam"].contains("first_layer_inspector")) { - xcam_first_layer_inspector = jj["xcam"]["first_layer_inspector"].get(); + if (ipcam.contains("ipcam_dev")) { + if (ipcam["ipcam_dev"].get() == "1") { + has_ipcam = true; + } else { + has_ipcam = false; + } } - } - - if (xcam_buildplate_marker_hold_count > 0) - xcam_buildplate_marker_hold_count--; - else { - if (jj["xcam"].contains("buildplate_marker_detector")) { - xcam_buildplate_marker_detector = jj["xcam"]["buildplate_marker_detector"].get(); - is_support_build_plate_marker_detect = true; - } else { - is_support_build_plate_marker_detect = false; + if (ipcam.contains("resolution")) { + if (camera_resolution_hold_count > 0) + camera_resolution_hold_count--; + else { + camera_resolution = ipcam["resolution"].get(); + } + } + if (ipcam.contains("resolution_supported")) { + std::vector resolution_supported; + for (auto res : ipcam["resolution_supported"]) + resolution_supported.emplace_back(res.get()); + camera_resolution_supported.swap(resolution_supported); + } + if (ipcam.contains("liveview")) { + char const *local_protos[] = {"none", "disabled", "local", "rtsps", "rtsp"}; + liveview_local = enum_index_of(ipcam["liveview"].value("local", "none").c_str(), local_protos, 5, LiveviewLocal::LVL_None); + liveview_remote = ipcam["liveview"].value("remote", "disabled") == "enabled"; + } + if (ipcam.contains("file")) { + file_local = ipcam["file"].value("local", "disabled") == "enabled"; + file_remote = ipcam["file"].value("remote", "disabled") == "enabled"; + file_model_download = ipcam["file"].value("model_download", "disabled") == "enabled"; + } + virtual_camera = ipcam.value("virtual_camera", "disabled") == "enabled"; + if (ipcam.contains("rtsp_url")) { + local_rtsp_url = ipcam["rtsp_url"].get(); + liveview_local = local_rtsp_url.empty() ? LVL_None : local_rtsp_url == "disable" + ? LVL_Disable : boost::algorithm::starts_with(local_rtsp_url, "rtsps") ? LVL_Rtsps : LVL_Rtsp; + } + if (ipcam.contains("tutk_server")) { + tutk_state = ipcam["tutk_server"].get(); } } } - } - catch (...) { - ; + catch (...) { + ; + } + + try { + if (jj.contains("xcam")) { + if (xcam_ai_monitoring_hold_count > 0) + xcam_ai_monitoring_hold_count--; + else { + if (jj["xcam"].contains("printing_monitor")) { + // new protocol + xcam_ai_monitoring = jj["xcam"]["printing_monitor"].get(); + } else { + // old version protocol + if (jj["xcam"].contains("spaghetti_detector")) { + xcam_ai_monitoring = jj["xcam"]["spaghetti_detector"].get(); + if (jj["xcam"].contains("print_halt")) { + bool print_halt = jj["xcam"]["print_halt"].get(); + if (print_halt) { xcam_ai_monitoring_sensitivity = "medium"; } + } + } + } + if (jj["xcam"].contains("halt_print_sensitivity")) { + xcam_ai_monitoring_sensitivity = jj["xcam"]["halt_print_sensitivity"].get(); + } + } + + if (xcam_first_layer_hold_count > 0) + xcam_first_layer_hold_count--; + else { + if (jj["xcam"].contains("first_layer_inspector")) { + xcam_first_layer_inspector = jj["xcam"]["first_layer_inspector"].get(); + } + } + + if (xcam_buildplate_marker_hold_count > 0) + xcam_buildplate_marker_hold_count--; + else { + if (jj["xcam"].contains("buildplate_marker_detector")) { + xcam_buildplate_marker_detector = jj["xcam"]["buildplate_marker_detector"].get(); + is_support_build_plate_marker_detect = true; + } else { + is_support_build_plate_marker_detect = false; + } + } + } + } + catch (...) { + ; + } } #pragma endregion #pragma region hms - // parse hms msg - try { - hms_list.clear(); - if (jj.contains("hms")) { - if (jj["hms"].is_array()) { - for (auto it = jj["hms"].begin(); it != jj["hms"].end(); it++) { - HMSItem item; - if ((*it).contains("attr") && (*it).contains("code")) { - unsigned attr = (*it)["attr"].get(); - unsigned code = (*it)["code"].get(); - item.parse_hms_info(attr, code); + if (!key_field_only) { + // parse hms msg + try { + hms_list.clear(); + if (jj.contains("hms")) { + if (jj["hms"].is_array()) { + for (auto it = jj["hms"].begin(); it != jj["hms"].end(); it++) { + HMSItem item; + if ((*it).contains("attr") && (*it).contains("code")) { + unsigned attr = (*it)["attr"].get(); + unsigned code = (*it)["code"].get(); + item.parse_hms_info(attr, code); + } + hms_list.push_back(item); } - hms_list.push_back(item); } } } - } - catch (...) { - ; + catch (...) { + ; + } } #pragma endregion @@ -3675,459 +3803,460 @@ int MachineObject::parse_json(std::string payload) if (jj["ams"].contains("tray_exist_bits")) { tray_exist_bits = stol(jj["ams"]["tray_exist_bits"].get(), nullptr, 16); } - if (jj["ams"].contains("tray_read_done_bits")) { - tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get(), nullptr, 16); - } - if (jj["ams"].contains("tray_reading_bits")) { - tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get(), nullptr, 16); - ams_support_use_ams = true; - } - if (jj["ams"].contains("tray_is_bbl_bits")) { - tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get(), nullptr, 16); - } - if (jj["ams"].contains("version")) { - if (jj["ams"]["version"].is_number()) - ams_version = jj["ams"]["version"].get(); - } - if (jj["ams"].contains("tray_now")) { - this->_parse_tray_now(jj["ams"]["tray_now"].get()); - } - if (jj["ams"].contains("tray_tar")) { - m_tray_tar = jj["ams"]["tray_tar"].get(); - } - if (jj["ams"].contains("ams_rfid_status")) - ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); - if (jj["ams"].contains("humidity")) { - if (jj["ams"]["humidity"].is_string()) { - std::string humidity_str = jj["ams"]["humidity"].get(); - try { - ams_humidity = atoi(humidity_str.c_str()); - } catch (...) { - ; - } + if (!key_field_only) { + if (jj["ams"].contains("tray_read_done_bits")) { + tray_read_done_bits = stol(jj["ams"]["tray_read_done_bits"].get(), nullptr, 16); } - } - - if (jj["ams"].contains("insert_flag") || jj["ams"].contains("power_on_flag") - || jj["ams"].contains("calibrate_remain_flag")) { - if (ams_user_setting_hold_count > 0) { - ams_user_setting_hold_count--; - } else { - if (jj["ams"].contains("insert_flag")) { - ams_insert_flag = jj["ams"]["insert_flag"].get(); - } - if (jj["ams"].contains("power_on_flag")) { - ams_power_on_flag = jj["ams"]["power_on_flag"].get(); - } - if (jj["ams"].contains("calibrate_remain_flag")) { - ams_calibrate_remain_flag = jj["ams"]["calibrate_remain_flag"].get(); - } + if (jj["ams"].contains("tray_reading_bits")) { + tray_reading_bits = stol(jj["ams"]["tray_reading_bits"].get(), nullptr, 16); + ams_support_use_ams = true; } - } - if (ams_exist_bits != last_ams_exist_bits - || last_tray_exist_bits != last_tray_exist_bits - || tray_is_bbl_bits != last_is_bbl_bits - || tray_read_done_bits != last_read_done_bits - || last_ams_version != ams_version) { - is_ams_need_update = true; - } - else { - is_ams_need_update = false; - } - - json j_ams = jj["ams"]["ams"]; - std::set ams_id_set; - - for (auto it = amsList.begin(); it != amsList.end(); it++) { - ams_id_set.insert(it->first); - } - for (auto it = j_ams.begin(); it != j_ams.end(); it++) { - if (!it->contains("id")) continue; - std::string ams_id = (*it)["id"].get(); - ams_id_set.erase(ams_id); - Ams* curr_ams = nullptr; - auto ams_it = amsList.find(ams_id); - if (ams_it == amsList.end()) { - Ams* new_ams = new Ams(ams_id); - try { - if (!ams_id.empty()) { - int ams_id_int = atoi(ams_id.c_str()); - new_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false; - } - } - catch (...) { - ; - } - amsList.insert(std::make_pair(ams_id, new_ams)); - // new ams added event - curr_ams = new_ams; - } else { - curr_ams = ams_it->second; + if (jj["ams"].contains("tray_is_bbl_bits")) { + tray_is_bbl_bits = stol(jj["ams"]["tray_is_bbl_bits"].get(), nullptr, 16); } - if (!curr_ams) continue; - - if (it->contains("humidity")) { - std::string humidity = (*it)["humidity"].get(); - - try { - curr_ams->humidity = atoi(humidity.c_str()); - } - catch (...) { - ; - } + if (jj["ams"].contains("version")) { + if (jj["ams"]["version"].is_number()) + ams_version = jj["ams"]["version"].get(); } - - - if (it->contains("tray")) { - std::set tray_id_set; - for (auto it = curr_ams->trayList.begin(); it != curr_ams->trayList.end(); it++) { - tray_id_set.insert(it->first); - } - for (auto tray_it = (*it)["tray"].begin(); tray_it != (*it)["tray"].end(); tray_it++) { - if (!tray_it->contains("id")) continue; - std::string tray_id = (*tray_it)["id"].get(); - tray_id_set.erase(tray_id); - // compare tray_list - AmsTray* curr_tray = nullptr; - auto tray_iter = curr_ams->trayList.find(tray_id); - if (tray_iter == curr_ams->trayList.end()) { - AmsTray* new_tray = new AmsTray(tray_id); - curr_ams->trayList.insert(std::make_pair(tray_id, new_tray)); - curr_tray = new_tray; - } - else { - curr_tray = tray_iter->second; - } - if (!curr_tray) continue; - - if (curr_tray->hold_count > 0) { - curr_tray->hold_count--; - continue; - } - - curr_tray->id = (*tray_it)["id"].get(); - if (tray_it->contains("tag_uid")) - curr_tray->tag_uid = (*tray_it)["tag_uid"].get(); - else - curr_tray->tag_uid = "0"; - if (tray_it->contains("tray_info_idx") && tray_it->contains("tray_type")) { - curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); - //std::string type = (*tray_it)["tray_type"].get(); - std::string type = setting_id_to_type(curr_tray->setting_id, (*tray_it)["tray_type"].get()); - if (curr_tray->setting_id == "GFS00") { - curr_tray->type = "PLA-S"; - } - else if (curr_tray->setting_id == "GFS01") { - curr_tray->type = "PA-S"; - } else { - curr_tray->type = type; - } - if (filament_list.find(curr_tray->setting_id) == filament_list.end()) { - wxColour color = *wxWHITE; - char col_buf[10]; - sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); - try { - this->command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), "", "", std::string(col_buf), "", 0, 0); - continue; - } catch (...) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and ams_id: " << ams_id << " tray_id" << tray_id; - } - } - } else { - curr_tray->setting_id = ""; - curr_tray->type = ""; - } - if (tray_it->contains("tray_sub_brands")) - curr_tray->sub_brands = (*tray_it)["tray_sub_brands"].get(); - else - curr_tray->sub_brands = ""; - if (tray_it->contains("tray_weight")) - curr_tray->weight = (*tray_it)["tray_weight"].get(); - else - curr_tray->weight = ""; - if (tray_it->contains("tray_diameter")) - curr_tray->diameter = (*tray_it)["tray_diameter"].get(); - else - curr_tray->diameter = ""; - if (tray_it->contains("tray_temp")) - curr_tray->temp = (*tray_it)["tray_temp"].get(); - else - curr_tray->temp = ""; - if (tray_it->contains("tray_time")) - curr_tray->time = (*tray_it)["tray_time"].get(); - else - curr_tray->time = ""; - if (tray_it->contains("bed_temp_type")) - curr_tray->bed_temp_type = (*tray_it)["bed_temp_type"].get(); - else - curr_tray->bed_temp_type = ""; - if (tray_it->contains("bed_temp")) - curr_tray->bed_temp = (*tray_it)["bed_temp"].get(); - else - curr_tray->bed_temp = ""; - if (tray_it->contains("tray_color")) { - auto color = (*tray_it)["tray_color"].get(); - curr_tray->update_color_from_str(color); - } else { - curr_tray->color = ""; - } - if (tray_it->contains("nozzle_temp_max")) { - curr_tray->nozzle_temp_max = (*tray_it)["nozzle_temp_max"].get(); - } - else - curr_tray->nozzle_temp_max = ""; - if (tray_it->contains("nozzle_temp_min")) - curr_tray->nozzle_temp_min = (*tray_it)["nozzle_temp_min"].get(); - else - curr_tray->nozzle_temp_min = ""; - if (curr_tray->nozzle_temp_min != "" && curr_tray->nozzle_temp_max != "") { - try { - std::string preset_setting_id; - bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( - MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, curr_tray->setting_id, - curr_tray->tag_uid, curr_tray->nozzle_temp_min, curr_tray->nozzle_temp_max, preset_setting_id); - if (!is_equation) { - command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), curr_tray->setting_id, preset_setting_id, - curr_tray->color, curr_tray->type, - std::stoi(curr_tray->nozzle_temp_min), - std::stoi(curr_tray->nozzle_temp_max)); - } - } catch (...) { - BOOST_LOG_TRIVIAL(info) << "check fail and curr_tray ams_id" << ams_id << " curr_tray tray_id"<contains("xcam_info")) - curr_tray->xcam_info = (*tray_it)["xcam_info"].get(); - else - curr_tray->xcam_info = ""; - if (tray_it->contains("tray_uuid")) - curr_tray->uuid = (*tray_it)["tray_uuid"].get(); - else - curr_tray->uuid = "0"; - - if (tray_it->contains("ctype")) - curr_tray->ctype = (*tray_it)["ctype"].get(); - else - curr_tray->ctype = 0; - curr_tray->cols.clear(); - if (tray_it->contains("cols")) { - if ((*tray_it)["cols"].is_array()) { - for (auto it = (*tray_it)["cols"].begin(); it != (*tray_it)["cols"].end(); it++) { - curr_tray->cols.push_back(it.value().get()); - } - } - } - - if (tray_it->contains("remain")) { - curr_tray->remain = (*tray_it)["remain"].get(); - } else { - curr_tray->remain = -1; - } - int ams_id_int = 0; - int tray_id_int = 0; + if (jj["ams"].contains("tray_now")) { + this->_parse_tray_now(jj["ams"]["tray_now"].get()); + } + if (jj["ams"].contains("tray_tar")) { + m_tray_tar = jj["ams"]["tray_tar"].get(); + } + if (jj["ams"].contains("ams_rfid_status")) + ams_rfid_status = jj["ams"]["ams_rfid_status"].get(); + if (jj["ams"].contains("humidity")) { + if (jj["ams"]["humidity"].is_string()) { + std::string humidity_str = jj["ams"]["humidity"].get(); try { - if (!ams_id.empty() && !curr_tray->id.empty()) { - ams_id_int = atoi(ams_id.c_str()); - tray_id_int = atoi(curr_tray->id.c_str()); - curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false; + ams_humidity = atoi(humidity_str.c_str()); + } catch (...) { + ; + } + } + } + + if (jj["ams"].contains("insert_flag") || jj["ams"].contains("power_on_flag") + || jj["ams"].contains("calibrate_remain_flag")) { + if (ams_user_setting_hold_count > 0) { + ams_user_setting_hold_count--; + } else { + if (jj["ams"].contains("insert_flag")) { + ams_insert_flag = jj["ams"]["insert_flag"].get(); + } + if (jj["ams"].contains("power_on_flag")) { + ams_power_on_flag = jj["ams"]["power_on_flag"].get(); + } + if (jj["ams"].contains("calibrate_remain_flag")) { + ams_calibrate_remain_flag = jj["ams"]["calibrate_remain_flag"].get(); + } + } + } + if (ams_exist_bits != last_ams_exist_bits + || last_tray_exist_bits != last_tray_exist_bits + || tray_is_bbl_bits != last_is_bbl_bits + || tray_read_done_bits != last_read_done_bits + || last_ams_version != ams_version) { + is_ams_need_update = true; + } + else { + is_ams_need_update = false; + } + + json j_ams = jj["ams"]["ams"]; + std::set ams_id_set; + + for (auto it = amsList.begin(); it != amsList.end(); it++) { + ams_id_set.insert(it->first); + } + for (auto it = j_ams.begin(); it != j_ams.end(); it++) { + if (!it->contains("id")) continue; + std::string ams_id = (*it)["id"].get(); + ams_id_set.erase(ams_id); + Ams* curr_ams = nullptr; + auto ams_it = amsList.find(ams_id); + if (ams_it == amsList.end()) { + Ams* new_ams = new Ams(ams_id); + try { + if (!ams_id.empty()) { + int ams_id_int = atoi(ams_id.c_str()); + new_ams->is_exists = (ams_exist_bits & (1 << ams_id_int)) != 0 ? true : false; } } catch (...) { + ; } - if (tray_it->contains("setting_id")) { - curr_tray->filament_setting_id = (*tray_it)["setting_id"].get(); + amsList.insert(std::make_pair(ams_id, new_ams)); + // new ams added event + curr_ams = new_ams; + } else { + curr_ams = ams_it->second; + } + if (!curr_ams) continue; + + if (it->contains("humidity")) { + std::string humidity = (*it)["humidity"].get(); + + try { + curr_ams->humidity = atoi(humidity.c_str()); } - - - auto curr_time = std::chrono::system_clock::now(); - auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); - if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 - || ams_id_int != (extrusion_cali_set_tray_id / 4) - || tray_id_int != (extrusion_cali_set_tray_id % 4)) { - if (tray_it->contains("k")) { - curr_tray->k = (*tray_it)["k"].get(); - } - if (tray_it->contains("n")) { - curr_tray->n = (*tray_it)["n"].get(); - } - } - - std::string temp = tray_it->dump(); - - if (tray_it->contains("cali_idx")) { - curr_tray->cali_idx = (*tray_it)["cali_idx"].get(); + catch (...) { + ; } } - // remove not in trayList - for (auto tray_it = tray_id_set.begin(); tray_it != tray_id_set.end(); tray_it++) { - std::string tray_id = *tray_it; - auto tray = curr_ams->trayList.find(tray_id); - if (tray != curr_ams->trayList.end()) { - curr_ams->trayList.erase(tray_id); - BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id << ", tray_id=" << tray_id; + + + if (it->contains("tray")) { + std::set tray_id_set; + for (auto it = curr_ams->trayList.begin(); it != curr_ams->trayList.end(); it++) { + tray_id_set.insert(it->first); + } + for (auto tray_it = (*it)["tray"].begin(); tray_it != (*it)["tray"].end(); tray_it++) { + if (!tray_it->contains("id")) continue; + std::string tray_id = (*tray_it)["id"].get(); + tray_id_set.erase(tray_id); + // compare tray_list + AmsTray* curr_tray = nullptr; + auto tray_iter = curr_ams->trayList.find(tray_id); + if (tray_iter == curr_ams->trayList.end()) { + AmsTray* new_tray = new AmsTray(tray_id); + curr_ams->trayList.insert(std::make_pair(tray_id, new_tray)); + curr_tray = new_tray; + } + else { + curr_tray = tray_iter->second; + } + if (!curr_tray) continue; + + if (curr_tray->hold_count > 0) { + curr_tray->hold_count--; + continue; + } + + curr_tray->id = (*tray_it)["id"].get(); + if (tray_it->contains("tag_uid")) + curr_tray->tag_uid = (*tray_it)["tag_uid"].get(); + else + curr_tray->tag_uid = "0"; + if (tray_it->contains("tray_info_idx") && tray_it->contains("tray_type")) { + curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); + //std::string type = (*tray_it)["tray_type"].get(); + std::string type = setting_id_to_type(curr_tray->setting_id, (*tray_it)["tray_type"].get()); + if (curr_tray->setting_id == "GFS00") { + curr_tray->type = "PLA-S"; + } + else if (curr_tray->setting_id == "GFS01") { + curr_tray->type = "PA-S"; + } else { + curr_tray->type = type; + } + if (filament_list.find(curr_tray->setting_id) == filament_list.end()) { + wxColour color = *wxWHITE; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + try { + this->command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), "", "", std::string(col_buf), "", 0, 0); + continue; + } catch (...) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and ams_id: " << ams_id << " tray_id" << tray_id; + } + } + } else { + curr_tray->setting_id = ""; + curr_tray->type = ""; + } + if (tray_it->contains("tray_sub_brands")) + curr_tray->sub_brands = (*tray_it)["tray_sub_brands"].get(); + else + curr_tray->sub_brands = ""; + if (tray_it->contains("tray_weight")) + curr_tray->weight = (*tray_it)["tray_weight"].get(); + else + curr_tray->weight = ""; + if (tray_it->contains("tray_diameter")) + curr_tray->diameter = (*tray_it)["tray_diameter"].get(); + else + curr_tray->diameter = ""; + if (tray_it->contains("tray_temp")) + curr_tray->temp = (*tray_it)["tray_temp"].get(); + else + curr_tray->temp = ""; + if (tray_it->contains("tray_time")) + curr_tray->time = (*tray_it)["tray_time"].get(); + else + curr_tray->time = ""; + if (tray_it->contains("bed_temp_type")) + curr_tray->bed_temp_type = (*tray_it)["bed_temp_type"].get(); + else + curr_tray->bed_temp_type = ""; + if (tray_it->contains("bed_temp")) + curr_tray->bed_temp = (*tray_it)["bed_temp"].get(); + else + curr_tray->bed_temp = ""; + if (tray_it->contains("tray_color")) { + auto color = (*tray_it)["tray_color"].get(); + curr_tray->update_color_from_str(color); + } else { + curr_tray->color = ""; + } + if (tray_it->contains("nozzle_temp_max")) { + curr_tray->nozzle_temp_max = (*tray_it)["nozzle_temp_max"].get(); + } + else + curr_tray->nozzle_temp_max = ""; + if (tray_it->contains("nozzle_temp_min")) + curr_tray->nozzle_temp_min = (*tray_it)["nozzle_temp_min"].get(); + else + curr_tray->nozzle_temp_min = ""; + if (curr_tray->nozzle_temp_min != "" && curr_tray->nozzle_temp_max != "") { + try { + std::string preset_setting_id; + bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, curr_tray->setting_id, + curr_tray->tag_uid, curr_tray->nozzle_temp_min, curr_tray->nozzle_temp_max, preset_setting_id); + if (!is_equation) { + command_ams_filament_settings(std::stoi(ams_id), std::stoi(tray_id), curr_tray->setting_id, preset_setting_id, + curr_tray->color, curr_tray->type, + std::stoi(curr_tray->nozzle_temp_min), + std::stoi(curr_tray->nozzle_temp_max)); + } + } catch (...) { + BOOST_LOG_TRIVIAL(info) << "check fail and curr_tray ams_id" << ams_id << " curr_tray tray_id"<contains("xcam_info")) + curr_tray->xcam_info = (*tray_it)["xcam_info"].get(); + else + curr_tray->xcam_info = ""; + if (tray_it->contains("tray_uuid")) + curr_tray->uuid = (*tray_it)["tray_uuid"].get(); + else + curr_tray->uuid = "0"; + + if (tray_it->contains("ctype")) + curr_tray->ctype = (*tray_it)["ctype"].get(); + else + curr_tray->ctype = 0; + curr_tray->cols.clear(); + if (tray_it->contains("cols")) { + if ((*tray_it)["cols"].is_array()) { + for (auto it = (*tray_it)["cols"].begin(); it != (*tray_it)["cols"].end(); it++) { + curr_tray->cols.push_back(it.value().get()); + } + } + } + + if (tray_it->contains("remain")) { + curr_tray->remain = (*tray_it)["remain"].get(); + } else { + curr_tray->remain = -1; + } + int ams_id_int = 0; + int tray_id_int = 0; + try { + if (!ams_id.empty() && !curr_tray->id.empty()) { + ams_id_int = atoi(ams_id.c_str()); + tray_id_int = atoi(curr_tray->id.c_str()); + curr_tray->is_exists = (tray_exist_bits & (1 << (ams_id_int * 4 + tray_id_int))) != 0 ? true : false; + } + } + catch (...) { + } + if (tray_it->contains("setting_id")) { + curr_tray->filament_setting_id = (*tray_it)["setting_id"].get(); + } + auto curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); + if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 + || ams_id_int != (extrusion_cali_set_tray_id / 4) + || tray_id_int != (extrusion_cali_set_tray_id % 4)) { + if (tray_it->contains("k")) { + curr_tray->k = (*tray_it)["k"].get(); + } + if (tray_it->contains("n")) { + curr_tray->n = (*tray_it)["n"].get(); + } + } + + std::string temp = tray_it->dump(); + + if (tray_it->contains("cali_idx")) { + curr_tray->cali_idx = (*tray_it)["cali_idx"].get(); + } + } + // remove not in trayList + for (auto tray_it = tray_id_set.begin(); tray_it != tray_id_set.end(); tray_it++) { + std::string tray_id = *tray_it; + auto tray = curr_ams->trayList.find(tray_id); + if (tray != curr_ams->trayList.end()) { + curr_ams->trayList.erase(tray_id); + BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id << ", tray_id=" << tray_id; + } } } } - } - // remove not in amsList - for (auto it = ams_id_set.begin(); it != ams_id_set.end(); it++) { - std::string ams_id = *it; - auto ams = amsList.find(ams_id); - if (ams != amsList.end()) { - BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id; - amsList.erase(ams_id); + // remove not in amsList + for (auto it = ams_id_set.begin(); it != ams_id_set.end(); it++) { + std::string ams_id = *it; + auto ams = amsList.find(ams_id); + if (ams != amsList.end()) { + BOOST_LOG_TRIVIAL(trace) << "parse_json: remove ams_id=" << ams_id; + amsList.erase(ams_id); + } } } } } /* vitrual tray*/ - try { - if (jj.contains("vt_tray")) { - if (jj["vt_tray"].contains("id")) - vt_tray.id = jj["vt_tray"]["id"].get(); - auto curr_time = std::chrono::system_clock::now(); - auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); - if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 - || extrusion_cali_set_tray_id != VIRTUAL_TRAY_ID) { - if (jj["vt_tray"].contains("k")) - vt_tray.k = jj["vt_tray"]["k"].get(); - if (jj["vt_tray"].contains("n")) - vt_tray.n = jj["vt_tray"]["n"].get(); - } - ams_support_virtual_tray = true; + if (!key_field_only) { + try { + if (jj.contains("vt_tray")) { + if (jj["vt_tray"].contains("id")) + vt_tray.id = jj["vt_tray"]["id"].get(); + auto curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - extrusion_cali_set_hold_start); + if (diff.count() > HOLD_TIMEOUT || diff.count() < 0 + || extrusion_cali_set_tray_id != VIRTUAL_TRAY_ID) { + if (jj["vt_tray"].contains("k")) + vt_tray.k = jj["vt_tray"]["k"].get(); + if (jj["vt_tray"].contains("n")) + vt_tray.n = jj["vt_tray"]["n"].get(); + } + ams_support_virtual_tray = true; - if (vt_tray.hold_count > 0) { - vt_tray.hold_count--; - } else { - if (jj["vt_tray"].contains("tag_uid")) - vt_tray.tag_uid = jj["vt_tray"]["tag_uid"].get(); - else - vt_tray.tag_uid = "0"; - if (jj["vt_tray"].contains("tray_info_idx") && jj["vt_tray"].contains("tray_type")) { - vt_tray.setting_id = jj["vt_tray"]["tray_info_idx"].get(); - //std::string type = jj["vt_tray"]["tray_type"].get(); - std::string type = setting_id_to_type(vt_tray.setting_id, jj["vt_tray"]["tray_type"].get()); - if (vt_tray.setting_id == "GFS00") { - vt_tray.type = "PLA-S"; - } - else if (vt_tray.setting_id == "GFS01") { - vt_tray.type = "PA-S"; + if (vt_tray.hold_count > 0) { + vt_tray.hold_count--; + } else { + if (jj["vt_tray"].contains("tag_uid")) + vt_tray.tag_uid = jj["vt_tray"]["tag_uid"].get(); + else + vt_tray.tag_uid = "0"; + if (jj["vt_tray"].contains("tray_info_idx") && jj["vt_tray"].contains("tray_type")) { + vt_tray.setting_id = jj["vt_tray"]["tray_info_idx"].get(); + //std::string type = jj["vt_tray"]["tray_type"].get(); + std::string type = setting_id_to_type(vt_tray.setting_id, jj["vt_tray"]["tray_type"].get()); + if (vt_tray.setting_id == "GFS00") { + vt_tray.type = "PLA-S"; + } + else if (vt_tray.setting_id == "GFS01") { + vt_tray.type = "PA-S"; + } + else { + vt_tray.type = type; + } + if (filament_list.find(vt_tray.setting_id) == filament_list.end()) { + wxColour color = *wxWHITE; + char col_buf[10]; + sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + try { + BOOST_LOG_TRIVIAL(info) << "no filament_id in filament_list and reset vt_tray and the filament_id is: " << vt_tray.setting_id; + this->command_ams_filament_settings(255, std::stoi(vt_tray.id), "", "", std::string(col_buf), "", 0, 0); + } catch (...) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and tray_id" << vt_tray.id; + } + } } else { - vt_tray.type = type; + vt_tray.setting_id = ""; + vt_tray.type = ""; } - if (filament_list.find(vt_tray.setting_id) == filament_list.end()) { - wxColour color = *wxWHITE; - char col_buf[10]; - sprintf(col_buf, "%02X%02X%02XFF", (int) color.Red(), (int) color.Green(), (int) color.Blue()); + if (jj["vt_tray"].contains("tray_sub_brands")) + vt_tray.sub_brands = jj["vt_tray"]["tray_sub_brands"].get(); + else + vt_tray.sub_brands = ""; + if (jj["vt_tray"].contains("tray_weight")) + vt_tray.weight = jj["vt_tray"]["tray_weight"].get(); + else + vt_tray.weight = ""; + if (jj["vt_tray"].contains("tray_diameter")) + vt_tray.diameter = jj["vt_tray"]["tray_diameter"].get(); + else + vt_tray.diameter = ""; + if (jj["vt_tray"].contains("tray_temp")) + vt_tray.temp = jj["vt_tray"]["tray_temp"].get(); + else + vt_tray.temp = ""; + if (jj["vt_tray"].contains("tray_time")) + vt_tray.time = jj["vt_tray"]["tray_time"].get(); + else + vt_tray.time = ""; + if (jj["vt_tray"].contains("bed_temp_type")) + vt_tray.bed_temp_type = jj["vt_tray"]["bed_temp_type"].get(); + else + vt_tray.bed_temp_type = ""; + if (jj["vt_tray"].contains("bed_temp")) + vt_tray.bed_temp = jj["vt_tray"]["bed_temp"].get(); + else + vt_tray.bed_temp = ""; + if (jj["vt_tray"].contains("tray_color")) { + auto color = jj["vt_tray"]["tray_color"].get(); + vt_tray.update_color_from_str(color); + } else { + vt_tray.color = ""; + } + if (jj["vt_tray"].contains("nozzle_temp_max")) + vt_tray.nozzle_temp_max = jj["vt_tray"]["nozzle_temp_max"].get(); + else + vt_tray.nozzle_temp_max = ""; + if (jj["vt_tray"].contains("nozzle_temp_min")) + vt_tray.nozzle_temp_min = jj["vt_tray"]["nozzle_temp_min"].get(); + else + vt_tray.nozzle_temp_min = ""; + if (vt_tray.nozzle_temp_min != "" && vt_tray.nozzle_temp_max != "") { try { - BOOST_LOG_TRIVIAL(info) << "no filament_id in filament_list and reset vt_tray and the filament_id is: " << vt_tray.setting_id; - this->command_ams_filament_settings(255, std::stoi(vt_tray.id), "", "", std::string(col_buf), "", 0, 0); - } catch (...) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << " stoi error and tray_id" << vt_tray.id; + std::string preset_setting_id; + bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( + MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, vt_tray.setting_id, vt_tray.tag_uid, + vt_tray.nozzle_temp_min, vt_tray.nozzle_temp_max, preset_setting_id); + if (!is_equation) { + command_ams_filament_settings(255, std::stoi(vt_tray.id), vt_tray.setting_id, preset_setting_id, vt_tray.color, vt_tray.type, + std::stoi(vt_tray.nozzle_temp_min), std::stoi(vt_tray.nozzle_temp_max)); + } } - } - } - else { - vt_tray.setting_id = ""; - vt_tray.type = ""; - } - if (jj["vt_tray"].contains("tray_sub_brands")) - vt_tray.sub_brands = jj["vt_tray"]["tray_sub_brands"].get(); - else - vt_tray.sub_brands = ""; - if (jj["vt_tray"].contains("tray_weight")) - vt_tray.weight = jj["vt_tray"]["tray_weight"].get(); - else - vt_tray.weight = ""; - if (jj["vt_tray"].contains("tray_diameter")) - vt_tray.diameter = jj["vt_tray"]["tray_diameter"].get(); - else - vt_tray.diameter = ""; - if (jj["vt_tray"].contains("tray_temp")) - vt_tray.temp = jj["vt_tray"]["tray_temp"].get(); - else - vt_tray.temp = ""; - if (jj["vt_tray"].contains("tray_time")) - vt_tray.time = jj["vt_tray"]["tray_time"].get(); - else - vt_tray.time = ""; - if (jj["vt_tray"].contains("bed_temp_type")) - vt_tray.bed_temp_type = jj["vt_tray"]["bed_temp_type"].get(); - else - vt_tray.bed_temp_type = ""; - if (jj["vt_tray"].contains("bed_temp")) - vt_tray.bed_temp = jj["vt_tray"]["bed_temp"].get(); - else - vt_tray.bed_temp = ""; - if (jj["vt_tray"].contains("tray_color")) { - auto color = jj["vt_tray"]["tray_color"].get(); - vt_tray.update_color_from_str(color); - } else { - vt_tray.color = ""; - } - if (jj["vt_tray"].contains("nozzle_temp_max")) - vt_tray.nozzle_temp_max = jj["vt_tray"]["nozzle_temp_max"].get(); - else - vt_tray.nozzle_temp_max = ""; - if (jj["vt_tray"].contains("nozzle_temp_min")) - vt_tray.nozzle_temp_min = jj["vt_tray"]["nozzle_temp_min"].get(); - else - vt_tray.nozzle_temp_min = ""; - if (vt_tray.nozzle_temp_min != "" && vt_tray.nozzle_temp_max != "") { - try { - std::string preset_setting_id; - bool is_equation = preset_bundle->check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( - MachineObject::get_preset_printer_model_name(this->printer_type), nozzle_diameter_str, vt_tray.setting_id, vt_tray.tag_uid, - vt_tray.nozzle_temp_min, vt_tray.nozzle_temp_max, preset_setting_id); - if (!is_equation) { - command_ams_filament_settings(255, std::stoi(vt_tray.id), vt_tray.setting_id, preset_setting_id, vt_tray.color, vt_tray.type, - std::stoi(vt_tray.nozzle_temp_min), std::stoi(vt_tray.nozzle_temp_max)); + catch(...) { + BOOST_LOG_TRIVIAL(info) << "check fail and vt_tray.id" << vt_tray.id; } - } - catch(...) { - BOOST_LOG_TRIVIAL(info) << "check fail and vt_tray.id" << vt_tray.id; - } - } - if (jj["vt_tray"].contains("xcam_info")) - vt_tray.xcam_info = jj["vt_tray"]["xcam_info"].get(); - else - vt_tray.xcam_info = ""; - if (jj["vt_tray"].contains("tray_uuid")) - vt_tray.uuid = jj["vt_tray"]["tray_uuid"].get(); - else - vt_tray.uuid = "0"; + } + if (jj["vt_tray"].contains("xcam_info")) + vt_tray.xcam_info = jj["vt_tray"]["xcam_info"].get(); + else + vt_tray.xcam_info = ""; + if (jj["vt_tray"].contains("tray_uuid")) + vt_tray.uuid = jj["vt_tray"]["tray_uuid"].get(); + else + vt_tray.uuid = "0"; - if (jj["vt_tray"].contains("cali_idx")) - vt_tray.cali_idx = jj["vt_tray"]["cali_idx"].get(); - else - vt_tray.cali_idx = -1; - - vt_tray.cols.clear(); - if (jj["vt_tray"].contains("cols")) { - if (jj["vt_tray"].is_array()) { - for (auto it = jj["vt_tray"].begin(); it != jj["vt_tray"].end(); it++) { - vt_tray.cols.push_back(it.value().get()); + if (jj["vt_tray"].contains("cali_idx")) + vt_tray.cali_idx = jj["vt_tray"]["cali_idx"].get(); + else + vt_tray.cali_idx = -1; + vt_tray.cols.clear(); + if (jj["vt_tray"].contains("cols")) { + if (jj["vt_tray"].is_array()) { + for (auto it = jj["vt_tray"].begin(); it != jj["vt_tray"].end(); it++) { + vt_tray.cols.push_back(it.value().get()); + } } } - } - if (jj["vt_tray"].contains("remain")) { - vt_tray.remain = jj["vt_tray"]["remain"].get(); - } - else { - vt_tray.remain = -1; + if (jj["vt_tray"].contains("remain")) { + vt_tray.remain = jj["vt_tray"]["remain"].get(); + } + else { + vt_tray.remain = -1; + } } + } else { + ams_support_virtual_tray = false; + is_support_extrusion_cali = false; } - } else { - ams_support_virtual_tray = false; - is_support_extrusion_cali = false; } - } - catch (...) { - ; + catch (...) { + ; + } } #pragma endregion @@ -4151,10 +4280,10 @@ int MachineObject::parse_json(std::string payload) result = jj["result"].get(); if (result == "FAIL") { wxString text = _L("Failed to start printing job"); - GUI::wxGetApp().show_dialog(text); + GUI::wxGetApp().push_notification(text); } } - } else if (jj["command"].get() == "ams_filament_setting") { + } else if (jj["command"].get() == "ams_filament_setting" && !key_field_only) { // BBS trigger ams UI update ams_version = -1; @@ -4207,7 +4336,7 @@ int MachineObject::parse_json(std::string payload) } } } - } else if (jj["command"].get() == "xcam_control_set") { + } else if (jj["command"].get() == "xcam_control_set" && !key_field_only) { if (jj.contains("module_name")) { if (jj.contains("enable") || jj.contains("control")) { bool enable = false; @@ -4267,27 +4396,24 @@ int MachineObject::parse_json(std::string payload) else if (jj["result"].get() == "fail") { std::string cali_mode = jj["command"].get(); std::string reason = jj["reason"].get(); - GUI::wxGetApp().CallAfter([cali_mode, reason] { - wxString info = ""; - if (reason == "invalid nozzle_diameter" || reason == "nozzle_diameter is not supported") { - info = _L("This calibration does not support the currently selected nozzle diameter"); - } - else if (reason == "invalid handle_flowrate_cali param") { - info = _L("Current flowrate cali param is invalid"); - } - else if (reason == "nozzle_diameter is not matched") { - info = _L("Selected diameter and machine diameter do not match"); - } - else if (reason == "generate auto filament cali gcode failure") { - info = _L("Failed to generate cali gcode"); - } - else { - info = reason; - } - GUI::MessageDialog msg_dlg(nullptr, info, _L("Calibration error"), wxICON_WARNING | wxOK); - msg_dlg.ShowModal(); - BOOST_LOG_TRIVIAL(trace) << cali_mode << " result fail, reason = " << reason; - }); + wxString info = ""; + if (reason == "invalid nozzle_diameter" || reason == "nozzle_diameter is not supported") { + info = _L("This calibration does not support the currently selected nozzle diameter"); + } + else if (reason == "invalid handle_flowrate_cali param") { + info = _L("Current flowrate cali param is invalid"); + } + else if (reason == "nozzle_diameter is not matched") { + info = _L("Selected diameter and machine diameter do not match"); + } + else if (reason == "generate auto filament cali gcode failure") { + info = _L("Failed to generate cali gcode"); + } + else { + info = reason; + } + GUI::wxGetApp().push_notification(info, _L("Calibration error"), UserNotificationStyle::UNS_WARNING_CONFIRM); + BOOST_LOG_TRIVIAL(trace) << cali_mode << " result fail, reason = " << reason; } } } else if (jj["command"].get() == "extrusion_cali_set") { @@ -4490,7 +4616,7 @@ int MachineObject::parse_json(std::string payload) BOOST_LOG_TRIVIAL(info) << "no pa calib result"; } } - else if (jj["command"].get() == "flowrate_get_result") { + else if (jj["command"].get() == "flowrate_get_result" && !key_field_only) { this->reset_flow_rate_cali_result(); get_flow_calib_result = true; @@ -4521,44 +4647,47 @@ int MachineObject::parse_json(std::string payload) } } } - - try { - if (j.contains("camera")) { - if (j["camera"].contains("command")) { - if (j["camera"]["command"].get() == "ipcam_timelapse") { - if (j["camera"]["control"].get() == "enable") - this->camera_timelapse = true; - if (j["camera"]["control"].get() == "disable") - this->camera_timelapse = false; - BOOST_LOG_TRIVIAL(info) << "ack of timelapse = " << camera_timelapse; - } else if (j["camera"]["command"].get() == "ipcam_record_set") { - if (j["camera"]["control"].get() == "enable") - this->camera_recording_when_printing = true; - if (j["camera"]["control"].get() == "disable") - this->camera_recording_when_printing = false; - BOOST_LOG_TRIVIAL(info) << "ack of ipcam_record_set " << camera_recording_when_printing; - } else if (j["camera"]["command"].get() == "ipcam_resolution_set") { - this->camera_resolution = j["camera"]["resolution"].get(); - BOOST_LOG_TRIVIAL(info) << "ack of resolution = " << camera_resolution; + if (!key_field_only) { + try { + if (j.contains("camera")) { + if (j["camera"].contains("command")) { + if (j["camera"]["command"].get() == "ipcam_timelapse") { + if (j["camera"]["control"].get() == "enable") + this->camera_timelapse = true; + if (j["camera"]["control"].get() == "disable") + this->camera_timelapse = false; + BOOST_LOG_TRIVIAL(info) << "ack of timelapse = " << camera_timelapse; + } else if (j["camera"]["command"].get() == "ipcam_record_set") { + if (j["camera"]["control"].get() == "enable") + this->camera_recording_when_printing = true; + if (j["camera"]["control"].get() == "disable") + this->camera_recording_when_printing = false; + BOOST_LOG_TRIVIAL(info) << "ack of ipcam_record_set " << camera_recording_when_printing; + } else if (j["camera"]["command"].get() == "ipcam_resolution_set") { + this->camera_resolution = j["camera"]["resolution"].get(); + BOOST_LOG_TRIVIAL(info) << "ack of resolution = " << camera_resolution; + } } } - } - } catch (...) {} - - // upgrade - try { - if (j.contains("upgrade")) { - if (j["upgrade"].contains("command")) { - if (j["upgrade"]["command"].get() == "upgrade_confirm") { - this->upgrade_display_state = UpgradingInProgress; - upgrade_display_hold_count = HOLD_COUNT_MAX; - BOOST_LOG_TRIVIAL(info) << "ack of upgrade_confirm"; - } - } - } + } catch (...) {} } - catch (...) { - ; + + if (!key_field_only) { + // upgrade + try { + if (j.contains("upgrade")) { + if (j["upgrade"].contains("command")) { + if (j["upgrade"]["command"].get() == "upgrade_confirm") { + this->upgrade_display_state = UpgradingInProgress; + upgrade_display_hold_count = HOLD_COUNT_MAX; + BOOST_LOG_TRIVIAL(info) << "ack of upgrade_confirm"; + } + } + } + } + catch (...) { + ; + } } // event info @@ -4574,19 +4703,17 @@ int MachineObject::parse_json(std::string payload) } catch (...) {} - if (m_active_state == Active && !module_vers.empty() && check_version_valid() + if (!key_field_only) { + if (m_active_state == Active && !module_vers.empty() && check_version_valid() && !is_camera_busy_off()) { - m_active_state = UpdateToDate; - parse_version_func(); - if (is_support_tunnel_mqtt && connection_type() != "lan") { - m_agent->start_subscribe("tunnel"); + m_active_state = UpdateToDate; + parse_version_func(); + if (is_support_tunnel_mqtt && connection_type() != "lan") { + m_agent->start_subscribe("tunnel"); + } + parse_state_changed_event(); } - } else if (m_active_state == UpdateToDate && is_camera_busy_off()) { - m_active_state = Active; - m_agent->stop_subscribe("tunnel"); - } - - parse_state_changed_event(); + } } catch (...) { BOOST_LOG_TRIVIAL(trace) << "parse_json failed! dev_id=" << this->dev_id <<", payload = " << payload; @@ -4930,6 +5057,24 @@ bool MachineObject::is_firmware_info_valid() return m_firmware_valid; } +std::string MachineObject::get_string_from_fantype(FanType type) +{ + switch (type) { + case FanType::COOLING_FAN: + return "cooling_fan"; + case FanType::BIG_COOLING_FAN: + return "big_cooling_fan"; + case FanType::CHAMBER_FAN: + return "chamber_fan"; + default: + return ""; + } + return ""; +} + +bool DeviceManager::EnableMultiMachine = false; +bool DeviceManager::key_field_only = false; + DeviceManager::DeviceManager(NetworkAgent* agent) { m_agent = agent; @@ -5042,12 +5187,12 @@ void DeviceManager::on_machine_alive(std::string json_str) if (obj->dev_ip.compare(dev_ip) != 0) { if ( connection_name.empty() ) { - BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << obj->dev_ip << " to " << dev_ip; + BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << Slic3r::GUI::wxGetApp().format_IP(obj->dev_ip) << " to " << Slic3r::GUI::wxGetApp().format_IP(dev_ip); obj->dev_ip = dev_ip; } else { if ( obj->dev_connection_name.empty() || obj->dev_connection_name.compare(connection_name) == 0) { - BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << obj->dev_ip << " to " << dev_ip << " connection_name is " << connection_name; + BOOST_LOG_TRIVIAL(info) << "MachineObject IP changed from " << Slic3r::GUI::wxGetApp().format_IP(obj->dev_ip) << " to " << Slic3r::GUI::wxGetApp().format_IP(dev_ip) << " connection_name is " << connection_name; if(obj->dev_connection_name.empty()){obj->dev_connection_name = connection_name;} obj->dev_ip = dev_ip; } @@ -5103,7 +5248,7 @@ void DeviceManager::on_machine_alive(std::string json_str) }*/ - BOOST_LOG_TRIVIAL(debug) << "SsdpDiscovery::New Machine, ip = " << dev_ip << ", printer_name= " << dev_name << ", printer_type = " << printer_type_str << ", signal = " << printer_signal; + BOOST_LOG_TRIVIAL(info) << "SsdpDiscovery::New Machine, ip = " << Slic3r::GUI::wxGetApp().format_IP(dev_ip) << ", printer_name= " << dev_name << ", printer_type = " << printer_type_str << ", signal = " << printer_signal; } } catch (...) { @@ -5327,6 +5472,54 @@ MachineObject* DeviceManager::get_selected_machine() return nullptr; } +void DeviceManager::add_user_subscribe() +{ + /* user machine */ + std::vector dev_list; + for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { + dev_list.push_back(it->first); + BOOST_LOG_TRIVIAL(trace) << "add_user_subscribe: " << it->first; + } + m_agent->add_subscribe(dev_list); +} + +void DeviceManager::del_user_subscribe() +{ + /* user machine */ + std::vector dev_list; + for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { + dev_list.push_back(it->first); + BOOST_LOG_TRIVIAL(trace) << "del_user_subscribe: " << it->first; + } + m_agent->del_subscribe(dev_list); +} + +void DeviceManager::subscribe_device_list(std::vector dev_list) +{ + std::vector unsub_list; + subscribe_list_cache.clear(); + for (auto& it : subscribe_list_cache) { + if (it != selected_machine) { + unsub_list.push_back(it); + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: unsub dev id = " << it; + } + } + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: unsub_list size = " << unsub_list.size(); + + if (!selected_machine.empty()) { + subscribe_list_cache.push_back(selected_machine); + } + for (auto& it : dev_list) { + subscribe_list_cache.push_back(it); + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: sub dev id = " << it; + } + BOOST_LOG_TRIVIAL(trace) << "subscribe_device_list: sub_list size = " << subscribe_list_cache.size(); + if (!unsub_list.empty()) + m_agent->del_subscribe(unsub_list); + if (!dev_list.empty()) + m_agent->add_subscribe(subscribe_list_cache); +} + std::map DeviceManager::get_my_machine_list() { std::map result; @@ -5351,6 +5544,19 @@ std::map DeviceManager::get_my_machine_list() return result; } +std::map DeviceManager::get_my_cloud_machine_list() +{ + std::map result; + + for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { + if (!it->second) + continue; + if (!it->second->is_lan_mode_printer()) + result.emplace(*it); + } + return result; +} + std::string DeviceManager::get_first_online_user_machine() { for (auto it = userMachineList.begin(); it != userMachineList.end(); it++) { if (it->second && it->second->is_online()) { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index b8e7f3d451..6aca7ee5f6 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -325,6 +325,9 @@ private: std::string access_code; std::string user_access_code; + // type, time stamp, delay + std::vector> message_delay; + public: enum LIGHT_EFFECT { @@ -488,6 +491,7 @@ public: bool ams_power_on_flag { false }; bool ams_calibrate_remain_flag { false }; bool ams_auto_switch_filament_flag { false }; + bool ams_air_print_status { false }; bool ams_support_use_ams { false }; bool ams_support_virtual_tray { true }; int ams_humidity; @@ -569,7 +573,7 @@ public: int upgrade_display_state = 0; // 0 : upgrade unavailable, 1: upgrade idle, 2: upgrading, 3: upgrade_finished int upgrade_display_hold_count = 0; PrinterFirmwareType firmware_type; // engineer|production - PrinterFirmwareType lifecycle { PrinterFirmwareType::FIRMEARE_TYPE_UKNOWN }; + PrinterFirmwareType lifecycle { PrinterFirmwareType::FIRMWARE_TYPE_PRODUCTION }; std::string upgrade_progress; std::string upgrade_message; std::string upgrade_status; @@ -615,6 +619,7 @@ public: int curr_layer = 0; int total_layers = 0; bool is_support_layer_num { false }; + bool nozzle_blob_detection_enabled{ false }; int cali_version = -1; float cali_selected_nozzle_dia { 0.0 }; @@ -754,6 +759,8 @@ public: bool is_support_wait_sending_finish{false}; bool is_support_user_preset{false}; bool is_support_p1s_plus{false}; + bool is_support_nozzle_blob_detection{false}; + bool is_support_air_print_detection{false}; int nozzle_max_temperature = -1; int bed_temperature_limit = -1; @@ -844,6 +851,7 @@ public: int command_ams_user_settings(int ams_id, bool start_read_opt, bool tray_read_opt, bool remain_flag = false); int command_ams_user_settings(int ams_id, AmsOptionType op, bool value); int command_ams_switch_filament(bool switch_filament); + int command_ams_air_print_detect(bool air_print_detect); int command_ams_calibrate(int ams_id); int command_ams_filament_settings(int ams_id, int tray_id, std::string filament_id, std::string setting_id, std::string tray_color, std::string tray_type, int nozzle_temp_min, int nozzle_temp_max); int command_ams_select_tray(std::string tray_id); @@ -868,6 +876,8 @@ public: // set print option int command_set_printing_option(bool auto_recovery); + int command_nozzle_blob_detect(bool nozzle_blob_detect); + // axis string is X, Y, Z, E int command_axis_control(std::string axis, double unit = 1.0f, double input_val = 1.0f, int speed = 3000); @@ -932,7 +942,7 @@ public: int publish_json(std::string json_str, int qos = 0); int cloud_publish_json(std::string json_str, int qos = 0); int local_publish_json(std::string json_str, int qos = 0); - int parse_json(std::string payload); + int parse_json(std::string payload, bool key_filed_only = false); int publish_gcode(std::string gcode_str); std::string setting_id_to_type(std::string setting_id, std::string tray_type); @@ -946,14 +956,16 @@ public: bool m_firmware_thread_started { false }; void get_firmware_info(); bool is_firmware_info_valid(); + std::string get_string_from_fantype(FanType type); }; class DeviceManager { private: NetworkAgent* m_agent { nullptr }; - public: + static bool EnableMultiMachine; + DeviceManager(NetworkAgent* agent = nullptr); ~DeviceManager(); void set_agent(NetworkAgent* agent); @@ -978,9 +990,14 @@ public: bool set_selected_machine(std::string dev_id, bool need_disconnect = false); MachineObject* get_selected_machine(); + void add_user_subscribe(); + void del_user_subscribe(); + + void subscribe_device_list(std::vector dev_list); /* return machine has access code and user machine if login*/ std::map get_my_machine_list(); + std::map get_my_cloud_machine_list(); std::string get_first_online_user_machine(); void modify_device_name(std::string dev_id, std::string dev_name); void update_user_machine_list_info(); @@ -997,6 +1014,11 @@ public: std::map get_local_machine_list(); void load_last_machine(); + std::vector subscribe_list_cache; + + static void set_key_field_parsing(bool enable) { DeviceManager::key_field_only = enable; } + + static bool key_field_only; static json function_table; static json filaments_blacklist; diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 6738b32266..fc663c6284 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -28,6 +28,7 @@ #include "Widgets/ComboBox.hpp" #include "Widgets/TextCtrl.h" +#include "../Utils/ColorSpaceConvert.hpp" #ifdef __WXOSX__ #define wxOSX true #else @@ -82,6 +83,7 @@ wxString get_thumbnails_string(const std::vector& values) return ret_str; } + Field::~Field() { if (m_on_kill_focus) @@ -92,6 +94,11 @@ Field::~Field() m_back_to_initial_value = nullptr; if (m_back_to_sys_value) m_back_to_sys_value = nullptr; + if (getWindow()) { + wxWindow* win = getWindow(); + win->Destroy(); + win = nullptr; + } } void Field::PostInitialize() @@ -157,7 +164,7 @@ void Field::PostInitialize() } evt.Skip(); - }, getWindow()->GetId()); + }); } } @@ -502,101 +509,6 @@ void Field::sys_color_changed() #endif } -std::vector**> spools; -std::vector*> spools2; - -void switch_window_pools() -{ - for (auto p : spools) { - spools2.push_back(*p); - *p = new std::deque; - } -} - -void release_window_pools() -{ - for (auto p : spools2) { - delete p; - } - spools2.clear(); -} - -template -struct Builder -{ - Builder() - { - pool_ = new std::deque; - spools.push_back(&pool_); - } - - template - T *build(wxWindow * p, Args ...args) - { - if (pool_->empty()) { - auto t = new T(p, args...); - t->SetClientData(pool_); - return t; - } - auto t = dynamic_cast(pool_->front()); - pool_->pop_front(); - t->Reparent(p); - t->Enable(); - t->Show(); - return t; - } - std::deque* pool_; -}; - -struct wxEventFunctorRef -{ - wxEventFunctor * func; -}; - -wxEventFunctor & wxMakeEventFunctor(const int, wxEventFunctorRef func) -{ - return *func.func; -} - -struct myEvtHandler : wxEvtHandler -{ - void UnbindAll() - { - size_t cookie; - for (wxDynamicEventTableEntry *entry = GetFirstDynamicEntry(cookie); - entry; - entry = GetNextDynamicEntry(cookie)) { - // In Field, All Bind has id, but for TextInput, ComboBox, SpinInput, all not - if (entry->m_id != wxID_ANY && entry->m_lastId == wxID_ANY) - Unbind(entry->m_eventType, - wxEventFunctorRef{entry->m_fn}, - entry->m_id, - entry->m_lastId, - entry->m_callbackUserData); - //DoUnbind(entry->m_id, entry->m_lastId, entry->m_eventType, *entry->m_fn, entry->m_callbackUserData); - } - } -}; - -static void unbind_events(wxEvtHandler *h) -{ - static_cast(h)->UnbindAll(); -} - -void free_window(wxWindow *win) -{ - unbind_events(win); - for (auto c : win->GetChildren()) - if (dynamic_cast(c)) - unbind_events(c); - win->Hide(); - if (auto sizer = win->GetContainingSizer()) - sizer->Clear(); - win->Reparent(wxGetApp().mainframe); - if (win->GetClientData()) - reinterpret_cast*>(win->GetClientData())->push_back(win); -} - template bool is_defined_input_value(wxWindow* win, const ConfigOptionType& type) { @@ -661,15 +573,10 @@ void TextCtrl::BUILD() { // BBS: new param ui style // const long style = m_opt.multiline ? wxTE_MULTILINE : wxTE_PROCESS_ENTER/*0*/; - static Builder builder1; - static Builder<::TextInput> builder2; auto temp = m_opt.multiline - ? (wxWindow*)builder1.build(m_parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE) - : builder2.build(m_parent, "", "", "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); - temp->SetLabel(_L(m_opt.sidetext)); + ? (wxWindow *) new wxTextCtrl(m_parent, wxID_ANY, text_value, wxDefaultPosition, size, wxTE_MULTILINE) + : new ::TextInput(m_parent, text_value, _L(m_opt.sidetext), "", wxDefaultPosition, size, wxTE_PROCESS_ENTER); auto text_ctrl = m_opt.multiline ? (wxTextCtrl *)temp : ((TextInput *) temp)->GetTextCtrl(); - text_ctrl->SetLabel(text_value); - temp->SetSize(size); m_combine_side_text = !m_opt.multiline; if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double) text_ctrl->GetSize().GetHeight() / m_em_unit; @@ -732,7 +639,7 @@ void TextCtrl::BUILD() { if (!bEnterPressed) propagate_value(); }), temp->GetId()); - /* +/* // select all text using Ctrl+A temp->Bind(wxEVT_CHAR, ([temp](wxKeyEvent& event) { @@ -901,8 +808,7 @@ void CheckBox::BUILD() { m_last_meaningful_value = static_cast(check_value); // BBS: use ::CheckBox - static Builder<::CheckBox> builder; - auto temp = builder.build(m_parent); + auto temp = new ::CheckBox(m_parent); if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); //temp->SetBackgroundColour(*wxWHITE); temp->SetValue(check_value); @@ -1021,14 +927,8 @@ void SpinCtrl::BUILD() { ? 0 : m_opt.min; const int max_val = m_opt.max < 2147483647 ? m_opt.max : 2147483647; - static Builder builder; - auto temp = builder.build(m_parent, "", "", wxDefaultPosition, wxDefaultSize, - wxSP_ARROW_KEYS); - temp->SetSize(size); - temp->SetLabel(_L(m_opt.sidetext)); - temp->GetTextCtrl()->SetLabel(text_value); - temp->SetRange(min_val, max_val); - temp->SetValue(default_value); + auto temp = new SpinInput(m_parent, text_value, _L(m_opt.sidetext), wxDefaultPosition, size, + wxSP_ARROW_KEYS, min_val, max_val, default_value); m_combine_side_text = true; #ifdef __WXGTK3__ wxSize best_sz = temp->GetBestSize(); @@ -1051,7 +951,7 @@ void SpinCtrl::BUILD() { } propagate_value(); - }), temp->GetId()); + })); temp->Bind(wxEVT_SPINCTRL, ([this](wxCommandEvent e) { propagate_value(); }), temp->GetId()); @@ -1203,15 +1103,14 @@ void Choice::BUILD() if (m_opt.nullable) m_last_meaningful_value = dynamic_cast(m_opt.default_value.get())->get_at(0); - choice_ctrl * temp; + choice_ctrl* temp; auto dynamic_list = dynamic_lists.find(m_opt.opt_key); if (dynamic_list != dynamic_lists.end()) m_list = dynamic_list->second; if (m_opt.gui_type != ConfigOptionDef::GUIType::undefined && m_opt.gui_type != ConfigOptionDef::GUIType::select_open && m_list == nullptr) { m_is_editable = true; - static Builder builder1; - temp = builder1.build(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxTE_PROCESS_ENTER); + temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxTE_PROCESS_ENTER); } else { #ifdef UNDEIFNED__WXOSX__ // __WXOSX__ // BBS @@ -1223,12 +1122,9 @@ void Choice::BUILD() temp->SetTextCtrlStyle(wxTE_READONLY); temp->Create(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr); #else - static Builder builder2; - temp = builder2.build(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY); + temp = new choice_ctrl(m_parent, wxID_ANY, wxString(""), wxDefaultPosition, size, 0, nullptr, wxCB_READONLY); #endif //__WXOSX__ } - // temp->SetSize(size); - temp->Clear(); temp->GetDropDown().SetUseContentWidth(true); if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double) temp->GetTextCtrl()->GetSize().GetHeight() / m_em_unit; @@ -1281,9 +1177,9 @@ void Choice::BUILD() e.StopPropagation(); else e.Skip(); - }, temp->GetId()); - temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true; }, temp->GetId()); - temp->Bind(wxEVT_COMBOBOX_CLOSEUP, [this](wxCommandEvent&) { m_is_dropped = false; }, temp->GetId()); + }); + temp->Bind(wxEVT_COMBOBOX_DROPDOWN, [this](wxCommandEvent&) { m_is_dropped = true; }); + temp->Bind(wxEVT_COMBOBOX_CLOSEUP, [this](wxCommandEvent&) { m_is_dropped = false; }); temp->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { on_change_field(); }, temp->GetId()); @@ -1292,12 +1188,12 @@ void Choice::BUILD() e.Skip(); if (!bEnterPressed) propagate_value(); - }, temp->GetId() ); + } ); temp->Bind(wxEVT_TEXT_ENTER, [this](wxEvent& e) { EnterPressed enter(this); propagate_value(); - }, temp->GetId() ); + } ); } temp->SetToolTip(get_tooltip_text(temp->GetValue())); @@ -1704,6 +1600,7 @@ void ColourPicker::BUILD() if (parent_is_custom_ctrl && m_opt.height < 0) opt_height = (double)temp->GetSize().GetHeight() / m_em_unit; temp->SetFont(Slic3r::GUI::wxGetApp().normal_font()); + convert_to_picker_widget(temp); if (!wxOSX) temp->SetBackgroundStyle(wxBG_STYLE_PAINT); wxGetApp().UpdateDarkUI(temp->GetPickerCtrl()); @@ -1760,6 +1657,7 @@ void ColourPicker::set_value(const boost::any& value, bool change_event) boost::any& ColourPicker::get_value() { + save_colors_to_config(); auto colour = static_cast(window)->GetColour(); if (colour == wxTransparentColour) m_value = std::string(""); @@ -1798,6 +1696,44 @@ void ColourPicker::sys_color_changed() #endif } +void ColourPicker::on_button_click(wxCommandEvent &event) { +#if !defined(__linux__) && !defined(__LINUX__) + if (m_clrData) { + std::vector colors = wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < colors.size(); i++) { + m_clrData->SetCustomColour(i, string_to_wxColor(colors[i])); + } + } + m_picker_widget->OnButtonClick(event); +#endif +} + +void ColourPicker::convert_to_picker_widget(wxColourPickerCtrl *widget) +{ +#if !defined(__linux__) && !defined(__LINUX__) + m_picker_widget = dynamic_cast(widget->GetPickerCtrl()); + if (m_picker_widget) { + m_picker_widget->Bind(wxEVT_BUTTON, &ColourPicker::on_button_click, this); + m_clrData = m_picker_widget->GetColourData(); + } +#endif +} + +void ColourPicker::save_colors_to_config() { +#if !defined(__linux__) && !defined(__LINUX__) + if (m_clrData) { + std::vector colors; + if (colors.size() != CUSTOM_COLOR_COUNT) { + colors.resize(CUSTOM_COLOR_COUNT); + } + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { + colors[i] = color_to_string(m_clrData->GetCustomColour(i)); + } + wxGetApp().app_config->save_custom_color_to_config(colors); + } +#endif +} + void PointCtrl::BUILD() { auto temp = new wxBoxSizer(wxHORIZONTAL); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index d86a790eb4..8cf36eb54f 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -481,6 +481,14 @@ public: void enable() override { dynamic_cast(window)->Enable(); } void disable() override{ dynamic_cast(window)->Disable(); } wxWindow* getWindow() override { return window; } + +private: + void convert_to_picker_widget(wxColourPickerCtrl *widget); + void on_button_click(wxCommandEvent &WXUNUSED(ev)); + void save_colors_to_config(); +private: + wxColourData* m_clrData{nullptr}; + wxColourPickerWidget* m_picker_widget{nullptr}; }; class PointCtrl : public Field { diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 1661eb003e..235373db1d 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -547,7 +547,7 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, f static const ImVec4 LINE_NUMBER_COLOR = ImGuiWrapper::COL_ORANGE_LIGHT; static const ImVec4 SELECTION_RECT_COLOR = ImGuiWrapper::COL_ORANGE_DARK; - static const ImVec4 COMMAND_COLOR = { 0.8f, 0.8f, 0.0f, 1.0f }; + static const ImVec4 COMMAND_COLOR = {0.8f, 0.8f, 0.0f, 1.0f}; static const ImVec4 PARAMETERS_COLOR = { 1.0f, 1.0f, 1.0f, 1.0f }; static const ImVec4 COMMENT_COLOR = { 0.7f, 0.7f, 0.7f, 1.0f }; @@ -4183,10 +4183,10 @@ void GCodeViewer::render_all_plates_stats(const std::vectorget_extruders(true); for (size_t extruder_id : plate_extruders) { extruder_id -= 1; - if (plate_print_statistics.volumes_per_extruder.find(extruder_id) == plate_print_statistics.volumes_per_extruder.end()) - flushed_volume_of_extruders_all_plates[extruder_id] += 0; + if (plate_print_statistics.model_volumes_per_extruder.find(extruder_id) == plate_print_statistics.model_volumes_per_extruder.end()) + model_volume_of_extruders_all_plates[extruder_id] += 0; else { - double model_volume = plate_print_statistics.volumes_per_extruder.at(extruder_id); + double model_volume = plate_print_statistics.model_volumes_per_extruder.at(extruder_id); model_volume_of_extruders_all_plates[extruder_id] += model_volume; } if (plate_print_statistics.flush_per_filament.find(extruder_id) == plate_print_statistics.flush_per_filament.end()) @@ -4736,12 +4736,12 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv // used filament statistics for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.volumes_per_extruder.find(extruder_id) == m_print_statistics.volumes_per_extruder.end()) { + if (m_print_statistics.model_volumes_per_extruder.find(extruder_id) == m_print_statistics.model_volumes_per_extruder.end()) { model_used_filaments_m.push_back(0.0); model_used_filaments_g.push_back(0.0); } else { - double volume = m_print_statistics.volumes_per_extruder.at(extruder_id); + double volume = m_print_statistics.model_volumes_per_extruder.at(extruder_id); auto [model_used_filament_m, model_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); model_used_filaments_m.push_back(model_used_filament_m); model_used_filaments_g.push_back(model_used_filament_g); @@ -4862,9 +4862,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv { // calculate used filaments data for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.volumes_per_extruder.find(extruder_id) == m_print_statistics.volumes_per_extruder.end()) + if (m_print_statistics.model_volumes_per_extruder.find(extruder_id) == m_print_statistics.model_volumes_per_extruder.end()) continue; - double volume = m_print_statistics.volumes_per_extruder.at(extruder_id); + double volume = m_print_statistics.model_volumes_per_extruder.at(extruder_id); auto [model_used_filament_m, model_used_filament_g] = get_used_filament_from_volume(volume, extruder_id); model_used_filaments_m.push_back(model_used_filament_m); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 29addc6738..8c00b09dff 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -7789,22 +7789,34 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() float margin_size = 4.0f * f_scale; float button_margin = frame_padding; + const float y_offset = is_collapse_toolbar_on_left() ? (get_collapse_toolbar_height() + 5) : 0; + // Make sure the window does not overlap the 3d navigator + auto window_height_max = canvas_h - y_offset; + if (wxGetApp().show_3d_navigator()) { + float sc = get_scale(); +#ifdef WIN32 + const int dpi = get_dpi_for_window(wxGetApp().GetTopWindow()); + sc *= (float) dpi / (float) DPI_DEFAULT; +#endif // WIN32 + window_height_max -= (128 * sc + 5); + } + ImGuiWrapper& imgui = *wxGetApp().imgui(); int item_count = m_sel_plate_toolbar.m_items.size() + (m_sel_plate_toolbar.show_stats_item ? 1 : 0); - bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > canvas_h ? true: false; + bool show_scroll = item_count * (button_height + frame_padding * 2.0f + button_margin) - button_margin + 22.0f * f_scale > window_height_max ? true: false; show_scroll = m_sel_plate_toolbar.is_display_scrollbar && show_scroll; - float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, canvas_h); + float window_height = std::min(item_count * (button_height + (frame_padding + margin_size) * 2.0f + button_margin) - button_margin + 28.0f * f_scale, window_height_max); float window_width = m_sel_plate_toolbar.icon_width + margin_size * 2 + (show_scroll ? 28.0f * f_scale : 20.0f * f_scale); ImVec4 window_bg = ImVec4(0.82f, 0.82f, 0.82f, 0.5f); - ImVec4 button_active = ImVec4(0.12f, 0.56f, 0.92, 1.0f); + ImVec4 button_active = ImGuiWrapper::COL_ORCA; // ORCA: Use orca color for selected sliced plate border ImVec4 button_hover = ImVec4(0.67f, 0.67f, 0.67, 1.0f); ImVec4 scroll_col = ImVec4(0.77f, 0.77f, 0.77f, 1.0f); //ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.f, 0.f, 0.f, 1.0f)); //use white text as the background switch to black ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0f, 1.0f, 1.0f, 1.0f)); ImGui::PushStyleColor(ImGuiCol_WindowBg, window_bg); - ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, window_bg); + ImGui::PushStyleColor(ImGuiCol_ScrollbarBg, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA using background color with opacity creates a second color. This prevents secondary color ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabActive, scroll_col); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrabHovered, scroll_col); ImGui::PushStyleColor(ImGuiCol_ScrollbarGrab, scroll_col); @@ -7816,7 +7828,6 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 4.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f); - const float y_offset = is_collapse_toolbar_on_left() ? (get_collapse_toolbar_height() + 5) : 0; imgui.set_next_window_pos(canvas_w * 0, canvas_h * 0 + y_offset, ImGuiCond_Always, 0, 0); imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always); @@ -7859,12 +7870,12 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImTextureID btn_texture_id; if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING || all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { - text_clr = ImVec4(0, 174.0f / 255.0f, 66.0f / 255.0f, 0.2f); + text_clr = ImVec4(0.0f, 150.f / 255.0f, 136.0f / 255, 0.2f); // ORCA: All plates slicing NOT complete - Text color btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture_transparent.get_id()); } else { - text_clr = ImVec4(0, 174.0f / 255.0f, 66.0f / 255.0f, 1); + text_clr = ImGuiWrapper::COL_ORCA; // ORCA: All plates slicing complete - Text color btn_texture_id = (ImTextureID)(intptr_t)(all_plates_stats_item->image_texture.get_id()); } @@ -7888,25 +7899,25 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::UNSLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICING) { ImVec2 size = ImVec2(button_width, button_height * all_plates_stats_item->percent / 100.0f); ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); - ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); - ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); + ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); } else if (all_plates_stats_item->slice_state == IMToolbarItem::SliceState::SLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); } // draw text @@ -7948,7 +7959,9 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImGui::PushStyleColor(ImGuiCol_Border, button_active); } else { - if (ImGui::IsMouseHoveringRect(button_pos, button_pos + button_size)) { + // Translate window pos to abs pos, also account for the window scrolling + auto hover_rect = button_pos + ImGui::GetWindowPos() - ImGui::GetCurrentWindow()->Scroll; + if (ImGui::IsMouseHoveringRect(hover_rect, hover_rect + button_size)) { ImGui::PushStyleColor(ImGuiCol_Border, button_hover); } else { @@ -7974,22 +7987,22 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() if (item->slice_state == IMToolbarItem::SliceState::UNSLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 80)); } else if (item->slice_state == IMToolbarItem::SliceState::SLICING) { ImVec2 size = ImVec2(button_width, button_height * item->percent / 100.0f); ImVec2 rect_start_pos = ImVec2(start_pos.x, start_pos.y + size.y); ImVec2 rect_end_pos = ImVec2(start_pos.x + button_width, start_pos.y + button_height); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); - ImGui::GetForegroundDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, rect_end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(rect_start_pos, rect_end_pos, IM_COL32(0, 0, 0, 80)); } else if (item->slice_state == IMToolbarItem::SliceState::SLICE_FAILED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); - ImGui::GetForegroundDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(40, 1, 1, 64)); + ImGui::GetWindowDrawList()->AddRect(start_pos, end_pos, IM_COL32(208, 27, 27, 255), 0.0f, 0, 1.0f); } else if (item->slice_state == IMToolbarItem::SliceState::SLICED) { ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); - ImGui::GetForegroundDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); + ImGui::GetWindowDrawList()->AddRectFilled(start_pos, end_pos, IM_COL32(0, 0, 0, 10)); } // draw text @@ -8385,7 +8398,7 @@ void GLCanvas3D::_render_assemble_info() const ImGui::PopFont(); float margin = 10.0f * get_scale(); imgui->set_next_window_pos(canvas_w - margin, canvas_h - margin, ImGuiCond_Always, 1.0f, 1.0f); - ImGuiWrapper::push_toolbar_style(get_scale()); + ImGuiWrapper::push_common_window_style(get_scale()); // ORCA use window style for popups with title imgui->begin(_L("Assembly Info"), ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse); font->Scale = origScale; ImGui::PushFont(font); @@ -8401,7 +8414,7 @@ void GLCanvas3D::_render_assemble_info() const ImGui::Text("%.2f x %.2f x %.2f", size0, size1, size2); } imgui->end(); - ImGuiWrapper::pop_toolbar_style(); + ImGuiWrapper::pop_common_window_style(); } #if ENABLE_SHOW_CAMERA_TARGET diff --git a/src/slic3r/GUI/GLSelectionRectangle.cpp b/src/slic3r/GUI/GLSelectionRectangle.cpp index 68f9d096eb..7eb5c29143 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.cpp +++ b/src/slic3r/GUI/GLSelectionRectangle.cpp @@ -116,7 +116,7 @@ namespace GUI { shader->set_uniform("view_model_matrix", Transform3d::Identity()); shader->set_uniform("projection_matrix", Transform3d::Identity()); - m_rectangle.set_color({0.0f, 1.0f, 0.38f, 1.0f}); + m_rectangle.set_color(ColorRGBA::ORCA()); // ORCA: use orca color for selection rectangle m_rectangle.render(); shader->stop_using(); } diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 8e99bb1bc2..c39d615d5e 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -35,6 +35,8 @@ wxDEFINE_EVENT(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_PRINT_SELECT, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent); +wxDEFINE_EVENT(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, SimpleEvent); + wxDEFINE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent); wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent); diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 28ad69bb53..cdb7e27779 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -35,6 +35,8 @@ wxDECLARE_EVENT(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_PRINT_SELECT, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent); +wxDECLARE_EVENT(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, SimpleEvent); + wxDECLARE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent); wxDECLARE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index e10fb62c1c..e5931178e7 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3,6 +3,8 @@ #include "GUI_Init.hpp" #include "GUI_ObjectList.hpp" #include "GUI_Factories.hpp" +#include "slic3r/GUI/UserManager.hpp" +#include "slic3r/GUI/TaskManager.hpp" #include "format.hpp" #include "libslic3r_version.h" @@ -151,6 +153,7 @@ class MainFrame; void start_ping_test() { + return; wxArrayString output; wxExecute("ping www.amazon.com", output, wxEXEC_NODISABLE); @@ -689,15 +692,15 @@ static void register_win32_device_notification_event() return false; }); - //wxWindow::MSWRegisterMessageHandler(WM_COPYDATA, [](wxWindow* win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) { - // COPYDATASTRUCT* copy_data_structure = { 0 }; - // copy_data_structure = (COPYDATASTRUCT*)lParam; - // if (copy_data_structure->dwData == 1) { - // LPCWSTR arguments = (LPCWSTR)copy_data_structure->lpData; - // Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(boost::nowide::narrow(arguments)); - // } - // return true; - // }); + wxWindow::MSWRegisterMessageHandler(WM_COPYDATA, [](wxWindow* win, WXUINT /* nMsg */, WXWPARAM wParam, WXLPARAM lParam) { + COPYDATASTRUCT* copy_data_structure = { 0 }; + copy_data_structure = (COPYDATASTRUCT*)lParam; + if (copy_data_structure->dwData == 1) { + LPCWSTR arguments = (LPCWSTR)copy_data_structure->lpData; + Slic3r::GUI::wxGetApp().other_instance_message_handler()->handle_message(boost::nowide::narrow(arguments)); + } + return true; + }); } #endif // WIN32 @@ -959,7 +962,7 @@ void GUI_App::post_init() if (app_config->get("stealth_mode") == "false") hms_query = new HMSQuery(); - + m_show_gcode_window = app_config->get_bool("show_gcode_window"); if (m_networking_need_update) { //updating networking @@ -1065,10 +1068,10 @@ void GUI_App::post_init() } BOOST_LOG_TRIVIAL(info) << "finished post_init"; //BBS: remove the single instance currently -/*#ifdef _WIN32 +#ifdef _WIN32 // Sets window property to mainframe so other instances can indentify it. OtherInstanceMessageHandler::init_windows_properties(mainframe, m_instance_hash_int); -#endif //WIN32*/ +#endif //WIN32 } wxDEFINE_EVENT(EVT_ENTER_FORCE_UPGRADE, wxCommandEvent); @@ -1086,7 +1089,7 @@ GUI_App::GUI_App() , m_em_unit(10) , m_imgui(new ImGuiWrapper()) , m_removable_drive_manager(std::make_unique()) - //, m_other_instance_message_handler(std::make_unique()) + , m_other_instance_message_handler(std::make_unique()) { //app config initializes early becasuse it is used in instance checking in OrcaSlicer.cpp this->init_app_config(); @@ -1599,6 +1602,22 @@ void GUI_App::init_networking_callbacks() return; BOOST_LOG_TRIVIAL(trace) << "static: server connected"; m_agent->set_user_selected_machine(m_agent->get_user_selected_machine()); + if (this->is_enable_multi_machine()) { + auto evt = new wxCommandEvent(EVT_UPDATE_MACHINE_LIST); + wxQueueEvent(this, evt); + } + m_agent->set_user_selected_machine(m_agent->get_user_selected_machine()); + //subscribe device + if (m_agent->is_user_login()) { + m_agent->start_device_subscribe(); + /* resubscribe the cache dev list */ + if (this->is_enable_multi_machine()) { + DeviceManager* dev = this->getDeviceManager(); + if (dev && !dev->subscribe_list_cache.empty()) { + dev->subscribe_device_list(dev->subscribe_list_cache); + } + } + } }); }); @@ -1618,7 +1637,9 @@ void GUI_App::init_networking_callbacks() obj->command_get_version(); obj->erase_user_access_code(); obj->command_get_access_code(); - GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + if (!is_enable_multi_machine()) { + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + } } }); }); @@ -1714,11 +1735,21 @@ void GUI_App::init_networking_callbacks() MachineObject* obj = this->m_device_manager->get_user_machine(dev_id); if (obj) { obj->is_ams_need_update = false; - obj->parse_json(msg); auto sel = this->m_device_manager->get_selected_machine(); - if ((sel == obj || sel == nullptr) && obj->is_ams_need_update) { - GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + + if (sel && sel->dev_id == dev_id) { + obj->parse_json(msg); + } + else { + obj->parse_json(msg, true); + } + + + if (!this->is_enable_multi_machine()) { + if ((sel == obj || sel == nullptr) && obj->is_ams_need_update) { + GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); + } } } }); @@ -1726,6 +1757,25 @@ void GUI_App::init_networking_callbacks() m_agent->set_on_message_fn(message_arrive_fn); + auto user_message_arrive_fn = [this](std::string user_id, std::string msg) { + if (m_is_closing) { + return; + } + CallAfter([this, user_id, msg] { + if (m_is_closing) + return; + + //check user + if (user_id == m_agent->get_user_id()) { + this->m_user_manager->parse_json(msg); + } + + }); + }; + + m_agent->set_on_user_message_fn(user_message_arrive_fn); + + auto lan_message_arrive_fn = [this](std::string dev_id, std::string msg) { if (m_is_closing) { return; @@ -1740,11 +1790,15 @@ void GUI_App::init_networking_callbacks() } if (obj) { - obj->parse_json(msg); + obj->parse_json(msg, DeviceManager::key_field_only); if (this->m_device_manager->get_selected_machine() == obj && obj->is_ams_need_update) { GUI::wxGetApp().sidebar().load_ams_list(obj->dev_id, obj); } } + obj = m_device_manager->get_local_machine(dev_id); + if (obj) { + obj->parse_json(msg, DeviceManager::key_field_only); + } }); }; m_agent->set_on_local_message_fn(lan_message_arrive_fn); @@ -2029,11 +2083,11 @@ std::string GUI_App::get_local_models_path() return local_path; } -/*void GUI_App::init_single_instance_checker(const std::string &name, const std::string &path) +void GUI_App::init_single_instance_checker(const std::string &name, const std::string &path) { BOOST_LOG_TRIVIAL(debug) << "init wx instance checker " << name << " "<< path; m_single_instance_checker = std::make_unique(boost::nowide::widen(name), boost::nowide::widen(path)); -}*/ +} bool GUI_App::OnInit() { @@ -2054,6 +2108,11 @@ int GUI_App::OnExit() m_device_manager = nullptr; } + if (m_user_manager) { + delete m_user_manager; + m_user_manager = nullptr; + } + if (m_agent) { // BBS avoid a crash on mac platform #ifdef __WINDOWS__ @@ -2273,9 +2332,7 @@ bool GUI_App::on_init_inner() BOOST_LOG_TRIVIAL(info) << "begin to show the splash screen..."; //BBS use BBL splashScreen scrn = new SplashScreen(bmp, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 1500, splashscreen_pos); -#ifndef __linux__ wxYield(); -#endif scrn->SetText(_L("Loading configuration")+ dots); } @@ -2404,6 +2461,7 @@ bool GUI_App::on_init_inner() preset_bundle->set_default_suppressed(true); Bind(EVT_SET_SELECTED_MACHINE, &GUI_App::on_set_selected_machine, this); + Bind(EVT_UPDATE_MACHINE_LIST, &GUI_App::on_update_machine_list, this); Bind(EVT_USER_LOGIN, &GUI_App::on_user_login, this); Bind(EVT_USER_LOGIN_HANDLE, &GUI_App::on_user_login_handle, this); Bind(EVT_CHECK_PRIVACY_VER, &GUI_App::on_check_privacy_update, this); @@ -2510,9 +2568,9 @@ bool GUI_App::on_init_inner() update_mode(); // update view mode after fix of the object_list size -//#ifdef __APPLE__ -// other_instance_message_handler()->bring_instance_forward(); -//#endif //__APPLE__ +#ifdef __APPLE__ + other_instance_message_handler()->bring_instance_forward(); +#endif //__APPLE__ Bind(EVT_HTTP_ERROR, &GUI_App::on_http_error, this); @@ -2726,6 +2784,22 @@ __retry: else m_device_manager->set_agent(m_agent); + if (!m_user_manager) + m_user_manager = new Slic3r::UserManager(m_agent); + else + m_user_manager->set_agent(m_agent); + + if (this->is_enable_multi_machine()) { + if (!m_task_manager) { + m_task_manager = new Slic3r::TaskManager(m_agent); + m_task_manager->start(); + } + m_agent->enable_multi_machine(true); + DeviceManager::EnableMultiMachine = true; + } else { + m_agent->enable_multi_machine(false); + DeviceManager::EnableMultiMachine = false; + } //BBS set config dir if (m_agent) { @@ -2755,6 +2829,9 @@ __retry: if (!m_device_manager) m_device_manager = new Slic3r::DeviceManager(); + + if (!m_user_manager) + m_user_manager = new Slic3r::UserManager(); } return true; @@ -2809,7 +2886,7 @@ void GUI_App::init_label_colours() m_color_label_modified = is_dark_mode ? wxColour("#F1754E") : wxColour("#F1754E"); m_color_label_sys = is_dark_mode ? wxColour("#B2B3B5") : wxColour("#363636"); -#ifdef _WIN32 +#if defined(_WIN32) || defined(__linux__) || defined(__APPLE__) m_color_label_default = is_dark_mode ? wxColour(250, 250, 250) : m_color_label_sys; // wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_label_default = is_dark_mode ? wxColour(230, 230, 230): wxSystemSettings::GetColour(/*wxSYS_COLOUR_HIGHLIGHTTEXT*/wxSYS_COLOUR_WINDOWTEXT); m_color_highlight_default = is_dark_mode ? wxColour(78, 78, 78) : wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); @@ -2922,22 +2999,38 @@ void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool ju /*if (m_is_dark_mode != dark_mode() ) m_is_dark_mode = dark_mode();*/ - if (m_is_dark_mode) { - auto original_col = window->GetBackgroundColour(); - auto bg_col = StateColor::darkModeColorFor(original_col); - if (bg_col != original_col) { + auto orig_col = window->GetBackgroundColour(); + auto bg_col = StateColor::darkModeColorFor(orig_col); + // there are cases where the background color of an item is bright, specifically: + // * the background color of a button: #009688 -- 73 + if (bg_col != orig_col) { window->SetBackgroundColour(bg_col); } - original_col = window->GetForegroundColour(); - auto fg_col = StateColor::darkModeColorFor(original_col); + orig_col = window->GetForegroundColour(); + auto fg_col = StateColor::darkModeColorFor(orig_col); + auto fg_l = StateColor::GetLightness(fg_col); - if (fg_col != original_col) { - window->SetForegroundColour(fg_col); + auto color_difference = StateColor::GetColorDifference(bg_col, fg_col); + + // fallback and sanity check with LAB + // color difference of less than 2 or 3 is not normally visible, and even less than 30-40 doesn't stand out + if (color_difference < 10) { + fg_col = StateColor::SetLightness(fg_col, 90); } + // some of the stock colors have a lightness of ~49 + if (fg_l < 45) { + fg_col = StateColor::SetLightness(fg_col, 70); + } + // at this point it shouldn't be possible that fg_col is the same as bg_col, but let's be safe + if (fg_col == bg_col) { + fg_col = StateColor::SetLightness(fg_col, 70); + } + + window->SetForegroundColour(fg_col); } else { auto original_col = window->GetBackgroundColour(); @@ -3191,10 +3284,7 @@ void GUI_App::check_printer_presets() #endif } -void switch_window_pools(); -void release_window_pools(); - -void GUI_App::recreate_GUI(const wxString &msg_name) +void GUI_App::recreate_GUI(const wxString& msg_name) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "recreate_GUI enter"; m_is_recreating_gui = true; @@ -3202,18 +3292,12 @@ void GUI_App::recreate_GUI(const wxString &msg_name) update_http_extra_header(); mainframe->shutdown(); + ProgressDialog dlg(msg_name, msg_name, 100, nullptr, wxPD_AUTO_HIDE); dlg.Pulse(); dlg.Update(10, _L("Rebuild") + dots); MainFrame *old_main_frame = mainframe; - struct ClientData : wxClientData - { - ~ClientData() { release_window_pools(); } - }; - old_main_frame->SetClientObject(new ClientData); - - switch_window_pools(); mainframe = new MainFrame(); if (is_editor()) // hide settings tabs after first Layout @@ -3780,6 +3864,21 @@ std::string GUI_App::handle_web_request(std::string cmd) if (path.has_value()) { wxLaunchDefaultBrowser(path.value()); } + } + else if (command_str.compare("homepage_makerlab_get") == 0) { + //if (mainframe->m_webview) { mainframe->m_webview->SendMakerlabList(); } + } + else if (command_str.compare("makerworld_model_open") == 0) + { + if (root.get_child_optional("model") != boost::none) { + pt::ptree data_node = root.get_child("model"); + boost::optional path = data_node.get_optional("url"); + if (path.has_value()) + { + wxString realurl = from_u8(url_decode(path.value())); + wxGetApp().request_model_download(realurl); + } + } } } } @@ -3893,7 +3992,7 @@ void GUI_App::on_http_error(wxCommandEvent &evt) MessageDialog msg_dlg(nullptr, _L("The version of Orca Slicer is too low and needs to be updated to the latest version before it can be used normally"), "", wxAPPLY | wxOK); if (msg_dlg.ShowModal() == wxOK) { } - + } // request login @@ -3933,9 +4032,17 @@ void GUI_App::enable_user_preset_folder(bool enable) void GUI_App::on_set_selected_machine(wxCommandEvent &evt) { DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); - if (!dev || m_agent) return; + if (dev) { + dev->set_selected_machine(m_agent->get_user_selected_machine()); + } +} - dev->set_selected_machine(m_agent->get_user_selected_machine()); +void GUI_App::on_update_machine_list(wxCommandEvent &evt) +{ + /* DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->add_user_subscribe(); + }*/ } void GUI_App::on_user_login_handle(wxCommandEvent &evt) @@ -4369,6 +4476,24 @@ std::string GUI_App::format_display_version() return version_display; } +std::string GUI_App::format_IP(const std::string& ip) +{ + std::string format_ip = ip; + size_t pos_st = 0; + size_t pos_en = 0; + + for (int i = 0; i < 2; i++) { + pos_en = format_ip.find('.', pos_st + 1); + if (pos_en == std::string::npos) { + return ip; + } + format_ip.replace(pos_st, pos_en - pos_st, "***"); + pos_st = pos_en + 1; + } + + return format_ip; +} + void GUI_App::show_dialog(wxString msg) { if (m_info_dialog_content.empty()) { @@ -4379,6 +4504,26 @@ void GUI_App::show_dialog(wxString msg) } } +void GUI_App::push_notification(wxString msg, wxString title, UserNotificationStyle style) +{ + if (!this->is_enable_multi_machine()) { + if (style == UserNotificationStyle::UNS_NORMAL) { + if (m_info_dialog_content.empty()) { + wxCommandEvent* evt = new wxCommandEvent(EVT_SHOW_DIALOG); + evt->SetString(msg); + GUI::wxGetApp().QueueEvent(evt); + m_info_dialog_content = msg; + } + } + else if (style == UserNotificationStyle::UNS_WARNING_CONFIRM) { + GUI::wxGetApp().CallAfter([msg, title] { + GUI::MessageDialog msg_dlg(nullptr, msg, title, wxICON_WARNING | wxOK); + msg_dlg.ShowModal(); + }); + } + } +} + void GUI_App::reload_settings() { if (preset_bundle && m_agent) { @@ -5737,7 +5882,8 @@ void GUI_App::MacOpenURL(const wxString& url) // wxWidgets override to get an event on open files. void GUI_App::MacOpenFiles(const wxArrayString &fileNames) { - if (m_post_initialized) { + bool single_instance = app_config->get("app", "single_instance") == "true"; + if (m_post_initialized && !single_instance) { bool has3mf = false; std::vector names; for (auto & n : fileNames) { @@ -5949,6 +6095,25 @@ std::string GUI_App::url_encode(std::string value) { return Http::url_encode(value); } +void GUI_App::popup_ping_bind_dialog() +{ + if (m_ping_code_binding_dialog == nullptr) { + m_ping_code_binding_dialog = new PingCodeBindDialog(); + m_ping_code_binding_dialog->ShowModal(); + remove_ping_bind_dialog(); + } +} + +void GUI_App::remove_ping_bind_dialog() +{ + if (m_ping_code_binding_dialog != nullptr) { + m_ping_code_binding_dialog->Destroy(); + delete m_mall_publish_dialog; + m_ping_code_binding_dialog = nullptr; + } +} + + void GUI_App::remove_mall_system_dialog() { if (m_mall_publish_dialog != nullptr) { diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 21a38862fb..62cce8a075 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -16,9 +16,11 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/DeviceManager.hpp" +#include "slic3r/GUI/UserNotification.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/GUI/WebViewDialog.hpp" #include "slic3r/GUI/WebUserLoginDialog.hpp" +#include "slic3r/GUI/BindDialog.hpp" #include "slic3r/GUI/HMS.hpp" #include "slic3r/GUI/Jobs/UpgradeNetworkJob.hpp" #include "slic3r/GUI/HttpServer.hpp" @@ -55,8 +57,10 @@ class PresetBundle; class PresetUpdater; class ModelObject; class Model; +class UserManager; class DeviceManager; class NetworkAgent; +class TaskManager; namespace GUI{ @@ -74,6 +78,7 @@ struct GUI_InitParams; class ParamsDialog; class HMSQuery; class ModelMallDialog; +class PingCodeBindDialog; enum FileType @@ -265,14 +270,16 @@ private: std::unique_ptr m_imgui; std::unique_ptr m_printhost_job_queue; - //std::unique_ptr m_other_instance_message_handler; - //std::unique_ptr m_single_instance_checker; - //std::string m_instance_hash_string; - //size_t m_instance_hash_int; + std::unique_ptr m_other_instance_message_handler; + std::unique_ptr m_single_instance_checker; + std::string m_instance_hash_string; + size_t m_instance_hash_int; //BBS bool m_is_closing {false}; Slic3r::DeviceManager* m_device_manager { nullptr }; + Slic3r::UserManager* m_user_manager { nullptr }; + Slic3r::TaskManager* m_task_manager { nullptr }; NetworkAgent* m_agent { nullptr }; std::vector need_delete_presets; // store setting ids of preset std::vector m_create_preset_blocked { false, false, false, false, false, false }; // excceed limit @@ -307,6 +314,7 @@ private: bool OnInit() override; int OnExit() override; bool initialized() const { return m_initialized; } + inline bool is_enable_multi_machine() { return this->app_config&& this->app_config->get("enable_multi_machine") == "true"; } std::map test_url_state; @@ -318,6 +326,7 @@ private: void show_message_box(std::string msg) { wxMessageBox(msg); } EAppMode get_app_mode() const { return m_app_mode; } Slic3r::DeviceManager* getDeviceManager() { return m_device_manager; } + Slic3r::TaskManager* getTaskManager() { return m_task_manager; } HMSQuery* get_hms_query() { return hms_query; } NetworkAgent* getAgent() { return m_agent; } bool is_editor() const { return m_app_mode == EAppMode::Editor; } @@ -442,6 +451,7 @@ private: void handle_http_error(unsigned int status, std::string body); void on_http_error(wxCommandEvent &evt); void on_set_selected_machine(wxCommandEvent& evt); + void on_update_machine_list(wxCommandEvent& evt); void on_user_login(wxCommandEvent &evt); void on_user_login_handle(wxCommandEvent& evt); void enable_user_preset_folder(bool enable); @@ -460,7 +470,9 @@ private: void set_skip_version(bool skip = true); void no_new_version(); static std::string format_display_version(); + std::string format_IP(const std::string& ip); void show_dialog(wxString msg); + void push_notification(wxString msg, wxString title = wxEmptyString, UserNotificationStyle style = UserNotificationStyle::UNS_NORMAL); void reload_settings(); void remove_user_presets(); void sync_preset(Preset* preset); @@ -552,6 +564,7 @@ private: std::string m_mall_model_download_url; std::string m_mall_model_download_name; ModelMallDialog* m_mall_publish_dialog{ nullptr }; + PingCodeBindDialog* m_ping_code_binding_dialog{ nullptr }; void set_download_model_url(std::string url) {m_mall_model_download_url = url;} void set_download_model_name(std::string name) {m_mall_model_download_name = name;} @@ -570,6 +583,9 @@ private: std::string url_encode(std::string value); std::string url_decode(std::string value); + void popup_ping_bind_dialog(); + void remove_ping_bind_dialog(); + // Parameters extracted from the command line to be passed to GUI after initialization. GUI_InitParams* init_params { nullptr }; @@ -594,13 +610,13 @@ private: Tab* plate_tab; RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); } - //OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); } - //wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();} + OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); } + wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();} - //void init_single_instance_checker(const std::string &name, const std::string &path); - //void set_instance_hash (const size_t hash) { m_instance_hash_int = hash; m_instance_hash_string = std::to_string(hash); } - //std::string get_instance_hash_string () { return m_instance_hash_string; } - //size_t get_instance_hash_int () { return m_instance_hash_int; } + void init_single_instance_checker(const std::string &name, const std::string &path); + void set_instance_hash (const size_t hash) { m_instance_hash_int = hash; m_instance_hash_string = std::to_string(hash); } + std::string get_instance_hash_string () { return m_instance_hash_string; } + size_t get_instance_hash_int () { return m_instance_hash_int; } ImGuiWrapper* imgui() { return m_imgui.get(); } @@ -625,7 +641,7 @@ private: int GetSingleChoiceIndex(const wxString& message, const wxString& caption, const wxArrayString& choices, int initialSelection); #ifdef __WXMSW__ - // extend is stl/3mf/gcode/step etc + // extend is stl/3mf/gcode/step etc void associate_files(std::wstring extend); void disassociate_files(std::wstring extend); #endif // __WXMSW__ diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 14fa20763b..d228e16b04 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -110,7 +110,7 @@ std::map> SettingsFactory::PART_CAT { L("Strength"), {{"wall_loops", "",1},{"top_shell_layers", L("Top Solid Layers"),1},{"top_shell_thickness", L("Top Minimum Shell Thickness"),1}, {"bottom_shell_layers", L("Bottom Solid Layers"),1}, {"bottom_shell_thickness", L("Bottom Minimum Shell Thickness"),1}, {"sparse_infill_density", "",1},{"sparse_infill_pattern", "",1},{"infill_anchor", "",1},{"infill_anchor_max", "",1},{"top_surface_pattern", "",1},{"bottom_surface_pattern", "",1}, {"internal_solid_infill_pattern", "",1}, - {"infill_combination", "",1}, {"infill_wall_overlap", "",1}, {"infill_direction", "",1}, {"bridge_angle", "",1}, {"minimum_sparse_infill_area", "",1} + {"infill_combination", "",1}, {"infill_wall_overlap", "",1}, {"solid_infill_direction", "",1}, {"rotate_solid_infill_direction", "",1}, {"infill_direction", "",1}, {"bridge_angle", "",1}, {"minimum_sparse_infill_area", "",1} }}, { L("Speed"), {{"outer_wall_speed", "",1},{"inner_wall_speed", "",2},{"sparse_infill_speed", "",3},{"top_surface_speed", "",4}, {"internal_solid_infill_speed", "",5}, {"enable_overhang_speed", "",6}, {"overhang_speed_classic", "",6}, {"overhang_1_4_speed", "",7}, {"overhang_2_4_speed", "",8}, {"overhang_3_4_speed", "",9}, {"overhang_4_4_speed", "",10}, @@ -500,18 +500,28 @@ wxMenu* MenuFactory::append_submenu_add_generic(wxMenu* menu, ModelVolumeType ty if (type != ModelVolumeType::INVALID) { append_menu_item(sub_menu, wxID_ANY, _L("Load..."), "", - [type](wxCommandEvent&) { obj_list()->load_subobject(type); }, "", menu); + [type](wxCommandEvent&) { obj_list()->load_subobject(type); }, "menu_load", menu); sub_menu->AppendSeparator(); } - for (auto &item : {L("Cube"), L("Cylinder"), L("Sphere"), L("Cone"), L("Disc"), L("Torus")}) { - append_menu_item( - sub_menu, wxID_ANY, _(item), "", - [type, item](wxCommandEvent &) { - obj_list()->load_generic_subobject(item, type); - }, - "", menu); - } + append_menu_item(sub_menu, wxID_ANY, _L("Cube"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Cube") ,type); },"menu_obj_cube", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Cylinder"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Cylinder"), type); },"menu_obj_cylinder", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Sphere"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Sphere"), type); },"menu_obj_sphere", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Cone"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Cone"), type); },"menu_obj_cone", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Disc"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Disc"), type); },"menu_obj_disc", menu); + + append_menu_item(sub_menu, wxID_ANY, _L("Torus"), "", + [type](wxCommandEvent&) { obj_list()->load_generic_subobject(L("Torus"), type); },"menu_obj_torus", menu); + append_menu_item_add_text(sub_menu, type); append_menu_item_add_svg(sub_menu, type); @@ -619,7 +629,8 @@ static void append_menu_itemm_add_(const wxString& name, GLGizmosManager::EType ) { wxString item_name = wxString(is_submenu_item ? "" : _(ADD_VOLUME_MENU_ITEMS[int(type)].first) + ": ") + name; menu->AppendSeparator(); - const std::string icon_name = is_submenu_item ? "" : ADD_VOLUME_MENU_ITEMS[int(type)].second; + auto def_icon_name = (gizmo_type == GLGizmosManager::Emboss) ? "menu_obj_text" : "menu_obj_svg"; + const std::string icon_name = is_submenu_item ? def_icon_name : ADD_VOLUME_MENU_ITEMS[int(type)].second; append_menu_item(menu, wxID_ANY, item_name, "", add_, icon_name, menu); } } @@ -661,7 +672,7 @@ void MenuFactory::append_menu_items_add_volume(wxMenu* menu) wxMenuItem* MenuFactory::append_menu_item_layers_editing(wxMenu* menu) { return append_menu_item(menu, wxID_ANY, _L("Height range Modifier"), "", - [](wxCommandEvent&) { obj_list()->layers_editing(); wxGetApp().params_panel()->switch_to_object(); }, "", menu, + [](wxCommandEvent&) { obj_list()->layers_editing(); wxGetApp().params_panel()->switch_to_object(); }, "height_range_modifier", menu, []() { return obj_list()->is_instance_or_object_selected(); }, m_parent); } @@ -1113,11 +1124,11 @@ void MenuFactory::append_menu_items_mirror(wxMenu* menu) return; append_menu_item(mirror_menu, wxID_ANY, _L("Along X axis"), _L("Mirror along the X axis"), - [](wxCommandEvent&) { plater()->mirror(X); }, "", menu); + [](wxCommandEvent&) { plater()->mirror(X); }, "menu_mirror_x", menu); append_menu_item(mirror_menu, wxID_ANY, _L("Along Y axis"), _L("Mirror along the Y axis"), - [](wxCommandEvent&) { plater()->mirror(Y); }, "", menu); + [](wxCommandEvent&) { plater()->mirror(Y); }, "menu_mirror_y", menu); append_menu_item(mirror_menu, wxID_ANY, _L("Along Z axis"), _L("Mirror along the Z axis"), - [](wxCommandEvent&) { plater()->mirror(Z); }, "", menu); + [](wxCommandEvent&) { plater()->mirror(Z); }, "menu_mirror_z", menu); append_submenu(menu, mirror_menu, wxID_ANY, _L("Mirror"), _L("Mirror object"), "", []() { return plater()->can_mirror(); }, m_parent); @@ -1272,10 +1283,10 @@ void MenuFactory::create_object_menu() return; append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", &m_object_menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", &m_object_menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", &m_object_menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", &m_object_menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(&m_object_menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1306,10 +1317,10 @@ void MenuFactory::create_extra_object_menu() if (!split_menu) return; append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", &m_object_menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", &m_object_menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", &m_object_menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", &m_object_menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(&m_object_menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1351,7 +1362,7 @@ void MenuFactory::create_sla_object_menu() { create_common_object_menu(&m_sla_object_menu); append_menu_item(&m_sla_object_menu, wxID_ANY, _L("Split"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", nullptr, + [](wxCommandEvent&) { plater()->split_object(); }, "", nullptr, []() { return plater()->can_split(true); }, m_parent); m_sla_object_menu.AppendSeparator(); @@ -1429,10 +1440,10 @@ void MenuFactory::create_bbl_part_menu() return; append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into mutiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into mutiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", @@ -1490,6 +1501,17 @@ void MenuFactory::create_plate_menu() }, m_parent); + // reload all objects on current plate + append_menu_item( + menu, wxID_ANY, _L("Reload All"), _L("reload all from disk"), + [](wxCommandEvent&) { + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); + plater()->set_prepare_state(Job::PREPARE_STATE_MENU); + plater()->reload_all_from_disk(); + }, + "", nullptr, []() { return !plater()->get_partplate_list().get_selected_plate()->get_objects().empty(); }, m_parent); + // orient objects on current plate append_menu_item(menu, wxID_ANY, _L("Auto Rotate"), _L("auto rotate current plate"), [](wxCommandEvent&) { @@ -1675,10 +1697,10 @@ wxMenu* MenuFactory::multi_selection_menu() wxMenu* split_menu = new wxMenu(); if (split_menu) { append_menu_item(split_menu, wxID_ANY, _L("To objects"), _L("Split the selected object into multiple objects"), - [](wxCommandEvent&) { plater()->split_object(); }, "split_objects", menu, + [](wxCommandEvent&) { plater()->split_object(); }, "menu_split_objects", menu, []() { return plater()->can_split(true); }, m_parent); append_menu_item(split_menu, wxID_ANY, _L("To parts"), _L("Split the selected object into multiple parts"), - [](wxCommandEvent&) { plater()->split_volume(); }, "split_parts", menu, + [](wxCommandEvent&) { plater()->split_volume(); }, "menu_split_parts", menu, []() { return plater()->can_split(false); }, m_parent); append_submenu(menu, split_menu, wxID_ANY, _L("Split"), _L("Split the selected object"), "", diff --git a/src/slic3r/GUI/GUI_Init.cpp b/src/slic3r/GUI/GUI_Init.cpp index 81918c58ef..002123f8b3 100644 --- a/src/slic3r/GUI/GUI_Init.cpp +++ b/src/slic3r/GUI/GUI_Init.cpp @@ -40,14 +40,14 @@ int GUI_Run(GUI_InitParams ¶ms) try { //GUI::GUI_App* gui = new GUI::GUI_App(params.start_as_gcodeviewer ? GUI::GUI_App::EAppMode::GCodeViewer : GUI::GUI_App::EAppMode::Editor); GUI::GUI_App* gui = new GUI::GUI_App(); - /*if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { + //if (gui->get_app_mode() != GUI::GUI_App::EAppMode::GCodeViewer) { // G-code viewer is currently not performing instance check, a new G-code viewer is started every time. - bool gui_single_instance_setting = gui->app_config->get("single_instance") == "1"; + bool gui_single_instance_setting = gui->app_config->get("app", "single_instance") == "true"; if (Slic3r::instance_check(params.argc, params.argv, gui_single_instance_setting)) { //TODO: do we have delete gui and other stuff? return -1; } - //}*/ + //} // gui->autosave = m_config.opt_string("autosave"); GUI::GUI_App::SetInstance(gui); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 1f3ae959eb..25a18d2c6a 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1347,6 +1347,7 @@ void ObjectList::show_context_menu(const bool evt_context_menu) const ModelVolume *volume = object(obj_idx)->volumes[vol_idx]; menu = volume->is_text() ? plater->text_part_menu() : + volume->is_svg() ? plater->svg_part_menu() : // ORCA fixes missing "Edit SVG" item for Add/Negative/Modifier SVG objects in object list plater->part_menu(); } else @@ -5024,8 +5025,17 @@ void ObjectList::change_part_type() } } - const wxString names[] = { _L("Part"), _L("Negative Part"), _L("Modifier"), _L("Support Blocker"), _L("Support Enforcer") }; - SingleChoiceDialog dlg(_L("Type:"), _L("Choose part type"), wxArrayString(5, names), int(type)); + // ORCA: Fix crash when changing type of svg / text modifier + wxArrayString names; + names.Add(_L("Part")); + names.Add(_L("Negative Part")); + names.Add(_L("Modifier")); + if (!volume->is_svg() && !volume->is_text()) { + names.Add(_L("Support Blocker")); + names.Add(_L("Support Enforcer")); + } + + SingleChoiceDialog dlg(_L("Type:"), _L("Choose part type"), names, int(type)); auto new_type = ModelVolumeType(dlg.GetSingleChoiceIndex()); if (new_type == type || new_type == ModelVolumeType::INVALID) @@ -5697,9 +5707,6 @@ void ObjectList::on_plate_deleted(int plate_idx) void ObjectList::reload_all_plates(bool notify_partplate) { m_prevent_canvas_selection_update = true; -#ifdef __WXOSX__ - AssociateModel(nullptr); -#endif // Unselect all objects before deleting them, so that no change of selection is emitted during deletion. @@ -5729,9 +5736,6 @@ void ObjectList::reload_all_plates(bool notify_partplate) update_selections(); -#ifdef __WXOSX__ - AssociateModel(m_objects_model); -#endif m_prevent_canvas_selection_update = false; // update scene diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 3a57a895d6..ccf17a7716 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -291,11 +291,12 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -305,6 +306,7 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } + ImGui::PopStyleColor(1); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index bd91482f65..727ceebc9b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -470,14 +470,14 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGuiColorEditFlags flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip; if (m_selected_extruder_idx != extruder_idx) flags |= ImGuiColorEditFlags_NoBorder; #ifdef __APPLE__ - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); // ORCA use orca color for selected filament border ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0); bool color_picked = ImGui::ColorButton(color_label.c_str(), color_vec, flags, button_size); ImGui::PopStyleVar(2); ImGui::PopStyleColor(1); #else - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); // ORCA use orca color for selected filament border ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0); bool color_picked = ImGui::ColorButton(color_label.c_str(), color_vec, flags, button_size); @@ -519,11 +519,12 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -533,6 +534,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } + ImGui::PopStyleColor(1); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index e534b2b3c1..b2692e9555 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -244,11 +244,12 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); + ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); // r, g, b, a - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_ButtonActive, m_is_dark_mode ? ImVec4(43 / 255.0f, 64 / 255.0f, 54 / 255.0f, 1.00f) : ImVec4(0.86f, 0.99f, 0.91f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush + ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); } @@ -258,6 +259,7 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) ImGui::PopStyleColor(4); ImGui::PopStyleVar(2); } + ImGui::PopStyleColor(1); ImGui::PopStyleVar(1); if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index 2fa96de169..0c82aae6ba 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -278,8 +278,8 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.81f, 0.81f, 0.81f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, ImVec4(0.81f, 0.81f, 0.81f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_FrameBgActive, ImVec4(0.81f, 0.81f, 0.81f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); - ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImVec4(0.00f, 0.68f, 0.26f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_Text, ImGuiWrapper::COL_ORCA); // ORCA Use orca color for step slider text + ImGui::PushStyleColor(ImGuiCol_SliderGrab, ImGuiWrapper::COL_ORCA); // ORCA Use orca color for step slider thumb if (m_imgui->bbl_sliderin("##ReductionLevel", &reduction, 0, 4, reduce_captions[reduction].c_str())) { if (reduction < 0) reduction = 0; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index 271368d9e6..5290a81f8c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -24,6 +24,7 @@ #include #include "libslic3r/SVG.hpp" #include +#include "wx/fontenum.h" namespace Slic3r { namespace GUI { @@ -34,6 +35,119 @@ static const wxColour FONT_TEXTURE_FG = *wxWHITE; static const int FONT_SIZE = 12; static const float SELECTABLE_INNER_OFFSET = 8.0f; +static std::vector font_black_list = { +#ifdef _WIN32 + "MT Extra", + "Marlett", + "Symbol", + "Webdings", + "Wingdings", + "Wingdings 2", + "Wingdings 3", +#endif +}; + +static const wxFontEncoding font_encoding = wxFontEncoding::wxFONTENCODING_SYSTEM; + +#ifdef _WIN32 +static bool load_hfont(void *hfont, DWORD &dwTable, DWORD &dwOffset, size_t &size, HDC hdc = nullptr) +{ + bool del_hdc = false; + if (hdc == nullptr) { + del_hdc = true; + hdc = ::CreateCompatibleDC(NULL); + if (hdc == NULL) return false; + } + + // To retrieve the data from the beginning of the file for TrueType + // Collection files specify 'ttcf' (0x66637474). + dwTable = 0x66637474; + dwOffset = 0; + + ::SelectObject(hdc, hfont); + size = ::GetFontData(hdc, dwTable, dwOffset, NULL, 0); + if (size == GDI_ERROR) { + // HFONT is NOT TTC(collection) + dwTable = 0; + size = ::GetFontData(hdc, dwTable, dwOffset, NULL, 0); + } + + if (size == 0 || size == GDI_ERROR) { + if (del_hdc) ::DeleteDC(hdc); + return false; + } + return true; +} +#endif // _WIN32 + +bool can_load(const wxFont &font) +{ +#ifdef _WIN32 + DWORD dwTable = 0, dwOffset = 0; + size_t size = 0; + void* hfont = font.GetHFONT(); + if (!load_hfont(hfont, dwTable, dwOffset, size)) + return false; + return hfont != nullptr; +#elif defined(__APPLE__) + return true; +#elif defined(__linux__) + return true; +#endif + return false; +} + +std::vector init_face_names() +{ + std::vector valid_font_names; + wxArrayString facenames = wxFontEnumerator::GetFacenames(font_encoding); + std::vector bad_fonts; + + // validation lambda + auto is_valid_font = [coding = font_encoding, bad = bad_fonts](const wxString &name) { + if (name.empty()) + return false; + + // vertical font start with @, we will filter it out + // Not sure if it is only in Windows so filtering is on all platforms + if (name[0] == '@') + return false; + + // previously detected bad font + auto it = std::lower_bound(bad.begin(), bad.end(), name); + if (it != bad.end() && *it == name) + return false; + + wxFont wx_font(wxFontInfo().FaceName(name).Encoding(coding)); + // Faster chech if wx_font is loadable but not 100% + // names could contain not loadable font + if (!wx_font.IsOk()) + return false; + + if (!can_load(wx_font)) + return false; + + return true; + }; + + std::sort(facenames.begin(), facenames.end()); + for (const wxString &name : facenames) { + if (is_valid_font(name)) { + valid_font_names.push_back(name.ToStdString()); + } + else { + bad_fonts.emplace_back(name); + } + } + assert(std::is_sorted(bad_fonts.begin(), bad_fonts.end())); + + for (auto iter = font_black_list.begin(); iter != font_black_list.end(); ++iter) { + valid_font_names.erase(std::remove(valid_font_names.begin(), valid_font_names.end(), *iter), valid_font_names.end()); + } + + return valid_font_names; +} + class Line_3D { public: @@ -142,7 +256,9 @@ GLGizmoText::~GLGizmoText() bool GLGizmoText::on_init() { - m_avail_font_names = init_occt_fonts(); + m_avail_font_names = init_face_names(); + + //m_avail_font_names = init_occt_fonts(); update_font_texture(); m_scale = m_imgui->get_font_size(); m_shortcut_key = WXK_CONTROL_T; diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index f6b7432aa8..898ed9aa1a 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -41,30 +41,45 @@ int get_hms_info_version(std::string& version) return result; } -int HMSQuery::download_hms_info() +int HMSQuery::download_hms_related(std::string hms_type, json* receive_json) { + std::string local_version = "0"; + load_from_local(local_version, hms_type, receive_json); AppConfig* config = wxGetApp().app_config; if (!config) return -1; std::string hms_host = wxGetApp().app_config->get_hms_host(); std::string lang; std::string query_params = HMSQuery::build_query_params(lang); - std::string url = (boost::format("https://%1%/query.php?%2%") % hms_host % query_params).str(); + std::string url; + if (hms_type.compare(QUERY_HMS_INFO) == 0) { + url = (boost::format("https://%1%/query.php?%2%&v=%3%") % hms_host % query_params % local_version).str(); + } + else if (hms_type.compare(QUERY_HMS_ACTION) == 0) { + url = (boost::format("https://%1%/hms/GetActionImage.php?v=%2%") % hms_host % local_version).str(); + } BOOST_LOG_TRIVIAL(info) << "hms: download url = " << url; - Slic3r::Http http = Slic3r::Http::get(url); - m_hms_json.clear(); - http.on_complete([this](std::string body, unsigned status) { + http.on_complete([this, receive_json, hms_type](std::string body, unsigned status) { try { json j = json::parse(body); if (j.contains("result")) { if (j["result"] == 0 && j.contains("data")) { - this->m_hms_json = j["data"]; + if (hms_type.compare(QUERY_HMS_INFO) == 0) { + (*receive_json) = j["data"]; + this->save_local = true; + } + else if (hms_type.compare(QUERY_HMS_ACTION) == 0) { + (*receive_json)["data"] = j["data"]; + this->save_local = true; + } if (j.contains("ver")) - m_hms_json["version"] = std::to_string(j["ver"].get()); - } else { - this->m_hms_json.clear(); + (*receive_json)["version"] = std::to_string(j["ver"].get()); + } else if (j["result"] == 201){ + BOOST_LOG_TRIVIAL(info) << "HMSQuery: HMS info is the latest version"; + }else{ + receive_json->clear(); BOOST_LOG_TRIVIAL(info) << "HMSQuery: update hms info error = " << j["result"].get(); } } @@ -77,19 +92,21 @@ int HMSQuery::download_hms_info() BOOST_LOG_TRIVIAL(error) << "HMSQuery: update hms info error = " << error << ", body = " << body << ", status = " << status; }).perform_sync(); - if (!m_hms_json.empty()) - save_to_local(lang); + if (!receive_json->empty() && save_local == true) { + save_to_local(lang, hms_type, *receive_json); + save_local = false; + } return 0; } -int HMSQuery::load_from_local(std::string &version_info) +int HMSQuery::load_from_local(std::string& version_info, std::string hms_type, json* load_json) { if (data_dir().empty()) { - version_info = ""; + version_info = "0"; BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local, data_dir() is empty"; return -1; } - std::string filename = get_hms_file(HMSQuery::hms_language_code()); + std::string filename = get_hms_file(hms_type, HMSQuery::hms_language_code()); auto hms_folder = (boost::filesystem::path(data_dir()) / "hms"); if (!fs::exists(hms_folder)) fs::create_directory(hms_folder); @@ -98,9 +115,9 @@ int HMSQuery::load_from_local(std::string &version_info) std::ifstream json_file(encode_path(dir_str.c_str())); try { if (json_file.is_open()) { - json_file >> m_hms_json; - if (m_hms_json.contains("version")) { - version_info = m_hms_json["version"].get(); + json_file >> (*load_json); + if ((*load_json).contains("version")) { + version_info = (*load_json)["version"].get(); return 0; } else { BOOST_LOG_TRIVIAL(warning) << "HMS: load_from_local, no version info"; @@ -108,28 +125,28 @@ int HMSQuery::load_from_local(std::string &version_info) } } } catch(...) { - version_info = ""; + version_info = "0"; BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local failed"; return -1; } - version_info = ""; + version_info = "0"; return 0; } -int HMSQuery::save_to_local(std::string lang) +int HMSQuery::save_to_local(std::string lang, std::string hms_type, json save_json) { if (data_dir().empty()) { BOOST_LOG_TRIVIAL(error) << "HMS: save_to_local, data_dir() is empty"; return -1; } - std::string filename = get_hms_file(lang); + std::string filename = get_hms_file(hms_type,lang); auto hms_folder = (boost::filesystem::path(data_dir()) / "hms"); if (!fs::exists(hms_folder)) fs::create_directory(hms_folder); std::string dir_str = (hms_folder / filename).make_preferred().string(); std::ofstream json_file(encode_path(dir_str.c_str())); if (json_file.is_open()) { - json_file << std::setw(4) << m_hms_json << std::endl; + json_file << std::setw(4) << save_json << std::endl; json_file.close(); return 0; } @@ -166,9 +183,13 @@ std::string HMSQuery::build_query_params(std::string& lang) return query_params; } -std::string HMSQuery::get_hms_file(std::string lang) +std::string HMSQuery::get_hms_file(std::string hms_type, std::string lang) { - //std::string lang_code = HMSQuery::hms_language_code(); + //return hms action filename + if (hms_type.compare(QUERY_HMS_ACTION) == 0) { + return (boost::format("hms_action.json")).str(); + } + //return hms filename return (boost::format("hms_%1%.json") % lang).str(); } @@ -185,9 +206,9 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ if (long_error_code.empty()) return wxEmptyString; - if (m_hms_json.contains("device_hms")) { - if (m_hms_json["device_hms"].contains(lang_code)) { - for (auto item = m_hms_json["device_hms"][lang_code].begin(); item != m_hms_json["device_hms"][lang_code].end(); item++) { + if (m_hms_info_json.contains("device_hms")) { + if (m_hms_info_json["device_hms"].contains(lang_code)) { + for (auto item = m_hms_info_json["device_hms"][lang_code].begin(); item != m_hms_info_json["device_hms"][lang_code].end(); item++) { if (item->contains("ecode")) { std::string temp_string = (*item)["ecode"].get(); if (boost::to_upper_copy(temp_string) == long_error_code) { @@ -201,8 +222,8 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ } else { BOOST_LOG_TRIVIAL(error) << "hms: query_hms_msg, do not contains lang_code = " << lang_code; // return first language - if (!m_hms_json["device_hms"].empty()) { - for (auto lang : m_hms_json["device_hms"]) { + if (!m_hms_info_json["device_hms"].empty()) { + for (auto lang : m_hms_info_json["device_hms"]) { for (auto item = lang.begin(); item != lang.end(); item++) { if (item->contains("ecode")) { std::string temp_string = (*item)["ecode"].get(); @@ -225,9 +246,9 @@ wxString HMSQuery::_query_hms_msg(std::string long_error_code, std::string lang_ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_code) { - if (m_hms_json.contains("device_error")) { - if (m_hms_json["device_error"].contains(lang_code)) { - for (auto item = m_hms_json["device_error"][lang_code].begin(); item != m_hms_json["device_error"][lang_code].end(); item++) { + if (m_hms_info_json.contains("device_error")) { + if (m_hms_info_json["device_error"].contains(lang_code)) { + for (auto item = m_hms_info_json["device_error"][lang_code].begin(); item != m_hms_info_json["device_error"][lang_code].end(); item++) { if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == error_code) { if (item->contains("intro")) { return wxString::FromUTF8((*item)["intro"].get()); @@ -238,8 +259,8 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod } else { BOOST_LOG_TRIVIAL(error) << "hms: query_error_msg, do not contains lang_code = " << lang_code; // return first language - if (!m_hms_json["device_error"].empty()) { - for (auto lang : m_hms_json["device_error"]) { + if (!m_hms_info_json["device_error"].empty()) { + for (auto lang : m_hms_info_json["device_error"]) { for (auto item = lang.begin(); item != lang.end(); item++) { if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == error_code) { if (item->contains("intro")) { @@ -258,6 +279,33 @@ wxString HMSQuery::_query_error_msg(std::string error_code, std::string lang_cod return wxEmptyString; } +wxString HMSQuery::_query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action) +{ + if (m_hms_action_json.contains("data")) { + for (auto item = m_hms_action_json["data"].begin(); item != m_hms_action_json["data"].end(); item++) { + if (item->contains("ecode") && boost::to_upper_copy((*item)["ecode"].get()) == long_error_code) { + if (item->contains("device") && (boost::to_upper_copy((*item)["device"].get()) == dev_id || + (*item)["device"].get() == "default")) { + if (item->contains("actions")) { + for (auto item_actions = (*item)["actions"].begin(); item_actions != (*item)["actions"].end(); item_actions++) { + button_action.emplace_back(item_actions->get()); + } + } + if (item->contains("image")) { + return wxString::FromUTF8((*item)["image"].get()); + } + } + } + } + } + else { + BOOST_LOG_TRIVIAL(info) << "data is not exists"; + return wxEmptyString; + } + return wxEmptyString; +} + + wxString HMSQuery::query_print_error_msg(int print_error) { char buf[32]; @@ -266,29 +314,22 @@ wxString HMSQuery::query_print_error_msg(int print_error) return _query_error_msg(std::string(buf), lang_code); } +wxString HMSQuery::query_print_error_url_action(int print_error, std::string dev_id, std::vector& button_action) +{ + char buf[32]; + ::sprintf(buf, "%08X", print_error); + //The first three digits of SN number + dev_id = dev_id.substr(0, 3); + return _query_error_url_action(std::string(buf), dev_id, button_action); +} + + int HMSQuery::check_hms_info() { boost::thread check_thread = boost::thread([this] { - bool download_new_hms_info = true; - // load local hms json file - std::string version = ""; - if (load_from_local(version) == 0) { - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info current version = " << version; - std::string new_version; - get_hms_info_version(new_version); - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info latest version = " << new_version; - if (new_version.empty()) {return 0;} - - if (!version.empty() && version == new_version) { - download_new_hms_info = false; - } - } - BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info need download new hms info = " << download_new_hms_info; - // download if version is update - if (download_new_hms_info) { - download_hms_info(); - } + download_hms_related(QUERY_HMS_INFO, &m_hms_info_json); + download_hms_related(QUERY_HMS_ACTION, &m_hms_action_json); return 0; }); return 0; diff --git a/src/slic3r/GUI/HMS.hpp b/src/slic3r/GUI/HMS.hpp index 64edf84caa..01df19ed38 100644 --- a/src/slic3r/GUI/HMS.hpp +++ b/src/slic3r/GUI/HMS.hpp @@ -16,23 +16,30 @@ namespace Slic3r { namespace GUI { #define HMS_INFO_FILE "hms.json" +#define QUERY_HMS_INFO "query_hms_info" +#define QUERY_HMS_ACTION "query_hms_action" class HMSQuery { protected: - json m_hms_json; - int download_hms_info(); - int load_from_local(std::string& version_info); - int save_to_local(std::string lang); - std::string get_hms_file(std::string lang); - wxString _query_hms_msg(std::string long_error_code, std::string lang_code = "en"); - wxString _query_error_msg(std::string long_error_code, std::string lang_code = "en"); + json m_hms_info_json; + json m_hms_action_json; + int download_hms_related(std::string hms_type,json* receive_json); + int load_from_local(std::string& version_info, std::string hms_type, json* load_json); + int save_to_local(std::string lang, std::string hms_type,json save_json); + std::string get_hms_file(std::string hms_type, std::string lang = std::string("en")); + wxString _query_hms_msg(std::string long_error_code, std::string lang_code = std::string("en")); + wxString _query_error_msg(std::string long_error_code, std::string lang_code = std::string("en")); + wxString _query_error_url_action(std::string long_error_code, std::string dev_id, std::vector& button_action); public: HMSQuery() {} int check_hms_info(); wxString query_hms_msg(std::string long_error_code); wxString query_print_error_msg(int print_error); + wxString query_print_error_url_action(int print_error, std::string dev_id, std::vector& button_action); static std::string hms_language_code(); static std::string build_query_params(std::string& lang); + + bool save_local = false; }; int get_hms_info_version(std::string &version); diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index f12cf5aab4..1320e28084 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1073,7 +1073,7 @@ bool IMSlider::render(int canvas_width, int canvas_height) ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleVar(ImGuiStyleVar_::ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); ImGui::PushStyleColor(ImGuiCol_::ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); - ImGui::PushStyleColor(ImGuiCol_::ImGuiCol_Text, ImVec4(0, 0.682f, 0.259f, 1.0f)); + ImGui::PushStyleColor(ImGuiCol_::ImGuiCol_Text, ImGuiWrapper::COL_ORCA); // ORCA: Use orca color for slider value text int windows_flag = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 3926e15630..59559839aa 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -2512,7 +2512,7 @@ void ImGuiWrapper::push_confirm_button_style() { if (m_is_dark_mode) { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, to_ImVec4(decode_color_to_float_array("#267E73"))); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 0.88f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 0.88f)); @@ -2520,7 +2520,7 @@ void ImGuiWrapper::push_confirm_button_style() { else { ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_Border, ImVec4(0.f / 255.f, 150.f / 255.f, 136.f / 255.f, 1.f)); - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(61.f / 255.f, 203.f / 255.f, 115.f / 255.f, 1.f)); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, to_ImVec4(decode_color_to_float_array("#26A69A"))); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(27.f / 255.f, 136.f / 255.f, 68.f / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.f, 1.f, 1.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); @@ -2605,9 +2605,9 @@ void ImGuiWrapper::pop_combo_style() void ImGuiWrapper::push_radio_style() { if (m_is_dark_mode) { - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, to_ImVec4(decode_color_to_float_array("#00675b"))); // ORCA use orca color for radio buttons } else { - ImGui::PushStyleColor(ImGuiCol_CheckMark, ImVec4(0.00f, 0.00f, 0.00f, 1.00f)); + ImGui::PushStyleColor(ImGuiCol_CheckMark, to_ImVec4(decode_color_to_float_array("#009688"))); // ORCA use orca color for radio buttons } } @@ -2888,12 +2888,12 @@ void ImGuiWrapper::init_style() // ComboBox items set_color(ImGuiCol_Header, COL_ORANGE_DARK); - set_color(ImGuiCol_HeaderHovered, COL_BLUE_LIGHT); - set_color(ImGuiCol_HeaderActive, COL_BLUE_LIGHT); + set_color(ImGuiCol_HeaderHovered, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.50f))); // ORCA Use orca color for headers + set_color(ImGuiCol_HeaderActive, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.75f))); // ORCA Use orca color for headers // Slider - set_color(ImGuiCol_SliderGrab, COL_BLUE_LIGHT); - set_color(ImGuiCol_SliderGrabActive, COL_BLUE_LIGHT); + set_color(ImGuiCol_SliderGrab, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.50f))); // ORCA Use orca color for slider thumbs + set_color(ImGuiCol_SliderGrabActive, to_ImVec4(to_rgba(ColorRGB::ORCA(), 0.75f))); // ORCA Use orca color for slider thumbs // Separator set_color(ImGuiCol_Separator, COL_BLUE_LIGHT); diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 57b22cc221..5809b8be7e 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -124,9 +124,9 @@ void BindJob::process(Ctl &ctl) } dev->update_user_machine_list_info(); - wxCommandEvent event(EVT_BIND_MACHINE_SUCCESS); - event.SetEventObject(m_event_handle); - wxPostEvent(m_event_handle, event); + wxCommandEvent event(EVT_BIND_MACHINE_SUCCESS); + event.SetEventObject(m_event_handle); + wxPostEvent(m_event_handle, event); return; } diff --git a/src/slic3r/GUI/Jobs/EmbossJob.cpp b/src/slic3r/GUI/Jobs/EmbossJob.cpp index 83bdd53b31..45931691e1 100644 --- a/src/slic3r/GUI/Jobs/EmbossJob.cpp +++ b/src/slic3r/GUI/Jobs/EmbossJob.cpp @@ -979,7 +979,8 @@ TriangleMesh create_default_mesh() std::string path = Slic3r::resources_dir() + "/data/embossed_text.obj"; TriangleMesh triangle_mesh; std::string message; - if (!load_obj(path.c_str(), &triangle_mesh, message)) { + ObjInfo obj_info; + if (!load_obj(path.c_str(), &triangle_mesh, obj_info, message)) { // when can't load mesh use cube return TriangleMesh(its_make_cube(36., 4., 2.5)); } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 9befbb77b3..4d455038cd 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -92,6 +92,7 @@ wxDEFINE_EVENT(EVT_CHECK_PRIVACY_VER, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECK_PRIVACY_SHOW, wxCommandEvent); wxDEFINE_EVENT(EVT_SHOW_IP_DIALOG, wxCommandEvent); wxDEFINE_EVENT(EVT_SET_SELECTED_MACHINE, wxCommandEvent); +wxDEFINE_EVENT(EVT_UPDATE_MACHINE_LIST, wxCommandEvent); wxDEFINE_EVENT(EVT_UPDATE_PRESET_CB, SimpleEvent); @@ -114,12 +115,12 @@ public: OrcaSlicerTaskBarIcon(wxTaskBarIconType iconType = wxTBI_DEFAULT_TYPE) : wxTaskBarIcon(iconType) {} wxMenu *CreatePopupMenu() override { wxMenu *menu = new wxMenu; - //if (wxGetApp().app_config->get("single_instance") == "false") { + if (wxGetApp().app_config->get("single_instance") == "false") { // Only allow opening a new PrusaSlicer instance on OSX if "single_instance" is disabled, // as starting new instances would interfere with the locking mechanism of "single_instance" support. append_menu_item(menu, wxID_ANY, _L("New Window"), _L("Open a new window"), [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr); - //} + } // append_menu_item(menu, wxID_ANY, _L("G-code Viewer") + dots, _L("Open G-code Viewer"), // [](wxCommandEvent&) { start_new_gcodeviewer_open_file(); }, "", nullptr); return menu; @@ -885,7 +886,7 @@ void MainFrame::shutdown() // Stop the background thread of the removable drive manager, so that no new updates will be sent to the Plater. //wxGetApp().removable_drive_manager()->shutdown(); //stop listening for messages from other instances - //wxGetApp().other_instance_message_handler()->shutdown(this); + wxGetApp().other_instance_message_handler()->shutdown(this); // Save the slic3r.ini.Usually the ini file is saved from "on idle" callback, // but in rare cases it may not have been called yet. if(wxGetApp().app_config->dirty()) @@ -923,29 +924,6 @@ void MainFrame::show_publish_button(bool show) // Layout(); } -void MainFrame::show_calibration_button(bool show) -{ -// #ifdef __APPLE__ -// bool shown = m_menubar->FindMenu(_L("Calibration")) != wxNOT_FOUND; -// if (shown == show) -// ; -// else if (show) -// m_menubar->Insert(3, m_calib_menu, wxString::Format("&%s", _L("Calibration"))); -// else -// m_menubar->Remove(3); -// #else -// topbar()->ShowCalibrationButton(show); -// #endif - show = !show; - auto shown2 = m_tabpanel->FindPage(m_calibration) != wxNOT_FOUND; - if (shown2 == show) - ; - else if (show) - m_tabpanel->InsertPage(tpCalibration, m_calibration, _L("Calibration"), std::string("tab_monitor_active"), std::string("tab_monitor_active"), false); - else - m_tabpanel->RemovePage(tpCalibration); -} - void MainFrame::update_title_colour_after_set_title() { #ifdef __APPLE__ @@ -1078,14 +1056,21 @@ void MainFrame::init_tabpanel() { m_printer_view->load_url(url, key); }); m_printer_view->Hide(); - + + if (wxGetApp().is_enable_multi_machine()) { + m_multi_machine = new MultiMachinePage(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_multi_machine->SetBackgroundColour(*wxWHITE); + // TODO: change the bitmap + m_tabpanel->AddPage(m_multi_machine, _L("Multi-device"), std::string("tab_multi_active"), std::string("tab_multi_active"), false); + } + m_project = new ProjectPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_project->SetBackgroundColour(*wxWHITE); m_tabpanel->AddPage(m_project, _L("Project"), std::string("tab_auxiliary_active"), std::string("tab_auxiliary_active"), false); m_calibration = new CalibrationPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); m_calibration->SetBackgroundColour(*wxWHITE); - m_tabpanel->AddPage(m_calibration, _L("Calibration"), std::string("tab_monitor_active"), std::string("tab_monitor_active"), false); + m_tabpanel->AddPage(m_calibration, _L("Calibration"), std::string("tab_calibration_active"), std::string("tab_calibration_active"), false); if (m_plater) { // load initial config @@ -1103,37 +1088,77 @@ void MainFrame::init_tabpanel() { // SoftFever void MainFrame::show_device(bool bBBLPrinter) { - if (m_tabpanel->GetPage(tpMonitor) != m_monitor && - m_tabpanel->GetPage(tpMonitor) != m_printer_view) { - BOOST_LOG_TRIVIAL(error) << "Failed to find device tab"; - return; - } - if (bBBLPrinter) { - if (m_tabpanel->GetPage(tpMonitor) != m_monitor) { - m_printer_view->Hide(); - m_monitor->Show(true); - m_tabpanel->RemovePage(tpMonitor); - m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), - std::string("tab_monitor_active"), - std::string("tab_monitor_active")); - //m_tabpanel->SetSelection(tp3DEditor); - } - } else { - if (m_tabpanel->GetPage(tpMonitor) != m_printer_view) { - m_printer_view->Show(); + auto idx = -1; + if (bBBLPrinter) { + if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) + return; + // Remove printer view + if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND) { + m_printer_view->Show(false); + m_tabpanel->RemovePage(idx); + } + + // Create/insert monitor page + if (!m_monitor) { + m_monitor = new MonitorPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_monitor->SetBackgroundColour(*wxWHITE); + } + m_monitor->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_monitor, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); + + if (wxGetApp().is_enable_multi_machine()) { + if (!m_multi_machine) { + m_multi_machine = new MultiMachinePage(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_multi_machine->SetBackgroundColour(*wxWHITE); + } + // TODO: change the bitmap + m_multi_machine->Show(false); + m_tabpanel->InsertPage(tpMultiDevice, m_multi_machine, _L("Multi-device"), std::string("tab_multi_active"), + std::string("tab_multi_active"), false); + } + if (!m_calibration) { + m_calibration = new CalibrationPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_calibration->SetBackgroundColour(*wxWHITE); + } + m_calibration->Show(false); + m_tabpanel->InsertPage(tpCalibration, m_calibration, _L("Calibration"), std::string("tab_calibration_active"), + std::string("tab_calibration_active"), false); + +#ifdef _MSW_DARK_MODE + wxGetApp().UpdateDarkUIWin(this); +#endif // _MSW_DARK_MODE + + } else { + if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) + return; + + if ((idx = m_tabpanel->FindPage(m_calibration)) != wxNOT_FOUND) { + m_calibration->Show(false); + m_tabpanel->RemovePage(idx); + } + if ((idx = m_tabpanel->FindPage(m_multi_machine)) != wxNOT_FOUND) { + m_multi_machine->Show(false); + m_tabpanel->RemovePage(idx); + } + if ((idx = m_tabpanel->FindPage(m_monitor)) != wxNOT_FOUND) { m_monitor->Show(false); - m_tabpanel->RemovePage(tpMonitor); - m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), - std::string("tab_monitor_active"), - std::string("tab_monitor_active")); - //m_tabpanel->SetSelection(tp3DEditor); + m_tabpanel->RemovePage(idx); + } + if (m_printer_view == nullptr) { + m_printer_view = new PrinterWebView(m_tabpanel); + Bind(EVT_LOAD_PRINTER_URL, [this](LoadPrinterViewEvent& evt) { + wxString url = evt.GetString(); + wxString key = evt.GetAPIkey(); + // select_tab(MainFrame::tpMonitor); + m_printer_view->load_url(url, key); + }); + } + m_printer_view->Show(false); + m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), std::string("tab_monitor_active"), + std::string("tab_monitor_active")); } - } - - } - bool MainFrame::preview_only_hint() { if (m_plater && (m_plater->only_gcode_mode() || (m_plater->using_exported_file()))) { @@ -1479,6 +1504,7 @@ bool MainFrame::can_reslice() const wxBoxSizer* MainFrame::create_side_tools() { + enable_multi_machine = wxGetApp().is_enable_multi_machine(); int em = em_unit(); wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); @@ -1536,7 +1562,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { //this->m_plater->select_view_3D("Preview"); - if (m_print_select == ePrintAll || m_print_select == ePrintPlate) + if (m_print_select == ePrintAll || m_print_select == ePrintPlate || m_print_select == ePrintMultiMachine) { m_plater->apply_background_progress(); // check valid of print @@ -1547,6 +1573,8 @@ wxBoxSizer* MainFrame::create_side_tools() wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_ALL)); if (m_print_select == ePrintPlate) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); + if(m_print_select == ePrintMultiMachine) + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE)); } } else if (m_print_select == eExportGcode) @@ -1563,6 +1591,8 @@ wxBoxSizer* MainFrame::create_side_tools() wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_TO_PRINTER)); else if (m_print_select == eSendToPrinterAll) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL)); + /* else if (m_print_select == ePrintMultiMachine) + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE));*/ }); m_slice_option_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) @@ -1701,6 +1731,25 @@ wxBoxSizer* MainFrame::create_side_tools() p->Dismiss(); }); + p->append_button(print_plate_btn); + p->append_button(print_all_btn); + p->append_button(send_to_printer_btn); + p->append_button(send_to_printer_all_btn); + if (enable_multi_machine) { + SideButton* print_multi_machine_btn = new SideButton(p, _L("Send to Multi-device"), ""); + print_multi_machine_btn->SetCornerRadius(0); + print_multi_machine_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) { + m_print_btn->SetLabel(_L("Send to Multi-device")); + m_print_select = ePrintMultiMachine; + m_print_enable = get_enable_print_status(); + m_print_btn->Enable(m_print_enable); + this->Layout(); + p->Dismiss(); + }); + p->append_button(print_multi_machine_btn); + } + p->append_button(export_sliced_file_btn); + p->append_button(export_all_sliced_file_btn); SideButton* export_gcode_btn = new SideButton(p, _L("Export G-code file"), ""); export_gcode_btn->SetCornerRadius(0); export_gcode_btn->Bind(wxEVT_BUTTON, [this, p](wxCommandEvent&) { @@ -1710,13 +1759,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_btn->Enable(m_print_enable); this->Layout(); p->Dismiss(); - }); - p->append_button(print_plate_btn); - p->append_button(print_all_btn); - p->append_button(send_to_printer_btn); - p->append_button(send_to_printer_all_btn); - p->append_button(export_sliced_file_btn); - p->append_button(export_all_sliced_file_btn); + }); p->append_button(export_gcode_btn); } @@ -1859,6 +1902,14 @@ bool MainFrame::get_enable_print_status() enable = false; } } + else if (m_print_select == ePrintMultiMachine) + { + if (!current_plate->is_slice_result_ready_for_print()) + { + enable = false; + } + enable = enable && !is_all_plates; + } BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": m_print_select %1%, enable= %2% ")%m_print_select %enable; @@ -1978,8 +2029,12 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) //if (m_layout != ESettingsLayout::Dlg) // Do not update tabs if the Settings are in the separated dialog m_param_panel->msw_rescale(); m_project->msw_rescale(); - m_monitor->msw_rescale(); - m_calibration->msw_rescale(); + if(m_monitor) + m_monitor->msw_rescale(); + if(m_multi_machine) + m_multi_machine->msw_rescale(); + if(m_calibration) + m_calibration->msw_rescale(); // BBS #if 0 @@ -2037,8 +2092,10 @@ void MainFrame::on_sys_color_changed() // update Plater wxGetApp().plater()->sys_color_changed(); - m_monitor->on_sys_color_changed(); - m_calibration->on_sys_color_changed(); + if(m_monitor) + m_monitor->on_sys_color_changed(); + if(m_calibration) + m_calibration->on_sys_color_changed(); // update Tabs for (auto tab : wxGetApp().tabs_list) tab->sys_color_changed(); @@ -2180,7 +2237,7 @@ void MainFrame::init_menubar_as_editor() // New Window append_menu_item(fileMenu, wxID_ANY, _L("New Window"), _L("Start a new window"), [](wxCommandEvent&) { start_new_slicer(); }, "", nullptr, - []{ return true; }, this); + [this] { return m_plater != nullptr && wxGetApp().app_config->get("app", "single_instance") == "false"; }, this); #endif // New Project append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\t" + ctrl + "N", _L("Start a new project"), @@ -3286,10 +3343,21 @@ void MainFrame::select_tab(wxPanel* panel) //BBS void MainFrame::jump_to_monitor(std::string dev_id) { + if(!m_monitor) + return; m_tabpanel->SetSelection(tpMonitor); ((MonitorPanel*)m_monitor)->select_machine(dev_id); } +void MainFrame::jump_to_multipage() +{ + if(!m_multi_machine) + return; + m_tabpanel->SetSelection(tpMultiDevice); + ((MultiMachinePage*)m_multi_machine)->jump_to_send_page(); +} + + //BBS GUI refactor: remove unused layout new/dlg void MainFrame::select_tab(size_t tab/* = size_t(-1)*/) { @@ -3655,6 +3723,10 @@ void MainFrame::update_side_preset_ui() //BBS: update the preset m_plater->sidebar().update_presets(Preset::TYPE_PRINTER); m_plater->sidebar().update_presets(Preset::TYPE_FILAMENT); + + + //take off multi machine + if(m_multi_machine){m_multi_machine->clear_page();} } void MainFrame::on_select_default_preset(SimpleEvent& evt) diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 9ef81a8b08..18682a2071 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -32,6 +32,7 @@ #include "BBLTopbar.hpp" #include "PrinterWebView.hpp" #include "calib_dlg.hpp" +#include "MultiMachinePage.hpp" #define ENABEL_PRINT_ALL 0 @@ -98,6 +99,7 @@ class MainFrame : public DPIFrame wxMenuBar* m_menubar{ nullptr }; //wxMenu* publishMenu{ nullptr }; wxMenu * m_calib_menu{nullptr}; + bool enable_multi_machine{ false }; #if 0 wxMenuItem* m_menu_item_repeat { nullptr }; // doesn't used now @@ -199,21 +201,6 @@ protected: #endif public: - - //BBS GUI refactor - enum PrintSelectType - { - ePrintAll = 0, - ePrintPlate = 1, - eExportSlicedFile = 2, - eExportGcode = 3, - eSendGcode = 4, - eSendToPrinter = 5, - eSendToPrinterAll = 6, - eUploadGcode = 7, - eExportAllSlicedFile = 8 - }; - MainFrame(); ~MainFrame() = default; @@ -224,10 +211,11 @@ public: tp3DEditor = 1, tpPreview = 2, tpMonitor = 3, - tpProject = 4, - tpCalibration = 5, - tpAuxiliary = 6, - toDebugTool = 7, + tpMultiDevice = 4, + tpProject = 5, + tpCalibration = 6, + tpAuxiliary = 7, + toDebugTool = 8, }; //BBS: add slice&&print status update logic @@ -240,6 +228,20 @@ public: eEventPrintUpdate = 4 }; + // BBS GUI refactor + enum PrintSelectType { + ePrintAll = 0, + ePrintPlate = 1, + eExportSlicedFile = 2, + eExportGcode = 3, + eSendGcode = 4, + eSendToPrinter = 5, + eSendToPrinterAll = 6, + eUploadGcode = 7, + eExportAllSlicedFile = 8, + ePrintMultiMachine = 9 + }; + void update_layout(); // Called when closing the application and when switching the application language. @@ -257,7 +259,6 @@ public: void set_max_recent_count(int max); void show_publish_button(bool show); - void show_calibration_button(bool show); void update_title_colour_after_set_title(); void show_option(bool show); @@ -308,6 +309,7 @@ public: void load_config(const DynamicPrintConfig& config); //BBS: jump to monitor void jump_to_monitor(std::string dev_id = ""); + void jump_to_multipage(); //BBS: hint when jump to 3Deditor under preview only mode bool preview_only_hint(); // Select tab in m_tabpanel @@ -361,6 +363,7 @@ public: MonitorPanel* m_monitor{ nullptr }; //AuxiliaryPanel* m_auxiliary{ nullptr }; + MultiMachinePage* m_multi_machine{ nullptr }; ProjectPanel* m_project{ nullptr }; CalibrationPanel* m_calibration{ nullptr }; @@ -413,6 +416,7 @@ wxDECLARE_EVENT(EVT_CHECK_PRIVACY_VER, wxCommandEvent); wxDECLARE_EVENT(EVT_CHECK_PRIVACY_SHOW, wxCommandEvent); wxDECLARE_EVENT(EVT_SHOW_IP_DIALOG, wxCommandEvent); wxDECLARE_EVENT(EVT_SET_SELECTED_MACHINE, wxCommandEvent); +wxDECLARE_EVENT(EVT_UPDATE_MACHINE_LIST, wxCommandEvent); wxDECLARE_EVENT(EVT_UPDATE_PRESET_CB, SimpleEvent); diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 944006f3c4..b2032b09ad 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -120,7 +120,7 @@ MediaFilePanel::MediaFilePanel(wxWindow * parent) m_button_management->SetTextColorNormal(*wxWHITE); m_button_management->Enable(false); m_button_refresh->SetBorderWidth(0); - m_button_refresh->SetBackgroundColorNormal(wxColor("#00AE42")); + m_button_refresh->SetBackgroundColorNormal(wxColor("#009688")); m_button_refresh->SetTextColorNormal(*wxWHITE); m_button_refresh->Enable(false); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index bdc3de924e..b69ea2b8b2 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -546,6 +546,13 @@ void MediaPlayCtrl::msw_rescale() { m_button_play->Rescale(); } +void MediaPlayCtrl::jump_to_play() +{ + if (m_last_state != MEDIASTATE_IDLE) + return; + TogglePlay(); +} + void MediaPlayCtrl::onStateChanged(wxMediaEvent &event) { auto last_state = m_last_state; diff --git a/src/slic3r/GUI/MediaPlayCtrl.h b/src/slic3r/GUI/MediaPlayCtrl.h index c4e088876c..f6e8d0dbec 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -42,6 +42,8 @@ public: void msw_rescale(); + void jump_to_play(); + protected: void onStateChanged(wxMediaEvent & event); diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index dfb3ef974c..333f4d3de0 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -132,6 +132,8 @@ AddMachinePanel::~AddMachinePanel() { update_hms_tag(); e.Skip(); }); + + Bind(EVT_JUMP_TO_HMS, &MonitorPanel::jump_to_HMS, this); } MonitorPanel::~MonitorPanel() @@ -196,7 +198,7 @@ MonitorPanel::~MonitorPanel() m_tabpanel->AddPage(m_upgrade_panel, _L("Update"), "", false); m_hms_panel = new HMSPanel(m_tabpanel); - m_tabpanel->AddPage(m_hms_panel, _L("HMS"),"", false); + m_tabpanel->AddPage(m_hms_panel, "HMS","", false); m_initialized = true; show_status((int)MonitorStatus::MONITOR_NO_PRINTER); @@ -530,5 +532,34 @@ Freeze(); Thaw(); } +std::string MonitorPanel::get_string_from_tab(PrinterTab tab) +{ + switch (tab) { + case PT_STATUS : + return "status"; + case PT_MEDIA: + return "sd_card"; + case PT_UPDATE: + return "update"; + case PT_HMS: + return "HMS"; + case PT_DEBUG: + return "debug"; + default: + return ""; + } + return ""; +} + +void MonitorPanel::jump_to_HMS(wxCommandEvent& e) +{ + if (!this->IsShown()) + return; + auto page = m_tabpanel->GetCurrentPage(); + if (page && page != m_hms_panel) + m_tabpanel->SetSelection(PT_HMS); +} + + } // GUI } // Slic3r diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index 715e3e0c17..8da56ddc3b 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -148,11 +148,15 @@ public: void update_side_panel(); void show_status(int status); + std::string get_string_from_tab(PrinterTab tab); + MachineObject *obj { nullptr }; std::string last_conn_type = "undedefined"; void stop_update() {update_flag = false;}; void start_update() {update_flag = true;}; + + void jump_to_HMS(wxCommandEvent& e); }; diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index 3e4380a566..4dd700fd46 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -550,7 +550,7 @@ Newer3mfVersionDialog::Newer3mfVersionDialog(wxWindow *parent, const Semver *fil , m_new_keys(new_keys) { this->SetBackgroundColour(*wxWHITE); - std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL); @@ -614,8 +614,8 @@ wxBoxSizer *Newer3mfVersionDialog::get_btn_sizer() { wxBoxSizer *horizontal_sizer = new wxBoxSizer(wxHORIZONTAL); horizontal_sizer->Add(0, 0, 1, wxEXPAND, 0); - StateColor btn_bg_green(std::pair(wxColour(27, 136, 68), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), - std::pair(wxColour(0, 174, 66), StateColor::Normal)); + StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); StateColor btn_bg_white(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(*wxWHITE, StateColor::Normal)); bool file_version_newer = (*m_file_version) > (*m_cloud_version); diff --git a/src/slic3r/GUI/MultiMachine.cpp b/src/slic3r/GUI/MultiMachine.cpp new file mode 100644 index 0000000000..fc7f91daa7 --- /dev/null +++ b/src/slic3r/GUI/MultiMachine.cpp @@ -0,0 +1,268 @@ +#include "MultiMachine.hpp" +#include "I18N.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" + +namespace Slic3r { +namespace GUI { + + +wxDEFINE_EVENT(EVT_MULTI_CLOUD_TASK_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_LOCAL_TASK_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_DEVICE_SELECTED, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_DEVICE_SELECTED_FINHSH, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_DEVICE_VIEW, wxCommandEvent); +wxDEFINE_EVENT(EVT_MULTI_REFRESH, wxCommandEvent); + +DeviceItem::DeviceItem(wxWindow* parent, MachineObject* obj) + : wxWindow(parent, wxID_ANY) + , obj_(obj) +{ + sync_state(); + Bind(EVT_MULTI_REFRESH, &DeviceItem::on_refresh, this); +} + +void DeviceItem::on_refresh(wxCommandEvent& evt) +{ + Refresh(); +} + +void DeviceItem::sync_state() +{ + if (obj_) { + state_online = obj_->is_online(); + state_dev_name = obj_->dev_name; + + //printable + if (obj_->print_status == "IDLE") { + state_printable = 0; + } + else if (obj_->print_status == "FINISH") { + state_printable = 1; + } + else if (obj_->print_status == "FAILED") { + state_printable = 2; + } + else if (obj_->is_in_printing()) { + state_printable = 3; + } + else { + state_printable = 6; + } + + if (is_blocking_printing(obj_)) { + state_printable = 5; + } + + if (obj_->is_in_upgrading()) { + state_printable = 4; + } + + state_enable_ams = obj_->ams_exist_bits; + + + //device + if (obj_->print_status == "IDLE") { + state_device = 0; + } + else if (obj_->print_status == "FINISH") { + state_device = 1; + } + else if (obj_->print_status == "FAILED") { + state_device = 2; + } + else if (obj_->print_status == "RUNNING") { + state_device = 3; + } + else if (obj_->print_status == "PAUSE") { + state_device = 4; + } + else if (obj_->print_status == "PREPARE") { + state_device = 5; + } + else if (obj_->print_status == "SLICING") { + state_device = 6; + } + else { + state_device = 7; + } + } +} + +void DeviceItem::selected() +{ + if (state_selected != 2) { + state_selected = 1; + } +} + +void DeviceItem::unselected() +{ + if (state_selected != 2) { + state_selected = 0; + } +} + +bool DeviceItem::is_blocking_printing(MachineObject* obj_) +{ + DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return true; + auto target_model = obj_->printer_type; + std::string source_model = ""; + + PresetBundle* preset_bundle = wxGetApp().preset_bundle; + source_model = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); + + if (source_model != target_model) { + std::vector compatible_machine = dev->get_compatible_machine(target_model); + vector::iterator it = find(compatible_machine.begin(), compatible_machine.end(), source_model); + if (it == compatible_machine.end()) { + return true; + } + } + + return false; +} + +void DeviceItem::update_item(const DeviceItem* item) +{ + // Except for the selected status, everything else is updated + if (this == item) + return; + this->state_online = item->state_online; + this->state_printable = item->state_printable; + this->state_enable_ams = item->state_enable_ams; + this->state_device = item->state_device; + this->state_local_task = item->state_local_task; +} + +wxString DeviceItem::get_state_printable() +{ + //0-idle 1-finish 2-printing 3-upgrading 4-preset incompatible 5-unknown + std::vector str_state_printable; + str_state_printable.push_back(_L("Idle")); + str_state_printable.push_back(_L("Idle")); + str_state_printable.push_back(_L("Idle")); + str_state_printable.push_back(_L("Printing")); + str_state_printable.push_back(_L("Upgrading")); + str_state_printable.push_back(_L("Incompatible")); + str_state_printable.push_back(_L("syncing")); + + return str_state_printable[state_printable]; +} + +wxString DeviceItem::get_state_device() +{ + //0-idle 1-finish 2-running 3-pause 4-failed 5-prepare + std::vector str_state_device; + str_state_device.push_back(_L("Idle")); + str_state_device.push_back(_L("Printing Finish")); + str_state_device.push_back(_L("Printing Failed")); + str_state_device.push_back(_L("Printing")); + str_state_device.push_back(_L("PrintingPause")); + str_state_device.push_back(_L("Prepare")); + str_state_device.push_back(_L("Slicing")); + str_state_device.push_back(_L("syncing")); + + return str_state_device[state_device]; +} + +wxString DeviceItem::get_local_state_task() +{ + //0-padding 1-sending 2-sending finish 3-sending cancel 4-sending failed 5-Removed + std::vector str_state_task; + str_state_task.push_back(_L("Pending")); + str_state_task.push_back(_L("Sending")); + str_state_task.push_back(_L("Sending Finish")); + str_state_task.push_back(_L("Sending Cancel")); + str_state_task.push_back(_L("Sending Failed")); + str_state_task.push_back(_L("Printing")); + str_state_task.push_back(_L("Print Success")); + str_state_task.push_back(_L("Print Failed")); + str_state_task.push_back(_L("Removed")); + str_state_task.push_back(_L("Idle")); + return str_state_task[state_local_task]; +} + +wxString DeviceItem::get_cloud_state_task() +{ + //0-printing 1-printing finish 2-printing failed + std::vector str_state_task; + str_state_task.push_back(_L("Printing")); + str_state_task.push_back(_L("Printing Finish")); + str_state_task.push_back(_L("Printing Failed")); + + return str_state_task[state_cloud_task]; +} + + +std::vector selected_machines(const std::vector& dev_item_list, std::string search_text) +{ + std::vector res; + for (const auto& item : dev_item_list) { + const MachineObject* dev = item->get_obj(); + const std::string& dev_name = dev->dev_name; + const std::string& dev_ip = dev->dev_ip; + + auto name_it = dev_name.find(search_text); + auto ip_it = dev_ip.find(search_text); + + if (name_it != std::string::npos || ip_it != std::string::npos) + res.emplace_back(item); + } + + return res; +} + +SortItem::SortItem() +{ + sort_map.emplace(std::make_pair(SortRule::SR_None, [this](const DeviceItem* d1, const DeviceItem* d2) { + return d1->state_dev_name > d2->state_dev_name; + })); + sort_map.emplace(std::make_pair(SortRule::SR_DEV_NAME, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_dev_name > d2->state_dev_name : d1->state_dev_name < d2->state_dev_name; + })); + sort_map.emplace(std::make_pair(SortRule::SR_ONLINE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_online > d2->state_online : d1->state_online < d2->state_online; + })); + sort_map.emplace(std::make_pair(SortRule::SR_PRINTABLE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_printable > d2->state_printable : d1->state_printable < d2->state_printable; + })); + sort_map.emplace(std::make_pair(SortRule::SR_EN_AMS, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_enable_ams > d2->state_enable_ams : d1->state_enable_ams < d2->state_enable_ams; + })); + sort_map.emplace(std::make_pair(SortRule::SR_DEV_STATE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_device > d2->state_device : d1->state_device < d2->state_device; + })); + sort_map.emplace(std::make_pair(SortRule::SR_LOCAL_TASK_STATE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_local_task > d2->state_local_task : d1->state_local_task < d2->state_local_task; + })); + sort_map.emplace(std::make_pair(SortRule::SR_CLOUD_TASK_STATE, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->state_cloud_task > d2->state_cloud_task : d1->state_cloud_task < d2->state_cloud_task; + })); + sort_map.emplace(std::make_pair(SortRule::SR_SEND_TIME, [this](const DeviceItem* d1, const DeviceItem* d2) { + return this->big ? d1->m_send_time > d2->m_send_time : d1->m_send_time < d2->m_send_time; + })); +} + +SortItem::SortCallBack SortItem::get_call_back() +{ + return sort_map[rule]; +} + +void SortItem::set_role(SortRule rule, bool big) +{ + this->rule = rule; + this->big = big; +} + +void SortItem::set_role(SortMultiMachineCB cb, SortRule rl, bool big) +{ + this->cb = cb; + this->rule = rl; + this->big = big; +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachine.hpp b/src/slic3r/GUI/MultiMachine.hpp new file mode 100644 index 0000000000..48a6ed4180 --- /dev/null +++ b/src/slic3r/GUI/MultiMachine.hpp @@ -0,0 +1,121 @@ +#ifndef slic3r_MultiMachine_hpp_ +#define slic3r_MultiMachine_hpp_ + +#include "GUI_Utils.hpp" +#include "DeviceManager.hpp" +#include + +namespace Slic3r { +namespace GUI { + + +#define DEVICE_ITEM_MAX_WIDTH 900 +#define SEND_ITEM_MAX_HEIGHT 30 +#define DEVICE_ITEM_MAX_HEIGHT 50 + +#define TABLE_HEAR_NORMAL_COLOUR wxColour(238, 238, 238) +#define TABLE_HEAD_PRESSED_COLOUR wxColour(150, 150, 150) +#define CTRL_BUTTON_NORMAL_COLOUR wxColour(255, 255, 255) +#define CTRL_BUTTON_PRESSEN_COLOUR wxColour(150, 150, 150) +#define TABLE_HEAD_FONT Label::Body_13 +#define ICON_SIZE FromDIP(16) + +class DeviceItem : public wxWindow +{ +public: + MachineObject* obj_{nullptr}; + int state_online = { 0 }; //0-Offline 1-Online + std::string state_dev_name; //device name + int state_printable{ 0 }; //0-idle 1-finish 2-failed 3-printing 4-upgrading 5-preset incompatible 6-unknown + int state_selected{ 0 }; //0-selected 1-unselected 2-un selectable + int state_enable_ams{ 0 };//0-no ams 1-enabled ams 2-not enabled ams + int state_device{ 0 }; //0-idle 1-finish 2-failed 3-running 4-pause 5-prepare 6-slicing 7-removed + int state_local_task{ 0 }; //0-padding 1-sending 2-sending finish 3-sending cancel 4-sending failed 5-TS_PRINT_SUCCESS 6- TS_PRINT_FAILED 7-TS_REMOVED 8-TS_IDLE + int state_cloud_task{ 0 }; //0-printing 1-printing finish 2-printing failed + int state_optional{0}; //0-Not optional 1-Optional + std::string m_send_time; + +public: + + DeviceItem(wxWindow* parent, MachineObject* obj); + ~DeviceItem() {}; + + void on_refresh(wxCommandEvent& evt); + void sync_state(); + wxString get_state_printable(); + wxString get_state_device(); + wxString get_local_state_task(); + wxString get_cloud_state_task(); + MachineObject* get_obj() const { return obj_; } + + int get_state_online() const { return state_online; } + int get_state_printable() const { return state_printable; } + int get_state_selected() const { return state_selected; } + int get_state_enable_ams() const { return state_enable_ams; } + int get_state_device() const { return state_device; } + int get_state_local_task() const { return state_local_task; } + int get_state_cloud_task() const { return state_cloud_task; } + std::string get_state_dev_name() const { return state_dev_name; } + + void selected(); + void unselected(); + bool is_blocking_printing(MachineObject* obj_); + void update_item(const DeviceItem* item); +}; + +std::vector selected_machines(const std::vector& dev_item_list, std::string search_text); + +struct ObjState +{ + std::string dev_id; + std::string state_dev_name; + int state_device{ 0 }; +}; + +struct SortItem +{ + typedef std::function SortCallBack; + typedef std::function SortMultiMachineCB; + + enum SortRule : uint8_t + { + SR_None = 0, + SR_DEV_NAME = 1, + SR_ONLINE, + SR_PRINTABLE, + SR_EN_AMS, + SR_DEV_STATE, + SR_LOCAL_TASK_STATE, + SR_CLOUD_TASK_STATE, + SR_SEND_TIME, + SR_MACHINE_NAME, + SR_MACHINE_STATE, + SR_COUNT + }; + + SortRule rule{ SortRule::SR_None }; + bool big{ true }; + std::unordered_map sort_map; + SortMultiMachineCB cb; + + SortItem(); + SortItem(SortRule sr) { rule = sr; } + + SortCallBack get_call_back(); + void set_role(SortRule rule, bool big); + void set_role(SortMultiMachineCB cb, SortRule rl, bool big); + SortMultiMachineCB get_machine_call_back() const { return cb; } +}; + + +wxDECLARE_EVENT(EVT_MULTI_DEVICE_SELECTED, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_DEVICE_SELECTED_FINHSH, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_DEVICE_VIEW, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_CLOUD_TASK_SELECTED, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_LOCAL_TASK_SELECTED, wxCommandEvent); +wxDECLARE_EVENT(EVT_MULTI_REFRESH, wxCommandEvent); + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp new file mode 100644 index 0000000000..27898b78fa --- /dev/null +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -0,0 +1,725 @@ +#include "MultiMachineManagerPage.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" + +namespace Slic3r { +namespace GUI { + +MultiMachineItem::MultiMachineItem(wxWindow* parent, MachineObject* obj) + : DeviceItem(parent, obj) +{ + SetBackgroundColour(*wxWHITE); + SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + Bind(wxEVT_PAINT, &MultiMachineItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &MultiMachineItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &MultiMachineItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &MultiMachineItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &MultiMachineItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_VIEW, [this, obj](auto& e) { + wxGetApp().mainframe->jump_to_monitor(obj->dev_id); + if (wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()) { + wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()->jump_to_play(); + } + }); + wxGetApp().UpdateDarkUIWin(this); +} + +void MultiMachineItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(); +} + +void MultiMachineItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(); +} + +void MultiMachineItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(DEVICE_LEFT_PADDING_LEFT + + DEVICE_LEFT_DEV_NAME + + DEVICE_LEFT_PRO_NAME + + DEVICE_LEFT_PRO_INFO); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + FromDIP(90)) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_VIEW)); + } +} + +void MultiMachineItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(DEVICE_LEFT_PADDING_LEFT + + DEVICE_LEFT_DEV_NAME + + DEVICE_LEFT_PRO_NAME + + DEVICE_LEFT_PRO_INFO); + + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + FromDIP(90)) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void MultiMachineItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void MultiMachineItem::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void MultiMachineItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top) { + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void MultiMachineItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(DEVICE_LEFT_PADDING_LEFT); + + if (obj_) { + //dev name + wxString dev_name = wxString::FromUTF8(obj_->dev_name); + if (!obj_->is_online()) { + dev_name = dev_name + "(" + _L("Offline") + ")"; + } + dc.SetFont(Label::Body_13); + DrawTextWithEllipsis(dc, dev_name, FromDIP(DEVICE_LEFT_DEV_NAME), left); + left += FromDIP(DEVICE_LEFT_DEV_NAME); + + //project name + wxString project_name = _L("No task"); + if (obj_->is_in_printing()) { + project_name = wxString::Format("%s", GUI::from_u8(obj_->subtask_name)); + } + dc.SetFont(Label::Body_13); + DrawTextWithEllipsis(dc, project_name, FromDIP(DEVICE_LEFT_PRO_NAME), left); + left += FromDIP(DEVICE_LEFT_PRO_NAME); + + //state + dc.SetFont(Label::Body_13); + if (state_device == 0) { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 1) { + dc.SetTextForeground(wxColour(0,174,66)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 2) + { + dc.SetTextForeground(wxColour(208,27,27)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device > 2 && state_device < 7) { + dc.SetFont(Label::Body_12); + dc.SetTextForeground(wxColour(0, 150, 136)); + if (obj_->get_curr_stage().IsEmpty() && obj_->subtask_) { + //wxString layer_info = wxString::Format(_L("Layer: %d/%d"), obj_->curr_layer, obj_->total_layers); + wxString progress_info = wxString::Format("%d", obj_->subtask_->task_progress); + wxString left_time = wxString::Format("%s", get_left_time(obj_->mc_left_time)); + + DrawTextWithEllipsis(dc, progress_info + "% | " + left_time, FromDIP(DEVICE_LEFT_PRO_INFO), left, FromDIP(10)); + + + dc.SetPen(wxPen(wxColour(233,233,233))); + dc.SetBrush(wxBrush(wxColour(233,233,233))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(10), 2); + + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(wxBrush(wxColour(0, 150, 136))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(DEVICE_LEFT_PRO_INFO) * (static_cast(obj_->subtask_->task_progress) / 100.0f), FromDIP(10), 2); + } + else { + DrawTextWithEllipsis(dc, obj_->get_curr_stage(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + + } + else { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + + left += FromDIP(DEVICE_LEFT_PRO_INFO); + + //button + dc.SetPen(wxPen(wxColour(38, 46, 48))); + dc.SetBrush(wxBrush(wxColour(*wxWHITE))); + dc.DrawRoundedRectangle(left, (size.y - FromDIP(38)) / 2, FromDIP(90), FromDIP(38), 6); + dc.SetFont(Label::Body_14); + dc.SetTextForeground(*wxBLACK); + dc.DrawText(_L("View"),left + FromDIP(90) / 2 - dc.GetTextExtent(_L("View")).x / 2, (size.y -dc.GetTextExtent(_L("View")).y) / 2); + + } + + if (m_hover) { + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + } +} + +void MultiMachineItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(obj_->dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void MultiMachineItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +wxString MultiMachineItem::get_left_time(int mc_left_time) +{ + // update gcode progress + std::string left_time; + wxString left_time_text = _L("N/A"); + + try { + left_time = get_bbl_monitor_time_dhm(mc_left_time); + } + catch (...) { + ; + } + + if (!left_time.empty()) left_time_text = wxString::Format("-%s", left_time); + return left_time_text; +} + + +MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(wxColour(0xEEEEEE)); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_main_panel->SetBackgroundColour(*wxWHITE); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + //edit prints + auto m_btn_bg_enable = StateColor( + std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + + + StateColor clean_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), + std::pair(wxColour(255, 255, 255), StateColor::Normal)); + StateColor clean_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + StateColor clean_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + auto sizer_button_printer = new wxBoxSizer(wxHORIZONTAL); + sizer_button_printer->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_button_edit = new Button(m_main_panel, _L("Edit Printers")); + m_button_edit->SetBackgroundColor(clean_bg); + m_button_edit->SetBorderColor(clean_bd); + m_button_edit->SetTextColor(clean_text); + m_button_edit->SetFont(Label::Body_12); + m_button_edit->SetCornerRadius(6); + m_button_edit->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_edit->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + m_button_edit->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { + MultiMachinePickPage dlg; + dlg.ShowModal(); + refresh_user_device(); + evt.Skip(); + }); + + sizer_button_printer->Add( 0, 0, 1, wxEXPAND, 5 ); + sizer_button_printer->Add(m_button_edit, 0, wxALIGN_CENTER, 0); + + m_table_head_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_dev_name_big = !device_dev_name_big; + auto sortcb = [this](ObjState s1, ObjState s2) { + return device_dev_name_big ? s1.state_dev_name > s2.state_dev_name : s1.state_dev_name < s2.state_dev_name; + }; + this->m_sort.set_role(sortcb, SortItem::SR_MACHINE_NAME, device_dev_name_big); + this->refresh_user_device(); + }); + + + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_task_name->SetFont(TABLE_HEAD_FONT); + m_task_name->SetCornerRadius(0); + m_task_name->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetCenter(false); + + + + m_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status->SetBackgroundColor(head_bg); + m_status->SetFont(TABLE_HEAD_FONT); + m_status->SetCornerRadius(0); + m_status->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetCenter(false); + m_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_state_big = !device_state_big; + auto sortcb = [this](ObjState s1, ObjState s2) { + return device_state_big ? s1.state_device > s2.state_device : s1.state_device < s2.state_device; + }; + this->m_sort.set_role(sortcb, SortItem::SortRule::SR_MACHINE_STATE, device_state_big); + this->refresh_user_device(); + }); + + + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_action->SetFont(TABLE_HEAD_FONT); + m_action->SetCornerRadius(0); + m_action->SetMinSize(wxSize(FromDIP(DEVICE_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(DEVICE_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetCenter(false); + + + m_table_head_sizer->AddSpacer(FromDIP(DEVICE_LEFT_PADDING_LEFT)); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_sizer->Add(m_action, 0, wxLEFT, 0); + + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("Please select the devices you would like to manage here (up to 6 devices)")); + m_tip_text->SetForegroundColour(wxColour(50, 58, 61)); + m_tip_text->SetFont(::Label::Head_20); + m_tip_text->Wrap(-1); + + m_button_add = new Button(m_main_panel, _L("Add")); + m_button_add->SetBackgroundColor(m_btn_bg_enable); + m_button_add->SetBorderColor(m_btn_bg_enable); + m_button_add->SetTextColor(*wxWHITE); + m_button_add->SetFont(Label::Body_12); + m_button_add->SetCornerRadius(6); + m_button_add->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_add->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + m_button_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { + MultiMachinePickPage dlg; + dlg.ShowModal(); + refresh_user_device(); + evt.Skip(); + }); + + m_machine_list = new wxScrolledWindow(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_machine_list->SetBackgroundColour(*wxWHITE); + m_machine_list->SetScrollRate(0, 5); + m_machine_list->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_machine_list->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + m_sizer_machine_list = new wxBoxSizer(wxVERTICAL); + m_machine_list->SetSizer(m_sizer_machine_list); + m_machine_list->Layout(); + + // add flipping page + StateColor ctrl_bg( + std::pair(CTRL_BUTTON_PRESSEN_COLOUR, StateColor::Pressed), + std::pair(CTRL_BUTTON_NORMAL_COLOUR, StateColor::Normal) + ); + + m_flipping_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_flipping_panel->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetBackgroundColour(*wxWHITE); + + m_flipping_page_sizer = new wxBoxSizer(wxHORIZONTAL); + m_page_sizer = new wxBoxSizer(wxVERTICAL); + btn_last_page = new Button(m_flipping_panel, "", "go_last_plate", 0, FromDIP(20)); + btn_last_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetBackgroundColor(head_bg); + btn_last_page->Bind(wxEVT_LEFT_DOWN, [&](wxMouseEvent& evt) { + evt.Skip(); + if (m_current_page == 0) + return; + btn_last_page->Enable(false); + btn_next_page->Enable(false); + start_timer(); + m_current_page--; + if (m_current_page < 0) + m_current_page = 0; + refresh_user_device(); + update_page_number(); + }); + st_page_number = new wxStaticText(m_flipping_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + btn_next_page = new Button(m_flipping_panel, "", "go_next_plate", 0, FromDIP(20)); + btn_next_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetBackgroundColor(head_bg); + btn_next_page->Bind(wxEVT_LEFT_DOWN, [&](wxMouseEvent& evt) { + evt.Skip(); + if (m_current_page == m_total_page - 1) + return; + btn_last_page->Enable(false); + btn_next_page->Enable(false); + start_timer(); + m_current_page++; + if (m_current_page > m_total_page - 1) + m_current_page = m_total_page - 1; + refresh_user_device(); + update_page_number(); + }); + + m_page_num_input = new ::TextInput(m_flipping_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(50), -1), wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + m_page_num_input->SetBackgroundColor(input_bg); + m_page_num_input->GetTextCtrl()->SetValue("1"); + wxTextValidator validator(wxFILTER_DIGITS); + m_page_num_input->GetTextCtrl()->SetValidator(validator); + m_page_num_input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [&](wxCommandEvent& e) { + page_num_enter_evt(); + }); + + m_page_num_enter = new Button(m_flipping_panel, _("Go")); + m_page_num_enter->SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetBackgroundColor(ctrl_bg); + m_page_num_enter->SetCornerRadius(FromDIP(5)); + m_page_num_enter->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + page_num_enter_evt(); + }); + + m_flipping_page_sizer->Add(0, 0, 1, wxEXPAND, 0); + m_flipping_page_sizer->Add(btn_last_page, 0, wxALIGN_CENTER, 0); + m_flipping_page_sizer->Add(st_page_number, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(btn_next_page, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(m_page_num_input, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(20)); + m_flipping_page_sizer->Add(m_page_num_enter, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_page_sizer->Add(m_flipping_page_sizer, 0, wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + m_flipping_panel->SetSizer(m_page_sizer); + m_flipping_panel->Layout(); + + m_main_sizer->AddSpacer(FromDIP(16)); + m_main_sizer->Add(sizer_button_printer, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->AddSpacer(FromDIP(5)); + m_main_sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_button_add, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(16)); + m_main_sizer->Add(m_machine_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_flipping_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_panel->SetSizer(m_main_sizer); + m_main_panel->Layout(); + page_sizer = new wxBoxSizer(wxVERTICAL); + page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); + + SetSizer(page_sizer); + Layout(); + Fit(); + + Bind(wxEVT_TIMER, &MultiMachineManagerPage::on_timer, this); +} + +void MultiMachineManagerPage::update_page() +{ + for (int i = 0; i < m_device_items.size(); i++) { + m_device_items[i]->sync_state(); + m_device_items[i]->Refresh(); + } +} + +void MultiMachineManagerPage::refresh_user_device(bool clear) +{ + m_sizer_machine_list->Clear(true); + m_device_items.clear(); + + if(clear) return; + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = wxGetApp().app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + + m_total_count = user_machine.size(); + + m_state_objs.clear(); + for (auto it = user_machine.begin(); it != user_machine.end(); ++it) { + sync_state(it->second); + } + + //sort + if (m_sort.rule != SortItem::SortRule::SR_None) { + std::sort(m_state_objs.begin(), m_state_objs.end(), m_sort.get_machine_call_back()); + } + + double result = static_cast(user_machine.size()) / m_count_page_item; + m_total_page = std::ceil(result); + + std::vector sort_devices = extractRange(m_state_objs, m_current_page * m_count_page_item, (m_current_page + 1) * m_count_page_item - 1 ); + std::vector subscribe_list; + + for (auto i = 0; i < sort_devices.size(); ++i) { + auto dev_id = sort_devices[i].dev_id; + + auto machine = user_machine[dev_id]; + + MultiMachineItem* di = new MultiMachineItem(m_machine_list, machine); + m_device_items.push_back(di); + m_sizer_machine_list->Add(m_device_items[i], 0, wxALL | wxEXPAND, 0); + + subscribe_list.push_back(dev_id); + } + + dev->subscribe_device_list(subscribe_list); + + m_tip_text->Show(m_device_items.empty()); + m_button_add->Show(m_device_items.empty()); + + update_page_number(); + m_flipping_panel->Show(m_total_page > 1); + m_sizer_machine_list->Layout(); + Layout(); +} + +std::vector MultiMachineManagerPage::extractRange(const std::vector& source, int start, int end) { + std::vector result; + + if (start < 0 || start > end || source.size() <= 0) { + return result; + } + + if ( end >= source.size() ) { + end = source.size(); + } + + auto startIter = source.begin() + start; + auto endIter = source.begin() + end; + result.assign(startIter, endIter); + return result; +} + +void MultiMachineManagerPage::sync_state(MachineObject* obj_) +{ + ObjState state_obj; + + if (obj_) { + state_obj.dev_id = obj_->dev_id; + state_obj.state_dev_name = obj_->dev_name; + + if (obj_->print_status == "IDLE") { + state_obj.state_device = 0; + } + else if (obj_->print_status == "FINISH") { + state_obj.state_device = 1; + } + else if (obj_->print_status == "FAILED") { + state_obj.state_device = 2; + } + else if (obj_->print_status == "RUNNING") { + state_obj.state_device = 3; + } + else if (obj_->print_status == "PAUSE") { + state_obj.state_device = 4; + } + else if (obj_->print_status == "PREPARE") { + state_obj.state_device = 5; + } + else if (obj_->print_status == "SLICING") { + state_obj.state_device = 6; + } + else { + state_obj.state_device = 7; + } + } + m_state_objs.push_back(state_obj); +} + +bool MultiMachineManagerPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxPanel::Show(show); +} + +void MultiMachineManagerPage::start_timer() +{ + if (m_flipping_timer) { + m_flipping_timer->Stop(); + } + else { + m_flipping_timer = new wxTimer(); + } + + m_flipping_timer->SetOwner(this); + m_flipping_timer->Start(1000); + wxPostEvent(this, wxTimerEvent()); +} + +void MultiMachineManagerPage::update_page_number() +{ + double result = static_cast(m_total_count) / m_count_page_item; + m_total_page = std::ceil(result); + + wxString number = wxString(std::to_string(m_current_page + 1)) + " / " + wxString(std::to_string(m_total_page)); + st_page_number->SetLabel(number); +} + +void MultiMachineManagerPage::on_timer(wxTimerEvent& event) +{ + m_flipping_timer->Stop(); + if (btn_last_page) + btn_last_page->Enable(true); + if (btn_next_page) + btn_next_page->Enable(true); +} + +void MultiMachineManagerPage::clear_page() +{ + +} + +void MultiMachineManagerPage::page_num_enter_evt() +{ + btn_last_page->Enable(false); + btn_next_page->Enable(false); + start_timer(); + auto value = m_page_num_input->GetTextCtrl()->GetValue(); + long page_num = 0; + if (value.ToLong(&page_num)) { + if (page_num > m_total_page) + m_current_page = m_total_page - 1; + else if (page_num < 1) + m_current_page = 0; + else + m_current_page = page_num - 1; + } + refresh_user_device(); + update_page_number(); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp new file mode 100644 index 0000000000..87d8d9866e --- /dev/null +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -0,0 +1,114 @@ +#ifndef slic3r_MultiMachineMangerPage_hpp_ +#define slic3r_MultiMachineMangerPage_hpp_ + +#include "GUI_Utils.hpp" +#include "MultiMachine.hpp" + +namespace Slic3r { +namespace GUI { + +#define DEVICE_LEFT_PADDING_LEFT 15 +#define DEVICE_LEFT_DEV_NAME 180 +#define DEVICE_LEFT_PRO_NAME 180 +#define DEVICE_LEFT_PRO_INFO 320 + +class MultiMachineItem : public DeviceItem +{ + +public: + MultiMachineItem(wxWindow* parent, MachineObject* obj); + ~MultiMachineItem() {}; + + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void doRender(wxDC& dc); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + +public: + bool m_hover{ false }; + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; + wxString get_left_time(int mc_left_time); +}; + +class MultiMachineManagerPage : public wxPanel +{ +public: + MultiMachineManagerPage(wxWindow* parent); + ~MultiMachineManagerPage() {}; + + void update_page(); + void refresh_user_device(bool clear = false); + + void sync_state(MachineObject* obj_); + bool Show(bool show); + + std::vector extractRange(const std::vector& source, int start, int end); + + void start_timer(); + void update_page_number(); + void on_timer(wxTimerEvent& event); + void clear_page(); + + void page_num_enter_evt(); + +private: + std::vector m_state_objs; + std::vector m_device_items; + SortItem m_sort; + bool device_dev_name_big{ true }; + bool device_state_big{ true }; + + + Button* m_button_edit{nullptr}; + wxBoxSizer* page_sizer{ nullptr }; + wxPanel* m_main_panel{ nullptr }; + wxBoxSizer* m_main_sizer{nullptr}; + wxBoxSizer* m_sizer_machine_list{nullptr}; + wxScrolledWindow* m_machine_list{ nullptr }; + wxStaticText* m_selected_num{ nullptr }; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_task_name{ nullptr }; + Button* m_status{ nullptr }; + Button* m_action{ nullptr }; + Button* m_stop_all_botton{nullptr}; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; + Button* m_button_add{ nullptr }; + + // Flipping pages + int m_current_page{ 0 }; + int m_total_page{ 0 }; + int m_total_count{ 0 }; + int m_count_page_item{ 10 }; + + bool prev{ false }; + bool next{ false }; + Button* btn_last_page{ nullptr }; + Button* btn_next_page{ nullptr }; + wxStaticText* st_page_number{ nullptr }; + wxBoxSizer* m_flipping_page_sizer{ nullptr }; + wxBoxSizer* m_page_sizer{ nullptr }; + wxPanel* m_flipping_panel{ nullptr }; + wxTimer* m_flipping_timer{ nullptr }; + TextInput* m_page_num_input{ nullptr }; + Button* m_page_num_enter{ nullptr }; +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp new file mode 100644 index 0000000000..4ed797c0fd --- /dev/null +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -0,0 +1,485 @@ +#include "MultiMachinePage.hpp" +#include "GUI_App.hpp" +#include "MainFrame.hpp" + +namespace Slic3r { +namespace GUI { + + +MultiMachinePage::MultiMachinePage(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : wxPanel(parent, id, pos, size, style) +{ + init_tabpanel(); + m_main_sizer = new wxBoxSizer(wxHORIZONTAL); + m_main_sizer->Add(m_tabpanel, 1, wxEXPAND | wxLEFT, 0); + SetSizerAndFit(m_main_sizer); + Layout(); + Fit(); + + wxGetApp().UpdateDarkUIWin(this); + + init_timer(); + Bind(wxEVT_TIMER, &MultiMachinePage::on_timer, this); +} + +MultiMachinePage::~MultiMachinePage() +{ + if (m_refresh_timer) + m_refresh_timer->Stop(); + delete m_refresh_timer; +} + +void MultiMachinePage::jump_to_send_page() +{ + m_tabpanel->SetSelection(1); +} + +void MultiMachinePage::on_sys_color_changed() +{ +} + +void MultiMachinePage::msw_rescale() +{ +} + +bool MultiMachinePage::Show(bool show) +{ + if (show) { + m_refresh_timer->Stop(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(2000); + wxPostEvent(this, wxTimerEvent()); + } + else { + m_refresh_timer->Stop(); + } + + auto page = m_tabpanel->GetCurrentPage(); + if (page) + page->Show(show); + return wxPanel::Show(show); +} + +void MultiMachinePage::init_tabpanel() +{ + auto m_side_tools = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(220), FromDIP(18))); + wxBoxSizer* sizer_side_tools = new wxBoxSizer(wxHORIZONTAL); + sizer_side_tools->Add(m_side_tools, 1, wxEXPAND, 0); + m_tabpanel = new Tabbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, sizer_side_tools, wxNB_LEFT | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); + m_tabpanel->SetBackgroundColour(wxColour("#FEFFFF")); + m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) {; }); + + m_local_task_manager = new LocalTaskManagerPage(m_tabpanel); + m_cloud_task_manager = new CloudTaskManagerPage(m_tabpanel); + m_machine_manager = new MultiMachineManagerPage(m_tabpanel); + + m_tabpanel->AddPage(m_machine_manager, _L("Device"), "", true); + m_tabpanel->AddPage(m_local_task_manager, _L("Task Sending"), "", false); + m_tabpanel->AddPage(m_cloud_task_manager, _L("Task Sent"), "", false); +} + +void MultiMachinePage::init_timer() +{ + m_refresh_timer = new wxTimer(); + //m_refresh_timer->SetOwner(this); + //m_refresh_timer->Start(8000); + //wxPostEvent(this, wxTimerEvent()); +} + +void MultiMachinePage::on_timer(wxTimerEvent& event) +{ + m_local_task_manager->update_page(); + m_cloud_task_manager->update_page(); + m_machine_manager->update_page(); +} + +void MultiMachinePage::clear_page() +{ + m_local_task_manager->refresh_user_device(true); + m_cloud_task_manager->refresh_user_device(true); + m_machine_manager->refresh_user_device(true); +} + +DevicePickItem::DevicePickItem(wxWindow* parent, MachineObject* obj) + : DeviceItem(parent, obj) +{ + SetBackgroundColour(*wxWHITE); + m_bitmap_check_disable = ScalableBitmap(this, "check_off_disabled", 18); + m_bitmap_check_off = ScalableBitmap(this, "check_off_focused", 18); + m_bitmap_check_on = ScalableBitmap(this, "check_on", 18); + + + SetMinSize(wxSize(FromDIP(400), FromDIP(30))); + SetMaxSize(wxSize(FromDIP(400), FromDIP(30))); + + Bind(wxEVT_PAINT, &DevicePickItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &DevicePickItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &DevicePickItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &DevicePickItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &DevicePickItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_SELECTED, &DevicePickItem::OnSelectedDevice, this); + wxGetApp().UpdateDarkUIWin(this); +} + +void DevicePickItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top /*= 0*/) +{ + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void DevicePickItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(false); +} + +void DevicePickItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(false); +} + +void DevicePickItem::OnSelectedDevice(wxCommandEvent& evt) +{ + auto dev_id = evt.GetString(); + auto state = evt.GetInt(); + if (state == 0) { + state_selected = 1; + } + else if (state == 1) { + state_selected = 0; + } + Refresh(false); + evt.Skip(); + + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED_FINHSH)); +} + +void DevicePickItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } +} + +void DevicePickItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void DevicePickItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void DevicePickItem::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void DevicePickItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(PICK_LEFT_PADDING_LEFT); + + + //checkbox + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else if (state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + + left += FromDIP(PICK_LEFT_PRINTABLE); + + //dev names + DrawTextWithEllipsis(dc, wxString::FromUTF8(get_obj()->dev_name), FromDIP(PICK_LEFT_DEV_NAME), left); + left += FromDIP(PICK_LEFT_DEV_NAME); +} +void DevicePickItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(obj_->dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void DevicePickItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +MultiMachinePickPage::MultiMachinePickPage(Plater* plater /*= nullptr*/) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, + _L("Edit multiple printers"), + wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + app_config = get_app_config(); + + SetBackgroundColour(*wxWHITE); + // icon + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + auto line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + m_label = new Label(this, _L("Select connected printetrs (0/6)")); + + scroll_macine_list = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + scroll_macine_list->SetSize(wxSize(FromDIP(400), FromDIP(10 * 30))); + scroll_macine_list->SetMinSize(wxSize(FromDIP(400), FromDIP(10 * 30))); + scroll_macine_list->SetMaxSize(wxSize(FromDIP(400), FromDIP(10 * 30))); + scroll_macine_list->SetBackgroundColour(*wxWHITE); + scroll_macine_list->SetScrollRate(0, 5); + + sizer_machine_list = new wxBoxSizer(wxVERTICAL); + scroll_macine_list->SetSizer(sizer_machine_list); + scroll_macine_list->Layout(); + + main_sizer->Add(line_top, 0, wxEXPAND, 0); + main_sizer->AddSpacer(FromDIP(10)); + main_sizer->Add(m_label, 0, wxLEFT, FromDIP(20)); + main_sizer->Add(scroll_macine_list, 0, wxLEFT|wxRIGHT, FromDIP(20)); + main_sizer->AddSpacer(FromDIP(10)); + + SetSizer(main_sizer); + Layout(); + Fit(); + Centre(wxBOTH); + + wxGetApp().UpdateDlgDarkUI(this); +} + +MultiMachinePickPage::~MultiMachinePickPage() +{ + +} + +int MultiMachinePickPage::get_selected_count() +{ + int count = 0; + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + if (it->second->state_selected == 1) { + count++; + } + } + return count; +} + +void MultiMachinePickPage::update_selected_count() +{ + std::vector selected_multi_devices; + + int count = 0; + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + if (it->second->state_selected == 1 ) { + selected_multi_devices.push_back(it->second->obj_->dev_id); + count++; + } + } + + m_selected_count = count; + m_label->SetLabel(wxString::Format(_L("Select Connected Printetrs (%d/6)"), m_selected_count)); + + if (m_selected_count > PICK_DEVICE_MAX) { + MessageDialog msg_wingow(nullptr, wxString::Format(_L("The maximum number of printers that can be selected is %d"), PICK_DEVICE_MAX), "", wxAPPLY | wxOK); + if (msg_wingow.ShowModal() == wxOK) { + return; + } + } + + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + app_config->erase("multi_devices",std::to_string(i)); + } + + for (int j = 0; j < selected_multi_devices.size(); j++) { + app_config->set_str("multi_devices", std::to_string(j), selected_multi_devices[j]); + } + app_config->save(); +} + +void MultiMachinePickPage::on_dpi_changed(const wxRect& suggested_rect) +{ + +} + +void MultiMachinePickPage::on_sys_color_changed() +{ + +} + +void MultiMachinePickPage::refresh_user_device() +{ + std::vector selected_multi_devices; + + for(int i = 0; i < PICK_DEVICE_MAX; i++){ + auto dev_id = app_config->get("multi_devices", std::to_string(i)); + selected_multi_devices.push_back(dev_id); + } + + sizer_machine_list->Clear(false); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + return; + } + + auto user_machine = dev->get_my_cloud_machine_list(); + auto task_manager = wxGetApp().getTaskManager(); + + std::vector subscribe_list; + + for (auto it = user_machine.begin(); it != user_machine.end(); ++it) { + DevicePickItem* di = new DevicePickItem(scroll_macine_list, it->second); + + di->Bind(EVT_MULTI_DEVICE_SELECTED_FINHSH, [this, di](auto& e) { + int count = get_selected_count(); + if (count > PICK_DEVICE_MAX) { + di->unselected(); + return; + } + update_selected_count(); + }); + + /* if (m_device_items.find(it->first) != m_device_items.end()) { + auto item = m_device_items[it->first]; + if (item->state_selected == 1 && di->state_printable <= 2) + di->state_selected = item->state_selected; + item->Destroy(); + }*/ + m_device_items[it->first] = di; + + //update state + if (task_manager) { + m_device_items[it->first]->state_local_task = task_manager->query_task_state(it->first); + } + + //update selected + auto dev_it = std::find(selected_multi_devices.begin(), selected_multi_devices.end(), it->second->dev_id ); + if (dev_it != selected_multi_devices.end()) { + di->state_selected = 1; + } + + sizer_machine_list->Add(di, 0, wxALL | wxEXPAND, 0); + subscribe_list.push_back(it->first); + } + + dev->subscribe_device_list(subscribe_list); + + sizer_machine_list->Layout(); + Layout(); + Fit(); +} + +void MultiMachinePickPage::on_confirm(wxCommandEvent& event) +{ + +} + +bool MultiMachinePickPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + update_selected_count(); + //m_refresh_timer->Stop(); + //m_refresh_timer->SetOwner(this); + //m_refresh_timer->Start(4000); + //wxPostEvent(this, wxTimerEvent()); + } + else { + //m_refresh_timer->Stop(); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxDialog::Show(show); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiMachinePage.hpp b/src/slic3r/GUI/MultiMachinePage.hpp new file mode 100644 index 0000000000..0572c30d1b --- /dev/null +++ b/src/slic3r/GUI/MultiMachinePage.hpp @@ -0,0 +1,104 @@ +#ifndef slic3r_MultiMachinePage_hpp_ +#define slic3r_MultiMachinePage_hpp_ + +#include "libslic3r/libslic3r.h" +#include "GUI_App.hpp" +#include "GUI_Utils.hpp" +#include "MultiTaskManagerPage.hpp" +#include "MultiMachineManagerPage.hpp" +#include "Tabbook.hpp" + +#include "wx/button.h" + +namespace Slic3r { +namespace GUI { + +#define PICK_LEFT_PADDING_LEFT 15 +#define PICK_LEFT_PRINTABLE 40 +#define PICK_LEFT_DEV_NAME 250 +#define PICK_LEFT_DEV_STATUS 250 +#define PICK_DEVICE_MAX 6 + +class MultiMachinePage : public wxPanel +{ +private: + wxTimer* m_refresh_timer = nullptr; + wxSizer* m_main_sizer{ nullptr }; + LocalTaskManagerPage* m_local_task_manager{ nullptr }; + CloudTaskManagerPage* m_cloud_task_manager{ nullptr }; + MultiMachineManagerPage* m_machine_manager{ nullptr }; + Tabbook* m_tabpanel{ nullptr }; + +public: + MultiMachinePage(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~MultiMachinePage(); + + void jump_to_send_page(); + + void on_sys_color_changed(); + void msw_rescale(); + bool Show(bool show); + + void init_tabpanel(); + void init_timer(); + void on_timer(wxTimerEvent& event); + + void clear_page(); +}; + + +class DevicePickItem : public DeviceItem +{ + +public: + DevicePickItem(wxWindow* parent, MachineObject* obj); + ~DevicePickItem() {}; + + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnSelectedDevice(wxCommandEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + +public: + bool m_hover{ false }; + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; +}; + + +class MultiMachinePickPage : public DPIDialog +{ +private: + AppConfig* app_config; + Label* m_label{ nullptr }; + wxScrolledWindow* scroll_macine_list{ nullptr }; + wxBoxSizer* m_sizer_body{ nullptr }; + wxBoxSizer* sizer_machine_list{ nullptr }; + std::map m_device_items; + int m_selected_count{0}; +public: + MultiMachinePickPage(Plater* plater = nullptr); + ~MultiMachinePickPage(); + + int get_selected_count(); + void update_selected_count(); + void on_dpi_changed(const wxRect& suggested_rect); + void on_sys_color_changed(); + void refresh_user_device(); + void on_confirm(wxCommandEvent& event); + bool Show(bool show); +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiPrintJob.cpp b/src/slic3r/GUI/MultiPrintJob.cpp new file mode 100644 index 0000000000..6da49ebc6d --- /dev/null +++ b/src/slic3r/GUI/MultiPrintJob.cpp @@ -0,0 +1,7 @@ +#include "MultiPrintJob.hpp" + +namespace Slic3r { +namespace GUI { + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiPrintJob.hpp b/src/slic3r/GUI/MultiPrintJob.hpp new file mode 100644 index 0000000000..233b464a4d --- /dev/null +++ b/src/slic3r/GUI/MultiPrintJob.hpp @@ -0,0 +1,10 @@ +#ifndef slic3r_MultiPrintJob_hpp_ +#define slic3r_MultiPrintJob_hpp_ + +namespace Slic3r { +namespace GUI { + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiSendMachineModel.cpp b/src/slic3r/GUI/MultiSendMachineModel.cpp new file mode 100644 index 0000000000..101a3f1781 --- /dev/null +++ b/src/slic3r/GUI/MultiSendMachineModel.cpp @@ -0,0 +1,33 @@ +#include "MultiSendMachineModel.hpp" + +namespace Slic3r { +namespace GUI { + +MultiSendMachineModel::MultiSendMachineModel() +{ + ; +} + +MultiSendMachineModel::~MultiSendMachineModel() +{ + ; +} + +void MultiSendMachineModel::Init() +{ + ; +} + +wxDataViewItem MultiSendMachineModel::AddMachine(MachineObject* obj) +{ + wxString name = from_u8(obj->dev_name); + + wxDataViewItem new_item; + + // TODO + return new_item; +} + + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiSendMachineModel.hpp b/src/slic3r/GUI/MultiSendMachineModel.hpp new file mode 100644 index 0000000000..60318163c6 --- /dev/null +++ b/src/slic3r/GUI/MultiSendMachineModel.hpp @@ -0,0 +1,25 @@ +#ifndef slic3r_MultiSendMachineModel_hpp_ +#define slic3r_MultiSendMachineModel_hpp_ + +#include "DeviceManager.hpp" + +namespace Slic3r { +namespace GUI { + +class MultiSendMachineModel : public wxDataViewModel +{ +public: + MultiSendMachineModel(); + ~MultiSendMachineModel(); + + void Init(); + + wxDataViewItem AddMachine(MachineObject* obj); + +private: +}; + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp new file mode 100644 index 0000000000..778350e825 --- /dev/null +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -0,0 +1,1436 @@ +#include "MultiTaskManagerPage.hpp" +#include "I18N.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "Widgets/RadioBox.hpp" +#include +#include + +namespace Slic3r { +namespace GUI { + +MultiTaskItem::MultiTaskItem(wxWindow* parent, MachineObject* obj, int type) + : DeviceItem(parent, obj), + m_task_type(type) +{ + SetBackgroundColour(*wxWHITE); + SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + Bind(wxEVT_PAINT, &MultiTaskItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &MultiTaskItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &MultiTaskItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &MultiTaskItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &MultiTaskItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_SELECTED, &MultiTaskItem::OnSelectedDevice, this); + + m_bitmap_check_disable = ScalableBitmap(this, "check_off_disabled", 18); + m_bitmap_check_off = ScalableBitmap(this, "check_off_focused", 18); + m_bitmap_check_on = ScalableBitmap(this, "check_on", 18); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + wxBoxSizer* item_sizer = new wxBoxSizer(wxHORIZONTAL); + + + auto m_btn_bg_enable = StateColor( + std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + + m_button_resume = new Button(this, _L("Resume")); + m_button_resume->SetBackgroundColor(m_btn_bg_enable); + m_button_resume->SetBorderColor(m_btn_bg_enable); + m_button_resume->SetFont(Label::Body_12); + m_button_resume->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); + m_button_resume->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + m_button_resume->SetCornerRadius(6); + + + StateColor clean_bg(std::pair(wxColour(255, 255, 255), StateColor::Disabled), std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), std::pair(wxColour(255, 255, 255), StateColor::Enabled), + std::pair(wxColour(255, 255, 255), StateColor::Normal)); + StateColor clean_bd(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + StateColor clean_text(std::pair(wxColour(144, 144, 144), StateColor::Disabled), std::pair(wxColour(38, 46, 48), StateColor::Enabled)); + + m_button_cancel = new Button(this, _L("Cancel")); + m_button_cancel->SetBackgroundColor(clean_bg); + m_button_cancel->SetBorderColor(clean_bd); + m_button_cancel->SetTextColor(clean_text); + m_button_cancel->SetFont(Label::Body_12); + m_button_cancel->SetCornerRadius(6); + m_button_cancel->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + + m_button_pause = new Button(this, _L("Pause")); + m_button_pause->SetBackgroundColor(clean_bg); + m_button_pause->SetBorderColor(clean_bd); + m_button_pause->SetTextColor(clean_text); + m_button_pause->SetFont(Label::Body_12); + m_button_pause->SetCornerRadius(6); + m_button_pause->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + + m_button_stop = new Button(this, _L("Stop")); + m_button_stop->SetBackgroundColor(clean_bg); + m_button_stop->SetBorderColor(clean_bd); + m_button_stop->SetTextColor(clean_text); + m_button_stop->SetFont(Label::Body_12); + m_button_stop->SetCornerRadius(6); + m_button_stop->SetMinSize(wxSize(FromDIP(70), FromDIP(35))); + + + item_sizer->Add(0, 0, 1, wxEXPAND, 0); + item_sizer->Add(m_button_cancel, 0, wxALIGN_CENTER, 0); + item_sizer->Add(m_button_resume, 0, wxALIGN_CENTER, 0); + item_sizer->Add(m_button_pause, 0, wxALIGN_CENTER, 0); + item_sizer->Add(m_button_stop, 0, wxALIGN_CENTER, 0); + + m_button_cancel->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + m_button_stop->Hide(); + + main_sizer->Add(item_sizer, 1, wxEXPAND, 0); + SetSizer(main_sizer); + Layout(); + + m_button_cancel->Bind(wxEVT_BUTTON, [this](auto& e) { + onCancel(); + }); + + m_button_pause->Bind(wxEVT_BUTTON, [this](auto& e) { + onPause(); + }); + + m_button_resume->Bind(wxEVT_BUTTON, [this](auto& e) { + onResume(); + }); + + m_button_stop->Bind(wxEVT_BUTTON, [this](auto& e) { + onStop(); + }); + + wxGetApp().UpdateDarkUIWin(this); +} + +void MultiTaskItem::update_info() +{ + //local + if (m_task_type == 0) { + m_button_stop->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + if (state_local_task == 0 || state_local_task == 1) { + m_button_cancel->Show(); + Layout(); + } + else { + m_button_cancel->Hide(); + Layout(); + } + } + //cloud + else if (m_task_type == 1 && get_obj() && (m_job_id == get_obj()->profile_id_)) { + m_button_cancel->Hide(); + + if (obj_ && obj_->is_in_printing() && state_cloud_task == 0 ) { + if (obj_->can_abort()) { + m_button_stop->Show(); + } + else { + m_button_stop->Hide(); + } + + if (obj_->can_pause()) { + m_button_pause->Show(); + } + else { + m_button_pause->Hide(); + } + + if (obj_->can_resume()) { + m_button_resume->Show(); + } + else { + m_button_resume->Hide(); + } + + Layout(); + } + else { + m_button_stop->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + Layout(); + } + } + else { + m_button_cancel->Hide(); + m_button_stop->Hide(); + m_button_pause->Hide(); + m_button_resume->Hide(); + Layout(); + } +} + +void MultiTaskItem::onPause() +{ + if (get_obj() && !get_obj()->can_resume()) { + BOOST_LOG_TRIVIAL(info) << "MultiTask: pause current print task dev_id =" << get_obj()->dev_id; + get_obj()->command_task_pause(); + m_button_pause->Hide(); + m_button_resume->Show(); + Layout(); + } +} + +void MultiTaskItem::onResume() +{ + if (get_obj() && get_obj()->can_resume()) { + BOOST_LOG_TRIVIAL(info) << "MultiTask: resume current print task dev_id =" << get_obj()->dev_id; + get_obj()->command_task_resume(); + m_button_pause->Show(); + m_button_resume->Hide(); + Layout(); + } +} + +void MultiTaskItem::onStop() +{ + if (get_obj()) { + BOOST_LOG_TRIVIAL(info) << "MultiTask: abort current print task dev_id =" << get_obj()->dev_id; + get_obj()->command_task_abort(); + m_button_pause->Hide(); + m_button_resume->Hide(); + m_button_stop->Hide(); + state_cloud_task = 2; + Layout(); + Refresh(); + } +} + + +void MultiTaskItem::onCancel() +{ + if (task_obj) { + task_obj->cancel(); + if (!task_obj->get_job_id().empty()) { + get_obj()->command_task_cancel(task_obj->get_job_id()); + } + } +} + +void MultiTaskItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(); +} + +void MultiTaskItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(); +} + +void MultiTaskItem::OnSelectedDevice(wxCommandEvent& evt) +{ + auto dev_id = evt.GetString(); + auto state = evt.GetInt(); + if (state == 0) { + state_selected = 1; + } + else if (state == 1) { + state_selected = 0; + } + Refresh(); +} + +void MultiTaskItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + + if (m_task_type == 0 && state_local_task <= 1) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } + else if (m_task_type == 1 && state_cloud_task == 0) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } + } +} + +void MultiTaskItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void MultiTaskItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void MultiTaskItem::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void MultiTaskItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(TASK_LEFT_PADDING_LEFT); + + + //checkbox + if (m_task_type == 0) { + if (state_local_task >= 2) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else { + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else if (state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + } + } + else if(m_task_type == 1){ + if (state_cloud_task != 0) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else { + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + else if (state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2)); + } + } + } + + + left += FromDIP(TASK_LEFT_PRINTABLE); + + //project name + DrawTextWithEllipsis(dc, m_project_name, FromDIP(TASK_LEFT_PRO_NAME), left); + left += FromDIP(TASK_LEFT_PRO_NAME); + + //dev name + DrawTextWithEllipsis(dc, m_dev_name, FromDIP(TASK_LEFT_DEV_NAME), left); + left += FromDIP(TASK_LEFT_DEV_NAME); + + //local task state + if (m_task_type == 0) { + DrawTextWithEllipsis(dc, get_local_state_task(), FromDIP(TASK_LEFT_PRO_STATE), left); + } + else { + DrawTextWithEllipsis(dc, get_cloud_state_task(), FromDIP(TASK_LEFT_PRO_STATE), left); + } + + left += FromDIP(TASK_LEFT_PRO_STATE); + + //cloud task info + if (m_task_type == 1) { + if (get_obj()) { + if (state_cloud_task == 0 && m_job_id == get_obj()->profile_id_) { + dc.SetFont(Label::Body_13); + if (state_device == 0) { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 1) { + dc.SetTextForeground(wxColour(0, 150, 136)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device == 2) + { + dc.SetTextForeground(wxColour(208, 27, 27)); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(DEVICE_LEFT_PRO_INFO), left); + } + else if (state_device > 2 && state_device < 7) { + dc.SetFont(Label::Body_12); + dc.SetTextForeground(wxColour(0, 150, 136)); + if (obj_->get_curr_stage().IsEmpty()) { + //wxString layer_info = wxString::Format(_L("Layer: %d/%d"), obj_->curr_layer, obj_->total_layers); + wxString progress_info = wxString::Format("%d", obj_->subtask_->task_progress); + wxString left_time = wxString::Format("%s", get_left_time(obj_->mc_left_time)); + + DrawTextWithEllipsis(dc, progress_info + "% | " + left_time, FromDIP(TASK_LEFT_PRO_INFO), left, FromDIP(10)); + + dc.SetPen(wxPen(wxColour(233, 233, 233))); + dc.SetBrush(wxBrush(wxColour(233, 233, 233))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO), FromDIP(10), 2); + + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(wxBrush(wxColour(0, 150, 136))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO) * (static_cast(obj_->subtask_->task_progress) / 100.0f), FromDIP(10), 2); + } + else { + DrawTextWithEllipsis(dc, obj_->get_curr_stage(), FromDIP(TASK_LEFT_PRO_INFO), left); + } + } + else { + dc.SetTextForeground(*wxBLACK); + DrawTextWithEllipsis(dc, get_state_device(), FromDIP(TASK_LEFT_PRO_INFO), left); + } + } + } + } + else { + if (state_local_task == 1) { + wxString progress_info = wxString::Format("%d", m_sending_percent); + DrawTextWithEllipsis(dc, progress_info + "% " , FromDIP(TASK_LEFT_PRO_INFO), left, FromDIP(10)); + + dc.SetPen(wxPen(wxColour(233, 233, 233))); + dc.SetBrush(wxBrush(wxColour(233, 233, 233))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO), FromDIP(10), 2); + + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(wxBrush(wxColour(0, 150, 136))); + dc.DrawRoundedRectangle(left, FromDIP(30), FromDIP(TASK_LEFT_PRO_INFO) * (static_cast(m_sending_percent) / 100.0f), FromDIP(10), 2); + } + /*else { + if () { + + } + if (m_button_cancel->IsShown()) { + m_button_cancel->Hide(); + Layout(); + } + }*/ + } + left += FromDIP(TASK_LEFT_PRO_INFO); + + //send time + dc.SetFont(Label::Body_13); + dc.SetTextForeground(*wxBLACK); + + if (!boost::algorithm::contains(m_send_time, "1970")) { + DrawTextWithEllipsis(dc, m_send_time, FromDIP(TASK_LEFT_SEND_TIME), left); + } + + left += FromDIP(TASK_LEFT_SEND_TIME); + + if (m_hover) { + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + } +} + +void MultiTaskItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top) { + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void MultiTaskItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(m_dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void MultiTaskItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +wxString MultiTaskItem::get_left_time(int mc_left_time) +{ + // update gcode progress + std::string left_time; + wxString left_time_text = _L("N/A"); + + try { + left_time = get_bbl_monitor_time_dhm(mc_left_time); + } + catch (...) { + ; + } + + if (!left_time.empty()) left_time_text = wxString::Format("-%s", left_time); + return left_time_text; +} + + +LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(wxColour(0xEEEEEE)); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_main_panel->SetBackgroundColour(*wxWHITE); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + m_table_head_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_select_checkbox = new CheckBox(m_table_head_panel, wxID_ANY); + m_select_checkbox->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_select_checkbox->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_table_head_sizer->Add(m_select_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_select_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_select_checkbox->GetValue()) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + + if (it->second->state_local_task <= 1) { + it->second->selected(); + } + } + } + else { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->unselected(); + } + } + Refresh(false); + e.Skip(); + }); + + + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_task_name->SetFont(TABLE_HEAD_FONT); + m_task_name->SetCornerRadius(0); + m_task_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetCenter(false); + m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_name_big = !device_name_big; + this->m_sort.set_role(SortItem::SortRule::SR_DEV_NAME, device_name_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status->SetBackgroundColor(head_bg); + m_status->SetFont(TABLE_HEAD_FONT); + m_status->SetCornerRadius(0); + m_status->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetCenter(false); + m_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_state_big = !device_state_big; + this->m_sort.set_role(SortItem::SortRule::SR_LOCAL_TASK_STATE, device_state_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); + m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_info->SetFont(TABLE_HEAD_FONT); + m_info->SetCornerRadius(0); + m_info->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetCenter(false); + m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_send_time->SetBackgroundColor(head_bg); + m_send_time->SetFont(TABLE_HEAD_FONT); + m_send_time->SetCornerRadius(0); + m_send_time->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetCenter(false); + m_send_time->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_send_time->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_send_time->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_send_time = !device_send_time; + this->m_sort.set_role(SortItem::SortRule::SR_SEND_TIME, device_send_time); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_action->SetFont(TABLE_HEAD_FONT); + m_action->SetCornerRadius(0); + /* m_action->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT)));*/ + m_action->SetCenter(false); + m_table_head_sizer->Add(m_action, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("There are no tasks to be sent!")); + m_tip_text->SetForegroundColour(wxColour(50, 58, 61)); + m_tip_text->SetFont(::Label::Head_24); + m_tip_text->Wrap(-1); + + m_task_list = new wxScrolledWindow(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_task_list->SetBackgroundColour(*wxWHITE); + m_task_list->SetScrollRate(0, 5); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + m_sizer_task_list = new wxBoxSizer(wxVERTICAL); + m_task_list->SetSizer(m_sizer_task_list); + m_task_list->Layout(); + + m_main_sizer->AddSpacer(FromDIP(50)); + m_main_sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_task_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->AddSpacer(FromDIP(5)); + + // ctrl panel + StateColor ctrl_bg( + std::pair(CTRL_BUTTON_PRESSEN_COLOUR, StateColor::Pressed), + std::pair(CTRL_BUTTON_NORMAL_COLOUR, StateColor::Normal) + ); + + m_ctrl_btn_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_ctrl_btn_panel->SetBackgroundColour(*wxWHITE); + m_ctrl_btn_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_ctrl_btn_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_btn_sizer = new wxBoxSizer(wxHORIZONTAL); + btn_stop_all = new Button(m_ctrl_btn_panel, _L("Stop")); + btn_stop_all->SetBackgroundColor(ctrl_bg); + btn_stop_all->SetCornerRadius(FromDIP(5)); + m_sel_text = new wxStaticText(m_ctrl_btn_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + + m_btn_sizer->Add(m_sel_text, 0, wxLEFT, FromDIP(15));; + m_btn_sizer->Add(btn_stop_all, 0, wxLEFT, FromDIP(10)); + m_ctrl_btn_panel->SetSizer(m_btn_sizer); + m_ctrl_btn_panel->Layout(); + + m_main_sizer->AddSpacer(FromDIP(10)); + m_main_sizer->Add(m_ctrl_btn_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + btn_stop_all->Bind(wxEVT_BUTTON, &LocalTaskManagerPage::cancel_all, this); + m_main_panel->SetSizer(m_main_sizer); + m_main_panel->Layout(); + + page_sizer = new wxBoxSizer(wxVERTICAL); + page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); + + wxGetApp().UpdateDarkUIWin(this); + + SetSizer(page_sizer); + Layout(); + Fit(); +} + +void LocalTaskManagerPage::update_page() +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->update_info(); + } +} + +void LocalTaskManagerPage::refresh_user_device(bool clear) +{ + m_sizer_task_list->Clear(false); + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + m_ctrl_btn_panel->Show(false); + return; + } + + if(clear)return; + + std::vector subscribe_list; + std::vector task_temps; + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = wxGetApp().app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + auto task_manager = wxGetApp().getTaskManager(); + if (task_manager) { + auto m_task_obj_list = task_manager->get_local_task_list(); + + for (auto it = m_task_obj_list.rbegin(); it != m_task_obj_list.rend(); ++it) { + + TaskStateInfo* task_state_info = it->second; + + if(!task_state_info) continue; + + MultiTaskItem* mtitem = new MultiTaskItem(m_task_list, nullptr, 0); + mtitem->task_obj = task_state_info; + mtitem->m_project_name = wxString::FromUTF8(task_state_info->get_task_name()); + mtitem->m_dev_name = task_state_info->get_device_name(); + mtitem->m_dev_id = task_state_info->params().dev_id; + mtitem->m_send_time = task_state_info->get_sent_time(); + mtitem->state_local_task = task_state_info->state(); + + task_state_info->set_state_changed_fn([this, mtitem](TaskState state, int percent) { + mtitem->state_local_task = state; + if (state == TaskState::TS_SEND_COMPLETED) { + + mtitem->m_send_time = mtitem->task_obj->get_sent_time(); + wxCommandEvent event(EVT_MULTI_REFRESH); + event.SetEventObject(mtitem); + wxPostEvent(mtitem, event); + } + mtitem->m_sending_percent = percent; + }); + + if (m_task_items.find(it->first) != m_task_items.end()) { + MultiTaskItem* item = m_task_items[it->first]; + if (item->state_selected == 1 && mtitem->state_local_task < 2) + mtitem->state_selected = item->state_selected; + item->Destroy(); + } + + m_task_items[it->first] = mtitem; + task_temps.push_back(mtitem); + } + + if (m_sort.rule != SortItem::SortRule::SR_None && m_sort.rule != SortItem::SortRule::SR_SEND_TIME) { + std::sort(task_temps.begin(), task_temps.end(), m_sort.get_call_back()); + } + + for (const auto& item : task_temps) + m_sizer_task_list->Add(item, 0, wxALL | wxEXPAND, 0); + + // maintenance + auto it = m_task_items.begin(); + while (it != m_task_items.end()) { + if (m_task_obj_list.find(it->first) != m_task_obj_list.end()) + ++it; + else { + it->second->Destroy(); + it = m_task_items.erase(it); + } + } + + dev->subscribe_device_list(subscribe_list); + int num = m_task_items.size() > 10 ? 10 : m_task_items.size(); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), num * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->Layout(); + } + m_tip_text->Show(m_task_items.empty()); + m_ctrl_btn_panel->Show(!m_task_items.empty()); + Layout(); +} + +bool LocalTaskManagerPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxPanel::Show(show); +} + +void LocalTaskManagerPage::cancel_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_cancel->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_local_task < 2) { + it->second->onCancel(); + } + } +} + +CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + SetBackgroundColour(wxColour(0xEEEEEE)); + m_sort.set_role(SortItem::SR_SEND_TIME, true); + + SetBackgroundColour(wxColour(0xEEEEEE)); + m_main_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_main_panel->SetBackgroundColour(*wxWHITE); + m_main_sizer = new wxBoxSizer(wxVERTICAL); + + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + StateColor ctrl_bg( + std::pair(CTRL_BUTTON_PRESSEN_COLOUR, StateColor::Pressed), + std::pair(CTRL_BUTTON_NORMAL_COLOUR, StateColor::Normal) + ); + + m_table_head_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_select_checkbox = new CheckBox(m_table_head_panel, wxID_ANY); + m_select_checkbox->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_select_checkbox->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRINTABLE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + //m_table_head_sizer->AddSpacer(FromDIP(TASK_LEFT_PADDING_LEFT)); + m_table_head_sizer->Add(m_select_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_select_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_select_checkbox->GetValue()) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + + if (it->second->state_cloud_task == 0) { + it->second->selected(); + } + } + } + else { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->unselected(); + } + } + Refresh(false); + e.Skip(); + }); + + + + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); + m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_task_name->SetFont(TABLE_HEAD_FONT); + m_task_name->SetCornerRadius(0); + m_task_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_name->SetCenter(false); + m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetMinSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(TASK_LEFT_DEV_NAME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_name_big = !device_name_big; + this->m_sort.set_role(SortItem::SortRule::SR_DEV_NAME, device_name_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_status->SetBackgroundColor(head_bg); + m_status->SetFont(TABLE_HEAD_FONT); + m_status->SetCornerRadius(0); + m_status->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_STATE), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_status->SetCenter(false); + m_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_state_big = !device_state_big; + this->m_sort.set_role(SortItem::SortRule::SR_CLOUD_TASK_STATE, device_state_big); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); + m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_info->SetFont(TABLE_HEAD_FONT); + m_info->SetCornerRadius(0); + m_info->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_info->SetCenter(false); + m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_send_time->SetBackgroundColor(head_bg); + m_send_time->SetFont(TABLE_HEAD_FONT); + m_send_time->SetCornerRadius(0); + m_send_time->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_send_time->SetCenter(false); + m_send_time->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_send_time->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_send_time->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_send_time = !device_send_time; + this->m_sort.set_role(SortItem::SortRule::SR_SEND_TIME, device_send_time); + this->refresh_user_device(); + }); + m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); + m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); + m_action->SetFont(TABLE_HEAD_FONT); + m_action->SetCornerRadius(0); + m_action->SetMinSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetMaxSize(wxSize(FromDIP(TASK_LEFT_PRO_INFO), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_action->SetCenter(false); + m_table_head_sizer->Add(m_action, 0, wxALIGN_CENTER_VERTICAL, 0); + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("No historical tasks!")); + m_tip_text->SetForegroundColour(wxColour(50, 58, 61)); + m_tip_text->SetFont(::Label::Head_24); + m_tip_text->Wrap(-1); + + m_loading_text = new wxStaticText(m_main_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_loading_text->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_loading_text->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_loading_text->SetLabel(_L("Loading...")); + m_loading_text->SetForegroundColour(wxColour(50, 58, 61)); + m_loading_text->SetFont(::Label::Head_24); + m_loading_text->Wrap(-1); + m_loading_text->Show(false); + + m_task_list = new wxScrolledWindow(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_task_list->SetBackgroundColour(*wxWHITE); + m_task_list->SetScrollRate(0, 5); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), 10 * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + + m_sizer_task_list = new wxBoxSizer(wxVERTICAL); + m_task_list->SetSizer(m_sizer_task_list); + m_task_list->Layout(); + m_task_list->Fit(); + + m_main_sizer->AddSpacer(FromDIP(50)); + m_main_sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_loading_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(50)); + m_main_sizer->Add(m_task_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_sizer->AddSpacer(FromDIP(5)); + + // add flipping page + m_flipping_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_flipping_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_flipping_panel->SetBackgroundColour(*wxWHITE); + + m_flipping_page_sizer = new wxBoxSizer(wxHORIZONTAL); + m_page_sizer = new wxBoxSizer(wxVERTICAL); + btn_last_page = new Button(m_flipping_panel, "", "go_last_plate", wxBORDER_NONE, FromDIP(20)); + btn_last_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_last_page->SetBackgroundColor(head_bg); + btn_last_page->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + evt.Skip(); + if (m_current_page == 0) + return; + enable_buttons(false); + start_timer(); + m_current_page--; + if (m_current_page < 0) + m_current_page = 0; + refresh_user_device(); + update_page_number(); + /*m_sizer_task_list->Clear(false); + m_loading_text->Show(true); + Layout();*/ + }); + st_page_number = new wxStaticText(m_flipping_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + btn_next_page = new Button(m_flipping_panel, "", "go_next_plate", wxBORDER_NONE, FromDIP(20)); + btn_next_page->SetMinSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetMaxSize(wxSize(FromDIP(20), FromDIP(20))); + btn_next_page->SetBackgroundColor(head_bg); + btn_next_page->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + evt.Skip(); + if (m_current_page == m_total_page - 1) + return; + enable_buttons(false); + start_timer(); + m_current_page++; + if (m_current_page > m_total_page - 1) + m_current_page = m_total_page - 1; + refresh_user_device(); + update_page_number(); + /*m_sizer_task_list->Clear(false); + m_loading_text->Show(true); + Layout();*/ + }); + + m_page_num_input = new ::TextInput(m_flipping_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(50), -1), wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + m_page_num_input->SetBackgroundColor(input_bg); + m_page_num_input->GetTextCtrl()->SetValue("1"); + wxTextValidator validator(wxFILTER_DIGITS); + m_page_num_input->GetTextCtrl()->SetValidator(validator); + m_page_num_input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [&](wxCommandEvent& e) { + page_num_enter_evt(); + }); + + m_page_num_enter = new Button(m_flipping_panel, _("Go")); + m_page_num_enter->SetMinSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetMaxSize(wxSize(FromDIP(25), FromDIP(25))); + m_page_num_enter->SetBackgroundColor(ctrl_bg); + m_page_num_enter->SetCornerRadius(FromDIP(5)); + m_page_num_enter->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [&](auto& evt) { + page_num_enter_evt(); + }); + + m_flipping_page_sizer->Add(0, 0, 1, wxEXPAND, 0); + m_flipping_page_sizer->Add(btn_last_page, 0, wxALIGN_CENTER, 0); + m_flipping_page_sizer->Add(st_page_number, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(btn_next_page, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(m_page_num_input, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(20)); + m_flipping_page_sizer->Add(m_page_num_enter, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + m_flipping_page_sizer->Add(0, 0, 1, wxEXPAND, 0); + m_page_sizer->Add(m_flipping_page_sizer, 0, wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); + m_flipping_panel->SetSizer(m_page_sizer); + m_flipping_panel->Layout(); + m_main_sizer->Add(m_flipping_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + m_ctrl_btn_panel = new wxPanel(m_main_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_ctrl_btn_panel->SetBackgroundColour(*wxWHITE); + m_ctrl_btn_panel->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_ctrl_btn_panel->SetMaxSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), -1)); + m_btn_sizer = new wxBoxSizer(wxHORIZONTAL); + btn_pause_all = new Button(m_ctrl_btn_panel, _L("Pause")); + btn_pause_all->SetBackgroundColor(ctrl_bg); + btn_pause_all->SetCornerRadius(FromDIP(5)); + btn_continue_all = new Button(m_ctrl_btn_panel, _L("Resume")); + btn_continue_all->SetBackgroundColor(ctrl_bg); + btn_continue_all->SetCornerRadius(FromDIP(5)); + btn_stop_all = new Button(m_ctrl_btn_panel, _L("Stop")); + btn_stop_all->SetBackgroundColor(ctrl_bg); + btn_stop_all->SetCornerRadius(FromDIP(5)); + m_sel_text = new wxStaticText(m_ctrl_btn_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize); + + btn_pause_all->Bind(wxEVT_BUTTON, &CloudTaskManagerPage::pause_all, this); + btn_continue_all->Bind(wxEVT_BUTTON, &CloudTaskManagerPage::resume_all, this); + btn_stop_all->Bind(wxEVT_BUTTON, &CloudTaskManagerPage::stop_all, this); + + m_btn_sizer->Add(m_sel_text, 0, wxLEFT, FromDIP(15)); + m_btn_sizer->Add(btn_pause_all, 0, wxLEFT, FromDIP(10)); + m_btn_sizer->Add(btn_continue_all, 0, wxLEFT, FromDIP(10)); + m_btn_sizer->Add(btn_stop_all, 0, wxLEFT, FromDIP(10)); + m_ctrl_btn_panel->SetSizer(m_btn_sizer); + m_ctrl_btn_panel->Layout(); + + m_main_sizer->AddSpacer(FromDIP(10)); + m_main_sizer->Add(m_ctrl_btn_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_main_panel->SetSizer(m_main_sizer); + m_main_panel->Layout(); + + page_sizer = new wxBoxSizer(wxVERTICAL); + page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); + Bind(wxEVT_TIMER, &CloudTaskManagerPage::on_timer, this); + + wxGetApp().UpdateDarkUIWin(this); + + SetSizer(page_sizer); + Layout(); + Fit(); +} + +CloudTaskManagerPage::~CloudTaskManagerPage() +{ + if (m_flipping_timer) + m_flipping_timer->Stop(); + delete m_flipping_timer; +} + + +void CloudTaskManagerPage::refresh_user_device(bool clear) +{ + m_sizer_task_list->Clear(false); + + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + m_flipping_panel->Show(false); + m_ctrl_btn_panel->Show(false); + return; + } + + if (clear) return; + + std::vector task_temps; + std::vector subscribe_list; + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = wxGetApp().app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + auto task_manager = wxGetApp().getTaskManager(); + if (task_manager) { + auto m_task_obj_list = task_manager->get_task_list(m_current_page, m_count_page_item, m_total_count); + + for (auto it = m_task_obj_list.begin(); it != m_task_obj_list.end(); it++) { + + TaskStateInfo task_state_info = it->second; + MachineObject* machine_obj = nullptr; + + if (user_machine.count(task_state_info.params().dev_id)) { + machine_obj = user_machine[task_state_info.params().dev_id]; + } + + MultiTaskItem* mtitem = new MultiTaskItem(m_task_list, machine_obj, 1); + //mtitem->task_obj = task_state_info; + mtitem->m_job_id = task_state_info.get_job_id(); + mtitem->m_project_name = wxString::FromUTF8(task_state_info.get_task_name()); + mtitem->m_dev_name = task_state_info.get_device_name(); + mtitem->m_dev_id = task_state_info.params().dev_id; + + mtitem->m_send_time = utc_time_to_date(task_state_info.start_time); + + if (task_state_info.state() == TS_PRINTING) { + mtitem->state_cloud_task = 0; + } + else if (task_state_info.state() == TS_PRINT_SUCCESS) { + mtitem->state_cloud_task = 1; + } + else if (task_state_info.state() == TS_PRINT_FAILED) { + mtitem->state_cloud_task = 2; + } + + if (m_task_items.find(it->first) != m_task_items.end()) { + MultiTaskItem* item = m_task_items[it->first]; + if (item->state_selected == 1 && mtitem->state_cloud_task == 0) + mtitem->state_selected = item->state_selected; + item->Destroy(); + } + + m_task_items[it->first] = mtitem; + mtitem->update_info(); + task_temps.push_back(mtitem); + + auto find_it = std::find(subscribe_list.begin(), subscribe_list.end(), mtitem->m_dev_id); + if (find_it == subscribe_list.end()) { + subscribe_list.push_back(mtitem->m_dev_id); + } + } + + dev->subscribe_device_list(subscribe_list); + + if (m_sort.rule == SortItem::SortRule::SR_None) { + this->device_send_time = true; + m_sort.set_role(SortItem::SortRule::SR_SEND_TIME, device_send_time); + } + std::sort(task_temps.begin(), task_temps.end(), m_sort.get_call_back()); + + for (const auto& item : task_temps) + m_sizer_task_list->Add(item, 0, wxALL | wxEXPAND, 0); + + // maintenance + auto it = m_task_items.begin(); + while (it != m_task_items.end()) { + if (m_task_obj_list.find(it->first) != m_task_obj_list.end()) { + ++it; + } + else { + it->second->Destroy(); + it = m_task_items.erase(it); + } + } + m_sizer_task_list->Layout(); + int num = m_task_items.size() > 10 ? 10 : m_task_items.size(); + m_task_list->SetMinSize(wxSize(FromDIP(CLOUD_TASK_ITEM_MAX_WIDTH), num * FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_list->Layout(); + } + + update_page_number(); + + m_tip_text->Show(m_task_items.empty()); + m_flipping_panel->Show(m_total_page > 1); + m_ctrl_btn_panel->Show(!m_task_items.empty()); + Layout(); +} + +std::string CloudTaskManagerPage::utc_time_to_date(std::string utc_time) +{ + /*std::tm timeInfo = {}; + std::istringstream iss(utc_time); + iss >> std::get_time(&timeInfo, "%Y-%m-%dT%H:%M:%SZ"); + + std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(std::mktime(&timeInfo)); + std::time_t localTime = std::chrono::system_clock::to_time_t(tp); + std::tm* localTimeInfo = std::localtime(&localTime); + + std::stringstream ss; + ss << std::put_time(localTimeInfo, "%Y-%m-%d %H:%M:%S"); + return ss.str();*/ + std::string send_time; + + + std::tm timeInfo = {}; + std::istringstream iss(utc_time); + iss >> std::get_time(&timeInfo, "%Y-%m-%dT%H:%M:%SZ"); + + std::chrono::system_clock::time_point tp = std::chrono::system_clock::from_time_t(std::mktime(&timeInfo)); + std::time_t utcTime = std::chrono::system_clock::to_time_t(tp); + + + wxDateTime::TimeZone tz(wxDateTime::Local); + long offset = tz.GetOffset(); + + + std::time_t localTime = utcTime + offset; + + std::tm* localTimeInfo = std::localtime(&localTime); + std::stringstream ss; + ss << std::put_time(localTimeInfo, "%Y-%m-%d %H:%M:%S"); + send_time = ss.str(); + + + return send_time; +} + + +bool CloudTaskManagerPage::Show(bool show) +{ + if (show) { + refresh_user_device(); + } + else { + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + + return wxPanel::Show(show); +} + +void CloudTaskManagerPage::update_page() +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + it->second->sync_state(); + it->second->update_info(); + } +} + +void CloudTaskManagerPage::update_page_number() +{ + double result = static_cast(m_total_count) / m_count_page_item; + m_total_page = std::ceil(result); + + wxString number = wxString(std::to_string(m_current_page + 1)) + " / " + wxString(std::to_string(m_total_page)); + st_page_number->SetLabel(number); +} + +void CloudTaskManagerPage::start_timer() +{ + if (m_flipping_timer) { + m_flipping_timer->Stop(); + } + else { + m_flipping_timer = new wxTimer(); + } + + m_flipping_timer->SetOwner(this); + m_flipping_timer->Start(1000); + wxPostEvent(this, wxTimerEvent()); +} + +void CloudTaskManagerPage::on_timer(wxTimerEvent& event) +{ + m_flipping_timer->Stop(); + enable_buttons(true); + update_page_number(); +} + +void CloudTaskManagerPage::pause_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_pause->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_cloud_task == 0) { + it->second->onPause(); + } + } +} + +void CloudTaskManagerPage::resume_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_resume->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_cloud_task == 0) { + it->second->onResume(); + } + } +} + +void CloudTaskManagerPage::stop_all(wxCommandEvent& evt) +{ + for (auto it = m_task_items.begin(); it != m_task_items.end(); it++) { + if (it->second->m_button_stop->IsShown() && (it->second->get_state_selected() == 1) && it->second->state_cloud_task == 0) { + it->second->onStop(); + } + } +} + +void CloudTaskManagerPage::enable_buttons(bool enable) +{ + btn_last_page->Enable(enable); + btn_next_page->Enable(enable); + btn_pause_all->Enable(enable); + btn_continue_all->Enable(enable); + btn_stop_all->Enable(enable); +} + +void CloudTaskManagerPage::page_num_enter_evt() +{ + enable_buttons(false); + start_timer(); + auto value = m_page_num_input->GetTextCtrl()->GetValue(); + long page_num = 0; + if (value.ToLong(&page_num)) { + if (page_num > m_total_page) + m_current_page = m_total_page - 1; + else if (page_num < 1) + m_current_page = 0; + else + m_current_page = page_num - 1; + } + refresh_user_device(); + update_page_number(); + /*m_sizer_task_list->Clear(false); + m_loading_text->Show(true); + Layout();*/ +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp new file mode 100644 index 0000000000..40341560ed --- /dev/null +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -0,0 +1,208 @@ +#ifndef slic3r_MultiTaskManagerPage_hpp_ +#define slic3r_MultiTaskManagerPage_hpp_ + +#include "GUI_App.hpp" +#include "GUI_Utils.hpp" +#include "MultiMachine.hpp" +#include "DeviceManager.hpp" +#include "TaskManager.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/CheckBox.hpp" +#include "Widgets/ComboBox.hpp" +#include "Widgets/ScrolledWindow.hpp" +#include "Widgets/PopupWindow.hpp" +#include "Widgets/TextInput.hpp" + +namespace Slic3r { +namespace GUI { + +#define CLOUD_TASK_ITEM_MAX_WIDTH 1100 +#define TASK_ITEM_MAX_WIDTH 900 +#define TASK_LEFT_PADDING_LEFT 15 +#define TASK_LEFT_PRINTABLE 40 +#define TASK_LEFT_PRO_NAME 180 +#define TASK_LEFT_DEV_NAME 150 +#define TASK_LEFT_PRO_STATE 170 +#define TASK_LEFT_PRO_INFO 230 +#define TASK_LEFT_SEND_TIME 180 + +class MultiTaskItem : public DeviceItem +{ +public: + MultiTaskItem(wxWindow* parent, MachineObject* obj, int type); + ~MultiTaskItem() {}; + + + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnSelectedDevice(wxCommandEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + + bool m_hover{ false }; + wxString get_left_time(int mc_left_time); + + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; + + int m_sending_percent{0}; + int m_task_type{0}; //0-local 1-cloud + wxString m_project_name; + wxString m_dev_name; + std::string m_dev_id; + TaskStateInfo* task_obj { nullptr }; + std::string m_job_id; + //std::string m_sent_time; + + Button* m_button_resume{ nullptr }; + Button* m_button_cancel{ nullptr }; + Button* m_button_pause{ nullptr }; + Button* m_button_stop{ nullptr }; + + void update_info(); + void onPause(); + void onResume(); + void onStop(); + void onCancel(); +}; + +class LocalTaskManagerPage : public wxPanel +{ +public: + LocalTaskManagerPage(wxWindow* parent); + ~LocalTaskManagerPage() {}; + + void update_page(); + void refresh_user_device(bool clear = false); + bool Show(bool show); + void cancel_all(wxCommandEvent& evt); + +private: + SortItem m_sort; + std::map m_task_items; + bool device_name_big{ true }; + bool device_state_big{ true }; + bool device_send_time{ true }; + + wxPanel* m_main_panel{ nullptr }; + wxBoxSizer* m_main_sizer{ nullptr }; + wxBoxSizer* page_sizer{ nullptr }; + wxBoxSizer* m_sizer_task_list{ nullptr }; + wxScrolledWindow* m_task_list{ nullptr }; + wxStaticText* m_selected_num{ nullptr }; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + CheckBox* m_select_checkbox{ nullptr }; + Button* m_task_name{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_status{ nullptr }; + Button* m_info{ nullptr }; + Button* m_send_time{ nullptr }; + Button* m_action{ nullptr }; + + // ctrl button for all + int m_sel_number{0}; + wxPanel* m_ctrl_btn_panel{ nullptr }; + wxBoxSizer* m_btn_sizer{ nullptr }; + Button* btn_stop_all{ nullptr }; + wxStaticText* m_sel_text{ nullptr }; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; +}; + +class CloudTaskManagerPage : public wxPanel +{ +public: + CloudTaskManagerPage(wxWindow* parent); + ~CloudTaskManagerPage(); + + void update_page(); + void refresh_user_device(bool clear = false); + std::string utc_time_to_date(std::string utc_time); + bool Show(bool show); + void update_page_number(); + void start_timer(); + void on_timer(wxTimerEvent& event); + + void pause_all(wxCommandEvent& evt); + void resume_all(wxCommandEvent& evt); + void stop_all(wxCommandEvent& evt); + + void enable_buttons(bool enable); + void page_num_enter_evt(); + +private: + SortItem m_sort; + bool device_name_big{ true }; + bool device_state_big{ true }; + bool device_send_time{ true }; + + /* job_id -> sel */ + std::map m_task_items; + + wxPanel* m_main_panel{ nullptr }; + wxBoxSizer* page_sizer{ nullptr }; + wxBoxSizer* m_sizer_task_list{ nullptr }; + wxBoxSizer* m_main_sizer{ nullptr }; + wxScrolledWindow* m_task_list{ nullptr }; + wxStaticText* m_selected_num{ nullptr }; + + // Flipping pages + int m_current_page{ 0 }; + int m_total_page{0}; + int m_total_count{ 0 }; + int m_count_page_item{ 10 }; + bool prev{ false }; + bool next{ false }; + Button* btn_last_page{ nullptr }; + Button* btn_next_page{ nullptr }; + wxStaticText* st_page_number{ nullptr }; + wxBoxSizer* m_flipping_page_sizer{ nullptr }; + wxBoxSizer* m_page_sizer{ nullptr }; + wxPanel* m_flipping_panel{ nullptr }; + wxTimer* m_flipping_timer{ nullptr }; + TextInput* m_page_num_input{ nullptr }; + Button* m_page_num_enter{ nullptr }; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + CheckBox* m_select_checkbox{ nullptr }; + Button* m_task_name{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_status{ nullptr }; + Button* m_info{ nullptr }; + Button* m_send_time{ nullptr }; + Button* m_action{ nullptr }; + + // ctrl button for all + int m_sel_number; + wxPanel* m_ctrl_btn_panel{ nullptr }; + wxBoxSizer* m_btn_sizer{ nullptr }; + Button* btn_pause_all{ nullptr }; + Button* btn_continue_all{ nullptr }; + Button* btn_stop_all{ nullptr }; + wxStaticText* m_sel_text{ nullptr }; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; + wxStaticText* m_loading_text{ nullptr }; +}; + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/MultiTaskModel.cpp b/src/slic3r/GUI/MultiTaskModel.cpp new file mode 100644 index 0000000000..b23468b93e --- /dev/null +++ b/src/slic3r/GUI/MultiTaskModel.cpp @@ -0,0 +1,6 @@ + +namespace Slic3r { +namespace GUI { + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/MultiTaskModel.hpp b/src/slic3r/GUI/MultiTaskModel.hpp new file mode 100644 index 0000000000..6b233e9302 --- /dev/null +++ b/src/slic3r/GUI/MultiTaskModel.hpp @@ -0,0 +1,11 @@ +#ifndef slic3r_MultiTaskModel_hpp_ +#define slic3r_MultiTaskModel_hpp_ + +namespace Slic3r { +namespace GUI { + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp new file mode 100644 index 0000000000..648faffbf9 --- /dev/null +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -0,0 +1,817 @@ +#include +#include +//#include "libslic3r/FlushVolCalc.hpp" +#include "ObjColorDialog.hpp" +#include "BitmapCache.hpp" +#include "GUI.hpp" +#include "I18N.hpp" +#include "GUI_App.hpp" +#include "MsgDialog.hpp" +#include "Widgets/Button.hpp" +#include "slic3r/Utils/ColorSpaceConvert.hpp" +#include "MainFrame.hpp" +#include "libslic3r/Config.hpp" +#include "BitmapComboBox.hpp" +#include "Widgets/ComboBox.hpp" +#include + +#include "libslic3r/ObjColorUtils.hpp" + +using namespace Slic3r; +using namespace Slic3r::GUI; + +int objcolor_scale(const int val) { return val * Slic3r::GUI::wxGetApp().em_unit() / 10; } +int OBJCOLOR_ITEM_WIDTH() { return objcolor_scale(30); } +static const wxColour g_text_color = wxColour(107, 107, 107, 255); +const int HEADER_BORDER = 5; +const int CONTENT_BORDER = 3; +const int PANEL_WIDTH = 370; +const int COLOR_LABEL_WIDTH = 180; +#define ICON_SIZE wxSize(FromDIP(16), FromDIP(16)) +#define MIN_OBJCOLOR_DIALOG_WIDTH FromDIP(400) +#define FIX_SCROLL_HEIGTH FromDIP(400) +#define BTN_SIZE wxSize(FromDIP(58), FromDIP(24)) +#define BTN_GAP FromDIP(20) + +static void update_ui(wxWindow* window) +{ + Slic3r::GUI::wxGetApp().UpdateDarkUI(window); +} + +static const char g_min_cluster_color = 1; +//static const char g_max_cluster_color = 15; +static const char g_max_color = 16; +const StateColor ok_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); +const StateColor ok_btn_disable_bg(std::pair(wxColour(205, 201, 201), StateColor::Pressed), + std::pair(wxColour(205, 201, 201), StateColor::Hovered), + std::pair(wxColour(205, 201, 201), StateColor::Normal)); +wxBoxSizer* ObjColorDialog::create_btn_sizer(long flags) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + btn_sizer->AddStretchSpacer(); + + StateColor ok_btn_bd( + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + StateColor ok_btn_text( + std::pair(wxColour(255, 255, 254), StateColor::Normal) + ); + StateColor cancel_btn_bg( + std::pair(wxColour(206, 206, 206), StateColor::Pressed), + std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(wxColour(255, 255, 255), StateColor::Normal) + ); + StateColor cancel_btn_bd_( + std::pair(wxColour(38, 46, 48), StateColor::Normal) + ); + StateColor cancel_btn_text( + std::pair(wxColour(38, 46, 48), StateColor::Normal) + ); + StateColor calc_btn_bg( + std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + StateColor calc_btn_bd( + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + StateColor calc_btn_text( + std::pair(wxColour(255, 255, 254), StateColor::Normal) + ); + if (flags & wxOK) { + Button* ok_btn = new Button(this, _L("OK")); + ok_btn->SetMinSize(BTN_SIZE); + ok_btn->SetCornerRadius(FromDIP(12)); + ok_btn->Enable(false); + ok_btn->SetBackgroundColor(ok_btn_disable_bg); + ok_btn->SetBorderColor(ok_btn_bd); + ok_btn->SetTextColor(ok_btn_text); + ok_btn->SetFocus(); + ok_btn->SetId(wxID_OK); + btn_sizer->Add(ok_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list[wxOK] = ok_btn; + } + if (flags & wxCANCEL) { + Button* cancel_btn = new Button(this, _L("Cancel")); + cancel_btn->SetMinSize(BTN_SIZE); + cancel_btn->SetCornerRadius(FromDIP(12)); + cancel_btn->SetBackgroundColor(cancel_btn_bg); + cancel_btn->SetBorderColor(cancel_btn_bd_); + cancel_btn->SetTextColor(cancel_btn_text); + cancel_btn->SetId(wxID_CANCEL); + btn_sizer->Add(cancel_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, BTN_GAP); + m_button_list[wxCANCEL] = cancel_btn; + } + return btn_sizer; +} + +void ObjColorDialog::on_dpi_changed(const wxRect &suggested_rect) +{ + for (auto button_item : m_button_list) + { + if (button_item.first == wxRESET) + { + button_item.second->SetMinSize(wxSize(FromDIP(75), FromDIP(24))); + button_item.second->SetCornerRadius(FromDIP(12)); + } + if (button_item.first == wxOK) { + button_item.second->SetMinSize(BTN_SIZE); + button_item.second->SetCornerRadius(FromDIP(12)); + } + if (button_item.first == wxCANCEL) { + button_item.second->SetMinSize(BTN_SIZE); + button_item.second->SetCornerRadius(FromDIP(12)); + } + } + m_panel_ObjColor->msw_rescale(); + this->Refresh(); +}; + +ObjColorDialog::ObjColorDialog(wxWindow * parent, + std::vector & input_colors, + bool is_single_color, + const std::vector &extruder_colours, + std::vector & filament_ids, + unsigned char & first_extruder_id) + : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), + wxID_ANY, + _(L("Obj file Import color")), + wxDefaultPosition, + wxDefaultSize, + wxDEFAULT_DIALOG_STYLE /* | wxRESIZE_BORDER*/) + , m_filament_ids(filament_ids) + , m_first_extruder_id(first_extruder_id) +{ + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % Slic3r::resources_dir()).str(); + SetIcon(wxIcon(Slic3r::encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + this->SetBackgroundColour(*wxWHITE); + this->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, -1)); + + m_panel_ObjColor = new ObjColorPanel(this, input_colors, is_single_color, extruder_colours, filament_ids, first_extruder_id); + + auto main_sizer = new wxBoxSizer(wxVERTICAL); + main_sizer->Add(m_line_top, 0, wxEXPAND, 0); + // set min sizer width according to extruders count + auto sizer_width = (int) (2.8 * OBJCOLOR_ITEM_WIDTH()); + sizer_width = sizer_width > MIN_OBJCOLOR_DIALOG_WIDTH ? sizer_width : MIN_OBJCOLOR_DIALOG_WIDTH; + main_sizer->SetMinSize(wxSize(sizer_width, -1)); + main_sizer->Add(m_panel_ObjColor, 1, wxEXPAND | wxALL, 0); + + auto btn_sizer = create_btn_sizer(wxOK | wxCANCEL); + { + m_button_list[wxOK]->Bind(wxEVT_UPDATE_UI, ([this](wxUpdateUIEvent &e) { + if (m_panel_ObjColor->is_ok() == m_button_list[wxOK]->IsEnabled()) { return; } + m_button_list[wxOK]->Enable(m_panel_ObjColor->is_ok()); + m_button_list[wxOK]->SetBackgroundColor(m_panel_ObjColor->is_ok() ? ok_btn_bg : ok_btn_disable_bg); + })); + } + main_sizer->Add(btn_sizer, 0, wxBOTTOM | wxRIGHT | wxEXPAND, BTN_GAP); + SetSizer(main_sizer); + main_sizer->SetSizeHints(this); + + if (this->FindWindowById(wxID_OK, this)) { + this->FindWindowById(wxID_OK, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {// if OK button is clicked.. + m_panel_ObjColor->update_filament_ids(); + EndModal(wxID_OK); + }, wxID_OK); + } + if (this->FindWindowById(wxID_CANCEL, this)) { + update_ui(static_cast(this->FindWindowById(wxID_CANCEL, this))); + this->FindWindowById(wxID_CANCEL, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxCANCEL); }); + } + this->Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) { EndModal(wxCANCEL); }); + + wxGetApp().UpdateDlgDarkUI(this); +} +RGBA convert_to_rgba(const wxColour &color) +{ + RGBA rgba; + rgba[0] = std::clamp(color.Red() / 255.f, 0.f, 1.f); + rgba[1] = std::clamp(color.Green() / 255.f, 0.f, 1.f); + rgba[2] = std::clamp(color.Blue() / 255.f, 0.f, 1.f); + rgba[3] = std::clamp(color.Alpha() / 255.f, 0.f, 1.f); + return rgba; +} +wxColour convert_to_wxColour(const RGBA &color) +{ + auto r = std::clamp((int) (color[0] * 255.f), 0, 255); + auto g = std::clamp((int) (color[1] * 255.f), 0, 255); + auto b = std::clamp((int) (color[2] * 255.f), 0, 255); + auto a = std::clamp((int) (color[3] * 255.f), 0, 255); + wxColour wx_color(r,g,b,a); + return wx_color; +} +// This panel contains all control widgets for both simple and advanced mode (these reside in separate sizers) +ObjColorPanel::ObjColorPanel(wxWindow * parent, + std::vector& input_colors, + bool is_single_color, + const std::vector& extruder_colours, + std::vector & filament_ids, + unsigned char & first_extruder_id) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize /*,wxBORDER_RAISED*/) + , m_input_colors(input_colors) + , m_filament_ids(filament_ids) + , m_first_extruder_id(first_extruder_id) +{ + if (input_colors.size() == 0) { return; } + for (const std::string& color : extruder_colours) { + m_colours.push_back(wxColor(color)); + } + //deal input_colors + m_input_colors_size = input_colors.size(); + for (size_t i = 0; i < input_colors.size(); i++) { + if (color_is_equal(input_colors[i] , UNDEFINE_COLOR)) { // not define color range:0~1 + input_colors[i]=convert_to_rgba( m_colours[0]); + } + } + if (is_single_color && input_colors.size() >=1) { + m_cluster_colors_from_algo.emplace_back(input_colors[0]); + m_cluster_colours.emplace_back(convert_to_wxColour(input_colors[0])); + m_cluster_labels_from_algo.reserve(m_input_colors_size); + for (size_t i = 0; i < m_input_colors_size; i++) { + m_cluster_labels_from_algo.emplace_back(0); + } + m_cluster_map_filaments.resize(m_cluster_colors_from_algo.size()); + m_color_num_recommend = m_color_cluster_num_by_algo = m_cluster_colors_from_algo.size(); + } else {//cluster deal + deal_algo(-1); + } + //end first cluster + //draw ui + auto sizer_width = FromDIP(300); + // Create two switched panels with their own sizers + m_sizer_simple = new wxBoxSizer(wxVERTICAL); + m_page_simple = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_page_simple->SetSizer(m_sizer_simple); + m_page_simple->SetBackgroundColour(*wxWHITE); + + update_ui(m_page_simple); + // BBS + m_sizer_simple->AddSpacer(FromDIP(10)); + // BBS: for tunning flush volumes + { + //color cluster results + wxBoxSizer * specify_cluster_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticText *specify_color_cluster_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Specify number of colors:")); + specify_color_cluster_title->SetFont(Label::Head_14); + specify_cluster_sizer->Add(specify_color_cluster_title, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); + + m_color_cluster_num_by_user_ebox = new wxTextCtrl(m_page_simple, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(25), -1), wxTE_PROCESS_ENTER); + m_color_cluster_num_by_user_ebox->SetValue(std::to_string(m_color_cluster_num_by_algo).c_str()); + {//event + auto on_apply_color_cluster_text_modify = [this](wxEvent &e) { + wxString str = m_color_cluster_num_by_user_ebox->GetValue(); + int number = wxAtoi(str); + if (number > m_color_num_recommend || number < g_min_cluster_color) { + number = number < g_min_cluster_color ? g_min_cluster_color : m_color_num_recommend; + str = wxString::Format(("%d"), number); + m_color_cluster_num_by_user_ebox->SetValue(str); + MessageDialog dlg(nullptr, wxString::Format(_L("The color count should be in range [%d, %d]."), g_min_cluster_color, m_color_num_recommend), + _L("Warning"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + } + e.Skip(); + }; + m_color_cluster_num_by_user_ebox->Bind(wxEVT_TEXT_ENTER, on_apply_color_cluster_text_modify); + m_color_cluster_num_by_user_ebox->Bind(wxEVT_KILL_FOCUS, on_apply_color_cluster_text_modify); + m_color_cluster_num_by_user_ebox->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this](wxCommandEvent &) { + wxString str = m_color_cluster_num_by_user_ebox->GetValue(); + int number = wxAtof(str); + if (number > m_color_num_recommend || number < g_min_cluster_color) { + number = number < g_min_cluster_color ? g_min_cluster_color : m_color_num_recommend; + str = wxString::Format(("%d"), number); + m_color_cluster_num_by_user_ebox->SetValue(str); + m_color_cluster_num_by_user_ebox->SetInsertionPointEnd(); + } + if (m_last_cluster_num != number) { + deal_algo(number, true); + Layout(); + //Fit(); + Refresh(); + Update(); + m_last_cluster_num = number; + } + }); + m_color_cluster_num_by_user_ebox->Bind(wxEVT_CHAR, [this](wxKeyEvent &e) { + int keycode = e.GetKeyCode(); + wxString input_char = wxString::Format("%c", keycode); + long value; + if (!input_char.ToLong(&value)) + return; + e.Skip(); + }); + } + specify_cluster_sizer->AddSpacer(FromDIP(2)); + specify_cluster_sizer->Add(m_color_cluster_num_by_user_ebox, 0, wxALIGN_CENTER | wxALL, 0); + specify_cluster_sizer->AddSpacer(FromDIP(15)); + wxStaticText *recommend_color_cluster_title = new wxStaticText(m_page_simple, wxID_ANY, "(" + std::to_string(m_color_num_recommend) + " " + _L("Recommended ") + ")"); + specify_cluster_sizer->Add(recommend_color_cluster_title, 0, wxALIGN_CENTER | wxALL, 0); + + m_sizer_simple->Add(specify_cluster_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20)); + + wxBoxSizer * current_filaments_title_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticText *current_filaments_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Current filament colors:")); + current_filaments_title->SetFont(Label::Head_14); + current_filaments_title_sizer->Add(current_filaments_title, 0, wxALIGN_CENTER | wxALL, FromDIP(5)); + m_sizer_simple->Add(current_filaments_title_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20)); + + wxBoxSizer * current_filaments_sizer = new wxBoxSizer(wxHORIZONTAL); + current_filaments_sizer->AddSpacer(FromDIP(10)); + for (size_t i = 0; i < m_colours.size(); i++) { + auto extruder_icon_sizer = create_extruder_icon_and_rgba_sizer(m_page_simple, i, m_colours[i]); + current_filaments_sizer->Add(extruder_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + } + m_sizer_simple->Add(current_filaments_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20)); + //colors table + m_scrolledWindow = new wxScrolledWindow(m_page_simple,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxSB_VERTICAL); + m_sizer_simple->Add(m_scrolledWindow, 0, wxEXPAND | wxALL, FromDIP(5)); + draw_table(); + //buttons + wxBoxSizer *quick_set_sizer = new wxBoxSizer(wxHORIZONTAL); + wxStaticText *quick_set_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Quick set:")); + quick_set_title->SetFont(Label::Head_12); + quick_set_sizer->Add(quick_set_title, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + + auto calc_approximate_match_btn_sizer = create_approximate_match_btn_sizer(m_page_simple); + auto calc_add_btn_sizer = create_add_btn_sizer(m_page_simple); + auto calc_reset_btn_sizer = create_reset_btn_sizer(m_page_simple); + quick_set_sizer->Add(calc_add_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + quick_set_sizer->Add(calc_approximate_match_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + quick_set_sizer->Add(calc_reset_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0); + quick_set_sizer->AddSpacer(FromDIP(10)); + m_sizer_simple->Add(quick_set_sizer, 0, wxEXPAND | wxLEFT, FromDIP(30)); + + wxBoxSizer *warning_sizer = new wxBoxSizer(wxHORIZONTAL); + m_warning_text = new wxStaticText(m_page_simple, wxID_ANY, ""); + warning_sizer->Add(m_warning_text, 0, wxALIGN_CENTER | wxALL, 0); + m_sizer_simple->Add(warning_sizer, 0, wxEXPAND | wxLEFT, FromDIP(30)); + + m_sizer_simple->AddSpacer(10); + } + deal_default_strategy(); + //page_simple//page_advanced + m_sizer = new wxBoxSizer(wxVERTICAL); + m_sizer->Add(m_page_simple, 0, wxEXPAND, 0); + + m_sizer->SetSizeHints(this); + SetSizer(m_sizer); + this->Layout(); +} + +void ObjColorPanel::msw_rescale() +{ + for (unsigned int i = 0; i < m_extruder_icon_list.size(); ++i) { + auto bitmap = *get_extruder_color_icon(m_colours[i].GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(i + 1), FromDIP(16), FromDIP(16)); + m_extruder_icon_list[i]->SetBitmap(bitmap); + } + /* for (unsigned int i = 0; i < m_color_cluster_icon_list.size(); ++i) { + auto bitmap = *get_extruder_color_icon(m_cluster_colours[i].GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(i + 1), FromDIP(16), FromDIP(16)); + m_color_cluster_icon_list[i]->SetBitmap(bitmap); + }*/ +} + +bool ObjColorPanel::is_ok() { + for (auto item : m_result_icon_list) { + if (item->bitmap_combox->IsShown()) { + auto selection = item->bitmap_combox->GetSelection(); + if (selection < 1) { + return false; + } + } + } + return true; +} + +void ObjColorPanel::update_filament_ids() +{ + if (m_is_add_filament) { + for (auto c:m_new_add_colors) { + /*auto evt = new ColorEvent(EVT_ADD_CUSTOM_FILAMENT, c); + wxQueueEvent(wxGetApp().plater(), evt);*/ + wxGetApp().sidebar().add_custom_filament(c); + } + } + //deal m_filament_ids + m_filament_ids.clear(); + m_filament_ids.reserve(m_input_colors_size); + for (size_t i = 0; i < m_input_colors_size; i++) { + auto label = m_cluster_labels_from_algo[i]; + m_filament_ids.emplace_back(m_cluster_map_filaments[label]); + } + m_first_extruder_id = m_cluster_map_filaments[0]; +} + +wxBoxSizer *ObjColorPanel::create_approximate_match_btn_sizer(wxWindow *parent) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + StateColor calc_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_bd(std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_text(std::pair(wxColour(255, 255, 254), StateColor::Normal)); + //create btn + m_quick_approximate_match_btn = new Button(parent, _L("Color match")); + m_quick_approximate_match_btn->SetToolTip(_L("Approximate color matching.")); + auto cur_btn = m_quick_approximate_match_btn; + cur_btn->SetFont(Label::Body_13); + cur_btn->SetMinSize(wxSize(FromDIP(60), FromDIP(20))); + cur_btn->SetCornerRadius(FromDIP(10)); + cur_btn->SetBackgroundColor(calc_btn_bg); + cur_btn->SetBorderColor(calc_btn_bd); + cur_btn->SetTextColor(calc_btn_text); + cur_btn->SetFocus(); + btn_sizer->Add(cur_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 0); + cur_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { + deal_approximate_match_btn(); + }); + return btn_sizer; +} + +wxBoxSizer *ObjColorPanel::create_add_btn_sizer(wxWindow *parent) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + StateColor calc_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_bd(std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_text(std::pair(wxColour(255, 255, 254), StateColor::Normal)); + // create btn + m_quick_add_btn = new Button(parent, _L("Append")); + m_quick_add_btn->SetToolTip(_L("Add consumable extruder after existing extruders.")); + auto cur_btn = m_quick_add_btn; + cur_btn->SetFont(Label::Body_13); + cur_btn->SetMinSize(wxSize(FromDIP(60), FromDIP(20))); + cur_btn->SetCornerRadius(FromDIP(10)); + cur_btn->SetBackgroundColor(calc_btn_bg); + cur_btn->SetBorderColor(calc_btn_bd); + cur_btn->SetTextColor(calc_btn_text); + cur_btn->SetFocus(); + btn_sizer->Add(cur_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 0); + cur_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { + deal_add_btn(); + }); + return btn_sizer; +} + +wxBoxSizer *ObjColorPanel::create_reset_btn_sizer(wxWindow *parent) +{ + auto btn_sizer = new wxBoxSizer(wxHORIZONTAL); + StateColor calc_btn_bg(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_bd(std::pair(wxColour(0, 150, 136), StateColor::Normal)); + StateColor calc_btn_text(std::pair(wxColour(255, 255, 254), StateColor::Normal)); + // create btn + m_quick_reset_btn = new Button(parent, _L("Reset")); + m_quick_add_btn->SetToolTip(_L("Reset mapped extruders.")); + auto cur_btn = m_quick_reset_btn; + cur_btn->SetFont(Label::Body_13); + cur_btn->SetMinSize(wxSize(FromDIP(60), FromDIP(20))); + cur_btn->SetCornerRadius(FromDIP(10)); + cur_btn->SetBackgroundColor(calc_btn_bg); + cur_btn->SetBorderColor(calc_btn_bd); + cur_btn->SetTextColor(calc_btn_text); + cur_btn->SetFocus(); + btn_sizer->Add(cur_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, 0); + cur_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { + deal_reset_btn(); + }); + return btn_sizer; +} + +wxBoxSizer *ObjColorPanel::create_extruder_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour &color) +{ + auto icon_sizer = new wxBoxSizer(wxHORIZONTAL); + wxButton *icon = new wxButton(parent, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); + icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16))); + icon->SetCanFocus(false); + m_extruder_icon_list.emplace_back(icon); + icon_sizer->Add(icon, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(10)); // wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM + + icon_sizer->AddSpacer(FromDIP(5)); + return icon_sizer; +} + +std::string ObjColorPanel::get_color_str(const wxColour &color) { + std::string str = ("R:" + std::to_string(color.Red()) + + std::string(" G:") + std::to_string(color.Green()) + + std::string(" B:") + std::to_string(color.Blue()) + + std::string(" A:") + std::to_string(color.Alpha())); + return str; +} + +ComboBox *ObjColorPanel::CreateEditorCtrl(wxWindow *parent, int id) // wxRect labelRect,, const wxVariant &value +{ + std::vector icons = get_extruder_color_icons(); + const double em = Slic3r::GUI::wxGetApp().em_unit(); + bool thin_icon = false; + const int icon_width = lround((thin_icon ? 2 : 4.4) * em); + const int icon_height = lround(2 * em); + m_combox_icon_width = icon_width; + m_combox_icon_height = icon_height; + wxColour undefined_color(0,255,0,255); + icons.insert(icons.begin(), get_extruder_color_icon(undefined_color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(-1), icon_width, icon_height)); + if (icons.empty()) + return nullptr; + + ::ComboBox *c_editor = new ::ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(m_combox_width), -1), 0, nullptr, + wxCB_READONLY | CB_NO_DROP_ICON | CB_NO_TEXT); + c_editor->SetMinSize(wxSize(FromDIP(m_combox_width), -1)); + c_editor->SetMaxSize(wxSize(FromDIP(m_combox_width), -1)); + c_editor->GetDropDown().SetUseContentWidth(true); + for (size_t i = 0; i < icons.size(); i++) { + c_editor->Append(wxString::Format("%d", i), *icons[i]); + if (i == 0) { + c_editor->SetItemTooltip(i,undefined_color.GetAsString(wxC2S_HTML_SYNTAX)); + } else { + c_editor->SetItemTooltip(i, m_colours[i-1].GetAsString(wxC2S_HTML_SYNTAX)); + } + } + c_editor->SetSelection(0); + c_editor->SetName(wxString::Format("%d", id)); + c_editor->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent &evt) { + auto *com_box = static_cast(evt.GetEventObject()); + int i = atoi(com_box->GetName().c_str()); + if (i < m_cluster_map_filaments.size()) { m_cluster_map_filaments[i] = com_box->GetSelection(); } + evt.StopPropagation(); + }); + return c_editor; +} + +void ObjColorPanel::deal_approximate_match_btn() +{ + auto calc_color_distance = [](wxColour c1, wxColour c2) { + float lab[2][3]; + RGB2Lab(c1.Red(), c1.Green(), c1.Blue(), &lab[0][0], &lab[0][1], &lab[0][2]); + RGB2Lab(c2.Red(), c2.Green(), c2.Blue(), &lab[1][0], &lab[1][1], &lab[1][2]); + + return DeltaE76(lab[0][0], lab[0][1], lab[0][2], lab[1][0], lab[1][1], lab[1][2]); + }; + m_warning_text->SetLabelText(""); + if (m_result_icon_list.size() == 0) { return; } + auto map_count = m_result_icon_list[0]->bitmap_combox->GetCount() -1; + if (map_count < 1) { return; } + for (size_t i = 0; i < m_cluster_colours.size(); i++) { + auto c = m_cluster_colours[i]; + std::vector color_dists; + color_dists.resize(map_count); + for (size_t j = 0; j < map_count; j++) { + auto tip_color = m_result_icon_list[0]->bitmap_combox->GetItemTooltip(j+1); + wxColour candidate_c(tip_color); + color_dists[j].distance = calc_color_distance(c, candidate_c); + color_dists[j].id = j + 1; + } + std::sort(color_dists.begin(), color_dists.end(), [](ColorDistValue &a, ColorDistValue& b) { + return a.distance < b.distance; + }); + auto new_index= color_dists[0].id; + m_result_icon_list[i]->bitmap_combox->SetSelection(new_index); + m_cluster_map_filaments[i] = new_index; + } +} + +void ObjColorPanel::show_sizer(wxSizer *sizer, bool show) +{ + wxSizerItemList items = sizer->GetChildren(); + for (wxSizerItemList::iterator it = items.begin(); it != items.end(); ++it) { + wxSizerItem *item = *it; + if (wxWindow *window = item->GetWindow()) { + window->Show(show); + } + if (wxSizer *son_sizer = item->GetSizer()) { + show_sizer(son_sizer, show); + } + } +} + +void ObjColorPanel::redraw_part_table() { + //show all and set -1 + deal_reset_btn(); + for (size_t i = 0; i < m_row_sizer_list.size(); i++) { + show_sizer(m_row_sizer_list[i], true); + } + if (m_cluster_colours.size() < m_row_sizer_list.size()) { // show part + for (size_t i = m_cluster_colours.size(); i < m_row_sizer_list.size(); i++) { + show_sizer(m_row_sizer_list[i], false); + //m_row_panel_list[i]->Show(false); // show_sizer(m_left_color_cluster_boxsizer_list[i],false); + // m_result_icon_list[i]->bitmap_combox->Show(false); + } + } else if (m_cluster_colours.size() > m_row_sizer_list.size()) { + for (size_t i = m_row_sizer_list.size(); i < m_cluster_colours.size(); i++) { + int id = i; + wxPanel *row_panel = new wxPanel(m_scrolledWindow); + row_panel->SetBackgroundColour((i+1) % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238)); + auto row_sizer = new wxGridSizer(1, 2, 1, 3); + row_panel->SetSizer(row_sizer); + + row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + + auto cluster_color_icon_sizer = create_color_icon_and_rgba_sizer(row_panel, id, m_cluster_colours[id]); + row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER)); + // result_combox + create_result_button_sizer(row_panel, id); + row_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, 0); + + m_row_sizer_list.emplace_back(row_sizer); + m_gridsizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER)); + } + m_gridsizer->Layout(); + } + for (size_t i = 0; i < m_cluster_colours.size(); i++) { // update data + // m_color_cluster_icon_list//m_color_cluster_text_list + update_color_icon_and_rgba_sizer(i, m_cluster_colours[i]); + } + m_scrolledWindow->Refresh(); +} + +void ObjColorPanel::draw_table() +{ + auto row = std::max(m_cluster_colours.size(), m_colours.size()) + 1; + m_gridsizer = new wxGridSizer(row, 1, 1, 3); //(int rows, int cols, int vgap, int hgap ); + + m_color_cluster_icon_list.clear(); + m_extruder_icon_list.clear(); + float row_height ; + for (size_t ii = 0; ii < row; ii++) { + wxPanel *row_panel = new wxPanel(m_scrolledWindow); + row_panel->SetBackgroundColour(ii % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238)); + auto row_sizer = new wxGridSizer(1, 2, 1, 5); + row_panel->SetSizer(row_sizer); + + row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1)); + if (ii == 0) { + wxStaticText *colors_left_title = new wxStaticText(row_panel, wxID_ANY, _L("Cluster colors")); + colors_left_title->SetFont(Label::Head_14); + row_sizer->Add(colors_left_title, 0, wxALIGN_CENTER | wxALL, FromDIP(HEADER_BORDER)); + + wxStaticText *colors_middle_title = new wxStaticText(row_panel, wxID_ANY, _L("Map Filament")); + colors_middle_title->SetFont(Label::Head_14); + row_sizer->Add(colors_middle_title, 0, wxALIGN_CENTER | wxALL, FromDIP(HEADER_BORDER)); + } else { + int id = ii - 1; + if (id < m_cluster_colours.size()) { + auto cluster_color_icon_sizer = create_color_icon_and_rgba_sizer(row_panel, id, m_cluster_colours[id]); + row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER)); + // result_combox + create_result_button_sizer(row_panel, id); + row_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER)); + } + } + row_height = row_panel->GetSize().GetHeight(); + if (ii>=1) { + m_row_sizer_list.emplace_back(row_sizer); + } + m_gridsizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER)); + } + m_scrolledWindow->SetSizer(m_gridsizer); + int totalHeight = row_height *(row+1) * 2; + m_scrolledWindow->SetVirtualSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight); + auto look = FIX_SCROLL_HEIGTH; + if (totalHeight > FIX_SCROLL_HEIGTH) { + m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); + m_scrolledWindow->SetMaxSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); + } + else { + m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight)); + } + m_scrolledWindow->EnableScrolling(false, true); + m_scrolledWindow->ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT);//wxSHOW_SB_ALWAYS + m_scrolledWindow->SetScrollRate(20, 20); +} + +void ObjColorPanel::deal_algo(char cluster_number, bool redraw_ui) +{ + if (m_last_cluster_number == cluster_number) { + return; + } + m_last_cluster_number = cluster_number; + QuantKMeans quant(10); + quant.apply(m_input_colors, m_cluster_colors_from_algo, m_cluster_labels_from_algo, (int)cluster_number); + m_cluster_colours.clear(); + m_cluster_colours.reserve(m_cluster_colors_from_algo.size()); + for (size_t i = 0; i < m_cluster_colors_from_algo.size(); i++) { + m_cluster_colours.emplace_back(convert_to_wxColour(m_cluster_colors_from_algo[i])); + } + if (m_cluster_colours.size() == 0) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ",m_cluster_colours.size() = 0\n"; + return; + } + m_cluster_map_filaments.resize(m_cluster_colors_from_algo.size()); + m_color_cluster_num_by_algo = m_cluster_colors_from_algo.size(); + if (cluster_number == -1) { + m_color_num_recommend = m_color_cluster_num_by_algo; + } + //redraw ui + if (redraw_ui) { + redraw_part_table(); + deal_default_strategy(); + } +} + +void ObjColorPanel::deal_default_strategy() +{ + deal_add_btn(); + deal_approximate_match_btn(); + m_warning_text->SetLabelText(_L("Note:The color has been selected, you can choose OK \n to continue or manually adjust it.")); +} + +void ObjColorPanel::deal_add_btn() +{ + if (m_colours.size() > g_max_color) { return; } + deal_reset_btn(); + std::vector new_icons; + auto new_color_size = m_cluster_colors_from_algo.size(); + new_icons.reserve(new_color_size); + m_new_add_colors.clear(); + m_new_add_colors.reserve(new_color_size); + int new_index = m_colours.size() + 1; + bool is_exceed = false; + for (size_t i = 0; i < new_color_size; i++) { + if (m_colours.size() + new_icons.size() >= g_max_color) { + is_exceed = true; + break; + } + wxColour cur_color = convert_to_wxColour(m_cluster_colors_from_algo[i]); + m_new_add_colors.emplace_back(cur_color); + new_icons.emplace_back(get_extruder_color_icon(cur_color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), + std::to_string(new_index), m_combox_icon_width, m_combox_icon_height)); + new_index++; + } + new_index = m_colours.size() + 1; + for (size_t i = 0; i < m_result_icon_list.size(); i++) { + auto item = m_result_icon_list[i]; + for (size_t k = 0; k < new_icons.size(); k++) { + item->bitmap_combox->Append(wxString::Format("%d", item->bitmap_combox->GetCount()), *new_icons[k]); + item->bitmap_combox->SetItemTooltip(item->bitmap_combox->GetCount() -1,m_new_add_colors[k].GetAsString(wxC2S_HTML_SYNTAX)); + } + item->bitmap_combox->SetSelection(new_index); + m_cluster_map_filaments[i] = new_index; + new_index++; + } + if (is_exceed) { + deal_approximate_match_btn(); + m_warning_text->SetLabelText(_L("Waring:The count of newly added and \n current extruders exceeds 16.")); + } + m_is_add_filament = true; +} + +void ObjColorPanel::deal_reset_btn() +{ + for (auto item : m_result_icon_list) { + // delete redundant bitmap + while (item->bitmap_combox->GetCount() > m_colours.size()+ 1) { + item->bitmap_combox->DeleteOneItem(item->bitmap_combox->GetCount() - 1); + } + item->bitmap_combox->SetSelection(0); + } + m_is_add_filament = false; + m_new_add_colors.clear(); + m_warning_text->SetLabelText(""); +} + +void ObjColorPanel::create_result_button_sizer(wxWindow *parent, int id) +{ + for (size_t i = m_result_icon_list.size(); i < id + 1; i++) { + m_result_icon_list.emplace_back(new ButtonState()); + } + m_result_icon_list[id]->bitmap_combox = CreateEditorCtrl(parent,id); +} + +wxBoxSizer *ObjColorPanel::create_color_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color) +{ + auto icon_sizer = new wxBoxSizer(wxHORIZONTAL); + icon_sizer->AddSpacer(FromDIP(40)); + wxButton *icon = new wxButton(parent, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); + icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16))); + icon->SetCanFocus(false); + m_color_cluster_icon_list.emplace_back(icon); + icon_sizer->Add(icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); // wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM + icon_sizer->AddSpacer(FromDIP(10)); + + std::string message = get_color_str(color); + wxStaticText *rgba_title = new wxStaticText(parent, wxID_ANY, message.c_str()); + m_color_cluster_text_list.emplace_back(rgba_title); + rgba_title->SetMinSize(wxSize(FromDIP(COLOR_LABEL_WIDTH), -1)); + rgba_title->SetMaxSize(wxSize(FromDIP(COLOR_LABEL_WIDTH), -1)); + //rgba_title->SetFont(Label::Head_12); + icon_sizer->Add(rgba_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); + return icon_sizer; +} + +void ObjColorPanel::update_color_icon_and_rgba_sizer(int id, const wxColour &color) +{ + if (id < m_color_cluster_text_list.size()) { + auto icon = m_color_cluster_icon_list[id]; + icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16))); + std::string message = get_color_str(color); + m_color_cluster_text_list[id]->SetLabelText(message.c_str()); + } +} diff --git a/src/slic3r/GUI/ObjColorDialog.hpp b/src/slic3r/GUI/ObjColorDialog.hpp new file mode 100644 index 0000000000..6019035973 --- /dev/null +++ b/src/slic3r/GUI/ObjColorDialog.hpp @@ -0,0 +1,114 @@ +#ifndef _OBJ_COLOR_DIALOG_H_ +#define _OBJ_COLOR_DIALOG_H_ + +#include "GUI_Utils.hpp" +#include "libslic3r/Color.hpp" +#include +#include +#include +#include +#include +#include +class Button; +class Label; +class ComboBox; +struct ColorDistValue +{ + int id; + float distance; +}; +class ObjColorPanel : public wxPanel +{ +public: + // BBS + ObjColorPanel(wxWindow * parent, + std::vector & input_colors,bool is_single_color, + const std::vector & extruder_colours, + std::vector & filament_ids, + unsigned char & first_extruder_id); + void msw_rescale(); + bool is_ok(); + void update_filament_ids(); + struct ButtonState + { + ComboBox* bitmap_combox{nullptr}; + bool is_map{false};//int id{0}; + }; +private: + wxBoxSizer *create_approximate_match_btn_sizer(wxWindow *parent); + wxBoxSizer *create_add_btn_sizer(wxWindow *parent); + wxBoxSizer *create_reset_btn_sizer(wxWindow *parent); + wxBoxSizer *create_extruder_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color); + std::string get_color_str(const wxColour &color); + void create_result_button_sizer(wxWindow *parent, int id); + wxBoxSizer *create_color_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color); + void update_color_icon_and_rgba_sizer(int id, const wxColour &color); + ComboBox* CreateEditorCtrl(wxWindow *parent,int id); + void draw_table(); + void show_sizer(wxSizer *sizer, bool show); + void redraw_part_table(); + void deal_approximate_match_btn(); + void deal_add_btn(); + void deal_reset_btn(); + void deal_algo(char cluster_number,bool redraw_ui =false); + void deal_default_strategy(); +private: + //view ui + wxScrolledWindow * m_scrolledWindow = nullptr; + wxPanel * m_page_simple = nullptr; + wxBoxSizer * m_sizer = nullptr; + wxBoxSizer * m_sizer_simple = nullptr; + wxTextCtrl *m_color_cluster_num_by_user_ebox{nullptr}; + wxStaticText * m_warning_text{nullptr}; + Button * m_quick_approximate_match_btn{nullptr}; + Button * m_quick_add_btn{nullptr}; + Button * m_quick_reset_btn{nullptr}; + std::vector m_extruder_icon_list; + std::vector m_color_cluster_icon_list;//need modeify + std::vector m_color_cluster_text_list;//need modeify + std::vector m_row_sizer_list; // control show or not + std::vector m_result_icon_list; + int m_last_cluster_num{-1}; + const int m_combox_width{50}; + int m_combox_icon_width; + int m_combox_icon_height; + wxGridSizer* m_gridsizer = nullptr; + wxStaticText * m_test = nullptr; + //data + char m_last_cluster_number{-2}; + std::vector& m_input_colors; + int m_color_num_recommend{0}; + int m_color_cluster_num_by_algo{0}; + int m_input_colors_size{0}; + std::vector m_colours;//from project and show right + std::vector m_cluster_map_filaments;//show middle + std::vector m_cluster_colours;//from_algo and show left + bool m_can_add_filament{true}; + std::vector m_new_add_colors; + //algo result + std::vector m_cluster_colors_from_algo; + std::vector m_cluster_labels_from_algo; + //result + bool m_is_add_filament{false}; + unsigned char& m_first_extruder_id; + std::vector &m_filament_ids; +}; + +class ObjColorDialog : public Slic3r::GUI::DPIDialog +{ +public: + ObjColorDialog(wxWindow * parent, + std::vector& input_colors, bool is_single_color, + const std::vector & extruder_colours, + std::vector& filament_ids, + unsigned char & first_extruder_id); + wxBoxSizer* create_btn_sizer(long flags); + void on_dpi_changed(const wxRect &suggested_rect) override; +private: + ObjColorPanel* m_panel_ObjColor = nullptr; + std::unordered_map m_button_list; + std::vector& m_filament_ids; + unsigned char & m_first_extruder_id; +}; + +#endif // _WIPE_TOWER_DIALOG_H_ \ No newline at end of file diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 110d91d9ce..c45db1c87e 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -532,9 +532,6 @@ bool OptionsGroup::activate(std::function throw_if_canceled/* = [](){}*/ return true; } - -void free_window(wxWindow *win); - // delete all controls from the option group void OptionsGroup::clear(bool destroy_custom_ctrl) { @@ -563,10 +560,8 @@ void OptionsGroup::clear(bool destroy_custom_ctrl) if (custom_ctrl) { for (auto const &item : m_fields) { wxWindow* win = item.second.get()->getWindow(); - if (win) { - free_window(win); + if (win) win = nullptr; - } } //BBS: custom_ctrl already destroyed from sizer->clear(), no need to destroy here anymore if (destroy_custom_ctrl) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 119e3394ef..df761f00ee 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1580,14 +1580,7 @@ std::vector PartPlate::get_used_extruders() std::set used_extruders_set; PrintEstimatedStatistics& ps = result->print_statistics; - // model usage - for (const auto&item:ps.volumes_per_extruder) - used_extruders_set.emplace(item.first + 1); - // support usage - for (const auto&item:ps.support_volumes_per_extruder) - used_extruders_set.emplace(item.first + 1); - // wipe tower usage - for (const auto&item:ps.wipe_tower_volumes_per_extruder) + for (const auto& item : ps.total_volumes_per_extruder) used_extruders_set.emplace(item.first + 1); return std::vector(used_extruders_set.begin(), used_extruders_set.end()); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 384c6f0b74..cdeae514fc 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -116,6 +116,7 @@ #include "Jobs/BoostThreadWorker.hpp" #include "BackgroundSlicingProcess.hpp" #include "SelectMachine.hpp" +#include "SendMultiMachinePage.hpp" #include "SendToPrinter.hpp" #include "PublishDialog.hpp" #include "ModelMall.hpp" @@ -156,6 +157,7 @@ #include #include // Needs to be last because reasons :-/ #include "WipeTowerDialog.hpp" +#include "ObjColorDialog.hpp" #include "libslic3r/CustomGCode.hpp" #include "libslic3r/Platform.hpp" @@ -209,7 +211,9 @@ wxDEFINE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent); wxDEFINE_EVENT(EVT_CREATE_FILAMENT, SimpleEvent); wxDEFINE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent); - +wxDEFINE_EVENT(EVT_ADD_FILAMENT, SimpleEvent); +wxDEFINE_EVENT(EVT_DEL_FILAMENT, SimpleEvent); +wxDEFINE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); bool Plater::has_illegal_filename_characters(const wxString& wxs_name) { std::string name = into_u8(wxs_name); @@ -431,7 +435,7 @@ void Sidebar::priv::show_preset_comboboxes() void Sidebar::priv::on_search_update() { m_object_list->assembly_plate_object_name(); - + wxString search_text = m_search_bar->GetValue(); m_object_list->GetModel()->search_object(search_text); dia->update_list(); @@ -491,37 +495,63 @@ void Sidebar::priv::hide_rich_tip(wxButton* btn) } #endif -std::vector get_min_flush_volumes() +std::vector get_min_flush_volumes(const DynamicPrintConfig& full_config) { std::vectorextra_flush_volumes; - const auto& full_config = wxGetApp().preset_bundle->full_config(); - auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; + //const auto& full_config = wxGetApp().preset_bundle->full_config(); + //auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; - ConfigOption* nozzle_volume_opt = printer_config.option("nozzle_volume"); + const ConfigOption* nozzle_volume_opt = full_config.option("nozzle_volume"); int nozzle_volume_val = nozzle_volume_opt ? (int)nozzle_volume_opt->getFloat() : 0; - int machine_enabled_level = printer_config.option("enable_long_retraction_when_cut")->value; - bool machine_activated = printer_config.option("long_retractions_when_cut")->values[0] == 1; + const ConfigOptionInt* enable_long_retraction_when_cut_opt = full_config.option("enable_long_retraction_when_cut"); + int machine_enabled_level = 0; + if (enable_long_retraction_when_cut_opt) { + machine_enabled_level = enable_long_retraction_when_cut_opt->value; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get enable_long_retraction_when_cut from config, value=%1%")%machine_enabled_level; + } + const ConfigOptionBools* long_retractions_when_cut_opt = full_config.option("long_retractions_when_cut"); + bool machine_activated = false; + if (long_retractions_when_cut_opt) { + machine_activated = long_retractions_when_cut_opt->values[0] == 1; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get long_retractions_when_cut from config, value=%1%, activated=%2%")%long_retractions_when_cut_opt->values[0] %machine_activated; + } - auto filament_retraction_distance_when_cut = full_config.option("filament_retraction_distances_when_cut"); - auto printer_retraction_distance_when_cut = full_config.option("retraction_distances_when_cut"); - auto filament_long_retractions_when_cut = full_config.option("filament_long_retractions_when_cut"); + size_t filament_size = full_config.option("filament_diameter")->values.size(); + std::vector filament_retraction_distance_when_cut(filament_size, 18.0f), printer_retraction_distance_when_cut(filament_size, 18.0f); + std::vector filament_long_retractions_when_cut(filament_size, 0); + const ConfigOptionFloats* filament_retraction_distances_when_cut_opt = full_config.option("filament_retraction_distances_when_cut"); + if (filament_retraction_distances_when_cut_opt) { + filament_retraction_distance_when_cut = filament_retraction_distances_when_cut_opt->values; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get filament_retraction_distance_when_cut from config, size=%1%, values=%2%")%filament_retraction_distance_when_cut.size() %filament_retraction_distances_when_cut_opt->serialize(); + } + + const ConfigOptionFloats* printer_retraction_distance_when_cut_opt = full_config.option("retraction_distances_when_cut"); + if (printer_retraction_distance_when_cut_opt) { + printer_retraction_distance_when_cut = printer_retraction_distance_when_cut_opt->values; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get retraction_distances_when_cut from config, size=%1%, values=%2%")%printer_retraction_distance_when_cut.size() %printer_retraction_distance_when_cut_opt->serialize(); + } + + const ConfigOptionBools* filament_long_retractions_when_cut_opt = full_config.option("filament_long_retractions_when_cut"); + if (filament_long_retractions_when_cut_opt) { + filament_long_retractions_when_cut = filament_long_retractions_when_cut_opt->values; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": get filament_long_retractions_when_cut from config, size=%1%, values=%2%")%filament_long_retractions_when_cut.size() %filament_long_retractions_when_cut_opt->serialize(); + } - size_t filament_size = filament_retraction_distance_when_cut->values.size(); for (size_t idx = 0; idx < filament_size; ++idx) { int extra_flush_volume = nozzle_volume_val; - int retract_length = machine_enabled_level && machine_activated ? printer_retraction_distance_when_cut->values[0] : 0; + int retract_length = machine_enabled_level && machine_activated ? printer_retraction_distance_when_cut[0] : 0; - char filament_activated = filament_long_retractions_when_cut->values[idx]; - double filament_retract_length = filament_retraction_distance_when_cut->values[idx]; + unsigned char filament_activated = filament_long_retractions_when_cut[idx]; + double filament_retract_length = filament_retraction_distance_when_cut[idx]; if (filament_activated == 0) retract_length = 0; else if (filament_activated == 1 && machine_enabled_level == LongRectrationLevel::EnableFilament) { if (!std::isnan(filament_retract_length)) - retract_length = (int)filament_retraction_distance_when_cut->values[idx]; + retract_length = (int)filament_retraction_distance_when_cut[idx]; else - retract_length = printer_retraction_distance_when_cut->values[0]; + retract_length = printer_retraction_distance_when_cut[0]; } extra_flush_volume -= PI * 1.75 * 1.75 / 4 * retract_length; @@ -849,7 +879,8 @@ Sidebar::Sidebar(Plater *parent) float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f; const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); - const auto& extra_flush_volumes = get_min_flush_volumes(); + const auto& full_config = wxGetApp().preset_bundle->full_config(); + const auto& extra_flush_volumes = get_min_flush_volumes(full_config); WipingDialog dlg(parent, cast(init_matrix), cast(init_extruders), extruder_colours, extra_flush_volumes, flush_multiplier); if (dlg.ShowModal() == wxID_OK) { std::vector matrix = dlg.get_matrix(); @@ -1169,9 +1200,7 @@ void Sidebar::update_all_preset_comboboxes() bool is_bbl_vendor = preset_bundle.is_bbl_vendor(); const bool use_bbl_network = preset_bundle.use_bbl_network(); - // Orca:: show device tab based on vendor type auto p_mainframe = wxGetApp().mainframe; - p_mainframe->show_device(use_bbl_network); auto cfg = preset_bundle.printers.get_edited_preset().config; if (use_bbl_network) { @@ -1237,7 +1266,9 @@ void Sidebar::update_all_preset_comboboxes() if (p->combo_printer) p->combo_printer->update(); - p_mainframe->m_tabpanel->SetSelection(p_mainframe->m_tabpanel->GetSelection()); + // Orca:: show device tab based on vendor type + p_mainframe->show_device(use_bbl_network); + p_mainframe->select_tab(MainFrame::tp3DEditor); } void Sidebar::update_presets(Preset::Type preset_type) @@ -1266,7 +1297,7 @@ void Sidebar::update_presets(Preset::Type preset_type) if (preset) { if (preset->is_compatible) preset_bundle.set_filament_preset(0, name); } - + } for (size_t i = 0; i < filament_cnt; i++) @@ -1306,9 +1337,6 @@ void Sidebar::update_presets(Preset::Type preset_type) } Preset& printer_preset = wxGetApp().preset_bundle->printers.get_edited_preset(); - bool isBBL = preset_bundle.use_bbl_network(); - wxGetApp().mainframe->show_calibration_button(!isBBL); - if (auto printer_structure_opt = printer_preset.config.option>("printer_structure")) { wxGetApp().plater()->get_current_canvas3D()->get_arrange_settings().align_to_y_axis = (printer_structure_opt->value == PrinterStructure::psI3); } @@ -1559,6 +1587,43 @@ void Sidebar::on_filaments_change(size_t num_filaments) dynamic_filament_list.update(); } +void Sidebar::add_filament() { + // BBS: limit filament choices to 16 + if (p->combos_filament.size() >= 16) return; + wxColour new_col = Plater::get_next_color_for_filament(); + add_custom_filament(new_col); +} + +void Sidebar::delete_filament() { + if (p->combos_filament.size() <= 1) return; + + size_t filament_count = p->combos_filament.size() - 1; + if (wxGetApp().preset_bundle->is_the_only_edited_filament(filament_count) || (filament_count == 1)) { + wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0], false, "", true); + } + + if (p->editing_filament >= filament_count) { + p->editing_filament = -1; + } + + wxGetApp().preset_bundle->set_num_filaments(filament_count); + wxGetApp().plater()->on_filaments_change(filament_count); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); +} + +void Sidebar::add_custom_filament(wxColour new_col) { + if (p->combos_filament.size() >= 16) return; + + int filament_count = p->combos_filament.size() + 1; + std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); + wxGetApp().preset_bundle->set_num_filaments(filament_count, new_color); + wxGetApp().plater()->on_filaments_change(filament_count); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); + wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); + auto_calc_flushing_volumes(filament_count - 1); +} + void Sidebar::on_bed_type_change(BedType bed_type) { // btDefault option is not included in global bed type setting @@ -1894,13 +1959,14 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) auto& preset_bundle = wxGetApp().preset_bundle; auto& project_config = preset_bundle->project_config; auto& printer_config = preset_bundle->printers.get_edited_preset().config; + const auto& full_config = wxGetApp().preset_bundle->full_config(); auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment; auto& ams_filament_list = preset_bundle->filament_ams_list; const std::vector& init_matrix = (project_config.option("flush_volumes_matrix"))->values; const std::vector& init_extruders = (project_config.option("flush_volumes_vector"))->values; - const std::vector& min_flush_volumes= get_min_flush_volumes(); + const std::vector& min_flush_volumes= get_min_flush_volumes(full_config); ConfigOptionFloat* flush_multi_opt = project_config.option("flush_multiplier"); float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f; @@ -2077,6 +2143,7 @@ struct Plater::priv MenuFactory menus; SelectMachineDialog* m_select_machine_dlg = nullptr; + SendMultiMachinePage* m_send_multi_dlg = nullptr; SendToPrinterDialog* m_send_to_sdcard_dlg = nullptr; PublishDialog *m_publish_dlg = nullptr; @@ -2424,6 +2491,9 @@ struct Plater::priv void on_action_layersediting(SimpleEvent&); void on_create_filament(SimpleEvent &); void on_modify_filament(SimpleEvent &); + void on_add_filament(SimpleEvent &); + void on_delete_filament(SimpleEvent &); + void on_add_custom_filament(ColorEvent &); void on_object_select(SimpleEvent&); void show_right_click_menu(Vec2d mouse_position, wxMenu *menu); @@ -2540,6 +2610,7 @@ struct Plater::priv //BBS: add popup object table logic bool PopupObjectTable(int object_id, int volume_id, const wxPoint& position); void on_action_send_to_printer(bool isall = false); + void on_action_send_to_multi_machine(SimpleEvent&); int update_print_required_data(Slic3r::DynamicPrintConfig config, Slic3r::Model model, Slic3r::PlateDataPtrs plate_data_list, std::string file_name, std::string file_path); private: bool layers_height_allowed() const; @@ -2580,7 +2651,6 @@ private: //record print preset void record_start_print_preset(std::string action); - }; const std::regex Plater::priv::pattern_bundle(".*[.](amf|amf[.]xml|zip[.]amf|3mf)", std::regex::icase); @@ -2698,7 +2768,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) this->q->Bind(wxEVT_SYS_COLOUR_CHANGED, &priv::on_apple_change_color_mode, this); this->q->Bind(EVT_CREATE_FILAMENT, &priv::on_create_filament, this); this->q->Bind(EVT_MODIFY_FILAMENT, &priv::on_modify_filament, this); - + this->q->Bind(EVT_ADD_CUSTOM_FILAMENT, &priv::on_add_custom_filament, this); main_frame->m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, &priv::on_tab_selection_changing, this); auto* panel_3d = new wxPanel(q); @@ -2969,6 +3039,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) q->Bind(EVT_GLTOOLBAR_EXPORT_ALL_SLICED_FILE, &priv::on_action_export_all_sliced_file, this); q->Bind(EVT_GLTOOLBAR_SEND_TO_PRINTER, &priv::on_action_export_to_sdcard, this); q->Bind(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, &priv::on_action_export_to_sdcard_all, this); + q->Bind(EVT_GLTOOLBAR_PRINT_MULTI_MACHINE, &priv::on_action_send_to_multi_machine, this); q->Bind(EVT_GLCANVAS_PLATE_SELECT, &priv::on_plate_selected, this); q->Bind(EVT_DOWNLOAD_PROJECT, &priv::on_action_download_project, this); q->Bind(EVT_IMPORT_MODEL_ID, &priv::on_action_request_model_id, this); @@ -3092,7 +3163,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) //wxPostEvent(this->q, wxCommandEvent{EVT_RESTORE_PROJECT}); } - /*this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) { + this->q->Bind(EVT_LOAD_MODEL_OTHER_INSTANCE, [this](LoadFromOtherInstanceEvent& evt) { BOOST_LOG_TRIVIAL(trace) << "Received load from other instance event."; wxArrayString input_files; for (size_t i = 0; i < evt.data.size(); ++i) { @@ -3103,8 +3174,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) }); this->q->Bind(EVT_INSTANCE_GO_TO_FRONT, [this](InstanceGoToFrontEvent &) { bring_instance_forward(); - });*/ - //wxGetApp().other_instance_message_handler()->init(this->q); + }); + wxGetApp().other_instance_message_handler()->init(this->q); // collapse sidebar according to saved value //if (wxGetApp().is_editor()) { @@ -3941,7 +4012,17 @@ std::vector Plater::priv::load_files(const std::vector& input_ std::vector project_presets; bool is_xxx; Semver file_version; - + + //ObjImportColorFn obj_color_fun=nullptr; + auto obj_color_fun = [this, &path](std::vector &input_colors, bool is_single_color, std::vector &filament_ids, + unsigned char &first_extruder_id) { + if (!boost::iends_with(path.string(), ".obj")) { return; } + const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); + ObjColorDialog color_dlg(nullptr, input_colors, is_single_color, extruder_colours, filament_ids, first_extruder_id); + if (color_dlg.ShowModal() != wxID_OK) { + filament_ids.clear(); + } + }; model = Slic3r::Model::read_from_file( path.string(), nullptr, nullptr, strategy, &plate_data, &project_presets, &is_xxx, &file_version, nullptr, [this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) @@ -3971,7 +4052,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (!isUtf8StepFile) Slic3r::GUI::show_info(nullptr, _L("Name of components inside step file is not UTF8 format!") + "\n\n" + _L("The name may show garbage characters!"), _L("Attention!")); - }); + }, + nullptr, 0, obj_color_fun); if (designer_model_id.empty() && boost::algorithm::iends_with(path.string(), ".stl")) { @@ -6019,10 +6101,12 @@ void Plater::priv::set_current_panel(wxPanel* panel, bool no_slice) preview->set_as_dirty(); }; - //BBS: add the collapse logic + // Add sidebar and toolbar collapse logic + if (panel == view3D || panel == preview) { + this->enable_sidebar(!q->only_gcode_mode()); + } if (panel == preview) { if (q->only_gcode_mode()) { - this->sidebar->collapse(true); preview->get_canvas3d()->enable_select_plate_toolbar(false); } else if (q->using_exported_file() && (q->m_valid_plates_count <= 1)) { preview->get_canvas3d()->enable_select_plate_toolbar(false); @@ -6957,6 +7041,14 @@ void Plater::priv::on_action_print_plate(SimpleEvent&) record_start_print_preset("print_plate"); } +void Plater::priv::on_action_send_to_multi_machine(SimpleEvent&) +{ + if (!m_send_multi_dlg) + m_send_multi_dlg = new SendMultiMachinePage(q); + m_send_multi_dlg->prepare(partplate_list.get_curr_plate_index()); + m_send_multi_dlg->ShowModal(); +} + void Plater::priv::on_action_print_plate_from_sdcard(SimpleEvent&) { if (q != nullptr) { @@ -6989,7 +7081,7 @@ void Plater::priv::on_tab_selection_changing(wxBookCtrlEvent& e) if (new_sel == MainFrame::tpMonitor && wxGetApp().preset_bundle != nullptr) { auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui"); - if (url.empty()) { + if (main_frame->m_printer_view && url.empty()) { // It's missing_connection page, reload so that we can replay the gif image main_frame->m_printer_view->reload(); } @@ -7016,6 +7108,7 @@ void Plater::priv::on_action_send_to_printer(bool isall) m_send_to_sdcard_dlg->ShowModal(); } + void Plater::priv::on_action_select_sliced_plate(wxCommandEvent &evt) { if (q != nullptr) { @@ -7086,7 +7179,6 @@ void Plater::priv::on_action_export_to_sdcard_all(SimpleEvent&) } } - //BBS: add plate select logic void Plater::priv::on_plate_selected(SimpleEvent&) { @@ -7500,10 +7592,11 @@ void Plater::priv::set_project_name(const wxString& project_name) BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " project is:" << project_name; m_project_name = project_name; //update topbar title - wxGetApp().mainframe->SetTitle(m_project_name); #ifdef __WINDOWS__ + wxGetApp().mainframe->SetTitle(m_project_name + " - OrcaSlicer"); wxGetApp().mainframe->topbar()->SetTitle(m_project_name); #else + wxGetApp().mainframe->SetTitle(m_project_name); if (!m_project_name.IsEmpty()) wxGetApp().mainframe->update_title_colour_after_set_title(); #endif @@ -8068,6 +8161,19 @@ void Plater::priv::on_modify_filament(SimpleEvent &evt) } +void Plater::priv::on_add_filament(SimpleEvent &evt) { + sidebar->add_filament(); +} + +void Plater::priv::on_delete_filament(SimpleEvent &evt) { + sidebar->delete_filament(); +} + +void Plater::priv::on_add_custom_filament(ColorEvent &evt) +{ + sidebar->add_custom_filament(evt.data); +} + void Plater::priv::enter_gizmos_stack() { assert(m_undo_redo_stack_active == &m_undo_redo_stack_main); @@ -8407,10 +8513,10 @@ void Plater::priv::update_after_undo_redo(const UndoRedo::Snapshot& snapshot, bo void Plater::priv::bring_instance_forward() const { -/*#ifdef __APPLE__ +#ifdef __APPLE__ wxGetApp().other_instance_message_handler()->bring_instance_forward(); return; -#endif //__APPLE__*/ +#endif //__APPLE__ if (main_frame == nullptr) { BOOST_LOG_TRIVIAL(debug) << "Couldnt bring instance forward - mainframe is null"; return; @@ -8517,6 +8623,7 @@ Plater::Plater(wxWindow *parent, MainFrame *main_frame) { // Initialization performed in the private c-tor enable_wireframe(true); + m_only_gcode = false; } bool Plater::Show(bool show) @@ -8624,7 +8731,7 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_ void Plater::load_project(wxString const& filename2, wxString const& originfile) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "filename is: " << filename2 << "and originfile is: " << originfile; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "filename is: " << filename2 << "and originfile is: " << originfile; BOOST_LOG_TRIVIAL(info) << __FUNCTION__; auto filename = filename2; auto check = [&filename, this] (bool yes_or_no) { @@ -8698,13 +8805,13 @@ void Plater::load_project(wxString const& filename2, if (load_restore && originfile.IsEmpty()) { p->set_project_name(_L("Untitled")); } - + } else { if (using_exported_file()) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " using ecported set project filename: " << filename; p->set_project_filename(filename); } - + } // BBS set default 3D view and direction after loading project @@ -8865,6 +8972,14 @@ void Plater::import_model_id(wxString download_info) { vecFiles.clear(); wxString extension = fs::path(filename.wx_str()).extension().c_str(); + + + //check file suffix + if (!extension.Contains(".3mf")) { + msg = _L("Download failed, unknown file format."); + return; + } + auto name = filename.substr(0, filename.length() - extension.length() - 1); for (const auto& iter : boost::filesystem::directory_iterator(target_path)) @@ -8912,17 +9027,35 @@ void Plater::import_model_id(wxString download_info) fs::path tmp_path = target_path; tmp_path += format(".%1%", ".download"); - + auto filesize = 0; + bool size_limit = false; auto http = Http::get(download_url.ToStdString()); while (cont && retry_count < max_retries) { retry_count++; - http.on_progress([&percent, &cont, &msg](Http::Progress progress, bool& cancel) { + http.on_progress([&percent, &cont, &msg, &filesize, &size_limit](Http::Progress progress, bool& cancel) { + if (!cont) cancel = true; if (progress.dltotal != 0) { + + if (filesize == 0) { + filesize = progress.dltotal; + double megabytes = static_cast(progress.dltotal) / (1024 * 1024); + //The maximum size of a 3mf file is 500mb + if (megabytes > 500) { + cont = false; + size_limit = true; + } + } percent = progress.dlnow * 100 / progress.dltotal; } - msg = wxString::Format(_L("Project downloaded %d%%"), percent); + + if (size_limit) { + msg = _L("Download failed, File size exception."); + } + else { + msg = wxString::Format(_L("Project downloaded %d%%"), percent); + } }) .on_error([&msg, &cont, &retry_count, max_retries](std::string body, std::string error, unsigned http_status) { (void)body; @@ -8932,7 +9065,7 @@ void Plater::import_model_id(wxString download_info) error); if (retry_count == max_retries) { - msg = _L("Importing to Orca Slicer failed. Please download the file and manually import it."); + msg = _L("Importing to Bambu Studio failed. Please download the file and manually import it."); cont = false; } }) @@ -8981,7 +9114,7 @@ void Plater::import_model_id(wxString download_info) } // show save new project - p->set_project_filename(filename); + p->set_project_filename(target_path.wstring()); p->notification_manager->push_import_finished_notification(target_path.string(), target_path.parent_path().string(), false); } else { @@ -8993,7 +9126,6 @@ void Plater::import_model_id(wxString download_info) return; } } - //BBS download project by project id void Plater::download_project(const wxString& project_id) { @@ -9401,6 +9533,8 @@ void Plater::calib_flowrate(int pass) { _obj->config.set_key_value("top_surface_pattern", new ConfigOptionEnum(ipMonotonic)); _obj->config.set_key_value("top_solid_infill_flow_ratio", new ConfigOptionFloat(1.0f)); _obj->config.set_key_value("infill_direction", new ConfigOptionFloat(45)); + _obj->config.set_key_value("solid_infill_direction", new ConfigOptionFloat(135)); + _obj->config.set_key_value("rotate_solid_infill_direction", new ConfigOptionBool(true)); _obj->config.set_key_value("ironing_type", new ConfigOptionEnum(IroningType::NoIroning)); _obj->config.set_key_value("internal_solid_infill_speed", new ConfigOptionFloat(internal_solid_speed)); _obj->config.set_key_value("top_surface_speed", new ConfigOptionFloat(top_surface_speed)); @@ -9727,14 +9861,12 @@ void Plater::load_gcode(const wxString& filename) //BBS: add cost info when drag in gcode auto& ps = current_result->print_statistics; double total_cost = 0.0; - for (auto& volumes_map : { ps.volumes_per_extruder,ps.flush_per_filament ,ps.wipe_tower_volumes_per_extruder }) { - for (auto volume : volumes_map) { - size_t extruder_id = volume.first; - double density = current_result->filament_densities.at(extruder_id); - double cost = current_result->filament_costs.at(extruder_id); - double weight = volume.second * density * 0.001; - total_cost += weight * cost * 0.001; - } + for (auto volume : ps.total_volumes_per_extruder) { + size_t extruder_id = volume.first; + double density = current_result->filament_densities.at(extruder_id); + double cost = current_result->filament_costs.at(extruder_id); + double weight = volume.second * density * 0.001; + total_cost += weight * cost * 0.001; } current_print.print_statistics().total_cost = total_cost; @@ -9753,7 +9885,7 @@ void Plater::load_gcode(const wxString& filename) } else { set_project_filename(filename); } - + } void Plater::reload_gcode_from_disk() @@ -10312,21 +10444,23 @@ bool Plater::open_3mf_file(const fs::path &file_path) } LoadType load_type = LoadType::Unknown; - - bool show_drop_project_dialog = true; - if (show_drop_project_dialog) { - ProjectDropDialog dlg(filename); - if (dlg.ShowModal() == wxID_OK) { - int choice = dlg.get_action(); - load_type = static_cast(choice); - wxGetApp().app_config->set("import_project_action", std::to_string(choice)); + if (!model().objects.empty()) { + bool show_drop_project_dialog = true; + if (show_drop_project_dialog) { + ProjectDropDialog dlg(filename); + if (dlg.ShowModal() == wxID_OK) { + int choice = dlg.get_action(); + load_type = static_cast(choice); + wxGetApp().app_config->set("import_project_action", std::to_string(choice)); - // BBS: jump to plater panel - wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor); - } + // BBS: jump to plater panel + wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor); + } + } else + load_type = static_cast( + std::clamp(std::stoi(wxGetApp().app_config->get("import_project_action")), static_cast(LoadType::OpenProject), static_cast(LoadType::LoadConfig))); } else - load_type = static_cast( - std::clamp(std::stoi(wxGetApp().app_config->get("import_project_action")), static_cast(LoadType::OpenProject), static_cast(LoadType::LoadConfig))); + load_type = LoadType::OpenProject; if (load_type == LoadType::Unknown) return false; @@ -11513,6 +11647,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy // get type and color for platedata auto* filament_color = dynamic_cast(cfg.option("filament_colour")); auto* nozzle_diameter_option = dynamic_cast(cfg.option("nozzle_diameter")); + auto* filament_id_opt = dynamic_cast(cfg.option("filament_ids")); std::string nozzle_diameter_str; if (nozzle_diameter_option) nozzle_diameter_str = nozzle_diameter_option->serialize(); @@ -11526,6 +11661,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { std::string display_filament_type; it->type = cfg.get_filament_type(display_filament_type, it->id); + it->filament_id = filament_id_opt ? filament_id_opt->get_at(it->id) : ""; it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; // save filament info used in curr plate int index = p->partplate_list.get_curr_plate_index(); diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index acc896b07c..a2fa773129 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -117,7 +117,10 @@ wxDECLARE_EVENT(EVT_GLCANVAS_COLOR_MODE_CHANGED, SimpleEvent); wxDECLARE_EVENT(EVT_PRINT_FROM_SDCARD_VIEW, SimpleEvent); wxDECLARE_EVENT(EVT_CREATE_FILAMENT, SimpleEvent); wxDECLARE_EVENT(EVT_MODIFY_FILAMENT, SimpleEvent); - +wxDECLARE_EVENT(EVT_ADD_FILAMENT, SimpleEvent); +wxDECLARE_EVENT(EVT_DEL_FILAMENT, SimpleEvent); +using ColorEvent = Event; +wxDECLARE_EVENT(EVT_ADD_CUSTOM_FILAMENT, ColorEvent); const wxString DEFAULT_PROJECT_NAME = "Untitled"; class Sidebar : public wxPanel @@ -153,6 +156,9 @@ public: void jump_to_option(const std::string& opt_key, Preset::Type type, const std::wstring& category); // BBS. Add on_filaments_change() method. void on_filaments_change(size_t num_filaments); + void add_filament(); + void delete_filament(); + void add_custom_filament(wxColour new_col); // BBS void on_bed_type_change(BedType bed_type); void load_ams_list(std::string const & device, MachineObject* obj); @@ -827,7 +833,7 @@ private: bool m_was_scheduled; }; -std::vector get_min_flush_volumes(); +std::vector get_min_flush_volumes(const DynamicPrintConfig& full_config); } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 05848d6ea7..298ed85ed7 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -1021,6 +1021,14 @@ wxWindow* PreferencesDialog::create_general_page() std::vector Units = {_L("Metric") + " (mm, g)", _L("Imperial") + " (in, oz)"}; auto item_currency = create_item_combobox(_L("Units"), page, _L("Units"), "use_inches", Units); + auto item_single_instance = create_item_checkbox(_L("Allow only one OrcaSlicer instance"), page, + #if __APPLE__ + _L("On OSX there is always only one instance of app running by default. However it is allowed to run multiple instances " + "of same app from the command line. In such case this settings will allow only one instance."), + #else + _L("If this is enabled, when starting OrcaSlicer and another instance of the same OrcaSlicer is already running, that instance will be reactivated instead."), + #endif + 50, "single_instance"); std::vector DefaultPage = {_L("Home"), _L("Prepare")}; auto item_default_page = create_item_combobox(_L("Default Page"), page, _L("Set the page opened on startup."), "default_page", DefaultPage); @@ -1038,6 +1046,7 @@ wxWindow* PreferencesDialog::create_general_page() auto item_calc_mode = create_item_checkbox(_L("Flushing volumes: Auto-calculate everytime the color changed."), page, _L("If enabled, auto-calculate everytime the color changed."), 50, "auto_calculate"); auto item_calc_in_long_retract = create_item_checkbox(_L("Flushing volumes: Auto-calculate every time when the filament is changed."), page, _L("If enabled, auto-calculate every time when filament is changed"), 50, "auto_calculate_when_filament_change"); auto item_remember_printer_config = create_item_checkbox(_L("Remember printer configuration"), page, _L("If enabled, Orca will remember and switch filament/process configuration for each printer automatically."), 50, "remember_printer_config"); + auto item_multi_machine = create_item_checkbox(_L("Multi-device Management(Take effect after restarting Studio)."), page, _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), 50, "enable_multi_machine"); auto title_presets = create_item_title(_L("Presets"), page, _L("Presets")); auto title_network = create_item_title(_L("Network"), page, _L("Network")); auto item_user_sync = create_item_checkbox(_L("Auto sync user presets(Printer/Filament/Process)"), page, _L("User Sync"), 50, "sync_user_preset"); @@ -1096,12 +1105,14 @@ wxWindow* PreferencesDialog::create_general_page() sizer_page->Add(item_currency, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_default_page, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_camera_navigation_style, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_single_instance, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_mouse_zoom_settings, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_use_free_camera_settings, 0, wxTOP, FromDIP(3)); sizer_page->Add(reverse_mouse_zoom, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_show_splash_screen, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_hints, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_calc_in_long_retract, 0, wxTOP, FromDIP(3)); + sizer_page->Add(item_multi_machine, 0, wxTOP, FromDIP(3)); sizer_page->Add(title_presets, 0, wxTOP | wxEXPAND, FromDIP(20)); sizer_page->Add(item_calc_mode, 0, wxTOP, FromDIP(3)); sizer_page->Add(item_user_sync, 0, wxTOP, FromDIP(3)); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 4b53c0e359..e634c4fe1a 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -36,7 +36,9 @@ #include "../Utils/ASCIIFolding.hpp" #include "../Utils/FixModelByWin10.hpp" #include "../Utils/UndoRedo.hpp" +#include "../Utils/ColorSpaceConvert.hpp" #include "BitmapCache.hpp" +#include "SavePresetDialog.hpp" #include "MsgDialog.hpp" #include "ParamsDialog.hpp" @@ -625,37 +627,6 @@ bool PresetComboBox::selection_is_changed_according_to_physical_printers() return true; } -void PlaterPresetComboBox::save_custom_color_to_config(const std::vector& colors) -{ - auto set_colors = [](std::map &data, const std::vector &colors) { - for (size_t i = 0; i < colors.size(); i++) { - data[std::to_string(10 + i)] = colors[i]; //for map sort:10 begin - } - }; - if (colors.size() > 0) { - if (!wxGetApp().app_config->has_section("custom_color_list")) { - std::map data; - set_colors(data,colors); - wxGetApp().app_config->set_section("custom_color_list", data); - } else { - auto data = wxGetApp().app_config->get_section("custom_color_list"); - auto data_modify = const_cast *>(&data); - set_colors(*data_modify, colors); - wxGetApp().app_config->set_section("custom_color_list", *data_modify); - } - } -} - -std::vector PlaterPresetComboBox::get_custom_color_from_config() { - std::vector colors; - if (wxGetApp().app_config->has_section("custom_color_list")) { - auto data = wxGetApp().app_config->get_section("custom_color_list"); - for (auto iter : data) { - colors.push_back(iter.second); - } - } - return colors; -} // --------------------------------- // *** PlaterPresetComboBox *** // --------------------------------- @@ -704,21 +675,9 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset m_clrData.SetColour(clr_picker->GetBackgroundColour()); m_clrData.SetChooseFull(true); m_clrData.SetChooseAlpha(false); - auto color_to_string = [](const wxColour& color) { - std::string str = std::to_string(color.Red()) + "," + std::to_string(color.Green()) + "," + std::to_string(color.Blue()) + "," + std::to_string(color.Alpha()); - return str; - }; - auto string_to_wxColor = [](const std::string& str) { - wxColour color; - std::vector result; - boost::split(result, str, boost::is_any_of(",")); - if (result.size() == 4) { - color = wxColour(std::stoi(result[0]), std::stoi(result[1]), std::stoi(result[2]), std::stoi(result[3])); - } - return color; - }; - std::vector colors=get_custom_color_from_config(); - for (int i = 0; i < colors.size(); i++) { + + std::vector colors = wxGetApp().app_config->get_custom_color_from_config(); + for (int i = 0; i < colors.size(); i++) { m_clrData.SetCustomColour(i, string_to_wxColor(colors[i])); } wxColourDialog dialog(this, &m_clrData); @@ -726,13 +685,13 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset if ( dialog.ShowModal() == wxID_OK ) { m_clrData = dialog.GetColourData(); - const int custom_color_count = 15; - if (colors.size() != custom_color_count) { - colors.resize(custom_color_count); } - for (int i = 0; i < custom_color_count; i++) { + if (colors.size() != CUSTOM_COLOR_COUNT) { + colors.resize(CUSTOM_COLOR_COUNT); + } + for (int i = 0; i < CUSTOM_COLOR_COUNT; i++) { colors[i] = color_to_string(m_clrData.GetCustomColour(i)); } - save_custom_color_to_config(colors); + wxGetApp().app_config->save_custom_color_to_config(colors); // get current color DynamicPrintConfig* cfg = &wxGetApp().preset_bundle->project_config; auto colors = static_cast(cfg->option("filament_colour")->clone()); @@ -999,7 +958,8 @@ void PlaterPresetComboBox::update() std::map nonsys_presets; //BBS: add project embedded presets logic std::map project_embedded_presets; - std::map system_presets; + std::map system_presets; + std::map preset_descriptions; //BBS: move system to the end wxString selected_system_preset; @@ -1040,13 +1000,15 @@ void PlaterPresetComboBox::update() wxBitmap* bmp = get_bmp(preset); assert(bmp); - const std::string name = preset.alias.empty() ? preset.name : preset.alias; + const wxString name = get_preset_name(preset); + preset_descriptions.emplace(name, from_u8(preset.description)); + if (preset.is_default || preset.is_system) { //BBS: move system to the end - system_presets.emplace(get_preset_name(preset), bmp); + system_presets.emplace(name, bmp); if (is_selected) { tooltip = get_tooltip(preset); - selected_system_preset = get_preset_name(preset); + selected_system_preset = name; } //Append(get_preset_name(preset), *bmp); //validate_selection(is_selected); @@ -1057,17 +1019,17 @@ void PlaterPresetComboBox::update() //BBS: add project embedded preset logic else if (preset.is_project_embedded) { - project_embedded_presets.emplace(get_preset_name(preset), bmp); + project_embedded_presets.emplace(name, bmp); if (is_selected) { - selected_user_preset = get_preset_name(preset); + selected_user_preset = name; tooltip = wxString::FromUTF8(preset.name.c_str()); } } else { - nonsys_presets.emplace(get_preset_name(preset), bmp); + nonsys_presets.emplace(name, bmp); if (is_selected) { - selected_user_preset = get_preset_name(preset); + selected_user_preset = name; //BBS set tooltip tooltip = get_tooltip(preset); } @@ -1084,7 +1046,7 @@ void PlaterPresetComboBox::update() { set_label_marker(Append(separator(L("Project-inside presets")), wxNullBitmap)); for (std::map::iterator it = project_embedded_presets.begin(); it != project_embedded_presets.end(); ++it) { - Append(it->first, *it->second); + SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]); validate_selection(it->first == selected_user_preset); } } @@ -1092,7 +1054,7 @@ void PlaterPresetComboBox::update() { set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); for (std::map::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { - Append(it->first, *it->second); + SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]); validate_selection(it->first == selected_user_preset); } } @@ -1101,7 +1063,7 @@ void PlaterPresetComboBox::update() { set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); for (std::map::iterator it = system_presets.begin(); it != system_presets.end(); ++it) { - Append(it->first, *it->second); + SetItemTooltip(Append(it->first, *it->second), preset_descriptions[it->first]); validate_selection(it->first == selected_system_preset); } } @@ -1250,6 +1212,7 @@ void TabPresetComboBox::update() std::map> project_embedded_presets; //BBS: move system to the end std::map> system_presets; + std::map preset_descriptions; wxString selected = ""; //BBS: move system to the end @@ -1276,11 +1239,14 @@ void TabPresetComboBox::update() wxBitmap* bmp = get_bmp(preset); assert(bmp); + const wxString name = get_preset_name(preset); + preset_descriptions.emplace(name, from_u8(preset.description)); + if (preset.is_default || preset.is_system) { //BBS: move system to the end - system_presets.emplace(get_preset_name(preset), std::pair(bmp, is_enabled)); + system_presets.emplace(name, std::pair(bmp, is_enabled)); if (i == idx_selected) - selected = get_preset_name(preset); + selected = name; //int item_id = Append(get_preset_name(preset), *bmp); //if (!is_enabled) // set_label_marker(item_id, LABEL_ITEM_DISABLED); @@ -1290,16 +1256,16 @@ void TabPresetComboBox::update() else if (preset.is_project_embedded) { //std::pair pair(bmp, is_enabled); - project_embedded_presets.emplace(get_preset_name(preset), std::pair(bmp, is_enabled)); + project_embedded_presets.emplace(name, std::pair(bmp, is_enabled)); if (i == idx_selected) - selected = get_preset_name(preset); + selected = name; } else { std::pair pair(bmp, is_enabled); - nonsys_presets.emplace(get_preset_name(preset), std::pair(bmp, is_enabled)); + nonsys_presets.emplace(name, std::pair(bmp, is_enabled)); if (i == idx_selected) - selected = get_preset_name(preset); + selected = name; } //BBS: move system to the end //if (i + 1 == m_collection->num_default_presets()) @@ -1315,6 +1281,7 @@ void TabPresetComboBox::update() set_label_marker(Append(separator(L("Project-inside presets")), wxNullBitmap)); for (std::map>::iterator it = project_embedded_presets.begin(); it != project_embedded_presets.end(); ++it) { int item_id = Append(it->first, *it->second.first); + SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; if (!is_enabled) set_label_marker(item_id, LABEL_ITEM_DISABLED); @@ -1326,6 +1293,7 @@ void TabPresetComboBox::update() set_label_marker(Append(separator(L("User presets")), wxNullBitmap)); for (std::map>::iterator it = nonsys_presets.begin(); it != nonsys_presets.end(); ++it) { int item_id = Append(it->first, *it->second.first); + SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; if (!is_enabled) set_label_marker(item_id, LABEL_ITEM_DISABLED); @@ -1338,6 +1306,7 @@ void TabPresetComboBox::update() set_label_marker(Append(separator(L("System presets")), wxNullBitmap)); for (std::map>::iterator it = system_presets.begin(); it != system_presets.end(); ++it) { int item_id = Append(it->first, *it->second.first); + SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; if (!is_enabled) set_label_marker(item_id, LABEL_ITEM_DISABLED); diff --git a/src/slic3r/GUI/PresetComboBoxes.hpp b/src/slic3r/GUI/PresetComboBoxes.hpp index 6431354643..8069e687ef 100644 --- a/src/slic3r/GUI/PresetComboBoxes.hpp +++ b/src/slic3r/GUI/PresetComboBoxes.hpp @@ -2,9 +2,9 @@ #define slic3r_PresetComboBoxes_hpp_ //#include +#include #include #include -#include #include "libslic3r/Preset.hpp" #include "wxExtensions.hpp" @@ -164,8 +164,6 @@ public: PlaterPresetComboBox(wxWindow *parent, Preset::Type preset_type); ~PlaterPresetComboBox(); - void save_custom_color_to_config(const std::vector &colors); - std::vector get_custom_color_from_config(); ScalableButton* edit_btn { nullptr }; // BBS diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 42667173c6..168da3886e 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.cpp +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -67,6 +67,12 @@ PrintOptionsDialog::PrintOptionsDialog(wxWindow* parent) } evt.Skip(); }); + m_cb_nozzle_blob->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& evt) { + if (obj) { + obj->command_nozzle_blob_detect(m_cb_nozzle_blob->GetValue()); + } + evt.Skip(); + }); wxGetApp().UpdateDlgDarkUI(this); } @@ -163,6 +169,18 @@ void PrintOptionsDialog::update_options(MachineObject* obj_) m_cb_filament_tangle->Hide(); line6->Hide(); } + if (false/*obj_->is_support_nozzle_blob_detection*/) { + text_nozzle_blob->Show(); + m_cb_nozzle_blob->Show(); + text_nozzle_blob_caption->Show(); + line7->Show(); + } + else { + text_nozzle_blob->Hide(); + m_cb_nozzle_blob->Hide(); + text_nozzle_blob_caption->Hide(); + line7->Hide(); + } this->Freeze(); @@ -171,6 +189,7 @@ void PrintOptionsDialog::update_options(MachineObject* obj_) m_cb_auto_recovery->SetValue(obj_->xcam_auto_recovery_step_loss); m_cb_sup_sound->SetValue(obj_->xcam_allow_prompt_sound); m_cb_filament_tangle->SetValue(obj_->xcam_filament_tangle_detect); + m_cb_nozzle_blob->SetValue(obj_->nozzle_blob_detection_enabled); m_cb_ai_monitoring->SetValue(obj_->xcam_ai_monitoring); for (auto i = AiMonitorSensitivityLevel::LOW; i < LEVELS_NUM; i = (AiMonitorSensitivityLevel) (i + 1)) { @@ -325,6 +344,38 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) line6 = new StaticLine(parent, false); line6->SetLineColour(STATIC_BOX_LINE_COL); sizer->Add(line6, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(20)); + + //nozzle blob detect + line_sizer = new wxBoxSizer(wxHORIZONTAL); + m_cb_nozzle_blob = new CheckBox(parent); + text_nozzle_blob = new wxStaticText(parent, wxID_ANY, _L("Nozzle Clumping Detection")); + text_nozzle_blob->SetFont(Label::Body_14); + line_sizer->Add(FromDIP(5), 0, 0, 0); + line_sizer->Add(m_cb_nozzle_blob, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + line_sizer->Add(text_nozzle_blob, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); + sizer->Add(0, 0, 0, wxTOP, FromDIP(15)); + sizer->Add(line_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(18)); + line_sizer->Add(FromDIP(5), 0, 0, 0); + + line_sizer = new wxBoxSizer(wxHORIZONTAL); + wxString nozzle_blob_caption_text = _L("Check if the nozzle is clumping by filament or other foreign objects."); + text_nozzle_blob_caption = new Label(parent, nozzle_blob_caption_text); + text_nozzle_blob_caption->SetFont(Label::Body_14); + text_nozzle_blob_caption->Wrap(-1); + text_nozzle_blob_caption->SetForegroundColour(STATIC_TEXT_CAPTION_COL); + line_sizer->Add(FromDIP(30), 0, 0, 0); + line_sizer->Add(text_nozzle_blob_caption, 1, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(0)); + sizer->Add(line_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(18)); + + line7 = new StaticLine(parent, false); + line7->SetLineColour(STATIC_BOX_LINE_COL); + sizer->Add(line7, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); + + text_nozzle_blob->Hide(); + m_cb_nozzle_blob->Hide(); + text_nozzle_blob_caption->Hide(); + line7->Hide(); ai_monitoring_level_list->Connect( wxEVT_COMBOBOX, wxCommandEventHandler(PrintOptionsDialog::set_ai_monitor_sensitivity), NULL, this ); @@ -487,6 +538,8 @@ void PrinterPartsDialog::set_nozzle_type(wxCommandEvent& evt) nozzle_diameter_checkbox->Append(wxString::Format(_L("%.1f"), diameter_list[i])); } nozzle_diameter_checkbox->SetSelection(0); + + last_nozzle_type = type; set_nozzle_diameter(evt); } @@ -526,7 +579,11 @@ bool PrinterPartsDialog::Show(bool show) CentreOnParent(); auto type = obj->nozzle_type; - auto diameter = round(obj->nozzle_diameter * 10) / 10; + auto diameter = 0.4f; + + if (obj->nozzle_diameter > 0) { + diameter = round(obj->nozzle_diameter * 10) / 10; + } nozzle_type_checkbox->Clear(); nozzle_diameter_checkbox->Clear(); diff --git a/src/slic3r/GUI/PrintOptionsDialog.hpp b/src/slic3r/GUI/PrintOptionsDialog.hpp index ce67b76720..63fe24af63 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.hpp +++ b/src/slic3r/GUI/PrintOptionsDialog.hpp @@ -49,6 +49,7 @@ protected: CheckBox* m_cb_auto_recovery; CheckBox* m_cb_sup_sound; CheckBox* m_cb_filament_tangle; + CheckBox* m_cb_nozzle_blob; wxStaticText* text_first_layer; wxStaticText* text_ai_monitoring; wxStaticText* text_ai_monitoring_caption; @@ -58,12 +59,15 @@ protected: wxStaticText* text_auto_recovery; wxStaticText* text_sup_sound; wxStaticText* text_filament_tangle; + wxStaticText* text_nozzle_blob; + wxStaticText* text_nozzle_blob_caption; StaticLine* line1; StaticLine* line2; StaticLine* line3; StaticLine* line4; StaticLine* line5; StaticLine* line6; + StaticLine* line7; wxBoxSizer* create_settings_group(wxWindow* parent); bool print_halt = false; diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 8e1ef55e92..46debf2123 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -7,9 +7,9 @@ #include "../../Utils/NetworkAgent.hpp" #include "../BitmapCache.hpp" +#include #include #include -#include #include #include @@ -1139,8 +1139,7 @@ void PrinterFileSystem::RecvMessageThread() if (n == 0) { HandleResponse(l, sample); } else if (n == Bambu_stream_end) { - if (m_status == ListSyncing) - m_stopped = true; + m_stopped = true; Reconnect(l, m_status == ListSyncing ? ERROR_RES_BUSY : ERROR_PIPE); } else if (n == Bambu_would_block) { m_cond.timed_wait(l, boost::posix_time::milliseconds(m_messages.empty() && m_callbacks.empty() ? 1000 : 20)); @@ -1219,10 +1218,6 @@ void PrinterFileSystem::HandleResponse(boost::unique_lock &l, Bamb } } -namespace Slic3r { namespace GUI { - extern wxString hide_passwd(wxString url, std::vector const &passwords); -}} - void PrinterFileSystem::Reconnect(boost::unique_lock &l, int result) { if (m_session.tunnel) { @@ -1266,7 +1261,7 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul if (m_last_error == 0) m_stopped = true; } else { - wxLogMessage("PrinterFileSystem::Reconnect Initialized: %s", Slic3r::GUI::hide_passwd(wxString::FromUTF8(url), {"authkey=", "passwd="})); + wxLogInfo("PrinterFileSystem::Reconnect Initialized: %s", wxString::FromUTF8(url)); l.unlock(); m_status = Status::Connecting; wxLogMessage("PrinterFileSystem::Reconnect Connecting"); @@ -1288,6 +1283,9 @@ void PrinterFileSystem::Reconnect(boost::unique_lock &l, int resul m_session.tunnel = tunnel; wxLogMessage("PrinterFileSystem::Reconnect Connected"); break; + } else if (ret == 1) { + m_stopped = true; + ret = ERROR_RES_BUSY; } if (tunnel) { Bambu_Close(tunnel); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 85d1d276e1..617397f32f 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -31,12 +31,16 @@ wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CONFIRM, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_DONE, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_RESUME, wxCommandEvent); +wxDEFINE_EVENT(EVT_LOAD_VAMS_TRAY, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECKBOX_CHANGE, wxCommandEvent); wxDEFINE_EVENT(EVT_ENTER_IP_ADDRESS, wxCommandEvent); wxDEFINE_EVENT(EVT_CLOSE_IPADDRESS_DLG, wxCommandEvent); wxDEFINE_EVENT(EVT_CHECK_IP_ADDRESS_FAILED, wxCommandEvent); wxDEFINE_EVENT(EVT_SECONDARY_CHECK_RETRY, wxCommandEvent); +wxDEFINE_EVENT(EVT_PRINT_ERROR_STOP, wxCommandEvent); wxDEFINE_EVENT(EVT_UPDATE_NOZZLE, wxCommandEvent); +wxDEFINE_EVENT(EVT_JUMP_TO_HMS, wxCommandEvent); +wxDEFINE_EVENT(EVT_JUMP_TO_LIVEVIEW, wxCommandEvent); ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Release Note"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) @@ -860,6 +864,306 @@ void SecondaryCheckDialog::rescale() m_button_cancel->Rescale(); } +PrintErrorDialog::PrintErrorDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) + :DPIFrame(parent, id, title, pos, size, style) +{ + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + SetBackgroundColour(*wxWHITE); + + btn_bg_white = StateColor(std::pair(wxColour(206, 206, 206), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + + m_sizer_main = new wxBoxSizer(wxVERTICAL); + auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(350), 1)); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + m_sizer_main->Add(m_line_top, 0, wxEXPAND, 0); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(5)); + + wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); + + m_sizer_right->Add(0, 0, 1, wxTOP, FromDIP(5)); + + m_vebview_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_vebview_release_note->SetScrollRate(0, 5); + m_vebview_release_note->SetBackgroundColour(*wxWHITE); + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), FromDIP(250))); + m_sizer_right->Add(m_vebview_release_note, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + + m_error_prompt_pic_static = new wxStaticBitmap(m_vebview_release_note, wxID_ANY, wxBitmap(), wxDefaultPosition, wxSize(FromDIP(300), FromDIP(180))); + + auto bottom_sizer = new wxBoxSizer(wxVERTICAL); + m_sizer_button = new wxBoxSizer(wxVERTICAL); + + bottom_sizer->Add(m_sizer_button, 0, wxEXPAND | wxRIGHT | wxLEFT, 0); + + m_sizer_right->Add(bottom_sizer, 0, wxEXPAND | wxRIGHT | wxLEFT, FromDIP(15)); + m_sizer_right->Add(0, 0, 0, wxTOP, FromDIP(10)); + + m_sizer_main->Add(m_sizer_right, 0, wxBOTTOM | wxEXPAND, FromDIP(5)); + + Bind(wxEVT_CLOSE_WINDOW, [this](auto& e) {this->on_hide(); }); + Bind(wxEVT_ACTIVATE, [this](auto& e) { if (!e.GetActive()) this->RequestUserAttention(wxUSER_ATTENTION_ERROR); }); + Bind(wxEVT_WEBREQUEST_STATE, &PrintErrorDialog::on_webrequest_state, this); + + + SetSizer(m_sizer_main); + Layout(); + m_sizer_main->Fit(this); + + init_button_list(); + + CenterOnParent(); + wxGetApp().UpdateFrameDarkUI(this); +} + +void PrintErrorDialog::post_event(wxCommandEvent&& event) +{ + if (event_parent) { + event.SetString(""); + event.SetEventObject(event_parent); + wxPostEvent(event_parent, event); + event.Skip(); + } +} + +void PrintErrorDialog::on_webrequest_state(wxWebRequestEvent& evt) +{ + BOOST_LOG_TRIVIAL(trace) << "monitor: monitor_panel web request state = " << evt.GetState(); + switch (evt.GetState()) { + case wxWebRequest::State_Completed: { + wxImage img(*evt.GetResponse().GetStream()); + wxImage resize_img = img.Scale(FromDIP(320), FromDIP(180), wxIMAGE_QUALITY_HIGH); + wxBitmap error_prompt_pic = resize_img; + m_error_prompt_pic_static->SetBitmap(error_prompt_pic); + Layout(); + Fit(); + + break; + } + case wxWebRequest::State_Failed: + case wxWebRequest::State_Cancelled: + case wxWebRequest::State_Unauthorized: { + m_error_prompt_pic_static->SetBitmap(wxBitmap()); + break; + } + case wxWebRequest::State_Active: + case wxWebRequest::State_Idle: break; + default: break; + } +} + +void PrintErrorDialog::update_text_image(wxString text, wxString image_url) +{ + //if (!m_sizer_text_release_note) { + // m_sizer_text_release_note = new wxBoxSizer(wxVERTICAL); + //} + wxBoxSizer* sizer_text_release_note = new wxBoxSizer(wxVERTICAL); + + + if (!m_staticText_release_note) { + m_staticText_release_note = new Label(m_vebview_release_note, text, LB_AUTO_WRAP); + sizer_text_release_note->Add(m_error_prompt_pic_static, 0, wxALIGN_CENTER, FromDIP(5)); + sizer_text_release_note->Add(m_staticText_release_note, 0, wxALIGN_CENTER , FromDIP(5)); + m_vebview_release_note->SetSizer(sizer_text_release_note); + } + if (!image_url.empty()) { + web_request = wxWebSession::GetDefault().CreateRequest(this, image_url); + BOOST_LOG_TRIVIAL(trace) << "monitor: create new webrequest, state = " << web_request.GetState() << ", url = " << image_url; + if (web_request.GetState() == wxWebRequest::State_Idle) + web_request.Start(); + BOOST_LOG_TRIVIAL(trace) << "monitor: start new webrequest, state = " << web_request.GetState() << ", url = " << image_url; + m_error_prompt_pic_static->Show(); + + } + else { + m_error_prompt_pic_static->Hide(); + } + sizer_text_release_note->Layout(); + m_staticText_release_note->SetMaxSize(wxSize(FromDIP(300), -1)); + m_staticText_release_note->SetMinSize(wxSize(FromDIP(300), -1)); + m_staticText_release_note->SetLabelText(text); + m_vebview_release_note->Layout(); + + auto text_size = m_staticText_release_note->GetBestSize(); + if (text_size.y < FromDIP(360)) + if (!image_url.empty()) { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(220))); + } + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), text_size.y + FromDIP(25))); + } + else { + m_vebview_release_note->SetMinSize(wxSize(FromDIP(320), FromDIP(340))); + } + + Layout(); + Fit(); +} + +void PrintErrorDialog::on_show() +{ + wxGetApp().UpdateFrameDarkUI(this); + + this->Show(); + this->Raise(); +} + +void PrintErrorDialog::on_hide() +{ + //m_sizer_button->Clear(); + //m_sizer_button->Layout(); + //m_used_button.clear(); + this->Hide(); + if (web_request.IsOk() && web_request.GetState() == wxWebRequest::State_Active) { + BOOST_LOG_TRIVIAL(info) << "web_request: cancelled"; + web_request.Cancel(); + } + m_error_prompt_pic_static->SetBitmap(wxBitmap()); + + if (wxGetApp().mainframe != nullptr) { + wxGetApp().mainframe->Show(); + wxGetApp().mainframe->Raise(); + } +} + +void PrintErrorDialog::update_title_style(wxString title, std::vector button_style, wxWindow* parent) +{ + SetTitle(title); + event_parent = parent; + for (int used_button_id : m_used_button) { + if (m_button_list.find(used_button_id) != m_button_list.end()) { + m_button_list[used_button_id]->Hide(); + } + } + m_sizer_button->Clear(); + m_used_button = button_style; + for (int button_id : button_style) { + if (m_button_list.find(button_id) != m_button_list.end()) { + m_sizer_button->Add(m_button_list[button_id], 0, wxALL, FromDIP(5)); + m_button_list[button_id]->Show(); + } + } + Layout(); + Fit(); + +} + +void PrintErrorDialog::init_button(PrintErrorButton style,wxString buton_text) { + Button* print_error_button = new Button(this, buton_text); + print_error_button->SetBackgroundColor(btn_bg_white); + print_error_button->SetBorderColor(wxColour(38, 46, 48)); + print_error_button->SetFont(Label::Body_14); + print_error_button->SetSize(wxSize(FromDIP(300), FromDIP(30))); + print_error_button->SetMinSize(wxSize(FromDIP(300), FromDIP(30))); + print_error_button->SetMaxSize(wxSize(-1, FromDIP(30))); + print_error_button->SetCornerRadius(FromDIP(5)); + print_error_button->Hide(); + m_button_list[style] = print_error_button; + +} + +void PrintErrorDialog::init_button_list() { + + init_button(RESUME_PRINTING, _L("Resume Printing")); + m_button_list[RESUME_PRINTING]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + init_button(RESUME_PRINTING_DEFECTS, _L("Resume Printing(defects acceptable)")); + m_button_list[RESUME_PRINTING_DEFECTS]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + + init_button(RESUME_PRINTING_PROBELM_SOLVED, _L("Resume Printing(problem solved)")); + m_button_list[RESUME_PRINTING_PROBELM_SOLVED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + init_button(STOP_PRINTING, _L("Stop Printing")); + m_button_list[STOP_PRINTING]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_PRINT_ERROR_STOP)); + e.Skip(); + }); + + init_button(CHECK_ASSISTANT, _L("Check Assistant")); + m_button_list[CHECK_ASSISTANT]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_JUMP_TO_HMS)); + this->on_hide(); + }); + + init_button(FILAMENT_EXTRUDED, _L("Filament Extruded, Continue")); + m_button_list[FILAMENT_EXTRUDED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_DONE)); + e.Skip(); + }); + + init_button(RETRY_FILAMENT_EXTRUDED, _L("Not Extruded Yet, Retry")); + m_button_list[RETRY_FILAMENT_EXTRUDED]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_SECONDARY_CHECK_RETRY, GetId()); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); + }); + + init_button(CONTINUE, _L("Finished, Continue")); + m_button_list[CONTINUE]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_DONE)); + e.Skip(); + }); + + init_button(LOAD_VIRTUAL_TRAY, _L("Load Filament")); + m_button_list[LOAD_VIRTUAL_TRAY]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_LOAD_VAMS_TRAY)); + e.Skip(); + }); + + init_button(OK_BUTTON, _L("OK")); + m_button_list[OK_BUTTON]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + wxCommandEvent evt(EVT_SECONDARY_CHECK_CONFIRM, GetId()); + e.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + this->on_hide(); + }); + + init_button(FILAMENT_LOAD_RESUME, _L("Filament Loaded, Resume")); + m_button_list[FILAMENT_LOAD_RESUME]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_SECONDARY_CHECK_RESUME)); + e.Skip(); + }); + + init_button(JUMP_TO_LIVEVIEW, _L("View Liveview")); + m_button_list[JUMP_TO_LIVEVIEW]->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + post_event(wxCommandEvent(EVT_JUMP_TO_LIVEVIEW)); + e.Skip(); + }); +} + +PrintErrorDialog::~PrintErrorDialog() +{ + +} + +void PrintErrorDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + rescale(); +} + +void PrintErrorDialog::msw_rescale() { + wxGetApp().UpdateFrameDarkUI(this); + Refresh(); +} + +void PrintErrorDialog::rescale() +{ + for(auto used_button:m_used_button) + m_button_list[used_button]->Rescale(); +} + ConfirmBeforeSendDialog::ConfirmBeforeSendDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum ButtonStyle btn_style, const wxPoint& pos, const wxSize& size, long style, bool not_show_again_check) :DPIDialog(parent, id, title, pos, size, style) { @@ -1121,7 +1425,7 @@ void ConfirmBeforeSendDialog::disable_button_ok() void ConfirmBeforeSendDialog::enable_button_ok() { m_button_ok->Enable(); - StateColor btn_bg_green(std::pair(wxColour(61, 203, 115), StateColor::Pressed), std::pair(wxColour(61, 203, 115), StateColor::Hovered), + StateColor btn_bg_green(std::pair(wxColour(38, 166, 154), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), std::pair(AMS_CONTROL_BRAND_COLOUR, StateColor::Normal)); m_button_ok->SetBackgroundColor(btn_bg_green); m_button_ok->SetBorderColor(btn_bg_green); diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index 80727df552..d8ad66644c 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -47,7 +47,11 @@ wxDECLARE_EVENT(EVT_SECONDARY_CHECK_CANCEL, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_RETRY, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_DONE, wxCommandEvent); wxDECLARE_EVENT(EVT_SECONDARY_CHECK_RESUME, wxCommandEvent); +wxDECLARE_EVENT(EVT_PRINT_ERROR_STOP, wxCommandEvent); wxDECLARE_EVENT(EVT_UPDATE_NOZZLE, wxCommandEvent); +wxDECLARE_EVENT(EVT_LOAD_VAMS_TRAY, wxCommandEvent); +wxDECLARE_EVENT(EVT_JUMP_TO_HMS, wxCommandEvent); +wxDECLARE_EVENT(EVT_JUMP_TO_LIVEVIEW, wxCommandEvent); class ReleaseNoteDialog : public DPIDialog { @@ -159,6 +163,57 @@ public: std::string show_again_config_text = ""; }; +class PrintErrorDialog : public DPIFrame +{ +private: + wxWindow* event_parent{ nullptr }; +public: + enum PrintErrorButton { + RESUME_PRINTING = 2, + RESUME_PRINTING_DEFECTS = 3, + RESUME_PRINTING_PROBELM_SOLVED = 4, + STOP_PRINTING = 5, + CHECK_ASSISTANT = 6, + FILAMENT_EXTRUDED = 7, + RETRY_FILAMENT_EXTRUDED = 8, + CONTINUE = 9, + LOAD_VIRTUAL_TRAY = 10, + OK_BUTTON = 11, + FILAMENT_LOAD_RESUME, + JUMP_TO_LIVEVIEW, + ERROR_BUTTON_COUNT + }; + PrintErrorDialog( + wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCLOSE_BOX | wxCAPTION + ); + void update_text_image(wxString text, wxString image_url); + void on_show(); + void on_hide(); + void update_title_style(wxString title, std::vector style, wxWindow* parent = nullptr); + void post_event(wxCommandEvent&& event); + void rescale(); + ~PrintErrorDialog(); + void on_dpi_changed(const wxRect& suggested_rect); + void msw_rescale(); + void init_button(PrintErrorButton style, wxString buton_text); + void init_button_list(); + void on_webrequest_state(wxWebRequestEvent& evt); + + StateColor btn_bg_white; + wxWebRequest web_request; + wxStaticBitmap* m_error_prompt_pic_static; + Label* m_staticText_release_note{ nullptr }; + wxBoxSizer* m_sizer_main; + wxBoxSizer* m_sizer_button; + wxScrolledWindow* m_vebview_release_note{ nullptr }; + std::map m_button_list; + std::vector m_used_button; +}; struct ConfirmBeforeSendInfo { diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 62f602c27b..08a9cdd96c 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -398,12 +398,15 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) auto other_title = create_title_panel(_L("Other Device")); m_sizer_other_devices = new wxBoxSizer(wxVERTICAL); + + m_panel_ping_code = new PinCodePanel(m_scrolledWindow, wxID_ANY, wxDefaultPosition, SELECT_MACHINE_ITEM_SIZE); + m_sizxer_scrolledWindow->Add(own_title, 0, wxEXPAND | wxLEFT, FromDIP(15)); m_sizxer_scrolledWindow->Add(m_sizer_my_devices, 0, wxEXPAND, 0); + m_sizxer_scrolledWindow->Add(m_panel_ping_code, 0, wxEXPAND, 0); m_sizxer_scrolledWindow->Add(other_title, 0, wxEXPAND | wxLEFT, FromDIP(15)); m_sizxer_scrolledWindow->Add(m_sizer_other_devices, 0, wxEXPAND, 0); - m_sizer_main->Add(m_scrolledWindow, 0, wxALL | wxEXPAND, FromDIP(2)); SetSizer(m_sizer_main); @@ -872,6 +875,17 @@ void SelectMachinePopup::OnLeftUp(wxMouseEvent &event) } } + //pin code + auto pc_rect = m_panel_ping_code->ClientToScreen(wxPoint(0, 0)); + if (mouse_pos.x > pc_rect.x && mouse_pos.y > pc_rect.y && mouse_pos.x < (pc_rect.x + m_panel_ping_code->GetSize().x) && mouse_pos.y < (pc_rect.y + m_panel_ping_code->GetSize().y)) { + /*wxMouseEvent event(wxEVT_LEFT_UP); + auto tag_pos = m_panel_ping_code->ScreenToClient(mouse_pos); + event.SetPosition(tag_pos); + event.SetEventObject(m_panel_ping_code); + wxPostEvent(m_panel_ping_code, event);*/ + wxGetApp().popup_ping_bind_dialog(); + } + //hyper link auto h_rect = m_hyperlink->ClientToScreen(wxPoint(0, 0)); if (mouse_pos.x > h_rect.x && mouse_pos.y > h_rect.y && mouse_pos.x < (h_rect.x + m_hyperlink->GetSize().x) && mouse_pos.y < (h_rect.y + m_hyperlink->GetSize().y)) { @@ -4581,4 +4595,80 @@ void EditDevNameDialog::on_edit_name(wxCommandEvent &e) ThumbnailPanel::~ThumbnailPanel() {} + PinCodePanel::PinCodePanel(wxWindow* parent, wxWindowID winid /*= wxID_ANY*/, const wxPoint& pos /*= wxDefaultPosition*/, const wxSize& size /*= wxDefaultSize*/) + { + wxPanel::Create(parent, winid, pos, SELECT_MACHINE_ITEM_SIZE); + Bind(wxEVT_PAINT, &PinCodePanel::OnPaint, this); + SetSize(SELECT_MACHINE_ITEM_SIZE); + SetMaxSize(SELECT_MACHINE_ITEM_SIZE); + SetMinSize(SELECT_MACHINE_ITEM_SIZE); + + m_bitmap = ScalableBitmap(this, "bind_device_ping_code",10); + + this->Bind(wxEVT_ENTER_WINDOW, &PinCodePanel::on_mouse_enter, this); + this->Bind(wxEVT_LEAVE_WINDOW, &PinCodePanel::on_mouse_leave, this); + this->Bind(wxEVT_LEFT_UP, &PinCodePanel::on_mouse_left_up, this); + } + + void PinCodePanel::OnPaint(wxPaintEvent& event) + { + wxPaintDC dc(this); + render(dc); + } + + void PinCodePanel::render(wxDC& dc) + { +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif + } + + void PinCodePanel::doRender(wxDC& dc) + { + auto size = GetSize(); + dc.DrawBitmap(m_bitmap.bmp(), wxPoint(FromDIP(20), (size.y - m_bitmap.GetBmpSize().y) / 2)); + dc.SetFont(::Label::Head_13); + dc.SetTextForeground(wxColour(38, 46, 48)); + wxString txt = _L("Bind with Pin Code"); + auto txt_size = dc.GetTextExtent(txt); + dc.DrawText(txt, wxPoint(FromDIP(40), (size.y - txt_size.y) / 2)); + + if (m_hover) { + dc.SetPen(SELECT_MACHINE_BRAND); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRectangle(0, 0, size.x, size.y); + } + } + + void PinCodePanel::on_mouse_enter(wxMouseEvent& evt) + { + m_hover = true; + Refresh(); + } + + void PinCodePanel::on_mouse_leave(wxMouseEvent& evt) + { + m_hover = false; + Refresh(); + } + + void PinCodePanel::on_mouse_left_up(wxMouseEvent& evt) + { + wxGetApp().popup_ping_bind_dialog(); + } + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index d9ea4cb8f4..bab4d3d4e9 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -210,6 +210,27 @@ public: MachineObjectPanel *mPanel; }; +class PinCodePanel : public wxPanel +{ +public: + PinCodePanel(wxWindow* parent, + wxWindowID winid = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize); + ~PinCodePanel() {}; + + ScalableBitmap m_bitmap; + bool m_hover{false}; + + void OnPaint(wxPaintEvent& event); + void render(wxDC& dc); + void doRender(wxDC& dc); + + void on_mouse_enter(wxMouseEvent& evt); + void on_mouse_leave(wxMouseEvent& evt); + void on_mouse_left_up(wxMouseEvent& evt); +}; + class ThumbnailPanel; @@ -232,8 +253,11 @@ public: private: int m_my_devices_count{0}; int m_other_devices_count{0}; + PinCodePanel* m_panel_ping_code{nullptr}; wxWindow* m_placeholder_panel{nullptr}; wxHyperlinkCtrl* m_hyperlink{nullptr}; + Label* m_ping_code_text{nullptr}; + wxStaticBitmap* m_img_ping_code{nullptr}; wxBoxSizer * m_sizer_body{nullptr}; wxBoxSizer * m_sizer_my_devices{nullptr}; wxBoxSizer * m_sizer_other_devices{nullptr}; diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp new file mode 100644 index 0000000000..368bfa9161 --- /dev/null +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -0,0 +1,1618 @@ +#include "SendMultiMachinePage.hpp" +#include "TaskManager.hpp" +#include "I18N.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "Widgets/RadioBox.hpp" +#include + +namespace Slic3r { +namespace GUI { + + + +WX_DEFINE_LIST(AmsRadioSelectorList); + +class ScrolledWindow : public wxScrolledWindow { +public: + ScrolledWindow(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxVSCROLL) : wxScrolledWindow(parent, id, pos, size, style) {} + + bool ShouldScrollToChildOnFocus(wxWindow* child) override { return false; } +}; + +SendDeviceItem::SendDeviceItem(wxWindow* parent, MachineObject* obj) + : DeviceItem(parent, obj) +{ + SetBackgroundColour(*wxWHITE); + m_bitmap_check_disable = ScalableBitmap(this, "check_off_disabled", 18); + m_bitmap_check_off = ScalableBitmap(this, "check_off_focused", 18); + m_bitmap_check_on = ScalableBitmap(this, "check_on", 18); + + + SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(SEND_ITEM_MAX_HEIGHT))); + SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), FromDIP(SEND_ITEM_MAX_HEIGHT))); + + Bind(wxEVT_PAINT, &SendDeviceItem::paintEvent, this); + Bind(wxEVT_ENTER_WINDOW, &SendDeviceItem::OnEnterWindow, this); + Bind(wxEVT_LEAVE_WINDOW, &SendDeviceItem::OnLeaveWindow, this); + Bind(wxEVT_LEFT_DOWN, &SendDeviceItem::OnLeftDown, this); + Bind(wxEVT_MOTION, &SendDeviceItem::OnMove, this); + Bind(EVT_MULTI_DEVICE_SELECTED, &SendDeviceItem::OnSelectedDevice, this); + wxGetApp().UpdateDarkUIWin(this); +} + +void SendDeviceItem::DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top /*= 0*/) +{ + wxSize size = GetSize(); + wxFont font = dc.GetFont(); + + wxSize textSize = dc.GetTextExtent(text); + dc.SetTextForeground(StateColor::darkModeColorFor(wxColour(50, 58, 61))); + int textWidth = textSize.GetWidth(); + + if (textWidth > maxWidth) { + wxString truncatedText = text; + int ellipsisWidth = dc.GetTextExtent("...").GetWidth(); + int numChars = text.length(); + + for (int i = numChars - 1; i >= 0; --i) { + truncatedText = text.substr(0, i) + "..."; + int truncatedWidth = dc.GetTextExtent(truncatedText).GetWidth(); + + if (truncatedWidth <= maxWidth - ellipsisWidth) { + break; + } + } + + if (top == 0) { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(truncatedText, left, (size.y - textSize.y) / 2 - top); + } + + } + else { + if (top == 0) { + dc.DrawText(text, left, (size.y - textSize.y) / 2); + } + else { + dc.DrawText(text, left, (size.y - textSize.y) / 2 - top); + } + } +} + +void SendDeviceItem::OnEnterWindow(wxMouseEvent& evt) +{ + m_hover = true; + Refresh(false); +} + +void SendDeviceItem::OnLeaveWindow(wxMouseEvent& evt) +{ + m_hover = false; + Refresh(false); +} + +void SendDeviceItem::OnSelectedDevice(wxCommandEvent& evt) +{ + auto dev_id = evt.GetString(); + auto state = evt.GetInt(); + if (state == 0) { + state_selected = 1; + } + else if (state == 1) { + state_selected = 0; + } + Refresh(false); +} + +void SendDeviceItem::OnLeftDown(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + + if (state_printable <= 2 && state_local_task > 1) { + post_event(wxCommandEvent(EVT_MULTI_DEVICE_SELECTED)); + } + } +} + +void SendDeviceItem::OnMove(wxMouseEvent& evt) +{ + int left = FromDIP(15); + auto mouse_pos = ClientToScreen(evt.GetPosition()); + auto item = this->ClientToScreen(wxPoint(0, 0)); + + if (mouse_pos.x > (item.x + left) && + mouse_pos.x < (item.x + left + m_bitmap_check_disable.GetBmpWidth()) && + mouse_pos.y > item.y && + mouse_pos.y < (item.y + DEVICE_ITEM_MAX_HEIGHT)) { + SetCursor(wxCURSOR_HAND); + } + else { + SetCursor(wxCURSOR_ARROW); + } +} + +void SendDeviceItem::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void SendDeviceItem::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void SendDeviceItem::doRender(wxDC& dc) +{ + wxSize size = GetSize(); + dc.SetPen(wxPen(*wxBLACK)); + + int left = FromDIP(SEND_LEFT_PADDING_LEFT); + + + //checkbox + if (state_printable > 2) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + else { + if (state_selected == 0) { + dc.DrawBitmap(m_bitmap_check_off.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + else if(state_selected == 1) { + dc.DrawBitmap(m_bitmap_check_on.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + } + + //task status + if (state_local_task <= 1) { + dc.DrawBitmap(m_bitmap_check_disable.bmp(), wxPoint(left, (size.y - m_bitmap_check_disable.GetBmpSize().y) / 2 )); + } + + left += FromDIP(SEND_LEFT_PRINTABLE); + + //dev names + DrawTextWithEllipsis(dc, wxString::FromUTF8(get_obj()->dev_name), FromDIP(SEND_LEFT_DEV_NAME), left); + left += FromDIP(SEND_LEFT_DEV_NAME); + + //device state + if (state_printable <= 2) { + dc.SetTextForeground(wxColour(0, 150, 136)); + } + else { + dc.SetTextForeground(wxColour(208, 27, 27)); + } + + DrawTextWithEllipsis(dc, get_state_printable(), FromDIP(SEND_LEFT_DEV_NAME), left); + left += FromDIP(SEND_LEFT_DEV_STATUS); + + dc.SetTextForeground(*wxBLACK); + + //task state + //DrawTextWithEllipsis(dc, get_local_state_task(), FromDIP(SEND_LEFT_DEV_NAME), left); + //left += FromDIP(SEND_LEFT_DEV_STATUS); + + + //AMS + if (!obj_->has_ams()) { + DrawTextWithEllipsis(dc, _L("No AMS"), FromDIP(SEND_LEFT_DEV_NAME), left); + } + else { + DrawTextWithEllipsis(dc, _L("AMS"), FromDIP(SEND_LEFT_DEV_NAME), left); + } + + if (m_hover) { + dc.SetPen(wxPen(wxColour(0, 150, 136))); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, size.x, size.y, 3); + } +} +void SendDeviceItem::post_event(wxCommandEvent&& event) +{ + event.SetEventObject(this); + event.SetString(obj_->dev_id); + event.SetInt(state_selected); + wxPostEvent(this, event); +} + +void SendDeviceItem::DoSetSize(int x, int y, int width, int height, int sizeFlags /*= wxSIZE_AUTO*/) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); +} + +SendMultiMachinePage::SendMultiMachinePage(Plater* plater) + : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, + _L("Send to Multi-device"), + wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER) + ,m_plater(plater) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + app_config = get_app_config(); + + SetBackgroundColour(*wxWHITE); + // icon + std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + auto line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + line_top->SetBackgroundColour(wxColour(166, 169, 170)); + main_sizer->Add(line_top, 0, wxEXPAND, 0); + main_sizer->AddSpacer(FromDIP(10)); + + m_main_scroll = new ScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + m_main_scroll->SetBackgroundColour(*wxWHITE); + m_main_scroll->SetScrollRate(5, 5); + + m_sizer_body = new wxBoxSizer(wxVERTICAL); + m_main_page = create_page(); + m_sizer_body->Add(m_main_page, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); + m_main_scroll->SetSizerAndFit(m_sizer_body); + m_main_scroll->Layout(); + m_main_scroll->Fit(); + m_main_scroll->Centre(wxBOTH); + + main_sizer->Add(m_main_scroll, 1, wxEXPAND); + + SetSizer(main_sizer); + Layout(); + Fit(); + Centre(wxBOTH); + + m_mapping_popup = new AmsMapingPopup(m_main_page); + Bind(EVT_SET_FINISH_MAPPING, &SendMultiMachinePage::on_set_finish_mapping, this); + Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); + m_main_page->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); + m_main_scroll->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); + + init_timer(); + Bind(wxEVT_TIMER, &SendMultiMachinePage::on_timer, this); + wxGetApp().UpdateDlgDarkUI(this); +} + +SendMultiMachinePage::~SendMultiMachinePage() +{ + // TODO + m_radio_group.DeleteContents(true); + + if (m_refresh_timer) + m_refresh_timer->Stop(); + delete m_refresh_timer; +} + +void SendMultiMachinePage::prepare(int plate_idx) +{ + // TODO + m_print_plate_idx = plate_idx; +} + +void SendMultiMachinePage::on_dpi_changed(const wxRect& suggested_rect) +{ + +} + +void SendMultiMachinePage::on_sys_color_changed() +{ + +} + +void SendMultiMachinePage::refresh_user_device() +{ + sizer_machine_list->Clear(false); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + wxWindow* child = it->second; + child->Destroy(); + } + return; + } + + auto all_machine = dev->get_my_cloud_machine_list(); + auto user_machine = std::map(); + + //selected machine + for (int i = 0; i < PICK_DEVICE_MAX; i++) { + auto dev_id = app_config->get("multi_devices", std::to_string(i)); + + if (all_machine.count(dev_id) > 0) { + user_machine[dev_id] = all_machine[dev_id]; + } + } + + + auto task_manager = wxGetApp().getTaskManager(); + + std::vector subscribe_list; + std::vector dev_temp; + + for (auto it = user_machine.begin(); it != user_machine.end(); ++it) { + SendDeviceItem* di = new SendDeviceItem(scroll_macine_list, it->second); + if (m_device_items.find(it->first) != m_device_items.end()) { + auto item = m_device_items[it->first]; + if (item->state_selected == 1 && di->state_printable <= 2) + di->state_selected = item->state_selected; + item->Destroy(); + } + m_device_items[it->first] = di; + + //update state + if (task_manager) { + m_device_items[it->first]->state_local_task = task_manager->query_task_state(it->first); + } + + dev_temp.push_back(m_device_items[it->first]); + subscribe_list.push_back(it->first); + } + + dev->subscribe_device_list(subscribe_list); + + if (m_sort.rule == SortItem::SortRule::SR_None) { + this->device_printable_big = false; + m_sort.set_role(SortItem::SR_DEV_STATE, device_printable_big); + } + std::sort(dev_temp.begin(), dev_temp.end(), m_sort.get_call_back()); + + for (auto i = 0; i < dev_temp.size(); ++i) { + sizer_machine_list->Add(dev_temp[i], 0, wxALL | wxEXPAND, 0); + } + + // maintenance dev_items + auto it = m_device_items.begin(); + while (it != m_device_items.end()) { + if (user_machine.find(it->first) != user_machine.end()) { + ++it; + } + else { + it->second->Destroy(); + it = m_device_items.erase(it); + } + } + m_tip_text->Show(m_device_items.empty()); + m_button_add->Show(m_device_items.empty()); + sizer_machine_list->Layout(); + Layout(); + Fit(); +} + +BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) +{ + BBL::PrintParams params; + + //get all setting + bool bed_leveling = app_config->get("print", "bed_leveling") == "1" ? true : false; + bool flow_cali = app_config->get("print", "flow_cali") == "1" ? true : false; + bool timelapse = app_config->get("print", "timelapse") == "1" ? true : false; + auto use_ams = false; + + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + + + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_param_name == "use_ams" && rs->m_radiobox->GetValue()) { + use_ams = true; + } + + if (rs->m_param_name == "use_extra" && rs->m_radiobox->GetValue()) { + use_ams = false; + } + + node = node->GetNext(); + } + + //use ams + + + PrintPrepareData job_data; + m_plater->get_print_job_data(&job_data); + + if (&job_data) { + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); + } + + int curr_plate_idx; + if (job_data.plate_idx >= 0) + curr_plate_idx = job_data.plate_idx + 1; + else if (job_data.plate_idx == PLATE_CURRENT_IDX) + curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + else if (job_data.plate_idx == PLATE_ALL_IDX) + curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + else + curr_plate_idx = m_plater->get_partplate_list().get_curr_plate_index() + 1; + + params.dev_ip = obj->dev_ip; + params.dev_id = obj->dev_id; + params.dev_name = obj->dev_name; + params.ftp_folder = obj->get_ftp_folder(); + params.connection_type = obj->connection_type(); + params.print_type = "from_normal"; + params.filename = job_data._3mf_path.string(); + params.config_filename = job_data._3mf_config_path.string(); + params.plate_index = curr_plate_idx; + params.task_bed_leveling = bed_leveling; + params.task_flow_cali = flow_cali; + params.task_vibration_cali = false; + params.task_layer_inspect = true; + params.task_record_timelapse = timelapse; + + if (use_ams) { + std::string ams_array; + std::string mapping_info; + get_ams_mapping_result(ams_array, mapping_info); + params.ams_mapping = ams_array; + params.ams_mapping_info = mapping_info; + } + else { + params.ams_mapping = ""; + params.ams_mapping_info = ""; + } + + params.connection_type = obj->connection_type(); + params.task_use_ams = use_ams; + + PartPlate* curr_plate = m_plater->get_partplate_list().get_curr_plate(); + if (curr_plate) { + params.task_bed_type = bed_type_to_gcode_string( curr_plate->get_bed_type(true)); + } + + wxString filename; + if (m_current_project_name.IsEmpty()) { + filename = m_plater->get_export_gcode_filename("", true, m_print_plate_idx == PLATE_ALL_IDX ? true : false); + } + else { + filename = m_current_project_name; + } + + if (m_print_plate_idx == PLATE_ALL_IDX && filename.empty()) { + filename = _L("Untitled"); + } + + if (filename.empty()) { + filename = m_plater->get_export_gcode_filename("", true); + if (filename.empty()) filename = _L("Untitled"); + } + + if (params.preset_name.empty()) { params.preset_name = wxString::Format("%s_plate_%d", filename, m_print_plate_idx).ToStdString(); } + if (params.project_name.empty()) { params.project_name = filename.ToUTF8(); } + + + + // check access code and ip address + if (obj->connection_type() == "lan") { + /*params.dev_id = m_dev_id; + params.project_name = "verify_job"; + params.filename = job_data._temp_path.string(); + params.connection_type = this->connection_type; + + result = m_agent->start_send_gcode_to_sdcard(params, nullptr, nullptr, nullptr); + if (result != 0) { + BOOST_LOG_TRIVIAL(error) << "access code is invalid"; + m_enter_ip_address_fun_fail(); + m_job_finished = true; + return; + } + + params.project_name = ""; + params.filename = "";*/ + } + else { + if (params.dev_ip.empty()) + params.comments = "no_ip"; + else if (obj->is_support_cloud_print_only) + params.comments = "low_version"; + else if (!obj->has_sdcard()) + params.comments = "no_sdcard"; + else if (params.password.empty()) + params.comments = "no_password"; + } + + return params; +} + +bool SendMultiMachinePage::get_ams_mapping_result(std::string& mapping_array_str, std::string& ams_mapping_info) +{ + if (m_ams_mapping_result.empty()) + return false; + + bool valid_mapping_result = true; + int invalid_count = 0; + for (int i = 0; i < m_ams_mapping_result.size(); i++) { + if (m_ams_mapping_result[i].tray_id == -1) { + valid_mapping_result = false; + invalid_count++; + } + } + + if (invalid_count == m_ams_mapping_result.size()) { + return false; + } + else { + json j = json::array(); + json mapping_info_json = json::array(); + + for (int i = 0; i < wxGetApp().preset_bundle->filament_presets.size(); i++) { + int tray_id = -1; + json mapping_item; + mapping_item["ams"] = tray_id; + mapping_item["targetColor"] = ""; + mapping_item["filamentId"] = ""; + mapping_item["filamentType"] = ""; + + for (int k = 0; k < m_ams_mapping_result.size(); k++) { + if (m_ams_mapping_result[k].id == i) { + tray_id = m_ams_mapping_result[k].tray_id; + mapping_item["ams"] = tray_id; + mapping_item["filamentType"] = m_filaments[k].type; + auto it = wxGetApp().preset_bundle->filaments.find_preset(wxGetApp().preset_bundle->filament_presets[i]); + if (it != nullptr) { + mapping_item["filamentId"] = it->filament_id; + } + //convert #RRGGBB to RRGGBBAA + mapping_item["sourceColor"] = m_filaments[k].color; + mapping_item["targetColor"] = m_ams_mapping_result[k].color; + } + } + j.push_back(tray_id); + mapping_info_json.push_back(mapping_item); + } + mapping_array_str = j.dump(); + ams_mapping_info = mapping_info_json.dump(); + return valid_mapping_result; + } + return true; +} + +void SendMultiMachinePage::on_send(wxCommandEvent& event) +{ + event.Skip(); + BOOST_LOG_TRIVIAL(info) << "SendMultiMachinePage: on_send"; + + int result = m_plater->send_gcode(m_print_plate_idx, [this](int export_stage, int current, int total, bool& cancel) { + if (m_is_canceled) return; + bool cancelled = false; + wxString msg = _L("Preparing print job"); + //m_status_bar->update_status(msg, cancelled, 10, true); + //m_export_3mf_cancel = cancel = cancelled; + }); + + if (m_is_canceled || m_export_3mf_cancel) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_export_3mf_cancel or m_is_canceled"; + //m_status_bar->set_status_text(task_canceled_text); + return; + } + + if (result < 0) { + wxString msg = _L("Abnormal print file data. Please slice again"); + //m_status_bar->set_status_text(msg); + return; + } + + // export config 3mf if needed + result = m_plater->export_config_3mf(m_print_plate_idx); + if (result < 0) { + BOOST_LOG_TRIVIAL(trace) << "export_config_3mf failed, result = " << result; + return; + } + + if (m_is_canceled || m_export_3mf_cancel) { + BOOST_LOG_TRIVIAL(info) << "print_job: m_export_3mf_cancel or m_is_canceled"; + //m_status_bar->set_status_text(task_canceled_text); + return; + } + + + std::vector print_params; + + for (auto it = m_device_items.begin(); it != m_device_items.end(); ++it) { + auto obj = it->second->get_obj(); + + if (obj && obj->is_online() && !obj->can_abort() && !obj->is_in_upgrading() && it->second->get_state_selected() == 1 && it->second->state_printable <= 2) { + + if (!it->second->is_blocking_printing(obj)) { + BBL::PrintParams params = request_params(obj); + print_params.push_back(params); + } + } + } + + if (wxGetApp().getTaskManager()) { + TaskSettings settings; + + try + { + if (app_config->get("sending_interval").empty()) { + app_config->set("sending_interval", "1"); + app_config->save(); + } + + if ( app_config->get("max_send").empty()) { + app_config->set("max_send", "10"); + app_config->save(); + } + + + settings.sending_interval = std::stoi(app_config->get("sending_interval")) * 60; + settings.max_sending_at_same_time = std::stoi(app_config->get("max_send")); + wxGetApp().getTaskManager()->start_print(print_params, &settings); + } + catch (...) + {} + } + //jump to info + EndModal(wxCLOSE); + wxGetApp().mainframe->jump_to_multipage(); +} + +bool SendMultiMachinePage::Show(bool show) +{ + if (show) { + refresh_user_device(); + set_default(); + + m_refresh_timer->Stop(); + m_refresh_timer->SetOwner(this); + m_refresh_timer->Start(4000); + wxPostEvent(this, wxTimerEvent()); + } + else { + m_refresh_timer->Stop(); + Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (dev) { + dev->subscribe_device_list(std::vector()); + } + } + return wxDialog::Show(show); +} + +wxBoxSizer* SendMultiMachinePage::create_item_title(wxString title, wxWindow* parent, wxString tooltip) +{ + wxBoxSizer* m_sizer_title = new wxBoxSizer(wxHORIZONTAL); + + auto m_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + m_title->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_title->SetFont(::Label::Head_13); + m_title->Wrap(-1); + m_title->SetToolTip(tooltip); + + auto m_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); + + m_sizer_title->Add(m_title, 0, wxALIGN_CENTER | wxALL, 3); + m_sizer_title->Add(0, 0, 0, wxLEFT, 9); + wxBoxSizer* sizer_line = new wxBoxSizer(wxVERTICAL); + sizer_line->Add(m_line, 0, wxEXPAND, 0); + m_sizer_title->Add(sizer_line, 1, wxALIGN_CENTER, 0); + + return m_sizer_title; +} + +wxBoxSizer* SendMultiMachinePage::create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param) +{ + wxBoxSizer* m_sizer_checkbox = new wxBoxSizer(wxHORIZONTAL); + m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + auto checkbox = new ::CheckBox(parent); + + checkbox->SetValue((app_config->get("print", param) == "1") ? true : false); + + m_sizer_checkbox->Add(checkbox, 0, wxALIGN_CENTER, 0); + m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); + + auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); + checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetFont(::Label::Body_13); + + auto size = checkbox_title->GetTextExtent(title); + checkbox_title->SetMinSize(wxSize(size.x + FromDIP(5), -1)); + checkbox_title->Wrap(-1); + m_sizer_checkbox->Add(checkbox_title, 0, wxALIGN_CENTER | wxALL, 3); + + // save + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent& e) { + app_config->set_str("print", param, checkbox->GetValue() ? std::string("1") : std::string("0")); + app_config->save(); + e.Skip(); + }); + + checkbox->SetToolTip(tooltip); + m_checkbox_map.emplace(param, checkbox); + return m_sizer_checkbox; +} + +wxBoxSizer* SendMultiMachinePage::create_item_input(wxString str_before, wxString str_after, wxWindow* parent, wxString tooltip, std::string param) +{ + wxBoxSizer* sizer_input = new wxBoxSizer(wxHORIZONTAL); + auto input_title = new wxStaticText(parent, wxID_ANY, str_before); + input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + input_title->SetFont(::Label::Body_13); + input_title->SetToolTip(tooltip); + input_title->Wrap(-1); + + auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); + input->SetBackgroundColor(input_bg); + input->GetTextCtrl()->SetValue(app_config->get(param)); + wxTextValidator validator(wxFILTER_DIGITS); + input->GetTextCtrl()->SetValidator(validator); + + auto second_title = new wxStaticText(parent, wxID_ANY, str_after, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + second_title->SetFont(::Label::Body_13); + second_title->SetToolTip(tooltip); + second_title->Wrap(-1); + + sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 23); + sizer_input->Add(input_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + sizer_input->Add(input, 0, wxALIGN_CENTER_VERTICAL, 0); + sizer_input->Add(0, 0, 0, wxEXPAND | wxLEFT, 3); + sizer_input->Add(second_title, 0, wxALIGN_CENTER_VERTICAL | wxALL, 3); + + input->GetTextCtrl()->Bind(wxEVT_TEXT_ENTER, [this, param, input](wxCommandEvent& e) { + auto value = input->GetTextCtrl()->GetValue(); + app_config->set(param, std::string(value.mb_str())); + app_config->save(); + e.Skip(); + }); + + input->GetTextCtrl()->Bind(wxEVT_KILL_FOCUS, [this, param, input](wxFocusEvent& e) { + auto value = input->GetTextCtrl()->GetValue(); + app_config->set(param, std::string(value.mb_str())); + app_config->save(); + e.Skip(); + }); + + m_input_map.emplace(param, input); + return sizer_input; +} + +wxBoxSizer* SendMultiMachinePage::create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int groupid, std::string param) +{ + wxBoxSizer* radiobox_sizer = new wxBoxSizer(wxHORIZONTAL); + + RadioBox* radiobox = new RadioBox(parent); + radiobox->SetBackgroundColour(wxColour(248, 248, 248)); + radiobox->Bind(wxEVT_LEFT_DOWN, &SendMultiMachinePage::OnSelectRadio, this); + + AmsRadioSelector* rs = new AmsRadioSelector; + rs->m_groupid = groupid; + rs->m_param_name = param; + rs->m_radiobox = radiobox; + rs->m_selected = false; + m_radio_group.Append(rs); + + wxStaticText* text = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize); + radiobox_sizer->Add(radiobox, 0, wxLEFT, FromDIP(23)); + radiobox_sizer->Add(text, 0, wxLEFT, FromDIP(10)); + radiobox->SetToolTip(tooltip); + text->SetToolTip(tooltip); + return radiobox_sizer; +} + +void SendMultiMachinePage::OnSelectRadio(wxMouseEvent& event) +{ + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_radiobox->GetId() == event.GetId()) groupid = rs->m_groupid; + node = node->GetNext(); + } + + node = m_radio_group.GetFirst(); + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_groupid == groupid && rs->m_radiobox->GetId() == event.GetId()) rs->m_radiobox->SetValue(true); + if (rs->m_groupid == groupid && rs->m_radiobox->GetId() != event.GetId()) rs->m_radiobox->SetValue(false); + node = node->GetNext(); + } +} + +void SendMultiMachinePage::on_select_radio(std::string param) +{ + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_param_name == param) groupid = rs->m_groupid; + node = node->GetNext(); + } + + node = m_radio_group.GetFirst(); + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_groupid == groupid && rs->m_param_name == param) rs->m_radiobox->SetValue(true); + if (rs->m_groupid == groupid && rs->m_param_name != param) rs->m_radiobox->SetValue(false); + node = node->GetNext(); + } +} + +bool SendMultiMachinePage::get_value_radio(std::string param) +{ + AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + while (node) { + AmsRadioSelector* rs = node->GetData(); + if (rs->m_groupid == groupid && rs->m_param_name == param) + return rs->m_radiobox->GetValue(); + node = node->GetNext(); + } + return false; +} + +void SendMultiMachinePage::on_set_finish_mapping(wxCommandEvent& evt) +{ + auto selection_data = evt.GetString(); + auto selection_data_arr = wxSplit(selection_data.ToStdString(), '|'); + + BOOST_LOG_TRIVIAL(info) << "The ams mapping selection result: data is " << selection_data; + + if (selection_data_arr.size() == 6) { + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + int old_filament_id = (int)wxAtoi(selection_data_arr[5]); + + int ctype = 0; + std::vector material_cols; + std::vector tray_cols; + for (auto mapping_item : m_mapping_popup->m_mapping_item_list) { + if (mapping_item->m_tray_data.id == evt.GetInt()) { + ctype = mapping_item->m_tray_data.ctype; + material_cols = mapping_item->m_tray_data.material_cols; + for (auto col : mapping_item->m_tray_data.material_cols) { + wxString color = wxString::Format("#%02X%02X%02X%02X", col.Red(), col.Green(), col.Blue(), col.Alpha()); + tray_cols.push_back(color.ToStdString()); + } + break; + } + } + + for (auto i = 0; i < m_ams_mapping_result.size(); i++) { + if (m_ams_mapping_result[i].id == wxAtoi(selection_data_arr[5])) { + m_ams_mapping_result[i].tray_id = evt.GetInt(); + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + wxString color = wxString::Format("#%02X%02X%02X%02X", ams_colour.Red(), ams_colour.Green(), ams_colour.Blue(), ams_colour.Alpha()); + m_ams_mapping_result[i].color = color.ToStdString(); + m_ams_mapping_result[i].ctype = ctype; + m_ams_mapping_result[i].colors = tray_cols; + } + BOOST_LOG_TRIVIAL(trace) << "The ams mapping result: id is " << m_ams_mapping_result[i].id << "tray_id is " << m_ams_mapping_result[i].tray_id; + } + + MaterialHash::iterator iter = m_material_list.begin(); + while (iter != m_material_list.end()) { + Material* item = iter->second; + MaterialItem* m = item->item; + if (item->id == m_current_filament_id) { + auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + m->set_ams_info(ams_colour, selection_data_arr[4], ctype, material_cols); + } + iter++; + } + + } +} + +wxPanel* SendMultiMachinePage::create_page() +{ + auto main_page = new wxPanel(m_main_scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize); + main_page->SetBackgroundColour(*wxWHITE); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + + // add title + m_title_panel = new wxPanel(main_page, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_title_panel->SetBackgroundColour(*wxWHITE); + m_title_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_rename_switch_panel = new wxSimplebook(m_title_panel); + + m_rename_normal_panel = new wxPanel(m_rename_switch_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_rename_normal_panel->SetBackgroundColour(*wxWHITE); + rename_sizer_v = new wxBoxSizer(wxVERTICAL); + rename_sizer_h = new wxBoxSizer(wxHORIZONTAL); + + m_task_name = new wxStaticText(m_rename_normal_panel, wxID_ANY, wxT("MyLabel"), wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + m_task_name->SetFont(::Label::Body_13); + m_task_name->SetMaxSize(wxSize(FromDIP(390), -1)); + m_rename_button = new ScalableButton(m_rename_normal_panel, wxID_ANY, "ams_editable"); + m_rename_button->SetBackgroundColour(*wxWHITE); + rename_sizer_h->Add(m_task_name, 0, wxALIGN_CENTER, 0); + rename_sizer_h->Add(m_rename_button, 0, wxALIGN_CENTER, 0); + rename_sizer_v->Add(rename_sizer_h, 1, wxALIGN_CENTER, 0); + m_rename_normal_panel->SetSizer(rename_sizer_v); + m_rename_normal_panel->Layout(); + rename_sizer_v->Fit(m_rename_normal_panel); + + //rename edit + m_rename_edit_panel = new wxPanel(m_rename_switch_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_rename_edit_panel->SetBackgroundColour(*wxWHITE); + auto rename_edit_sizer_v = new wxBoxSizer(wxVERTICAL); + + m_rename_input = new ::TextInput(m_rename_edit_panel, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); + m_rename_input->GetTextCtrl()->SetFont(::Label::Body_13); + m_rename_input->SetSize(wxSize(FromDIP(220), FromDIP(24))); + m_rename_input->SetMinSize(wxSize(FromDIP(220), FromDIP(24))); + m_rename_input->SetMaxSize(wxSize(FromDIP(220), FromDIP(24))); + m_rename_input->Bind(wxEVT_TEXT_ENTER, [this](auto& e) {on_rename_enter(); }); + m_rename_input->Bind(wxEVT_KILL_FOCUS, [this](auto& e) { + if (!m_rename_input->HasFocus() && !m_task_name->HasFocus()) + on_rename_enter(); + else + e.Skip(); }); + rename_edit_sizer_v->Add(m_rename_input, 1, wxALIGN_CENTER, 0); + + m_rename_edit_panel->SetSizer(rename_edit_sizer_v); + m_rename_edit_panel->Layout(); + rename_edit_sizer_v->Fit(m_rename_edit_panel); + + m_rename_button->Bind(wxEVT_BUTTON, &SendMultiMachinePage::on_rename_click, this); + m_rename_switch_panel->AddPage(m_rename_normal_panel, wxEmptyString, true); + m_rename_switch_panel->AddPage(m_rename_edit_panel, wxEmptyString, false); + Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) { + if (e.GetKeyCode() == WXK_ESCAPE) { + if (m_rename_switch_panel->GetSelection() == 0) { + e.Skip(); + } + else { + m_rename_switch_panel->SetSelection(0); + m_task_name->SetLabel(m_current_project_name); + m_rename_normal_panel->Layout(); + } + } + else { + e.Skip(); + } + }); + + m_text_sizer = new wxBoxSizer(wxVERTICAL); + m_text_sizer->Add(m_rename_switch_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + m_panel_image = new wxPanel(m_title_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); + m_image_sizer = new wxBoxSizer(wxHORIZONTAL); + m_thumbnail_panel = new ThumbnailPanel(m_panel_image); + m_thumbnail_panel->SetSize(wxSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); + m_thumbnail_panel->SetMinSize(wxSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); + m_thumbnail_panel->SetMaxSize(wxSize(THUMBNAIL_SIZE, THUMBNAIL_SIZE)); + m_thumbnail_panel->SetBackgroundColour(*wxRED); + m_image_sizer->Add(m_thumbnail_panel, 0, wxALIGN_CENTER, 0); + m_panel_image->SetSizer(m_image_sizer); + m_panel_image->Layout(); + m_title_sizer->Add(m_panel_image, 0, wxLEFT, 0); + + wxBoxSizer* m_sizer_basic = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* m_sizer_basic_time = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* m_sizer_basic_weight = new wxBoxSizer(wxHORIZONTAL); + + print_time = new ScalableBitmap(m_title_panel, "print-time", 18); + timeimg = new wxStaticBitmap(m_title_panel, wxID_ANY, print_time->bmp(), wxDefaultPosition, wxSize(FromDIP(18), FromDIP(18)), 0); + m_sizer_basic_time->Add(timeimg, 1, wxEXPAND | wxALL, FromDIP(5)); + m_stext_time = new wxStaticText(m_title_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT); + m_sizer_basic_time->Add(m_stext_time, 0, wxALL, FromDIP(5)); + m_sizer_basic->Add(m_sizer_basic_time, 0, wxALIGN_CENTER, 0); + m_sizer_basic->Add(0, 0, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(30)); + + print_weight = new ScalableBitmap(m_title_panel, "print-weight", 18); + weightimg = new wxStaticBitmap(m_title_panel, wxID_ANY, print_weight->bmp(), wxDefaultPosition, wxSize(FromDIP(18), FromDIP(18)), 0); + m_sizer_basic_weight->Add(weightimg, 1, wxEXPAND | wxALL, FromDIP(5)); + m_stext_weight = new wxStaticText(m_title_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + m_sizer_basic_weight->Add(m_stext_weight, 0, wxALL, FromDIP(5)); + m_sizer_basic->Add(m_sizer_basic_weight, 0, wxALIGN_CENTER, 0); + + m_text_sizer->Add(m_sizer_basic, wxALIGN_CENTER, 0); + m_title_sizer->Add(m_text_sizer, 0, wxALIGN_CENTER_VERTICAL, 0); + m_title_panel->SetSizer(m_title_sizer); + m_title_panel->Layout(); + sizer->Add(m_title_panel, 0, wxALIGN_CENTER_HORIZONTAL, 0); + + // add filament + wxBoxSizer* title_filament = create_item_title(_L("Filament"), main_page, ""); + wxBoxSizer* radio_sizer = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer* use_external_sizer = create_item_radiobox(_L("Use External Spool"), main_page, "", 0, "use_external"); + wxBoxSizer* use_ams_sizer = create_item_radiobox(_L("Use AMS"), main_page, "", 0, "use_ams"); + radio_sizer->Add(use_external_sizer, 0, wxLeft, FromDIP(20)); + radio_sizer->Add(use_ams_sizer, 0, wxLeft, FromDIP(5)); + sizer->Add(title_filament, 0, wxEXPAND, 0); + sizer->Add(radio_sizer, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(5)); + on_select_radio("use_external"); + + // add ams item + m_ams_list_sizer = new wxGridSizer(0, 4, 0, FromDIP(5)); + //sync_ams_list(); + sizer->Add(m_ams_list_sizer, 0, wxLEFT, FromDIP(25)); + sizer->AddSpacer(FromDIP(10)); + + // select printer + wxBoxSizer* title_select_printer = create_item_title(_L("Select Printers"), main_page, ""); + + // add table head + StateColor head_bg( + std::pair(TABLE_HEAD_PRESSED_COLOUR, StateColor::Pressed), + std::pair(TABLE_HEAR_NORMAL_COLOUR, StateColor::Normal) + ); + + m_table_head_panel = new wxPanel(main_page, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_table_head_panel->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); + m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_select_checkbox = new CheckBox(m_table_head_panel, wxID_ANY); + m_table_head_sizer->AddSpacer(FromDIP(SEND_LEFT_PADDING_LEFT)); + m_table_head_sizer->Add(m_select_checkbox, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_select_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_select_checkbox->GetValue()) { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + + if (it->second->state_printable <= 2) { + it->second->selected(); + } + } + } + else { + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + it->second->unselected(); + } + } + Refresh(false); + e.Skip(); + }); + + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_printer_name->SetBackgroundColor(head_bg); + m_printer_name->SetCornerRadius(0); + m_printer_name->SetFont(TABLE_HEAD_FONT); + m_printer_name->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_NAME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_printer_name->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_NAME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_printer_name->SetCenter(false); + m_printer_name->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_printer_name->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_printer_name->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_name_big = !device_name_big; + this->m_sort.set_role(SortItem::SortRule::SR_DEV_NAME, device_name_big); + this->refresh_user_device(); + }); + + m_table_head_sizer->Add( 0, 0, 0, wxLEFT, FromDIP(10) ); + m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_device_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_device_status->SetBackgroundColor(head_bg); + m_device_status->SetFont(TABLE_HEAD_FONT); + m_device_status->SetCornerRadius(0); + m_device_status->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_device_status->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_device_status->SetCenter(false); + m_device_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_device_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_device_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_printable_big = !device_printable_big; + this->m_sort.set_role(SortItem::SortRule::SR_PRINTABLE, device_printable_big); + this->refresh_user_device(); + evt.Skip(); + }); + m_table_head_sizer->Add(m_device_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + /*m_task_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); + m_task_status->SetBackgroundColor(head_bg); + m_task_status->SetFont(TABLE_HEAD_FONT); + m_task_status->SetCornerRadius(0); + m_task_status->SetMinSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_status->SetMaxSize(wxSize(FromDIP(SEND_LEFT_DEV_STATUS), FromDIP(DEVICE_ITEM_MAX_HEIGHT))); + m_task_status->SetCenter(false); + m_task_status->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_task_status->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_task_status->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_printable_big = !device_printable_big; + this->m_sort.set_role(SortItem::SortRule::SR_PRINTABLE, device_printable_big); + this->refresh_user_device(); + evt.Skip(); + });*/ + + //m_table_head_sizer->Add(m_task_status, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_ams = new Button(m_table_head_panel, _L("Ams Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); + m_ams->SetBackgroundColor(head_bg); + m_ams->SetCornerRadius(0); + m_ams->SetFont(TABLE_HEAD_FONT); + m_ams->SetMinSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_ams->SetMaxSize(wxSize(FromDIP(TASK_LEFT_SEND_TIME), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_ams->SetCenter(false); + m_ams->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_ams->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_ams->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + device_en_ams_big = !device_en_ams_big; + this->m_sort.set_role(SortItem::SortRule::SR_EN_AMS, device_en_ams_big); + this->refresh_user_device(); + evt.Skip(); + }); + m_table_head_sizer->Add(m_ams, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_refresh_button = new Button(m_table_head_panel, "", "mall_control_refresh", wxNO_BORDER, ICON_SIZE, false); + m_refresh_button->SetBackgroundColor(head_bg); + m_refresh_button->SetCornerRadius(0); + m_refresh_button->SetFont(TABLE_HEAD_FONT); + m_refresh_button->SetMinSize(wxSize(FromDIP(50), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_refresh_button->SetMaxSize(wxSize(FromDIP(50), FromDIP(SEND_ITEM_MAX_HEIGHT))); + m_refresh_button->Bind(wxEVT_ENTER_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_HAND); + }); + m_refresh_button->Bind(wxEVT_LEAVE_WINDOW, [&](wxMouseEvent& evt) { + SetCursor(wxCURSOR_ARROW); + }); + m_refresh_button->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& evt) { + this->refresh_user_device(); + evt.Skip(); + }); + m_table_head_sizer->Add(m_refresh_button, 0, wxALIGN_CENTER_VERTICAL, 0); + + m_table_head_panel->SetSizer(m_table_head_sizer); + m_table_head_panel->Layout(); + + m_tip_text = new wxStaticText(main_page, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_tip_text->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); + m_tip_text->SetLabel(_L("Please select the devices you would like to manage here (up to 6 devices)")); + m_tip_text->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_tip_text->SetFont(::Label::Head_20); + m_tip_text->Wrap(-1); + + auto m_btn_bg_enable = StateColor( + std::pair(wxColour(0, 137, 123), StateColor::Pressed), + std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal) + ); + + m_button_add = new Button(main_page, _L("Add")); + m_button_add->SetBackgroundColor(m_btn_bg_enable); + m_button_add->SetBorderColor(m_btn_bg_enable); + m_button_add->SetTextColor(*wxWHITE); + m_button_add->SetFont(Label::Body_12); + m_button_add->SetCornerRadius(6); + m_button_add->SetMinSize(wxSize(FromDIP(90), FromDIP(36))); + m_button_add->SetMaxSize(wxSize(FromDIP(90), FromDIP(36))); + + m_button_add->Bind(wxEVT_BUTTON, [this](wxCommandEvent& evt) { + MultiMachinePickPage dlg; + dlg.ShowModal(); + refresh_user_device(); + evt.Skip(); + }); + + scroll_macine_list = new wxScrolledWindow(main_page, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(800), FromDIP(300)), wxHSCROLL | wxVSCROLL); + scroll_macine_list->SetBackgroundColour(*wxWHITE); + scroll_macine_list->SetScrollRate(5, 5); + scroll_macine_list->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(SEND_ITEM_MAX_HEIGHT))); + scroll_macine_list->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), 10 * FromDIP(SEND_ITEM_MAX_HEIGHT))); + + sizer_machine_list = new wxBoxSizer(wxVERTICAL); + scroll_macine_list->SetSizer(sizer_machine_list); + scroll_macine_list->Layout(); + + sizer->Add(title_select_printer, 0, wxEXPAND, 0); + sizer->Add(m_table_head_panel, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(40)); + sizer->Add(m_tip_text, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(100)); + sizer->Add(m_button_add, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, FromDIP(20)); + sizer->Add(scroll_macine_list, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(40)); + sizer->AddSpacer(FromDIP(10)); + + // add printing options + wxBoxSizer* title_print_option = create_item_title(_L("Printing Options"), main_page, ""); + wxBoxSizer* item_bed_level = create_item_checkbox(_("Bed Leveling"), main_page, "", 50, "bed_leveling"); + wxBoxSizer* item_timelapse = create_item_checkbox(_("Timelapse"), main_page, "", 50, "timelapse"); + wxBoxSizer* item_flow_dy_ca = create_item_checkbox(_("Flow Dynamic Calibration"), main_page, "", 50, "flow_cali"); + sizer->Add(title_print_option, 0, wxEXPAND, 0); + wxBoxSizer* options_sizer_v = new wxBoxSizer(wxHORIZONTAL); + options_sizer_v->Add(item_bed_level, 0, wxLEFT, 0); + options_sizer_v->Add(item_timelapse, 0, wxLEFT, FromDIP(100)); + sizer->Add(options_sizer_v, 0, wxLEFT, FromDIP(20)); + sizer->Add(item_flow_dy_ca, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(10)); + + // add send option + wxBoxSizer* title_send_option = create_item_title(_L("Send Options"), main_page, ""); + wxBoxSizer* max_printer_send = create_item_input(_L("Send"), _L("printers at the same time.(It depends on how many devices can undergo heating at the same time.)"), main_page, "", "max_send"); + wxBoxSizer* delay_time = create_item_input(_L("Wait"), _L("minute each batch.(It depends on how long it takes to complete the heating.)"), main_page, "", "sending_interval"); + sizer->Add(title_send_option, 0, wxEXPAND, 0); + sizer->Add(max_printer_send, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(3)); + sizer->Add(delay_time, 0, wxLEFT, FromDIP(20)); + sizer->AddSpacer(FromDIP(10)); + + // add send button + btn_bg_enable = StateColor(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered), + std::pair(wxColour(0, 150, 136), StateColor::Normal)); + + m_button_send = new Button(main_page, _L("Send")); + m_button_send->SetBackgroundColor(btn_bg_enable); + m_button_send->SetBorderColor(btn_bg_enable); + m_button_send->SetTextColor(StateColor::darkModeColorFor("#FFFFFE")); + m_button_send->SetSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetMinSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetMinSize(wxSize(FromDIP(120), FromDIP(40))); + m_button_send->SetCornerRadius(FromDIP(5)); + m_button_send->Bind(wxEVT_BUTTON, &SendMultiMachinePage::on_send, this); + //m_button_send->Disable(); + //m_button_send->SetBackgroundColor(wxColour(0x90, 0x90, 0x90)); + //m_button_send->SetBorderColor(wxColour(0x90, 0x90, 0x90)); + sizer->Add(m_button_send, 0, wxALIGN_CENTER, 0); + + main_page->SetSizer(sizer); + main_page->Layout(); + main_page->Fit(); + return main_page; +} + +void SendMultiMachinePage::sync_ams_list() +{ + // for black list + std::vector materials; + std::vector brands; + std::vector display_materials; + std::vector m_filaments_id; + auto preset_bundle = wxGetApp().preset_bundle; + + for (auto filament_name : preset_bundle->filament_presets) { + for (int f_index = 0; f_index < preset_bundle->filaments.size(); f_index++) { + PresetCollection* filament_presets = &wxGetApp().preset_bundle->filaments; + Preset* preset = &filament_presets->preset(f_index); + + if (preset && filament_name.compare(preset->name) == 0) { + std::string display_filament_type; + std::string filament_type = preset->config.get_filament_type(display_filament_type); + std::string m_filament_id = preset->filament_id; + display_materials.push_back(display_filament_type); + materials.push_back(filament_type); + m_filaments_id.push_back(m_filament_id); + + std::string m_vendor_name = ""; + auto vendor = dynamic_cast(preset->config.option("filament_vendor")); + if (vendor && (vendor->values.size() > 0)) { + std::string vendor_name = vendor->values[0]; + m_vendor_name = vendor_name; + } + brands.push_back(m_vendor_name); + } + } + } + + auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders(); + BitmapCache bmcache; + MaterialHash::iterator iter = m_material_list.begin(); + while (iter != m_material_list.end()) { + int id = iter->first; + Material* item = iter->second; + item->item->Destroy(); + delete item; + iter++; + } + + m_ams_list_sizer->Clear(); + m_material_list.clear(); + m_filaments.clear(); + m_ams_mapping_result.clear(); + + for (auto i = 0; i < extruders.size(); i++) { + auto extruder = extruders[i] - 1; + auto colour = wxGetApp().preset_bundle->project_config.opt_string("filament_colour", (unsigned int)extruder); + unsigned char rgb[4]; + bmcache.parse_color4(colour, rgb); + + auto colour_rgb = wxColour((int)rgb[0], (int)rgb[1], (int)rgb[2], (int)rgb[3]); + if (extruder >= materials.size() || extruder < 0 || extruder >= display_materials.size()) continue; + + MaterialItem* item = new MaterialItem(m_main_page, colour_rgb, _L(display_materials[extruder])); + item->set_ams_info(wxColour("#CECECE"), "A1", 0, std::vector()); + m_ams_list_sizer->Add(item, 0, wxALL, FromDIP(4)); + + item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent& e) {}); + item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { + MaterialHash::iterator iter = m_material_list.begin(); + while (iter != m_material_list.end()) { + int id = iter->first; + Material* item = iter->second; + MaterialItem* m = item->item; + m->on_normal(); + iter++; + } + + m_current_filament_id = extruder; + item->on_selected(); + + auto mouse_pos = ClientToScreen(e.GetPosition()); + wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); + + // update ams data + if (get_value_radio("use_ams")) { + if (m_mapping_popup->IsShown()) return; + wxPoint pos = item->ClientToScreen(wxPoint(0, 0)); + pos.y += item->GetRect().height; + m_mapping_popup->Move(pos); + m_mapping_popup->set_parent_item(item); + m_mapping_popup->set_current_filament_id(extruder); + m_mapping_popup->set_tag_texture(materials[extruder]); + m_mapping_popup->update_ams_data_multi_machines(); + m_mapping_popup->Popup(); + } + }); + + Material* material_item = new Material(); + material_item->id = extruder; + material_item->item = item; + m_material_list[i] = material_item; + + // build for ams mapping + if (extruder < materials.size() && extruder >= 0) { + FilamentInfo info; + info.id = extruder; + info.tray_id = 0; + info.type = materials[extruder]; + info.brand = brands[extruder]; + info.filament_id = m_filaments_id[extruder]; + //info.color = wxString::Format("#%02X%02X%02X%02X", colour_rgb.Red(), colour_rgb.Green(), colour_rgb.Blue(), colour_rgb.Alpha()).ToStdString(); + info.color = "#CECECEFF"; + m_filaments.push_back(info); + m_ams_mapping_result.push_back(info); + } + } + + if (extruders.size() <= 8) { + m_ams_list_sizer->SetCols(extruders.size()); + } + else { + m_ams_list_sizer->SetCols(8); + } +} + +void SendMultiMachinePage::set_default_normal(const ThumbnailData& data) +{ + if (data.is_valid()) { + wxImage image(data.width, data.height); + image.InitAlpha(); + for (unsigned int r = 0; r < data.height; ++r) { + unsigned int rr = (data.height - 1 - r) * data.width; + for (unsigned int c = 0; c < data.width; ++c) { + unsigned char* px = (unsigned char*)data.pixels.data() + 4 * (rr + c); + image.SetRGB((int)c, (int)r, px[0], px[1], px[2]); + image.SetAlpha((int)c, (int)r, px[3]); + } + } + image = image.Rescale(THUMBNAIL_SIZE, THUMBNAIL_SIZE); + m_thumbnail_panel->set_thumbnail(image); + } + + m_main_scroll->Layout(); + m_main_scroll->Fit(); + + // basic info + auto aprint_stats = m_plater->get_partplate_list().get_current_fff_print().print_statistics(); + wxString time; + PartPlate* plate = m_plater->get_partplate_list().get_curr_plate(); + if (plate) { + if (plate->get_slice_result()) { time = wxString::Format("%s", short_time(get_time_dhms(plate->get_slice_result()->print_statistics.modes[0].time))); } + } + + char weight[64]; + if (wxGetApp().app_config->get("use_inches") == "1") { + ::sprintf(weight, " %.2f oz", aprint_stats.total_weight * 0.035274); + } + else { + ::sprintf(weight, " %.2f g", aprint_stats.total_weight); + } + + m_stext_time->SetLabel(time); + m_stext_weight->SetLabel(weight); +} + +void SendMultiMachinePage::set_default() +{ + wxString filename = m_plater->get_export_gcode_filename("", true, m_print_plate_idx == PLATE_ALL_IDX ? true : false); + if (m_print_plate_idx == PLATE_ALL_IDX && filename.empty()) { + filename = _L("Untitled"); + } + + if (filename.empty()) { + filename = m_plater->get_export_gcode_filename("", true); + if (filename.empty()) filename = _L("Untitled"); + } + + fs::path filename_path(filename.c_str()); + std::string file_name = filename_path.filename().string(); + if (from_u8(file_name).find(_L("Untitled")) != wxString::npos) { + PartPlate* part_plate = m_plater->get_partplate_list().get_plate(m_print_plate_idx); + if (part_plate) { + if (std::vector objects = part_plate->get_objects_on_this_plate(); objects.size() > 0) { + file_name = objects[0]->name; + for (int i = 1; i < objects.size(); i++) { + file_name += (" + " + objects[i]->name); + } + } + if (file_name.size() > 100) { + file_name = file_name.substr(0, 97) + "..."; + } + } + } + + m_current_project_name = wxString::FromUTF8(file_name); + //unsupported character filter + m_current_project_name = from_u8(filter_characters(m_current_project_name.ToUTF8().data(), "<>[]:/\\|?*\"")); + + m_task_name->SetLabel(m_current_project_name); + + sync_ams_list(); + set_default_normal(m_plater->get_partplate_list().get_curr_plate()->thumbnail_data); +} + +void SendMultiMachinePage::on_rename_enter() +{ + if (m_is_rename_mode == false) { + return; + } + else { + m_is_rename_mode = false; + } + + auto new_file_name = m_rename_input->GetTextCtrl()->GetValue(); + wxString temp; + int num = 0; + for (auto t : new_file_name) { + if (t == wxString::FromUTF8("\x20")) { + num++; + if (num == 1) temp += t; + } + else { + num = 0; + temp += t; + } + } + new_file_name = temp; + auto m_valid_type = Valid; + wxString info_line; + + const char* unusable_symbols = "<>[]:/\\|?*\""; + + const std::string unusable_suffix = PresetCollection::get_suffix_modified(); //"(modified)"; + for (size_t i = 0; i < std::strlen(unusable_symbols); i++) { + if (new_file_name.find_first_of(unusable_symbols[i]) != std::string::npos) { + info_line = _L("Name is invalid;") + "\n" + _L("illegal characters:") + " " + unusable_symbols; + m_valid_type = NoValid; + break; + } + } + + if (m_valid_type == Valid && new_file_name.find(unusable_suffix) != std::string::npos) { + info_line = _L("Name is invalid;") + "\n" + _L("illegal suffix:") + "\n\t" + from_u8(PresetCollection::get_suffix_modified()); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.empty()) { + info_line = _L("The name is not allowed to be empty."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.find_first_of(' ') == 0) { + info_line = _L("The name is not allowed to start with space character."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.find_last_of(' ') == new_file_name.length() - 1) { + info_line = _L("The name is not allowed to end with space character."); + m_valid_type = NoValid; + } + + if (m_valid_type == Valid && new_file_name.size() >= 100) { + info_line = _L("The name length exceeds the limit."); + m_valid_type = NoValid; + } + + if (m_valid_type != Valid) { + MessageDialog msg_wingow(nullptr, info_line, "", wxICON_WARNING | wxOK); + if (msg_wingow.ShowModal() == wxID_OK) { + m_rename_switch_panel->SetSelection(0); + m_task_name->SetLabel(m_current_project_name); + m_rename_normal_panel->Layout(); + return; + } + } + + m_current_project_name = new_file_name; + m_rename_switch_panel->SetSelection(0); + m_task_name->SetLabelText(m_current_project_name); + m_rename_normal_panel->Layout(); +} + +void SendMultiMachinePage::check_fcous_state(wxWindow* window) +{ + check_focus(window); + auto children = window->GetChildren(); + for (auto child : children) { + check_fcous_state(child); + } +} + +void SendMultiMachinePage::check_focus(wxWindow* window) +{ + if (window == m_rename_input || window == m_rename_input->GetTextCtrl()) { + on_rename_enter(); + } +} + +void SendMultiMachinePage::on_rename_click(wxCommandEvent& event) +{ + m_is_rename_mode = true; + m_rename_input->GetTextCtrl()->SetValue(m_current_project_name); + m_rename_switch_panel->SetSelection(1); + m_rename_input->GetTextCtrl()->SetFocus(); + m_rename_input->GetTextCtrl()->SetInsertionPointEnd(); +} + +void SendMultiMachinePage::init_timer() +{ + m_refresh_timer = new wxTimer(); +} + +void SendMultiMachinePage::on_timer(wxTimerEvent& event) +{ + for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { + it->second->sync_state(); + it->second->Refresh(); + } +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp new file mode 100644 index 0000000000..418f8cfa09 --- /dev/null +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -0,0 +1,210 @@ +#ifndef slic3r_SendMultiMachinePage_hpp_ +#define slic3r_SendMultiMachinePage_hpp_ + +#include "GUI_Utils.hpp" +#include "MultiMachine.hpp" +#include "DeviceManager.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/CheckBox.hpp" +#include "Widgets/ComboBox.hpp" +#include "Widgets/ScrolledWindow.hpp" +#include "Widgets/PopupWindow.hpp" +#include "Widgets/TextInput.hpp" +#include "AmsMappingPopup.hpp" +#include "SelectMachine.hpp" + +namespace Slic3r { +namespace GUI { +#define SEND_LEFT_PADDING_LEFT 15 +#define SEND_LEFT_PRINTABLE 40 +#define SEND_LEFT_DEV_NAME 250 +#define SEND_LEFT_DEV_STATUS 250 +#define SEND_LEFT_TAKS_STATUS 180 + +#define DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) +#define DESIGN_GRAY900_COLOR wxColour(38, 46, 48) +#define DESIGN_GRAY800_COLOR wxColour(50, 58, 61) +#define DESIGN_GRAY600_COLOR wxColour(144, 144, 144) +#define DESIGN_GRAY400_COLOR wxColour(166, 169, 170) +#define DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) +#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) +#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) +#define DESIGN_INPUT_SIZE wxSize(FromDIP(50), -1) + +#define MATERIAL_ITEM_SIZE wxSize(FromDIP(64), FromDIP(34)) +#define MATERIAL_ITEM_REAL_SIZE wxSize(FromDIP(62), FromDIP(32)) +#define MAPPING_ITEM_REAL_SIZE wxSize(FromDIP(48), FromDIP(45)) + +#define THUMBNAIL_SIZE FromDIP(128) + +class RadioBox; +class AmsRadioSelector +{ +public: + wxString m_param_name; + int m_groupid; + RadioBox* m_radiobox; + bool m_selected = false; +}; + +WX_DECLARE_LIST(AmsRadioSelector, AmsRadioSelectorList); + +class SendDeviceItem : public DeviceItem +{ + +public: + SendDeviceItem(wxWindow* parent, MachineObject* obj); + ~SendDeviceItem() {}; + + void DrawTextWithEllipsis(wxDC& dc, const wxString& text, int maxWidth, int left, int top = 0); + void OnEnterWindow(wxMouseEvent& evt); + void OnLeaveWindow(wxMouseEvent& evt); + void OnSelectedDevice(wxCommandEvent& evt); + void OnLeftDown(wxMouseEvent& evt); + void OnMove(wxMouseEvent& evt); + + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); + void post_event(wxCommandEvent&& event); + virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + +public: + bool m_hover{false}; + ScalableBitmap m_bitmap_check_disable; + ScalableBitmap m_bitmap_check_off; + ScalableBitmap m_bitmap_check_on; +}; + +class Plater; +class SendMultiMachinePage : public DPIDialog +{ +private: + /* dev_id -> device_item */ + std::map m_device_items; + + wxTimer* m_refresh_timer = nullptr; + + // sort + SortItem m_sort; + bool device_name_big{ true }; + bool device_printable_big{ true }; + bool device_en_ams_big{ true }; + + Button* m_button_send{ nullptr }; + wxScrolledWindow* scroll_macine_list{ nullptr }; + wxBoxSizer* sizer_machine_list{ nullptr }; + Plater* m_plater{ nullptr }; + + int m_print_plate_idx; + bool m_is_canceled{ false }; + bool m_export_3mf_cancel{ false }; + AppConfig* app_config; + + wxPanel* m_main_page{ nullptr }; + wxScrolledWindow* m_main_scroll{ nullptr }; + wxBoxSizer* m_sizer_body{ nullptr }; + wxGridSizer* m_ams_list_sizer{ nullptr }; + AmsMapingPopup* m_mapping_popup{ nullptr }; + + AmsRadioSelectorList m_radio_group; + MaterialHash m_material_list; + std::map m_checkbox_map; + std::map m_input_map; + std::vector m_filaments; + std::vector m_ams_mapping_result; + int m_current_filament_id{ 0 }; + + StateColor btn_bg_enable; + + // table head + wxPanel* m_table_head_panel{ nullptr }; + wxBoxSizer* m_table_head_sizer{ nullptr }; + CheckBox* m_select_checkbox{ nullptr }; + Button* m_printer_name{ nullptr }; + Button* m_device_status{ nullptr }; + //Button* m_task_status{ nullptr }; + Button* m_ams{ nullptr }; + Button* m_refresh_button{ nullptr }; + + // rename + wxSimplebook* m_rename_switch_panel{ nullptr }; + wxPanel* m_rename_normal_panel{ nullptr }; + wxPanel* m_rename_edit_panel{ nullptr }; + TextInput* m_rename_input{ nullptr }; + ScalableButton* m_rename_button{ nullptr }; + wxBoxSizer* rename_sizer_v{ nullptr }; + wxBoxSizer* rename_sizer_h{ nullptr }; + wxStaticText* m_task_name{ nullptr }; + wxString m_current_project_name; + bool m_is_rename_mode{ false }; + + // title and thumbnail + wxPanel* m_title_panel{ nullptr }; + wxBoxSizer* m_title_sizer{ nullptr }; + wxBoxSizer* m_text_sizer{ nullptr }; + ScalableBitmap* m_print_time{ nullptr }; + wxStaticBitmap* m_time_img{ nullptr }; + wxStaticText* m_stext_time{ nullptr }; + wxStaticText* m_stext_weight{ nullptr }; + wxStaticBitmap* timeimg{ nullptr }; + ScalableBitmap* print_time{ nullptr }; + wxStaticBitmap* weightimg{ nullptr }; + ScalableBitmap* print_weight{ nullptr }; + wxBoxSizer* m_thumbnail_sizer{ nullptr }; + ThumbnailPanel* m_thumbnail_panel{nullptr}; + wxPanel* m_panel_image{ nullptr }; + wxBoxSizer* m_image_sizer{ nullptr }; + + // tip when no device + wxStaticText* m_tip_text{ nullptr }; + Button* m_button_add{ nullptr }; + +public: + SendMultiMachinePage(Plater* plater = nullptr); + ~SendMultiMachinePage(); + + void prepare(int plate_idx); + + void on_dpi_changed(const wxRect& suggested_rect); + void on_sys_color_changed(); + void refresh_user_device(); + void on_send(wxCommandEvent& event); + bool Show(bool show); + + BBL::PrintParams request_params(MachineObject* obj); + + bool get_ams_mapping_result(std::string& mapping_array_str, std::string& ams_mapping_info); + wxBoxSizer* create_item_title(wxString title, wxWindow* parent, wxString tooltip); + wxBoxSizer* create_item_checkbox(wxString title, wxWindow* parent, wxString tooltip, int padding_left, std::string param); + wxBoxSizer* create_item_input(wxString str_before, wxString str_after, wxWindow* parent, wxString tooltip, std::string param); + wxBoxSizer* create_item_radiobox(wxString title, wxWindow* parent, wxString tooltip, int groupid, std::string param); + + wxPanel* create_page(); + void sync_ams_list(); + void set_default_normal(const ThumbnailData& data); + void set_default(); + void on_rename_enter(); + void check_fcous_state(wxWindow* window); + void check_focus(wxWindow* window); + +protected: + void OnSelectRadio(wxMouseEvent& event); + void on_select_radio(std::string param); + bool get_value_radio(std::string param); + void on_set_finish_mapping(wxCommandEvent& evt); + void on_rename_click(wxCommandEvent& event); + + void on_timer(wxTimerEvent& event); + void init_timer(); + +private: + +}; + + +} // namespace GUI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 6c55a27b4f..80fe7199a7 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -84,7 +84,8 @@ static std::vector message_containing_retry{ "07FF 8011", "07FF 8012", "07FF 8013", - "12FF 8007" + "12FF 8007", + "1200 8006" }; static std::vector message_containing_done{ @@ -1779,6 +1780,14 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co Bind(EVT_FAN_CHANGED, &StatusPanel::on_fan_changed, this); Bind(EVT_SECONDARY_CHECK_DONE, &StatusPanel::on_print_error_done, this); Bind(EVT_SECONDARY_CHECK_RESUME, &StatusPanel::on_subtask_pause_resume, this); + Bind(EVT_PRINT_ERROR_STOP, &StatusPanel::on_subtask_abort, this); + Bind(EVT_LOAD_VAMS_TRAY, &StatusPanel::on_ams_load_vams, this); + Bind(EVT_JUMP_TO_LIVEVIEW, [this](wxCommandEvent& e) { + m_media_play_ctrl->jump_to_play(); + if (m_print_error_dlg) + m_print_error_dlg->on_hide(); + }); + m_switch_speed->Connect(wxEVT_LEFT_DOWN, wxCommandEventHandler(StatusPanel::on_switch_speed), NULL, this); m_calibration_btn->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_start_calibration), NULL, this); @@ -1933,6 +1942,8 @@ void StatusPanel::on_subtask_pause_resume(wxCommandEvent &event) } if (m_print_error_dlg) { m_print_error_dlg->on_hide(); + }if (m_print_error_dlg_no_action) { + m_print_error_dlg_no_action->on_hide(); } } @@ -2156,52 +2167,76 @@ void StatusPanel::show_recenter_dialog() { obj->command_go_home(); } -void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::string print_error_str) +void StatusPanel::show_error_message(MachineObject* obj, wxString msg, std::string print_error_str, wxString image_url, std::vector used_button) { if (msg.IsEmpty()) { error_info_reset(); } else { m_project_task_panel->show_error_msg(msg); - auto it_retry = std::find(message_containing_retry.begin(), message_containing_retry.end(), print_error_str); - auto it_done = std::find(message_containing_done.begin(), message_containing_done.end(), print_error_str); - auto it_resume = std::find(message_containing_resume.begin(), message_containing_resume.end(), print_error_str); + if (!used_button.empty()) { + BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; + if (m_print_error_dlg == nullptr) { + m_print_error_dlg = new PrintErrorDialog(this->GetParent(), wxID_ANY, _L("Error")); + } - BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; - if (m_print_error_dlg == nullptr) { - m_print_error_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); - } + m_print_error_dlg->update_title_style(_L("Error"), used_button, this); + m_print_error_dlg->update_text_image(msg, image_url); + m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + if (obj) { + obj->command_clean_print_error(obj->subtask_id_, obj->print_error); + } + }); - if (it_done != message_containing_done.end() && it_retry != message_containing_retry.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::DONE_AND_RETRY, this); - } - else if (it_done != message_containing_done.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_DONE, this); - } - else if (it_retry != message_containing_retry.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RETRY, this); - } - else if (it_resume!= message_containing_resume.end()) { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RESUME, this); + m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { + if (m_ams_control) { + m_ams_control->on_retry(); + } + }); + + m_print_error_dlg->on_show(); } else { - m_print_error_dlg->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); + //old error code dialog + auto it_retry = std::find(message_containing_retry.begin(), message_containing_retry.end(), print_error_str); + auto it_done = std::find(message_containing_done.begin(), message_containing_done.end(), print_error_str); + auto it_resume = std::find(message_containing_resume.begin(), message_containing_resume.end(), print_error_str); + + BOOST_LOG_TRIVIAL(info) << "show print error! error_msg = " << msg; + if (m_print_error_dlg_no_action == nullptr) { + m_print_error_dlg_no_action = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM); + } + + if (it_done != message_containing_done.end() && it_retry != message_containing_retry.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::DONE_AND_RETRY, this); + } + else if (it_done != message_containing_done.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_DONE, this); + } + else if (it_retry != message_containing_retry.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RETRY, this); + } + else if (it_resume != message_containing_resume.end()) { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::CONFIRM_AND_RESUME, this); + } + else { + m_print_error_dlg_no_action->update_title_style(_L("Warning"), SecondaryCheckDialog::ButtonStyle::ONLY_CONFIRM, this); + } + m_print_error_dlg_no_action->update_text(msg); + m_print_error_dlg_no_action->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + if (obj) { + obj->command_clean_print_error(obj->subtask_id_, obj->print_error); + } + }); + + m_print_error_dlg_no_action->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { + if (m_ams_control) { + m_ams_control->on_retry(); + } + }); + + m_print_error_dlg_no_action->on_show(); } - m_print_error_dlg->update_text(msg); - - m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { - if (obj) { - obj->command_clean_print_error(obj->subtask_id_, obj->print_error); - } - }); - - m_print_error_dlg->Bind(EVT_SECONDARY_CHECK_RETRY, [this, obj](wxCommandEvent& e) { - if (m_ams_control) { - m_ams_control->on_retry(); - } - }); - - m_print_error_dlg->on_show(); wxGetApp().mainframe->RequestUserAttention(wxUSER_ATTENTION_ERROR); } } @@ -2224,13 +2259,19 @@ void StatusPanel::update_error_message() } wxString error_msg = wxGetApp().get_hms_query()->query_print_error_msg(obj->print_error); + std::vector used_button; + wxString error_image_url = wxGetApp().get_hms_query()->query_print_error_url_action(obj->print_error,obj->dev_id, used_button); + // special case + if (print_error_str == "0300 8003" || print_error_str == "0300 8002" || print_error_str == "0300 800A") + used_button.emplace_back(PrintErrorDialog::PrintErrorButton::JUMP_TO_LIVEVIEW); if (!error_msg.IsEmpty()) { wxDateTime now = wxDateTime::Now(); - wxString show_time = now.Format("%H:%M:%S"); - error_msg = wxString::Format("%s[%s %s]", + wxString show_time = now.Format("%Y-%m-%d %H:%M:%S"); + + error_msg = wxString::Format("%s\n[%s %s]", error_msg, print_error_str, show_time); - show_error_message(obj, error_msg, print_error_str); + show_error_message(obj, error_msg, print_error_str,error_image_url,used_button); } else { BOOST_LOG_TRIVIAL(info) << "show print error! error_msg is empty, print error = " << obj->print_error; } @@ -2531,6 +2572,7 @@ void StatusPanel::update_ams(MachineObject *obj) m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag); m_ams_setting_dlg->update_remain_mode(obj->ams_calibrate_remain_flag); m_ams_setting_dlg->update_switch_filament(obj->ams_auto_switch_filament_flag); + m_ams_setting_dlg->update_air_printing_detection(obj->ams_air_print_status); } } if (m_filament_setting_dlg) { m_filament_setting_dlg->obj = obj; } @@ -3515,6 +3557,16 @@ void StatusPanel::on_ams_load_curr() } } +void StatusPanel::on_ams_load_vams(wxCommandEvent& event) { + BOOST_LOG_TRIVIAL(info) << "on_ams_load_vams_tray"; + + m_ams_control->SwitchAms(std::to_string(VIRTUAL_TRAY_ID)); + on_ams_load_curr(); + if (m_print_error_dlg) { + m_print_error_dlg->on_hide(); + } +} + void StatusPanel::on_ams_unload(SimpleEvent &event) { if (obj) { obj->command_ams_switch(255); } @@ -3839,6 +3891,8 @@ void StatusPanel::on_print_error_done(wxCommandEvent& event) obj->command_ams_control("done"); if (m_print_error_dlg) { m_print_error_dlg->on_hide(); + }if (m_print_error_dlg_no_action) { + m_print_error_dlg_no_action->on_hide(); } } } diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index d82c6371b6..eee2fafdfe 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -452,6 +452,7 @@ public: wxBoxSizer *create_settings_group(wxWindow *parent); void show_ams_group(bool show = true); + MediaPlayCtrl* get_media_play_ctrl() {return m_media_play_ctrl;}; }; @@ -471,7 +472,8 @@ protected: CalibrationDialog* calibration_dlg {nullptr}; AMSMaterialsSetting *m_filament_setting_dlg{nullptr}; - SecondaryCheckDialog* m_print_error_dlg = nullptr; + PrintErrorDialog* m_print_error_dlg = nullptr; + SecondaryCheckDialog* m_print_error_dlg_no_action = nullptr; SecondaryCheckDialog* abort_dlg = nullptr; SecondaryCheckDialog* con_load_dlg = nullptr; SecondaryCheckDialog* ctrl_e_hint_dlg = nullptr; @@ -524,7 +526,7 @@ protected: void on_subtask_pause_resume(wxCommandEvent &event); void on_subtask_abort(wxCommandEvent &event); void on_print_error_clean(wxCommandEvent &event); - void show_error_message(MachineObject* obj, wxString msg, std::string print_error_str = ""); + void show_error_message(MachineObject* obj, wxString msg, std::string print_error_str = "",wxString image_url="",std::vector used_button=std::vector()); void error_info_reset(); void show_recenter_dialog(); @@ -553,6 +555,7 @@ protected: void on_ams_load(SimpleEvent &event); void update_filament_step(); void on_ams_load_curr(); + void on_ams_load_vams(wxCommandEvent& event); void on_ams_unload(SimpleEvent &event); void on_ams_filament_backup(SimpleEvent& event); void on_ams_setting_click(SimpleEvent& event); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index a59f4b6af9..c0f2c02d3c 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2129,6 +2129,8 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("infill_wall_overlap"); optgroup->append_single_option_line("infill_direction"); + optgroup->append_single_option_line("solid_infill_direction"); + optgroup->append_single_option_line("rotate_solid_infill_direction"); optgroup->append_single_option_line("bridge_angle"); optgroup->append_single_option_line("minimum_sparse_infill_area"); optgroup->append_single_option_line("infill_combination"); @@ -4994,12 +4996,12 @@ void Tab::clear_pages() { // invalidated highlighter, if any exists m_highlighter.invalidate(); - // clear pages from the controlls - for (auto p : m_pages) - p->clear(); //BBS: clear page in Parent //m_page_sizer->Clear(true); m_parent->clear_page(); + // clear pages from the controlls + for (auto p : m_pages) + p->clear(); // nulling pointers m_parent_preset_description_line = nullptr; diff --git a/src/slic3r/GUI/TaskManager.cpp b/src/slic3r/GUI/TaskManager.cpp new file mode 100644 index 0000000000..0c4169ad9a --- /dev/null +++ b/src/slic3r/GUI/TaskManager.cpp @@ -0,0 +1,400 @@ +#include "TaskManager.hpp" + +#include "libslic3r/Thread.hpp" +#include "nlohmann/json.hpp" +#include "MainFrame.hpp" +#include "GUI_App.hpp" + +using namespace nlohmann; + +namespace Slic3r { +wxDEFINE_EVENT(EVT_MULTI_SEND_LIMIT, wxCommandEvent); + +int TaskManager::MaxSendingAtSameTime = 5; +int TaskManager::SendingInterval = 180; + +std::string get_task_state_enum_str(TaskState ts) +{ + switch (ts) { + case TaskState::TS_PENDING: + return "task pending"; + case TaskState::TS_SENDING: + return "task sending"; + case TaskState::TS_SEND_COMPLETED: + return "task sending completed"; + case TaskState::TS_SEND_CANCELED: + return "task sending canceled"; + case TaskState::TS_SEND_FAILED: + return "task sending failed"; + case TaskState::TS_PRINTING: + return "task printing"; + case TaskState::TS_PRINT_SUCCESS: + return "task print success"; + case TaskState::TS_PRINT_FAILED: + return "task print failed"; + case TaskState::TS_IDLE: + return "task idle"; + case TaskState::TS_REMOVED: + return "task removed"; + default: + assert(false); + } + return "unknown task state"; +} + +TaskState parse_task_status(int status) +{ + switch (status) + { + case 1: + return TaskState::TS_PRINTING; + case 2: + return TaskState::TS_PRINT_SUCCESS; + case 3: + return TaskState::TS_PRINT_FAILED; + case 4: + return TaskState::TS_PRINTING; + default: + return TaskState::TS_PRINTING; + } + return TaskState::TS_PRINTING; +} + +int TaskStateInfo::g_task_info_id = 0; + +TaskStateInfo::TaskStateInfo(BBL::PrintParams param) + : m_state(TaskState::TS_PENDING) + , m_params(param) + , m_sending_percent(0) + , m_state_changed_fn(nullptr) + , m_cancel(false) +{ + task_info_id = ++TaskStateInfo::g_task_info_id; + + this->set_task_name(param.project_name); + this->set_device_name(param.dev_name); + + cancel_fn = [this]() { + return m_cancel; + }; + update_status_fn = [this](int stage, int code, std::string msg) { + + if (stage == PrintingStageLimit) + { + //limit + //wxCommandEvent event(EVT_MULTI_SEND_LIMIT); + //wxPostEvent(this, event); + GUI::wxGetApp().mainframe->CallAfter([]() { + GUI::wxGetApp().show_dialog("The printing task exceeds the limit, supporting a maximum of 6 printers."); + }); + } + + const int StagePercentPoint[(int)PrintingStageFinished + 1] = { + 10, // PrintingStageCreate + 25, // PrintingStageUpload + 70, // PrintingStageWaiting + 75, // PrintingStageRecord + 90, // PrintingStageSending + 95, // PrintingStageFinished + 100 // PrintingStageFinished + }; + BOOST_LOG_TRIVIAL(trace) << "task_manager: update task, " << m_params.dev_id << ", stage = " << stage << "code = " << code; + // update current percnet + int curr_percent = 0; + if (stage >= 0 && stage <= (int)PrintingStageFinished) { + curr_percent = StagePercentPoint[stage]; + if ((stage == BBL::SendingPrintJobStage::PrintingStageUpload + || stage == BBL::SendingPrintJobStage::PrintingStageRecord) + && (code > 0 && code <= 100)) { + curr_percent = (StagePercentPoint[stage + 1] - StagePercentPoint[stage]) * code / 100 + StagePercentPoint[stage]; + BOOST_LOG_TRIVIAL(trace) << "task_manager: percent = " << curr_percent; + } + } + + BOOST_LOG_TRIVIAL(trace) << "task_manager: update task, curr_percent = " << curr_percent; + update_sending_percent(curr_percent); + }; + + wait_fn = [this](int status, std::string job_info) { + BOOST_LOG_TRIVIAL(info) << "task_manager: get_job_info = " << job_info; + m_job_id = job_info; + return true; + }; +} + +void TaskStateInfo::cancel() +{ + m_cancel = true; + if (m_state == TaskState::TS_PENDING) + m_state = TaskState::TS_REMOVED; + update(); +} + +bool TaskGroup::need_schedule(std::chrono::system_clock::time_point last, TaskStateInfo* task) +{ + /* only pending task will be scheduled */ + if (task->state() != TaskState::TS_PENDING) + return false; + std::chrono::system_clock::time_point curr_time = std::chrono::system_clock::now(); + auto diff = std::chrono::duration_cast(curr_time - last); + if (diff.count() > TaskManager::SendingInterval * 1000) { + BOOST_LOG_TRIVIAL(trace) << "task_manager: diff count = " << diff.count() << " milliseconds"; + return true; + } + return false; +} + +void TaskManager::set_max_send_at_same_time(int count) +{ + TaskManager::MaxSendingAtSameTime = count; +} + +TaskManager::TaskManager(NetworkAgent* agent) + :m_agent(agent) +{ + ; +} + + +int TaskManager::start_print(const std::vector& params, TaskSettings* settings) +{ + BOOST_LOG_TRIVIAL(info) << "task_manager: start_print size = " << params.size(); + TaskManager::MaxSendingAtSameTime = settings->max_sending_at_same_time; + TaskManager::SendingInterval = settings->sending_interval; + m_map_mutex.lock(); + TaskGroup task_group(*settings); + task_group.tasks.reserve(params.size()); + for (auto it = params.begin(); it != params.end(); it++) { + TaskStateInfo* new_item = new TaskStateInfo(*it); + task_group.append(new_item); + } + m_cache_map.push_back(task_group); + m_map_mutex.unlock(); + return 0; +} + +static int start_print_test(BBL::PrintParams& params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn) +{ + int tick = 2; + for (int i = 0; i < 100 * tick; i++) { + boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); + if (cancel_fn) { + if (cancel_fn()) { + return -1; + } + } + if (i == tick) { + if (update_fn) update_fn(PrintingStageCreate, 0, ""); + } + if (i >= 20 * tick && i <= 70 * tick) { + int percent = (i - 20 * tick) * 2 / tick; + if (update_fn) update_fn(PrintingStageUpload, percent, ""); + } + + if (i == 80 * tick) + if (update_fn) update_fn(PrintingStageSending, 0, ""); + if (i == 99 * tick) + if (update_fn) update_fn(PrintingStageFinished, 0, ""); + } + return 0; +} + +int TaskManager::schedule(TaskStateInfo* task) +{ + if (!m_agent) { + assert(false); + return -1; + } + if (task->state() != TaskState::TS_PENDING) + return 0; + assert(task->state() == TaskState::TS_PENDING); + task->set_state(TaskState::TS_SENDING); + + BOOST_LOG_TRIVIAL(trace) << "task_manager: schedule a task to dev_id = " << task->params().dev_id; + boost::thread* new_sending_thread = new boost::thread(); + *new_sending_thread = Slic3r::create_thread( + [this, task] { + if (!m_agent) { + BOOST_LOG_TRIVIAL(trace) << "task_manager: NetworkAgent is nullptr"; + return; + } + assert(m_agent); +// DEBUG FOR TEST +#if 0 + int result = start_print_test(task->get_params(), task->update_status_fn, task->cancel_fn, task->wait_fn); +#else + int result = m_agent->start_print(task->get_params(), task->update_status_fn, task->cancel_fn, task->wait_fn); +#endif + if (result == 0) { + last_sent_timestamp = std::chrono::system_clock::now(); + task->set_sent_time(last_sent_timestamp); + task->set_state(TaskState::TS_SEND_COMPLETED); + } + else { + if (!task->is_canceled()) { + task->set_state(TaskState::TS_SEND_FAILED); + } else { + task->set_state(TaskState::TS_SEND_CANCELED); + } + } + + /* remove from sending task list */ + m_scedule_mutex.lock(); + auto it = std::find(m_scedule_list.begin(), m_scedule_list.end(), task); + if (it != m_scedule_list.end()) { + BOOST_LOG_TRIVIAL(trace) << "task_manager: schedule, scedule task has removed from list"; + m_scedule_list.erase(it); + } + else { + /*assert(false);*/ + } + m_scedule_mutex.unlock(); + } + ); + m_sending_thread_list.push_back(new_sending_thread); + return 0; +} + +void TaskManager::start() +{ + if (m_started) { + return; + } + m_started = true; + m_scedule_thread = Slic3r::create_thread( + [this] { + BOOST_LOG_TRIVIAL(trace) << "task_manager: thread start()"; + while (m_started) { + m_map_mutex.lock(); + for (auto it = m_cache_map.begin(); it != m_cache_map.end(); it++) { + for (auto iter = it->tasks.begin(); iter != it->tasks.end(); iter++) { + m_scedule_mutex.lock(); + if (m_scedule_list.size() < TaskManager::MaxSendingAtSameTime + && it->need_schedule(last_sent_timestamp, *iter)) { + m_scedule_list.push_back(*iter); + } + m_scedule_mutex.unlock(); + } + } + m_map_mutex.unlock(); + if (!m_scedule_list.empty()) { + //BOOST_LOG_TRIVIAL(trace) << "task_manager: need scedule task count = " << m_scedule_list.size(); + m_scedule_mutex.lock(); + for (auto it = m_scedule_list.begin(); it != m_scedule_list.end(); it++) { + this->schedule(*it); + } + m_scedule_mutex.unlock(); + } + boost::this_thread::sleep_for(boost::chrono::milliseconds(100)); + } + BOOST_LOG_TRIVIAL(trace) << "task_manager: thread exit()"; + }); +} + +void TaskManager::stop() +{ + m_started = false; + if (m_scedule_thread.joinable()) + m_scedule_thread.join(); +} + +std::map TaskManager::get_local_task_list() +{ + std::map out; + m_map_mutex.lock(); + for (auto it = m_cache_map.begin(); it != m_cache_map.end(); it++) { + for (auto iter = (*it).tasks.begin(); iter != (*it).tasks.end(); iter++) { + if ((*iter)->state() == TaskState::TS_PENDING + || (*iter)->state() == TaskState::TS_SENDING + || (*iter)->state() == TaskState::TS_SEND_CANCELED + || (*iter)->state() == TaskState::TS_SEND_COMPLETED + || (*iter)->state() == TaskState::TS_SEND_FAILED) { + out.insert(std::make_pair((*iter)->task_info_id, *iter)); + } + } + } + m_map_mutex.unlock(); + return out; +} + +std::map TaskManager::get_task_list(int curr_page, int page_count, int& total) +{ + std::map out; + if (m_agent) { + BBL::TaskQueryParams task_query_params; + task_query_params.limit = page_count; + task_query_params.offset = curr_page * page_count; + std::string task_info; + int result = m_agent->get_user_tasks(task_query_params, &task_info); + BOOST_LOG_TRIVIAL(trace) << "task_manager: get_task_list task_info=" << task_info; + if (result == 0) { + try { + json j = json::parse(task_info); + if (j.contains("total")) { + total = j["total"].get(); + } + if (!j.contains("hits")) { + return out; + } + BOOST_LOG_TRIVIAL(trace) << "task_manager: get_task_list task count =" << j["hits"].size(); + for (auto& hit : j["hits"]) { + TaskStateInfo task_info; + int64_t design_id = 0; + if (hit.contains("designId")) { + design_id = hit["designId"].get(); + } + if (design_id > 0 && hit.contains("designTitle")) { + task_info.set_task_name(hit["designTitle"].get()); + } else { + if (hit.contains("title")) + task_info.set_task_name(hit["title"].get()); + } + if (hit.contains("deviceName")) + task_info.set_device_name(hit["deviceName"].get()); + if (hit.contains("deviceId")) + task_info.params().dev_id = hit["deviceId"].get(); + if (hit.contains("id")) + task_info.set_job_id(std::to_string(hit["id"].get())); + if (hit.contains("status")) + task_info.set_state(parse_task_status(hit["status"].get())); + if (hit.contains("cover")) + task_info.thumbnail_url = hit["cover"].get(); + if (hit.contains("startTime")) + task_info.start_time = hit["startTime"].get(); + if (hit.contains("endTime")) + task_info.end_time = hit["endTime"].get(); + if (hit.contains("profileId")) + task_info.profile_id = std::to_string(hit["profileId"].get()); + if (!task_info.get_job_id().empty()) + out.insert(std::make_pair(task_info.get_job_id(), task_info)); + } + } + catch(...) { + } + } + } + return out; +} + +TaskState TaskManager::query_task_state(std::string dev_id) +{ + /* priority: TS_SENDING > TS_PENDING > TS_IDLE */ + TaskState ts = TaskState::TS_IDLE; + m_map_mutex.lock(); + for (auto& task_group : m_cache_map) { + for (auto it = task_group.tasks.begin(); it != task_group.tasks.end(); it++) { + if ((*it)->params().dev_id == dev_id) { + if ((*it)->state() == TS_SENDING) { + m_map_mutex.unlock(); + return TS_SENDING; + } else if ((*it)->state() == TS_PENDING) { + ts = TS_PENDING; + } + } + } + } + m_map_mutex.unlock(); + return ts; +} + +} // namespace Slic3r diff --git a/src/slic3r/GUI/TaskManager.hpp b/src/slic3r/GUI/TaskManager.hpp new file mode 100644 index 0000000000..5a2abd5a83 --- /dev/null +++ b/src/slic3r/GUI/TaskManager.hpp @@ -0,0 +1,182 @@ +#ifndef slic3r_TaskManager_hpp_ +#define slic3r_TaskManager_hpp_ + +#include "DeviceManager.hpp" +#include +#include + +namespace Slic3r { + +enum TaskState +{ + TS_PENDING = 0, + TS_SENDING, + TS_SEND_COMPLETED, + TS_SEND_CANCELED, + TS_SEND_FAILED, + TS_PRINTING, + /* queray in Machine Object: IDLE, PREPARE, RUNNING, PAUSE, FINISH, FAILED, SLICING */ + TS_PRINT_SUCCESS, + TS_PRINT_FAILED, + TS_REMOVED, + TS_IDLE, +}; + +std::string get_task_state_enum_str(TaskState ts); + +class TaskStateInfo +{ +public: + static int g_task_info_id; + typedef std::function StateChangedFn; + + TaskStateInfo(const BBL::PrintParams param); + + TaskStateInfo() { + task_info_id = ++TaskStateInfo::g_task_info_id; + } + + TaskState state() { return m_state; } + void set_state(TaskState ts) { + BOOST_LOG_TRIVIAL(trace) << "TaskStateInfo set state = " << get_task_state_enum_str(ts); + m_state = ts; + if (m_state_changed_fn) { + m_state_changed_fn(m_state, m_sending_percent); + } + } + BBL::PrintParams get_params() { return m_params; } + + BBL::PrintParams& params() { return m_params; } + + std::string get_job_id(){return profile_id;} + + void update_sending_percent(int percent) { + m_sending_percent = percent; + update(); + } + void set_sent_time(std::chrono::system_clock::time_point time) { + sent_time = time; + update(); + } + void set_state_changed_fn(StateChangedFn fn) { + m_state_changed_fn = fn; + update(); + } + void set_cancel_fn(WasCancelledFn fn) { + cancel_fn = fn; + } + + void set_task_name(std::string name) { m_task_name = name; } + void set_device_name(std::string name) { m_device_name = name; } + void set_job_id(std::string job_id) { m_job_id = job_id; } + + void update() { + if (m_state_changed_fn) { + m_state_changed_fn(m_state, m_sending_percent); + } + } + + void cancel(); + bool is_canceled() { return m_cancel; } + + std::string get_device_name() {return m_device_name;}; + std::string get_task_name() {return m_task_name;}; + std::string get_sent_time() { + std::time_t time = std::chrono::system_clock::to_time_t(sent_time); + std::tm* timeInfo = std::localtime(&time); + + std::stringstream ss; + ss << std::put_time(timeInfo, "%Y-%m-%d %H:%M:%S"); + std::string str = ss.str(); + return str; + }; + + /* sending timelapse */ + std::chrono::system_clock::time_point sent_time; + WasCancelledFn cancel_fn; + OnUpdateStatusFn update_status_fn; + OnWaitFn wait_fn; + std::string thumbnail_url; + std::string start_time; + std::string end_time; + std::string profile_id; + int task_info_id; +private: + bool m_cancel; + TaskState m_state; + std::string m_task_name; + std::string m_device_name; + BBL::PrintParams m_params; + int m_sending_percent; + std::string m_job_id; + StateChangedFn m_state_changed_fn; +}; + +class TaskSettings +{ +public: + int sending_interval { 180 }; /* sending a job every 60 seconds */ + int max_sending_at_same_time { 1 }; +}; + +class TaskGroup +{ +public: + std::vector tasks; + TaskSettings settings; + + TaskGroup(TaskSettings s) + : settings(s) + { + } + + void append(TaskStateInfo* task) { + this->tasks.push_back(task); + } + + bool need_schedule(std::chrono::system_clock::time_point last, TaskStateInfo* task); +}; + +class TaskManager +{ +public: + static int MaxSendingAtSameTime; + static int SendingInterval; + TaskManager(NetworkAgent* agent); + + int start_print(const std::vector& params, TaskSettings* settings = nullptr); + + static void set_max_send_at_same_time(int count); + + void start(); + void stop(); + + std::map get_local_task_list(); + + /* curr_page is start with 0 */ + std::map get_task_list(int curr_page, int page_count, int& total); + + TaskState query_task_state(std::string dev_id); + +private: + int schedule(TaskStateInfo* task); + + boost::thread m_scedule_thread; + + std::vector m_cache_map; + std::mutex m_map_mutex; + /* sending task list */ + std::vector m_scedule_list; + std::vector m_sending_thread_list; + std::mutex m_scedule_mutex; + bool m_started { false }; + NetworkAgent* m_agent { nullptr }; + + std::chrono::system_clock::time_point last_sent_timestamp; +}; + + +wxDECLARE_EVENT(EVT_MULTI_SEND_LIMIT, wxCommandEvent); +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 03f41a85da..a0ca677065 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -810,7 +810,7 @@ UnsavedChangesDialog::UnsavedChangesDialog(Preset::Type type, PresetCollection * : m_new_selected_preset_name(new_selected_preset) , DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, - _L("Actions For Unsaved Changes"), + _L("Transfer or discard changes"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) @@ -896,7 +896,7 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_ wxBoxSizer *top_title_oldv = new wxBoxSizer(wxVERTICAL); wxBoxSizer *top_title_oldv_h = new wxBoxSizer(wxHORIZONTAL); - static_oldv_title = new wxStaticText(m_panel_oldv, wxID_ANY, _L("Preset Value"), wxDefaultPosition, wxDefaultSize, 0); + static_oldv_title = new wxStaticText(m_panel_oldv, wxID_ANY, _L("Old Value"), wxDefaultPosition, wxDefaultSize, 0); static_oldv_title->SetFont(::Label::Body_13); static_oldv_title->Wrap(-1); static_oldv_title->SetForegroundColour(*wxWHITE); @@ -915,7 +915,7 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_ wxBoxSizer *top_title_newv = new wxBoxSizer(wxVERTICAL); wxBoxSizer *top_title_newv_h = new wxBoxSizer(wxHORIZONTAL); - static_newv_title = new wxStaticText(m_panel_newv, wxID_ANY, _L("Modified Value"), wxDefaultPosition, wxDefaultSize, 0); + static_newv_title = new wxStaticText(m_panel_newv, wxID_ANY, _L("New Value"), wxDefaultPosition, wxDefaultSize, 0); static_newv_title->SetFont(::Label::Body_13); static_newv_title->Wrap(-1); static_newv_title->SetForegroundColour(*wxWHITE); @@ -1011,19 +1011,19 @@ void UnsavedChangesDialog::build(Preset::Type type, PresetCollection *dependent_ if (dependent_presets && switched_presets && (type == dependent_presets->type() ? dependent_presets->get_edited_preset().printer_technology() == dependent_presets->find_preset(new_selected_preset)->printer_technology() : switched_presets->get_edited_preset().printer_technology() == switched_presets->find_preset(new_selected_preset)->printer_technology())) - add_btn(&m_transfer_btn, m_move_btn_id, "menu_paste", Action::Transfer, /*switched_presets->get_edited_preset().name == new_selected_preset ? */_L("Transfer Modified Value"), true); + add_btn(&m_transfer_btn, m_move_btn_id, "menu_paste", Action::Transfer, switched_presets->get_edited_preset().name == new_selected_preset ? _L("Transfer") : _L("Transfer"), true); } if (!m_transfer_btn && (ActionButtons::KEEP & m_buttons)) - add_btn(&m_transfer_btn, m_move_btn_id, "menu_paste", Action::Transfer, _L("Transfer Modified Value"), true); + add_btn(&m_transfer_btn, m_move_btn_id, "menu_paste", Action::Transfer, _L("Transfer"), true); { // "Don't save" / "Discard" button std::string btn_icon = (ActionButtons::DONT_SAVE & m_buttons) ? "" : (dependent_presets || (ActionButtons::KEEP & m_buttons)) ? "blank_16" : "exit"; - wxString btn_label = (ActionButtons::DONT_SAVE & m_buttons) ? _L("Don't save") : _L("Use Preset Value"); + wxString btn_label = (ActionButtons::DONT_SAVE & m_buttons) ? _L("Don't save") : _L("Discard"); add_btn(&m_discard_btn, m_continue_btn_id, btn_icon, Action::Discard, btn_label, false); } // "Save" button - if (ActionButtons::SAVE & m_buttons) add_btn(&m_save_btn, m_save_btn_id, "save", Action::Save, _L("Save Modified Value"), false); + if (ActionButtons::SAVE & m_buttons) add_btn(&m_save_btn, m_save_btn_id, "save", Action::Save, _L("Save"), false); /* ScalableButton *cancel_btn = new ScalableButton(this, wxID_CANCEL, "cross", _L("Cancel"), wxDefaultSize, wxDefaultPosition, wxBORDER_DEFAULT, true, 24); buttons->Add(cancel_btn, 1, wxLEFT | wxRIGHT, 5); @@ -1429,18 +1429,18 @@ void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent if (dependent_presets) { action_msg = format_wxstr(_L("You have changed some settings of preset \"%1%\". "), dependent_presets->get_edited_preset().name); if (!m_transfer_btn) { - action_msg += _L("\nWould you like to save these changed settings(modified value)?"); + action_msg += _L("\nYou can save or discard the preset values you have modified."); } else { - action_msg += _L("\nWould you like to keep these changed settings(modified value) after switching preset?"); + action_msg += _L("\nYou can save or discard the preset values you have modified, or choose to transfer the values you have modified to the new preset."); } } else { - action_msg = _L("You have previously modified your settings and are about to overwrite them with new ones."); + action_msg = _L("You have previously modified your settings."); if (m_transfer_btn) - action_msg += _L("\nDo you want to keep your current modified settings, or use preset settings?"); + action_msg += _L("\nYou can discard the preset values you have modified, or choose to transfer the modified values to the new project"); else - action_msg += _L("\nDo you want to save your current modified settings?"); + action_msg += _L("\nYou can save or discard the preset values you have modified."); } - + m_action_line->SetLabel(action_msg); update_tree(type, presets); @@ -1533,7 +1533,6 @@ void UnsavedChangesDialog::update_list() text_left->SetFont(::Label::Head_13); text_left->Wrap(-1); text_left->SetForegroundColour(GREY700); - text_left->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOTEXT)); sizer_left_v->Add(text_left, 0, wxLEFT, 37); @@ -1562,7 +1561,6 @@ void UnsavedChangesDialog::update_list() text_left->SetFont(::Label::Body_13); text_left->Wrap(-1); text_left->SetForegroundColour(GREY700); - text_left->SetForegroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_INFOTEXT)); sizer_left_v->Add(text_left, 0, wxLEFT, 51 ); diff --git a/src/slic3r/GUI/UserManager.cpp b/src/slic3r/GUI/UserManager.cpp new file mode 100644 index 0000000000..29f5f2d137 --- /dev/null +++ b/src/slic3r/GUI/UserManager.cpp @@ -0,0 +1,76 @@ +#include "libslic3r/libslic3r.h" +#include "UserManager.hpp" +#include "DeviceManager.hpp" +#include "NetworkAgent.hpp" +#include "GUI.hpp" +#include "GUI_App.hpp" +#include "MsgDialog.hpp" + + +namespace Slic3r { + +UserManager::UserManager(NetworkAgent* agent) +{ + m_agent = agent; +} + +UserManager::~UserManager() +{ +} + +void UserManager::set_agent(NetworkAgent* agent) +{ + m_agent = agent; +} + +int UserManager::parse_json(std::string payload) +{ + bool restored_json = false; + json j; + json j_pre = json::parse(payload); + if (j_pre.empty()) { + return -1; + } + + //bind/unbind + + try { + if (j_pre.contains("bind")) { + if (j_pre["bind"].contains("command")) { + + //bind + if (j_pre["bind"]["command"].get() == "bind") { + std::string dev_id; + std:; string result; + + if (j_pre["bind"].contains("dev_id")) { + dev_id = j_pre["bind"]["dev_id"].get(); + } + + if (j_pre["bind"].contains("result")) { + result = j_pre["bind"]["result"].get(); + } + + if (result == "success") { + DeviceManager* dev = GUI::wxGetApp().getDeviceManager(); + if (!dev) {return -1;} + + if (GUI::wxGetApp().m_ping_code_binding_dialog && GUI::wxGetApp().m_ping_code_binding_dialog->IsShown()) { + GUI::wxGetApp().m_ping_code_binding_dialog->EndModal(wxCLOSE); + GUI::MessageDialog msgdialog(nullptr, _L("Log in successful."), "", wxAPPLY | wxOK); + msgdialog.ShowModal(); + } + dev->update_user_machine_list_info(); + dev->set_selected_machine(dev_id); + return 0; + } + } + } + } + } + catch (...){} + + return -1; +} + +} // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/UserManager.hpp b/src/slic3r/GUI/UserManager.hpp new file mode 100644 index 0000000000..a7f402cbac --- /dev/null +++ b/src/slic3r/GUI/UserManager.hpp @@ -0,0 +1,36 @@ +#ifndef slic3r_UserManager_hpp_ +#define slic3r_UserManager_hpp_ + +#include +#include +#include +#include +#include +#include +#include +#include "nlohmann/json.hpp" +#include "slic3r/Utils/json_diff.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" + + +using namespace nlohmann; + +namespace Slic3r { + +class NetworkAgent; + +class UserManager +{ +private: + NetworkAgent* m_agent { nullptr }; + +public: + UserManager(NetworkAgent* agent = nullptr); + ~UserManager(); + + void set_agent(NetworkAgent* agent); + int parse_json(std::string payload); +}; +} // namespace Slic3r + +#endif // slic3r_UserManager_hpp_ diff --git a/src/slic3r/GUI/UserNotification.cpp b/src/slic3r/GUI/UserNotification.cpp new file mode 100644 index 0000000000..81ee408297 --- /dev/null +++ b/src/slic3r/GUI/UserNotification.cpp @@ -0,0 +1,5 @@ +#include "UserNotification.hpp" + +namespace Slic3r { + +} // namespace Slic3r diff --git a/src/slic3r/GUI/UserNotification.hpp b/src/slic3r/GUI/UserNotification.hpp new file mode 100644 index 0000000000..6dcba1b2c5 --- /dev/null +++ b/src/slic3r/GUI/UserNotification.hpp @@ -0,0 +1,20 @@ +#ifndef slic3r_UserNotification_hpp_ +#define slic3r_UserNotification_hpp_ + + +namespace Slic3r { + +enum class UserNotificationStyle { + UNS_NORMAL, + UNS_WARNING_CONFIRM, +}; + +class UserNotification +{ +public: + UserNotification() {} +}; + +} // namespace Slic3r + +#endif diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 86f8a2a0d4..fa5bd9f6ce 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -13,6 +13,7 @@ #include #include +#include #include #include #include @@ -1061,11 +1062,11 @@ int GuideFrame::LoadProfile() //intptr_t handle; //_finddata_t findData; - //handle = _findfirst(TargetFolderSearch.mb_str(), &findData); // 查找目录中的第一个文件 + //handle = _findfirst(TargetFolderSearch.mb_str(), &findData); // ??????????? //if (handle == -1) { return -1; } //do { - // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // 是否是子目录并且不为"."或".." + // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".." // { // // cout << findData.name << "\t\n"; // } else { @@ -1073,11 +1074,12 @@ int GuideFrame::LoadProfile() // LoadProfileFamily(strVendor, TargetFolder + findData.name); // } - //} while (_findnext(handle, &findData) == 0); // 查找目录中的下一个文件 + //} while (_findnext(handle, &findData) == 0); // ??????????? // BBS: change directories by design //BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", will load config from %1%.") % bbl_bundle_path; m_ProfileJson = json::parse("{}"); + //m_ProfileJson["configpath"] = Slic3r::data_dir(); m_ProfileJson["model"] = json::array(); m_ProfileJson["machine"] = json::object(); m_ProfileJson["filament"] = json::object(); @@ -1098,11 +1100,11 @@ int GuideFrame::LoadProfile() // intptr_t handle; //_finddata_t findData; - //handle = _findfirst((bbl_bundle_path / "*.json").make_preferred().string().c_str(), &findData); // 查找目录中的第一个文件 + //handle = _findfirst((bbl_bundle_path / "*.json").make_preferred().string().c_str(), &findData); // ??????????? // if (handle == -1) { return -1; } // do { - // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // 是否是子目录并且不为"."或".." + // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".." // { // // cout << findData.name << "\t\n"; // } else { @@ -1110,7 +1112,7 @@ int GuideFrame::LoadProfile() // LoadProfileFamily(w2s(strVendor), vendor_dir.make_preferred().string() + "\\"+ findData.name); // } - //} while (_findnext(handle, &findData) == 0); // 查找目录中的下一个文件 + //} while (_findnext(handle, &findData) == 0); // ??????????? //load BBL bundle from user data path @@ -1124,9 +1126,10 @@ int GuideFrame::LoadProfile() } else { //cout << "is a file" << endl; //cout << iter->path().string() << endl; + wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast( '\\'); - strVendor = strVendor.AfterLast('/'); + strVendor = strVendor.AfterLast('\/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); if (w2s(strVendor) == PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json") == 0) @@ -1145,7 +1148,7 @@ int GuideFrame::LoadProfile() //cout << iter->path().string() << endl; wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast( '\\'); - strVendor = strVendor.AfterLast('/'); + strVendor = strVendor.AfterLast('\/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); if (w2s(strVendor) != PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json")==0) @@ -1545,7 +1548,7 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath json pm = json::parse(contents); std::string strInstant = pm["instantiation"]; - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Load Filament:" << s1 << ",Path:" << sub_file << ",instantiation:" << strInstant; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Load Filament:" << s1 << ",Path:" << sub_file << ",instantiation?" << strInstant; if (strInstant == "true") { std::string sV; @@ -1639,7 +1642,7 @@ std::string GuideFrame::w2s(wxString sSrc) void GuideFrame::GetStardardFilePath(std::string &FilePath) { StrReplace(FilePath, "\\", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); - StrReplace(FilePath, "/", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); + StrReplace(FilePath, "\/", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); } bool GuideFrame::LoadFile(std::string jPath, std::string &sContent) diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index 35784465ae..ea2fea852c 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -87,7 +87,7 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo wxColour(255, 255, 255); } - if (obj->get_printer_series() == PrinterSeries::SERIES_X1 && it->second->is_tray_info_ready()) { + if (it->second->is_tray_info_ready() && obj->cali_version >= 0) { CalibUtils::get_pa_k_n_value_by_cali_idx(obj, it->second->cali_idx, info.k, info.n); } else { @@ -648,7 +648,6 @@ void AMSLib::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const w m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14); m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14); m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68); - m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 68); m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 80); m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 80); @@ -840,7 +839,7 @@ void AMSLib::render_extra_text(wxDC& dc) void AMSLib::render_generic_text(wxDC &dc) { bool show_k_value = true; - if (m_obj && (m_obj->get_printer_series() == PrinterSeries::SERIES_X1) && (abs(m_info.k - 0) < 1e-3)) { + if (m_obj && (m_obj->cali_version >= 0) && (abs(m_info.k - 0) < 1e-3)) { show_k_value = false; } @@ -867,7 +866,7 @@ void AMSLib::render_generic_text(wxDC &dc) dc.SetFont(::Label::Body_13); dc.SetTextForeground(temp_text_colour); auto alpha = m_info.material_colour.Alpha(); - if (alpha != 0 && alpha != 255) { + if (alpha != 0 && alpha != 255 && alpha != 254) { dc.SetTextForeground(*wxBLACK); } @@ -1116,6 +1115,9 @@ void AMSLib::render_generic_lib(wxDC &dc) // selected if (m_selected) { dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); + if (tmp_lib_colour.Alpha() == 0) { + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(),tmp_lib_colour.Blue(),128), 2, wxSOLID)); + } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { dc.DrawRectangle(0, 0, size.x, size.y); @@ -1147,17 +1149,37 @@ void AMSLib::render_generic_lib(wxDC &dc) } //draw remain + auto alpha = m_info.material_colour.Alpha(); int height = size.y - FromDIP(8); - int curr_height = height * float(m_info.material_remain * 1.0 / 100.0); dc.SetFont(::Label::Body_13); + int curr_height = height * float(m_info.material_remain * 1.0 / 100.0); + dc.SetFont(::Label::Body_13); int top = height - curr_height; if (curr_height >= FromDIP(6)) { //transparent - auto alpha = m_info.material_colour.Alpha(); + if (alpha == 0) { - dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(4), FromDIP(4)); + dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4)); + } + else if (alpha != 255 && alpha != 254) { + if (transparent_changed) { + std::string rgb = (tmp_lib_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString(); + if (rgb.size() == 9) { + //delete alpha value + rgb = rgb.substr(0, rgb.size() - 2); + } + float alpha_f = 0.7 * tmp_lib_colour.Alpha() / 255.0; + std::vector replace; + replace.push_back(rgb); + std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f); + replace.push_back(fill_replace); + m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68, false, false, true, replace); + transparent_changed = false; + + } + dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4)); } //gradient if (m_info.material_cols.size() > 1) { @@ -1214,34 +1236,29 @@ void AMSLib::render_generic_lib(wxDC &dc) } } else { + auto brush = dc.GetBrush(); + if (alpha != 0 && alpha != 255 && alpha != 254) dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); #ifdef __APPLE__ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius); #else dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1); - if (alpha != 0 && alpha != 255) { - if (transparent_changed) { - std::string rgb = (tmp_lib_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString(); - if (rgb.size() == 8) { - //delete alpha value - rgb= rgb.substr(0, rgb.size() - 2); - } - float alpha_f = 0.3 * tmp_lib_colour.Alpha() / 255.0; - std::vector replace; - replace.push_back(rgb); - std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f); - replace.push_back(fill_replace); - m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68, false, false, true, replace); - transparent_changed = false; - } - dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4)); - } #endif + dc.SetBrush(brush); } } if (top > 2) { if (curr_height >= FromDIP(6)) { dc.DrawRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), FromDIP(2)); + if (alpha != 255 && alpha != 254) { + dc.SetPen(wxPen(*wxWHITE)); + dc.SetBrush(wxBrush(*wxWHITE)); +#ifdef __APPLE__ + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) , size.x - FromDIP(8), top, m_radius); +#else + dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) , size.x - FromDIP(8), top, m_radius - 1); +#endif + } if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -1303,7 +1320,7 @@ void AMSLib::Update(Caninfo info, bool refresh) if (dev->get_selected_machine() && dev->get_selected_machine() != m_obj) { m_obj = dev->get_selected_machine(); } - if (info.material_colour.Alpha() != 0 && info.material_colour.Alpha() != 255 && m_info.material_colour != info.material_colour) { + if (info.material_colour.Alpha() != 0 && info.material_colour.Alpha() != 255 && info.material_colour.Alpha() != 254 && m_info.material_colour != info.material_colour) { transparent_changed = true; } m_info = info; @@ -1341,9 +1358,7 @@ bool AMSLib::Enable(bool enable) { return wxWindow::Enable(enable); } void AMSLib::msw_rescale() { - //m_bitmap_transparent.msw_rescale(); - m_bitmap_transparent_def.msw_rescale(); - + m_bitmap_transparent.msw_rescale(); } /************************************************* @@ -2542,7 +2557,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons wxBoxSizer *m_sizer_button = new wxBoxSizer(wxVERTICAL); wxBoxSizer *m_sizer_button_area = new wxBoxSizer(wxHORIZONTAL); - m_button_extruder_feed = new Button(m_button_area, _L("Load Filament")); + m_button_extruder_feed = new Button(m_button_area, _L("Load")); m_button_extruder_feed->SetFont(Label::Body_13); m_button_extruder_feed->SetBackgroundColor(btn_bg_green); @@ -2558,8 +2573,9 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (wxGetApp().app_config->get("language") == "ja_JP") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_feed->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_feed->SetFont(Label::Body_9); + if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_feed->SetFont(Label::Body_9); - m_button_extruder_back = new Button(m_button_area, _L("Unload Filament")); + m_button_extruder_back = new Button(m_button_area, _L("Unload")); m_button_extruder_back->SetBackgroundColor(btn_bg_white); m_button_extruder_back->SetBorderColor(btn_bd_white); m_button_extruder_back->SetTextColor(btn_text_white); @@ -2573,6 +2589,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (wxGetApp().app_config->get("language") == "ja_JP") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "sv_SE") m_button_extruder_back->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_extruder_back->SetFont(Label::Body_9); + if (wxGetApp().app_config->get("language") == "uk_UA") m_button_extruder_back->SetFont(Label::Body_9); m_sizer_button_area->Add(0, 0, 1, wxEXPAND, 0); m_sizer_button_area->Add(m_button_extruder_back, 0, wxLEFT, FromDIP(6)); @@ -2754,6 +2771,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (wxGetApp().app_config->get("language") == "ja_JP") m_button_guide->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "sv_SE") m_button_guide->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_guide->SetFont(Label::Body_9); + if (wxGetApp().app_config->get("language") == "uk_UA") m_button_guide->SetFont(Label::Body_9); m_button_guide->SetCornerRadius(FromDIP(12)); m_button_guide->SetBorderColor(btn_bd_white); @@ -2771,6 +2789,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons if (wxGetApp().app_config->get("language") == "ja_JP") m_button_retry->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "sv_SE") m_button_retry->SetFont(Label::Body_9); if (wxGetApp().app_config->get("language") == "cs_CZ") m_button_retry->SetFont(Label::Body_9); + if (wxGetApp().app_config->get("language") == "uk_UA") m_button_retry->SetFont(Label::Body_9); m_button_retry->SetCornerRadius(FromDIP(12)); m_button_retry->SetBorderColor(btn_bd_white); @@ -2831,7 +2850,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons wxBoxSizer *sizer_err_calibration_v = new wxBoxSizer(wxVERTICAL); m_hyperlink = new wxHyperlinkCtrl(m_calibration_err_panel, wxID_ANY, wxEmptyString, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE); m_hyperlink->SetVisitedColour(wxColour(31, 142, 234)); - auto m_tip_calibration_err = new wxStaticText(m_calibration_err_panel, wxID_ANY, _L("A problem occured during calibration. Click to view the solution."), wxDefaultPosition, + auto m_tip_calibration_err = new wxStaticText(m_calibration_err_panel, wxID_ANY, _L("A problem occurred during calibration. Click to view the solution."), wxDefaultPosition, wxDefaultSize, 0); m_tip_calibration_err->SetFont(::Label::Body_14); m_tip_calibration_err->SetForegroundColour(AMS_CONTROL_GRAY700); @@ -3286,7 +3305,7 @@ void AMSControl::show_vams_kn_value(bool show) void AMSControl::update_vams_kn_value(AmsTray tray, MachineObject* obj) { m_vams_lib->m_obj = obj; - if (obj->get_printer_series() == PrinterSeries::SERIES_X1) { + if (obj->cali_version >= 0) { float k_value = 0; float n_value = 0; CalibUtils::get_pa_k_n_value_by_cali_idx(obj, tray.cali_idx, k_value, n_value); @@ -3304,10 +3323,6 @@ void AMSControl::update_vams_kn_value(AmsTray tray, MachineObject* obj) m_vams_info.material_name = tray.get_display_filament_type(); m_vams_info.material_colour = tray.get_color(); m_vams_lib->m_info.material_name = tray.get_display_filament_type(); - auto col= tray.get_color(); - if (col.Alpha() != 0 && col.Alpha() != 255 && col.Alpha() != 254 && m_vams_lib->m_info.material_colour != col) { - m_vams_lib->transparent_changed = true; - } m_vams_lib->m_info.material_colour = tray.get_color(); m_vams_lib->Refresh(); } @@ -3596,7 +3611,7 @@ void AMSControl::ShowFilamentTip(bool hasams) m_simplebook_right->SetSelection(0); if (hasams) { m_tip_right_top->Show(); - m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filiament.")); + m_tip_load_info->SetLabelText(_L("Choose an AMS slot then press \"Load\" or \"Unload\" button to automatically load or unload filaments.")); } else { // m_tip_load_info->SetLabelText(_L("Before loading, please make sure the filament is pushed into toolhead.")); m_tip_right_top->Hide(); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index f4854fc928..afcee66365 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -299,7 +299,6 @@ public: Caninfo m_info; MachineObject* m_obj = {nullptr}; int m_can_index = 0; - bool transparent_changed = { false }; AMSModel m_ams_model; void Update(Caninfo info, bool refresh = true); @@ -324,7 +323,6 @@ protected: ScalableBitmap m_bitmap_readonly; ScalableBitmap m_bitmap_readonly_light; ScalableBitmap m_bitmap_transparent; - ScalableBitmap m_bitmap_transparent_def; ScalableBitmap m_bitmap_extra_tray_left; ScalableBitmap m_bitmap_extra_tray_right; @@ -341,7 +339,7 @@ protected: bool m_hover = {false}; bool m_show_kn = {false}; bool m_support_cali = {false}; - + bool transparent_changed = {false}; double m_radius = {4}; wxColour m_border_color; diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 7e49b303a4..8ebddd95b6 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -143,6 +143,11 @@ void Button::SetValue(bool state) bool Button::GetValue() const { return state_handler.states() & StateHandler::Checked; } +void Button::SetCenter(bool isCenter) +{ + this->isCenter = isCenter; +} + void Button::Rescale() { if (this->active_icon.bmp().IsOk()) @@ -199,9 +204,11 @@ void Button::render(wxDC& dc) } // move to center wxRect rcContent = { {0, 0}, size }; - wxSize offset = (size - szContent) / 2; - if (offset.x < 0) offset.x = 0; - rcContent.Deflate(offset.x, offset.y); + if (isCenter) { + wxSize offset = (size - szContent) / 2; + if (offset.x < 0) offset.x = 0; + rcContent.Deflate(offset.x, offset.y); + } // start draw wxPoint pt = rcContent.GetLeftTop(); if (icon.bmp().IsOk()) { diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 2f5c8eaea0..d3496c0e49 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -17,6 +17,7 @@ class Button : public StaticBox bool pressedDown = false; bool m_selected = true; bool canFocus = true; + bool isCenter = true; static const int buttonWidth = 200; static const int buttonHeight = 50; @@ -54,6 +55,8 @@ public: bool GetValue() const; + void SetCenter(bool isCenter); + void Rescale(); protected: diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index 4cc2d34250..ce9db292a7 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -39,7 +39,7 @@ ComboBox::ComboBox(wxWindow *parent, int n, const wxString choices[], long style) - : drop(texts, icons) + : drop(texts, tips, icons) { if (style & wxCB_READONLY) style |= wxRIGHT; @@ -55,7 +55,7 @@ ComboBox::ComboBox(wxWindow *parent, std::make_pair(0x009688, (int) StateColor::Hovered), std::make_pair(0xDBDBDB, (int) StateColor::Normal))); TextInput::SetBackgroundColor(StateColor(std::make_pair(0xF0F0F1, (int) StateColor::Disabled), - std::make_pair(0xEDFAF2, (int) StateColor::Focused), + std::make_pair(0xE5F0EE, (int) StateColor::Focused), // ORCA updated background color for focused item std::make_pair(*wxWHITE, (int) StateColor::Normal))); TextInput::SetLabelColor(StateColor(std::make_pair(0x909090, (int) StateColor::Disabled), std::make_pair(0x262E30, (int) StateColor::Normal))); @@ -155,6 +155,7 @@ int ComboBox::Append(const wxString &item, void * clientData) { texts.push_back(item); + tips.push_back(wxString{}); icons.push_back(bitmap); datas.push_back(clientData); types.push_back(wxClientData_None); @@ -164,8 +165,8 @@ int ComboBox::Append(const wxString &item, void ComboBox::DoClear() { - SetIcon("drop_down"); texts.clear(); + tips.clear(); icons.clear(); datas.clear(); types.clear(); @@ -176,6 +177,7 @@ void ComboBox::DoDeleteOneItem(unsigned int pos) { if (pos >= texts.size()) return; texts.erase(texts.begin() + pos); + tips.erase(tips.begin() + pos); icons.erase(icons.begin() + pos); datas.erase(datas.begin() + pos); types.erase(types.begin() + pos); @@ -197,6 +199,18 @@ void ComboBox::SetString(unsigned int n, wxString const &value) if (n == drop.GetSelection()) SetLabel(value); } +wxString ComboBox::GetItemTooltip(unsigned int n) const +{ + if (n >= texts.size()) return wxString(); + return tips[n]; +} + +void ComboBox::SetItemTooltip(unsigned int n, wxString const &value) { + if (n >= texts.size()) return; + tips[n] = value; + if (n == drop.GetSelection()) drop.SetToolTip(value); +} + wxBitmap ComboBox::GetItemBitmap(unsigned int n) { return icons[n]; } void ComboBox::SetItemBitmap(unsigned int n, wxBitmap const &bitmap) @@ -214,6 +228,7 @@ int ComboBox::DoInsertItems(const wxArrayStringsAdapter &items, if (pos > texts.size()) return -1; for (int i = 0; i < items.GetCount(); ++i) { texts.insert(texts.begin() + pos, items[i]); + tips.insert(tips.begin() + pos, wxString{}); icons.insert(icons.begin() + pos, wxNullBitmap); datas.insert(datas.begin() + pos, clientData ? clientData[i] : NULL); types.insert(types.begin() + pos, type); diff --git a/src/slic3r/GUI/Widgets/ComboBox.hpp b/src/slic3r/GUI/Widgets/ComboBox.hpp index 82b719d6fe..d4b74f4df7 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.hpp +++ b/src/slic3r/GUI/Widgets/ComboBox.hpp @@ -10,6 +10,7 @@ class ComboBox : public wxWindowWithItems { std::vector texts; + std::vector tips; std::vector icons; std::vector datas; std::vector types; @@ -59,9 +60,13 @@ public: wxString GetString(unsigned int n) const override; void SetString(unsigned int n, wxString const &value) override; + wxString GetItemTooltip(unsigned int n) const; + void SetItemTooltip(unsigned int n, wxString const &value); + wxBitmap GetItemBitmap(unsigned int n); void SetItemBitmap(unsigned int n, wxBitmap const &bitmap); bool is_drop_down(){return drop_down;} + void DeleteOneItem(unsigned int pos) { DoDeleteOneItem(pos); } protected: virtual int DoInsertItems(const wxArrayStringsAdapter &items, unsigned int pos, diff --git a/src/slic3r/GUI/Widgets/DropDown.cpp b/src/slic3r/GUI/Widgets/DropDown.cpp index 23a344e5ad..ab48a27d2d 100644 --- a/src/slic3r/GUI/Widgets/DropDown.cpp +++ b/src/slic3r/GUI/Widgets/DropDown.cpp @@ -31,24 +31,27 @@ END_EVENT_TABLE() */ DropDown::DropDown(std::vector &texts, + std::vector &tips, std::vector &icons) : texts(texts) + , tips(tips) , icons(icons) , state_handler(this) , border_color(0xDBDBDB) , text_color(0x363636) , selector_border_color(std::make_pair(0x009688, (int) StateColor::Hovered), std::make_pair(*wxWHITE, (int) StateColor::Normal)) - , selector_background_color(std::make_pair(0xEDFAF2, (int) StateColor::Checked), + , selector_background_color(std::make_pair(0xBFE1DE, (int) StateColor::Checked), // ORCA updated background color for checked item std::make_pair(*wxWHITE, (int) StateColor::Normal)) { } DropDown::DropDown(wxWindow * parent, std::vector &texts, + std::vector &tips, std::vector &icons, long style) - : DropDown(texts, icons) + : DropDown(texts, tips, icons) { Create(parent, style); } @@ -306,7 +309,7 @@ void DropDown::render(wxDC &dc) if (!text_off && !text.IsEmpty()) { wxSize tSize = dc.GetMultiLineTextExtent(text); if (pt.x + tSize.x > rcContent.GetRight()) { - if (i == hover_item) + if (i == hover_item && tips[i].IsEmpty()) SetToolTip(text); text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, rcContent.GetRight() - pt.x); @@ -459,7 +462,7 @@ void DropDown::mouseMove(wxMouseEvent &event) if (hover >= (int) texts.size()) hover = -1; if (hover == hover_item) return; hover_item = hover; - SetToolTip(""); + if (hover >= 0) SetToolTip(tips[hover]); } paintNow(); } @@ -482,7 +485,7 @@ void DropDown::mouseWheelMoved(wxMouseEvent &event) if (hover >= (int) texts.size()) hover = -1; if (hover != hover_item) { hover_item = hover; - if (hover >= 0) SetToolTip(texts[hover]); + if (hover >= 0) SetToolTip(tips[hover]); } paintNow(); } diff --git a/src/slic3r/GUI/Widgets/DropDown.hpp b/src/slic3r/GUI/Widgets/DropDown.hpp index 86f14aa278..e3cf9b4531 100644 --- a/src/slic3r/GUI/Widgets/DropDown.hpp +++ b/src/slic3r/GUI/Widgets/DropDown.hpp @@ -16,6 +16,7 @@ wxDECLARE_EVENT(EVT_DISMISS, wxCommandEvent); class DropDown : public PopupWindow { std::vector & texts; + std::vector & tips; std::vector & icons; bool need_sync = false; int selection = -1; @@ -45,10 +46,12 @@ class DropDown : public PopupWindow public: DropDown(std::vector &texts, + std::vector &tips, std::vector &icons); DropDown(wxWindow * parent, std::vector &texts, + std::vector &tips, std::vector &icons, long style = 0); diff --git a/src/slic3r/GUI/Widgets/SideTools.cpp b/src/slic3r/GUI/Widgets/SideTools.cpp index c226b39e6c..5e5700040c 100644 --- a/src/slic3r/GUI/Widgets/SideTools.cpp +++ b/src/slic3r/GUI/Widgets/SideTools.cpp @@ -146,8 +146,8 @@ void SideToolsPanel::doRender(wxDC &dc) //} if (m_none_printer) { - dc.SetPen(SIDE_TOOLS_BRAND); - dc.SetBrush(SIDE_TOOLS_BRAND); + dc.SetPen(StateColor::darkModeColorFor(SIDE_TOOLS_BRAND)); // ORCA: Sidebar header background color - Fix for dark mode compability + dc.SetBrush(StateColor::darkModeColorFor(SIDE_TOOLS_BRAND)); // ORCA: Sidebar header background color - Fix for dark mode compability dc.DrawRectangle(0, 0, size.x, size.y); dc.DrawBitmap(m_none_printing_img.bmp(), left, (size.y - m_none_printing_img.GetBmpSize().y) / 2); diff --git a/src/slic3r/GUI/Widgets/StateColor.cpp b/src/slic3r/GUI/Widgets/StateColor.cpp index fb038eb24c..9038d9c62f 100644 --- a/src/slic3r/GUI/Widgets/StateColor.cpp +++ b/src/slic3r/GUI/Widgets/StateColor.cpp @@ -1,4 +1,5 @@ #include "StateColor.hpp" +#include static bool gDarkMode = false; @@ -39,9 +40,141 @@ static std::map gDarkColors{ {"#ABABAB", "#ABABAB"}, {"#D9D9D9", "#2D2D32"}, //{"#F0F0F0", "#4C4C54"}, + // ORCA + {"#BFE1DE", "#223C3C"}, // rgb(191, 225, 222) Dropdown checked item background color > ORCA color with %25 opacity + {"#E5F0EE", "#283232"}, // rgb(229, 240, 238) Combo / Dropdown focused background color > ORCA color with %10 opacity }; -std::map const & StateColor::GetDarkMap() +std::tuple StateColor::GetLAB(const wxColour& color) { + // Convert color to RGB color space + double r = color.Red() / 255.0; + double g = color.Green() / 255.0; + double b = color.Blue() / 255.0; + + // Convert to XYZ color space + double x = 0.412453*r + 0.357580*g + 0.180423*b; + double y = 0.212671*r + 0.715160*g + 0.072169*b; + double z = 0.019334*r + 0.119193*g + 0.950227*b; + + // Normalize XYZ values + double x_n = x / 0.950456; + double y_n = y / 1.0; + double z_n = z / 1.088754; + + // Convert to LAB color space + double epsilon = 0.008856; + double kappa = 903.3; + double fx = (x_n > epsilon) ? cbrt(x_n) : (kappa*x_n + 16.0) / 116.0; + double fy = (y_n > epsilon) ? cbrt(y_n) : (kappa*y_n + 16.0) / 116.0; + double fz = (z_n > epsilon) ? cbrt(z_n) : (kappa*z_n + 16.0) / 116.0; + + double l = 116.0 * fy - 16.0; + double a = 500.0 * (fx - fy); + double b_lab = 200.0 * (fy - fz); + + return std::tuple(l, a, b_lab); +} + +double StateColor::LAB_Delta_E(const wxColour& color1, const wxColour& color2) { + auto [l1, a1, b1] = GetLAB(color1); + auto [l2, a2, b2] = GetLAB(color2); + return sqrt((l1 - l2) * (l1 - l2) + (a1 - a2) * (a1 - a2) + (b1 - b2) * (b1 - b2)); +} + +double StateColor::GetColorDifference(const wxColour& color1, const wxColour& color2) { + return LAB_Delta_E(color1, color2); +} + +double StateColor::GetLightness(const wxColour& color) { + auto [l, a, b_lab] = GetLAB(color); + return l; +} + +// Function to lighten or darken a wxColour using LAB color space +wxColour StateColor::SetLightness(const wxColour& color, double lightness) { + auto [l, a, b_lab] = GetLAB(color); + + // Clamp lightness value + l = std::max(0.0, std::min(100.0, lightness)); + + // Convert back to XYZ color space + double fy_3 = (l + 16.0) / 116.0; + double fx_3 = a / 500.0 + fy_3; + double fz_3 = fy_3 - b_lab / 200.0; + + double epsilon = 0.008856; + double kappa = 903.3; + double x_3 = (fx_3 > epsilon) ? fx_3 * fx_3 * fx_3 : (116.0 * fx_3 - 16.0) / kappa; + double y_3 = (l > kappa*epsilon) ? fy_3 * fy_3 * fy_3 : l / kappa; + double z_3 = (fz_3 > epsilon) ? fz_3 * fz_3 * fz_3 : (116.0 * fz_3 - 16.0) / kappa; + + // Denormalize XYZ values + double x = x_3 * 0.950456; + double y = y_3 * 1.0; + double z = z_3 * 1.088754; + + // Convert XYZ to RGB + double r_new = 3.240479*x - 1.537150*y - 0.498535*z; + double g_new = -0.969256*x + 1.875992*y + 0.041556*z; + double b_new = 0.055648*x - 0.204043*y + 1.057311*z; + + // Clamp RGB values + r_new = std::max(0.0, std::min(1.0, r_new)); + g_new = std::max(0.0, std::min(1.0, g_new)); + b_new = std::max(0.0, std::min(1.0, b_new)); + + // Convert back to wxColour + int r_int = static_cast(r_new * 255); + int g_int = static_cast(g_new * 255); + int b_int = static_cast(b_new * 255); + + return wxColour(r_int, g_int, b_int); +} + +wxColour StateColor::LightenDarkenColor(const wxColour& color, int amount) { + auto [l, a, b_lab] = GetLAB(color); + + // Modify lightness + l += amount; + + // Clamp lightness value + l = std::max(0.0, std::min(100.0, l)); + + // Convert back to XYZ color space + double fy_3 = (l + 16.0) / 116.0; + double fx_3 = a / 500.0 + fy_3; + double fz_3 = fy_3 - b_lab / 200.0; + + double epsilon = 0.008856; + double kappa = 903.3; + double x_3 = (fx_3 > epsilon) ? fx_3 * fx_3 * fx_3 : (116.0 * fx_3 - 16.0) / kappa; + double y_3 = (l > kappa*epsilon) ? fy_3 * fy_3 * fy_3 : l / kappa; + double z_3 = (fz_3 > epsilon) ? fz_3 * fz_3 * fz_3 : (116.0 * fz_3 - 16.0) / kappa; + + // Denormalize XYZ values + double x = x_3 * 0.950456; + double y = y_3 * 1.0; + double z = z_3 * 1.088754; + + // Convert XYZ to RGB + double r_new = 3.240479*x - 1.537150*y - 0.498535*z; + double g_new = -0.969256*x + 1.875992*y + 0.041556*z; + double b_new = 0.055648*x - 0.204043*y + 1.057311*z; + + // Clamp RGB values + r_new = std::max(0.0, std::min(1.0, r_new)); + g_new = std::max(0.0, std::min(1.0, g_new)); + b_new = std::max(0.0, std::min(1.0, b_new)); + + // Convert back to wxColour + int r_int = static_cast(r_new * 255); + int g_int = static_cast(g_new * 255); + int b_int = static_cast(b_new * 255); + + return wxColour(r_int, g_int, b_int); +} + +std::map const & StateColor::GetDarkMap() { return gDarkColors; } diff --git a/src/slic3r/GUI/Widgets/StateColor.hpp b/src/slic3r/GUI/Widgets/StateColor.hpp index 1f7799faab..3c68c252fb 100644 --- a/src/slic3r/GUI/Widgets/StateColor.hpp +++ b/src/slic3r/GUI/Widgets/StateColor.hpp @@ -9,7 +9,7 @@ class StateColor { public: enum State { - Normal = 0, + Normal = 0, Enabled = 1, Checked = 2, Focused = 4, @@ -23,6 +23,13 @@ public: }; public: + static std::tuple GetLAB(const wxColour& color); + static double GetLightness(const wxColour& color); + static wxColour SetLightness(const wxColour& color, double lightness); + static wxColour LightenDarkenColor(const wxColour& color, int amount); + static double GetColorDifference(const wxColour& c1, const wxColour& c2); + static double LAB_Delta_E(const wxColour& c1, const wxColour& c2); + static void SetDarkMode(bool dark); static std::map const & GetDarkMap(); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 36778f6816..25835c8858 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -106,6 +106,10 @@ int TabCtrl::AppendItem(const wxString &item, btn->SetBackgroundColor(StateColor()); btn->SetCornerRadius(0); btn->SetPaddingSize({TAB_BUTTON_PADDING}); + wxClientDC dc(this); // ORCA calculate tab width from bold font to prevent tab movements on tab change + dc.SetFont(this->bold); + btn->SetMinSize(wxSize(dc.GetTextExtent(item).x + TAB_BUTTON_PADDING_X * 2, btn->GetSize().GetHeight())); + dc.Clear(); btns.push_back(btn); if (btns.size() > 1) sizer->GetItem(sizer->GetItemCount() - 1)->SetMinSize({0, 0}); @@ -304,7 +308,7 @@ void TabCtrl::doRender(wxDC& dc) #else dc.SetPen(wxPen(border_color.colorForStates(states), border_width)); dc.DrawLine(0, size.y - BS2, size.x, size.y - BS2); - wxColour c(0xf2, 0x75, 0x4e, 0xff); + wxColour c = wxColour("#009688"); // ORCA: Controls under line color on selected tab dc.SetPen(wxPen(c, 1)); dc.SetBrush(c); dc.DrawRoundedRectangle(x1 - radius, size.y - BS2 - border_width * 3, x2 + radius * 2 - x1, border_width * 3, radius); diff --git a/src/slic3r/GUI/Widgets/TextInput.cpp b/src/slic3r/GUI/Widgets/TextInput.cpp index 6e1c0f11e2..f8fb92939f 100644 --- a/src/slic3r/GUI/Widgets/TextInput.cpp +++ b/src/slic3r/GUI/Widgets/TextInput.cpp @@ -102,14 +102,6 @@ void TextInput::SetIcon(const wxBitmap &icon) Rescale(); } -void TextInput::SetIcon(const wxString &icon) -{ - if (this->icon.name() == icon.ToStdString()) - return; - this->icon = ScalableBitmap(this, icon.ToStdString(), 16); - Rescale(); -} - void TextInput::SetLabelColor(StateColor const &color) { label_color = color; diff --git a/src/slic3r/GUI/Widgets/TextInput.hpp b/src/slic3r/GUI/Widgets/TextInput.hpp index 61f729506c..152fb88f3d 100644 --- a/src/slic3r/GUI/Widgets/TextInput.hpp +++ b/src/slic3r/GUI/Widgets/TextInput.hpp @@ -42,8 +42,6 @@ public: void SetIcon(const wxBitmap & icon); - void SetIcon(const wxString & icon); - void SetLabelColor(StateColor const &color); void SetTextColor(StateColor const &color); diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index 70fa430775..058d3ece5a 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -581,18 +581,21 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con auto on_apply_text_modify = [this](wxEvent& e) { wxString str = m_flush_multiplier_ebox->GetValue(); - float multiplier = wxAtof(str); - if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { - str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); - m_flush_multiplier_ebox->SetValue(str); - MessageDialog dlg(nullptr, - wxString::Format(_L("The multiplier should be in range [%.2f, %.2f]."), g_min_flush_multiplier, g_max_flush_multiplier), - _L("Warning"), wxICON_WARNING | wxOK); - dlg.ShowModal(); - } - for (unsigned int i = 0; i < m_number_of_extruders; ++i) { - for (unsigned int j = 0; j < m_number_of_extruders; ++j) { - edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier))); + str.Replace(",", "."); + double multiplier = 1.f; + if (str.ToDouble(&multiplier)) { + if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { + str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); + m_flush_multiplier_ebox->SetValue(str); + MessageDialog dlg(nullptr, + wxString::Format(_L("The multiplier should be in range [%.2f, %.2f]."), g_min_flush_multiplier, g_max_flush_multiplier), + _L("Warning"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + } + for (unsigned int i = 0; i < m_number_of_extruders; ++i) { + for (unsigned int j = 0; j < m_number_of_extruders; ++j) { + edit_boxes[i][j]->SetValue(to_string(int(m_matrix[m_number_of_extruders * j + i] * multiplier))); + } } } @@ -610,12 +613,25 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con char flush_multi_str[32] = { 0 }; snprintf(flush_multi_str, sizeof(flush_multi_str), "%.2f", flush_multiplier); m_flush_multiplier_ebox->SetValue(flush_multi_str); + m_flush_multiplier_ebox->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); param_sizer->Add(m_flush_multiplier_ebox, 0, wxALIGN_CENTER | wxALL, 0); param_sizer->AddStretchSpacer(1); m_sizer_advanced->Add(param_sizer, 0, wxEXPAND | wxLEFT, TEXT_BEG_PADDING); m_flush_multiplier_ebox->Bind(wxEVT_TEXT_ENTER, on_apply_text_modify); m_flush_multiplier_ebox->Bind(wxEVT_KILL_FOCUS, on_apply_text_modify); + m_flush_multiplier_ebox->Bind(wxEVT_COMMAND_TEXT_UPDATED, [this](wxCommandEvent&) { + wxString str = m_flush_multiplier_ebox->GetValue(); + str.Replace(",", "."); + double multiplier = 1.f; + if (str.ToDouble(&multiplier)) { + if (multiplier < g_min_flush_multiplier || multiplier > g_max_flush_multiplier) { + str = wxString::Format(("%.2f"), multiplier < g_min_flush_multiplier ? g_min_flush_multiplier : g_max_flush_multiplier); + m_flush_multiplier_ebox->SetValue(str); + } + } + m_flush_multiplier_ebox->SetInsertionPointEnd(); + }); } this->update_warning_texts(); diff --git a/src/slic3r/GUI/WipeTowerDialog.hpp b/src/slic3r/GUI/WipeTowerDialog.hpp index b436b7b979..faa005c8b3 100644 --- a/src/slic3r/GUI/WipeTowerDialog.hpp +++ b/src/slic3r/GUI/WipeTowerDialog.hpp @@ -61,7 +61,12 @@ public: if (m_flush_multiplier_ebox == nullptr) return 1.f; - return std::atof(m_flush_multiplier_ebox->GetValue().c_str()); + wxString str = m_flush_multiplier_ebox->GetValue(); + str.Replace(",", "."); + double multiplier = 1.f; + str.ToDouble(&multiplier); + + return multiplier; } private: diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index b53573d019..b542723e15 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -598,10 +598,9 @@ wxBitmap *get_extruder_color_icon(std::string color, std::string label, int icon return bitmap; } - -void apply_extruder_selector(Slic3r::GUI::BitmapComboBox** ctrl, +void apply_extruder_selector(Slic3r::GUI::BitmapComboBox** ctrl, wxWindow* parent, - const std::string& first_item/* = ""*/, + const std::string& first_item/* = ""*/, wxPoint pos/* = wxDefaultPosition*/, wxSize size/* = wxDefaultSize*/, bool use_thin_icon/* = false*/) diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index f388b52a60..da562a8c6e 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -57,7 +57,7 @@ wxBitmap create_menu_bitmap(const std::string& bmp_name); // BBS: support resize by fill border #if 1 -wxBitmap create_scaled_bitmap(const std::string& bmp_name, wxWindow *win = nullptr, +wxBitmap create_scaled_bitmap(const std::string& bmp_name, wxWindow *win = nullptr, const int px_cnt = 16, const bool grayscale = false, const std::string& new_color = std::string(), // color witch will used instead of orange const bool menu_bitmap = false, const bool resize = false, @@ -75,7 +75,6 @@ wxBitmap create_scaled_bitmap(const std::string& bmp_name, wxWindow *win = nullp wxBitmap* get_default_extruder_color_icon(bool thin_icon = false); std::vector get_extruder_color_icons(bool thin_icon = false); wxBitmap * get_extruder_color_icon(std::string color, std::string label, int icon_width, int icon_height); - namespace Slic3r { namespace GUI { class BitmapComboBox; diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 478b8c4ef8..a089eef2a0 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -122,7 +122,16 @@ static bool is_same_nozzle_type(const DynamicPrintConfig &full_config, const Mac std::string filament_type = full_config.opt_string("filament_type", 0); error_msg = wxString::Format(_L("*Printing %s material with %s may cause nozzle damage"), filament_type, to_wstring_name(obj->nozzle_type)); error_msg += "\n"; - return false; + + MessageDialog msg_dlg(nullptr, error_msg, wxEmptyString, wxICON_WARNING | wxOK | wxCANCEL); + auto result = msg_dlg.ShowModal(); + if (result == wxID_OK) { + error_msg.clear(); + return true; + } else { + error_msg.clear(); + return false; + } } } @@ -484,10 +493,10 @@ bool CalibUtils::get_flow_ratio_calib_results(std::vector& return flow_ratio_calib_results.size() > 0; } -void CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString &error_message) +bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString &error_message) { if (pass != 1 && pass != 2) - return; + return false; Model model; std::string input_file; @@ -572,11 +581,24 @@ void CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString Calib_Params params; params.mode = CalibMode::Calib_Flow_Rate; - process_and_store_3mf(&model, full_config, params, error_message); - if (!error_message.empty()) - return; + if (!process_and_store_3mf(&model, full_config, params, error_message)) + return false; + + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + error_message = _L("Need select printer"); + return false; + } + + MachineObject *obj_ = dev->get_selected_machine(); + if (obj_ == nullptr) { + error_message = _L("Need select printer"); + return false; + } + send_to_print(calib_info, error_message, pass); + return true; } void CalibUtils::calib_pa_pattern(const CalibInfo &calib_info, Model& model) @@ -633,11 +655,11 @@ void CalibUtils::calib_pa_pattern(const CalibInfo &calib_info, Model& model) model.calib_pa_pattern = std::make_unique(pa_pattern); } -void CalibUtils::calib_generic_PA(const CalibInfo &calib_info, wxString &error_message) +bool CalibUtils::calib_generic_PA(const CalibInfo &calib_info, wxString &error_message) { const Calib_Params ¶ms = calib_info.params; if (params.mode != CalibMode::Calib_PA_Line && params.mode != CalibMode::Calib_PA_Pattern) - return; + return false; Model model; std::string input_file; @@ -663,11 +685,24 @@ void CalibUtils::calib_generic_PA(const CalibInfo &calib_info, wxString &error_m full_config.apply(filament_config); full_config.apply(printer_config); - process_and_store_3mf(&model, full_config, params, error_message); - if (!error_message.empty()) - return; + if (!process_and_store_3mf(&model, full_config, params, error_message)) + return false; + + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) { + error_message = _L("Need select printer"); + return false; + } + + MachineObject *obj_ = dev->get_selected_machine(); + if (obj_ == nullptr) { + error_message = _L("Need select printer"); + return false; + } + send_to_print(calib_info, error_message); + return true; } void CalibUtils::calib_temptue(const CalibInfo &calib_info, wxString &error_message) @@ -935,7 +970,7 @@ bool CalibUtils::get_pa_k_n_value_by_cali_idx(const MachineObject *obj, int cali return false; } -void CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &full_config, const Calib_Params ¶ms, wxString &error_message) +bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &full_config, const Calib_Params ¶ms, wxString &error_message) { Pointfs bedfs = full_config.opt("printable_area")->values; double print_height = full_config.opt_float("printable_height"); @@ -952,7 +987,7 @@ void CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f int count = std::llround(std::ceil((params.end - params.start) / params.step)) + 1; if (count > max_line_nums) { error_message = _L("Unable to calibrate: maybe because the set calibration value range is too large, or the step is too small"); - return; + return false; } } @@ -988,11 +1023,11 @@ void CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f unsigned int count = model->update_print_volume_state(build_volume); if (count == 0) { error_message = _L("Unable to calibrate: maybe because the set calibration value range is too large, or the step is too small"); - return; + return false; } // apply the new print config - DynamicPrintConfig new_print_config = std::move(full_config); + DynamicPrintConfig new_print_config = full_config; print->apply(*model, new_print_config); Print *fff_print = dynamic_cast(print); @@ -1006,7 +1041,7 @@ void CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f //} if (!check_nozzle_diameter_and_type(full_config, error_message)) - return; + return false; fff_print->process(); part_plate->update_slice_result_valid_state(true); @@ -1045,7 +1080,7 @@ void CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f const ModelVolume &model_volume = *model_object.volumes[volume_idx]; for (int instance_idx = 0; instance_idx < (int)model_object.instances.size(); ++ instance_idx) { const ModelInstance &model_instance = *model_object.instances[instance_idx]; - glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", false, true); + glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true, false, true); glvolume_collection.volumes.back()->set_render_color(new_color); glvolume_collection.volumes.back()->set_color(new_color); //glvolume_collection.volumes.back()->printable = model_instance.printable; @@ -1097,6 +1132,7 @@ void CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f success = Slic3r::store_bbs_3mf(store_params); release_PlateData_list(plate_data_list); + return true; } void CalibUtils::send_to_print(const CalibInfo &calib_info, wxString &error_message, int flow_ratio_mode) diff --git a/src/slic3r/Utils/CalibUtils.hpp b/src/slic3r/Utils/CalibUtils.hpp index f6833e7c10..e470efa62a 100644 --- a/src/slic3r/Utils/CalibUtils.hpp +++ b/src/slic3r/Utils/CalibUtils.hpp @@ -49,11 +49,11 @@ public: static void calib_flowrate_X1C(const X1CCalibInfos& calib_infos, std::string& error_message); static void emit_get_flow_ratio_calib_results(float nozzle_diameter); static bool get_flow_ratio_calib_results(std::vector &flow_ratio_calib_results); - static void calib_flowrate(int pass, const CalibInfo &calib_info, wxString &error_message); + static bool calib_flowrate(int pass, const CalibInfo &calib_info, wxString &error_message); static void calib_pa_pattern(const CalibInfo &calib_info, Model &model); - static void calib_generic_PA(const CalibInfo &calib_info, wxString &error_message); + static bool calib_generic_PA(const CalibInfo &calib_info, wxString &error_message); static void calib_temptue(const CalibInfo &calib_info, wxString &error_message); static void calib_max_vol_speed(const CalibInfo &calib_info, wxString &error_message); static void calib_VFA(const CalibInfo &calib_info, wxString &error_message); @@ -68,9 +68,9 @@ public: static bool validate_input_flow_ratio(wxString flow_ratio, float* output_value); private: - static void process_and_store_3mf(Model* model, const DynamicPrintConfig& full_config, const Calib_Params& params, wxString& error_message); + static bool process_and_store_3mf(Model* model, const DynamicPrintConfig& full_config, const Calib_Params& params, wxString& error_message); static void send_to_print(const CalibInfo &calib_info, wxString& error_message, int flow_ratio_mode = 0); // 0: none 1: coarse 2: fine }; } -} +} \ No newline at end of file diff --git a/src/slic3r/Utils/ColorSpaceConvert.cpp b/src/slic3r/Utils/ColorSpaceConvert.cpp index 2634d1c4c1..176bd29304 100644 --- a/src/slic3r/Utils/ColorSpaceConvert.cpp +++ b/src/slic3r/Utils/ColorSpaceConvert.cpp @@ -1,6 +1,8 @@ #include "ColorSpaceConvert.hpp" #include +#include +#include #include const static float param_13 = 1.0f / 3.0f; @@ -234,3 +236,19 @@ float DeltaE76(float l1, float a1, float b1, float l2, float a2, float b2) return std::sqrt(std::pow((l1 - l2), 2) + std::pow((a1 - a2), 2) + std::pow((b1 - b2), 2)); } +std::string color_to_string(const wxColour &color) +{ + std::string str = std::to_string(color.Red()) + "," + std::to_string(color.Green()) + "," + std::to_string(color.Blue()) + "," + std::to_string(color.Alpha()); + return str; +} + +wxColour string_to_wxColor(const std::string &str) +{ + wxColour color; + std::vector result; + boost::split(result, str, boost::is_any_of(",")); + if (result.size() == 4) { + color = wxColour(std::stoi(result[0]), std::stoi(result[1]), std::stoi(result[2]), std::stoi(result[3])); + } + return color; +}; diff --git a/src/slic3r/Utils/ColorSpaceConvert.hpp b/src/slic3r/Utils/ColorSpaceConvert.hpp index 9c3a659a0a..363720d216 100644 --- a/src/slic3r/Utils/ColorSpaceConvert.hpp +++ b/src/slic3r/Utils/ColorSpaceConvert.hpp @@ -1,5 +1,7 @@ #ifndef slic3r_Utils_ColorSpaceConvert_hpp_ #define slic3r_Utils_ColorSpaceConvert_hpp_ +#include +const int CUSTOM_COLOR_COUNT = 16; #include @@ -18,4 +20,7 @@ float DeltaE00(float l1, float a1, float b1, float l2, float a2, float b2); float DeltaE94(float l1, float a1, float b1, float l2, float a2, float b2); float DeltaE76(float l1, float a1, float b1, float l2, float a2, float b2); +class wxColour; +std::string color_to_string(const wxColour &color); +wxColour string_to_wxColor(const std::string &str); #endif /* slic3r_Utils_ColorSpaceConvert_hpp_ */ diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 5f1933567e..9d2f0d82f1 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -45,6 +45,7 @@ func_set_on_http_error_fn NetworkAgent::set_on_http_error_fn_ptr = nul func_set_get_country_code_fn NetworkAgent::set_get_country_code_fn_ptr = nullptr; func_set_on_subscribe_failure_fn NetworkAgent::set_on_subscribe_failure_fn_ptr = nullptr; func_set_on_message_fn NetworkAgent::set_on_message_fn_ptr = nullptr; +func_set_on_user_message_fn NetworkAgent::set_on_user_message_fn_ptr = nullptr; func_set_on_local_connect_fn NetworkAgent::set_on_local_connect_fn_ptr = nullptr; func_set_on_local_message_fn NetworkAgent::set_on_local_message_fn_ptr = nullptr; func_set_queue_on_main_fn NetworkAgent::set_queue_on_main_fn_ptr = nullptr; @@ -53,6 +54,11 @@ func_is_server_connected NetworkAgent::is_server_connected_ptr = null func_refresh_connection NetworkAgent::refresh_connection_ptr = nullptr; func_start_subscribe NetworkAgent::start_subscribe_ptr = nullptr; func_stop_subscribe NetworkAgent::stop_subscribe_ptr = nullptr; +func_add_subscribe NetworkAgent::add_subscribe_ptr = nullptr; +func_del_subscribe NetworkAgent::del_subscribe_ptr = nullptr; +func_enable_multi_machine NetworkAgent::enable_multi_machine_ptr = nullptr; +func_start_device_subscribe NetworkAgent::start_device_subscribe_ptr = nullptr; +func_stop_device_subscribe NetworkAgent::stop_device_subscribe_ptr = nullptr; func_send_message NetworkAgent::send_message_ptr = nullptr; func_connect_printer NetworkAgent::connect_printer_ptr = nullptr; func_disconnect_printer NetworkAgent::disconnect_printer_ptr = nullptr; @@ -68,6 +74,8 @@ func_get_user_nickanme NetworkAgent::get_user_nickanme_ptr = nullpt func_build_login_cmd NetworkAgent::build_login_cmd_ptr = nullptr; func_build_logout_cmd NetworkAgent::build_logout_cmd_ptr = nullptr; func_build_login_info NetworkAgent::build_login_info_ptr = nullptr; +func_get_model_id_from_desgin_id NetworkAgent::get_model_id_from_desgin_id_ptr = nullptr; +func_ping_bind NetworkAgent::ping_bind_ptr = nullptr; func_bind NetworkAgent::bind_ptr = nullptr; func_unbind NetworkAgent::unbind_ptr = nullptr; func_get_bambulab_host NetworkAgent::get_bambulab_host_ptr = nullptr; @@ -88,6 +96,7 @@ func_set_extra_http_header NetworkAgent::set_extra_http_header_ptr = nu func_get_my_message NetworkAgent::get_my_message_ptr = nullptr; func_check_user_task_report NetworkAgent::check_user_task_report_ptr = nullptr; func_get_user_print_info NetworkAgent::get_user_print_info_ptr = nullptr; +func_get_user_tasks NetworkAgent::get_user_tasks_ptr = nullptr; func_get_printer_firmware NetworkAgent::get_printer_firmware_ptr = nullptr; func_get_task_plate_index NetworkAgent::get_task_plate_index_ptr = nullptr; func_get_user_info NetworkAgent::get_user_info_ptr = nullptr; @@ -204,6 +213,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) set_get_country_code_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_get_country_code_fn")); set_on_subscribe_failure_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_subscribe_failure_fn")); set_on_message_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_message_fn")); + set_on_user_message_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_user_message_fn")); set_on_local_connect_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_local_connect_fn")); set_on_local_message_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_on_local_message_fn")); set_queue_on_main_fn_ptr = reinterpret_cast(get_network_function("bambu_network_set_queue_on_main_fn")); @@ -212,6 +222,11 @@ int NetworkAgent::initialize_network_module(bool using_backup) refresh_connection_ptr = reinterpret_cast(get_network_function("bambu_network_refresh_connection")); start_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_start_subscribe")); stop_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_stop_subscribe")); + add_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_add_subscribe")); + del_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_del_subscribe")); + enable_multi_machine_ptr = reinterpret_cast(get_network_function("bambu_network_enable_multi_machine")); + start_device_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_start_device_subscribe")); + stop_device_subscribe_ptr = reinterpret_cast(get_network_function("bambu_network_stop_device_subscribe")); send_message_ptr = reinterpret_cast(get_network_function("bambu_network_send_message")); connect_printer_ptr = reinterpret_cast(get_network_function("bambu_network_connect_printer")); disconnect_printer_ptr = reinterpret_cast(get_network_function("bambu_network_disconnect_printer")); @@ -227,6 +242,8 @@ int NetworkAgent::initialize_network_module(bool using_backup) build_login_cmd_ptr = reinterpret_cast(get_network_function("bambu_network_build_login_cmd")); build_logout_cmd_ptr = reinterpret_cast(get_network_function("bambu_network_build_logout_cmd")); build_login_info_ptr = reinterpret_cast(get_network_function("bambu_network_build_login_info")); + ping_bind_ptr = reinterpret_cast(get_network_function("bambu_network_ping_bind")); + get_model_id_from_desgin_id_ptr = reinterpret_cast(get_network_function("bambu_network_get_model_id_from_desgin_id")); bind_ptr = reinterpret_cast(get_network_function("bambu_network_bind")); unbind_ptr = reinterpret_cast(get_network_function("bambu_network_unbind")); get_bambulab_host_ptr = reinterpret_cast(get_network_function("bambu_network_get_bambulab_host")); @@ -247,6 +264,7 @@ int NetworkAgent::initialize_network_module(bool using_backup) get_my_message_ptr = reinterpret_cast(get_network_function("bambu_network_get_my_message")); check_user_task_report_ptr = reinterpret_cast(get_network_function("bambu_network_check_user_task_report")); get_user_print_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_print_info")); + get_user_tasks_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_tasks")); get_printer_firmware_ptr = reinterpret_cast(get_network_function("bambu_network_get_printer_firmware")); get_task_plate_index_ptr = reinterpret_cast(get_network_function("bambu_network_get_task_plate_index")); get_user_info_ptr = reinterpret_cast(get_network_function("bambu_network_get_user_info")); @@ -317,6 +335,7 @@ int NetworkAgent::unload_network_module() set_get_country_code_fn_ptr = nullptr; set_on_subscribe_failure_fn_ptr = nullptr; set_on_message_fn_ptr = nullptr; + set_on_user_message_fn_ptr = nullptr; set_on_local_connect_fn_ptr = nullptr; set_on_local_message_fn_ptr = nullptr; set_queue_on_main_fn_ptr = nullptr; @@ -340,6 +359,8 @@ int NetworkAgent::unload_network_module() build_login_cmd_ptr = nullptr; build_logout_cmd_ptr = nullptr; build_login_info_ptr = nullptr; + get_model_id_from_desgin_id_ptr = nullptr; + ping_bind_ptr = nullptr; bind_ptr = nullptr; unbind_ptr = nullptr; get_bambulab_host_ptr = nullptr; @@ -360,6 +381,7 @@ int NetworkAgent::unload_network_module() get_my_message_ptr = nullptr; check_user_task_report_ptr = nullptr; get_user_print_info_ptr = nullptr; + get_user_tasks_ptr = nullptr; get_printer_firmware_ptr = nullptr; get_task_plate_index_ptr = nullptr; get_user_info_ptr = nullptr; @@ -621,6 +643,17 @@ int NetworkAgent::set_on_message_fn(OnMessageFn fn) return ret; } +int NetworkAgent::set_on_user_message_fn(OnMessageFn fn) +{ + int ret = 0; + if (network_agent && set_on_user_message_fn_ptr) { + ret = set_on_user_message_fn_ptr(network_agent, fn); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::set_on_local_connect_fn(OnLocalConnectedFn fn) { int ret = 0; @@ -708,6 +741,57 @@ int NetworkAgent::stop_subscribe(std::string module) return ret; } +int NetworkAgent::add_subscribe(std::vector dev_list) +{ + int ret = 0; + if (network_agent && add_subscribe_ptr) { + ret = add_subscribe_ptr(network_agent, dev_list); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::del_subscribe(std::vector dev_list) +{ + int ret = 0; + if (network_agent && del_subscribe_ptr) { + ret = del_subscribe_ptr(network_agent, dev_list); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + +void NetworkAgent::enable_multi_machine(bool enable) +{ + if (network_agent && enable_multi_machine_ptr) { + enable_multi_machine_ptr(network_agent, enable); + } +} + +int NetworkAgent::start_device_subscribe() +{ + int ret = 0; + if (network_agent && start_device_subscribe_ptr) { + ret = start_device_subscribe_ptr(network_agent); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + +int NetworkAgent::stop_device_subscribe() +{ + int ret = 0; + if (network_agent && stop_device_subscribe_ptr) { + ret = stop_device_subscribe_ptr(network_agent); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret; + } + return ret; +} + int NetworkAgent::send_message(std::string dev_id, std::string json_str, int qos) { int ret = 0; @@ -858,6 +942,30 @@ std::string NetworkAgent::build_login_info() return ret; } +int NetworkAgent::get_model_id_from_desgin_id(std::string& desgin_id, std::string& model_id) +{ + int ret = 0; + if (network_agent && get_model_id_from_desgin_id_ptr) { + ret = get_model_id_from_desgin_id_ptr(network_agent, desgin_id, model_id); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, pin code=%3%") + % network_agent % ret % desgin_id; + } + return ret; +} + +int NetworkAgent::ping_bind(std::string ping_code) +{ + int ret = 0; + if (network_agent && ping_bind_ptr) { + ret = ping_bind_ptr(network_agent, ping_code); + if (ret) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, pin code=%3%") + % network_agent % ret % ping_code; + } + return ret; +} + int NetworkAgent::bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn) { int ret = 0; @@ -934,13 +1042,13 @@ int NetworkAgent::start_local_print_with_record(PrintParams params, OnUpdateStat int NetworkAgent::start_send_gcode_to_sdcard(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn) { - int ret = 0; - if (network_agent && start_send_gcode_to_sdcard_ptr) { - ret = start_send_gcode_to_sdcard_ptr(network_agent, params, update_fn, cancel_fn, wait_fn); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" : network_agent=%1%, ret=%2%, dev_id=%3%, task_name=%4%, project_name=%5%") - % network_agent % ret % params.dev_id % params.task_name % params.project_name; - } - return ret; + int ret = 0; + if (network_agent && start_send_gcode_to_sdcard_ptr) { + ret = start_send_gcode_to_sdcard_ptr(network_agent, params, update_fn, cancel_fn, wait_fn); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" : network_agent=%1%, ret=%2%, dev_id=%3%, task_name=%4%, project_name=%5%") + % network_agent % ret % params.dev_id % params.task_name % params.project_name; + } + return ret; } int NetworkAgent::start_local_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn) @@ -1070,6 +1178,16 @@ int NetworkAgent::get_user_print_info(unsigned int* http_code, std::string* http return ret; } +int NetworkAgent::get_user_tasks(TaskQueryParams params, std::string* http_body) +{ + int ret = 0; + if (network_agent && get_user_tasks_ptr) { + ret = get_user_tasks_ptr(network_agent, params, http_body); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, http_body=%3%") % network_agent % ret % (*http_body); + } + return ret; +} + int NetworkAgent::get_printer_firmware(std::string dev_id, unsigned* http_code, std::string* http_body) { int ret = 0; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index 60998c7737..d8f8e604b4 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -24,6 +24,7 @@ typedef int (*func_set_on_http_error_fn)(void *agent, OnHttpErrorFn fn); typedef int (*func_set_get_country_code_fn)(void *agent, GetCountryCodeFn fn); typedef int (*func_set_on_subscribe_failure_fn)(void *agent, GetSubscribeFailureFn fn); typedef int (*func_set_on_message_fn)(void *agent, OnMessageFn fn); +typedef int (*func_set_on_user_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_on_local_connect_fn)(void *agent, OnLocalConnectedFn fn); typedef int (*func_set_on_local_message_fn)(void *agent, OnMessageFn fn); typedef int (*func_set_queue_on_main_fn)(void *agent, QueueOnMainFn fn); @@ -32,6 +33,11 @@ typedef bool (*func_is_server_connected)(void *agent); typedef int (*func_refresh_connection)(void *agent); typedef int (*func_start_subscribe)(void *agent, std::string module); typedef int (*func_stop_subscribe)(void *agent, std::string module); +typedef int (*func_add_subscribe)(void *agent, std::vector dev_list); +typedef int (*func_del_subscribe)(void *agent, std::vector dev_list); +typedef void (*func_enable_multi_machine)(void *agent, bool enable); +typedef int (*func_start_device_subscribe)(void* agent); +typedef int (*func_stop_device_subscribe)(void* agent); typedef int (*func_send_message)(void *agent, std::string dev_id, std::string json_str, int qos); typedef int (*func_connect_printer)(void *agent, std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl); typedef int (*func_disconnect_printer)(void *agent); @@ -47,6 +53,8 @@ typedef std::string (*func_get_user_nickanme)(void *agent); typedef std::string (*func_build_login_cmd)(void *agent); typedef std::string (*func_build_logout_cmd)(void *agent); typedef std::string (*func_build_login_info)(void *agent); +typedef int (*func_get_model_id_from_desgin_id)(void *agent, std::string& desgin_id, std::string& model_id); +typedef int (*func_ping_bind)(void *agent, std::string ping_code); typedef int (*func_bind)(void *agent, std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); typedef int (*func_unbind)(void *agent, std::string dev_id); typedef std::string (*func_get_bambulab_host)(void *agent); @@ -67,6 +75,7 @@ typedef int (*func_set_extra_http_header)(void *agent, std::map dev_list); + int del_subscribe(std::vector dev_list); + void enable_multi_machine(bool enable); + int start_device_subscribe(); + int stop_device_subscribe(); int send_message(std::string dev_id, std::string json_str, int qos); int connect_printer(std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl); int disconnect_printer(); @@ -150,7 +165,9 @@ public: std::string build_login_cmd(); std::string build_logout_cmd(); std::string build_login_info(); - int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); + int get_model_id_from_desgin_id(std::string& desgin_id, std::string& model_id); + int ping_bind(std::string ping_code); + int bind(std::string dev_ip, std::string dev_id, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn); int unbind(std::string dev_id); std::string get_bambulab_host(); std::string get_user_selected_machine(); @@ -170,6 +187,7 @@ public: int get_my_message(int type, int after, int limit, unsigned int* http_code, std::string* http_body); int check_user_task_report(int* task_id, bool* printable); int get_user_print_info(unsigned int* http_code, std::string* http_body); + int get_user_tasks(TaskQueryParams params, std::string* http_body); int get_printer_firmware(std::string dev_id, unsigned* http_code, std::string* http_body); int get_task_plate_index(std::string task_id, int* plate_index); int get_user_info(int* identifier); @@ -218,6 +236,7 @@ private: static func_set_get_country_code_fn set_get_country_code_fn_ptr; static func_set_on_subscribe_failure_fn set_on_subscribe_failure_fn_ptr; static func_set_on_message_fn set_on_message_fn_ptr; + static func_set_on_user_message_fn set_on_user_message_fn_ptr; static func_set_on_local_connect_fn set_on_local_connect_fn_ptr; static func_set_on_local_message_fn set_on_local_message_fn_ptr; static func_set_queue_on_main_fn set_queue_on_main_fn_ptr; @@ -226,6 +245,11 @@ private: static func_refresh_connection refresh_connection_ptr; static func_start_subscribe start_subscribe_ptr; static func_stop_subscribe stop_subscribe_ptr; + static func_add_subscribe add_subscribe_ptr; + static func_del_subscribe del_subscribe_ptr; + static func_enable_multi_machine enable_multi_machine_ptr; + static func_start_device_subscribe start_device_subscribe_ptr; + static func_stop_device_subscribe stop_device_subscribe_ptr; static func_send_message send_message_ptr; static func_connect_printer connect_printer_ptr; static func_disconnect_printer disconnect_printer_ptr; @@ -241,6 +265,8 @@ private: static func_build_login_cmd build_login_cmd_ptr; static func_build_logout_cmd build_logout_cmd_ptr; static func_build_login_info build_login_info_ptr; + static func_get_model_id_from_desgin_id get_model_id_from_desgin_id_ptr; + static func_ping_bind ping_bind_ptr; static func_bind bind_ptr; static func_unbind unbind_ptr; static func_get_bambulab_host get_bambulab_host_ptr; @@ -261,6 +287,7 @@ private: static func_get_my_message get_my_message_ptr; static func_check_user_task_report check_user_task_report_ptr; static func_get_user_print_info get_user_print_info_ptr; + static func_get_user_tasks get_user_tasks_ptr; static func_get_printer_firmware get_printer_firmware_ptr; static func_get_task_plate_index get_task_plate_index_ptr; static func_get_user_info get_user_info_ptr; diff --git a/src/slic3r/Utils/ProfileDescription.hpp b/src/slic3r/Utils/ProfileDescription.hpp new file mode 100644 index 0000000000..db14c27c58 --- /dev/null +++ b/src/slic3r/Utils/ProfileDescription.hpp @@ -0,0 +1,36 @@ +#include +#include +#ifndef _L +#define _L(s) Slic3r::I18N::translate(s) +#endif + +namespace ProfileDescrption { + const std::string PROFILE_DESCRIPTION_0 = _L("It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases."); + const std::string PROFILE_DESCRIPTION_1 = _L("Compared with the default profile of a 0.2 mm nozzle, it has lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in much higher printing quality, but a much longer printing time."); + const std::string PROFILE_DESCRIPTION_2 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time."); + const std::string PROFILE_DESCRIPTION_3 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_4 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_5 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost invisible layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_6 = _L("Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_7 = _L("Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer lines, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in minimal layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_8 = _L("It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases."); + const std::string PROFILE_DESCRIPTION_9 = _L("Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time."); + const std::string PROFILE_DESCRIPTION_10 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time."); + const std::string PROFILE_DESCRIPTION_11 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time."); + const std::string PROFILE_DESCRIPTION_12 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_13 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in less apparent layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_14 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_15 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, lower speeds and acceleration, and the sparse infill pattern is Gyroid. So, it results in almost negligible layer lines and much higher printing quality, but much longer printing time."); + const std::string PROFILE_DESCRIPTION_16 = _L("Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time."); + const std::string PROFILE_DESCRIPTION_17 = _L("It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time."); + const std::string PROFILE_DESCRIPTION_18 = _L("Compared with the default profile of a 0.6 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time."); + const std::string PROFILE_DESCRIPTION_19 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_20 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_21 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_22 = _L("Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time."); + const std::string PROFILE_DESCRIPTION_23 = _L("It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time."); + const std::string PROFILE_DESCRIPTION_24 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_25 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_26 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases."); + const std::string PROFILE_DESCRIPTION_27 = _L("Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases."); +} \ No newline at end of file diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index 75e17f6b94..6d56cdb029 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -95,7 +95,7 @@ namespace BBL { #define BAMBU_NETWORK_LIBRARY "bambu_networking" #define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent" -#define BAMBU_NETWORK_AGENT_VERSION "01.09.00.03" +#define BAMBU_NETWORK_AGENT_VERSION "01.09.01.01" //iot preset type strings #define IOT_PRINTER_TYPE_STRING "printer" @@ -147,6 +147,7 @@ enum SendingPrintJobStage { PrintingStageWaitPrinter = 5, PrintingStageFinished = 6, PrintingStageERROR = 7, + PrintingStageLimit = 8, }; enum PublishingStage { @@ -193,6 +194,7 @@ struct PrintParams { std::string origin_model_id; std::string print_type; std::string dst_file; + std::string dev_name; /* access options */ std::string dev_ip; @@ -212,6 +214,14 @@ struct PrintParams { std::string extra_options; }; +struct TaskQueryParams +{ + std::string dev_id; + int status = 0; + int offset = 0; + int limit = 20; +}; + struct PublishParams { std::string project_name; std::string project_3mf_file; diff --git a/version.inc b/version.inc index ff7e2d5dad..fbffbbac36 100644 --- a/version.inc +++ b/version.inc @@ -17,4 +17,4 @@ set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1}) set(ORCA_VERSION_MINOR ${CMAKE_MATCH_2}) set(ORCA_VERSION_PATCH ${CMAKE_MATCH_3}) -set(SLIC3R_VERSION "01.09.00.70") +set(SLIC3R_VERSION "01.09.01.58")