diff --git a/resources/images/param_archimedeanchords.svg b/resources/images/param_archimedeanchords.svg index 80d6539..3cc7aef 100644 --- a/resources/images/param_archimedeanchords.svg +++ b/resources/images/param_archimedeanchords.svg @@ -1,7 +1,7 @@ - + diff --git a/resources/web/data/text.js b/resources/web/data/text.js index a18128a..25f0cd1 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -1712,16 +1712,16 @@ var LangText={ }, "ko_KR": { "t1": "QIDI Studio에 오신 것을 환영합니다", - "t2": "QIDI Studio는 몇 단계로 설정됩니다. 시작하겠습니다!", + "t2": "QIDI Studio는 몇 단계로 설정됩니다. 시작해 봅시다!", "t3": "사용자 계약", "t4": "동의하지 않음", - "t5": "동의", - "t6": "모든 사람의 프린팅을 개선하기 위해 귀하의 도움을 부탁드립니다.
고객 경험 개선 프로그램에 참여하십시오", - "t7": "고객 경험 개선 프로그램에 참여하세요", + "t5": "동의함", + "t6": "모든 사람의 프린팅을 개선하기 위해 귀하의 도움을 부탁드립니다.
고객 경험 개선 프로그램에 참여해 주세요", + "t7": "고객 경험 개선 프로그램에 참여해 주세요", "t8": "뒤로", "t9": "다음", "t10": "프린터 선택", - "t11": "모두", + "t11": "전체", "t12": "모두 지우기", "t13": "mm 노즐", "t14": "필라멘트 선택", @@ -1733,61 +1733,62 @@ var LangText={ "t20": "기본 필라멘트를 사용하시겠습니까?", "t21": "예", "t22": "아니오", - "t23": "릴리즈 노트", + "t23": "릴리스 노트", "t24": "시작하기", - "t25": "마침", + "t25": "완료", "t26": "로그인", "t27": "등록", "t28": "모델", - "t29": "쇼핑몰", - "t30": "매뉴얼", + "t29": "몰", + "t30": "수동", "t31": "새 프로젝트", "t32": "새 프로젝트 생성", - "t33": "핫스팟", - "t34": "최근 열었습니다", - "t35": "확인", - "t36": "최소한 하나의 프린터를 선택해야 합니다.", - "t37": "취소", - "t38": "확인", - "t39": "네트워크가 연결되지 않았습니다. 확인 후 나중에 다시 시도하십시오.", - "t47": "로그인 지역을 선택해 주십시오", + "t33": "프로젝트 열기", + "t34": "ホットスポット", + "t35": "최근에 열었습니다", + "t36": "확인", + "t37": "최소한 하나의 프린터를 선택해야 합니다.", + "t38": "취소", + "t39": "확인", + "t40": "네트워크가 연결되지 않았습니다. 확인 후 다시 시도해 주세요.", + "t47": "로그인 지역을 선택해 주세요", "t48": "아시아 태평양", - "t49": "중국 본토", - "t50": "로그아웃", + "t49": "중국 대륙", + "t50": "로그 아웃", "t52": "건너뛰기", "t53": "가입", - "t54": "3D 프린팅 커뮤니티에서는 서로의 성공과 실패를 배우고 자신의 슬라이싱 매개변수와 설정을 조정합니다. QIDI Studio는 동일한 원칙을 따르고 기계 학습을 사용하여 우리 사용자들의 방대한 인쇄의 성공과 실패로 그 성능을 개선합니다. 우리는 실제 데이터를 공급하여 QIDI Studio를 더 똑똑하게 훈련시키고 있습니다. 귀하가 원한다면 이 서비스는 오류 로그 및 사용 로그의 정보에 액세스할 것입니다. 여기에는 다음에 설명된 정보가 포함될 수 있습니다.", - "t55": "개인 정보 정책", - "t56": ". 우리는 개인이 직접 또는 간접적으로 식별할 수 있는 개인 정보를 수집하지 않습니다. 여기에는 이름, 주소, 결제 정보 또는 전화 번호를 포함하지 않습니다. 이 서비스를 활성화하면 이러한 약관과 개인 정보 정책에 관한 설명에 동의하는 것입니다.", + "t54": "3D 프린팅 커뮤니티에서는 우리는 서로의 성공과 실패로부터 배우고, 자신의 스라이싱 매개변수와 설정을 조정합니다. QIDI Studio 역시 같은 원리로 사용자의 성공과 실패로부터 기계 학습을 사용하여 그 성능을 개선합니다. 우리는 실제 세계의 데이터를 제공함으로써 QIDI Studio를 더 똑똑하게 훈련하고 있습니다. 여러분이 원할 경우, 이 서비스는 오류 로그와 사용 로그의 정보에 접근할 것입니다. 이 정보에는 다음에 설명된 정보가 포함될 수 있습니다.", + "t55": "개인정보 정책", + "t56": ". 우리는 개인을 직접 또는 간접적으로 식별할 수 있는 개인 정보를 수집하지 않습니다. 이는 이름, 주소, 결제 정보, 또는 전화번호 등을 포함하지만, 이에 국한되지 않습니다. 이 서비스를 사용함으로써, 이러한 조항과 개인정보 정책에 관한 설명에 동의하는 것입니다.", "t57": "", "t58": "", "t59": ".", "t60": "유럽", "t61": "북미", "t62": "기타", - "t63": "지역을 변경한 후 귀하의 계정은 로그아웃됩니다. 나중에 다시 로그인하십시오.", - "t64": "QIDI 네트워크 플러그인", - "t65": "WLAN을 통한 인쇄 작업 보내기", + "t63": "지역을 변경한 후, 귀하의 계정은 로그아웃됩니다. 나중에 다시 로그인해 주세요.", + "t64": "QIDI Network 플러그인", + "t65": "WLAN을 통한 프린팅 작업 보내기", "t66": "완전한 원격 제어", "t67": "라이브뷰 스트리밍", "t68": "사용자 데이터 동기화", - "t69": "QIDI 네트워크 플러그인 설치", + "t69": "QIDI Network 플러그인 설치", "t70": "", "t71": "다운로드 중", "t72": "다운로드 실패", "t73": "설치 성공.", - "t74": "다시 시작", - "t75": "QIDI 네트워크 플러그인은 다음 기능을 제공합니다:", - "t76": "QIDI 네트워크 플러그인이 감지되지 않았습니다. 클릭 ", - "t77": "여기에", - "t78": " 설치하려면.", - "t79": "플러그인 설치 실패. ", - "t80": "다음 단계를 시도하십시오:", - "t81": "1, 클릭 ", - "t82": " 플러그인 디렉토리 열기", - "t83": "2, 모든 QIDI Studio 닫기", + "t74": "재시작", + "t75": "QIDI Network 플러그인은 다음 기능을 제공합니다:", + "t76": "QIDI Network 플러그인이 감지되지 않았습니다. 클릭", + "t77": "여기", + "t78": "를 클릭하여 설치하십시오.", + "t79": "플러그인 설치에 실패했습니다. ", + "t80": "다음 단계를 시도해 보십시오:", + "t81": "1, 클릭", + "t82": "플러그인 디렉토리 열기", + "t83": "2, 모든 QIDI Studio 종료", "t84": "3, 플러그인 디렉토리의 모든 파일 삭제", - "t85": "4, QIDI Studio를 다시 열고 플러그인을 다시 설치하십시오", + "t85": "4, QIDI Studio 다시 열고 플러그인 다시 설치", "t86": "닫기", "t87": "사용자 매뉴얼", "t88": "제거", @@ -1795,8 +1796,8 @@ var LangText={ "t90": "3D 모델", "t91": "3D 모델 다운로드", "t92": "만든이", - "t93": "리믹스한 사람", - "t94": "공유한 사람", + "t93": "리믹스한 이", + "t94": "공유한 이", "t95": "모델 정보", "t96": "액세서리", "t97": "프로필 정보", @@ -1811,12 +1812,12 @@ var LangText={ "t107": "온라인 모델", "t108": "더보기", "t109": "시스템 필라멘트", - "t110": "사용자 정의 필라멘트", + "t110": "커스텀 필라멘트", "t111": "새로 만들기", - "t112": "프로그램에 가입하세요", + "t112": "프로그램 참여", "t113": "언제든지 환경 설정에서 선택을 변경할 수 있습니다.", "t114": "홈", - "t115": "일괄", + "t115": "일괄 처리", "t116": "재시도", "t117": "장치 연결", "t118": "장치를 보려면 프린터 연결을 설정하십시오.", @@ -1824,22 +1825,22 @@ var LangText={ }, "pl_PL": { "t1": "Witamy w QIDI Studio", - "t2": "Konfiguracja QIDI Studio odbywa się w kilka kroków. Zacznijmy!", + "t2": "Konfiguracja QIDI Studio będzie realizowana w kilka etapach. Zaczynajmy!", "t3": "Umowa Użytkownika", "t4": "Nie zgadzam się", "t5": "Zgadzam się", - "t6": "Prosimy o Twoją pomoc w usprawnieniu drukowania dla wszystkich.
Dołącz do naszego Programu Poprawy Doświadczenia Klienta", - "t7": "Dołącz do naszego Programu Poprawy Doświadczenia Klienta", + "t6": "Prosimy o Twoją pomoc w polepszeniu wydruków dla wszystkich.
Dołącz do naszego Programu Polepszenia Doświadczenia Klienta", + "t7": "Dołącz do naszego Programu Polepszenia Doświadczenia Klienta", "t8": "Wstecz", "t9": "Dalej", "t10": "Wybór drukarki", - "t11": "Wszystko", + "t11": "Wszystkie", "t12": "Wyczyść wszystko", "t13": "dysza mm", "t14": "Wybór filamentu", "t15": "Drukarka", "t16": "Typ filamentu", - "t17": "Dostawca", + "t17": "Producent", "t18": "błąd", "t19": "Musisz wybrać przynajmniej jeden filament.", "t20": "Czy chcesz użyć domyślnego filamentu?", @@ -1848,29 +1849,30 @@ var LangText={ "t23": "Informacje o wydaniu", "t24": "Rozpocznij", "t25": "Zakończ", - "t26": "Zaloguj się", - "t27": "Zarejestruj się", + "t26": "Logowanie", + "t27": "Rejestracja", "t28": "Modele", "t29": "Sklep", "t30": "Instrukcja", "t31": "Nowy projekt", "t32": "Utwórz nowy projekt", - "t33": "Punkt aktywacji", - "t34": "Ostatnio otwarte", - "t35": "ok", - "t36": "Przynajmniej jedna drukarka musi zostać wybrana.", - "t37": "Anuluj", - "t38": "Potwierdź", - "t39": "Rozłączenie sieci, proszę sprawdzić i spróbować ponownie później.", - "t47": "Prosimy wybrać region logowania", + "t33": "Otwórz projekt", + "t34": "punkt aktywny", + "t35": "Ostatnio otwarte pliki", + "t36": "ok", + "t37": "Musisz wybrać przynajmniej jedną drukarkę.", + "t38": "Anuluj", + "t39": "Potwierdź", + "t40": "Rozłączono od sieci, proszę sprawdzić i spróbować ponownie później.", + "t47": "Proszę wybrać region logowania", "t48": "Azja i Pacyfik", - "t49": "Chiński kontynent", - "t50": "Wyloguj się", + "t49": "Chiny", + "t50": "Wyloguj", "t52": "Pomiń", "t53": "Dołącz", - "t54": "W społeczności drukowania 3D uczymy się od sukcesów i porażek innych, aby dostosować nasze parametry cięcia i ustawienia. QIDI Studio działa na tej samej zasadzie i wykorzystuje uczenie maszynowe, aby poprawiać swoją wydajność na podstawie sukcesów i niepowodzeń licznych wydruków naszych użytkowników. Trenujemy QIDI Studio, aby stać się mądrzejszą, dostarczając rzeczywiste dane z życia. Jeśli jesteś zainteresowany, ta usługa będzie mieć dostęp do informacji z Twoich dzienników błędów i dzienników użytkowania, które mogą zawierać informacje opisane w", - "t55": "Polityka Prywatności", - "t56": ". Nie zbieramy żadnych danych osobowych, które pozwolą na bezpośrednie lub pośrednie zidentyfikowanie osoby, w tym, ale nie ograniczając się do imion, adresów, informacji o płatności lub numerów telefonów. Włączając tę usługę, akceptujesz te warunki oraz oświadczenie dotyczące Polityki Prywatności.", + "t54": "W społeczności 3D drukowania uczymy się od sukcesów i porażek innych, aby dostosować swoje własne parametry ciągów i ustawienia. QIDI Studio działa według tej samej zasady i używa uczenia maszynowego, aby poprawić swoją wydajność na podstawie sukcesów i niepowodzeń licznych wydruków naszych użytkowników. Trenujemy QIDI Studio, aby stać się bardziej inteligentnym, podając mu rzeczywiste dane z świata. Jeśli jesteś zgodny, ta usługa będzie mogła uzyskać dostęp do informacji z Twoich dzienników błędów i dzienników użycia, które mogą zawierać informacje opisane w", + "t55": "Polityka prywatności", + "t56": ". Nie będziemy zbierać żadnych danych osobowych, które pozwolą na bezpośrednie lub pośrednie zidentyfikowanie osoby, w tym, ale nie ograniczając się do nazwisk, adresów, informacji o płatności lub numerów telefonów. Włączając tę usługę, akceptujesz te warunki i oświadczenie dotyczące Polityki prywatności.", "t57": "", "t58": "", "t59": ".", @@ -1881,22 +1883,22 @@ var LangText={ "t64": "Wtyczka QIDI Network", "t65": "Wysyłanie zadania drukowania przez WLAN", "t66": "Pełne zdalne sterowanie", - "t67": "Transmisja na żywo", + "t67": "Transmisja strumieniowa Liveview", "t68": "Synchronizacja danych użytkownika", "t69": "Zainstaluj wtyczkę QIDI Network", "t70": "", "t71": "Pobieranie", "t72": "Pobieranie nie powiodło się", - "t73": "Instalacja powiodła się.", + "t73": "Instalacja zakończona sukcesem.", "t74": "Uruchom ponownie", "t75": "Wtyczka QIDI Network zapewnia następujące funkcje:", - "t76": "Nie wykryto wtyczki QIDI Network. Kliknij ", + "t76": "Nie wykryto wtyczki QIDI Network. Kliknij", "t77": "tutaj", - "t78": ", aby zainstalować.", + "t78": "aby ją zainstalować.", "t79": "Nie udało się zainstalować wtyczki. ", - "t80": "Spróbuj następujących kroków:", - "t81": "1, Kliknij ", - "t82": ", aby otworzyć katalog wtyczki", + "t80": "Wypróbuj następujące kroki:", + "t81": "1, Kliknij", + "t82": "aby otworzyć katalog wtyczki", "t83": "2, Zamknij wszystkie otwarte QIDI Studio", "t84": "3, Usuń wszystkie pliki w katalogu wtyczki", "t85": "4, Otwórz ponownie QIDI Studio i zainstaluj wtyczkę ponownie", @@ -1915,7 +1917,7 @@ var LangText={ "t98": "Nazwa modelu", "t100": "Opis modelu", "t101": "BOM", - "t102": "Instrukcja montażu", + "t102": "Przewodnik montażu", "t103": "Inne", "t104": "Nazwa profilu", "t105": "Autor profilu", @@ -1926,9 +1928,9 @@ var LangText={ "t110": "Filamenty niestandardowe", "t111": "Utwórz nowy", "t112": "Dołącz do programu", - "t113": "Możesz zmienić swoją odpowiedź w preferencjach w dowolnym momencie.", + "t113": "Opcja można zmienić w preferencjach w dowolnym momencie.", "t114": "Strona główna", - "t115": "Partia", + "t115": "Wartość zbiorcza", "t116": "Ponów", "t117": "Podłącz urządzenie", "t118": "Proszę skonfigurować połączenie drukarki, aby wyświetlić urządzenie.", diff --git a/resources/web/filament/index.html b/resources/web/filament/index.html new file mode 100644 index 0000000..3cafe34 --- /dev/null +++ b/resources/web/filament/index.html @@ -0,0 +1,1429 @@ + + + + + + Filament + + + + +
+
+

+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PLAPLA MattePLA MetalPLA SilkPLA-CFABSABS OdorlessABS MetalABS-GFASAASA-AeroPA12-CFPAHT-CFPC-ABS-FRPET-CFPETG ToughPPS-CFTPU 95A-HFUltraPA
+
+ + + + + \ No newline at end of file diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index ae1432c..8695440 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -502,6 +502,8 @@ set(SLIC3R_GUI_SOURCES Utils/FontConfigHelp.hpp Utils/FontUtils.cpp Utils/FontUtils.hpp + GUI/Filament_web.hpp + GUI/Filament_web.cpp ) if(QDT_RELEASE_TO_PUBLIC) diff --git a/src/slic3r/GUI/Filament_web.cpp b/src/slic3r/GUI/Filament_web.cpp new file mode 100644 index 0000000..036f5c9 --- /dev/null +++ b/src/slic3r/GUI/Filament_web.cpp @@ -0,0 +1,66 @@ +#include "Tab.hpp" +#include "Project.hpp" +#include "libslic3r/Utils.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/Format/qds_3mf.hpp" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "wxExtensions.hpp" +#include "GUI_App.hpp" +#include "GUI_ObjectList.hpp" +#include "MainFrame.hpp" +#include + +namespace Slic3r { + namespace GUI { + + + + FilamentPanel::FilamentPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : wxPanel(parent, id, pos, size, style) + { + m_project_home_url = wxString::Format("file://%s/web/filament/index.html", from_u8(resources_dir())); + wxString strlang = wxGetApp().current_language_code_safe(); + if (strlang != "") + m_project_home_url = wxString::Format("file://%s/web/filament/index.html?lang=%s", from_u8(resources_dir()), strlang); + + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + + m_browser = WebView::CreateWebView(this, m_project_home_url); + if (m_browser == nullptr) { + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("load web view of project page failed"); + return; + } + //m_browser->Hide(); + main_sizer->Add(m_browser, wxSizerFlags().Expand().Proportion(1)); + + + + SetSizer(main_sizer); + Layout(); + Fit(); + } + + FilamentPanel::~FilamentPanel() {} + + + + } +} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Filament_web.hpp b/src/slic3r/GUI/Filament_web.hpp new file mode 100644 index 0000000..65ee925 --- /dev/null +++ b/src/slic3r/GUI/Filament_web.hpp @@ -0,0 +1,69 @@ +#ifndef slic3r_GUI_Filament_web_hpp_ +#define slic3r_GUI_Filament_web_hpp_ + +#include "Tabbook.hpp" +#include "wx/artprov.h" +#include "wx/cmdline.h" +#include "wx/notifmsg.h" +#include "wx/settings.h" +#include "wx/webview.h" + +#if wxUSE_WEBVIEW_EDGE +#include "wx/msw/webview_edge.h" +#endif + +#include "wx/numdlg.h" +#include "wx/infobar.h" +#include "wx/filesys.h" +#include "wx/fs_arc.h" +#include "wx/fs_mem.h" +#include "wx/stdpaths.h" +#include +#include +#include "wx/textctrl.h" +#include + +#include "nlohmann/json.hpp" +#include "slic3r/Utils/json_diff.hpp" + +#include +#include +#include +#include "Event.hpp" +#include "libslic3r/ProjectTask.hpp" +#include "wxExtensions.hpp" + + +namespace Slic3r { + namespace GUI { + + struct filament_file { + std::string filepath; + std::string filename; + std::string size; + }; + + class FilamentPanel : public wxPanel + { + private: + bool m_web_init_completed = { false }; + bool m_reload_already = { false }; + + wxWebView* m_browser = { nullptr }; + wxString m_project_home_url; + wxString m_root_dir; + std::map m_model_id_map; + static inline int m_sequence_id = 8000; + + + public: + FilamentPanel(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTAB_TRAVERSAL); + ~FilamentPanel(); + + + }; + + } +} // namespace Slic3r::GUI + +#endif diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 0fea8a2..ec3f678 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1205,6 +1205,10 @@ void MainFrame::init_tabpanel() m_calibration->SetBackgroundColour(*wxWHITE); m_tabpanel->AddPage(m_calibration, _L("Calibration"), std::string("tab_calibration_active"), std::string("tab_calibration_active"), false); + m_filament = new FilamentPanel(m_tabpanel, wxID_ANY, wxDefaultPosition, wxDefaultSize); + m_filament->SetBackgroundColour(*wxWHITE); + m_tabpanel->AddPage(m_filament, _L("Filament"), std::string("model_weight"), std::string("model_weight"), false); + if (m_plater) { // load initial config auto full_config = wxGetApp().preset_bundle->full_config(); diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 6aea8cf..19b5d6b 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -24,6 +24,7 @@ #include "Auxiliary.hpp" #include "Project.hpp" #include "CalibrationPanel.hpp" +#include "Filament_web.hpp" #include "UnsavedChangesDialog.hpp" #include "Widgets/SideButton.hpp" #include "Widgets/SideMenuPopup.hpp" @@ -224,6 +225,7 @@ public: tpProject = 4, tpCalibration = 5, tpMultiDevice = 6, // none + tpFilamentweb = 7, }; //QDS: add slice&&print status update logic @@ -377,6 +379,7 @@ public: ProjectPanel* m_project{ nullptr }; CalibrationPanel* m_calibration{ nullptr }; + FilamentPanel* m_filament{nullptr}; WebViewPanel* m_webview { nullptr }; PrinterWebView* m_printer_view{nullptr}; wxLogWindow* m_log_window { nullptr };