PrusaSlicer 宏命令语言说明

文章翻译自官方说明文档 PrusaSlicer Macro Language

** PrusaSlicer 宏语言的最新文档可以在Prusa 知识库的相应条目.**

============================

2.6.0-alpha6 中的新功能(尚未包含在上述文档中)

自定义 G 码解释器在 PrusaSlicer 2.6.0-alpha6 中得到了显著扩展。

  • 新支持自定义本地变量和全局变量
  • 在定制的 G 码和 PrusaSlicer 之间交换打印机的状态(机器位置、z-hop、挤出机位置和收回)是新的可能。
  • 为了可读性,可以将多个表达式放置在由分号分隔的单个 { } 块中。
  • 新增助手函数 interpolate_table()one_of()size()empty()
  • 添加了新的占位符,用于访问挤出的材料量

请注意,使用新的 G 代码解释器功能生产的 3MF 将无法通过报告自定义 G 代码错误与旧的 PrusaSlicer 进行切片。建议向此类 3MF 的接收方警告此类不兼容性。

自定义变量 # 4048 # 7196

局部和全局变量可以在自定义 G 代码块中新定义和使用。局部变量仅在定义它们的自定义 G 代码块结束之前有效,而全局变量可以由在定义它们的块之后处理的任何自定义 G 代码块引用。这些变量是用以下语法定义的:

(global|local) variable_name =(scalar_expression|vector_variable|array_expr|initializer_list)

哪里

array_expr := repeat(repeat_cnt, value)
initializer_list := (value, value, value, ...)

可以使用以下语法为用户定义的变量或特殊变量(有关特殊变量,请参见下一节)赋值:

variable_name =(scalar_expression|vector_variable|array_expr|initializer_list)

新创建的变量的类型由右侧初始化器的类型定义。向量变量的所有元素都属于同一类型,因此,如果在单个 initializer _ list 表达式中混合不同类型,这些元素将被转换为相同类型:当 ints 与 floats 混合时,ints 将被转换为 floats。如果初始化列表元素中的任何一个是字符串,则所有元素都会转换为字符串。

新声明的变量不得覆盖现有变量。重复的 (global|local) 变量定义被视为赋值,因此它既不能改变变量类型,也不能改变其作用域(局部与全局)。

与切片引擎交换打印机状态的特殊变量

新的每个自定义 G 代码块可以通过从一组新的特殊变量读取和写入来与切片引擎交换打印机的状态。目前有两组这样的变量可用:G 码位置和挤出机状态。

以下特殊变量可用于交换打印机位置和 z-hop 控件:

position(read/write)-当前 G 码位置的 3 个元素向量(X,Y,Z) zhop(read only)-初始值 z-hop

以下特殊变量可用于交换挤出机状态:

e_position(read/write)-绝对 E 位置,仅适用于绝对挤出机寻址 e_retracted(read/write)-当前收缩状态 e_restart_extra(read/write)-当前计划的额外挤出机在去收缩后的启动例如,以下块可用于额外收缩:

{
local long_retract = 0.6;
local extra_retract = long_retract - e_retracted[current_tool];
if extra_retract > 0 then
      "G1 E" + extra_retract + "
";
      e_retracted[current_tool] = long_retract;
endif
}

类似地,以下块可用于额外的 Z-hop:

{
local long_zhop = 2;
local extra_zhop = long_zhop  - zhop;
if extra_zhop > 0 then

      local new_z = position[2] + extra_zhop;
      "G1 Z" + new_z + "
";
      position[2] = new_z;
endif
}
多个表达式可以写在由分号分隔的单个 { } 块内。

现有的自定义 G 代码宏处理器语法是为简单的宏处理任务而设计的。现在,随着自定义变量的引入,人们被邀请编写复杂的自定义 G 代码块。虽然复杂的自定义 G 代码可以使用旧的宏处理语法编写,但新引入的语法通常更易读。

使用旧的语法,每个表达式必须包含在 { } 中。新的多个表达式可以封闭在由分号分隔的一对大括号 { } 中。

类似地, {if condition}... {endif condition}... {else}... {endif} 表达式可以新写入一对 {} 中,并且可以嵌套 ifs,例如:

{if condition then
    statement;
    statement
elsif condition then
    if condition then
        statement
   else
        statement
    endif
else
    statement
endif}

如果需要,可以在一个表达式中将旧的语法与新的语法混合:

{if condition
    }some text{
else
    statement
endif}

分号只在多个语句之间需要,并且在 if 块的末尾(endif 之后)不需要分号。

与较早的 PrusaSlicer 相比,不活动的 if/else/endif 块只是被解析,但不再被计算,因此不活动的分支可能包含无效的代码,例如引用未定义的变量。

新的助手功能

引入了以下新功能: interpolate_table()one_of()size()empty()

  • inpolate _ table(x,(x0,y0),(x1,y1),(x2,y2),…)
    在点 x 处插值分段线性函数
  • one _ of(sample,pattern1,pattern2,…)
    如果样本与其中一个模式匹配,则返回 true。如果模式包含在//中,或者如果表达式的前缀是 ~,则模式被视为正则表达式。例如/。a./或 ~“.a.”是匹配任何包含单个“a”字符的模式。
  • size(vector _ variable)返回其元素的数量。
  • 如果向量变量有零元素,则空(vector _ variable)返回 true。
用于访问挤出材料量的新占位符

以下占位符提供了特定挤出机在评估占位符时挤出的塑料的体积和重量: extruded_volumeextruded_weight

以下占位符提供了在评估占位符时所有挤出机挤出的塑料的体积和重量: extruded_volume_totalextruded_weight_total

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值