/// <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); }
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; } }
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; } }
/// <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); }
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"); } }
/// <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); }
private static void Marker_OnFinished(IMarker sender, IMarkerArg arg) { var span = arg.EndTime - arg.StartTime; Console.WriteLine($"{sender.Name} finished : {span.ToString()} sec"); }