Example #1
0
        public void Preview()
        {
            int index = SystemContext.CoordinatePara.RefZeroIndex;

            if (index == 0)    //Floating coordinate
            {
                var p = SystemContext.Hardware.GetCurrentPosition();
                SystemContext.CoordinatePara.RefZeroSeries[0] = p;
            }
            //if (!this.running)
            //{
            //    Messenger.Default.Send<object>(null, "OnMoveFigures");
            //}
            //Messenger.Default.Send<object>(null, "OnPreview");
            var para = new CanvasOperParameter
            {
                OperType = CanvasOperTypes.Preview,
            };

            if (!this.running)
            {
                para.OperType |= CanvasOperTypes.Move;
            }
            Messenger.Default.Send <object>(para, "OnOperation");
        }
Example #2
0
        private bool Initialize(string item)
        {
            bool valid = true;

            if (item != "BreakPointStart" && (this.lastOperation == "Idle" || this.lastOperation == "Stop"))
            {
                Messenger.Default.Send <object>(false, "CanvasMonitorChanged");
                //this.UpdateDataProvider();
                this.UpdateDrawObjectsCnt();

                #region Step1: Check if empty
                //if (this.provider.IsEmpty)
                if (this.drawObjectsCnt == 0)
                {
                    MsgBoxService.ShowMessage("没有可加工的图形!", "消息", MessageButton.OK, MessageIcon.Information);
                    return(false);
                }
                #endregion

                #region Step2: Check if need to sort, then move figures and get dataprovider again
                //bool needToSort = false;
                //if (this.provider.DrawObjectCount > 1)
                if (this.drawObjectsCnt > 1)
                {
                    //var res = this.MsgBoxService.ShowMessage("加工之前是否先进行排序?", "消息", MessageButton.YesNoCancel, MessageIcon.Question);
                    //if (res == MessageResult.Cancel)
                    //{
                    //    return false;
                    //}
                    //needToSort = res == MessageResult.Yes;
                }
                int index = SystemContext.CoordinatePara.RefZeroIndex;
                if (index == 0)   //Floating coordinate
                {
                    var p = SystemContext.Hardware.GetCurrentPosition();
                    SystemContext.CoordinatePara.RefZeroSeries[0] = p;
                }
                var zeroPoint = SystemContext.CoordinatePara.RefZeroSeries[index];
                //Messenger.Default.Send<object>(null, "OnMoveFigures");
                //Messenger.Default.Send<object>(null, "OnPreview");
                //Messenger.Default.Send<object>(zeroPoint, "RelativePosChanged");
                //this.UpdateDataProvider(needToSort);
                var para = new CanvasOperParameter
                {
                    OperType = CanvasOperTypes.Move | CanvasOperTypes.Preview,
                    Selected = SystemContext.MachineControlPara.IsOnlyMachineSelected
                };
                Messenger.Default.Send <object>(para, "OnOperation");
                Messenger.Default.Send <object>(zeroPoint, "RelativePosChanged");
                #endregion

                #region Step3: check if out of range
                if (SystemContext.MachineControlPara.SoftwareLimitEnabled)
                {
                    var rect1 = this.provider.GetOutlineRect();
                    var rect2 = SystemContext.SystemPara.GetMachiningRegion();
                    if (!rect2.Contains(rect1.Value))
                    {
                        MsgBoxService.ShowMessage("加工图形已经超出行程范围!", "消息", MessageButton.OK, MessageIcon.Error);
                        return(false);
                    }
                }
                #endregion

                #region Step4: Initialize
                OperationEngine.Instance.Intialize(this.provider);
                Messenger.Default.Send <object>(null, "ClearMark");
                Messenger.Default.Send <object>(false, "CanvasStatusChanged");
                //Messenger.Default.Send<object>(false, "CanvasMonitorChanged");
                if (item != "Simulate")
                {
                    Messenger.Default.Send <object>(true, "MenuInfoDisChanged");
                    Messenger.Default.Send <object>(TimerStatus.Restart, "TimerStatusChanged");
                }
                #endregion

                #region Step5: Log
                string msg;
                if (index == 0)
                {
                    msg = $"设置浮动坐标系的零点为({zeroPoint.X.ToString("0.###")},{zeroPoint.Y.ToString("0.###")})mm";
                }
                else
                {
                    msg = $"选择程序坐标系{index},其零点位于({zeroPoint.X.ToString("0.###")},{zeroPoint.Y.ToString("0.###")})mm";
                }

                if (item == "Start")
                {
                    this.AddSysLog("开始", Color.FromArgb(128, 0, 0));
                    this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
                    this.AddSysLog("开始加工", Color.FromArgb(0, 0, 255));
                    if (this.drawObjectsCnt < 5000)
                    {
                        var info = this.GetMachineInfo();
                        msg = $"切割总长:{info.CutLen.ToString("0.##")}mm, 空移总长:{info.EmptyMoveLen.ToString("0.##")}mm, 穿孔次数:{info.PiercingTimes}次";
                        this.AddSysLog(msg, Color.FromArgb(0, 128, 0));
                        //msg = $"切割时间(估计):{info.CutTime.ToString("0.###")}s, 空移时间(估计):{info.EmptyMoveTime.ToString("0.###")}s, 延时:{info.Delay.ToString("0.###")}s, 总耗时(估计):{info.TotalTime.ToString("0.###")}s";
                        msg = $"切割时间(估计):{DelayHelper.GetTimeString(info.CutTime)}, 空移时间(估计):{DelayHelper.GetTimeString(info.EmptyMoveTime)}, 延时:{DelayHelper.GetTimeString(info.Delay)}, 总耗时(估计):{DelayHelper.GetTimeString(info.TotalTime)}";
                        this.AddSysLog(msg, Color.FromArgb(0, 128, 0));
                    }
                    this.AddSysLog("停止-->正在加工", Color.Black);
                }
                if (item == "Outline")
                {
                    this.AddSysLog("检边", Color.FromArgb(128, 0, 0));
                    this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
                    this.AddSysLog("停止-->检边", Color.Black);
                }
                if (item == "Simulate")
                {
                    this.AddSysLog("模拟", Color.FromArgb(128, 0, 0));
                    this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
                    this.AddSysLog("停止-->模拟", Color.Black);
                }
                if (item == "Empty")
                {
                    this.AddSysLog("空走", Color.FromArgb(128, 0, 0));
                    this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
                    this.AddSysLog("停止-->空走", Color.Black);
                }
                #endregion
            }
            return(valid);
        }
Example #3
0
        public void SwichContext(int index)
        {
            var coordinatePara = SystemContext.CoordinatePara;

            if (coordinatePara == null)
            {
                return;
            }

            bool flag = true;

            if (index == SET_ZERO)                      //Set current point to zero point
            {
                int    currentIndex = coordinatePara.RefZeroIndex;
                string subMsg       = currentIndex == 0 ? "浮动坐标系" : $"工作坐标系{currentIndex}";
                if (MsgBoxService.ShowMessage($"确定将当前位置设置为[{subMsg}]零点?", "消息", MessageButton.YesNo, MessageIcon.Question) == MessageResult.Yes)
                {
                    var p = SystemContext.Hardware.GetCurrentPosition();
                    coordinatePara.RefZeroSeries[currentIndex] = p;

                    string msg = $"设置程序坐标系{currentIndex}的零点为({p.X.ToString("0.###")},{p.Y.ToString("0.###")})mm";
                    this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
                }
                else
                {
                    flag = false;
                }
            }
            else if (index == SET_FLOATING_COORDINATE)   //Set floating coordinate
            {
                coordinatePara.RefZeroIndex = 0;
                var p = SystemContext.Hardware.GetCurrentPosition();
                coordinatePara.RefZeroSeries[0] = p;

                string msg = $"选择浮动坐标系,其零点在({p.X.ToString("0.###")},{p.Y.ToString("0.###")})mm";
                this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
            }
            else if (index < SET_MARK_START_INDEX)       //Switch coordinate
            {
                int index1 = index - SET_FLOATING_COORDINATE;
                coordinatePara.RefZeroIndex = index1;

                var    zeroPoint = coordinatePara.RefZeroSeries[index1];
                string msg       = $"选择程序坐标系{index1},其零点在({zeroPoint.X.ToString("0.###")},{zeroPoint.Y.ToString("0.###")})mm";
                this.AddSysLog(msg, Color.FromArgb(0, 128, 128));
            }
            else                    //Switch mark
            {
                coordinatePara.MarkIndex = index - SET_MARK_START_INDEX;
                //this => CanvasWrapper ViewModel
                var p     = coordinatePara.MarkSeries[coordinatePara.MarkIndex];
                var color = this.colorMap[coordinatePara.MarkIndex];
                Messenger.Default.Send <object>(Tuple.Create(p, color), "MarkFlagChanged");
                flag = false;

                int    index1 = index - SET_MARK_START_INDEX + 1;
                string msg    = $"选择标记点{index1},坐标为({p.X.ToString("0.###")},{p.Y.ToString("0.###")})mm";
                this.AddSysLog(msg, Color.FromArgb(0, 128, 0));
            }

            if (flag)
            {
                var zeroPoint = coordinatePara.RefZeroSeries[coordinatePara.RefZeroIndex];
                //this => CanvasWrapper ViewModel
                Messenger.Default.Send <object>(zeroPoint, "RelativePosChanged");
                //Messenger.Default.Send<object>(null, "OnMoveFigures");
                //Messenger.Default.Send<object>(null, "OnPreview");
                var para = new CanvasOperParameter
                {
                    OperType = CanvasOperTypes.Move | CanvasOperTypes.Preview,
                };
                Messenger.Default.Send <object>(para, "OnOperation");
            }
        }