Вместо предисловия

Есть у меня привычка - писать себе будущему заметки, особенно, если решение какого-то вопроса оказалось неочевидным и потребовало заметных трат времени и сил. А если есть вариант, что этот же вопрос придётся решать опять, но не скоро, то заметка обязательна. Собственно, текст ниже - такая заметка "для себя". Но когда я её закончил, то понял - добавь это абзац, поменяй формулировки и вот тебе заметка для Хабра.

Начало

Последнее время подсел на печать нейлоновой триммерной леской и резиноподобным материалом BFGummy. При выборе материала Nylon в параметрах печати включается "not supported", а Gummy просто отсутствует в материалах

Скрытое изображение

Можно конечно создать свой профиль и выбирать его каждый раз,

Скрытое изображение

но нередко об этом забываешь и запросто можно начать печатать с некоторыми параметрами по умолчанию. Такая же картина, если материала изначально не было в списке, как BFGummy

Суть хотелки - хочу, что бы в слайсере были нормальные параметры для материалов, которые будут сами включаться, при смене этого самого материала. Хочу добавить сопло 0.2 мм, есть на него планы.

Вводные данные

В качестве ОС у меня Debian и другой нет. Принтер - FlyingBear GHOST 6. Слайсер Cura скопирована в ~/.local/lib/cura/ из запущенного AppImage, оттуда и запускается (далее этот каталог буду называть <CURA_BASE>). Сразу обозначу и остальные каталоги, которые понадобятся для решения вопроса. Основные ресурсы для работы, каталог создан самой Cura'ой (я точно его не создавал) - ~/.local/share/cura/<CURA_VERSION>, как можно догадаться <CURA_VERSION> - версия установленной Cura, дальше каталог будет именоваться <CURA_SHARE>, каталог с конфигом Cura ~/.config/cura/ - <CURA_CONFIG>. Думаю, в Windows есть аналоги этих каталогов, и в комментариях напишут их расположение.

При беглом поиске вариантов решения, самый частый вариант - настроить "кастомный" принтер и у него можно настраивать что угодно. Почему-то этот вариант мне не нравился и поиски были продолжены. Вариант с которого началась эта заметка был найден на 3Dtoday (https://3dtoday.ru/questions/kak-dobavit-ili-vybrat-soplo-02-v-cura-540#)

Вопрос с соплом самый простой. В каталоге <CURA_BASE>/share/cura/resources/variants/ находим каталог со своей маркой принтера (в моём случае flyingbear). В каталоге находим файлы

	...
	flyingbear_ghost_5_0.25.inst.cfg
	flyingbear_ghost_5_0.30.inst.cfg
	flyingbear_ghost_5_0.40.inst.cfg
	flyingbear_ghost_5_0.50.inst.cfg
	flyingbear_ghost_5_0.60.inst.cfg
	flyingbear_ghost_5_0.80.inst.cfg

Долго не думая копируем один из них с именем flyingbear_ghost_5_0.20.inst.cfg, а можно и просто переименовать ненужный (ни разу не видел в продаже сопло на 0.25мм). Открываем новый файл в любом текстовом редакторе. Нас интересуют поля name и machine_nozzle_size, просто вбиваем туда нужные нам значения

    [general]
    definition = flyingbear_ghost_5
    name = 0.20mm Nozzle
    version = 4
    [metadata]
    hardware_type = nozzle
    setting_version = 22
    type = variant
    [values]
    machine_nozzle_size = 0.20

После перезагрузки слайсера, получим в списке новое сопло.

Скрытое изображение

С материалами уже намного интереснее.

Если коротко, то сначала, при необходимости, создаётся материал, а потом профили печати для него. Для нейлона нужен только профиль, сам материал уже есть.

Общий список материалов храниться в каталоге <CURA_BASE>/share/cura/resources/materials/ в xml-файлах с расширением xml.fdm_material, например, fdplast_abs_tomato.xml.fdm_material. Структура названия файла не случайна, через символ подчёркивания разделены: производитель (марка); название материала; цвет которым изображается модель в слайсере. Для создания профилей печати, независимо от марки материала, должен быть generic-профиль, именно на него ссылается файл профиля печати. Например. Для добавления в общий список Gummy от Bestfilament, понадобился generic_gummy.xml.fdm_material-файл. Есть ещё нюанс. Так как мой принтер рассчитан под пластик с диаметром прутка 1.75 мм, то необходим ещё файл под него и он имеет название generic_gummy_175.xml.fdm_material. Разница между файлами как минимум в указанном диаметре 2.85 и 1.75. Ниже пример моего файла для материала.

<?xml version="1.0" encoding="UTF-8"?>
    <!--
    Generic Gummy profile. The data in this file may not be correct for your specific machine.
    -->
    <fdmmaterial xmlns="http://www.ultimaker.com/material" xmlns:cura="http://www.ultimaker.com/cura" version="1.3">
        <metadata>
            <name>
                <brand>Generic</brand>
                <material>Gummy</material>
                <color>Generic</color>
            </name>
            <GUID>6941fbcf-baeb-4ec4-ac17-9b1c79b274d2</GUID>
            <version>34</version>
            <color_code>#874AF9</color_code>
            <description>Резиноподобный высокотемпературный материал. Хим/масло/бензостойкостью не обладает</description>
            <adhesion_info>Использовать самый сильный адгезив, иначе, отпадает.</adhesion_info>
        </metadata>
        <properties>
            <density>1.21</density>
            <diameter>1.75</diameter>
        </properties>
        <settings>
            <setting key="print temperature">240.0</setting>
            <setting key="standby temperature">175</setting>
            <setting key="heated bed temperature">110.0</setting>
            <setting key="build volume temperature">28</setting>
            <setting key="print cooling">0.0</setting>
            <setting key="adhesion tendency">0</setting>
            <setting key="surface energy">100</setting>
            <setting key="retraction amount">0.5</setting>
            <setting key="retraction speed">12.0</setting>
        </settings>
    </fdmmaterial>

Самый простой способ создать этот файл - скопировать его из <CURA_SHARE>/materials/ вписав предварительно Generic в поля brand и color. Но это generic материал, в списке материалов он не будет относиться к какому-либо производителю. Что бы добавить материал к производителю, нужно создать ещё один файл, с соответствующим названием, в моём случае - bestfilament_gummy_dodgerblue.xml.fdm_material.

<?xml version='1.0' encoding='utf-8'?>
<fdmmaterial version="1.3" xmlns="http://www.ultimaker.com/material" xmlns:cura="http://www.ultimaker.com/cura">
  <metadata>
    <name>
      <brand>Best Filament</brand>
      <material>Gummy</material>
      <color>DodgerBlue</color>
      <label>BF Gummy DodgerBlue</label>
    </name>
    <GUID>ce5a8c43-72a9-43fe-a7fe-2d243d52eff8</GUID>
    <color_code>#1E90FF</color_code>
    <version>34</version>
  </metadata>
  <properties>
    <density>1.21</density>
    <diameter>1.75</diameter>
    <weight>500</weight>
  </properties>
  <settings>
    <setting key="print cooling">0.0</setting>
    <setting key="print temperature">245.0</setting>
    <setting key="heated bed temperature">110</setting>
    <setting key="standby temperature">200</setting>
    <setting key="retraction amount">0.5</setting>
    <setting key="retraction speed">12.0</setting>
  </settings>
</fdmmaterial>

По сути это тот же файл файл, что и generic, только в полях brand, color и label указаны какие-то конкретные значения. Код цвета и его название можно взять в любой HTML-палитре. Поле GUID можно не трогать, программа нигде не ругается на повторяющиеся ID-шники, но можно и поменять взяв новый прямо у системы

cat /proc/sys/kernel/random/uuid

А теперь, собственно, перейдём к каталогу из которого можно взять файл для создания материала.

Файлы описания материалов, созданных пользователем, храняться в <CURA_SHARE>/materials/. Если материал был создан пользователем "с нуля", то файл имеет название типа custom_material+%232.xml.fdm_material и содержит описание материала в разделе settings. Если материал создаётся на основе уже имеющегося, то файл носит имя "родителя" плюс некий порядковый номер, например, fdplast_petg_gray+%232.xml.fdm_material. Как понятно из названия, это ответвление PET-G от FDPlast. В поле settings такого файл указываются только переопределяемые параметры материала. У меня есть две катушки PET-G от одного производителя купленные у него одновременно, только разного цвета, и они имеют разную оптимальную температуру печати - разница порядка десяти градусов. Поэтому пришлось добавить их как два разных материала, что бы температуру правильную не забывать ставить.

Собственно остались мелочи - создать профиль печати, для материала. Сами профили, для каждого поддерживаемого принтера, хранятся в каталоге <CURA_BASE>/share/cura/resources/quality/<МАРКА_ПРИНТЕРА>/. В этом каталоге хранятся подкаталоги для каждого из подготовленных материалов. Так как я добавляю gummy, то соответственно такой каталог и создаю. Что бы долго не думать, копирую файл-профиль из одного существующих каталогов, только меняю в имени название материала.

В самом файле наобходимо прописать название материала, размер сопла и в группе values параметры печати, причём не все, а только изменяемые от некоторых дефолтных. Так как, наверняка, добавляемым материалом уже печатали и получили некоторый набор параметров которые нужно теперь зафиксировать, то нужно просто эти параметры скопировать. Все сохранённые пользователем профили печати храняться в <CURA_SHARE>/quality_changes/, где нужный можно найти по имени принтера и имени профиля данного при сохранении. Собственно оттуда все поля для values и копируем. В моём случае получился вот такой файл профиля печати

 [general]
    definition = flyingbear_base
    name = Standard Quality
    version = 4
    [metadata]
    material = generic_gummy
    quality_type = normal
    setting_version = 22
    type = quality
    variant = 0.4mm Nozzle
    [values]
    adhesion_type = brim
    bottom_layers = 5
    brim_gap = 0.05
    cool_fan_enabled = False
    infill_line_distance = 0.5
    infill_pattern = lines
    infill_sparse_density = 100
    material_print_temperature = 245.0
    retraction_enable = False
    speed_infill = 25
    speed_print = 25
    top_layers = 5
    wall_0_wipe_dist = 0.5
    wall_line_count = 2
    z_seam_corner = z_seam_corner_inner
    z_seam_type = random

На этом собственно всё. При выборе материала, автоматом включаются параметры печати для него.

Скрытое изображение

Как по мне это пусть маленькое, но удобство.

Какие минусы у данного метода. При обновлении слайсера очередной перезаписью каталога, можно потерять все внесённые изменения. И вот тут может пригодиться <CURA_CONFIG>. В нём хранятся настройки всех запускавшихся версий Cura. Можно написать небольшой скрипт, для определения последней версии программы по именам подкаталогов в <CURA_CONFIG> и скопировать ей необходимые файлы из некоторого места хранения. Но этот вопрос решает каждый сам как хочет и если хочет.

Комментарии (0)