From 4f620cb6b4e7db19f6a08f9ad89afa6cfc120060 Mon Sep 17 00:00:00 2001 From: HYzd766 <1550039450@qq.com> Date: Wed, 4 Mar 2026 13:37:55 +0800 Subject: [PATCH 01/35] Q2C model and new consumables --- resources/profiles/Qidi.json | 1304 +++++++++++++++++ resources/profiles/Qidi/Qidi Q2C_cover.png | Bin 0 -> 35014 bytes .../Qidi/filament/Q2/Bambu ABS @Q2C.json | 32 + .../Q2/Bambu ABS @Qidi Q2C 0.2 nozzle.json | 12 + .../Q2/Bambu ABS @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Bambu ABS @Qidi Q2C 0.6 nozzle.json | 11 + .../Q2/Bambu ABS @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/filament/Q2/Bambu PETG @Q2C.json | 33 + .../Q2/Bambu PETG @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Bambu PETG @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Bambu PETG @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Bambu PETG @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/Bambu PLA @Q2C.json | 22 + .../Q2/Bambu PLA @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Bambu PLA @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Bambu PLA @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Bambu PLA @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/Generic ABS @Q2C.json | 33 + .../Q2/Generic ABS @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Generic ABS @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Generic ABS @Qidi Q2C 0.6 nozzle.json | 11 + .../Q2/Generic ABS @Qidi Q2C 0.8 nozzle.json | 11 + .../Qidi/filament/Q2/Generic PC @Q2C.json | 32 + .../Q2/Generic PC @Qidi Q2C 0.2 nozzle.json | 12 + .../Q2/Generic PC @Qidi Q2C 0.4 nozzle.json | 12 + .../Q2/Generic PC @Qidi Q2C 0.6 nozzle.json | 12 + .../Q2/Generic PC @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/filament/Q2/Generic PETG @Q2C.json | 34 + .../Q2/Generic PETG @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Generic PETG @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Generic PETG @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Generic PETG @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/Generic PLA @Q2C.json | 26 + .../Q2/Generic PLA @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Generic PLA @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Generic PLA @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Generic PLA @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/Generic PLA Silk @Q2C.json | 28 + ...Generic PLA Silk @Qidi Q2C 0.4 nozzle.json | 9 + ...Generic PLA Silk @Qidi Q2C 0.6 nozzle.json | 10 + .../Qidi/filament/Q2/Generic PLA+ @Q2C.json | 24 + .../Q2/Generic PLA+ @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Generic PLA+ @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Generic PLA+ @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Generic PLA+ @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/Generic TPU 95A @Q2C.json | 24 + .../Generic TPU 95A @Qidi Q2C 0.4 nozzle.json | 9 + .../Generic TPU 95A @Qidi Q2C 0.6 nozzle.json | 9 + .../Generic TPU 95A @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/HATCHBOX ABS @Q2C.json | 31 + .../Q2/HATCHBOX ABS @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/HATCHBOX ABS @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/HATCHBOX ABS @Qidi Q2C 0.6 nozzle.json | 11 + .../Q2/HATCHBOX ABS @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/filament/Q2/HATCHBOX PETG @Q2C.json | 33 + .../HATCHBOX PETG @Qidi Q2C 0.2 nozzle.json | 11 + .../HATCHBOX PETG @Qidi Q2C 0.4 nozzle.json | 10 + .../HATCHBOX PETG @Qidi Q2C 0.6 nozzle.json | 10 + .../HATCHBOX PETG @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/HATCHBOX PLA @Q2C.json | 22 + .../Q2/HATCHBOX PLA @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/HATCHBOX PLA @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/HATCHBOX PLA @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/HATCHBOX PLA @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/Overture ABS @Q2C.json | 32 + .../Q2/Overture ABS @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Overture ABS @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Overture ABS @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Overture ABS @Qidi Q2C 0.8 nozzle.json | 11 + .../Qidi/filament/Q2/Overture PLA @Q2C.json | 26 + .../Q2/Overture PLA @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/Overture PLA @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/Overture PLA @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/Overture PLA @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/PolyLite ABS @Q2C.json | 32 + .../Q2/PolyLite ABS @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/PolyLite ABS @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/PolyLite ABS @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/PolyLite ABS @Qidi Q2C 0.8 nozzle.json | 11 + .../Qidi/filament/Q2/PolyLite PLA @Q2C.json | 26 + .../Q2/PolyLite PLA @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/PolyLite PLA @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/PolyLite PLA @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/PolyLite PLA @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/QIDI ABS Odorless @Q2C.json | 32 + ...IDI ABS Odorless @Qidi Q2C 0.2 nozzle.json | 11 + ...IDI ABS Odorless @Qidi Q2C 0.4 nozzle.json | 10 + ...IDI ABS Odorless @Qidi Q2C 0.6 nozzle.json | 12 + ...IDI ABS Odorless @Qidi Q2C 0.8 nozzle.json | 13 + .../filament/Q2/QIDI ABS Rapido @Q2C.json | 31 + .../QIDI ABS Rapido @Qidi Q2C 0.2 nozzle.json | 11 + .../QIDI ABS Rapido @Qidi Q2C 0.4 nozzle.json | 10 + .../QIDI ABS Rapido @Qidi Q2C 0.6 nozzle.json | 11 + .../QIDI ABS Rapido @Qidi Q2C 0.8 nozzle.json | 12 + .../Q2/QIDI ABS Rapido Metal @Q2C.json | 31 + ...ABS Rapido Metal @Qidi Q2C 0.2 nozzle.json | 11 + ...ABS Rapido Metal @Qidi Q2C 0.4 nozzle.json | 10 + ...ABS Rapido Metal @Qidi Q2C 0.6 nozzle.json | 11 + ...ABS Rapido Metal @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/filament/Q2/QIDI ABS-GF @Q2C.json | 34 + .../Q2/QIDI ABS-GF @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/QIDI ABS-GF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI ABS-GF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI ASA @Q2C.json | 33 + .../Q2/QIDI ASA @Qidi Q2C 0.2 nozzle.json | 11 + .../Q2/QIDI ASA @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/QIDI ASA @Qidi Q2C 0.6 nozzle.json | 11 + .../Q2/QIDI ASA @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json | 38 + .../QIDI ASA-Aero @Qidi Q2C 0.4 nozzle.json | 9 + .../Qidi/filament/Q2/QIDI ASA-CF @Q2.json | 34 + .../Qidi/filament/Q2/QIDI ASA-CF @Q2C.json | 33 + .../Q2/QIDI ASA-CF @Qidi Q2 0.4 nozzle.json | 10 + .../Q2/QIDI ASA-CF @Qidi Q2 0.6 nozzle.json | 11 + .../Q2/QIDI ASA-CF @Qidi Q2 0.8 nozzle.json | 12 + .../Q2/QIDI ASA-CF @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/QIDI ASA-CF @Qidi Q2C 0.6 nozzle.json | 11 + .../Q2/QIDI ASA-CF @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/filament/Q2/QIDI PA12-CF @Q2C.json | 34 + .../Q2/QIDI PA12-CF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PA12-CF @Qidi Q2C 0.6 nozzle.json | 9 + .../Q2/QIDI PA12-CF @Qidi Q2C 0.8 nozzle.json | 9 + .../Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json | 34 + .../Q2/QIDI PAHT-CF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PAHT-CF @Qidi Q2C 0.6 nozzle.json | 9 + .../Q2/QIDI PAHT-CF @Qidi Q2C 0.8 nozzle.json | 9 + .../Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json | 34 + .../Q2/QIDI PAHT-GF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PAHT-GF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PAHT-GF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json | 33 + .../QIDI PC-ABS-FR @Qidi Q2C 0.4 nozzle.json | 10 + .../QIDI PC-ABS-FR @Qidi Q2C 0.6 nozzle.json | 10 + .../QIDI PC-ABS-FR @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PEBA 95A @Q2.json | 29 + .../Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json | 29 + .../Q2/QIDI PEBA 95A @Qidi Q2 0.4 nozzle.json | 9 + .../Q2/QIDI PEBA 95A @Qidi Q2 0.6 nozzle.json | 9 + .../QIDI PEBA 95A @Qidi Q2C 0.4 nozzle.json | 9 + .../QIDI PEBA 95A @Qidi Q2C 0.6 nozzle.json | 9 + .../Qidi/filament/Q2/QIDI PET-CF @Q2C.json | 36 + .../Q2/QIDI PET-CF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PET-CF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PET-CF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PET-GF @Q2C.json | 34 + .../Q2/QIDI PET-GF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PET-GF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PET-GF @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/QIDI PETG Basic @Q2C.json | 33 + .../QIDI PETG Basic @Qidi Q2C 0.2 nozzle.json | 11 + .../QIDI PETG Basic @Qidi Q2C 0.4 nozzle.json | 9 + .../QIDI PETG Basic @Qidi Q2C 0.6 nozzle.json | 10 + .../QIDI PETG Basic @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/QIDI PETG Rapido @Q2C.json | 33 + ...QIDI PETG Rapido @Qidi Q2C 0.2 nozzle.json | 11 + ...QIDI PETG Rapido @Qidi Q2C 0.4 nozzle.json | 9 + ...QIDI PETG Rapido @Qidi Q2C 0.6 nozzle.json | 10 + ...QIDI PETG Rapido @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/QIDI PETG Tough @Q2C.json | 33 + .../QIDI PETG Tough @Qidi Q2C 0.2 nozzle.json | 11 + .../QIDI PETG Tough @Qidi Q2C 0.4 nozzle.json | 9 + .../QIDI PETG Tough @Qidi Q2C 0.6 nozzle.json | 10 + .../QIDI PETG Tough @Qidi Q2C 0.8 nozzle.json | 10 + .../Q2/QIDI PETG Translucent @Q2C.json | 33 + ...PETG Translucent @Qidi Q2C 0.2 nozzle.json | 11 + ...PETG Translucent @Qidi Q2C 0.4 nozzle.json | 9 + ...PETG Translucent @Qidi Q2C 0.6 nozzle.json | 10 + ...PETG Translucent @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PETG-CF @Q2C.json | 33 + .../Q2/QIDI PETG-CF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PETG-CF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PETG-CF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PETG-GF @Q2C.json | 33 + .../Q2/QIDI PETG-GF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI PETG-GF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PETG-GF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PLA Basic @Q2C.json | 25 + .../QIDI PLA Basic @Qidi Q2C 0.2 nozzle.json | 11 + .../QIDI PLA Basic @Qidi Q2C 0.4 nozzle.json | 10 + .../QIDI PLA Basic @Qidi Q2C 0.6 nozzle.json | 10 + .../QIDI PLA Basic @Qidi Q2C 0.8 nozzle.json | 10 + .../Q2/QIDI PLA Matte Basic @Q2C.json | 25 + ... PLA Matte Basic @Qidi Q2C 0.2 nozzle.json | 11 + ... PLA Matte Basic @Qidi Q2C 0.4 nozzle.json | 10 + ... PLA Matte Basic @Qidi Q2C 0.6 nozzle.json | 10 + ... PLA Matte Basic @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/QIDI PLA Rapido @Q2C.json | 24 + .../QIDI PLA Rapido @Qidi Q2C 0.2 nozzle.json | 11 + .../QIDI PLA Rapido @Qidi Q2C 0.4 nozzle.json | 10 + .../QIDI PLA Rapido @Qidi Q2C 0.6 nozzle.json | 10 + .../QIDI PLA Rapido @Qidi Q2C 0.8 nozzle.json | 10 + .../Q2/QIDI PLA Rapido Matte @Q2C.json | 23 + ...PLA Rapido Matte @Qidi Q2C 0.2 nozzle.json | 11 + ...PLA Rapido Matte @Qidi Q2C 0.4 nozzle.json | 10 + ...PLA Rapido Matte @Qidi Q2C 0.6 nozzle.json | 10 + ...PLA Rapido Matte @Qidi Q2C 0.8 nozzle.json | 10 + .../Q2/QIDI PLA Rapido Metal @Q2C.json | 23 + ...PLA Rapido Metal @Qidi Q2C 0.2 nozzle.json | 11 + ...PLA Rapido Metal @Qidi Q2C 0.4 nozzle.json | 10 + ...PLA Rapido Metal @Qidi Q2C 0.6 nozzle.json | 10 + ...PLA Rapido Metal @Qidi Q2C 0.8 nozzle.json | 10 + .../Q2/QIDI PLA Rapido Silk @Q2C.json | 26 + ... PLA Rapido Silk @Qidi Q2C 0.4 nozzle.json | 10 + ... PLA Rapido Silk @Qidi Q2C 0.6 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PLA-CF @Q2C.json | 26 + .../Q2/QIDI PLA-CF @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/QIDI PLA-CF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PLA-CF @Qidi Q2C 0.8 nozzle.json | 11 + .../Qidi/filament/Q2/QIDI PPS-CF @Q2C.json | 35 + .../Q2/QIDI PPS-CF @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/QIDI PPS-CF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PPS-CF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI PPS-GF @Q2.json | 36 + .../Qidi/filament/Q2/QIDI PPS-GF @Q2C.json | 35 + .../Q2/QIDI PPS-GF @Qidi Q2 0.4 nozzle.json | 10 + .../Q2/QIDI PPS-GF @Qidi Q2 0.6 nozzle.json | 10 + .../Q2/QIDI PPS-GF @Qidi Q2 0.8 nozzle.json | 10 + .../Q2/QIDI PPS-GF @Qidi Q2C 0.4 nozzle.json | 10 + .../Q2/QIDI PPS-GF @Qidi Q2C 0.6 nozzle.json | 10 + .../Q2/QIDI PPS-GF @Qidi Q2C 0.8 nozzle.json | 10 + .../Q2/QIDI Support For PAHT @Q2C.json | 37 + ...Support For PAHT @Qidi Q2C 0.4 nozzle.json | 9 + ...Support For PAHT @Qidi Q2C 0.6 nozzle.json | 9 + ...Support For PAHT @Qidi Q2C 0.8 nozzle.json | 9 + .../Q2/QIDI Support For PET-PA @Q2C.json | 37 + ...pport For PET-PA @Qidi Q2C 0.4 nozzle.json | 9 + ...pport For PET-PA @Qidi Q2C 0.6 nozzle.json | 9 + ...pport For PET-PA @Qidi Q2C 0.8 nozzle.json | 9 + .../filament/Q2/QIDI TPU 95A-HF @Q2C.json | 25 + .../QIDI TPU 95A-HF @Qidi Q2C 0.4 nozzle.json | 9 + .../QIDI TPU 95A-HF @Qidi Q2C 0.6 nozzle.json | 9 + .../QIDI TPU 95A-HF @Qidi Q2C 0.8 nozzle.json | 10 + .../Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json | 28 + .../QIDI TPU-Aero @Qidi Q2C 0.4 nozzle.json | 9 + .../QIDI TPU-Aero @Qidi Q2C 0.6 nozzle.json | 9 + .../Qidi/filament/Q2/QIDI TPU-GF @Q2.json | 25 + .../Qidi/filament/Q2/QIDI TPU-GF @Q2C.json | 25 + .../Q2/QIDI TPU-GF @Qidi Q2 0.4 nozzle.json | 9 + .../Q2/QIDI TPU-GF @Qidi Q2 0.6 nozzle.json | 9 + .../Q2/QIDI TPU-GF @Qidi Q2 0.8 nozzle.json | 9 + .../Q2/QIDI TPU-GF @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI TPU-GF @Qidi Q2C 0.6 nozzle.json | 9 + .../Q2/QIDI TPU-GF @Qidi Q2C 0.8 nozzle.json | 9 + .../Qidi/filament/Q2/QIDI UltraPA @Q2C.json | 30 + .../Q2/QIDI UltraPA @Qidi Q2C 0.4 nozzle.json | 9 + .../Q2/QIDI UltraPA @Qidi Q2C 0.6 nozzle.json | 9 + .../Q2/QIDI UltraPA @Qidi Q2C 0.8 nozzle.json | 9 + .../filament/Q2/QIDI UltraPA-CF25 @Q2C.json | 35 + ...IDI UltraPA-CF25 @Qidi Q2C 0.4 nozzle.json | 9 + ...IDI UltraPA-CF25 @Qidi Q2C 0.6 nozzle.json | 10 + ...IDI UltraPA-CF25 @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/QIDI WOOD Rapido @Q2C.json | 27 + ...QIDI WOOD Rapido @Qidi Q2C 0.4 nozzle.json | 10 + ...QIDI WOOD Rapido @Qidi Q2C 0.6 nozzle.json | 10 + ...QIDI WOOD Rapido @Qidi Q2C 0.8 nozzle.json | 10 + .../filament/Q2/fdm_filament_q_common.json | 13 + .../QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json | 11 + .../QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json | 13 + .../QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json | 14 + .../QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json | 11 + .../QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json | 12 + .../QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json | 14 + ...QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json | 11 + ...QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json | 12 + ...QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json | 14 + ...QIDI ASA-CF @Qidi X-Plus 4 0.4 nozzle.json | 10 + ...QIDI ASA-CF @Qidi X-Plus 4 0.6 nozzle.json | 11 + ...QIDI ASA-CF @Qidi X-Plus 4 0.8 nozzle.json | 12 + ...IDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json | 16 + ...IDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json | 15 + ...IDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json | 17 + .../profiles/Qidi/filament/QIDI ASA-CF.json | 34 + ...QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json | 10 + ...QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json | 10 + ...DI PEBA 95A @Qidi X-Plus 4 0.4 nozzle.json | 9 + ...DI PEBA 95A @Qidi X-Plus 4 0.6 nozzle.json | 9 + .../profiles/Qidi/filament/QIDI PEBA 95A.json | 36 + .../QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json | 11 + .../QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json | 11 + .../QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json | 11 + ...QIDI PPS-GF @Qidi X-Plus 4 0.4 nozzle.json | 10 + ...QIDI PPS-GF @Qidi X-Plus 4 0.6 nozzle.json | 10 + ...QIDI PPS-GF @Qidi X-Plus 4 0.8 nozzle.json | 10 + .../profiles/Qidi/filament/QIDI PPS-GF.json | 46 + .../QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json | 10 + .../QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json | 10 + .../QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json | 10 + ...QIDI TPU-GF @Qidi X-Plus 4 0.4 nozzle.json | 9 + ...QIDI TPU-GF @Qidi X-Plus 4 0.6 nozzle.json | 9 + ...QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle.json | 9 + .../profiles/Qidi/filament/QIDI TPU-GF.json | 35 + .../QIDI ASA-CF @Qidi X-Max 4 0.4 nozzle.json | 9 + .../QIDI ASA-CF @Qidi X-Max 4 0.6 nozzle.json | 11 + .../QIDI ASA-CF @Qidi X-Max 4 0.8 nozzle.json | 12 + .../filament/X4/QIDI ASA-CF @X-Max 4.json | 34 + ...IDI PEBA 95A @Qidi X-Max 4 0.4 nozzle.json | 9 + ...IDI PEBA 95A @Qidi X-Max 4 0.6 nozzle.json | 9 + .../filament/X4/QIDI PEBA 95A @X-Max 4.json | 29 + .../QIDI TPU-GF @Qidi X-Max 4 0.4 nozzle.json | 9 + .../QIDI TPU-GF @Qidi X-Max 4 0.6 nozzle.json | 9 + .../QIDI TPU-GF @Qidi X-Max 4 0.8 nozzle.json | 9 + .../filament/X4/QIDI TPU-GF @X-Max 4.json | 29 + .../Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json | 2 +- .../Qidi/machine/Qidi Q2 0.4 nozzle.json | 16 +- .../Qidi/machine/Qidi Q2C 0.2 nozzle.json | 27 + .../Qidi/machine/Qidi Q2C 0.4 nozzle.json | 74 + .../Qidi/machine/Qidi Q2C 0.6 nozzle.json | 30 + .../Qidi/machine/Qidi Q2C 0.8 nozzle.json | 30 + resources/profiles/Qidi/machine/Qidi Q2C.json | 12 + .../Qidi/machine/Qidi X-Max 3 0.4 nozzle.json | 2 +- .../Qidi/machine/Qidi X-Max 4 0.4 nozzle.json | 22 +- .../machine/Qidi X-Plus 3 0.4 nozzle.json | 2 +- .../machine/Qidi X-Plus 4 0.4 nozzle.json | 3 +- .../machine/Qidi X-Plus 4 0.6 nozzle.json | 3 +- .../machine/Qidi X-Smart 3 0.4 nozzle.json | 2 +- .../Qidi/machine/fdm_machine_common.json | 1 + .../Qidi/machine/fdm_qidi_x3_common.json | 13 + .../0.06mm Standard @Qidi Q2C 0.2 nozzle.json | 12 + .../0.08mm Standard @Qidi Q2C 0.2 nozzle.json | 12 + .../0.10mm Standard @Qidi Q2C 0.2 nozzle.json | 12 + .../Qidi/process/0.12mm Fine @Qidi Q2C.json | 12 + .../0.12mm Standard @Qidi Q2C 0.2 nozzle.json | 12 + .../0.14mm Standard @Qidi Q2C 0.2 nozzle.json | 12 + .../process/0.16mm Optimal @Qidi Q2C.json | 12 + .../0.18mm Standard @Qidi Q2C 0.6 nozzle.json | 12 + .../process/0.20mm Standard @Qidi Q2C.json | 12 + .../Qidi/process/0.24mm Draft @Qidi Q2C.json | 12 + .../0.24mm Standard @Qidi Q2C 0.6 nozzle.json | 12 + .../0.24mm Standard @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/process/0.25mm Draft @Qidi Q2C.json | 86 ++ .../process/0.28mm Extra Draft @Qidi Q2C.json | 12 + .../process/0.30mm Extra Draft @Qidi Q2C.json | 86 ++ .../0.30mm Standard @Qidi Q2C 0.6 nozzle.json | 12 + .../0.32mm Standard @Qidi Q2C 0.8 nozzle.json | 12 + .../0.36mm Standard @Qidi Q2C 0.6 nozzle.json | 12 + .../0.40mm Standard @Qidi Q2C 0.8 nozzle.json | 12 + .../0.42mm Standard @Qidi Q2C 0.6 nozzle.json | 12 + .../0.48mm Standard @Qidi Q2C 0.8 nozzle.json | 12 + .../0.56mm Standard @Qidi Q2C 0.8 nozzle.json | 12 + .../Qidi/process/fdm_process_common.json | 13 + .../process/fdm_process_qidi_x3_common.json | 13 + .../Qidi/qidi_q2c_buildplate_model.stl | Bin 0 -> 20284 bytes .../Qidi/qidi_q2c_buildplate_texture.png | Bin 0 -> 8767 bytes 343 files changed, 6378 insertions(+), 25 deletions(-) create mode 100644 resources/profiles/Qidi/Qidi Q2C_cover.png create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu ABS @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu ABS @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu ABS @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu ABS @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PETG @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PETG @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PETG @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PETG @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PLA @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PLA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PLA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Bambu PLA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic ABS @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic ABS @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic ABS @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic ABS @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PC @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PC @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PC @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PC @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PETG @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PETG @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PETG @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PETG @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA+ @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA+ @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA+ @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic PLA+ @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture ABS @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture ABS @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture ABS @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture ABS @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture PLA @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture PLA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture PLA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/Overture PLA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite ABS @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite ABS @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite ABS @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite ABS @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite PLA @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite PLA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite PLA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/PolyLite PLA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Qidi Q2 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Qidi Q2 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Qidi Q2 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Qidi Q2 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Qidi Q2 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Qidi Q2 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Qidi Q2 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Qidi Q2 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Qidi Q2 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Qidi Q2 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Qidi Q2 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 4 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI ASA-CF.json create mode 100644 resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi X-Plus 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi X-Plus 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PEBA 95A.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi X-Plus 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi X-Plus 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi X-Plus 4 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI PPS-GF.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi X-Plus 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi X-Plus 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/QIDI TPU-GF.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI ASA-CF @Qidi X-Max 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI ASA-CF @Qidi X-Max 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI ASA-CF @Qidi X-Max 4 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @Qidi X-Max 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @Qidi X-Max 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI TPU-GF @Qidi X-Max 4 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI TPU-GF @Qidi X-Max 4 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI TPU-GF @Qidi X-Max 4 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json create mode 100644 resources/profiles/Qidi/machine/Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi Q2C 0.4 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/machine/Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json create mode 100644 resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json create mode 100644 resources/profiles/Qidi/qidi_q2c_buildplate_model.stl create mode 100644 resources/profiles/Qidi/qidi_q2c_buildplate_texture.png diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index ead432ab81..cb9a9b1fb1 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -16,6 +16,10 @@ "name": "Qidi Q2", "sub_path": "machine/Qidi Q2.json" }, + { + "name": "Qidi Q2C", + "sub_path": "machine/Qidi Q2C.json" + }, { "name": "Qidi X-CF Pro", "sub_path": "machine/Qidi X-CF Pro.json" @@ -146,6 +150,10 @@ "name": "0.25mm Draft @Qidi Q2", "sub_path": "process/0.25mm Draft @Qidi Q2.json" }, + { + "name": "0.25mm Draft @Qidi Q2C", + "sub_path": "process/0.25mm Draft @Qidi Q2C.json" + }, { "name": "0.25mm Draft @Qidi XMax3", "sub_path": "process/0.25mm Draft @Qidi XMax3.json" @@ -174,6 +182,10 @@ "name": "0.30mm Extra Draft @Qidi Q2", "sub_path": "process/0.30mm Extra Draft @Qidi Q2.json" }, + { + "name": "0.30mm Extra Draft @Qidi Q2C", + "sub_path": "process/0.30mm Extra Draft @Qidi Q2C.json" + }, { "name": "0.30mm Extra Draft @Qidi XMax3", "sub_path": "process/0.30mm Extra Draft @Qidi XMax3.json" @@ -258,6 +270,10 @@ "name": "0.12mm Fine @Qidi Q2", "sub_path": "process/0.12mm Fine @Qidi Q2.json" }, + { + "name": "0.12mm Fine @Qidi Q2C", + "sub_path": "process/0.12mm Fine @Qidi Q2C.json" + }, { "name": "0.12mm Fine @Qidi XMax3", "sub_path": "process/0.12mm Fine @Qidi XMax3.json" @@ -282,6 +298,10 @@ "name": "0.16mm Optimal @Qidi Q2", "sub_path": "process/0.16mm Optimal @Qidi Q2.json" }, + { + "name": "0.16mm Optimal @Qidi Q2C", + "sub_path": "process/0.16mm Optimal @Qidi Q2C.json" + }, { "name": "0.16mm Optimal @Qidi XMax3", "sub_path": "process/0.16mm Optimal @Qidi XMax3.json" @@ -306,6 +326,10 @@ "name": "0.20mm Standard @Qidi Q2", "sub_path": "process/0.20mm Standard @Qidi Q2.json" }, + { + "name": "0.20mm Standard @Qidi Q2C", + "sub_path": "process/0.20mm Standard @Qidi Q2C.json" + }, { "name": "0.20mm Standard @Qidi XMax3", "sub_path": "process/0.20mm Standard @Qidi XMax3.json" @@ -330,6 +354,10 @@ "name": "0.24mm Draft @Qidi Q2", "sub_path": "process/0.24mm Draft @Qidi Q2.json" }, + { + "name": "0.24mm Draft @Qidi Q2C", + "sub_path": "process/0.24mm Draft @Qidi Q2C.json" + }, { "name": "0.24mm Draft @Qidi XMax3", "sub_path": "process/0.24mm Draft @Qidi XMax3.json" @@ -354,6 +382,10 @@ "name": "0.28mm Extra Draft @Qidi Q2", "sub_path": "process/0.28mm Extra Draft @Qidi Q2.json" }, + { + "name": "0.28mm Extra Draft @Qidi Q2C", + "sub_path": "process/0.28mm Extra Draft @Qidi Q2C.json" + }, { "name": "0.28mm Extra Draft @Qidi XMax3", "sub_path": "process/0.28mm Extra Draft @Qidi XMax3.json" @@ -378,6 +410,10 @@ "name": "0.06mm Standard @Qidi Q2 0.2 nozzle", "sub_path": "process/0.06mm Standard @Qidi Q2 0.2 nozzle.json" }, + { + "name": "0.06mm Standard @Qidi Q2C 0.2 nozzle", + "sub_path": "process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json" + }, { "name": "0.06mm Standard @Qidi XMax3 0.2 nozzle", "sub_path": "process/0.06mm Standard @Qidi XMax3 0.2 nozzle.json" @@ -402,6 +438,10 @@ "name": "0.08mm Standard @Qidi Q2 0.2 nozzle", "sub_path": "process/0.08mm Standard @Qidi Q2 0.2 nozzle.json" }, + { + "name": "0.08mm Standard @Qidi Q2C 0.2 nozzle", + "sub_path": "process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json" + }, { "name": "0.08mm Standard @Qidi XMax3 0.2 nozzle", "sub_path": "process/0.08mm Standard @Qidi XMax3 0.2 nozzle.json" @@ -426,6 +466,10 @@ "name": "0.10mm Standard @Qidi Q2 0.2 nozzle", "sub_path": "process/0.10mm Standard @Qidi Q2 0.2 nozzle.json" }, + { + "name": "0.10mm Standard @Qidi Q2C 0.2 nozzle", + "sub_path": "process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json" + }, { "name": "0.10mm Standard @Qidi XMax3 0.2 nozzle", "sub_path": "process/0.10mm Standard @Qidi XMax3 0.2 nozzle.json" @@ -450,6 +494,10 @@ "name": "0.12mm Standard @Qidi Q2 0.2 nozzle", "sub_path": "process/0.12mm Standard @Qidi Q2 0.2 nozzle.json" }, + { + "name": "0.12mm Standard @Qidi Q2C 0.2 nozzle", + "sub_path": "process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json" + }, { "name": "0.12mm Standard @Qidi XMax3 0.2 nozzle", "sub_path": "process/0.12mm Standard @Qidi XMax3 0.2 nozzle.json" @@ -474,6 +522,10 @@ "name": "0.14mm Standard @Qidi Q2 0.2 nozzle", "sub_path": "process/0.14mm Standard @Qidi Q2 0.2 nozzle.json" }, + { + "name": "0.14mm Standard @Qidi Q2C 0.2 nozzle", + "sub_path": "process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json" + }, { "name": "0.14mm Standard @Qidi XMax3 0.2 nozzle", "sub_path": "process/0.14mm Standard @Qidi XMax3 0.2 nozzle.json" @@ -498,6 +550,10 @@ "name": "0.18mm Standard @Qidi Q2 0.6 nozzle", "sub_path": "process/0.18mm Standard @Qidi Q2 0.6 nozzle.json" }, + { + "name": "0.18mm Standard @Qidi Q2C 0.6 nozzle", + "sub_path": "process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json" + }, { "name": "0.18mm Standard @Qidi XMax3 0.6 nozzle", "sub_path": "process/0.18mm Standard @Qidi XMax3 0.6 nozzle.json" @@ -522,6 +578,10 @@ "name": "0.24mm Standard @Qidi Q2 0.6 nozzle", "sub_path": "process/0.24mm Standard @Qidi Q2 0.6 nozzle.json" }, + { + "name": "0.24mm Standard @Qidi Q2C 0.6 nozzle", + "sub_path": "process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json" + }, { "name": "0.24mm Standard @Qidi XMax3 0.6 nozzle", "sub_path": "process/0.24mm Standard @Qidi XMax3 0.6 nozzle.json" @@ -546,6 +606,10 @@ "name": "0.24mm Standard @Qidi Q2 0.8 nozzle", "sub_path": "process/0.24mm Standard @Qidi Q2 0.8 nozzle.json" }, + { + "name": "0.24mm Standard @Qidi Q2C 0.8 nozzle", + "sub_path": "process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json" + }, { "name": "0.24mm Standard @Qidi XMax3 0.8 nozzle", "sub_path": "process/0.24mm Standard @Qidi XMax3 0.8 nozzle.json" @@ -570,6 +634,10 @@ "name": "0.30mm Standard @Qidi Q2 0.6 nozzle", "sub_path": "process/0.30mm Standard @Qidi Q2 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @Qidi Q2C 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json" + }, { "name": "0.30mm Standard @Qidi XMax3 0.6 nozzle", "sub_path": "process/0.30mm Standard @Qidi XMax3 0.6 nozzle.json" @@ -594,6 +662,10 @@ "name": "0.32mm Standard @Qidi Q2 0.8 nozzle", "sub_path": "process/0.32mm Standard @Qidi Q2 0.8 nozzle.json" }, + { + "name": "0.32mm Standard @Qidi Q2C 0.8 nozzle", + "sub_path": "process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json" + }, { "name": "0.32mm Standard @Qidi XMax3 0.8 nozzle", "sub_path": "process/0.32mm Standard @Qidi XMax3 0.8 nozzle.json" @@ -618,6 +690,10 @@ "name": "0.36mm Standard @Qidi Q2 0.6 nozzle", "sub_path": "process/0.36mm Standard @Qidi Q2 0.6 nozzle.json" }, + { + "name": "0.36mm Standard @Qidi Q2C 0.6 nozzle", + "sub_path": "process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json" + }, { "name": "0.36mm Standard @Qidi XMax3 0.6 nozzle", "sub_path": "process/0.36mm Standard @Qidi XMax3 0.6 nozzle.json" @@ -642,6 +718,10 @@ "name": "0.40mm Standard @Qidi Q2 0.8 nozzle", "sub_path": "process/0.40mm Standard @Qidi Q2 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @Qidi Q2C 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json" + }, { "name": "0.40mm Standard @Qidi XMax3 0.8 nozzle", "sub_path": "process/0.40mm Standard @Qidi XMax3 0.8 nozzle.json" @@ -666,6 +746,10 @@ "name": "0.42mm Standard @Qidi Q2 0.6 nozzle", "sub_path": "process/0.42mm Standard @Qidi Q2 0.6 nozzle.json" }, + { + "name": "0.42mm Standard @Qidi Q2C 0.6 nozzle", + "sub_path": "process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json" + }, { "name": "0.42mm Standard @Qidi XMax3 0.6 nozzle", "sub_path": "process/0.42mm Standard @Qidi XMax3 0.6 nozzle.json" @@ -690,6 +774,10 @@ "name": "0.48mm Standard @Qidi Q2 0.8 nozzle", "sub_path": "process/0.48mm Standard @Qidi Q2 0.8 nozzle.json" }, + { + "name": "0.48mm Standard @Qidi Q2C 0.8 nozzle", + "sub_path": "process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json" + }, { "name": "0.48mm Standard @Qidi XMax3 0.8 nozzle", "sub_path": "process/0.48mm Standard @Qidi XMax3 0.8 nozzle.json" @@ -714,6 +802,10 @@ "name": "0.56mm Standard @Qidi Q2 0.8 nozzle", "sub_path": "process/0.56mm Standard @Qidi Q2 0.8 nozzle.json" }, + { + "name": "0.56mm Standard @Qidi Q2C 0.8 nozzle", + "sub_path": "process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json" + }, { "name": "0.56mm Standard @Qidi XMax3 0.8 nozzle", "sub_path": "process/0.56mm Standard @Qidi XMax3 0.8 nozzle.json" @@ -1012,6 +1104,10 @@ "name": "QIDI PPS-CF@Q2-Series", "sub_path": "filament/Q2/QIDI PPS-CF @Q2.json" }, + { + "name": "QIDI PPS-GF@Q2-Series", + "sub_path": "filament/Q2/QIDI PPS-GF @Q2.json" + }, { "name": "QIDI Support For PAHT@Q2-Series", "sub_path": "filament/Q2/QIDI Support For PAHT @Q2.json" @@ -1028,6 +1124,10 @@ "name": "QIDI TPU-Aero@Q2-Series", "sub_path": "filament/Q2/QIDI TPU-Aero @Q2.json" }, + { + "name": "QIDI PEBA 95A@Q2-Series", + "sub_path": "filament/Q2/QIDI PEBA 95A @Q2.json" + }, { "name": "QIDI UltraPA-CF25@Q2-Series", "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Q2.json" @@ -1040,6 +1140,230 @@ "name": "QIDI WOOD Rapido@Q2-Series", "sub_path": "filament/Q2/QIDI WOOD Rapido @Q2.json" }, + { + "name": "QIDI ASA-CF@Q2-Series", + "sub_path": "filament/Q2/QIDI ASA-CF @Q2.json" + }, + { + "name": "QIDI TPU-GF@Q2-Series", + "sub_path": "filament/Q2/QIDI TPU-GF @Q2.json" + }, + { + "name": "Bambu ABS@Q2C-Series", + "sub_path": "filament/Q2/Bambu ABS @Q2C.json" + }, + { + "name": "Bambu PETG@Q2C-Series", + "sub_path": "filament/Q2/Bambu PETG @Q2C.json" + }, + { + "name": "Bambu PLA@Q2C-Series", + "sub_path": "filament/Q2/Bambu PLA @Q2C.json" + }, + { + "name": "Generic ABS@Q2C-Series", + "sub_path": "filament/Q2/Generic ABS @Q2C.json" + }, + { + "name": "Generic PC@Q2C-Series", + "sub_path": "filament/Q2/Generic PC @Q2C.json" + }, + { + "name": "Generic PETG@Q2C-Series", + "sub_path": "filament/Q2/Generic PETG @Q2C.json" + }, + { + "name": "Generic PLA Silk@Q2C-Series", + "sub_path": "filament/Q2/Generic PLA Silk @Q2C.json" + }, + { + "name": "Generic PLA+@Q2C-Series", + "sub_path": "filament/Q2/Generic PLA+ @Q2C.json" + }, + { + "name": "Generic PLA@Q2C-Series", + "sub_path": "filament/Q2/Generic PLA @Q2C.json" + }, + { + "name": "Generic TPU 95A@Q2C-Series", + "sub_path": "filament/Q2/Generic TPU 95A @Q2C.json" + }, + { + "name": "HATCHBOX ABS@Q2C-Series", + "sub_path": "filament/Q2/HATCHBOX ABS @Q2C.json" + }, + { + "name": "HATCHBOX PETG@Q2C-Series", + "sub_path": "filament/Q2/HATCHBOX PETG @Q2C.json" + }, + { + "name": "HATCHBOX PLA@Q2C-Series", + "sub_path": "filament/Q2/HATCHBOX PLA @Q2C.json" + }, + { + "name": "Overture ABS@Q2C-Series", + "sub_path": "filament/Q2/Overture ABS @Q2C.json" + }, + { + "name": "Overture PLA@Q2C-Series", + "sub_path": "filament/Q2/Overture PLA @Q2C.json" + }, + { + "name": "PolyLite ABS@Q2C-Series", + "sub_path": "filament/Q2/PolyLite ABS @Q2C.json" + }, + { + "name": "PolyLite PLA@Q2C-Series", + "sub_path": "filament/Q2/PolyLite PLA @Q2C.json" + }, + { + "name": "QIDI ABS Odorless@Q2C-Series", + "sub_path": "filament/Q2/QIDI ABS Odorless @Q2C.json" + }, + { + "name": "QIDI ABS Rapido Metal@Q2C-Series", + "sub_path": "filament/Q2/QIDI ABS Rapido Metal @Q2C.json" + }, + { + "name": "QIDI ABS Rapido@Q2C-Series", + "sub_path": "filament/Q2/QIDI ABS Rapido @Q2C.json" + }, + { + "name": "QIDI ABS-GF@Q2C-Series", + "sub_path": "filament/Q2/QIDI ABS-GF @Q2C.json" + }, + { + "name": "QIDI ASA-Aero@Q2C-Series", + "sub_path": "filament/Q2/QIDI ASA-Aero @Q2C.json" + }, + { + "name": "QIDI ASA@Q2C-Series", + "sub_path": "filament/Q2/QIDI ASA @Q2C.json" + }, + { + "name": "QIDI PA12-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PA12-CF @Q2C.json" + }, + { + "name": "QIDI PAHT-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PAHT-CF @Q2C.json" + }, + { + "name": "QIDI PAHT-GF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PAHT-GF @Q2C.json" + }, + { + "name": "QIDI PC-ABS-FR@Q2C-Series", + "sub_path": "filament/Q2/QIDI PC-ABS-FR @Q2C.json" + }, + { + "name": "QIDI PET-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PET-CF @Q2C.json" + }, + { + "name": "QIDI PET-GF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PET-GF @Q2C.json" + }, + { + "name": "QIDI PETG Basic@Q2C-Series", + "sub_path": "filament/Q2/QIDI PETG Basic @Q2C.json" + }, + { + "name": "QIDI PETG Rapido@Q2C-Series", + "sub_path": "filament/Q2/QIDI PETG Rapido @Q2C.json" + }, + { + "name": "QIDI PETG Tough@Q2C-Series", + "sub_path": "filament/Q2/QIDI PETG Tough @Q2C.json" + }, + { + "name": "QIDI PETG Translucent@Q2C-Series", + "sub_path": "filament/Q2/QIDI PETG Translucent @Q2C.json" + }, + { + "name": "QIDI PETG-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PETG-CF @Q2C.json" + }, + { + "name": "QIDI PETG-GF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PETG-GF @Q2C.json" + }, + { + "name": "QIDI PLA Basic@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA Basic @Q2C.json" + }, + { + "name": "QIDI PLA Matte Basic@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA Matte Basic @Q2C.json" + }, + { + "name": "QIDI PLA Rapido Matte@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA Rapido Matte @Q2C.json" + }, + { + "name": "QIDI PLA Rapido Metal@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA Rapido Metal @Q2C.json" + }, + { + "name": "QIDI PLA Rapido Silk@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA Rapido Silk @Q2C.json" + }, + { + "name": "QIDI PLA Rapido@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA Rapido @Q2C.json" + }, + { + "name": "QIDI PLA-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PLA-CF @Q2C.json" + }, + { + "name": "QIDI PPS-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PPS-CF @Q2C.json" + }, + { + "name": "QIDI PPS-GF@Q2C-Series", + "sub_path": "filament/Q2/QIDI PPS-GF @Q2C.json" + }, + { + "name": "QIDI Support For PAHT@Q2C-Series", + "sub_path": "filament/Q2/QIDI Support For PAHT @Q2C.json" + }, + { + "name": "QIDI Support For PET/PA@Q2C-Series", + "sub_path": "filament/Q2/QIDI Support For PET-PA @Q2C.json" + }, + { + "name": "QIDI TPU 95A-HF@Q2C-Series", + "sub_path": "filament/Q2/QIDI TPU 95A-HF @Q2C.json" + }, + { + "name": "QIDI TPU-Aero@Q2C-Series", + "sub_path": "filament/Q2/QIDI TPU-Aero @Q2C.json" + }, + { + "name": "QIDI PEBA 95A@Q2C-Series", + "sub_path": "filament/Q2/QIDI PEBA 95A @Q2C.json" + }, + { + "name": "QIDI UltraPA-CF25@Q2C-Series", + "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Q2C.json" + }, + { + "name": "QIDI UltraPA@Q2C-Series", + "sub_path": "filament/Q2/QIDI UltraPA @Q2C.json" + }, + { + "name": "QIDI WOOD Rapido@Q2C-Series", + "sub_path": "filament/Q2/QIDI WOOD Rapido @Q2C.json" + }, + { + "name": "QIDI ASA-CF@Q2C-Series", + "sub_path": "filament/Q2/QIDI ASA-CF @Q2C.json" + }, + { + "name": "QIDI TPU-GF@Q2C-Series", + "sub_path": "filament/Q2/QIDI TPU-GF @Q2C.json" + }, { "name": "Bambu ABS", "sub_path": "filament/Bambu ABS.json" @@ -1128,6 +1452,10 @@ "name": "QIDI PPS-CF", "sub_path": "filament/QIDI PPS-CF.json" }, + { + "name": "QIDI PPS-GF", + "sub_path": "filament/QIDI PPS-GF.json" + }, { "name": "QIDI Support For PAHT", "sub_path": "filament/QIDI Support For PAHT.json" @@ -1140,6 +1468,10 @@ "name": "QIDI UltraPA-CF25", "sub_path": "filament/QIDI UltraPA-CF25.json" }, + { + "name": "QIDI TPU-GF", + "sub_path": "filament/QIDI TPU-GF.json" + }, { "name": "Qidi Generic PA", "sub_path": "filament/Qidi Generic PA.json" @@ -1268,6 +1600,10 @@ "name": "QIDI TPU-Aero", "sub_path": "filament/QIDI TPU-Aero.json" }, + { + "name": "QIDI PEBA 95A", + "sub_path": "filament/QIDI PEBA 95A.json" + }, { "name": "Qidi Generic TPU", "sub_path": "filament/Qidi Generic TPU.json" @@ -1280,6 +1616,10 @@ "name": "Qidi TPU 95A-HF", "sub_path": "filament/Qidi TPU 95A-HF.json" }, + { + "name": "QIDI ASA-CF", + "sub_path": "filament/QIDI ASA-CF.json" + }, { "name": "Bambu ABS @Qidi Q2 0.2 nozzle", "sub_path": "filament/Q2/Bambu ABS @Qidi Q2 0.2 nozzle.json" @@ -1620,6 +1960,18 @@ "name": "QIDI ASA @Qidi Q2 0.8 nozzle", "sub_path": "filament/Q2/QIDI ASA @Qidi Q2 0.8 nozzle.json" }, + { + "name": "QIDI ASA-CF @Qidi Q2 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ASA-CF @Qidi Q2 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q2 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ASA-CF @Qidi Q2 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q2 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ASA-CF @Qidi Q2 0.8 nozzle.json" + }, { "name": "QIDI PA12-CF @Qidi Q2 0.4 nozzle", "sub_path": "filament/Q2/QIDI PA12-CF @Qidi Q2 0.4 nozzle.json" @@ -1892,6 +2244,18 @@ "name": "QIDI PPS-CF @Qidi Q2 0.8 nozzle", "sub_path": "filament/Q2/QIDI PPS-CF @Qidi Q2 0.8 nozzle.json" }, + { + "name": "QIDI PPS-GF @Qidi Q2 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PPS-GF @Qidi Q2 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q2 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PPS-GF @Qidi Q2 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q2 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PPS-GF @Qidi Q2 0.8 nozzle.json" + }, { "name": "QIDI Support For PAHT @Qidi Q2 0.4 nozzle", "sub_path": "filament/Q2/QIDI Support For PAHT @Qidi Q2 0.4 nozzle.json" @@ -1936,6 +2300,14 @@ "name": "QIDI TPU-Aero @Qidi Q2 0.6 nozzle", "sub_path": "filament/Q2/QIDI TPU-Aero @Qidi Q2 0.6 nozzle.json" }, + { + "name": "QIDI PEBA 95A @Qidi Q2 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PEBA 95A @Qidi Q2 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi Q2 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PEBA 95A @Qidi Q2 0.6 nozzle.json" + }, { "name": "QIDI UltraPA-CF25 @Qidi Q2 0.4 nozzle", "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Qidi Q2 0.4 nozzle.json" @@ -1948,6 +2320,18 @@ "name": "QIDI UltraPA-CF25 @Qidi Q2 0.8 nozzle", "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Qidi Q2 0.8 nozzle.json" }, + { + "name": "QIDI TPU-GF @Qidi Q2 0.4 nozzle", + "sub_path": "filament/Q2/QIDI TPU-GF @Qidi Q2 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q2 0.6 nozzle", + "sub_path": "filament/Q2/QIDI TPU-GF @Qidi Q2 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q2 0.8 nozzle", + "sub_path": "filament/Q2/QIDI TPU-GF @Qidi Q2 0.8 nozzle.json" + }, { "name": "QIDI UltraPA @Qidi Q2 0.4 nozzle", "sub_path": "filament/Q2/QIDI UltraPA @Qidi Q2 0.4 nozzle.json" @@ -1972,6 +2356,742 @@ "name": "QIDI WOOD Rapido @Qidi Q2 0.8 nozzle", "sub_path": "filament/Q2/QIDI WOOD Rapido @Qidi Q2 0.8 nozzle.json" }, + { + "name": "Bambu ABS @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Bambu ABS @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Bambu ABS @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Bambu ABS @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Bambu ABS @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Bambu PETG @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Bambu PETG @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Bambu PETG @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Bambu PETG @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Bambu PLA @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Bambu PLA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Bambu PLA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Bambu PLA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Generic ABS @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic ABS @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic ABS @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Generic ABS @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Generic PC @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Generic PC @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Generic PC @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic PC @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic PC @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic PC @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic PC @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Generic PC @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Generic PETG @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic PETG @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic PETG @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Generic PETG @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic PLA Silk @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic PLA Silk @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Generic PLA+ @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic PLA+ @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic PLA+ @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Generic PLA+ @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Generic PLA @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic PLA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic PLA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Generic PLA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Generic TPU 95A @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Generic TPU 95A @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Generic TPU 95A @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/HATCHBOX ABS @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/HATCHBOX ABS @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/HATCHBOX ABS @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/HATCHBOX ABS @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/HATCHBOX PETG @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/HATCHBOX PETG @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/HATCHBOX PETG @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/HATCHBOX PETG @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/HATCHBOX PLA @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/HATCHBOX PLA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/HATCHBOX PLA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/HATCHBOX PLA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Overture ABS @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Overture ABS @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Overture ABS @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Overture ABS @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Overture ABS @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Overture ABS @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Overture ABS @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Overture ABS @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "Overture PLA @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/Overture PLA @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Overture PLA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/Overture PLA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Overture PLA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/Overture PLA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Overture PLA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/Overture PLA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/PolyLite ABS @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/PolyLite ABS @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/PolyLite ABS @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/PolyLite ABS @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/PolyLite PLA @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/PolyLite PLA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/PolyLite PLA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/PolyLite PLA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ABS Odorless @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido Metal @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ABS Rapido @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ABS-GF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ABS-GF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ABS-GF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-Aero @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ASA-Aero @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI ASA @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ASA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ASA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ASA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI ASA-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI ASA-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI ASA-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PA12-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PA12-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PA12-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PAHT-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PAHT-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PAHT-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PAHT-GF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PAHT-GF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PAHT-GF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PC-ABS-FR @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PC-ABS-FR @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PC-ABS-FR @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PC-ABS-FR @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PC-ABS-FR @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PC-ABS-FR @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PET-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PET-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PET-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PET-GF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PET-GF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PET-GF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PETG Basic @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PETG Basic @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PETG Basic @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PETG Basic @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PETG Rapido @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PETG Tough @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PETG Tough @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PETG Tough @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PETG Tough @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PETG Translucent @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PETG-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PETG-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PETG-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PETG-GF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PETG-GF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PETG-GF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PLA Basic @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA Basic @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA Basic @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PLA Basic @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PLA Matte Basic @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Matte @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Metal @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Silk @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Silk @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Silk @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido Silk @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi Q2C 0.2 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PLA Rapido @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PLA-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PLA-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PLA-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PPS-CF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PPS-CF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PPS-CF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PPS-GF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PPS-GF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI PPS-GF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI Support For PAHT @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI Support For PAHT @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI Support For PAHT @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI Support For PET-PA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI Support For PET-PA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI Support For PET-PA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI TPU 95A-HF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI TPU 95A-HF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI TPU 95A-HF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI TPU-Aero @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI TPU-Aero @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI PEBA 95A @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI PEBA 95A @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI UltraPA-CF25 @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI TPU-GF @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI TPU-GF @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI TPU-GF @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI UltraPA @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI UltraPA @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI UltraPA @Qidi Q2C 0.8 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi Q2C 0.4 nozzle", + "sub_path": "filament/Q2/QIDI WOOD Rapido @Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi Q2C 0.6 nozzle", + "sub_path": "filament/Q2/QIDI WOOD Rapido @Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi Q2C 0.8 nozzle", + "sub_path": "filament/Q2/QIDI WOOD Rapido @Qidi Q2C 0.8 nozzle.json" + }, { "name": "Bambu ABS @0.2 nozzle", "sub_path": "filament/Bambu ABS @0.2 nozzle.json" @@ -2464,6 +3584,66 @@ "name": "QIDI ASA @Qidi X-Smart 3 0.2 nozzle", "sub_path": "filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json" }, + { + "name": "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle", + "sub_path": "filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json" + }, { "name": "Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json" @@ -2708,6 +3888,30 @@ "name": "QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/QIDI PPS-GF @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/QIDI PPS-GF @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/QIDI PPS-GF @Qidi X-Plus 4 0.8 nozzle.json" + }, { "name": "QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle", "sub_path": "filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json" @@ -2756,6 +3960,30 @@ "name": "QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/QIDI TPU-GF @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/QIDI TPU-GF @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle.json" + }, { "name": "Qidi Generic PC @0.2 nozzle", "sub_path": "filament/Qidi Generic PC @0.2 nozzle.json" @@ -3792,6 +5020,22 @@ "name": "QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle", "sub_path": "filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json" }, + { + "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/QIDI PEBA 95A @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/QIDI PEBA 95A @Qidi X-Plus 4 0.6 nozzle.json" + }, { "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" @@ -4536,6 +5780,22 @@ "name": "QIDI UltraPA-CF25 @Qidi X-Max 4 0.8 nozzle", "sub_path": "filament/X4/QIDI UltraPA-CF25 @Qidi X-Max 4 0.8 nozzle.json" }, + { + "name": "QIDI TPU-GF@X-Max 4-Series", + "sub_path": "filament/X4/QIDI TPU-GF @X-Max 4.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Max 4 0.4 nozzle", + "sub_path": "filament/X4/QIDI TPU-GF @Qidi X-Max 4 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Max 4 0.6 nozzle", + "sub_path": "filament/X4/QIDI TPU-GF @Qidi X-Max 4 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Max 4 0.8 nozzle", + "sub_path": "filament/X4/QIDI TPU-GF @Qidi X-Max 4 0.8 nozzle.json" + }, { "name": "Generic PC@X-Max 4-Series", "sub_path": "filament/X4/Generic PC @X-Max 4.json" @@ -4568,6 +5828,18 @@ "name": "QIDI TPU-Aero @Qidi X-Max 4 0.6 nozzle", "sub_path": "filament/X4/QIDI TPU-Aero @Qidi X-Max 4 0.6 nozzle.json" }, + { + "name": "QIDI PEBA 95A@X-Max 4-Series", + "sub_path": "filament/X4/QIDI PEBA 95A @X-Max 4.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Max 4 0.4 nozzle", + "sub_path": "filament/X4/QIDI PEBA 95A @Qidi X-Max 4 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Max 4 0.6 nozzle", + "sub_path": "filament/X4/QIDI PEBA 95A @Qidi X-Max 4 0.6 nozzle.json" + }, { "name": "QIDI Support For PET/PA@X-Max 4-Series", "sub_path": "filament/X4/QIDI Support For PET-PA @X-Max 4.json" @@ -4747,6 +6019,22 @@ { "name": "QIDI PPS-GF @Qidi X-Max 4 0.8 nozzle", "sub_path": "filament/X4/QIDI PPS-GF @Qidi X-Max 4 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-CF@X-Max 4-Series", + "sub_path": "filament/X4/QIDI ASA-CF @X-Max 4.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Max 4 0.4 nozzle", + "sub_path": "filament/X4/QIDI ASA-CF @Qidi X-Max 4 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Max 4 0.6 nozzle", + "sub_path": "filament/X4/QIDI ASA-CF @Qidi X-Max 4 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Max 4 0.8 nozzle", + "sub_path": "filament/X4/QIDI ASA-CF @Qidi X-Max 4 0.8 nozzle.json" } ], "machine_list": [ @@ -4878,6 +6166,22 @@ "name": "Qidi Q2 0.8 nozzle", "sub_path": "machine/Qidi Q2 0.8 nozzle.json" }, + { + "name": "Qidi Q2C 0.4 nozzle", + "sub_path": "machine/Qidi Q2C 0.4 nozzle.json" + }, + { + "name": "Qidi Q2C 0.2 nozzle", + "sub_path": "machine/Qidi Q2C 0.2 nozzle.json" + }, + { + "name": "Qidi Q2C 0.6 nozzle", + "sub_path": "machine/Qidi Q2C 0.6 nozzle.json" + }, + { + "name": "Qidi Q2C 0.8 nozzle", + "sub_path": "machine/Qidi Q2C 0.8 nozzle.json" + }, { "name": "Qidi X-Max 4 0.4 nozzle", "sub_path": "machine/Qidi X-Max 4 0.4 nozzle.json" diff --git a/resources/profiles/Qidi/Qidi Q2C_cover.png b/resources/profiles/Qidi/Qidi Q2C_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ce1c25840ac6d04c8dfc2703b05a328dc0ace9 GIT binary patch literal 35014 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 p= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\n; FLUSH_START\nM106 S25\nG1 E30 F300\n; FLUSH_END\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 X85 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 X92 F9000\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM400\nM106 S255\nM104 S[new_filament_temp]\nINIT_SYNC_BUFFER_STATE\nBUFFER_MONITORING ENABLE=1\nG1 E10 F25 \nM109 S[new_filament_temp]\nG1 E-5 F1800\nCLEAR_OOZE\nTOOL_CHANGE_END\nG1 Y270 F8000\nM106 S0\nG1 E2 F1800\nENABLE_ALL_SENSOR\n", + "default_filament_profile": [ + "QIDI PLA Rapido @Qidi Q2C 0.4 nozzle" + ], + "enable_long_retraction_when_cut": "2", + "extruder_clearance_max_radius": "75", + "extruder_clearance_dist_to_rod": "47", + "extruder_clearance_height_to_rod": "47", + "extruder_clearance_height_to_lid": "152", + "is_support_3mf": "1", + "is_support_timelapse": "1", + "is_support_multi_box": "0", + "layer_change_gcode": "SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", + "machine_end_gcode": "DISABLE_BOX_HEATER\nM140 S0\nBUFFER_MONITORING ENABLE=0\nDISABLE_ALL_SENSOR\nG1 E-3 F1800\nG0 Z{max_layer_z + 3} F600\nUNLOAD_FILAMENT T=[current_extruder]\nG0 Y270 F12000\nG0 X90 Y270 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}\nM104 S0", + "machine_load_filament_time": "35", + "machine_max_jerk_e": [ + "4" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "4" + ], + "machine_max_speed_z": [ + "20" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "INIT_MAPPING_VALUE\nPRINT_START BED=[bed_temperature_initial_layer_single] HOTEND=[nozzle_temperature_initial_layer] EXTRUDER=[initial_no_support_extruder]\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM83\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG4 P3000\nT[initial_tool]\nG1 X108.000 Y1 F30000\nG0 Z[initial_layer_print_height] F600\n;G1 E3 F1800\nG90\nM83\nG0 X128 E8 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG91\nG1 X1 Z-0.300\nG1 X4\nG1 Z1 F1200\nG90\nM400\nG1 X108.000 Y2.5 F30000\nG0 Z[initial_layer_print_height] F600\nM83\nG0 X128 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X133 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X138 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X143 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X148 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X153 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG91\nG1 X1 Z-0.300\nG1 X4\nG1 Z1 F1200\nG90\nM400\nG1 Z1 F600", + "machine_unload_filament_time": "35", + "nozzle_diameter": [ + "0.4" + ], + "nozzle_volume": [ + "125" + ], + "printable_area": [ + "0x0", + "270x0", + "270x270", + "0x270" + ], + "printable_height": "256", + "retract_lift_below": [ + "259" + ], + "support_box_temp_control": "1", + "thumbnails_format": "PNG", + "thumbnail_size": [ + "150x150" + ] +} diff --git a/resources/profiles/Qidi/machine/Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q2C 0.6 nozzle.json new file mode 100644 index 0000000000..895fcdd93d --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi Q2C 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Qidi Q2C 0.6 nozzle", + "inherits": "Qidi Q2C 0.4 nozzle", + "from": "system", + "setting_id": "GM008", + "instantiation": "true", + "default_filament_profile": [ + "QIDI PLA Rapido" + ], + "default_print_profile": "0.30mm Standard @Q2C 0.6 nozzle", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.12" + ], + "nozzle_diameter": [ + "0.6" + ], + "printer_model": "Qidi Q2C", + "printer_variant": "0.6", + "retraction_length": [ + "1.4" + ], + "retraction_minimum_travel": [ + "3" + ], + "support_box_temp_control": "1" +} \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q2C 0.8 nozzle.json new file mode 100644 index 0000000000..691dd168d5 --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi Q2C 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Qidi Q2C 0.8 nozzle", + "inherits": "Qidi Q2C 0.4 nozzle", + "from": "system", + "setting_id": "GM008", + "instantiation": "true", + "default_filament_profile": [ + "QIDI PLA Rapido" + ], + "default_print_profile": "0.40mm Standard @Q2C 0.8 nozzle", + "max_layer_height": [ + "0.56" + ], + "min_layer_height": [ + "0.16" + ], + "nozzle_diameter": [ + "0.8" + ], + "printer_model": "Qidi Q2C", + "printer_variant": "0.8", + "retract_length_toolchange": [ + "3" + ], + "retraction_length": [ + "3" + ], + "support_box_temp_control": "1" +} \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi Q2C.json b/resources/profiles/Qidi/machine/Qidi Q2C.json new file mode 100644 index 0000000000..7da8da74bb --- /dev/null +++ b/resources/profiles/Qidi/machine/Qidi Q2C.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Qidi Q2C", + "model_id": "Qidi-Q2C", + "nozzle_diameter": "0.4;0.2;0.6;0.8", + "machine_tech": "FFF", + "family": "Qidi", + "bed_model": "qidi_q2c_buildplate_model.stl", + "bed_texture": "qidi_q2c_buildplate_texture.png", + "hotend_model": "X-Series_gen3_hotend.stl", + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;QIDI PET-CF" +} \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json index 920470ce75..7d185be631 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json @@ -44,7 +44,7 @@ "extruder_clearance_height_to_lid": "118", "single_extruder_multi_material": "1", "change_filament_gcode": "", - "machine_pause_gcode": "M0", + "machine_pause_gcode": "PAUSE", "default_filament_profile": [ "Qidi Generic PLA" ] diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json index 843adc0db7..d2f2f36daf 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json @@ -11,35 +11,37 @@ "default_print_profile": "0.20mm Standard @X-Max 4", "printer_settings_id": "Qidi", "bed_exclude_area": ["0x0, 16x0, 16x13, 0x13, 0x0, 0x0, 0x0, 0x0, 0x387, 53x387, 53x390, 0x390, 0x387, 0x387, 0x397, 0x390, 338x390, 338x384, 390x384, 390x390, 0x390"], - "change_filament_gcode": "G1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\nM104 S{old_filament_temp - 10}\nM106 S255\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-2 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\nM106 S0\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\nM109.0 S{(nozzle_temperature_range_high[current_extruder])-25}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\nM109.0 S{(nozzle_temperature_range_high[next_extruder])-25}\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\nG1 Y403.5 F2000\nG1 E{flush_length_1} F{old_filament_e_feedrate *0.5}\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\nM400\nM106 S180\nM104 S{new_filament_temp - 10}\nG1 E1 F10\nM109.1 S{new_filament_temp - 10}\nG1 E-4 F1000\nG4 P2000\nM204 S5000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F3000\nG1 X145 F2000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F8000\nG1 Y380\nG1 X116\nG4 P2000\nG1 Y403 F3000\nG1 X130\nG1 X100 F8000\nG1 Y380\nG1 X116\nG1 Y403 F3000\nG1 X130 F3000\nG1 X100 F8000\nG1 Y380\nM104 S[new_filament_temp]\nTOOL_CHANGE_END\nG1 E{new_retract_length_toolchange + 1} F{new_filament_e_feedrate}\nENABLE_ALL_SENSOR\n", + "change_filament_gcode": "G1 Z{max_layer_z + 3.0} F1200\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\nM104 S{old_filament_temp - 10}\nM106 S255\n{if long_retractions_when_cut[previous_extruder]}\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{else}\nG1 E-2 F{old_filament_e_feedrate}\n{endif}\nM400\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM106 P2 S0\nUNLOAD_T[current_extruder]\nT[next_extruder]\nM106 S0\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\nM109.0 S{(nozzle_temperature_range_high[current_extruder])-25}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\nM109.0 S{(nozzle_temperature_range_high[next_extruder])-25}\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\n{if flush_length_1 > 1}\n; FLUSH_START\nG1 Y403.5 F2000\nG1 E{flush_length_1} F{old_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\n; FLUSH_START\nG1 E{flush_length_2} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\n; FLUSH_START\nG1 E{flush_length_3} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\n; FLUSH_START\nG1 E{flush_length_4} F{new_filament_e_feedrate * 0.5}\n; FLUSH_END\n{endif}\nM400\nM106 S180\nM104 S{new_filament_temp - 10}\nG1 E1 F10\nM109.1 S{new_filament_temp - 10}\nG1 E-4 F1000\nG4 P2000\nM204 S5000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F3000\nG1 X145 F2000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F8000\nG1 Y380\nG1 X116\nG4 P2000\nG1 Y403 F3000\nG1 X130\nG1 X100 F8000\nG1 Y380\nG1 X116\nG1 Y403 F3000\nG1 X130 F3000\nG1 X100 F8000\nG1 Y380\nM104 S[new_filament_temp]\nTOOL_CHANGE_END\nG1 E{new_retract_length_toolchange + 1} F{new_filament_e_feedrate}\nENABLE_ALL_SENSOR\n", "default_filament_profile": ["QIDI PLA Rapido @Qidi X-Max 4 0.4 nozzle"], "enable_long_retraction_when_cut": "2", - "extruder_clearance_height_to_lid": "120", - "extruder_clearance_height_to_rod": "40", - "extruder_clearance_max_radius": "70", + "extruder_clearance_max_radius": "80", + "extruder_clearance_dist_to_rod": "45", + "extruder_clearance_height_to_rod": "45", + "extruder_clearance_height_to_lid": "168", + "is_support_air_condition" : "1", "is_support_3mf" : "1", + "is_support_mqtt" : "1", "is_support_timelapse": "1", "is_support_multi_box": "1", - "layer_change_gcode": "{if timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Y380 F20000\nG1 X128 F20000\n{if layer_z <=25}\nG1 Z25\n{endif}\nG1 Y403 F2000\nG92 E0\nM400\nTIMELAPSE_TAKE_FRAME\nG1 E[retraction_length] F300\nG1 X180 F8000\nG1 Y380 F8000\n{if layer_z <=25}\nG1 Z[layer_z]\n{endif}\n{elsif timelapse_type == 0} ; timelapse without wipe tower\nTIMELAPSE_TAKE_FRAME\n{endif}\nG92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", + "layer_change_gcode": "{if timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nMOVE_TO_TRASH\n{if layer_z <=25}\nG1 Z25\n{endif}\nG92 E0\nM400\nTIMELAPSE_TAKE_FRAME\nG1 E[retraction_length] F300\nG1 X180 F8000\nG1 Y380\n{if layer_z <=25}\nG1 Z[layer_z]\n{endif}\n{elsif timelapse_type == 0} ; timelapse without wipe tower\nTIMELAPSE_TAKE_FRAME\n{endif}\nG92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", "machine_end_gcode": "DISABLE_BOX_HEATER\nM141 S0\nM140 S0\nDISABLE_ALL_SENSOR\nG1 E-3 F1800\nG0 Z{max_layer_z + 3} F600\nUNLOAD_FILAMENT T=[current_extruder]\nG0 Y380 F12000\nG0 X128 Y380 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}\nM104 S0\nPRINT_END", "machine_max_jerk_e": ["4"], "machine_max_jerk_x": ["9"], "machine_max_jerk_y": ["9"], "machine_max_jerk_z": ["4"], "machine_max_speed_z": ["20"], - "machine_pause_gcode": "M0", + "machine_pause_gcode": "PAUSE", "machine_max_acceleration_x": ["30000"], "machine_max_acceleration_y": ["30000"], "machine_max_speed_x": ["800"], "machine_max_speed_y": ["800"], - "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y383\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nG1 Y0 F15000\nG1 X15 F15000\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 X15 F3000\nG1 E-4 F1800\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X380 Y5 F20000\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG0 X200 Y1 F20000\nG0 Z10 F480\nG4 P3000\nprobe samples=1\nG91\nG0 Z5 F480\nG90\nG1 X173 Y1 F20000\nG91\nG0 Z{initial_layer_print_height-5} F480\nG90\nG0 X193 E8 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X198 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X203 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X208 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X213 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X218 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG91\nG1 X1 Z{-initial_layer_print_height-0.1}\nG1 X4\nG1 Z1 F480\nG90\nG1 X173 Y2.5 F20000\nG91\nG1 Z-0.7 F480\nG90\nG0 X193 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X198 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X203 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X208 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X213 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X218 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG91\nG1 X1 Z{-initial_layer_print_height-0.1}\nG1 X4\nG1 Z1 F480\nG90\n", + "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X380 Y5 F20000\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG0 X195 Y1 F20000\nG0 Z10 F480\nSET_KINEMATIC_POSITION Z={10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480", "nozzle_diameter": ["0.4"], "nozzle_volume": ["150"], "printable_area": ["0x0","390x0","390x390","0x390"], "printable_height": "340", "retract_lift_below": ["339"], "support_box_temp_control": "1", - "thumbnail_size": ["50x50"], - "fan_direction": "left", - "printer_agent": "qidi" + "thumbnail_size": ["150x150"], + "fan_direction": "left" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json index 39889fc610..cc97206fdd 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json @@ -40,7 +40,7 @@ ], "single_extruder_multi_material": "1", "change_filament_gcode": "", - "machine_pause_gcode": "M0", + "machine_pause_gcode": "PAUSE", "default_filament_profile": [ "Qidi Generic PLA" ] diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json index 82d93280b1..612da56b58 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json @@ -61,7 +61,8 @@ ], "single_extruder_multi_material": "1", "change_filament_gcode": "{if max_layer_z < 12}\nG1 Z15 F1200\n{else}\nG1 Z{max_layer_z + 3.0} F1200\n{endif}\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\n{if long_retractions_when_cut[previous_extruder]}\nMOVE_TO_TRASH\nG1 E-{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\nM400\n{else}\nG1 E-5 F{old_filament_e_feedrate}\n{endif}\nCUT_FILAMENT T=[current_extruder]\nMOVE_TO_TRASH\nM400\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nM104 S{nozzle_temperature_range_high[current_extruder]}\n{else}\nM104 S{nozzle_temperature_range_high[next_extruder]}\n{endif}\nM106 S0\nM106 P2 S0\nUNLOAD_T[current_extruder]\nG92 E0\nM83\nG1 E2 F50\nT[next_extruder]\n{if nozzle_temperature_range_high[current_extruder] >= nozzle_temperature_range_high[next_extruder]}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={nozzle_temperature_range_high[current_extruder]} WAIT=1\n{else}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={nozzle_temperature_range_high[next_extruder]} WAIT=1\n{endif}\n{if long_retractions_when_cut[previous_extruder]}\nG1 E{retraction_distances_when_cut[previous_extruder]} F{old_filament_e_feedrate}\n{endif}\nM400\nM106 S60\n; FLUSH_START\nG1 E1 F50\nG1 E{65.5 * 0.58} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E{65.5 * 0.18} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E{65.5 * 0.18} F{old_filament_e_feedrate}\nG1 E{65.5 * 0.02} F50\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{if flush_length_1 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_1 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E{flush_length_1 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E{flush_length_1 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_1 * 0.02} F50\nG1 E-[old_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_2 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[old_retract_length_toolchange] F300\nG1 E{flush_length_2 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_3 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_3 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\n{if flush_length_4 > 1}\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nCLEAR_FLUSH\nM400\nM106 S60\n; FLUSH_START\nG1 E[new_retract_length_toolchange] F300\nG1 E{flush_length_4 * 0.58} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E-[new_retract_length_toolchange] F1800\n; FLUSH_END\n{endif}\nM104 S[new_filament_temp]\nM400\nM106 S255\nG91\nG1 X-5 F60\nG1 X5 F60\nG90\nM109 S[new_filament_temp]\nG92 E0\nM400\nCLEAR_FLUSH\nCLEAR_OOZE\nM400\nM106 S0\nTOOL_CHANGE_END\nG1 Y305 F9000\nENABLE_ALL_SENSOR", - "machine_pause_gcode": "M0", + "is_support_multi_box": "0", + "machine_pause_gcode": "PAUSE", "thumbnails": [ "272x272", "96x96" diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json index fee84c98d2..fcb6bef325 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json @@ -25,6 +25,5 @@ ], "retraction_minimum_travel": [ "3" - ], - "printer_agent": "qidi" + ] } \ No newline at end of file diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json index 99f3f41bc2..fed505510a 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json @@ -46,7 +46,7 @@ ], "single_extruder_multi_material": "1", "change_filament_gcode": "", - "machine_pause_gcode": "M0", + "machine_pause_gcode": "PAUSE", "default_filament_profile": [ "Qidi Generic PLA" ] diff --git a/resources/profiles/Qidi/machine/fdm_machine_common.json b/resources/profiles/Qidi/machine/fdm_machine_common.json index f2916ef38a..9125283357 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_common.json @@ -110,6 +110,7 @@ "wipe": [ "1" ], + "wipe_distance":["2"], "z_hop_types": [ "Auto Lift" ], diff --git a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json index b6ea18c542..bb8f41aad0 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json @@ -9,6 +9,19 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "support_chamber_temp_control": "1", + "filament_tower_interface_pre_extrusion_dist": ["10"], + "filament_tower_interface_pre_extrusion_length": ["0"], + "filament_tower_ironing_area": ["4"], + "filament_tower_interface_purge_volume": ["20"], + "filament_tower_interface_print_temp": ["-1"], + "filament_dev_ams_drying_ams_limitations": ["1"], + "filament_dev_ams_drying_temperature": ["40.0","40.0","40.0","40.0"], + "filament_dev_ams_drying_time": ["8.0","8.0","8.0","8.0"], + "filament_dev_drying_softening_temperature": ["40.0"], + "filament_dev_ams_drying_heat_distortion_temperature": ["45.0"], + "filament_dev_drying_cooling_temperature": ["35.0"], + "filament_dev_chamber_drying_bed_temperature": ["90.0"], + "filament_dev_chamber_drying_time": ["12.0"], "retraction_length": [ "1" ], diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json new file mode 100644 index 0000000000..41706b0975 --- /dev/null +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.06mm Standard @Qidi Q2C 0.2 nozzle", + "inherits": "fdm_process_QIDI_0.06_nozzle_0.2", + "from": "system", + "setting_id": "GP024", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json new file mode 100644 index 0000000000..dc4924ee41 --- /dev/null +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.08mm Standard @Qidi Q2C 0.2 nozzle", + "inherits": "fdm_process_QIDI_0.08_nozzle_0.2", + "from": "system", + "setting_id": "GP025", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json new file mode 100644 index 0000000000..378dad8510 --- /dev/null +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.10mm Standard @Qidi Q2C 0.2 nozzle", + "inherits": "fdm_process_QIDI_0.10_nozzle_0.2", + "from": "system", + "setting_id": "GP007", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json new file mode 100644 index 0000000000..ef93a94e14 --- /dev/null +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.12mm Fine @Qidi Q2C", + "inherits": "0.12mm Fine @Qidi X3", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json new file mode 100644 index 0000000000..99d13a5d62 --- /dev/null +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.12mm Standard @Qidi Q2C 0.2 nozzle", + "inherits": "fdm_process_QIDI_0.12_nozzle_0.2", + "from": "system", + "setting_id": "GP026", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json new file mode 100644 index 0000000000..1c1a62120b --- /dev/null +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.14mm Standard @Qidi Q2C 0.2 nozzle", + "inherits": "fdm_process_QIDI_0.14_nozzle_0.2", + "from": "system", + "setting_id": "GP027", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.2 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json new file mode 100644 index 0000000000..04c66770c6 --- /dev/null +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.16mm Optimal @Qidi Q2C", + "inherits": "0.16mm Optimal @Qidi X3", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json new file mode 100644 index 0000000000..e86bf6dba0 --- /dev/null +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.18mm Standard @Qidi Q2C 0.6 nozzle", + "inherits": "fdm_process_QIDI_0.18_nozzle_0.6", + "from": "system", + "setting_id": "GP028", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json new file mode 100644 index 0000000000..02678202ff --- /dev/null +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.20mm Standard @Qidi Q2C", + "inherits": "0.20mm Standard @Qidi X3", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json new file mode 100644 index 0000000000..8d905be4a9 --- /dev/null +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.24mm Draft @Qidi Q2C", + "inherits": "0.24mm Draft @Qidi X3", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json new file mode 100644 index 0000000000..068e7897e9 --- /dev/null +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.24mm Standard @Qidi Q2C 0.6 nozzle", + "inherits": "fdm_process_QIDI_0.24_nozzle_0.6", + "from": "system", + "setting_id": "GP029", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json new file mode 100644 index 0000000000..9f71a3d522 --- /dev/null +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.24mm Standard @Qidi Q2C 0.8 nozzle", + "inherits": "fdm_process_QIDI_0.24_nozzle_0.8", + "from": "system", + "setting_id": "GP032", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json new file mode 100644 index 0000000000..7650e7eb8f --- /dev/null +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json @@ -0,0 +1,86 @@ +{ + "type": "process", + "name": "0.25mm Draft @Qidi Q2C", + "inherits": "fdm_process_qidi_x3_common", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "adaptive_layer_height": "1", + "enable_arc_fitting": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.25", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.25", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0.42", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "35", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json new file mode 100644 index 0000000000..97c3abb3d6 --- /dev/null +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.28mm Extra Draft @Qidi Q2C", + "inherits": "0.28mm Extra Draft @Qidi X3", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json new file mode 100644 index 0000000000..7fbf18cfd4 --- /dev/null +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json @@ -0,0 +1,86 @@ +{ + "type": "process", + "name": "0.30mm Extra Draft @Qidi Q2C", + "inherits": "fdm_process_qidi_x3_common", + "from": "system", + "setting_id": "GP004", + "instantiation": "true", + "adaptive_layer_height": "1", + "enable_arc_fitting": "1", + "reduce_crossing_wall": "0", + "layer_height": "0.3", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bridge_flow": "1", + "brim_width": "0", + "brim_object_gap": "0", + "compatible_printers_condition": "", + "print_sequence": "by layer", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "outer_wall_line_width": "0.4", + "wall_infill_order": "inner wall/outer wall/infill", + "line_width": "0.42", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_line_width": "0.5", + "initial_layer_print_height": "0.3", + "infill_combination": "0", + "sparse_infill_line_width": "0.45", + "infill_wall_overlap": "15%", + "interface_shells": "0", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "detect_overhang_wall": "1", + "inner_wall_line_width": "0.45", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "2", + "minimum_sparse_infill_area": "10", + "internal_solid_infill_line_width": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_style": "grid", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.3", + "support_filament": "0", + "support_line_width": "0.42", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "3", + "support_interface_bottom_layers": "-1", + "support_interface_spacing": "0.5", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2.5", + "support_threshold_angle": "40", + "support_object_xy_distance": "50%", + "tree_support_branch_angle": "40", + "tree_support_wall_count": "0", + "detect_thin_wall": "1", + "top_surface_pattern": "monotonic", + "top_surface_line_width": "0.45", + "top_shell_layers": "4", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "compatible_printers": [ + "Qidi Q2C 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json new file mode 100644 index 0000000000..f9e444b169 --- /dev/null +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.30mm Standard @Qidi Q2C 0.6 nozzle", + "inherits": "fdm_process_QIDI_0.30_nozzle_0.6", + "from": "system", + "setting_id": "GP010", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json new file mode 100644 index 0000000000..c70c02bf9d --- /dev/null +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.32mm Standard @Qidi Q2C 0.8 nozzle", + "inherits": "fdm_process_QIDI_0.32_nozzle_0.8", + "from": "system", + "setting_id": "GP033", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json new file mode 100644 index 0000000000..729e005e7d --- /dev/null +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.36mm Standard @Qidi Q2C 0.6 nozzle", + "inherits": "fdm_process_QIDI_0.36_nozzle_0.6", + "from": "system", + "setting_id": "GP030", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json new file mode 100644 index 0000000000..f416bcda98 --- /dev/null +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.40mm Standard @Qidi Q2C 0.8 nozzle", + "inherits": "fdm_process_QIDI_0.40_nozzle_0.8", + "from": "system", + "setting_id": "GP009", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json new file mode 100644 index 0000000000..69f14e90bd --- /dev/null +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.42mm Standard @Qidi Q2C 0.6 nozzle", + "inherits": "fdm_process_QIDI_0.42_nozzle_0.6", + "from": "system", + "setting_id": "GP031", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.6 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json new file mode 100644 index 0000000000..73ee492d6c --- /dev/null +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.48mm Standard @Qidi Q2C 0.8 nozzle", + "inherits": "fdm_process_QIDI_0.48_nozzle_0.8", + "from": "system", + "setting_id": "GP034", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json new file mode 100644 index 0000000000..6506b8b33c --- /dev/null +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.56mm Standard @Qidi Q2C 0.8 nozzle", + "inherits": "fdm_process_QIDI_0.56_nozzle_0.8", + "from": "system", + "setting_id": "GP035", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Qidi Q2C 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 5752706dbe..0b06b7e19e 100644 --- a/resources/profiles/Qidi/process/fdm_process_common.json +++ b/resources/profiles/Qidi/process/fdm_process_common.json @@ -13,6 +13,19 @@ "default_acceleration": "10000", "bridge_no_support": "0", "elefant_foot_compensation": "0.1", + "bottom_surface_density": "100", + "enable_support_ironing":"0", + "support_ironing_pattern":"zig-zag", + "support_ironing_speed":"30", + "support_ironing_flow":"10%", + "support_ironing_spacing":"0.15", + "support_ironing_inset":"0.0", + "support_ironing_direction":"0", + "sparse_infill_lattice_angle_1": "-45", + "sparse_infill_lattice_angle_2": "45", + "top_surface_density": "100", + "travel_short_distance_acceleration": ["250"], + "enable_tower_interface_features":"0", "outer_wall_line_width": "0.42", "outer_wall_speed": "120", "line_width": "0.45", diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json index 1224bcbc5a..ee5a08a851 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json @@ -14,6 +14,19 @@ "bridge_speed": "50", "brim_width": "5", "brim_object_gap": "0.1", + "bottom_surface_density": "100", + "enable_support_ironing":"0", + "support_ironing_pattern":"zig-zag", + "support_ironing_speed":"30", + "support_ironing_flow":"10%", + "support_ironing_spacing":"0.15", + "support_ironing_inset":"0.0", + "support_ironing_direction":"0", + "sparse_infill_lattice_angle_1": "-45", + "sparse_infill_lattice_angle_2": "45", + "top_surface_density": "100", + "travel_short_distance_acceleration": ["250"], + "enable_tower_interface_features":"0", "compatible_printers": [], "compatible_printers_condition": "", "print_sequence": "by layer", diff --git a/resources/profiles/Qidi/qidi_q2c_buildplate_model.stl b/resources/profiles/Qidi/qidi_q2c_buildplate_model.stl new file mode 100644 index 0000000000000000000000000000000000000000..ca300b0cece2eb0c5a30866aa90e32008bd62987 GIT binary patch literal 20284 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 QCmJmFU@RhFv)x(!55!EEI{*Lx literal 0 HcmV?d00001 diff --git a/resources/profiles/Qidi/qidi_q2c_buildplate_texture.png b/resources/profiles/Qidi/qidi_q2c_buildplate_texture.png new file mode 100644 index 0000000000000000000000000000000000000000..7778895c9cbf3a2cd313d2cc341413e3375d2e9b GIT binary patch literal 8767 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 LdzNh2_0!(~(v=0q literal 0 HcmV?d00001 From 8c895a4b7fcf25d15c468681499da4476f6d9e4f Mon Sep 17 00:00:00 2001 From: HYzd766 <1550039450@qq.com> Date: Thu, 5 Mar 2026 14:06:22 +0800 Subject: [PATCH 02/35] Update Qidi X-Max 4 0.4 nozzle.json --- resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json index d2f2f36daf..75fe5d15d4 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json @@ -24,7 +24,7 @@ "is_support_timelapse": "1", "is_support_multi_box": "1", "layer_change_gcode": "{if timelapse_type == 1} ; timelapse with wipe tower\nG92 E0\nG1 E-[retraction_length] F1800\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nMOVE_TO_TRASH\n{if layer_z <=25}\nG1 Z25\n{endif}\nG92 E0\nM400\nTIMELAPSE_TAKE_FRAME\nG1 E[retraction_length] F300\nG1 X180 F8000\nG1 Y380\n{if layer_z <=25}\nG1 Z[layer_z]\n{endif}\n{elsif timelapse_type == 0} ; timelapse without wipe tower\nTIMELAPSE_TAKE_FRAME\n{endif}\nG92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}", - "machine_end_gcode": "DISABLE_BOX_HEATER\nM141 S0\nM140 S0\nDISABLE_ALL_SENSOR\nG1 E-3 F1800\nG0 Z{max_layer_z + 3} F600\nUNLOAD_FILAMENT T=[current_extruder]\nG0 Y380 F12000\nG0 X128 Y380 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}\nM104 S0\nPRINT_END", + "machine_end_gcode": "SET_PRINT_MAIN_STATUS MAIN_STATUS=print_end\nDISABLE_BOX_HEATER\nM141 S0\nM140 S0\nDISABLE_ALL_SENSOR\nG1 E-3 F1800\nG0 Z{max_layer_z + 3} F600\nUNLOAD_FILAMENT T=[current_extruder]\nG0 Y380 F12000\nG0 X128 Y380 F12000\n{if max_layer_z < max_print_height / 2}G1 Z{max_print_height / 2 + 10} F600{else}G1 Z{min(max_print_height, max_layer_z + 3)}{endif}\nM104 S0\nPRINT_END", "machine_max_jerk_e": ["4"], "machine_max_jerk_x": ["9"], "machine_max_jerk_y": ["9"], @@ -35,7 +35,7 @@ "machine_max_acceleration_y": ["30000"], "machine_max_speed_x": ["800"], "machine_max_speed_y": ["800"], - "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X380 Y5 F20000\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG0 X195 Y1 F20000\nG0 Z10 F480\nSET_KINEMATIC_POSITION Z={10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480", + "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X380 Y5 F20000\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG0 X195 Y1 F20000\nG0 Z10 F480\nSET_KINEMATIC_POSITION Z={10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing", "nozzle_diameter": ["0.4"], "nozzle_volume": ["150"], "printable_area": ["0x0","390x0","390x390","0x390"], From ccea80482e188fba09254138db13fcb4ff7cac1e Mon Sep 17 00:00:00 2001 From: yw4z Date: Sat, 7 Mar 2026 04:32:05 +0300 Subject: [PATCH 03/35] Update Plater.cpp --- src/slic3r/GUI/Plater.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 40b6fd9be6..d69d6ee1ca 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2106,14 +2106,10 @@ Sidebar::Sidebar(Plater *parent) bSizer39->AddSpacer(FromDIP(SidebarProps::TitlebarMargin())); // add filament content - // ORCA use a height with user preference - int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - p->filament_area_height = std::ceil(filament_count_user * 0.5) * (30 + SidebarProps::ElementSpacing()) - SidebarProps::ElementSpacing(); - p->m_panel_filament_content = new wxScrolledWindow( p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); p->m_panel_filament_content->SetScrollbars(0, 100, 1, 2); p->m_panel_filament_content->SetScrollRate(0, 5); - p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(p->filament_area_height)}); // ORCA + //p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(p->filament_area_height)}); // ORCA p->m_panel_filament_content->SetBackgroundColour(wxColour(255, 255, 255)); //wxBoxSizer* bSizer_filament_content; @@ -2130,6 +2126,11 @@ Sidebar::Sidebar(Plater *parent) /* first filament item */ init_filament_combo(&p->combos_filament[0], 0); + // ORCA use a height with user preference + int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); + p->filament_area_height = std::ceil(filament_count_user * 0.5) * (p->combos_filament[0]->GetSize().GetHeight() + SidebarProps::ElementSpacing()) - SidebarProps::ElementSpacing(); + p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(p->filament_area_height)}); // ORCA + //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); wxSizer *sizer_filaments2 = new wxBoxSizer(wxVERTICAL); sizer_filaments2->Add(p->sizer_filaments, 0, wxEXPAND, 0); From 6d0d787467be19ce59ca59aecfbae89d8a768d87 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sat, 7 Mar 2026 19:30:16 +0300 Subject: [PATCH 04/35] Update Plater.cpp --- src/slic3r/GUI/Plater.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d69d6ee1ca..8e0290b16c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2128,8 +2128,8 @@ Sidebar::Sidebar(Plater *parent) // ORCA use a height with user preference int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - p->filament_area_height = std::ceil(filament_count_user * 0.5) * (p->combos_filament[0]->GetSize().GetHeight() + SidebarProps::ElementSpacing()) - SidebarProps::ElementSpacing(); - p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(p->filament_area_height)}); // ORCA + p->filament_area_height = std::ceil(filament_count_user * 0.5) * (p->combos_filament[0]->GetSize().GetHeight() + FromDIP(SidebarProps::ElementSpacing())) - FromDIP(SidebarProps::ElementSpacing()); + p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); // ORCA //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); wxSizer *sizer_filaments2 = new wxBoxSizer(wxVERTICAL); @@ -3525,7 +3525,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) for (auto& c : p->combos_filament) c->update(); // Expand filament list - p->m_panel_filament_content->SetMaxSize({-1, FromDIP(p->filament_area_height)}); // ORCA + p->m_panel_filament_content->SetMaxSize({-1, p->filament_area_height}); // ORCA auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) min_size.y = p->m_panel_filament_content->GetMaxHeight(); From d129c1d9cbd4ab06475bf5054e1ef8468db0932a Mon Sep 17 00:00:00 2001 From: yw4z Date: Sat, 7 Mar 2026 19:40:39 +0300 Subject: [PATCH 05/35] Update Plater.cpp --- src/slic3r/GUI/Plater.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 8e0290b16c..fe124fa726 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2128,7 +2128,7 @@ Sidebar::Sidebar(Plater *parent) // ORCA use a height with user preference int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - p->filament_area_height = std::ceil(filament_count_user * 0.5) * (p->combos_filament[0]->GetSize().GetHeight() + FromDIP(SidebarProps::ElementSpacing())) - FromDIP(SidebarProps::ElementSpacing()); + p->filament_area_height = std::ceil(filament_count_user * 0.5) * (p->combos_filament[0]->GetSize().GetHeight() + FromDIP(4)); p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); // ORCA //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); From e6f90b1c7a2267de291a2221db4b455d0ad700f3 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 8 Mar 2026 02:20:31 +0300 Subject: [PATCH 06/35] update --- src/slic3r/GUI/Plater.cpp | 21 +++++++++++++++------ src/slic3r/GUI/Plater.hpp | 1 + 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fe124fa726..2c5a363a25 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2109,7 +2109,7 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_filament_content = new wxScrolledWindow( p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); p->m_panel_filament_content->SetScrollbars(0, 100, 1, 2); p->m_panel_filament_content->SetScrollRate(0, 5); - //p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(p->filament_area_height)}); // ORCA + //p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); // ORCA p->m_panel_filament_content->SetBackgroundColour(wxColour(255, 255, 255)); //wxBoxSizer* bSizer_filament_content; @@ -2126,10 +2126,7 @@ Sidebar::Sidebar(Plater *parent) /* first filament item */ init_filament_combo(&p->combos_filament[0], 0); - // ORCA use a height with user preference - int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - p->filament_area_height = std::ceil(filament_count_user * 0.5) * (p->combos_filament[0]->GetSize().GetHeight() + FromDIP(4)); - p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); // ORCA + update_filaments_area_height(); // ORCA //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); wxSizer *sizer_filaments2 = new wxBoxSizer(wxVERTICAL); @@ -2777,6 +2774,16 @@ void Sidebar::change_top_border_for_mode_sizer(bool increase_border) #endif } +// ORCA use a height with user preference +void Sidebar::update_filaments_area_height() +{ + int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); + // Height and Border is static in here because GetSize() from item / sizer not returning of correct values while using wxEXPAND with 1(vertical) orientation + // FromDIP(2) + FromDIP(2) not equal to FromDIP(4) on 125% 175% scaling. this fixes scaling related issues + p->filament_area_height = std::ceil(filament_count_user * 0.5) * (FromDIP(30) + FromDIP(2) + FromDIP(2)); + p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); +} + void Sidebar::msw_rescale() { SetMinSize(wxSize(42 * wxGetApp().em_unit(), -1)); @@ -2824,6 +2831,8 @@ void Sidebar::msw_rescale() p->m_flushing_volume_btn->Rescale(); set_flushing_volume_warning(is_flush_config_modified()); // ORCA reapply appearance + update_filaments_area_height(); + //BBS p->left_extruder->Rescale(); p->right_extruder->Rescale(); @@ -3525,7 +3534,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) for (auto& c : p->combos_filament) c->update(); // Expand filament list - p->m_panel_filament_content->SetMaxSize({-1, p->filament_area_height}); // ORCA + update_filaments_area_height(); // ORCA auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) min_size.y = p->m_panel_filament_content->GetMaxHeight(); diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 89b9f560c4..3708e52b42 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -172,6 +172,7 @@ public: void set_bed_type_accord_combox(BedType bed_type); bool reset_bed_type_combox_choices(bool is_sidebar_init = false); void change_top_border_for_mode_sizer(bool increase_border); + void update_filaments_area_height(); void msw_rescale(); void sys_color_changed(); void search(); From da3c4b50c9c1a41202bca2b225c2b925b6e76644 Mon Sep 17 00:00:00 2001 From: Alexandre Folle de Menezes Date: Sun, 8 Mar 2026 12:37:28 -0300 Subject: [PATCH 07/35] Fix plurals on some GUI strings --- localization/i18n/OrcaSlicer.pot | 14 +++++------ localization/i18n/ca/OrcaSlicer_ca.po | 20 ++++++++++------ localization/i18n/cs/OrcaSlicer_cs.po | 20 ++++++++++------ localization/i18n/de/OrcaSlicer_de.po | 20 ++++++++++------ localization/i18n/en/OrcaSlicer_en.po | 22 ++++++++--------- localization/i18n/es/OrcaSlicer_es.po | 17 ++++++++------ localization/i18n/fr/OrcaSlicer_fr.po | 20 ++++++++++------ localization/i18n/hu/OrcaSlicer_hu.po | 20 ++++++++++------ localization/i18n/it/OrcaSlicer_it.po | 18 ++++++++------ localization/i18n/ja/OrcaSlicer_ja.po | 20 ++++++++++------ localization/i18n/ko/OrcaSlicer_ko.po | 20 ++++++++++------ localization/i18n/lt/OrcaSlicer_lt.po | 20 ++++++++++------ localization/i18n/nl/OrcaSlicer_nl.po | 20 ++++++++++------ localization/i18n/pl/OrcaSlicer_pl.po | 20 ++++++++++------ localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 26 ++++++++++----------- localization/i18n/ru/OrcaSlicer_ru.po | 20 ++++++++++------ localization/i18n/sv/OrcaSlicer_sv.po | 20 ++++++++++------ localization/i18n/tr/OrcaSlicer_tr.po | 20 ++++++++++------ localization/i18n/uk/OrcaSlicer_uk.po | 20 ++++++++++------ localization/i18n/vi/OrcaSlicer_vi.po | 20 ++++++++++------ localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 20 ++++++++++------ localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 20 ++++++++++------ src/libslic3r/PrintConfig.cpp | 14 +++++------ src/slic3r/GUI/MainFrame.cpp | 2 +- src/slic3r/GUI/PrintOptionsDialog.cpp | 2 +- src/slic3r/GUI/UnsavedChangesDialog.cpp | 4 ++-- 26 files changed, 284 insertions(+), 175 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 0157871acd..7982f62348 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -13698,7 +13698,7 @@ msgstr "" msgid "Topmost surface" msgstr "" -msgid "All solid layer" +msgid "All solid layers" msgstr "" msgid "Ironing Pattern" @@ -14124,7 +14124,7 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +msgid "Detect overhang walls" msgstr "" #, possible-c-format, possible-boost-format @@ -14674,7 +14674,7 @@ msgid "Minimum sparse infill threshold" msgstr "" msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" @@ -15280,12 +15280,12 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "" -msgid "Detect thin wall" +msgid "Detect thin walls" msgstr "" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" msgid "" @@ -15747,7 +15747,7 @@ msgid "" "itself. It's expressed as a percentage over nozzle diameter." msgstr "" -msgid "Detect narrow internal solid infill" +msgid "Detect narrow internal solid infills" msgstr "" msgid "" diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 4345b86bcb..aaad3f2720 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -15333,7 +15333,8 @@ msgstr "Totes les superfícies superiors" msgid "Topmost surface" msgstr "Només la última superfície superior" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Tota la capa sòlida" msgid "Ironing Pattern" @@ -15860,7 +15861,8 @@ msgstr "" "Àrea màxima d'un forat a la base del model abans que s'ompli amb material " "cònic. Un valor de 0 omplirà tots els forats de la base del model." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Detectar voladís de perímetre" #, c-format, boost-format @@ -16558,8 +16560,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Llindar mínim de farciment poc dens" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "L'àrea de farciment poc dens que sigui més petita que el valor del llindar " @@ -17319,12 +17322,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura del broquet per les capes després de l'inicial" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Detectar perímetres prims" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Detecta un perímetre prim que no pugui contenir dues línies d'amplada. I " "utilitzar una sola línia per imprimir. Potser no s'imprimeix gaire bé, " @@ -17938,7 +17943,8 @@ msgstr "" "fina que el gruix de l'element el perímetre esdevindrà tan gruixut com el " "propi element. S'expressa en percentatge sobre el diàmetre del broquet" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detectar de farciment sòlid intern estret" msgid "" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index b60f90892c..8e01b62010 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -14962,7 +14962,8 @@ msgstr "Horní povrchy" msgid "Topmost surface" msgstr "Nejvyšší povrch" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Všechny pevné vrstvy" msgid "Ironing Pattern" @@ -15451,7 +15452,8 @@ msgstr "" "Maximální plocha otvoru ve spodní části modelu, než bude vyplněn kuželovitým " "materiálem. Hodnota 0 vyplní všechny otvory ve spodní části modelu." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Detekovat převislou stěnu" #, c-format, boost-format @@ -16130,8 +16132,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimální práh řídké výplně" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Oblast řídké výplně menší než prahová hodnota bude nahrazena vnitřní plnou " @@ -16854,12 +16857,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Teplota trysky pro vrstvy po úvodní vrstvě." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Detekovat tenkou stěnu" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Detekovat tenkou stěnu, do které se nevejdou dvě šířky čáry. A použít pro " "tisk pouze jednu čáru. Tisk nemusí být zcela kvalitní, protože nejde o " @@ -17463,7 +17468,8 @@ msgstr "" "modelu. Pokud je minimální šířka stěny menší než tloušťka prvku, bude stěna " "tak silná, jako je samotný prvek. Je vyjádřena jako procento průměru trysky." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detekovat úzkou vnitřní plnou výplň" msgid "" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index bfe24239e4..4609c50764 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -16126,7 +16126,8 @@ msgstr "Obere Oberflächen" msgid "Topmost surface" msgstr "Oberste Oberfläche" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Alle soliden Schichten" msgid "Ironing Pattern" @@ -16659,7 +16660,8 @@ msgstr "" "konischem Material gefüllt wird. Ein Wert von 0 füllt alle Löcher in der " "Basis des Modells." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Erkennen von Wandüberhängen" #, c-format, boost-format @@ -17368,8 +17370,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Mindestschwelle für Füllung" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Innere Füllbereiche, die kleiner als dieser Wert sind, werden durch massive " @@ -18163,12 +18166,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Düsentemperatur nach der ersten Schicht" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Dünne Wand erkennen" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Erkennt dünne Wände, die keine zwei Linienbreiten enthalten können. Und " "verwendet eine einzelne Linie zum Drucken. Diese wird vielleicht nicht sehr " @@ -18821,7 +18826,8 @@ msgstr "" "Dicke des Features, wird die Wand so dick wie das Feature selbst. Wird als " "Prozentsatz des Düsendurchmessers angegeben." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Erkennen einer schmalen internen soliden Füllung" msgid "" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 9f379ea43d..225d04de2a 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -14004,8 +14004,8 @@ msgstr "All top surfaces" msgid "Topmost surface" msgstr "Topmost surface only" -msgid "All solid layer" -msgstr "All solid layers" +msgid "All solid layers" +msgstr "" msgid "Ironing Pattern" msgstr "" @@ -14442,8 +14442,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" -msgstr "Detect overhang walls" +msgid "Detect overhang walls" +msgstr "" #, c-format, boost-format msgid "" @@ -15006,7 +15006,7 @@ msgid "Minimum sparse infill threshold" msgstr "" msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Sparse infill areas which are smaller than this threshold value are replaced " @@ -15639,12 +15639,12 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Nozzle temperature after the first layer" -msgid "Detect thin wall" -msgstr "Detect thin walls" +msgid "Detect thin walls" +msgstr "" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "This detects thin walls which can’t contain two lines and uses a single line " "to print. It may not print as well because it’s not a closed loop." @@ -16146,7 +16146,7 @@ msgid "" "itself. It's expressed as a percentage over nozzle diameter." msgstr "" -msgid "Detect narrow internal solid infill" +msgid "Detect narrow internal solid infills" msgstr "" msgid "" @@ -16168,7 +16168,7 @@ msgid " not in range " msgstr "" msgid "Export 3MF" -msgstr "Export 3mf" +msgstr "" msgid "Export project as 3MF." msgstr "This exports the project as a 3MF file." diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 9f169837d0..60a9b09def 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -16063,7 +16063,8 @@ msgstr "Todas las superficies superiores" msgid "Topmost surface" msgstr "Sólo la superficie superior" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Todas la capas sólidas" msgid "Ironing Pattern" @@ -16615,7 +16616,7 @@ msgstr "" "material cónico. El valor 0 llenará todos los orificios en la base del " "modelo." -msgid "Detect overhang wall" +msgid "Detect overhang walls" msgstr "Detectar perímetros en voladizo" #, c-format, boost-format @@ -17323,8 +17324,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Umbral de área mínima de relleno de baja densidad" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "El área de relleno de baja densidad que es menor que este valor de umbral se " @@ -18115,12 +18117,12 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura de la boquilla después de la primera capa." -msgid "Detect thin wall" +msgid "Detect thin walls" msgstr "Detección de perímetros delgados" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Detectar los perímetros delgados que no pueden contener dos líneas de ancho, " "y utilizar una sola línea para imprimir. Tal vez no se imprima muy bien, " @@ -18775,7 +18777,8 @@ msgstr "" "propia característica. Se expresa en porcentaje en base al diámetro de la " "boquilla." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detección de relleno interno estrecho" msgid "" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index cea1b69654..8b31ecbe38 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -15463,7 +15463,8 @@ msgstr "Surfaces supérieures" msgid "Topmost surface" msgstr "Surface la plus élevée" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Toutes les couches pleines" msgid "Ironing Pattern" @@ -15999,7 +16000,8 @@ msgstr "" "par un matériau conique. Une valeur de 0 remplira tous les trous dans la " "base du modèle." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Détecter une paroi en surplomb" #, c-format, boost-format @@ -16702,8 +16704,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Seuil minimum de remplissage" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "La zone de remplissage inférieure à la valeur seuil est remplacée par un " @@ -17473,12 +17476,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Température de la buse pour les couches après la première" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Détecter les parois fines" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Détecte les parois fines qui ne peuvent pas contenir deux largeurs de ligne. " "Et utilisez une seule ligne pour imprimer. Peut ne pas être très bien " @@ -18096,7 +18101,8 @@ msgstr "" "l'élément lui-même. Elle est exprimée en pourcentage par rapport au diamètre " "de la buse" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Détecter un remplissage plein interne étroit" msgid "" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 3976b03bb1..903e6cb271 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -14313,7 +14313,8 @@ msgstr "Felső felületek" msgid "Topmost surface" msgstr "Legfelső felület" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Összes szilárd réteg" msgid "Ironing Pattern" @@ -14769,7 +14770,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Túlnyúló fal felismerése" #, c-format, boost-format @@ -15358,8 +15360,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Ritkás kitöltés küszöbértéke" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "A küszöbérték alatti ritkás kitöltési terület belső szilárd kitöltéssel " @@ -16028,12 +16031,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Fúvóka hőmérséklete az első réteg után" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Vékony fal felismerése" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Felismeri a vékony falat, amit nem lehet két vonalnyi szélességgel " "nyomtatni, és egyetlen vonallal nyomtatja" @@ -16563,7 +16568,8 @@ msgstr "" "mint a nyomtatandó elem vastagsága, akkor a fal olyan vastag lesz, mint maga " "a nyomtatott elem. A fúvóka átmérőjének százalékában van kifejezve" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Keskeny belső szilárd kitöltés felismerése" msgid "" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 107a56ada3..11e11324bf 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -15409,7 +15409,7 @@ msgstr "Superfici superiori" msgid "Topmost surface" msgstr "Superficie superiore più alta" -msgid "All solid layer" +msgid "All solid layers" msgstr "Tutti gli strati solidi" msgid "Ironing Pattern" @@ -15943,7 +15943,8 @@ msgstr "" "una forma conica. Un valore pari a 0 riempirà tutti i fori nella base del " "modello." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Rileva parete sporgente" #, c-format, boost-format @@ -16649,8 +16650,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Soglia minima riempimento sparso" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "L'area del riempimento sparso che è inferiore al valore di soglia, viene " @@ -17420,12 +17422,13 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura dell'ugello per gli strati successivi a quello iniziale." -msgid "Detect thin wall" +msgid "Detect thin walls" msgstr "Rileva pareti sottili" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Rileva le pareti sottili che non possono contenere due linee di larghezza, " "utilizzandone quindi una sola per la stampa. Potrebbe non essere stampato " @@ -18042,7 +18045,8 @@ msgstr "" "spessa quanto l'elemento stesso. Questo valore è espresso come percentuale " "rispetto al diametro dell'ugello." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Rileva riempimento solido interno stretto" msgid "" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 6dd18813e1..aa2da7f273 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -14080,7 +14080,8 @@ msgstr "全てのトップ面" msgid "Topmost surface" msgstr "最上部のみ" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "全てのソリッド積層" msgid "Ironing Pattern" @@ -14523,7 +14524,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "オーバーハングを検出" #, c-format, boost-format @@ -15095,8 +15097,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "スパース インフィルの下閾値" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "スパース インフィルの面積がこの値以下の場合、ソリッド インフィルに変換されま" @@ -15741,12 +15744,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "1層目後のノズル温度" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "薄い壁を検出" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "2ラインの入らない薄い壁面を検出し、1ラインで造形します。仕上がりが悪くなり可" "能性があります。" @@ -16249,7 +16254,8 @@ msgid "" "itself. It's expressed as a percentage over nozzle diameter." msgstr "" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "薄いソリッド インフィル検出" msgid "" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index b88f064f51..fc1f14bf3a 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -14807,7 +14807,8 @@ msgstr "상단 표면" msgid "Topmost surface" msgstr "최상단 표면" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "모든 꽉찬 레이어" msgid "Ironing Pattern" @@ -15301,7 +15302,8 @@ msgstr "" "원뿔형 재료로 채워지기 전에 모델 베이스에 있는 구멍의 최대 면적입니다. 값이 0" "이면 모델 베이스의 모든 구멍이 채워집니다." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "오버행 벽 감지" #, c-format, boost-format @@ -15960,8 +15962,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "최소 드문 채우기 임계값" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "임계값보다 작은 드문 채우기 영역은 꽉찬 내부 채우기로 대체됩니다" @@ -16669,12 +16672,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "초기 레이어 이후의 노즐 온도" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "얇은 벽 감지" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "두개의 선 너비를 포함할 수 없는 얇은 벽을 감지합니다. 그리고 한 선으로 출력합" "니다. 폐쇄 루프가 아니기 때문에 출력이 잘 되지 않을 수 있습니다" @@ -17244,7 +17249,8 @@ msgstr "" "비가 형상의 두께보다 얇은 경우 벽은 형상 자체만큼 두꺼워집니다. 노즐 직경에 " "대한 백분율로 표시됩니다" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "좁은 꽉찬 내부 채우기 감지" msgid "" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 7a263569fb..b8e2cc88bc 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -15360,7 +15360,8 @@ msgstr "Viršutiniai paviršiai" msgid "Topmost surface" msgstr "Aukščiausias paviršius" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Visas vientisas sluoksnis" msgid "Ironing Pattern" @@ -15889,7 +15890,8 @@ msgstr "" "Didžiausias modelio pagrindo skylės plotas prieš ją užpildant kūgine " "medžiaga. 0 reikšmė užpildys visas modelio pagrindo skyles." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Aptikti išsikišusią sieną" #, c-format, boost-format @@ -16579,8 +16581,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimali reto užpildymo riba" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Reto užpildymo sritys, kurios yra mažesnės už šią ribinę vertę, pakeičiamos " @@ -17340,12 +17343,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Po pradinio sluoksnio esančių sluoksnių purkštuko temperatūra." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Aptikti plonas sieneles" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Aptikti ploną sienelę, kurioje negali būti dviejų eilučių pločio. " "Spausdinimui naudoti vieną liniją. Gali būti, kad nebus išspausdinta labai " @@ -17973,7 +17978,8 @@ msgstr "" "siena taps tokio pat storio kaip ir pats elementas. Jis išreiškiamas " "procentais nuo purkštuko skersmens." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Aptikti siaurą vidinį vientisą užpildą" msgid "" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index e15261807c..af56a29fbd 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -14477,7 +14477,8 @@ msgstr "Alle bovenoppervlakken" msgid "Topmost surface" msgstr "Alleen het bovenste oppervlak" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Alle vaste lagen" msgid "Ironing Pattern" @@ -14940,7 +14941,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Overhange wand detecteren" #, c-format, boost-format @@ -15536,8 +15538,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimale drempel voor dunne opvulling (infill)" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Dunne opvullingen (infill) die kleiner zijn dan deze drempelwaarde worden " @@ -16214,12 +16217,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Mondstuk temperatuur voor de lagen na de eerste laag" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Detecteer dunne wanden" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Dit detecteert dunne wanden die geen twee lijnen kunnen bevatten en gebruikt " "een enkele lijn tijdens het printen. Het kan zijn dat de kwaliteit minder " @@ -16770,7 +16775,8 @@ msgstr "" "van het element, wordt de muur net zo dik als het object zelf. Dit wordt " "uitgedrukt als een percentage ten opzichte van de diameter van het mondstuk" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Detecteer dichte interne solide vulling (infill)" msgid "" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 9f40ecb44a..bd38fa2f55 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -15260,7 +15260,8 @@ msgstr "Górne powierzchnie" msgid "Topmost surface" msgstr "Tylko ostatnia warstwa" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Wszystkie jednolite warstwy" msgid "Ironing Pattern" @@ -15787,7 +15788,8 @@ msgstr "" "Maksymalna powierzchnia otworu w podstawie modelu przed jego wypełnieniem " "materiałem stożkowym. Wartość 0 wypełni wszystkie otwory w podstawie modelu." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Wykrywanie ścian nawisu" #, c-format, boost-format @@ -16484,8 +16486,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimalny próg wypełnienia" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Obszar wypełnienia, który jest mniejszy od wartości progowej zostaje " @@ -17237,12 +17240,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura dyszy dla warstw po początkowej" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Wykrywanie cienkich ścian" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Wykrywaj ściany o grubości jednego obrysu. Są to obszary, gdzie 2 obrysy nie " "zmieszczą się i trzeba będzie połączyć je w jedną linię" @@ -17848,7 +17853,8 @@ msgstr "" "grubość detalu, obrys będzie miał taką samą grubość jak sam element. Jest " "wyrażona w procentach i zostanie obliczona na podstawie średnicy dyszy." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Wykryj wąskie wewnętrzne pełne wypełnienie" msgid "" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 82fca905b5..9ea92d87c9 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -15921,7 +15921,7 @@ msgstr "Superfícies superiores" msgid "Topmost surface" msgstr "Superfície superior mais alta" -msgid "All solid layer" +msgid "All solid layers" msgstr "Todas as camadas sólidas" msgid "Ironing Pattern" @@ -16461,7 +16461,7 @@ msgstr "" "Área maxima de um furo na base do modelo antes que ele seja preenchido por " "uma forma cônica. Um valor 0 irá preencher todos os furos do modelo." -msgid "Detect overhang wall" +msgid "Detect overhang walls" msgstr "Detectar paredes salientes" #, c-format, boost-format @@ -17161,11 +17161,11 @@ msgid "Minimum sparse infill threshold" msgstr "Limiar mínimo de preenchimento esparso" msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" -"A área de preenchimento esparso que é menor que o valor limiar é substituída " -"por preenchimento sólido interno." +"Áreas de preenchimento esparso menores que este valor limiar são " +"substituídas por preenchimento sólido interno." msgid "Solid infill" msgstr "Preenchimento sólido" @@ -17929,15 +17929,15 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Temperatura do bico para camadas após a inicial." -msgid "Detect thin wall" -msgstr "Detectar parede fina" +msgid "Detect thin walls" +msgstr "Detectar paredes finas" msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" -"Detecta paredes finas que não podem conter duas larguras de linha. E usa uma " -"linha única para imprimir. Talvez seja impresso não muito bem, porque não é " +"Detecta paredes finas que não podem conter duas larguras de linha, e usa uma " +"linha única para imprimir. Talvez não seja impresso muito bem, porque não é " "uma volta fechada." msgid "" @@ -18571,8 +18571,8 @@ msgstr "" "do que a espessura do elemento, a parede será tão espesso quanto o próprio " "elemento. É expresso como uma porcentagem sobre o diâmetro do bico." -msgid "Detect narrow internal solid infill" -msgstr "Detectar preenchimento sólido interno estreito" +msgid "Detect narrow internal solid infills" +msgstr "Detectar preenchimentos sólidos internos estreitos" msgid "" "This option will auto-detect narrow internal solid infill areas. If enabled, " diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 5c56ecd8d4..ae0913f961 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -16031,7 +16031,8 @@ msgstr "Поверхности" msgid "Topmost surface" msgstr "Верхний слой" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Сплошные слои" msgid "Ironing Pattern" @@ -16585,7 +16586,8 @@ msgstr "" "материалом конической геометрии. При 0 все отверстия в основании модели " "будут заполнены." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Обнаруживать нависающие периметры" #, c-format, boost-format @@ -17323,8 +17325,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Мин. порог разреженного заполнения" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Область с разреженным заполнением, размер которого меньше этого порогового " @@ -18163,12 +18166,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Температура при печати последующих слоёв." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Обнаруживать тонкие стенки" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Обнаруживать стенки, которые можно напечатать только в одну линию. Возможно, " "будет напечатано не очень хорошо, так как это разомкнутый контур.\n" @@ -18850,7 +18855,8 @@ msgstr "" "подогнана под размер элемента, если значение этого параметра меньше его " "ширины. Можно указать процент от диаметра сопла." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Оптимизация заполнения узких мест" msgid "" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index d4c7a83ddb..268680dbcc 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -14261,7 +14261,8 @@ msgstr "Top ytor" msgid "Topmost surface" msgstr "Endast högsta ytan" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Alla solida lager" msgid "Ironing Pattern" @@ -14702,7 +14703,8 @@ msgid "" "conical material. A value of 0 will fill all the holes in the model base." msgstr "" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Upptäck överhängs vägg" #, c-format, boost-format @@ -15281,8 +15283,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Min sparsam ifyllnads gräns" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Sparsam ifyllnads ytor som är mindre än detta gränsvärde ersätts med inre " @@ -15937,12 +15940,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Nozzel temperatur efter första lager" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Upptäck tunna väggar" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Upptäck tunna väggar som inte kan ha två linjer och använder en linje för " "att skrivas ut. Utskrifts kvaliteten begränsas efter som det inte är en " @@ -16470,7 +16475,8 @@ msgstr "" "elementet blir väggen lika tjock som själva elementet. Den uttrycks i " "procent av nozzel diametern." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Upptäck tight inre solid ifyllnad" msgid "" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 4a314a7b38..1a502bfb67 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -15257,7 +15257,8 @@ msgstr "Üst yüzeyler" msgid "Topmost surface" msgstr "En üst yüzey" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Tamamı katı katman" msgid "Ironing Pattern" @@ -15785,7 +15786,8 @@ msgstr "" "Modelin tabanındaki bir deliğin, konik malzemeyle doldurulmadan önce " "maksimum alanı. 0 değeri, model tabanındaki tüm delikleri dolduracaktır." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Çıkıntılı duvarı algıla" #, c-format, boost-format @@ -16480,8 +16482,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Minimum seyrek dolgu" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Eşik değerinden küçük olan seyrek dolgu alanı, yerini iç katı dolguya " @@ -17235,12 +17238,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "İlk katmandan sonraki katmanlar için nozul sıcaklığı." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "İnce duvarı algıla" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "İki çizgi genişliğini içeremeyen ince duvarı tespit edin. Ve yazdırmak için " "tek satır kullanın. Kapalı döngü olmadığından pek iyi basılmamış olabilir." @@ -17865,7 +17870,8 @@ msgstr "" "duvar, özelliğin kendisi kadar kalın olacaktır. Nozul çapına göre yüzde " "olarak ifade edilir." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Dar iç katı dolguyu tespit et" msgid "" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 61d184e6ee..11c924e41a 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -15261,7 +15261,8 @@ msgstr "Верхові поверхні" msgid "Topmost surface" msgstr "Найвища поверхня" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Весь суцільний шар" msgid "Ironing Pattern" @@ -15778,7 +15779,8 @@ msgstr "" "Максимальна площа отвору в основі моделі перед заповненням його конічним " "матеріалом. Значення 0 заповнює всі отвори в основі моделі." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Виявлення стінок що нависають" #, c-format, boost-format @@ -16466,8 +16468,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Мінімальний поріг часткового заповнення" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Ділянки часткового заповнення, менші за порогове значення, замінюються " @@ -17210,12 +17213,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Температура сопла для шарів після першого" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Виявлення тонкої стінки" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Виявляти тонкі стінки, товщина яких менше ніж ширина двох ліній і " "використовувати лише одну лінію для друку. Можуть бути надруковані не дуже " @@ -17813,7 +17818,8 @@ msgstr "" "елемента, то товщина периметра дорівнюватиме товщині самого елемента. Він " "виражається у відсотках від діаметра сопла" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Виявлення вузького внутрішнього суцільного заповнення" msgid "" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 1e88c80e00..31182d78a1 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -15024,7 +15024,8 @@ msgstr "Bề mặt trên" msgid "Topmost surface" msgstr "Bề mặt trên cùng" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "Tất cả lớp đặc" msgid "Ironing Pattern" @@ -15540,7 +15541,8 @@ msgstr "" "Diện tích tối đa của lỗ ở đáy model trước khi nó được lấp bởi vật liệu hình " "nón. Giá trị 0 sẽ lấp tất cả các lỗ ở đáy model." -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "Phát hiện thành nhô" #, c-format, boost-format @@ -16211,8 +16213,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "Ngưỡng infill thưa tối thiểu" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "" "Vùng infill thưa nhỏ hơn giá trị ngưỡng được thay thế bằng infill đặc bên " @@ -16946,12 +16949,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "Nhiệt độ đầu phun cho các lớp sau lớp đầu tiên." -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "Phát hiện thành mỏng" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "Phát hiện thành mỏng không thể chứa hai độ rộng đường. Và sử dụng đường đơn " "để in. Có thể in không tốt lắm, vì nó không phải vòng kín." @@ -17558,7 +17563,8 @@ msgstr "" "thành sẽ trở nên dày như tính năng đó. Nó được biểu thị dưới dạng phần trăm " "trên đường kính đầu phun." -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "Phát hiện infill đặc bên trong hẹp" msgid "" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 8018a6d383..a49cc046c1 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -14568,7 +14568,8 @@ msgstr "顶面" msgid "Topmost surface" msgstr "最顶面" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "所有实心层" msgid "Ironing Pattern" @@ -15042,7 +15043,8 @@ msgstr "" "模型底部的孔洞在被圆锥形材料填充前所允许的最大面积。值为0将填充模型底部的所有" "孔洞。" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "识别悬垂外墙" #, c-format, boost-format @@ -15652,8 +15654,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "稀疏填充最小阈值" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "小于这个阈值的稀疏填充区域将会被内部实心填充替代。" @@ -16340,12 +16343,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "除首层外的其它层的喷嘴温度" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "检查薄壁" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "检查无法容纳两条走线的薄壁。使用单条走线打印。可能会打地不是很好,因为走线不" "再闭合。" @@ -16908,7 +16913,8 @@ msgstr "" "用于替换模型上的细小特征(根据最小特征尺寸决定)的墙线宽。如果最小墙宽度小于" "最小特征宽度,则墙将变得和特征本身一样厚。本设置以喷嘴直径的百分比表示。" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "识别狭窄的内部实心填充" msgid "" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index d853e2f6b2..a9e68d1008 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -14692,7 +14692,8 @@ msgstr "頂面" msgid "Topmost surface" msgstr "最頂面" -msgid "All solid layer" +#, fuzzy +msgid "All solid layers" msgstr "所有實心層" msgid "Ironing Pattern" @@ -15172,7 +15173,8 @@ msgstr "" "模型底部的孔洞在被圓錐形材料填充前所允許的最大面積。值為 0 將填充模型底部的所" "有孔洞。" -msgid "Detect overhang wall" +#, fuzzy +msgid "Detect overhang walls" msgstr "檢測懸空外牆" #, c-format, boost-format @@ -15784,8 +15786,9 @@ msgstr "" msgid "Minimum sparse infill threshold" msgstr "稀疏填充最小臨界值" +#, fuzzy msgid "" -"Sparse infill area which is smaller than threshold value is replaced by " +"Sparse infill areas smaller than this threshold value are replaced by " "internal solid infill." msgstr "小於設定閾值的稀疏填充區域將替換為內部實心填充" @@ -16480,12 +16483,14 @@ msgstr "" msgid "Nozzle temperature for layers after the initial one." msgstr "除首層外的其它層的噴嘴溫度" -msgid "Detect thin wall" +#, fuzzy +msgid "Detect thin walls" msgstr "檢查薄壁" +#, fuzzy msgid "" -"Detect thin wall which can't contain two line width. And use single line to " -"print. Maybe printed not very well, because it's not closed loop." +"Detect thin walls which can't contain two line widths, and use single line " +"to print. Maybe not printed very well, because it's not a closed loop." msgstr "" "檢查無法容納兩條走線的薄壁。使用單條走線列印。可能會打地不是很好,因為走線不" "再閉合" @@ -17043,7 +17048,8 @@ msgstr "" "設定替代模型中細薄特徵(依據最小特徵尺寸)的牆體寬度。若最小牆寬小於特徵厚" "度,牆體將與特徵的厚度一致。此值以噴嘴直徑的百分比表示" -msgid "Detect narrow internal solid infill" +#, fuzzy +msgid "Detect narrow internal solid infills" msgstr "識別狹窄內部實心填充" msgid "" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 048be848c6..54491ddacb 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3972,7 +3972,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("No ironing")); def->enum_labels.push_back(L("Top surfaces")); def->enum_labels.push_back(L("Topmost surface")); - def->enum_labels.push_back(L("All solid layer")); + def->enum_labels.push_back(L("All solid layers")); def->mode = comAdvanced; def->set_default_value(new ConfigOptionEnum(IroningType::NoIroning)); @@ -4554,7 +4554,7 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloat(0.)); def = this->add("detect_overhang_wall", coBool); - def->label = L("Detect overhang wall"); + def->label = L("Detect overhang walls"); def->category = L("Quality"); def->tooltip = L("Detect the overhang percentage relative to line width and use different speed to print. " "For 100%% overhang, bridge speed is used."); @@ -5304,7 +5304,7 @@ void PrintConfigDef::init_fff_params() def = this->add("minimum_sparse_infill_area", coFloat); def->label = L("Minimum sparse infill threshold"); def->category = L("Strength"); - def->tooltip = L("Sparse infill area which is smaller than threshold value is replaced by internal solid infill."); + def->tooltip = L("Sparse infill areas smaller than this threshold value are replaced by internal solid infill."); def->sidetext = L(u8"mm²"); // square milimeters, CIS languages need translation def->min = 0; def->mode = comAdvanced; @@ -6145,10 +6145,10 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionPoints{}); def = this->add("detect_thin_wall", coBool); - def->label = L("Detect thin wall"); + def->label = L("Detect thin walls"); def->category = L("Strength"); - def->tooltip = L("Detect thin wall which can't contain two line width. And use single line to print. " - "Maybe printed not very well, because it's not closed loop."); + def->tooltip = L("Detect thin walls which can't contain two line widths, and use single line to print. " + "Maybe not printed very well, because it's not a closed loop."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); @@ -6759,7 +6759,7 @@ void PrintConfigDef::init_fff_params() } def = this->add("detect_narrow_internal_solid_infill", coBool); - def->label = L("Detect narrow internal solid infill"); + def->label = L("Detect narrow internal solid infills"); def->category = L("Strength"); def->tooltip = L("This option will auto-detect narrow internal solid infill areas. " "If enabled, the concentric pattern will be used for the area to speed up printing. " diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index d7c0da0127..11c98f6ab1 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -2488,7 +2488,7 @@ static wxMenu* generate_help_menu() // //TODO // }); // Check New Version - append_menu_item(helpMenu, wxID_ANY, _L("Check for Update"), _L("Check for Update"), + append_menu_item(helpMenu, wxID_ANY, _L("Check for Updates"), _L("Check for Updates"), [](wxCommandEvent&) { wxGetApp().check_new_version_sf(true, 1); }, "", nullptr, []() { diff --git a/src/slic3r/GUI/PrintOptionsDialog.cpp b/src/slic3r/GUI/PrintOptionsDialog.cpp index 56cc764356..f6681e9d7a 100644 --- a/src/slic3r/GUI/PrintOptionsDialog.cpp +++ b/src/slic3r/GUI/PrintOptionsDialog.cpp @@ -639,7 +639,7 @@ wxBoxSizer* PrintOptionsDialog::create_settings_group(wxWindow* parent) ai_refine_sizer->Add(line_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(18)); line_sizer = new wxBoxSizer(wxHORIZONTAL); - text_spaghetti_detection_caption0 = new Label(ai_refine_panel, _L("Detect spaghetti failure(scattered lose filament).")); + text_spaghetti_detection_caption0 = new Label(ai_refine_panel, _L("Detect spaghetti failures (scattered lose filament).")); text_spaghetti_detection_caption0->SetFont(Label::Body_12); text_spaghetti_detection_caption0->SetForegroundColour(STATIC_TEXT_CAPTION_COL); text_spaghetti_detection_caption0->Wrap(-1); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index ada0269330..89cd4287ef 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1668,7 +1668,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres // process changes of extruders count if (type == Preset::TYPE_PRINTER && old_pt == ptFFF && old_config.opt("nozzle_diameter")->values.size() != new_config.opt("nozzle_diameter")->values.size()) { - wxString local_label = _L("Extruders count"); + wxString local_label = _L("Extruder count"); wxString old_val = from_u8((boost::format("%1%") % old_config.opt("nozzle_diameter")->values.size()).str()); wxString new_val = from_u8((boost::format("%1%") % new_config.opt("nozzle_diameter")->values.size()).str()); @@ -2224,7 +2224,7 @@ void DiffPresetDialog::update_tree() // process changes of extruders count if (type == Preset::TYPE_PRINTER && left_pt == ptFFF && left_config.opt("extruder_colour")->values.size() != right_congig.opt("extruder_colour")->values.size()) { - wxString local_label = _L("Extruders count"); + wxString local_label = _L("Extruder count"); wxString left_val = from_u8((boost::format("%1%") % left_config.opt("extruder_colour")->values.size()).str()); wxString right_val = from_u8((boost::format("%1%") % right_congig.opt("extruder_colour")->values.size()).str()); From e22c8b6648ba1359144024bb652e84b7269d2b9d Mon Sep 17 00:00:00 2001 From: yw4z Date: Mon, 9 Mar 2026 17:09:09 +0300 Subject: [PATCH 08/35] update --- src/slic3r/GUI/Plater.cpp | 51 +++++++++++++++------------------- src/slic3r/GUI/Preferences.cpp | 34 ++++++++++++++++++++++- src/slic3r/GUI/Preferences.hpp | 3 ++ 3 files changed, 59 insertions(+), 29 deletions(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 2c5a363a25..e2d456194f 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -469,7 +469,6 @@ struct Sidebar::priv ScalableButton * m_bpButton_ams_filament; ScalableButton * m_bpButton_set_filament; int m_menu_filament_id = -1; - int filament_area_height; wxScrolledWindow* m_panel_filament_content; wxScrolledWindow* m_scrolledWindow_filament_content; wxStaticLine* m_staticline2; @@ -2109,7 +2108,7 @@ Sidebar::Sidebar(Plater *parent) p->m_panel_filament_content = new wxScrolledWindow( p->scrolled, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); p->m_panel_filament_content->SetScrollbars(0, 100, 1, 2); p->m_panel_filament_content->SetScrollRate(0, 5); - //p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); // ORCA + //p->m_panel_filament_content->SetMaxSize(wxSize{-1, FromDIP(174)}); p->m_panel_filament_content->SetBackgroundColour(wxColour(255, 255, 255)); //wxBoxSizer* bSizer_filament_content; @@ -2126,17 +2125,14 @@ Sidebar::Sidebar(Plater *parent) /* first filament item */ init_filament_combo(&p->combos_filament[0], 0); - update_filaments_area_height(); // ORCA - //bSizer_filament_content->Add(p->sizer_filaments, 1, wxALIGN_CENTER | wxALL); wxSizer *sizer_filaments2 = new wxBoxSizer(wxVERTICAL); sizer_filaments2->Add(p->sizer_filaments, 0, wxEXPAND, 0); p->m_panel_filament_content->SetSizer(sizer_filaments2); p->m_panel_filament_content->Layout(); - auto min_size = sizer_filaments2->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize(min_size); + + update_filaments_area_height(); // ORCA + scrolled_sizer->Add(p->m_panel_filament_content, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(SidebarProps::ContentMarginV())); // ORCA use vertical margin on parent otherwise it shows scrollbar even on 1 filament } @@ -2774,14 +2770,21 @@ void Sidebar::change_top_border_for_mode_sizer(bool increase_border) #endif } -// ORCA use a height with user preference void Sidebar::update_filaments_area_height() +// ORCA { - int filament_count_user = std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count")); - // Height and Border is static in here because GetSize() from item / sizer not returning of correct values while using wxEXPAND with 1(vertical) orientation - // FromDIP(2) + FromDIP(2) not equal to FromDIP(4) on 125% 175% scaling. this fixes scaling related issues - p->filament_area_height = std::ceil(filament_count_user * 0.5) * (FromDIP(30) + FromDIP(2) + FromDIP(2)); - p->m_panel_filament_content->SetMaxSize(wxSize{-1, p->filament_area_height}); + // ORCA use a height with user preference + auto left_sizer = p->sizer_filaments->GetItem((size_t) 0)->GetSizer(); + auto combo_sizer = left_sizer->GetItem((size_t) 0)->GetSizer(); + int preferred_rows = std::ceil(0.5 * std::stoi(wxGetApp().app_config->get("filaments_area_preferred_count"))); + auto height_with_borders = combo_sizer->GetSize().GetHeight(); // gets height from sizer instead static numbers + p->m_panel_filament_content->SetMaxSize(wxSize{-1, preferred_rows * height_with_borders}); + + // fixes wxScrolledWindow not shrinks its height to content size + auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); + if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) + min_size.y = p->m_panel_filament_content->GetMaxHeight(); + p->m_panel_filament_content->SetMinSize({-1, min_size.y}); } void Sidebar::msw_rescale() @@ -2831,8 +2834,6 @@ void Sidebar::msw_rescale() p->m_flushing_volume_btn->Rescale(); set_flushing_volume_warning(is_flush_config_modified()); // ORCA reapply appearance - update_filaments_area_height(); - //BBS p->left_extruder->Rescale(); p->right_extruder->Rescale(); @@ -2856,6 +2857,9 @@ void Sidebar::msw_rescale() for (PlaterPresetComboBox* combo : p->combos_filament) combo->msw_rescale(); + p->m_panel_filament_content->Layout(); + update_filaments_area_height(); // ORCA resize after combos scaled + // BBS //p->frequently_changed_parameters->msw_rescale(); //obj_list()->msw_rescale(); @@ -3034,10 +3038,7 @@ void Sidebar::on_filament_count_change(size_t num_filaments) } } - auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize(min_size); + update_filaments_area_height(); // ORCA Layout(); p->m_panel_filament_title->Refresh(); @@ -3097,10 +3098,7 @@ void Sidebar::on_filaments_delete(size_t filament_id) p->combos_filament[idx]->update(); } - auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize(min_size); + update_filaments_area_height(); // ORCA Layout(); p->m_panel_filament_title->Refresh(); @@ -3535,10 +3533,7 @@ void Sidebar::sync_ams_list(bool is_from_big_sync_btn) c->update(); // Expand filament list update_filaments_area_height(); // ORCA - auto min_size = p->m_panel_filament_content->GetSizer()->GetMinSize(); - if (min_size.y > p->m_panel_filament_content->GetMaxHeight()) - min_size.y = p->m_panel_filament_content->GetMaxHeight(); - p->m_panel_filament_content->SetMinSize({-1, min_size.y}); + // BBS:Synchronized consumables information // auto calculation of flushing volumes for (int i = 0; i < p->combos_filament.size(); ++i) { diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index d668fcb099..94f8cf3ae2 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -592,6 +592,14 @@ wxBoxSizer *PreferencesDialog::create_item_spinctrl(wxString title, wxString tit e.Skip(); }); + input->Bind(wxEVT_SPINCTRL, [this, param, input, onchange](wxCommandEvent& e) { + auto value = input->GetValue(); + app_config->set(param, std::to_string(value)); + app_config->save(); + if (onchange != nullptr) onchange(value); + e.Skip(); + }); + input->Bind(wxEVT_KILL_FOCUS, [this, param, input, onchange](wxFocusEvent &e) { auto value = input->GetValue(); app_config->set(param, std::to_string(value)); @@ -1398,7 +1406,13 @@ void PreferencesDialog::create_items() "group_filament_presets", {_L("All"), _L("None"), _L("By type"), _L("By vendor")}, [](wxString value) {wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT);}); g_sizer->Add(item_filament_preset_grouping); - auto item_filament_area_height = create_item_spinctrl(_L("Optimize filaments area height for..."), _L("(Requires restart)"), _L("filaments"), _L("Optimizes filament area maximum height by chosen filament count."), "filaments_area_preferred_count", 8, 99); + // prevent burst calling on keyboard / spin events + m_filament_height_timer.Bind(wxEVT_TIMER, [this](wxTimerEvent&) { + wxGetApp().plater()->sidebar().update_filaments_area_height(); + UpdateSidebarLayout(); + }); + auto item_filament_area_height = create_item_spinctrl(_L("Optimize filaments area height for..."), "", _L("filaments"), _L("Optimizes filament area maximum height by chosen filament count."), + "filaments_area_preferred_count", 8, 99, [this](int value) {m_filament_height_timer.StartOnce(500);}); g_sizer->Add(item_filament_area_height); //// GENERAL > Features @@ -1950,4 +1964,22 @@ wxBoxSizer* PreferencesDialog::create_debug_page() return bSizer; } +void PreferencesDialog::UpdateSidebarLayout() +{ + Plater* plater = wxGetApp().plater(); + if (!plater) return; + + Sidebar& sidebar = plater->sidebar(); + + sidebar.Freeze(); + + sidebar.Layout(); + //plater->Layout(); + //wxGetApp().mainframe->Layout(); + + sidebar.Thaw(); + + plater->PostSizeEvent(); +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 886f5f7cec..c2209278fe 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -60,6 +60,7 @@ public: ~PreferencesDialog(); wxString m_backup_interval_time; + wxTimer m_filament_height_timer; void create(); @@ -106,6 +107,8 @@ public: void create_shortcuts_page(); wxBoxSizer* create_debug_page(); + void UpdateSidebarLayout(); + // BBS void create_select_domain_widget(); From 9034a7445462f95b32dca19f71314137c5a91857 Mon Sep 17 00:00:00 2001 From: HYzd766 <1550039450@qq.com> Date: Tue, 10 Mar 2026 16:22:52 +0800 Subject: [PATCH 09/35] Update Qidi X-Max 4 0.4 nozzle.json --- resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json index 75fe5d15d4..3b5ab099ca 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json @@ -35,7 +35,7 @@ "machine_max_acceleration_y": ["30000"], "machine_max_speed_x": ["800"], "machine_max_speed_y": ["800"], - "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X380 Y5 F20000\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG0 X195 Y1 F20000\nG0 Z10 F480\nSET_KINEMATIC_POSITION Z={10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing", + "machine_start_gcode": "INIT_MAPPING_VALUE\n;===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X195 Y195 Z10 F20000\nG92_ Z{10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG0 Y1\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing", "nozzle_diameter": ["0.4"], "nozzle_volume": ["150"], "printable_area": ["0x0","390x0","390x390","0x390"], From 2ebc0aa6c1f1d7d66ff4fe88a0fcd82611330c0b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 11 Mar 2026 13:32:29 +0800 Subject: [PATCH 10/35] Fix GIT_COMMIT_HASH not set in Flatpak builds (#12725) The env var check was gated inside the .git directory check, so Flatpak builds (which exclude .git from the sandbox) always fell back to "0000000". Lift the env var check to top level and inject the commit hash into the Flatpak manifest via build-options.env. --- .github/workflows/build_all.yml | 7 ++++++- CMakeLists.txt | 28 +++++++++++++++------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 1ee1cbd012..c39501680c 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -170,7 +170,7 @@ jobs: git_commit_hash="${{ github.event.pull_request.head.sha }}" else ver=V$ver_pure - git_commit_hash="" + git_commit_hash="${{ github.sha }}" fi echo "ver=$ver" >> $GITHUB_ENV echo "ver_pure=$ver_pure" >> $GITHUB_ENV @@ -197,6 +197,11 @@ jobs: sed -i '0,/^finish-args:/s//build-options:\n no-debuginfo: true\n strip: true\nfinish-args:/' \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash + - name: Inject git commit hash into Flatpak manifest + run: | + sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ + scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml + shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@master with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak diff --git a/CMakeLists.txt b/CMakeLists.txt index 9356c308ee..8f47f3a944 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,10 +89,9 @@ else () endif () find_package(Git) -if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - if(DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") - message(STATUS "Specified git commit hash: $ENV{git_commit_hash}") - +if(DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") + message(STATUS "Specified git commit hash: $ENV{git_commit_hash}") + if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") # Convert the given hash to short hash execute_process( COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" @@ -100,17 +99,20 @@ if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") OUTPUT_VARIABLE GIT_COMMIT_HASH OUTPUT_STRIP_TRAILING_WHITESPACE ) - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") else() - # Check current Git commit hash - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") + # No .git directory (e.g., Flatpak sandbox) — truncate directly + string(SUBSTRING "$ENV{git_commit_hash}" 0 7 GIT_COMMIT_HASH) endif() + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") +elseif(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") + # Check current Git commit hash + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE GIT_COMMIT_HASH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") endif() if(DEFINED ENV{SLIC3R_STATIC}) From 322b44d84a1928fc7f6545a1219264601d3b7712 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 11 Mar 2026 14:59:29 +0800 Subject: [PATCH 11/35] Feature/flatpak clang llvm21 (#12727) * Fix GIT_COMMIT_HASH not set in Flatpak builds The env var check was gated inside the .git directory check, so Flatpak builds (which exclude .git from the sandbox) always fell back to "0000000". Lift the env var check to top level and inject the commit hash into the Flatpak manifest via build-options.env. * Switch Flatpak build to Clang/LLD via LLVM 21 SDK extension - Add org.freedesktop.Sdk.Extension.llvm21 - Bump runtime to GNOME 49 (SDK 25.08) for llvm21 availability * fix build errors and improving build speed for flatpak * fxi more build errors * Update error messages for GNOME Platform and SDK versions --- .github/workflows/build_all.yml | 9 ++++-- CMakeLists.txt | 12 ++++---- build_flatpak.sh | 18 ++++++------ deps/CMakeLists.txt | 3 ++ deps/TBB/TBB.cmake | 2 +- .../io.github.orcaslicer.OrcaSlicer.yml | 29 +++++++++++++++++-- src/slic3r/CMakeLists.txt | 3 +- src/slic3r/GUI/MediaPlayCtrl.h | 8 ++--- 8 files changed, 57 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index c39501680c..371806277e 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -134,7 +134,7 @@ jobs: flatpak: name: "Flatpak" container: - image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-48 + image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-49 options: --privileged volumes: - /usr/local/lib/android:/usr/local/lib/android @@ -194,7 +194,12 @@ jobs: restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Disable debug info for faster CI builds run: | - sed -i '0,/^finish-args:/s//build-options:\n no-debuginfo: true\n strip: true\nfinish-args:/' \ + sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' \ + scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml + shell: bash + - name: Inject git commit hash into Flatpak manifest + run: | + sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash - name: Inject git commit hash into Flatpak manifest diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f47f3a944..5c5be1d49f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -173,10 +173,7 @@ option(BUILD_TESTS "Build unit tests" OFF) option(ORCA_TOOLS "Build Orca tools" OFF) if (FLATPAK) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++20") - set(SLIC3R_PCH OFF CACHE BOOL "" FORCE) set(SLIC3R_FHS ON CACHE BOOL "" FORCE) - set(BUILD_TESTS OFF CACHE BOOL "" FORCE) set(SLIC3R_DESKTOP_INTEGRATION OFF CACHE BOOL "" FORCE) endif () @@ -457,9 +454,12 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP add_compile_options(-Wno-unknown-pragmas) endif() - # Bit of a hack for flatpak building: compress the debug info with zstd to save space in CI - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 13.0) - add_compile_options(-gz=zstd) + # Compress the debug info with zstd to save space in Flatpak CI builds + if(FLATPAK) + if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 13.0) OR + ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15.0)) + add_compile_options(-gz=zstd) + endif() endif() if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 14) diff --git a/build_flatpak.sh b/build_flatpak.sh index f7d0b51ba2..225cf25e66 100755 --- a/build_flatpak.sh +++ b/build_flatpak.sh @@ -198,22 +198,22 @@ echo -e "${GREEN}All required dependencies found${NC}" # Install runtime and SDK if requested if [[ "$INSTALL_RUNTIME" == true ]]; then echo -e "${YELLOW}Installing GNOME runtime and SDK...${NC}" - flatpak install --user -y flathub org.gnome.Platform//48 - flatpak install --user -y flathub org.gnome.Sdk//48 + flatpak install --user -y flathub org.gnome.Platform//49 + flatpak install --user -y flathub org.gnome.Sdk//49 fi # Check if required runtime is available -if ! flatpak info --user org.gnome.Platform//48 &> /dev/null; then - echo -e "${RED}Error: GNOME Platform 48 runtime is not installed.${NC}" +if ! flatpak info --user org.gnome.Platform//49 &> /dev/null; then + echo -e "${RED}Error: GNOME Platform 49 runtime is not installed.${NC}" echo "Run with -i flag to install it automatically, or install manually:" - echo "flatpak install --user flathub org.gnome.Platform//48" + echo "flatpak install --user flathub org.gnome.Platform//49" exit 1 fi -if ! flatpak info --user org.gnome.Sdk//48 &> /dev/null; then - echo -e "${RED}Error: GNOME SDK 48 is not installed.${NC}" +if ! flatpak info --user org.gnome.Sdk//49 &> /dev/null; then + echo -e "${RED}Error: GNOME SDK 49 is not installed.${NC}" echo "Run with -i flag to install it automatically, or install manually:" - echo "flatpak install --user flathub org.gnome.Sdk//48" + echo "flatpak install --user flathub org.gnome.Sdk//49" exit 1 fi @@ -318,7 +318,7 @@ fi MANIFEST="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml" if [[ "$NO_DEBUGINFO" == true ]]; then MANIFEST="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.no-debug.yml" - sed '0,/^finish-args:/s//build-options:\n no-debuginfo: true\n strip: true\nfinish-args:/' \ + sed '/^build-options:/a\ no-debuginfo: true\n strip: true' \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml > "$MANIFEST" echo -e "${YELLOW}Debug info disabled (using temp manifest)${NC}" fi diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 492696a58a..1826c029d0 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -189,6 +189,9 @@ if (NOT IS_CROSS_COMPILE OR NOT APPLE) -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} -DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE} + -DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} + -DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS} + -DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS} -DBUILD_SHARED_LIBS:BOOL=OFF ${_cmake_osx_arch} "${_configs_line}" diff --git a/deps/TBB/TBB.cmake b/deps/TBB/TBB.cmake index 13d40c0573..9b1452d33e 100644 --- a/deps/TBB/TBB.cmake +++ b/deps/TBB/TBB.cmake @@ -1,4 +1,4 @@ -if (FLATPAK) +if (FLATPAK AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/GNU.cmake ./cmake/compilers/GNU.cmake) else() set(_patch_command "") diff --git a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml index 5bb44df25d..b161f99477 100644 --- a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -1,10 +1,19 @@ app-id: io.github.orcaslicer.OrcaSlicer runtime: org.gnome.Platform -runtime-version: "48" +runtime-version: "49" sdk: org.gnome.Sdk +sdk-extensions: + - org.freedesktop.Sdk.Extension.llvm21 command: entrypoint separate-locales: true rename-icon: OrcaSlicer +build-options: + append-path: /usr/lib/sdk/llvm21/bin + prepend-ld-library-path: /usr/lib/sdk/llvm21/lib + env: + CC: clang + CXX: clang++ + LDFLAGS: "-fuse-ld=lld" finish-args: - --share=ipc - --socket=x11 @@ -38,6 +47,8 @@ modules: sha256: e305b9f07f52743ca481da0a4e0c76c35efd60adaf1b0694eb3bb021e2137e39 - name: glu + build-options: + cxxflags: -Wno-register config-opts: - --disable-static sources: @@ -70,6 +81,9 @@ modules: # Config-opts mirror deps/wxWidgets/wxWidgets.cmake with FLATPAK=ON, DEP_WX_GTK3=ON - name: wxWidgets buildsystem: cmake-ninja + build-options: + env: + CMAKE_POLICY_VERSION_MINIMUM: "3.5" config-opts: - -DCMAKE_BUILD_TYPE=Release - -DwxBUILD_PRECOMP=ON @@ -99,6 +113,9 @@ modules: - -DwxUSE_LIBJPEG=sys - -DwxUSE_LIBTIFF=OFF - -DwxUSE_EXPAT=sys + - -DCMAKE_EXE_LINKER_FLAGS=-fuse-ld=lld + - -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld + - -DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld sources: - type: git url: https://github.com/SoftFever/Orca-deps-wxWidgets @@ -118,7 +135,10 @@ modules: -DDEP_DOWNLOAD_DIR=/run/build/orca_deps/external-packages \ -DCMAKE_PREFIX_PATH=/app \ -DDESTDIR=/app \ - -DCMAKE_INSTALL_PREFIX=/app + -DCMAKE_INSTALL_PREFIX=/app \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_MODULE_LINKER_FLAGS="-fuse-ld=lld" - cmake --build $BUILD_DIR --parallel - rm -rf /run/build/orca_deps/external-packages @@ -290,7 +310,10 @@ modules: -DFLATPAK=ON \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=/app \ - -DCMAKE_INSTALL_PREFIX=/app + -DCMAKE_INSTALL_PREFIX=/app \ + -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" \ + -DCMAKE_MODULE_LINKER_FLAGS="-fuse-ld=lld" - cmake --build build_flatpak --target OrcaSlicer -j$FLATPAK_BUILDER_N_JOBS - ./scripts/run_gettext.sh - cmake --build build_flatpak --target install -j$FLATPAK_BUILDER_N_JOBS diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 7ec3215940..4c3bf26737 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -791,9 +791,8 @@ if (UNIX AND NOT APPLE) # I don't know why this is needed, but for whatever reason slic3r isn't # linking to X11 and webkit2gtk. force it. find_package(X11 REQUIRED) - find_package(PkgConfig REQUIRED) pkg_check_modules(webkit2gtk REQUIRED webkit2gtk-4.1) - target_link_libraries (libslic3r_gui ${X11_LIBRARIES} ${webkit2gtk_LIBRARIES}) + target_link_libraries(libslic3r_gui ${X11_LIBRARIES} ${webkit2gtk_LIBRARIES}) endif() target_include_directories(libslic3r_gui SYSTEM PRIVATE ${GTK${SLIC3R_GTK}_INCLUDE_DIRS} ${LIBSECRET_INCLUDE_DIRS}) target_link_libraries(libslic3r_gui ${GTK${SLIC3R_GTK}_LIBRARIES} fontconfig ${LIBSECRET_LIBRARIES}) diff --git a/src/slic3r/GUI/MediaPlayCtrl.h b/src/slic3r/GUI/MediaPlayCtrl.h index bb4e8e448f..f5e5dcddfc 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -67,10 +67,10 @@ private: static bool get_stream_url(std::string *url = nullptr); private: - static const wxMediaState MEDIASTATE_IDLE = (wxMediaState) 3; - static const wxMediaState MEDIASTATE_INITIALIZING = (wxMediaState) 4; - static const wxMediaState MEDIASTATE_LOADING = (wxMediaState) 5; - static const wxMediaState MEDIASTATE_BUFFERING = (wxMediaState) 6; + static inline const wxMediaState MEDIASTATE_IDLE = static_cast(3); + static inline const wxMediaState MEDIASTATE_INITIALIZING = static_cast(4); + static inline const wxMediaState MEDIASTATE_LOADING = static_cast(5); + static inline const wxMediaState MEDIASTATE_BUFFERING = static_cast(6); // token std::shared_ptr m_token = std::make_shared(0); From 909aea3150cf695e34ec73ccfae02ff1e6cffbcf Mon Sep 17 00:00:00 2001 From: HYzd766 <108379794+HYzd766@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:17:41 +0800 Subject: [PATCH 12/35] Update Qidi X-Max 4 0.4 nozzle.json (#12716) Update Qidi X-Max 4 0.4 nozzle.json --- resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json index 75fe5d15d4..3b5ab099ca 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 4 0.4 nozzle.json @@ -35,7 +35,7 @@ "machine_max_acceleration_y": ["30000"], "machine_max_speed_x": ["800"], "machine_max_speed_y": ["800"], - "machine_start_gcode": ";===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X380 Y5 F20000\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG0 X195 Y1 F20000\nG0 Z10 F480\nSET_KINEMATIC_POSITION Z={10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing", + "machine_start_gcode": "INIT_MAPPING_VALUE\n;===== PRINT_PHASE_INIT =====\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nSET_PRINT_MAIN_STATUS MAIN_STATUS=print_start\nM220 S100\nM221 S100\nSET_INPUT_SHAPER SHAPER_TYPE_X=mzv\nSET_INPUT_SHAPER SHAPER_TYPE_Y=mzv\nDISABLE_ALL_SENSOR\nM1002 R1\nM107\nCLEAR_PAUSE\nM140 S[bed_temperature_initial_layer_single]\nM141 S[chamber_temperature]\nG29.0\nG28\n\n;===== BOX_PREPAR =====\nBOX_PRINT_START EXTRUDER=[initial_no_support_extruder] HOTENDTEMP={nozzle_temperature_range_high[initial_tool]}\nM400\nEXTRUSION_AND_FLUSH HOTEND=[nozzle_temperature_initial_layer]\n\n;===== CLEAR_NOZZLE =====\nG1 Z20 F480\nMOVE_TO_TRASH\nG1 Y403.5 F2000\n{if chamber_temperature[0] == 0}\nM106 P3 S[during_print_exhaust_fan_speed]\n{else}\nM106 P3 S0\n{endif}\nM1004\nM106 S0\nM109 S[nozzle_temperature_initial_layer]\nG92 E0\nM83\nG1 E5 F80\nG1 E250 F300\nM400\nM106 S255\nG1 E-3 F1000\nM104 S140\nM109.1 S{nozzle_temperature_initial_layer[0]-30}\nM204 S10000\nG1 Y403 F2000\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 Y395 F6000\nG1 X188\nG1 Z-0.2 F480\nM106 S255\nM109.1 S150\nG91\nG1 X15 F200\nG1 Y2\nG1 X-15\nG1 Y-2\nG1 X15\nG90\nG2 I0.5 J0.5 F480\nG2 I0.5 J0.5\nG2 I0.5 J0.5\nG1 Z10\nG1 Y383 F12000\nG1 X116\nG1 Y403\nG1 X163 F8000\nG1 X145 F5000\nG1 X163 F8000\nG1 X145 F5000\nG1 X175 F6000\nG1 X163\nG1 X175\nG1 X163\nG1 X175\nG1 X163\nG1 X180 F10000\nG1 X195 Y195\nM106 S0\nM190 S[bed_temperature_initial_layer_single]\nM191 S[chamber_temperature]\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1500\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1500\nG4 P400\nG1 Y0 F15000\nG1 X15\nG1 X3 F5000\nG4 P1000\nG1 X4 F1000\nG1 X3 F5000\nG4 P1000\nG1 E-4 F1800\nG1 X15 F3000\n\nM400\nSET_OPERATING_CURRENT STEPPER=x VALUE=1200\nG4 P400\nSET_OPERATING_CURRENT STEPPER=y VALUE=1200\nG4 P2000\nG1 X20 Y20 F15000\nZ_TILT_ADJUST\nG29\nM1002 A1\nG1 X195 Y195 Z10 F20000\nG92_ Z{10 - ((nozzle_temperature_initial_layer[initial_tool] - 130) / 14 - 5.0) / 100}\nG0 Y1\nM109 S[nozzle_temperature_initial_layer]\nENABLE_ALL_SENSOR\n\n;===== PRINT_START =====\n; LAYER_HEIGHT: 0.2\nT[initial_tool]\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG4 P3000\nprobe samples=1\nG91\nG0 Z0.6 F480\nG90\nG1 X175 Y1 F20000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 X215 E20 F{filament_max_volumetric_speed[initial_no_support_extruder]/2/2.4053*60}\nG1 Z1 F480\nSET_PRINT_MAIN_STATUS MAIN_STATUS=printing", "nozzle_diameter": ["0.4"], "nozzle_volume": ["150"], "printable_area": ["0x0","390x0","390x390","0x390"], From 25740788e73528f3fa99062392c26c13e797ecc7 Mon Sep 17 00:00:00 2001 From: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> Date: Wed, 11 Mar 2026 11:00:01 -0300 Subject: [PATCH 13/35] fix flatpak build (#12738) remove duplicated code --- .github/workflows/build_all.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 371806277e..41fe9d2302 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -202,11 +202,6 @@ jobs: sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml shell: bash - - name: Inject git commit hash into Flatpak manifest - run: | - sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ - scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml - shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@master with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak @@ -229,3 +224,4 @@ jobs: asset_name: OrcaSlicer-Linux-flatpak_nightly_${{ matrix.variant.arch }}.flatpak asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted + From e6dfd2d8cbe4d9b33c145e44f984a179390b1bc4 Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy <95944177+thelegendtubaguy@users.noreply.github.com> Date: Wed, 11 Mar 2026 10:57:40 -0500 Subject: [PATCH 14/35] Update CC2 Profiles from elegoo slicer (#12215) --- resources/profiles/Elegoo.json | 114 +++++++++++++++++- .../Elegoo/Elegoo Centauri Carbon 2_cover.png | Bin 16645 -> 16417 bytes .../filament/BASE/Elegoo ABS @base.json | 23 ++++ .../filament/BASE/Elegoo PAHT @base.json | 23 ++++ .../Elegoo/filament/BASE/Elegoo PC @base.json | 23 ++++ .../filament/BASE/Elegoo PETG @base.json | 83 +++++++++++++ .../filament/BASE/Elegoo TPU @base.json | 26 ++++ .../filament/ECC2/Elegoo ABS @ECC2.json | 29 +++++ .../filament/ECC2/Elegoo PAHT-CF @ECC2.json | 70 +++++++++++ .../Elegoo/filament/ECC2/Elegoo PC @ECC2.json | 55 +++++++++ .../filament/ECC2/Elegoo PC-FR @ECC2.json | 41 +++++++ .../filament/ECC2/Elegoo PETG @ECC2.json | 28 +++++ .../filament/ECC2/Elegoo PETG PRO @ECC2.json | 2 +- .../ECC2/Elegoo PETG Translucent @ECC2.json | 28 +++++ .../filament/ECC2/Elegoo PETG-CF @ECC2.json | 43 +++++++ .../filament/ECC2/Elegoo PETG-GF @ECC2.json | 43 +++++++ .../filament/ECC2/Elegoo PLA @ECC2.json | 31 +++++ .../filament/ECC2/Elegoo PLA Basic @ECC2.json | 34 ++++++ .../ECC2/Elegoo PLA Galaxy @ECC2.json | 37 ++++++ .../ECC2/Elegoo PLA Marble @ECC2.json | 37 ++++++ .../filament/ECC2/Elegoo PLA Matte @ECC2.json | 2 +- .../filament/ECC2/Elegoo PLA Silk @ECC2.json | 2 +- .../ECC2/Elegoo PLA Sparkle @ECC2.json | 37 ++++++ .../filament/ECC2/Elegoo PLA Wood @ECC2.json | 37 ++++++ .../filament/ECC2/Elegoo PLA-CF @ECC2.json | 2 +- .../ECC2/Elegoo RAPID PETG @ECC2.json | 2 +- .../ECC2/Elegoo RAPID TPU 95A @ECC2.json | 28 +++++ .../filament/ECC2/Elegoo TPU 95A @ECC2.json | 2 +- .../ELEGOO/Elegoo ABS @0.2 nozzle.json | 35 ++++++ .../ELEGOO/Elegoo PC @0.2 nozzle.json | 62 ++++++++++ .../ELEGOO/Elegoo PC-FR @0.2 nozzle.json | 47 ++++++++ .../ELEGOO/Elegoo PETG @0.2 nozzle.json | 35 ++++++ .../Elegoo PETG Translucent @0.2 nozzle.json | 35 ++++++ .../ELEGOO/Elegoo PLA Basic @0.2 nozzle.json | 41 +++++++ .../Elegoo/filament/fdm_filament_paht.json | 91 ++++++++++++++ .../Elegoo Centauri Carbon 2 0.4 nozzle.json | 12 +- .../ECC2/Elegoo Centauri Carbon 2.json | 2 +- ...0.08mm Optimal @Elegoo CC2 0.2 nozzle.json | 9 +- ....10mm Standard @Elegoo CC2 0.2 nozzle.json | 5 +- .../0.12mm Draft @Elegoo CC2 0.2 nozzle.json | 7 +- .../0.12mm Fine @Elegoo CC2 0.4 nozzle.json | 7 +- ...mm Extra Draft @Elegoo CC2 0.2 nozzle.json | 7 +- ...6mm Extra Fine @Elegoo CC2 0.8 nozzle.json | 7 +- ...0.16mm Optimal @Elegoo CC2 0.4 nozzle.json | 7 +- .../0.18mm Fine @Elegoo CC2 0.6 nozzle.json | 7 +- ....20mm Standard @Elegoo CC2 0.4 nozzle.json | 8 +- ....20mm Strength @Elegoo CC2 0.4 nozzle.json | 7 +- .../0.24mm Draft @Elegoo CC2 0.4 nozzle.json | 7 +- .../0.24mm Fine @Elegoo CC2 0.8 nozzle.json | 7 +- ...0.24mm Optimal @Elegoo CC2 0.6 nozzle.json | 7 +- ...mm Extra Draft @Elegoo CC2 0.4 nozzle.json | 7 +- ....30mm Standard @Elegoo CC2 0.6 nozzle.json | 7 +- ....30mm Strength @Elegoo CC2 0.6 nozzle.json | 7 +- ...0.32mm Optimal @Elegoo CC2 0.8 nozzle.json | 7 +- .../0.36mm Draft @Elegoo CC2 0.6 nozzle.json | 7 +- ....40mm Standard @Elegoo CC2 0.8 nozzle.json | 7 +- ...mm Extra Draft @Elegoo CC2 0.6 nozzle.json | 7 +- .../0.48mm Draft @Elegoo CC2 0.8 nozzle.json | 7 +- .../process/fdm_process_elegoo_02010.json | 30 +++++ src/slic3r/GUI/CreatePresetsDialog.cpp | 2 +- 60 files changed, 1326 insertions(+), 96 deletions(-) create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json create mode 100644 resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo ABS @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PC @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PETG @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PLA @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID TPU 95A @ECC2.json create mode 100644 resources/profiles/Elegoo/filament/ELEGOO/Elegoo ABS @0.2 nozzle.json create mode 100644 resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC @0.2 nozzle.json create mode 100644 resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC-FR @0.2 nozzle.json create mode 100644 resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG @0.2 nozzle.json create mode 100644 resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG Translucent @0.2 nozzle.json create mode 100644 resources/profiles/Elegoo/filament/ELEGOO/Elegoo PLA Basic @0.2 nozzle.json create mode 100644 resources/profiles/Elegoo/filament/fdm_filament_paht.json create mode 100644 resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index 82333fd336..499d135100 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -86,6 +86,10 @@ "name": "fdm_process_elegoo_common", "sub_path": "process/fdm_process_elegoo_common.json" }, + { + "name": "fdm_process_elegoo_02010", + "sub_path": "process/fdm_process_elegoo_02010.json" + }, { "name": "fdm_process_ecc", "sub_path": "process/ECC/fdm_process_ecc.json" @@ -1104,6 +1108,10 @@ "name": "fdm_filament_pla", "sub_path": "filament/fdm_filament_pla.json" }, + { + "name": "fdm_filament_paht", + "sub_path": "filament/fdm_filament_paht.json" + }, { "name": "Elegoo ASA @base", "sub_path": "filament/BASE/Elegoo ASA @base.json" @@ -1136,6 +1144,26 @@ "name": "Elegoo RAPID PLA+ @base", "sub_path": "filament/BASE/Elegoo RAPID PLA+ @base.json" }, + { + "name": "Elegoo TPU @base", + "sub_path": "filament/BASE/Elegoo TPU @base.json" + }, + { + "name": "Elegoo PETG @base", + "sub_path": "filament/BASE/Elegoo PETG @base.json" + }, + { + "name": "Elegoo ABS @base", + "sub_path": "filament/BASE/Elegoo ABS @base.json" + }, + { + "name": "Elegoo PAHT @base", + "sub_path": "filament/BASE/Elegoo PAHT @base.json" + }, + { + "name": "Elegoo PC @base", + "sub_path": "filament/BASE/Elegoo PC @base.json" + }, { "name": "Elegoo TPU 95A @base", "sub_path": "filament/BASE/Elegoo TPU 95A @base.json" @@ -1172,6 +1200,10 @@ "name": "Elegoo ASA @0.2 nozzle", "sub_path": "filament/ELEGOO/Elegoo ASA @0.2 nozzle.json" }, + { + "name": "Elegoo PETG @0.2 nozzle", + "sub_path": "filament/ELEGOO/Elegoo PETG @0.2 nozzle.json" + }, { "name": "Elegoo ASA @EC", "sub_path": "filament/EC/Elegoo ASA @EC.json" @@ -1212,6 +1244,26 @@ "name": "Elegoo RAPID PETG @0.2 nozzle", "sub_path": "filament/ELEGOO/Elegoo RAPID PETG @0.2 nozzle.json" }, + { + "name": "Elegoo ABS @0.2 nozzle", + "sub_path": "filament/ELEGOO/Elegoo ABS @0.2 nozzle.json" + }, + { + "name": "Elegoo PC @0.2 nozzle", + "sub_path": "filament/ELEGOO/Elegoo PC @0.2 nozzle.json" + }, + { + "name": "Elegoo PC-FR @0.2 nozzle", + "sub_path": "filament/ELEGOO/Elegoo PC-FR @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Basic @0.2 nozzle", + "sub_path": "filament/ELEGOO/Elegoo PLA Basic @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG Translucent @0.2 nozzle", + "sub_path": "filament/ELEGOO/Elegoo PETG Translucent @0.2 nozzle.json" + }, { "name": "Elegoo RAPID PETG @EC", "sub_path": "filament/EC/Elegoo RAPID PETG @EC.json" @@ -1368,6 +1420,66 @@ "name": "Elegoo TPU 95A @ECC2", "sub_path": "filament/ECC2/Elegoo TPU 95A @ECC2.json" }, + { + "name": "Elegoo PLA @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA @ECC2.json" + }, + { + "name": "Elegoo PETG @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG @ECC2.json" + }, + { + "name": "Elegoo ABS @ECC2", + "sub_path": "filament/ECC2/Elegoo ABS @ECC2.json" + }, + { + "name": "Elegoo PLA Galaxy @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Galaxy @ECC2.json" + }, + { + "name": "Elegoo PLA Basic @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Basic @ECC2.json" + }, + { + "name": "Elegoo PLA Marble @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Marble @ECC2.json" + }, + { + "name": "Elegoo PLA Sparkle @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Sparkle @ECC2.json" + }, + { + "name": "Elegoo PLA Wood @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Wood @ECC2.json" + }, + { + "name": "Elegoo PAHT-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PAHT-CF @ECC2.json" + }, + { + "name": "Elegoo PC @ECC2", + "sub_path": "filament/ECC2/Elegoo PC @ECC2.json" + }, + { + "name": "Elegoo PC-FR @ECC2", + "sub_path": "filament/ECC2/Elegoo PC-FR @ECC2.json" + }, + { + "name": "Elegoo PETG-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG-CF @ECC2.json" + }, + { + "name": "Elegoo PETG-GF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG-GF @ECC2.json" + }, + { + "name": "Elegoo PETG Translucent @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG Translucent @ECC2.json" + }, + { + "name": "Elegoo RAPID TPU 95A @ECC2", + "sub_path": "filament/ECC2/Elegoo RAPID TPU 95A @ECC2.json" + }, { "name": "Elegoo ASA @Elegoo Giga", "sub_path": "filament/EOSGIGA/Elegoo ASA @Elegoo Giga.json" @@ -1575,4 +1687,4 @@ "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.8 nozzle.json" } ] -} \ No newline at end of file +} diff --git a/resources/profiles/Elegoo/Elegoo Centauri Carbon 2_cover.png b/resources/profiles/Elegoo/Elegoo Centauri Carbon 2_cover.png index b2ada1959e04921348f166d6a552d7f1d4e27af3..14b59b4dd71020303741fbbaeb8537a39d40fa22 100644 GIT binary patch literal 16417 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 W9d6s5zj^*-KT1(Up;*p1;Qs+L%VO04 literal 16645 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[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PC @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC @ECC2.json new file mode 100644 index 0000000000..d63501734c --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC @ECC2.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Elegoo PC @ECC2", + "inherits": "Elegoo PC @base", + "from": "system", + "setting_id": "EPCECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_threshold": [ + "25%" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "35" + ], + "fan_min_speed": [ + "10" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json new file mode 100644 index 0000000000..f9f54af7b8 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Elegoo PC-FR @ECC2", + "inherits": "Elegoo PC @base", + "from": "system", + "setting_id": "EPCFRECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "filament_density": [ + "1.1" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} + \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG @ECC2.json new file mode 100644 index 0000000000..6ea7969c81 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG @ECC2.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Elegoo PETG @ECC2", + "inherits": "Elegoo PETG @base", + "from": "system", + "setting_id": "EPETGECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "overhang_fan_threshold": [ + "50%" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json index 98083c47b8..389ba80a03 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @ECC2", - "inherits": "Elegoo PETG PRO @base", + "inherits": "Elegoo PETG @base", "from": "system", "setting_id": "EPETGPROECC2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json new file mode 100644 index 0000000000..4717fc7211 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Elegoo PETG Translucent @ECC2", + "inherits": "Elegoo PETG @base", + "from": "system", + "setting_id": "EPETGTRANSECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "fan_max_speed": [ + "35" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json new file mode 100644 index 0000000000..283bd11462 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Elegoo PETG-CF @ECC2", + "inherits": "Elegoo PETG @base", + "from": "system", + "setting_id": "EPETGCFECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "filament_density": [ + "1.26" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "5" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "6" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json new file mode 100644 index 0000000000..1b63259609 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Elegoo PETG-GF @ECC2", + "inherits": "Elegoo PETG @base", + "from": "system", + "setting_id": "EPETGFECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "filament_density": [ + "1.26" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "5" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "6" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA @ECC2.json new file mode 100644 index 0000000000..ca4bf7585b --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA @ECC2.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Elegoo PLA @ECC2", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLAECC2", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "21" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json new file mode 100644 index 0000000000..a31556cf27 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Elegoo PLA Basic @ECC2", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLABASICECC2", + "instantiation": "true", + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json new file mode 100644 index 0000000000..a6e036b651 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Elegoo PLA Galaxy @ECC2", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLAGALAXYECC2", + "instantiation": "true", + "fan_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json new file mode 100644 index 0000000000..8e6ed8e457 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Elegoo PLA Marble @ECC2", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLAMARBLEECC2", + "instantiation": "true", + "fan_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json index d8009c1022..75bbf751a4 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @ECC2", - "inherits": "Elegoo PLA Matte @base", + "inherits": "Elegoo PLA @base", "from": "system", "setting_id": "EPLAMECC2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json index cabe0be9b4..5b7e4a2f83 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @ECC2", - "inherits": "Elegoo PLA Silk @base", + "inherits": "Elegoo PLA @base", "from": "system", "setting_id": "EPLASECC2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json new file mode 100644 index 0000000000..f333b37648 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Elegoo PLA Sparkle @ECC2", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLASPARKLEECC2", + "instantiation": "true", + "fan_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json new file mode 100644 index 0000000000..ba217d5988 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Elegoo PLA Wood @ECC2", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLAWOODECC2", + "instantiation": "true", + "fan_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json index bcd4e51e51..d3462bf0e1 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @ECC2", - "inherits": "Elegoo PLA-CF @base", + "inherits": "Elegoo PLA @base", "from": "system", "setting_id": "EPLACFECC2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID PETG @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID PETG @ECC2.json index 8f22cf1d8f..bbb11d0bb4 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID PETG @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID PETG @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo RAPID PETG @ECC2", - "inherits": "Elegoo RAPID PETG @base", + "inherits": "Elegoo PETG @base", "from": "system", "setting_id": "ERPETGECC2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID TPU 95A @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID TPU 95A @ECC2.json new file mode 100644 index 0000000000..a4625b32f7 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo RAPID TPU 95A @ECC2.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Elegoo RAPID TPU 95A @ECC2", + "inherits": "Elegoo TPU @base", + "from": "system", + "setting_id": "ERTPU95AECC2", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Elegoo Centauri Carbon 2 0.4 nozzle", + "Elegoo Centauri Carbon 2 0.6 nozzle", + "Elegoo Centauri Carbon 2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json index 0674aea0f5..91763946a8 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @ECC2", - "inherits": "Elegoo TPU 95A @base", + "inherits": "Elegoo TPU @base", "from": "system", "setting_id": "ETPU95AECC2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO/Elegoo ABS @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo ABS @0.2 nozzle.json new file mode 100644 index 0000000000..5a206e7814 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo ABS @0.2 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Elegoo ABS @0.2 nozzle", + "inherits": "Elegoo ABS @base", + "from": "system", + "setting_id": "EABS00020", + "instantiation": "true", + "fan_max_speed": [ + "40" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "pressure_advance": [ + "0.024" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "compatible_printers": [ + "Elegoo Centauri 0.2 nozzle", + "Elegoo Centauri Carbon 0.2 nozzle", + "Elegoo Centauri Carbon 2 0.2 nozzle", + "Elegoo Neptune 4 0.2 nozzle", + "Elegoo Neptune 4 Pro 0.2 nozzle", + "Elegoo Neptune 4 Plus 0.2 nozzle", + "Elegoo Neptune 4 Max 0.2 nozzle", + "Elegoo Neptune 3 Pro 0.2 nozzle", + "Elegoo Neptune 3 Plus 0.2 nozzle", + "Elegoo Neptune 3 Max 0.2 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC @0.2 nozzle.json new file mode 100644 index 0000000000..5f474c7ff8 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC @0.2 nozzle.json @@ -0,0 +1,62 @@ +{ + "type": "filament", + "name": "Elegoo PC @0.2 nozzle", + "inherits": "Elegoo PC @base", + "from": "system", + "setting_id": "EPC00020", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_threshold": [ + "25%" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "35" + ], + "fan_min_speed": [ + "10" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri 0.2 nozzle", + "Elegoo Centauri Carbon 0.2 nozzle", + "Elegoo Centauri Carbon 2 0.2 nozzle", + "Elegoo Neptune 4 0.2 nozzle", + "Elegoo Neptune 4 Pro 0.2 nozzle", + "Elegoo Neptune 4 Plus 0.2 nozzle", + "Elegoo Neptune 4 Max 0.2 nozzle", + "Elegoo Neptune 3 Pro 0.2 nozzle", + "Elegoo Neptune 3 Plus 0.2 nozzle", + "Elegoo Neptune 3 Max 0.2 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC-FR @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC-FR @0.2 nozzle.json new file mode 100644 index 0000000000..7e133ac949 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PC-FR @0.2 nozzle.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Elegoo PC-FR @0.2 nozzle", + "inherits": "Elegoo PC @base", + "from": "system", + "setting_id": "EPCFR00020", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "filament_density": [ + "1.1" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Elegoo Centauri 0.2 nozzle", + "Elegoo Centauri Carbon 0.2 nozzle", + "Elegoo Centauri Carbon 2 0.2 nozzle", + "Elegoo Neptune 4 0.2 nozzle", + "Elegoo Neptune 4 Pro 0.2 nozzle", + "Elegoo Neptune 4 Plus 0.2 nozzle", + "Elegoo Neptune 4 Max 0.2 nozzle", + "Elegoo Neptune 3 Pro 0.2 nozzle", + "Elegoo Neptune 3 Plus 0.2 nozzle", + "Elegoo Neptune 3 Max 0.2 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG @0.2 nozzle.json new file mode 100644 index 0000000000..cb911814f0 --- /dev/null +++ b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG @0.2 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Elegoo PETG @0.2 nozzle", + "inherits": "Elegoo PETG @base", + "from": "system", + "setting_id": "EPETG00020", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "overhang_fan_threshold": [ + "50%" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "compatible_printers": [ + "Elegoo Centauri 0.2 nozzle", + "Elegoo Centauri Carbon 0.2 nozzle", + "Elegoo Centauri Carbon 2 0.2 nozzle", + "Elegoo Neptune 4 0.2 nozzle", + "Elegoo Neptune 4 Pro 0.2 nozzle", + "Elegoo Neptune 4 Plus 0.2 nozzle", + "Elegoo Neptune 4 Max 0.2 nozzle", + "Elegoo Neptune 3 Pro 0.2 nozzle", + "Elegoo Neptune 3 Plus 0.2 nozzle", + "Elegoo Neptune 3 Max 0.2 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG Translucent @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG Translucent @0.2 nozzle.json new file mode 100644 index 0000000000..faa1a7c75f --- /dev/null +++ b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PETG Translucent @0.2 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Elegoo PETG Translucent @0.2 nozzle", + "inherits": "Elegoo PETG @base", + "from": "system", + "setting_id": "EPETGTRAN00020", + "instantiation": "true", + "pressure_advance": [ + "0.024" + ], + "fan_max_speed": [ + "35" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "compatible_printers": [ + "Elegoo Centauri 0.2 nozzle", + "Elegoo Centauri Carbon 0.2 nozzle", + "Elegoo Centauri Carbon 2 0.2 nozzle", + "Elegoo Neptune 4 0.2 nozzle", + "Elegoo Neptune 4 Pro 0.2 nozzle", + "Elegoo Neptune 4 Plus 0.2 nozzle", + "Elegoo Neptune 4 Max 0.2 nozzle", + "Elegoo Neptune 3 Pro 0.2 nozzle", + "Elegoo Neptune 3 Plus 0.2 nozzle", + "Elegoo Neptune 3 Max 0.2 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PLA Basic @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PLA Basic @0.2 nozzle.json new file mode 100644 index 0000000000..e7ffca9b3a --- /dev/null +++ b/resources/profiles/Elegoo/filament/ELEGOO/Elegoo PLA Basic @0.2 nozzle.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Elegoo PLA Basic @0.2 nozzle", + "inherits": "Elegoo PLA @base", + "from": "system", + "setting_id": "EPLABASIC00020", + "instantiation": "true", + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "pressure_advance": [ + "0.024" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Elegoo Centauri 0.2 nozzle", + "Elegoo Centauri Carbon 0.2 nozzle", + "Elegoo Centauri Carbon 2 0.2 nozzle", + "Elegoo Neptune 4 0.2 nozzle", + "Elegoo Neptune 4 Pro 0.2 nozzle", + "Elegoo Neptune 4 Plus 0.2 nozzle", + "Elegoo Neptune 4 Max 0.2 nozzle", + "Elegoo Neptune 3 Pro 0.2 nozzle", + "Elegoo Neptune 3 Plus 0.2 nozzle", + "Elegoo Neptune 3 Max 0.2 nozzle" + ] +} diff --git a/resources/profiles/Elegoo/filament/fdm_filament_paht.json b/resources/profiles/Elegoo/filament/fdm_filament_paht.json new file mode 100644 index 0000000000..032a66ed88 --- /dev/null +++ b/resources/profiles/Elegoo/filament/fdm_filament_paht.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "fdm_filament_paht", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PAHT" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "0" + ], + "cool_plate_temp": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "45" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "slow_down_min_speed": [ + "20" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_vendor": [ + "Generic" + ] +} diff --git a/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json b/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json index a3ec2560ab..882765f590 100644 --- a/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json @@ -1,7 +1,7 @@ { "type": "machine", "name": "Elegoo Centauri Carbon 2 0.4 nozzle", - "inherits": "fdm_machine_ecc", + "inherits": "fdm_elegoo_3dp_001_common", "from": "system", "setting_id": "ECC204", "instantiation": "true", @@ -48,7 +48,6 @@ "extruder_offset": [ "0x1.5" ], - "default_bed_type": "4", "fan_speedup_time": "0.5", "machine_load_filament_time": "29", "machine_unload_filament_time": "28", @@ -61,6 +60,7 @@ "gcode_flavor": "klipper", "machine_pause_gcode": "M600", "support_multi_filament": "1", + "support_wan_network": "1", "bed_mesh_max": "243,245", "bed_mesh_min": "10,10", "bed_mesh_probe_distance": "22,22", @@ -73,11 +73,11 @@ "20", "9" ], - "change_filament_gcode": "\n;==========CC2==========\n;===== date: 2025-10-16-001 =====================\nM106 S0\nM106 P2 S0\nG1 Z{min(max_layer_z+3, printable_height+0.5)} F1200\nT[next_extruder]\nM6211 T[next_extruder] L[flush_length] M{old_filament_e_feedrate} N{new_filament_e_feedrate} Q[old_filament_temp] R[nozzle_temperature_range_high] S[new_filament_temp]\n", + "change_filament_gcode": "\n;==========CC2_CHANGE_FILAMENT_GCODE==========\n;===== date: 2025-10-16-001 =====================\nM106 S0\nM106 P2 S0\nG1 Z{min(max_layer_z+3, printable_height+0.5)} F1200\nM6211 T[next_extruder] L[flush_length] M{old_filament_e_feedrate} N{new_filament_e_feedrate} Q[old_filament_temp] R[nozzle_temperature_range_high] S[new_filament_temp]\nT[next_extruder]\n", "layer_change_gcode": "M73 L{layer_num+1}\n;LAYER:{layer_num+1}\n", - "machine_end_gcode": ";===== CC&CC2 - END Gcode ================\n;===== date: 2025-10-16-001 =====================\n\nM104 S0\nM140 S0 ;Turn-off bed\nM83\nG92 E0 ; zero the extruder\nG1 E-1.5 F1800\nG2 I0 J1 Z{max_layer_z+0.5} F3000 ; lower z a little\nM106 S0\nM106 P2 S0\nG90\n{if max_layer_z > 75}G1 Z{min(max_layer_z+5, printable_height+0.5)} F20000{else}G1 Z80 F20000 {endif}; Move print head up \nG180 S9\nM84\n", - "machine_start_gcode": ";===== CC2 - Start Gcode ================\n;===== date: 2025-10-29-001 =====================\n\nG90\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\nM190 S[bed_temperature_initial_layer_single] A\nM106 S0\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 FROM_SLICER=1\nM204 S{min(20000,max(1000,outer_wall_acceleration))} ;Call exterior wall print acceleration\nG28\nM109 S[nozzle_temperature_initial_layer]\nT[initial_no_support_extruder]\nM6211 A1 T[initial_no_support_extruder] Q[nozzle_temperature_initial_layer] R[nozzle_temperature_initial_layer] S[nozzle_temperature_initial_layer]\n\n{if first_layer_print_min[1] > 0.5}\nG180 S7\nG1 X{print_bed_max[0]*0.5-1} Y-1.2 F20000\nG1 Z0.5 F900\nM109 S[nozzle_temperature_initial_layer]\nM83\nG92 E0 ;Reset Extruder\nG1 E6 F{min(1200, max(120, filament_max_volumetric_speed[initial_no_support_extruder]*60/2/2.5043))} \nM106 S200\nG1 X{print_bed_max[0]*0.5-41} E20 F{min(12000, max(1200, filament_max_volumetric_speed[initial_no_support_extruder]*60/2/2.5043))} \nG1 F6000\nG1 X{print_bed_max[0]*0.5-46} E0.8\n{else}\nG1 E30 F{min(1200, max(120, filament_max_volumetric_speed[initial_no_support_extruder]*60/2/2.5043))}\n{endif}\nM106 S0\nG180 S8\nG1 F20000\nG92 E0 ;Reset Extruder\n;LAYER_COUNT:[total_layer_count]\n;LAYER:0", + "machine_end_gcode": ";===== CC&CC2_END_GCODE ================\n;===== date: 2025-10-16-001 =====================\n\nM104 S0\nM140 S0 ;Turn-off bed\nM83\nG92 E0 ; zero the extruder\nG1 E-1.5 F1800\nG2 I0 J1 Z{max_layer_z+0.5} F3000 ; lower z a little\nM106 S0\nM106 P2 S0\nG90\n{if max_layer_z > 75}G1 Z{min(max_layer_z+5, printable_height+0.5)} F20000{else}G1 Z80 F20000 {endif}; Move print head up \nG180 S9\nM84\n", + "machine_start_gcode": ";===== CC2_START_GCODE ================\n;===== date: 2025-11-06-001 =====================\n\nG90\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\nM190 S[bed_temperature_initial_layer_single] A\nM106 S0\nBED_MESH_CALIBRATE mesh_min={adaptive_bed_mesh_min[0]},{adaptive_bed_mesh_min[1]} mesh_max={adaptive_bed_mesh_max[0]},{adaptive_bed_mesh_max[1]} ALGORITHM=[bed_mesh_algo] PROBE_COUNT={bed_mesh_probe_count[0]},{bed_mesh_probe_count[1]} ADAPTIVE=0 ADAPTIVE_MARGIN=0 FROM_SLICER=1\nM204 S{min(20000,max(1000,outer_wall_acceleration))} ;Call exterior wall print acceleration\nG28\nM109 S[nozzle_temperature_initial_layer]\nM6211 A1 L200 T[initial_no_support_extruder] Q[nozzle_temperature_initial_layer] R[nozzle_temperature_initial_layer] S[nozzle_temperature_initial_layer]\nT[initial_no_support_extruder]\n\n{if first_layer_print_min[1] > 0.5}\nG180 S7\nG1 X{print_bed_max[0]*0.5-1} Y-1.2 F20000\nG1 Z0.5 F900\nM109 S[nozzle_temperature_initial_layer]\nM83\nG92 E0 ;Reset Extruder\nG1 E6 F{min(1200, max(120, filament_max_volumetric_speed[initial_no_support_extruder]*60/2/2.5043))} \nM106 S200\nG1 X{print_bed_max[0]*0.5-41} E20 F{min(12000, max(1200, filament_max_volumetric_speed[initial_no_support_extruder]*60/2/2.5043))} \nG1 F6000\nG1 X{print_bed_max[0]*0.5-46} E0.8\n{else}\nG1 E30 F{min(1200, max(120, filament_max_volumetric_speed[initial_no_support_extruder]*60/2/2.5043))}\n{endif}\nM106 S0\nG180 S8\nG1 F20000\nG92 E0 ;Reset Extruder\n;LAYER_COUNT:[total_layer_count]\n;LAYER:0", "retract_restart_extra_toolchange": [ "0.5" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2.json b/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2.json index 50fddd4188..17f9b6f7e8 100644 --- a/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2.json +++ b/resources/profiles/Elegoo/machine/ECC2/Elegoo Centauri Carbon 2.json @@ -8,5 +8,5 @@ "bed_model": "elegoo_centuri_carbon_buildplate_model.stl", "bed_texture": "elegoo_centuri_carbon_buildplate_texture.png", "hotend_model": "", - "default_materials": "Elegoo ASA @0.2 nozzle;Elegoo ASA @ECC2;Elegoo PETG @0.2 nozzle;Elegoo PETG @ECC2;Elegoo PETG PRO @0.2 nozzle;Elegoo PETG PRO @ECC2;Elegoo PLA @0.2 nozzle;Elegoo PLA Matte @0.2 nozzle;Elegoo PLA Matte @ECC2;Elegoo PLA PRO @0.2 nozzle;Elegoo PLA PRO @ECC2;Elegoo PLA Silk @0.2 nozzle;Elegoo PLA Silk @ECC2;Elegoo PLA-CF @ECC2;Elegoo PLA @ECC2;Elegoo PLA+ @0.2 nozzle;Elegoo PLA+ @ECC2;Elegoo RAPID PETG @0.2 nozzle;Elegoo RAPID PETG @ECC2;Elegoo RAPID PETG+ @0.2 nozzle;Elegoo RAPID PETG+ @ECC2;Elegoo RAPID PLA @0.2 nozzle;Elegoo RAPID PLA @ECC2;Elegoo RAPID PLA+ @0.2 nozzle;Elegoo RAPID PLA+ @ECC2;Elegoo TPU 95A @ECC2;Elegoo PLA Basic @0.2 nozzle;Elegoo PLA Basic @ECC2;Elegoo PLA Galaxy @ECC2;Elegoo PLA Marble @ECC2; Elegoo PLA Sparkle @ECC2;Elegoo PLA Wood @ECC2;Elegoo RAPID TPU 95A @ECC2;Elegoo ABS @0.2 nozzle;Elegoo ABS @ECC2;Elegoo PAHT-CF @ECC2;Elegoo PC @0.2 nozzle;Elegoo PC @ECC2;Elegoo PC-FR @0.2 nozzle;Elegoo PC-FR @ECC2;Elegoo PETG-CF @ECC2;Elegoo PETG-GF @ECC2;Elegoo PETG Translucent @0.2 nozzle;Elegoo PETG Translucent @ECC2" + "default_materials": "Elegoo ASA @0.2 nozzle;Elegoo ASA @ECC2;Elegoo PETG @0.2 nozzle;Elegoo PETG @ECC2;Elegoo PETG PRO @0.2 nozzle;Elegoo PETG PRO @ECC2;Elegoo PLA @0.2 nozzle;Elegoo PLA Matte @0.2 nozzle;Elegoo PLA Matte @ECC2;Elegoo PLA PRO @0.2 nozzle;Elegoo PLA PRO @ECC2;Elegoo PLA Silk @0.2 nozzle;Elegoo PLA Silk @ECC2;Elegoo PLA-CF @ECC2;Elegoo PLA @ECC2;Elegoo PLA+ @0.2 nozzle;Elegoo PLA+ @ECC2;Elegoo RAPID PETG @0.2 nozzle;Elegoo RAPID PETG @ECC2;Elegoo RAPID PLA+ @0.2 nozzle;Elegoo RAPID PLA+ @ECC2;Elegoo TPU 95A @ECC2;Elegoo PLA Basic @0.2 nozzle;Elegoo PLA Basic @ECC2;Elegoo PLA Galaxy @ECC2;Elegoo PLA Marble @ECC2; Elegoo PLA Sparkle @ECC2;Elegoo PLA Wood @ECC2;Elegoo RAPID TPU 95A @ECC2;Elegoo ABS @0.2 nozzle;Elegoo ABS @ECC2;Elegoo PAHT-CF @ECC2;Elegoo PC @0.2 nozzle;Elegoo PC @ECC2;Elegoo PC-FR @0.2 nozzle;Elegoo PC-FR @ECC2;Elegoo PETG-CF @ECC2;Elegoo PETG-GF @ECC2;Elegoo PETG Translucent @0.2 nozzle;Elegoo PETG Translucent @ECC2" } diff --git a/resources/profiles/Elegoo/process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json index bd1585faa7..823e5dbab8 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json @@ -1,8 +1,7 @@ { - "type": "process", - "name": "0.08mm Optimal @Elegoo CC2 0.2 nozzle", - "inherits": "0.10mm Standard @Elegoo CC2 0.2 nozzle", - "instantiation": "true", "elefant_foot_compensation": "0.05", - "layer_height": "0.08" + "inherits": "0.10mm Standard @Elegoo CC2 0.2 nozzle", + "layer_height": "0.08", + "name": "0.08mm Optimal @Elegoo CC2 0.2 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json index 3c5f7a6a2d..f77bf88635 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json @@ -1,15 +1,16 @@ { "type": "process", "name": "0.10mm Standard @Elegoo CC2 0.2 nozzle", - "inherits": "fdm_process_ecc_02010", + "inherits": "fdm_process_elegoo_02010", "from": "system", "setting_id": "PECC202010", "instantiation": "true", "sparse_infill_pattern": "zig-zag", - "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_type[0]}{layer_height}_{print_time}.gcode", + "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode", "min_width_top_surface": "50%", "elefant_foot_compensation": "0.15", "enable_prime_tower": "1", + "reduce_infill_retraction": "0", "compatible_printers": [ "Elegoo Centauri Carbon 2 0.2 nozzle" ] diff --git a/resources/profiles/Elegoo/process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json index 6785665985..374d851f8f 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.12mm Draft @Elegoo CC2 0.2 nozzle", "inherits": "0.10mm Standard @Elegoo CC2 0.2 nozzle", - "instantiation": "true", - "layer_height": "0.12" + "layer_height": "0.12", + "name": "0.12mm Draft @Elegoo CC2 0.2 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json index eaa179bc77..f61bc2722d 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json @@ -1,8 +1,7 @@ { - "type": "process", - "name": "0.12mm Fine @Elegoo CC2 0.4 nozzle", "inherits": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "instantiation": "true", "layer_height": "0.12", - "wall_loops": "3" + "name": "0.12mm Fine @Elegoo CC2 0.4 nozzle", + "wall_loops": "3", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json index ed348fcc44..34cc7620e7 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.14mm Extra Draft @Elegoo CC2 0.2 nozzle", "inherits": "0.10mm Standard @Elegoo CC2 0.2 nozzle", - "instantiation": "true", - "layer_height": "0.14" + "layer_height": "0.14", + "name": "0.14mm Extra Draft @Elegoo CC2 0.2 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json index e64b1b8f9b..1584e48619 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json @@ -1,8 +1,7 @@ { - "type": "process", - "name": "0.16mm Extra Fine @Elegoo CC2 0.8 nozzle", "inherits": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "instantiation": "true", "initial_layer_print_height": "0.3", - "layer_height": "0.16" + "layer_height": "0.16", + "name": "0.16mm Extra Fine @Elegoo CC2 0.8 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json index 93191a166a..1801dd905f 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.16mm Optimal @Elegoo CC2 0.4 nozzle", "inherits": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "instantiation": "true", - "layer_height": "0.16" + "layer_height": "0.16", + "name": "0.16mm Optimal @Elegoo CC2 0.4 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json index b3e535c3cb..c95d7407f2 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.18mm Fine @Elegoo CC2 0.6 nozzle", "inherits": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "instantiation": "true", - "layer_height": "0.18" + "layer_height": "0.18", + "name": "0.18mm Fine @Elegoo CC2 0.6 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json index 2bf76ed249..72308485cb 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json @@ -2,13 +2,13 @@ { "type": "process", "name": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "inherits": "fdm_process_ecc_04020", + "inherits": "fdm_process_elegoo_04020", "from": "system", "setting_id": "PECC204020", "instantiation": "true", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", - "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_type[0]}{layer_height}_{print_time}.gcode", + "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode", "min_width_top_surface": "50%", "enable_prime_tower": "1", "compatible_printers": [ @@ -17,7 +17,6 @@ "enable_arc_fitting": "0", "exclude_object": "0", "independent_support_layer_height": "0", - "infill_anchor": "1000", "initial_layer_acceleration": "2000", "outer_wall_speed": "200", "skirt_height": "4", @@ -30,5 +29,6 @@ "top_surface_acceleration": "5000", "tree_support_branch_distance_organic": "2", "tree_support_tip_diameter": "0.8", - "wall_sequence": "inner-outer-inner wall" + "wall_sequence": "inner wall/outer wall", + "reduce_infill_retraction": "0" } diff --git a/resources/profiles/Elegoo/process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json index d6d4c5cdc8..cbd512b160 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json @@ -1,8 +1,6 @@ { - "type": "process", - "name": "0.20mm Strength @Elegoo CC2 0.4 nozzle", "inherits": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "instantiation": "true", + "name": "0.20mm Strength @Elegoo CC2 0.4 nozzle", "wall_sequence": "inner-outer-inner wall", "reduce_crossing_wall": "1", "bottom_shell_layers": "5", @@ -10,5 +8,6 @@ "print_flow_ratio": "0.95", "sparse_infill_density": "20%", "top_shell_layers": "6", - "wall_loops": "6" + "wall_loops": "6", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json index 8c6a8a435e..e183cfdd7d 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.24mm Draft @Elegoo CC2 0.4 nozzle", "inherits": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "instantiation": "true", - "layer_height": "0.24" + "layer_height": "0.24", + "name": "0.24mm Draft @Elegoo CC2 0.4 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json index ab937e7c86..904f0f873c 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json @@ -1,8 +1,7 @@ { - "type": "process", - "name": "0.24mm Fine @Elegoo CC2 0.8 nozzle", "inherits": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "instantiation": "true", "initial_layer_print_height": "0.3", - "layer_height": "0.24" + "layer_height": "0.24", + "name": "0.24mm Fine @Elegoo CC2 0.8 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json index 524599aeb3..db40469776 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.24mm Optimal @Elegoo CC2 0.6 nozzle", "inherits": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "instantiation": "true", - "layer_height": "0.24" + "layer_height": "0.24", + "name": "0.24mm Optimal @Elegoo CC2 0.6 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json index 655f64b390..963511cb26 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.28mm Extra Draft @Elegoo CC2 0.4 nozzle", "inherits": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "instantiation": "true", - "layer_height": "0.28" + "layer_height": "0.28", + "name": "0.28mm Extra Draft @Elegoo CC2 0.4 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json index a4257544a8..da48ea859a 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json @@ -2,15 +2,16 @@ { "type": "process", "name": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "inherits": "fdm_process_ecc_06030", + "inherits": "fdm_process_elegoo_06030", "from": "system", "setting_id": "PECC206030", "instantiation": "true", "sparse_infill_pattern": "zig-zag", - "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_type[0]}{layer_height}_{print_time}.gcode", + "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode", "min_width_top_surface": "50%", "enable_prime_tower": "1", "compatible_printers": [ "Elegoo Centauri Carbon 2 0.6 nozzle" - ] + ], + "reduce_infill_retraction": "0" } diff --git a/resources/profiles/Elegoo/process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json index 252b439e52..221dfa023a 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json @@ -1,13 +1,12 @@ { - "type": "process", - "name": "0.30mm Strength @Elegoo CC2 0.6 nozzle", "inherits": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "instantiation": "true", "inner_wall_speed": "120", + "name": "0.30mm Strength @Elegoo CC2 0.6 nozzle", "wall_sequence": "inner-outer-inner wall", "reduce_crossing_wall": "1", "outer_wall_speed": "80", "sparse_infill_density": "15%", "top_surface_speed": "120", - "wall_loops": "4" + "wall_loops": "4", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json index 058c9d6bee..a29aa2e271 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.32mm Optimal @Elegoo CC2 0.8 nozzle", "inherits": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "instantiation": "true", - "layer_height": "0.32" + "layer_height": "0.32", + "name": "0.32mm Optimal @Elegoo CC2 0.8 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json index 40dfda4432..ef50c6d4fc 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.36mm Draft @Elegoo CC2 0.6 nozzle", "inherits": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "instantiation": "true", - "layer_height": "0.36" + "layer_height": "0.36", + "name": "0.36mm Draft @Elegoo CC2 0.6 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json index d30d68e0ea..5b03f8bfd4 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json @@ -2,15 +2,16 @@ { "type": "process", "name": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "inherits": "fdm_process_ecc_08040", + "inherits": "fdm_process_elegoo_08040", "from": "system", "setting_id": "PECC208040", "instantiation": "true", "sparse_infill_pattern": "zig-zag", - "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_type[0]}{layer_height}_{print_time}.gcode", + "filename_format": "ECC2_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode", "min_width_top_surface": "50%", "enable_prime_tower": "1", "compatible_printers": [ "Elegoo Centauri Carbon 2 0.8 nozzle" - ] + ], + "reduce_infill_retraction": "0" } diff --git a/resources/profiles/Elegoo/process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json index 0b4d71378c..3db6a6eddb 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.42mm Extra Draft @Elegoo CC2 0.6 nozzle", "inherits": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "instantiation": "true", - "layer_height": "0.42" + "layer_height": "0.42", + "name": "0.42mm Extra Draft @Elegoo CC2 0.6 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json b/resources/profiles/Elegoo/process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json index eadca9a60a..5ee2988155 100644 --- a/resources/profiles/Elegoo/process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json +++ b/resources/profiles/Elegoo/process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json @@ -1,7 +1,6 @@ { - "type": "process", - "name": "0.48mm Draft @Elegoo CC2 0.8 nozzle", "inherits": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "instantiation": "true", - "layer_height": "0.48" + "layer_height": "0.48", + "name": "0.48mm Draft @Elegoo CC2 0.8 nozzle", + "instantiation": "true" } \ No newline at end of file diff --git a/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json b/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json new file mode 100644 index 0000000000..cef423edcd --- /dev/null +++ b/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json @@ -0,0 +1,30 @@ +{ + "type": "process", + "name": "fdm_process_elegoo_02010", + "inherits": "fdm_process_elegoo_common", + "from": "system", + "instantiation": "false", + "layer_height": "0.1", + "initial_layer_print_height": "0.15", + "elefant_foot_compensation": "0.05", + "wall_loops": "4", + "bottom_shell_layers": "5", + "top_shell_layers": "7", + "bridge_flow": "1", + "line_width": "0.22", + "outer_wall_line_width": "0.22", + "initial_layer_line_width": "0.3", + "sparse_infill_line_width": "0.25", + "inner_wall_line_width": "0.22", + "internal_solid_infill_line_width": "0.22", + "support_line_width": "0.22", + "top_surface_line_width": "0.22", + "initial_layer_speed": "35", + "initial_layer_infill_speed": "60", + "sparse_infill_speed": "100", + "inner_wall_speed": "100", + "internal_solid_infill_speed": "100", + "is_custom_defined": "0", + "outer_wall_speed": "60", + "top_surface_speed": "80" +} diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index b34b5df3ac..9a42319bf1 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -103,7 +103,7 @@ static const std::unordered_map> printer_m "Creality Hi"}}, {"DeltaMaker", {"DeltaMaker 2", "DeltaMaker 2T", "DeltaMaker 2XT"}}, {"Dremel", {"Dremel 3D20", "Dremel 3D40", "Dremel 3D45"}}, - {"Elegoo", {"Elegoo Centauri Carbon", "Elegoo Centauri", "Elegoo Neptune", "Elegoo Neptune X", "Elegoo Neptune 2", + {"Elegoo", {"Elegoo Centauri Carbon 2", "Elegoo Centauri Carbon", "Elegoo Centauri", "Elegoo Neptune", "Elegoo Neptune X", "Elegoo Neptune 2", "Elegoo Neptune 2S", "Elegoo Neptune 2D", "Elegoo Neptune 3", "Elegoo Neptune 3 Pro", "Elegoo Neptune 3 Plus", "Elegoo Neptune 3 Max", "Elegoo Neptune 4 Pro", "Elegoo Neptune 4", "Elegoo Neptune 4 Max", "Elegoo Neptune 4 Plus", "Elegoo OrangeStorm Giga"}}, From 40bf2157e3d38d3e2b5ab32119a8e56c1ab64e2a Mon Sep 17 00:00:00 2001 From: Niccolo Date: Thu, 12 Mar 2026 12:36:45 +0100 Subject: [PATCH 15/35] Fix CLI segfault (SIGSEGV) when using --info, --slice, or --export-3mf (#12719) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In CLI mode, PartPlateList is constructed with a NULL plater pointer (OrcaSlicer.cpp:3612). When set_shapes() calls PartPlate::set_shape(), it unconditionally executes render data preparation code that dereferences the null plater through calls like generate_print_polygon() → wxGetApp().plater(), causing a segmentation fault (exit code 139). This adds a null check on m_plater in PartPlate::set_shape() to skip the render-only code block that generates logo triangles, print/exclude polygons, gridlines, icon vertices, and plate name textures. These rendering operations are not needed in CLI mode and this change has no impact on GUI mode where m_plater is always valid. --- src/slic3r/GUI/PartPlate.cpp | 71 +++++++++++++++--------------------- 1 file changed, 30 insertions(+), 41 deletions(-) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index e7f9810ae0..332dc4c1df 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -3079,53 +3079,42 @@ bool PartPlate::set_shape(const Pointfs& shape, const Pointfs& exclude_areas, co calc_bounding_boxes(); - ExPolygon logo_poly; - generate_logo_polygon(logo_poly); - m_logo_triangles.reset(); - if (!init_model_from_poly(m_logo_triangles, logo_poly, GROUND_Z + 0.02f)) - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":Unable to create logo triangles\n"; + if (m_plater != nullptr) { // render data, skip in CLI mode where m_plater is null + ExPolygon logo_poly; + generate_logo_polygon(logo_poly); + m_logo_triangles.reset(); + if (!init_model_from_poly(m_logo_triangles, logo_poly, GROUND_Z + 0.02f)) + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ":Unable to create logo triangles\n"; - ExPolygon poly; - /*for (const Vec2d& p : m_shape) { - poly.contour.append({ scale_(p(0)), scale_(p(1)) }); - }*/ - generate_print_polygon(poly); - calc_triangles(poly); + ExPolygon poly; + generate_print_polygon(poly); + calc_triangles(poly); - // reset m_wrapping_detection_triangles when change printer - m_print_polygon = poly; - m_wrapping_detection_triangles.reset(); - init_raycaster_from_model(m_triangles); + // reset m_wrapping_detection_triangles when change printer + m_print_polygon = poly; + m_wrapping_detection_triangles.reset(); + init_raycaster_from_model(m_triangles); - ExPolygon exclude_poly; - /*for (const Vec2d& p : m_exclude_area) { - exclude_poly.contour.append({ scale_(p(0)), scale_(p(1)) }); - }*/ - generate_exclude_polygon(exclude_poly); - calc_exclude_triangles(exclude_poly); + ExPolygon exclude_poly; + generate_exclude_polygon(exclude_poly); + calc_exclude_triangles(exclude_poly); - const BoundingBox& pp_bbox = poly.contour.bounding_box(); - calc_gridlines(poly, pp_bbox); + const BoundingBox& pp_bbox = poly.contour.bounding_box(); + calc_gridlines(poly, pp_bbox); - //calc_vertex_for_icons_background(5, m_del_and_background_icon); - //calc_vertex_for_icons(4, m_del_icon); - calc_vertex_for_icons(0, m_del_icon); - calc_vertex_for_icons(1, m_orient_icon); - calc_vertex_for_icons(2, m_arrange_icon); - calc_vertex_for_icons(3, m_lock_icon); - calc_vertex_for_icons(4, m_plate_settings_icon); - // ORCA also change bed_icon_count number in calc_vertex_for_icons() after adding or removing icons for circular shaped beds that uses vertical alingment for icons - bool dual_bbl = false; - if (m_plater) { - PresetBundle* preset = wxGetApp().preset_bundle; - dual_bbl = (preset->is_bbl_vendor() && preset->get_printer_extruder_count() == 2); - } - calc_vertex_for_icons(dual_bbl ? 5 : 6, m_plate_filament_map_icon); - calc_vertex_for_icons(dual_bbl ? 6 : 5, m_move_front_icon); + calc_vertex_for_icons(0, m_del_icon); + calc_vertex_for_icons(1, m_orient_icon); + calc_vertex_for_icons(2, m_arrange_icon); + calc_vertex_for_icons(3, m_lock_icon); + calc_vertex_for_icons(4, m_plate_settings_icon); + // ORCA also change bed_icon_count number in calc_vertex_for_icons() after adding or removing icons for circular shaped beds that uses vertical alingment for icons + bool dual_bbl = false; + PresetBundle* preset = wxGetApp().preset_bundle; + dual_bbl = (preset->is_bbl_vendor() && preset->get_printer_extruder_count() == 2); + calc_vertex_for_icons(dual_bbl ? 5 : 6, m_plate_filament_map_icon); + calc_vertex_for_icons(dual_bbl ? 6 : 5, m_move_front_icon); - //calc_vertex_for_number(0, (m_plate_index < 9), m_plate_idx_icon); - calc_vertex_for_number(0, false, m_plate_idx_icon); - if (m_plater) { + calc_vertex_for_number(0, false, m_plate_idx_icon); // calc vertex for plate name generate_plate_name_texture(); } From 845baaefbb372e9d26ac64aaba9319d76a6c85ea Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 12 Mar 2026 19:38:36 +0800 Subject: [PATCH 16/35] Feature/fix crash on linux when clicking assemble feature (#12739) * fix crash on Linux when clicking Assemble gizmo * some qol changes for dev * Revert "some qol changes for dev" This reverts commit ffe321370b16e61d75e6ca84944480c6827ec79a. --- .gitignore | 1 + src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 867b49420f..4b186b4e14 100644 --- a/.gitignore +++ b/.gitignore @@ -44,3 +44,4 @@ test.js /.cache/ .clangd internal_docs/ +*.flatpak \ No newline at end of file diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index eeeb3da285..8a6bed9bca 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -678,7 +678,7 @@ void GLGizmoMeasure::on_render() m_mesh_raycaster_map[m_last_hit_volume]->get_transform(), m_only_select_plane) : std::nullopt; } - if (m_measure_mode == EMeasureMode::ONLY_ASSEMBLY) { + if (m_measure_mode == EMeasureMode::ONLY_ASSEMBLY && curr_feature.has_value()) { if (m_assembly_mode == AssemblyMode::FACE_FACE) { if (curr_feature->get_type() != Measure::SurfaceFeatureType::Plane) { curr_feature.reset(); From 3a98890e5387e863a7c750b367e18a21697810a3 Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 12 Mar 2026 20:45:30 +0300 Subject: [PATCH 17/35] Update calib_dlg.cpp --- src/slic3r/GUI/calib_dlg.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index c0ca0ae017..88e3f3dd9b 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -67,7 +67,7 @@ std::vector make_shaper_type_labels() } PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("PA Calibration"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("PA Calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -328,7 +328,7 @@ enum FILAMENT_TYPE : int }; Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Temperature calibration"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Temperature calibration"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -518,7 +518,7 @@ void Temp_Calibration_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Max volumetric speed test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Max volumetric speed test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -622,7 +622,7 @@ void MaxVolumetricSpeed_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("VFA test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE) + : DPIDialog(parent, id, _L("VFA test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) , m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog @@ -731,7 +731,7 @@ void VFA_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) // Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Retraction test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Retraction test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -836,7 +836,7 @@ void Retraction_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Input shaping Frequency test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Input shaping Frequency test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -1053,7 +1053,7 @@ void Input_Shaping_Freq_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Input shaping Damp test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Input shaping Damp test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); @@ -1246,7 +1246,7 @@ void Input_Shaping_Damp_Test_Dlg::on_dpi_changed(const wxRect& suggested_rect) { // Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) - : DPIDialog(parent, id, _L("Cornering test"), wxDefaultPosition, parent->FromDIP(wxSize(-1, 280)), wxDEFAULT_DIALOG_STYLE), m_plater(plater) + : DPIDialog(parent, id, _L("Cornering test"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE), m_plater(plater) { SetBackgroundColour(*wxWHITE); // make sure background color set for dialog SetForegroundColour(wxColour("#363636")); From 7399b5d9e65551df1ff4baf624d649d653e6f872 Mon Sep 17 00:00:00 2001 From: yw4z Date: Thu, 12 Mar 2026 23:58:23 +0300 Subject: [PATCH 18/35] Update calib_dlg.cpp --- src/slic3r/GUI/calib_dlg.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index 88e3f3dd9b..6e888b43c6 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -196,6 +196,7 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* Layout(); Fit(); + v_sizer->SetSizeHints(this); } PA_Calibration_Dlg::~PA_Calibration_Dlg() { @@ -409,6 +410,7 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat Layout(); Fit(); + v_sizer->SetSizeHints(this); auto validate_text = [](TextInput* ti){ unsigned long t = 0; @@ -587,6 +589,7 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin Layout(); Fit(); + v_sizer->SetSizeHints(this); } MaxVolumetricSpeed_Test_Dlg::~MaxVolumetricSpeed_Test_Dlg() { @@ -694,6 +697,7 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) Layout(); Fit(); + v_sizer->SetSizeHints(this); } VFA_Test_Dlg::~VFA_Test_Dlg() @@ -802,6 +806,7 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater Layout(); Fit(); + v_sizer->SetSizeHints(this); } Retraction_Test_Dlg::~Retraction_Test_Dlg() { @@ -981,6 +986,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin Layout(); Fit(); + v_sizer->SetSizeHints(this); } Input_Shaping_Freq_Test_Dlg::~Input_Shaping_Freq_Test_Dlg() { @@ -1179,6 +1185,7 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin Layout(); Fit(); + v_sizer->SetSizeHints(this); } Input_Shaping_Damp_Test_Dlg::~Input_Shaping_Damp_Test_Dlg() { @@ -1374,6 +1381,7 @@ Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* Layout(); Fit(); + v_sizer->SetSizeHints(this); } Cornering_Test_Dlg::~Cornering_Test_Dlg() { From 5a3523325d0123074cbd4259ebcaaa14c2cbc74b Mon Sep 17 00:00:00 2001 From: HYzd766 <1550039450@qq.com> Date: Fri, 13 Mar 2026 15:15:26 +0800 Subject: [PATCH 19/35] Add the filament id for the box of the Generic PC --- resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json | 2 +- resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json | 2 +- resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json index fb50534800..e3fee379ff 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_q_common", "from": "system", "setting_id": "GFSA04", - "filament_id": "GFB99", + "filament_id": "QD_1_0_23", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json index b23b635181..ccdfdddd3c 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "QD_2_0_23", "setting_id": "GFSA04", "name": "Generic PC@Q2C-Series", "from": "system", diff --git a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json index ffebfa765f..21dc071697 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "QD_3_0_23", "setting_id": "GFSA04", "name": "Generic PC@X-Max 4-Series", "from": "system", From 1aed7dfe5b57ba944c5e43448cd24c3dae48f5e6 Mon Sep 17 00:00:00 2001 From: Max Paperno Date: Sun, 8 Mar 2026 22:32:28 -0400 Subject: [PATCH 20/35] FIX: Divide by zero exception in `InterlockingGenerator` when invalid configuration parameters are used. (fixes https://github.com/bambulab/BambuStudio/issues/9910 ) (cherry picked from commit cdd60ab71f8a3895fcb1345b2ccc2f2f472bf968) --- src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp index a3e6cd21b0..84a3d62136 100644 --- a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp +++ b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp @@ -26,7 +26,8 @@ namespace Slic3r { void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_object) { const auto& config = print_object->config(); - if (!config.interlocking_beam) { + // Check if interlocking is enabled, and avoid errors like division by zero due to invalid configuration. + if (!config.interlocking_beam || config.interlocking_beam_layer_count < 1 || config.interlocking_depth < 1 || config.interlocking_beam_width < EPSILON ) { return; } From 3c0f5c7e5978215be7efe606116be64e74ec3f91 Mon Sep 17 00:00:00 2001 From: Bent Hillerkus Date: Fri, 13 Mar 2026 16:05:46 +0100 Subject: [PATCH 21/35] chore: translate comment for ignoring truncating casts warning --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c5be1d49f..008f9e9563 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -493,7 +493,8 @@ if (APPLE) endif () if(MSVC) -# 添加编译选项,忽略警告 C4305 (格式转换截断) +# Ignore truncating casts in initializers & constructors +# https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4305 add_compile_options(/wd4305) endif() From 485917461a3c6c6930c5bc938c1861281a53932b Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Fri, 13 Mar 2026 23:33:19 +0800 Subject: [PATCH 22/35] Allow cancellation during beam interlocking generation --- .../Feature/Interlocking/InterlockingGenerator.cpp | 12 +++++++++--- .../Feature/Interlocking/InterlockingGenerator.hpp | 8 ++++++-- src/libslic3r/PrintObjectSlice.cpp | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp index 84a3d62136..726ee2ffd8 100644 --- a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp +++ b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.cpp @@ -23,7 +23,7 @@ template<> struct hash namespace Slic3r { -void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_object) +void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_object, const std::function& throw_on_cancel) { const auto& config = print_object->config(); // Check if interlocking is enabled, and avoid errors like division by zero due to invalid configuration. @@ -56,8 +56,10 @@ void InterlockingGenerator::generate_interlocking_structure(PrintObject* print_o continue; } + throw_on_cancel(); + InterlockingGenerator gen(*print_object, region_a_index, region_b_index, beam_width, boundary_avoidance, rotation, cell_size, beam_layer_count, - interface_dilation, air_dilation, air_filtering); + interface_dilation, air_dilation, air_filtering, throw_on_cancel); gen.generateInterlockingStructure(); } } @@ -109,12 +111,14 @@ void InterlockingGenerator::handleThinAreas(const std::unordered_set } } for (auto& near_interlock : near_interlock_per_layer) { + throw_on_cancel(); near_interlock = offset(union_(closing(near_interlock, rounding_errors)), detect); polygons_rotate(near_interlock, rotation); } // Only alter layers when they are present in both meshes, zip should take care if that. for (size_t layer_nr = 0; layer_nr < print_object.layer_count(); layer_nr++){ + throw_on_cancel(); auto layer = print_object.get_layer(layer_nr); ExPolygons polys_a = to_expolygons(layer->get_region(region_a_index)->slices.surfaces); ExPolygons polys_b = to_expolygons(layer->get_region(region_b_index)->slices.surfaces); @@ -200,7 +204,8 @@ void InterlockingGenerator::addBoundaryCells(const std::vector& lay const DilationKernel& kernel, std::unordered_set& cells) const { - auto voxel_emplacer = [&cells](GridPoint3 p) { + auto voxel_emplacer = [this, &cells](GridPoint3 p) { + this->throw_on_cancel(); if (p.z() < 0) { return true; } @@ -314,6 +319,7 @@ void InterlockingGenerator::applyMicrostructureToOutlines(const std::unordered_s for (size_t region_idx = 0; region_idx < 2; region_idx++) { const size_t region = (region_idx == 0) ? region_a_index : region_b_index; for (size_t layer_nr = 0; layer_nr < max_layer_count; layer_nr++) { + throw_on_cancel(); ExPolygons layer_outlines = layer_regions[layer_nr]; expolygons_rotate(layer_outlines, unapply_rotation); diff --git a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp index 6f331fb8ef..e6b79f9bc8 100644 --- a/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp +++ b/src/libslic3r/Feature/Interlocking/InterlockingGenerator.hpp @@ -45,7 +45,7 @@ public: /*! * Generate an interlocking structure between each two adjacent meshes. */ - static void generate_interlocking_structure(PrintObject* print_object); + static void generate_interlocking_structure(PrintObject* print_object, const std::function& throw_on_cancel); private: /*! @@ -75,7 +75,8 @@ private: const coord_t beam_layer_count, const DilationKernel& interface_dilation, const DilationKernel& air_dilation, - const bool air_filtering) + const bool air_filtering, + const std::function& throw_on_cancel) : print_object(print_object) , region_a_index(region_a_index) , region_b_index(region_b_index) @@ -88,6 +89,7 @@ private: , interface_dilation(interface_dilation) , air_dilation(air_dilation) , air_filtering(air_filtering) + , throw_on_cancel(throw_on_cancel) {} /*! Given two polygons, return the parts that border on air, and grow 'perpendicular' up to 'detect' distance. @@ -165,6 +167,8 @@ private: // Whether to fully remove all of the interlocking cells which would be visible on the outside. If no air filtering then those cells // will be cut off midway in a beam. const bool air_filtering; + + const std::function& throw_on_cancel; }; } // namespace Slic3r diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 532307414d..2d67ac0939 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -1212,7 +1212,7 @@ void PrintObject::slice_volumes() apply_fuzzy_skin_segmentation(*this, [print]() { print->throw_if_canceled(); }); } - InterlockingGenerator::generate_interlocking_structure(this); + InterlockingGenerator::generate_interlocking_structure(this, [print]() { print->throw_if_canceled(); }); m_print->throw_if_canceled(); BOOST_LOG_TRIVIAL(debug) << "Slicing volumes - make_slices in parallel - begin"; From ccf1442c8c722c95c7a465977c0baa9293fcf0ca Mon Sep 17 00:00:00 2001 From: TheLegendTubaGuy Date: Fri, 13 Mar 2026 16:38:03 -0500 Subject: [PATCH 23/35] Disable arc fitting for Qidi processes Qidi printers run Klipper and we don't want arc fitting enabled for these. --- .../Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json | 2 +- .../Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json | 2 +- .../Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json | 2 +- .../Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json | 2 +- resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json | 2 +- .../Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json | 2 +- .../Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json | 2 +- .../Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json | 2 +- .../Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json | 2 +- .../Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json | 2 +- .../Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json | 2 +- .../Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json | 2 +- .../process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json | 2 +- resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json | 2 +- resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json | 2 +- resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json | 2 +- resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json | 2 +- .../Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json | 2 +- .../Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json | 2 +- .../Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json | 2 +- .../Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json | 2 +- .../Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json | 2 +- .../Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json | 2 +- .../profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json | 2 +- resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json | 2 +- resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json | 2 +- .../profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json | 2 +- resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json | 2 +- .../process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json | 2 +- .../Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json | 2 +- .../Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json | 2 +- .../Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json | 2 +- .../Qidi/process/0.20mm Balanced Strength @X-Max 4.json | 2 +- resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json | 2 +- resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json | 2 +- .../profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json | 2 +- resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json | 2 +- .../process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json | 2 +- .../process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json | 2 +- resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json | 2 +- resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json | 2 +- resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json | 2 +- .../Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json | 2 +- .../Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json | 2 +- .../Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json | 2 +- .../Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json | 2 +- .../Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json | 2 +- .../Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json | 2 +- resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json | 2 +- resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json | 2 +- resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json | 2 +- resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json | 2 +- .../profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json | 2 +- .../profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json | 2 +- .../profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json | 2 +- .../profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json | 2 +- .../profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json | 2 +- .../profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json | 2 +- .../Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json | 2 +- .../Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json | 2 +- .../Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json | 2 +- .../Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json | 2 +- .../process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json | 2 +- .../Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json | 2 +- .../Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json | 2 +- .../Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json | 2 +- .../Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json | 2 +- .../Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json | 2 +- .../Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json | 2 +- .../Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json | 2 +- .../Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json | 2 +- .../Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json | 2 +- .../Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json | 2 +- .../Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json | 2 +- .../Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json | 2 +- .../Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json | 2 +- .../Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json | 2 +- .../Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json | 2 +- .../Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json | 2 +- .../Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json | 2 +- .../Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json | 2 +- .../Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json | 2 +- resources/profiles/Qidi/process/fdm_process_n_common.json | 2 +- 83 files changed, 83 insertions(+), 83 deletions(-) diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json index a4f25c6ace..ed3a101665 100644 --- a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json index 41706b0975..2eef948b43 100644 --- a/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json index 9854ba2431..022f5dfde8 100644 --- a/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.06mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP024", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json index d3c238398a..081ea69ea6 100644 --- a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["4000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": ["70"], "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json index a0ab9987e8..981b6ff989 100644 --- a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["350"], "initial_layer_infill_speed": ["105"], "initial_layer_speed": ["50"], diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json index 50af2c198f..bc0f1f8323 100644 --- a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json index dc4924ee41..45ee7d49de 100644 --- a/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json index 7dfa363390..117e8ddaf1 100644 --- a/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP025", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json index 46f8d1231e..9b58d8fa33 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json index 378dad8510..9f82619f53 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json index 26e37936d8..486dc67ae9 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP007", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json index 2df08a18ef..3924e00ff9 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": ["70"], "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json index accc43854f..d96b15218b 100644 --- a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "initial_layer_infill_speed": ["70"], "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json index 7714a78270..494f3e84fa 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json index ef93a94e14..e7223561d5 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json index 2c16b9c133..0d55ba3d3c 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json b/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json index 15ac8fe659..c99a3bce80 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["350"], "initial_layer_infill_speed": ["105"], "initial_layer_speed": ["50"], diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json index 74c4c9fc3b..f730629b7d 100644 --- a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json index 99d13a5d62..90b0423a0d 100644 --- a/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json index dbe672dd29..18cbb546b7 100644 --- a/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP026", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json index b76af06149..51e0172709 100644 --- a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json index 1c1a62120b..cb817e03b9 100644 --- a/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi Q2C 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json index 40fbb35a2b..a2aa98b462 100644 --- a/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.14mm Standard @Qidi XPlus4 0.2 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP027", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.2 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json b/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json index f2193c9ba8..0b652a05fb 100644 --- a/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["4000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["250"], "inner_wall_acceleration": ["5000"], "internal_solid_infill_speed": ["200"], diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json index f97195b998..ca6ee72e77 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json index 04c66770c6..57c5244c10 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json index 51bf8f7792..e5275c8967 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json index 653631df18..d65f058f71 100644 --- a/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json @@ -10,7 +10,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["300"], "inner_wall_acceleration": ["5000"], "inner_wall_speed": ["300"], diff --git a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json index 25e4edfa4f..e1a0cd22cc 100644 --- a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.62", diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json index b1bf6ec7ba..7e2e5d1885 100644 --- a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json index e86bf6dba0..ec12f7937d 100644 --- a/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json index 258b1243a2..50799f06d0 100644 --- a/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP028", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json b/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json index 5ea9cc80c4..cfee275cd8 100644 --- a/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json @@ -9,7 +9,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["250"], "inner_wall_acceleration": ["5000"], "inner_wall_speed": ["300"], diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json index 0b110b518c..4848d23c8f 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json index 02678202ff..6fbb62b2ab 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json index fb22dafb11..c43c921b0e 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json index 5c197b9c41..608e3365e2 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json @@ -8,7 +8,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["250"], "inner_wall_speed": ["300"], "inner_wall_acceleration": ["5000"], diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json index 6960badde1..f50e217c87 100644 --- a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.82", diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json index 1ed8b9efa1..92302d053e 100644 --- a/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.62", diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json index 3b01b6ee25..9b912483f7 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json index 8d905be4a9..c2cb43315d 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json index d38b7ec0e0..118af9c624 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json index 3eae347cee..fd2d00255d 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json index c2a0a753ac..039ce49226 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json index 068e7897e9..3895e959c8 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json index 9f71a3d522..3c4d203446 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json index 2b22057534..4bc59ad603 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP029", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json index 9b68afbbe8..5585d47610 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP032", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json index 8198908e93..727157f999 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json @@ -8,7 +8,7 @@ "bridge_flow": "1", "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["230"], "inner_wall_acceleration": ["5000"], "inner_wall_speed": ["230"], diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json index 62f7d391be..4045189fbd 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json index 7650e7eb8f..762b64abc1 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json index 606d80135a..29b53739cf 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json index 7fb7dfe92f..b695144d83 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json index 97c3abb3d6..9252c9b65f 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi Q2C.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json index 9a5fbc9c81..981ff6f9ad 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi XPlus4.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP004", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.4 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json index 5c796a9e1f..1b8c5ba6ec 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json index 7fbf18cfd4..c7655e5a17 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json index 5d08b003d6..ee191e0154 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json @@ -6,7 +6,7 @@ "setting_id": "GP004", "instantiation": "true", "adaptive_layer_height": "1", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json index 14c772018b..2cfd393a6f 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json index f9e444b169..0d407fbd77 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json index 18f97db991..15f7a527b4 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP010", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json index a8cb22ee91..c7c37d0eba 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.62", diff --git a/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json index 7f014a50e8..1d47f304cd 100644 --- a/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["50"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.82", diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json index f19dbcbd16..ba5517a7d0 100644 --- a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json index c70c02bf9d..ab04a2d2c3 100644 --- a/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json index e31a97e07a..29730bf03a 100644 --- a/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP033", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json index b1dd3f5e7a..b6ea10d3bd 100644 --- a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json index 729e005e7d..1701a10ab8 100644 --- a/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json index 8fbe3ac0ee..0c7c54cf65 100644 --- a/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.36mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP030", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json index 5b878b1135..95d6352a42 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json index f416bcda98..720c5f1c03 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json index 8464a0c095..8fd66091a5 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP009", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json index 9c9af356c5..6270e74e3b 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json @@ -9,7 +9,7 @@ "bridge_speed": ["30"], "default_acceleration": ["10000"], "elefant_foot_compensation": "0.15", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "gap_infill_speed": ["50"], "initial_layer_infill_speed": ["55"], "initial_layer_line_width": "0.82", diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json index 52e9b76f42..fa2e6f3321 100644 --- a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json index 69f14e90bd..f9c2a17cb1 100644 --- a/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi Q2C 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json index 24c05f6a40..426092a9a5 100644 --- a/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.42mm Standard @Qidi XPlus4 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP031", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.6 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json index 149ae2a287..589516f05c 100644 --- a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json index 73ee492d6c..5eebf2f97a 100644 --- a/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json index abdb0ff7b3..a3e4dbe450 100644 --- a/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.48mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP034", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json index da8d2233a5..84017f1c8f 100644 --- a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json index 6506b8b33c..8aeb38ddf5 100644 --- a/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi Q2C 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi Q2C 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json index d8370a3beb..0de2493058 100644 --- a/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.56mm Standard @Qidi XPlus4 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "GP035", "instantiation": "true", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "compatible_printers": [ "Qidi X-Plus 4 0.8 nozzle" ] diff --git a/resources/profiles/Qidi/process/fdm_process_n_common.json b/resources/profiles/Qidi/process/fdm_process_n_common.json index 64db71f946..ee9bdbcaaa 100644 --- a/resources/profiles/Qidi/process/fdm_process_n_common.json +++ b/resources/profiles/Qidi/process/fdm_process_n_common.json @@ -24,7 +24,7 @@ "draft_shield": "disabled", "elefant_foot_compensation": "0", "embedding_wall_into_infill": "0", - "enable_arc_fitting": "1", + "enable_arc_fitting": "0", "enable_height_slowdown": ["0"], "enable_overhang_speed": ["1"], "enable_prime_tower": "1", From 1528c2cf3b01b9ae2aad7c1398886198b21bf8ff Mon Sep 17 00:00:00 2001 From: RF47 <162915171+RF47@users.noreply.github.com> Date: Fri, 13 Mar 2026 22:42:40 -0300 Subject: [PATCH 24/35] Skip top surfaces with non-positive density Add a guard that skips creating fill params for top surfaces when the configured density is less than or equal to zero. This avoids generating surface fills for zero/negative densities and prevents unnecessary processing or potential errors when top surface density is disabled. --- src/libslic3r/Fill/Fill.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 500eb944ac..9d9962dbc8 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -882,6 +882,7 @@ std::vector group_fills(const Layer &layer, LockRegionParam &lock_p if (surface.is_top()) { params.pattern = region_config.top_surface_pattern.value; params.density = float(region_config.top_surface_density); + if (params.density <= 0.0f) continue; } else { // Surface is bottom params.pattern = region_config.bottom_surface_pattern.value; params.density = float(region_config.bottom_surface_density); From d28e964e040ea3069fd5b66dd1aac8ea4838b5ac Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sat, 14 Mar 2026 20:47:56 +0800 Subject: [PATCH 25/35] Fix crash in DiffPresetDialog::update_tree() on preset selection change (#12765) std::map::at() throws std::out_of_range when option.category or "Basic information" is not present in the tab's category_icon_map, crashing the app. Replace with a safe find()-based helper lambda that falls back to an empty string (no icon) when the key is missing. --- src/slic3r/GUI/UnsavedChangesDialog.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index ada0269330..2a74264700 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -2220,6 +2220,10 @@ void DiffPresetDialog::update_tree() m_tree->model->AddPreset(type, "\"" + from_u8(left_preset->name) + "\" vs \"" + from_u8(right_preset->name) + "\"", left_pt); const std::map& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map(); + auto get_category_icon = [&category_icon_map](const wxString& key) { + auto it = category_icon_map.find(key); + return it != category_icon_map.end() ? it->second : std::string(); + }; // process changes of extruders count if (type == Preset::TYPE_PRINTER && left_pt == ptFFF && @@ -2228,7 +2232,8 @@ void DiffPresetDialog::update_tree() wxString left_val = from_u8((boost::format("%1%") % left_config.opt("extruder_colour")->values.size()).str()); wxString right_val = from_u8((boost::format("%1%") % right_congig.opt("extruder_colour")->values.size()).str()); - m_tree->Append("extruders_count", type, "General", "Capabilities", local_label, left_val, right_val, category_icon_map.at("Basic information")); + m_tree->Append("extruders_count", type, "General", "Capabilities", local_label, left_val, right_val, + get_category_icon("Basic information")); } for (const std::string& opt_key : dirty_options) { @@ -2247,7 +2252,7 @@ void DiffPresetDialog::update_tree() continue; } m_tree->Append(opt_key, type, option.category_local, option.group_local, option.label_local, - left_val, right_val, category_icon_map.at(option.category)); + left_val, right_val, get_category_icon(option.category)); } } From 478e8bda16c34609cb43692b70334f06122edcac Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 14 Mar 2026 23:30:37 +0800 Subject: [PATCH 26/35] Fix non-bbl printer filament grouping by mapping all filaments/tools to group 0 (#12449, #12766) --- src/libslic3r/GCode/ToolOrdering.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 08e004bc30..b75195ae67 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -1321,19 +1321,18 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first return false; }; - if (m_print->is_BBL_printer() || number_of_extruders == 1){ + auto maps_without_group = filament_maps; + for (auto& item : maps_without_group) + item = 0; + reorder_filaments_for_minimum_flush_volume( filament_lists, - filament_maps, + m_print->is_BBL_printer() ? filament_maps : maps_without_group, // non-bbl printers do not support filament group yet layer_filaments, nozzle_flush_mtx, get_custom_seq, &filament_sequences ); - } else { - // For non-bbl multi-extruder printers we don't support filament group yet, so we keep the layer sequence because we don't flush based on order - filament_sequences = layer_filaments; - } auto curr_flush_info = calc_filament_change_info_by_toolorder(print_config, filament_maps, nozzle_flush_mtx, filament_sequences); if (nozzle_nums <= 1) @@ -1349,9 +1348,6 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first // always calculate the info by one extruder { std::vector>filament_sequences_one_extruder; - auto maps_without_group = filament_maps; - for (auto& item : maps_without_group) - item = 0; reorder_filaments_for_minimum_flush_volume( filament_lists, maps_without_group, From 43285a493cf019691de044ecd2e622ebfc6bf2e9 Mon Sep 17 00:00:00 2001 From: RF47 <162915171+RF47@users.noreply.github.com> Date: Sat, 14 Mar 2026 22:16:08 -0300 Subject: [PATCH 27/35] Flow ratio instead flow rate calib --- src/slic3r/GUI/MainFrame.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 80b801a4c0..96fac6ad16 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -3215,20 +3215,20 @@ void MainFrame::init_menubar_as_editor() // Flow rate (with submenu) auto flowrate_menu = new wxMenu(); append_menu_item( - flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow rate test - Pass 1"), + flowrate_menu, wxID_ANY, _L("Pass 1"), _L("Flow ratio test - Pass 1"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(false, 1); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow rate test - Pass 2"), + append_menu_item(flowrate_menu, wxID_ANY, _L("Pass 2"), _L("Flow ratio test - Pass 2"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(false, 2); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); flowrate_menu->AppendSeparator(); - append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (Recommended)"), _L("Orca YOLO flowrate calibration, 0.01 step"), + append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (Recommended)"), _L("Orca YOLO flowratio calibration, 0.01 step"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(true, 1); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); - append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (perfectionist version)"), _L("Orca YOLO flowrate calibration, 0.005 step"), + append_menu_item(flowrate_menu, wxID_ANY, _L("YOLO (perfectionist version)"), _L("Orca YOLO flowratio calibration, 0.005 step"), [this](wxCommandEvent&) { if (m_plater) m_plater->calib_flowrate(true, 2); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); - m_topbar->GetCalibMenu()->AppendSubMenu(flowrate_menu, _L("Flow rate")); + m_topbar->GetCalibMenu()->AppendSubMenu(flowrate_menu, _L("Flow ratio")); // Retraction test append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Retraction test"), _L("Retraction test"), From 189bcafee04b34d6f6612e08923cd4253c365feb Mon Sep 17 00:00:00 2001 From: Branden Cash <203336+ammmze@users.noreply.github.com> Date: Fri, 13 Mar 2026 21:55:05 -0700 Subject: [PATCH 28/35] feat: swap the mmu detection to prefer the more generic moonraker database Happy Hare now writes mmu lane data to the moonraker db similar to AFC, so we can normalize to the one implementation. For now, i've just re-ordered it so that the moonraker db is checked first. I want this because I've actually updated the happy hare data to include more data than we had access to via the "mmu" object. For happy hare we now have access to vendor name, which we can eventually use to further fine tune the auto-matched filament preset. --- src/slic3r/Utils/MoonrakerPrinterAgent.cpp | 38 ++++++++++++---------- src/slic3r/Utils/MoonrakerPrinterAgent.hpp | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp index a46e7be8f1..f1d892134b 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp @@ -571,7 +571,18 @@ bool MoonrakerPrinterAgent::fetch_filament_info(std::string dev_id) std::vector trays; int max_lane_index = 0; - // Try Happy Hare first (more widely adopted, supports more filament changers) + // Try Moonraker filament data (more generic, supports any filament changer + // software that reports lane data to Moonraker like AFC and recent Happy + // Hare as of Feb 15, 2026) + if (fetch_moonraker_filament_data(trays, max_lane_index)) { + BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: Detected Moonraker filament system with " + << (max_lane_index + 1) << " lanes"; + int ams_count = (max_lane_index + 4) / 4; + build_ams_payload(ams_count, max_lane_index, trays); + return true; + } + + // Attempt Happy Hare first (more widely adopted, supports more filament changers) if (fetch_hh_filament_info(trays, max_lane_index)) { BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: Detected Happy Hare MMU with " << (max_lane_index + 1) << " gates"; @@ -580,17 +591,8 @@ bool MoonrakerPrinterAgent::fetch_filament_info(std::string dev_id) return true; } - // Fallback to AFC - if (fetch_afc_filament_info(trays, max_lane_index)) { - BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: Detected AFC with " - << (max_lane_index + 1) << " lanes"; - int ams_count = (max_lane_index + 4) / 4; - build_ams_payload(ams_count, max_lane_index, trays); - return true; - } - // No MMU detected - this is normal for printers without MMU, not an error - BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: No MMU system detected (neither HH nor AFC)"; + BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_filament_info: No MMU system detected (neither HH nor Moonraker)"; return false; } @@ -721,10 +723,10 @@ std::string MoonrakerPrinterAgent::normalize_color_value(const std::string& colo return normalized; } -// Fetch filament info from Armored Turtle AFC -bool MoonrakerPrinterAgent::fetch_afc_filament_info(std::vector& trays, int& max_lane_index) +// Fetch filament info from moonraker database +bool MoonrakerPrinterAgent::fetch_moonraker_filament_data(std::vector& trays, int& max_lane_index) { - // Fetch AFC lane data from Moonraker database + // Fetch lane data from Moonraker database std::string url = join_url(device_info.base_url, "/server/database/item?namespace=lane_data"); std::string response_body; @@ -754,19 +756,19 @@ bool MoonrakerPrinterAgent::fetch_afc_filament_info(std::vector& tr .perform_sync(); if (!success) { - BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_afc_filament_info: Failed to fetch lane data: " << http_error; + BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: Failed to fetch lane data: " << http_error; return false; } auto json = nlohmann::json::parse(response_body, nullptr, false, true); if (json.is_discarded()) { - BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_afc_filament_info: Invalid JSON response"; + BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: Invalid JSON response"; return false; } // Expected structure: { "result": { "namespace": "lane_data", "value": { "lane1": {...}, ... } } } if (!json.contains("result") || !json["result"].contains("value") || !json["result"]["value"].is_object()) { - BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_afc_filament_info: Unexpected JSON structure or no lane_data found"; + BOOST_LOG_TRIVIAL(warning) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: Unexpected JSON structure or no lane_data found"; return false; } @@ -812,7 +814,7 @@ bool MoonrakerPrinterAgent::fetch_afc_filament_info(std::vector& tr } if (trays.empty()) { - BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_afc_filament_info: No AFC lanes found"; + BOOST_LOG_TRIVIAL(info) << "MoonrakerPrinterAgent::fetch_moonraker_filament_data: No lanes found"; return false; } diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.hpp b/src/slic3r/Utils/MoonrakerPrinterAgent.hpp index 525d5fed86..a37a6c3fd6 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.hpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.hpp @@ -162,7 +162,7 @@ private: // System-specific filament fetch methods bool fetch_hh_filament_info(std::vector& trays, int& max_lane_index); - bool fetch_afc_filament_info(std::vector& trays, int& max_lane_index); + bool fetch_moonraker_filament_data(std::vector& trays, int& max_lane_index); // JSON helper methods static std::string safe_json_string(const nlohmann::json& obj, const char* key); From ad0cce4c3860c9321f8f304d5df45d7da7e752f4 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 15 Mar 2026 17:38:44 +0800 Subject: [PATCH 29/35] Fix wipe tower placed outside bed boundary on first slice The wipe tower config position (wipe_tower_x/y) could be outside the plate boundary (e.g. default y=250 on a 200mm printer). No constraint was applied at slice time, so the tower was generated out-of-bounds. --- src/slic3r/GUI/GLCanvas3D.cpp | 16 +++++++++++++++- src/slic3r/GUI/PartPlate.cpp | 7 +++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2eff0298c9..e83e461ea9 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2835,6 +2835,12 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; float x = dynamic_cast(proj_cfg.option("wipe_tower_x"))->get_at(plate_id); float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_id); + // Helper: persist corrected wipe tower position to config so the next slice uses valid coords. + auto persist_wipe_tower_pos = [&](float nx, float ny) { + ConfigOptionFloat cx(nx), cy(ny); + proj_cfg.option("wipe_tower_x")->set_at(&cx, plate_id, 0); + proj_cfg.option("wipe_tower_y")->set_at(&cy, plate_id, 0); + }; float w = dynamic_cast(m_config->option("prime_tower_width"))->value; float a = dynamic_cast(proj_cfg.option("wipe_tower_rotation_angle"))->value; @@ -2884,6 +2890,8 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re _set_warning_notification(EWarning::PreviewPrimeTowerOutside, true); x = new_x; y = new_y; + // Persist the correction to config so the next slice uses the valid position + persist_wipe_tower_pos(new_x, new_y); } @@ -2906,7 +2914,13 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re BoundingBoxf3 plate_bbox = wxGetApp().plater()->get_partplate_list().get_plate(plate_id)->get_build_volume(true); BoundingBox plate_bbox2d = BoundingBox(scaled(Vec2f(plate_bbox.min[0], plate_bbox.min[1])), scaled(Vec2f(plate_bbox.max[0], plate_bbox.max[1]))); Vec2f offset = WipeTower::move_box_inside_box(tower_bottom_bbox, plate_bbox2d, scaled(margin)); - int volume_idx_wipe_tower_new = m_volumes.load_real_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), + // move_box_inside_box returns mm (already unscaled); apply directly. + // If the actual brim polygon is outside bounds, persist the correction to config. + float display_x = x + offset[0]; + float display_y = y + offset[1]; + if (offset.norm() > float(EPSILON)) + persist_wipe_tower_pos(display_x, display_y); + int volume_idx_wipe_tower_new = m_volumes.load_real_wipe_tower_preview(1000 + plate_id, display_x + plate_origin(0), display_y + plate_origin(1), current_print->wipe_tower_data().wipe_tower_mesh_data->real_wipe_tower_mesh, current_print->wipe_tower_data().wipe_tower_mesh_data->real_brim_mesh, true,a,/*!print->is_step_done(psWipeTower)*/ true, m_initialized); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 332dc4c1df..5be497059c 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -4074,6 +4074,13 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx) wt_x_opt = ConfigOptionFloat(I3_WIPE_TOWER_DEFAULT_X_POS); wt_y_opt = ConfigOptionFloat(I3_WIPE_TOWER_DEFAULT_Y_POS); } + // Clamp default position to fit within the actual plate dimensions so the wipe tower + // doesn't start outside the bed for printers smaller than the hardcoded defaults. + const double wt_default_margin = 2.; + const double wt_estimated_width = 60.; // conservative estimate matching prime_tower_width default + const double wt_estimated_depth = 20.; // conservative depth estimate + wt_x_opt.value = std::max(wt_default_margin, std::min(wt_x_opt.value, m_plate_width - wt_estimated_width - wt_default_margin)); + wt_y_opt.value = std::max(wt_default_margin, std::min(wt_y_opt.value, m_plate_depth - wt_estimated_depth - wt_default_margin)); dynamic_cast(proj_cfg.option("wipe_tower_x"))->set_at(&wt_x_opt, plate_idx, 0); dynamic_cast(proj_cfg.option("wipe_tower_y"))->set_at(&wt_y_opt, plate_idx, 0); } From d58d9be07bddc32c802be48bb447bf92265733c3 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 15 Mar 2026 22:19:53 +0800 Subject: [PATCH 30/35] Add wipe_tower_type printer setting to replace vendor-based wipe tower selection Previously, wipe tower behavior was determined by checking if the printer was a QIDI vendor. This introduces a configurable enum (Type 1 / Type 2) so any printer can select its wipe tower implementation. BBL printers remain hardcoded to Type 1. Qidi profiles default to Type 1. --- resources/profiles/Qidi.json | 2 +- .../Qidi/machine/fdm_machine_x_common.json | 1 + .../profiles/Qidi/machine/fdm_q_common.json | 1 + .../Qidi/machine/fdm_qidi_common.json | 1 + .../Qidi/machine/fdm_qidi_x3_common.json | 1 + src/libslic3r/GCode.cpp | 22 +++++++++---------- src/libslic3r/GCode.hpp | 2 +- src/libslic3r/GCode/ToolOrdering.cpp | 6 ++--- src/libslic3r/GCode/ToolOrdering.hpp | 2 +- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PresetBundle.hpp | 1 - src/libslic3r/Print.cpp | 11 +++++----- src/libslic3r/Print.hpp | 4 +--- src/libslic3r/PrintConfig.cpp | 17 ++++++++++++++ src/libslic3r/PrintConfig.hpp | 7 ++++++ src/slic3r/GUI/BackgroundSlicingProcess.cpp | 1 - src/slic3r/GUI/ConfigManipulation.cpp | 9 ++++---- src/slic3r/GUI/Tab.cpp | 12 +++++----- 18 files changed, 63 insertions(+), 39 deletions(-) diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index 92e1d141c9..f2326e1111 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.03.02.51", + "version": "02.03.02.52", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ diff --git a/resources/profiles/Qidi/machine/fdm_machine_x_common.json b/resources/profiles/Qidi/machine/fdm_machine_x_common.json index 9b862ad7bc..7f28b44e7b 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_x_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_x_common.json @@ -64,6 +64,7 @@ "scan_first_layer": "0", "silent_mode": "0", "single_extruder_multi_material": "1", + "wipe_tower_type": "type1", "support_air_filtration": ["1"], "support_box_temp_control": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Qidi/machine/fdm_q_common.json b/resources/profiles/Qidi/machine/fdm_q_common.json index a36bf68f68..3669ea8860 100644 --- a/resources/profiles/Qidi/machine/fdm_q_common.json +++ b/resources/profiles/Qidi/machine/fdm_q_common.json @@ -128,6 +128,7 @@ "scan_first_layer": "0", "silent_mode": "0", "single_extruder_multi_material": "1", + "wipe_tower_type": "type1", "support_air_filtration": [ "1" ], diff --git a/resources/profiles/Qidi/machine/fdm_qidi_common.json b/resources/profiles/Qidi/machine/fdm_qidi_common.json index 46e8f5d67d..e97fe8502f 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_common.json @@ -118,6 +118,7 @@ ], "silent_mode": "0", "single_extruder_multi_material": "1", + "wipe_tower_type": "type1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", "wipe": [ diff --git a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json index bb8f41aad0..74a27bd841 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_x3_common.json @@ -9,6 +9,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "support_chamber_temp_control": "1", + "wipe_tower_type": "type1", "filament_tower_interface_pre_extrusion_dist": ["10"], "filament_tower_interface_pre_extrusion_length": ["0"], "filament_tower_ironing_area": ["4"], diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 7a4b94dc1d..fe10cbcd41 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1456,7 +1456,7 @@ static std::vector get_path_of_change_filament(const Print& print) std::string WipeTowerIntegration::prime(GCode &gcodegen) { std::string gcode; - if (!gcodegen.is_BBL_Printer() && !gcodegen.is_QIDI_Printer()) { + if (gcodegen.wipe_tower_type() == WipeTowerType::Type2) { for (const WipeTower::ToolChangeResult &tcr : m_priming) { if (!tcr.extrusions.empty()) gcode += append_tcr2(gcodegen, tcr, tcr.new_tool); @@ -1472,7 +1472,7 @@ static std::vector get_path_of_change_filament(const Print& print) assert(m_layer_idx >= 0); if (m_layer_idx >= (int) m_tool_changes.size()) return gcode; - if (!gcodegen.is_BBL_Printer() && !gcodegen.is_QIDI_Printer()) { + if (gcodegen.wipe_tower_type() == WipeTowerType::Type2) { if (gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { if (m_layer_idx < (int) m_tool_changes.size()) { if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) @@ -1561,7 +1561,7 @@ static std::vector get_path_of_change_filament(const Print& print) std::string WipeTowerIntegration::finalize(GCode &gcodegen) { std::string gcode; - if (!gcodegen.is_BBL_Printer() && !gcodegen.is_QIDI_Printer()) { + if (gcodegen.wipe_tower_type() == WipeTowerType::Type2) { if (std::abs(gcodegen.writer().get_position().z() - m_final_purge.print_z) > EPSILON) gcode += gcodegen.change_layer(m_final_purge.print_z); gcode += append_tcr2(gcodegen, m_final_purge, -1); @@ -1983,11 +1983,11 @@ bool GCode::is_BBL_Printer() return false; } -bool GCode::is_QIDI_Printer() +WipeTowerType GCode::wipe_tower_type() { if (m_curr_print) - return m_curr_print->is_QIDI_printer(); - return false; + return m_curr_print->wipe_tower_type(); + return WipeTowerType::Type2; } void GCode::do_export(Print* print, const char* path, GCodeProcessorResult* result, ThumbnailsGeneratorCallback thumbnail_cb) @@ -2400,7 +2400,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // modifies m_silent_time_estimator_enabled DoExport::init_gcode_processor(print.config(), m_processor, m_silent_time_estimator_enabled); const bool is_bbl_printers = print.is_BBL_printer(); - const bool is_qidi_printers = print.is_QIDI_printer(); + const WipeTowerType wipe_tower_type = print.wipe_tower_type(); m_calib_config.clear(); // resets analyzer's tracking data m_last_height = 0.f; @@ -2701,7 +2701,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato throw Slic3r::SlicingError(_(L("No object can be printed. Maybe too small"))); has_wipe_tower = print.has_wipe_tower() && tool_ordering.has_wipe_tower(); // Orca: support all extruder priming - initial_extruder_id = (!is_bbl_printers && has_wipe_tower && !print.config().single_extruder_multi_material_priming && !is_qidi_printers) ? + initial_extruder_id = (wipe_tower_type == WipeTowerType::Type2 && has_wipe_tower && !print.config().single_extruder_multi_material_priming) ? // The priming towers will be skipped. tool_ordering.all_extruders().back() : // Don't skip the priming towers. @@ -2814,7 +2814,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("current_object_idx", 0); // For the start / end G-code to do the priming and final filament pull in case there is no wipe tower provided. this->placeholder_parser().set("has_wipe_tower", has_wipe_tower); - this->placeholder_parser().set("has_single_extruder_multi_material_priming", !is_bbl_printers && has_wipe_tower && print.config().single_extruder_multi_material_priming); + this->placeholder_parser().set("has_single_extruder_multi_material_priming", wipe_tower_type == WipeTowerType::Type2 && has_wipe_tower && print.config().single_extruder_multi_material_priming); this->placeholder_parser().set("total_toolchanges", std::max(0, print.wipe_tower_data().number_of_toolchanges)); // Check for negative toolchanges (single extruder mode) and set to 0 (no tool change). this->placeholder_parser().set("num_extruders", int(print.config().nozzle_diameter.values.size())); this->placeholder_parser().set("retract_length", new ConfigOptionFloats(print.config().retraction_length)); @@ -3134,7 +3134,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } // Orca: support extruder priming - if (is_bbl_printers || ! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) + if (wipe_tower_type != WipeTowerType::Type2 || ! (has_wipe_tower && print.config().single_extruder_multi_material_priming)) { // Set initial extruder only after custom start G-code. // Ugly hack: Do not set the initial extruder if the extruder is primed using the MMU priming towers at the edge of the print bed. @@ -3290,7 +3290,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato //BBS file.write(m_writer.travel_to_z(initial_layer_print_height + m_config.z_offset.value, "Move to the first layer height")); - if (!is_bbl_printers && print.config().single_extruder_multi_material_priming) { + if (wipe_tower_type == WipeTowerType::Type2 && print.config().single_extruder_multi_material_priming) { file.write(m_wipe_tower->prime(*this)); // Verify, whether the print overaps the priming extrusions. BoundingBoxf bbox_print(get_print_extrusions_extents(print)); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 96c15a5df8..d379300bad 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -251,7 +251,7 @@ public: std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } std::string set_extruder(unsigned int extruder_id, double print_z, bool by_object=false, int toolchange_temp_override = -1); bool is_BBL_Printer(); - bool is_QIDI_Printer(); + WipeTowerType wipe_tower_type(); // SoftFever std::string set_object_info(Print* print); diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 08e004bc30..2fed1924ac 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -381,7 +381,7 @@ void ToolOrdering::sort_and_build_data(const PrintObject& object , unsigned int // (print->config().print_sequence == PrintSequence::ByObject is true). ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) { - m_is_BBL_printer = object.print()->is_BBL_printer(); + m_wipe_tower_type = object.print()->wipe_tower_type(); m_print_full_config = &object.print()->full_print_config(); m_print_object_ptr = &object; m_print = const_cast(object.print()); @@ -427,7 +427,7 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool prime_multi_material) { - m_is_BBL_printer = print.is_BBL_printer(); + m_wipe_tower_type = print.wipe_tower_type(); m_print_full_config = &print.full_print_config(); m_print = const_cast(&print); // for update the context of print m_print_config_ptr = &print.config(); @@ -1227,7 +1227,7 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first for (size_t nozzle_id = 0; nozzle_id < nozzle_nums; ++nozzle_id) { std::vector flush_matrix(cast(get_flush_volumes_matrix(print_config->flush_volumes_matrix.values, nozzle_id, nozzle_nums))); std::vector> wipe_volumes; - if ((print_config->purge_in_prime_tower && print_config->single_extruder_multi_material) || m_is_BBL_printer) { + if ((print_config->purge_in_prime_tower && print_config->single_extruder_multi_material) || m_wipe_tower_type == WipeTowerType::Type1) { for (unsigned int i = 0; i < number_of_extruders; ++i) wipe_volumes.push_back(std::vector(flush_matrix.begin() + i * number_of_extruders, flush_matrix.begin() + (i + 1) * number_of_extruders)); } else { diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 7bbfa2da1f..fdac3be98a 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -279,7 +279,7 @@ private: const PrintObject* m_print_object_ptr = nullptr; Print* m_print; bool m_sorted = false; - bool m_is_BBL_printer = false; + WipeTowerType m_wipe_tower_type = WipeTowerType::Type1; FilamentChangeStats m_stats_by_single_extruder; FilamentChangeStats m_stats_by_multi_extruder_curr; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 7cb0569cff..826d8a1a19 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1028,7 +1028,7 @@ static std::vector s_Preset_printer_options { "use_relative_e_distances", "extruder_type", "use_firmware_retraction", "printer_notes", "grab_length", "support_object_skip_flush", "physical_extruder_map", "cooling_tube_retraction", - "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming", + "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "wipe_tower_type", "purge_in_prime_tower", "enable_filament_ramming", "z_offset", "disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "pellet_modded_printer", "support_multi_bed_types", "default_bed_type", "bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut", "bed_temperature_formula", "nozzle_flush_dataset" diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 51eed5646f..528b7cf636 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -145,7 +145,6 @@ public: VendorType get_current_vendor_type(); // Vendor related handy functions bool is_bbl_vendor() { return get_current_vendor_type() == VendorType::Marlin_BBL; } - bool is_qidi_vendor() { return get_current_vendor_type() == VendorType::Klipper_Qidi; } // Whether using bbl network for print upload bool use_bbl_network(); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 7ec220dc73..914cfe4bec 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -315,6 +315,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "prime_tower_enable_framework" || opt_key == "prime_tower_width" || opt_key == "prime_tower_brim_width" + || opt_key == "wipe_tower_type" || opt_key == "prime_tower_skip_points" || opt_key == "prime_tower_flat_ironing" || opt_key == "enable_tower_interface_features" @@ -3127,10 +3128,10 @@ void Print::_make_wipe_tower() // BBS const unsigned int number_of_extruders = (unsigned int)(m_config.filament_colour.values.size()); - const auto bUseWipeTower2 = is_BBL_printer() || is_QIDI_printer() ? false : true; + const bool is_wipe_tower_type2 = this->wipe_tower_type() == WipeTowerType::Type2; // Let the ToolOrdering class know there will be initial priming extrusions at the start of the print. - m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int) -1, bUseWipeTower2 ? true : false); - m_wipe_tower_data.tool_ordering.sort_and_build_data(*this, (unsigned int)-1, bUseWipeTower2 ? true : false); + m_wipe_tower_data.tool_ordering = ToolOrdering(*this, (unsigned int) -1, is_wipe_tower_type2); + m_wipe_tower_data.tool_ordering.sort_and_build_data(*this, (unsigned int)-1, is_wipe_tower_type2); if (!m_wipe_tower_data.tool_ordering.has_wipe_tower()) // Don't generate any wipe tower. @@ -3173,7 +3174,7 @@ void Print::_make_wipe_tower() } this->throw_if_canceled(); - if (!bUseWipeTower2) { + if (!is_wipe_tower_type2) { // in BBL machine, wipe tower is only use to prime extruder. So just use a global wipe volume. WipeTower wipe_tower(m_config, m_plate_index, m_origin, m_wipe_tower_data.tool_ordering.first_extruder(), m_wipe_tower_data.tool_ordering.empty() ? 0.f : m_wipe_tower_data.tool_ordering.back().print_z, m_wipe_tower_data.tool_ordering.all_extruders()); @@ -3311,7 +3312,7 @@ void Print::_make_wipe_tower() wipe_volumes.push_back(std::vector(flush_matrix.begin()+i*number_of_extruders, flush_matrix.begin()+(i+1)*number_of_extruders)); // Orca: itertate over wipe_volumes and change the non-zero values to the prime_volume - if ((!m_config.purge_in_prime_tower || !m_config.single_extruder_multi_material) && !is_BBL_printer() && !is_QIDI_printer()) { + if ((!m_config.purge_in_prime_tower || !m_config.single_extruder_multi_material) && is_wipe_tower_type2) { for (unsigned int i = 0; i < number_of_extruders; ++i) { for (unsigned int j = 0; j < number_of_extruders; ++j) { if (wipe_volumes[i][j] > 0) { diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 80755d1821..b98811c8e3 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -1066,8 +1066,7 @@ public: //SoftFever bool &is_BBL_printer() { return m_isBBLPrinter; } const bool is_BBL_printer() const { return m_isBBLPrinter; } - bool &is_QIDI_printer() { return m_isQIDIPrinter; } - const bool is_QIDI_printer() const { return m_isQIDIPrinter; } + WipeTowerType wipe_tower_type() const { return is_BBL_printer() ? WipeTowerType::Type1 : m_config.wipe_tower_type.value; } CalibMode& calib_mode() { return m_calib_params.mode; } const CalibMode calib_mode() const { return m_calib_params.mode; } void set_calib_params(const Calib_Params& params); @@ -1135,7 +1134,6 @@ private: //SoftFever bool m_isBBLPrinter; - bool m_isQIDIPrinter; // Ordered collections of extrusion paths to build skirt loops and brim. ExtrusionEntityCollection m_skirt; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 6066c28a28..80308156a8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -187,6 +187,12 @@ static t_config_enum_values s_keys_map_NoiseType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType) +static t_config_enum_values s_keys_map_WipeTowerType { + { "type1", int(WipeTowerType::Type1) }, + { "type2", int(WipeTowerType::Type2) } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(WipeTowerType) + static t_config_enum_values s_keys_map_FuzzySkinMode { { "displacement", int(FuzzySkinMode::Displacement) }, { "extrusion", int(FuzzySkinMode::Extrusion) }, @@ -5484,6 +5490,17 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("wipe_tower_type", coEnum); + def->label = L("Wipe tower type"); + def->tooltip = L("Choose the wipe tower implementation for multi-material prints. Type 1 is recommended for Bambu and Qidi printers with a filament cutter. Type 2 offers better compatibility with multi-tool and MMU printers and provide overall better compatibility."); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.emplace_back("type1"); + def->enum_values.emplace_back("type2"); + def->enum_labels.emplace_back(L("Type 1")); + def->enum_labels.emplace_back(L("Type 2")); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionEnum(WipeTowerType::Type2)); + def = this->add("purge_in_prime_tower", coBool); def->label = L("Purge in prime tower"); def->tooltip = L("Purge remaining filament into prime tower."); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 45d72b313d..54c26c312a 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -58,6 +58,11 @@ enum class NoiseType { Voronoi, }; +enum class WipeTowerType { + Type1, + Type2, +}; + enum PrintHostType { htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htESP3D, htCrealityPrint, htObico, htFlashforge, htSimplyPrint, htElegooLink }; @@ -490,6 +495,7 @@ CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrinterTechnology) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeFlavor) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinMode) +CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(WipeTowerType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NoiseType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(InfillPattern) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(IroningType) @@ -1388,6 +1394,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, filament_multitool_ramming_flow)) ((ConfigOptionFloats, filament_stamping_loading_speed)) ((ConfigOptionFloats, filament_stamping_distance)) + ((ConfigOptionEnum, wipe_tower_type)) ((ConfigOptionBool, purge_in_prime_tower)) ((ConfigOptionBool, enable_filament_ramming)) ((ConfigOptionBool, support_multi_bed_types)) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 919aeaf4b5..c1624f4a4e 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -681,7 +681,6 @@ StringObjectException BackgroundSlicingProcess::validate(StringObjectException * assert(m_print == m_fff_print); m_fff_print->is_BBL_printer() = wxGetApp().preset_bundle->is_bbl_vendor(); - m_fff_print->is_QIDI_printer() = wxGetApp().preset_bundle->is_qidi_vendor(); return m_print->validate(warning, collison_polygons, height_polygons); } diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 2ff580717f..f3f98a6fad 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -807,6 +807,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_field("single_extruder_multi_material", !is_BBL_Printer); auto bSEMM = preset_bundle->printers.get_edited_preset().config.opt_bool("single_extruder_multi_material"); + const bool supports_wipe_tower_2 = !is_BBL_Printer && preset_bundle->printers.get_edited_preset().config.opt_enum("wipe_tower_type") == WipeTowerType::Type2; toggle_field("ooze_prevention", !bSEMM); bool have_ooze_prevention = config->opt_bool("ooze_prevention"); @@ -831,17 +832,17 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", "wipe_tower_bridging", "wipe_tower_extra_flow", "wipe_tower_no_sparse_layers"}) - toggle_line(el, have_prime_tower && !is_BBL_Printer); + toggle_line(el, have_prime_tower && supports_wipe_tower_2); WipeTowerWallType wipe_tower_wall_type = config->opt_enum("wipe_tower_wall_type"); bool have_rib_wall = (wipe_tower_wall_type == WipeTowerWallType::wtwRib)&&have_prime_tower; - toggle_line("wipe_tower_cone_angle", have_prime_tower && !is_BBL_Printer && wipe_tower_wall_type == WipeTowerWallType::wtwCone); + toggle_line("wipe_tower_cone_angle", have_prime_tower && supports_wipe_tower_2 && wipe_tower_wall_type == WipeTowerWallType::wtwCone); toggle_line("wipe_tower_extra_rib_length", have_rib_wall); toggle_line("wipe_tower_rib_width", have_rib_wall); toggle_line("wipe_tower_fillet_wall", have_rib_wall); - toggle_field("prime_tower_width", have_prime_tower && !(is_BBL_Printer && have_rib_wall)); + toggle_field("prime_tower_width", have_prime_tower && (supports_wipe_tower_2 || have_rib_wall)); - toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && !is_BBL_Printer); + toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && supports_wipe_tower_2); toggle_line("prime_volume",have_prime_tower && (!purge_in_primetower || !bSEMM)); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 469412a74c..954923cfdd 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -4911,6 +4911,7 @@ if (is_marlin_flavor) optgroup->append_single_option_line("bed_temperature_formula", "printer_basic_information_advanced#bed-temperature-type"); optgroup = page->new_optgroup(L("Wipe tower"), "param_tower"); + optgroup->append_single_option_line("wipe_tower_type", "printer_multimaterial_wipe_tower"); optgroup->append_single_option_line("purge_in_prime_tower", "printer_multimaterial_wipe_tower#purge-in-prime-tower"); optgroup->append_single_option_line("enable_filament_ramming", "printer_multimaterial_wipe_tower#enable-filament-ramming"); @@ -5204,11 +5205,6 @@ void TabPrinter::toggle_options() is_BBL_printer = wxGetApp().preset_bundle->is_bbl_vendor(); } - bool is_QIDI_printer = false; - if (m_preset_bundle) { - is_QIDI_printer = wxGetApp().preset_bundle->is_qidi_vendor(); - } - bool have_multiple_extruders = true; //m_extruders_count > 1; //if (m_active_page->title() == "Custom G-code") { @@ -5236,6 +5232,8 @@ void TabPrinter::toggle_options() } if (m_active_page->title() == L("Multimaterial")) { + const bool supports_wipe_tower_2 = !is_BBL_printer && m_config->opt_enum("wipe_tower_type") == WipeTowerType::Type2; + toggle_line("wipe_tower_type", !is_BBL_printer); // SoftFever: hide specific settings for BBL printer for (auto el : { "enable_filament_ramming", @@ -5245,7 +5243,7 @@ void TabPrinter::toggle_options() "extra_loading_move", "high_current_on_filament_swap", }) - toggle_option(el, !is_BBL_printer && !is_QIDI_printer); + toggle_option(el, supports_wipe_tower_2); auto bSEMM = m_config->opt_bool("single_extruder_multi_material"); if (!bSEMM && m_config->opt_bool("manual_filament_change")) { @@ -5255,7 +5253,7 @@ void TabPrinter::toggle_options() } toggle_option("extruders_count", !bSEMM); toggle_option("manual_filament_change", bSEMM); - toggle_option("purge_in_prime_tower", bSEMM && (!is_BBL_printer && !is_QIDI_printer)); + toggle_option("purge_in_prime_tower", bSEMM && supports_wipe_tower_2); } wxString extruder_number; long val = 1; From 0cc4b442e3d36e18f0ef45460547ac56ed4f8e76 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 12 Mar 2026 21:37:18 +0800 Subject: [PATCH 31/35] Fix Flatpak missing locale support (#12714) Add the localization/ directory to the Flatpak source list so run_gettext.sh can compile .po files into .mo translations. Replace LC_ALL=C.UTF-8 with LC_NUMERIC=C in the entrypoint script to preserve the user's language settings while still preventing decimal-separator parsing issues. --- scripts/flatpak/entrypoint | 4 +++- scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/flatpak/entrypoint b/scripts/flatpak/entrypoint index 38fd86f451..f8e108e85f 100644 --- a/scripts/flatpak/entrypoint +++ b/scripts/flatpak/entrypoint @@ -4,6 +4,8 @@ grep -q org.freedesktop.Platform.GL.nvidia /.flatpak-info && export WEBKIT_DISABLE_DMABUF_RENDERER=1 # Work-around https://github.com/bambulab/BambuStudio/issues/3440 -export LC_ALL=C.UTF-8 +# Use LC_NUMERIC instead of LC_ALL to prevent decimal separator issues +# while preserving the user's language/locale for translations. +export LC_NUMERIC=C exec /app/bin/orca-slicer "$@" diff --git a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml index b161f99477..db9e46fc94 100644 --- a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -347,6 +347,9 @@ modules: - type: dir path: ../../src dest: src + - type: dir + path: ../../localization + dest: localization - type: file path: ../../CMakeLists.txt From 8168d0a4e088748dde3d843fd1aa77eed245f528 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 16 Mar 2026 00:18:39 +0800 Subject: [PATCH 32/35] fix crash when opening preference dialog --- .gitignore | 3 +- scripts/build_flatpak_with_docker.sh | 144 ++++++++++++++++++ scripts/flatpak/.gitignore | 1 + .../io.github.orcaslicer.OrcaSlicer.yml | 5 + src/slic3r/GUI/GUI_App.cpp | 132 ++++++++++------ src/slic3r/GUI/GUI_App.hpp | 3 +- src/slic3r/GUI/MainFrame.cpp | 11 +- src/slic3r/GUI/Preferences.cpp | 11 +- src/slic3r/GUI/Preferences.hpp | 3 + src/slic3r/GUI/Widgets/Label.cpp | 58 ++++--- 10 files changed, 284 insertions(+), 87 deletions(-) create mode 100755 scripts/build_flatpak_with_docker.sh diff --git a/.gitignore b/.gitignore index 4b186b4e14..8007f0a05c 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,5 @@ test.js /.cache/ .clangd internal_docs/ -*.flatpak \ No newline at end of file +*.flatpak +/flatpak-repo/ \ No newline at end of file diff --git a/scripts/build_flatpak_with_docker.sh b/scripts/build_flatpak_with_docker.sh new file mode 100755 index 0000000000..2ebf30a416 --- /dev/null +++ b/scripts/build_flatpak_with_docker.sh @@ -0,0 +1,144 @@ +#!/usr/bin/env bash +# +# Build OrcaSlicer Flatpak locally using Docker with the same container image +# as the CI (build_all.yml). +# +# Usage: +# ./scripts/build_flatpak_with_docker.sh [--arch ] [--no-debug-info] +# +# Requirements: +# - Docker (or Podman with docker compatibility) +# +# The resulting .flatpak bundle is placed in the project root. +# A persistent Docker volume "flatpak-builder-cache" is used to cache +# downloaded sources across builds. Remove it with: +# docker volume rm flatpak-builder-cache + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# ---------- defaults ---------- +ARCH="$(uname -m)" +NO_DEBUG_INFO=false +NO_PULL=false +FORCE_CLEAN=true +CONTAINER_IMAGE="ghcr.io/flathub-infra/flatpak-github-actions:gnome-49" + +# ---------- parse args ---------- +while [[ $# -gt 0 ]]; do + case "$1" in + --arch) + ARCH="$2"; shift 2 ;; + --no-debug-info) + NO_DEBUG_INFO=true; shift ;; + --no-pull) + NO_PULL=true; shift ;; + --keep-build) + FORCE_CLEAN=false; shift ;; + --image) + CONTAINER_IMAGE="$2"; shift 2 ;; + -h|--help) + echo "Usage: $0 [--arch ] [--no-debug-info] [--no-pull] [--keep-build] [--image ]" + exit 0 ;; + *) + echo "Unknown option: $1" >&2; exit 1 ;; + esac +done + +# ---------- version & commit ---------- +cd "$PROJECT_ROOT" + +VER_PURE=$(grep 'set(SoftFever_VERSION' version.inc | cut -d '"' -f2) +if [ -z "$VER_PURE" ]; then + echo "Error: could not extract version from version.inc" >&2 + exit 1 +fi +VER="V${VER_PURE}" +GIT_COMMIT_HASH=$(git rev-parse HEAD) +BUNDLE_NAME="OrcaSlicer-Linux-flatpak_${VER}_${ARCH}.flatpak" + +echo "=== OrcaSlicer Flatpak Build ===" +echo " Version: ${VER} (${VER_PURE})" +echo " Commit: ${GIT_COMMIT_HASH}" +echo " Arch: ${ARCH}" +echo " Image: ${CONTAINER_IMAGE}" +echo " Bundle: ${BUNDLE_NAME}" +echo " Debug info: $([ "$NO_DEBUG_INFO" = true ] && echo "disabled" || echo "enabled")" +echo " ccache: enabled" +echo "" + +# ---------- prepare manifest ---------- +MANIFEST_SRC="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml" +MANIFEST_DOCKER="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml" +cp "$MANIFEST_SRC" "$MANIFEST_DOCKER" + +# Ensure cleanup on exit (success or failure) +trap 'rm -f "$PROJECT_ROOT/$MANIFEST_DOCKER"' EXIT + +# Optionally strip debug info (matches CI behaviour for faster builds) +if [ "$NO_DEBUG_INFO" = true ]; then + sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' "$MANIFEST_DOCKER" +fi + +# Inject git commit hash (same sed as CI) +sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$GIT_COMMIT_HASH\"|}" "$MANIFEST_DOCKER" + +# ---------- run build in Docker ---------- +DOCKER="${DOCKER:-docker}" + +if [ "$NO_PULL" = false ]; then + echo "=== Pulling container image ===" + "$DOCKER" pull "$CONTAINER_IMAGE" +fi + +FORCE_CLEAN_FLAG="" +if [ "$FORCE_CLEAN" = true ]; then + FORCE_CLEAN_FLAG="--force-clean" +fi + +# Pass build parameters as env vars so the inner script doesn't need +# variable expansion from the outer shell (avoids quoting issues). +echo "=== Starting Flatpak build inside container ===" +"$DOCKER" run --rm --privileged \ + -v "$PROJECT_ROOT":/src:Z \ + -v flatpak-builder-cache:/src/.flatpak-builder \ + -w /src \ + -e "BUILD_ARCH=$ARCH" \ + -e "BUNDLE_NAME=$BUNDLE_NAME" \ + -e "FORCE_CLEAN_FLAG=$FORCE_CLEAN_FLAG" \ + "$CONTAINER_IMAGE" \ + bash -c ' + set -euo pipefail + + # Install required SDK extensions (not pre-installed in the container image) + flatpak install -y --noninteractive flathub \ + org.freedesktop.Sdk.Extension.llvm21//25.08 || true + + flatpak-builder $FORCE_CLEAN_FLAG \ + --ccache \ + --disable-rofiles-fuse \ + --arch="$BUILD_ARCH" \ + --repo=flatpak-repo \ + flatpak-build \ + scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml + + flatpak build-bundle \ + --arch="$BUILD_ARCH" \ + flatpak-repo \ + "$BUNDLE_NAME" \ + io.github.orcaslicer.OrcaSlicer + + # Fix ownership so output files are not root-owned on the host + chown "$(stat -c %u:%g /src)" "$BUNDLE_NAME" flatpak-build flatpak-repo + + echo "=== Build complete ===" + ' + +echo "" +echo "=== Flatpak bundle ready ===" +echo " ${PROJECT_ROOT}/${BUNDLE_NAME}" +echo "" +echo "Install with:" +echo " flatpak install --user ${BUNDLE_NAME}" \ No newline at end of file diff --git a/scripts/flatpak/.gitignore b/scripts/flatpak/.gitignore index 49269ac6b0..3b01f15d01 100644 --- a/scripts/flatpak/.gitignore +++ b/scripts/flatpak/.gitignore @@ -1,2 +1,3 @@ builddir .flatpak-builder +*.docker.yml diff --git a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml index db9e46fc94..6a06e136c3 100644 --- a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -333,6 +333,11 @@ modules: - install -Dm644 LICENSE.txt /app/share/licenses/${FLATPAK_ID}/LICENSE.txt + - | # Install fonts into fontconfig-scanned directory so Pango finds them + # before initialization (avoids ensure_faces crash from AddPrivateFont) + install -Dm644 -t /app/share/fonts/OrcaSlicer/ resources/fonts/*.ttf + fc-cache -f /app/share/fonts/OrcaSlicer/ + sources: # OrcaSlicer source tree (specific dirs to avoid copying .git from worktree) - type: dir diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 157b168372..04334c73c5 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -6199,7 +6199,7 @@ static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguage if (! it->empty()) { const std::string &locale = *it; const wxLanguageInfo* lang = wxLocale::FindLanguageInfo(from_u8(locale)); - if (wxLocale::IsAvailable(lang->Language)) + if (lang != nullptr && wxLocale::IsAvailable(lang->Language)) return lang; } return language; @@ -6241,7 +6241,10 @@ bool GUI_App::select_language() names.Alloc(language_infos.size()); // Some valid language should be selected since the application start up. - const wxLanguage current_language = wxLanguage(m_wxLocale->GetLanguage()); + const wxString active_language_code = current_language_code(); + const wxLanguageInfo* active_language_info = wxLocale::FindLanguageInfo(active_language_code); + const wxLanguage current_language = active_language_info != nullptr ? wxLanguage(active_language_info->Language) : wxLanguage(m_wxLocale->GetLanguage()); + const wxString active_lang_prefix = active_language_code.BeforeFirst('_'); int init_selection = -1; int init_selection_alt = -1; int init_selection_default = -1; @@ -6249,9 +6252,9 @@ bool GUI_App::select_language() if (wxLanguage(language_infos[i]->Language) == current_language) // The dictionary matches the active language and country. init_selection = i; - else if ((language_infos[i]->CanonicalName.BeforeFirst('_') == m_wxLocale->GetCanonicalName().BeforeFirst('_')) || + else if ((language_infos[i]->CanonicalName.BeforeFirst('_') == active_lang_prefix) || // if the active language is Slovak, mark the Czech language as active. - (language_infos[i]->CanonicalName.BeforeFirst('_') == "cs" && m_wxLocale->GetCanonicalName().BeforeFirst('_') == "sk")) + (language_infos[i]->CanonicalName.BeforeFirst('_') == "cs" && active_lang_prefix == "sk")) // The dictionary matches the active language, it does not necessarily match the country. init_selection_alt = i; if (language_infos[i]->CanonicalName.BeforeFirst('_') == "en") @@ -6369,7 +6372,10 @@ bool GUI_App::load_language(wxString language, bool initial) language_info = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US); } - BOOST_LOG_TRIVIAL(trace) << boost::format("Switching wxLocales to %1%") % language_info->CanonicalName.ToUTF8().data(); + const wxLanguageInfo *translation_language_info = language_info; + const wxString requested_language_code = translation_language_info->CanonicalName; + const wxLanguageInfo *locale_language_info = translation_language_info; + BOOST_LOG_TRIVIAL(trace) << boost::format("Requested translation language %1%") % requested_language_code.ToUTF8().data(); // Select language for locales. This language may be different from the language of the dictionary. //if (language_info == m_language_info_best || language_info == m_language_info_system) { @@ -6382,8 +6388,8 @@ bool GUI_App::load_language(wxString language, bool initial) // language_info = m_language_info_system; // Alternate language code. - wxLanguage language_dict = wxLanguage(language_info->Language); - if (language_info->CanonicalName.BeforeFirst('_') == "sk") { + wxLanguage language_dict = wxLanguage(translation_language_info->Language); + if (translation_language_info->CanonicalName.BeforeFirst('_') == "sk") { // Slovaks understand Czech well. Give them the Czech translation. language_dict = wxLANGUAGE_CZECH; BOOST_LOG_TRIVIAL(info) << "Using Czech dictionaries for Slovak language"; @@ -6392,19 +6398,34 @@ bool GUI_App::load_language(wxString language, bool initial) #ifdef __linux__ // If we can't find this locale , try to use different one for the language // instead of just reporting that it is impossible to switch. - if (! wxLocale::IsAvailable(language_info->Language) && m_language_info_system) { - std::string original_lang = into_u8(language_info->CanonicalName); - language_info = linux_get_existing_locale_language(language_info, m_language_info_system); - BOOST_LOG_TRIVIAL(info) << boost::format("Can't switch language to %1% (missing locales). Using %2% instead.") - % original_lang % language_info->CanonicalName.ToUTF8().data(); + if (!wxLocale::IsAvailable(locale_language_info->Language) && m_language_info_system) { + std::string original_lang = into_u8(locale_language_info->CanonicalName); + locale_language_info = linux_get_existing_locale_language(locale_language_info, m_language_info_system); + if (locale_language_info != nullptr && locale_language_info != translation_language_info) { + BOOST_LOG_TRIVIAL(info) << boost::format("Can't use locale %1% directly (missing locales). Using locale %2% instead.") + % original_lang % locale_language_info->CanonicalName.ToUTF8().data(); + } + } + + if (locale_language_info == nullptr || !wxLocale::IsAvailable(locale_language_info->Language)) { + auto try_locale = [](const wxLanguageInfo* candidate) -> const wxLanguageInfo* { + return (candidate && wxLocale::IsAvailable(candidate->Language)) ? candidate : nullptr; + }; + const wxLanguageInfo* fallback_locale_info = + try_locale(m_wxLocale ? wxLocale::GetLanguageInfo(wxLanguage(m_wxLocale->GetLanguage())) : nullptr); + if (!fallback_locale_info) fallback_locale_info = try_locale(m_language_info_system); + if (!fallback_locale_info) fallback_locale_info = try_locale(m_language_info_best); + if (!fallback_locale_info) fallback_locale_info = try_locale(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_US)); + if (!fallback_locale_info) fallback_locale_info = try_locale(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_UK)); + if (fallback_locale_info != nullptr) { + BOOST_LOG_TRIVIAL(info) << boost::format("Using fallback locale %1% while keeping translation dictionary %2%.") + % fallback_locale_info->CanonicalName.ToUTF8().data() % requested_language_code.ToUTF8().data(); + locale_language_info = fallback_locale_info; + } } #endif - if (! wxLocale::IsAvailable(language_info->Language)&&initial) { - language_info = wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH_UK); - app_config->set("language", language_info->CanonicalName.ToUTF8().data()); - } - else if (initial) { + if (initial) { // bbs supported languages //TODO: use a global one with Preference //wxLanguage supported_languages[]{ @@ -6438,9 +6459,11 @@ bool GUI_App::load_language(wxString language, bool initial) //} } - if (! wxLocale::IsAvailable(language_info->Language)) { + BOOST_LOG_TRIVIAL(trace) << boost::format("Switching wxLocales to %1%") % locale_language_info->CanonicalName.ToUTF8().data(); + + if (!wxLocale::IsAvailable(locale_language_info->Language)) { // Loading the language dictionary failed. - wxString message = "Switching Orca Slicer to language " + language_info->CanonicalName + " failed."; + wxString message = "Switching Orca Slicer to language " + requested_language_code + " failed."; #if !defined(_WIN32) && !defined(__APPLE__) // likely some linux system message += "\nYou may need to reconfigure the missing locales, likely by running the \"locale-gen\" and \"dpkg-reconfigure locales\" commands.\n"; @@ -6458,12 +6481,13 @@ bool GUI_App::load_language(wxString language, bool initial) //FIXME wxWidgets cause havoc if the current locale is deleted. We just forget it causing memory leaks for now. m_wxLocale.release(); m_wxLocale = Slic3r::make_unique(); - m_wxLocale->Init(language_info->Language); + m_wxLocale->Init(locale_language_info->Language); // Override language at the active wxTranslations class (which is stored in the active m_wxLocale) // to load possibly different dictionary, for example, load Czech dictionary for Slovak language. wxTranslations::Get()->SetLanguage(language_dict); m_wxLocale->AddCatalog(SLIC3R_APP_KEY); - m_imgui->set_language(into_u8(language_info->CanonicalName)); + m_active_language_code = requested_language_code; + m_imgui->set_language(into_u8(requested_language_code)); //FIXME This is a temporary workaround, the correct solution is to switch to "C" locale during file import / export only. //wxSetlocale(LC_NUMERIC, "C"); @@ -6751,49 +6775,57 @@ void GUI_App::show_ip_address_enter_dialog_handler(wxCommandEvent& evt) void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_option) { - bool app_layout_changed = false; + bool need_recreate_gui = false; + std::string pending_language; { // the dialog needs to be destroyed before the call to recreate_GUI() // or sometimes the application crashes into wxDialogBase() destructor // so we put it into an inner scope PreferencesDialog dlg(mainframe, open_on_tab, highlight_option); dlg.ShowModal(); - this->plater_->get_current_canvas3D()->force_set_focus(); - // BBS - //app_layout_changed = dlg.settings_layout_changed(); + need_recreate_gui = dlg.recreate_GUI(); + pending_language = dlg.pending_language(); + if (!need_recreate_gui) { + this->plater_->get_current_canvas3D()->force_set_focus(); #if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) + if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) #else - if (dlg.seq_top_layer_only_changed()) + if (dlg.seq_top_layer_only_changed()) #endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER - this->plater_->reload_print(); + this->plater_->reload_print(); #ifdef _WIN32 - if (is_editor()) { - if (app_config->get("associate_3mf") == "true") - associate_files(L"3mf"); - if (app_config->get("associate_stl") == "true") - associate_files(L"stl"); - if (app_config->get("associate_step") == "true") { - associate_files(L"step"); - associate_files(L"stp"); + if (is_editor()) { + if (app_config->get("associate_3mf") == "true") + associate_files(L"3mf"); + if (app_config->get("associate_stl") == "true") + associate_files(L"stl"); + if (app_config->get("associate_step") == "true") { + associate_files(L"step"); + associate_files(L"stp"); + } + associate_url(L"orcaslicer"); + } + else { + if (app_config->get("associate_gcode") == "true") + associate_files(L"gcode"); } - associate_url(L"orcaslicer"); - } - else { - if (app_config->get("associate_gcode") == "true") - associate_files(L"gcode"); - } #endif // _WIN32 + } } - // BBS - /* - if (app_layout_changed) { - // hide full main_sizer for mainFrame - mainframe->GetSizer()->Show(false); - mainframe->update_layout(); - mainframe->select_tab(size_t(0)); - }*/ + if (!pending_language.empty()) { + const std::string previous_language = app_config->get("language"); + app_config->set("language", pending_language); + if (!load_language(wxString::FromUTF8(pending_language), false)) { + app_config->set("language", previous_language); + if (this->plater_) + this->plater_->get_current_canvas3D()->force_set_focus(); + return; + } + } + + if (need_recreate_gui) + recreate_GUI(_L("Changing application language")); } bool GUI_App::has_unsaved_preset_changes() const diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index ae51add264..f89f583873 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -273,6 +273,7 @@ private: const wxLanguageInfo *m_language_info_system = nullptr; // Best translation language, provided by Windows or OSX, owned by wxWidgets. const wxLanguageInfo *m_language_info_best = nullptr; + wxString m_active_language_code; OpenGLManager m_opengl_mgr; std::unique_ptr m_removable_drive_manager; @@ -563,7 +564,7 @@ public: void preset_deleted_from_cloud(std::string setting_id); wxString filter_string(wxString str); - wxString current_language_code() const { return m_wxLocale->GetCanonicalName(); } + wxString current_language_code() const { return m_active_language_code.empty() && m_wxLocale ? m_wxLocale->GetCanonicalName() : m_active_language_code; } // Translate the language code to a code, for which Prusa Research maintains translations. Defaults to "en_US". wxString current_language_code_safe() const; bool is_localized() const { return m_wxLocale->GetLocale() != "English"; } diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 80b801a4c0..047aa2cc62 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -3145,15 +3145,7 @@ void MainFrame::init_menubar_as_editor() append_menu_item( parent_menu, wxID_ANY, _L("Preferences") + "\t" + ctrl + ",", "", [this](wxCommandEvent &) { - PreferencesDialog dlg(this); - dlg.ShowModal(); - plater()->get_current_canvas3D()->force_set_focus(); -#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -#else - if (dlg.seq_top_layer_only_changed()) -#endif - plater()->reload_print(); + wxGetApp().open_preferences(); }, "", nullptr, []() { return true; }, this, 1); //parent_menu->Insert(1, preference_item); @@ -3174,7 +3166,6 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent &) { // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit wxGetApp().open_preferences(); - plater()->get_current_canvas3D()->force_set_focus(); }, "", nullptr, []() { return true; }, this); //m_topbar->AddDropDownMenuItem(preference_item); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index e5afafad99..5c47e629c7 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -318,13 +318,10 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS m_current_language_selected = combobox->GetSelection(); if (m_current_language_selected >= 0 && m_current_language_selected < vlist.size()) { - app_config->set(param, vlist[m_current_language_selected]->CanonicalName.ToUTF8().data()); - - wxGetApp().load_language(vlist[m_current_language_selected]->CanonicalName, false); - Close(); - // Reparent(nullptr); - GetParent()->RemoveChild(this); - wxGetApp().recreate_GUI(_L("Changing application language")); + m_pending_language = vlist[m_current_language_selected]->CanonicalName.ToUTF8().data(); + m_recreate_GUI = true; + EndModal(wxID_OK); + return; } } diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 886f5f7cec..a097dccee2 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -43,10 +44,12 @@ protected: // bool m_settings_layout_changed {false}; bool m_seq_top_layer_only_changed{false}; bool m_recreate_GUI{false}; + std::string m_pending_language; public: bool seq_top_layer_only_changed() const { return m_seq_top_layer_only_changed; } bool recreate_GUI() const { return m_recreate_GUI; } + const std::string& pending_language() const { return m_pending_language; } void on_dpi_changed(const wxRect &suggested_rect) override; public: diff --git a/src/slic3r/GUI/Widgets/Label.cpp b/src/slic3r/GUI/Widgets/Label.cpp index 35a35c80d6..60a2a90a9e 100644 --- a/src/slic3r/GUI/Widgets/Label.cpp +++ b/src/slic3r/GUI/Widgets/Label.cpp @@ -5,6 +5,9 @@ #include #include #include +#ifdef __linux__ +#include +#endif wxFont Label::sysFont(int size, bool bold) @@ -58,27 +61,46 @@ wxFont Label::Body_10; wxFont Label::Body_9; wxFont Label::Body_8; +// Check if a font family is already available via fontconfig. +#ifdef __linux__ +static bool fc_font_available(const char *family_name) +{ + FcPattern *pat = FcPatternCreate(); + if (!pat) + return false; + FcPatternAddString(pat, FC_FAMILY, (const FcChar8 *) family_name); + FcResult res; + FcPattern *match = FcFontMatch(nullptr, pat, &res); + bool available = false; + if (match) { + FcChar8 *matched_family = nullptr; + if (FcPatternGetString(match, FC_FAMILY, 0, &matched_family) == FcResultMatch && matched_family) + available = (strcasecmp((const char *) matched_family, family_name) == 0); + FcPatternDestroy(match); + } + FcPatternDestroy(pat); + return available; +} +#endif + void Label::initSysFont() { #if defined(__linux__) || defined(_WIN32) - const std::string &resource_path = Slic3r::resources_dir(); - wxString font_path = wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Bold.ttf"); - bool result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of HarmonyOS_Sans_SC_Bold returns %1%")%result; - // printf("add font of HarmonyOS_Sans_SC_Bold returns %d\n", result); - font_path = wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Regular.ttf"); - result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of HarmonyOS_Sans_SC_Regular returns %1%")%result; - // printf("add font of HarmonyOS_Sans_SC_Regular returns %d\n", result); - // Adding NanumGothic Regular and Bold - font_path = wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Regular.ttf"); - result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of NanumGothic-Regular returns %1%")%result; - // printf("add font of NanumGothic-Regular returns %d\n", result); - font_path = wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Bold.ttf"); - result = wxFont::AddPrivateFont(font_path); - // BOOST_LOG_TRIVIAL(info) << boost::format("add font of NanumGothic-Bold returns %1%")%result; - // printf("add font of NanumGothic-Bold returns %d\n", result); + // On Linux, skip AddPrivateFont for fonts already known to fontconfig + // (e.g. installed system-wide in a Flatpak). Calling AddPrivateFont + // triggers a Pango crash in ensure_faces() on Pango >= 1.48 (GNOME 49+), + // because FcConfigAppFontAddFile invalidates Pango's cached font map. + bool load_fonts = true; +#ifdef __linux__ + load_fonts = !fc_font_available("HarmonyOS Sans SC") || !fc_font_available("NanumGothic"); +#endif + if (load_fonts) { + const std::string &resource_path = Slic3r::resources_dir(); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Bold.ttf")); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/HarmonyOS_Sans_SC_Regular.ttf")); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Regular.ttf")); + wxFont::AddPrivateFont(wxString::FromUTF8(resource_path + "/fonts/NanumGothic-Bold.ttf")); + } #endif Head_48 = Label::sysFont(48, true); Head_32 = Label::sysFont(32, true); From bfeccc7a55cef4e7c823e1388f7d5e510052136b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 16 Mar 2026 14:36:35 +0800 Subject: [PATCH 33/35] small tweak of the script to support Mac --- scripts/build_flatpak_with_docker.sh | 146 +++++++++++++----- .../io.github.orcaslicer.OrcaSlicer.yml | 7 +- 2 files changed, 113 insertions(+), 40 deletions(-) diff --git a/scripts/build_flatpak_with_docker.sh b/scripts/build_flatpak_with_docker.sh index 2ebf30a416..8e490f8f8b 100755 --- a/scripts/build_flatpak_with_docker.sh +++ b/scripts/build_flatpak_with_docker.sh @@ -10,9 +10,6 @@ # - Docker (or Podman with docker compatibility) # # The resulting .flatpak bundle is placed in the project root. -# A persistent Docker volume "flatpak-builder-cache" is used to cache -# downloaded sources across builds. Remove it with: -# docker volume rm flatpak-builder-cache set -euo pipefail @@ -24,8 +21,23 @@ ARCH="$(uname -m)" NO_DEBUG_INFO=false NO_PULL=false FORCE_CLEAN=true +PRIVILEGED=false CONTAINER_IMAGE="ghcr.io/flathub-infra/flatpak-github-actions:gnome-49" +normalize_arch() { + case "$1" in + arm64|aarch64) + echo "aarch64" + ;; + x86_64|amd64) + echo "x86_64" + ;; + *) + echo "$1" + ;; + esac +} + # ---------- parse args ---------- while [[ $# -gt 0 ]]; do case "$1" in @@ -37,16 +49,29 @@ while [[ $# -gt 0 ]]; do NO_PULL=true; shift ;; --keep-build) FORCE_CLEAN=false; shift ;; + --privileged) + PRIVILEGED=true; shift ;; --image) CONTAINER_IMAGE="$2"; shift 2 ;; -h|--help) - echo "Usage: $0 [--arch ] [--no-debug-info] [--no-pull] [--keep-build] [--image ]" + echo "Usage: $0 [--arch ] [--no-debug-info] [--no-pull] [--keep-build] [--privileged] [--image ]" exit 0 ;; *) echo "Unknown option: $1" >&2; exit 1 ;; esac done +ARCH="$(normalize_arch "$ARCH")" + +case "$ARCH" in + x86_64|aarch64) + ;; + *) + echo "Unsupported architecture: $ARCH. Supported: x86_64, aarch64" >&2 + exit 1 + ;; +esac + # ---------- version & commit ---------- cd "$PROJECT_ROOT" @@ -66,24 +91,34 @@ echo " Arch: ${ARCH}" echo " Image: ${CONTAINER_IMAGE}" echo " Bundle: ${BUNDLE_NAME}" echo " Debug info: $([ "$NO_DEBUG_INFO" = true ] && echo "disabled" || echo "enabled")" +echo " Privileged: $([ "$PRIVILEGED" = true ] && echo "enabled" || echo "disabled")" echo " ccache: enabled" echo "" # ---------- prepare manifest ---------- MANIFEST_SRC="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml" MANIFEST_DOCKER="scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml" -cp "$MANIFEST_SRC" "$MANIFEST_DOCKER" - # Ensure cleanup on exit (success or failure) trap 'rm -f "$PROJECT_ROOT/$MANIFEST_DOCKER"' EXIT -# Optionally strip debug info (matches CI behaviour for faster builds) -if [ "$NO_DEBUG_INFO" = true ]; then - sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' "$MANIFEST_DOCKER" -fi - -# Inject git commit hash (same sed as CI) -sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$GIT_COMMIT_HASH\"|}" "$MANIFEST_DOCKER" +# Build Docker-specific manifest with customizations (piped to avoid sed -i portability) +{ + if [ "$NO_DEBUG_INFO" = true ]; then + sed '/^build-options:/a\ + no-debuginfo: true\ + strip: true +' + else + cat + fi +} < "$MANIFEST_SRC" | \ +sed "/name: OrcaSlicer/{ + n + s|^\([[:space:]]*\)buildsystem: simple|\1buildsystem: simple\\ +\1build-options:\\ +\1 env:\\ +\1 git_commit_hash: \"$GIT_COMMIT_HASH\"| +}" > "$MANIFEST_DOCKER" # ---------- run build in Docker ---------- DOCKER="${DOCKER:-docker}" @@ -98,43 +133,82 @@ if [ "$FORCE_CLEAN" = true ]; then FORCE_CLEAN_FLAG="--force-clean" fi +DOCKER_RUN_ARGS=(run --rm) +if [ "$PRIVILEGED" = true ]; then + DOCKER_RUN_ARGS+=(--privileged) +fi + # Pass build parameters as env vars so the inner script doesn't need # variable expansion from the outer shell (avoids quoting issues). echo "=== Starting Flatpak build inside container ===" -"$DOCKER" run --rm --privileged \ +"$DOCKER" "${DOCKER_RUN_ARGS[@]}" \ -v "$PROJECT_ROOT":/src:Z \ - -v flatpak-builder-cache:/src/.flatpak-builder \ -w /src \ -e "BUILD_ARCH=$ARCH" \ -e "BUNDLE_NAME=$BUNDLE_NAME" \ -e "FORCE_CLEAN_FLAG=$FORCE_CLEAN_FLAG" \ "$CONTAINER_IMAGE" \ - bash -c ' - set -euo pipefail + bash -s <<'EOF' +set -euo pipefail - # Install required SDK extensions (not pre-installed in the container image) - flatpak install -y --noninteractive flathub \ - org.freedesktop.Sdk.Extension.llvm21//25.08 || true +format_duration() { + local total_seconds="$1" + local hours=$((total_seconds / 3600)) + local minutes=$(((total_seconds % 3600) / 60)) + local seconds=$((total_seconds % 60)) - flatpak-builder $FORCE_CLEAN_FLAG \ - --ccache \ - --disable-rofiles-fuse \ - --arch="$BUILD_ARCH" \ - --repo=flatpak-repo \ - flatpak-build \ - scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml + printf "%02d:%02d:%02d" "$hours" "$minutes" "$seconds" +} - flatpak build-bundle \ - --arch="$BUILD_ARCH" \ - flatpak-repo \ - "$BUNDLE_NAME" \ - io.github.orcaslicer.OrcaSlicer +overall_start=$(date +%s) +install_start=$overall_start - # Fix ownership so output files are not root-owned on the host - chown "$(stat -c %u:%g /src)" "$BUNDLE_NAME" flatpak-build flatpak-repo +# Install required SDK extensions (not pre-installed in the container image) +flatpak install -y --noninteractive --arch="$BUILD_ARCH" flathub \ + org.gnome.Platform//49 \ + org.gnome.Sdk//49 \ + org.freedesktop.Sdk.Extension.llvm21//25.08 || true - echo "=== Build complete ===" - ' +install_end=$(date +%s) +install_duration=$((install_end - install_start)) + +builder_start=$(date +%s) +flatpak-builder $FORCE_CLEAN_FLAG \ + --verbose \ + --ccache \ + --disable-rofiles-fuse \ + --state-dir=.flatpak-builder \ + --arch="$BUILD_ARCH" \ + --repo=flatpak-repo \ + flatpak-build \ + scripts/flatpak/io.github.orcaslicer.OrcaSlicer.docker.yml +builder_end=$(date +%s) +builder_duration=$((builder_end - builder_start)) + +bundle_start=$(date +%s) +flatpak build-bundle \ + --arch="$BUILD_ARCH" \ + flatpak-repo \ + "$BUNDLE_NAME" \ + io.github.orcaslicer.OrcaSlicer +bundle_end=$(date +%s) +bundle_duration=$((bundle_end - bundle_start)) + +# Fix ownership so output files are not root-owned on the host +owner="$(stat -c %u:%g /src)" +chown -R "$owner" .flatpak-builder flatpak-build flatpak-repo "$BUNDLE_NAME" 2>/dev/null || true + +overall_end=$(date +%s) +overall_duration=$((overall_end - overall_start)) + +echo "" +echo "=== Build complete ===" +echo "=== Build Stats ===" +echo " Runtime install: $(format_duration "$install_duration")" +echo " flatpak-builder: $(format_duration "$builder_duration")" +echo " Bundle export: $(format_duration "$bundle_duration")" +echo " Overall: $(format_duration "$overall_duration")" +EOF echo "" echo "=== Flatpak bundle ready ===" diff --git a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml index 6a06e136c3..814636e142 100644 --- a/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/io.github.orcaslicer.OrcaSlicer.yml @@ -117,10 +117,9 @@ modules: - -DCMAKE_SHARED_LINKER_FLAGS=-fuse-ld=lld - -DCMAKE_MODULE_LINKER_FLAGS=-fuse-ld=lld sources: - - type: git - url: https://github.com/SoftFever/Orca-deps-wxWidgets - tag: orca-3.1.5-1 - commit: 139e4f2a62a9d1c40bdcf36523d94a517b14ca79 + - type: archive + url: https://github.com/SoftFever/Orca-deps-wxWidgets/archive/refs/tags/orca-3.1.5-1.tar.gz + sha256: 1dc9d3865d899cb71c27a7e549aa5491e832ef6e81a7b6653ccb11f9c37fa99d # OrcaSlicer C++ dependencies (built offline with pre-downloaded archives) - name: orca_deps From ccbaca00335f87916b096ade03ccf3c829745bc8 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 16 Mar 2026 15:52:22 +0800 Subject: [PATCH 34/35] Fix PR comment posting for fork contributors by splitting into two workflows The check_profiles workflow used gh pr comment directly, which fails for fork PRs due to read-only GITHUB_TOKEN. Split into artifact upload + workflow_run pattern so comments post with proper write permissions. --- .github/workflows/check_profiles.yml | 25 ++++++----- .github/workflows/check_profiles_comment.yml | 46 ++++++++++++++++++++ 2 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/check_profiles_comment.yml diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index 9da59f43a7..68b27ba291 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -15,12 +15,11 @@ on: default: 'warning' permissions: - pull-requests: write contents: read jobs: - check_translation: + check_profiles: name: Check profiles runs-on: ubuntu-24.04 steps: @@ -62,11 +61,11 @@ jobs: ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 2>&1 | tee ${{ runner.temp }}/validate_custom.log exit ${PIPESTATUS[0]} - - name: Post error comment on PR + - name: Prepare comment artifact if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} - env: - GH_TOKEN: ${{ github.token }} run: | + mkdir -p ${{ runner.temp }}/profile-check-results + { echo "## :x: Profile Validation Errors" echo "" @@ -100,16 +99,20 @@ jobs: echo "---" echo "*Please fix the above errors and push a new commit.*" - } > ${{ runner.temp }}/pr_comment.md + } > ${{ runner.temp }}/profile-check-results/pr_comment.md - gh pr comment ${{ github.event.pull_request.number }} --body-file ${{ runner.temp }}/pr_comment.md + echo "${{ github.event.pull_request.number }}" > ${{ runner.temp }}/profile-check-results/pr_number.txt + + - name: Upload comment artifact + if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} + uses: actions/upload-artifact@v4 + with: + name: profile-check-results + path: ${{ runner.temp }}/profile-check-results/ + retention-days: 1 - name: Fail if any check failed if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} run: | echo "One or more profile checks failed. See above for details." exit 1 - - - - diff --git a/.github/workflows/check_profiles_comment.yml b/.github/workflows/check_profiles_comment.yml new file mode 100644 index 0000000000..514eeed384 --- /dev/null +++ b/.github/workflows/check_profiles_comment.yml @@ -0,0 +1,46 @@ +name: Post profile check comment + +# NOTE: The workflow name in the 'workflows' filter below must match the 'name' +# field in check_profiles.yml exactly. If that name changes, update it here too. +on: + workflow_run: + workflows: ["Check profiles"] + types: + - completed + +permissions: + pull-requests: write + +jobs: + post_comment: + name: Post PR comment + runs-on: ubuntu-24.04 + if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'failure' }} + steps: + - name: Download artifact + id: download + uses: actions/download-artifact@v4 + continue-on-error: true + with: + name: profile-check-results + run-id: ${{ github.event.workflow_run.id }} + github-token: ${{ github.token }} + + - name: Post comment on PR + if: ${{ steps.download.outcome == 'success' }} + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + run: | + if [ ! -f pr_number.txt ] || [ ! -f pr_comment.md ]; then + echo "No comment artifact found, skipping." + exit 0 + fi + + PR_NUMBER=$(cat pr_number.txt) + if ! [[ "$PR_NUMBER" =~ ^[0-9]+$ ]]; then + echo "Invalid PR number: $PR_NUMBER" + exit 1 + fi + + gh pr comment "$PR_NUMBER" --body-file pr_comment.md From ba18b67e12c7586eb8804d005b19ab4b1c3cf796 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 16 Mar 2026 18:56:17 +0800 Subject: [PATCH 35/35] small tweak --- src/libslic3r/GCode/ToolOrdering.cpp | 5 ++--- src/libslic3r/GCode/ToolOrdering.hpp | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index d4784c5278..1dd7cc8da2 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -381,7 +381,6 @@ void ToolOrdering::sort_and_build_data(const PrintObject& object , unsigned int // (print->config().print_sequence == PrintSequence::ByObject is true). ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extruder, bool prime_multi_material) { - m_wipe_tower_type = object.print()->wipe_tower_type(); m_print_full_config = &object.print()->full_print_config(); m_print_object_ptr = &object; m_print = const_cast(object.print()); @@ -427,7 +426,6 @@ ToolOrdering::ToolOrdering(const PrintObject &object, unsigned int first_extrude // (print->config().print_sequence == PrintSequence::ByObject is false). ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool prime_multi_material) { - m_wipe_tower_type = print.wipe_tower_type(); m_print_full_config = &print.full_print_config(); m_print = const_cast(&print); // for update the context of print m_print_config_ptr = &print.config(); @@ -1222,12 +1220,13 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first using FlushMatrix = std::vector>; size_t nozzle_nums = print_config->nozzle_diameter.values.size(); + const auto wipe_tower_type = m_print->wipe_tower_type(); std::vector nozzle_flush_mtx; for (size_t nozzle_id = 0; nozzle_id < nozzle_nums; ++nozzle_id) { std::vector flush_matrix(cast(get_flush_volumes_matrix(print_config->flush_volumes_matrix.values, nozzle_id, nozzle_nums))); std::vector> wipe_volumes; - if ((print_config->purge_in_prime_tower && print_config->single_extruder_multi_material) || m_wipe_tower_type == WipeTowerType::Type1) { + if ((print_config->purge_in_prime_tower && print_config->single_extruder_multi_material) || wipe_tower_type == WipeTowerType::Type1) { for (unsigned int i = 0; i < number_of_extruders; ++i) wipe_volumes.push_back(std::vector(flush_matrix.begin() + i * number_of_extruders, flush_matrix.begin() + (i + 1) * number_of_extruders)); } else { diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index fdac3be98a..f584b20707 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -279,7 +279,6 @@ private: const PrintObject* m_print_object_ptr = nullptr; Print* m_print; bool m_sorted = false; - WipeTowerType m_wipe_tower_type = WipeTowerType::Type1; FilamentChangeStats m_stats_by_single_extruder; FilamentChangeStats m_stats_by_multi_extruder_curr;