Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rwxr-xr-xutils/post-processing/decimate.pl53
1 files changed, 53 insertions, 0 deletions
diff --git a/utils/post-processing/decimate.pl b/utils/post-processing/decimate.pl
new file mode 100755
index 000000000..9e2938c5f
--- /dev/null
+++ b/utils/post-processing/decimate.pl
@@ -0,0 +1,53 @@
+#!/usr/bin/perl -i~
+
+use strict;
+use warnings;
+
+my %lastpos = (X => 10000, Y => 10000, Z => 10000, E => 10000, F => 10000);
+my %pos = (X => 0, Y => 0, Z => 0, E => 0, F => 0);
+
+my $mindist = 0.33;
+
+my $mindistz = 0.005;
+
+my $mindistsq = $mindist * $mindist;
+
+sub dist {
+ my $sq = 0;
+ for (qw/X Y Z E/) {
+ $sq += ($pos{$_} - $lastpos{$_}) ** 2;
+ }
+ return $sq;
+}
+
+while (<>) {
+ if (m#\bG[01]\b#) {
+ while (m#([XYZEF])(\d+(\.\d+)?)#gi) {
+ $pos{uc $1} = $2;
+ }
+ if (
+ (
+ /X/ &&
+ /Y/ &&
+ (dist() >= $mindistsq)
+ ) ||
+ (abs($pos{Z} - $lastpos{Z}) > $mindistz) ||
+ (!/X/ || !/Y/)
+ ) {
+ print;
+ %lastpos = %pos;
+ }
+ elsif (($pos{F} - $lastpos{F}) != 0) {
+ printf "G1 F%s\n", $pos{F};
+ $lastpos{F} = $pos{F};
+ }
+ }
+ else {
+ if (m#\bG92\b#) {
+ while (m#([XYZEF])(\d+(\.\d+)?)#gi) {
+ $lastpos{uc $1} = $2;
+ }
+ }
+ print;
+ }
+}