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:
authorMichael Moon <triffid.hunter@gmail.com>2012-09-26 12:50:03 +0400
committerMichael Moon <triffid.hunter@gmail.com>2012-09-26 12:50:03 +0400
commit31585e96b0c8dce70ddd829fade569a9bd013ede (patch)
treef23da9afd289ea1f82c7224aad956b797d075811 /utils
parentab103b0c12551b0fc1ee43f76da07dd9d709235f (diff)
decimate script- removes tiny lines from prints that can cause blobbing
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;
+ }
+}