Slic3rという有名なオープン ソースの 3D 印刷スライサー ソフトウェアは、Perl で記述されています。大学のプロジェクトのソース コードに小さな変更を加える必要がありますが、Perl にはまったく慣れていません。
これは、二重押し出しがどのように見えるかの素晴らしいイメージです。基本的に、ノズル/材料を変更すると、問題が発生します。ノズルのよだれを取り除くためにワイプタワーが必要で、再加熱/冷却などの時間のかかる作業に対処する必要があります。
そのため、私が知っているすべてのスライス プログラムは、エクストルーダーの変更を最小限に抑えようとしています。たとえば、レイヤー 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,
);
}
}
@Extruder は、[1]、[1, 2]、[1,2,3] またはそれ以上のリストにすぎないと思います。このブロックを変更して、押出機のコマンドを常に番号順 (1、2、3) で記述できるようにします。
Why? についてさらに詳しくお知りになりたい場合は、FFF 印刷、印刷熱交換器などについて、これまで以上に詳しくお話しさせていただきます。
編集実際、 ifステートメント をコメントアウトすると完全に機能しました。再コンパイル後、slic3r は問題なく動作し、Gcode は正しいように見えます。したがって、これはソフトウェア内で順序が言及されている唯一の場所だと思います。この変更を加えた Slic3r コードは、誰かがこの同じ問題に遭遇した場合に備えて、Github の私のフォークで利用できます。zdim さん、フィードバックありがとうございます。