Macros 允许您在自定义 G 代码字段中创建条件等式和数学方程。

PrusaSlicer 宏语言与 Slic3r 条件表达式不兼容。
构造
条件等式

{if <condition_1>}{GCode_condition_1}[][{else}{GCode_else>]{endif}

表达式

{<expression>}

传统的变量

[variable]

[variable_index]

在任何构造内,可以通过它们的名称访问 PrusaSlicer 配置变量

layer_z

并且可以通过使用方括号访问矢量变量的元素

temperature[0]

指的是第一挤出机的温度。

目前只能将多维向量作为简单的矢量变量访问,从而产生字符串值(例如,如果 extruder_variable[1] 产生 [n,0] 字符串值–可以发布在 g 代码中但不能用于算术运算)。

字符串由双引号标识
“string”
正则表达式由斜杠标识
/regex/
字符串不会递归解析,即字符串内的花括号和方括号将出现在输出中。这允许这样的结构存在
{“[text in square brackets]”}

运算符
允许以下运算符:

比较
<, >, ==, !=, <>, <=, >=
例如:
{if layer_height == 0.2};Do something{endif}
布尔逻辑
和,或,非
或等效地,
&&, ||, !

例如

{if layer_height > 0.1 and first_layer_temperature[0] > 220};Do something{endif}


算术
+, -, , /
例如:

M104 S{first_layer_temperature[0] * 2/3}注意first_layer_temperature 是一个矢量

三元运算符

<condition>? <cond_true>:<cond_false>


这需要用括号括起来才能工作。
例如:

M104 S{(first_layer_temperature[0]>220 ? 230 : 200)}


此表达式将挤出机温度设置为 230 或 200,具体取决于第一层是否需要超过 220°。
正则表达式匹配
(=(匹配),!(不匹配))
正则表达式用斜杠括起来 /
例如:

{if printer_notes=~/.PRINTER_VENDOR_PRUSA3D./};Printer is Prusa{endif}


函数
最小
min(a,b)

最大
max(a,b)

转换为整数
int(a)

四舍五入到整数
round(a)

四舍五入/填充空格:将小数部分四舍五入到 num_decimals 位数(如果需要,添加尾随零),然后使用空格填充,以使数字的总位数为 num_digits(包括小数点,如果存在)。最后一个参数可以省略,默认为零。
digits(a, num_digits, num_decimals=0)

四舍五入/用零填充:与上面相同,只是左侧用零填充
zdigits(a, num_digits, num_decimals=0)

检查配置选项是否激活
is_nil(config_option_name)

变量(占位符)
您可以在自定义脚本和输出文件名模板中使用变量。

查看所有 PrusaSlicer 占位符的列表,根据它们的范围进行分组。

标量变量
这些值是标量,可以直接引用。

printer_notes(字符串)
layer_z(仅在图层更改 G 代码中可用)
layer_num(仅在图层更改 G 代码中可用)
toolchange_z(自版本 2.4.0 起在自定义换刀 G 代码中可用)
有些变量由复杂的公式定义。例如,perimeter_extrusion_width 如果保持为零,则取 extrusion_width 的值(如果非零),否则为当前 layer_height 计算默认的 perimeter_extrusion_width。仅对新语法表达式(用花括号{}括起来的表达式)执行这些替换,而使用旧的占位符语法(用方括号[]括起来的表达式)编写的表达式将被逐字解释。

矢量(数组变量)
这些变量是数组,需要像这样访问(例如,temperature[0])。

temperature
first_layer_temperature
bed_temperature(请注意,这是一个矢量,即使只有一个值是有意义的:bed_temperature[0])
first_layer_bed_temperature(同上!)
多维向量
这些变量只能作为简单矢量访问,不能用于算术表达式。

extruder_offset
bed_shape
示例

温度塔
您可以使用“图层更改前”自定义 G 代码逐渐降低热端温度。首先,可以使用 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}

通过较短的 if/else/endif 表达式以及线性插值可以达到相同的结果:

M104 S{if layer_z < 10}265{elsif layer_z > 45}240{else}{265+(240-265)*(layer_z-10.0)/(45-10)}{endif}

或者可以使用三元运算符:

M104 S{((layer_z < 10) ? 265 : ((layer_z > 45) ? 240 : 265+(240-265)*(layer_z-10.0)/(45-10)))}

在打印之前使用弱床加热器更快地加热
如果您的床需要很长时间才能达到温

更新 2023年12月27日
Select your currency
0
YOUR CART
  • 添加产品到您的购物车吧~~