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/67] 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 zcmbTd1yo$!(jeLpXq+_e&@}GuF2RDk26uOYdm4w}(6|KGpuycC5CQ>$Yp?(bF4N!r z?|;|KTl3zmH@(*BV|8lRuG&?n?8K<6%44CEq5}W`EJX!bP5A!vKN~6#{x3ESMa_4vZK8KsvM6*7wp^Q5Lpzb!IoWa<#B#_j7iGLjwS!5`J#xmX6k5 zU<+$odlxat`IlY@*xpJEqQ|Ggsp2MMZD+6G?_sUwuc~e7?`SDx1(6U3i~0$}5jb0W znS=eDom@PH{lp;u!Yd3v{^v3W1pF@$FGn$m)IS4)^;OitGOixhU?FxcHcL)UF0gswhl87kjZ;vVk6)Na0Q~PC1U{UHm5s2btlYl`gP(~(?7Y0( zggH2TeSO(|dDvY&Y&p1ugoHRaxjDGG+29atp6^|}%>CG0JZb(LgRHfurH8$nm%XbC z_#ces7Ovi2Vh}i~|1}3^xBsAZ@%%TR;2h)dGk4?QV(0v4PX7Y5viuL6o41G4zXrFm zFTWC-1_iol4n%17K-X50LZ+zfn()=?UH(?nMYjZDG4{cXhr~j6e`hSxQ=H_J= z05j^@yI8sUdNTb_4_M2Zds&M?;8NpbQuvI$w)n6p_5 z@d;T8SPEHk^IHD*^Rlj%-v3DUzn{1I|M|R{hdo@i%$@$P@%*E3|11e%1$$4pu-^Y$ zBebmD|9#|S5B}FG5H`2`XLXA~EdLR!wH4&wm+k+rIq+X-eeJB_NdG^?{a;|7t~Or2 z<{s8kws3C!AD0scoOq6Z^zgst!SVl`;=k_wPdfYG;BZ6m&*6Ve5d7pnM$Fm;Zn-?* zChC-HXcqv82v(Gp()NR$KE40!t>{ApeD)a{2waUTx6dw0&ahHcK&(_kR7p=y=i61! zzEe3TTMzu;3GsPpyh&U>=*cX5?9nS-Y2mKA47kY;P=yiuoII_{oPcdcjP`0Te`pTW zd%s#|c1@qPdLLJ~!CauT#}*!39jKe$hI(InX`r(XIc%G-)v=$s`tAD?^@3mUP**?L z)^*-y#-D2;USQc`h=5coZobGNg+F&Ardv&rvs_38{PTn^8+jLqJrh|TBPcA6glcCI zQA9O&^AyrRjFd@zOrva52Or9i0udQYVRjwH zQAJb(&(Fc_{-?|)-5wo^Qz=@BOl4Ufu}oO*habw%KiCjQ)0Y)x&t^{d_xG1l=`OJ7 z)rmgzxISk{Jgo*lxIQ%QdBmiBRF+%V{9c>u_aL$!HXC&F#r@?hsFb(Ro{UwGr6z+V z5|r#Iz400h2@SjRNCY7AnD+=G9K_e1Ht4gva~G5xLo_F{3RrP+0f<|NzlmiGsiT2c zcZirkoQ4p$(4zCNtrV)Ns&0XSP;-UD73|R~yeYLr9Lu<2kC=n}C&r#%)jhbG9HxEM zOZ7X>t|4TJNr~=PBPya7L#cwIqJ90(21t1^y|S4H|Y>e5sdF zB09Lb3!XqziEnq`p=USkh?jUC?L~6U)}pEl{0{o##Xp?)Q{=X?;F0MOW#fXPJ@5_} z8yg!(S~4C%;*X5PAFKUHd8+sLDyw0rW;0n{T7P5)IR9kLl=m5U$s$<*%s3H{3>Yzi zwsNQl)JS_dlJSk=q~YHbYhV{3=hf}qTVjdl9f@FT1^WW1+s&B?ugZ|=W84cLWyqsD zIXQV3$>6ntp132ba9Jb<5xd#Tb5P)KTZu^5hwGc2%e_f`_RK70`gV^yZUjjvTb)S& z(%_>oFyHLpQp@k=pa%mJjM6uEZUU-{m+% zW1BBkVcWOd4@?DoNLYZWcsO;NmQ*iD&m*QU?;bN;AAwHJuG>eS^8242ZfpUP#K~9a zNzWo7*Z~3|qzpH~q=UaPTif`*s+4C<+e8g=^K=FxCgNd2pH%>%M^>>VKQM33He^=4 zZud8?vHUKEGcSr>KZ*9mr{UU=krj*l5d+BW$HTaD%8xdl@_k=3(TP4y@!Zy)2T=L2 zpKLxqJphQQVcpPm=7OF;T^wG(F3kOOMQ812cSOi#1l$I^tlyY%73`dK2k-y@43X_& zK0Bv?Cq$bC=#dv56Ut}jxSbuE;rjSQT=CY6vi87Ra>@fTL2M)ad3*#CfTS#(^L9DV zVT&-LcYbI$XFp})5$w%s?kSh*Ox~>W`t7wG>;Gi|M8bFgnCE_@BGGR%*|!@~jS2C*l z>={rl$R~vA#ZV9`EG%`H3sJh!V>gZSh(3#hP*7Z`-wKxtlZ0UbIfp-7(k>TU#;_QT zEs^2MV$Tflv<__%EiAg`@;ClJ#>QF}8SFO8AJ z^7z~R|B~7?R|Zq5jV1eohMd}r>*j`_!Nd)QY*Mm^aXJxdA{3rT%#BlkRGo)DdQv8fj^=)8muvq z$7d%efSOnc4ivS%>z)}^QXsoxoUO#!Xb80OvWN0A-ZmsTx$*e7SBPEjtxf2?wHlbd zxUYJc8Pom^HNPn4tH0IaoPCnz<_cjX^4TA+ilUd&m(di|!-udw^6YHSnXoVgvzcren?y6KeR3X8 zaOel>VVEbB%R@;0~hgLY~h8mw20vg#m5 z3?72H+2zIq^S??eBkQ$iBN9wh(%`9Tk5jQr%|| zk$4=G2psC0eM*sd{P5CWlJsuy`I(ZR-)7mhtL}1h&lu^c=(YHbysvM4FN19z1xFr( zdb|al*>^MqVv?}!u|L+oUnP$-rUGurc^Jo#fDm=m%^|~A0J#n-SeT?CN6~RPTot7k zc*lfFj)l9PC<-FrB;k~%p?jHuAg`Al{D-J5JCy8bw(M?zHcRVaMxw)u&md>;)G$#v zj3=jDN(rs^l4W-L`iw&P6CNP8k%&c^o<-SKD~!C;jS&O~D1@HoQJjA9U_Or1)?|%Q ziuI09+rd*91)|dWkOUDAl>+esR7aw`6SEKoQLP#xys^E#lU*a&umM3Emcn_|2mic@ zE@sa1e642Ap(+tY=Tg*W!r9vq5?4~n<*D6AUQHozOWPJjd|@eZkGH(BF?i5@aMh|; zy~mI_xtG^!f3AV*%P%0H3->yhc`v|lrUiLilh7ngv5HKgmSq^Mu$+|klSTNg zRXXI*Y8VX=BJ(=j<;uN??;D$-K%2TWAYi+poF7N-tQ&lk{q2rNhB+8YB!0&QgOTsd z@3ElD5@&t2=u>P?Se1WkTp$sfdC9*r+zUu{|K?I?(iQLP3^N-hGQ*n@qA8>N^5x5| z#LLACIaw+izW_hny`*0tA&f&VY_+%dB*EcTk;O9_k|S*IBWB;>@u~a9#j*pGL&ZtI z-K~>^@IfQ93_7Z( znj#t%G$1!U(W{P2J;F4JZ}+=^)EW0gog%a!$&o`vboq@LS>PvZ05 zKPN*rUq2VU+)LTPO>B2ZM~6Nu5fq=(>_mNR3e^RWfP>FYDtdL`Ubhb;4vlb>LZ=Hg_nE6dIj*c*GohJ<(=jx! zu3wI@^>!m^f1hL9@s7yteE>#)m`sg>MRZ9Tmn#W|POQKJ0BFgbxB2~y{k~^(kwq_k z=g`8IS#xw#K zjlGt3lr(X6cMSD{5~|A3=j<>ZOH2Oh`81wr+2yr0q=Wciee)jT?e+C1d8w_h2jZ7& zOO^N`SE#}x$qSsJIfM!wo6MSstu5G9k5V6oDvXe*UV(QIeM;i#(SEbTdXl?5M1Ze; z1W&&)VxjB~_vAt4b{BdL_m(7O2PmcurFe`Dy5ddSu5iVJFS@fR0&z395vRA*wjG`s z^SkEECEg&plR<3nL^jq2dVTM3gO_-)g8h01B=T;SvkDZHWfuyat+JfWWwx@1-2jXh zVxGW8MDwbr^n-B_1>p6hdV8~!5aRf@93A(YA;!nHZ*=o>n^aus8^?GqQ$m?K@?b06 zeH}IlgN#Dz=#vKxT^7_xVhCtANM$wL#!!CUEAA{I(-X%_DLa0FlcBU`0zjIYp+iy*t0tznj@^3h&6N;1K+dS;g3Em>k~K>Srh&%y02>Ur=i(dIbZuTy*Z zmPCzJ$x18NSM_5+dmL!b$7iUD;IQ5Qjb;dfj+KUiSUYRJJd zYkVzT=(n^KJ$5!p_*s*9W{Z&2ts>wT_uRFkDXNaNR)Y|qP1)yx4rRXE{?m|yRvFuw zi6=yl2?b&=h_e;TyH`$|UXnj&DLE#>)ql+b#-Mgi>(r1fyD;rn1?F&4-Y z=PK?^iAFU2_ey;Q{bK?#DO4lcOx)_Pbm^3YhdSxb?413CQt9^Jop8xO%)WdJmW*?6 zxPGrlPh^+X!sM?&(oqRfXepn&SwE^DEYYSYA^>$NhH3~&7)#&(_Fxakrgoc%i1fpi z%Wi-TZ4M6f4V}N}e|`$IPC$xfL}HBb1<->G@UqC;ii=AA|T~;F0A*`%pNmbK6|Z z8nXs1+8%oJ>N9!SMxZdBXmiO0-YjL|;o0~_hp4=`%(+&!R!z-%^9bHQhgt(O*Zeu< z{a*YsPNb#O)FS{@5*Z~sOMop3nf6F3?z=|B6g2nYPjZm}?N^@LKidnw=HfQF&m*ET z?^B8$*QlD|L-^xx^}*V@EJ>nN@o%ME)!8|mRPGO<9~9~8`-lfOAmDbTa}?GCh@B%? z1H|$Q*~$XU;6ABI!OxPdk;Y7|WKdh4wYchC7I92_EEupiL5X84yV#6o>F!LSxTnaHKt|IS~OP{pvFrrO)lXi*JM23 zL>kfTBc_5%!l-@RXl_wh4u z+hpdsWo*;UDVmelP7laN3)62jWOvqQC;G>8&-c5uf1E6MMr-sM3MGaB2|3mm)Wl+j zEn@Z@n6~+llo{~6Qqg>TeccacOj=%Ytg3F^Y;94VIL(CfEckPoef3ZaVTlU&MoxdT zQzDvZqmF6>TRo~AvcaiNztu}}rY9KWGA(Sm zaPeD-z>%0wnTN}aC5ucLah19O&aoonE2sJmxD|lMwr(Nk;!xCFBcrSteo1`JT<6X8 zZn3qVpikFfs76M)`n9@nze{TMb9>-kldAHFL(71du*^cMg3Q1NiAxO)T`lPe5;$DD z-w|&40*Qr_Y!@)b9Ucyi^Y%HN&cD%351SyyQ9vzplO0V^=>=1AB{8pefJ{>=td-Ng z;OZpSU!@ul1kVghS-jSJzlmQ6+WTqH@%g89doL#wjRAWk$0B|meL=!o2{R$8XqQ#5 zEL;mGb;)jKY-*6E1;{#*ktHQ<)4Xn3Q_EaHb;x0K%v?B6e?BH%q=^XNT}TiRt3$0F zg^YlL@}SSUf7prbdw#OLyGv}~JRql^XrDG7&!wAKas9oAs-f4n{<`SUR5}YK;0Az5 ze~R?s!-E~^SGK}p`m>har!(<*Hhnv6Fin;_PEYH%muCY%*G4=IPh+fIH+u zX2KiCT)p_w$>SjeMB2UE(XfSmM{{?OEZ=SPe@I)nnY~W_#k?OezbTzul-l$a@DY zoShnt2^CHKs*u)JYMR|Mxn#(?KD&4^B%qgq`?0I4@tWR^%x%T$V4y*-fp(uAzrS9| zTFKDK_kb`fe*WEDwsvj75*%thmrCc^;i?o3u`dJ=G-}dBUAsdzVr2mCL|typ1vjX^ zcz9P38!45{hbuIh3MN&MRG7_En?M|?WmW2A!A)~Ot6|*pL^Ex|Ar+bW_FMC~+03Lhwe9rJ04)|F2z*RQSOA;pe<)1TG}r zf8IrOYx#=l4tV=O8qqM}it?e8B7K7AlaY#6t?x;{ShU3&)@zhV$x`{C6E!lj>)}P7 zHGo;ff>=AcI65?fcU4p=i`ELL*be$yD!h|;u%(eltPD?FFD&9q3yt7OkUzsNOeu2h zu%j4%kpirq$h`2&0y}HXO6Sa&lMk7bA(`iTeEVaJ(<)(ga8%u~*^m^qo$`p`&XN#U z_p@zolM~{w;R#&~vpyymDdtAMPS*l$8?(Ywc0`h}C2N0*tpF(+RO!1I?`x^&r&Ebk zO;}HZ8Lp$xX^1(&D63i2SA;uc^&R603!re!U4b{o3b`)%(H@avSCqaT^BKsA@Fr#P zf_S*N>%!xiOW*cQingsO>$Q z5CaSb1AC6lTw_be4{O;+5QRsB)YYps7=M2>esR`jmUh2(N)5G65%vSvx|9GosXrBE zZHd;T=C&(*5cWjmqpOL)NYTBuk1bUFAdTs{7GGmpF(DSE&L!GAPV6t7T?$X9%I)Vn zXl0x#gFG#eEEcq-`Mz&+mfD@Fm#g2^;FLA?aQ_a&0rBOic4-vzYLW@<7n33uCZyTGO!*o#R?hCt7)T6jWB> zm!{k;@W-uBYEB6-c;N2LrGNVdW{D>CNAzL41Wxj|42b%WSC$}qFxTqe=U>b>Z|Jql zX_GdiSq?=8wqZecQt18H>Z|n$n~nJxsxS2trs2G;ijNoVWJZqdW)$ z94mAIAN98pw$~|nWwcQ}@$0G7q3lD@@)%ra-O>~`r|gvr2alaBhAK=| z&}gpmoWmw-Tu(cz$re1cAKKbNa9Qt4)J^SznSAd*KK?m)Mz|yW*r}!sO&PW}Ia@^d zHf(i6NPcLvC0l+3FjgRl`cjVcmlHkycX=Dc92_S+q~89Jb@Nb9SzP<->Ar&#<@F1u zW$z4>xEp&g6hxy*IX46hZb{SdR`N2jWpyiMb&DPpR2{WgVy`u#fmjDsr_qc+L%+uy zVWq)6cAM*u?pT&O7HTlv_a>4002(cEk3}4nwHH;-o1`IF zPBNlq8GX_ib7cJsFyqc1Fy3$7jKIlb`;3FqI?T*>FUhnZB4^%fmNkI#>GtCya@x6* zQ~0BDPoqZ<;Dx^2NwD@3>8S;~F*}4jIegUTvrjkSXr96XWsUo`CWrgai^lJ&7INXf z!Zq%mWUjq--=`v?s*^Smga#^43FutcqCkkc)#>!G$~VS`BwYM-3QUpEVEy!`@bA?i z#GLXsGidN6k=+X6SS2XIy;oZOJJC`r?$uW0$GJR1J_Vl*M}32^FyZ8TSZkF6h*`ON z(^5wHjo!AfkF425gEN)2oc>M-`eR_~4ZbRUDlKIz*NXW~cQnR0#~$7i1-sCv`LDRY z4vVPJE@p{5=`uFuoQ$h3dY@Hgq4<6Hph;P~ho(254Ib7W&;*~NR|s4KtJct>a+jpx z-i_a%ucN=qOfQeW@)z@7+xLxsMO&#G^bnHAGXlg16T`iN!sFe5!qC>-&BI&3&DmQ2 z_iOC@r?C(2@SMLgJ)TDF`ylKYc3H{zgq=m{WL%9*4VoMEn0iniR;}5)2!gP0{^>s! zDedHI0 z2Z)xMGQqtjVQ~WEg>c6=bx5Wa6<+^rYQebd@MFuyAx$zsvwSlqdu=~s8d0Idqx2vY zC+g;?wLoM%u=KL;I^Z>5gQF)jHC1g3?jkI}lMt&A0uc`rr(=wHT89PRU#oMVaHlOKB>f=@_0hsW z_c-GY##ABucF7bAh9w;roK$*i>yyvili2{GTrJ?={)vu~Q*yqvYHj0^aqMz4h=LQYLs4uZywV7!3?FmU>a(5S*7ZMryoAc>WuqzaY>vI{<^HD_pMf0 zT6K6fzh$>|A%X`@EcAjXA8ofs<>lK$&e>NK8L+7{5=yA$WOYDls)=8RfYhL~wGJ9* zw8)5vAaV+-EqKfuXC0BcW9j7Nv?+Fe7ufZCfT5wc*R&A0N{-*k$$ll|cClUNz+&?@ z9&2?}?u zWKp?rQ4t0?0alejT7Tx|T_>QGduUjz<6Qj^0*=Kio?69Z&7`!UwQrxXq@6fx{8Q-7 zrid`$S$u+^UpT;@?V0niA6k{aZDlR8NtD<^m*Y&e3t=_&Z&~6-C~F z!L0}~ADs%Rp|%_mI5Kg;`o;F7pz%6s89L+ z=xXABX>*prtrUWEym`B%%0Y5Y!|QqTq2)&n`fL}eFWU@mfuHBp0TL4419Fd%kAh2~ z<-huHi8Z!&C~O6e#?g7kt}!};@`VQ(Qv#|6MeT%$qy$t3`7RTVXI|NUGHF&+u%x~q zji9XVV=h--%N=oc(T9Ms!e2Wdhpa;H>SG%FkSmQ^HS%EO2xd+$E`;p7H9#=WJ_7^X z9ttUnL+SaOt_**uKnH&6#SvK0TJhbVbCu*Oob?O`Vu#}JJ$!Xoqyd$jt{}e8;hzX6 z;m*RVGwujy$*fnzL?I4kjdftsjAG@{ALM4+^`0}PnjA*tlJ)wDWF#vnEZoPbpu5mR zaI)@8Nv#SOaCrBvjZg2-G~`Ad%zc(QG!WA11f_rpn7H(0ao6CY9hsr&t# z9@=by2g;{p0O6IucE@4DoMhJGptCezfk zm+7-w+1evA9cYoK93~3vC#vL~)*&gTjqz5d_Q|C{3Z|1qhgYz0xt4FhA0NL}FXBqP z)W2ZaG?V1}J-WlD)Fc6#xLTX*>tZMCKZbXb#1fCZn7>AMnlFoX6CP|?cj2&*nd_d` zx~)N%JDp(XofTg9|F;dko#GL!GQKDYjO=8UEOd5rLzBCST8$(Ed) zvO<$C1~u<-zKa0YPgd1xycx~@5IG#Y81wZ$CRAs`vgKD}%OW*@s|mB&VSwn>A09JK zxKgw_zm~ z%@*QmSRDv@b?=6?)WoBB{}k%Zi;l^nr&!Hm;s=E%1Tcg`RyYy3-MA&>7Cyfr3EEvD zkmW<3u_0T;MBkiPtX^JQkw(?j<2AtQN_G}= zYZDCcFtz3B-c~rT$n@{>>MDzfzEx^ODIPt#ptvyZ2w6NMoz9Qa+)#}Y5JJ^Hn@)Zf z>W?&r)408_s_&yB2E`&o=aJajX4XfLSxJs7+=I%+(cuT?&-+Ev}6m2 z8%ETtGiKqMDK*Z<4^E?4%t#+Q0x?;K5?7nYq`@oZgSAF&ZZFR!qR+bvV=_s>Edy0l zyJ-L*Hv`(YS;=i}p7&Kqr=2k)mi5g8jbj1>ye=lJAb`3>o;4~mFja)IJVz-(6eG}l zZ*8Vjud4_1$CHWVBpF9RBMlR?MN>a2Drg}As%sll*s1C)9~s5h?2=XrqNCMzRI``d zxIrzwy8^#Y(^9f<{f-u=0po*b7TP^++l+HL2$6*)F9Od`htZ>yAMrvXwOcoBDb;<; z0PjKL<}*gCLw)x>3PsG~!jQN<@(=P4?Oqq$#C`C3wWb6kjsg`j(2ICJ6hsCuL0~=s z)a8`qZY?N;#Itv^`{QtB~Cf+nsGtfo2xcKCRBD}RviAqzf zPy9M--`%;;LFvPoh4fgE7&Iax5y0e9e?AtvKnU?S_u$cq?1FTCbI9nMbb?M@NbEMF zB9jb+Dc1w9+1xbLQ%iHyW2UfzvKI-HiMosqK>e{I(lDtGx|dMys)V6k%NkE&O5!rKKO-?kzi|f6p9gICTI|;*GRaCt0|ji{}SjXEt_sM=UzT?0G~T zS)oTeb>+dkJ$ij#tBGFI!i%0qLWu54PEF&U_pj zXm6i}SBpPsDhUef^0Gcf{uLqE9NneSzf!Rt{2S9EjJ#Fm!`l(st>-3WOww8RmB~A~ zi8~6Gl@Fvqrs?{Lh>QUQOjQ=*6qC=KBF%yd`fonElXZyaspdhgcGJH4P>{|DimNv8 zsY-FvsL-blG|t*}t1=TCsc8$ zun@KDY^%6Zm;}oWmZo2U6|V@SC5nHh)I=TFoOROt@yP3t3qKNTVP+qp0FcT^f2um| z#BLr3-kT%KeTRWFjMOd_BSEslVOQtKwnLGeWpeLQw4RE>V2-!eYFiC03^@b(;e3H$ zPs-|5C;RT2WC5vJv?(^zCrz~_AE^IhRJ{jxwgvxc@|~?aAsQmcqzDb+X^yBGweKT; z0&)_2##`e~KaIo!5#f>R@BBW#uCEGlF}D4YN70$Jw@Gb`{*t!k0_kyzjE(Lby0w+P zgn8AiDszjg^NY7D)!i8t-K{ptB?+g47zoCiN3N+5Jz-0Ynm=VjbG?)J-GN1n_PJM) z>Ti0RWrUM_#yt<>DEfg=63)tY*HuF2)na=?Oqti7Ct14!l}Pvagm{WMfDv@ zvg7Jl_bUEuHW_I)7{PA!R6GymoVD4VhO~FV>7nfZ={jsku0KHz;Nah zep8%;INcJ3qET8-KqC0eanLTE#!Pg12C>n&cBHZ|7C}4-_0xF(rmDxXh+Ib2yh|H6 zXtW*IC5)gfZ(-p}5*>7s<1)75+3ynSw5C=?DwPo3$%~SQR z;Z5JGi5Fq&F-fX-eKOv|ufELs2urJ2gN?i{EL8L4&B8KBRr)alo9fWt9ZsQ%?9AdA zzOI$m*oASH_Iw|_bdtc#nxfBAwauE%TwY(7TIJ{a>CAtS*8N3%Hv9PIYgQ#=vC<;9ejQRwCRWIi0AmJ>;5lyLiooZ-gmir+x zku{-;inge_aL78+S;NaFm+fH%I@f}SS;>*#u`R{xQob?G^osaX+LF?@oZzqBXzN42 zijurX#XsiWeD&ex$b9=6c@Trg=XAlql$8+P{sHg79A28h!QnD<^sJ8G2o#r>z=U#v zlQ$hW5lG;TeCUZuN$~ia!nn&1E!8C)-tX0tm;1NRIfi9kcBMbN{}*l5&Egvg3kLjH zF|y%f0|K|zu=CWvX{SxCauZ$Ew6s`sbAj{6MODKR7o6YXuc%11fpbbY^E65blIdjJ zarVxZo)}+i$h2b&GVv`S7a_zR%7>H z-1C%@8e+KX^XFnU-V+SZ>pD;R`Jpc*aBW|vPi85X>$4u*9u+(*u5||xE&M<-z0&E$ z(W^HeetHsflN%Sol^*&j;_D9Y$RtLK8+KQmLOc!0Lrz0J!d8+>xe6B5wr4@_-sdAZ zRc4Lgv@yojFx$dFqzKF$#{Bed(INNGKhW;kdbHldHt`GsAZ_x+B`Y)a~e~jhn2m1C-@t``e_Jd(qADyH4G%Z3?*$HggndawPu`ex|}a1w9#}+t9r!W>n}tUZS(zcE~>CAdiKmz5Zgw+dc5d7ZkU|m z3J*4Q08icA7toSrnt(}!+{dAClNvZB7i5}_-jCaEM?H+i7p$jN|2Hd7ouS+f6hE@4 zsMkHql`RbaazS5?{kJVKP{o5LxfG4`0c?lPf?0Rh@%Ie!MD0)m!MwUBo&Hjio^An_`V@QwW+U z^GX^SUJCG?;m3POcy)*T%ioAkVr_k_l)?D_JsCGElEvEC2f6=j>R=*$*1Dj zlDOgD+nzO4!r^~Tb+GbzPt%PtexagOWqmjHw7MaRr;3HV<&66KS&khg>^q}qV@jNF zgDJd!j<7YP{+K>%Hi-*U3?6H9=Ej!1!S+_OPPK<3FkD&IcwrFRj$C}j5w!ksvWXH} zM2JS+_0_FPo3thCS9gi|>*#<}+dM6H@u2~7!2Axau>+^}3|7OnK@v8#+6=eDrOOvp zfP~=td_5-R43TXw_Yxb<(#PiDf)QZ5SWJ03k@0k2AM;>Sb8Z&5=uAS34I2XM#+&I? zIUQay{4iX^qbtV=s#oE6dBJ96a^u-}Y$$mrV(~fe(;M1+UvqT*LG1bSwg+=^k9>-x zIyfv>z~xutbfe!(XX{rk03R@%z-^7FS{o!-r$Qt2xV=v^YW3#{AvA6aDzVxhOQP)8L^^y)Sev4jUw4}gP2JATKC!Z!b{fyGn1-{?lx+lm1WohIwwMT54f8mkc#c`S@AL!#;LcJEL|$q#7l_-6fdQ5YH{ z7ljN<2A(_!zc8zJ*rTZ;k~0MDI2(L&m`y?A5LvT9G8N>~Gj{5B(|z5`ziT#r-(%Lk z)*TlP!_*ZdS1jK!YIE5>2!57nzaHcJQ%$haDzkAzSBRblvW!#f`Hi;AYt~^L7UOpQ zY=Rk)#cI2NWo6~$>KfryGU(CrvE(rR3rTRTp)jfi8~4v5Ll5Sf>Qd8~JbdBXFAk;z zobidyJlG>UUVZ8o=I|s@6iK|XMy$#Qy5jeJmn6{ElJFGKhrf;>uo%wUH@<|;>07ci zbszmhsaMOJ%;X!+u5}-s&Q8az!iO!2xNts+nC9_o%rE7K(?*|uZ~G;3rfP}UNU5af zWsWp3G6ICZ5f+<@udfQ@GK(@OxEh1DQ>g}7>U-dA$1AOa;}>Xxwy>$B$@a6eb;1V^ z!W;K*yTY=4<1uS(hIM_cjWp&gcHDm^$m5rt7LFM0CM?gqO@^l5HQF_&`0ouNGxrU< zGP0zCuwzQAJ!xP+^Kfgu={cu96Gg^7V7|OopUE64wAb9{av`m+Dy-J_Ei6U)%m(l7 zgS7IuH5k_J!g_-%i{EWKoi1CfczlhnENF(hUaf|HSUXP%YS*rHMvn(;<@$~W|$cIed2SNMb>!ADuI?u^v} ztTSX7EEmkGbHN9Zi&evcTtsISyZT$<)rtgch>SollMlmzi90)%yee8J)8&#QX8pp9 z9zu!^|ucIAl!*L@Y9fuEh|uV;p%}z#l8GU2e_CSNPQi<7v5+K*D1>Cvt=%e zEX&Nbj^&HJXZ0NMXki^?)vNjP?kU2(jJQN!sPF)$?o1|fYtD&g+<2vbrp*wSt-Hi^ zB|OX8kf3v*!T+vQN{9%B^zAgAdx=7?|4OZ5aUO>8U$*V^f{W;chuk9# z2tqgdtc38MYo@nyw5y72A8TBoWoDGs@w~LkLlCTQC;-T+d2Ph-KC#=W zTdnCVsj2LlLSwC2uJL0$ZBj}?3s+V6L8uT<^*0UPy4BI(zaANfwdAak`kTmdw1xUD zl2}hanKl;(cI6_c zndTn0W{Py|tUrzPM0(8X(_G2=`>pn0&%7r191IyfE=|tT4^~_I;Z3|&!u_dg;!KLe z8lFFJelTgxfKB^Nw@Q(cn$c1$eu%weB`k9IQ6f5=*uzRZ0YN^96H3HRl0+q~#{5bh zzBkK)Hjn=4c~R){Xd@<+*r?F~q^L_*cSH0cd2o7BTD}Bty!7opWAWExayOFcT7gdl z?@Z^(?Hqt8LdPR6K{IEIO7e|dY4T*Kl%HW*Ois<@$Tsa&#f69;i5p6p>6)rQ)$Wq7 z5xthe{mbIW(!-siDR9{(g5iz#JE^JC#G(C(6+%Z9k0`mI?oU?C$banG)FBU3+?s?L zG|`=3+nOL>2+1^zZ?3QV%xZMwgt1#UWxnAh8axmte@kZ@)bqwPm9tTS9=P-8QLj{f zX1c#>rm{iZ4vAX>e#c%I*qg7;6(eMTePPVC4qRkoA zFuEMYSgQ(lPzm9x<(PL5CBDCbkic$*g1pFw6?I4aBioHJcC6+>Sr;G`jUgPS&tjMawuwXCA7#D3j0vywM5uq=0Cdk-AK)brR|)?hBnCb zQ{_OM@|q3%R8gOjW857+>%FQBw6?$)lKBV8#N#~Ld%r*Ce(k*w>d8CRp0|7X;kD`< zaYlk>t&NSq7qJVs%2^<*Y&I(1k~M<86JJyz`9N)imN6-KNU32Y#v2l+(&c8RcJenH zJr+r%t)mu=MZQ#@E?gf{p-{lhh)inmEQtS$DZYQolJ$X3Eth6?9{W4`+ru*_;c9vO zhm8u{s|uj}=S}tO_Li_;7bM$^T+wDyY8IWwYoaefv3aCw@V3*Hg)$?gyH80<4$x{2#-@@~B^&#lEThG- z-fXe6PV+PGKJI^7NZ_Jv#%q4txqX-EJ<5V$Hs7qnty@he+4Op@LM~C~yBl%cT$zmk z!Pnd$-1g|O##c)}f5+2iG4av(8>c$3Pq#duAbUUcFWF8lu8?D59F^?0*B*35fzcXj zZS<@4&an92_8Clk#HtSBvumhZh<7^OsUu?I4A<+K4%SFgaWu|f8g_E#vIGDkL#1Y+ z@i5-in#BI>`AA9E)^wT?`t9H{X1XS~!Ltpy+jjngqclL)e3l$rZuT0QNoWmV;L>M(ub^Mcz)0`qhaKbVw zAARxXpZIiTGo%y3Hft>@#`g|iwk(}Kvoo`_4Dj9vF7g|w6oG0LTlgOMI(!LZcDSpU zBWW_0Pe73SRJw99p53$tV^*%b>Eugw-?U@D2C3=4Vx_KyFgy<{hOV**I=c^|1=s6z z*~w`r;{l=*9D2;(KhgRc&tNjLlSLCKF~4fCkxY2>4CKfoImX%6Q@ z?`s|2G2$7bNRmwyxxu#0xuuI6rSd3zl{x_@f+&jb4&R07zI3YA*ccQ40baxSXV)LWpG-8UrNeLt07gdLP8SuD$e}^I01foaMV9G~B zqP~)XGMCIMCBz8(KV1j+jDPjcPS_ANqf%lRtafH%o2MPelb=7V@E7dP-J2X!A<$}D zRP^5RIn61rq?>Dm1S2_}{QAXTrpr#~%1Z8ILsVpESvF@&tKn4kQ&_rBU7Y+=t^KSa^pT9<@9ndbOCeR_q)P^R#6F$O2a=w|GT? zTFWb+Iel98!Ck8Vb%SwTtl%^cvi8F=TJK@CDmi*H?M5BqMct(@w2P z_sv>=T_!D`P$Ig)R{z#6I4hB-@ij0sRCT57G+m0usAPAX7`?8mNNKy$6q^&i8!1ZOLkOA65xqmC0Zj=1U4>6LBrBW#;$pB94a zP5U2 zLcebP-EaIw_ZQM;0nt8d-k*yp!n7wo9QdX4*o&3ldF}x{ipmAXU~##^w)G0}VUcUD z^}g7s*R*{)umUc>vT>kem#o>BXzmy@MIUj@!7OzO#hTuc8l1n+!j;+$ec9X=wfr1+ z`UI{d1r=mkZ)sP@$Zg(6Gw(23^5;vu3y7OeZC~^>@ViVMkrf#mqHSQn`nbVSRvNU_ z8m8WSm_iBuW471zUML=ADVWD=XU9)^>!?UPDQ#MN)JO3p$FDgLGo8`GiStjy4#e?% zU|F~io9JpK=r3tfjy`JkC~-#}z|qN?q2}6KDCEK0$5^m43P+~Vre^W{eMv~7yJ0wt z3%GBd-f1G5AlH!~$dOK;K;&eirqK#@gi@!~fFhHhNktQt`j(w;h0i|yE26mUq$IS&gUS@@xiSoYm^ zgeA(Af7dRDe(&TYwR1ak!bs^Vc2pV|{#TtW*KKeMliePDrIqdc7rhqdQx&Wc#qaA8 z4jI9P%{sSh8^x9RmnlmJA@73b3KkTWYX`b4ME~XLaQ%|C3%xJ)VoshawDB&!e{^H+ zcrX740E|I%zR+rP^h0$~3mD+hh?TaLDjX8F{^}wt%Ys}xiFD&I0Jp2VF3cK_laVyt zaf37@IjGccl4XEwU*Ur@=<{bzs-n8aGaH_?egnCjmRhe9it~Y};9^?})fF3DJ<7F= zL+5pGA*VR*;ah+_}WRv@aDj{Ngc?>S<>kF-|HJ!m{TpLwb{#taOwd+(1 z7;aa-jG-2_Tcg1!}EHDZPIbU1yFi?JO7QlOKjT1NcmYkDi&BT3|(; zRE*uN%5q|~jP~Z%4oCnR#m7yE#d%^A7^8U#>!h(B)L5h-Rg$980=?Ip+Z=2di&mVW zbXkoi1I7z)j8Mz#PAjgb_acqj=U2(8^>^ypsRoXUr6LOIDd&&2%heNK{e(tFR5-Q=0!Bnl z3`oofn!m#DtN?^-@Q_MG9ZaOT@JDtW^c3xxl&Gu%ZXQSXj+na=GwW~TqZS-httHnv zO{62^<+zTu`_3Xv@~?6ncCKx=Q&7XfBDpRB zW%aVmcVPD%Lk=k_lDjT|+R+RkR{z371Sg#@StA8K^3Dx|>p>;s^~o~qY>5y<#mbu1 zhjfo1kE?We4zTS)uNzW{`d}GoK23VH;ngBB;+^B!9Kog$L^!JvrGnFAFn;h1b`0NF z`{(TU*c*sYh`XM-YW07 zyWTjT%lYKr_Wp0hmww5=i^XbzXP^5e{NVrh2PKhB*CB>DUK`r2F?w|Kshl>95z(l> zV)^lI?0N_&vus{o%omtUWOMJ3a;1$CC)UQ8N$~;8xd?hPnNZT)7((3ST)U^mnS3C} z5#WBegJZ~XUg>B#UfK9H*+QXuOxhZ=Ear9v2#|IUIJuLly&e%IQiQ{upXCSeYGrC;@!PN(=i zzw3XGt&Pig_POWqzx(Ph$2WZA*I~JwV}Ey!-~S(dC$_h@ad>!uwrSSt*M8|Hi}7v| z9a~nZ2*11xLs)x_$W=B`Wp+*5qF=5s^gWO>+O7rIyp~X3g-M%qis`+PaxQ}Y|NO&$ zG`#bj??heGYvim3_cOPoyXz%<)VQ#7gp@(Dxam`z-xE9vWhxm~ixJ?PS7xN_!XSHe zjmT;Aw(|G&VM@Kqqff7gnceei^T+Vqc`P}`&KKDcw6QtEzyA4u4Its)|M$PW5D}rl zU;N8|9zXgcKaM}}2Yx>`HfC5X7qzO=U#^mid@GDNz0*oJCyY!*3RB=2gs}6R8Ew}h zfw7n`5Mv{pniDdo@(zI+0fc~4=N`U+ay|}yctBle-n`l&AFMNmWozQv?4!)1WRs^C zKovlB7l*vlnK;XxJff8<&dP5_vs}$b#jx*wAH^h}Sv;Y=o-#A$XQzKVqp$&saebp$ z=rcr6zgl5)YYUgIT*lGiAr^}T{_=nGSMewQFn zbehK`p2*j^@A^pa8K2jhau%Z}jNIV`-i&TL{Z2bswre|VU)aLUo44>oKk|?9zHfd% zzW?ujAKI?NPyXb;!p`>2sTv5zV8&3vOnF4^J`l(<0lEBN{$v+vvJxl(fb2M$O()pi z*+z)6FzUV@TMmM`QJBqxm2(kv&dC9P8EzN#VE@Nx)_84NEZ_)UOc@TVV%Kwp@!*dM zXT*isU9Fg8+@^w&S)=k)#_(ur%B{TKCl6D~g|jHu6~Az4?V4-*m^q;I9dJ@i?KMe;FVA;4ff6k2Dbe>i7Ij+`YSp z_kPiP@X?QcbmVP)eNZ&^FBsw1an-};bxs4X^^<(vmD%K+YT`^cmLBA>InW-koYQPK zi*xkK} zU;ib)0h=2a@jJi$KftnIVE@&9yyIO@;s^fT_v0haegqdUTtwx|f|>pMYr{>?spK!O zq^ig0)1y73CaX30UoP7=G$mF}rR_dSvW&s&_5ah9a}jh(L&Z|3*0{Pi*Dsd|C)JXT zB?*z0Edxf7Bm8R5i&B``Oz)(`!NojiHdL{Z8d5U}VE6erVB7v>(`Jjn^#OL4$attL zStu`3)=6%1teKS?SsOf8xLT$eGvP~~FR zbpQyz^h>`~>U#e9=RqLErm68V1+uIcQs%;CKB`13ytK@9{p^U{7CDpTs3X~xv|7r^ z3~k#=qV~+7f|;?#EFPRkp9@11Rnx@SwM-^SO4m;+r3szn)&?l{j@Y8DnYZ z@ALiF`xrtPZPTJ@8gyNUwr$l^#^u;Kdx$)75(5qwTPsRiOTX8~*!3zP8h0plk|}|O zXw?hs0=#Mrd4-G*TF$2wZf+$zIv22sH)3!Kg|IC*1k!ywDwv?Sv@8oHHq_%KeAjA# zOGe45FO{lnE^+fwtT1#mj5JNpeFY&IV;Gd%V`|xNzA+G%cRwt-IzE^95r^lP)>aw zv1reMD;EX}6Qi@l6uZ7ShI*E9$oj+O8GAXSYH2!ZB#C}3pkEddDmNvK&SO&Lk4n<| z#0jg_0?XA30GD}YJDY>te_m=lKso0YEQ_U3Y*jF*Yh9Hn^*KoPp6PUkrfJ{<#?4S~ z^@PHXow8v-#?LaUgkw)5qYIUrj=XwQZ!6|J#+XBpU3Z?)v&Q?(IjDZW_4bTKw`=qo zov*F&dbc+{g6dvM0CiiOg_jMCol9bz#6m#JCIKU$waNB7 z+)QIOvCh0s1?yi;eYK1Bar_*QuG!^rP>#Qa)_y6qtrK^B0QJNAVjDMYy-xDuNlNKH zeOe)AvlJ<(1dHNbtT=0JEgaZ>C*{`T73KLAn^abgUGYnOfrXQr8MbLUbdw3<+Uc^a z_ZkmGcpZlEtCaJ(zPm1)nPof+^tzLLCIixek?+~fyE{I&SR7bAlyHIPRUEDpNMXd} zekpXMT+4H7)X4-Y#ymx1T;E+|OE7{WrN-LH(HO1&JeogR+bn9*qjm=++RiCYKJ+5S zh^QMSS8}+Yq4#Jpt86_?krkISL7<279QK$P*c@CF< z?U(A*@OPTIkP1hueOwRLm;b6q(l0`$X)qseCdMpNX_$f^&p)%G%{kRwHSs6J-+9IZ#S_3WMiS zeIvcsNrJJdt+w5WuS^$Lh;a&Pl!5VtIbH~Uq0}+;B1dm`&(x-l7k51^f!z*%<-29! z>H}pe-6B_4MDg_Ly)tIGumvk}bY4{Mp3CXJHE&Bb{XGooIB%jEs0Z1ul*t$)ME4WM zQ*NbZk(V#kK~SG5nz)L7*~M%dEaj#VmUZv*-+XgxUuu8Kg|irhQluxcf)xC_+1^#( z&b%g(lwkZKf*S`ei+W8pUR!8>kvkU%iu812PxaP%U-?0W=Nof%O1Wn^Q(f1~1Pl<10PNZq6T^qR$&`m+~k;i2Ml2za#45I>@LTxQbkM9F@xV z5piaQDMO;%h^X_9lrp8BVBIqE?wc_RTAO8t9xCbUslV4c-Q<_otbNxno{5t!4tSKQ z53wUkzp6oX5!6vF?JkSJB$16qIY(vOMf+y|vjLmy+VMINitcvnik3=xhUcXxwJqu2f ztoK}^ysCKP`puc4>fqJIR=FZZ?I>K5Y8&L43W3&pQQYyim`22G)vUW<&R8(|N~QPp z3Y4yC?Wy|P`0T&hW?%QGTg3J|kABdfm2-R4;bBqE3`@&Pgt`&e9p)svQEF^RMs`gK zV5YUesW)EE2RU*Yts>6@y(tIqT&7OwC_u7sZW?nX7)0>#AsV=pdBm;s=e0&UE?TL! z)Zv6feG5~GpYS-nut4e186!gFPo-x%{d;Lqt#_P{*|*)n3MUx|CIrS4FT+8#U#Jkl zJ7-R{W;8EeiDP%aD#ChIpq{tSn{zGcw+KcWOEOK5Y|F1o1_HAnaT@jS!OHop9Bag~ zo?yrtFL!vMUwOJ+DIuO^@W*1Sb{=JBxEvK{IK!Eq%A3ZJ1vXi3Hme_x{8K1eI$67F ze^2ipR2jh4E-k(Tw%NysIJIN8NQ>pu?ouU<7^lO+w|4E*AQX<$%%-6e2#I z^RCuE`XT$Pm9S5NjLP!l4;zulwK~=Hx>;s?8*9V4D%q$U-P%&;qzL}n@-p`1o~&b4 zNzSnkLivq!$2I^BqqcBT%jmzB5sP3uGhiD6Y>wY_485_jnQMTL=fC=CB%w7`u6}ny z9G-vsE*MiB*+7X-&!5)ep+n(?Yh&U$S>gSBy6vNuy{_ov+U>GfT-(=btPQNNWwZp? zSzw5Y^TFR=qy;<3LAAey={iQ@xw9Xm^)A#lS1wGp;B6voTr^hN4(Rl~wIx#JhFLr0 zh2~cfNmjSXGVEYcbAdlN<~SdQE{&}Xmp_ig$^@TgYh{I!5&UTpF3%ca$%IR?K^_wT zMAVI6;fG{|G1jiBq@eoQp7sMyc8^UgkE^TL(-Y6bd4S}ElI zXHV7}#wNZoC08GoVpf8u+3}ZCkNaIKROA>N1vhyFR3{EhLJ9$l@UL>Q z5vG;4dSa}Lsp1CDEXxdAdryr$fBI~&Yoenx`3&f@)+K#hzi}NOuTRk0n2##4vEsGb zy|t)VGIWf>*`y*oph6SYEpLHhSrE+P6f>tuX4xcrN}>0bC0=K6Z>*eCDJ+IGX?S5- zV@%*Rbc{Yb50)nma`myB2g7wHiuG?*ysTQTZCF?BRdkMQ+v}KOB<`qIvo5ns-CUr6 z9dg8|+|;ju+VwHasY}lGkJzq_s+f+()7I%JPUawpyByRNT`ei=;R4V)wH0TKQ4wJJ zH@j?->KOn)mGh!FeRSW@`{*RW04GSFU~VM;Bq#v0)n04i7ZBT!k16M(jgm_a3NmrZys zi(cwR^EP zJ~E&>QK2j;jHXm2Os$(obX84HYogeuhTMN1uhx@1-JoQ6NuZifjI+;c_~)i-UN`#`s%opapj0ANxjL`&KPInvMsAf@E~#8Rxbg_7^j(g zBjub*p?xs^GU5Z}xc1k7ypC*vy;P&E9KDx;mOr`ln*2nA$KEqju+}(B;j85Cq47Os zIToTBgM;#!jV5dF?c!PXbaL$?y$wt@?BaCUzsVw%q2R!wC`qPL3j8}ya z)*9p1Qd1w0&u0QE3)XOd**L9Ox|;l0P>DhfaR60TQiGnVMe9M!`3TxMJxu&MK2Z40 zDMq3iZU_;qF}kL7t&6sijg#uN5G1mzhLq}Wr-+b76^;l};lP;49EvWUEmhJ+OLi=k zysLg>K!BUnQGZ;sXxzq8TiyG|Cbe3Jmwsc5i<5M&eQR$hPu2$3aVv<)Garl@&)83Z zx)4!FUKK@IO$>&Fd<01!M&{y?@vn*4-((Cun@y9PsB~K9xpjAjc&=Eu?b?#b2f*k& zkI_5;Rf-ajEQ?RE0O&J?6Z-d8D)3&jF--7_Vk}DSs&P}33NqPlB2j;rc2**+v`Zr{ zSzhR#EiCs;XmG}bA_27TW14mg6!74@crQyMNXNn?oQY1AHfxN5T;Io#j*5BK?9>Hb z5SN7YVy5K+gNzX{1L1V9-%vSkq8R|jp~tMF3J>W}(!_LouGNLlATCP`)Iu@rDH*y`=@`ftrZU17KT(*T#pC~aBRou8Sa0F83xN zrcgt1j5CrR97IJ@)^V!x{XxrT2t(T!FZ{;$2v-X3J_2W8v6v&}gr;fq=xB$xpYeI@J9`ig_Qv<|4o@3VQa;I!bpys{fb4Rx|6Mh%w{P@A}WWuWm~ zJtRGUCafImFEDo%o(wX*xud-k!`CVvnX2tWBg`=C>)|%Kb)zs zP_=iTR#{nzs7}w=)aPIYmv1PNr8cqFOJwY5MA&s=#ys5?73;HwNUh2eXH2Dk^0zYN zTA@~y*XZ0itj;p)7D66fbn$m&3#l|p=Ymk7nUXn61F{}j9f(STnd%vY&S^#nmhR14U(68aroP-odV*JG$8<4hvVe^kFrW;Z3%3 zu!T*z)#^DQmH%N(B?M3qMe*S9peAf|gJ}@LTMg`o7-BtM%mYlrj-!Pjb(TG9RY+)c z25G8T^)yU{@Qh^L1Ug%|#{niKEP~KGm+D<>1ZMPKB$Ja8@Sy>6Px;-RarKP;y17|1 zG`iZx>vp^-7}f0PW|T-FpZ1x|;zVT($t|c1JGj%qH5Vo->o#j%JjSU;y}@#RrEoNn z)&UBYC_z-D$W5qfTN*|(b3u9&@9>#c&o zIFOkRtu}M@j>x%k@O5^x&QjR|xGIMO;FEgl-S+!f0u{UOI=KtxtK4#A?Wmvpf?tOc zzCH%rZXtc6!8etfQDZvl`IGWwMlK=0SqGLvQ0WO27+R9wKX^IU7Od%XI^?ySX9b@I z>!kcrS9=vhL;^d8zQ>T0oI!2(T8$$(fI?6VHT6`cpajUH=L(TjL{x~PR!L)mcX1DA zZUfT###^~yFt9=ZeGPl!s6#a-Ko1qn+JkzHxz;(x*W*YFhZv?kS*9~Fy*%rn58)x77dK}zg)u8#b?wu|Qh%egpoh;f9iY(SZu?bWOx z&Qiff49rNwfMvhZqY0qntYWf=C%})e<+U^AsxXMPg=JG^MCAv{BXh5JR@ZmM<8{)l zu>03Ov8&vX6V*j=${8}Q4rXGjEW#E672e>-wQ$@r^i-jgUm#_1o4uFI*p?4jYDsx)BS+&*NFt5L@z_Qa1aZ1p-^?=d;9x__xicp@HdOG`x`18Zy=yBr zr34D1wxzy*V5@W7toOTp%QEIG!fIt%WghB&rb-M3v!4+Ee zT-bG@&{k2BN>|Erh0i+2O;HL7u8p-W3$w24m@!hi;M#-gr8EXW#ytr<*`y~?9M4JlYyOIWSOTOToKK&73sz}*VGEA)!9=1fIuK)m zRiYp_;HU$WN1VhZ?{@0AVeZkZJVWI2PsOQJ-|4x_nA>8so&fjRCf%{baV+l|XLi^0 zX1!uDE|qdE3hhi*MW;RhV8=!4!X2%K!f;66TKmbtuC3RdA)4EGQCHKaPZA?B8seIfYhBXCfV9f(lN}+u?vHFz;aH=A!!UMK`_<@Mzs^Gkmq_G7<1xNP8zv!tff<3 zFchna45SRo9W$Yij~0oi)KiN}Y0;baN>j+5qVZ=?;WR~Vu0xA4KptN%eJi*FwgI>h zxNn1>#eU@H=`=0JHjhn@hjK2u~fwcj#zMil>=(gC=(!qYYHU=AOw@P zl3pfS9z3i6A#lgJ2zt^@vl_KZC&&>@6;y!X$~tbg3e}Sc$L$nW6mjmgZ6e6F9ed7V za!K1ZeZTGZB zW5OE~;+oVVQp?ZSvOOknXK(hz>@`1=a2k!ma52yjXA={HvaZWeYvnS(85tI|B@s8KIpPIyM*pkdqxYLn@}n%9z{_;YvmY ze1^io?hm6Z6mxXcrmlP3ti4XbD&5RQH2Cus3+JOV#!2rOof7LgzP-}_K6=)Mqrwcb zu`dXK*I#^UAT0Rn6i2pmPjs_EJ(^oyWHW2WE(houAnzzLJGML<^|Y&;T?`0xx5}>x zK|7^l3^p8P0!CToS|JnVR>qO57VIz~uT=v86sj$HM3JXkSrr`Pkvz(HQ0c*X0RYvl zUf$s8s$vX%(pHdz5{0Pf)IIjS)UA?f#ITi?P!@O-^_4OI20E)H5h$-a^&gQCBr9|seIx5gcm|`LOVok8c zRg8h2HZx!jl@Nkv$p>N>o2mRxXs<6YB+Gu)H*#qU!9^8nAD7FO=8b#(GM!AdEh_U> zQYf~owBqK^+r*Uzj|jc)B&lPL(Y;2@!5uGA7nAfORPSjfBvUFaOx`R${$#WVDCZ*R zwrf+}OXrVJ^u%gjDo1>U8Vmy1Gxahc1en=XmL*m#~=65t{~7NY3;U=jp5i2yeiIL6f4_I96qge}snQErF;+k+L$p5UK1h zC_0bQhg466xybxWdqaGaIdt2$*~roGlQnkCKi6;|80M3S~h2r0A(DJz5w62&KP!K9HOrM3-v__{!d)oMV~ z1awWrFeJ2X1Ieiuky65>Yedu!8PiFtoF`yoa|83`3PVoVm`u#si==+Sph)ajIFd!N;5${W=$rh+W4Gx->sY(H;)DGpOGQogOfC8}1uqq-|!UZB^ zg^CZ8^!$7T4O@MM++@WWyLI^aw8cU?+~@)8%jLpZ3aE%hafK2r$J}bjNK9zk7MrsU z(@BHv%_)#Gy4H?Hm|#d5DP?SLY+$ik0gdiIqyTCOtL1>$5T=tBX-EJCY)l)(7;v&! zAw=m$LlFZ8bgc|k(?+yS#A4N>iIU!Gu@d;v#HbL0&~y#@egKHjG{9ojgL6itfTP6< zffzBUxhg{lcaY=GQlCH+G3^@kL&Cw~9Mee$W;q`{G%dPrf}tOf7>I2Hq#jKZ5dtG+ zLK;No&!#PqGI9pGhOp`rhJg{fir{5I8!)MnjsVJH_B@94nVfU6EEQClg?LAC>Iw&o zS-l|68j}-M0I*w753^DBTm)Tp1c%3}HioM3*}fr%w@J)yec#KW=2671DIUx$+%*pX zM1)`1nc?EjCV0LJ<^iAc^i?!%z%V47%zGqeGy&+k7AMOATeFE;7$W)vYjbDyyz*046L~ zJwhu%SA7ypyzB?T&SdUgmekp81BwyDFd!lVoU!N!Y;VnwQo_l62>{sH+Q4Me;^1&0 zqn82?0CXQ(V5djpbs6<#HdxKxiistJMI8;NFxN?Ia=( z8Eq76LlX(xn^P>8jLZWzrW0_gBC#2Svo=v+%cScR_o>*+8EqTUhJdaWj67fT*qBW) z45q#d3)dBW9Bh$0u`u7>N^-&P5tTqAe+dz-ZeD)+FLp&+`zmkRUvf z7kJ@W7XdX@8kG~8jS+#U!V~on2C@vKRSF2o)Z^d^Mi+1sKx_H&-dH&&hqg#J)0_db zznl(V6qAh&o7p5MlPS_LAah2bh$~mFU}qLFn?y{f4VoCRTJ<0RhlfiM$t)Uh-zUg+ zctYQ=(8P$vF`@65Xq$*k4HokrX-Mdr2J_VtO;nf@f$g0Om`#N{3-(S3AtGhLoR3}D z!iqDF7Ykgxya6H+**n`a3`us`Y;TC-8KV&JvR{G02q9wVH9s;4NAo4FUfe>{5bo_A zAvT02c9^s+5+{gRphuq>!;leLVFV|O0bLt0q>QGC82SM{3j}K-VgKM*tpNg~m@}qb zhao2nLqblHYq@Dzuydc$O*9y+*nBN=(a)Fu<5+UBD)HFe4ay*D05uWVUO_uV)aIK& zK&YNVv2Z2W5!kX;3CyNeKDe9Ye0JzH(7wLn3)m;a&^CCc*>Xv-+V?%WuERHe!#CmG zpZmEuo}VD~f^E|avB)137B>*j!x!?6wr3U`C=Aj3or#JqiqCZ4=LmF z&IVFS2ne`#d0U`Q22zu;>Ibx4hwa%6{g8_Sx?HU=3_T{DESj7$mXr_>F))zQ3X>>A zl7=NBBrIStKSYcKWS~(gb9}f$PBJ^GPl)Y?n>pji1{oRk#0B%-DVr|vp>kn%sllv1 z3IGy-;5cun2*fx!3F|H}rNUCh>JM1XMbLS4fQex(D^&le*~niv(l&f;p@TpGg%%qd z+iJ=YZr8Rg+NP6GMAB4XCI^TSf?(JtHlS#$A84X-+(FL9iy>mQTH@C3T^y|fe&HAY z4dTjDi#13&NqVxJG2}VA(13|W!3(0O_sLlPpEFjfZV0joju2u=f1&IkZf7Mr)_`CBYRily9R zx$2RUz>BVlSoH%Kj3x%;lyHCl0RQHfK8&GXqG=ifhsE0CReiCXh!v+2oOaPns{|0l zQdLhFU?8%dv7(ShxqdO(1s0AB^%Q5o&N?h+lm{&5vqLvcvi!xh_#Fqe!_F|IcU4OU zv_t(cV7@rPawW-UmdgR)gpKJ8ySEREcPuv2?8#(;ix(~dV5G!|k#KZ)gjL^5im}+@ z_~cNy-_|x5z-qC=@yRhjgfIKjFTqofKaPIrv0N>Y1|j4aNdnR{&<}!pQ!lV$NP|cM z5*>g641Hhv)u#cRMS`T9C3rn2tcD&<$*#%R+}y^-<^~>pO!!oeQ z(HoNS-j8TX31C9v0XZe4lri)xUAU=iAkKQULuM`;ivtDl%P%75Un~SED8gB%z-EOj z^W#Go3~L7s6@?P0dBI5g5I`CWFF4*DRmIW65?xmz3B=@~uX+f2KDT2fjg>$R=vmiJ zOYQ~NL;_OENO>t;cy#%zYegF`G=3lI?w4i0hY(q*(=i^GFM00FDj z0{8ds;>wk)xOU|c+`E4dM~8>l+}uJ4gpJvz?17|=ND+(03Lz4@t}Wg=Gw_IqH&yST z5>Si{g6^+uV+5xjhX?yev#GkLgSw{0WiQy3kn$kj$TR>f-q4g1I7^zfAtek$#xN|^ zy|28MGXkQz!2|a9?o=FW(_s+WEF4ACQ-Uj4nw5E){$v|70?15wEO3OWnk8A&PB4+YHAd9aShl3CZBXdFkAsP2& zE}l2_=M|A1nozd1C0Jr|fO0^HRNU)+$}9+sG>{W0y1qC%3dWUdcI-q5RBZOjrp4B8 zHC{0n_OWnMI6lZ|wkq(KHP%b{7Q}kR-{bV5TEEsOE_$o>D>(Y}^kk#1Igh z22VZt6oxclHk;zfCt0y(z`gr-kvZYQ_9Z<1#M4*}J#tRyR|~Z5q%6RuiO5M5xttR& z?Cc;$aez?aDp3*-=4=DUC&$&oL4;xGF+9Xk1piwpqzlw9SY{wb*+?3j01Lhf zQIyE8o2Um>@|y&bh1@l*h-RvF0|7A*g4P!l57^?2A>!WsdyqgSslO~PgO6U-(Yf`Q zyX|$YtIAwy4ms&{zP!bP4U^#bilK(p*=7PPXHtw?M{2bMB@o-Ihw1tuPyiyKDT=6Tjed#Bt!gW4q+qSkeq~s~m)dH*&){8M z$wf5t+N~y2{nmcbhZNf?RjkPz}=;r-y4ho5H2K4VOWXacbHY zIaSEPu==XW1L?t8^-C|^7Db^0_&x4io5j2Y$ zP?SR72%~FNE>apKu{l~;5K4^`U`OjZ3AS_I(VCfiJQNou;n(kh``zjx_sH7s z4~6RNareCcLsU4LNMOspDJHveBSpk$&9gSv1!kYCL*(_Foi!(*FENIKV~bhMH=npD z^1)J8SxUCjKXZML^J>s&^=GyA$ig)V2!lMVl<|;5eJ+BIF(i3!D4Ym@8${_=zv^+} z!bL2W3*5PLrzl9Cd)c+34a1_a6fP)+%Q+*fH%}(85{9S#x)EBhGsEIcETXSqPsicN z@_G4XL;kyau!w2*ZqJ$ZUiM?NRtl#s(qO!Z7|?)sE_CZ_I$J7_sn|=7kreSy~1vO)ASm5PEvkV>x_VM}>frj#UloCnqNeA>!hNi-q91*saH|*0M141X7&oR?SG8AHjBCf>RgA1-39s-{#n|k`I#7t8HLxqhfUWIq%w{v>EV%}K+BENg zDRqPzxMXdR4a!21h87D>*Vr0@adoLz_F@9i1T&VkN?>euZ+_$DeBq;jqiQFKv;4!T zhWZd>wXgaWMuLxMM1WEOM$piUK*#Rnal5yojWfy^4)`6_(1Asxc25c-UQx|d3~wi` z9MSXuB9v2}3JDZF0T3IFIV#q`fQKiZc#LSvEnF9s|6W(f=$@n=w<1vtb-4k`IU|IC z>2#(GJ0T5b_aqIdREjj>9Id^cmFef)8!I>S(V~HU%$co&2g`* z^^=-C`n1@G7gvSr8F!J%vfRzGi^h?Had;R}DS=z-$|4~}Hjel$YpONXS4OUfY}{GH zCAANhZWf@rQ^xACu2~{Q$BhAu>t6e8ju`(M?Fw|7fMgt!kyDoRTVQ0h2M0K*v$n7l zRA}E_viCrSJVc3SXiQ6n1*ysSJLMdbCSpEc;Nai@T{ppR{Ec7x<6rh=U-mtCz;aG2 zN93yH$nchvsf?42NZ1I(bJ_|y3{ThF9dU@vg5l&*aE(a_wG_Z{6_62v5Men;x!A$o zyJ`#d6Bh!ku%%-15f}H9T`V|;2YvlkhkQ0}&-P~JUS`KDtAC()-@`%|G$%v(Mo{%ef(kw~3m4v(jLpY7O+Z9~|&t zBN|g03WaDLP9EERj&8jJrZ&tzI8FkK5VPtnkjPAq?0%~-o7}qwj5<1nPD$-0sdSiqtn4u7P zHLIGfnacbd-ml5Eok0MQa6Kh#Qp;Bi0Y}HjxPN~SmoHz$H+{=D{qS%3#&7s9jt-B0 z{$1~S2abX)haMr z4t0&=^uj3ZDh?V4a18c%JN!s`NXfZ+wL&oK2~e|R)yP4NEI1XKjHMggSOLrB5;t$$ zz~fImfp7ViZ~D8>JoC2y{`dYLe$Ou+A0FTbfAF8+!o?jt`q*O{dG}!DTm+qT`3kp- z#pINWxe7((ldax@1=-PT6__@Cqqvl{3+#wvjm^1dOk`KShw|AkkW(aEt2MbXFTT!_xX3~X@*wRQl= zn*B3Nj0Ush0tz8ixnVn2be;Q3FtOk)SLj`K=;-p&`dZ82~x| zepwTC54ro!hCRkKY9@R~2&2?p_T4iAs&6ZZL#2d{yTl~RUcsP8uw_{84Jy@$>t2~r z89P#?Fk}DzKKh}@+u#1Sn_u%aU;TG3U%mR*zv-L4>9y^h4g9Y^@?$tWJakr+^ObWE z^anrq!S-`L=W`|4+{HA*1rvGZM;H?kjYizTj}fuSZv~>VxBn7k|J@pjK8x;5D(JiG z0`!DwFvPXVVPUD(zBvx+TsyoJ z8F6zjS=O#WoiApBLqH~Tb_B#|%qWy+f?1PvcmD0&T`cBvy!+kne*UYz`m4VG_x;EJ z(f9OyzxWqF`O|pug%|PU(~s3Kh|f?t7eRmR*M9Bd7k=>a_22$C|J^@YEEkV0m&?t=!=sIZ z{r!!U)8@5nR~u$-Q_hhH&EjN%TeolE+O=z#=$=7iBq0W*oN)8zO+*R^jqLo0F%+*= zj14B!335(&;e{8Ga>AtR5Too+ku(Ply2%6^vl(vPzK!|G9BtRiE|w^pX=5Y1Q)aU% zj*d=nbaYhSBYy*eF2c6$kW<3(@iB-@)0cgDwsS`IJjN22ZCkBM*rdhyj`+Ldl3)iJ z>^HzK)Do9r9N7~oDwHwwQxV+w#wv`sLZia{>uX1>fvU|KAWdVIkqgyJUxs18-u*rF zLys^1bzl79r=EE7zx$5w_?>^}E57Yk%XfHS?2`?jz5Bqk9tcu~@`3q_|qG;&Qc${c05#i+MOWIBcGJ>Zx$?;)U1`Lz8n3DGf2D9EYKg zt5qNSzK_TpFI?DZn9(wGV=)sJ&;v*U#k;%rka9xTcCfUyA<9DPT1k`p;!B@Izgl6^ zO%U4#ZPUoklU9;1Zf$L0_s%Zv-@A{lYZ0R?z(((Bng*MjTbR#JaP#I(G)*fDI@Y9@ zZP#MbbzlHTM@JykT-rgmsf8Fz`Zd{j-~i2<9*|N}EG-KsWua|QX^vTHy`qc{i`}^{_ z?~zkZF~;LZA9)1F$H%yE;R241j`6O~c_+U6yTALdtX9jf_}=gR-fx>srW2^*ad>!u zFaPr2aPzzW!hiLL01Z`Bd`Hy}auU)^6Kl|tYEZ+Ox_u}B-0QdLqTX;>pQz+}}TF z_V@SWtFOM=eC1buW%#_$`@DE`bl5EBi)Oi8#`$6%kB^Vz{NyCwy1m<6y8)a7WBhh4 ze%;r7UAtH=CjF{!`@Zj%t7W%ZuDZoy-kr?n-Ovx+qmMq)z!suRIuw*dhD z%3t{_zx$8e{g_5{a^ek0K)ZlZ{Nl%ufB>K zH?HG_7hb~0KmIX1|NQg#_TTYs_z!>g@5W-Wz^$9NaO?IhT)%!DFTC&~UVZfy{F8tD z&+wIB^%eNuzxlmbEKYFq=55@%bsMj}_6lBm?K(d3@lV8m^{;-Wef!(r*8c79|J%*c z(edQw%^ThB?c3e%ojdKVo432yu3zt7eBp)eqt87zyM6c04+NqoTHQEIB;0(pT4HDC z0{-6L{~x~N;>C-1ufO){?B4yoX7|pW=Ju^y&F$N_n}78$f42MmzyCk}*dP6)|EHh+ ziJ$lhJpb`e;I-GTWA!F-Pu-n@xByLZZhK0ZDcjtWTfb^v>O`#3m|#d>@!ZR-0z^?je(wq0Dib`3i_ z7m%~$#T(Lq`N;`x@5;3Q;Xm?S_|z+}{Ab_uJ>T;;NELQKBxFhnf9B8png8m2@B5a2 z000O3`?!ANCSH2!C4B5-9|Lp3_SP2O`ObIX@bD0KcJF*f=kH+)t#8G7tGreIw_JX0 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 490072310ab109bb3e4bbec8d8e36c6654714b5b Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Wed, 4 Mar 2026 19:34:24 +0300 Subject: [PATCH 02/67] Merge local changes with upstream ones --- localization/i18n/ru/OrcaSlicer_ru.po | 691 ++++++++++++++------------ 1 file changed, 373 insertions(+), 318 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index baa9e91025..8814f349c1 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -213,8 +213,9 @@ msgstr "Пороговый угол автоподдержки: " msgid "Circle" msgstr "Окружность" +# Сфера – пустотелая фигура (оболочка шара), тут именно шар. msgid "Sphere" -msgstr "Сфера" +msgstr "Шар" msgid "Fill" msgstr "Заливка" @@ -914,8 +915,9 @@ msgid "" msgstr "" "Невозможно создать текст с выбранным шрифтом, попробуйте указать другой." +# Высвечивается не только с пробелами msgid "Embossed text cannot contain only white spaces." -msgstr "Рельефный текст не может содержать только пробелы." +msgstr "Рельефный текст не может быть пустым." msgid "Text contains character glyph (represented by '?') unknown by font." msgstr "Текст содержит символ (заменён на \"?\"), которого нет в шрифте." @@ -958,20 +960,20 @@ msgid "Click to change text into object part." msgstr "Добавить текст как часть модели" msgid "You can't change a type of the last solid part of the object." -msgstr "Вы не можете изменить тип последнего твердотельного элемента модели." +msgstr "Невозможно изменить тип последней твёрдой части модели." msgctxt "EmbossOperation" msgid "Cut" msgstr "Вырез" msgid "Click to change part type into negative volume." -msgstr "Вырезать текст из модели." +msgstr "Вырезать текст из модели" msgid "Modifier" msgstr "Модификатор" msgid "Click to change part type into modifier." -msgstr "Добавить как модификатор." +msgstr "Добавить как модификатор" msgid "Change Text Type" msgstr "Изменить тип текста" @@ -986,14 +988,17 @@ msgstr "Имя не может быть пустым." msgid "Name has to be unique." msgstr "Имя должно быть уникальным." +# Потенциально лучше бы подошло "Готово" (подтвердить действие), но это же слово подтягивается из информационных уведомлений, где "Ок" – это просто "принять к сведению". msgid "OK" -msgstr "OK" +msgstr "Ок" +# Заголовок окна смены имени msgid "Rename style" -msgstr "Переименовать стиль" +msgstr "Изменение имени стиля" +# Всплывашка при наведении на значок msgid "Rename current style." -msgstr "Переименовать текущий стиль." +msgstr "Переименовать текущий стиль" msgid "Can't rename temporary style." msgstr "Невозможно переименовать временный стиль." @@ -1006,13 +1011,14 @@ msgid "Save %1% style" msgstr "Сохранить стиль «%1%»" msgid "No changes to save." -msgstr "Нет изменений для сохранения." +msgstr "Изменения отсутствуют" msgid "New name of style" msgstr "Новое имя стиля" +# Заголовок окна создания стиля msgid "Save as new style" -msgstr "Сохранить как новый стиль" +msgstr "Сохранение нового стиля" msgid "Only valid font can be added to style." msgstr "В стиль можно добавить только допустимый шрифт." @@ -1021,7 +1027,7 @@ msgid "Add style to my list." msgstr "Добавить стиль в общий список." msgid "Save as new style." -msgstr "Сохранить стиль с новым именем." +msgstr "Сохранить стиль с новым именем" msgid "Remove style" msgstr "Удалить стиль" @@ -1045,9 +1051,10 @@ msgstr "Невозможно удалить «%1%». Это последний msgid "Can't delete temporary style \"%1%\"." msgstr "Невозможно удалить временный стиль «%1%»." +# Это всплывашка при наведении на стиль, в котором были изменения. Должно согласоваться с "Текущий стиль ..." #, boost-format msgid "Modified style \"%1%\"" -msgstr "Стиль «%1%» изменён" +msgstr "Изменённый стиль «%1%»" #, boost-format msgid "Current style is \"%1%\"" @@ -1086,7 +1093,7 @@ msgid "Revert text size." msgstr "Сбросить размер" msgid "Revert embossed depth." -msgstr "Сброс высоты рельефа шрифта." +msgstr "Сбросить глубину" msgid "" "Advanced options cannot be changed for the selected font.\n" @@ -1132,47 +1139,49 @@ msgid "Bottom" msgstr "Снизу" msgid "Revert alignment." -msgstr "Сброс выравнивания." +msgstr "Сбросить выравнивание" +# См. "Типографский пункт" #. TRN EmbossGizmo: font units msgid "points" msgstr "пунктов" msgid "Revert gap between characters" -msgstr "Сброс расстояния между буквами" +msgstr "Сбросить интервал" msgid "Distance between characters" msgstr "Расстояние между буквами" msgid "Revert gap between lines" -msgstr "Сброс расстояния между строк" +msgstr "Сбросить интервал" msgid "Distance between lines" msgstr "Расстояние между строк" msgid "Undo boldness" -msgstr "Сброс толщины шрифта" +msgstr "Сбросить толщину" msgid "Tiny / Wide glyphs" msgstr "Расширение/сужение символов" msgid "Undo letter's skew" -msgstr "Сброс наклона букв" +msgstr "Сбросить наклон" msgid "Italic strength ratio" msgstr "Коэффициент наклона символов" +# Не отображается из-за бага – слайсер автоматически обнуляет смещение от поверхности, но при этом геометрия остаётся где надо msgid "Undo translation" -msgstr "Сброс перемещения" +msgstr "Сбросить смещение" msgid "Distance of the center of the text to the model surface." -msgstr "Расстояние от центра текста до поверхности модели." +msgstr "Расстояние от центра текста до поверхности модели" msgid "Undo rotation" msgstr "Отменить вращение" msgid "Rotate text Clockwise." -msgstr "Наклон текста в фронтальной плоскости." +msgstr "Наклон текста в фронтальной плоскости" msgid "Unlock the text's rotation when moving text along the object's surface." msgstr "" @@ -1189,7 +1198,7 @@ msgid "Set text to face camera" msgstr "Разместить параллельно экрану" msgid "Orient the text towards the camera." -msgstr "Сориентировать текст по направлению к камере." +msgstr "Выровнять текст по направлению к камере" #, boost-format msgid "Font \"%1%\" can't be used. Please select another." @@ -2073,14 +2082,14 @@ msgid "" "No - Do not change these settings for me" msgstr "" "На верхней поверхности модели присутствует рельефный текст. Для достижения " -"оптимального результата рекомендуется установить значение «Порог одного " -"периметра» (min_width_top_surface) равным 0, чтобы хорошо работал параметр " -"«Только один периметр на верхней поверхности».\n" -"Да - Изменить эти настройки автоматически\n" -"Нет - Не изменять эти настройки" +"оптимального результата рекомендуется установить «Порог одного " +"периметра» (min_width_top_surface) равным 0, чтобы избежать проблем в работе настройки " +"«Только один периметр на верхней поверхности».\n\n" +"Да – применить рекомендуемые настройки\n" +"Нет – ничего не менять" msgid "Suggestion" -msgstr "" +msgstr "Рекомендация" msgid "Text" msgstr "Текст" @@ -2299,19 +2308,19 @@ msgid "Select All Plates" msgstr "Выбрать все столы" msgid "Select all objects on all plates" -msgstr "" +msgstr "Выбрать все модели на всех столах" msgid "Delete All" msgstr "Удалить всё" msgid "Delete all objects on the current plate" -msgstr "Удаление всех моделей на текущем столе" +msgstr "Удалить все модели на текущем столе" msgid "Arrange" msgstr "Расставить" msgid "Arrange current plate" -msgstr "Расстановка моделей на текущем столе" +msgstr "Расставить модели на текущем столе" msgid "Reload All" msgstr "Перезагрузить всё" @@ -2466,8 +2475,9 @@ msgstr "Ошибка!" msgid "Failed to get the model data in the current file." msgstr "Не удалось получить данные модели из текущего файла." +# Базовый примитив – опасно оставлять узкоспециализированный перевод (чисто для фигур), т.к. Generic уже сейчас используется в названии начала профилей. Если им добавят локализацию, получится неуместно. msgid "Generic" -msgstr "Базовый примитив" +msgstr "Базовый" msgid "Add Modifier" msgstr "Добавление модификатора" @@ -2661,8 +2671,8 @@ msgstr "Неправильное числовое значение." #, fuzzy msgid "One cell can only be copied to one or more cells in the same column." msgstr "" -"одна ячейка может быть скопирована только в одну или несколько ячеек одного " -"и того же столбца" +"Ячейку можно скопировать только в одну или несколько ячеек " +"того же столбца." msgid "Copying multiple cells is not supported." msgstr "Копирование нескольких ячеек не поддерживается." @@ -3284,36 +3294,38 @@ msgstr "" "отправки печати на принтер." msgid "Bad input data for EmbossCreateObjectJob." -msgstr "" +msgstr "Некорректный ввод для EmbossCreateObjectJob." msgid "Add Emboss text object" -msgstr "" +msgstr "Добавление рельефного текста" msgid "Bad input data for EmbossUpdateJob." -msgstr "" +msgstr "Некорректный ввод для EmbossUpdateJob." +# Вылазит при попытке ввода в поле рельефного текста любых символов, которых нет в шрифте. Например, разные вариации пробелов модифицированной ширины, составные смайлы или другие необычные символы юникода msgid "Created text volume is empty. Change text or font." -msgstr "" +msgstr "Текст имеет нулевой объём. Попробуйте изменить текст или шрифт." msgid "Bad input data for CreateSurfaceVolumeJob." -msgstr "" +msgstr "Некорректный ввод для CreateSurfaceVolumeJob." msgid "Bad input data for UseSurfaceJob." -msgstr "" +msgstr "Некорректный ввод для CreateSurfaceVolumeJob." #. TRN: This is the title of the action appearing in undo/redo stack. #. It is same for Text and SVG. msgid "Emboss attribute change" -msgstr "" +msgstr "Изменение свойств рельефа" msgid "Add Emboss text Volume" -msgstr "" +msgstr "Добавление объёма рельефного текста" msgid "Font doesn't have any shape for given text." -msgstr "" +msgstr "В шрифте отсутствуют данные для создания формы введённого текста." +# Вызывается при попытке взаимодействия с настройками текста, отодвинутого за пределы модели с включённым режимом проецирования msgid "There is no valid surface for text projection." -msgstr "" +msgstr "Невозможно спроецировать текст." msgid "Thermal Preconditioning for first layer optimization" msgstr "Преднагрев для оптимизации первого слоя" @@ -3901,7 +3913,7 @@ msgid "" "Failed to install the plug-in. The plug-in file may be in use. Please " "restart OrcaSlicer and try again. Also check whether it is blocked or " "deleted by anti-virus software." -msgstr "" +msgstr "Не удалось установить плагин. Возможно, файл занят другим процессом: попробуйте перезапустить OrcaSlicer и установить его заново. Также проверьте, не заблокирован/не удалён ли он антивирусом." msgid "Click here to see more info" msgstr "Подробнее о проблеме" @@ -4242,11 +4254,11 @@ msgid "" "alternate extra wall\n" "No - Don't use alternate extra wall" msgstr "" -"Изменить эти настройки автоматически?\n" -"Да - Изменить в «Обеспечивать верт. толщину оболочки» на значение " -"«Умеренное» и включить чередующуюся дополнительную стенку\n" -"Нет - Отказаться от использования чередующейся дополнительной стенки" +"Использовать менее точный вариант?\n" +"Да – включить «Умеренное» сохранение толщины\n" +"Нет – не включать дополнительную стенку" +# Тоже устарело, сейчас высота слоя поддержек просто синхронизируется со слоями модели при включении башни msgid "" "Prime tower does not work when Adaptive Layer Height or Independent Support " "Layer Height is on.\n" @@ -4254,35 +4266,37 @@ msgid "" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height and Independent Support Layer Height" msgstr "" -"Черновая башня не работает, когда включена функция «Переменная высота слоёв» " -"или «Независимая высота слоя поддержки»\n" -"Что вы хотите сохранить?\n" -"ДА - Сохранить черновую башню\n" -"НЕТ - Сохранить переменную высоту слоя и независимую высоту слоя поддержки" +"Черновая башня не работает с переменной высотой слоёв и " +"независимой высотой слоя поддержки.\n" +"Отключить эти настройки?\n" +"Да – отключить и сохранить черновую башню\n" +"Нет – отключить черновую башню" +# Судя по всему, легаси. Сейчас слайсер блокирует возможность нарезки при таком сочетании настроек и выводит ошибку в уведомлении, это сообщение не выводится. msgid "" "Prime tower does not work when Adaptive Layer Height is on.\n" "Which do you want to keep?\n" "YES - Keep Prime Tower\n" "NO - Keep Adaptive Layer Height" msgstr "" -"Черновая башня не работает, когда включена функция «Переменная высота " -"слоёв».\n" -"Что вы хотите сохранить?\n" -"Да - Сохранить черновую башню\n" -"Нет - Сохранить переменную высоту слоёв" +"Черновая башня не работает с переменной высотой " +"слоёв.\n" +"Очистить данные переменной высоты?\n" +"Да – очистить и сохранить черновую башню\n" +"Нет – отключить черновую башню" +# Тоже устарело, сейчас высота слоя поддержек просто синхронизируется со слоями модели при включении башни msgid "" "Prime tower does not work when Independent Support Layer Height is on.\n" "Which do you want to keep?\n" "YES - Keep Prime Tower\n" "NO - Keep Independent Support Layer Height" msgstr "" -"Черновая башня не работает, если включена функция «Независимая высота слоя " -"поддержки»\n" -"Что вы хотите сохранить?\n" -"ДА - Сохранить черновую башню\n" -"НЕТ - Сохранить независимую высоту слоя поддержки" +"Черновая башня не работает с независимой высотой слоя " +"поддержки.\n" +"Отключить независимую высоту слоя?\n" +"Да – отключить и сохранить черновую башню\n" +"Нет – отключить черновую башню" msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" @@ -4296,8 +4310,8 @@ msgid "" "Lock depth should smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" -"Глубина блокировки должна быть меньше глубины скин-слоя.\n" -"Сбросьте значение до 50% от глубины скин-слоя." +"Перекрытие должно быть меньше внутренней оболочки.\n" +"Значение будет сброшено до 50% от оболочки." msgid "" "Both [Extrusion] and [Combined] modes of Fuzzy Skin require the Arachne Wall " @@ -4417,6 +4431,7 @@ msgstr "Калибровка шума моторов" msgid "Pause (AMS offline)" msgstr "Пауза (потеря связи с AMS)" +# Скорость охлаждения тут само по себе не очень корректно – "скорость вентилятора охлаждения термобарьера" msgid "Pause (low speed of the heatbreak fan)" msgstr "Пауза (заниженная скорость охлаждения термобарьера)" @@ -4832,16 +4847,16 @@ msgid "Line Width" msgstr "Ширина линии" msgid "Actual Speed" -msgstr "Фактическая скорость" +msgstr "Действительная скорость" msgid "Fan Speed" -msgstr "Скорость охлаждения" +msgstr "Охлаждение" msgid "Flow" -msgstr "Поток" +msgstr "Объёмный расход" msgid "Actual Flow" -msgstr "Фактический поток" +msgstr "Действительный расход" msgid "Tool" msgstr "Инструмент" @@ -4852,8 +4867,9 @@ msgstr "Время слоя" msgid "Layer Time (log)" msgstr "Время слоя (лог. шкала)" +# Режим просмотра кода msgid "Pressure Advance" -msgstr "" +msgstr "Коррекция давления (PA)" # Сокращение от No Operation? В коде комментариев не нашёл, используется в EMoveType (тип движения экструдера) msgid "Noop" @@ -4936,8 +4952,9 @@ msgstr "" msgid "mm/s" msgstr "мм/с" +# В идеале должно быть "Объёмный расход", но кое-как пытаемся совместить с меню калибровок. Используется в табличке просмотра слоёв в значении "расход" и в меню калибровок в значении "поток". msgid "Flow rate" -msgstr "Объёмный расход" +msgstr "Расход" msgid "mm³/s" msgstr "мм³/с" @@ -4984,11 +5001,12 @@ msgstr "Инструмент: " msgid "Color: " msgstr "Материал: " +# Все эти строки находятся в панели свойств линии, излишняя длина тут раздувает всю панель. Конкретно здесь Actual Speed означает скорость прохождения конкретного угла/точки сегмента кривой, т.к. минимальный шаг просмотра линии привязан к командам G-кода. msgid "Actual Speed: " -msgstr "Фактическая скорость: " +msgstr "Скорость в точке: " msgid "PA: " -msgstr "" +msgstr "PA: " msgid "Statistics of All Plates" msgstr "Статистика по всем столам" @@ -5411,7 +5429,6 @@ msgstr "" msgid "Fit camera to scene or selected object." msgstr "Показать текущий объект" -# ??? Отсюда и далее – несорт (ещё не добавлены разработчиками в файл en-локализации). Закомментированные – подвержены багу кодировки (#4042) msgid "3D Navigator" msgstr "Навигатор видов" @@ -5422,7 +5439,7 @@ msgid "Overhangs" msgstr "Нависания" msgid "Outline" -msgstr "Подсветка выбранного" +msgstr "Обводка выбранного" msgid "Perspective" msgstr "Перспектива" @@ -5431,7 +5448,7 @@ msgid "Axes" msgstr "Оси координат" msgid "Gridlines" -msgstr "" +msgstr "Разметка" msgid "Labels" msgstr "Имена моделей" @@ -5901,10 +5918,10 @@ msgid "Deletes all objects" msgstr "Удалить все модели" msgid "Clone selected" -msgstr "Копия выбранного" +msgstr "Копировать выбранное" msgid "Clone copies of selections" -msgstr "Сделать копию выбранного" +msgstr "Создать копии выбранного" msgid "Duplicate Current Plate" msgstr "Дублировать стол" @@ -5954,10 +5971,10 @@ msgstr "" "Показать навигационный куб в режиме подготовки и предварительного просмотра." msgid "Show Gridlines" -msgstr "" +msgstr "Показать разметку" msgid "Show Gridlines on plate" -msgstr "" +msgstr "Показать разметку стола" msgid "Reset Window Layout" msgstr "Сбросить настройки окон" @@ -5999,28 +6016,32 @@ msgid "Max flowrate" msgstr "Макс. объёмный расход" msgid "Pressure advance" -msgstr "Pressure Advance (PA)" +msgstr "Коэффициент PA" +# Хотя бы в скобках, но отсылаем к калибровке потока, а не расхода (баг #6970) msgid "Pass 1" -msgstr "Проход 1" +msgstr "Первый проход (примерный подбор потока)" +# Описание для диктора? Подсказка для других систем? Не нашёл, где выводится в Windows. msgid "Flow rate test - Pass 1" msgstr "Тест потока - 1-ый проход" msgid "Pass 2" -msgstr "Проход 2" +msgstr "Второй проход (точный подбор потока)" +# Описание для диктора? Подсказка для других систем? Не нашёл, где выводится в Windows. msgid "Flow rate test - Pass 2" msgstr "Тест потока - 2-ой проход" +# YOLO – калибровка "с первого раза", "Одним махом", You Only Look Once (https://github.com/OrcaSlicer/OrcaSlicer/pull/6479) msgid "YOLO (Recommended)" -msgstr "YOLO (рекомендуется)" +msgstr "Экспресс-калибровка потока (YOLO, шаг 0.01, рекомендуется)" msgid "Orca YOLO flowrate calibration, 0.01 step" msgstr "Калибровка потока YOLO (шаг 0.01)" msgid "YOLO (perfectionist version)" -msgstr "YOLO (версия для перфекционистов)" +msgstr "Точная экспресс-калибровка (YOLO, шаг 0.005, для перфекционистов)" msgid "Orca YOLO flowrate calibration, 0.005 step" msgstr "Калибровка потока YOLO (шаг 0.005)" @@ -6029,7 +6050,7 @@ msgid "Retraction test" msgstr "Тест откатов" msgid "Cornering" -msgstr "Скорость прохождения углов" +msgstr "Тест прохождения углов" msgid "Cornering calibration" msgstr "Калибровка прохождения углов" @@ -7794,7 +7815,7 @@ msgid "Another export job is running." msgstr "Уже идёт другой процесс экспорта." msgid "Unable to replace with more than one volume" -msgstr "Невозможно заменить более чем одним объём" +msgstr "Замена одной модели на несколько не поддерживается" msgid "Error during replace" msgstr "Ошибка при выполнении замены" @@ -8167,11 +8188,11 @@ msgstr "Настройки стола" #, boost-format msgid "Number of currently selected parts: %1%\n" -msgstr "Количество выбранных частей: %1%\n" +msgstr "Выбрано частей: %1%\n" #, boost-format msgid "Number of currently selected objects: %1%\n" -msgstr "Количество выбранных моделей: %1%\n" +msgstr "Выбрано моделей: %1%\n" #, boost-format msgid "Part name: %1%\n" @@ -8300,13 +8321,13 @@ msgid "" "\n" "Continue with enabling this feature?" msgstr "" -"Использование материалов с значительно отличающимися температурами может " +"Использование материалов со значительно отличающимися температурами может " "вызвать:\n" -"• засорению сопла\n" -"• повреждению сопла\n" -"• проблемам с адгезией\n" +"• засорение сопла;\n" +"• повреждение сопла;\n" +"• проблемы с адгезией.\n" "\n" -"Включить эту функцию и продолжить? " +"Включить эту функцию и продолжить?" # Сканирование IP принтеров в сети и поиск файла сертификата в файловом менеджере msgid "Browse" @@ -8417,8 +8438,9 @@ msgstr "Ограничение последних файлов" msgid "Maximum count of recent files" msgstr "Максимальное количество последних файлов" +# Тонкие пробелы для подгонки к ширине (переносится из-за одного лишнего символа) msgid "Add STL/STEP files to recent files list" -msgstr "Сохранять STL/STEP в списке последних" +msgstr "Сохранять STL/STEP в списке последних" msgid "Don't warn when loading 3MF with modified G-code" msgstr "Отключить предупреждение при загрузке 3MF с модифицированным G-кодом" @@ -8455,10 +8477,10 @@ msgstr "" "печати для каждого принтера и восстанавливать их при переключении." msgid "Group user filament presets" -msgstr "Группировка пользовательских материалов" +msgstr "Группировка пользов. материалов" msgid "Group user filament presets based on selection" -msgstr "" +msgstr "Объединять пользовательские профили материалов в подгруппы по выбранному критерию." # в Сохранение толщины вертикальной оболочки. # было Везде, но из-за условия совместимости изменено.... как тогда быть? @@ -8472,16 +8494,16 @@ msgid "By vendor" msgstr "Производитель" msgid "Optimize filaments area height for..." -msgstr "" +msgstr "Отображать в секции профилей до" msgid "(Requires restart)" msgstr "(требуется перезапуск)" msgid "filaments" -msgstr "" +msgstr "материалов" msgid "Optimizes filament area maximum height by chosen filament count." -msgstr "" +msgstr "Ограничить высоту секции с материалами проекта. При превышении лимита будет отображаться полоса прокрутки." msgid "Features" msgstr "Возможности" @@ -9350,10 +9372,12 @@ msgstr "[%s] требует прогретой среды для печати: msgid "[ %s ] requires printing in a high-temperature environment." msgstr "[%s] требует прогретой среды." +# Речь о прутке в голове или о материале как таковом? #, c-format, boost-format msgid "The filament on %s may soften. Please unload." msgstr "Материал в %s может размягчиться. Выгрузите его." +# Речь о прутке в голове или о материале как таковом? #, c-format, boost-format msgid "The filament on %s is unknown and may soften. Please set filament." msgstr "Материал в %s не распознан и может размягчиться. Настройте материал." @@ -9363,8 +9387,9 @@ msgid "" "match." msgstr "Не удалось подобрать подходящий материал. Нажмите для ручного выбора." +# toolhead enhanced cooling fan – торговое название приблуды для H2D/H2C для одновременного обдува моделей через термобарьеры: https://us.store.bambulab.com/products/toolhead-enhanced-cooling-fan msgid "Install toolhead enhanced cooling fan to prevent filament softening." -msgstr "" +msgstr "Установите улучшенный вентилятор обдува (Toolhead Enhanced Cooling Fan) во избежание размягчения прутка в термобарьере." msgid "Smooth Cool Plate" msgstr "Гладкое (низкотемп.)" @@ -9740,26 +9765,30 @@ msgstr "" "Не рекомендуется использовать нерастворимый материал для поддержек.\n" "Вы действительно хотите использовать их?\n" +# "Отступ между линиями связующего слоя: 0" или "Сплошной связующий слой"? msgid "" "When using support material for the support interface, we recommend the " "following settings:\n" "0 top Z distance, 0 interface spacing, interlaced rectilinear pattern and " "disable independent support layer height." msgstr "" -"При использовании материала поддержки для интерфейса поддержки мы " -"рекомендуем следующие настройки:\n" -"0 верхнее расстояние по оси Z, 0 межинтерфейсный интервал, чересстрочный " -"прямолинейный узор и отключение независимой высоты слоя поддержки." +"При использовании специальных поддерживающих материалов для связующего слоя " +"рекомендуются следующие настройки:\n" +"• Зазор поддержки сверху: 0\n" +"• Отступ между линиями связующего слоя: 0\n" +"• Шаблон связующего слоя: чередующийся зигзаг\n" +"• Независимая высота слоя поддержки: выкл." msgid "" "Change these settings automatically?\n" "Yes - Change these settings automatically\n" "No - Do not change these settings for me" msgstr "" -"Изменить эти настройки автоматически?\n" -"Да - Изменить эти настройки автоматически\n" -"Нет - Не изменять эти настройки" +"Изменить эти настройки?\n" +"Да – применить рекомендуемые настройки\n" +"Нет – ничего не менять" +# "Отступ между линиями связующего слоя: 0" или "Сплошной связующий слой"? msgid "" "When using soluble material for the support interface, we recommend the " "following settings:\n" @@ -9768,11 +9797,11 @@ msgid "" "and use soluble materials for both support interface and support base." msgstr "" "Для печати растворимым материалом рекомендуются следующие настройки:\n" -"• нулевой вертикальный зазор\n" -"• сплошной связующий слой\n" -"• шаблон «зигзаг»\n" -"• независимая высота слоя поддержек: выкл\n" -"• растворимый материал для всей поддержки" +"• Зазор поддержки сверху: 0\n" +"• Отступ между линиями связующего слоя: 0\n" +"• Шаблон связующего слоя: зигзаг\n" +"• Независимая высота слоя поддержки: выкл\n" +"• Растворимый материал для всей поддержки" msgid "" "Enabling this option will modify the model's shape. If your print requires " @@ -10065,7 +10094,7 @@ msgstr "" "не задано." msgid "Flow ratio and Pressure Advance" -msgstr "Коэффициент потока и Pressure Advance (PA)" +msgstr "Поток и коррекция давления (PA)" msgid "Print chamber temperature" msgstr "Температура в термокамере при печати" @@ -10339,6 +10368,7 @@ msgstr "" msgid "Layer height limits" msgstr "Ограничение высоты слоя" +# Не совсем правильно (CoreXY, VZbot и подобные для этого опускают стол), но зато интуитивно понятно новичкам. Возможно, в будущем придумаю компромиссный вариант. msgid "Z-Hop" msgstr "Подъём головы при откате" @@ -10350,9 +10380,9 @@ msgid "" "\n" "Shall I disable it in order to enable Firmware Retraction?" msgstr "" -"Параметр очистки недоступен при использовании отката из прошивки.\n" +"Очистка при откате недоступна при использовании отката из прошивки.\n" "\n" -"Отключить его для включения отката из прошивки?" +"Отключить её?" msgid "Firmware Retraction" msgstr "Откат из прошивки" @@ -10554,10 +10584,10 @@ msgid "Select presets to compare" msgstr "Выберите профили для сравнения" msgid "Left Preset Value" -msgstr "" +msgstr "Значения левого профиля" msgid "Right Preset Value" -msgstr "" +msgstr "Значения правого профиля" msgid "" "You can only transfer to current active profile because it has been modified." @@ -10574,14 +10604,13 @@ msgstr "" "диалогового окна." msgid "Transfer values from left to right" -msgstr "Перенос значений слева направо" +msgstr "Перенести значения из левого профиля" msgid "" "If enabled, this dialog can be used for transfer selected values from left " "to right preset." msgstr "" -"Если включено, это диалоговое окно можно использовать для переноса выбранных " -"значений из левого профиля в правый." +"При включении активируется режим выбора значений из левого профиля для переноса в правый." msgid "Add File" msgstr "Добавить файл" @@ -11008,10 +11037,10 @@ msgid "Login" msgstr "Войти" msgid "[Action Required] " -msgstr "" +msgstr "[Требуется действие] " msgid "[Action Required]" -msgstr "" +msgstr "[Требуется действие]" msgid "The configuration package is changed in previous Config Guide" msgstr "Пакет профилей был изменён при предыдущем запуске мастера настройки" @@ -11806,9 +11835,10 @@ msgstr "" "Попробуйте уменьшить размер модели или изменить текущие настройки печати и " "повторить попытку." +# Organic supports воспринимается как неправильный перевод древовидных поддержек, лучше написать развёрнуто msgid "Variable layer height is not supported with Organic supports." msgstr "" -"Функция переменной высоты слоя несовместима с органическими поддержками." +"Функция переменной высоты слоя несовместима с органическим стилем древовидных поддержек." msgid "" "Different nozzle diameters and different filament diameters may not work " @@ -11919,15 +11949,17 @@ msgstr "" "Для черновой башни требуется, чтобы поддержка и модель имели одинаковую " "высоту слоя." +# избегаем "поддержек поддерживает" msgid "" "For Organic supports, two walls are supported only with the Hollow/Default " "base pattern." -msgstr "" +msgstr "Только с шаблон заполнения «Полость» (по умолчанию) может иметь 2 периметра у поддержек с органическим стилем." +# избегаем "поддержек поддерживается" msgid "" "The Lightning base pattern is not supported by this support type; " "Rectilinear will be used instead." -msgstr "" +msgstr "Шаблон заполнения «Молния» несовместим с текущим стилем поддержек и будет заменён на зигзаг." msgid "" "Organic support tree tip diameter must not be smaller than support material " @@ -12279,7 +12311,7 @@ msgstr "" "Максимальное расстояние обхода сопла от модели во избежание пересечения " "периметров при движении. Если расстояние обхода превышает это значение, то " "для данного маршрута эта опция не применяется. Можно указать значение в " -"милиметрах или процент от прямого пути перемещения (например, 50%). 0 - " +"миллиметрах или процент от прямого пути перемещения (например, 50%). 0 - " "отключено." msgid "mm or %" @@ -12955,8 +12987,9 @@ msgstr "" "печатались в чередующихся направлениях на чётных слоях независимо от степени " "их нависания." +# предлагаю тут не ограничиваться исключительно зенковкой/цековкой, т.к. настройка работает глобально для разных форм мостов и дыр в них. msgid "Bridge counterbore holes" -msgstr "Мост для зенкованных отверстий" +msgstr "Опора отверстий в мостах" msgid "" "This option creates bridges for counterbore holes, allowing them to be " @@ -12965,14 +12998,10 @@ msgid "" "2. Partially Bridged: Only a part of the unsupported area will be bridged\n" "3. Sacrificial Layer: A full sacrificial bridge layer is created" msgstr "" -"Эта опция создаёт мосты для отверстий с зенковкой, позволяя печатать их без " -"поддержки.\n" -"\n" -"Опции:\n" -"1. Нет (т.е. отключено)\n" -"2. Частичный мост (мост будет построен только над частью неподдерживаемой " -"области)\n" -"3. Жертвенный слой (создаётся полноценный жертвенный слой моста)" +"Метод печати мостов с отверстиями в них. Позволяет обходиться без применения поддержек.\n" +"• Нет (обычный режим)\n" +"• Частичный мост (пропускать печать моста через отверстие)\n" +"• Жертвенный слой (заполнить отверстие жертвенной мембраной)" msgid "Partially bridged" msgstr "Частичный мост" @@ -13319,7 +13348,7 @@ msgstr "" msgid "Extra bridge layers (beta)" msgstr "Двухслойные мосты (beta)" -# ??? Внутренние мосты учитываются в подсчёте слоёв верхней оболочки модели. +# ??? Внутренние мосты учитываются в подсчёте слоёв верхней оболочки модели. + удалил лишний перенос строки в конце msgid "" "This option enables the generation of an extra bridge layer over internal " "and/or external bridges.\n" @@ -13375,7 +13404,7 @@ msgstr "" "заполнением для лучшего формирования опорной плоскости. Внимание: внутренние " "мосты учитываются в общем количестве верхних слоёв модели.\n" "4. Везде – создавать доп. слой как для внутренних, так и для внешних " -"мостов.\n" +"мостов." msgid "Disabled" msgstr "Отключено" @@ -13435,7 +13464,7 @@ msgstr "" "\n" "Ограниченная фильтрация - создаёт внутренние мосты на сильно наклонных " "поверхностях, при этом избегая создания ненужных внутренних мостов. Это " -"хорошо работает на большинстве сложных моделях.n\n" +"хорошо работает с большинством сложных моделей.n\n" "\n" "Без фильтрации - мосты создаются над каждым потенциально внутреннем " "нависании. Этот вариант полезен для моделей с сильно наклонной верхней " @@ -13682,8 +13711,7 @@ msgstr "" "помимо прочего внутренний периметр стабилизирует поток материала к началу " "печати внешнего. Требуется минимум 3 периметра: сначала печатаются крайние " "внутренние, затем внешний и оставшийся внутренний. В большинстве случаев " -"предпочтительнее, чем «Снаружи внутрь».\n" -"." +"предпочтительнее, чем «Снаружи внутрь»." msgid "Inner/Outer" msgstr "Изнутри наружу" @@ -13909,7 +13937,7 @@ msgstr "" "прошивке Marlin." msgid "Enable adaptive pressure advance (beta)" -msgstr "Адаптивный Pressure advance (beta)" +msgstr "Адаптивный PA (beta)" #, no-c-format, no-boost-format msgid "" @@ -14014,9 +14042,9 @@ msgstr "" " наиболее быстрого теста.\n" "\n" "3. Проверьте порядок введённых значений (PA, расход, ускорения) и сохраните " -"профиль материала.\n" -" " +"профиль материала." +# Тут речь о коэффициенте PA (адаптивный коэффициент PA), а не об адаптивном алгоритме msgid "Enable adaptive pressure advance for overhangs (beta)" msgstr "Адаптивный PA на нависаниях (beta)" @@ -14032,7 +14060,7 @@ msgstr "" "однородностью на внешних поверхностях до и после нависаний.\n" msgid "Pressure advance for bridges" -msgstr "Pressure Advance на мостах" +msgstr "Коэффициент PA на мостах" msgid "" "Pressure advance value for bridges. Set to 0 to disable.\n" @@ -15118,7 +15146,7 @@ msgstr "" "Доступны несколько вариантов применения." msgid "Painted only" -msgstr "Только покрашенное" +msgstr "Вручную" msgid "Contour" msgstr "Контур" @@ -15677,10 +15705,10 @@ msgstr "" "заполнения." msgid "Skin infill depth" -msgstr "Толщина оболочки" +msgstr "Область оболочки" msgid "The parameter sets the depth of skin." -msgstr "Задаёт глубину генерации оболочки." +msgstr "Задаёт глубину создания внутренней оболочки." msgid "Infill lock depth" msgstr "Перекрытие заполнения" @@ -15689,7 +15717,7 @@ msgid "The parameter sets the overlapping depth between the interior and skin." msgstr "Задаёт ширину взаимного перекрытия зигзага и его оболочки." msgid "Skin line width" -msgstr "Ширина линий оболочки" +msgstr "Ширина линии оболочки" msgid "Adjust the line width of the selected skin paths." msgstr "" @@ -15732,7 +15760,7 @@ msgstr "" "Максимальная высота объединённого слоя заполнения.\n" "\n" "Можно указать процент от диаметра сопла (не более 100%) или значение в " -"милиметрах (0 мм = ∅ сопла). Рекомендуется не более ≈80% для быстрой и " +"миллиметрах (0 мм = ∅ сопла). Рекомендуется не более ≈80% для быстрой и " "прочной печати.\n" "\n" "Количество объединяемых слоёв заполнения получается путём деления этого " @@ -16230,11 +16258,11 @@ msgstr "" "\n" "Для скоростных принтеров с прямой системой подачи и производительным " "экструдером (например, Bambu lab или Voron) сглаживание подачи обычно не " -"требуется.Однако в некоторых случаях, когда скорость печати сильно " +"требуется. Однако в некоторых случаях, когда скорость печати сильно " "различается, это может принести дополнительную пользу. Например, когда " "происходят резкие замедления из-за нависаний. В этих случаях рекомендуется " "использовать высокое значение, составляющее около 300-350 мм³/с², при " -"оптимально настроенном Pressure Advance это поможетдостичь более плавного " +"оптимально настроенном Pressure Advance (коррекции давления) это поможет достичь более плавного " "перехода.\n" "\n" "У более медленных принтеров с внешней системой подачи или прошивкой без " @@ -16620,13 +16648,13 @@ msgstr "" "значения." msgid "Retract amount before wipe" -msgstr "Величина отката перед очисткой" +msgstr "Первичный откат" msgid "" "The length of fast retraction before wipe, relative to retraction length." msgstr "" -"Длина быстрого отката перед очисткой, выраженная в процентах от общей длины " -"отката." +"Быстрый откат перед очисткой, выраженный в процентах от общей длины " +"отката. Меньшие значения снижают заметность шва, так как это уменьшает время задержки над ним разогретого сопла. Бóльшие значения в паре со сниженной скоростью очистки снижают количество «паутины».\n\nПримечание: значение не может быть меньше 25% или больше 100% и будет скорректировано автоматически при нарезке." msgid "Retract when change layer" msgstr "Откат при смене слоя" @@ -16858,9 +16886,11 @@ msgstr "Начальная позиция для печати каждой ча msgid "Nearest" msgstr "Ближайшая" +# Что на Вики слайсера, что в коде этот режим описан как обнаружение углов в контуре слоя и размещение шва в них, так что это изначально правильный вариант. При этом прежнее "выровненный" даёт ложные ассоциации с выравниванием по вертикали на деталях без углов (шар, цилиндр, конус и т.п.), хотя в реальности алгоритм в таких случаях немного сходит с ума и рисует шов криво и в случайном месте, даже если выбран "Aligned back". msgid "Aligned" msgstr "В углах" +# Аналогично предыдущему msgid "Aligned back" msgstr "В углах сзади" @@ -16871,13 +16901,13 @@ msgid "Random" msgstr "Случайная" msgid "Staggered inner seams" -msgstr "Смещение внутренних швов" +msgstr "Смещать внутренние швы" msgid "" "This option causes the inner seams to be shifted backwards based on their " "depth, forming a zigzag pattern." msgstr "" -"Ступенчато смещает швы внутренних периметров, улучшая прочность и " +"Ступенчато смещать швы внутренних периметров, улучшая прочность и " "герметичность стыка." msgid "Seam gap" @@ -16889,10 +16919,9 @@ msgid "" "This amount can be specified in millimeters or as a percentage of the " "current extruder diameter. The default value for this parameter is 10%." msgstr "" -"Чтобы уменьшить видимость шва при печати замкнутого контура, контур будет " -"укорачиваться на заданную величину.\n" -"Можно указать значение в милиметрах или процент от диаметра сопла. Значение " -"по умолчанию - 10%." +"Позволяет укоротить периметры на заданную длину, чтобы уменьшить видимость шва.\n" +"Можно указать значение в миллиметрах или процент от диаметра сопла. Значение " +"по умолчанию – 10%.\n\nВнимание: большой зазор может ухудшить печать коротких периметров." msgid "Scarf joint seam (beta)" msgstr "Косой шов (beta)" @@ -16973,7 +17002,7 @@ msgid "" "current layer height. The default value for this parameter is 0." msgstr "" "Начальная высота косого шва.\n" -"Можно указать значение в милиметрах или процент от высоты текущего слоя. " +"Можно указать значение в миллиметрах или процент от высоты текущего слоя. " "Значение по умолчанию - 0." msgid "Scarf around entire wall" @@ -17021,7 +17050,7 @@ msgstr "" # Это точно не очистка в привычном понимании, судя по работе функции. Возможно, ошибка в оригинале. | ВНИМАНИЕ: несмотря на название и официальное описание на Вики, фактически создаваемое движение направлено не внутрь, а в направлении шва!!! То есть, к точке начала линии. Это отчётливо видно, если поставить зазор шва в 1 и более мм и нарисовать его на ровной стенке. Это приводит к дополнительной задержке хотэнда над швом, так как траектория меняется на ≈90° (движение к точке начала линии и только потом перескок на внутренний периметр). | Возможно, разработчики вслепую портировали функцию из бамбу студио. | UPD: похоже на то, коммит 2a478ab4f9bdc1bc1fbc9dfadbb717df6e5a38a9, порт кода из Bambu Studio 1.7.4. | Судя по всему, эта настройка пришла из Cura/SuperSlicer: https://github.com/bambulab/BambuStudio/issues/1247#issuecomment-1424942133 (функция coasting, "накат")|| Очистка перед швом, сброс давления перед швом msgid "Wipe on loops" -msgstr "Сброс давления в конце периметра" +msgstr "Сброс давления на шве" msgid "" "To minimize the visibility of the seam in a closed loop extrusion, a small " @@ -17061,7 +17090,7 @@ msgstr "" "\n" "Полезно для снижения переэкструзии на шве при печати периметров «Снаружи " "внутрь» или «Навстречу», когда начало внешнего периметра совпадает с подачей " -"материала после отката.\n" +"материала после отката.\n\n" "Внимание: при порядке «Изнутри наружу» упреждающей подачи не происходит, " "однако смещение для неё всё равно создаётся, что приводит к ненужному рывку " "при переходе от внутреннего периметра к внешнему." @@ -17158,10 +17187,10 @@ msgid "Per object" msgstr "Для каждой модели" msgid "Skirt loops" -msgstr "Петель юбки" +msgstr "Контуров юбки" msgid "Number of loops for the skirt. Zero means disabling skirt." -msgstr "Количество линий юбки вокруг модели. 0 - отключение юбки." +msgstr "Количество контуров юбки вокруг модели. 0 - отключение юбки." msgid "Skirt speed" msgstr "Ограничение скорости юбки" @@ -17172,7 +17201,7 @@ msgstr "" "(мм/с). 0 – соблюдать ограничение слоя." msgid "Skirt minimum extrusion length" -msgstr "Мин. длина экструзии юбки" +msgstr "Мин. длина юбки" msgid "" "Minimum filament extrusion length in mm when printing the skirt. Zero means " @@ -17667,6 +17696,7 @@ msgstr "Ограничение скорости при печати связую msgid "Base pattern" msgstr "Шаблон поддержки" +# А ещё «Полость» автоматически заменяется на «Зигзаг» при печати обычных поддержек. msgid "" "Line pattern of support.\n" "\n" @@ -17678,6 +17708,20 @@ msgid "" "Slim/Strong/Hybrid supports. For the other support types, the Rectilinear " "will be used instead of Lightning." msgstr "" +"Шаблон заполнения поддержек.\n" +"\n" +"• По умолчанию: «Зигзаг» для обычных и «Полость» для древовидных\n поддержек.\n" +"• Зигзаг: быстрый и лёгкий для удаления шаблон.\n" +"• Чередующийся зигзаг: прочная структура для тонких поддержек.\n" +"• Соты: заполнение вертикальными шестигугольными сотами.\n" +"• Молния: предельно экономичный шаблон.\n" +"• Полость: классический вид древовидных поддержек без заполнения.\n" +"\n" +"Внимание:\n2 периметра у органического стиля древовидных поддержек может" +"иметь только с шаблон «Полость» (по умолчанию).\nШаблон " +"заполнения «Молния» несовместим с обычным типом поддержек и органическим " +"стилем древовидных поддержек, при\nвыборе несовместимых настроек он будет " +"заменён на зигзаг." msgid "Rectilinear grid" msgstr "Чередующийся зигзаг" @@ -17693,9 +17737,14 @@ msgid "" "interface is Rectilinear, while default pattern for soluble support " "interface is Concentric." msgstr "" -"Шаблон печати связующего слоя поддержек. «По умолчанию»: выбор зигзага для " -"обычных поддержек и эквидистант для растворимых." +"Шаблон печати связующего слоя поддержек.\n\n• По умолчанию: «Зигзаг» для " +"обычных и «Эквидистанты» для\n растворимых материалов поддержки.\n" +"• Зигзаг: быстрый и лёгкий для удаления шаблон.\n" +"• Эквидистанты: хорошо поддерживают поверхности неправильной\n формы, подходят для растворимых материалов в сочетании с\n небольшим зазором и отступом.\n" +"• Чередующийся зигзаг: лучше формирует контактную поверхность\n в промежутках между точками опоры основной части поддержек.\n" +"• Сетка: хорошо сопротивляется деформации при печати длинных\n нависающих элементов." +# То же самое, что и Rectilinear grid, просто повёрнуто на 45° msgid "Rectilinear Interlaced" msgstr "Чередующийся зигзаг" @@ -18125,20 +18174,22 @@ msgstr "" msgid "Wipe while retracting" msgstr "Очистка сопла при откате" +# ... чтобы вытереть об неё подтёки материала с кончика сопла. msgid "" "Move nozzle along the last extrusion path when retracting to clean any " "leaked material on the nozzle. This can minimize blobs when printing a new " "part after traveling." msgstr "" -"Если включено, то во время отката экструдер продолжит движение вдоль " -"периметра модели, чтобы очистить сопло от вытекшего материала. Это может " -"снизить появление дефектов (капель, пупырышек) при печати нового участка " -"после перемещения." +"Выполнять откат совместно с небольшим движением вдоль напечатанной линии, " +"чтобы очистить сопло от подтёков материала. Это может уменьшить " +"«паутину» и дефекты переэкструзии при печати новой линии после " +"холостого перемещения." +# Как выяснилось в чате K3D, "Расстояние очистки" вводит людей в заблуждение, т.к. из-за путаницы в старой терминологии люди думали, что очистка здесь – это откат (его часть). msgid "Wipe Distance" -msgstr "Расстояние очистки" +msgstr "Длина движения очистки" -# ??? Установка значения в приведенном ниже параметре «Величина отката перед очисткой», приведёт к дополнительному втягиванию на заданную тут величину, в противном случае оно будет выполнено после. +# Очень кривая формулировка с "retraction move" – в другой настройке в оригинале так назван непосредственно откат, что вводит в заблуждение. Тут имеется ввиду именнт движение при откате, при котором остатки пластика вытираются об линию. Зачем это дублируется здесь – без понятия, эта же информация в другой формулировке сообщается пользователю в предыдущей настройке. Удалено последнее предложение – оно не имеет ничего общего с реальностью и вводит в заблуждение (см. описание первичного отката) msgid "" "Describe how long the nozzle will move along the last path when retracting.\n" "\n" @@ -18149,22 +18200,15 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform " "any excess retraction before the wipe, else it will be performed after." msgstr "" -"Задаёт расстояние перемещения, добавленное после печати последнего участка " -"пути при совершении отката.\n" -"В зависимости от продолжительности очистки, скорости и величины отката в " -"настройках экструдера/прутка, может потребоваться дополнительное втягивание, " -"чтобы втянуть остатки материла.\n" -"\n" -"Если в параметре «Величина отката перед очисткой» задано значение (включая " -"0), дополнительное втягивание произойдет до очистки. Если параметр отключён " -"- после очистки." +"Расстояние перемещения при выполнении движения очистки.\n\n" +"В зависимости от длительности очистки, скорости и длины отката настройка перемещения может потребоваться, чтобы лучше очищать подтёки материала из сопла." msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " "stabilize the chamber pressure inside the nozzle, in order to avoid " "appearance defects when printing objects." msgstr "" -"Черновая башня – специальная структура, которая используется для очистки " +"Черновая башня – специальная структура, которая используется для прочистки " "сопла от остатков материала и стабилизации давления внутри сопла при смене " "экструдера, чтобы избежать дефектов на поверхности печатаемой модели." @@ -18306,6 +18350,7 @@ msgstr "" msgid "Rib width" msgstr "Ширина ребра" +# Может лучше "будет ограничена половиной ширины башни"? msgid "Rib width is always less than half the prime tower side length." msgstr "Ширина ребра не будет превышать половину ширины башни." @@ -18956,9 +19001,11 @@ msgstr "" "Если включено, будет проверяться совместимость текущего принтера с " "принтерами из списка." +# Есть подозрение, что пропущен макрос перевода, и текст не отображается msgid "Downward machines settings" msgstr "Настройка текущих принтеров" +# Есть подозрение, что пропущен макрос перевода, и текст не отображается msgid "The machine settings list needs to do downward checking." msgstr "Необходимо выполнить проверку списка настроек текущего принтера." @@ -19495,22 +19542,26 @@ msgstr "Обнаруживать нависания для автоподъём msgid "Checking support necessity" msgstr "Проверка необходимости поддержки" +# Выводится, если на слое обнаружен контур, не связанный с основным и не имеющий опоры (по сути, парящие кусочки пластика) msgid "floating regions" -msgstr "нависающие части" +msgstr "подвешенные части" +# Выводится, если в контуре слоя обнаружен выступ, не имеющий поддержки (число не проверяется, они либо есть, либо нет) msgid "floating cantilever" -msgstr "нависающий горизонтальный выступ (консоль)" +msgstr "нависающие выступы" +# Никогда не выводится, мёртвый код msgid "large overhangs" -msgstr "большая область нависания" +msgstr "крупные нависания" +# Подставляются floating regions, floating cantilever или large overhangs #, c-format, boost-format msgid "" "It seems object %s has %s. Please re-orient the object or enable support " "generation." msgstr "" -"Похоже, что у модели %s имеются замечания - %s.\n" -"Переориентируйте её или включите генерацию поддержки." +"Похоже, что у модели %s имеются %s.\n" +"Переориентируйте её или включите поддержки." msgid "Generating support" msgstr "Генерация поддержки" @@ -19593,7 +19644,6 @@ msgstr "Этот OBJ файл не может быть прочитан, так msgid "Flow Rate Calibration" msgstr "Калибровка скорости потока" -# ????7 msgid "Max Volumetric Speed Calibration" msgstr "Калибровка макс. объёмного расхода" @@ -20222,8 +20272,9 @@ msgstr "" "Существует несколько IP-адресов, соответствующих имени хоста %1%.\n" "Пожалуйста, выберите тот, который хотите использовать." +# В заголовке окна куча места msgid "PA Calibration" -msgstr "Калибровка PA" +msgstr "Калибровка Pressure Advance" msgid "Extruder type" msgstr "Тип подающего механизма" @@ -20329,8 +20380,9 @@ msgstr "" "Конечная температура: ≥ 155\n" "Начальная температура ≥ Конечная температура + 5" +# В заголовке окна куча места msgid "Max volumetric speed test" -msgstr "Тест макс. объёмного расхода" +msgstr "Тест максимального объёмного расхода" msgid "Start volumetric speed: " msgstr "Начальный объёмный расход: " @@ -20392,20 +20444,25 @@ msgstr "Тип шейпера" msgid "" "Please ensure the selected type is compatible with your firmware version." -msgstr "" +msgstr "Убедитесь, что выбранный шейпер совместим с версией прошивки." +# https://marlinfw.org/docs/features/ft_motion.html и https://youtu.be/6sN71fx9frk msgid "" "Marlin version => 2.1.2\n" "Fixed-Time motion not yet implemented." msgstr "" +"Требуется Marlin 2.1.2 или новее.\n" +"Функция «Fixed-Time motion» пока не реализована." msgid "Klipper version => 0.9.0" -msgstr "" +msgstr "Требуется Klipper 0.9.0 или новее." msgid "" "RepRap firmware version => 3.4.0\n" "Check your firmware documentation for supported shaper types." msgstr "" +"Требуется RepRap 3.4.0 или новее.\n" +"Обратитесь к документации прошивки для определения поддерживаемых шейперов." msgid "Frequency (Start / End): " msgstr "Частота (начало/конец)" @@ -20415,7 +20472,7 @@ msgid "Start / End" msgstr "(начало/конец)" msgid "Frequency settings" -msgstr "Задание частоты" +msgstr "Настройка частоты" msgid "Hz" msgstr "Гц" @@ -20449,7 +20506,7 @@ msgid "Input shaping Damp test" msgstr "Тест затухания Input shaping" msgid "Check firmware compatibility." -msgstr "" +msgstr "Проверьте совместимость с прошивкой." msgid "Frequency: " msgstr "Частота: " @@ -20480,7 +20537,7 @@ msgstr "" "1)" msgid "Cornering test" -msgstr "Тест скорости на углах" +msgstr "Тест прохождения углов" msgid "SCV-V2" msgstr "SCV-V2" @@ -20492,7 +20549,7 @@ msgid "End: " msgstr "Конец: " msgid "Cornering settings" -msgstr "Диапазон скоростей" +msgstr "Тестируемый диапазон" msgid "Note: Lower values = sharper corners but slower speeds.\n" msgstr "" @@ -22524,7 +22581,7 @@ msgstr "" "Позиция шва\n" "Знаете ли вы, что можно изменить расположение шва и даже нарисовать его на " "модели, чтобы он был менее заметен? Это улучшает общий вид модели. " -"Попробуйте это!" +"Попробуйте!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -22671,6 +22728,121 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" +# Несорт (не добавлены в файл локализации) +msgid "Face and face assembly" +msgstr "Сборка по граням" + +msgid "Point and point assembly" +msgstr "Сборка по точкам" + +msgid "NO RAMMING AT ALL" +msgstr "Рэмминг отключён" + +msgid "Step file import parameters" +msgstr "Параметры импорта STEP" + +msgid "" +"Smaller linear and angular deflections result in higher-quality " +"transformations but increase the processing time." +msgstr "" +"Уменьшение линейного и углового отклонений повышает качество поверхности " +"и время обработки." + +msgid "Linear Deflection" +msgstr "Линейное отклонение" + +msgid "Angle Deflection" +msgstr "Угловое отклонение" + +msgid "Please input a valid value (0.001 < linear deflection < 0.1)" +msgstr "Укажите допустимое значение линейного отклонения (от 0.001 до 0.1)" + +msgid "Please input a valid value (0.01 < angle deflection < 1.0)" +msgstr "Укажите допустимое значение углового отклонения (от 0.01 до 1.0)" + +msgid "Split compound and compsolid into multiple objects" +msgstr "Разделять модель из нескольких тел на части" + +msgid "Number of triangular facets" +msgstr "Количество треугольников" + +msgid "Calculating, please wait..." +msgstr "Расчёт, подождите..." + +msgid "Rib" +msgstr "Усиленная" + +msgid "Bambu Network Plugin Required" +msgstr "Требуется сетевой плагин Bambu" + +msgid "Network Plugin Update Available" +msgstr "Доступно обновление сетевого плагина" + +msgid "" +"The Bambu Network Plugin is corrupted or incompatible. Please reinstall " +"it." +msgstr "" +"Сетевой плагин Bambu повреждён или несовместим. Требуется переустановка." + +msgid "" +"The Bambu Network Plugin is required for cloud features, printer " +"discovery, and remote printing." +msgstr "" +"Для удалённой печати, облачных функций и поиска принтеров требуется " +"сетевой плагин Bambu." + +msgid "A new version of the Bambu Network Plugin is available." +msgstr "Доступна новая версия сетевого плагина Bambu." + +msgid "Show details" +msgstr "Подробнее" + +msgid "Version to install:" +msgstr "Версия для установки:" + +msgid "Current version: %s" +msgstr "Текущая версия:" + +msgid "Update to version:" +msgstr "Обновление до версии:" + +msgid "Download and Install" +msgstr "Загрузить и установить" + +# Делает то же самое, что и Remind Later, просто выводится при обнаружении повреждения, а не при обновлении +msgid "Skip for Now" +msgstr "Напомнить позже" + +msgid "Update Now" +msgstr "Установить обновление" + +msgid "Remind Later" +msgstr "Напомнить позже" + +msgid "Skip Version" +msgstr "Пропустить версию" + +msgid "Don't Ask Again" +msgstr "Не напоминать" + +msgid "The Bambu Network Plugin has been installed successfully." +msgstr "Сетевой плагин Bambu успешно установлен." + +# Второе предложение избыточно и тупо повторяет содержание кнопки ниже +msgid "" +"A restart is required to load the new plugin. Would you like to restart " +"now?" +msgstr "Для загрузки плагина требуется перезапуск." + +msgid "Restart Now" +msgstr "Перезапустить сейчас" + +msgid "Restart Later" +msgstr "Перезапустить позже" + +msgid "Error: %s" +msgstr "Ошибка: %s" + #~ msgid "Line pattern of support." #~ msgstr "Шаблон печати поддержки." @@ -22706,46 +22878,6 @@ msgstr "" #~ msgid "Volumetric flow rate" #~ msgstr "Объёмный расход" -#~ msgid "Face and face assembly" -#~ msgstr "Сборка по граням" - -#~ msgid "Point and point assembly" -#~ msgstr "Сборка по точкам" - -#~ msgid "NO RAMMING AT ALL" -#~ msgstr "Рэмминг отключён" - -#~ msgid "Step file import parameters" -#~ msgstr "Параметры импорта STEP" - -#~ msgid "" -#~ "Smaller linear and angular deflections result in higher-quality " -#~ "transformations but increase the processing time." -#~ msgstr "" -#~ "Уменьшение линейного и углового отклонений повышает качество поверхности " -#~ "и время обработки." - -#~ msgid "Linear Deflection" -#~ msgstr "Линейное отклонение" - -#~ msgid "Angle Deflection" -#~ msgstr "Угловое отклонение" - -#~ msgid "Please input a valid value (0.001 < linear deflection < 0.1)" -#~ msgstr "Укажите допустимое значение линейного отклонения (от 0.001 до 0.1)" - -#~ msgid "Please input a valid value (0.01 < angle deflection < 1.0)" -#~ msgstr "Укажите допустимое значение углового отклонения (от 0.01 до 1.0)" - -#~ msgid "Split compound and compsolid into multiple objects" -#~ msgstr "Разделять модель из нескольких тел на части" - -#~ msgid "Number of triangular facets" -#~ msgstr "Количество треугольников" - -#~ msgid "Calculating, please wait..." -#~ msgstr "Расчёт, подождите..." - #~ msgid "" #~ "Bambu Lab has implemented a signature verification check in their network " #~ "plugin that restricts third-party software from communicating with your " @@ -22759,83 +22891,6 @@ msgstr "" #~ "\n" #~ "Из-за этого некоторые функции печати недоступны через OrcaSlicer." -#~ msgid "Rib" -#~ msgstr "Усиленная" - -#~ msgid "Check on Github" -#~ msgstr "Открыть на GitHub" - -#~ msgid "Bambu Network Plugin Required" -#~ msgstr "Требуется сетевой плагин Bambu" - -#~ msgid "Network Plugin Update Available" -#~ msgstr "Доступно обновление сетевого плагина" - -#~ msgid "" -#~ "The Bambu Network Plugin is corrupted or incompatible. Please reinstall " -#~ "it." -#~ msgstr "" -#~ "Сетевой плагин Bambu повреждён или несовместим. Требуется переустановка." - -#~ msgid "" -#~ "The Bambu Network Plugin is required for cloud features, printer " -#~ "discovery, and remote printing." -#~ msgstr "" -#~ "Для удалённой печати, облачных функций и поиска принтеров требуется " -#~ "сетевой плагин Bambu." - -#~ msgid "A new version of the Bambu Network Plugin is available." -#~ msgstr "Доступна новая версия сетевого плагина Bambu." - -#~ msgid "Show details" -#~ msgstr "Подробнее" - -#~ msgid "Version to install:" -#~ msgstr "Версия для установки:" - -#~ msgid "Current version: %s" -#~ msgstr "Текущая версия:" - -#~ msgid "Update to version:" -#~ msgstr "Обновление до версии:" - -#~ msgid "Download and Install" -#~ msgstr "Загрузить и установить" - -# Делает то же самое, что и Remind Later, просто выводится при обнаружении повреждения, а не при обновлении -#~ msgid "Skip for Now" -#~ msgstr "Напомнить позже" - -#~ msgid "Update Now" -#~ msgstr "Установить обновление" - -#~ msgid "Remind Later" -#~ msgstr "Напомнить позже" - -#~ msgid "Skip Version" -#~ msgstr "Пропустить версию" - -#~ msgid "Don't Ask Again" -#~ msgstr "Не напоминать" - -#~ msgid "The Bambu Network Plugin has been installed successfully." -#~ msgstr "Сетевой плагин Bambu успешно установлен." - -# Второе предложение избыточно и тупо повторяет содержание кнопки ниже -#~ msgid "" -#~ "A restart is required to load the new plugin. Would you like to restart " -#~ "now?" -#~ msgstr "Для загрузки плагина требуется перезапуск." - -#~ msgid "Restart Now" -#~ msgstr "Перезапустить сейчас" - -#~ msgid "Restart Later" -#~ msgstr "Перезапустить позже" - -#~ msgid "Error: %s" -#~ msgstr "Ошибка: %s" - #~ msgid "Filament remapping finished." #~ msgstr "Перераспределение филамента завершено." From d6ba6cb8f961b3ac0de7c32599d9ac08887d5183 Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Wed, 4 Mar 2026 21:40:54 +0300 Subject: [PATCH 03/67] Minor tweaks --- localization/i18n/ru/OrcaSlicer_ru.po | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 8814f349c1..9b99cc2967 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -8438,7 +8438,7 @@ msgstr "Ограничение последних файлов" msgid "Maximum count of recent files" msgstr "Максимальное количество последних файлов" -# Тонкие пробелы для подгонки к ширине (переносится из-за одного лишнего символа) +# Костыль с тонкими пробелами для подгонки к ширине (переносится из-за одного лишнего символа) msgid "Add STL/STEP files to recent files list" msgstr "Сохранять STL/STEP в списке последних" @@ -13000,8 +13000,8 @@ msgid "" msgstr "" "Метод печати мостов с отверстиями в них. Позволяет обходиться без применения поддержек.\n" "• Нет (обычный режим)\n" -"• Частичный мост (пропускать печать моста через отверстие)\n" -"• Жертвенный слой (заполнить отверстие жертвенной мембраной)" +"• Частичный мост (пропускать мосты с отверстиями)\n" +"• Жертвенный слой (заполнять отверстия мембраной)" msgid "Partially bridged" msgstr "Частичный мост" @@ -13139,7 +13139,7 @@ msgstr "" "паре с вертикальными стенками модели делает кайму бессмысленной." msgid "Brim follows compensated outline" -msgstr "Учитывать компенсацию контура" +msgstr "Учитывать сдвиг контура" msgid "" "When enabled, the brim is aligned with the first-layer perimeter geometry " @@ -13165,19 +13165,18 @@ msgid "Only draw brim over the sharp edges of the model." msgstr "Генерировать кайму только на острых краях модели." msgid "Brim ear max angle" -msgstr "Максимальный угол ушек каймы" +msgstr "Максимальный угол ушек" msgid "" "Maximum angle to let a brim ear appear.\n" "If set to 0, no brim will be created.\n" "If set to ~180, brim will be created on everything but straight sections." msgstr "" -"Максимальный угол, при котором печатается ушко каймы.\n" -"При 0°, кайма не создаётся.\n" -"При ~180°, кайма будет создаваться на всех участках, кроме прямых." +"Максимальный угол выступа для размещения каймы.\n" +"При ≈180° кайма будет создаваться на всех выступающих участках.\n 0 – отключение каймы." msgid "Brim ear detection radius" -msgstr "Радиус обнаружения ушек каймы" +msgstr "Радиус обнаружения ушек" msgid "" "The geometry will be decimated before detecting sharp angles. This parameter " @@ -15316,7 +15315,7 @@ msgstr "" "значения приведут к сглаживанию шума." msgid "Filter out tiny gaps" -msgstr "Минимальный размер щели" +msgstr "Минимальная длина щели" msgid "Layers and Perimeters" msgstr "Слои и периметры" @@ -15375,7 +15374,7 @@ msgstr "" "помощью слайсера, а затем снова в линейные сегменты с помощью прошивки." msgid "Add line number" -msgstr "Добавить номер строки" +msgstr "Нумеровать строки" msgid "" "Enable this to add line number(Nx) at the beginning of each G-code line." @@ -15802,7 +15801,7 @@ msgid "" msgstr "" "Параметр указывает на сколько процентов заполнение будет перекрываться с " "периметром для лучшего соединения друг с другом. Установите значение равным " -"~10-15%, чтобы свести к минимуму вероятность чрезмерной экструзии и " +"≈10-15%, чтобы свести к минимуму вероятность чрезмерной экструзии и " "накопления материала приводящее к шероховатости поверхности." msgid "Top/Bottom solid infill/wall overlap" @@ -17193,7 +17192,7 @@ msgid "Number of loops for the skirt. Zero means disabling skirt." msgstr "Количество контуров юбки вокруг модели. 0 - отключение юбки." msgid "Skirt speed" -msgstr "Ограничение скорости юбки" +msgstr "Скорость юбки" msgid "Speed of skirt, in mm/s. Zero means use default layer extrusion speed." msgstr "" @@ -17201,7 +17200,7 @@ msgstr "" "(мм/с). 0 – соблюдать ограничение слоя." msgid "Skirt minimum extrusion length" -msgstr "Мин. длина юбки" +msgstr "Минимальная длина юбки" msgid "" "Minimum filament extrusion length in mm when printing the skirt. Zero means " From f9bbfd5ea224563e0a9c6c1c069a2e3b4b8e1e60 Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Wed, 4 Mar 2026 21:56:10 +0300 Subject: [PATCH 04/67] Unfix unnecessary line break --- localization/i18n/ru/OrcaSlicer_ru.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 9b99cc2967..6fd5db357c 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -13403,7 +13403,7 @@ msgstr "" "заполнением для лучшего формирования опорной плоскости. Внимание: внутренние " "мосты учитываются в общем количестве верхних слоёв модели.\n" "4. Везде – создавать доп. слой как для внутренних, так и для внешних " -"мостов." +"мостов.\n" msgid "Disabled" msgstr "Отключено" 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 05/67] 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 2a30344d05b41c88dc138c94b7839d40f2359719 Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Thu, 5 Mar 2026 19:25:52 +0300 Subject: [PATCH 06/67] Tweak before merging upstream changes --- localization/i18n/ru/OrcaSlicer_ru.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 6fd5db357c..41c6d314f6 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7626,6 +7626,7 @@ msgid "" "template settings?" msgstr "Сбросить настройки поворота шаблона заполнения?" +# Подставляется номер версии файла, "Orca Slicer", установленная версия #, fuzzy, c-format, boost-format msgid "" "The 3MF file version %s is newer than %s's version %s, found the following " @@ -18414,11 +18415,12 @@ msgstr "" "башни. Поскольку температура нагревателя не может меняться мгновенно, это " "должно обеспечить время на её стабилизацию к началу основной печати." +# Тут именно интервал, 100% – расположение вплотную (т.е. нулевой отступ) msgid "Infill gap" -msgstr "Отступ между линиями" +msgstr "Интервал между линиями" msgid "Infill gap." -msgstr "Управление плотностью расположения линий сброса материала." +msgstr "Управление отступом между линиями сброса материала." msgid "" "Purging after filament change will be done inside objects' infills. This may " From 8dd57b0c98144da3991bfb2b9f5c31d1ce0891bc Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Thu, 5 Mar 2026 21:16:40 +0300 Subject: [PATCH 07/67] Restore merged changes --- localization/i18n/ru/OrcaSlicer_ru.po | 88 +++++++++++++++++---------- 1 file changed, 56 insertions(+), 32 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 293dfd6821..b7535c8cfe 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -1543,14 +1543,17 @@ msgstr "" "Выбор элемента 1 отменён,\n" "элемент 2 стал элементом 1" +# Зачем здесь "внимание"? Это просто руководство к действию msgid "Warning: please select Plane's feature." msgstr "Внимание: выберите плоскость." +# Зачем здесь "внимание"? Это просто руководство к действию msgid "Warning: please select Point's or Circle's feature." msgstr "Внимание: выберите точку или окружность." +# Зачем здесь "внимание"? Это просто руководство к действию msgid "Warning: please select two different meshes." -msgstr "Внимание: выберите требуемый элемент на втором объекте." +msgstr "Внимание: выберите элемент на втором объекте." msgid "Copy to clipboard" msgstr "Копировать в буфер обмена" @@ -1594,13 +1597,13 @@ msgid "Assemble" msgstr "Объединить в сборку" msgid "Please confirm explosion ratio = 1 and select at least two volumes." -msgstr "" +msgstr "Отключите разнесение и выберите сборку из нескольких частей." msgid "Please select at least two volumes." msgstr "Выберите хотя бы две модели." msgid "(Moving)" -msgstr "" +msgstr "(подвижная)" msgid "Point and point assembly" msgstr "Сборка по точкам" @@ -1610,6 +1613,9 @@ msgid "" "because the objects is restriced to bed \n" "and only parts can be lifted." msgstr "" +"Рекомендуется сначала совместить модели \n" +"и только потом собирать их части, так как\n" +"части не ограничены плоскостью стола." msgid "Face and face assembly" msgstr "Сборка по граням" @@ -1630,7 +1636,7 @@ msgstr "Возможно, этот профиль создан в более н msgid "Some values have been replaced. Please check them:" msgstr "Некоторые значения были заменены. Пожалуйста, проверьте их:" -# ?????6 В одном месте юзается? +# ?????6 В одном месте юзается? Felix: Нет, в трёх, но везде в значении настроек печати. msgid "Process" msgstr "Настройки" @@ -1653,53 +1659,62 @@ msgstr "" msgid "Based on PrusaSlicer and BambuStudio" msgstr "Основан на PrusaSlicer и BambuStudio" +# В окне выбора файла msgid "STEP files" -msgstr "" +msgstr "Файлы STEP" +# В окне выбора файла msgid "STL files" -msgstr "" +msgstr "Файлы STL" +# В окне выбора файла msgid "OBJ files" -msgstr "" +msgstr "Файлы OBJ" +# В окне выбора файла msgid "AMF files" -msgstr "" +msgstr "Файлы AMF" +# В окне выбора файла msgid "3MF files" -msgstr "" +msgstr "Файлы 3MF" +# В окне выбора файла msgid "Gcode 3MF files" -msgstr "" +msgstr "Файлы G-code 3MF" +# В окне выбора файла msgid "G-code files" -msgstr "" +msgstr "Файлы G-code" +# В окне выбора файла msgid "Supported files" -msgstr "" +msgstr "Поддерживаемые файлы" msgid "ZIP files" -msgstr "" +msgstr "ZIP-архивы" msgid "Project files" -msgstr "" +msgstr "Файлы проектов" msgid "Known files" -msgstr "" +msgstr "Известные файлы" msgid "INI files" -msgstr "" +msgstr "Файлы INI" msgid "SVG files" -msgstr "" +msgstr "Файлы SVG" +# Тянется из окна выбора текстуры стола и из строки со списком типа файлов для открытия (png/svg) msgid "Texture" msgstr "Текстура" msgid "Masked SLA files" -msgstr "" +msgstr "Файлы SLA" msgid "Draco files" -msgstr "" +msgstr "Файлы Draco" msgid "" "OrcaSlicer will terminate because of running out of memory. It may be a bug. " @@ -1821,11 +1836,12 @@ msgid "Choose one or more files (3MF/STEP/STL/SVG/OBJ/AMF):" msgstr "Выберите один или несколько файлов (3MF/STEP/STL/SVG/OBJ/AMF):" msgid "Choose ZIP file" -msgstr "Выберите zip-файл" +msgstr "Выберите zip-архив" msgid "Choose one file (GCODE/3MF):" -msgstr "Выберите файл (GCODE/3MF):" +msgstr "Выберите файл (Gcode/3MF):" +# Тянется из окна выбора файлов (в значении "Расширение"), где-то в интерфейсе AMS (без понятия в каком контексте, у меня нет AMS :D) и в неком окне выбора AMS (AmsMappingPopup) msgid "Ext" msgstr "" @@ -2253,7 +2269,7 @@ msgid "Restore to meters" msgstr "Восстановить в миллиметры" msgid "Assemble the selected objects to an object with multiple parts" -msgstr "Объединение выбранных объектов в модель, состоящую из несколько частей" +msgstr "Объединение выбранных объектов в модель, состоящую из нескольких частей" msgid "Assemble the selected objects to an object with single part" msgstr "Объединение выбранных моделей в единую" @@ -2780,7 +2796,7 @@ msgstr "Тип линии" #, c-format, boost-format msgid "1x1 Grid: %d mm" -msgstr "" +msgstr "Размер ячейки: %d мм" msgid "More" msgstr "Подробнее" @@ -3951,6 +3967,8 @@ msgid "" "Failed to download the plug-in. Please check your firewall settings and VPN " "software and retry." msgstr "" +"Не удалось загрузить плагин. Пожалуйста, проверьте настройки брандмауэра и " +"VPN и повторите попытку." msgid "" "Failed to install the plug-in. The plug-in file may be in use. Please " @@ -5865,7 +5883,7 @@ msgid "Load a model" msgstr "Загрузка модели" msgid "Import Zip Archive" -msgstr "Импорт ZIP-архив" +msgstr "Импорт ZIP-архива" msgid "Load models contained within a zip archive" msgstr "Загрузка моделей, содержащихся в ZIP-архиве" @@ -6944,7 +6962,7 @@ msgstr "" "успешная запись о печати данным профилем печати." msgid "click to add machine" -msgstr "" +msgstr "добавить устройство" msgid "Status" msgstr "Статус" @@ -6958,11 +6976,11 @@ msgstr "" #, c-format, boost-format msgid "Network plug-in v%s" -msgstr "" +msgstr "Сетевой плагин v%s" #, c-format, boost-format msgid "Network plug-in v%s (%s)" -msgstr "" +msgstr "Сетевой плагин v%s (%s)" msgid "Don't show again" msgstr "Больше не показывать" @@ -9122,10 +9140,10 @@ msgid "Slicing Plate 1" msgstr "Нарезка стола 1" msgid "Packing data to 3MF" -msgstr "Упаковка данных в 3mf" +msgstr "Упаковка данных в 3MF" msgid "Uploading data" -msgstr "" +msgstr "Отправка данных" msgid "Jump to webpage" msgstr "Перейти на страницу" @@ -18383,6 +18401,7 @@ msgstr "" "3. Рёбра жёсткости, которые добавляются по четырём углам черновой башни для " "повышения устойчивости." +# Тянется из "Форма стола" и "Форма черновой башни" msgid "Rectangle" msgstr "Прямоугольник" @@ -22403,6 +22422,8 @@ msgid "" "The Bambu Network Plug-in is required for cloud features, printer discovery, " "and remote printing." msgstr "" +"Для удалённой печати, облачных функций и поиска принтеров требуется " +"сетевой плагин Bambu." #, c-format, boost-format msgid "Error: %s" @@ -22422,7 +22443,7 @@ msgid "Skip for Now" msgstr "Напомнить позже" msgid "A new version of the Bambu Network Plug-in is available." -msgstr "" +msgstr "Доступна новая версия сетевого плагина Bambu." #, fuzzy, c-format, boost-format msgid "Current version: %s" @@ -22460,8 +22481,9 @@ msgstr "Перезапустить позже" msgid "NO RAMMING AT ALL" msgstr "Рэмминг отключён" +# Тянется только в окно настроек рэмминга msgid "Volumetric speed" -msgstr "" +msgstr "Объёмный расход" msgid "Step file import parameters" msgstr "Параметры импорта STEP" @@ -22501,11 +22523,12 @@ msgstr "" "Материал может быть несовместим с текущими настройками принтера. Будет " "использоваться базовый профиль материала." -# Не знаю, что за "модель" материала, пропускаю. UPD: возможно, имеется ввиду модель коррекции объёмного расхода для функции адаптивного расхода у TPU (и подобных). Она задаётся вручную в файле профиля (производителем) и отсутствует у большинства системных профилей. +# Не знаю, что за "модель" материала, пропускаю. Возможно, имеется ввиду модель коррекции объёмного расхода для функции адаптивного расхода у TPU (и подобных). Она задаётся вручную в файле профиля (производителем) и отсутствует у большинства системных профилей. msgid "" "The filament model is unknown. Still using the previous filament preset." msgstr "" +# Не знаю, что за "модель" материала, пропускаю. Возможно, имеется ввиду модель коррекции объёмного расхода для функции адаптивного расхода у TPU (и подобных). Она задаётся вручную в файле профиля (производителем) и отсутствует у большинства системных профилей. msgid "The filament model is unknown. Generic filament presets will be used." msgstr "" @@ -22516,6 +22539,7 @@ msgstr "" "Материал может быть несовместим с текущими настройками принтера. Будет " "использоваться случайный профиль материала." +# Не знаю, что за "модель" материала, пропускаю. Возможно, имеется ввиду модель коррекции объёмного расхода для функции адаптивного расхода у TPU (и подобных). Она задаётся вручную в файле профиля (производителем) и отсутствует у большинства системных профилей. msgid "The filament model is unknown. A random filament preset will be used." msgstr "" From ccea80482e188fba09254138db13fcb4ff7cac1e Mon Sep 17 00:00:00 2001 From: yw4z Date: Sat, 7 Mar 2026 04:32:05 +0300 Subject: [PATCH 08/67] 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 09/67] 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 10/67] 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 11/67] 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 12/67] 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 13/67] 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 e6f3eb7fe941f791cba11131c7597af92a2089ef Mon Sep 17 00:00:00 2001 From: Valerii Bokhan <80919135+valerii-bokhan@users.noreply.github.com> Date: Tue, 10 Mar 2026 03:21:10 +0100 Subject: [PATCH 14/67] QoL: Default values in tooltips for Percent, FloatOrPercent, String and Bool options (#12508) QoL: Default values in tooltips for Percent, String and Bool options --- src/slic3r/GUI/Field.cpp | 72 ++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 4da5f8b092..93db4c32d2 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -101,43 +101,79 @@ ThumbnailErrors validate_thumbnails_string(wxString& str, const wxString& def_ex return errors; } +// Orca wxString get_formatted_tooltip_text(const ConfigOptionDef& opt, const t_config_option_key& id) { wxString tooltip = _(opt.tooltip); - if (tooltip.length() > 0) { - edit_tooltip(tooltip); + std::string opt_id = id; + auto hash_pos = opt_id.find("#"); + if (hash_pos != std::string::npos) { + opt_id.replace(hash_pos, 1,"["); + opt_id += "]"; + } - std::string opt_id = id; - auto hash_pos = opt_id.find("#"); - if (hash_pos != std::string::npos) { - opt_id.replace(hash_pos, 1,"["); - opt_id += "]"; - } + tooltip += (tooltip.empty() ? "" : "\n\n") + _(L("parameter name")) + ": " + opt_id; - tooltip += "\n\n" + _(L("parameter name")) + ": " + opt_id; + // Orca: + // We can't use Orca's default values as-is because they sometimes depend on other values. + // Parent preset configuration values will be used instead. + if (const Preset* print_parent_preset = wxGetApp().preset_bundle->prints.get_selected_preset_parent()) { + const DynamicPrintConfig& parent_config = print_parent_preset->config; - if (opt.type == coFloat || opt.type == coInt) { + if (!parent_config.has(opt_id)) + return tooltip; + + wxString side_text = from_u8(opt.sidetext); + + // Orca: a small hack for `layers` side text: adding a space before it for better looking text + if (opt.sidetext == L("layers")) + side_text = " " + _(side_text); + + if (opt.type == coFloat || opt.type == coInt || opt.type == coPercent || opt.type == coFloatOrPercent) { double default_value = 0.; if (opt.type == coFloat) - default_value = opt.get_default_value()->value; + default_value = parent_config.option(opt_id)->value; else if (opt.type == coInt) - default_value = opt.get_default_value()->value; + default_value = parent_config.option(opt_id)->value; + else if (opt.type == coPercent) + default_value = parent_config.option(opt_id)->value; + else if (opt.type == coFloatOrPercent) { + default_value = parent_config.option(opt_id)->value; + if (parent_config.option(opt_id)->percent) + side_text = "%"; + else if (!side_text.empty()) { + static std::string postfix = " or %"; + auto postfix_pos = side_text.find(postfix); + if (postfix_pos != std::string::npos) + side_text.erase(postfix_pos, postfix.length()); + } + } - tooltip += "\n\n" + _(L("Default")) + ": " + _(double_to_string(default_value)); + tooltip += "\n\n" + _(L("Default")) + ": " + _(double_to_string(default_value)) + _(side_text); if (opt.min > -FLT_MAX && opt.max < FLT_MAX) { tooltip += "\n" + _(L("Range")) + ": [" + - _(double_to_string(opt.min)) + ", " + - _(double_to_string(opt.max)) + "]"; + _(double_to_string(opt.min)) + _(side_text) + ", " + + _(double_to_string(opt.max)) + _(side_text) + "]"; } - } + } else if (opt.type == coBool || opt.type == coString) { + std::string default_value = ""; - return tooltip; + if (opt.type == coString) + default_value = parent_config.option(opt_id)->value; + else if (opt.type == coBool) + default_value = parent_config.option(opt_id)->value ? "true" : "false"; + + tooltip += "\n\n" + _(L("Default")) + ": " + + (default_value.empty() ? _(L("Empty string")) : _(default_value) + _(side_text)); + } } - return ""; + edit_tooltip(tooltip); + + return tooltip; } Field::~Field() From 97da125d627e1e10876b87993020a72b5470e6d3 Mon Sep 17 00:00:00 2001 From: tome9111991 <57866234+tome9111991@users.noreply.github.com> Date: Tue, 10 Mar 2026 08:28:21 +0100 Subject: [PATCH 15/67] FIX: hidden Line Type Linux (#12364) Fix(GCodeViewer): Resolve z-fighting for wipe, seam, and retract markers using shader depth bias Co-authored-by: SoftFever --- src/libvgcode/src/Shaders.hpp | 18 +++++++++++++++--- src/libvgcode/src/ViewerImpl.cpp | 11 ++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/libvgcode/src/Shaders.hpp b/src/libvgcode/src/Shaders.hpp index 826f9a4805..1450d1a6df 100644 --- a/src/libvgcode/src/Shaders.hpp +++ b/src/libvgcode/src/Shaders.hpp @@ -90,7 +90,10 @@ static const char* Segments_Vertex_Shader = " );\n" " int id = vertex_id < 4 ? id_a : id_b;\n" " vec3 endpoint_pos = vertex_id < 4 ? pos_a : pos_b;\n" -" vec3 height_width_angle = texelFetch(height_width_angle_tex, id).xyz;\n" +" vec4 hwa = texelFetch(height_width_angle_tex, id);\n" +" vec3 height_width_angle = hwa.xyz;\n" +" // ORCA: Extract bias from w component\n" +" float bias = hwa.w;\n" "#ifdef FIX_TWISTING\n" " int closer_id = (dot(camera_position - pos_a, camera_position - pos_a) < dot(camera_position - pos_b, camera_position - pos_b)) ? id_a : id_b;\n" " vec3 closer_pos = (closer_id == id_a) ? pos_a : pos_b;\n" @@ -131,6 +134,8 @@ static const char* Segments_Vertex_Shader = " }\n" " }\n" " vec3 eye_position = (view_matrix * vec4(pos, 1.0)).xyz;\n" +" // ORCA: Apply bias to z-position to avoid z-fighting\n" +" eye_position.z += bias;\n" " vec3 eye_normal = (view_matrix * vec4(normalize(pos - endpoint_pos), 0.0)).xyz;\n" " vec3 color_base = decode_color(texelFetch(color_tex, id).r);\n" " color = color_base * lighting(eye_position, eye_normal);\n" @@ -155,9 +160,11 @@ static const char* Options_Vertex_Shader = "const float light_front_diffuse = 0.6 * 0.3;\n" "const float ambient = 0.3;\n" "const float emission = 0.25;\n" -#ifndef _WIN32 +#ifdef __APPLE__ +// ORCA: Use smaller scaling factor for macOS "const float scaling_factor = 0.75;\n" #else +// ORCA: Increase seam marker size to 1.5 for Windows and Linux "const float scaling_factor = 1.5;\n" #endif "uniform mat4 view_matrix;\n" @@ -185,7 +192,10 @@ static const char* Options_Vertex_Shader = "}\n" "void main() {\n" " int id = int(texelFetch(segment_index_tex, gl_InstanceID).r);\n" -" vec2 height_width = texelFetch(height_width_angle_tex, id).xy;\n" +" vec4 hwa = texelFetch(height_width_angle_tex, id);\n" +" vec2 height_width = hwa.xy;\n" +" // ORCA: Extract bias from w component\n" +" float bias = hwa.w;\n" " vec3 offset = texelFetch(position_tex, id).xyz - vec3(0.0, 0.0, 0.5 * height_width.x);\n" " height_width *= scaling_factor;\n" " mat3 scale_matrix = mat3(\n" @@ -193,6 +203,8 @@ static const char* Options_Vertex_Shader = " 0.0, height_width.y, 0.0,\n" " 0.0, 0.0, height_width.x);\n" " vec3 eye_position = (view_matrix * vec4(scale_matrix * in_position + offset, 1.0)).xyz;\n" +" // ORCA: Apply bias to z-position to avoid z-fighting\n" +" eye_position.z += bias;\n" " vec3 eye_normal = (view_matrix * vec4(in_normal, 0.0)).xyz;\n" " vec3 color_base = decode_color(texelFetch(color_tex, id).r);\n" " color = color_base * lighting(eye_position, eye_normal);\n" diff --git a/src/libvgcode/src/ViewerImpl.cpp b/src/libvgcode/src/ViewerImpl.cpp index 8576d697ad..4732c042cf 100644 --- a/src/libvgcode/src/ViewerImpl.cpp +++ b/src/libvgcode/src/ViewerImpl.cpp @@ -966,9 +966,18 @@ static void extract_pos_and_or_hwa(const std::vector& vertices, floa height = v.height; width = v.width; } + + // ORCA: Set bias for wipes and options to avoid z-fighting + float bias = 0.0f; + if (v.is_wipe()) + bias = 0.05f; + else if (v.is_option()) + bias = 0.1f; + // the last component is a dummy float to comply with GL_RGBA32F format + // ORCA: Pass bias to shader heights_widths_angles->push_back({ height, width, - std::atan2(prev_line[0] * this_line[1] - prev_line[1] * this_line[0], dot(prev_line, this_line)), 0.0f }); + std::atan2(prev_line[0] * this_line[1] - prev_line[1] * this_line[0], dot(prev_line, this_line)), bias }); } } } From 382cf57166deac2a466f225311dc4575ecd11780 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 10 Mar 2026 15:57:15 +0800 Subject: [PATCH 16/67] QoL: Fix hotkeys blocked in Prepare view when notification is shown (#12715) Fix hotkeys blocked in Prepare view when notification is shown Restore SetFocus() in the GLCanvas3D mouse-entering handler so the canvas reclaims wxWidget keyboard focus whenever the mouse enters it (provided the main window is active). Without this, clicking a sidebar control or a UI update triggered by slicing could leave the canvas without focus, causing hotkeys like Tab to stop working until the user clicked the canvas or dismissed the notification. --- src/slic3r/GUI/GLCanvas3D.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 452c4301a3..2eff0298c9 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4277,15 +4277,16 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_canvas->SetFocus(); if (evt.Entering()) { -//#if defined(__WXMSW__) || defined(__linux__) -// // On Windows and Linux needs focus in order to catch key events - // Set focus in order to remove it from sidebar fields + // Set focus in order to remove it from sidebar fields and ensure hotkeys work if (m_canvas != nullptr) { - // Only set focus, if the top level window of this canvas is active. + // Only set focus if the top level window of this canvas is active. auto p = dynamic_cast(evt.GetEventObject()); while (p->GetParent()) p = p->GetParent(); auto *top_level_wnd = dynamic_cast(p); + //Orca: Set focus so hotkeys like 'tab' work when a notification is shown. + if (top_level_wnd != nullptr && top_level_wnd->IsActive()) + m_canvas->SetFocus(); m_mouse.position = pos.cast(); m_tooltip_enabled = false; // 1) forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while @@ -4297,7 +4298,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_tooltip_enabled = true; } m_mouse.set_start_position_2D_as_invalid(); -//#endif } else if (evt.Leaving()) { // to remove hover on objects when the mouse goes out of this canvas 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 17/67] 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 c9bf6f088a8b273d4149dc318e46292801cc9e94 Mon Sep 17 00:00:00 2001 From: yw4z Date: Tue, 10 Mar 2026 18:54:44 +0300 Subject: [PATCH 18/67] Remove duplicate items from actual speed plot (#12711) * init * update --- src/slic3r/GUI/GCodeViewer.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 443757a117..fe47b581c3 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1629,7 +1629,29 @@ void GCodeViewer::update_sequential_view_current(unsigned int first, unsigned in levels.push_back(std::make_pair(value, libvgcode::convert(color_range.get_color_at(value)))); levels.back().second.a(0.5f); } - m_sequential_view.marker.set_actual_speed_data(actual_speed_data); + + // ORCA Compress consecutive duplicate speeds with 0.1 precision + auto sameSpeed = [](float a, float b) { + return static_cast(std::roundf(a * 10.0f)) == static_cast(std::roundf(b * 10.0f)); + }; + std::vector compressed; + if (!actual_speed_data.empty()) { + compressed.push_back(actual_speed_data[0]); + for (int i = 1; i < (int)actual_speed_data.size(); ++i) { + const bool same_as_prev = sameSpeed(actual_speed_data[i].speed, actual_speed_data[i - 1].speed); + const bool same_as_next = (i + 1 < (int)actual_speed_data.size()) && sameSpeed(actual_speed_data[i].speed, actual_speed_data[i + 1].speed); + if (!same_as_prev) { + if (!sameSpeed(compressed.back().speed, actual_speed_data[i - 1].speed)) + compressed.push_back(actual_speed_data[i - 1]); + compressed.push_back(actual_speed_data[i]); + } else if (!same_as_next) + compressed.push_back(actual_speed_data[i]); + } + if (compressed.back().pos != actual_speed_data.back().pos) + compressed.push_back(actual_speed_data.back()); + } + + m_sequential_view.marker.set_actual_speed_data(compressed); m_sequential_view.marker.set_actual_speed_y_range(std::make_pair(interval[0], interval[1])); m_sequential_view.marker.set_actual_speed_levels(levels); } From b919148c66d54e6ded1917659dc6ae50dd240407 Mon Sep 17 00:00:00 2001 From: Valerii Bokhan <80919135+valerii-bokhan@users.noreply.github.com> Date: Tue, 10 Mar 2026 16:56:00 +0100 Subject: [PATCH 19/67] Fix: Added a warning if the Hollow base pattern is selected for the non-tree supports (#12710) Fixes point 4 of #12684 --- src/libslic3r/Print.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 56ff4513a8..7ec220dc73 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1526,6 +1526,10 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* // Orca: check if the Lightning base pattern selected warning->string = L("The Lightning base pattern is not supported by this support type; Rectilinear will be used instead."); warning->opt_key = "support_base_pattern"; + } else if (object->config().support_base_pattern == SupportMaterialPattern::smpNone && warning) { + // Orca: check if the Hollow base pattern selected + warning->string = L("The Hollow base pattern is not supported by this support type; Rectilinear will be used instead."); + warning->opt_key = "support_base_pattern"; } } From 5f54e694c4d6b4f849a175ce7e8301e330039a05 Mon Sep 17 00:00:00 2001 From: yw4z Date: Tue, 10 Mar 2026 18:56:17 +0300 Subject: [PATCH 20/67] Calibration dialog Fixes (incorrect validators, scaling issues, UI refinements) (#12702) * Update calib_dlg.cpp * match validators * update * add missing linebreak * update --- localization/i18n/ca/OrcaSlicer_ca.po | 2 +- localization/i18n/cs/OrcaSlicer_cs.po | 2 +- localization/i18n/de/OrcaSlicer_de.po | 6 +- localization/i18n/en/OrcaSlicer_en.po | 2 +- localization/i18n/es/OrcaSlicer_es.po | 6 +- localization/i18n/fr/OrcaSlicer_fr.po | 2 +- localization/i18n/hu/OrcaSlicer_hu.po | 4 +- localization/i18n/it/OrcaSlicer_it.po | 2 +- localization/i18n/ja/OrcaSlicer_ja.po | 2 +- localization/i18n/ko/OrcaSlicer_ko.po | 2 +- localization/i18n/lt/OrcaSlicer_lt.po | 2 +- localization/i18n/nl/OrcaSlicer_nl.po | 2 +- localization/i18n/pl/OrcaSlicer_pl.po | 2 +- localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 6 +- localization/i18n/ru/OrcaSlicer_ru.po | 7 +- localization/i18n/sv/OrcaSlicer_sv.po | 2 +- localization/i18n/tr/OrcaSlicer_tr.po | 2 +- localization/i18n/uk/OrcaSlicer_uk.po | 2 +- localization/i18n/vi/OrcaSlicer_vi.po | 2 +- localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 4 +- localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 4 +- src/slic3r/GUI/calib_dlg.cpp | 82 +++++++++++---------- 22 files changed, 71 insertions(+), 76 deletions(-) diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index a057f29008..50c6e5f054 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -19650,7 +19650,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 9d7d320d38..1cb30ab350 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -19153,7 +19153,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 4e57d33b56..290102a94a 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -20593,10 +20593,8 @@ msgstr "Ende: " msgid "Cornering settings" msgstr "Eckeneinstellungen" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "" -"Hinweis: Niedrigere Werte = schärfere Ecken, aber langsamere " -"Geschwindigkeiten.\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "Hinweis: Niedrigere Werte = schärfere Ecken, aber langsamere Geschwindigkeiten." msgid "" "Marlin 2 Junction Deviation detected:\n" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 166ac607db..91d2d7e60d 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -17688,7 +17688,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 1388ccfd59..956e36321e 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -20568,10 +20568,8 @@ msgstr "Fin: " msgid "Cornering settings" msgstr "Ajustes de esquinado" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "" -"Nota: Valores más bajos = esquinas más afiladas pero velocidades más " -"lentas.\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "Nota: Valores más bajos = esquinas más afiladas pero velocidades más lentas." msgid "" "Marlin 2 Junction Deviation detected:\n" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 97852b7ca7..83526d097c 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -19831,7 +19831,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 9ab955db29..e5a3dbc2fb 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -20047,8 +20047,8 @@ msgstr "Vég: " msgid "Cornering settings" msgstr "Kanyarbeállítások" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "Megjegyzés: Az alacsonyabb értékek élesebb sarkokat, de lassabb sebességet jelentenek.\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "Megjegyzés: Az alacsonyabb értékek élesebb sarkokat, de lassabb sebességet jelentenek." msgid "" "Marlin 2 Junction Deviation detected:\n" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index 9fdffdadda..96d7707448 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -19775,7 +19775,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 3e4f12b551..4a6c53b66e 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -17819,7 +17819,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 456392b310..08316d573a 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -18890,7 +18890,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index 3959677a6d..881b675de9 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -19687,7 +19687,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index e1cda56ea9..108bb6f17a 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -18349,7 +18349,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index c33b97e1eb..5b941645f6 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -19549,7 +19549,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index f273c6a288..2148b2f3d2 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -20383,10 +20383,8 @@ msgstr "Final: " msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "" -"Nota: Valores mais baixos = cantos mais nítidos, mas velocidades mais " -"lentas.\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "Nota: Valores mais baixos = cantos mais nítidos, mas velocidades mais lentas." msgid "" "Marlin 2 Junction Deviation detected:\n" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 80d396a001..98c2225e9d 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -20658,16 +20658,14 @@ msgstr "Конец: " msgid "Cornering settings" msgstr "Тестируемый диапазон" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "" -"Примечание: чем ниже значения, тем острее и медленнее печатаются углы.\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "Примечание: чем ниже значения, тем острее и медленнее печатаются углы." msgid "" "Marlin 2 Junction Deviation detected:\n" "To test Classic Jerk, set 'Maximum Junction Deviation' in Motion ability to " "0." msgstr "" -" \n" "Внимание: тестируется работа Junction Deviation.\n" "Для тестирования рывков необходимо обнулить его значение (профиль принтера → " "ограничения → рывки → Макс. значение Junction Deviation)." @@ -20677,7 +20675,6 @@ msgid "" "To test Junction Deviation, set 'Maximum Junction Deviation' in Motion " "ability to a value > 0." msgstr "" -" \n" "Внимание: тестируется работа рывков.\n" "Для тестирования Junction Deviation ему необходимо установить ненулевое " "значение (профиль принтера → ограничения → рывки → Макс. значение Junction " diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 3e3b98fd78..46ab83b2a2 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -18046,7 +18046,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index 5258aa247c..de4e536e05 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -19596,7 +19596,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index d3c42f704a..1f30456817 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -19504,7 +19504,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index f2f4284b13..8a01af9b69 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -19256,7 +19256,7 @@ msgstr "" msgid "Cornering settings" msgstr "" -msgid "Note: Lower values = sharper corners but slower speeds.\n" +msgid "Note: Lower values = sharper corners but slower speeds." msgstr "" msgid "" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index bc780f6909..2d7132e55c 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -18527,8 +18527,8 @@ msgstr "结尾:" msgid "Cornering settings" msgstr "转角设置" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "注意:值越低 = 转角越尖锐,但速度越慢。\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "注意:值越低 = 转角越尖锐,但速度越慢。" msgid "" "Marlin 2 Junction Deviation detected:\n" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 9333a8cd19..825847a73a 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -18667,8 +18667,8 @@ msgstr "結尾:" msgid "Cornering settings" msgstr "轉彎設定" -msgid "Note: Lower values = sharper corners but slower speeds.\n" -msgstr "注意:值越低 = 拐角越尖銳,但速度越慢。\n" +msgid "Note: Lower values = sharper corners but slower speeds." +msgstr "注意:值越低 = 拐角越尖銳,但速度越慢。" msgid "" "Marlin 2 Junction Deviation detected:\n" diff --git a/src/slic3r/GUI/calib_dlg.cpp b/src/slic3r/GUI/calib_dlg.cpp index 9dc0d47827..c0ca0ae017 100644 --- a/src/slic3r/GUI/calib_dlg.cpp +++ b/src/slic3r/GUI/calib_dlg.cpp @@ -102,7 +102,7 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* int text_max = GetTextMax(this, std::vector{start_pa_str, end_pa_str, PA_step_str, sp_accel_str, sp_speed_str, cb_print_no_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Settings")); @@ -123,7 +123,7 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* auto end_PA_sizer = new wxBoxSizer(wxHORIZONTAL); auto end_pa_text = new wxStaticText(this, wxID_ANY, end_pa_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiEndPA = new TextInput(this, "", "", "", wxDefaultPosition, ti_size, wxTE_PROCESS_ENTER); - m_tiStartPA->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiEndPA->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); end_PA_sizer->Add(end_pa_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); end_PA_sizer->Add(m_tiEndPA , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(end_PA_sizer, 0, wxLEFT, FromDIP(3)); @@ -132,7 +132,7 @@ PA_Calibration_Dlg::PA_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plater* auto PA_step_sizer = new wxBoxSizer(wxHORIZONTAL); auto PA_step_text = new wxStaticText(this, wxID_ANY, PA_step_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiPAStep = new TextInput(this, "", "", "", wxDefaultPosition, ti_size, wxTE_PROCESS_ENTER); - m_tiStartPA->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiPAStep->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); PA_step_sizer->Add(PA_step_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); PA_step_sizer->Add(m_tiPAStep , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(PA_step_sizer, 0, wxLEFT, FromDIP(3)); @@ -351,7 +351,7 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat wxString temp_step_str = _L("Temp step: "); int text_max = GetTextMax(this, std::vector{start_temp_str, end_temp_str, temp_step_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Settings")); @@ -372,7 +372,7 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat auto end_temp_sizer = new wxBoxSizer(wxHORIZONTAL); auto end_temp_text = new wxStaticText(this, wxID_ANY, end_temp_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiEnd = new TextInput(this, std::to_string(190), _L("\u2103" /* °C */), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); end_temp_sizer->Add(end_temp_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); end_temp_sizer->Add(m_tiEnd , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(end_temp_sizer, 0, wxLEFT, FromDIP(3)); @@ -381,7 +381,7 @@ Temp_Calibration_Dlg::Temp_Calibration_Dlg(wxWindow* parent, wxWindowID id, Plat auto temp_step_sizer = new wxBoxSizer(wxHORIZONTAL); auto temp_step_text = new wxStaticText(this, wxID_ANY, temp_step_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiStep = new TextInput(this, wxString::FromDouble(5), _L("\u2103" /* °C */), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiStep->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); m_tiStep->Enable(false); temp_step_sizer->Add(temp_step_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); temp_step_sizer->Add(m_tiStep , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); @@ -533,7 +533,7 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin wxString vol_step_str = _L("Step") + ": "; int text_max = GetTextMax(this, std::vector{start_vol_str, end_vol_str, vol_step_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Settings")); @@ -555,7 +555,7 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin auto end_vol_sizer = new wxBoxSizer(wxHORIZONTAL); auto end_vol_text = new wxStaticText(this, wxID_ANY, end_vol_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiEnd = new TextInput(this, std::to_string(20), _L(u8"mm³/s"), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); end_vol_sizer->Add(end_vol_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); end_vol_sizer->Add(m_tiEnd , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(end_vol_sizer, 0, wxLEFT, FromDIP(3)); @@ -564,7 +564,7 @@ MaxVolumetricSpeed_Test_Dlg::MaxVolumetricSpeed_Test_Dlg(wxWindow* parent, wxWin auto vol_step_sizer = new wxBoxSizer(wxHORIZONTAL); auto vol_step_text = new wxStaticText(this, wxID_ANY, vol_step_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiStep = new TextInput(this, wxString::FromDouble(0.5), _L(u8"mm³/s"), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiStep->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); vol_step_sizer->Add(vol_step_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); vol_step_sizer->Add(m_tiStep , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(vol_step_sizer, 0, wxLEFT, FromDIP(3)); @@ -638,7 +638,7 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) wxString vol_step_str = _L("Step") + ": "; int text_max = GetTextMax(this, std::vector{start_str, end_vol_str, vol_step_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Settings")); @@ -660,7 +660,7 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) auto end_vol_sizer = new wxBoxSizer(wxHORIZONTAL); auto end_vol_text = new wxStaticText(this, wxID_ANY, end_vol_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiEnd = new TextInput(this, std::to_string(200), _L("mm/s"), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); end_vol_sizer->Add(end_vol_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); end_vol_sizer->Add(m_tiEnd , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(end_vol_sizer, 0, wxLEFT, FromDIP(3)); @@ -669,7 +669,7 @@ VFA_Test_Dlg::VFA_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* plater) auto vol_step_sizer = new wxBoxSizer(wxHORIZONTAL); auto vol_step_text = new wxStaticText(this, wxID_ANY, vol_step_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiStep = new TextInput(this, wxString::FromDouble(10), _L("mm/s"), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiStep->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); vol_step_sizer->Add(vol_step_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); vol_step_sizer->Add(m_tiStep , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(vol_step_sizer, 0, wxLEFT, FromDIP(3)); @@ -746,7 +746,7 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater wxString length_step_str = _L("Step") + ": "; int text_max = GetTextMax(this, std::vector{start_length_str, end_length_str, length_step_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Settings")); @@ -768,7 +768,7 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater auto end_length_sizer = new wxBoxSizer(wxHORIZONTAL); auto end_length_text = new wxStaticText(this, wxID_ANY, end_length_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiEnd = new TextInput(this, std::to_string(2), _L("mm"), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); end_length_sizer->Add(end_length_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); end_length_sizer->Add(m_tiEnd , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(end_length_sizer, 0, wxLEFT, FromDIP(3)); @@ -777,7 +777,7 @@ Retraction_Test_Dlg::Retraction_Test_Dlg(wxWindow* parent, wxWindowID id, Plater auto length_step_sizer = new wxBoxSizer(wxHORIZONTAL); auto length_step_text = new wxStaticText(this, wxID_ANY, length_step_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiStep = new TextInput(this, wxString::FromDouble(0.1), _L("mm"), "", wxDefaultPosition, ti_size); - m_tiStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); + m_tiStep->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); length_step_sizer->Add(length_step_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); length_step_sizer->Add(m_tiStep , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); settings_sizer->Add(length_step_sizer, 0, wxLEFT, FromDIP(3)); @@ -855,7 +855,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin auto labeled_box_model = new LabeledStaticBox(this, _L("Test model")); auto model_box = new wxStaticBoxSizer(labeled_box_model, wxHORIZONTAL); - m_rbModel = new RadioGroup(this, { _L("Ringing Tower"), _L("Fast Tower") }, wxHORIZONTAL); + m_rbModel = new RadioGroup(this, { _L("Ringing Tower"), _L("Fast Tower") }, wxVERTICAL); model_box->Add(m_rbModel, 0, wxALL | wxEXPAND, FromDIP(4)); v_sizer->Add(model_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); @@ -897,7 +897,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin wxString y_axis_str = "Y " + _L("Start / End") + ": "; int text_max = GetTextMax(this, std::vector{x_axis_str, y_axis_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Frequency settings")); @@ -958,6 +958,7 @@ Input_Shaping_Freq_Test_Dlg::Input_Shaping_Freq_Test_Dlg(wxWindow* parent, wxWin auto note_text = new wxStaticText(this, wxID_ANY, _L("Recommended: Set Damp to 0.\nThis will use the printer's default or saved value."), wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); note_text->SetForegroundColour(wxColour(128, 128, 128)); + note_text->Wrap(FromDIP(350)); settings_sizer->Add(note_text, 0, wxALL, FromDIP(5)); settings_sizer->AddSpacer(FromDIP(5)); @@ -1071,7 +1072,7 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin auto labeled_box_model = new LabeledStaticBox(this, _L("Test model")); auto model_box = new wxStaticBoxSizer(labeled_box_model, wxHORIZONTAL); - m_rbModel = new RadioGroup(this, { _L("Ringing Tower"), _L("Fast Tower") }, wxHORIZONTAL); + m_rbModel = new RadioGroup(this, { _L("Ringing Tower"), _L("Fast Tower") }, wxVERTICAL); model_box->Add(m_rbModel, 0, wxALL | wxEXPAND, FromDIP(4)); v_sizer->Add(model_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); @@ -1113,7 +1114,7 @@ Input_Shaping_Damp_Test_Dlg::Input_Shaping_Damp_Test_Dlg(wxWindow* parent, wxWin wxString damp_str = _L("Damp") + " " + _L("Start / End") + ": "; int text_max = GetTextMax(this, std::vector{freq_str, damp_str}); - auto st_size = FromDIP(wxSize(text_max, -1)); + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Frequency settings")); @@ -1258,13 +1259,14 @@ Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* auto labeled_box_model = new LabeledStaticBox(this, _L("Test model")); auto model_box = new wxStaticBoxSizer(labeled_box_model, wxHORIZONTAL); - m_rbModel = new RadioGroup(this, { _L("Ringing Tower"), _L("Fast Tower"), _L("SCV-V2") }, wxHORIZONTAL); + m_rbModel = new RadioGroup(this, { _L("Ringing Tower"), _L("Fast Tower"), _L("SCV-V2") }, wxVERTICAL); model_box->Add(m_rbModel, 0, wxALL | wxEXPAND, FromDIP(4)); v_sizer->Add(model_box, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); // Settings wxString start_jd_str = _L("Start: "); wxString end_jd_str = _L("End: "); + int text_max = GetTextMax(this, std::vector{start_jd_str, end_jd_str}); LabeledStaticBox* stb = new LabeledStaticBox(this, _L("Cornering settings")); wxStaticBoxSizer* settings_sizer = new wxStaticBoxSizer(stb, wxVERTICAL); @@ -1297,61 +1299,63 @@ Cornering_Test_Dlg::Cornering_Test_Dlg(wxWindow* parent, wxWindowID id, Plater* units_str = "mm/s"; } + auto st_size = wxSize(text_max, -1); auto ti_size = FromDIP(wxSize(120, -1)); - // Start and End cornering on same row - auto cornering_row_sizer = new wxBoxSizer(wxHORIZONTAL); - // Start cornering auto start_jd_sizer = new wxBoxSizer(wxHORIZONTAL); - auto start_jd_text = new wxStaticText(this, wxID_ANY, start_jd_str, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + auto start_jd_text = new wxStaticText(this, wxID_ANY, start_jd_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiJDStart = new TextInput(this, start_value_str, units_str, "", wxDefaultPosition, ti_size); m_tiJDStart->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); start_jd_sizer->Add(start_jd_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); start_jd_sizer->Add(m_tiJDStart , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); - cornering_row_sizer->Add(start_jd_sizer, 0, wxLEFT, FromDIP(3)); + settings_sizer->Add(start_jd_sizer, 0, wxLEFT, FromDIP(3)); // End cornering auto end_jd_sizer = new wxBoxSizer(wxHORIZONTAL); - auto end_jd_text = new wxStaticText(this, wxID_ANY, end_jd_str, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + auto end_jd_text = new wxStaticText(this, wxID_ANY, end_jd_str, wxDefaultPosition, st_size, wxALIGN_LEFT); m_tiJDEnd = new TextInput(this, end_value_str, units_str, "", wxDefaultPosition, ti_size); m_tiJDEnd->GetTextCtrl()->SetValidator(wxTextValidator(wxFILTER_NUMERIC)); end_jd_sizer->Add(end_jd_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); end_jd_sizer->Add(m_tiJDEnd , 0, wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(2)); - cornering_row_sizer->Add(end_jd_sizer, 0, wxLEFT, FromDIP(3)); - - settings_sizer->Add(cornering_row_sizer, 0, wxLEFT, FromDIP(3)); + settings_sizer->Add(end_jd_sizer, 0, wxLEFT, FromDIP(3)); settings_sizer->AddSpacer(FromDIP(5)); // Add note about cornering based on GCode Flavor - wxString note_msg = _L("Note: Lower values = sharper corners but slower speeds.\n"); + wxString note_msg = _L("Note: Lower values = sharper corners but slower speeds."); + auto note_text = new wxStaticText(this, wxID_ANY, note_msg, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + note_text->SetForegroundColour(wxColour(128, 128, 128)); + note_text->Wrap(FromDIP(300)); + settings_sizer->Add(note_text, 0, wxALL, FromDIP(5)); + if (gcode_flavor_option) { + wxString note_msg_2; switch (gcode_flavor_option->value) { case GCodeFlavor::gcfMarlinFirmware: { // Check if machine_max_junction_deviation is set and > 0 const auto* max_jd_option = preset_bundle->printers.get_edited_preset().config.option("machine_max_junction_deviation"); if (max_jd_option && !max_jd_option->values.empty() && max_jd_option->values[0] > 0) { - note_msg += _L("Marlin 2 Junction Deviation detected:\nTo test Classic Jerk, set 'Maximum Junction Deviation' in Motion ability to 0."); + note_msg_2 += _L("Marlin 2 Junction Deviation detected:\nTo test Classic Jerk, set 'Maximum Junction Deviation' in Motion ability to 0."); } else { - note_msg += _L("Marlin 2 Classic Jerk detected:\nTo test Junction Deviation, set 'Maximum Junction Deviation' in Motion ability to a value > 0."); + note_msg_2 += _L("Marlin 2 Classic Jerk detected:\nTo test Junction Deviation, set 'Maximum Junction Deviation' in Motion ability to a value > 0."); } break; } case GCodeFlavor::gcfRepRapFirmware: - note_msg += _L("RepRap detected: Jerk in mm/s.\nOrcaSlicer will convert the values to mm/min when necessary."); + note_msg_2 += _L("RepRap detected: Jerk in mm/s.\nOrcaSlicer will convert the values to mm/min when necessary."); break; default: break; } + if(!note_msg_2.empty()){ + auto note_text_2 = new wxStaticText(this, wxID_ANY, note_msg_2, wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); + note_text_2->SetForegroundColour(wxColour(128, 128, 128)); + note_text_2->Wrap(FromDIP(300)); + settings_sizer->Add(note_text_2, 0, wxALL, FromDIP(5)); + } } - auto note_text = new wxStaticText(this, wxID_ANY, note_msg, - wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); - note_text->SetForegroundColour(wxColour(128, 128, 128)); - note_text->Wrap(FromDIP(300)); - settings_sizer->Add(note_text, 0, wxALL, FromDIP(5)); - v_sizer->Add(settings_sizer, 0, wxTOP | wxRIGHT | wxLEFT | wxEXPAND, FromDIP(10)); v_sizer->AddSpacer(FromDIP(5)); From fbe2aeaa2e50e7c55be63c2b0959d7cd678f11fe Mon Sep 17 00:00:00 2001 From: VOLUMIC <31067164+VOLUMIC@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:15:09 +0100 Subject: [PATCH 21/67] VOLUMIC profils update (#12721) * VOLUMIC profils updates * Delete resources/profiles/Volumic/EXO42 IDRE_cover.png * VOLUMIC profils updates * VOLUMIC profils updates * Profils bug fix * VOLUMIC profils updates * Fix SC2 Stage 2 * Update Volumic.json --- resources/profiles/Volumic.json | 776 ++++-------------- .../VS30SC2 Performance (0.4 nozzle).json | 4 +- 2 files changed, 184 insertions(+), 596 deletions(-) diff --git a/resources/profiles/Volumic.json b/resources/profiles/Volumic.json index ad1f7b494f..839d81e4fb 100644 --- a/resources/profiles/Volumic.json +++ b/resources/profiles/Volumic.json @@ -1,606 +1,194 @@ { "name": "Volumic", - "version": "02.03.02.51", + "version": "02.03.02.55", "force_update": "1", "description": "VOLUMIC configurations", "machine_model_list": [ - { - "name": "EXO42", - "sub_path": "machine/EXO42.json" - }, - { - "name": "EXO42 IDRE", - "sub_path": "machine/EXO42 IDRE.json" - }, - { - "name": "EXO42 Performance", - "sub_path": "machine/EXO42 Performance.json" - }, - { - "name": "EXO42 Stage 2", - "sub_path": "machine/EXO42 Stage 2.json" - }, - { - "name": "EXO65", - "sub_path": "machine/EXO65.json" - }, - { - "name": "EXO65 IDRE", - "sub_path": "machine/EXO65 IDRE.json" - }, - { - "name": "EXO65 Performance", - "sub_path": "machine/EXO65 Performance.json" - }, - { - "name": "EXO65 Stage 2", - "sub_path": "machine/EXO65 Stage 2.json" - }, - { - "name": "SH65", - "sub_path": "machine/SH65.json" - }, - { - "name": "SH65 IDRE", - "sub_path": "machine/SH65 IDRE.json" - }, - { - "name": "SH65 Performance", - "sub_path": "machine/SH65 Performance.json" - }, - { - "name": "SH65 Stage 2", - "sub_path": "machine/SH65 Stage 2.json" - }, - { - "name": "VS20MK2", - "sub_path": "machine/VS20MK2.json" - }, - { - "name": "VS30MK2", - "sub_path": "machine/VS30MK2.json" - }, - { - "name": "VS30MK3", - "sub_path": "machine/VS30MK3.json" - }, - { - "name": "VS30MK3 Stage 2", - "sub_path": "machine/VS30MK3 Stage 2.json" - }, - { - "name": "VS30SC", - "sub_path": "machine/VS30SC.json" - }, - { - "name": "VS30SC2", - "sub_path": "machine/VS30SC2.json" - }, - { - "name": "VS30SC2 Stage 2", - "sub_path": "machine/VS30SC2 Stage 2.json" - }, - { - "name": "VS30ULTRA", - "sub_path": "machine/VS30ULTRA.json" - } + {"name": "EXO42 Performance","sub_path": "machine/EXO42 Performance.json"}, + {"name": "EXO42 IDRE","sub_path": "machine/EXO42 IDRE.json"}, + {"name": "EXO42","sub_path": "machine/EXO42.json"}, + {"name": "EXO42 Stage 2","sub_path": "machine/EXO42 Stage 2.json"}, + {"name": "EXO65 Performance","sub_path": "machine/EXO65 Performance.json"}, + {"name": "EXO65 IDRE","sub_path": "machine/EXO65 IDRE.json"}, + {"name": "EXO65","sub_path": "machine/EXO65.json"}, + {"name": "EXO65 Stage 2","sub_path": "machine/EXO65 Stage 2.json"}, + {"name": "SH65 Performance","sub_path": "machine/SH65 Performance.json"}, + {"name": "SH65 IDRE","sub_path": "machine/SH65 IDRE.json"}, + {"name": "SH65","sub_path": "machine/SH65.json"}, + {"name": "SH65 Stage 2","sub_path": "machine/SH65 Stage 2.json"}, + {"name": "VS30SC2 Performance","sub_path": "machine/VS30SC2 Performance.json"}, + {"name": "VS30SC2","sub_path": "machine/VS30SC2.json"}, + {"name": "VS30SC2 Stage 2","sub_path": "machine/VS30SC2 Stage 2.json"}, + {"name": "VS30SC","sub_path": "machine/VS30SC.json"}, + {"name": "VS30ULTRA","sub_path": "machine/VS30ULTRA.json"}, + {"name": "VS30MK3","sub_path": "machine/VS30MK3.json"}, + {"name": "VS30MK3 Stage 2","sub_path": "machine/VS30MK3 Stage 2.json"}, + {"name": "VS30MK2","sub_path": "machine/VS30MK2.json"}, + {"name": "VS20MK2","sub_path": "machine/VS20MK2.json"} ], "machine_list": [ - { - "name": "fdm_volumic_common", - "sub_path": "machine/fdm_volumic_common.json" - }, - { - "name": "EXO42 (0.4 nozzle)", - "sub_path": "machine/EXO42 (0.4 nozzle).json" - }, - { - "name": "EXO42 IDRE (0.4 nozzle)", - "sub_path": "machine/EXO42 IDRE (0.4 nozzle).json" - }, - { - "name": "EXO42 IDRE COPY MODE (0.4 nozzle)", - "sub_path": "machine/EXO42 IDRE COPY MODE (0.4 nozzle).json" - }, - { - "name": "EXO42 IDRE MIRROR MODE (0.4 nozzle)", - "sub_path": "machine/EXO42 IDRE MIRROR MODE (0.4 nozzle).json" - }, - { - "name": "EXO42 Performance (0.4 nozzle)", - "sub_path": "machine/EXO42 Performance (0.4 nozzle).json" - }, - { - "name": "EXO42 Stage 2 (0.4 nozzle)", - "sub_path": "machine/EXO42 Stage 2 (0.4 nozzle).json" - }, - { - "name": "EXO65 (0.6 nozzle)", - "sub_path": "machine/EXO65 (0.6 nozzle).json" - }, - { - "name": "EXO65 IDRE (0.4 nozzle)", - "sub_path": "machine/EXO65 IDRE (0.4 nozzle).json" - }, - { - "name": "EXO65 IDRE COPY MODE (0.4 nozzle)", - "sub_path": "machine/EXO65 IDRE COPY MODE (0.4 nozzle).json" - }, - { - "name": "EXO65 IDRE MIRROR MODE (0.4 nozzle)", - "sub_path": "machine/EXO65 IDRE MIRROR MODE (0.4 nozzle).json" - }, - { - "name": "EXO65 Performance (0.4 nozzle)", - "sub_path": "machine/EXO65 Performance (0.4 nozzle).json" - }, - { - "name": "EXO65 Performance (0.6 nozzle)", - "sub_path": "machine/EXO65 Performance (0.6 nozzle).json" - }, - { - "name": "EXO65 Performance (0.8 nozzle)", - "sub_path": "machine/EXO65 Performance (0.8 nozzle).json" - }, - { - "name": "EXO65 Stage 2 (0.6 nozzle)", - "sub_path": "machine/EXO65 Stage 2 (0.6 nozzle).json" - }, - { - "name": "SH65 (0.4 nozzle)", - "sub_path": "machine/SH65 (0.4 nozzle).json" - }, - { - "name": "SH65 IDRE (0.4 nozzle)", - "sub_path": "machine/SH65 IDRE (0.4 nozzle).json" - }, - { - "name": "SH65 IDRE COPY MODE (0.4 nozzle)", - "sub_path": "machine/SH65 IDRE COPY MODE (0.4 nozzle).json" - }, - { - "name": "SH65 IDRE MIRROR MODE (0.4 nozzle)", - "sub_path": "machine/SH65 IDRE MIRROR MODE (0.4 nozzle).json" - }, - { - "name": "SH65 Performance (0.4 nozzle)", - "sub_path": "machine/SH65 Performance (0.4 nozzle).json" - }, - { - "name": "SH65 Stage 2 (0.4 nozzle)", - "sub_path": "machine/SH65 Stage 2 (0.4 nozzle).json" - }, - { - "name": "VS20MK2 (0.4 nozzle)", - "sub_path": "machine/VS20MK2 (0.4 nozzle).json" - }, - { - "name": "VS30MK2 (0.4 nozzle)", - "sub_path": "machine/VS30MK2 (0.4 nozzle).json" - }, - { - "name": "VS30MK3 (0.4 nozzle)", - "sub_path": "machine/VS30MK3 (0.4 nozzle).json" - }, - { - "name": "VS30MK3 Stage 2 (0.4 nozzle)", - "sub_path": "machine/VS30MK3 Stage 2 (0.4 nozzle).json" - }, - { - "name": "VS30SC (0.4 nozzle)", - "sub_path": "machine/VS30SC (0.4 nozzle).json" - }, - { - "name": "VS30SC2 (0.4 nozzle)", - "sub_path": "machine/VS30SC2 (0.4 nozzle).json" - }, - { - "name": "VS30SC2 Stage 2 (0.4 nozzle)", - "sub_path": "machine/VS30SC2 Stage 2 (0.4 nozzle).json" - }, - { - "name": "VS30ULTRA (0.4 nozzle)", - "sub_path": "machine/VS30ULTRA (0.4 nozzle).json" - } + {"name": "fdm_volumic_common","sub_path": "machine/fdm_volumic_common.json"}, + {"name": "EXO42 Performance (0.4 nozzle)","sub_path": "machine/EXO42 Performance (0.4 nozzle).json"}, + {"name": "EXO65 Performance (0.4 nozzle)","sub_path": "machine/EXO65 Performance (0.4 nozzle).json"}, + {"name": "EXO65 Performance (0.6 nozzle)","sub_path": "machine/EXO65 Performance (0.6 nozzle).json"}, + {"name": "EXO65 Performance (0.8 nozzle)","sub_path": "machine/EXO65 Performance (0.8 nozzle).json"}, + {"name": "SH65 Performance (0.4 nozzle)","sub_path": "machine/SH65 Performance (0.4 nozzle).json"}, + {"name": "EXO42 IDRE (0.4 nozzle)","sub_path": "machine/EXO42 IDRE (0.4 nozzle).json"}, + {"name": "EXO42 IDRE COPY MODE (0.4 nozzle)","sub_path": "machine/EXO42 IDRE COPY MODE (0.4 nozzle).json"}, + {"name": "EXO42 IDRE MIRROR MODE (0.4 nozzle)","sub_path": "machine/EXO42 IDRE MIRROR MODE (0.4 nozzle).json"}, + {"name": "EXO65 IDRE (0.4 nozzle)","sub_path": "machine/EXO65 IDRE (0.4 nozzle).json"}, + {"name": "EXO65 IDRE COPY MODE (0.4 nozzle)","sub_path": "machine/EXO65 IDRE COPY MODE (0.4 nozzle).json"}, + {"name": "EXO65 IDRE MIRROR MODE (0.4 nozzle)","sub_path": "machine/EXO65 IDRE MIRROR MODE (0.4 nozzle).json"}, + {"name": "SH65 IDRE (0.4 nozzle)","sub_path": "machine/SH65 IDRE (0.4 nozzle).json"}, + {"name": "SH65 IDRE COPY MODE (0.4 nozzle)","sub_path": "machine/SH65 IDRE COPY MODE (0.4 nozzle).json"}, + {"name": "SH65 IDRE MIRROR MODE (0.4 nozzle)","sub_path": "machine/SH65 IDRE MIRROR MODE (0.4 nozzle).json"}, + {"name": "EXO42 (0.4 nozzle)","sub_path": "machine/EXO42 (0.4 nozzle).json"}, + {"name": "EXO65 (0.6 nozzle)","sub_path": "machine/EXO65 (0.6 nozzle).json"}, + {"name": "SH65 (0.4 nozzle)","sub_path": "machine/SH65 (0.4 nozzle).json"}, + {"name": "VS30SC2 Performance (0.4 nozzle)","sub_path": "machine/VS30SC2 Performance (0.4 nozzle).json"}, + {"name": "VS30SC2 (0.4 nozzle)","sub_path": "machine/VS30SC2 (0.4 nozzle).json"}, + {"name": "VS30SC2 Stage 2 (0.4 nozzle)","sub_path": "machine/VS30SC2 Stage 2 (0.4 nozzle).json"}, + {"name": "VS30SC (0.4 nozzle)","sub_path": "machine/VS30SC (0.4 nozzle).json"}, + {"name": "VS30ULTRA (0.4 nozzle)","sub_path": "machine/VS30ULTRA (0.4 nozzle).json"}, + {"name": "VS30MK3 (0.4 nozzle)","sub_path": "machine/VS30MK3 (0.4 nozzle).json"}, + {"name": "VS30MK2 (0.4 nozzle)","sub_path": "machine/VS30MK2 (0.4 nozzle).json"}, + {"name": "VS20MK2 (0.4 nozzle)","sub_path": "machine/VS20MK2 (0.4 nozzle).json"}, + {"name": "EXO42 Stage 2 (0.4 nozzle)","sub_path": "machine/EXO42 Stage 2 (0.4 nozzle).json"}, + {"name": "EXO65 Stage 2 (0.6 nozzle)","sub_path": "machine/EXO65 Stage 2 (0.6 nozzle).json"}, + {"name": "SH65 Stage 2 (0.4 nozzle)","sub_path": "machine/SH65 Stage 2 (0.4 nozzle).json"}, + {"name": "VS30MK3 Stage 2 (0.4 nozzle)","sub_path": "machine/VS30MK3 Stage 2 (0.4 nozzle).json"} + ], "process_list": [ - { - "name": "fdm_process_volumic_common", - "sub_path": "process/fdm_process_volumic_common.json" - }, - { - "name": "Compatible speed - 0.10mm", - "sub_path": "process/Compatible speed - 0.10mm.json" - }, - { - "name": "Compatible speed - 0.15mm", - "sub_path": "process/Compatible speed - 0.15mm.json" - }, - { - "name": "Compatible speed - 0.20mm", - "sub_path": "process/Compatible speed - 0.20mm.json" - }, - { - "name": "Compatible speed - 0.25mm", - "sub_path": "process/Compatible speed - 0.25mm.json" - }, - { - "name": "Compatible speed - 0.30mm", - "sub_path": "process/Compatible speed - 0.30mm.json" - }, - { - "name": "Full performance - 0.10mm", - "sub_path": "process/Full performance - 0.10mm.json" - }, - { - "name": "Full performance - 0.15mm", - "sub_path": "process/Full performance - 0.15mm.json" - }, - { - "name": "Full performance - 0.20mm", - "sub_path": "process/Full performance - 0.20mm.json" - }, - { - "name": "Full performance - 0.25mm", - "sub_path": "process/Full performance - 0.25mm.json" - }, - { - "name": "Full performance - 0.30mm", - "sub_path": "process/Full performance - 0.30mm.json" - }, - { - "name": "Full performance DUAL - 0.10mm", - "sub_path": "process/Full performance DUAL - 0.10mm.json" - }, - { - "name": "Full performance DUAL - 0.15mm", - "sub_path": "process/Full performance DUAL - 0.15mm.json" - }, - { - "name": "Full performance DUAL - 0.20mm", - "sub_path": "process/Full performance DUAL - 0.20mm.json" - }, - { - "name": "Full performance DUAL - 0.25mm", - "sub_path": "process/Full performance DUAL - 0.25mm.json" - }, - { - "name": "Full performance DUAL - 0.30mm", - "sub_path": "process/Full performance DUAL - 0.30mm.json" - }, - { - "name": "High performance - 0.10mm", - "sub_path": "process/High performance - 0.10mm.json" - }, - { - "name": "High performance - 0.15mm", - "sub_path": "process/High performance - 0.15mm.json" - }, - { - "name": "High performance - 0.20mm", - "sub_path": "process/High performance - 0.20mm.json" - }, - { - "name": "High performance - 0.25mm", - "sub_path": "process/High performance - 0.25mm.json" - }, - { - "name": "High performance - 0.30mm", - "sub_path": "process/High performance - 0.30mm.json" - }, - { - "name": "High performance DUAL - 0.10mm", - "sub_path": "process/High performance DUAL - 0.10mm.json" - }, - { - "name": "High performance DUAL - 0.15mm", - "sub_path": "process/High performance DUAL - 0.15mm.json" - }, - { - "name": "High performance DUAL - 0.20mm", - "sub_path": "process/High performance DUAL - 0.20mm.json" - }, - { - "name": "High performance DUAL - 0.25mm", - "sub_path": "process/High performance DUAL - 0.25mm.json" - }, - { - "name": "High performance DUAL - 0.30mm", - "sub_path": "process/High performance DUAL - 0.30mm.json" - }, - { - "name": "High speed (Stage 2) - 0.10mm", - "sub_path": "process/High speed (Stage 2) - 0.10mm.json" - }, - { - "name": "High speed (Stage 2) - 0.15mm", - "sub_path": "process/High speed (Stage 2) - 0.15mm.json" - }, - { - "name": "High speed (Stage 2) - 0.20mm", - "sub_path": "process/High speed (Stage 2) - 0.20mm.json" - }, - { - "name": "High speed (Stage 2) - 0.25mm", - "sub_path": "process/High speed (Stage 2) - 0.25mm.json" - }, - { - "name": "High speed (Stage 2) - 0.30mm", - "sub_path": "process/High speed (Stage 2) - 0.30mm.json" - }, - { - "name": "High speed - 0.10mm", - "sub_path": "process/High speed - 0.10mm.json" - }, - { - "name": "High speed - 0.15mm", - "sub_path": "process/High speed - 0.15mm.json" - }, - { - "name": "High speed - 0.20mm", - "sub_path": "process/High speed - 0.20mm.json" - }, - { - "name": "High speed - 0.25mm", - "sub_path": "process/High speed - 0.25mm.json" - }, - { - "name": "High speed - 0.30mm", - "sub_path": "process/High speed - 0.30mm.json" - }, - { - "name": "Normal performance - 0.10mm", - "sub_path": "process/Normal performance - 0.10mm.json" - }, - { - "name": "Normal performance - 0.15mm", - "sub_path": "process/Normal performance - 0.15mm.json" - }, - { - "name": "Normal performance - 0.20mm", - "sub_path": "process/Normal performance - 0.20mm.json" - }, - { - "name": "Normal performance - 0.25mm", - "sub_path": "process/Normal performance - 0.25mm.json" - }, - { - "name": "Normal performance - 0.30mm", - "sub_path": "process/Normal performance - 0.30mm.json" - }, - { - "name": "Normal performance DUAL - 0.10mm", - "sub_path": "process/Normal performance DUAL - 0.10mm.json" - }, - { - "name": "Normal performance DUAL - 0.15mm", - "sub_path": "process/Normal performance DUAL - 0.15mm.json" - }, - { - "name": "Normal performance DUAL - 0.20mm", - "sub_path": "process/Normal performance DUAL - 0.20mm.json" - }, - { - "name": "Normal performance DUAL - 0.25mm", - "sub_path": "process/Normal performance DUAL - 0.25mm.json" - }, - { - "name": "Normal performance DUAL - 0.30mm", - "sub_path": "process/Normal performance DUAL - 0.30mm.json" - }, - { - "name": "Normal speed (Stage 2) - 0.10mm", - "sub_path": "process/Normal speed (Stage 2) - 0.10mm.json" - }, - { - "name": "Normal speed (Stage 2) - 0.15mm", - "sub_path": "process/Normal speed (Stage 2) - 0.15mm.json" - }, - { - "name": "Normal speed (Stage 2) - 0.20mm", - "sub_path": "process/Normal speed (Stage 2) - 0.20mm.json" - }, - { - "name": "Normal speed (Stage 2) - 0.25mm", - "sub_path": "process/Normal speed (Stage 2) - 0.25mm.json" - }, - { - "name": "Normal speed (Stage 2) - 0.30mm", - "sub_path": "process/Normal speed (Stage 2) - 0.30mm.json" - }, - { - "name": "Normal speed - 0.10mm", - "sub_path": "process/Normal speed - 0.10mm.json" - }, - { - "name": "Normal speed - 0.15mm", - "sub_path": "process/Normal speed - 0.15mm.json" - }, - { - "name": "Normal speed - 0.20mm", - "sub_path": "process/Normal speed - 0.20mm.json" - }, - { - "name": "Normal speed - 0.25mm", - "sub_path": "process/Normal speed - 0.25mm.json" - }, - { - "name": "Normal speed - 0.30mm", - "sub_path": "process/Normal speed - 0.30mm.json" - }, - { - "name": "Very high speed (Stage 2) - 0.10mm", - "sub_path": "process/Very high speed (Stage 2) - 0.10mm.json" - }, - { - "name": "Very high speed (Stage 2) - 0.15mm", - "sub_path": "process/Very high speed (Stage 2) - 0.15mm.json" - }, - { - "name": "Very high speed (Stage 2) - 0.20mm", - "sub_path": "process/Very high speed (Stage 2) - 0.20mm.json" - }, - { - "name": "Very high speed (Stage 2) - 0.25mm", - "sub_path": "process/Very high speed (Stage 2) - 0.25mm.json" - }, - { - "name": "Very high speed (Stage 2) - 0.30mm", - "sub_path": "process/Very high speed (Stage 2) - 0.30mm.json" - }, - { - "name": "Very high speed - 0.10mm", - "sub_path": "process/Very high speed - 0.10mm.json" - }, - { - "name": "Very high speed - 0.15mm", - "sub_path": "process/Very high speed - 0.15mm.json" - }, - { - "name": "Very high speed - 0.20mm", - "sub_path": "process/Very high speed - 0.20mm.json" - }, - { - "name": "Very high speed - 0.25mm", - "sub_path": "process/Very high speed - 0.25mm.json" - }, - { - "name": "Very high speed - 0.30mm", - "sub_path": "process/Very high speed - 0.30mm.json" - } + {"name": "fdm_process_volumic_common","sub_path": "process/fdm_process_volumic_common.json"}, + + {"name": "Compatible speed - 0.10mm","sub_path": "process/Compatible speed - 0.10mm.json"}, + {"name": "Compatible speed - 0.15mm","sub_path": "process/Compatible speed - 0.15mm.json"}, + {"name": "Compatible speed - 0.20mm","sub_path": "process/Compatible speed - 0.20mm.json"}, + {"name": "Compatible speed - 0.25mm","sub_path": "process/Compatible speed - 0.25mm.json"}, + {"name": "Compatible speed - 0.30mm","sub_path": "process/Compatible speed - 0.30mm.json"}, + + {"name": "High speed - 0.10mm","sub_path": "process/High speed - 0.10mm.json"}, + {"name": "High speed - 0.15mm","sub_path": "process/High speed - 0.15mm.json"}, + {"name": "High speed - 0.20mm","sub_path": "process/High speed - 0.20mm.json"}, + {"name": "High speed - 0.25mm","sub_path": "process/High speed - 0.25mm.json"}, + {"name": "High speed - 0.30mm","sub_path": "process/High speed - 0.30mm.json"}, + {"name": "Normal speed - 0.10mm","sub_path": "process/Normal speed - 0.10mm.json"}, + {"name": "Normal speed - 0.15mm","sub_path": "process/Normal speed - 0.15mm.json"}, + {"name": "Normal speed - 0.20mm","sub_path": "process/Normal speed - 0.20mm.json"}, + {"name": "Normal speed - 0.25mm","sub_path": "process/Normal speed - 0.25mm.json"}, + {"name": "Normal speed - 0.30mm","sub_path": "process/Normal speed - 0.30mm.json"}, + {"name": "Very high speed - 0.10mm","sub_path": "process/Very high speed - 0.10mm.json"}, + {"name": "Very high speed - 0.15mm","sub_path": "process/Very high speed - 0.15mm.json"}, + {"name": "Very high speed - 0.20mm","sub_path": "process/Very high speed - 0.20mm.json"}, + {"name": "Very high speed - 0.25mm","sub_path": "process/Very high speed - 0.25mm.json"}, + {"name": "Very high speed - 0.30mm","sub_path": "process/Very high speed - 0.30mm.json"}, + + {"name": "High speed (Stage 2) - 0.10mm","sub_path": "process/High speed (Stage 2) - 0.10mm.json"}, + {"name": "High speed (Stage 2) - 0.15mm","sub_path": "process/High speed (Stage 2) - 0.15mm.json"}, + {"name": "High speed (Stage 2) - 0.20mm","sub_path": "process/High speed (Stage 2) - 0.20mm.json"}, + {"name": "High speed (Stage 2) - 0.25mm","sub_path": "process/High speed (Stage 2) - 0.25mm.json"}, + {"name": "High speed (Stage 2) - 0.30mm","sub_path": "process/High speed (Stage 2) - 0.30mm.json"}, + {"name": "Normal speed (Stage 2) - 0.10mm","sub_path": "process/Normal speed (Stage 2) - 0.10mm.json"}, + {"name": "Normal speed (Stage 2) - 0.15mm","sub_path": "process/Normal speed (Stage 2) - 0.15mm.json"}, + {"name": "Normal speed (Stage 2) - 0.20mm","sub_path": "process/Normal speed (Stage 2) - 0.20mm.json"}, + {"name": "Normal speed (Stage 2) - 0.25mm","sub_path": "process/Normal speed (Stage 2) - 0.25mm.json"}, + {"name": "Normal speed (Stage 2) - 0.30mm","sub_path": "process/Normal speed (Stage 2) - 0.30mm.json"}, + {"name": "Very high speed (Stage 2) - 0.10mm","sub_path": "process/Very high speed (Stage 2) - 0.10mm.json"}, + {"name": "Very high speed (Stage 2) - 0.15mm","sub_path": "process/Very high speed (Stage 2) - 0.15mm.json"}, + {"name": "Very high speed (Stage 2) - 0.20mm","sub_path": "process/Very high speed (Stage 2) - 0.20mm.json"}, + {"name": "Very high speed (Stage 2) - 0.25mm","sub_path": "process/Very high speed (Stage 2) - 0.25mm.json"}, + {"name": "Very high speed (Stage 2) - 0.30mm","sub_path": "process/Very high speed (Stage 2) - 0.30mm.json"}, + + {"name": "Normal performance - 0.10mm","sub_path": "process/Normal performance - 0.10mm.json"}, + {"name": "Normal performance - 0.15mm","sub_path": "process/Normal performance - 0.15mm.json"}, + {"name": "Normal performance - 0.20mm","sub_path": "process/Normal performance - 0.20mm.json"}, + {"name": "Normal performance - 0.25mm","sub_path": "process/Normal performance - 0.25mm.json"}, + {"name": "Normal performance - 0.30mm","sub_path": "process/Normal performance - 0.30mm.json"}, + {"name": "High performance - 0.10mm","sub_path": "process/High performance - 0.10mm.json"}, + {"name": "High performance - 0.15mm","sub_path": "process/High performance - 0.15mm.json"}, + {"name": "High performance - 0.20mm","sub_path": "process/High performance - 0.20mm.json"}, + {"name": "High performance - 0.25mm","sub_path": "process/High performance - 0.25mm.json"}, + {"name": "High performance - 0.30mm","sub_path": "process/High performance - 0.30mm.json"}, + {"name": "Full performance - 0.10mm","sub_path": "process/Full performance - 0.10mm.json"}, + {"name": "Full performance - 0.15mm","sub_path": "process/Full performance - 0.15mm.json"}, + {"name": "Full performance - 0.20mm","sub_path": "process/Full performance - 0.20mm.json"}, + {"name": "Full performance - 0.25mm","sub_path": "process/Full performance - 0.25mm.json"}, + {"name": "Full performance - 0.30mm","sub_path": "process/Full performance - 0.30mm.json"}, + + {"name": "Normal performance VS30 - 0.10mm","sub_path": "process/Normal performance VS30 - 0.10mm.json"}, + {"name": "Normal performance VS30 - 0.15mm","sub_path": "process/Normal performance VS30 - 0.15mm.json"}, + {"name": "Normal performance VS30 - 0.20mm","sub_path": "process/Normal performance VS30 - 0.20mm.json"}, + {"name": "Normal performance VS30 - 0.25mm","sub_path": "process/Normal performance VS30 - 0.25mm.json"}, + {"name": "Normal performance VS30 - 0.30mm","sub_path": "process/Normal performance VS30 - 0.30mm.json"}, + {"name": "High performance VS30 - 0.10mm","sub_path": "process/High performance VS30 - 0.10mm.json"}, + {"name": "High performance VS30 - 0.15mm","sub_path": "process/High performance VS30 - 0.15mm.json"}, + {"name": "High performance VS30 - 0.20mm","sub_path": "process/High performance VS30 - 0.20mm.json"}, + {"name": "High performance VS30 - 0.25mm","sub_path": "process/High performance VS30 - 0.25mm.json"}, + {"name": "High performance VS30 - 0.30mm","sub_path": "process/High performance VS30 - 0.30mm.json"}, + {"name": "Full performance VS30 - 0.10mm","sub_path": "process/Full performance VS30 - 0.10mm.json"}, + {"name": "Full performance VS30 - 0.15mm","sub_path": "process/Full performance VS30 - 0.15mm.json"}, + {"name": "Full performance VS30 - 0.20mm","sub_path": "process/Full performance VS30 - 0.20mm.json"}, + {"name": "Full performance VS30 - 0.25mm","sub_path": "process/Full performance VS30 - 0.25mm.json"}, + {"name": "Full performance VS30 - 0.30mm","sub_path": "process/Full performance VS30 - 0.30mm.json"}, + + {"name": "Normal performance DUAL - 0.10mm","sub_path": "process/Normal performance DUAL - 0.10mm.json"}, + {"name": "Normal performance DUAL - 0.15mm","sub_path": "process/Normal performance DUAL - 0.15mm.json"}, + {"name": "Normal performance DUAL - 0.20mm","sub_path": "process/Normal performance DUAL - 0.20mm.json"}, + {"name": "Normal performance DUAL - 0.25mm","sub_path": "process/Normal performance DUAL - 0.25mm.json"}, + {"name": "Normal performance DUAL - 0.30mm","sub_path": "process/Normal performance DUAL - 0.30mm.json"}, + {"name": "High performance DUAL - 0.10mm","sub_path": "process/High performance DUAL - 0.10mm.json"}, + {"name": "High performance DUAL - 0.15mm","sub_path": "process/High performance DUAL - 0.15mm.json"}, + {"name": "High performance DUAL - 0.20mm","sub_path": "process/High performance DUAL - 0.20mm.json"}, + {"name": "High performance DUAL - 0.25mm","sub_path": "process/High performance DUAL - 0.25mm.json"}, + {"name": "High performance DUAL - 0.30mm","sub_path": "process/High performance DUAL - 0.30mm.json"}, + {"name": "Full performance DUAL - 0.10mm","sub_path": "process/Full performance DUAL - 0.10mm.json"}, + {"name": "Full performance DUAL - 0.15mm","sub_path": "process/Full performance DUAL - 0.15mm.json"}, + {"name": "Full performance DUAL - 0.20mm","sub_path": "process/Full performance DUAL - 0.20mm.json"}, + {"name": "Full performance DUAL - 0.25mm","sub_path": "process/Full performance DUAL - 0.25mm.json"}, + {"name": "Full performance DUAL - 0.30mm","sub_path": "process/Full performance DUAL - 0.30mm.json"} + ], "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pp", - "sub_path": "filament/fdm_filament_pp.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "Volumic ABS Ultra", - "sub_path": "filament/Volumic ABS Ultra.json" - }, - { - "name": "Volumic ABS Ultra (Performance)", - "sub_path": "filament/Volumic ABS Ultra Performance.json" - }, - { - "name": "Volumic ASA Ultra", - "sub_path": "filament/Volumic ASA Ultra.json" - }, - { - "name": "Volumic ASA Ultra (Performance)", - "sub_path": "filament/Volumic ASA Ultra Performance.json" - }, - { - "name": "Volumic NYLON Ultra", - "sub_path": "filament/Volumic NYLON Ultra.json" - }, - { - "name": "Volumic NYLON Ultra (Performance)", - "sub_path": "filament/Volumic NYLON Ultra Performance.json" - }, - { - "name": "Volumic PC", - "sub_path": "filament/Volumic PC.json" - }, - { - "name": "Volumic PC (Performance)", - "sub_path": "filament/Volumic PC Performance.json" - }, - { - "name": "Volumic PETG Ultra", - "sub_path": "filament/Volumic PETG Ultra.json" - }, - { - "name": "Volumic PETG Ultra (Performance)", - "sub_path": "filament/Volumic PETG Ultra Performance.json" - }, - { - "name": "Volumic PETG Ultra carbone", - "sub_path": "filament/Volumic PETG Ultra carbone.json" - }, - { - "name": "Volumic PETG Ultra carbone (Performance)", - "sub_path": "filament/Volumic PETG Ultra carbone Performance.json" - }, - { - "name": "Désactivé", - "sub_path": "filament/desactive.json" - }, - { - "name": "Volumic PLA Ultra", - "sub_path": "filament/Volumic PLA Ultra.json" - }, - { - "name": "Volumic PLA Ultra (Performance)", - "sub_path": "filament/Volumic PLA Ultra Performance.json" - }, - { - "name": "Volumic UNIVERSAL Ultra", - "sub_path": "filament/Volumic UNIVERSAL Ultra.json" - }, - { - "name": "Volumic UNIVERSAL Ultra (Performance)", - "sub_path": "filament/Volumic UNIVERSAL Ultra Performance.json" - }, - { - "name": "Volumic PP Ultra", - "sub_path": "filament/Volumic PP Ultra.json" - }, - { - "name": "Volumic PP Ultra (Performance)", - "sub_path": "filament/Volumic PP Ultra Performance.json" - }, - { - "name": "Volumic PVA", - "sub_path": "filament/Volumic PVA.json" - }, - { - "name": "Volumic PVA-BVOH (Performance)", - "sub_path": "filament/Volumic PVA Performance.json" - }, - { - "name": "Volumic FLEX93 Ultra", - "sub_path": "filament/Volumic FLEX93 Ultra.json" - }, - { - "name": "Volumic FLEX93 Ultra (Performance)", - "sub_path": "filament/Volumic FLEX93 Ultra Performance.json" - } + {"name": "fdm_filament_common","sub_path": "filament/fdm_filament_common.json"}, + {"name": "fdm_filament_abs","sub_path": "filament/fdm_filament_abs.json"}, + {"name": "fdm_filament_asa","sub_path": "filament/fdm_filament_asa.json"}, + {"name": "fdm_filament_pa","sub_path": "filament/fdm_filament_pa.json"}, + {"name": "fdm_filament_pc","sub_path": "filament/fdm_filament_pc.json"}, + {"name": "fdm_filament_pet","sub_path": "filament/fdm_filament_pet.json"}, + {"name": "fdm_filament_pla","sub_path": "filament/fdm_filament_pla.json"}, + {"name": "fdm_filament_pva","sub_path": "filament/fdm_filament_pva.json"}, + {"name": "fdm_filament_tpu","sub_path": "filament/fdm_filament_tpu.json"}, + {"name": "fdm_filament_pp","sub_path": "filament/fdm_filament_pp.json"}, + + {"name": "Volumic PLA Ultra","sub_path": "filament/Volumic PLA Ultra.json"}, + {"name": "Volumic UNIVERSAL Ultra","sub_path": "filament/Volumic UNIVERSAL Ultra.json"}, + {"name": "Volumic PETG Ultra","sub_path": "filament/Volumic PETG Ultra.json"}, + {"name": "Volumic PETG Ultra carbone","sub_path": "filament/Volumic PETG Ultra carbone.json"}, + {"name": "Volumic ABS Ultra","sub_path": "filament/Volumic ABS Ultra.json"}, + {"name": "Volumic ASA Ultra","sub_path": "filament/Volumic ASA Ultra.json"}, + {"name": "Volumic PP Ultra","sub_path": "filament/Volumic PP Ultra.json"}, + {"name": "Volumic FLEX93 Ultra","sub_path": "filament/Volumic FLEX93 Ultra.json"}, + {"name": "Volumic NYLON Ultra","sub_path": "filament/Volumic NYLON Ultra.json"}, + {"name": "Volumic PC","sub_path": "filament/Volumic PC.json"}, + {"name": "Volumic PVA","sub_path": "filament/Volumic PVA.json"}, + + {"name": "Volumic PLA Ultra (Performance)","sub_path": "filament/Volumic PLA Ultra Performance.json"}, + {"name": "Volumic UNIVERSAL Ultra (Performance)","sub_path": "filament/Volumic UNIVERSAL Ultra Performance.json"}, + {"name": "Volumic PETG Ultra (Performance)","sub_path": "filament/Volumic PETG Ultra Performance.json"}, + {"name": "Volumic PETG Ultra carbone (Performance)","sub_path": "filament/Volumic PETG Ultra carbone Performance.json"}, + {"name": "Volumic ABS Ultra (Performance)","sub_path": "filament/Volumic ABS Ultra Performance.json"}, + {"name": "Volumic ASA Ultra (Performance)","sub_path": "filament/Volumic ASA Ultra Performance.json"}, + {"name": "Volumic PP Ultra (Performance)","sub_path": "filament/Volumic PP Ultra Performance.json"}, + {"name": "Volumic FLEX93 Ultra (Performance)","sub_path": "filament/Volumic FLEX93 Ultra Performance.json"}, + {"name": "Volumic NYLON Ultra (Performance)","sub_path": "filament/Volumic NYLON Ultra Performance.json"}, + {"name": "Volumic PC (Performance)","sub_path": "filament/Volumic PC Performance.json"}, + {"name": "Volumic PVA-BVOH (Performance)","sub_path": "filament/Volumic PVA Performance.json"}, + {"name": "PA6 CF20 (Performance)","sub_path": "filament/PA6 CF20 (Performance).json"}, + {"name": "PETG ESD (Performance)","sub_path": "filament/PETG ESD (Performance).json"}, + {"name": "PPS Carbone (Performance)","sub_path": "filament/PPS Carbone (Performance).json"}, + {"name": "Volumic PCTG Ultra (Performance)","sub_path": "filament/Volumic PCTG Ultra (Performance).json"}, + + {"name": "Désactivé","sub_path": "filament/desactive.json"} ] -} \ No newline at end of file +} diff --git a/resources/profiles/Volumic/machine/VS30SC2 Performance (0.4 nozzle).json b/resources/profiles/Volumic/machine/VS30SC2 Performance (0.4 nozzle).json index 3b543d2462..d731d20ca8 100644 --- a/resources/profiles/Volumic/machine/VS30SC2 Performance (0.4 nozzle).json +++ b/resources/profiles/Volumic/machine/VS30SC2 Performance (0.4 nozzle).json @@ -1,12 +1,12 @@ { "type": "machine", - "setting_id": "GM002", + "setting_id": "GM001", "name": "VS30SC2 Performance (0.4 nozzle)", "from": "system", "instantiation": "true", "inherits": "fdm_volumic_common", "printer_model": "VS30SC2 Performance", - "default_print_profile": "Normal speed - 0.15mm", + "default_print_profile": "Normal performance VS30 - 0.20mm", "host_type": "octoprint", "print_host": "192.168.0.60", "nozzle_diameter": ["0.4"], From d48585c715aca01bc0620bfa23d2db45c3c8e375 Mon Sep 17 00:00:00 2001 From: yw4z Date: Tue, 10 Mar 2026 22:16:06 +0300 Subject: [PATCH 22/67] Update BBLTopbar.cpp --- src/slic3r/GUI/BBLTopbar.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 4ac9a7aa29..59b490c4cb 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -263,15 +263,24 @@ void BBLTopbar::Init(wxFrame* parent) m_title_item = this->AddLabel(ID_TITLE, "", FromDIP(TOPBAR_TITLE_WIDTH)); m_title_item->SetAlignment(wxALIGN_CENTRE); + this->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { + if(m_title_item){ + m_title_item->SetMinSize(wxSize(FromDIP(e.GetSize().GetWidth() > FromDIP(700) ? TOPBAR_TITLE_WIDTH : 200), -1)); + SetTitle(m_title_item->GetLabel()); + Refresh(); + } + e.Skip(); + }); + this->AddSpacer(FromDIP(10)); this->AddStretchSpacer(1); - m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE); - m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap); - m_publish_disable_bitmap = create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE); - m_publish_item->SetDisabledBitmap(m_publish_disable_bitmap); - this->EnableTool(m_publish_item->GetId(), false); - this->AddSpacer(FromDIP(4)); + //m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE); + //m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap); + //m_publish_disable_bitmap = create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE); + //m_publish_item->SetDisabledBitmap(m_publish_disable_bitmap); + //this->EnableTool(m_publish_item->GetId(), false); + //this->AddSpacer(FromDIP(4)); /*wxBitmap model_store_bitmap = create_scaled_bitmap("topbar_store", nullptr, TOPBAR_ICON_SIZE); m_model_store_item = this->AddTool(ID_MODEL_STORE, "", model_store_bitmap); @@ -279,7 +288,7 @@ void BBLTopbar::Init(wxFrame* parent) */ //this->AddSeparator(); - this->AddSpacer(FromDIP(4)); + //this->AddSpacer(FromDIP(4)); wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); @@ -324,7 +333,7 @@ void BBLTopbar::Init(wxFrame* parent) this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnRedo, this, wxID_REDO); this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnUndo, this, wxID_UNDO); //this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnModelStoreClicked, this, ID_MODEL_STORE); - this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnPublishClicked, this, ID_PUBLISH); + //this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnPublishClicked, this, ID_PUBLISH); } BBLTopbar::~BBLTopbar() @@ -447,7 +456,7 @@ wxMenu* BBLTopbar::GetCalibMenu() void BBLTopbar::SetTitle(wxString title) { wxGCDC dc(this); - title = wxControl::Ellipsize(title, dc, wxELLIPSIZE_END, FromDIP(TOPBAR_TITLE_WIDTH)); + title = wxControl::Ellipsize(title, dc, wxELLIPSIZE_END, m_title_item->GetMinSize().GetWidth()); m_title_item->SetLabel(title); m_title_item->SetAlignment(wxALIGN_CENTRE); From e36fe7606b9c94c77dd52498b9196150ec44db26 Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Wed, 11 Mar 2026 06:55:19 +0300 Subject: [PATCH 23/67] Fixes --- localization/i18n/ru/OrcaSlicer_ru.po | 89 +++++++++++++++------------ resources/web/data/text.js | 2 +- 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 04da4d4d9c..ae39ddcd3b 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -2819,6 +2819,7 @@ msgstr "Пауза" msgid "Template" msgstr "Шаблон" +# Тянется из 9 мест: группировка материалов: Auto/Custom, Форма стола: %s, тип линии: %s, калибровка температуры – Тип материала: %s (тут колонки узкие, но место вроде есть),). Причём местами должно согласоваться с разными родами (форма: пользов.). Лучше сократить до Пользов. msgid "Custom" msgstr "Пользовательский" @@ -4165,9 +4166,9 @@ msgstr "Удалить" msgid "Not found:" msgstr "Не найдено:" -# Используется в 7 местах +# Используется в 7 местах – сокращаем, т.к. из-за длины растягивается окно с информацией о печати msgid "Model" -msgstr "3D-модель" +msgstr "Модель" msgid "Choose an STL file to import bed shape from:" msgstr "Выберите файл STL для импорта формы стола:" @@ -5075,7 +5076,7 @@ msgstr "Видимость" # в результате нарезки это, в профиле прутка msgid "Flushed" -msgstr "Очистка" +msgstr "Прочистка" msgid "Tower" msgstr "Башня" @@ -5601,7 +5602,7 @@ msgstr "" msgid "" "PLA and PETG filaments detected in the mixture. Adjust parameters according " "to the Wiki to ensure print quality." -msgstr "" +msgstr "Обнаружено совместное использование PLA и PETG. Для повышения качество рекомендуется настроить параметры в соответствии с руководством." msgid "The prime tower extends beyond the plate boundary." msgstr "Башня очистки выходит за пределы области печати." @@ -5622,7 +5623,7 @@ msgstr "" "в цветной модели. Рекомендуется изменить настройки прочистки:" msgid "Click Wiki for help." -msgstr "Подробнее на Wiki" +msgstr "Открыть руководство" msgid "Click here to regroup" msgstr "Перегруппировать" @@ -5739,6 +5740,7 @@ msgstr "Авторизация" msgid "Prepare" msgstr "Подготовка" +# Предпросмотр – так места хватает, чтобы в split-режиме на экране целиком умещалась кнопка нарезки msgid "Preview" msgstr "Просмотр нарезки" @@ -5760,8 +5762,9 @@ msgstr "Нет" msgid "will be closed before creating a new model. Do you want to continue?" msgstr "будет закрыт перед созданием новой модели. Хотите продолжить?" +# Возможно, имеет смысл убрать тут "стол". Подавляющее большинство проектов – это размещение моделей и их печать на одном столе, поэтому намёк на работу с несколькими столами тут выглядит излишним. А в режиме работы с несколькими столами по противопоставлению "Нарезать/Нарезать все" и так понятно, что к чему относится. Преимущества – это экономит немного места для соседней кнопки, которая сейчас не видна в split-режиме окон слайсера на некоторых экранах (ноутбуки с оптимальным масштабированием). msgid "Slice plate" -msgstr "Нарезать стол" +msgstr "Нарезать" msgid "Print plate" msgstr "Распечатать стол" @@ -6833,8 +6836,9 @@ msgstr "Применимо только во время печати" msgid "Silent" msgstr "Тихий" +# Подставляется в "%s экструдер"; используется везде совместно с "High flow" (Обычный режим/Высокий расход) msgid "Standard" -msgstr "Стандартный" +msgstr "Обычный" msgid "Sport" msgstr "Спортивный" @@ -6847,7 +6851,7 @@ msgid "" "monitoring, like spaghetti detection. Please choose carefully." msgstr "" "Будьте осторожны, выключение освещения в процессе работы приведёт к отказу " -"систем интеллектуального отслеживания (например, обнаружения слетевших " +"систем интеллектуального отслеживания (например, обнаружения отрыва " "моделей)." msgid "Keep it On" @@ -7368,7 +7372,7 @@ msgid "Brass" msgstr "Латунь" msgid "High flow" -msgstr "" +msgstr "Высокий расход" msgid "No wiki link available for this printer." msgstr "Ссылка на руководство по этому принтеру отсутствует." @@ -7441,14 +7445,15 @@ msgstr "Внимание: «%s» экструдер не может печата msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Совмещение %1% с %2% при печати не рекомендуется.\n" -# подстановка в составные уведомления. Часто речь идёт именно об экструдере, а не о сопле, плюс "экструдер" лучше согласуется. +# подстановка в составные уведомления (напр.: "0.2mm Стандартный nozzle"). Часто речь идёт именно об экструдере, а не о сопле, плюс "экструдер" лучше согласуется. msgid " nozzle" msgstr " экструдер" +# Очень кривая подстановка (nozzle_diameter, volume_type), поэтому такой вариант. Например, сейчас получается: "Не рекомендуется одновременно использовать сопло 0.2mm Стандартный экструдер и Bambu PETG Transparent" #, boost-format msgid "" "It is not recommended to print the following filament(s) with %1%: %2%\n" -msgstr "Соплом %1% не рекомендуется печатать %2%\n" +msgstr "Не рекомендуется одновременно использовать сопло %1% и %2%\n" msgid "" "It is not recommended to use the following nozzle and filament " @@ -7757,6 +7762,7 @@ msgstr "" "Во избежание повреждения принтера убедитесь, что G-код в этих профилях " "безопасен!" +# Проверить, где используется (кроме окна сохранения профиля) – может лучше переименовать в "Новый профиль"? Чтобы упростить понимание действия совершаемого слайсером действия. msgid "Customized Preset" msgstr "Пользовательский профиль" @@ -8490,7 +8496,7 @@ msgid "Ask When Relevant" msgstr "автовыбор" msgid "Always Ask" -msgstr "выбор действия" +msgstr "окно выбора" msgid "Load Geometry Only" msgstr "3D-модели" @@ -8515,7 +8521,7 @@ msgid "Add STL/STEP files to recent files list" msgstr "Сохранять STL/STEP в списке последних" msgid "Don't warn when loading 3MF with modified G-code" -msgstr "Отключить предупреждение при загрузке 3MF с модифицированным G-кодом" +msgstr "Не предупреждать при загрузке 3MF с модифицированным G-кодом" msgid "Show options when importing STEP file" msgstr "Показывать настройки импорта STEP" @@ -9077,8 +9083,9 @@ msgstr "Пожалуйста, введите значение слоя (>= 2)." msgid "Plate name" msgstr "Имя стола" +# Длинно и не понятно, зачем – это в настройках столов, переопределение типа покрытия msgid "Same as Global Plate Type" -msgstr "Аналогично глобальному типу пластины" +msgstr "По умолчанию" msgid "Bed type" msgstr "Покрытие" @@ -9125,7 +9132,7 @@ msgid "Packing project data into 3MF file" msgstr "Упаковка данных проекта в файл формата 3mf" msgid "Uploading 3MF" -msgstr "Отправка 3mf" +msgstr "Отправка 3MF" msgid "Jump to model publish web page" msgstr "Перейти на веб-страницу публикации модели" @@ -11031,7 +11038,7 @@ msgid "" "changed or filaments changed. You could disable the auto-calculate in Orca " "Slicer > Preferences" msgstr "" -"Программа будет пересчитывать значения при каждом изменении цвета или смены " +"Значения будут пересчитываться при каждом изменении цвета или смене " "материала. Это можно отключить в настройках." msgid "Flushing volume (mm³) for each filament pair." @@ -12346,7 +12353,7 @@ msgid "Password" msgstr "Пароль" msgid "Ignore HTTPS certificate revocation checks" -msgstr "Игнорировать проверки отзыва сертификата HTTPS" +msgstr "Игнорировать проверки отзыва сертификата" msgid "" "Ignore HTTPS certificate revocation checks in case of missing or offline " @@ -13826,6 +13833,7 @@ msgstr "" "внешней поверхности. Кроме того, это может приводить к тому, что заполнение " "будет просвечиваться через внешнюю поверхность детали.." +# См. https://github.com/OrcaSlicer/OrcaSlicer/pull/12669 msgid "Wall loop direction" msgstr "Направление печати периметров" @@ -14536,12 +14544,12 @@ msgid "" msgstr "" msgid "Tower ironing area" -msgstr "" +msgstr "Разглаживание черновой башни" msgid "" "Ironing area for prime tower interface layer (where different materials " "meet)." -msgstr "" +msgstr "Площадь разглаживания области на стыке двух разных материалов. Снижает риск столкновения сопла с торчащими кончиками линий при дальнейшей прочистке.\n\nПримечание: эта функция требует включения защитных окон черновой башни." msgid "mm²" msgstr "мм²" @@ -16721,7 +16729,7 @@ msgstr "" "эффекта низкополигональной модели." msgid "Travel distance threshold" -msgstr "Порог перемещения для отката" +msgstr "Порог перемещения" msgid "" "Only trigger retraction when the travel distance is longer than this " @@ -16956,14 +16964,14 @@ msgstr "" msgid "Show auto-calibration marks" msgstr "Отображать на столе линии автокалибровки" +# Не отправлять оценку времени, Не маркировать прогресс печати, Отключить маркировку прогресса печати msgid "Disable set remaining print time" -msgstr "Откл. генерацию оставшегося времени печати" +msgstr "Не отмечать прогресс" msgid "" "Disable generating of the M73: Set remaining print time in the final G-code." msgstr "" -"Отключение генерации команды M73 - вывода оставшегося времени печати в " -"конечный G-код." +"Отключить вставку в G-код команд для вывода прогресса печати и оставшегося времени." msgid "Seam position" msgstr "Позиция шва" @@ -18319,8 +18327,7 @@ msgstr "Внутренние рёбра" msgid "Enable internal ribs to increase the stability of the prime tower." msgstr "" -"Создавать внутренние рёбра жёсткости для повышения стабильности печати " -"черновой башни." +"Создавать внутренние опоры на протяжении всей высоты башни для повышения её устойчивости. Если отключено, опоры создаются только под слоями прочистки материала.\n\nПримечание: влияет только на принтеры Bambu, в остальных случаях башня автоматически сужается по необходимости." # ??? настройка отключена в коде msgid "Purging volumes" @@ -18437,9 +18444,9 @@ msgstr "" "3. Рёбра жёсткости, которые добавляются по четырём углам черновой башни для " "повышения устойчивости." -# Тянется из "Форма стола" и "Форма черновой башни" +# Тянется из "Форма стола" (в создании принтера) и "Форма черновой башни" msgid "Rectangle" -msgstr "Прямоугольник" +msgstr "Прямоугольная" msgid "Rib" msgstr "Усиленная" @@ -18675,9 +18682,10 @@ msgid "" "Picture sizes to be stored into a .gcode and .sl1 / .sl1s files, in the " "following format: \"XxY, XxY, ...\"" msgstr "" -"Размеры изображения, которые будут сохранены в файлах .sl1 / .sl1s в " -"следующем формате: \"XxY, XxY, ...\"" +"Параметры изображений для сохранения в файлах .gcode, .sl1 и .sl1s. Задаются в " +"следующем виде: \"XxY/PNG, XxY/PNG, ...\".\nПоддерживаются форматы JPG, PNG, QOI, BTT_TFT и COLPIC." +# Легаси, сейчас формат задаётся отдельно для каждого отдельного изображения внутри файла. msgid "Format of G-code thumbnails" msgstr "Формат эскизов G-кода" @@ -20593,7 +20601,7 @@ msgid "" "Recommended: Set Damp to 0.\n" "This will use the printer's default or saved value." msgstr "" -"Совет: установите значение затухания (Damp) равным 0\n" +"Совет: установите значение затухания (Damp) равным 0 " "для использования значения из прошивки принтера." msgid "" @@ -20606,7 +20614,7 @@ msgstr "" msgid "Please input a valid damping factor (0 < Damping/zeta factor <= 1)" msgstr "" "Введите допустимый коэффициент затухания (0 < Затухание/коэффициент " -"затухания <= 1)" +"затухания ≤ 1)" msgid "Input shaping Damp test" msgstr "Тест затухания Input shaping" @@ -20633,14 +20641,13 @@ msgid "" "Please input valid values:\n" "(0 < Freq < 500)" msgstr "" -"Введите допустимые значения:\n" -"(0 < Частота < 500)" +"Введите допустимое значение:\n" +"(0 < частота < 500)" msgid "" "Please input a valid damping factor (0 <= DampingStart < DampingEnd <= 1)" msgstr "" -"Введите допустимый коэффициент затухания (0 <= DampingStart < DampingEnd <= " -"1)" +"Введите допустимый коэффициент затухания (0 ≤ начало < конец ≤ 1)" msgid "Cornering test" msgstr "Тест прохождения углов" @@ -20660,12 +20667,13 @@ msgstr "Тестируемый диапазон" msgid "Note: Lower values = sharper corners but slower speeds." msgstr "Примечание: чем ниже значения, тем острее и медленнее печатаются углы." +# Junction Deviation – a, c, e и o заменены на кириллические для обхода бага с расчётом ширины текста для переноса строк (чтобы текст не обрезался, короче). msgid "" "Marlin 2 Junction Deviation detected:\n" "To test Classic Jerk, set 'Maximum Junction Deviation' in Motion ability to " "0." msgstr "" -"Внимание: тестируется работа Junction Deviation.\n" +"Внимание: тестируется Junсtiоn Dеviаtiоn.\n" "Для тестирования рывков необходимо обнулить его значение (профиль принтера → " "ограничения → рывки → Макс. значение Junction Deviation)." @@ -21507,14 +21515,13 @@ msgstr "Веб-интерфейс хоста печати на вкладке « msgid "Replace the BambuLab's device tab with print host webui" msgstr "Заменить вкладку принтера BambuLab на веб-интерфейс хоста печати" -# Слишком мало места, текст срезается. Костылим с неразрывными пробелами. +# HTTPS – на кириллице, чтобы обойти баг с переносом. msgid "" "HTTPS CA file is optional. It is only needed if you use HTTPS with a self-" "signed certificate." msgstr "" -"Файл корневого сертификата HTTPS необходим только при\n" -"использовании HTTPS с самоподписанным сертификатом.\n" -" " +"Файл корневого сертификата НТТРS необходим только при использовании\n" +"НТТРS с самоподписанным сертификатом." msgid "Certificate files (*.crt, *.pem)|*.crt;*.pem|All files|*.*" msgstr "Файлы сертификатов (*.crt, *.pem)|*.crt;*.pem|Все файлы|*.*" @@ -22281,7 +22288,7 @@ msgid "We will slice according to this grouping method:" msgstr "Осуществлять нарезку в соответствии с этой группировкой:" msgid "Tip: You can drag the filaments to reassign them to different nozzles." -msgstr "Совет: для назначения материала можно перетащить его в нужное поле." +msgstr "Совет: для назначения материала перетащите его в нужное поле." msgid "" "The filament grouping method for current plate is determined by the dropdown " diff --git a/resources/web/data/text.js b/resources/web/data/text.js index a39270c042..e5d31d252c 100644 --- a/resources/web/data/text.js +++ b/resources/web/data/text.js @@ -1112,7 +1112,7 @@ var LangText = { t112: "Присоединяйтесь к программе", t113: "Вы можете изменить свой выбор в любое время.", t126: "Загрузка...", - orca1: "Редактировать информацию о проекте", + orca1: "Изменить информацию", orca2: "Информация отсутствует", orca3: "Режим конфиденциальности", orca4: "Это остановит передачу данных в облачные сервисы Bambu. Помешает только владельцам Bambu Lab, не использующим режим «Только LAN».", From eab3139268c1d499b0c1123586b9bc76743a8c9f Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 06:56:03 +0300 Subject: [PATCH 24/67] update --- src/slic3r/GUI/BBLTopbar.cpp | 104 +++++++++++++++++++++++++---------- src/slic3r/GUI/BBLTopbar.hpp | 18 +++++- 2 files changed, 92 insertions(+), 30 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 59b490c4cb..b729ba2dc3 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -36,14 +36,69 @@ enum CUSTOM_ID ID_AMS_NOTEBOOK, }; +CenteredTitle::CenteredTitle(wxWindow* parent) + : wxControl() +{ + SetBackgroundStyle(wxBG_STYLE_PAINT); + Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); + Bind(wxEVT_PAINT, [this](wxPaintEvent& e) { + wxBufferedPaintDC dc(this); + dc.SetBackground(wxBrush(wxColour(38, 46, 48))); + dc.Clear(); + + dc.SetFont(GetFont()); + dc.SetTextForeground(*wxWHITE); + + wxFontMetrics fm = dc.GetFontMetrics(); + int textHeight = fm.ascent + fm.descent; + + wxString text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, GetClientSize().GetWidth() - FromDIP(8)); + + wxRect rect = GetClientRect(); + int y = rect.y + (rect.height - textHeight) / 2; + + dc.DrawText(text, rect.x + (rect.width - dc.GetTextExtent(text).GetWidth()) / 2, y); + }); + + // repaint for Ellipsize + Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { + Refresh(); + e.Skip(); + }); + + Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); + GetParent()->GetEventHandler()->ProcessEvent(e); + }); + + Bind(wxEVT_LEFT_DCLICK, [this](wxMouseEvent& e) { + e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); + GetParent()->GetEventHandler()->ProcessEvent(e); + }); +} + +void CenteredTitle::SetTitle(const wxString& title) { + m_title = title; + RefreshRect(GetClientRect()); + Update(); +} + +// required for proper height +wxSize CenteredTitle::DoGetBestSize() const +{ + return wxSize(10, FromDIP(30)); +} + + class BBLTopbarArt : public wxAuiDefaultToolBarArt { public: - virtual void DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; + //virtual void DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; virtual void DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) wxOVERRIDE; virtual void DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; }; +/* void BBLTopbarArt::DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) { dc.SetFont(m_font); @@ -71,6 +126,7 @@ void BBLTopbarArt::DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& it dc.DrawText(item.GetLabel(), textX, textY); dc.DestroyClippingRegion(); } +*/ void BBLTopbarArt::DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) { @@ -257,23 +313,15 @@ void BBLTopbar::Init(wxFrame* parent) m_calib_item = this->AddTool(ID_CALIB, _L("Calibration"), calib_bitmap); m_calib_item->SetDisabledBitmap(calib_bitmap_inactive); - this->AddSpacer(FromDIP(10)); - this->AddStretchSpacer(1); + this->AddSpacer(FromDIP(25)); + //this->AddStretchSpacer(1); - m_title_item = this->AddLabel(ID_TITLE, "", FromDIP(TOPBAR_TITLE_WIDTH)); - m_title_item->SetAlignment(wxALIGN_CENTRE); + m_title_ctrl = new CenteredTitle(this); + wxAuiToolBarItem* title_item = this->AddControl(m_title_ctrl, ""); + title_item->SetProportion(1); - this->Bind(wxEVT_SIZE, [this](wxSizeEvent& e) { - if(m_title_item){ - m_title_item->SetMinSize(wxSize(FromDIP(e.GetSize().GetWidth() > FromDIP(700) ? TOPBAR_TITLE_WIDTH : 200), -1)); - SetTitle(m_title_item->GetLabel()); - Refresh(); - } - e.Skip(); - }); - - this->AddSpacer(FromDIP(10)); - this->AddStretchSpacer(1); + this->AddSpacer(FromDIP(25)); + //this->AddStretchSpacer(1); //m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE); //m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap); @@ -455,12 +503,9 @@ wxMenu* BBLTopbar::GetCalibMenu() void BBLTopbar::SetTitle(wxString title) { - wxGCDC dc(this); - title = wxControl::Ellipsize(title, dc, wxELLIPSIZE_END, m_title_item->GetMinSize().GetWidth()); - - m_title_item->SetLabel(title); - m_title_item->SetAlignment(wxALIGN_CENTRE); - this->Refresh(); + m_titleText = title; + if (m_title_ctrl) + m_title_ctrl->SetTitle(title); } void BBLTopbar::SetMaximizedSize() @@ -509,7 +554,8 @@ void BBLTopbar::Rescale() { item->SetBitmap(create_scaled_bitmap("calib_sf", this, TOPBAR_ICON_SIZE)); item->SetDisabledBitmap(create_scaled_bitmap("calib_sf_inactive", this, TOPBAR_ICON_SIZE)); - item = this->FindTool(ID_TITLE); + if (m_title_ctrl) + m_title_ctrl->SetTitle(m_titleText); /*item = this->FindTool(ID_PUBLISH); item->SetBitmap(create_scaled_bitmap("topbar_publish", this, TOPBAR_ICON_SIZE)); @@ -574,9 +620,9 @@ void BBLTopbar::OnCloseFrame(wxAuiToolBarEvent& event) void BBLTopbar::OnMouseLeftDClock(wxMouseEvent& mouse) { wxPoint mouse_pos = ::wxGetMousePosition(); + wxAuiToolBarItem* item = this->FindToolByCurrentPosition(); // check whether mouse is not on any tool item - if (this->FindToolByCurrentPosition() != NULL && - this->FindToolByCurrentPosition() != m_title_item) { + if (item != NULL && item->GetWindow() != m_title_ctrl) { mouse.Skip(); return; } @@ -644,10 +690,10 @@ void BBLTopbar::OnMouseLeftDown(wxMouseEvent& event) { wxPoint mouse_pos = ::wxGetMousePosition(); wxPoint frame_pos = m_frame->GetScreenPosition(); + wxAuiToolBarItem* item = this->FindToolByCurrentPosition(); m_delta = mouse_pos - frame_pos; - if (FindToolByCurrentPosition() == NULL - || this->FindToolByCurrentPosition() == m_title_item) + if (item == NULL || item->GetWindow() == m_title_ctrl) { #ifdef __WXMSW__ CaptureMouse(); @@ -737,8 +783,8 @@ WXLRESULT BBLTopbar::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam { switch (nMsg) { case WM_NCHITTEST: { - const wxAuiToolBarItem* current_item = this->FindToolByCurrentPosition(); - if (current_item != nullptr && current_item != m_title_item) { + wxAuiToolBarItem* item = this->FindToolByCurrentPosition(); + if (item != NULL && item->GetWindow() != m_title_ctrl) { break; } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index b5f4673a44..bb3218f5bd 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -6,9 +6,22 @@ #include "SelectMachine.hpp" #include "DeviceManager.hpp" +#include using namespace Slic3r::GUI; +class CenteredTitle : public wxControl +{ +public: + CenteredTitle(wxWindow* parent); + void SetTitle(const wxString& title); + + wxSize DoGetBestSize() const override; + +private: + wxString m_title; +}; + class BBLTopbar : public wxAuiToolBar { public: @@ -70,7 +83,10 @@ private: wxMenu m_top_menu; wxMenu* m_file_menu; wxMenu m_calib_menu; - wxAuiToolBarItem* m_title_item; + + CenteredTitle* m_title_ctrl { nullptr }; + wxString m_titleText; + wxAuiToolBarItem* m_account_item; wxAuiToolBarItem* m_model_store_item; From 2ebc0aa6c1f1d7d66ff4fe88a0fcd82611330c0b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 11 Mar 2026 13:32:29 +0800 Subject: [PATCH 25/67] 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 26/67] 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 c06d596a0defcbe7a9fd7f3e82bebb416115fecd Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Wed, 11 Mar 2026 10:17:04 +0300 Subject: [PATCH 27/67] Update OrcaSlicer_ru.po --- localization/i18n/ru/OrcaSlicer_ru.po | 31 ++++++++++++++------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index ae39ddcd3b..f0610a2c45 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -2821,7 +2821,7 @@ msgstr "Шаблон" # Тянется из 9 мест: группировка материалов: Auto/Custom, Форма стола: %s, тип линии: %s, калибровка температуры – Тип материала: %s (тут колонки узкие, но место вроде есть),). Причём местами должно согласоваться с разными родами (форма: пользов.). Лучше сократить до Пользов. msgid "Custom" -msgstr "Пользовательский" +msgstr "Пользов." msgid "Pause:" msgstr "Пауза:" @@ -4362,7 +4362,7 @@ msgid "" "seam_slope_start_height need to be smaller than layer_height.\n" "Reset to 0." msgstr "" -"seam_slope_start_height должна быть меньше высоты слоя.\n" +"Начальная высота не должна превышать высоту слоя.\n" "Значение сброшено на 0." #, fuzzy, c-format, boost-format @@ -5481,7 +5481,7 @@ msgstr "Выйти из сборки" msgid "Return" msgstr "Назад" -# Не нашёл в интерфейсе, в коде GLCanvas3D.cpp, 8485 строка (на момент февраля 2026) +# Не нашёл в интерфейсе, в коде GLCanvas3D.cpp, 8485 строка (на момент февраля 2026). Похоже, это внутреннее название кнопки с панелью управления визуалом пространства моделей. msgid "Canvas Toolbar" msgstr "" @@ -5560,34 +5560,35 @@ msgstr "Траектория перемещения в G-коде выходит msgid "Not support printing 2 or more TPU filaments." msgstr "Печать двумя и более прутками TPU не поддерживается." -# Подставляется ID экструдера +# Подставляется ID экструдера. Используется для двухэкструдерных Bambu и тулченджеров. Чтобы не мешать в одном месте "инструмент-насадка", лучше взять более универсальное "экструдер". Подставляется в последующее сообщение. #, c-format, boost-format msgid "Tool %d" -msgstr "Инструмент %d" +msgstr "%d экструдер" #, c-format, boost-format msgid "" "Filament %s is placed in the %s, but the generated G-code path exceeds the " "printable range of the %s." -msgstr "" +msgstr "%s назначен на %s, но итоговый G-код выходит за его предел высоты печати [%s]." #, c-format, boost-format msgid "" "Filaments %s are placed in the %s, but the generated G-code path exceeds the " "printable range of the %s." -msgstr "" +msgstr "%s назначены на %s, но итоговый G-код выходит за его предел высоты печати [%s]." +# Возможно, какая-то специфичная проверка для тулченджеров, на профиле H2D при превышении высоты через подъём при откате оно не выводится. Квадратные скобки – костыль для обхода кривизны системы локализации. #, c-format, boost-format msgid "" "Filament %s is placed in the %s, but the generated G-code path exceeds the " "printable height of the %s." -msgstr "" +msgstr "%s назначен на %s, но итоговый G-код выходит за его предел высоты печати [%s]." #, c-format, boost-format msgid "" "Filaments %s are placed in the %s, but the generated G-code path exceeds the " "printable height of the %s." -msgstr "" +msgstr "%s назначены на %s, но итоговый G-код выходит за его предел высоты печати [%s]." msgid "Open wiki for more information." msgstr "Подробнее на Вики." @@ -5597,12 +5598,12 @@ msgstr "При редактировании другие модели скрыв #, c-format, boost-format msgid "Filaments %s cannot be printed directly on the surface of this plate." -msgstr "" +msgstr "Для печати %s требуется подложка или основание из другого материала." msgid "" "PLA and PETG filaments detected in the mixture. Adjust parameters according " "to the Wiki to ensure print quality." -msgstr "Обнаружено совместное использование PLA и PETG. Для повышения качество рекомендуется настроить параметры в соответствии с руководством." +msgstr "Обнаружено совместное использование PLA и PETG. Для повышения качества рекомендуется настроить параметры в соответствии с руководством." msgid "The prime tower extends beyond the plate boundary." msgstr "Башня очистки выходит за пределы области печати." @@ -5772,7 +5773,7 @@ msgstr "Распечатать стол" msgid "Export G-code file" msgstr "Экспорт в G-код" -# ??????? Используется в двух местах или уже исправили? – Судя по коду, вызывается аж в четырёх местах (Felix) +# ??????? Используется в двух местах или уже исправили? – Судя по коду, вызывается аж в четырёх местах (Felix) UPD: уже в 5 msgid "Send" msgstr "Отправить" @@ -15769,7 +15770,7 @@ msgstr "" "Внимание: не все шаблоны поддерживают поворот." msgid "Skeleton infill density" -msgstr "Плотность внутреннего заполнения" +msgstr "Плотность зигзага" msgid "" "The remaining part of the model contour after removing a certain depth from " @@ -15783,7 +15784,7 @@ msgstr "" "умолчанию равно плотности заполнения." msgid "Skin infill density" -msgstr "Плотность оболочки зигзага" +msgstr "Плотность оболочки" msgid "" "The portion of the model's outer surface within a certain depth range is " @@ -15802,7 +15803,7 @@ msgid "The parameter sets the depth of skin." msgstr "Задаёт глубину создания внутренней оболочки." msgid "Infill lock depth" -msgstr "Перекрытие заполнения" +msgstr "Перекрытие зигзага" msgid "The parameter sets the overlapping depth between the interior and skin." msgstr "Задаёт ширину взаимного перекрытия зигзага и его оболочки." From e5a1020fcb32b496c8133bea5842a0f8056bfacf Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 14:43:27 +0300 Subject: [PATCH 28/67] fix shaky text while resizing --- src/slic3r/GUI/BBLTopbar.cpp | 33 +++++++++++++++++++++++++-------- src/slic3r/GUI/BBLTopbar.hpp | 2 ++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index b729ba2dc3..677de1e60b 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -41,23 +41,38 @@ CenteredTitle::CenteredTitle(wxWindow* parent) { SetBackgroundStyle(wxBG_STYLE_PAINT); Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE); - Bind(wxEVT_PAINT, [this](wxPaintEvent& e) { + Bind(wxEVT_PAINT, [this](wxPaintEvent&) { wxBufferedPaintDC dc(this); dc.SetBackground(wxBrush(wxColour(38, 46, 48))); dc.Clear(); - dc.SetFont(GetFont()); dc.SetTextForeground(*wxWHITE); - wxFontMetrics fm = dc.GetFontMetrics(); - int textHeight = fm.ascent + fm.descent; + wxRect rect = GetClientRect(); + int clientW = rect.GetWidth(); - wxString text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, GetClientSize().GetWidth() - FromDIP(8)); + wxFontMetrics fm = dc.GetFontMetrics(); + int textHeight = fm.ascent + fm.descent; + int y = rect.y + (rect.height - textHeight) / 2; - wxRect rect = GetClientRect(); - int y = rect.y + (rect.height - textHeight) / 2; + int fullW = dc.GetTextExtent(m_title).GetWidth(); + int naturalX = rect.x + (clientW - fullW) / 2; - dc.DrawText(text, rect.x + (rect.width - dc.GetTextExtent(text).GetWidth()) / 2, y); + // Only update cached x if the shift exceeds 3px threshold to fix shaky text while resizing window and ellipsizing end + if (m_cachedX == -1 || std::abs(naturalX - m_cachedX) > FromDIP(3)) { + m_cachedX = wxMax(rect.x, naturalX); + m_cachedWidth = fullW; + } + + wxString text = m_title; + int availW = clientW - FromDIP(8); + + if (fullW > availW) { + int availFromCached = rect.x + clientW - m_cachedX - FromDIP(4); + text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, wxMax(availFromCached, FromDIP(20))); + } + + dc.DrawText(text, m_cachedX, y); }); // repaint for Ellipsize @@ -79,6 +94,8 @@ CenteredTitle::CenteredTitle(wxWindow* parent) void CenteredTitle::SetTitle(const wxString& title) { m_title = title; + m_cachedX = -1; + m_cachedWidth = -1; RefreshRect(GetClientRect()); Update(); } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index bb3218f5bd..49efea41ce 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -20,6 +20,8 @@ public: private: wxString m_title; + mutable int m_cachedX = -1; + mutable int m_cachedWidth = -1; }; class BBLTopbar : public wxAuiToolBar From ef2f7ca22af1930b8f55601dbddb2e6218302a66 Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 15:14:21 +0300 Subject: [PATCH 29/67] simplify solution --- src/slic3r/GUI/BBLTopbar.cpp | 32 +++++++++----------------------- src/slic3r/GUI/BBLTopbar.hpp | 2 -- 2 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 677de1e60b..62c20e65cc 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -48,31 +48,19 @@ CenteredTitle::CenteredTitle(wxWindow* parent) dc.SetTextForeground(*wxWHITE); - wxRect rect = GetClientRect(); - int clientW = rect.GetWidth(); + wxFontMetrics fm = dc.GetFontMetrics(); + int textHeight = fm.ascent + fm.descent; - wxFontMetrics fm = dc.GetFontMetrics(); - int textHeight = fm.ascent + fm.descent; - int y = rect.y + (rect.height - textHeight) / 2; + wxRect rect = GetClientRect(); - int fullW = dc.GetTextExtent(m_title).GetWidth(); - int naturalX = rect.x + (clientW - fullW) / 2; + wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, rect.GetWidth() - FromDIP(8)); - // Only update cached x if the shift exceeds 3px threshold to fix shaky text while resizing window and ellipsizing end - if (m_cachedX == -1 || std::abs(naturalX - m_cachedX) > FromDIP(3)) { - m_cachedX = wxMax(rect.x, naturalX); - m_cachedWidth = fullW; - } + int y = rect.y + (rect.height - textHeight) / 2; + int x = rect.x + (ellipsized != m_title) + ? FromDIP(4) // fixed left when clipped + : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when full - wxString text = m_title; - int availW = clientW - FromDIP(8); - - if (fullW > availW) { - int availFromCached = rect.x + clientW - m_cachedX - FromDIP(4); - text = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, wxMax(availFromCached, FromDIP(20))); - } - - dc.DrawText(text, m_cachedX, y); + dc.DrawText(ellipsized, x, y); }); // repaint for Ellipsize @@ -94,8 +82,6 @@ CenteredTitle::CenteredTitle(wxWindow* parent) void CenteredTitle::SetTitle(const wxString& title) { m_title = title; - m_cachedX = -1; - m_cachedWidth = -1; RefreshRect(GetClientRect()); Update(); } diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index 49efea41ce..bb3218f5bd 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -20,8 +20,6 @@ public: private: wxString m_title; - mutable int m_cachedX = -1; - mutable int m_cachedWidth = -1; }; class BBLTopbar : public wxAuiToolBar 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 30/67] 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 aabbc4152709f51d80eb589900b25790703284ef Mon Sep 17 00:00:00 2001 From: yw4z Date: Wed, 11 Mar 2026 15:36:19 +0300 Subject: [PATCH 31/67] Update BBLTopbar.cpp --- src/slic3r/GUI/BBLTopbar.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 62c20e65cc..d097fa2c2d 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -51,13 +51,12 @@ CenteredTitle::CenteredTitle(wxWindow* parent) wxFontMetrics fm = dc.GetFontMetrics(); int textHeight = fm.ascent + fm.descent; - wxRect rect = GetClientRect(); - + wxRect rect = GetClientRect(); wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, rect.GetWidth() - FromDIP(8)); int y = rect.y + (rect.height - textHeight) / 2; - int x = rect.x + (ellipsized != m_title) - ? FromDIP(4) // fixed left when clipped + int x = rect.x + (ellipsized != m_title) // is ellipsized + ? FromDIP(4) // fixed left when clipped : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when full dc.DrawText(ellipsized, x, y); @@ -69,15 +68,14 @@ CenteredTitle::CenteredTitle(wxWindow* parent) e.Skip(); }); - Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { + auto forwardMouseEvent = [this](wxMouseEvent& e) { + if (e.LeftDown() && e.GetClickCount() > 1) return; // prevent duplicate event e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); GetParent()->GetEventHandler()->ProcessEvent(e); - }); + }; - Bind(wxEVT_LEFT_DCLICK, [this](wxMouseEvent& e) { - e.SetPosition(GetParent()->ScreenToClient(ClientToScreen(e.GetPosition()))); - GetParent()->GetEventHandler()->ProcessEvent(e); - }); + Bind(wxEVT_LEFT_DOWN, forwardMouseEvent); + Bind(wxEVT_LEFT_DCLICK, forwardMouseEvent); } void CenteredTitle::SetTitle(const wxString& title) { 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 32/67] 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 33/67] 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 34/67] 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 35/67] 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 36/67] 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 37/67] 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 71aeb3aaf5eec0972fd3e21bf397f7aba7f49f2f Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Fri, 13 Mar 2026 02:49:22 +0300 Subject: [PATCH 38/67] Update OrcaSlicer_ru.po --- localization/i18n/ru/OrcaSlicer_ru.po | 55 ++++++++++++--------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index f0610a2c45..45f96dd6d0 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -163,7 +163,7 @@ msgstr "Очистить всё" msgid "Highlight overhang areas" msgstr "Выделить зоны нависания" -# Аналогичная строка "Gap Fill" используется в меню поддержек и раскраски в значении "Заливка вкраплений/Устранение вкраплений", но эта строка выводится только в таблице анализа линии (расширенный просмотр печати слоя) в значении "тип: заполнение щели" (Feature type: Gap fill). Не путать! +# Эта строка выводится только в таблице анализа линии (расширенный просмотр печати слоя) в значении "тип: заполнение щели" (Feature type: Gap fill). Аналогичная строка "Gap Fill" используется в меню поддержек и раскраски в значении "Заливка вкраплений/Устранение вкраплений". Не путать! msgid "Gap fill" msgstr "Заполнение щели" @@ -2821,7 +2821,7 @@ msgstr "Шаблон" # Тянется из 9 мест: группировка материалов: Auto/Custom, Форма стола: %s, тип линии: %s, калибровка температуры – Тип материала: %s (тут колонки узкие, но место вроде есть),). Причём местами должно согласоваться с разными родами (форма: пользов.). Лучше сократить до Пользов. msgid "Custom" -msgstr "Пользов." +msgstr "Пользовательский" msgid "Pause:" msgstr "Пауза:" @@ -14200,14 +14200,10 @@ msgid "" "3. To avoid printing at speeds which cause VFAs (fine artifacts) on the " "external walls" msgstr "" -"Если включено, то скорость печати внешних периметров не будет снижаться, " -"чтобы уложиться в минимальное время печати слоя. Это особенно полезно при " -"следующих сценариях:\n" -"1. Чтобы при печати глянцевыми материалами избежать изменения блеска\n" -"2. Чтобы избежать появления небольших дефектов, которые возникают при " -"изменении скорости и выглядят как горизонтальные полосы\n" -"3. Чтобы избежать печати на скоростях, при которых на внешних периметрах " -"возникают вертикальные артефакты (VFA)" +"Замедлять только внутреннюю часть модели при попытке уложиться в минимальное время, необходимое для охлаждения слоя. Это позволяет сохранить скорость печати внешнего периметра постоянной и может помочь:\n" +"1. улучшить однородность блеска при печати глянцевыми материалами;\n" +"2. избежать неоднородностей на стыке разных скоростей;\n" +"3. избавить поверхность от ряби (при правильной настройке скорости)." msgid "Layer time" msgstr "Время слоя" @@ -16676,7 +16672,7 @@ msgid "Printer variant" msgstr "Модификация принтера" msgid "Raft contact Z distance" -msgstr "Зазор между подложкой и моделью" +msgstr "Зазор под моделью" msgid "Z gap between object and raft. Ignored for soluble interface." msgstr "" @@ -17331,14 +17327,13 @@ msgstr "" "охлаждения этих слоёв." msgid "Minimum sparse infill threshold" -msgstr "Мин. порог разреженного заполнения" +msgstr "Заполнять области менее" msgid "" "Sparse infill area which is smaller than threshold value is replaced by " "internal solid infill." msgstr "" -"Область с разреженным заполнением, размер которого меньше этого порогового " -"значения, заменяется сплошным заполнением." +"Заполнять целиком области внутри слоя с площадью меньше указанного значения." msgid "Solid infill" msgstr "Сплошное заполнение" @@ -17655,16 +17650,16 @@ msgid "Tree (manual)" msgstr "[Р] древовидная" msgid "Support/object XY distance" -msgstr "Зазор между моделью и поддержкой по XY" +msgstr "Отступ от модели" msgid "XY separation between an object and its support." -msgstr "Зазор между моделью и поддержкой по осям XY." +msgstr "Расстояние между поддержкой и моделью по горизонтали." msgid "Support/object first layer gap" -msgstr "Зазор между моделью и поддержкой на первом слое" +msgstr "Отступ на первом слое" msgid "XY separation between an object and its support at the first layer." -msgstr "Зазор между моделью и поддержкой по осям XY на первом слое." +msgstr "Расстояние между поддержкой и моделью по горизонтали на первом слое." msgid "Pattern angle" msgstr "Угол шаблона поддержки" @@ -17687,8 +17682,8 @@ msgid "" "Only create support for critical regions including sharp tail, cantilever, " "etc." msgstr "" -"Создание поддержек только для критических областей, включая острые концы, " -"консоли (горизонтально выступающие элементы) и т.д." +"Создавать поддержки только для критических областей (острые концы, " +"выступы, явные нависания и т.п.)" msgid "Ignore small overhangs" msgstr "Игнорировать небольшие нависания" @@ -17871,7 +17866,7 @@ msgstr "" "Горизонтальное расширение (+) или сужение (-) поддержки в плоскости XY." msgid "Speed of support." -msgstr "Скорость печати поддержки." +msgstr "Ограничение линейной скорости при печати поддержки." msgid "" "Style and shape of the support. For normal support, projecting the supports " @@ -17923,7 +17918,7 @@ msgstr "" "времени печати. Опция неактивна, когда включена черновая башня." msgid "Threshold angle" -msgstr "Порог нависания" +msgstr "Максимальный угол" msgid "" "Support will be generated for overhangs whose slope angle is below the " @@ -17934,7 +17929,7 @@ msgstr "" # ??? Порог перекрытия периметров msgid "Threshold overlap" -msgstr "Порог перекрытия" +msgstr "Минимальный вынос" # ????? Если «Пороговый угол поддержки» равен нулю, поддержка будет создаваться только там, где верхний слой висит в воздухе слишком сильно, т.е. его перекрытие с нижним слоем меньше заданного тут порога. Чем меньше значение, тем более крутые нависания можно печатать без поддержек. msgid "" @@ -17942,7 +17937,7 @@ msgid "" "overlap is below the threshold. The smaller this value is, the steeper the " "overhang that can be printed without support." msgstr "" -"Задаёт порог перекрытия периметров для генерации поддержки.\n" +"Пороговое значение для печати периметров без поддержки.\n" "Если «Порог нависания» равен нулю, поддержка будет создаваться для " "нависающих участков, где верхний периметр опирается на нижний менее чем на " "заданный процент своей ширины. Чем меньше значение этого параметра, тем " @@ -18717,15 +18712,13 @@ msgid "" "very thin areas is used gap-fill. Arachne engine produces walls with " "variable extrusion width." msgstr "" -"Движок классического генератора периметров создаёт их с постоянной шириной " -"экструзии, а для очень тонких участков используется параметр «Заполнять " -"щели».\n" +"Классический генератор создаёт периметры с постоянной шириной линии, " +"а для очень тонких участков используется заполнение щелей.\n" "\n" -"Движок Arachne же создаёт периметры с переменной шириной экструзии, что " -"позволяет печатать без щелей, лучше пропечатывать мелкие элементы (при " -"условии, что у вас правильно откалиброван LA/PA). Этот параметр также влияет " -"на концентрическое заполнение." +"Генератор Arachne создаёт периметры с адаптивной шириной линии, что при правильно настроенном Pressure Advance " +"позволяет избегать образования щелей и лучше печатать мелкие элементы." +# Исторически переводим по названию движка, а так по контексту тут новичкам было бы полнятнее "Адаптивный" генератор. msgid "Arachne" msgstr "Arachne" 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 39/67] 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 40/67] 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 41/67] 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 42/67] 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 43/67] 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 44/67] 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 45/67] 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 46/67] 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 20f8d478aa8efc2a85d9e8403e283ef814646e31 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 15 Mar 2026 01:42:28 +0300 Subject: [PATCH 47/67] init --- src/slic3r/GUI/MainFrame.cpp | 56 ++++++++++++++++++++++++++++++++---- src/slic3r/GUI/MainFrame.hpp | 1 + src/slic3r/GUI/Notebook.cpp | 13 +++++++++ src/slic3r/GUI/Notebook.hpp | 3 ++ 4 files changed, 68 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 80b801a4c0..14d0835b36 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -475,7 +475,9 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ update_edge_panels(); #endif wxQueueEvent(wxGetApp().plater(), new SimpleEvent(EVT_NOTICE_CHILDE_SIZE_CHANGED)); - }); + + fit_tab_labels(); // ORCA on resize + }); //BBS Bind(EVT_SELECT_TAB, [this](wxCommandEvent&evt) { @@ -1345,8 +1347,10 @@ void MainFrame::init_tabpanel() { void MainFrame::show_device(bool bBBLPrinter) { auto idx = -1; if (bBBLPrinter) { - if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) + if (m_tabpanel->FindPage(m_monitor) != wxNOT_FOUND) { + fit_tab_labels(); // ORCA on printer change - same button layout return; + } // Remove printer view if ((idx = m_tabpanel->FindPage(m_printer_view)) != wxNOT_FOUND) { m_printer_view->Show(false); @@ -1386,9 +1390,10 @@ void MainFrame::show_device(bool bBBLPrinter) { #endif // _MSW_DARK_MODE } else { - if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) + if (m_tabpanel->FindPage(m_printer_view) != wxNOT_FOUND) { + fit_tab_labels(); // ORCA on printer change - same button layout return; - + } if ((idx = m_tabpanel->FindPage(m_calibration)) != wxNOT_FOUND) { m_calibration->Show(false); m_tabpanel->RemovePage(idx); @@ -1414,6 +1419,33 @@ void MainFrame::show_device(bool bBBLPrinter) { m_tabpanel->InsertPage(tpMonitor, m_printer_view, _L("Device"), std::string("tab_monitor_active"), std::string("tab_monitor_active")); } + fit_tab_labels(); // ORCA on printer change +} + +void MainFrame::fit_tab_labels() +{ + if (!m_tabpanel || !m_slice_option_btn) // ignore layout change while slice/print buttons not visible + return; + + auto* ctrl = m_tabpanel->GetBtnsListCtrl(); + auto* sizer = ctrl->GetBtnsSizer(); + int count = sizer->GetItemCount(); + + // Restore all + for (size_t i = 1; i < count; ++i) + ctrl->SetCompact(i, false); + m_tabpanel->Refresh(); + Layout(); + + // Compact (last to first) + for (size_t i = count - 1; i >= 1; --i) { + int right = ScreenToClient(m_slice_option_btn->ClientToScreen({})).x; + int left = sizer->GetSize().GetWidth(); + if (right - left - FromDIP(15) > 0) return; + ctrl->SetCompact(i, true); + m_tabpanel->Refresh(); + Layout(); + } } bool MainFrame::preview_only_hint() @@ -1790,7 +1822,7 @@ wxBoxSizer* MainFrame::create_side_tools() update_side_button_style(); m_slice_option_btn->Enable(); m_print_option_btn->Enable(); - sizer->Add(FromDIP(15), 0, 0, 0, 0); + //sizer->Add(FromDIP(15), 0, 0, 0, 0); sizer->Add(slice_panel); sizer->Add(FromDIP(15), 0, 0, 0, 0); sizer->Add(print_panel); @@ -1915,6 +1947,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_enable = get_enable_slice_status(); m_slice_btn->Enable(m_slice_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change if(m_slice_option_pop_up) m_slice_option_pop_up->Dismiss(); }); @@ -1925,6 +1958,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_enable = get_enable_slice_status(); m_slice_btn->Enable(m_slice_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change if(m_slice_option_pop_up) m_slice_option_pop_up->Dismiss(); }); @@ -1949,6 +1983,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -1961,6 +1996,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -1987,6 +2023,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -1998,6 +2035,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2007,6 +2045,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2018,6 +2057,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2027,6 +2067,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2036,6 +2077,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); @@ -2074,6 +2116,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); p->append_button(print_multi_machine_btn); @@ -2088,6 +2131,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_print_enable = get_enable_print_status(); m_print_btn->Enable(m_print_enable); this->Layout(); + fit_tab_labels(); // ORCA on label change p->Dismiss(); }); p->append_button(export_gcode_btn); @@ -2400,6 +2444,8 @@ void MainFrame::on_dpi_changed(const wxRect& suggested_rect) this->SetSize(sz); this->Maximize(is_maximized); + + fit_tab_labels(); // ORCA } void MainFrame::on_sys_color_changed() diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index c7f27d52af..8cb5961d5a 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -359,6 +359,7 @@ public: //SoftFever void show_device(bool bBBLPrinter); + void fit_tab_labels(); // ORCA PA_Calibration_Dlg* m_pa_calib_dlg{ nullptr }; Temp_Calibration_Dlg* m_temp_calib_dlg{ nullptr }; diff --git a/src/slic3r/GUI/Notebook.cpp b/src/slic3r/GUI/Notebook.cpp index 84bbf9950a..89f00f9447 100644 --- a/src/slic3r/GUI/Notebook.cpp +++ b/src/slic3r/GUI/Notebook.cpp @@ -202,6 +202,7 @@ bool ButtonsListCtrl::InsertPage(size_t n, const wxString &text, bool bSelect /* }); Slic3r::GUI::wxGetApp().UpdateDarkUI(btn); m_pageButtons.insert(m_pageButtons.begin() + n, btn); + m_pageLabels.insert(m_pageLabels.begin() + n, text); // ORCA m_buttons_sizer->Insert(n, new wxSizerItem(btn)); m_buttons_sizer->SetCols(m_buttons_sizer->GetCols() + 1); m_sizer->Layout(); @@ -212,6 +213,7 @@ void ButtonsListCtrl::RemovePage(size_t n) { Button* btn = m_pageButtons[n]; m_pageButtons.erase(m_pageButtons.begin() + n); + m_pageLabels.erase(m_pageLabels.begin() + n); // ORCA m_buttons_sizer->Remove(n); #if __WXOSX__ RemoveChild(btn); @@ -238,6 +240,17 @@ void ButtonsListCtrl::SetPageText(size_t n, const wxString& strText) { Button* btn = m_pageButtons[n]; btn->SetLabel(strText); + if(!strText.empty()) // ORCA + m_pageLabels[n] = strText; +} + +// ORCA +void ButtonsListCtrl::SetCompact(size_t n, bool compact) +{ + int em = em_unit(this); + Button* btn = m_pageButtons[n]; + btn->SetMinSize({(compact ? 40 : 136) * em / 10, 36 * em / 10}); + btn->SetLabel(compact ? "" : (" " + m_pageLabels[n])); } wxString ButtonsListCtrl::GetPageText(size_t n) const diff --git a/src/slic3r/GUI/Notebook.hpp b/src/slic3r/GUI/Notebook.hpp index 7e6e94da3a..10abfedb95 100644 --- a/src/slic3r/GUI/Notebook.hpp +++ b/src/slic3r/GUI/Notebook.hpp @@ -28,7 +28,9 @@ public: void RemovePage(size_t n); bool SetPageImage(size_t n, const std::string& bmp_name) const; void SetPageText(size_t n, const wxString& strText); + void SetCompact(size_t n, bool compact); // ORCA wxString GetPageText(size_t n) const; + wxFlexGridSizer* GetBtnsSizer(){return m_buttons_sizer;}; // ORCA private: wxFlexGridSizer* m_buttons_sizer; @@ -39,6 +41,7 @@ private: int m_btn_margin; int m_line_margin; //ModeSizer* m_mode_sizer {nullptr}; + std::vector m_pageLabels; // ORCA }; class Notebook: public wxBookCtrlBase From 1f18be9ff265fbfd1748cfbfbc4389eb27a55744 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 15 Mar 2026 04:16:45 +0300 Subject: [PATCH 48/67] fix compacting when app open with home tab --- src/slic3r/GUI/MainFrame.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 14d0835b36..8395d66b13 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1244,6 +1244,7 @@ void MainFrame::init_tabpanel() { wxPostEvent(m_plater, SimpleEvent(EVT_GLVIEWTOOLBAR_PREVIEW)); m_param_panel->OnActivate(); } + fit_tab_labels(); // ORCA on switching prepare / preview } //else if (panel == m_param_panel) // m_param_panel->OnActivate(); 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 49/67] 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 50/67] 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 51/67] 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 52/67] 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 53/67] 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 54/67] 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 55/67] 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 56/67] 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 57/67] 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; From 3eac0a86e4dd6abcebfbc800ba320c492462b196 Mon Sep 17 00:00:00 2001 From: yw4z Date: Mon, 16 Mar 2026 15:10:36 +0300 Subject: [PATCH 58/67] update --- src/slic3r/GUI/BBLTopbar.cpp | 50 +++++++----------------------------- src/slic3r/GUI/BBLTopbar.hpp | 4 +-- 2 files changed, 11 insertions(+), 43 deletions(-) diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index d097fa2c2d..65fcb2958c 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -52,12 +52,12 @@ CenteredTitle::CenteredTitle(wxWindow* parent) int textHeight = fm.ascent + fm.descent; wxRect rect = GetClientRect(); - wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, rect.GetWidth() - FromDIP(8)); + wxString ellipsized = wxControl::Ellipsize(m_title, dc, wxELLIPSIZE_END, wxMax(0, rect.GetWidth() - FromDIP(8))); int y = rect.y + (rect.height - textHeight) / 2; int x = rect.x + (ellipsized != m_title) // is ellipsized - ? FromDIP(4) // fixed left when clipped - : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when full + ? FromDIP(4) // align to left when clipped + : (rect.width - dc.GetTextExtent(m_title).GetWidth()) / 2; // centered when has available space dc.DrawText(ellipsized, x, y); }); @@ -80,8 +80,7 @@ CenteredTitle::CenteredTitle(wxWindow* parent) void CenteredTitle::SetTitle(const wxString& title) { m_title = title; - RefreshRect(GetClientRect()); - Update(); + Refresh(); } // required for proper height @@ -94,41 +93,10 @@ wxSize CenteredTitle::DoGetBestSize() const class BBLTopbarArt : public wxAuiDefaultToolBarArt { public: - //virtual void DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; virtual void DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) wxOVERRIDE; virtual void DrawButton(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) wxOVERRIDE; }; -/* -void BBLTopbarArt::DrawLabel(wxDC& dc, wxWindow* wnd, const wxAuiToolBarItem& item, const wxRect& rect) -{ - dc.SetFont(m_font); -#ifdef __WINDOWS__ - dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT)); -#else - dc.SetTextForeground(*wxWHITE); -#endif - - int textWidth = 0, textHeight = 0; - dc.GetTextExtent(item.GetLabel(), &textWidth, &textHeight); - - wxRect clipRect = rect; - clipRect.width -= 1; - dc.SetClippingRegion(clipRect); - - int textX, textY; - if (textWidth < rect.GetWidth()) { - textX = rect.x + 1 + (rect.width - textWidth) / 2; - } - else { - textX = rect.x + 1; - } - textY = rect.y + (rect.height - textHeight) / 2; - dc.DrawText(item.GetLabel(), textX, textY); - dc.DestroyClippingRegion(); -} -*/ - void BBLTopbarArt::DrawBackground(wxDC& dc, wxWindow* wnd, const wxRect& rect) { dc.SetBrush(wxBrush(wxColour(38, 46, 48))); @@ -399,11 +367,11 @@ void BBLTopbar::OnOpenProject(wxAuiToolBarEvent& event) plater->load_project(); } -void BBLTopbar::show_publish_button(bool show) -{ - this->EnableTool(m_publish_item->GetId(), show); - Refresh(); -} +//void BBLTopbar::show_publish_button(bool show) +//{ +// this->EnableTool(m_publish_item->GetId(), show); +// Refresh(); +//} void BBLTopbar::OnSaveProject(wxAuiToolBarEvent& event) { diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index bb3218f5bd..8fc77e774e 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -44,7 +44,7 @@ public: void OnMouseCaptureLost(wxMouseCaptureLostEvent& event); void OnMenuClose(wxMenuEvent& event); void OnOpenProject(wxAuiToolBarEvent& event); - void show_publish_button(bool show); + //void show_publish_button(bool show); void OnSaveProject(wxAuiToolBarEvent& event); void OnUndo(wxAuiToolBarEvent& event); void OnRedo(wxAuiToolBarEvent& event); @@ -90,7 +90,7 @@ private: wxAuiToolBarItem* m_account_item; wxAuiToolBarItem* m_model_store_item; - wxAuiToolBarItem *m_publish_item; + //wxAuiToolBarItem *m_publish_item; wxAuiToolBarItem* m_undo_item; wxAuiToolBarItem* m_redo_item; wxAuiToolBarItem* m_calib_item; From 4d7dee77df4d7b10754d2299f156f729339118f6 Mon Sep 17 00:00:00 2001 From: Felix14_v2 Date: Tue, 17 Mar 2026 01:36:15 +0300 Subject: [PATCH 59/67] Update OrcaSlicer_ru.po --- localization/i18n/ru/OrcaSlicer_ru.po | 61 +++++++++++++-------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 45f96dd6d0..059cf0bb13 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -201,7 +201,7 @@ msgstr "Заливка вкраплений" #, boost-format msgid "Allows painting only on facets selected by: \"%1%\"" -msgstr "Позволяет рисовать на выбранных гранях, используя: \"%1%\"" +msgstr "Ограничить область работы инструмента настройкой «%1%»" msgid "Highlight faces according to overhang angle." msgstr "Выделение граней по углу нависания." @@ -610,7 +610,7 @@ msgid "Confirm connectors" msgstr "Готово" msgid "Flip cut plane" -msgstr "Перевернуть секущую плоскость" +msgstr "Сменить направление" msgid "Groove change" msgstr "Изменить паз" @@ -1169,8 +1169,9 @@ msgstr "" msgid "Select from True Type Collection." msgstr "Выберите шрифт True Type." +# Это, по сути, просто встроенный инструмент вращения, тут автоматически задаётся поворот в градусах по трём осям msgid "Set text to face camera" -msgstr "Разместить параллельно экрану" +msgstr "Повернуть к экрану" msgid "Orient the text towards the camera." msgstr "Выровнять текст по направлению к камере" @@ -2857,7 +2858,7 @@ msgid "Insert custom G-code at the beginning of this layer." msgstr "Вставить пользовательский G-код в начале этого слоя." msgid "Add Custom Template" -msgstr "Добавить шаблон пользовательского G-кода" +msgstr "Добавить шаблон" msgid "Insert template custom G-code at the beginning of this layer." msgstr "Вставить шаблон пользовательского G-кода в начале этого слоя." @@ -6083,14 +6084,14 @@ msgstr "Коэффициент PA" # Хотя бы в скобках, но отсылаем к калибровке потока, а не расхода (баг #6970) msgid "Pass 1" -msgstr "Первый проход (примерный подбор потока)" +msgstr "Первый проход (примерный подбор)" # Описание для диктора? Подсказка для других систем? Не нашёл, где выводится в Windows. msgid "Flow rate test - Pass 1" msgstr "Тест потока - 1-ый проход" msgid "Pass 2" -msgstr "Второй проход (точный подбор потока)" +msgstr "Второй проход (точный подбор)" # Описание для диктора? Подсказка для других систем? Не нашёл, где выводится в Windows. msgid "Flow rate test - Pass 2" @@ -10840,17 +10841,17 @@ msgstr "" msgctxt "Sync_AMS" msgid "Original" -msgstr "Оригинальные" +msgstr "Исходные" msgid "After mapping" -msgstr "" +msgstr "После назначения" msgid "After overwriting" -msgstr "" +msgstr "После переназначения" msgctxt "Sync_AMS" msgid "Plate" -msgstr "" +msgstr "Стол" msgid "" "The connected printer does not match the currently selected printer. Please " @@ -10858,10 +10859,10 @@ msgid "" msgstr "" msgid "Mapping" -msgstr "" +msgstr "Назначение" msgid "Overwriting" -msgstr "" +msgstr "Переназначение" msgid "Reset all filament mapping" msgstr "" @@ -10908,7 +10909,7 @@ msgid "Advanced settings" msgstr "Расширенные настройки" msgid "Add unused AMS filaments to filaments list." -msgstr "" +msgstr "Добавить незадействованные материалы из AMS в список" msgid "Automatically merge the same colors in the model after mapping." msgstr "" @@ -11937,15 +11938,14 @@ msgid "" "The Wipe Tower is currently only supported with the relative extruder " "addressing (use_relative_e_distances=1)." msgstr "" -"В настоящее время для режима черновой башни поддерживаются только " -"относительные координаты экструдера (use_relative_e_distances=1)." +"Черновая башня пока работает только с относительными координатами экструдера (use_relative_e_distances=1)." msgid "" "Ooze prevention is only supported with the wipe tower when " "'single_extruder_multi_material' is off." msgstr "" "Предотвращение течи материала с помощью черновой башни возможно только при " -"отключении печати через общий экструдер (Настройки принтера → Материалы → " +"отключении печати через общий экструдер (Настройки принтера → Многоцвет → " "Общий экструдер)" msgid "" @@ -13413,14 +13413,13 @@ msgstr "" msgid "Thick external bridges" msgstr "Толстые внешние мосты" +# Более точно было бы "Переключение модели расчёта потока линии моста с обычной приплюснутой на линию с круглым сечением", но лучше упростить технические кодерские аспекты. msgid "" "If enabled, bridges are more reliable, can bridge longer distances, but may " "look worse. If disabled, bridges look better but are reliable just for " "shorter bridged distances." msgstr "" -"Если включено, мосты печатаются более надёжные и на большие расстояния, но " -"могут выглядеть хуже. Если отключено, мосты выглядят лучше, но они надёжны " -"только на коротких расстояниях." +"Рассматривать мосты как линии с круглым сечением, равным диаметру сопла. Поскольку мосты не имеют опоры, такой подход позволяет более точно расчитывать необходимый поток и надёжнее печатать их на бóльшие расстояния, однако без донастройки их внешний вид может ухудшиться. Если отключено, используется классический вариант мостов с заниженным потоком (приплюснутое сечение линии), что улучшает их внешний вид и точность размеров, но делает их эффективными лишь на коротких расстояниях." msgid "Thick internal bridges" msgstr "Толстые внутренние мосты" @@ -13430,9 +13429,7 @@ msgid "" "have this feature turned on. However, consider turning it off if you are " "using large nozzles." msgstr "" -"Если включено, будут использоваться толстые внутренние мосты. Обычно " -"рекомендуется включить эту функцию. Однако при использовании сопел больших " -"диаметров рекомендуется отключить эту опцию." +"Рассматривать мосты как линии с круглым сечением, равным диаметру сопла." msgid "Extra bridge layers (beta)" msgstr "Двухслойные мосты (beta)" @@ -14543,6 +14540,7 @@ msgstr "" msgid "Tower ironing area" msgstr "Разглаживание черновой башни" +# У H2D не требует, на Вики при этом написано, что требует... В баганном порте "улучшений" башни вообще не работает ни при каких обстоятельствах. msgid "" "Ironing area for prime tower interface layer (where different materials " "meet)." @@ -16471,7 +16469,7 @@ msgid "Nozzle volume" msgstr "Объём сопла" msgid "Volume of nozzle between the cutter and the end of nozzle." -msgstr "Объём сопла между ножом и кончиком сопла." +msgstr "Объём остатка материала между ножом и кончиком сопла." msgid "Cooling tube position" msgstr "Позиция охлаждающей трубки" @@ -16955,8 +16953,7 @@ msgid "" "This experimental setting uses G10 and G11 commands to have the firmware " "handle the retraction. This is only supported in recent Marlin." msgstr "" -"Эта экспериментальная опция использует команды G10 и G11, чтобы сама " -"прошивка обрабатывала откаты. Не поддерживается в старых версиях Marlin." +"Использовать команды G10 и G11 для динамического управления расстоянием отката/подачи на уровне прошивки. Не поддерживается в старых версиях Marlin.\n\nВнимание: несовместимо с «Очисткой сопла при откате»." msgid "Show auto-calibration marks" msgstr "Отображать на столе линии автокалибровки" @@ -16970,11 +16967,12 @@ msgid "" msgstr "" "Отключить вставку в G-код команд для вывода прогресса печати и оставшегося времени." +# "Позиция швов"? Технически швов бывает несколько – внешний, внутренний, комбинации обычного/косого и несколько отдельных швов на моделях со сложной геометрией. msgid "Seam position" msgstr "Позиция шва" msgid "The start position to print each part of outer wall." -msgstr "Начальная позиция для печати каждой части внешнего периметра." +msgstr "Расположение точек начала печати внешних периметров.\n\n• Ближайшая – самый быстрый вариант с экономией перемещений.\n• В углах – маскировка шва в выступах и впадинах.\n• В углах сзади – маскировка с приоритетом в задней части.\n• Сзади – размещение шва на максимальной координате по Y.\n• Случайная – распределение шва по всей поверхности." msgid "Nearest" msgstr "Ближайшая" @@ -17920,6 +17918,7 @@ msgstr "" msgid "Threshold angle" msgstr "Максимальный угол" +# На случай, если #12367 не объединят: "Создавать поддержки для поверхностей с указанным или более острым углом нависания над столом. С понижением угла повышается допустимый наклон поверхности для печати без поддержки.\n\nПримечание: используйте 0° для переключения обычных поддержек в режим обнаружения нависаний по проценту выноса линии. Древовидные поддержки при этом будут использовать угол по умолчанию (30°)" ВНИМАНИЕ: последнее предложение – особенность PR msgid "" "Support will be generated for overhangs whose slope angle is below the " "threshold." @@ -18286,13 +18285,13 @@ msgid "" msgstr "" "Выполнять откат совместно с небольшим движением вдоль напечатанной линии, " "чтобы очистить сопло от подтёков материала. Это может уменьшить «паутину» и " -"дефекты переэкструзии при печати новой линии после холостого перемещения." +"дефекты переэкструзии при печати новой линии после холостого перемещения.\n\nВнимание: несовместимо с «Откатом на уровне прошивки»." # Как выяснилось в чате K3D, "Расстояние очистки" вводит людей в заблуждение, т.к. из-за путаницы в старой терминологии люди думали, что очистка здесь – это откат (его часть). msgid "Wipe Distance" msgstr "Длина движения очистки" -# Очень кривая формулировка с "retraction move" – в другой настройке в оригинале так назван непосредственно откат, что вводит в заблуждение. Тут имеется ввиду именнт движение при откате, при котором остатки пластика вытираются об линию. Зачем это дублируется здесь – без понятия, эта же информация в другой формулировке сообщается пользователю в предыдущей настройке. Удалено последнее предложение – оно не имеет ничего общего с реальностью и вводит в заблуждение (см. описание первичного отката) +# Очень кривая формулировка с "retraction move" – в другой настройке в оригинале так назван непосредственно откат, что вводит в заблуждение. Тут имеется ввиду именно движение при откате, при котором остатки пластика вытираются об линию. Зачем это дублируется здесь – без понятия, эта же информация в другой формулировке сообщается пользователю в предыдущей настройке. msgid "" "Describe how long the nozzle will move along the last path when retracting.\n" "\n" @@ -18305,9 +18304,9 @@ msgid "" msgstr "" "Расстояние перемещения при выполнении движения очистки.\n" "\n" -"В зависимости от длительности очистки, скорости и длины отката настройка " -"перемещения может потребоваться, чтобы лучше очищать подтёки материала из " -"сопла." +"В зависимости от длительности очистки, скорости и длины отката эта настройка " +"может понадобиться, чтобы лучше очищать подтёки материала из " +"сопла.\n\nВнимание: процент первичного отката будет увеличен, если длины очистки окажется недостаточно при текущей скорости отката (или из-за иных ограничений)." msgid "" "The wiping tower can be used to clean up the residue on the nozzle and " From c8070b67d5fd2cb5399abca8ccd30196bb4a2d2f Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 17 Mar 2026 19:14:50 +0800 Subject: [PATCH 60/67] Revert "Fix wipe tower placed outside bed boundary on first slice (#12777)" This reverts commit 494601eea5954e100e34ddc81a363bf31e8cdc8b, reversing changes made to d28e964e040ea3069fd5b66dd1aac8ea4838b5ac. --- src/slic3r/GUI/GLCanvas3D.cpp | 16 +--------------- src/slic3r/GUI/PartPlate.cpp | 7 ------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e83e461ea9..2eff0298c9 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2835,12 +2835,6 @@ 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; @@ -2890,8 +2884,6 @@ 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); } @@ -2914,13 +2906,7 @@ 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)); - // 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), + int volume_idx_wipe_tower_new = m_volumes.load_real_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), 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 5be497059c..332dc4c1df 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -4074,13 +4074,6 @@ 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 6399d88015711a2e9dc3224ea43e4d4d9daf6bb9 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 17 Mar 2026 19:16:09 +0800 Subject: [PATCH 61/67] Revert "Fix wipe tower loaded outside of plate boundaries (#12191)" This reverts commit e14e186bb7c134383928f8f5ce8793e43703077d. --- src/slic3r/GUI/GLCanvas3D.cpp | 25 ------------------------- src/slic3r/GUI/GLCanvas3D.hpp | 11 +++++------ 2 files changed, 5 insertions(+), 31 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2eff0298c9..46401acdb5 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -38,7 +38,6 @@ #include "slic3r/Utils/UndoRedo.hpp" #include "slic3r/Utils/MacDarkMode.hpp" -#include #include #if ENABLE_RETINA_GL @@ -2837,7 +2836,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_id); float w = dynamic_cast(m_config->option("prime_tower_width"))->value; float a = dynamic_cast(proj_cfg.option("wipe_tower_rotation_angle"))->value; - // BBS float v = dynamic_cast(m_config->option("prime_volume"))->value; Vec3d plate_origin = ppl.get_plate(plate_id)->get_origin(); @@ -2864,29 +2862,9 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re } coordf_t plate_bbox_x_min_local_coord = plate_bbox_2d.min(0) - plate_origin(0); - coordf_t plate_bbox_y_min_local_coord = plate_bbox_2d.min(1) - plate_origin(1); coordf_t plate_bbox_x_max_local_coord = plate_bbox_2d.max(0) - plate_origin(0); coordf_t plate_bbox_y_max_local_coord = plate_bbox_2d.max(1) - plate_origin(1); - const float tower_w = (float) wipe_tower_size(0); - const float tower_h = (float) wipe_tower_size(1); - const float min_x = (float) plate_bbox_x_min_local_coord + margin; - const float max_x = (float) plate_bbox_x_max_local_coord - margin; - const float min_y = (float) plate_bbox_y_min_local_coord + margin; - const float max_y = (float) plate_bbox_y_max_local_coord - margin; - - // snap wipe tower back to nearest edge if it was initially loaded outside the plate boundary - float new_x = (x < min_x) ? min_x : ((x + tower_w > max_x) ? (max_x - tower_w) : x); - float new_y = (y < min_y) ? min_y : ((y + tower_h > max_y) ? (max_y - tower_h) : y); - - if (new_x != x || new_y != y) { - // do notification - _set_warning_notification(EWarning::PreviewPrimeTowerOutside, true); - x = new_x; - y = new_y; - } - - if (!current_print->is_step_done(psWipeTower) || !current_print->wipe_tower_data().wipe_tower_mesh_data) { // update for wipe tower position { @@ -9665,9 +9643,6 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) case EWarning::PrimeTowerOutside: text = _u8L("The prime tower extends beyond the plate boundary."); break; - case EWarning::PreviewPrimeTowerOutside: - text = _u8L("Prime tower position exceeded build plate boundaries and was repositioned to the nearest valid edge."); - break; case EWarning::NozzleFilamentIncompatible: { text = _u8L(get_nozzle_filament_incompatible_text()); break; diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 6434ab4389..17a388c731 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -381,14 +381,13 @@ class GLCanvas3D ToolHeightOutside, TPUPrintableError, FilamentPrintableError, - LeftExtruderPrintableError, // before slice - RightExtruderPrintableError, // before slice - MultiExtruderPrintableError, // after slice - MultiExtruderHeightOutside, // after slice + LeftExtruderPrintableError, // before slice + RightExtruderPrintableError, // before slice + MultiExtruderPrintableError, // after slice + MultiExtruderHeightOutside, // after slice FilamentUnPrintableOnFirstLayer, MixUsePLAAndPETG, - PrimeTowerOutside, // after slice - PreviewPrimeTowerOutside, // before slice + PrimeTowerOutside, NozzleFilamentIncompatible, MixtureFilamentIncompatible, FlushingVolumeZero From 62ffbfd33d2072a32b94804eef388158f676d272 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 14:42:40 +0800 Subject: [PATCH 62/67] revist fixes for wipe tower pos issues --- src/slic3r/GUI/PartPlate.cpp | 79 +++++++++++++++++++++++++++++++----- src/slic3r/GUI/PartPlate.hpp | 3 +- src/slic3r/GUI/Plater.cpp | 7 +++- 3 files changed, 75 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 332dc4c1df..98c285f46a 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -3755,11 +3755,6 @@ void PartPlateList::init() m_plate_cols = 1; m_current_plate = 0; - if (m_plater) { - // In GUI mode - set_default_wipe_tower_pos_for_plate(0); - } - select_plate(0); unprintable_plate.set_index(1); @@ -4058,7 +4053,7 @@ void PartPlateList::release_icon_textures() } } -void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx) +void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool init_pos) { DynamicConfig & proj_cfg = wxGetApp().preset_bundle->project_config; ConfigOptionFloats *wipe_tower_x = proj_cfg.opt("wipe_tower_x"); @@ -4068,12 +4063,69 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx) auto printer_structure_opt = wxGetApp().preset_bundle->printers.get_edited_preset().config.option>("printer_structure"); // set the default position, the same with print config(left top) - ConfigOptionFloat wt_x_opt(WIPE_TOWER_DEFAULT_X_POS); - ConfigOptionFloat wt_y_opt(WIPE_TOWER_DEFAULT_Y_POS); + float x = WIPE_TOWER_DEFAULT_X_POS; + float y = WIPE_TOWER_DEFAULT_Y_POS; if (printer_structure_opt && printer_structure_opt->value == PrinterStructure::psI3) { - wt_x_opt = ConfigOptionFloat(I3_WIPE_TOWER_DEFAULT_X_POS); - wt_y_opt = ConfigOptionFloat(I3_WIPE_TOWER_DEFAULT_Y_POS); + x = I3_WIPE_TOWER_DEFAULT_X_POS; + y = I3_WIPE_TOWER_DEFAULT_Y_POS; } + + PartPlate *part_plate = get_plate(plate_idx); + Vec3d plate_origin = part_plate->get_origin(); + BoundingBoxf3 plate_bbox = part_plate->get_bounding_box(); + BoundingBoxf plate_bbox_2d(Vec2d(plate_bbox.min(0), plate_bbox.min(1)), Vec2d(plate_bbox.max(0), plate_bbox.max(1))); + const std::vector &extruder_areas = part_plate->get_extruder_areas(); + for (const Pointfs &points : extruder_areas) { + BoundingBoxf bboxf(points); + plate_bbox_2d.min = plate_bbox_2d.min(0) >= bboxf.min(0) ? plate_bbox_2d.min : bboxf.min; + plate_bbox_2d.max = plate_bbox_2d.max(0) <= bboxf.max(0) ? plate_bbox_2d.max : bboxf.max; + } + + coordf_t plate_bbox_x_min_local_coord = plate_bbox_2d.min(0) - plate_origin(0); + coordf_t plate_bbox_x_max_local_coord = plate_bbox_2d.max(0) - plate_origin(0); + coordf_t plate_bbox_y_max_local_coord = plate_bbox_2d.max(1) - plate_origin(1); + + std::vector filament_maps = part_plate->get_real_filament_maps(proj_cfg); + DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(false, filament_maps); + const DynamicPrintConfig &print_cfg = wxGetApp().preset_bundle->prints.get_edited_preset().config; + float w = dynamic_cast(print_cfg.option("prime_tower_width"))->value; + float v = dynamic_cast(full_config.option("prime_volume"))->value; + bool enable_wrapping = false; + const ConfigOptionBool *wrapping_opt = dynamic_cast(full_config.option("enable_wrapping_detection")); + if (wrapping_opt) enable_wrapping = wrapping_opt->value; + int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); + Vec3d wipe_tower_size = part_plate->estimate_wipe_tower_size(print_cfg, w, v, nozzle_nums, init_pos ? 2 : 0, false, enable_wrapping); + + if (!init_pos && (is_approx(wipe_tower_size(0), 0.0) || is_approx(wipe_tower_size(1), 0.0))) { + wipe_tower_size = part_plate->estimate_wipe_tower_size(print_cfg, w, v, nozzle_nums, 2, false, enable_wrapping); + } + + // Compute brim-aware margin: brim extends outward from tower position + float brim_width = 0.f; + const ConfigOptionFloat *brim_opt = print_cfg.option("prime_tower_brim_width"); + if (brim_opt) { + brim_width = brim_opt->value; + if (brim_width < 0) brim_width = WipeTower::get_auto_brim_by_height((float) wipe_tower_size.z()); + } + const float margin = WIPE_TOWER_MARGIN + brim_width; + + // clamp wipe tower position within plate boundaries + { + if (x + margin + wipe_tower_size(0) > plate_bbox_x_max_local_coord) { + x = plate_bbox_x_max_local_coord - wipe_tower_size(0) - margin; + } else if (x < margin + plate_bbox_x_min_local_coord) { + x = margin + plate_bbox_x_min_local_coord; + } + + if (y + margin + wipe_tower_size(1) > plate_bbox_y_max_local_coord) { + y = plate_bbox_y_max_local_coord - wipe_tower_size(1) - margin; + } else if (y < margin) { + y = margin; + } + } + + ConfigOptionFloat wt_x_opt(x); + ConfigOptionFloat wt_y_opt(y); 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); } @@ -4184,6 +4236,11 @@ void PartPlateList::reinit() //re-calc the bounding boxes calc_bounding_boxes(); + if (m_plater) { + // In GUI mode + set_default_wipe_tower_pos_for_plate(0, true); + } + return; } @@ -4255,7 +4312,7 @@ int PartPlateList::create_plate(bool adjust_position) // update wipe tower config if (m_plater) { // In GUI mode - set_default_wipe_tower_pos_for_plate(new_index); + set_default_wipe_tower_pos_for_plate(new_index, true); } unprintable_plate.set_index(new_index+1); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 70e3ec8e9a..9585c7aa95 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -628,13 +628,12 @@ class PartPlateList : public ObjectBase void generate_icon_textures(); void release_icon_textures(); - void set_default_wipe_tower_pos_for_plate(int plate_idx); - friend class cereal::access; friend class UndoRedo::StackImpl; friend class PartPlate; public: + void set_default_wipe_tower_pos_for_plate(int plate_idx, bool init_pos = false); class BedTextureInfo { public: class TexturePart { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 5e68e9de30..4534b0886a 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -10505,11 +10505,16 @@ void Plater::priv::init_notification_manager() void Plater::priv::update_objects_position_when_select_preset(const std::function &select_prest) { - // TODO: Orca hack select_prest(); wxGetApp().obj_list()->update_object_list_by_printer_technology(); + // Re-clamp wipe tower positions to new bed boundaries after preset change + PartPlateList &cur_plate_list = this->partplate_list; + for (size_t plate_id = 0; plate_id < cur_plate_list.get_plate_list().size(); ++plate_id) { + cur_plate_list.set_default_wipe_tower_pos_for_plate(plate_id); + } + update(); } From bcd89aba5e4695bbb5f840fc1a57d58911c57c93 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 15:39:07 +0800 Subject: [PATCH 63/67] Skip flushing volume validation for multi-tool printers Flushing volumes only apply to SEMM and BBL printers. Multi-tool printers don't perform filament purging between tool changes, so the zero-volume warning was being incorrectly triggered. --- src/slic3r/GUI/GLCanvas3D.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 46401acdb5..b9becfa63c 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -9797,6 +9797,10 @@ void GLCanvas3D::_set_warning_notification(EWarning warning, bool state) bool GLCanvas3D::is_flushing_matrix_error() { + // Flushing volumes only apply to single-extruder multi-material (SEMM) and BBL printers + if (!Sidebar::should_show_SEMM_buttons()) + return false; + const auto &project_config = wxGetApp().preset_bundle->project_config; const std::vector &config_matrix = (project_config.option("flush_volumes_matrix"))->values; const std::vector &config_multiplier = (project_config.option("flush_multiplier"))->values; From 13b08385c8df6ecd531675536d4cce5d6c600431 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 16:59:20 +0800 Subject: [PATCH 64/67] check precise_z_height and enable_prime_tower conflicts in print validate --- src/libslic3r/Print.cpp | 10 ++++++++++ src/slic3r/GUI/Tab.cpp | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 914cfe4bec..2576d7956c 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1235,6 +1235,16 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } if (m_config.enable_prime_tower) { + for (const PrintObject* object : m_objects) { + if (object->config().precise_z_height.value && warning != nullptr) { + StringObjectException warningtemp; + warningtemp.string = L("Enabling both precise Z height and the prime tower may cause the slicing errors."); + warningtemp.opt_key = "precise_z_height"; + warningtemp.is_warning = true; + *warning = warningtemp; + break; + } + } } else { if (m_config.enable_wrapping_detection && warning!=nullptr) { StringObjectException warningtemp; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 954923cfdd..05844c63bb 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1589,11 +1589,11 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } bool is_precise_z_height = m_config->option("precise_z_height")->value; if (boost::any_cast(value) && is_precise_z_height) { - MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the size of prime tower to increase. Do you still want to enable?"), + MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable?"), _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; - new_conf.set_key_value("enable_prime_tower", new ConfigOptionBool(false)); + new_conf.set_key_value("precise_z_height", new ConfigOptionBool(false)); m_config_manipulation.apply(m_config, &new_conf); } wxGetApp().plater()->update(); @@ -1631,7 +1631,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (opt_key == "precise_z_height") { bool wipe_tower_enabled = m_config->option("enable_prime_tower")->value; if (boost::any_cast(value) && wipe_tower_enabled) { - MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the size of prime tower to increase. Do you still want to enable?"), + MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the slicing errors when there are multiple parts."), _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; From 70b9bedf94b3ce6d5fe96c285fa71ba2a4c7e6ad Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 17:50:39 +0800 Subject: [PATCH 65/67] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/libslic3r/Print.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 2576d7956c..6463338f7d 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1238,7 +1238,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* for (const PrintObject* object : m_objects) { if (object->config().precise_z_height.value && warning != nullptr) { StringObjectException warningtemp; - warningtemp.string = L("Enabling both precise Z height and the prime tower may cause the slicing errors."); + warningtemp.string = L("Enabling both precise Z height and the prime tower may cause slicing errors."); warningtemp.opt_key = "precise_z_height"; warningtemp.is_warning = true; *warning = warningtemp; From eb5082f37b87c225e621003c682c96b25fac82d5 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 17:51:29 +0800 Subject: [PATCH 66/67] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 05844c63bb..64fcb9a9a4 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1631,7 +1631,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) if (opt_key == "precise_z_height") { bool wipe_tower_enabled = m_config->option("enable_prime_tower")->value; if (boost::any_cast(value) && wipe_tower_enabled) { - MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause the slicing errors when there are multiple parts."), + MessageDialog dlg(wxGetApp().plater(), _L("Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?"), _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; From 991464ed956a6398865234d3b980af7a759f6b95 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 18 Mar 2026 17:52:24 +0800 Subject: [PATCH 67/67] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- src/slic3r/GUI/Tab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 64fcb9a9a4..c94fd1c7a4 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1593,7 +1593,7 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) _L("Warning"), wxICON_WARNING | wxYES | wxNO); if (dlg.ShowModal() == wxID_NO) { DynamicPrintConfig new_conf = *m_config; - new_conf.set_key_value("precise_z_height", new ConfigOptionBool(false)); + new_conf.set_key_value("enable_prime_tower", new ConfigOptionBool(false)); m_config_manipulation.apply(m_config, &new_conf); } wxGetApp().plater()->update();