示例#1
0
        private void StartExecutingGCodeThread()
        {
            var timeStart = DateTime.Now;

            _machine.EnqueueCommands = true;

            try
            {
                if (_settings.IgnoreLimitsDuringExecution)
                {
                    _machine.IgnoreLimitSwitches(true);
                }
                _machine.EnableStepperDrivers(true);

                var parser = new GCodeParser();
                parser.OnProgressNotify += new GCodeParser.OnProgressNotifyEventHandler(GCodeParser_OnProgressNotify);

                Invoke(new MethodInvoker(() =>
                {
                    parser.WorkspaceOffset        = ((OffsetType)cboWCS.SelectedItem).GCodeIdentifier;
                    parser.ToolOffset             = ((OffsetType)cboToolOffsets.SelectedItem).GCodeIdentifier;
                    parser.ToolLengthCompensation = chkToolLengthOffset.Checked;
                }));

                parser.ExecuteCode(txtGCode.Lines.ToList());

                _machine.EnableStepperDrivers(false);
                if (_settings.IgnoreLimitsDuringExecution)
                {
                    _machine.IgnoreLimitSwitches(false);
                }
            }

            finally
            {
                _machine.EnqueueCommands = false;
            }

            _machine.RunQueuedCommands();
            _executingGCode = false;
            var timeElapsed = DateTime.Now.Subtract(timeStart);

            Invoke(new MethodInvoker(() =>
            {
                EnableOrDisableMotionFunctions();
                toolStripStatusLabel.Text = "";
                LogText("Program run time: " + timeElapsed.ToString());
                SetMachineWorkingOffset();          // Restore to UI defined offsets
            }));
        }