使用Slic3r进行3D打印时,Perl对挤出顺序的小改动

时间:2017-08-16 20:40:47

标签: perl 3d-printing

一种名为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 printingprinted heat exchangers等内容的更多信息。

修改 事实上,评论 if 语句完美无缺。重新编译后,slic3r工作正常,Gcode似乎是正确的。因此,我想这是软件中唯一提到订单的地方。如果有人遇到同样的问题,可以在我的fork at Github上找到带有此更改的Slic3r代码。感谢您 zdim ,以获得反馈!

0 个答案:

没有答案