From e63f95ddad6d4fc733d34017b4cef276eafd8512 Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sun, 27 Nov 2022 09:11:49 -0800 Subject: [PATCH] Added in a pause gcode script object, fixed gcode injection timing --- .../DesignTools/Primitives/SendGCodeObject3D.cs | 5 ++++- MatterControlLib/Library/Export/GCodeExport.cs | 4 ++-- .../MatterControl/ScriptingPartsContainer.cs | 12 ++++++++++++ .../PrinterCommunication/PrinterConnection.cs | 5 ++--- .../Thumbnails/11153474566755746919-256x256.png | Bin 0 -> 21244 bytes 5 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 StaticData/Images/Thumbnails/11153474566755746919-256x256.png diff --git a/MatterControlLib/DesignTools/Primitives/SendGCodeObject3D.cs b/MatterControlLib/DesignTools/Primitives/SendGCodeObject3D.cs index 84224db1e..2c38a5fe8 100644 --- a/MatterControlLib/DesignTools/Primitives/SendGCodeObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/SendGCodeObject3D.cs @@ -118,14 +118,17 @@ namespace MatterHackers.MatterControl.DesignTools && lineToWrite.StartsWith("; LAYER_HEIGHT:")) { double layerHeight = 0; + // this gives us the layer height we will be at AFTER this layer is done printing if (GCodeFile.GetFirstNumberAfter("; LAYER_HEIGHT", lineToWrite, ref layerHeight, out _, stopCheckingString: ":")) { - accumulatedLayerHeight += layerHeight; + // check if we are above the accumulated at the start of the layer but before adding in this layer height if (accumulatedLayerHeight > WorldZ) { hasBeenReached = true; yield return $"{GCodeToSend} ; G-Code from Scene Object"; } + + accumulatedLayerHeight += layerHeight; } } } diff --git a/MatterControlLib/Library/Export/GCodeExport.cs b/MatterControlLib/Library/Export/GCodeExport.cs index c4bfced15..0ada085d8 100644 --- a/MatterControlLib/Library/Export/GCodeExport.cs +++ b/MatterControlLib/Library/Export/GCodeExport.cs @@ -331,9 +331,9 @@ namespace MatterHackers.MatterControl.Library.Export accumulatedStream = new BabyStepsStream(printer, accumulatedStream); - accumulatedStream = new RemoveNOPsStream(printer, accumulatedStream); - accumulatedStream = new RunSceneGCodeProcesorsStream(printer, accumulatedStream, queuedCommandStream); + + accumulatedStream = new RemoveNOPsStream(printer, accumulatedStream); accumulatedStream = new ProcessWriteRegexStream(printer, accumulatedStream, queuedCommandStream); diff --git a/MatterControlLib/Library/Providers/MatterControl/ScriptingPartsContainer.cs b/MatterControlLib/Library/Providers/MatterControl/ScriptingPartsContainer.cs index 08f1477da..018bf6f8b 100644 --- a/MatterControlLib/Library/Providers/MatterControl/ScriptingPartsContainer.cs +++ b/MatterControlLib/Library/Providers/MatterControl/ScriptingPartsContainer.cs @@ -65,6 +65,18 @@ namespace MatterHackers.MatterControl.Library { Category = this.Name }); + + Items.Add(new GeneratorItem( + "Pause".Localize(), + async () => + { + var gcodeObject = await SendGCodeObject3D.Create(); + gcodeObject.GCodeToSend = "M226"; + return gcodeObject; + }) + { + Category = this.Name + }); } private class StaticDataItem : ILibraryAssetStream diff --git a/MatterControlLib/PrinterCommunication/PrinterConnection.cs b/MatterControlLib/PrinterCommunication/PrinterConnection.cs index 915d90483..ecf76c6e8 100644 --- a/MatterControlLib/PrinterCommunication/PrinterConnection.cs +++ b/MatterControlLib/PrinterCommunication/PrinterConnection.cs @@ -2442,8 +2442,6 @@ Make sure that your printer is turned on. Some printers will appear to be connec { accumulatedStream = new SendProgressStream(gCodeFileSwitcher, Printer); } - - accumulatedStream = pauseHandlingStream = new PauseHandlingStream(Printer, accumulatedStream); } else { @@ -2494,8 +2492,9 @@ Make sure that your printer is turned on. Some printers will appear to be connec accumulatedStream = softwareEndstopsExStream12; } - accumulatedStream = new RemoveNOPsStream(Printer, accumulatedStream); + accumulatedStream = pauseHandlingStream = new PauseHandlingStream(Printer, accumulatedStream); accumulatedStream = new RunSceneGCodeProcesorsStream(Printer, accumulatedStream, queuedCommandStream); + accumulatedStream = new RemoveNOPsStream(Printer, accumulatedStream); processWriteRegexStream = new ProcessWriteRegexStream(Printer, accumulatedStream, queuedCommandStream); accumulatedStream = processWriteRegexStream; diff --git a/StaticData/Images/Thumbnails/11153474566755746919-256x256.png b/StaticData/Images/Thumbnails/11153474566755746919-256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..46a4bbf972edd9ae37c5a4273c35677cee4169bf GIT binary patch literal 21244 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

KWCk%JGt@5yt8Rj|2!9V zVK{V{ujaCe=h7gq0Ct<%|5t}d*4S8o$gz<5_F`9G=By45kP?X~U9mT1)gRB#S{B)K z@WH!n+qV4=ijDo7zb5SUGWRI8$s5HgwC8hH!U<_=Ca5sVX?8Yv9YmRwr+h`V)fKr zgpq^4Yt<^y1m>qFo(yemZ5_uSAN{moPL&8l-uBt+*6I1pvjLg5YSpQJ4JH9O5%}Qx zm8(|^zq|-kn#i#-WYrtH)pzrbzyE&u+BLW6Xz8t6w??cD`zh$ka7g?t6KDYa{`=<# z8kr^90;k26bsue7waQ|yUr6ZG2jYx1Q{>W&Bxg$fYMR+_HS6fZ0+H8mi(I7YqP634 zmi|*(mN^Ns=pxCGsj;DlM=0fxe8Uy>EIfx5M7RtsEj>-7?*0hZRM;EJvfy~q#;J!yF5J2W?Mq9=UVj=c*5c14 z1MAms+_sIaA#+w_0_%nCO$mNR|gva_>KSJ}*aBpw|bd(@z3)4D{~#LWi2!iNna zVq6RnH|?|+?es@XN~+*gOyWEm{=bMS20L0uUNfml~01; zj%od?bpx4}Gz7T1wmvJc=-0G`YOsgF_gmV69Jqu3f)w zJSBr|!4xKg#;4iW*TrUKWOzKYo_SO!AvJYr#B+|O39tLtu32-(^jCODNP>jh$utJ9 zxr|2|y;rR|Cz{5z=%R+Qva*k_??exkC*k5PHk~e@lGM%3t&6)M$1GZG2D4sZlVn2> zw*qTV?7o_xldiuuWi;`9d}^vT4?q9r9Xm848x)?n|37-vwXMB!m z17G3UXVcO)-%L%IamT7*(wceNU)RmiSrE1MTG{l|TZ>CeLk)SFQ;a-wb9JrD-yM1V z_0%(k#M_g+md=ivqprI<2K)6gNTTT1?$)M$N&2@J!XHM>|uiqH*?a| zCPy;eW2ke@Qxu2}WS9_rAfeN3arNt0uVy80oRK8K_OL)A_IlyYm@C(=b+NSMivRii z`SYId_p0}NJSIKIzJ6cC@7c>{ve~ix(=S*YviSdEAqTdO<(D(#LqkK`7ir9MQF7Fp znv|H>`1Nb4mbSJl)1hrV|K|UFlm6xFSJCo+k>L4Mfe*nCt}m7OD?gQiEAqgvSFf@{ zi;IhACrb3C7(%y!RDIj|3inI454HA%o=k+=u7<+rV~$m z#p2@PzP-7FJiBS(-mj^)2iF)fm3re*5jRL<#K!nh(?u2&hK=*gTU- z!y{p(LZfZ2?U zLyczkOgxz)*08lZJAO7M#rU)CL1zhcFKq>W3iU%x)RQSgEJ0qZAazjIH? z{VY1M_-%u{1&a)8pZ&)p!v0yao<+yTZWYN|y2$X;_H$M;d?y)NHl1SNS{`?|`kt$+ zE34UTUD^KQ(;EXH*gmk?8CxglwdG>^YK{dz=6q7BSf$W3Yu2pVRjaP07)ieV^=sFr zef$1hWS=hA5RjH*^LE#wMNFZgn@^?~&GlM3?d00$`YivR);v%*|7|=yStM7)(fk7E zmWZ|2+;-o6xB2$lu-$jp-N-Qmxj^!-@l2kRDVMI4${sc_T9)Z{^6k_4D%%(5FPOu$ ze-7)0K$biOhBqgtbNp_6RdZ8;X!-QyKl2X5_2(Qmih6-| O0D8LmxvX