프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / KCOM / Controls / AdornerFinal.xaml.cs @ 34ac8db7

이력 | 보기 | 이력해설 | 다운로드 (75.7 KB)

1
using KCOM.Common;
2
using KCOM.Events;
3
using MarkupToPDF.Common;
4
using MarkupToPDF.Controls.Cad;
5
using MarkupToPDF.Controls.Common;
6
using MarkupToPDF.Controls.Etc;
7
using MarkupToPDF.Controls.Line;
8
using MarkupToPDF.Controls.Parsing;
9
using MarkupToPDF.Controls.Polygon;
10
using MarkupToPDF.Controls.Shape;
11
using MarkupToPDF.Controls.Text;
12
using System;
13
using System.Collections.Generic;
14
using System.Diagnostics;
15
using System.Linq;
16
using System.Text;
17
using System.Threading.Tasks;
18
using System.Windows;
19
using System.Windows.Controls;
20
using System.Windows.Controls.Primitives;
21
using System.Windows.Input;
22
using System.Windows.Media;
23
using Telerik.Windows.Controls;
24

    
25
namespace KCOM.Controls
26
{
27
    public class MyThumb : Thumb
28
    {
29
        public MyThumb()
30
        {
31
            this.Opacity = 0.6;
32
            this.MouseEnter += MyThumb_MouseEnter;
33
            this.MouseLeave += MyThumb_MouseLeave;
34
        }
35

    
36
        public void Translate(double dx, double dy, double angle)
37
        {
38
            var ratotePoint = MathHelper.RotatePoint(new Point(dx, dy), new Point(), angle);
39

    
40
            Canvas.SetLeft(this, Canvas.GetLeft(this) + ratotePoint.X);
41
            Canvas.SetTop(this, Canvas.GetTop(this) + ratotePoint.Y);
42
        }
43

    
44

    
45
        /// <summary>
46
        /// </summary>
47
        /// <param name="sender"></param>
48
        /// <param name="e"></param>
49
        private void MyThumb_MouseLeave(object sender, MouseEventArgs e)
50
        {
51
            this.Opacity = 0.6;
52
        }
53

    
54
        /// <summary>
55
        /// 
56
        /// </summary>
57
        /// <param name="sender"></param>
58
        /// <param name="e"></param>
59
        private void MyThumb_MouseEnter(object sender, MouseEventArgs e)
60
        {
61
            this.Opacity = 1.0;
62
        }
63
    }
64

    
65
    /// <summary>
66
    /// Interaction logic for AdornerFinal.xaml
67
    /// </summary>
68
    public class AdornerMember
69
    {
70
        public UIElement DrawingData { get; set; }
71
        public ControlType Drawingtype { get; set; }
72
        public double DrawingAngle { get; set; }
73
        public List<MyThumb> ThumbList { get; set; }
74
        public string Symbol_ID { get; set; }
75
        public long Group_ID { get; set; }
76

    
77
        /// <summary>
78
        /// update thumb
79
        /// </summary>
80
        public void UpdateThumb()
81
        {
82
            var path = this.DrawingData as IPath;
83
            for (int i = 0; i < path.PointSet.Count; ++i)
84
            {
85
                Canvas.SetLeft(this.ThumbList[i], path.PointSet[i].X);
86
                Canvas.SetTop(this.ThumbList[i], path.PointSet[i].Y);
87
            }
88

    
89
            if (this.DrawingData is ArrowTextControl ArrowTextCtrl)
90
            {
91
                if (!ArrowTextCtrl.isTrans) //trans가 True인경우
92
                {
93
                    List<Point> ps = new List<Point>();
94

    
95
                    var temp = this.DrawingData as ArrowTextControl;
96
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
97
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
98
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
99
                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
100

    
101
                    if (temp.isFixed)
102
                    {
103
                        var endP = MathSet.getNearPoint(ps, temp.MidPoint);
104
                        var testP = endP;
105
                        if (ps[0] == endP) //상단
106
                        {
107
                            testP = new Point(endP.X, endP.Y - 50);
108
                        }
109
                        else if (ps[1] == endP) //하단
110
                        {
111
                            testP = new Point(endP.X, endP.Y + 50);
112
                        }
113
                        else if (ps[2] == endP) //좌단
114
                        {
115
                            testP = new Point(endP.X - 50, endP.Y);
116
                        }
117
                        else if (ps[3] == endP) //우단
118
                        {
119
                            testP = new Point(endP.X + 50, endP.Y);
120
                        }
121
                        Canvas.SetLeft(this.ThumbList[1], testP.X);
122
                        Canvas.SetTop(this.ThumbList[1], testP.Y);
123
                    }
124
                    else
125
                    {
126
                        var endP = MathSet.getNearPoint(ps, temp.MidPoint);
127
                        var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
128
                        Canvas.SetLeft(this.ThumbList[1], tempP.X);
129
                        Canvas.SetTop(this.ThumbList[1], tempP.Y);
130
                    }
131
                }
132
            }
133
        }
134

    
135
        /// <summary>
136
        /// rotate members about given position and angle
137
        /// </summary>
138
        /// <param name="at"></param>
139
        /// <param name="angle">in degree</param>
140
        public void RotateAbout(Point at, double angle)
141
        {
142
            for (int i = 0; i < (this.DrawingData as IPath).PointSet.Count; i++)
143
            {
144
                (this.DrawingData as IPath).PointSet[i] = MathSet.RotateAbout(at, (this.DrawingData as IPath).PointSet[i], angle);
145
            }
146
            (this.DrawingData as CommentUserInfo).UpdateControl();
147

    
148
            this.UpdateThumb();
149
        }
150
    }
151

    
152
    public partial class AdornerFinal : UserControl
153
    {
154
        public TextBox editTextBox { get; set; }
155
        #region 공용 인스턴스
156
        public List<AdornerMember> Members { get; } = new List<AdornerMember>();
157
        public Dictionary<Thumb, DragData> _dragData = new Dictionary<Thumb, DragData>();
158

    
159
        private List<double> AlignedAngles {get;} = new List<double>() { 0, 30, 45, 60, 90, 120, 135, 150, 180, 210, 225, 240, 270, 300, 315, 330, 360 };
160

    
161
        /// <summary>
162
        /// 회전 시작할때의 각도
163
        /// </summary>
164

    
165
        private double angleValue;
166
        public double AngleValue { get => angleValue;
167
            set
168
            {
169
                if(angleValue != value)
170
                {
171
                    angleValue = value;
172
                }
173
            }
174
        }
175

    
176
        /// <summary>
177
        /// Axis Lock을 적용하지 않는 실제 회전 각도
178
        /// </summary>
179
        private double _ActualAngle { get; set; }
180

    
181
        public bool IsTextAngle = false;
182
        public Rect BorderSize { get; set; }
183
        public bool TextCompensation = false;
184
        public bool isDragging { get; set; }
185
        public Thumb DraggerThumb { get; set; }
186
        public RadDropDownButton dropData;
187
        public RadCalendar dropCalendar;
188
        public Thumb mainDragThumb { get; set; }
189

    
190
        private bool disposed;
191

    
192
        public Point reSizePoint { get; set; }
193
        private Point RotatedPoint { get; set; } /// 2018.05.09 added by humkyung
194
        private Point MouseDownPoint = new Point();
195
        private Point CurrentMousePoint = new Point();
196
        #endregion
197
        #region 생성자
198
        private void RadDropDownButton_Loaded(object sender, RoutedEventArgs e)
199
        {
200
            dropData = sender as RadDropDownButton;
201
        }
202

    
203
        private void Date_Calendar_Loaded(object sender, RoutedEventArgs e)
204
        {
205
            dropCalendar = sender as RadCalendar;
206
            dropCalendar.SelectionChanged += (sen, ea) =>
207
            {
208
                dropData.IsOpen = false;
209
                if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "DateControl")
210
                {
211
                    DateControl data = (this.Members.First() as AdornerMember).DrawingData as DateControl;
212
                    data.Text = dropCalendar.SelectedDate.Value.ToShortDateString();
213
                }
214
            };
215
        }
216

    
217
        public AdornerFinal()
218
        {
219
            InitializeComponent();
220
            BorderSize = new Rect();
221
            _dragData.Add(rotateTop, new DragData() { CursorAngle = 0, DragType = DragType.Rotate, RotateIsLeft = true, RotateIsTop = true });
222
        }
223

    
224
        ~AdornerFinal()
225
        {
226
            this.Dispose(false);
227
        }
228

    
229
        public void Dispose()
230
        {
231
            this.Dispose(true);
232
            GC.SuppressFinalize(this);
233
        }
234

    
235
        protected virtual void Dispose(bool disposing)
236
        {
237
            if (this.disposed) return;
238
            if (disposing)
239
            {
240
                foreach (var member in this.Members)
241
                {
242
                    if(!Common.ViewerDataModel.Instance.MarkupControls_USER.Contains(member.DrawingData))
243
                        Common.ViewerDataModel.Instance.MarkupControls_USER.Add(member.DrawingData as CommentUserInfo);
244
                }
245
                // IDisposable 인터페이스를 구현하는 멤버들을 여기서 정리합니다.
246
            }
247
            // .NET Framework에 의하여 관리되지 않는 외부 리소스들을 여기서 정리합니다.
248
            this.disposed = true;
249
        }
250

    
251
        void DragThumb_Loaded(object sender, RoutedEventArgs e)
252
        {
253
            mainDragThumb = DragThumb;
254
        }
255

    
256
        public AdornerFinal(CommentUserInfo objectData) : this()
257
        {
258
            InitializeComponent();
259
            objectData.IsHitTestVisible = false;
260

    
261
            if ((objectData as ArrowTextControl) != null)
262
            {
263
                (objectData as ArrowTextControl).Base_TextBox.Focusable = true;
264
            }
265

    
266
            Canvas.SetZIndex(objectData, 84);
267
            try
268
            {
269
                ViewerDataModel.Instance.MarkupControls_USER.Remove(objectData);
270
                this.ContainerContent.Children.Add(objectData);
271
            }
272
            catch (Exception ex)
273
            {
274

    
275
            }
276
           
277
            SetAdornerMember(objectData as CommentUserInfo);
278
            this.Focus();
279
        }
280

    
281
        public AdornerFinal(List<CommentUserInfo> objectData) : this()
282
        {
283
            InitializeComponent();
284
            foreach (var item in objectData)
285
            {
286
                //item.IsHitTestVisible = false;
287
                if ((item as ArrowTextControl) != null)
288
                {
289
                    (item as ArrowTextControl).Base_TextBox.Focusable = true;
290
                }
291
                try
292
                {
293
                    Canvas.SetZIndex(item, 80);
294
                    ViewerDataModel.Instance.MarkupControls_USER.Remove(item);
295
                    this.ContainerContent.Children.Add(item);
296
                }
297
                catch //(Exception ex)
298
                {
299
                }
300
                finally
301
                {
302
                    
303
                }
304
            }
305
            this.SetAdornerMember(objectData);
306
            this.Focus();
307
        }
308

    
309
        public Point Centeroid
310
        {
311
            get
312
            {
313
                List<Point> pts = new List<Point>();
314

    
315
                #region 센터 포인트 구하기 (그룹핑)
316
                foreach (var item in this.Members)
317
                {
318
                    if (item.DrawingData.GetType().Name == "TextControl")
319
                    {
320
                        if (AngleValue == 0)
321
                        {
322
                            AngleValue = (item.DrawingData as TextControl).CommentAngle;
323
                        }
324
                        double X = Canvas.GetLeft((item.DrawingData as TextControl));
325
                        double Y = Canvas.GetTop((item.DrawingData as TextControl));
326
                        pts.Add(new Point(X, Y));
327
                    }
328
                    else
329
                    {
330
                        pts.AddRange((item.DrawingData as IPath).PointSet);
331
                    }
332
                }
333
                #endregion
334

    
335
                return MathSet.FindCentroid(pts);
336
            }
337
        }
338

    
339
        #endregion
340
        #region 메서드
341
        public Rect getAdornerSize()
342
        {
343
            return BorderSize;
344
        }
345
        public void addMemberControl(UIElement objectData)
346
        {
347
            this.ContainerContent.Children.Add(objectData);
348
            SetAdornerMember(objectData as CommentUserInfo);
349
            this.Focus();
350
        }
351

    
352
        private void TextControlLostFocus(object sender,RoutedEventArgs e)
353
        {
354
            TextCompensation = false;
355
            BorderUpdate();
356

    
357
            if (sender is TextBox)
358
            {
359
                if ((sender as TextBox).Text == "") //보류
360
                {
361
                    this.ContainerContent.Children.Remove((sender as TextBox).Parent as MarkupToPDF.Common.CommentUserInfo);
362
                    this.Visibility = Visibility.Collapsed;
363
                }
364
            }
365
        }
366

    
367
        private void TextControlPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
368
        {
369
            if (sender is TextControl)
370
            {
371
                TextCompensation = true;
372
                BorderUpdate();
373
            }
374
        }
375

    
376
        private void TextControlSelectionChanged(object sender, RoutedEventArgs e)
377
        {
378
            BorderUpdate();
379
        }
380

    
381
        
382
        private void ViewBoxRotate(UIElement member)
383
        {
384
            AdornerBorder.RenderTransformOrigin = new Point(0.5, 0.5);
385
            DragThumb.RenderTransformOrigin = new Point(0.5, 0.5);
386
            AdornerBorder.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).CommentAngle };
387
            DragThumb.RenderTransform = new RotateTransform() { Angle = (member as IViewBox).CommentAngle };
388
        }
389

    
390
        /// <summary>
391
        /// UIElement를 종류에 맞게 등록시킴
392
        /// </summary>
393
        /// <param name="member">UIElement 타입으로 BaseLayer에 있는 것들이 들어옵니다.</param>
394
        public void SetAdornerMember(MarkupToPDF.Common.CommentUserInfo member)
395
        {
396
            switch (member.GetType().Name)
397
            {
398
                #region 컨트롤 조건
399
                case "LineControl":
400
                case "PolygonControl":
401
                case "ArrowControl":
402
                case "ArcControl":
403
                case "ArrowArcControl":
404
                case "ArrowControl_Multi":
405
                case "RectangleControl":
406
                case "TriControl":
407
                case "CircleControl":
408
                case "CloudControl":
409
                case "RectCloudControl":
410
                case "InkControl":
411
                case "InsideWhiteControl":
412
                case "OverlapWhiteControl":
413
                case "ClipWhiteControl":
414
                case "CoordinateControl":
415
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
416
                    _ActualAngle = AngleValue = member.CommentAngle;
417
                    break;
418
                case "ArrowTextControl":
419
                    this.Members.Add(new AdornerMember
420
                    {
421
                        DrawingData = member,
422
                        Drawingtype = ControlType.ArrowTextControl,
423
                        ThumbList = new List<MyThumb>(),
424
                        Symbol_ID = member.SymbolID,
425
                        Group_ID = member.GroupID,
426
                    });
427
                    (member as ArrowTextControl).Base_TextBox.IsHitTestVisible = false;
428
                    _ActualAngle = AngleValue = (member as ArrowTextControl).CommentAngle;
429

    
430
                    ((ArrowTextControl)member).Base_TextBox.LostFocus += TextControlLostFocus;
431
                    break;
432
                case "ImgControl":
433
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
434
                    _ActualAngle = AngleValue = (member as ImgControl).CommentAngle;
435
                    break;
436
                case "DateControl":
437
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
438
                    _ActualAngle = AngleValue = (member as DateControl).CommentAngle;
439
                    break;
440
                case "SignControl":
441
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
442
                    _ActualAngle = AngleValue = (member as SignControl).CommentAngle;
443
                    break;
444
                case "SymControl":
445
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
446
                    _ActualAngle = AngleValue = (member as SymControl).CommentAngle;
447
                    break;
448
                case "SymControlN":
449
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = member.ControlType, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
450
                    _ActualAngle = AngleValue = (member as SymControlN).CommentAngle;
451
                    break;
452
                case "TextControl":
453
                    this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.TextControl, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
454
                    RectangleGeometry Data = new RectangleGeometry
455
                    {
456
                        Rect = new Rect()
457
                        {
458
                            X = Canvas.GetLeft((member as TextControl)),
459
                            Y = Canvas.GetTop((member as TextControl)),
460
                            Width = (member as TextControl).Base_TextBlock.ActualWidth / 2,
461
                            Height = (member as TextControl).Base_TextBlock.ActualHeight / 2,
462
                        }
463
                    };
464
                    Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
465
                    Point middle = MathSet.getMiddlePoint((member as TextControl).StartPoint, endPointV);
466

    
467

    
468
                    DragThumb.RenderTransformOrigin = new Point(0.0, 0.0);
469
                    DragThumb.RenderTransform = new RotateTransform()
470
                    {
471
                        Angle = (member as TextControl).CommentAngle,
472
                    };
473

    
474
                    AdornerBorder.RenderTransformOrigin = new Point(0.0, 0.0);
475
                    AdornerBorder.RenderTransform = new RotateTransform()
476
                    {
477
                        Angle = (member as TextControl).CommentAngle,
478
                    };
479

    
480
                    ((TextControl)member).PropertyChanged += TextControlPropertyChanged;
481
                    ((TextControl)member).Base_TextBox.LostFocus += TextControlLostFocus;
482
                    break;
483
                default:
484
                    break;
485
                    #endregion
486
            }
487

    
488
            if (member.GetType().Name == "TextControl")
489
            {
490
                TextControl content = ((TextControl)member);
491
                content.StartPoint = new Point(Canvas.GetLeft(content), Canvas.GetTop(content));
492
                content.EndPoint = content.StartPoint;
493
            }
494
            else
495
            {
496
                RegistryPoint(member);
497
            }
498
            BorderUpdate();
499

    
500
            if (Common.ViewerDataModel.Instance.MarkupControls_USER.Contains(member))
501
                Common.ViewerDataModel.Instance.MarkupControls_USER.Remove(member);
502
        }
503

    
504

    
505
        public void SetAdornerMember(List<CommentUserInfo> members)
506
        {
507
            foreach (var member in members)
508
            {
509
                switch (member.GetType().Name)
510
                {
511
                    #region 컨트롤 조건
512
                    case "LineControl":
513
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.SingleLine, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
514
                        break;
515
                    case "ImgControl":
516
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ImgControl, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
517
                        break;
518
                    case "ArrowControl":
519
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowLine, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
520
                        break;
521
                    case "PolygonControl":
522
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.PolygonControl, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
523
                        break;
524
                    case "ArrowTextControl":
525
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowTextControl, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
526
                        (member as ArrowTextControl).Base_TextBox.IsHitTestVisible = false;
527
                        break;
528
                    case "ArcControl":
529
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArcLine, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
530
                        break;
531
                    case "ArrowArcControl":
532
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArcArrow, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
533
                        break;
534
                    case "DateControl":
535
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Date, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
536
                        break;
537
                    case "ArrowControl_Multi":
538
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ArrowMultiLine, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
539
                        break;
540
                    case "RectangleControl":
541
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Rectangle, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
542
                        break;
543
                    case "TriControl":
544
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Triangle, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
545
                        break;
546
                    case "CircleControl":
547
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Circle, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
548
                        break;
549
                    case "CloudControl":
550
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.PolygonCloud, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
551
                        break;
552
                    case "RectCloudControl":
553
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.RectCloud, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
554
                        break;
555
                    case "SignControl":
556
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Sign, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
557
                        break;
558
                    case "SymControl":
559
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Symbol, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
560
                        break;
561
                    case "SymControlN":
562
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Stamp, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
563
                        break;
564
                    case "InkControl":
565
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Ink, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
566
                        break;
567
                    case "TextControl":
568
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.TextControl, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
569

    
570
                        (member as TextControl).PropertyChanged += TextControlPropertyChanged;
571
                        (member as TextControl).Base_TextBox.SelectionChanged += TextControlSelectionChanged;
572

    
573
                        //Observable.FromEventPattern(((TextControl)member).Base_TextBox, "SelectionChanged").Subscribe(a =>
574
                        //{
575
                        //    BorderUpdate();
576
                        //});
577
                        //Observable.FromEventPattern(((TextControl)member), "PropertyChanged").Subscribe(a =>
578
                        //{
579
                        //    BorderUpdate();
580
                        //    try
581
                        //    {
582
                        //        ((TextControl)member).Base_TextBlock.TextDecorations = ((TextControl)member).UnderLine; 
583
                        //    }
584
                        //    catch (Exception)
585
                        //    {
586

    
587
                        //    }
588

    
589
                        //});
590
                        //Observable.FromEventPattern(((TextControl)member).Base_TextBox, "SelectionChanged").Subscribe(a =>
591
                        //{
592
                        //    BorderUpdate();
593
                        //});
594
                        break;
595
                    case "InsideWhiteControl":
596
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.InsideWhite, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
597
                        break;
598
                    case "OverlapWhiteControl":
599
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.OverlapWhite, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
600
                        break;
601
                    case "ClipWhiteControl":
602
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.ClipWhite, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
603
                        break;
604
                    case "CoordinateControl":
605
                        this.Members.Add(new AdornerMember { DrawingData = member, Drawingtype = ControlType.Coordinate, ThumbList = new List<MyThumb>(), Symbol_ID = member.SymbolID, Group_ID = member.GroupID });
606
                        break;
607
                    default:
608
                        break;
609
                        #endregion
610
                }
611
                if (member.GetType().Name == "TextControl")
612
                {
613
                    TextControl content = ((TextControl)member);
614
                    content.StartPoint = new Point(Canvas.GetLeft(content), Canvas.GetTop(content));
615
                    content.EndPoint = content.StartPoint;
616
                }
617
                else
618
                {
619
                    RegistryPoint(member, members.Count);
620
                }
621

    
622
                if (Common.ViewerDataModel.Instance.MarkupControls_USER.Contains(member))
623
                    Common.ViewerDataModel.Instance.MarkupControls_USER.Remove(member); /// remove commment from mycontrols
624
            }
625

    
626
            BorderUpdate();
627
        }
628

    
629

    
630
        /// <summary>
631
        /// Border 를 갱신
632
        /// </summary>
633
        public void BorderUpdate()
634
        {
635
            AdornerBorder.MinWidth = 10;
636
            AdornerBorder.MinHeight = 10;
637

    
638
            double minX = double.MaxValue;
639
            double minY = double.MaxValue;
640
            double maxX = double.MinValue;
641
            double maxY = double.MinValue; 
642
            double lineSize = 0;
643
            double marginSize = 0;
644
            if (this.Members.Count == 1)
645
            {
646
                if (this.Members[0].DrawingData.GetType().Name == "TextControl")
647
                {
648
                    if ((this.Members[0].DrawingData as TextControl).CommentAngle != 0)
649
                    {
650
                        trRotate.Angle = (this.Members[0].DrawingData as TextControl).CommentAngle;
651
                        trRotateThumb.Angle = (this.Members[0].DrawingData as TextControl).CommentAngle;
652
                    }
653
                    else
654
                    {
655
                        trRotate.Angle = 0;
656
                        trRotateThumb.Angle = 0;
657
                    }
658
                }
659
            }
660

    
661
            foreach (var item in this.Members)
662
            {
663
                UIElement currentControl = (item as AdornerMember).DrawingData;
664
                
665
                Point startP = (currentControl as IPath).StartPoint;
666
                Point endP = (currentControl as IPath).EndPoint;
667

    
668
                // ViewerDataModel.Instance.Angle = MathSet.returnAngle(startP, ref endP, ViewerDataModel.Instance.IsPressShift);
669

    
670
                // 컨트롤의 angle변환시 상단 anglecontrol에 출력
671
                ViewerDataModel.Instance.MarkupAngle = (currentControl as CommentUserInfo).CommentAngle;
672

    
673
                if (item.DrawingData.GetType().Name == "TextControl")
674
                {
675
                    double textControlWidth;
676
                    double textControlHeight;
677
                             
678
                    if (((currentControl as TextControl).Base_TextBox.ActualWidth) == 0)
679
                    {
680
                        textControlWidth = ((currentControl as TextControl).Base_TextBlock.ActualWidth);
681
                        textControlHeight = ((currentControl as TextControl).Base_TextBlock.ActualHeight);
682
                    }
683
                    else
684
                    {
685
                        textControlWidth = ((currentControl as TextControl).Base_TextBox.ActualWidth);
686
                        textControlHeight = ((currentControl as TextControl).Base_TextBox.ActualHeight);
687
                    }
688
                    
689
                    if ((currentControl as TextControl).EndPoint.X < minX)
690
                    {
691
                        minX = (currentControl as TextControl).EndPoint.X;
692
                    }
693

    
694
                    if ((currentControl as TextControl).EndPoint.Y < minY)
695
                    {
696
                        minY = (currentControl as TextControl).EndPoint.Y;
697
                    }
698

    
699
                    if (textControlWidth + (currentControl as TextControl).EndPoint.X > maxX)
700
                    {
701
                        maxX = textControlWidth + (currentControl as TextControl).EndPoint.X;
702
                    }
703

    
704
                    if (textControlHeight + (currentControl as TextControl).EndPoint.Y > maxY)
705
                    {
706
                        maxY = textControlHeight + (currentControl as TextControl).EndPoint.Y;
707
                    }
708
                    if ((currentControl as TextControl).ControlType_No == 2)
709
                        marginSize = (((currentControl as TextControl).Base_TextPath).ActualHeight - ((currentControl as TextControl).Base_Border).ActualHeight) / 2 + (((dynamic)currentControl).LineSize.Left / 2) + (currentControl as TextControl).ArcLength - 30;
710
                    if ((currentControl as TextControl).ControlType_No == 1)
711
                        marginSize = ((dynamic)currentControl).LineSize.Left;
712
                }
713
                else if ((currentControl as IViewBox) != null)
714
                {
715
                    IViewBox instance = currentControl as IViewBox;
716
                    List<Point> am = (currentControl as IPath).PointSet;
717
                    List<double> xSet = am.Select(p => p.X).ToList();
718
                    List<double> ySet = am.Select(p => p.Y).ToList();
719
                    if (xSet.Min() < minX) minX = xSet.Min();
720
                    if (ySet.Min() < minY) minY = ySet.Min();
721
                    if (xSet.Max() > maxX) maxX = xSet.Max();
722
                    if (ySet.Max() > maxY) maxY = ySet.Max();
723
                }
724
                else if ((currentControl as IPath).PathData == null)
725
                {
726
                    Rect rt = new Rect
727
                    {
728
                        X = (currentControl as IPath).StartPoint.X,
729
                        Y = (currentControl as IPath).StartPoint.Y,
730
                        Width = Math.Max((currentControl as IPath).EndPoint.X, (currentControl as IPath).StartPoint.X) - Math.Min((currentControl as IPath).EndPoint.X, (currentControl as IPath).StartPoint.X),
731
                        Height = Math.Max((currentControl as IPath).EndPoint.Y, (currentControl as IPath).StartPoint.Y) - Math.Min((currentControl as IPath).EndPoint.Y, (currentControl as IPath).StartPoint.Y),
732
                    };
733
                    if (rt.Left < minX) minX = rt.Left;
734
                    if (rt.Top < minY) minY = rt.Top;
735
                    if (rt.Right > maxX) maxX = rt.Right;
736
                    if (rt.Bottom > maxY) maxY = rt.Bottom;
737
                }
738
                else if ((currentControl as IPath) == null)
739
                {
740
                    Rect rt = new Rect
741
                    {
742
                        X = (currentControl as IPath).StartPoint.X,
743
                        Y = (currentControl as IPath).StartPoint.Y,
744
                        Width = (currentControl as IPath).EndPoint.X - (currentControl as IPath).StartPoint.X,
745
                        Height = (currentControl as IPath).EndPoint.Y - (currentControl as IPath).StartPoint.Y
746
                    };
747
                    if (rt.Left < minX) minX = rt.Left;
748
                    if (rt.Top < minY) minY = rt.Top;
749
                    if (rt.Right > maxX) maxX = rt.Right;
750
                    if (rt.Bottom > maxY) maxY = rt.Bottom;
751
                }
752
                else if (currentControl is CircleControl CircleCtrl)
753
                {
754
                    List<Point> am = CircleCtrl.PointSet;
755
                    lineSize = CircleCtrl.LineSize;
756
                    minX = am.Min(x => x.X);
757
                    minY = am.Min(x => x.Y);
758
                    maxX = am.Max(x => x.X);
759
                    maxY = am.Max(x => x.Y);
760
                }
761
                else 
762
                {
763
                    lineSize = ((dynamic)currentControl).LineSize;
764
                    if ((currentControl as IPath).PathData.Bounds.Left < minX) minX = (currentControl as IPath).PathData.Bounds.Left;
765
                    if ((currentControl as IPath).PathData.Bounds.Top < minY) minY = (currentControl as IPath).PathData.Bounds.Top;
766
                    if ((currentControl as IPath).PathData.Bounds.Right > maxX) maxX = (currentControl as IPath).PathData.Bounds.Right;
767
                    if ((currentControl as IPath).PathData.Bounds.Bottom > maxY) maxY = (currentControl as IPath).PathData.Bounds.Bottom;
768
                }
769
            }
770

    
771
            Rect ac = new Rect(minX , minY, maxX - minX, maxY - minY);
772
            bool addWidthSize = false;
773
            bool addHeightSize = false;
774
            if (ac.Width <= 10)
775
            {
776
                ac.Width += 10;
777
                addWidthSize = true;
778
            }
779
            if (ac.Height <= 10)
780
            {
781
                ac.Height += 10;
782
                addHeightSize = true;
783
            }
784
            BorderSize = ac;
785
            //lineSize : Thickness 굵기에 따라서 adoner 수정 
786
            ac.Width += lineSize;
787
            ac.Height += lineSize;
788
            AdornerBorder.MinWidth = 10;
789
            AdornerBorder.MinHeight = 10;
790
            AdornerBorder.Width = ac.Width;
791
            AdornerBorder.Height = ac.Height;
792
            minX -= lineSize / 2;
793
            minY -= lineSize / 2;
794
            Canvas.SetLeft(AdornerBorder, minX);
795
            Canvas.SetTop(AdornerBorder, minY);
796

    
797
            DragThumb.Width = ac.Width;
798
            DragThumb.Height = ac.Height;
799
            rotateTop.Margin = new Thickness(rotateTop.Margin.Left, -30 - marginSize, rotateTop.Margin.Right, rotateTop.Margin.Bottom);
800
            DragThumb.MinWidth = 10;
801
            DragThumb.MinHeight = 10;
802
            if (addWidthSize)
803
            {
804
                Canvas.SetLeft(DragThumb, minX - 5);
805
            }
806
            else
807
            {
808
                Canvas.SetLeft(DragThumb, minX);
809
            }
810

    
811
            if (addHeightSize)
812
            {
813
                Canvas.SetTop(DragThumb, minY - 5);
814
            }
815
            else
816
            {
817
                Canvas.SetTop(DragThumb, minY);
818
            }
819
        }
820

    
821
        /// <summary>
822
        /// UIElement 해제
823
        /// </summary>
824
        public void unRegister()
825
        {
826
            foreach (var item in this.ContainerContent.Children)
827
            {
828
                if (item is MarkupToPDF.Common.CommentUserInfo)
829
                {
830
                    (item as MarkupToPDF.Common.CommentUserInfo).IsHitTestVisible = true;
831
                }
832
            }
833
            this.ContainerContent.Children.Clear();
834
        }
835

    
836
        /// <summary>
837
        /// 각 포인트들을 등록합니다.
838
        /// </summary>
839
        /// <param name="pointset">Drawing Point</param>
840
        public void RegistryPoint(CommentUserInfo member, int cnt = 1)
841
        {
842
            int count = 0;
843
            List<Point> pts = (member as IPath).PointSet;
844
            if (member.GetType().Name == "InkControl")
845
            {
846
                pts.Clear();
847
                pts.Add(new Point((member as IPath).PathData.Bounds.X, (member as IPath).PathData.Bounds.Y));
848
                pts.Add(new Point((member as IPath).PathData.Bounds.Left, (member as IPath).PathData.Bounds.Bottom));
849
                pts.Add(new Point((member as IPath).PathData.Bounds.Right, (member as IPath).PathData.Bounds.Bottom));
850
                pts.Add(new Point((member as IPath).PathData.Bounds.Right, (member as IPath).PathData.Bounds.Top));
851
            }
852
            ControlType markT = this.Members.First(p => p.DrawingData == member).Drawingtype;
853
            double Minx = pts.Min(x => x.X);
854
            double Miny = pts.Min(x => x.Y);
855

    
856
            for (int i = 0; i < pts.Count; i++)
857
            {
858
                MyThumb tm = new MyThumb
859
                {
860
                    Style = (Style)this.LayoutRoot.Resources["ThumbResizeStyle"],
861
                };
862

    
863
                this.Members.Last().ThumbList.Add(tm);
864

    
865
                if ((markT == ControlType.ArcLine && pts[i] == (member as ArcControl).MidPoint) || (markT == ControlType.ArcArrow && pts[i] == (member as ArrowArcControl).MiddlePoint))
866
                {
867
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbArcControlStyle"];
868
                }
869
                if (member.GetType().Name == "ArrowTextControl" && i == 1)
870
                {
871
                    //if (this.Members.Count()<=1)
872
                    //{
873
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbArcControlStyle"];
874
                    List<Point> ps = new List<Point>();
875

    
876
                    if ((this.Members.First() as AdornerMember).DrawingData as ArrowTextControl != null)
877
                    {
878
                        var temp = (this.Members.First() as AdornerMember).DrawingData as ArrowTextControl;
879

    
880
                        switch (Math.Abs(temp.CommentAngle).ToString())
881
                        {
882
                            case "90":
883
                                {
884
                                    ps.Clear();
885
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
886
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); // 위 중간
887
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); // 위 오른쪽
888

    
889
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 중간
890
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 하단
891

    
892
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth / 2)); //중간 하단
893
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 하단
894

    
895
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) - temp.BoxWidth)); //오른쪽 중간
896
                                }
897
                                break;
898
                            case "270":
899
                                {
900
                                    ps.Clear();
901
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox))); //위 왼쪽
902
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); // 위 중간
903
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); // 위 오른쪽
904

    
905
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 중간
906
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox))); //왼쪽 하단
907

    
908
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth / 2)); //중간 하단
909
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 하단
910

    
911
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) - temp.BoxHeight / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxWidth)); //오른쪽 중간
912
                                }
913
                                break;
914
                            default:
915
                                {
916
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox))); //상단
917
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth / 2, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight)); // 하단
918
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox), Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2)); //좌단
919
                                    ps.Add(new Point(Canvas.GetLeft(temp.Base_TextBox) + temp.BoxWidth, Canvas.GetTop(temp.Base_TextBox) + temp.BoxHeight / 2));  //우단
920
                                }
921
                                break;
922
                        }
923

    
924
                        ArrowTextControl instance = (member as ArrowTextControl);
925
                        if (instance.isTrans)
926
                        {
927
                            //var endP = MathSet.getNearPoint(ps, temp.MidPoint);
928
                            //var tempP = MathSet.getMiddlePoint(temp.StartPoint, endP);
929
                            //list[count] = tempP;
930
                            pts[count] = temp.MidPoint;
931
                        }
932
                        else
933
                        {
934
                            if (temp.isFixed)
935
                            {
936
                                var endP = MathSet.getNearPoint(ps, temp.MidPoint);
937
                                var testP = endP;
938
                                if (ps[0] == endP) //상단
939
                                {
940
                                    testP = new Point(endP.X, endP.Y - 50);
941
                                }
942
                                else if (ps[1] == endP) //하단
943
                                {
944
                                    testP = new Point(endP.X, endP.Y + 50);
945
                                }
946
                                else if (ps[2] == endP) //좌단
947
                                {
948
                                    testP = new Point(endP.X - 50, endP.Y);
949
                                }
950
                                else if (ps[3] == endP) //우단
951
                                {
952
                                    testP = new Point(endP.X + 50, endP.Y);
953
                                }
954
                                pts[count] = testP;
955
                            }
956
                            else
957
                            {
958
                                var endP = MathSet.getNearPoint(ps, instance.MidPoint);
959
                                pts[count] = MathSet.getMiddlePoint(instance.StartPoint, endP);
960
                            }
961
                        }
962
                    }
963
                }
964

    
965
                /// ArrowTextControl text box 화면 출력
966
                if (member.GetType().Name == "ArrowTextControl" && pts[i] == pts.Last())
967
                {
968
                    tm.Style = (Style)this.LayoutRoot.Resources["ThumbTextStyle"];
969
                    tm.Width = (member as ArrowTextControl).BoxWidth;
970
                    tm.Height = (member as ArrowTextControl).BoxHeight;
971
                    var angle = (member as ArrowTextControl).PageAngle;
972
                    if (Math.Abs(angle).ToString() == "90")
973
                    {
974
                        tm.RenderTransformOrigin = new Point(0, 0);
975
                        tm.RenderTransform = new RotateTransform { Angle = 270 };
976
                    }
977
                    else if (Math.Abs(angle).ToString() == "270")
978
                    {
979
                        tm.RenderTransformOrigin = new Point(0, 0);
980
                        tm.RenderTransform = new RotateTransform { Angle = 90 };
981
                    }
982
                    else
983
                    {
984
                        tm.RenderTransformOrigin = new Point(0.5, 0.5);
985
                        tm.RenderTransform = new RotateTransform()
986
                        {
987
                            Angle = angle
988
                        };
989
                    }
990
                }
991
                
992
                if (member.GetType().Name == "CloudControl")
993
                {
994
                    if (i == pts.Count() - 1)
995
                    {
996
                        tm.Visibility = System.Windows.Visibility.Collapsed;
997
                    }
998
                }
999
                if (member.GetType().Name == "PolygonControl")
1000
                {
1001
                    if (i == pts.Count() - 1)
1002
                    {
1003
                        if ((member as PolygonControl).ControlType == ControlType.ChainLine)
1004
                        {
1005

    
1006
                        }
1007
                        else
1008
                        {
1009
                            tm.Visibility = System.Windows.Visibility.Collapsed;
1010
                        }
1011
                    }
1012
                    if ((member as PolygonControl).ControlType == ControlType.Ink)
1013
                    {
1014
                        tm.Visibility = System.Windows.Visibility.Collapsed;
1015
                    }
1016
                }
1017
                
1018
                this.ContainerContent.Children.Add(tm);
1019
                Canvas.SetLeft(tm, pts[count].X);
1020
                Canvas.SetTop(tm, pts[count].Y);
1021
                if (member.GetType().Name == "ArrowTextControl" && pts[i] == (member as ArrowTextControl).MidPoint)
1022
                {
1023
                    Canvas.SetZIndex(tm, 95);
1024
                    //tm.Opacity = 0;
1025
                    tm.DragDelta += MidPoint_DragDelta;
1026
                }
1027
                else
1028
                {
1029
                    tm.DragDelta += ResizeTm_DragDelta;
1030
                    Canvas.SetZIndex(tm, 99);
1031
                }
1032

    
1033
                tm.DragStarted += new DragStartedEventHandler(tm_DragStarted);
1034
                tm.DragCompleted += new DragCompletedEventHandler(tm_DragCompleted);
1035
                
1036
                tm.MouseMove += new MouseEventHandler(resize_MouseMove);
1037
                count++;
1038
            }
1039
        }
1040

    
1041
        private void MidPoint_DragDelta(object sender, DragDeltaEventArgs e)
1042
        {
1043
            MyThumb thumb = sender as MyThumb;
1044
            double newHorizontalChange = e.HorizontalChange;
1045
            double newVerticalChange = e.VerticalChange;
1046

    
1047
            var newpoint = MathHelper.RotatePoint(new Point(newHorizontalChange, newVerticalChange), new Point(), 0);// commentInfo.VisualPageAngle);
1048

    
1049
            var direction = VisualHelper.GetPointDirection(newpoint, ViewerDataModel.Instance.PageAngle);
1050

    
1051
            System.Diagnostics.Debug.WriteLine("뱡향 : " + direction.ToString());
1052

    
1053
            AdornerMember control = CurrentAdornerMember(thumb);
1054
            var commentInfo = (control.DrawingData) as CommentUserInfo;
1055

    
1056
            if (commentInfo is ArrowTextControl)
1057
            {
1058
                Point getThumbPoint = GetPosition(thumb);
1059

    
1060
                var arrowText = commentInfo as ArrowTextControl;
1061

    
1062
                //var midPoint = MathSet.getMiddlePoint(arrowText.StartPoint, arrowText.EndPoint);
1063
                //arrowText.MidPoint = newpoint;
1064
                thumb.Translate(newpoint.X, newpoint.Y, this.AngleValue);
1065
          
1066
                commentInfo.OnMoveCtrlPoint(getThumbPoint, newpoint.X, newpoint.Y, ViewerDataModel.Instance.IsAxisLock || ViewerDataModel.Instance.IsPressShift);
1067

    
1068
                control.UpdateThumb();
1069

    
1070
                System.Diagnostics.Debug.WriteLine($"text {Canvas.GetLeft(arrowText.Base_TextBox)},{Canvas.GetTop(arrowText.Base_TextBox)}");
1071

    
1072
                System.Diagnostics.Debug.WriteLine($"Page Angle : {ViewerDataModel.Instance.PageAngle} GetPoint : {getThumbPoint.X},{getThumbPoint.Y}  Change Value : {newpoint.X},{newpoint.Y}");
1073
            }
1074

    
1075
        }
1076
        
1077

    
1078
        /// <summary>
1079
        /// 제어점을 조정하여 크기를 수정한다.
1080
        /// </summary>
1081
        /// <param name="sender"></param>
1082
        /// <param name="e"></param>
1083
        private void ResizeTm_DragDelta(object sender, DragDeltaEventArgs e)
1084
        {
1085
            if (sender.GetType() != typeof(MyThumb)) return;
1086

    
1087
            MyThumb thumb = sender as MyThumb;
1088

    
1089
            if (this.Members.Count > 1) return;
1090

    
1091
            System.Diagnostics.Debug.WriteLine($"Value {e.HorizontalChange},{e.VerticalChange}");
1092

    
1093
            double newHorizontalChange = e.HorizontalChange;
1094
            double newVerticalChange = e.VerticalChange;
1095

    
1096
            //if (reSizePoint != new Point(0, 0))
1097
            //{
1098
                //Point setPoint = Mouse.GetPosition(Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.zoomAndPanCanvas);
1099

    
1100
                Point setPoint = GetPosition(thumb);
1101

    
1102
                //System.Diagnostics.Debug.WriteLine($"1. GetPoint : {GetPosition(thumb).X},{GetPosition(thumb).Y}  Change Value : {newHorizontalChange},{newVerticalChange}");
1103

    
1104
                AdornerMember control = CurrentAdornerMember(thumb);
1105
                var commentInfo = (control.DrawingData) as CommentUserInfo;
1106

    
1107
                double ratatePointAngle = 0;
1108

    
1109
                if (commentInfo is ArrowTextControl)
1110
                {
1111
                    var textControl = (commentInfo as ArrowTextControl);
1112

    
1113
                    if (textControl.EndPoint == MathSet.getNearPoint(textControl.PointSet, setPoint)) //(textControl.MidPoint == MathSet.getNearPoint(textControl.PointSet,setPoint) ||
1114

    
1115
                    {
1116
                        textControl.CommentAngle = 0;
1117
                        this.AngleValue = 0;
1118
                        ratatePointAngle = commentInfo.VisualPageAngle;
1119
                    }
1120
                    else
1121
                    {   
1122
                        //textControl.CommentAngle = commentInfo.VisualPageAngle + MathSet.returnAngle(textControl.StartPoint, ref tempPoint, ViewerDataModel.Instance.IsPressShift);
1123
                        textControl.OnCreatingMouseMove(textControl.EndPoint, ViewerDataModel.Instance.IsPressShift);
1124
                        this.AngleValue = textControl.CommentAngle;
1125
                        commentInfo.CommentAngle = this.AngleValue;
1126
                    }
1127
                        //CommentAngle = MathSet.returnAngle(this.StartPoint, ref tempPoint, bAxisLocked);
1128
                }
1129
                System.Diagnostics.Debug.WriteLine("## Angle : " + this.AngleValue + " ##");
1130
                thumb.Translate(newHorizontalChange, newVerticalChange, this.AngleValue);
1131

    
1132
                // 페이지회전에 따른 화살표텍스트 박스의 이동 수정
1133

    
1134
                var newpoint = MathHelper.RotatePoint(new Point(newHorizontalChange, newVerticalChange), new Point(), ratatePointAngle);// commentInfo.VisualPageAngle);
1135
     
1136
                Point thumbPoint = MathHelper.RotatePoint(setPoint, new Point(), ratatePointAngle);// commentInfo.VisualPageAngle);
1137

    
1138
                //thumbPoint.X = Math.Abs(thumbPoint.X);
1139
                //thumbPoint.Y = Math.Abs(thumbPoint.Y);
1140

    
1141
                //if ((setPoint.X + newpoint.X) < 0 || (Math.Abs(thumbPoint.X) + newpoint.X) - ViewerDataModel.Instance.ImageViewWidth > 0)
1142
                //{
1143
                //    newpoint.X = 0;
1144
                //}
1145

    
1146
                //if (setPoint.Y + newpoint.Y < 0 || (Math.Abs(thumbPoint.Y) + newpoint.Y) - ViewerDataModel.Instance.ImageViewHeight > 0)
1147
                //{
1148
                //    newpoint.Y = 0;
1149
                //}
1150

    
1151
                commentInfo.OnMoveCtrlPoint(setPoint, newpoint.X, newpoint.Y, ViewerDataModel.Instance.IsAxisLock || ViewerDataModel.Instance.IsPressShift);
1152

    
1153
                //System.Diagnostics.Debug.WriteLine($"3. GetPoint : {GetPosition(thumb).X},{GetPosition(thumb).Y}");
1154
                control.UpdateThumb();
1155

    
1156
                //System.Diagnostics.Debug.WriteLine($"4. GetPoint : {GetPosition(thumb).X},{GetPosition(thumb).Y}");
1157
                this.BorderUpdate();
1158

    
1159
               //System.Diagnostics.Debug.WriteLine($"5. GetPoint : {GetPosition(thumb).X},{GetPosition(thumb).Y}");
1160
            //}
1161
        }
1162

    
1163
        private AdornerMember CurrentAdornerMember(MyThumb thumb)
1164
        {
1165
            AdornerMember result = null;
1166

    
1167
            try
1168
            {
1169
                result = (from userThumb in this.Members
1170
                            where userThumb.ThumbList.Contains(thumb)
1171
                            select userThumb).FirstOrDefault();
1172
            }
1173
            catch (Exception ex)
1174
            {
1175
                App.FileLogger.Error(ex);
1176
            }
1177

    
1178
            return result;
1179
        }
1180

    
1181
        private Point GetPosition(Thumb thumb)
1182
        {
1183
            return new Point(Canvas.GetLeft(thumb), Canvas.GetTop(thumb));
1184
        }
1185

    
1186
        #endregion
1187
        #region 이벤트
1188

    
1189
        void tm_DragCompleted(object sender, DragCompletedEventArgs e)
1190
        {
1191
            this.isDragging = false;
1192
            DraggerThumb = null;
1193

    
1194

    
1195
            var comments = (from drawing in this.Members
1196
                            select drawing.DrawingData as CommentUserInfo).ToList();
1197
            ViewerDataModel.Instance.IsMarkupUpdate = true;
1198
        }
1199

    
1200
        /// <summary>
1201
        /// start drag
1202
        /// </summary>
1203
        /// <param name="sender"></param>
1204
        /// <param name="e"></param>
1205
        void tm_DragStarted(object sender, DragStartedEventArgs e)
1206
        {
1207
            this.DraggerThumb = sender as Thumb;
1208
            this.isDragging = true;
1209

    
1210
            if (ViewerDataModel.Instance.UndoDataList == null)
1211
            {
1212
                return;
1213
            }
1214

    
1215
            var comments = (from drawing in this.Members
1216
                            select drawing.DrawingData as CommentUserInfo).ToList();
1217

    
1218
            UndoCommand.Instance.Push(EventType.Operation, comments);
1219
        }
1220

    
1221
        private void rotate_MouseMove(object sender, MouseEventArgs e)
1222
        {
1223
            if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
1224
            {
1225
                if (LastRotateVerticalValue < e.GetPosition(this).X)
1226
                    IsTextAngle = true;
1227
                else
1228
                    IsTextAngle = false;
1229
                LastRotateVerticalValue = e.GetPosition(this).X;
1230
            }
1231
            else
1232
            {
1233
                if (e.GetPosition(this).X > LastRotateHorizontalValue)
1234
                {
1235
                    RotateFlag = true;
1236
                }
1237
                else
1238
                {
1239
                    RotateFlag = false;
1240
                }
1241
                LastRotateHorizontalValue = e.GetPosition(this).X;
1242
            }
1243
        }
1244

    
1245
        private void drag_DragStarted(object sender, DragStartedEventArgs e)
1246
        {
1247
            /// save mouse down and current mouse point
1248
            this.MouseDownPoint = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender));
1249
            this.CurrentMousePoint = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender));
1250
            /// up to here
1251

    
1252
            if (ViewerDataModel.Instance.UndoDataList == null)
1253
            {
1254
                return;
1255
            }
1256

    
1257
            var comments = (from drawing in this.Members
1258
                            select drawing.DrawingData as CommentUserInfo).ToList();
1259

    
1260
            UndoCommand.Instance.Push(EventType.Operation, comments);
1261
        }
1262

    
1263
        private void drag_DragCompleted(object sender, DragCompletedEventArgs e)
1264
        {
1265
            DragThumb.Cursor = new Cursor(App.DefaultArrowCursorStream);
1266

    
1267
            var comments = (from drawing in this.Members
1268
                            select drawing.DrawingData as CommentUserInfo).ToList();
1269
        }
1270

    
1271
        private void DragThumb_DragDelta(object sender, DragDeltaEventArgs e)
1272
        {
1273
            double scale = Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.zoomAndPanControl.ContentScale;
1274

    
1275
            var newMousePoint = Mouse.GetPosition(Window.GetWindow((DependencyObject)sender));
1276
         
1277
            var horzChange = (newMousePoint.X - this.CurrentMousePoint.X) / scale;/// Math.Round(tmp.X - this.CurrentMousePoint.X) / scale;
1278
            var vertChange = (newMousePoint.Y - this.CurrentMousePoint.Y) / scale;///Math.Round(tmp.Y - this.CurrentMousePoint.Y) / scale;
1279

    
1280
            try
1281
            {
1282
                DragThumb.Cursor = Cursors.SizeAll;
1283
                System.Diagnostics.Debug.WriteLine($"TransItem : {horzChange}, {vertChange}");
1284
                System.Diagnostics.Debug.WriteLine($"DragDeltaEventArgs : {e.HorizontalChange}, {e.VerticalChange}");
1285

    
1286

    
1287
                var mainRect = ViewerDataModel.Instance.SystemMain.dzMainMenu.mainPanel.Rect();
1288

    
1289
                mainRect = MathHelper.RotateRect(ViewerDataModel.Instance.SystemMain.dzMainMenu.mainPanel.Rect(), new Point(mainRect.Width / 2, mainRect.Height / 2), ViewerDataModel.Instance.PageAngle);
1290

    
1291
                var rect = (this.ContainerContent.FindChildByType<CommentUserInfo>() as CommentUserInfo).ItemRect; //this.AdornerBorder.Bounds(ViewerDataModel.Instance.SystemMain.dzMainMenu.mainPanel);
1292

    
1293
                var rotationRect = MathHelper.RotateRect(rect, new Point(mainRect.Width / 2, mainRect.Height / 2), ViewerDataModel.Instance.PageAngle);
1294
                
1295
                var moveDirection = mainRect.Movement(rotationRect);
1296

    
1297
                System.Diagnostics.Debug.WriteLine($"horzChange: {horzChange} , vertChange:{vertChange}");
1298

    
1299
                this.TranslateItems(horzChange, vertChange);
1300
            }
1301
            finally
1302
            {
1303
                /// update CurrentMousePoint
1304
                this.CurrentMousePoint = newMousePoint;
1305
            }
1306
        }
1307

    
1308
        /// <summary>
1309
        /// translate all members
1310
        /// </summary>
1311
        /// <param name="e"></param>
1312
        public void TranslateItems(double dx, double dy)
1313
        {
1314
            Dispatcher.BeginInvoke((Action)(() =>
1315
            {
1316
                foreach (var item in this.Members)
1317
                {
1318
                    this.TranslateItem(dx, dy, item);
1319
                }
1320

    
1321
                this.BorderUpdate();
1322
            }));
1323
        }
1324

    
1325
        /// <summary>
1326
        /// translate a item
1327
        /// </summary>
1328
        /// <param name="e"></param>
1329
        /// <param name="item"></param>
1330
        private void TranslateItem(double dx, double dy, AdornerMember item)
1331
        {
1332
            /// rotate point with page rotation
1333
            var rotation = Common.ViewerDataModel.Instance.SystemMain.dzMainMenu.rotate.Angle;
1334
            Point delta = MathSet.RotateAbout(new Point(0, 0), new Point(dx, dy), -rotation);
1335
            /// up to here
1336
            (item.DrawingData as CommentUserInfo).OnTranslate(delta.X, delta.Y);
1337

    
1338
                ViewerDataModel.Instance.SystemMain.dzMainMenu.pageNavigator.MarkupListUpdate(
1339
                        MarkupParser.MarkupToString((item.DrawingData as CommentUserInfo), App.ViewInfo.UserID), EventType.Operation, null, null);            
1340

    
1341
            item.UpdateThumb();
1342
        }
1343

    
1344
        private void resize_MouseMove(object sender, MouseEventArgs e)
1345
        {
1346
            //reSizePoint = e.GetPosition(this);
1347
        }
1348

    
1349
        /// <summary>
1350
        /// 회전
1351
        /// </summary>
1352
        /// <param name="sender"></param>
1353
        /// <param name="e"></param>
1354
        public void rotate_DragDelta(object sender, DragDeltaEventArgs e)
1355
        {
1356
            MoveRotate(e);
1357
        }
1358

    
1359
        double LastRotateHorizontalValue = 0;
1360
        double LastRotateVerticalValue = 0;
1361
        bool RotateFlag = false;
1362

    
1363
        /// <summary>
1364
        /// <history>humkyung 2018.05.09 upgrade rotate shape peformance</history>
1365
        /// </summary>
1366
        /// <param name="e"></param>
1367
        public void MoveRotate(DragDeltaEventArgs e)
1368
        {
1369
            Point CenterPoint = this.Centeroid;
1370
            Point pt = Mouse.GetPosition(this);
1371

    
1372
            #region X축 기준으로 회전 각도를 구한다.
1373
            Vector AxisX = new Vector(RotatedPoint.X - CenterPoint.X, RotatedPoint.Y - CenterPoint.Y);
1374
            AxisX.Normalize();
1375
            Vector AxisY = new Vector(pt.X - CenterPoint.X, pt.Y - CenterPoint.Y);
1376
            AxisY.Normalize();
1377
            double dDeltaAngle = Vector.AngleBetween(AxisX, AxisY);
1378
            #endregion
1379

    
1380
            _ActualAngle += dDeltaAngle;
1381
            if (_ActualAngle > 360) _ActualAngle -= 360;
1382
            if (_ActualAngle < 0) _ActualAngle += 360;
1383
            #region AxisLock이 설정되어 있는 경우 Angle을 특정 값으로 정렬한다.
1384
            if (ViewerDataModel.Instance.IsAxisLock || ViewerDataModel.Instance.IsPressShift)
1385
            {
1386
                double tmp = AlignedAngles.OrderBy(x => Math.Abs(_ActualAngle - x)).First();
1387
                dDeltaAngle = tmp - AngleValue;
1388
                AngleValue = tmp;
1389
            }
1390
            else
1391
            {
1392
                AngleValue = _ActualAngle;
1393
            }
1394
            #endregion
1395

    
1396
            /// save rotatePoint
1397
            this.RotatedPoint = pt;
1398

    
1399
            Dispatcher.BeginInvoke((Action)(() =>
1400
            {
1401
                foreach (var member in this.Members)
1402
                {
1403
                    member.RotateAbout(CenterPoint, dDeltaAngle); 
1404
                    #region 보더 업데이트
1405
                    switch (member.Drawingtype)
1406
                    {
1407
                        case ControlType.TextControl:
1408
                            (member.DrawingData as CommentUserInfo).CommentAngle = AngleValue;
1409

    
1410
                            DragThumb.RenderTransformOrigin = new Point(0, 0);
1411
                            DragThumb.RenderTransform = new RotateTransform()
1412
                            {
1413
                                Angle = (member.DrawingData as CommentUserInfo).CommentAngle
1414
                            };
1415

    
1416
                            AdornerBorder.RenderTransformOrigin = new Point(0, 0);
1417
                            AdornerBorder.RenderTransform = new RotateTransform()
1418
                            {
1419
                                Angle = (member.DrawingData as CommentUserInfo).CommentAngle
1420
                            };
1421

    
1422
                            (member.DrawingData as CommentUserInfo).UpdateControl();
1423
                            BorderUpdate();
1424
                            break;
1425

    
1426
                        case ControlType.ArrowMultiLine:
1427
                        case ControlType.ArcLine:
1428
                        case ControlType.ArcArrow:
1429
                        case ControlType.SingleLine:
1430
                        case ControlType.Triangle:
1431
                        case ControlType.ArrowTextControl:
1432
                        case ControlType.PolygonControl:
1433
                        case ControlType.Ink:
1434
                            BorderUpdate();
1435
                            break;
1436
                        case ControlType.Date:
1437
                        case ControlType.RectCloud:
1438
                        case ControlType.Rectangle:
1439
                        case ControlType.ImgControl:
1440
                        case ControlType.Sign:
1441
                        case ControlType.Symbol:
1442
                        case ControlType.Stamp:
1443
                            (member.DrawingData as CommentUserInfo).CommentAngle = AngleValue;
1444
                            BorderUpdate();
1445
                            break;
1446
                        case ControlType.PolygonCloud:
1447
                            ((ICloudControl)member.DrawingData).DrawingCloud();
1448
                            BorderUpdate();
1449
                            break;
1450
                        case ControlType.Circle:
1451
                            (member.DrawingData as CommentUserInfo).CommentAngle = AngleValue;
1452
                            ((CircleControl)member.DrawingData).SetCenterXY();
1453
                            BorderUpdate();
1454
                            break;
1455
                        default:
1456
                            break;
1457
                    }
1458
                }
1459
                #endregion
1460
            }));
1461
        }
1462

    
1463
        /// <summary>
1464
        /// 객체 회전 시작
1465
        /// </summary>
1466
        /// <param name="sender"></param>
1467
        /// <param name="e"></param>
1468
        private void rotate_DragStarted(object sender, DragStartedEventArgs e)
1469
        {            
1470
            this.RotatedPoint = Mouse.GetPosition(this); /// 2018.05.09 added by humkyung
1471
            rotateTop.Cursor = Cursors.SizeAll;
1472

    
1473
            /// get angle from text controls' angle if only text control exists - 2018.05.10 added by humkyung
1474
            if ((1 == this.Members.Count) && (this.Members[0]).DrawingData.GetType().Name == "TextControl")
1475
            {
1476
                this.AngleValue = ((this.Members[0]).DrawingData as TextControl).CommentAngle;
1477
            }
1478
            /// up to here
1479

    
1480
            if (ViewerDataModel.Instance.UndoDataList == null)
1481
            {
1482
                return;
1483
            }
1484

    
1485
            var comments = (from drawing in this.Members
1486
                            select drawing.DrawingData as CommentUserInfo).ToList();
1487
            UndoCommand.Instance.Push(EventType.Operation, comments);
1488
        }
1489
        
1490
        private void rotate_DragCompleted(object sender, DragCompletedEventArgs e)
1491
        {
1492
            rotateTop.Cursor = new Cursor(App.DefaultArrowCursorStream);
1493

    
1494
            var comments = (from drawing in this.Members
1495
                            select drawing.DrawingData as CommentUserInfo).ToList();
1496
        }
1497

    
1498
        public void ControlPointMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
1499
        {
1500
            AdornerMember control = this.Members.FirstOrDefault();
1501

    
1502
            if ((control.DrawingData as ArrowTextControl) != null)
1503
            {
1504
                if ((control.DrawingData as ArrowTextControl).isTrans == false && (control.DrawingData as ArrowTextControl).isFixed == false)
1505
                {
1506
                    (control.DrawingData as ArrowTextControl).isTrans = true;
1507
                }
1508
            }
1509

    
1510
        }
1511

    
1512
        public void TextControlChanger()
1513
        {
1514
            if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
1515
            {
1516
                TextControl AllControl = (this.Members.First() as AdornerMember).DrawingData as TextControl;
1517
                AllControl.Base_TextBox.Focus();
1518
                AllControl.Base_TextBox.Visibility = Visibility.Visible;
1519
                AllControl.Base_TextBlock.Visibility = Visibility.Collapsed;
1520
                AllControl.Base_TextBox.IsHitTestVisible = true;
1521
                AllControl.IsEditingMode = true;
1522
                AllControl.Base_TextBox.Focus();
1523

    
1524
                AllControl.SizeChanged += (sen, ea) =>
1525
                {
1526
                    if (AllControl.Base_TextBox != null)
1527
                    {
1528
                        RectangleGeometry Data = new RectangleGeometry
1529
                        {
1530
                            Rect = new Rect()
1531
                            {
1532
                                X = AllControl.StartPoint.X,
1533
                                Y = AllControl.StartPoint.Y,
1534
                                Width = AllControl.Base_TextBox.Width,
1535
                                Height = AllControl.Base_TextBox.Height,
1536
                            }
1537
                        };
1538

    
1539
                        Point endPointV = new Point(Data.Bounds.Right, Data.Bounds.Bottom);
1540
                        Point middle = MathSet.getMiddlePoint(AllControl.StartPoint, endPointV);
1541
                        AllControl.Base_Grid.RenderTransform = new RotateTransform()
1542
                        {
1543
                            Angle = AllControl.CommentAngle,
1544
                            CenterX = middle.X,
1545
                            CenterY = middle.Y,
1546
                        };
1547
                    }
1548
                    BorderUpdate();
1549
                };
1550
            }
1551
        }
1552

    
1553
        private void RectThumb_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) //더블클릭
1554
        {
1555
            if (e.ClickCount == 2 && this.Members.Count == 1)
1556
            {
1557
                if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "TextControl")
1558
                {
1559
                    SelectionSet.Instance.UnSelect(ViewerDataModel.Instance.SystemMain.dzMainMenu);
1560
                    TextControlChanger();                    
1561
                }
1562

    
1563
                else if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "ArrowTextControl")
1564
                {
1565
                    ArrowTextControl AllControl = (this.Members.First() as AdornerMember).DrawingData as ArrowTextControl;
1566
                    Thumb tm = (this.Members.First() as AdornerMember).ThumbList.Last();
1567
               
1568
                    //ArrowControl TextBox Thumb없애기
1569
                    tm.Visibility = Visibility.Collapsed;
1570

    
1571
                    ((this.Members.First() as AdornerMember).DrawingData as ArrowTextControl).Base_TextBox.IsHitTestVisible = true;
1572
                    SelectionSet.Instance.UnSelect(ViewerDataModel.Instance.SystemMain.dzMainMenu);
1573

    
1574
                    ((ArrowTextControl)AllControl).Base_TextBox.Focus();
1575
                    
1576

    
1577
                    ((ArrowTextControl)AllControl).Base_TextBox.SizeChanged += (sen, ea) =>
1578

    
1579
                    {
1580
                        tm.Width = (AllControl as ArrowTextControl).BoxWidth;
1581
                        tm.Height = (AllControl as ArrowTextControl).BoxHeight;
1582

    
1583
                        List<Point> ps = new List<Point>();
1584
                        
1585
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth / 2, Canvas.GetTop(AllControl.Base_TextBox))); //상단
1586
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth / 2, Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight)); // 하단
1587
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox), Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight / 2)); //좌단
1588
                        ps.Add(new Point(Canvas.GetLeft(AllControl.Base_TextBox) + AllControl.BoxWidth, Canvas.GetTop(AllControl.Base_TextBox) + AllControl.BoxHeight / 2));  //우단
1589

    
1590

    
1591

    
1592

    
1593
                        var endP = MathSet.getNearPoint(ps, AllControl.MidPoint);
1594
                        var tempP = MathSet.getMiddlePoint(AllControl.StartPoint, endP);
1595
                        if (AllControl.isTrans)
1596
                        {
1597
                            Canvas.SetLeft((this.Members.First() as AdornerMember).ThumbList[1], AllControl.MidPoint.X);
1598
                            Canvas.SetTop((this.Members.First() as AdornerMember).ThumbList[1], AllControl.MidPoint.Y);
1599
                        }
1600
                        else
1601
                        {
1602
                            Canvas.SetLeft((this.Members.First() as AdornerMember).ThumbList[1], tempP.X);
1603
                            Canvas.SetTop((this.Members.First() as AdornerMember).ThumbList[1], tempP.Y);
1604
                        }
1605

    
1606

    
1607
                        BorderUpdate();
1608

    
1609
                    };
1610
                }
1611
                else if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "DateControl")
1612
                {
1613
                    DateControl data = (this.Members.First() as AdornerMember).DrawingData as DateControl;
1614
                    CalendarControl instanceCal = new CalendarControl(data.Text);
1615
                    //dropData.IsOpen = true;
1616
                    RadWindow rc = new RadWindow();
1617
                    rc.Width = 300;
1618
                    rc.Height = 300;
1619
                    rc.Header = "Change Date";
1620
                    rc.Content = instanceCal;
1621
                    rc.BorderThickness = new Thickness(3);
1622
                    rc.ResizeMode = ResizeMode.NoResize;
1623
                    rc.WindowStartupLocation = WindowStartupLocation.CenterScreen;
1624
                    rc.ModalBackground = new SolidColorBrush(Colors.Black);
1625
                    rc.ModalBackground.Opacity = 0.6;
1626
                    Telerik.Windows.Controls.StyleManager.SetTheme(rc, new Telerik.Windows.Controls.Windows8Theme());
1627
                    instanceCal.changeDateCal.SelectionChanged += (sen, ea) =>
1628
                    {
1629
                        data.Text = instanceCal.changeDateCal.SelectedDate.Value.ToShortDateString();
1630
                        rc.Close();
1631
                    };
1632
                    rc.ShowDialog();
1633
                    //CalendarControl.xaml
1634
                }
1635
                else if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "ArcControl")
1636
                {
1637
                    ArcControl instance = ((this.Members.First() as AdornerMember).DrawingData as ArcControl);
1638
                    if (instance.isTransOn)
1639
                    {
1640
                        instance.isTransOn = false;
1641
                    }
1642
                    else
1643
                    {
1644
                        instance.isTransOn = true;
1645
                    }
1646
                    ///instance.SetArcPath();
1647
                    BorderUpdate();
1648
                }
1649
                else if ((this.Members.First() as AdornerMember).DrawingData.GetType().Name == "ArrowArcControl")
1650
                {
1651
                    ArrowArcControl instance = ((this.Members.First() as AdornerMember).DrawingData as ArrowArcControl);
1652
                    if (instance.isTransOn)
1653
                    {
1654
                        instance.isTransOn = false;
1655
                    }
1656
                    else
1657
                    {
1658
                        instance.isTransOn = true;
1659
                    }
1660
                    instance.SetArcPath();
1661
                    BorderUpdate();
1662
                }
1663

    
1664
            }
1665
            
1666
        }
1667
        #endregion
1668

    
1669
        private void DragThumb_MouseDoubleClick(object sender, MouseButtonEventArgs e)
1670
        {
1671
            if ((this.Members[0] as AdornerMember).DrawingData.GetType().Name == "TextControl" 
1672
                || (this.Members[0] as AdornerMember).DrawingData.GetType().Name == "ArrowTextControl")
1673
            {
1674
                DragThumb.Visibility = Visibility.Collapsed;
1675
            }
1676
        }
1677
    }
1678
}
클립보드 이미지 추가 (최대 크기: 500 MB)