Added additional filament vendors. (#5461)

Added Anker printers to filament presets dialog.
Added helper to generate formatted strings for dialog from profile JSON files.
This commit is contained in:
anselor 2024-05-26 01:30:51 -04:00 committed by GitHub
parent 50f62b6854
commit a1b4e0ce55
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 190 additions and 16 deletions

View file

@ -0,0 +1,150 @@
# helps manage the static list of vendor names in src/slic3r/GUI/CreatePresetsDialog.cpp
import json
from pathlib import Path
from typing import Dict, List
scripts_dir = Path(__file__).resolve().parent
print(f'Scripts dir: {scripts_dir}')
root_dir = scripts_dir.parent
profiles_dir = root_dir / 'resources' / 'profiles'
printers: Dict[str, List[str]] = {}
# generates the printer vendor list
print(f'Looking in {profiles_dir.resolve()}')
for entry in profiles_dir.glob('*.json'):
if entry.is_file():
entry_info = json.loads(entry.read_text())
vendor_name = entry_info.get('name', None)
if vendor_name:
models = [machine.get('name', None) for machine in entry_info.get('machine_model_list', []) if machine.get('name', None)]
printers[vendor_name] = models
vendor_names = [f'"{vendor_name}",' for vendor_name in sorted(printers.keys(), key=str.casefold)]
vend_col_width = len(max(vendor_names, key=len))
vendors_formatted = ' {' + '\n '.join(' '.join(f"{vendor_name:{vend_col_width}}" for vendor_name in vendor_names[i:i+5]) for i in range(0, len(vendor_names), 5)).rstrip()[:-1] + '}'
print(vendors_formatted)
# generates the printer model map
models_formatted = ' {'
models_indent = len(models_formatted) + vend_col_width + 2
for vendor_name in sorted(printers.keys(), key=str.casefold):
vendor_formatted = f'"{vendor_name}",'
models_formatted += f'{{{vendor_formatted:{vend_col_width}}{{'
model_names = printers[vendor_name]
model_names_formatted = [f'"{model_name}",' for model_name in model_names]
model_col_width = len(max(model_names_formatted, key=len))
model_names_str = ('\n' + ' ' * models_indent).join(' '.join(f"{model_name:{model_col_width}}" for model_name in model_names_formatted[i:i+5]) for i in range(0, len(model_names), 5)).rstrip()[:-1] + '}'
models_formatted += model_names_str
models_formatted += '},\n '
models_formatted = models_formatted.rstrip()[:-1]
print(models_formatted)
# Generate Filament Vendors
filament_vendors = [
'3Dgenius',
'3DJake',
'3DXTECH',
'3D BEST-Q',
'3D Hero',
'3D-Fuel',
'Aceaddity',
'AddNorth',
'Amazon Basics',
'AMOLEN',
'Ankermake',
'Anycubic',
'Atomic',
'AzureFilm',
'BASF',
'Bblife',
'BCN3D',
'Beyond Plastic',
'California Filament',
'Capricorn',
'CC3D',
'colorFabb',
'Comgrow',
'Cookiecad',
'Creality',
'Das Filament',
'DO3D',
'DOW',
'DSM',
'Duramic',
'ELEGOO',
'Eryone',
'Essentium',
'eSUN',
'Extrudr',
'Fiberforce',
'Fiberlogy',
'FilaCube',
'Filamentive',
'Fillamentum',
'FLASHFORGE',
'Formfortura',
'Francofil',
'GEEETECH',
'Giantarm',
'Gizmo Dorks',
'GreenGate3D',
'HATCHBOX',
'Hello3D',
'IC3D',
'IEMAI',
'IIID Max',
'INLAND',
'iProspect',
'iSANMATE',
'Justmaker',
'Keene Village Plastics',
'Kexcelled',
'MakerBot',
'MatterHackers',
'MIKA3D',
'NinjaTek',
'Nobufil',
'Novamaker',
'OVERTURE',
'OVVNYXE',
'Polymaker',
'Priline',
'Printed Solid',
'Protopasta',
'Prusament',
'Push Plastic',
'R3D',
'Re-pet3D',
'Recreus',
'Regen',
'Sain SMART',
'SliceWorx',
'Snapmaker',
'SnoLabs',
'Spectrum',
'SUNLU',
'TTYT3D',
'UltiMaker',
'Verbatim',
'VO3D',
'Voxelab',
'YOOPAI',
'Yousu',
'Ziro',
'Zyltech',
]
filament_vendors_formatted = [f'"{vendor_name}",' for vendor_name in filament_vendors]
fil_col_width = len(max(filament_vendors_formatted, key=len))
filaments_formatted = ' {'
filament_indent = len(filaments_formatted)
filaments_formatted += ('\n' + ' ' * filament_indent).join(' '.join(f'{vendor_name:{fil_col_width}}' for vendor_name in filament_vendors_formatted[i:i+5]) for i in range(0, len(filament_vendors), 5)).rstrip()[:-1] + '};'
print(filaments_formatted)

View file

@ -37,22 +37,44 @@
namespace Slic3r {
namespace GUI {
static const std::vector<std::string> filament_vendors = {"Polymaker", "OVERTURE", "Kexcelled", "HATCHBOX", "eSUN", "SUNLU", "Prusament", "Creality", "Protopasta",
"Anycubic", "Basf", "ELEGOO", "INLAND", "FLASHFORGE", "AMOLEN", "MIKA3D", "3DXTECH", "Duramic",
"Priline", "Eryone", "3Dgunius", "Novamaker", "Justmaker", "Giantarm", "iProspect"};
static const std::vector<std::string> filament_types = {"PLA", "PLA+", "PLA Tough", "PETG", "ABS", "ASA", "FLEX", "HIPS", "PA", "PACF",
"NYLON", "PVA", "PC", "PCABS", "PCTG", "PCCF", "PP", "PEI", "PET", "PETG",
"PETGCF", "PTBA", "PTBA90A", "PEEK", "TPU93A", "TPU75D", "TPU", "TPU92A", "TPU98A", "Misc",
static const std::vector<std::string> filament_vendors =
{"3Dgenius", "3DJake", "3DXTECH", "3D BEST-Q", "3D Hero",
"3D-Fuel", "Aceaddity", "AddNorth", "Amazon Basics", "AMOLEN",
"Ankermake", "Anycubic", "Atomic", "AzureFilm", "BASF",
"Bblife", "BCN3D", "Beyond Plastic", "California Filament", "Capricorn",
"CC3D", "colorFabb", "Comgrow", "Cookiecad", "Creality",
"Das Filament", "DO3D", "DOW", "DSM", "Duramic",
"ELEGOO", "Eryone", "Essentium", "eSUN", "Extrudr",
"Fiberforce", "Fiberlogy", "FilaCube", "Filamentive", "Fillamentum",
"FLASHFORGE", "Formfortura", "Francofil", "GEEETECH", "Giantarm",
"Gizmo Dorks", "GreenGate3D", "HATCHBOX", "Hello3D", "IC3D",
"IEMAI", "IIID Max", "INLAND", "iProspect", "iSANMATE",
"Justmaker", "Keene Village Plastics", "Kexcelled", "MakerBot", "MatterHackers",
"MIKA3D", "NinjaTek", "Nobufil", "Novamaker", "OVERTURE",
"OVVNYXE", "Polymaker", "Priline", "Printed Solid", "Protopasta",
"Prusament", "Push Plastic", "R3D", "Re-pet3D", "Recreus",
"Regen", "Sain SMART", "SliceWorx", "Snapmaker", "SnoLabs",
"Spectrum", "SUNLU", "TTYT3D", "UltiMaker", "Verbatim",
"VO3D", "Voxelab", "YOOPAI", "Yousu", "Ziro",
"Zyltech"};
static const std::vector<std::string> filament_types = {"PLA", "PLA+", "PLA Tough", "PETG", "ABS", "ASA", "FLEX", "HIPS", "PA", "PACF",
"NYLON", "PVA", "PC", "PCABS", "PCTG", "PCCF", "PHA", "PP", "PEI", "PET", "PETG",
"PETGCF", "PTBA", "PTBA90A", "PEEK", "TPU93A", "TPU75D", "TPU", "TPU92A", "TPU98A", "Misc",
"TPE", "GLAZE", "Nylon", "CPE", "METAL", "ABST", "Carbon Fiber"};
static const std::vector<std::string> printer_vendors = {"Anycubic", "Artillery", "BIBO", "BIQU", "Creality ENDER", "Creality CR", "Creality SERMOON",
"FLSun", "gCreate", "Geeetech", "INAT", "Infinity3D", "Jubilee", "LNL3D",
"LulzBot", "MakerGear", "Original Prusa", "Papapiu", "Print4Taste", "RatRig", "Rigid3D",
"Snapmaker", "Sovol", "TriLAB", "Trimaker", "Ultimaker", "Voron", "Zonestar"};
static const std::vector<std::string> printer_vendors =
{"Anker", "Anycubic", "Artillery", "Bambulab", "BIQU",
"Comgrow", "Creality", "Custom Printer", "Elegoo", "Flashforge",
"FLSun", "FlyingBear", "Folgertech", "InfiMech", "Kingroon",
"Orca Arena Printer", "Peopoly", "Prusa", "Qidi", "Raise3D",
"RatRig", "SecKit", "Snapmaker", "Sovol", "Tronxy",
"TwoTrees", "UltiMaker", "Vivedino", "Voron", "Voxelab",
"Vzbot", "Wanhao"};
static const std::unordered_map<std::string, std::vector<std::string>> printer_model_map =
{{"Anycubic", {"Kossel Linear Plus", "Kossel Pulley(Linear)", "Mega Zero", "i3 Mega", "Predator"}},
{{"Anker", {"Anker M5", "Anker M5 All-Metal Hot End", "Anker M5C"}},
{"Anycubic", {"Kossel Linear Plus", "Kossel Pulley(Linear)", "Mega Zero", "i3 Mega", "Predator"}},
{"Artillery", {"sidewinder X1", "Genius", "Hornet"}},
{"BIBO", {"BIBO2 Touch"}},
{"BIQU", {"BX"}},
@ -93,10 +115,10 @@ static const std::unordered_map<std::string, std::vector<std::string>> printer_m
"Zero 120mm3", "Switchwire"}},
{"Zonestar", {"Z5", "Z6", "Z5x", "Z8", "Z9"}}};
static std::vector<std::string> nozzle_diameter_vec = {"0.4", "0.2", "0.25", "0.3", "0.35", "0.5", "0.6", "0.75", "0.8", "1.0", "1.2"};
static std::unordered_map<std::string, float> nozzle_diameter_map = {{"0.2", 0.2}, {"0.25", 0.25}, {"0.3", 0.3}, {"0.35", 0.35},
{"0.4", 0.4}, {"0.5", 0.5}, {"0.6", 0.6}, {"0.75", 0.75},
{"0.8", 0.8}, {"1.0", 1.0}, {"1.2", 1.2}};
static std::vector<std::string> nozzle_diameter_vec = {"0.4", "0.15", "0.2", "0.25", "0.3", "0.35", "0.5", "0.6", "0.75", "0.8", "1.0", "1.2"};
static std::unordered_map<std::string, float> nozzle_diameter_map = {{"0.15", 0.15}, {"0.2", 0.2}, {"0.25", 0.25}, {"0.3", 0.3},
{"0.35", 0.35}, {"0.4", 0.4}, {"0.5", 0.5}, {"0.6", 0.6},
{"0.75", 0.75}, {"0.8", 0.8}, {"1.0", 1.0}, {"1.2", 1.2}};
static std::set<int> cannot_input_key = {9, 10, 13, 33, 35, 36, 37, 38, 40, 41, 42, 44, 46, 47, 59, 60, 62, 63, 64, 92, 94, 95, 124, 126};
@ -673,6 +695,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item()
for (const wxString &vendor : filament_vendors) {
choices.push_back(vendor);
}
choices.Sort();
wxBoxSizer *vendor_sizer = new wxBoxSizer(wxHORIZONTAL);
m_filament_vendor_combobox = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY);
@ -754,6 +777,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item()
for (const wxString &filament : m_system_filament_types_set) {
filament_type.Add(filament);
}
filament_type.Sort();
wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL);
m_filament_type_combobox = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY);