示例#1
0
        /// <summary>
        /// laser processing
        /// </summary>
        /// <param name="markerArg"></param>
        /// <returns></returns>
        public virtual bool Mark(IMarkerArg markerArg)
        {
            if (!this.IsMarkerable)
            {
                return(true);
            }
            var  rtc     = markerArg.Rtc;
            var  laser   = markerArg.Laser;
            bool success = true;

            if (null != laser)
            {
                var powerControl = laser as IPowerControl;
                if (null != powerControl)
                {
                    success &= powerControl.ListPower(this.Power); // 레이저 소스 객체에 파워값을 전달한다
                }
            }

            if (!success)
            {
                return(false);
            }
            success &= rtc.ListDelay(this.LaserOnDelay, this.LaserOffDelay, this.ScannerJumpDelay, this.ScannerMarkDelay, this.ScannerPolygonDelay);
            success &= rtc.ListSpeed(this.JumpSpeed, this.MarkSpeed);
            success &= rtc.ListFrequency(this.Frequency, this.PulseWidth);
            if (success)
            {
                markerArg.PenStack.Push(this); //현재 사용중인 펜 엔티티를 펜 스텍에 삽입한다 (이는 PenReturn 을 사용할때 이전 펜 상태로 복구하는데 필요하다)
            }
            return(success);
        }
示例#2
0
 private void Marker_OnProgress(IMarker sender, IMarkerArg arg)
 {
     if (statusStrip1.InvokeRequired)
     {
         statusStrip1.Invoke(new MarkerEventHandler(Marker_OnProgress), new object[] { sender, arg });
         return;
     }
     else
     {
         pgbProgress.Value = (int)arg.Progress;
     }
 }
示例#3
0
 private void Marker_OnProgress(IMarker sender, IMarkerArg arg)
 {
     if (statusStrip1.InvokeRequired)
     {
         statusStrip1.BeginInvoke(new MethodInvoker(delegate()
         {
             pgbProgress.Value = (int)arg.Progress;
         }));
     }
     else
     {
         pgbProgress.Value = (int)arg.Progress;
     }
 }
示例#4
0
        /// <summary>
        /// 마커는 내부 쓰레드에 의해 가공 데이타를 처리하게 되는데, 이때 가공 데이타(IDocument)에
        /// 크로스 쓰레드 상태가 될수 있으므로, 준비(Prepare)시에는 가공 데이타를 모두 복제(Clone) 하여 가공시
        /// 데이타에 대한 쓰레드 안전 접근을 처리하게 된다. 또한 가공중 뷰에 의해 원본 데이타가 조작, 수정되더라도
        /// 준비(Ready) 즉 신규 데이타를 다운로드하지 않으면 아무런 영향이 없게 된다.
        /// </summary>
        /// <param name="dmarkerArgoc">가공 인자</param>
        /// <returns></returns>
        public bool Ready(IMarkerArg markerArg)
        {
            if (null == markerArg)
            {
                return(false);
            }
            if (null == markerArg.Document || null == markerArg.Rtc || null == markerArg.Laser)
            {
                return(false);
            }

            this.MarkerArg = markerArg;
            this.clonedDoc = (IDocument)this.MarkerArg.Document.Clone();
            Debug.Assert(clonedDoc != null);
            var rtc = this.MarkerArg.Rtc;

            //character set 모두 삭제
            RtcCharacterSetHelper.Clear(rtc);
            // 재등록
            bool success = true;

            for (int i = 0; i < this.clonedDoc.Layers.Count; i++)
            {
                var layer = this.clonedDoc.Layers[i];
                if (layer.IsMarkerable)
                {
                    foreach (var entity in layer)
                    {
                        var siriusText = entity as SiriusText;
                        if (null != siriusText)
                        {
                            success &= siriusText.RegisterCharacterSetIntoRtc(rtc);
                        }
                        var text = entity as Text;
                        if (null != text)
                        {
                            success &= text.RegisterCharacterSetIntoRtc(rtc);
                        }
                    }
                }
            }
            if (!success)
            {
                Logger.Log(Logger.Type.Error, $"marker [{this.Index}]: fail to register character into rtc");
            }

            this.MarkerArg.Progress = 0;
            this.OnProgress?.Invoke(this, this.MarkerArg);
            return(true);
        }
示例#5
0
        private void Marker_OnFinished(IMarker sender, IMarkerArg arg)
        {
            var span = arg.EndTime - arg.StartTime;

            if (listBox1.InvokeRequired)
            {
                listBox1.BeginInvoke(new MethodInvoker(delegate()
                {
                    listBox1.Items.Add($"{DateTime.Now.ToString()} : finished. {span.TotalSeconds:F3} sec");
                }));
            }
            else
            {
                listBox1.Items.Add($"{DateTime.Now.ToString()} : finished. {span.TotalSeconds:F3} sec");
            }
        }
示例#6
0
        /// <summary>
        /// 마커는 내부 쓰레드에 의해 가공 데이타를 처리하게 되는데, 이때 가공 데이타(IDocument)에
        /// 크로스 쓰레드 상태가 될수있으므로, 준비(Prepare)시에는 가공 데이타를 모두 복제(Clone) 하여 가공시
        /// 데이타에 대한 쓰레드 안전 접근을 처리하게 된다. 또한 가공중 뷰에 의해 원본 데이타가 조작, 수정되더라도
        /// 준비(Ready) 즉 신규 데이타를 다운로드하지 않으면 아무런 영향이 없게 된다.
        /// </summary>
        /// <param name="markerArg">가공 인자</param>
        /// <returns></returns>
        public virtual bool Ready(IMarkerArg markerArg)
        {
            if (null == markerArg)
            {
                return(false);
            }
            if (null == markerArg.Document || null == markerArg.Rtc || null == markerArg.Laser)
            {
                return(false);
            }

            this.MarkerArg = markerArg;
            this.clonedDoc = (IDocument)this.MarkerArg.Document.Clone();
            Debug.Assert(clonedDoc != null);
            this.MarkerArg.Progress = 0;
            this.OnProgress?.Invoke(this, this.MarkerArg);
            return(true);
        }
示例#7
0
        private static void Marker_OnFinished(IMarker sender, IMarkerArg arg)
        {
            var span = arg.EndTime - arg.StartTime;

            Console.WriteLine($"{sender.Name} finished : {span.ToString()} sec");
        }