Les macros vous permettent de créer des conditions et d'évaluer des équations mathématiques dans les champs de G-code personnalisé.
{if <condition_1>}<GCode_condition_1>[][{else}<GCode_else>]{endif}
{<expression>}
[variable]
ou [variable_index]
Dans les deux constructs, les variables de configuration PrusaSlicer sont accessibles par leurs noms
layer_z
et les éléments des variables vectorielles sont accessibles en utilisant des accolades
temperature[0]
se réfère à la température du première extrudeur.
Les tableaux multidimensionnels ne sont actuellement accessibles que sous la forme d'une simple variable sous forme de tableau produisant une chaîne de caractères (par exemple, si extruder_variable[1] produit la chaîne de caractères [n, 0] - peut être affiché dans le G-code mais ne peut pas être utilisé dans les opérations arithmétiques).
Les chaînes de caractères sont identifiées par des guillemets doubles
"chaîne de caractères"
et les expressions régulières par des barres obliques / regex /
. Les chaînes de caractères ne sont pas analysées de manière récursive, c'est-à-dire que des accolades et des crochets à l'intérieur des chaînes de caractères apparaîtront dans la sortie. Cela permet des constructs tels que {"[texte entre crochets]"}
Les opérateurs suivants sont autorisés :
<, >, ==, !=, <>, <=, >=
{if layer_height == 0.2}; Faire quelque chose {endif}
and, or, not
ou équivalent,&&, ||, !
{if layer_height> 0.1 and first_layer_temperature [0]> 220}; Faire quelque chose {endif}
+, -, , /
M104 S{first_layer_temperature[0] * 2/3}
(Notez que first_layer_temperature est un tableau)<condition>? <cond_true>:<cond_false>)
Cela doit être placé entre parenthèses pour fonctionner.
M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}
Cette expression règle la température de l'extrudeur à 230 ou 200 selon que la première couche doit être supérieure à 220°.= ~ (correspondant), ! ~ (ne correspondant pas))
{if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Printer is Prusa{endif}
Minimum
min(a,b)
Maximum
max(a,b)
Conversion en entier
int(a)
Arrondir à un entier
round(a)
Arrondi/remplissage avec des espaces : arrondit la partie fractionnaire à num_decimals chiffres (en ajoutant des zéros à la fin si nécessaire), puis remplit à gauche avec des espaces afin que le nombre ait num_digits caractères au total (y compris un point décimal s'il est présent). Le dernier argument peut être omis, par défaut à zéro.
digits(a, num_digits, num_decimals=0)
Arrondi/remplissage avec des zéros : comme ci-dessus, uniquement à gauche rempli de zéros
zdigits(a, num_digits, num_decimals=0)
Vous pouvez utiliser des variables dans les scripts personnalisés et dans le modèle de nom de fichier de sortie.
Allez voir la Liste de toutes les variables de PrusaSlicer., regroupées en fonction de leur portée.
Ces valeurs sont scalaires et peuvent être directement référencées.
Certaines variables sont définies par des formules complexes. Par exemple, si perimeter_extrusion_width est laissée à zéro, elle prend la valeur d'extrusion_width, si non nulle, une valeur par défaut de perimeter_extrusion_width est calculée pour la layer_height courante. Ces substitutions ne sont effectuées que pour les expressions de la nouvelle syntaxe (entre accolades {}), tandis que les expressions écrites à l'aide de l'ancienne syntaxe d'espace réservé (entre accolades []) sont interprétées textuellement.
Ces variables sont des tableaux et doivent être accédées en tant que telles (par exemple, temperature[0]).
Ces variables ne sont accessibles que sous forme de tableaux simples et ne peuvent pas être utilisées dans les expressions arithmétiques.
Exemples
Vous pouvez utiliser le G-code personnalisé "Avant changement de couche" pour diminuer lentement la température de la hotend. Tout d'abord, on peut utiliser l'expression if/elseif/else :
{if layer_z < 10}M104 S265
{elsif layer_z < 17}M104 S260
{elsif layer_z < 24}M104 S255
{elsif layer_z < 31}M104 S250
{elsif layer_z < 38}M104 S245
{elsif layer_z < 45}M104 S240
{endif}
Le même résultat peut être obtenu par une expression if/else/endif plus courte avec une interpolation linéaire :
M104 S{if layer_z < 10}265{elsif layer_z > 45}240{else}{265+(240-265)*(layer_z-10.0)/(45-10)}{endif}
Ou on peut utiliser l'opérateur ternaire :
M104 S{((layer_z < 10) ? 265 : ((layer_z > 45) ? 240 : 265+(240-265)*(layer_z-10.0)/(45-10)))}
Si vous avez un plateau qui met beaucoup de temps à atteindre sa température, vous pouvez réduire un peu le temps d'attente en utilisant le "G-code de début" pour chauffer le plateau à la température cible moins 5 degrés, puis en commençant à chauffer la hotend pendant que le plateau continue de chauffer jusqu'à la valeur cible :
M190 S{first_layer_bed_temperature[0] - 5} ; attendre la température du plateau - 5
M140 S[first_layer_bed_temperature] ; poursuivre la chauffe du plateau en utilisant la syntaxe compatible [<variable>]
M109 S[first_layer_temperature] ; attendre la température de la buse
Si vous avez une question sur un sujet qui n'est pas traité ici, consultez nos ressources supplémentaires.
Et si cela ne suffit pas, vous pouvez envoyer une demande à [email protected] ou via le bouton ci-dessous.