一种名为Slic3r的流行的开源3D打印切片软件是用Perl编写的。我需要对大学项目的源代码进行一些小改动,但我对Perl完全不熟悉。
这是一个nice image of what dual extrusion would look like。基本上,当您更换喷嘴/材料时,会产生问题。你需要一个擦拭塔来消除喷嘴上的流口水,你必须处理再加热/冷却和其他耗时的任务。
这就是为什么我所知道的所有切片程序都试图最小化挤出机的变化。例如,如果第3层和第4层需要两种材料,则第3层将打印挤出机/材料1,然后是挤出机/材料2.在第4层,您将打印挤出机2,然后打印挤出机1.
但是,我需要始终以与挤出机编号相同的顺序打印;每一层都应该从挤出机1开始,然后是挤出机2,然后是3,等等。
我相信我在Slic3r源代码中找到了重要的代码段。它位于lib / Slic3r / Print / GCode.pm,也位于Github here,从第622行开始。
以下是代码:
# tweak extruder ordering to save toolchanges
my @extruders = sort { $a <=> $b } keys %by_extruder;
if (@extruders > 1) {
my $last_extruder_id = $self->_gcodegen->writer->extruder->id;
if (exists $by_extruder{$last_extruder_id}) {
@extruders = (
$last_extruder_id,
grep $_ != $last_extruder_id, @extruders,
);
}
}
我猜@extruders只是一个列表,可以是[1],[1,2],[1,2,3]或更多。我想修改这个块,以便我们总是按数字顺序(1,2,3)编写挤出机命令。
如果您想了解有关“为什么?”的详细信息,我很高兴告诉您有关FFF printing,printed heat exchangers等内容的更多信息。
修改 事实上,评论 if 语句完美无缺。重新编译后,slic3r工作正常,Gcode似乎是正确的。因此,我想这是软件中唯一提到订单的地方。如果有人遇到同样的问题,可以在我的fork at Github上找到带有此更改的Slic3r代码。感谢您 zdim ,以获得反馈!