Merge branch 'SoftFever:main' into main

This commit is contained in:
Ferdinand Linnenberg 2024-12-07 10:57:11 +01:00 committed by GitHub
commit 7d8d33a787
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
119 changed files with 3082 additions and 1163 deletions

View File

@ -5,18 +5,18 @@
#
msgid ""
msgstr ""
"Project-Id-Version: OrcaSlicer V2.2.0-beta2\n"
"Project-Id-Version: OrcaSlicer V2.2.0 Official Release\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-10-27 23:05+0800\n"
"PO-Revision-Date: 2024-09-25 22:36+0700\n"
"PO-Revision-Date: 2024-11-30 20:56+0700\n"
"Last-Translator: \n"
"Language-Team: Andylg <andylg@yandex.ru>\n"
"Language: ru_RU\n"
"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.5\n"
msgid "Supports Painting"
@ -101,8 +101,9 @@ msgstr "Позволяет рисовать на выбранных гранях
msgid "Highlight faces according to overhang angle."
msgstr "Выделение граней по углу свеса."
# это в рисование поддержки идет после - Выделение граней по углу свеса.
msgid "No auto support"
msgstr "Откл. автоподдержку"
msgstr "Автоподдержка отключена."
msgid "Support Generated"
msgstr "Поддержка сгенерирована"
@ -361,17 +362,17 @@ msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane"
msgstr ""
"Нажмите, чтобы перевернуть секущую плоскость\n"
"Двигайте, чтобы переместить секущую плоскость"
"Нажмите, чтобы перевернуть секущую плоскость.\n"
"Двигайте, чтобы переместить секущую плоскость."
msgid ""
"Click to flip the cut plane\n"
"Drag to move the cut plane\n"
"Right-click a part to assign it to the other side"
msgstr ""
"Нажмите, чтобы перевернуть секущую плоскость\n"
"Двигайте, чтобы переместить секущую плоскость\n"
"Правая кнопка мыши на части модели для переназначения стороны"
"Нажмите, чтобы перевернуть секущую плоскость.\n"
"Двигайте, чтобы переместить секущую плоскость.\n"
"Для переназначения стороны части модели используйте правую кнопку мыши."
msgid "Move cut plane"
msgstr "Перемещение секущей плоскости"
@ -507,16 +508,16 @@ msgstr "Обнаружены недопустимые соединения"
#, c-format, boost-format
msgid "%1$d connector is out of cut contour"
msgid_plural "%1$d connectors are out of cut contour"
msgstr[0] "%1$d соединение выходит за контур модели"
msgstr[1] "%1$d соединения выходит за контур модели"
msgstr[2] "%1$d соединений выходит за контур модели"
msgstr[0] "%1$d соединение выходит за контур модели."
msgstr[1] "%1$d соединения выходит за контур модели."
msgstr[2] "%1$d соединений выходит за контур модели."
#, c-format, boost-format
msgid "%1$d connector is out of object"
msgid_plural "%1$d connectors are out of object"
msgstr[0] "%1$d соединение находится за пределами модели"
msgstr[1] "%1$d соединения находится за пределами модели"
msgstr[2] "%1$d соединений находится за пределами модели"
msgstr[0] "%1$d соединение находится за пределами модели."
msgstr[1] "%1$d соединения находится за пределами модели."
msgstr[2] "%1$d соединений находится за пределами модели."
msgid "Some connectors are overlapped"
msgstr "Имеются пересекающие соединения"
@ -605,7 +606,6 @@ msgstr "Показывать каркас"
msgid "%1%"
msgstr "%1%"
# ???
msgid "Can't apply when process preview."
msgstr "Невозможно применить при предпросмотре нарезки."
@ -1247,10 +1247,10 @@ msgstr ""
"Блокировка/разблокировка угла поворота при перетаскивании над поверхностью."
msgid "Mirror vertically"
msgstr "Зеркалировать по вертикали"
msgstr "Отзеркалить по вертикали"
msgid "Mirror horizontally"
msgstr "Зеркалировать по горизонтали"
msgstr "Отзеркалить по горизонтали"
#. TRN: This is the name of the action that shows in undo/redo stack (changing part type from SVG to something else).
msgid "Change SVG Type"
@ -2446,11 +2446,11 @@ msgstr "Автодозаправка"
msgid "AMS not connected"
msgstr "АСПП не подключена"
# ???? кнопка в интерфейсе? Extrude - Выдавить - Load
# ??? кнопка в интерфейсе? Extrude - Выдавить - Load
msgid "Load"
msgstr "Выдавить"
# ???? кнопка в интерфейсе? retract - Втянуть - Unload (Выгрузить, Вырузка)
# ??? кнопка в интерфейсе? retract - Втянуть - Unload (Выгрузить, Вырузка)
msgid "Unload"
msgstr "Втянуть"
@ -2483,6 +2483,7 @@ msgstr "Отменить калибровку"
msgid "Idling..."
msgstr "Простой..."
# При выгрузке/загрузке прутка справа отображается процесс
msgid "Heat the nozzle"
msgstr "Нагрев сопла"
@ -3877,6 +3878,7 @@ msgstr "Пауза при неисправности температуры ст
msgid "Filament unloading"
msgstr "Выгрузка прутка"
# ???
msgid "Skip step pause"
msgstr "Пропуск команды паузы"
@ -3889,6 +3891,7 @@ msgstr "Калибровка шума двигателя"
msgid "Paused due to AMS lost"
msgstr "Печать приостановлена из-за потери связи с АСПП"
# ??? Печать приостановлена из-за низкой скорости вентилятора радиатора головы
msgid "Paused due to low speed of the heat break fan"
msgstr ""
"Печать приостановлена из-за низкой скорости вентилятора обдува радиатора "
@ -4610,7 +4613,7 @@ msgstr "Авторизация"
msgid "Preview"
msgstr "Предпросмотр нарезки"
# ??? Управ. принтерами, Управ. устройствами, менеджер устройств, Диспетчер устройств, Принтеры
# ??? Управ. принтерами, менеджер принтеров, Диспетчер принтеров
msgid "Multi-device"
msgstr "Принтеры"
@ -5070,7 +5073,7 @@ msgid "File is missing"
msgstr "Файл отсутствует"
msgid "The project is no longer available."
msgstr "Проект больше не доступен."
msgstr "Проект больше недоступен."
msgid "Filament Settings"
msgstr "Настройки прутка"
@ -5152,7 +5155,7 @@ msgstr ""
msgid "The printer has been logged out and cannot connect."
msgstr "Принтер вышел из системы и не может подключиться."
# ??? Трансляция, видеотрансляция остановлена
# ??? видеотрансляция остановлена
msgid "Stopped."
msgstr "Трансляция с камеры остановлена."
@ -5784,8 +5787,8 @@ msgstr "Безопасное извлечение устройства."
msgid "%1$d Object has custom supports."
msgid_plural "%1$d Objects have custom supports."
msgstr[0] "%1$d модель имеет пользовательскую поддержку."
msgstr[1] "%1$d модели имеют пользовательские поддержки."
msgstr[2] "%1$d моделей имеют пользовательские поддержки."
msgstr[1] "%1$d модели имеют пользовательскую поддержку."
msgstr[2] "%1$d моделей имеют пользовательскую поддержку."
#, c-format, boost-format
msgid "%1$d Object has color painting."
@ -5958,7 +5961,7 @@ msgid "View all object's settings"
msgstr "Просмотр всех настроек модели"
msgid "Material settings"
msgstr "Параметры материала"
msgstr "Настройки материала"
msgid "Remove current plate (if not last one)"
msgstr "Удалить текущую печатную пластину (кроме последней)"
@ -6120,7 +6123,7 @@ msgid ""
"nozzle hardness of the printer. Please replace the hardened nozzle or "
"filament, otherwise, the nozzle will be attrited or damaged."
msgstr ""
"Твердость сопла, установленного по умолчанию, не достаточна для печати "
"Твердость сопла, установленного по умолчанию, недостаточна для печати "
"данной пластиковой нитью. Замените сопло на закалённое или смените "
"пластиковую нить. В противном случае сопло будет изношено или повреждено."
@ -6510,15 +6513,17 @@ msgid ""
"will be kept. You may fix the meshes and try again."
msgstr ""
"Невозможно выполнить булеву операцию над сетками модели. Будут сохранены "
"только положительные части. Вы можете исправить сетки и попробовать снова."
"только положительные части. Попробуйте починить сетку модели и попробовать "
"снова."
#, boost-format
msgid "Reason: part \"%1%\" is empty."
msgstr "Причина: часть \"%1%\" пустая."
# ??? не формирует объем, не имеет замкнутой геометрии
#, boost-format
msgid "Reason: part \"%1%\" does not bound a volume."
msgstr "Причина: часть \"%1%\" не ограничивает объём."
msgstr "Причина: часть \"%1%\" не формирует замкнутый объём."
#, boost-format
msgid "Reason: part \"%1%\" has self intersection."
@ -6532,6 +6537,8 @@ msgid ""
"Unable to perform boolean operation on model meshes. Only positive parts "
"will be exported."
msgstr ""
"Невозможно выполнить булеву операцию над сетками модели. Будут "
"экспортированы только положительные части."
msgid ""
"Are you sure you want to store original SVGs with their local paths into the "
@ -7091,14 +7098,13 @@ msgstr "Создать принтер"
msgid "The selected preset is null!"
msgstr "Выбранный профиль пуст!"
# ?????? В двух местах - в одном месте кнопка в другом Конечный слой
# ?????? В двух местах - в одном месте кнопка в другом Конечный слой. В V2.2.0beta2 пока не исправлено
msgid "End"
msgstr "End"
msgid "Customize"
msgstr "Настройка"
# ??? layer?
msgid "Other layer filament sequence"
msgstr "Последовательность прутков на других слоях"
@ -7801,8 +7807,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"
@ -7956,7 +7962,7 @@ msgid "Flow ratio and Pressure Advance"
msgstr "Коэффициент потока и Pressure Advance"
msgid "Print chamber temperature"
msgstr "Температура в камере"
msgstr "Температура в термокамере при печати"
msgid "Print temperature"
msgstr "Температура печати"
@ -8061,7 +8067,7 @@ msgstr ""
"расчётное время печати слоя меньше установленного значения."
msgid "Auxiliary part cooling fan"
msgstr "Вспомогательный вентилятор для охлаждения моделей"
msgstr "Вспомогательный вентилятор модели"
msgid "Exhaust fan"
msgstr "Вытяжной вентилятор"
@ -8192,10 +8198,6 @@ msgstr "Диаметр сопла"
msgid "Wipe tower"
msgstr "Черновая башня"
# ????2 Параметры замены материала в одноэкструдерном ММ принтере
# ???? Параметры экструдера в одноэкструдерном мультиматериальном принтере
# ???? Параметры для экструдера в одноэкструдерном мультиматериальном принтере
# ???? Параметры для одноэкструдерной мультиматериальном печати
msgid "Single extruder multi-material parameters"
msgstr "Параметры одноэкструдерного мультиматериального принтера"
@ -8772,7 +8774,9 @@ msgid ""
"objects, it just orientates the selected ones.Otherwise, it will orientates "
"all objects in the current disk."
msgstr ""
"Автоориентация моделей (ориентация выбранного, иначе всего на текущем столе)"
"Автоориентация выбранных или всех моделей. Если выбраны отдельные модели, "
"ориентация будет применена только к ним; в противном случае ко всем моделям "
"на текущем столе."
msgid "Shift+Tab"
msgstr "Shift+Tab"
@ -8940,10 +8944,10 @@ msgid "Select the object/part and press space to change the name"
msgstr "Выберите модель/часть и нажмите пробел, чтобы изменить имя"
msgid "Mouse click"
msgstr "Щелчок кнопкой мыши"
msgstr "Левая кнопка мыши"
msgid "Select the object/part and mouse click to change the name"
msgstr "Выберите модель/часть и нажмите клавишу мыши, чтобы изменить имя"
msgstr "Выберите модель/часть и нажмите левую клавишу мыши, чтобы изменить имя"
msgid "Objects List"
msgstr "Список моделей"
@ -10133,7 +10137,6 @@ msgstr ""
msgid "Cooling overhang threshold"
msgstr "Порог включения обдува на нависаниях"
#, fuzzy, c-format
msgid ""
"Force cooling fan to be specific speed when overhang degree of printed part "
"exceeds this value. Expressed as percentage which indicates how much width "
@ -10394,6 +10397,7 @@ msgstr "Порог для реверса"
msgid "Overhang reversal threshold"
msgstr "Порог разворота на свесах"
# ?????
#, no-c-format, no-boost-format
msgid ""
"Number of mm the overhang need to be for the reversal to be considered "
@ -10402,6 +10406,14 @@ msgid ""
"When Detect overhang wall is not enabled, this option is ignored and "
"reversal happens on every even layers regardless."
msgstr ""
"Величина свеса периметра при которой она считается достаточной для активации "
"функции реверса печати нависаний. Может быть в мм или в % от ширины "
"периметра.\n"
"При нуле разворот будет на каждом чётном слое, независимо от величина "
"свеса.\n"
"Если «Определять нависающие периметры» не включено, этот параметр "
"игнорируется, и разворот происходит на каждом чётном слое без "
"исключений."
msgid "Classic mode"
msgstr "Классический режим"
@ -10928,7 +10940,7 @@ msgid ""
"\n"
" "
msgstr ""
"Последовательность печати внутреннего/внешнего периметров.\n"
"Последовательность печати внутреннего и внешнего периметров.\n"
"\n"
"Используйте порядок печати периметров «Внутренний/Внешний» для получения "
"наилучших нависаний. Однако этот вариант приводит к небольшому снижению "
@ -11117,7 +11129,6 @@ msgstr ""
"Используется только в качестве визуальной помощи в пользовательском "
"интерфейсе"
# ??? Смещение экструдера по осям X/Y
msgid "Extruder offset"
msgstr "Смещение координат экструдера"
@ -11834,8 +11845,8 @@ msgstr ""
"две ближайшие линии заполнения с коротким отрезком периметра. Если не "
"найдено такого отрезка периметра короче этого параметра, линия заполнения "
"соединяется с отрезком периметра только с одной стороны, а длина отрезка "
"периметра ограничена значением «Длина привязок разреженного "
"заполнения» (infill_anchor), но не больше этого параметра.\n"
"периметра ограничена значением «Длина привязок разреженного заполнения» "
"(infill_anchor), но не больше этого параметра.\n"
"Если установить 0, то будет использоваться старый алгоритм для соединения "
"заполнения, который даёт такой же результат, как и при значениях 1000 и 0."
@ -11900,7 +11911,7 @@ msgstr "Вкл. ограничение ускорения зигзагов"
msgid "Klipper's max_accel_to_decel will be adjusted automatically"
msgstr ""
"Значение ограничение ускорения зигзагов (max_accel_to_decel) в Klipper будет "
"Значение Klipper-а ограничение ускорения зигзагов (max_accel_to_decel) будет "
"скорректировано автоматически.\n"
"\n"
"Параметр предназначен для ограничения влияния экстремальных переходов от "
@ -11914,8 +11925,8 @@ msgstr "Ограничение ускорение зигзагов"
msgid ""
"Klipper's max_accel_to_decel will be adjusted to this %% of acceleration"
msgstr ""
"Значение ограничение ускорения зигзагов (max_accel_to_decel) в Klipper будет "
"скорректировано на заданный процент ускорения."
"Значение Klipper-а ограничение ускорения зигзагов (max_accel_to_decel) будет "
"скорректировано на данный процент ускорения."
msgid "Jerk of outer walls"
msgstr "Рывок для внешних периметров."
@ -11990,17 +12001,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 "layer"
msgstr "слой"
@ -12088,7 +12099,7 @@ msgid ""
"printed more slowly"
msgstr ""
"Скорость заполнения пробелов. Пробелы обычно имеют неравномерную ширину "
"линии и должен печататься медленнее."
"линии и должны печататься медленнее."
msgid "Precise Z height"
msgstr "Точная высота по Z"
@ -12311,7 +12322,7 @@ msgstr "Включите, если хотите использовать нес
# ?????? Название моделей
msgid "Label objects"
msgstr "Помечать объекты"
msgstr "Помечать модели"
# ??????
msgid ""
@ -12321,7 +12332,8 @@ msgid ""
"setup and Wipe into Object / Wipe into Infill."
msgstr ""
"Отвечает за присвоение уникальных меток или названий каждой модели или "
"элементу, что позволяет отменять печать любого из них по вашему выбору."
"элементу, что позволяет отменять печать любого из них по вашему выбору.\n"
"\n"
"Включите эту опцию, чтобы добавить комментарии в G-код с указанием того, к "
"какой модели он принадлежит, что полезно для плагина Octoprint CancelObject. "
"Эта настройка не совместима с настройкой «Одноэкструдерный "
@ -12329,11 +12341,11 @@ msgstr ""
"модели»."
msgid "Exclude objects"
msgstr "Исключить модели"
msgstr "Исключение моделей"
msgid "Enable this option to add EXCLUDE OBJECT command in g-code"
msgstr ""
"Включите эту опцию, чтобы добавить команду EXCLUDE OBJECT (исключения "
"Включите эту опцию, чтобы добавить команду EXCLUDE OBJECT (исключение "
"моделей) в G-код для принтера с прошивкой Klipper."
msgid "Verbose G-code"
@ -13151,7 +13163,7 @@ msgstr "Расширение первого слоя"
msgid "Expand the first raft or support layer to improve bed plate adhesion"
msgstr ""
"Расширение первого слоя подложки или поддержки в плоскости XY для улучшения "
"адгезии с материалами склонными к отлипанию и закручиванию."
"адгезии при печати материалами склонными к отлипанию и закручиванию."
msgid "Raft layers"
msgstr "Слоёв в подложке"
@ -13542,7 +13554,7 @@ msgid ""
"scarf."
msgstr ""
"Длина клиновидного шва. Установка этого параметра на ноль фактически "
"отключает шарф."
"отключает клиновидный шов."
msgid "Scarf steps"
msgstr "Шагов клиновидного шва"
@ -13816,9 +13828,9 @@ msgid ""
"zero value."
msgstr ""
"Разница температур, которая будет применяться, когда экструдер не активен. "
"Значение не используется, если для параметра «Температура "
"ожидания» ('idle_temperature') в настройках пластиковой нити установлено "
"ненулевое значение."
"Значение не используется, если для параметра «Температура ожидания» "
"('idle_temperature') в настройках пластиковой нити установлено ненулевое "
"значение."
msgid "Preheat time"
msgstr "Время преднагрева"
@ -14375,8 +14387,8 @@ msgstr "Вкл. контроль температуры"
msgid ""
"Enable this option for automated chamber temperature control. This option "
"activates the emitting of an M191 command before the \"machine_start_gcode"
"\"\n"
"activates the emitting of an M191 command before the "
"\"machine_start_gcode\"\n"
" which sets the chamber temperature and waits until it is reached. In "
"addition, it emits an M141 command at the end of the print to turn off the "
"chamber heater, if present. \n"
@ -14832,9 +14844,12 @@ msgid ""
msgstr ""
"Движок классического генератора периметров создаёт их с постоянной шириной "
"экструзии, а для очень тонких участков используется параметр «Заполнять "
"щели». Движок Arachne же создаёт периметры с переменной шириной экструзии, "
"что позволяет печатать без щелей, лучше пропечатывать мелкие элементы (при "
"условии, что у вас правильно откалиброван LA/PA)."
"щели».\n"
"\n"
"Движок Arachne же создаёт периметры с переменной шириной экструзии, что "
"позволяет печатать без щелей, лучше пропечатывать мелкие элементы (при "
"условии, что у вас правильно откалиброван LA/PA). Этот параметр также влияет "
"на концентрическое заполнение."
msgid "Classic"
msgstr "Классический"
@ -16288,8 +16303,9 @@ msgstr "Пересечение"
msgid "Source Volume"
msgstr "Исходный объём"
# ???
msgid "Tool Volume"
msgstr ""
msgstr "Объём инструмента"
msgid "Subtract from"
msgstr "Главный"
@ -16455,8 +16471,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"
@ -17439,7 +17455,7 @@ msgid ""
"Auxiliary fan\n"
"Did you know that OrcaSlicer supports Auxiliary part cooling fan?"
msgstr ""
"Вспомогательный вентилятор для охлаждения моделей\n"
"Вспомогательный вентилятор модели\n"
"Знаете ли вы, что OrcaSlicer поддерживает управление вспомогательным "
"вентилятором для охлаждения моделей?"

View File

@ -0,0 +1,7 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="7.80615" y="25.5195" width="29" height="9.19336" stroke="#009688"/>
<rect x="19.1368" y="5.45404" width="15" height="6.00417" transform="rotate(25.5934 19.1368 5.45404)" stroke="#2b3436"/>
<rect x="14.8062" y="18.5156" width="15" height="6.00417" stroke="#009688" stroke-dasharray="1 1"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4877 17.5905C13.5899 17.4883 13.5432 17.3137 13.4035 17.2762L4.93754 15.0078C4.79787 14.9704 4.67006 15.0982 4.70749 15.2378L6.97593 23.7038C7.01336 23.8435 7.18794 23.8902 7.29019 23.788L13.4877 17.5905ZM7.54629 22.2037L11.9034 17.8466L5.95148 16.2518L7.54629 22.2037Z" fill="#2b3436"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.22678 16.0611C9.70526 15.1933 10.3436 14.4213 11.1102 13.787C11.8768 13.1526 12.7546 12.6699 13.6966 12.3623C13.7768 12.3361 13.8575 12.3112 13.9386 12.2875C13.9519 12.2837 13.9648 12.2792 13.9775 12.2743C14.1795 12.1952 14.3022 11.9815 14.252 11.767C14.1986 11.539 13.9701 11.3964 13.745 11.4608C13.7304 11.4649 13.7158 11.4692 13.7013 11.4734C13.609 11.5003 13.5172 11.5287 13.426 11.5586C12.3857 11.8993 11.4164 12.4329 10.5696 13.1336C9.72279 13.8344 9.01727 14.6868 8.4879 15.6449C8.44147 15.7289 8.3964 15.8138 8.35271 15.8994C8.34582 15.9129 8.33897 15.9264 8.33215 15.94C8.22679 16.1491 8.3241 16.4002 8.53808 16.4953C8.73944 16.5848 8.97228 16.5042 9.08775 16.3206C9.09499 16.3091 9.10177 16.2972 9.10806 16.2848C9.14646 16.2096 9.18604 16.135 9.22678 16.0611Z" fill="#2b3436"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,7 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="7.80615" y="25.5195" width="29" height="9.19336" stroke="#009688"/>
<rect x="19.1368" y="5.45404" width="15" height="6.00417" transform="rotate(25.5934 19.1368 5.45404)" stroke="#b6b6b6"/>
<rect x="14.8062" y="18.5156" width="15" height="6.00417" stroke="#009688" stroke-dasharray="1 1"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.4877 17.5905C13.5899 17.4883 13.5432 17.3137 13.4035 17.2762L4.93754 15.0078C4.79787 14.9704 4.67006 15.0982 4.70749 15.2378L6.97593 23.7038C7.01336 23.8435 7.18794 23.8902 7.29019 23.788L13.4877 17.5905ZM7.54629 22.2037L11.9034 17.8466L5.95148 16.2518L7.54629 22.2037Z" fill="#009688"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.22678 16.0611C9.70526 15.1933 10.3436 14.4213 11.1102 13.787C11.8768 13.1526 12.7546 12.6699 13.6966 12.3623C13.7768 12.3361 13.8575 12.3112 13.9386 12.2875C13.9519 12.2837 13.9648 12.2792 13.9775 12.2743C14.1795 12.1952 14.3022 11.9815 14.252 11.767C14.1986 11.539 13.9701 11.3964 13.745 11.4608C13.7304 11.4649 13.7158 11.4692 13.7013 11.4734C13.609 11.5003 13.5172 11.5287 13.426 11.5586C12.3857 11.8993 11.4164 12.4329 10.5696 13.1336C9.72279 13.8344 9.01727 14.6868 8.4879 15.6449C8.44147 15.7289 8.3964 15.8138 8.35271 15.8994C8.34582 15.9129 8.33897 15.9264 8.33215 15.94C8.22679 16.1491 8.3241 16.4002 8.53808 16.4953C8.73944 16.5848 8.97228 16.5042 9.08775 16.3206C9.09499 16.3091 9.10177 16.2972 9.10806 16.2848C9.14646 16.2096 9.18604 16.135 9.22678 16.0611Z" fill="#b6b6b6"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -15,7 +15,6 @@
"printer_variant": "0.2",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -15,7 +15,6 @@
"printer_variant": "0.25",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -12,7 +12,6 @@
"printer_variant": "0.4",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -18,7 +18,6 @@
"printer_variant": "0.6",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -15,7 +15,6 @@
"printer_variant": "0.2",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -15,7 +15,6 @@
"printer_variant": "0.25",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -12,7 +12,6 @@
"printer_variant": "0.4",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -18,7 +18,6 @@
"printer_variant": "0.6",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -15,7 +15,6 @@
"printer_variant": "0.2",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -15,7 +15,6 @@
"printer_variant": "0.25",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -12,7 +12,6 @@
"printer_variant": "0.4",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -18,7 +18,6 @@
"printer_variant": "0.6",
"auxiliary_fan": "0",
"bed_exclude_area": [],
"printer_structure": "i3",
"default_filament_profile": [
"Anker Generic PLA+"
],

View File

@ -16,46 +16,46 @@
],
"silent_mode": "0",
"machine_max_acceleration_e": [
"10000"
"4000"
],
"machine_max_acceleration_extruding": [
"10000"
"6000"
],
"machine_max_acceleration_retracting": [
"10000"
"1000"
],
"machine_max_acceleration_x": [
"10000"
"6000"
],
"machine_max_acceleration_y": [
"10000"
"6000"
],
"machine_max_acceleration_z": [
"10000"
"300"
],
"machine_max_acceleration_travel": [
"10000"
"6000"
],
"machine_max_speed_e": [
"100"
"50"
],
"machine_max_speed_x": [
"500"
"600"
],
"machine_max_speed_y": [
"500"
"600"
],
"machine_max_speed_z": [
"50"
"30"
],
"machine_max_jerk_e": [
"3"
],
"machine_max_jerk_x": [
"15"
"12"
],
"machine_max_jerk_y": [
"15"
"12"
],
"machine_max_jerk_z": [
"0.3"
@ -70,11 +70,11 @@
"0.32"
],
"min_layer_height": [
"0.08"
"0.05"
],
"printer_settings_id": "",
"retraction_minimum_travel": [
"1.5"
"1"
],
"retract_before_wipe": [
"0%"
@ -83,10 +83,10 @@
"1"
],
"retraction_length": [
"3"
"0.5"
],
"retract_length_toolchange": [
"4"
"2"
],
"z_hop": [
"0"
@ -106,4 +106,4 @@
"wipe": [
"1"
]
}
}

View File

@ -22,5 +22,12 @@
"travel_speed": "500",
"travel_acceleration": "6000",
"top_surface_speed": "360",
"top_surface_acceleration": "2500"
"top_surface_acceleration": "2500",
"default_jerk": "9",
"outer_wall_jerk": "9",
"inner_wall_jerk": "9",
"infill_jerk": "9",
"top_surface_jerk": "9",
"initial_layer_jerk": "9",
"travel_jerk": "10"
}

View File

@ -51,13 +51,13 @@
"inner_wall_acceleration": "500",
"bridge_acceleration": "500",
"travel_acceleration": "2500",
"default_jerk": "15",
"outer_wall_jerk": "10",
"inner_wall_jerk": "15",
"infill_jerk": "15",
"top_surface_jerk": "12",
"initial_layer_jerk": "12",
"travel_jerk": "20",
"default_jerk": "8",
"outer_wall_jerk": "5",
"inner_wall_jerk": "8",
"infill_jerk": "9",
"top_surface_jerk": "5",
"initial_layer_jerk": "8",
"travel_jerk": "9",
"enable_support": "0",
"support_type": "normal(auto)",
"support_threshold_angle": "30",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",

View File

@ -162,7 +162,7 @@
"seam_slope_start_height": "0",
"seam_slope_steps": "10",
"seam_slope_type": "none",
"single_extruder_multi_material_priming": "1",
"single_extruder_multi_material_priming": "0",
"skirt_distance": "2",
"skirt_height": "1",
"skirt_loops": "0",
@ -289,4 +289,4 @@
],
"xy_contour_compensation": "0",
"xy_hole_compensation": "0"
}
}

View File

@ -88,10 +88,10 @@
"2"
],
"max_layer_height": [
"0.32"
"0.16"
],
"min_layer_height": [
"0.08"
"0.04"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -125,4 +125,4 @@
"96x96",
"300x300"
]
}
}

View File

@ -88,10 +88,10 @@
"2"
],
"max_layer_height": [
"0.32"
"0.48"
],
"min_layer_height": [
"0.08"
"0.12"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -125,4 +125,4 @@
"96x96",
"300x300"
]
}
}

View File

@ -88,10 +88,10 @@
"2"
],
"max_layer_height": [
"0.32"
"0.64"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -125,4 +125,4 @@
"96x96",
"300x300"
]
}
}

View File

@ -81,10 +81,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.16"
],
"min_layer_height": [
"0.08"
"0.04"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -81,10 +81,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.48"
],
"min_layer_height": [
"0.08"
"0.12"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -81,10 +81,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.64"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -81,10 +81,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.16"
],
"min_layer_height": [
"0.08"
"0.04"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -81,10 +81,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.48"
],
"min_layer_height": [
"0.08"
"0.12"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -81,10 +81,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.64"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -78,10 +78,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.16"
],
"min_layer_height": [
"0.08"
"0.04"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling \nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -78,10 +78,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.48"
],
"min_layer_height": [
"0.08"
"0.12"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -111,4 +111,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -79,10 +79,10 @@
"0.4"
],
"max_layer_height": [
"0.36"
"0.64"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -112,4 +112,4 @@
"machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0",
"machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors",
"scan_first_layer": "0"
}
}

View File

@ -84,10 +84,10 @@
"0.4"
],
"max_layer_height": [
"0.32"
"0.16"
],
"min_layer_height": [
"0.08"
"0.04"
],
"retraction_minimum_travel": [
"2"

View File

@ -84,10 +84,10 @@
"0.4"
],
"max_layer_height": [
"0.32"
"0.48"
],
"min_layer_height": [
"0.08"
"0.12"
],
"retraction_minimum_travel": [
"2"

View File

@ -84,10 +84,10 @@
"0.4"
],
"max_layer_height": [
"0.32"
"0.64"
],
"min_layer_height": [
"0.08"
"0.16"
],
"retraction_minimum_travel": [
"2"

View File

@ -86,7 +86,7 @@
"0.5"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -130,4 +130,4 @@
"100x100",
"320x320"
]
}
}

View File

@ -87,7 +87,7 @@
"0.5"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -131,4 +131,4 @@
"100x100",
"320x320"
]
}
}

View File

@ -87,7 +87,7 @@
"0.5"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [
@ -131,4 +131,4 @@
"100x100",
"320x320"
]
}
}

View File

@ -87,7 +87,7 @@
"0.56"
],
"min_layer_height": [
"0.08"
"0.16"
],
"printer_settings_id": "Creality",
"retraction_minimum_travel": [

View File

@ -58,6 +58,10 @@
"name": "fdm_process_voron_common_0_2_5",
"sub_path": "process/fdm_process_voron_common_0_2_5.json"
},
{
"name": "fdm_process_voron_common_0_5",
"sub_path": "process/fdm_process_voron_common_0_5.json"
},
{
"name": "fdm_process_voron_common_0_6",
"sub_path": "process/fdm_process_voron_common_0_6.json"
@ -205,6 +209,30 @@
{
"name": "0.80mm Extra Draft 1.0 nozzle @Voron",
"sub_path": "process/0.80mm Extra Draft 1.0 nozzle @Voron.json"
},
{
"name": "0.10mm Extra Fine 0.5 nozzle @Voron",
"sub_path": "process/0.10mm Extra Fine 0.5 nozzle @Voron.json"
},
{
"name": "0.15mm Fine 0.5 nozzle @Voron",
"sub_path": "process/0.15mm Fine 0.5 nozzle @Voron.json"
},
{
"name": "0.20mm Optimal 0.5 nozzle @Voron",
"sub_path": "process/0.20mm Optimal 0.5 nozzle @Voron.json"
},
{
"name": "0.25mm Standard 0.5 nozzle @Voron",
"sub_path": "process/0.25mm Standard 0.5 nozzle @Voron.json"
},
{
"name": "0.30mm Draft 0.5 nozzle @Voron",
"sub_path": "process/0.30mm Draft 0.5 nozzle @Voron.json"
},
{
"name": "0.35mm Extra Draft 0.5 nozzle @Voron",
"sub_path": "process/0.35mm Extra Draft 0.5 nozzle @Voron.json"
}
],
"filament_list": [
@ -310,6 +338,10 @@
"name": "Voron 2.4 250 0.25 nozzle",
"sub_path": "machine/Voron 2.4 250 0.25 nozzle.json"
},
{
"name": "Voron 2.4 250 0.5 nozzle",
"sub_path": "machine/Voron 2.4 250 0.5 nozzle.json"
},
{
"name": "Voron 2.4 250 0.6 nozzle",
"sub_path": "machine/Voron 2.4 250 0.6 nozzle.json"
@ -338,6 +370,10 @@
"name": "Voron 2.4 300 0.25 nozzle",
"sub_path": "machine/Voron 2.4 300 0.25 nozzle.json"
},
{
"name": "Voron 2.4 300 0.5 nozzle",
"sub_path": "machine/Voron 2.4 300 0.5 nozzle.json"
},
{
"name": "Voron 2.4 300 0.6 nozzle",
"sub_path": "machine/Voron 2.4 300 0.6 nozzle.json"
@ -366,6 +402,10 @@
"name": "Voron 2.4 350 0.25 nozzle",
"sub_path": "machine/Voron 2.4 350 0.25 nozzle.json"
},
{
"name": "Voron 2.4 350 0.5 nozzle",
"sub_path": "machine/Voron 2.4 350 0.5 nozzle.json"
},
{
"name": "Voron 2.4 350 0.6 nozzle",
"sub_path": "machine/Voron 2.4 350 0.6 nozzle.json"
@ -394,6 +434,10 @@
"name": "Voron Trident 250 0.25 nozzle",
"sub_path": "machine/Voron Trident 250 0.25 nozzle.json"
},
{
"name": "Voron Trident 250 0.5 nozzle",
"sub_path": "machine/Voron Trident 250 0.5 nozzle.json"
},
{
"name": "Voron Trident 250 0.6 nozzle",
"sub_path": "machine/Voron Trident 250 0.6 nozzle.json"
@ -422,6 +466,10 @@
"name": "Voron Trident 300 0.25 nozzle",
"sub_path": "machine/Voron Trident 300 0.25 nozzle.json"
},
{
"name": "Voron Trident 300 0.5 nozzle",
"sub_path": "machine/Voron Trident 300 0.5 nozzle.json"
},
{
"name": "Voron Trident 300 0.6 nozzle",
"sub_path": "machine/Voron Trident 300 0.6 nozzle.json"
@ -450,6 +498,10 @@
"name": "Voron Trident 350 0.25 nozzle",
"sub_path": "machine/Voron Trident 350 0.25 nozzle.json"
},
{
"name": "Voron Trident 350 0.5 nozzle",
"sub_path": "machine/Voron Trident 350 0.5 nozzle.json"
},
{
"name": "Voron Trident 350 0.6 nozzle",
"sub_path": "machine/Voron Trident 350 0.6 nozzle.json"
@ -478,6 +530,10 @@
"name": "Voron 0.1 0.25 nozzle",
"sub_path": "machine/Voron 0.1 0.25 nozzle.json"
},
{
"name": "Voron 0.1 0.5 nozzle",
"sub_path": "machine/Voron 0.1 0.5 nozzle.json"
},
{
"name": "Voron 0.1 0.6 nozzle",
"sub_path": "machine/Voron 0.1 0.6 nozzle.json"
@ -506,6 +562,10 @@
"name": "Voron Switchwire 250 0.25 nozzle",
"sub_path": "machine/Voron Switchwire 250 0.25 nozzle.json"
},
{
"name": "Voron Switchwire 250 0.5 nozzle",
"sub_path": "machine/Voron Switchwire 250 0.5 nozzle.json"
},
{
"name": "Voron Switchwire 250 0.6 nozzle",
"sub_path": "machine/Voron Switchwire 250 0.6 nozzle.json"

View File

@ -17,6 +17,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -24,6 +25,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -31,6 +33,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -38,6 +41,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -45,6 +49,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -52,6 +57,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -59,6 +65,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -66,6 +73,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -17,6 +17,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -24,6 +25,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -31,6 +33,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -38,6 +41,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -45,6 +49,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -52,6 +57,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -59,6 +65,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -66,6 +73,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -23,6 +23,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -30,6 +31,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -37,6 +39,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -44,6 +47,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -51,6 +55,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -58,6 +63,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -65,6 +71,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -72,6 +79,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -20,6 +20,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -27,6 +28,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -34,6 +36,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -41,6 +44,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -48,6 +52,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -55,6 +60,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -62,6 +68,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -69,6 +76,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -17,6 +17,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -24,6 +25,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -31,6 +33,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -38,6 +41,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -45,6 +49,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -52,6 +57,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -59,6 +65,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -66,6 +73,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -47,6 +47,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -54,6 +55,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -61,6 +63,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -68,6 +71,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -75,6 +79,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -82,6 +87,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -89,6 +95,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -96,6 +103,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -23,6 +23,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -30,6 +31,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -37,6 +39,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -44,6 +47,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -51,6 +55,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -58,6 +63,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -65,6 +71,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -72,6 +79,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -20,6 +20,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -27,6 +28,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -34,6 +36,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -41,6 +44,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -48,6 +52,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -55,6 +60,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -62,6 +68,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -69,6 +76,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -23,6 +23,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -30,6 +31,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -37,6 +39,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -44,6 +47,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -51,6 +55,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -58,6 +63,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -65,6 +71,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -72,6 +79,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -14,6 +14,7 @@
"Voron 2.4 250 0.15 nozzle",
"Voron 2.4 250 0.2 nozzle",
"Voron 2.4 250 0.25 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 250 0.6 nozzle",
"Voron 2.4 250 0.8 nozzle",
"Voron 2.4 250 1.0 nozzle",
@ -21,6 +22,7 @@
"Voron 2.4 300 0.15 nozzle",
"Voron 2.4 300 0.2 nozzle",
"Voron 2.4 300 0.25 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 300 0.6 nozzle",
"Voron 2.4 300 0.8 nozzle",
"Voron 2.4 300 1.0 nozzle",
@ -28,6 +30,7 @@
"Voron 2.4 350 0.15 nozzle",
"Voron 2.4 350 0.2 nozzle",
"Voron 2.4 350 0.25 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron 2.4 350 0.6 nozzle",
"Voron 2.4 350 0.8 nozzle",
"Voron 2.4 350 1.0 nozzle",
@ -35,6 +38,7 @@
"Voron Trident 250 0.15 nozzle",
"Voron Trident 250 0.2 nozzle",
"Voron Trident 250 0.25 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 250 0.6 nozzle",
"Voron Trident 250 0.8 nozzle",
"Voron Trident 250 1.0 nozzle",
@ -42,6 +46,7 @@
"Voron Trident 300 0.15 nozzle",
"Voron Trident 300 0.2 nozzle",
"Voron Trident 300 0.25 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 300 0.6 nozzle",
"Voron Trident 300 0.8 nozzle",
"Voron Trident 300 1.0 nozzle",
@ -49,6 +54,7 @@
"Voron Trident 350 0.15 nozzle",
"Voron Trident 350 0.2 nozzle",
"Voron Trident 350 0.25 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Trident 350 0.6 nozzle",
"Voron Trident 350 0.8 nozzle",
"Voron Trident 350 1.0 nozzle",
@ -56,6 +62,7 @@
"Voron 0.1 0.15 nozzle",
"Voron 0.1 0.2 nozzle",
"Voron 0.1 0.25 nozzle",
"Voron 0.1 0.5 nozzle",
"Voron 0.1 0.6 nozzle",
"Voron 0.1 0.8 nozzle",
"Voron 0.1 1.0 nozzle",
@ -63,6 +70,7 @@
"Voron Switchwire 250 0.15 nozzle",
"Voron Switchwire 250 0.2 nozzle",
"Voron Switchwire 250 0.25 nozzle",
"Voron Switchwire 250 0.5 nozzle",
"Voron Switchwire 250 0.6 nozzle",
"Voron Switchwire 250 0.8 nozzle",
"Voron Switchwire 250 1.0 nozzle"

View File

@ -0,0 +1,29 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron 0.1 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron 0.1",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"120x0",
"120x120",
"0x120"
],
"printable_height": "120",
"nozzle_type": "undefine",
"auxiliary_fan": "0",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron 0.1",
"model_id": "Voron0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_120_build_plate.stl",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron 2.4 250 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron 2.4 250",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"250x0",
"250x250",
"0x250"
],
"printable_height": "225",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron 2.4 250",
"model_id": "Voron2_250",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_250_build_plate.stl",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron 2.4 300 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron 2.4 300",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"300x0",
"300x300",
"0x300"
],
"printable_height": "275",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron 2.4 300",
"model_id": "Voron2_300",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_300_build_plate.stl",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron 2.4 350 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron 2.4 350",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"350x0",
"350x350",
"0x350"
],
"printable_height": "325",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron 2.4 350",
"model_id": "Voron2_350",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_350_build_plate.stl",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron Switchwire 250 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron Switchwire 250",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"250x0",
"250x210",
"0x210"
],
"printable_height": "240",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron Switchwire 250",
"model_id": "Voron_Switchwire_250",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron Trident 250 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron Trident 250",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"250x0",
"250x250",
"0x250"
],
"printable_height": "250",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron Trident 250",
"model_id": "Voron2_Trident_250",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_250_build_plate.stl",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron Trident 300 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron Trident 300",
"default_print_profile": "0.25mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"300x0",
"300x300",
"0x300"
],
"printable_height": "250",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron Trident 300",
"model_id": "Voron2_Trident_300",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_300_build_plate.stl",

View File

@ -0,0 +1,27 @@
{
"type": "machine",
"setting_id": "GM003",
"name": "Voron Trident 350 0.5 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_klipper_common",
"printer_model": "Voron Trident 350",
"default_print_profile": "0.30mm Standard 0.5 nozzle @Voron",
"max_layer_height": [
"0.4"
],
"min_layer_height": [
"0.1"
],
"nozzle_diameter": [
"0.5"
],
"printable_area": [
"0x0",
"350x0",
"350x350",
"0x350"
],
"printable_height": "250",
"printer_variant": "0.5"
}

View File

@ -2,7 +2,7 @@
"type": "machine_model",
"name": "Voron Trident 350",
"model_id": "Voron2_Trident_350",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.6;0.8;1.0",
"nozzle_diameter": "0.4;0.15;0.2;0.25;0.5;0.6;0.8;1.0",
"machine_tech": "FFF",
"family": "VoronDesign",
"bed_model": "Voron_350_build_plate.stl",

View File

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.10mm Extra Fine 0.5 nozzle @Voron",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_voron_common_0_5",
"layer_height": "0.10",
"bottom_shell_layers": "6",
"top_shell_layers": "8"
}

View File

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.15mm Fine 0.5 nozzle @Voron",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_voron_common_0_5",
"layer_height": "0.15",
"bottom_shell_layers": "4",
"top_shell_layers": "6"
}

View File

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.20mm Optimal 0.5 nozzle @Voron",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_voron_common_0_5",
"layer_height": "0.20",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View File

@ -0,0 +1,11 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.25mm Standard 0.5 nozzle @Voron",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_voron_common_0_5",
"layer_height": "0.25",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View File

@ -0,0 +1,12 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.30mm Draft 0.5 nozzle @Voron",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_voron_common_0_5",
"layer_height": "0.30",
"top_surface_line_width": "0.55",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View File

@ -0,0 +1,12 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.35mm Extra Draft 0.5 nozzle @Voron",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_voron_common_0_5",
"layer_height": "0.35",
"top_surface_line_width": "0.55",
"bottom_shell_layers": "3",
"top_shell_layers": "4"
}

View File

@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_voron_common_0_5",
"from": "system",
"instantiation": "false",
"inherits": "fdm_process_voron_common",
"initial_layer_line_width": "0.52",
"initial_layer_print_height": "0.25",
"outer_wall_line_width": "0.52",
"line_width": "0.52",
"sparse_infill_line_width": "0.52",
"inner_wall_line_width": "0.52",
"internal_solid_infill_line_width": "0.52",
"support_line_width": "0.52",
"top_surface_line_width": "0.52",
"compatible_printers": [
"Voron 0.1 0.5 nozzle",
"Voron 2.4 250 0.5 nozzle",
"Voron 2.4 300 0.5 nozzle",
"Voron 2.4 350 0.5 nozzle",
"Voron Trident 250 0.5 nozzle",
"Voron Trident 300 0.5 nozzle",
"Voron Trident 350 0.5 nozzle",
"Voron Switchwire 250 0.5 nozzle"
]
}

View File

@ -303,12 +303,18 @@ function FilterModelList(keyword) {
function SelectPrinterAll( sVendor )
{
$("input[vendor='"+sVendor+"']").prop("checked", true);
$("input[vendor='"+sVendor+"']").each(function() {
CheckBoxOnclick(this);
});
}
function SelectPrinterNone( sVendor )
{
$("input[vendor='"+sVendor+"']").prop("checked", false);
$("input[vendor='"+sVendor+"']").each(function() {
CheckBoxOnclick(this);
});
}

View File

@ -303,12 +303,18 @@ function FilterModelList(keyword) {
function SelectPrinterAll( sVendor )
{
$("input[vendor='"+sVendor+"']").prop("checked", true);
$("input[vendor='"+sVendor+"']").each(function() {
CheckBoxOnclick(this);
});
}
function SelectPrinterNone( sVendor )
{
$("input[vendor='"+sVendor+"']").prop("checked", false);
$("input[vendor='"+sVendor+"']").each(function() {
CheckBoxOnclick(this);
});
}
function OnExitFilter() {

View File

@ -67,6 +67,7 @@ public:
static const ColorRGB YELLOW() { return { 1.0f, 1.0f, 0.0f }; }
static const ColorRGB WHITE() { return { 1.0f, 1.0f, 1.0f }; }
static const ColorRGB ORCA() { return {0.0f, 150.f / 255.0f, 136.0f / 255}; }
static const ColorRGB WARNING() { return {241.0f / 255, 117.f / 255.0f, 78.0f / 255}; }
static const ColorRGB X() { return { 0.75f, 0.0f, 0.0f }; }
static const ColorRGB Y() { return { 0.0f, 0.75f, 0.0f }; }

View File

@ -717,53 +717,6 @@ Transformation Transformation::volume_to_bed_transformation(const Transformation
return out;
}
TransformationSVD::TransformationSVD(const Transform3d& trafo)
{
const auto &m0 = trafo.matrix().block<3, 3>(0, 0);
mirror = m0.determinant() < 0.0;
Matrix3d m;
if (mirror)
m = m0 * Eigen::DiagonalMatrix<double, 3, 3>(-1.0, 1.0, 1.0);
else
m = m0;
const Eigen::JacobiSVD<Matrix3d> svd(m, Eigen::ComputeFullU | Eigen::ComputeFullV);
u = svd.matrixU();
v = svd.matrixV();
s = svd.singularValues().asDiagonal();
scale = !s.isApprox(Matrix3d::Identity());
anisotropic_scale = ! is_approx(s(0, 0), s(1, 1)) || ! is_approx(s(1, 1), s(2, 2));
rotation = !v.isApprox(u);
if (anisotropic_scale) {
rotation_90_degrees = true;
for (int i = 0; i < 3; ++i) {
const Vec3d row = v.row(i).cwiseAbs();
const size_t num_zeros = is_approx(row[0], 0.) + is_approx(row[1], 0.) + is_approx(row[2], 0.);
const size_t num_ones = is_approx(row[0], 1.) + is_approx(row[1], 1.) + is_approx(row[2], 1.);
if (num_zeros != 2 || num_ones != 1) {
rotation_90_degrees = false;
break;
}
}
// Detect skew by brute force: check if the axes are still orthogonal after transformation
const Matrix3d trafo_linear = trafo.linear();
const std::array<Vec3d, 3> axes = { Vec3d::UnitX(), Vec3d::UnitY(), Vec3d::UnitZ() };
std::array<Vec3d, 3> transformed_axes;
for (int i = 0; i < 3; ++i) {
transformed_axes[i] = trafo_linear * axes[i];
}
skew = std::abs(transformed_axes[0].dot(transformed_axes[1])) > EPSILON ||
std::abs(transformed_axes[1].dot(transformed_axes[2])) > EPSILON ||
std::abs(transformed_axes[2].dot(transformed_axes[0])) > EPSILON;
// This following old code does not work under all conditions. The v matrix can become non diagonal (see SPE-1492)
// skew = ! rotation_90_degrees;
} else
skew = false;
}
// For parsing a transformation matrix from 3MF / AMF.
Transform3d transform3d_from_string(const std::string& transform_str)
{
@ -812,4 +765,78 @@ double rotation_diff_z(const Vec3d &rot_xyz_from, const Vec3d &rot_xyz_to)
return (axis.z() < 0) ? -angle : angle;
}
TransformationSVD::TransformationSVD(const Transform3d& trafo)
{
const auto &m0 = trafo.matrix().block<3, 3>(0, 0);
mirror = m0.determinant() < 0.0;
Matrix3d m;
if (mirror)
m = m0 * Eigen::DiagonalMatrix<double, 3, 3>(-1.0, 1.0, 1.0);
else
m = m0;
const Eigen::JacobiSVD<Matrix3d> svd(m, Eigen::ComputeFullU | Eigen::ComputeFullV);
u = svd.matrixU();
v = svd.matrixV();
s = svd.singularValues().asDiagonal();
scale = !s.isApprox(Matrix3d::Identity());
anisotropic_scale = ! is_approx(s(0, 0), s(1, 1)) || ! is_approx(s(1, 1), s(2, 2));
rotation = !v.isApprox(u);
if (anisotropic_scale) {
rotation_90_degrees = true;
for (int i = 0; i < 3; ++i) {
const Vec3d row = v.row(i).cwiseAbs();
const size_t num_zeros = is_approx(row[0], 0.) + is_approx(row[1], 0.) + is_approx(row[2], 0.);
const size_t num_ones = is_approx(row[0], 1.) + is_approx(row[1], 1.) + is_approx(row[2], 1.);
if (num_zeros != 2 || num_ones != 1) {
rotation_90_degrees = false;
break;
}
}
// Detect skew by brute force: check if the axes are still orthogonal after transformation
const Matrix3d trafo_linear = trafo.linear();
const std::array<Vec3d, 3> axes = { Vec3d::UnitX(), Vec3d::UnitY(), Vec3d::UnitZ() };
std::array<Vec3d, 3> transformed_axes;
for (int i = 0; i < 3; ++i) {
transformed_axes[i] = trafo_linear * axes[i];
}
skew = std::abs(transformed_axes[0].dot(transformed_axes[1])) > EPSILON ||
std::abs(transformed_axes[1].dot(transformed_axes[2])) > EPSILON ||
std::abs(transformed_axes[2].dot(transformed_axes[0])) > EPSILON;
// This following old code does not work under all conditions. The v matrix can become non diagonal (see SPE-1492)
// skew = ! rotation_90_degrees;
} else
skew = false;
}
Transformation mat_around_a_point_rotate(const Transformation &InMat, const Vec3d &pt, const Vec3d &axis, float rotate_theta_radian)
{
auto xyz = InMat.get_offset();
Transformation left;
left.set_offset(-xyz); // at world origin
auto curMat = left * InMat;
auto qua = Eigen::Quaterniond(Eigen::AngleAxisd(rotate_theta_radian, axis));
qua.normalize();
Transform3d cur_matrix;
Transformation rotateMat4;
rotateMat4.set_matrix(cur_matrix.fromPositionOrientationScale(Vec3d(0., 0., 0.), qua, Vec3d(1., 1., 1.)));
curMat = rotateMat4 * curMat; // along_fix_axis
// rotate mat4 along fix pt
Transformation temp_world;
auto qua_world = Eigen::Quaterniond(Eigen::AngleAxisd(0, axis));
qua_world.normalize();
Transform3d cur_matrix_world;
temp_world.set_matrix(cur_matrix_world.fromPositionOrientationScale(pt, qua_world, Vec3d(1., 1., 1.)));
auto temp_xyz = temp_world.get_matrix().inverse() * xyz;
auto new_pos = temp_world.get_matrix() * (rotateMat4.get_matrix() * temp_xyz);
curMat.set_offset(new_pos);
return curMat;
}
}} // namespace Slic3r::Geometry

View File

@ -10,7 +10,7 @@
// Serialization through the Cereal library
#include <cereal/access.hpp>
namespace Slic3r {
namespace Slic3r {
namespace ClipperLib {
class PolyNode;
@ -544,6 +544,7 @@ inline bool is_rotation_ninety_degrees(const Vec3d &rotation)
return is_rotation_ninety_degrees(rotation.x()) && is_rotation_ninety_degrees(rotation.y()) && is_rotation_ninety_degrees(rotation.z());
}
Transformation mat_around_a_point_rotate(const Transformation& innMat, const Vec3d &pt, const Vec3d &axis, float rotate_theta_radian);
} } // namespace Slicer::Geometry
#endif

View File

@ -13,7 +13,27 @@
namespace Slic3r {
namespace Measure {
bool get_point_projection_to_plane(const Vec3d &pt, const Vec3d &plane_origin, const Vec3d &plane_normal, Vec3d &intersection_pt)
{
auto normal = plane_normal.normalized();
auto BA = plane_origin - pt;
auto length = BA.dot(normal);
intersection_pt = pt + length * normal;
return true;
}
Vec3d get_one_point_in_plane(const Vec3d &plane_origin, const Vec3d &plane_normal)
{
Vec3d dir(1, 0, 0);
float eps = 1e-3;
if (abs(plane_normal.dot(dir)) > 1 - eps) {
dir = Vec3d(0, 1, 0);
}
auto new_pt = plane_origin + dir;
Vec3d retult;
get_point_projection_to_plane(new_pt, plane_origin, plane_normal, retult);
return retult;
}
constexpr double feature_hover_limit = 0.5; // how close to a feature the mouse must be to highlight it
@ -33,7 +53,7 @@ static std::tuple<Vec3d, double, double> get_center_and_radius(const std::vector
double error = std::numeric_limits<double>::max();
auto circle = Geometry::circle_ransac(out, iter, &error);
return std::make_tuple(trafo.inverse() * Vec3d(circle.center.x(), circle.center.y(), z), circle.radius, error);
}
@ -69,16 +89,18 @@ public:
bool features_extracted = false;
};
std::optional<SurfaceFeature> get_feature(size_t face_idx, const Vec3d& point);
std::optional<SurfaceFeature> get_feature(size_t face_idx, const Vec3d &point, const Transform3d &world_tran,bool only_select_plane);
int get_num_of_planes() const;
const std::vector<int>& get_plane_triangle_indices(int idx) const;
std::vector<int>* get_plane_tri_indices(int idx);
const std::vector<SurfaceFeature>& get_plane_features(unsigned int plane_id);
std::vector<SurfaceFeature>* get_plane_features_pointer(unsigned int plane_id);
const indexed_triangle_set& get_its() const;
private:
void update_planes();
void extract_features(int plane_idx);
std::vector<PlaneData> m_planes;
std::vector<size_t> m_face_to_plane;
indexed_triangle_set m_its;
@ -158,7 +180,7 @@ void MeasuringImpl::update_planes()
m_planes.back().normal = normal_ptr->cast<double>();
std::sort(m_planes.back().facets.begin(), m_planes.back().facets.end());
}
// Check that each facet is part of one of the planes.
assert(std::none_of(m_face_to_plane.begin(), m_face_to_plane.end(), [](size_t val) { return val == size_t(-1); }));
@ -175,7 +197,7 @@ void MeasuringImpl::update_planes()
const auto& facets = planes[plane_id].facets;
planes[plane_id].borders.clear();
std::vector<std::array<bool, 3>> visited(facets.size(), {false, false, false});
for (int face_id=0; face_id<int(facets.size()); ++face_id) {
assert(face_to_plane[facets[face_id]] == plane_id);
@ -193,7 +215,7 @@ void MeasuringImpl::update_planes()
Halfedge_index he = sm.halfedge(Face_index(facets[face_id]));
while (he.side() != edge_id)
he = sm.next(he);
// he is the first halfedge on the border. Now walk around and append the points.
//const Halfedge_index he_orig = he;
planes[plane_id].borders.emplace_back();
@ -202,7 +224,7 @@ void MeasuringImpl::update_planes()
last_border.emplace_back(sm.point(sm.source(he)).cast<double>());
//Vertex_index target = sm.target(he);
const Halfedge_index he_start = he;
Face_index fi = he.face();
auto face_it = std::lower_bound(facets.begin(), facets.end(), int(fi));
assert(face_it != facets.end());
@ -228,7 +250,7 @@ void MeasuringImpl::update_planes()
he = sm.opposite(he);
if (he.is_invalid())
goto PLANE_FAILURE;
Face_index fi = he.face();
auto face_it = std::lower_bound(facets.begin(), facets.end(), int(fi));
if (face_it == facets.end() || *face_it != int(fi)) // This indicates a broken mesh.
@ -265,11 +287,6 @@ void MeasuringImpl::update_planes()
m_planes.shrink_to_fit();
}
void MeasuringImpl::extract_features(int plane_idx)
{
assert(! m_planes[plane_idx].features_extracted);
@ -490,7 +507,7 @@ void MeasuringImpl::extract_features(int plane_idx)
Vec3d cog = Vec3d::Zero();
size_t counter = 0;
for (const std::vector<Vec3d>& b : plane.borders) {
for (size_t i = 1; i < b.size(); ++i) {
for (size_t i = 0; i < b.size(); ++i) {
cog += b[i];
++counter;
}
@ -505,14 +522,7 @@ void MeasuringImpl::extract_features(int plane_idx)
plane.features_extracted = true;
}
std::optional<SurfaceFeature> MeasuringImpl::get_feature(size_t face_idx, const Vec3d& point)
std::optional<SurfaceFeature> MeasuringImpl::get_feature(size_t face_idx, const Vec3d &point, const Transform3d &world_tran,bool only_select_plane)
{
if (face_idx >= m_face_to_plane.size())
return std::optional<SurfaceFeature>();
@ -521,7 +531,7 @@ std::optional<SurfaceFeature> MeasuringImpl::get_feature(size_t face_idx, const
if (! plane.features_extracted)
extract_features(m_face_to_plane[face_idx]);
size_t closest_feature_idx = size_t(-1);
double min_dist = std::numeric_limits<double>::max();
@ -530,40 +540,57 @@ std::optional<SurfaceFeature> MeasuringImpl::get_feature(size_t face_idx, const
assert(plane.surface_features.empty() || plane.surface_features.back().get_type() == SurfaceFeatureType::Plane);
for (size_t i=0; i<plane.surface_features.size() - 1; ++i) {
// The -1 is there to prevent measuring distance to the plane itself,
// which is needless and relatively expensive.
res = get_measurement(plane.surface_features[i], point_sf);
if (res.distance_strict) { // TODO: this should become an assert after all combinations are implemented.
double dist = res.distance_strict->dist;
if (dist < feature_hover_limit && dist < min_dist) {
min_dist = std::min(dist, min_dist);
closest_feature_idx = i;
if (!only_select_plane) {
for (size_t i = 0; i < plane.surface_features.size() - 1; ++i) {
// The -1 is there to prevent measuring distance to the plane itself,
// which is needless and relatively expensive.
res = get_measurement(plane.surface_features[i], point_sf);
if (res.distance_strict) { // TODO: this should become an assert after all combinations are implemented.
double dist = res.distance_strict->dist;
if (dist < feature_hover_limit && dist < min_dist) {
min_dist = std::min(dist, min_dist);
closest_feature_idx = i;
}
}
}
}
if (closest_feature_idx != size_t(-1)) {
const SurfaceFeature& f = plane.surface_features[closest_feature_idx];
if (f.get_type() == SurfaceFeatureType::Edge) {
// If this is an edge, check if we are not close to the endpoint. If so,
// we will include the endpoint as well. Close = 10% of the lenghth of
// the edge, clamped between 0.025 and 0.5 mm.
const auto& [sp, ep] = f.get_edge();
double len_sq = (ep-sp).squaredNorm();
double limit_sq = std::max(0.025*0.025, std::min(0.5*0.5, 0.1 * 0.1 * len_sq));
if (closest_feature_idx != size_t(-1)) {
const SurfaceFeature &f = plane.surface_features[closest_feature_idx];
if (f.get_type() == SurfaceFeatureType::Edge) {
// If this is an edge, check if we are not close to the endpoint. If so,
// we will include the endpoint as well. Close = 10% of the lenghth of
// the edge, clamped between 0.025 and 0.5 mm.
const auto &[sp, ep] = f.get_edge();
double len_sq = (ep - sp).squaredNorm();
double limit_sq = std::max(0.025 * 0.025, std::min(0.5 * 0.5, 0.1 * 0.1 * len_sq));
if ((point - sp).squaredNorm() < limit_sq) {
SurfaceFeature local_f(sp);
local_f.origin_surface_feature = std::make_shared<SurfaceFeature>(local_f);
local_f.translate(world_tran);
return std::make_optional(local_f);
}
if ((point-sp).squaredNorm() < limit_sq)
return std::make_optional(SurfaceFeature(sp));
if ((point-ep).squaredNorm() < limit_sq)
return std::make_optional(SurfaceFeature(ep));
if ((point - ep).squaredNorm() < limit_sq) {
SurfaceFeature local_f(ep);
local_f.origin_surface_feature = std::make_shared<SurfaceFeature>(local_f);
local_f.translate(world_tran);
return std::make_optional(local_f);
}
}
SurfaceFeature f_tran(f);
f_tran.origin_surface_feature = std::make_shared<SurfaceFeature>(f);
f_tran.translate(world_tran);
return std::make_optional(f_tran);
}
return std::make_optional(f);
}
// Nothing detected, return the plane as a whole.
assert(plane.surface_features.back().get_type() == SurfaceFeatureType::Plane);
return std::make_optional(plane.surface_features.back());
auto cur_plane = const_cast<PlaneData*>(&plane);
SurfaceFeature f_tran(cur_plane->surface_features.back());
f_tran.origin_surface_feature = std::make_shared<SurfaceFeature>(cur_plane->surface_features.back());
f_tran.translate(world_tran);
return std::make_optional(f_tran);
}
@ -583,6 +610,12 @@ const std::vector<int>& MeasuringImpl::get_plane_triangle_indices(int idx) const
return m_planes[idx].facets;
}
std::vector<int>* MeasuringImpl::get_plane_tri_indices(int idx)
{
assert(idx >= 0 && idx < int(m_planes.size()));
return &m_planes[idx].facets;
}
const std::vector<SurfaceFeature>& MeasuringImpl::get_plane_features(unsigned int plane_id)
{
assert(plane_id < m_planes.size());
@ -591,21 +624,18 @@ const std::vector<SurfaceFeature>& MeasuringImpl::get_plane_features(unsigned in
return m_planes[plane_id].surface_features;
}
std::vector<SurfaceFeature>* MeasuringImpl::get_plane_features_pointer(unsigned int plane_id) {
assert(plane_id < m_planes.size());
if (!m_planes[plane_id].features_extracted)
extract_features(plane_id);
return &m_planes[plane_id].surface_features;
}
const indexed_triangle_set& MeasuringImpl::get_its() const
{
return this->m_its;
}
Measuring::Measuring(const indexed_triangle_set& its)
: priv{std::make_unique<MeasuringImpl>(its)}
{}
@ -614,9 +644,12 @@ Measuring::~Measuring() {}
std::optional<SurfaceFeature> Measuring::get_feature(size_t face_idx, const Vec3d& point) const
std::optional<SurfaceFeature> Measuring::get_feature(size_t face_idx, const Vec3d &point, const Transform3d &world_tran, bool only_select_plane) const
{
return priv->get_feature(face_idx, point);
if (face_idx == 7516 || face_idx == 7517) {
std::cout << "";
}
return priv->get_feature(face_idx, point, world_tran, only_select_plane);
}
@ -796,13 +829,7 @@ static AngleAndEdges angle_plane_plane(const std::tuple<int, Vec3d, Vec3d>& p1,
return ret;
}
MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature& b, const Measuring* measuring)
MeasurementResult get_measurement(const SurfaceFeature &a, const SurfaceFeature &b, bool deal_circle_result)
{
assert(a.get_type() != SurfaceFeatureType::Undef && b.get_type() != SurfaceFeatureType::Undef);
@ -819,7 +846,7 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
if (f2.get_type() == SurfaceFeatureType::Point) {
Vec3d diff = (f2.get_point() - f1.get_point());
result.distance_strict = std::make_optional(DistAndPoints{diff.norm(), f1.get_point(), f2.get_point()});
result.distance_xyz = diff.cwiseAbs();
result.distance_xyz = diff;
///////////////////////////////////////////////////////////////////////////
} else if (f2.get_type() == SurfaceFeatureType::Edge) {
@ -849,13 +876,18 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
result.distance_strict = std::make_optional(DistAndPoints{ radius, c, p_on_circle });
}
else {
const Eigen::Hyperplane<double, 3> circle_plane(n, c);
const Vec3d proj = circle_plane.projection(f1.get_point());
const double dist = std::sqrt(std::pow((proj - c).norm() - radius, 2.) +
(f1.get_point() - proj).squaredNorm());
if (deal_circle_result == false) {
const Eigen::Hyperplane<double, 3> circle_plane(n, c);
const Vec3d proj = circle_plane.projection(f1.get_point());
const double dist = std::sqrt(std::pow((proj - c).norm() - radius, 2.) + (f1.get_point() - proj).squaredNorm());
const Vec3d p_on_circle = c + radius * (proj - c).normalized();
result.distance_strict = std::make_optional(DistAndPoints{ dist, f1.get_point(), p_on_circle }); // TODO
const Vec3d p_on_circle = c + radius * (proj - c).normalized();
result.distance_strict = std::make_optional(DistAndPoints{dist, f1.get_point(), p_on_circle});
}
else {
const double dist = (f1.get_point() - c).norm();
result.distance_strict = std::make_optional(DistAndPoints{dist, f1.get_point(), c});
}
}
///////////////////////////////////////////////////////////////////////////
} else if (f2.get_type() == SurfaceFeatureType::Plane) {
@ -903,31 +935,31 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
result.angle = angle_edge_edge(f1.get_edge(), f2.get_edge());
///////////////////////////////////////////////////////////////////////////
} else if (f2.get_type() == SurfaceFeatureType::Circle) {
const std::pair<Vec3d, Vec3d> e = f1.get_edge();
const auto& [center, radius, normal] = f2.get_circle();
const Vec3d e1e2 = (e.second - e.first);
const Vec3d e1e2_unit = e1e2.normalized();
const std::pair<Vec3d, Vec3d> e = f1.get_edge();
const auto &[center, radius, normal] = f2.get_circle();
const Vec3d e1e2 = (e.second - e.first);
const Vec3d e1e2_unit = e1e2.normalized();
std::vector<DistAndPoints> distances;
distances.emplace_back(*get_measurement(SurfaceFeature(e.first), f2).distance_strict);
distances.emplace_back(*get_measurement(SurfaceFeature(e.second), f2).distance_strict);
const Eigen::Hyperplane<double, 3> plane(e1e2_unit, center);
const Eigen::ParametrizedLine<double, 3> line = Eigen::ParametrizedLine<double, 3>::Through(e.first, e.second);
const Vec3d inter = line.intersectionPoint(plane);
const Vec3d e1inter = inter - e.first;
if (e1inter.dot(e1e2) >= 0.0 && e1inter.norm() < e1e2.norm())
distances.emplace_back(*get_measurement(SurfaceFeature(inter), f2).distance_strict);
const Eigen::Hyperplane<double, 3> plane(e1e2_unit, center);
const Eigen::ParametrizedLine<double, 3> line = Eigen::ParametrizedLine<double, 3>::Through(e.first, e.second);
const Vec3d inter = line.intersectionPoint(plane);
const Vec3d e1inter = inter - e.first;
if (e1inter.dot(e1e2) >= 0.0 && e1inter.norm() < e1e2.norm()) distances.emplace_back(*get_measurement(SurfaceFeature(inter), f2).distance_strict);
auto it = std::min_element(distances.begin(), distances.end(),
[](const DistAndPoints& item1, const DistAndPoints& item2) {
return item1.dist < item2.dist;
});
result.distance_infinite = std::make_optional(DistAndPoints{it->dist, it->from, it->to});
auto it = std::min_element(distances.begin(), distances.end(), [](const DistAndPoints &item1, const DistAndPoints &item2) { return item1.dist < item2.dist; });
if (deal_circle_result == false) {
result.distance_infinite = std::make_optional(DistAndPoints{it->dist, it->from, it->to});
}
else{
const double dist = (it->from - center).norm();
result.distance_infinite = std::make_optional(DistAndPoints{dist, it->from, center});
}
///////////////////////////////////////////////////////////////////////////
} else if (f2.get_type() == SurfaceFeatureType::Plane) {
assert(measuring != nullptr);
const auto [from, to] = f1.get_edge();
const auto [idx, normal, origin] = f2.get_plane();
@ -944,9 +976,9 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
result.distance_infinite = std::make_optional(DistAndPoints{ it->dist, it->from, it->to });
}
else {
const std::vector<SurfaceFeature>& plane_features = measuring->get_plane_features(idx);
auto plane_features = f2.world_plane_features;
std::vector<DistAndPoints> distances;
for (const SurfaceFeature& sf : plane_features) {
for (const SurfaceFeature& sf : *plane_features) {
if (sf.get_type() == SurfaceFeatureType::Edge) {
const auto m = get_measurement(sf, f1);
if (!m.distance_infinite.has_value()) {
@ -975,7 +1007,7 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
const auto [c0, r0, n0] = f1.get_circle();
const auto [c1, r1, n1] = f2.get_circle();
// The following code is an adaptation of the algorithm found in:
// The following code is an adaptation of the algorithm found in:
// https://github.com/davideberly/GeometricTools/blob/master/GTE/Mathematics/DistCircle3Circle3.h
// and described in:
// https://www.geometrictools.com/Documentation/DistanceToCircle3.pdf
@ -1120,7 +1152,7 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
}
else {
ClosestInfo& info = candidates[0];
const double N0dD = n0.dot(D);
const Vec3d normProj = N0dD * n0;
const Vec3d compProj = D - normProj;
@ -1185,22 +1217,26 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
}
}
info.sqrDistance = distance * distance + N0dD * N0dD;
info.sqrDistance = distance * distance;
}
if (deal_circle_result == false) {
result.distance_infinite = std::make_optional(
DistAndPoints{std::sqrt(candidates[0].sqrDistance), candidates[0].circle0Closest, candidates[0].circle1Closest}); // TODO
} else {
const double dist = (c0 - c1).norm();
result.distance_strict = std::make_optional(DistAndPoints{dist, c0, c1});
}
result.distance_infinite = std::make_optional(DistAndPoints{ std::sqrt(candidates[0].sqrDistance), candidates[0].circle0Closest, candidates[0].circle1Closest }); // TODO
///////////////////////////////////////////////////////////////////////////
} else if (f2.get_type() == SurfaceFeatureType::Plane) {
assert(measuring != nullptr);
const auto [center, radius, normal1] = f1.get_circle();
const auto [idx2, normal2, origin2] = f2.get_plane();
const bool coplanar = are_parallel(normal1, normal2) && Eigen::Hyperplane<double, 3>(normal1, center).absDistance(origin2) < EPSILON;
if (!coplanar) {
const std::vector<SurfaceFeature>& plane_features = measuring->get_plane_features(idx2);
auto plane_features = f2.world_plane_features;
std::vector<DistAndPoints> distances;
for (const SurfaceFeature& sf : plane_features) {
for (const SurfaceFeature& sf : *plane_features) {
if (sf.get_type() == SurfaceFeatureType::Edge) {
const auto m = get_measurement(sf, f1);
if (!m.distance_infinite.has_value()) {
@ -1218,6 +1254,13 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
});
result.distance_infinite = std::make_optional(DistAndPoints{ it->dist, it->from, it->to });
}
else {
const Eigen::Hyperplane<double, 3> plane(normal2, origin2);
result.distance_infinite = std::make_optional(DistAndPoints{plane.absDistance(center), center, plane.projection(center)});
}
}
else {
result.distance_strict = std::make_optional(DistAndPoints{0, center, origin2});
}
}
///////////////////////////////////////////////////////////////////////////
@ -1229,23 +1272,159 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
if (are_parallel(normal1, normal2)) {
// The planes are parallel, calculate distance.
const Eigen::Hyperplane<double, 3> plane(normal1, pt1);
result.distance_infinite = std::make_optional(DistAndPoints{ plane.absDistance(pt2), pt2, plane.projection(pt2) }); // TODO
const Eigen::Hyperplane<double, 3> plane(normal2, pt2);
result.distance_infinite = std::make_optional(DistAndPoints{ plane.absDistance(pt1), pt1, plane.projection(pt1) });
}
else
result.angle = angle_plane_plane(f1.get_plane(), f2.get_plane());
}
if (swap) {
auto swap_dist_and_points = [](DistAndPoints& dp) {
auto back = dp.to;
dp.to = dp.from;
dp.from = back;
};
if (result.distance_infinite.has_value()) {
swap_dist_and_points(*result.distance_infinite);
}
if (result.distance_strict.has_value()) {
swap_dist_and_points(*result.distance_strict);
}
}
return result;
}
bool can_set_xyz_distance(const SurfaceFeature &a, const SurfaceFeature &b) {
const bool swap = int(a.get_type()) > int(b.get_type());
const SurfaceFeature &f1 = swap ? b : a;
const SurfaceFeature &f2 = swap ? a : b;
if (f1.get_type() == SurfaceFeatureType::Point){
if (f2.get_type() == SurfaceFeatureType::Point) {
return true;
}
}
else if (f1.get_type() == SurfaceFeatureType::Circle) {
if (f2.get_type() == SurfaceFeatureType::Circle) {
return true;
}
}
return false;
}
AssemblyAction get_assembly_action(const SurfaceFeature& a, const SurfaceFeature& b)
{
AssemblyAction action;
const SurfaceFeature &f1 = a;
const SurfaceFeature &f2 = b;
if (f1.get_type() == SurfaceFeatureType::Plane) {
action.can_set_feature_1_reverse_rotation = true;
if (f2.get_type() == SurfaceFeatureType::Plane) {
const auto [idx1, normal1, pt1] = f1.get_plane();
const auto [idx2, normal2, pt2] = f2.get_plane();
action.can_set_to_center_coincidence = true;
action.can_set_feature_2_reverse_rotation = true;
if (are_parallel(normal1, normal2)) {
action.can_set_to_parallel = false;
action.has_parallel_distance = true;
action.can_around_center_of_faces = true;
Vec3d proj_pt2;
Measure::get_point_projection_to_plane(pt2, pt1, normal1, proj_pt2);
action.parallel_distance = (pt2 - proj_pt2).norm();
if ((pt2 - proj_pt2).dot(normal1) < 0) {
action.parallel_distance = -action.parallel_distance;
}
action.angle_radian = 0;
} else {
action.can_set_to_parallel = true;
action.has_parallel_distance = false;
action.can_around_center_of_faces = false;
action.parallel_distance = 0;
action.angle_radian = std::acos(std::clamp(normal2.dot(-normal1), -1.0, 1.0));
}
}
}
return action;
}
void SurfaceFeature::translate(const Vec3d& displacement) {
switch (get_type()) {
case Measure::SurfaceFeatureType::Point: {
m_pt1 = m_pt1 + displacement;
break;
}
case Measure::SurfaceFeatureType::Edge: {
m_pt1 = m_pt1 + displacement;
m_pt2 = m_pt2 + displacement;
if (m_pt3.has_value()) { //extra_point()
m_pt3 = *m_pt3 + displacement;
}
break;
}
case Measure::SurfaceFeatureType::Plane: {
//m_pt1 is normal;
m_pt2 = m_pt2 + displacement;
break;
}
case Measure::SurfaceFeatureType::Circle: {
m_pt1 = m_pt1 + displacement;
// m_pt2 is normal;
break;
}
default: break;
}
}
void SurfaceFeature::translate(const Transform3d &tran)
{
switch (get_type()) {
case Measure::SurfaceFeatureType::Point: {
m_pt1 = tran * m_pt1;
break;
}
case Measure::SurfaceFeatureType::Edge: {
m_pt1 = tran * m_pt1;
m_pt2 = tran * m_pt2;
if (m_pt3.has_value()) { // extra_point()
m_pt3 = tran * *m_pt3;
}
break;
}
case Measure::SurfaceFeatureType::Plane: {
// m_pt1 is normal;
Vec3d temp_pt1 = m_pt2 + m_pt1;
temp_pt1 = tran * temp_pt1;
m_pt2 = tran * m_pt2;
m_pt1 = (temp_pt1 - m_pt2).normalized();
break;
}
case Measure::SurfaceFeatureType::Circle: {
// m_pt1 is center;
// m_pt2 is normal;
auto local_normal = m_pt2;
auto local_center = m_pt1;
Vec3d temp_pt2 = local_normal + local_center;
temp_pt2 = tran * temp_pt2;
m_pt1 = tran * m_pt1;
auto world_center = m_pt1;
m_pt2 = (temp_pt2 - m_pt1).normalized();
} // namespace Measure
auto calc_world_radius = [&local_center, &local_normal, &tran, &world_center](const Vec3d &pt, double &value) {
Vec3d intersection_pt;
get_point_projection_to_plane(pt, local_center, local_normal, intersection_pt);
auto local_radius_pt = (intersection_pt - local_center).normalized() * value + local_center;
auto radius_pt = tran * local_radius_pt;
value = (radius_pt - world_center).norm();
};
//m_value is radius
auto new_pt = get_one_point_in_plane(local_center, local_normal);
calc_world_radius(new_pt, m_value);
break;
}
default: break;
}
}
}//namespace Measure
} // namespace Slic3r

View File

@ -6,18 +6,13 @@
#include "Point.hpp"
struct indexed_triangle_set;
namespace Slic3r {
class TriangleMesh;
namespace Measure {
enum class SurfaceFeatureType : int {
Undef = 0,
Point = 1 << 0,
@ -26,22 +21,44 @@ enum class SurfaceFeatureType : int {
Plane = 1 << 3
};
class SurfaceFeature {
bool get_point_projection_to_plane(const Vec3d &pt, const Vec3d &plane_origin, const Vec3d &plane_normal, Vec3d &intersection_pt);
Vec3d get_one_point_in_plane(const Vec3d &plane_origin, const Vec3d &plane_normal);
class SurfaceFeature
{
public:
SurfaceFeature(SurfaceFeatureType type, const Vec3d& pt1, const Vec3d& pt2, std::optional<Vec3d> pt3 = std::nullopt, double value = 0.0)
: m_type(type), m_pt1(pt1), m_pt2(pt2), m_pt3(pt3), m_value(value) {}
explicit SurfaceFeature(const Vec3d& pt)
SurfaceFeature(const Vec3d& pt)
: m_type{SurfaceFeatureType::Point}, m_pt1{pt} {}
SurfaceFeature(const SurfaceFeature& sf){
this->clone(sf);
volume = sf.volume;
plane_indices = sf.plane_indices;
world_tran = sf.world_tran;
world_plane_features = sf.world_plane_features;
origin_surface_feature = sf.origin_surface_feature;
}
void clone(const SurfaceFeature &sf)
{
m_type = sf.get_type();
m_pt1 = sf.get_pt1();
m_pt2 = sf.get_pt2();
m_pt3 = sf.get_pt3();
m_value = sf.get_value();
}
void translate(const Vec3d& displacement);
void translate(const Transform3d& tran);
// Get type of this feature.
SurfaceFeatureType get_type() const { return m_type; }
// For points, return the point.
Vec3d get_point() const { assert(m_type == SurfaceFeatureType::Point); return m_pt1; }
// For edges, return start and end.
std::pair<Vec3d, Vec3d> get_edge() const { assert(m_type == SurfaceFeatureType::Edge); return std::make_pair(m_pt1, m_pt2); }
std::pair<Vec3d, Vec3d> get_edge() const { assert(m_type == SurfaceFeatureType::Edge); return std::make_pair(m_pt1, m_pt2); }
// For circles, return center, radius and normal.
std::tuple<Vec3d, double, Vec3d> get_circle() const { assert(m_type == SurfaceFeatureType::Circle); return std::make_tuple(m_pt1, m_value, m_pt2); }
@ -75,6 +92,17 @@ public:
return !operator == (other);
}
void* volume{nullptr};
std::vector<int>* plane_indices{nullptr};
Transform3d world_tran;
std::shared_ptr<std::vector<SurfaceFeature>> world_plane_features{nullptr};
std::shared_ptr<SurfaceFeature> origin_surface_feature{nullptr};
Vec3d get_pt1() const{ return m_pt1; }
Vec3d get_pt2() const { return m_pt2; }
const std::optional<Vec3d>& get_pt3() const { return m_pt3; }
double get_value() const { return m_value; }
private:
SurfaceFeatureType m_type{ SurfaceFeatureType::Undef };
Vec3d m_pt1{ Vec3d::Zero() };
@ -97,7 +125,7 @@ public:
// Given a face_idx where the mouse cursor points, return a feature that
// should be highlighted (if any).
std::optional<SurfaceFeature> get_feature(size_t face_idx, const Vec3d& point) const;
std::optional<SurfaceFeature> get_feature(size_t face_idx, const Vec3d& point, const Transform3d & world_tran,bool only_select_plane) const;
// Return total number of planes.
int get_num_of_planes() const;
@ -111,7 +139,7 @@ public:
// Returns the mesh used for measuring
const indexed_triangle_set& get_its() const;
private:
private:
std::unique_ptr<MeasuringImpl> priv;
};
@ -152,7 +180,24 @@ struct MeasurementResult {
};
// Returns distance/angle between two SurfaceFeatures.
MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature& b, const Measuring* measuring = nullptr);
MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature& b,bool deal_circle_result =false);
bool can_set_xyz_distance(const SurfaceFeature &a, const SurfaceFeature &b);
struct AssemblyAction
{
bool can_set_to_parallel{false};
bool can_set_to_center_coincidence{false};
bool can_set_feature_1_reverse_rotation{false};
bool can_set_feature_2_reverse_rotation{false};
bool can_around_center_of_faces{false};
bool has_parallel_distance{false};
float parallel_distance;
float angle_radian{0};
Transform3d tran_for_parallel;
Transform3d tran_for_center_coincidence;
Transform3d tran_for_reverse_rotation;
};
AssemblyAction get_assembly_action(const SurfaceFeature &a, const SurfaceFeature &b);
inline Vec3d edge_direction(const Vec3d& from, const Vec3d& to) { return (to - from).normalized(); }
inline Vec3d edge_direction(const std::pair<Vec3d, Vec3d>& e) { return edge_direction(e.first, e.second); }

View File

@ -7,7 +7,7 @@ namespace Slic3r {
namespace Measure {
// Utility class used to calculate distance circle-circle
// Adaptation of code found in:
// Adaptation of code found in:
// https://github.com/davideberly/GeometricTools/blob/master/GTE/Mathematics/Polynomial1.h
class Polynomial1
@ -174,7 +174,7 @@ inline Polynomial1 operator * (double scalar, const Polynomial1& p)
}
// Utility class used to calculate distance circle-circle
// Adaptation of code found in:
// Adaptation of code found in:
// https://github.com/davideberly/GeometricTools/blob/master/GTE/Mathematics/RootsPolynomial.h
class RootsPolynomial
@ -242,7 +242,7 @@ public:
return false;
if (tmin >= tmax)
// Invalid ordering of interval endpoitns.
// Invalid ordering of interval endpoitns.
return false;
for (uint32_t i = 1; i <= maxIterations; ++i) {
@ -345,7 +345,7 @@ public:
}
};
// Adaptation of code found in:
// Adaptation of code found in:
// https://github.com/davideberly/GeometricTools/blob/master/GTE/Mathematics/Vector.h
// Construct a single vector orthogonal to the nonzero input vector. If

View File

@ -1851,6 +1851,26 @@ void PresetBundle::export_selections(AppConfig &config)
}
// BBS
void PresetBundle::set_num_filaments(unsigned int n, std::vector<std::string> new_colors) {
int old_filament_count = this->filament_presets.size();
if (n > old_filament_count && old_filament_count != 0)
filament_presets.resize(n, filament_presets.back());
else {
filament_presets.resize(n);
}
ConfigOptionStrings* filament_color = project_config.option<ConfigOptionStrings>("filament_colour");
filament_color->resize(n);
ams_multi_color_filment.resize(n);
// BBS set new filament color to new_color
if (old_filament_count < n) {
if (!new_colors.empty()) {
for (int i = old_filament_count; i < n; i++) {
filament_color->values[i] = new_colors[i - old_filament_count];
}
}
}
update_multi_material_filament_presets();
}
void PresetBundle::set_num_filaments(unsigned int n, std::string new_color)
{
int old_filament_count = this->filament_presets.size();

View File

@ -111,6 +111,7 @@ public:
void export_selections(AppConfig &config);
// BBS
void set_num_filaments(unsigned int n, std::vector<std::string> new_colors);
void set_num_filaments(unsigned int n, std::string new_col = "");
unsigned int sync_ams_list(unsigned int & unknowns);
//BBS: check whether this is the only edited filament

View File

@ -145,6 +145,8 @@ set(SLIC3R_GUI_SOURCES
#GUI/Gizmos/GLGizmoFaceDetector.hpp
GUI/Gizmos/GLGizmoMeasure.cpp
GUI/Gizmos/GLGizmoMeasure.hpp
GUI/Gizmos/GLGizmoAssembly.cpp
GUI/Gizmos/GLGizmoAssembly.hpp
GUI/Gizmos/GLGizmoSeam.cpp
GUI/Gizmos/GLGizmoSeam.hpp
#GUI/Gizmos/GLGizmoText.cpp

View File

@ -4445,7 +4445,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
logical_pos = logical_pos.cwiseQuotient(Vec2d(factor, factor));
#endif // ENABLE_RETINA_GL
if (!m_mouse.ignore_right_up) {
if (!m_mouse.ignore_right_up && m_gizmos.get_current_type() == GLGizmosManager::EType::Undefined) {
//BBS post right click event
if (!m_hover_plate_idxs.empty()) {
post_event(RBtnPlateEvent(EVT_GLCANVAS_PLATE_RIGHT_CLICK, { logical_pos, m_hover_plate_idxs.front() }));

View File

@ -743,6 +743,7 @@ public:
m_scene_raycaster.set_gizmos_on_top(value);
}
float get_explosion_ratio() { return m_explosion_ratio; }
void reset_explosion_ratio() { m_explosion_ratio = 1.0; }
void on_change_color_mode(bool is_dark, bool reinit = true);
const bool get_dark_mode_status() { return m_is_dark; }

View File

@ -1412,5 +1412,84 @@ GLModel::Geometry smooth_torus(unsigned int primary_resolution, unsigned int sec
return data;
}
GLModel::Geometry init_plane_data(const indexed_triangle_set& its, const std::vector<int>& triangle_indices, float normal_offset)
{
GLModel::Geometry init_data;
init_data.format = { GUI::GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 };
init_data.reserve_indices(3 * triangle_indices.size());
init_data.reserve_vertices(3 * triangle_indices.size());
unsigned int i = 0;
for (int idx : triangle_indices) {
Vec3f v0 = its.vertices[its.indices[idx][0]];
Vec3f v1 = its.vertices[its.indices[idx][1]];
Vec3f v2 = its.vertices[its.indices[idx][2]];
const Vec3f n = (v1 - v0).cross(v2 - v0).normalized();
if (std::abs(normal_offset) > 0.0) {
v0 = v0 + n * normal_offset;
v1 = v1 + n * normal_offset;
v2 = v2 + n * normal_offset;
}
init_data.add_vertex(v0, n);
init_data.add_vertex(v1, n);
init_data.add_vertex(v2, n);
init_data.add_triangle(i, i + 1, i + 2);
i += 3;
}
return init_data;
}
GLModel::Geometry init_torus_data(unsigned int primary_resolution,
unsigned int secondary_resolution,
const Vec3f & center,
float radius,
float thickness,
const Vec3f & model_axis,
const Transform3f &world_trafo)
{
const unsigned int torus_sector_count = std::max<unsigned int>(4, primary_resolution);
const unsigned int section_sector_count = std::max<unsigned int>(4, secondary_resolution);
const float torus_sector_step = 2.0f * float(M_PI) / float(torus_sector_count);
const float section_sector_step = 2.0f * float(M_PI) / float(section_sector_count);
GLModel::Geometry data;
data.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3N3 };
data.reserve_vertices(torus_sector_count * section_sector_count);
data.reserve_indices(torus_sector_count * section_sector_count * 2 * 3);
// vertices
const Transform3f local_to_world_matrix = world_trafo * Geometry::translation_transform(center.cast<double>()).cast<float>() *
Eigen::Quaternion<float>::FromTwoVectors(Vec3f::UnitZ(), model_axis);
for (unsigned int i = 0; i < torus_sector_count; ++i) {
const float section_angle = torus_sector_step * i;
const Vec3f radius_dir(std::cos(section_angle), std::sin(section_angle), 0.0f);
const Vec3f local_section_center = radius * radius_dir;
const Vec3f world_section_center = local_to_world_matrix * local_section_center;
const Vec3f local_section_normal = local_section_center.normalized().cross(Vec3f::UnitZ()).normalized();
const Vec3f world_section_normal = (Vec3f) (local_to_world_matrix.matrix().block(0, 0, 3, 3) * local_section_normal).normalized();
const Vec3f base_v = thickness * radius_dir;
for (unsigned int j = 0; j < section_sector_count; ++j) {
const Vec3f v = Eigen::AngleAxisf(section_sector_step * j, world_section_normal) * base_v;
data.add_vertex(world_section_center + v, (Vec3f) v.normalized());
}
}
// triangles
for (unsigned int i = 0; i < torus_sector_count; ++i) {
const unsigned int ii = i * section_sector_count;
const unsigned int ii_next = ((i + 1) % torus_sector_count) * section_sector_count;
for (unsigned int j = 0; j < section_sector_count; ++j) {
const unsigned int j_next = (j + 1) % section_sector_count;
const unsigned int i0 = ii + j;
const unsigned int i1 = ii_next + j;
const unsigned int i2 = ii_next + j_next;
const unsigned int i3 = ii + j_next;
data.add_triangle(i0, i1, i2);
data.add_triangle(i0, i2, i3);
}
}
return data;
}
} // namespace GUI
} // namespace Slic3r

Some files were not shown because too many files have changed in this diff Show More